@annalib/anna-core 31.7.12 → 31.7.13

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.
@@ -248,6 +248,7 @@ export class AnnaFilterService {
248
248
  "projectedImps",
249
249
  "postedGrp",
250
250
  "projectedGrp",
251
+ "bookedRtg",
251
252
  ];
252
253
  const calendarArr = [
253
254
  "period",
@@ -1521,4 +1522,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1521
1522
  providedIn: "root",
1522
1523
  }]
1523
1524
  }], ctorParameters: () => [{ type: i1.AnnaDateTimeFormatService }, { type: i2.AnnaSortService }] });
1524
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBYyxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFbEUsT0FBTyxLQUFnQixNQUFNLE9BQU8sQ0FBQztBQUNyQyxPQUFPLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sU0FBUyxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRzVFLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsaUNBQWlDO0FBQ2pDLE9BQU8sRUFBRSx5QkFBeUIsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUt0RCxNQUFNLE9BQU8saUJBQWlCO2FBNkNaLGVBQVUsR0FBRyxFQUFFLEFBQUwsQ0FBTTtJQUs5QixZQUNZLHFCQUFnRCxFQUNoRCxlQUFnQztRQURoQywwQkFBcUIsR0FBckIscUJBQXFCLENBQTJCO1FBQ2hELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQW5ENUMsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsdUJBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQWMvQix3QkFBbUIsR0FBYSxFQUFFLENBQUM7UUFLbkMsZ0NBQTJCLEdBQUcseUJBQXlCLENBQUM7UUFDeEQsNEJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBRS9CLHNCQUFpQixHQUFHLElBQUksR0FBRyxDQUFDO1lBQ3hCLFFBQVE7WUFDUixLQUFLO1lBQ0wsS0FBSztZQUNMLFlBQVk7WUFDWixXQUFXO1lBQ1gsV0FBVztZQUNYLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsTUFBTTtZQUNOLFVBQVU7WUFDVixjQUFjO1lBQ2QsYUFBYTtZQUNiLFFBQVE7WUFDUixTQUFTO1lBQ1QsU0FBUztZQUNULGtCQUFrQjtZQUNsQixvQkFBb0I7WUFDcEIsV0FBVztTQUNkLENBQUMsQ0FBQztRQUdILHVCQUFrQixHQUFRLEVBQUUsQ0FBQztRQUM3QixnQ0FBMkIsR0FBWSxJQUFJLENBQUM7UUFDNUMsK0JBQTBCLEdBQUcsR0FBRyxDQUFDO1FBMlJqQyw2QkFBd0IsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFO1lBQ2hELE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWpFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDekIsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxTQUFTLElBQUksQ0FBQztZQUNsRCxDQUFDO1lBQ0QsT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ3BDLENBQUMsQ0FBQztRQUVGLDhCQUF5QixHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUU7WUFDakQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFakUsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN6QixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVMsR0FBRyxDQUFDO1lBQ2xELENBQUM7WUFDRCxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BFLENBQUMsQ0FBQztRQUVGLDRCQUF1QixHQUFHLENBQUMsSUFBWSxFQUFVLEVBQUU7WUFDL0MsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFakUsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ2YsT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBaFRFLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QixLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEMsTUFBTSxTQUFTLEdBQUc7WUFDZCxZQUFZO1lBQ1osV0FBVztZQUNYLGFBQWE7WUFDYixrQkFBa0I7WUFDbEIsUUFBUTtZQUNSLE9BQU87WUFDUCxLQUFLO1lBQ0wscUJBQXFCO1lBQ3JCLHFCQUFxQjtZQUNyQixZQUFZO1lBQ1osWUFBWTtZQUNaLFVBQVU7WUFDVixTQUFTO1lBQ1QsS0FBSztZQUNMLE1BQU07WUFDTixLQUFLO1lBQ0wsWUFBWTtZQUNaLFlBQVk7WUFDWixZQUFZO1lBQ1osTUFBTTtZQUNOLDZCQUE2QjtZQUM3Qiw0QkFBNEI7WUFDNUIsa0JBQWtCO1lBQ2xCLFdBQVc7WUFDWCxjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLFlBQVk7WUFDWixlQUFlO1lBQ2YsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQixhQUFhO1lBQ2IsYUFBYTtZQUNiLGFBQWE7WUFDYixPQUFPO1lBQ1AsUUFBUTtZQUNSLE9BQU87WUFDUCxRQUFRO1lBQ1IsZUFBZTtZQUNmLGNBQWM7WUFDZCxlQUFlO1lBQ2YsY0FBYztZQUNkLFVBQVU7WUFDVixjQUFjO1lBQ2QsYUFBYTtZQUNiLFFBQVE7WUFDUixXQUFXO1lBQ1gsNkJBQTZCO1lBQzdCLFVBQVU7WUFDVixXQUFXO1lBQ1gsc0JBQXNCO1lBQ3RCLGNBQWM7WUFDZCxrQkFBa0I7WUFDbEIsbUJBQW1CO1lBQ25CLG1CQUFtQjtZQUNuQixxQkFBcUI7WUFDckIsaUJBQWlCO1lBQ2pCLG1CQUFtQjtZQUNuQixtQkFBbUI7WUFDbkIsa0JBQWtCO1lBQ2xCLGlCQUFpQjtZQUNqQixnQkFBZ0I7WUFDaEIsYUFBYTtZQUNiLGFBQWE7WUFDYixZQUFZO1lBQ1osYUFBYTtZQUNiLGVBQWU7WUFDZixjQUFjO1lBQ2QsWUFBWTtZQUNaLFlBQVk7WUFDWixpQ0FBaUM7WUFDakMsOEJBQThCO1lBQzlCLGlDQUFpQztZQUNqQyxrQkFBa0I7WUFDbEIsa0JBQWtCO1lBQ2xCLFlBQVk7WUFDWixpQkFBaUI7WUFDakIsV0FBVztZQUNYLFdBQVc7WUFDWCxZQUFZO1lBQ1osT0FBTztZQUNQLE9BQU87WUFDUCxjQUFjO1lBQ2QsbUJBQW1CO1lBQ25CLHlCQUF5QjtZQUN6Qiw4QkFBOEI7WUFDOUIsd0JBQXdCO1lBQ3hCLDZCQUE2QjtZQUM3QixXQUFXO1lBQ1gsa0JBQWtCO1lBQ2xCLFdBQVc7WUFDWCxXQUFXO1lBQ1gsUUFBUTtZQUNSLG1CQUFtQjtZQUNuQiw4QkFBOEI7WUFDOUIsTUFBTTtZQUNOLFNBQVM7WUFDVCxTQUFTO1lBQ1QscUJBQXFCO1lBQ3JCLHdCQUF3QjtZQUN4Qix5QkFBeUI7WUFDekIsc0JBQXNCO1lBQ3RCLFFBQVE7WUFDUixXQUFXO1lBQ1gsbUNBQW1DO1lBQ25DLDJCQUEyQjtZQUMzQixvQkFBb0I7WUFDcEIsNEJBQTRCO1lBQzVCLDhCQUE4QjtZQUM5Qiw0QkFBNEI7WUFDNUIscUJBQXFCO1lBQ3JCLDZCQUE2QjtZQUM3QiwrQkFBK0I7WUFDL0IsNkJBQTZCO1lBQzdCLHNCQUFzQjtZQUN0Qiw4QkFBOEI7WUFDOUIsOEJBQThCO1lBQzlCLHVCQUF1QjtZQUN2QiwrQkFBK0I7WUFDL0IsMkJBQTJCO1lBQzNCLG9CQUFvQjtZQUNwQiw0QkFBNEI7WUFDNUIsc0JBQXNCO1lBQ3RCLGNBQWM7WUFDZCxjQUFjO1lBQ2QsY0FBYztZQUNkLGtCQUFrQjtZQUNsQixrQkFBa0I7WUFDbEIsUUFBUTtZQUNSLFlBQVk7WUFDWixhQUFhO1lBQ2IsVUFBVTtZQUNWLGtCQUFrQjtZQUNsQixVQUFVO1lBQ1Ysa0JBQWtCO1lBQ2xCLFlBQVk7WUFDWixpQkFBaUI7WUFDakIsdUJBQXVCO1lBQ3ZCLGtCQUFrQjtZQUNsQixtQkFBbUI7WUFDbkIsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLDZCQUE2QjtZQUM3QixlQUFlO1lBQ2YsZ0JBQWdCO1lBQ2hCLGlCQUFpQjtZQUNqQixrQkFBa0I7WUFDbEIscUJBQXFCO1lBQ3JCLGFBQWE7WUFDYixjQUFjO1lBQ2QsYUFBYTtZQUNiLGNBQWM7WUFDZCxzQkFBc0I7WUFDdEIsdUJBQXVCO1lBQ3ZCLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsV0FBVztZQUNYLGFBQWE7WUFDYixRQUFRO1lBQ1IsTUFBTTtZQUNOLE1BQU07WUFDTixRQUFRO1lBQ1IsV0FBVztZQUNYLFVBQVU7WUFDVixjQUFjO1lBQ2QsYUFBYTtZQUNiLFVBQVU7WUFDVixRQUFRO1lBQ1IsWUFBWTtZQUNaLFlBQVk7WUFDWixlQUFlO1lBQ2YsV0FBVztZQUNYLGNBQWM7U0FDakIsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHO1lBQ2hCLFFBQVE7WUFDUixTQUFTO1lBQ1QsaUJBQWlCO1lBQ2pCLGVBQWU7WUFDZixNQUFNO1lBQ04sV0FBVztZQUNYLFNBQVM7WUFDVCxtQkFBbUI7WUFDbkIsYUFBYTtZQUNiLE1BQU07WUFDTixlQUFlO1lBQ2YsYUFBYTtZQUNiLG1CQUFtQjtZQUNuQixrQkFBa0I7WUFDbEIscUJBQXFCO1lBQ3JCLGlCQUFpQjtZQUNqQixXQUFXO1lBQ1gsU0FBUztZQUNULGVBQWU7U0FDbEIsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHO1lBQ1osb0JBQW9CO1lBQ3BCLGtCQUFrQjtZQUNsQixNQUFNO1lBQ04sb0JBQW9CO1lBQ3BCLGtCQUFrQjtZQUNsQix1QkFBdUI7WUFDdkIscUJBQXFCO1lBQ3JCLG1CQUFtQjtZQUNuQixjQUFjO1lBQ2QsYUFBYTtZQUNiLG1DQUFtQztZQUNuQyxpQ0FBaUM7WUFDakMsV0FBVztZQUNYLFNBQVM7U0FDWixDQUFDO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELG9CQUFvQixDQUFDLElBQVcsRUFBRSxHQUFXLEVBQUUsS0FBYztRQUN6RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRSxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxJQUFXLEVBQUUsR0FBVztRQUN4QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRSxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQWdCLEVBQUUsT0FBOEI7UUFDNUQsTUFBTSxHQUFHLEdBQWdCLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNELE1BQU0seUJBQXlCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxPQUFPLENBQUM7UUFDNUcsTUFBTSx5QkFBeUIsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUU1RyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLHlCQUF5QixDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDO1FBRUQsT0FBTyxDQUNILENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSx5QkFBeUIsQ0FBQztZQUN6RSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUkseUJBQXlCLENBQUM7WUFDekUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDckIsQ0FBQztJQUNOLENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDbEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDbkQsTUFBTSxnQkFBZ0IsR0FBZ0IsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDeEUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQy9ELElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEUsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjtRQUM5QyxPQUFPO1lBQ0gsS0FBSyxFQUFFLFFBQVE7WUFDZixJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxJQUFJO1lBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyx1QkFBdUI7U0FDMUMsQ0FBQztJQUNOLENBQUM7SUErQkQsdUJBQXVCLENBQUMsSUFBVztRQUMvQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSwwQkFBMEIsR0FBa0IsRUFBRSxDQUFDO1FBQ3JELFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUM5QiwwQkFBMEIsQ0FBQyxJQUFJLENBQzNCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUMxRyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLDBCQUEwQixDQUFDO0lBQ3RDLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyx5QkFBa0MsRUFBRSxJQUFVO1FBQ3JFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSx5QkFBeUIsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsK0JBQStCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELHFCQUFxQixDQUFDLFVBQW1CLEVBQUUseUJBQWtDLEVBQUUsSUFBVTtRQUNyRixJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDaEUsY0FBYyxHQUFHLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1FBQzFELENBQUM7YUFBTSxJQUNILElBQUksQ0FBQyxhQUFhLEtBQUssb0JBQW9CO1lBQzNDLElBQUksQ0FBQyxhQUFhLEtBQUssa0JBQWtCO1lBQ3pDLElBQUksQ0FBQyxhQUFhLEtBQUssb0JBQW9CO1lBQzNDLElBQUksQ0FBQyxhQUFhLEtBQUssa0JBQWtCO1lBQ3pDLElBQUksQ0FBQyxhQUFhLEtBQUssTUFBTTtZQUM3QixJQUFJLENBQUMsYUFBYSxLQUFLLGFBQWE7WUFDcEMsSUFBSSxDQUFDLGFBQWEsS0FBSyxtQ0FBbUM7WUFDMUQsSUFBSSxDQUFDLGFBQWEsS0FBSyxpQ0FBaUM7WUFDeEQsSUFBSSxDQUFDLGFBQWEsS0FBSyx1QkFBdUI7WUFDOUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxxQkFBcUI7WUFDNUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxtQkFBbUIsRUFDNUMsQ0FBQztZQUNDLGNBQWM7Z0JBQ1YsQ0FBQyxPQUFPLENBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FDbEQ7b0JBQ0QsQ0FBQyxJQUFJLENBQUMsZUFBZTtvQkFDckIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0IsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxjQUFjLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNwRixjQUFjO2dCQUNWLENBQUMsT0FBTyxDQUNKLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFDNUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQ2xEO29CQUNELENBQUMsSUFBSSxDQUFDLGVBQWU7b0JBQ3JCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ2hELGNBQWM7Z0JBQ1YsQ0FBQyxPQUFPLENBQ0osSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEYsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLGFBQWEsRUFBRSxDQUFDO2dCQUM5RSxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDTCxDQUFDO2FBQU0sSUFDSCxJQUFJLENBQUMsYUFBYSxLQUFLLFdBQVc7WUFDbEMsSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTO1lBQ2hDLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUTtZQUMvQixJQUFJLENBQUMsYUFBYSxLQUFLLFNBQVM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsS0FBSyxhQUFhO1lBQ3BDLElBQUksQ0FBQyxhQUFhLEtBQUssaUJBQWlCO1lBQ3hDLElBQUksQ0FBQyxhQUFhLEtBQUssZUFBZTtZQUN0QyxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU07WUFDN0IsSUFBSSxDQUFDLGFBQWEsS0FBSyxtQkFBbUI7WUFDMUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxhQUFhO1lBQ3BDLElBQUksQ0FBQyxhQUFhLEtBQUssTUFBTTtZQUM3QixJQUFJLENBQUMsYUFBYSxLQUFLLHFCQUFxQjtZQUM1QyxJQUFJLENBQUMsYUFBYSxLQUFLLGVBQWU7WUFDdEMsSUFBSSxDQUFDLGFBQWEsS0FBSyxpQkFBaUI7WUFDeEMsSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTO1lBQ2hDLElBQUksQ0FBQyxhQUFhLEtBQUssZUFBZSxFQUN4QyxDQUFDO1lBQ0MsY0FBYztnQkFDVixDQUFDLE9BQU8sQ0FDSixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzVDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN6RixJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3pHLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFVBQVU7aUJBQ3ZDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2lCQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzVELGNBQWMsR0FBRyxvQkFBb0IsR0FBRyxDQUFDLElBQUksb0JBQW9CLEtBQUssaUJBQWlCLENBQUM7UUFDNUYsQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxVQUFtQjtRQUMvQyxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUU5QyxJQUFJLFVBQVUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDN0MsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEMsQ0FBQzthQUFNLElBQUksVUFBVSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDbkQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDSixHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsc0NBQXNDLENBQUMsWUFBbUI7UUFDdEQsSUFBSSxVQUFVLEdBQUcsWUFBWSxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGVBQWU7WUFBRSxPQUFPLFVBQVUsQ0FBQztRQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ2xCLFVBQVUsR0FBRyxTQUFTLENBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsMENBQTBDLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FDM0YsQ0FBQztZQUNOLENBQUM7aUJBQU0sSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzFCLFVBQVUsR0FBRyxTQUFTLENBQ2xCLElBQUksQ0FBQyxlQUFlLENBQUMsMENBQTBDLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FDNUYsQ0FBQztZQUNOLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxVQUFVLENBQUMsWUFBbUIsRUFBRSxTQUFpQixFQUFFLGVBQXdCLEtBQUs7UUFDNUUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNoQixZQUFZLEdBQUcsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdFLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQVcsRUFBRSxFQUFFO1lBQ25ELE1BQU0sbUJBQW1CLEdBQVksR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUNwRixJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0JBQ3RCLDZDQUE2QztnQkFDN0MsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekQsQ0FBQztZQUNELElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3RixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzFCLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRyxDQUFDO3FCQUFNLElBQ0gsR0FBRyxLQUFLLFdBQVc7b0JBQ25CLEdBQUcsS0FBSyxTQUFTO29CQUNqQixHQUFHLEtBQUssV0FBVztvQkFDbkIsR0FBRyxLQUFLLFNBQVM7b0JBQ2pCLEdBQUcsS0FBSyxTQUFTO29CQUNqQixHQUFHLEtBQUssYUFBYTtvQkFDckIsR0FBRyxLQUFLLGlCQUFpQjtvQkFDekIsR0FBRyxLQUFLLGVBQWU7b0JBQ3ZCLEdBQUcsS0FBSyxNQUFNO29CQUNkLEdBQUcsS0FBSyxNQUFNO29CQUNkLEdBQUcsS0FBSyxtQkFBbUI7b0JBQzNCLEdBQUcsS0FBSyxhQUFhO29CQUNyQixHQUFHLEtBQUssTUFBTTtvQkFDZCxHQUFHLEtBQUsscUJBQXFCO29CQUM3QixHQUFHLEtBQUssa0JBQWtCO29CQUMxQixHQUFHLEtBQUssbUJBQW1CO29CQUMzQixHQUFHLEtBQUssZUFBZTtvQkFDdkIsR0FBRyxLQUFLLGlCQUFpQjtvQkFDekIsR0FBRyxLQUFLLFdBQVc7b0JBQ25CLEdBQUcsS0FBSyxTQUFTO29CQUNqQixHQUFHLEtBQUssZUFBZSxFQUN6QixDQUFDO29CQUNDLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMxRixDQUFDO3FCQUFNLElBQUksR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO29CQUMxQixZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDN0YsQ0FBQztxQkFBTSxJQUNILEdBQUcsS0FBSyxvQkFBb0I7b0JBQzVCLEdBQUcsS0FBSyxrQkFBa0I7b0JBQzFCLEdBQUcsS0FBSyxhQUFhO29CQUNyQixHQUFHLEtBQUssb0JBQW9CO29CQUM1QixHQUFHLEtBQUssa0JBQWtCO29CQUMxQixHQUFHLEtBQUssV0FBVztvQkFDbkIsR0FBRyxLQUFLLFNBQVM7b0JBQ2pCLEdBQUcsS0FBSyx1QkFBdUI7b0JBQy9CLEdBQUcsS0FBSyxxQkFBcUI7b0JBQzdCLEdBQUcsS0FBSyxNQUFNLEVBQ2hCLENBQUM7b0JBQ0MsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZHLENBQUM7cUJBQU0sSUFBSSxHQUFHLEtBQUssbUJBQW1CLElBQUksR0FBRyxLQUFLLGNBQWMsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ3JGLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDdkMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQzFELENBQUM7Z0JBQ04sQ0FBQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQzFCLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDckMsbUJBQW1CO3dCQUNmLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNoRCxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQ3hELENBQUM7Z0JBQ04sQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRLEVBQUUsR0FBVztRQUNwQyxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVEsRUFBRSxHQUFXO1FBQ2pDLE9BQU8sQ0FDSCxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRTtZQUN0QyxJQUFJLEdBQUcsSUFBSSxVQUFVLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUN4QixDQUFDO0lBQ04sQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQVUsRUFBRSxLQUFVLEVBQUUsR0FBUTtRQUNuRCxNQUFNLDZCQUE2QixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEgsTUFBTSw4QkFBOEIsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN2RixNQUFNLDhCQUE4QixHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU8sNkJBQTZCLElBQUksOEJBQThCLElBQUksOEJBQThCLENBQUM7SUFDN0csQ0FBQztJQUVELHNCQUFzQixDQUFDLEdBQVEsRUFBRSxZQUFpQjtRQUM5QyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUM7UUFDMUIsTUFBTSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRSxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1RCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUzQyxNQUFNLGtDQUFrQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUMvRSxNQUFNLHlDQUF5QyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDMUcsTUFBTSw4QkFBOEIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sdUNBQXVDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUV0RyxPQUFPLENBQ0gsQ0FBQyx5Q0FBeUMsSUFBSSx1Q0FBdUMsQ0FBQztZQUN0RixDQUFDLGtDQUFrQyxJQUFJLDhCQUE4QixDQUFDO1lBQ3RFLENBQUMsa0NBQWtDLElBQUksdUNBQXVDLENBQUM7WUFDL0UsQ0FBQyx5Q0FBeUMsSUFBSSw4QkFBOEIsQ0FBQyxDQUNoRixDQUFDO0lBQ04sQ0FBQztJQUVELCtCQUErQixDQUFDLEdBQVEsRUFBRSxZQUFpQixFQUFFLEdBQVE7UUFDakUsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUM7UUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsY0FBYyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUUsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzFFLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxZQUFZLENBQUMsWUFBWSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0RCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFDRCxJQUFJLFlBQVksQ0FBQyxXQUFXLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDaEQsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNqQyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLGNBQWMsT0FBTyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFekQsTUFBTSwrQkFBK0IsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0UsTUFBTSw2QkFBNkIsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0seUNBQXlDLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV4RyxPQUFPLENBQ0gsK0JBQStCO1lBQy9CLDZCQUE2QjtZQUM3Qix5Q0FBeUMsQ0FDNUMsQ0FBQztJQUNOLENBQUM7SUFFRCxpQ0FBaUMsQ0FBQyxHQUFRLEVBQUUsWUFBaUIsRUFBRSxHQUFXO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDO1FBQ3JDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGNBQWMsWUFBWSxDQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlFLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLFlBQVksQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUxRSxJQUFJLFlBQVksQ0FBQyxZQUFZLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUQsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELElBQUksWUFBWSxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNuRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3RCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUzRCxNQUFNLGtDQUFrQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RSxNQUFNLHlDQUF5QyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDeEcsTUFBTSw4QkFBOEIsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sdUNBQXVDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVwRyw4Q0FBOEM7UUFDOUMsV0FBVztRQUNYLGdHQUFnRztRQUNoRyxnRkFBZ0Y7UUFDaEYseUZBQXlGO1FBQ3pGLG9GQUFvRjtRQUNwRixLQUFLO1FBRUwsT0FBTyxDQUNILGtDQUFrQztZQUNsQyx5Q0FBeUM7WUFDekMsOEJBQThCO1lBQzlCLHVDQUF1QyxDQUMxQyxDQUFDO0lBQ04sQ0FBQztJQUVELHFCQUFxQixDQUFDLEdBQVEsRUFBRSxLQUFVLEVBQUUsR0FBUTtRQUNoRCxJQUFJLGFBQXFCLENBQUM7UUFDMUIsSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkIsYUFBYSxHQUFHLFlBQVksQ0FBQztZQUU3QixNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFeEMsTUFBTSx5QkFBeUIsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pGLE1BQU0sdUJBQXVCLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVyRixNQUFNLDZCQUE2QixHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzVFLE1BQU0seUJBQXlCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFcEUsT0FBTyxDQUNILENBQUMseUJBQXlCLElBQUksNkJBQTZCLENBQUM7Z0JBQzVELENBQUMsdUJBQXVCLElBQUkseUJBQXlCLENBQUMsQ0FDekQsQ0FBQztRQUNOLENBQUM7YUFBTSxJQUNILEdBQUcsS0FBSyxTQUFTO1lBQ2pCLEdBQUcsS0FBSyxpQkFBaUI7WUFDekIsR0FBRyxLQUFLLGVBQWU7WUFDdkIsR0FBRyxLQUFLLE1BQU07WUFDZCxHQUFHLEtBQUsscUJBQXFCO1lBQzdCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxlQUFlO1lBQ3ZCLEdBQUcsS0FBSyxTQUFTO1lBQ2pCLEdBQUcsS0FBSyxlQUFlLEVBQ3pCLENBQUM7WUFDQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1lBQzdCLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQ2pFLEtBQUssQ0FBQyxlQUFlLEVBQ3JCLEtBQUssQ0FBQyxlQUFlLENBQ3hCLENBQUM7WUFFRixNQUFNLHdCQUF3QixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUM5RixNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUU1RixPQUFPLG9CQUFvQixJQUFJLHdCQUF3QixJQUFJLHNCQUFzQixDQUFDO1FBQ3RGLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0sd0JBQXdCLENBQUMsVUFBaUIsRUFBRSxHQUFHLEdBQUcsY0FBYztRQUNuRSxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFOUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLENBQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNGLE1BQU0sbUJBQW1CLEdBQUc7WUFDeEIsU0FBUyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDMUIsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7U0FDekIsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUFXLEVBQUUsVUFBMkI7UUFDN0QsSUFBSSxVQUFVLEtBQUssY0FBYyxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLE9BQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBVyxFQUFFLFVBQWlCLEVBQUUsR0FBWTtRQUM3RCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNELE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzdDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELDBCQUEwQixDQUFDLFVBQWlCLEVBQUUsS0FBVTtRQUNwRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdEIsVUFBVSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLCtCQUErQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxVQUFpQixFQUFFLEtBQVU7UUFDaEQsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEYsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUM5RSxDQUFDO1FBQ0YsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFFRCxXQUFXLENBQUMsSUFBVyxFQUFFLEtBQVU7UUFDL0IsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDL0IsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hHLENBQUM7YUFBTSxJQUNILEdBQUcsS0FBSyxXQUFXO1lBQ25CLEdBQUcsS0FBSyxTQUFTO1lBQ2pCLEdBQUcsS0FBSyxXQUFXO1lBQ25CLEdBQUcsS0FBSyxTQUFTO1lBQ2pCLEdBQUcsS0FBSyxTQUFTO1lBQ2pCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxpQkFBaUI7WUFDekIsR0FBRyxLQUFLLGVBQWU7WUFDdkIsR0FBRyxLQUFLLE1BQU07WUFDZCxHQUFHLEtBQUssTUFBTTtZQUNkLEdBQUcsS0FBSyxtQkFBbUI7WUFDM0IsR0FBRyxLQUFLLGFBQWE7WUFDckIsR0FBRyxLQUFLLE1BQU07WUFDZCxHQUFHLEtBQUsscUJBQXFCO1lBQzdCLEdBQUcsS0FBSyxrQkFBa0I7WUFDMUIsR0FBRyxLQUFLLG1CQUFtQjtZQUMzQixHQUFHLEtBQUssZUFBZTtZQUN2QixHQUFHLEtBQUssaUJBQWlCO1lBQ3pCLEdBQUcsS0FBSyxXQUFXO1lBQ25CLEdBQUcsS0FBSyxTQUFTO1lBQ2pCLEdBQUcsS0FBSyxlQUFlLEVBQ3pCLENBQUM7WUFDQyxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRixDQUFDO2FBQU0sSUFBSSxHQUFHLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUIsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0YsQ0FBQzthQUFNLElBQ0gsR0FBRyxLQUFLLG9CQUFvQjtZQUM1QixHQUFHLEtBQUssa0JBQWtCO1lBQzFCLEdBQUcsS0FBSyxhQUFhO1lBQ3JCLEdBQUcsS0FBSyxvQkFBb0I7WUFDNUIsR0FBRyxLQUFLLGtCQUFrQjtZQUMxQixHQUFHLEtBQUssdUJBQXVCO1lBQy9CLEdBQUcsS0FBSyxxQkFBcUI7WUFDN0IsR0FBRyxLQUFLLE1BQU07WUFDZCxHQUFHLEtBQUssV0FBVztZQUNuQixHQUFHLEtBQUssU0FBUztZQUNqQixHQUFHLEtBQUssbUNBQW1DO1lBQzNDLEdBQUcsS0FBSyxpQ0FBaUMsRUFDM0MsQ0FBQztZQUNDLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7YUFBTSxJQUFJLEdBQUcsS0FBSyxtQkFBbUIsSUFBSSxHQUFHLEtBQUssY0FBYyxJQUFJLEdBQUcsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyRixZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RyxDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFCLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFRLEVBQUUsS0FBVSxFQUFFLEdBQVc7UUFDaEQsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLE9BQU8sS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3pFLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUNsQixJQUFJLENBQUMscUJBQXFCLENBQUMsc0JBQXNCLENBQzdDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUM1RSxDQUNKLENBQUM7WUFDRixLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FDaEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHNCQUFzQixDQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FDMUUsQ0FDSixDQUFDO1FBQ04sQ0FBQztRQUNELE1BQU0sMkJBQTJCLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEUsTUFBTSx5QkFBeUIsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5RCxNQUFNLGtDQUFrQyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0YsT0FBTywyQkFBMkIsSUFBSSx5QkFBeUIsSUFBSSxrQ0FBa0MsQ0FBQztJQUMxRyxDQUFDO0lBRUQsZ0NBQWdDLENBQUMsT0FBOEI7UUFDM0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUNyQyxJQUFJLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqRCxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6RSxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsT0FBOEI7UUFDbEQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqRCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUNwQixJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQzthQUFNLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNsQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBVTtRQUNwQixJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN0QixpREFBaUQ7UUFDakQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuQyxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNmLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7YUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFVO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDbkMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN0QyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO2FBQU0sSUFBSSxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGdIQUFnSDtJQUVoSCw4QkFBOEI7UUFDMUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUU1RCxNQUFNLHVCQUF1QixHQUFHLElBQUksQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQzFFLE1BQU0sYUFBYSxHQUNmLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZTtZQUNwQyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUM3Qyx1QkFBdUIsS0FBSyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBRXJELE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVELGtDQUFrQztRQUM5QixJQUFJLHVCQUF1QixHQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWU7WUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDNUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNqRSx1QkFBdUIsR0FBRyx1QkFBdUIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQzFFLE9BQU8sdUJBQXVCLENBQUM7SUFDbkMsQ0FBQztJQUVELDJCQUEyQixDQUN2QixNQUFjLEVBQ2QsVUFBaUIsRUFDakIscUJBQThCLEtBQUssRUFDbkMsaUJBQXlCLElBQUksQ0FBQyx1QkFBdUI7UUFFckQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUNyRCxVQUFVLEVBQ1YsTUFBTSxFQUNOLGtCQUFrQixFQUNsQixjQUFjLENBQ2pCLENBQUM7UUFFRixJQUFJLENBQUMsMEJBQTBCLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFeEYsT0FBTyxjQUFjLENBQUM7SUFDMUIsQ0FBQztJQUVELDZCQUE2QixDQUN6QixVQUFpQixFQUNqQixNQUFjLEVBQ2QscUJBQThCLEtBQUssRUFDbkMsaUJBQXlCLElBQUksQ0FBQyx1QkFBdUI7UUFFckQsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixJQUFJLGVBQWUsR0FBYSxFQUFFLENBQUM7WUFDbkMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUMxQixlQUFlLEdBQUcsQ0FBQyxHQUFHLGVBQWUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUNwRixDQUFDLENBQUMsQ0FBQztZQUNILGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDSixjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsMEJBQTBCLENBQUMsY0FBOEIsRUFBRSxNQUFjO1FBQ3JFLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzNDLGtDQUFrQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xHLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxrQ0FBa0MsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUNqRCxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLGtDQUFrQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7SUFFRCxpQ0FBaUMsQ0FBQyxjQUE4QixFQUFFLGVBQXVCO1FBQ3JGLE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUM7UUFFckUsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNmLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDO1FBQ2xELENBQUM7SUFDTCxDQUFDO0lBRUQsZ0NBQWdDLENBQUMsY0FBOEIsRUFBRSxZQUFvQjtRQUNqRixNQUFNLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RixNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDaEUsTUFBTSxxQkFBcUIsR0FBRyxNQUFNLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXBFLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixFQUFFLEdBQUcscUJBQXFCLENBQUMsQ0FBQztRQUNoRixNQUFNLHFCQUFxQixHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRTlELE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELGdDQUFnQyxDQUFDLFVBQWtCLEVBQUUsTUFBYztRQUMvRCxPQUFPLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxNQUFNLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUNwRixDQUFDO0lBRUQsa0JBQWtCLENBQUMsY0FBOEIsRUFBRSxvQkFBb0M7UUFDbkYsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUE4QixFQUFFLG9CQUFvQztRQUNsRixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFDdkIsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMxRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQWtCLEVBQUUsb0JBQW9DO1FBQzNFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDN0QsQ0FBQztJQUVELDZCQUE2QixDQUFDLGNBQThCO1FBQ3hELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2RSxNQUFNLGVBQWUsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxRSxPQUFPLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxlQUFzQjtRQUNuRCxJQUFJLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUUvQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDbEQscUJBQXFCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFeEUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNGLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDL0QsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3RELHFCQUFxQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN6RSxDQUFDO2FBQU0sQ0FBQztZQUNKLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUVELE9BQU8scUJBQXFCLENBQUM7SUFDakMsQ0FBQztJQUVELCtCQUErQixDQUFDLGNBQXNCLEVBQUUsY0FBOEI7UUFDbEYsSUFBSSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFFOUIsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQixvQkFBb0IsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFFMUcsSUFDSSxDQUFDLGNBQWM7Z0JBQ2Ysb0JBQW9CLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxNQUFNO2dCQUNyRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQzlDLENBQUM7Z0JBQ0Msb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUM7UUFDbEYsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwQixvQkFBb0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsT0FBTyxvQkFBb0IsQ0FBQztJQUNoQyxDQUFDO0lBRUQscUJBQXFCLENBQUMsYUFBdUI7UUFDekMsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQztRQUUxRSxNQUFNLGFBQWEsR0FBRyxhQUFhLElBQUksSUFBSSxJQUFJLGFBQWEsS0FBSyx1QkFBdUIsQ0FBQztRQUN6RixPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDO0lBRUQsNkJBQTZCLENBQUMsR0FBVyxFQUFFLG9CQUFvQztRQUMzRSxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQzVCLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FDekcsQ0FBQztRQUNGLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMvQixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVyxFQUFFLElBQVk7UUFDaEMsSUFBSSxhQUFhLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEUsYUFBYSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRXBFLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQywrQ0FBK0M7WUFDcEYsTUFBTSxRQUFRLEdBQUcsVUFBVSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDaEQsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEUsYUFBYSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLE1BQU0sZUFBZSxNQUFNLENBQUMsQ0FBQztRQUN4RixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBaUIsRUFBRSxHQUFXLEVBQUUsYUFBc0I7UUFDL0QsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUN0QyxJQUFJLFlBQVksS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFDRCxJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFDbkIsSUFBSSxLQUFLLENBQUM7UUFDVixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3JCLElBQUksZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQixVQUFVLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQy9CLGdCQUFnQixHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQyxDQUFDO1FBRUQsS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDekQsT0FBTyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLFVBQVUsR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDO1lBQ2xDLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQsMkNBQTJDO1FBQ3ZDLDJGQUEyRjtRQUMzRixPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELDJHQUEyRztJQUMzRywyQkFBMkIsQ0FBQyxVQUFpQjtRQUN6QyxJQUFJLFVBQVUsQ0FBQztRQUNmLHdGQUF3RjtRQUN4RixJQUNJLElBQUksQ0FBQyxhQUFhLEtBQUssUUFBUTtZQUMvQixJQUFJLENBQUMsYUFBYSxLQUFLLGtCQUFrQjtZQUN6QyxJQUFJLENBQUMsYUFBYSxLQUFLLG9CQUFvQixFQUM3QyxDQUFDO1lBQ0MsVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxRCxDQUFDO2FBQU0sQ0FBQztZQUNKLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRSxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELHVCQUF1QixDQUFDLFVBQWlCO1FBQ3JDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdkUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNuRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxVQUFpQixFQUFFLGFBQXFCO1FBQ3JFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6RyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDekcsT0FBTyxDQUFDLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELDBCQUEwQixDQUFDLFVBQWlCLEVBQUUsYUFBcUIsRUFBRSxPQUFvQixFQUFFLE9BQW9CO1FBQzNHLElBQUksZUFBZSxDQUFDO1FBQ3BCLElBQUksZUFBZSxDQUFDO1FBRXBCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUNsRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUV4RSxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2xELGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUMzRyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDaEcsQ0FBQztZQUVELElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDaEcsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztZQUN6RyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDSixlQUFlLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLGVBQWUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sQ0FBQyxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELG1DQUFtQyxDQUFDLFVBQWlCO1FBQ2pELElBQUksb0JBQW9CLEdBQW1DLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFFNUYsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ2xELG9CQUFvQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBRXZFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLCtCQUErQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JELENBQUM7UUFDTCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztZQUN0RCxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEUsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsK0JBQStCLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakQsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFFRCxPQUFPLG9CQUFvQixDQUFDO0lBQ2hDLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxVQUFpQjtRQUM3QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFaEUsTUFBTSxZQUFZLEdBQUcsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RSxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxrQ0FBa0MsQ0FBQyxtQkFBd0IsRUFBRSxPQUFvQixFQUFFLE9BQW9CO1FBQ25HLElBQUksOEJBQThCLEdBQUcsbUJBQW1CLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUc7WUFDYixJQUFJLEVBQUUsOEJBQThCLENBQUMsUUFBUSxDQUFDLElBQUk7WUFDbEQsS0FBSyxFQUFFLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxLQUFLO1lBQ3BELEdBQUcsRUFBRSw4QkFBOEIsQ0FBQyxRQUFRLENBQUMsR0FBRztTQUNuRCxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUc7WUFDWCxJQUFJLEVBQUUsOEJBQThCLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDaEQsS0FBSyxFQUFFLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxLQUFLO1lBQ2xELEdBQUcsRUFBRSw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsR0FBRztTQUNqRCxDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDekcsOEJBQThCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7YUFBTSxDQUFDO1lBQ0osOEJBQThCLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FDM0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLDhCQUE4QixDQUFDLFFBQVEsQ0FBQyxDQUM3RixDQUFDO1lBQ0YsOEJBQThCLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FDekMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHNCQUFzQixDQUFDLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUMzRixDQUFDO1FBQ04sQ0FBQztRQUVELE9BQU8sOEJBQThCLENBQUM7SUFDMUMsQ0FBQztJQUVELGtGQUFrRjtJQUVsRix5QkFBeUIsQ0FBQyxNQUFjLEVBQUUsV0FBd0I7UUFDOUQsSUFBSSxhQUFhLENBQUM7UUFFbEIsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsYUFBYSxHQUFHLFVBQVUsQ0FBQztRQUMvQixDQUFDO2FBQU0sSUFBSSxNQUFNLEtBQUssa0JBQWtCLElBQUksTUFBTSxLQUFLLGlCQUFpQixJQUFJLE1BQU0sS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1lBQzNHLGFBQWEsR0FBRyxTQUFTLENBQUM7UUFDOUIsQ0FBQzthQUFNLENBQUM7WUFDSixhQUFhLEdBQUcsUUFBUSxDQUFDO1FBQzdCLENBQUM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsV0FBa0IsRUFBRSxhQUFxQixFQUFFLE1BQWM7UUFDdEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFdkUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFckQsSUFBSSxhQUFhLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUM7UUFDakQsQ0FBQzthQUFNLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1FBQ2xELENBQUM7YUFBTSxJQUFJLGFBQWEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN0QyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztRQUNuRCxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRUQseUJBQXlCLENBQUMsTUFBYyxFQUFFLE9BQWdCO1FBQ3RELElBQUksY0FBYyxDQUFDO1FBQ25CLElBQUksY0FBYyxDQUFDO1FBRW5CLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEQsY0FBYyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQztZQUNuRixjQUFjLEdBQUcsV0FBVyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3JGLENBQUM7YUFBTSxDQUFDO1lBQ0osY0FBYyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDL0IsY0FBYyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDbEMsQ0FBQztRQUVELE9BQU8sQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGNBQWMsQ0FBQyxPQUFnQixFQUFFLEdBQVc7UUFDeEMsT0FBTyxPQUFPLENBQUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQztJQUN2RCxDQUFDO0lBRUQsaUNBQWlDLENBQUMsVUFBaUI7UUFDL0MsSUFBSSxrQkFBa0IsR0FBMkIsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUV0RSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDbEQsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsaUNBQWlDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3RELGtCQUFrQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUVELE9BQU8sa0JBQWtCLENBQUM7SUFDOUIsQ0FBQztJQUVELGlDQUFpQyxDQUFDLFVBQWlCO1FBQy9DLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEYsTUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxnQ0FBZ0MsQ0FBQyxhQUFxQixFQUFFLGFBQXFCLEVBQUUsT0FBZ0I7UUFDM0YsSUFBSSxpQkFBaUIsR0FBMkIsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN6RSxJQUFJLGFBQWEsSUFBSSxhQUFhLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsaUJBQWlCLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQztRQUMxQyxDQUFDO2FBQU0sQ0FBQztZQUNKLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pDLENBQUM7UUFFRCxJQUFJLGFBQWEsSUFBSSxhQUFhLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkMsaUJBQWlCLENBQUMsR0FBRyxHQUFHLGFBQWEsQ0FBQztRQUMxQyxDQUFDO2FBQU0sQ0FBQztZQUNKLGlCQUFpQixDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUNJLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxPQUFPLENBQUMsS0FBSztZQUN2QyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLElBQUk7WUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUM5QyxDQUFDO1lBQ0MsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFFRCxPQUFPLGlCQUFpQixDQUFDO0lBQzdCLENBQUM7SUFFRCxtSEFBbUg7SUFDbkgsb0JBQW9CLENBQUMsTUFBYyxFQUFFLFVBQWlCO1FBQ2xELElBQUksZ0JBQXVCLENBQUM7UUFDNUIsSUFBSSxjQUFxQixDQUFDO1FBRTFCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3RDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQ2hFLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUNoRSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDekQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzdELGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDN0QsQ0FBQztRQUVELElBQUksZ0JBQWdCLEtBQUssU0FBUyxJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNqRSxnQkFBZ0IsR0FBRyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN2RixjQUFjLEdBQUcseUJBQXlCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7YUFBTSxDQUFDO1lBQ0osZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLGNBQWMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUVELE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsK0JBQStCLENBQUMsVUFBaUIsRUFBRSxHQUFXO1FBQzFELElBQUksR0FBRyxLQUFLLGNBQWMsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLHNDQUFzQyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRSxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNMLENBQUM7SUFFRCxzRUFBc0U7SUFDdEUsdURBQXVEO0lBQ3ZELHNDQUFzQyxDQUFDLFVBQWlCLEVBQUUsR0FBVztRQUNqRSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDckYsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFaEgsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMvRyxNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUUzRyxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUVuRCxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWxGLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFakYsTUFBTSxHQUFHLEdBQUc7WUFDUixRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUN6QixNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNyQixZQUFZO1lBQ1osV0FBVztZQUNYLGdCQUFnQjtTQUNuQixDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCw0RUFBNEU7SUFDNUUsd0JBQXdCO0lBQ3hCLHFDQUFxQyxDQUFDLFVBQWlCLEVBQUUsR0FBVztRQUNoRSxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEYsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFMUcsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3RixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0UsTUFBTSxHQUFHLEdBQUc7WUFDUixRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLFlBQVk7WUFDWixXQUFXO1lBQ1gsZ0JBQWdCO1NBQ25CLENBQUM7UUFFRixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELGdDQUFnQyxDQUFDLEdBQVcsRUFBRSxXQUFrQjtRQUM1RCxJQUFJLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUNqQyxJQUFJLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLHdCQUF3QixHQUFHLEtBQUssQ0FBQztRQUNyQyxJQUFJLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNwQyxJQUFJLHdCQUF3QixHQUFHLEtBQUssQ0FBQztRQUVyQyxJQUFJLGVBQWUsQ0FBQztRQUVwQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNKLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsSUFBSSxPQUFpQixDQUFDO1FBQ3RCLElBQUksR0FBRyxLQUFLLGNBQWMsSUFBSSxHQUFHLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDL0MsT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pELG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUM1Qix1QkFBdUIsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQzFELENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZELHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUM3Qix3QkFBd0IsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFDO1FBQzVELENBQUM7UUFFRCxJQUFJLG9CQUFvQixJQUFJLHFCQUFxQixFQUFFLENBQUM7WUFDaEQscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEUsd0JBQXdCLEdBQUcsZUFBZSxFQUFFLGdCQUFnQixDQUFDO1FBQ2pFLENBQUM7UUFFRCxPQUFPO1lBQ0gscUJBQXFCO1lBQ3JCLG9CQUFvQjtZQUNwQixxQkFBcUI7WUFDckIsd0JBQXdCO1lBQ3hCLHVCQUF1QjtZQUN2Qix3QkFBd0I7U0FDM0IsQ0FBQztJQUNOLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxTQUFtQixFQUFFLE9BQWlCO1FBQ2pFLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUU5QixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyw0QkFBNEIsQ0FDbEYsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUNqRCxJQUFJLENBQ1AsQ0FBQztRQUNGLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzNGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDRCQUE0QixDQUNoRixHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQzNDLElBQUksQ0FDUCxDQUFDO1FBQ0YsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckYsT0FBTyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCw2QkFBNkI7UUFDekIsSUFBSSwwQkFBMEIsQ0FBQztRQUUvQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDbEQsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakYsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDdEQsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxPQUFPLDBCQUEwQixDQUFDO0lBQ3RDLENBQUM7SUFFRCw0QkFBNEIsQ0FDeEIsU0FBbUIsRUFDbkIsT0FBaUIsRUFDakIsWUFBcUIsRUFDckIsV0FBb0IsRUFDcEIsZ0JBQXlCO1FBRXpCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDRCQUE0QixDQUNqRixHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQ2pELElBQUksQ0FDUCxDQUFDO1FBQ0YsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFeEYsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsNEJBQTRCLENBQy9FLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDM0MsSUFBSSxDQUNQLENBQUM7UUFDRixNQUFNLGdCQUFnQixHQUFHLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUVsRixNQUFNLHlCQUF5QixHQUFHO1lBQzlCLFFBQVEsRUFBRSxrQkFBa0I7WUFDNUIsTUFBTSxFQUFFLGdCQUFnQjtZQUN4QixZQUFZO1lBQ1osV0FBVztZQUNYLGdCQUFnQjtTQUNuQixDQUFDO1FBRUYsT0FBTyx5QkFBeUIsQ0FBQztJQUNyQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBVTtRQUN6QixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsQ0FBQzthQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNuQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDSixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFVO1FBQ3pCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsQ0FBQzthQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDSixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBVTtRQUMzQixpREFBaUQ7UUFDakQsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNwQyxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNmLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQzthQUFNLElBQUksTUFBTSxJQUFJLEVBQUUsSUFBSSxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO2FBQU0sSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7SUFDTCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBUTtRQUN6QixNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO2FBQU0sSUFBSSxNQUFNLElBQUksRUFBRSxJQUFJLE1BQU0sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN0QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLENBQUM7YUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFLElBQUksTUFBTSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbEIsQ0FBQzthQUFNLElBQUksTUFBTSxHQUFHLEVBQUUsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDckMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUFDLFNBQWtCLEVBQUUsSUFBYztRQUN2RCxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLENBQUM7SUFDTCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsU0FBa0IsRUFBRSxJQUFjO1FBQ3RELElBQUksU0FBUyxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFVO1FBQ3pCLE9BQU8sRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxNQUFjO1FBQy9CLE9BQU8sQ0FDSCxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUM7WUFDN0IsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ3hCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTtZQUN6QixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUN2QixDQUFDO0lBQ04sQ0FBQztJQUVELDZHQUE2RztJQUM3RyxhQUFhLENBQUMsYUFBdUIsRUFBRSxTQUFnQixFQUFFLG9CQUE2QjtRQUNsRixJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUNyRCxJQUFJLENBQUMsYUFBYSxFQUNsQixhQUFhLEVBQ2IsU0FBUyxFQUNULG9CQUFvQixDQUN2QixDQUFDO1FBQ0YsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVELG9FQUFvRTtJQUNwRSwwQkFBMEIsQ0FBQyxVQUFpQztRQUN4RCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3hCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFFckQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0seUJBQXlCLEdBQVcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVc7b0JBQ25GLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVztvQkFDL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDUixNQUFNLDBCQUEwQixHQUFXLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXO29CQUNuRixDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVc7b0JBQzlDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRVIsSUFBSSx5QkFBeUIsR0FBRywwQkFBMEIsRUFBRSxDQUFDO29CQUN6RCxNQUFNLElBQUksR0FBRyx5QkFBeUIsR0FBRywwQkFBMEIsQ0FBQztvQkFDcEUsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUM1QyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUNoRSxDQUFDO29CQUVELElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDNUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ3ZFLENBQUM7Z0JBQ0wsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE1BQU0sSUFBSSxHQUFHLDBCQUEwQixHQUFHLHlCQUF5QixDQUFDO29CQUNwRSxJQUFJLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQzVDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUN2RSxDQUFDO29CQUVELElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDNUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztvQkFDaEUsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHFDQUFxQyxDQUNqQyxNQUFtQixFQUNuQixjQUFxQixFQUNyQixTQUFnQixFQUNoQixlQUFzQjtRQUV0QixNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7WUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEYsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBdUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ2xGLElBQ0ksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDO29CQUN4QixXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxFQUNwRSxDQUFDO29CQUNDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQXVCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNyRSx1RUFBdUU7Z0JBQ3ZFLElBQUksNEJBQTRCLEdBQUcsS0FBSyxDQUFDO2dCQUV6QyxJQUNJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUN4RSxDQUFDO29CQUNDLDRCQUE0QixHQUFHLElBQUksQ0FBQztnQkFDeEMsQ0FBQztnQkFDRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksNEJBQTRCLENBQUMsRUFBRSxDQUFDO29CQUM1RixjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QixDQUFDO3FCQUFNLElBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxVQUFVO29CQUM1QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksNEJBQTRCLENBQUMsRUFDakcsQ0FBQztvQkFDQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtDQUFrQyxDQUFDLFlBQThCLEVBQUUsU0FBZ0IsRUFBRSxlQUFzQjtRQUN2RyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDNUIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3ZCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztvQkFDaEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztvQkFFL0IsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUN0QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7d0JBRS9DLElBQ0ksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDOzRCQUN4QixJQUFJLENBQUMsa0JBQWtCOzRCQUN2QixhQUFhLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQ2pELENBQUM7NEJBQ0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQzt3QkFDcEMsQ0FBQzt3QkFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDOzRCQUMxQixJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQ0FDbkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQ0FDcEYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQ0FFaEYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUNwRixDQUFDO2lDQUFNLENBQUM7Z0NBQ0osTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQ0FDNUQsSUFDSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO29DQUN2RCxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssVUFBVTt3Q0FDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUNwRSxDQUFDO29DQUNDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7Z0NBQ3BDLENBQUM7NEJBQ0wsQ0FBQzt3QkFDTCxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDZHQUE2RztJQUM3RyxrQ0FBa0MsQ0FBQyxJQUFjO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFbkQsSUFBSSxTQUFTLEVBQUUsUUFBUSxJQUFJLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztvQkFDM0MsTUFBTSxlQUFlLEdBQXVDO3dCQUN4RCxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7d0JBQ25DLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztxQkFDbEMsQ0FBQztvQkFFRixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBMXZEUSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZkLE1BQU07OzRGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIFF1ZXJ5TGlzdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tIFwiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXJcIjtcclxuaW1wb3J0IGRheWpzLCB7IERheWpzIH0gZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCBDdXN0b21QYXJzZUZvcm1hdCBmcm9tIFwiZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0XCI7XHJcbmltcG9ydCBpc0JldHdlZW4gZnJvbSBcImRheWpzL3BsdWdpbi9pc0JldHdlZW5cIjtcclxuaW1wb3J0IG1pbk1heCBmcm9tIFwiZGF5anMvcGx1Z2luL21pbk1heFwiO1xyXG4vLyBUaGlyZCBwYXJ0eSBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwsIG1hcCwgbWF4LCBtaW4sIHNvcnRCeSwgdW5pcSB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcclxuXHJcbmltcG9ydCB7IElHdFRhYmxlSGVhZGVyLCBJSGVhZGVySW5mbyB9IGZyb20gXCIuLi9tb2RlbHMvYW5uYS1ub24tZWRpdGFibGUtZ3QtbW9kZWxzXCI7XHJcbmltcG9ydCB7IFNvcnRUeXBlLCBTb3J0VHlwZUVudW0gfSBmcm9tIFwiLi4vbW9kZWxzL2FubmEtc29ydC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2FubmEtdG9vbHRpcC5tb2RlbFwiO1xyXG4vLyBVc2VyIGRlZmluZWQgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSwgTmdiRGF0ZVR5cGUgfSBmcm9tIFwiLi9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tIFwiLi9hbm5hLXNvcnQuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hRmlsdGVyU2VydmljZSB7XHJcbiAgICB0b29sdGlwTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdG9vbHRpcFNlbGVjdGVkTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgaW5pdGlhbFZhbHVlTWFwOiBNYXA8c3RyaW5nLCBhbnk+O1xyXG4gICAgdHJhbnNsYXRlRnVuYzogc3RyaW5nO1xyXG4gICAgc2VsZWN0ZWRSYWRpbzogc3RyaW5nO1xyXG4gICAgc3ViUmFkaW9CdXR0b246IHN0cmluZztcclxuXHJcbiAgICBjYWxlbmRhclNldDogU2V0PHN0cmluZz47XHJcbiAgICBzbGlkZXJTZXQ6IFNldDxzdHJpbmc+O1xyXG4gICAgdGltZVNldDogU2V0PHN0cmluZz47XHJcblxyXG4gICAgaW5jbHVkZU11bHRpVGltZTogYm9vbGVhbjtcclxuICAgIGluY2x1ZGVaZXJvVGltZTogYm9vbGVhbjtcclxuICAgIGluY2x1ZGVUaW1lUmFuZ2U6IGJvb2xlYW47XHJcblxyXG4gICAgYXBwbGllZEZpbHRlcnNBcnJheTogc3RyaW5nW10gPSBbXTtcclxuICAgIGZsaWdodERhdGVSYW5nZTogeyBtaW5TZWxlY3RlZERhdGU6IGFueTsgbWF4U2VsZWN0ZWREYXRlOiBhbnkgfTtcclxuICAgIHNsaWRlckRhdGE6IHsgbWluOiBhbnk7IG1heDogYW55IH07XHJcbiAgICBuZ3hTbGlkZXJPYmo6IE9wdGlvbnM7XHJcblxyXG4gICAgU1BMSVRFRF9DSEVDS0JPWF9GSUxURVJfS0VZID0gXCJfU3BsaXRlZENoZWNrQm94T3B0aW9uc1wiO1xyXG4gICAgREVGQVVMVF9TUExJVF9TRVBBUkFUT1IgPSBcIiwgXCI7XHJcblxyXG4gICAgc2xpZGVyQ3VycmVuY3lTZXQgPSBuZXcgU2V0KFtcclxuICAgICAgICBcImJvb2tlZFwiLFxyXG4gICAgICAgIFwiY3BwXCIsXHJcbiAgICAgICAgXCJjcG1cIixcclxuICAgICAgICBcInJjdlByZWVtcHRcIixcclxuICAgICAgICBcIm9zUHJlZW1wdFwiLFxyXG4gICAgICAgIFwicG9zdGVkQWR1XCIsXHJcbiAgICAgICAgXCJzY2hlZHVsZWRBZHVcIixcclxuICAgICAgICBcImF1ZGllbmNlRGVmaWNpdFwiLFxyXG4gICAgICAgIFwiUmF0ZVwiLFxyXG4gICAgICAgIFwidXNlckFEVXNcIixcclxuICAgICAgICBcImJ1eWVyQ2hhbmdlc1wiLFxyXG4gICAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgICBcInVzZXJNR1wiLFxyXG4gICAgICAgIFwidWRWYWx1ZVwiLFxyXG4gICAgICAgIFwib2RWYWx1ZVwiLFxyXG4gICAgICAgIFwiYnV5ZXJCb29rZWRWYWx1ZVwiLFxyXG4gICAgICAgIFwidHJhZmZpY0Jvb2tlZFZhbHVlXCIsXHJcbiAgICAgICAgXCJib29rZWRWYWxcIixcclxuICAgIF0pO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgYnVmZmVyU2l6ZSA9IDIwO1xyXG4gICAgaXNGaWx0ZXJTb3J0QWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIHJlc2V0RmlsdGVyU29ydEFjdGl2ZVN0YXR1czogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBudWxsVG9CZUZvcm1hdGVkSW50b1N0cmluZyA9IFwiLVwiO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYW5uYVNvcnRTZXJ2aWNlOiBBbm5hU29ydFNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBkYXlqcy5leHRlbmQobWluTWF4KTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoaXNCZXR3ZWVuKTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoQ3VzdG9tUGFyc2VGb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IHNsaWRlckFyciA9IFtcclxuICAgICAgICAgICAgXCJyY3ZQcmVlbXB0XCIsXHJcbiAgICAgICAgICAgIFwib3NQcmVlbXB0XCIsXHJcbiAgICAgICAgICAgIFwicmN2VW5kZXJEbHlcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRBdWRQZXJjZW50XCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkXCIsXHJcbiAgICAgICAgICAgIFwic3BvdHNcIixcclxuICAgICAgICAgICAgXCJncnBcIixcclxuICAgICAgICAgICAgXCJhdmVyYWdlUmF0ZVRoaXNZZWFyXCIsXHJcbiAgICAgICAgICAgIFwiYXZlcmFnZVJhdGVMYXN0WWVhclwiLFxyXG4gICAgICAgICAgICBcImF2ZXJhZ2VDUFBcIixcclxuICAgICAgICAgICAgXCJhdmVyYWdlQ1BNXCIsXHJcbiAgICAgICAgICAgIFwiSU1QU0RpZmZcIixcclxuICAgICAgICAgICAgXCJSVEdEaWZmXCIsXHJcbiAgICAgICAgICAgIFwiY3BwXCIsXHJcbiAgICAgICAgICAgIFwiaW1wc1wiLFxyXG4gICAgICAgICAgICBcImNwbVwiLFxyXG4gICAgICAgICAgICBcIm9zVW5kZXJEbHlcIixcclxuICAgICAgICAgICAgXCJ0b3RhbFdlZWtzXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla051bWJlclwiLFxyXG4gICAgICAgICAgICBcIlJhdGVcIixcclxuICAgICAgICAgICAgXCJPcmRlcmVkUmF0aW5nc09ySW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJQb3N0ZWRSYXRpbmdzT3JJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcInBvc3RlZEF1ZFBlcmNlbnRcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRBZHVcIixcclxuICAgICAgICAgICAgXCJzY2hlZHVsZWRBZHVcIixcclxuICAgICAgICAgICAgXCJhdWRpZW5jZURlZmljaXRcIixcclxuICAgICAgICAgICAgXCJvZmZlcmVkTUdzXCIsXHJcbiAgICAgICAgICAgIFwib3V0c3RhbmRpbmdQRVwiLFxyXG4gICAgICAgICAgICBcIm9mZmVyZWRBRFVzXCIsXHJcbiAgICAgICAgICAgIFwidWREZWZpY2l0VmFsdWVcIixcclxuICAgICAgICAgICAgXCJib29rZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcImJvb2tlZFNwb3RzXCIsXHJcbiAgICAgICAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgICAgICAgXCJVREdycFwiLFxyXG4gICAgICAgICAgICBcIlVESW1wc1wiLFxyXG4gICAgICAgICAgICBcIk9ER3JwXCIsXHJcbiAgICAgICAgICAgIFwiT0RJbXBzXCIsXHJcbiAgICAgICAgICAgIFwidWRJbXBzUGVyY2VudFwiLFxyXG4gICAgICAgICAgICBcInVkR3JwUGVyY2VudFwiLFxyXG4gICAgICAgICAgICBcIm9kSW1wc1BlcmNlbnRcIixcclxuICAgICAgICAgICAgXCJvZEdycFBlcmNlbnRcIixcclxuICAgICAgICAgICAgXCJ1c2VyQURVc1wiLFxyXG4gICAgICAgICAgICBcImJ1eWVyQ2hhbmdlc1wiLFxyXG4gICAgICAgICAgICBcInVzZXJDaGFuZ2VzXCIsXHJcbiAgICAgICAgICAgIFwidXNlck1HXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla2x5QVVSXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla2x5QVVSYXRpbmdPckltcHJlc3Npb25zXCIsXHJcbiAgICAgICAgICAgIFwiTUdzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJBRFVzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJhdWRpZW5jZURlZmljaXRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcInVzZXJBRFVWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcInVzZXJDaGFuZ2VzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJidXllckNoYW5nZXNWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlVzZXJDcmVkaXRlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiVXNlclVucmVzb2x2ZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJ1eWVyQWRkZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJ1eWVyRGVsZXRlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiQnV5ZXJDaGFuZ2VzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJVc2VyQ2hhbmdlc1ZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkR1JQT3JJTVBTXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BQT3JDUE1cIixcclxuICAgICAgICAgICAgXCJCb29rZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJvb2tlZFNwb3RzXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkUmF0ZVwiLFxyXG4gICAgICAgICAgICBcImF2ZXJhZ2VSYXRlXCIsXHJcbiAgICAgICAgICAgIFwicHJvamVjdGVkSU1QU1wiLFxyXG4gICAgICAgICAgICBcInByb2plY3RlZFJUR1wiLFxyXG4gICAgICAgICAgICBcImRlc2lyZWRDUE1cIixcclxuICAgICAgICAgICAgXCJkZXNpcmVkQ1BQXCIsXHJcbiAgICAgICAgICAgIFwiaW52ZW50b3J5RmlsbFBlcmNlbnRhZ2VTYW1lV2Vla1wiLFxyXG4gICAgICAgICAgICBcImludmVudG9yeUZpbGxQZXJjZW50YWdlRmluYWxcIixcclxuICAgICAgICAgICAgXCJpbnZlbnRvcnlGaWxsUGVyY2VudGFnZVRpbGxEYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZG9sbGFyUmF0ZUltcGFjdFwiLFxyXG4gICAgICAgICAgICBcImRvbGxhcklNUFNJbXBhY3RcIixcclxuICAgICAgICAgICAgXCJJTVBTSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiZG9sbGFyUlRHSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiUlRHSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkUlRHXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkSU1QU1wiLFxyXG4gICAgICAgICAgICBcIkFVUlRHXCIsXHJcbiAgICAgICAgICAgIFwiQVVSVEdcIixcclxuICAgICAgICAgICAgXCJQb3N0ZWRSYXRpbmdcIixcclxuICAgICAgICAgICAgXCJQb3N0ZWRJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIk5vcm1hbGl6ZWRPcmRlcmVkUmF0aW5nXCIsXHJcbiAgICAgICAgICAgIFwiTm9ybWFsaXplZE9yZGVyZWRJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIk5vcm1hbGl6ZWRQb3N0ZWRSYXRpbmdcIixcclxuICAgICAgICAgICAgXCJOb3JtYWxpemVkUG9zdGVkSW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJCb29rZWRHUlBcIixcclxuICAgICAgICAgICAgXCJCb29rZWRJTVBTUmV2VGFiXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BQXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BNXCIsXHJcbiAgICAgICAgICAgIFwiQVVJTVBTXCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkQW1vdW50VmFsdWVcIixcclxuICAgICAgICAgICAgXCJlcXVpdmFsaXplZEJvb2tlZEFtb3VudFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiSU1QU1wiLFxyXG4gICAgICAgICAgICBcInVkVmFsdWVcIixcclxuICAgICAgICAgICAgXCJvZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiVmlvbGF0ZWRCb29rZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGVkQm9va2VkRVVSVmFsdWVcIixcclxuICAgICAgICAgICAgXCJWaW9sYXRpbmdCb29rZWRFVVJWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGluZ0Jvb2tlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiUmViYXRlXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla2x5QVVSXCIsXHJcbiAgICAgICAgICAgIFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla2x5QVVSXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1J0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFJ0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUnRnXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93U3RhdGlvbkVzdGltYXRlc1J0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd0FubmFFc3RpbWF0ZXNJbXBzXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93UG9zdGVkSW1wc1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlSW1wc1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1N0YXRpb25Fc3RpbWF0ZXNJbXBzXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1NoYXJlXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93UG9zdGVkU2hhcmVcIixcclxuICAgICAgICAgICAgXCJwYXJlbnRSb3dSb2xsaW5nQXZlcmFnZVNoYXJlXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1B1dFBlclwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFB1dFBlclwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUHV0UGVyXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1B1dFwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFB1dFwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUHV0XCIsXHJcbiAgICAgICAgICAgIFwiUHJvamVjdGVkSW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJQcm9qZWN0ZWRSdGdcIixcclxuICAgICAgICAgICAgXCJwcm9qZWN0ZWRDUE1cIixcclxuICAgICAgICAgICAgXCJwcm9qZWN0ZWRDUFBcIixcclxuICAgICAgICAgICAgXCJib29rZWRFcUNwbVZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkRXFDcHBWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlJhdGluZ1wiLFxyXG4gICAgICAgICAgICBcIkFjdHVhbFJhdGVcIixcclxuICAgICAgICAgICAgXCJJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIkFVUktleUxZXCIsXHJcbiAgICAgICAgICAgIFwiU2VsbE91dFBlcmNlbnRMWVwiLFxyXG4gICAgICAgICAgICBcIkFVUktleVRZXCIsXHJcbiAgICAgICAgICAgIFwiU2VsbE91dFBlcmNlbnRUWVwiLFxyXG4gICAgICAgICAgICBcIm9mZmVyQ291bnRcIixcclxuICAgICAgICAgICAgXCJvZmZlcmVkTUdzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJvdXRzdGFuZGluZ1Nwb3RzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJvZmZlcmVkQURVc1ZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwidURQcm9qZWN0aW9uVmFsdWVcIixcclxuICAgICAgICAgICAgXCJ0b3RhbEJvb2tlZEdycFwiLFxyXG4gICAgICAgICAgICBcInRvdGFsQm9va2VkSW1wc1wiLFxyXG4gICAgICAgICAgICBcImJvb2tlZEdycFRvRGF0ZVwiLFxyXG4gICAgICAgICAgICBcImJvb2tlZEltcHNUb0RhdGVcIixcclxuICAgICAgICAgICAgXCJkZWxpdmVyeVRocmVzaG9sZFBlcmNlbnRhZ2VcIixcclxuICAgICAgICAgICAgXCJnb2FsR3JwVG9EYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZ29hbEltcHNUb0RhdGVcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRHcnBUb0RhdGVcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRJbXBzVG9EYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZGVsaXZlcmVkUGVyY2VudGFnZVwiLFxyXG4gICAgICAgICAgICBcInVkR3JwVG9EYXRlXCIsXHJcbiAgICAgICAgICAgIFwidWRJbXBzVG9EYXRlXCIsXHJcbiAgICAgICAgICAgIFwib2RHcnBUb0RhdGVcIixcclxuICAgICAgICAgICAgXCJvZEltcHNUb0RhdGVcIixcclxuICAgICAgICAgICAgXCJzY2hlZHVsZWRBRFVzUHJvakdycFwiLFxyXG4gICAgICAgICAgICBcInNjaGVkdWxlZEFEVXNQcm9qSW1wc1wiLFxyXG4gICAgICAgICAgICBcInBvc3RlZEFEVXNHcnBcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRBRFVzSW1wc1wiLFxyXG4gICAgICAgICAgICBcImJvb2tlZFZhbFwiLFxyXG4gICAgICAgICAgICBcInVzZXJNR1ZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwicmF0aW5nXCIsXHJcbiAgICAgICAgICAgIFwiSU1QU1wiLFxyXG4gICAgICAgICAgICBcInJhdGVcIixcclxuICAgICAgICAgICAgXCJhbW91bnRcIixcclxuICAgICAgICAgICAgXCJib29rZWRHUlBcIixcclxuICAgICAgICAgICAgXCJib29rZWRHSVwiLFxyXG4gICAgICAgICAgICBcInByb2plY3RlZEdSUFwiLFxyXG4gICAgICAgICAgICBcInByb2plY3RlZEdJXCIsXHJcbiAgICAgICAgICAgIFwicG9zdGVkR2lcIixcclxuICAgICAgICAgICAgXCJidWRnZXRcIixcclxuICAgICAgICAgICAgXCJib29rZWRJbXBzXCIsXHJcbiAgICAgICAgICAgIFwicG9zdGVkSW1wc1wiLFxyXG4gICAgICAgICAgICBcInByb2plY3RlZEltcHNcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRHcnBcIixcclxuICAgICAgICAgICAgXCJwcm9qZWN0ZWRHcnBcIixcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBjYWxlbmRhckFyciA9IFtcclxuICAgICAgICAgICAgXCJwZXJpb2RcIixcclxuICAgICAgICAgICAgXCJBaXJEYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZmxpZ2h0U3RhcnREYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZmxpZ2h0RW5kRGF0ZVwiLFxyXG4gICAgICAgICAgICBcImRhdGVcIixcclxuICAgICAgICAgICAgXCJzdGFydERhdGVcIixcclxuICAgICAgICAgICAgXCJlbmREYXRlXCIsXHJcbiAgICAgICAgICAgIFwicmV2aXNpb25TdGFydERhdGVcIixcclxuICAgICAgICAgICAgXCJHZW5lcmF0ZWRPblwiLFxyXG4gICAgICAgICAgICBcIldlZWtcIixcclxuICAgICAgICAgICAgXCJzY2hlZHVsZWREYXRlXCIsXHJcbiAgICAgICAgICAgIFwidGltZW91dERhdGVcIixcclxuICAgICAgICAgICAgXCJWaW9sYXRpbmdTcG90RGF0ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGVkU3BvdERhdGVcIixcclxuICAgICAgICAgICAgXCJBY3R1YWxXZWVrU3RhcnREYXRlXCIsXHJcbiAgICAgICAgICAgIFwiTGFzdEZldGNoZWREYXRlXCIsXHJcbiAgICAgICAgICAgIFwiY3JlYXRlZE9uXCIsXHJcbiAgICAgICAgICAgIFwiYWlyRGF0ZVwiLFxyXG4gICAgICAgICAgICBcInNjaGVkdWxlZFdlZWtcIixcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IHRpbWVBcnIgPSBbXHJcbiAgICAgICAgICAgIFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIsXHJcbiAgICAgICAgICAgIFwiRW5kVGltZUZvckZpbHRlclwiLFxyXG4gICAgICAgICAgICBcInRpbWVcIixcclxuICAgICAgICAgICAgXCJzdGFydFRpbWVGb3JGaWx0ZXJcIixcclxuICAgICAgICAgICAgXCJlbmRUaW1lRm9yRmlsdGVyXCIsXHJcbiAgICAgICAgICAgIFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIsXHJcbiAgICAgICAgICAgIFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiLFxyXG4gICAgICAgICAgICBcInN0YXJ0RW5kVGltZU11bHRpXCIsXHJcbiAgICAgICAgICAgIFwic3RhcnRFbmRUaW1lXCIsXHJcbiAgICAgICAgICAgIFwidGltZW91dFRpbWVcIixcclxuICAgICAgICAgICAgXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVTdGFydFRpbWVcIixcclxuICAgICAgICAgICAgXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVFbmRUaW1lXCIsXHJcbiAgICAgICAgICAgIFwiU3RhcnRUaW1lXCIsXHJcbiAgICAgICAgICAgIFwiRW5kVGltZVwiLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5zbGlkZXJTZXQgPSBuZXcgU2V0KHNsaWRlckFycik7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclNldCA9IG5ldyBTZXQoY2FsZW5kYXJBcnIpO1xyXG4gICAgICAgIHRoaXMudGltZVNldCA9IG5ldyBTZXQodGltZUFycik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuTWF4QW5kTWluVmFsdWUoZGF0YTogYW55W10sIGtleTogc3RyaW5nLCBpc01pbjogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZmlsdGVyZWREYXRhLm1hcCgoeCkgPT4geFtrZXldKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVRvUmV0dXJuID0gaXNNaW4gPyBtaW4odmFsdWVzKSA6IG1heCh2YWx1ZXMpO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVRvUmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybk1pbkFuZE1heERhdGUoZGF0YTogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhID0gZGF0YS5maWx0ZXIoKG9iaikgPT4gIVtcIlwiLCBcIi1cIiwgbnVsbF0uaW5jbHVkZXMob2JqW2tleV0pKTtcclxuICAgICAgICBjb25zdCBEYXRlQXJyID0gZmlsdGVyZWREYXRhLm1hcCgob2JqKSA9PiBkYXlqcyhvYmpba2V5XSkpO1xyXG4gICAgICAgIGNvbnN0IG1pbkRhdGUgPSBkYXlqcy5taW4oRGF0ZUFycik7XHJcbiAgICAgICAgY29uc3QgbWF4RGF0ZSA9IGRheWpzLm1heChEYXRlQXJyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFttaW5EYXRlLCBtYXhEYXRlXTtcclxuICAgIH1cclxuXHJcbiAgICBpc1Rvb2x0aXBBY3RpdmUoaGVhZGVyOiBzdHJpbmdbXSwgc29ydE1hcDogTWFwPHN0cmluZywgU29ydFR5cGU+KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgc2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgICAgICBjb25zdCBpc1NvcnRNYXBGb3JIZWFkZXIwQWN0aXZlID0gc29ydE1hcC5oYXMoaGVhZGVyWzBdKSAmJiBzb3J0TWFwLmdldChoZWFkZXJbMF0pICE9PSBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuICAgICAgICBjb25zdCBpc1NvcnRNYXBGb3JIZWFkZXIxQWN0aXZlID0gc29ydE1hcC5oYXMoaGVhZGVyWzFdKSAmJiBzb3J0TWFwLmdldChoZWFkZXJbMV0pICE9PSBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuXHJcbiAgICAgICAgaWYgKGhlYWRlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChzb3J0TWFwLnNpemUgPiAwICYmIGlzU29ydE1hcEZvckhlYWRlcjBBY3RpdmUpIHx8IHNldC5oYXMoaGVhZGVyWzBdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIChzb3J0TWFwLnNpemUgPiAwICYmIHNvcnRNYXAuaGFzKGhlYWRlclswXSkgJiYgaXNTb3J0TWFwRm9ySGVhZGVyMEFjdGl2ZSkgfHxcclxuICAgICAgICAgICAgKHNvcnRNYXAuc2l6ZSA+IDAgJiYgc29ydE1hcC5oYXMoaGVhZGVyWzFdKSAmJiBpc1NvcnRNYXBGb3JIZWFkZXIxQWN0aXZlKSB8fFxyXG4gICAgICAgICAgICBzZXQuaGFzKGhlYWRlclswXSkgfHxcclxuICAgICAgICAgICAgc2V0LmhhcyhoZWFkZXJbMV0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckNvbHVtbkZpbHRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG4gICAgICAgICAgICBhcHBsaWVkRmlsdGVyU2V0LmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkgPSBbLi4uYXBwbGllZEZpbHRlclNldF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0T3B0aW9uVmFsdWVzKG1pblZhbHVlOiBudW1iZXIsIG1heFZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmbG9vcjogbWluVmFsdWUsXHJcbiAgICAgICAgICAgIGNlaWw6IG1heFZhbHVlLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgICAgICAgdHJhbnNsYXRlOiB0aGlzLm5vcm1hbFRyYW5zbGF0ZUZ1bmN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcGVyY2VudFRyYW5zbGF0ZUZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0TnVtYmVyID0gKG51bTogbnVtYmVyKSA9PiBwYXJzZUZsb2F0KG51bS50b0ZpeGVkKDIpKTtcclxuXHJcbiAgICAgICAgaWYgKE1hdGguYWJzKGRhdGEpID49IDEwMDApIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TnVtYmVyKE1hdGguYWJzKGRhdGEpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtkYXRhIDwgMCA/IFwiLVwiIDogXCJcIn0ke2Zvcm1hdHRlZH1rJWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtmb3JtYXROdW1iZXIoZGF0YSl9JWA7XHJcbiAgICB9O1xyXG5cclxuICAgIGN1cnJlbmN5VHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXROdW1iZXIgPSAobnVtOiBudW1iZXIpID0+IHBhcnNlRmxvYXQobnVtLnRvRml4ZWQoMikpO1xyXG5cclxuICAgICAgICBpZiAoTWF0aC5hYnMoZGF0YSkgPj0gMTAwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXROdW1iZXIoTWF0aC5hYnMoZGF0YSkgLyAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGEgPCAwID8gXCItXCIgOiBcIlwifSQke2Zvcm1hdHRlZH1rYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2RhdGEgPCAwID8gXCItXCIgOiBcIlwifSQke2Zvcm1hdE51bWJlcihNYXRoLmFicyhkYXRhKSl9YDtcclxuICAgIH07XHJcblxyXG4gICAgbm9ybWFsVHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXROdW1iZXIgPSAobnVtOiBudW1iZXIpID0+IHBhcnNlRmxvYXQobnVtLnRvRml4ZWQoMikpO1xyXG5cclxuICAgICAgICBpZiAoZGF0YSA+PSAxMDAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtmb3JtYXROdW1iZXIoZGF0YSAvIDEwMDApfWtgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKGRhdGEpLnRvU3RyaW5nKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZpbmRVbmlxdWVEYXRlc1dpdGhEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgdW5pcXVlRGF0ZXMgPSB1bmlxKGRhdGEubWFwKCh1KSA9PiB1LmRhdGUpKTtcclxuICAgICAgICBjb25zdCB1bmlxdWVEYXRlc0luTmdiRGF0ZUZvcm1hdDogTmdiRGF0ZVR5cGVbXSA9IFtdO1xyXG4gICAgICAgIHVuaXF1ZURhdGVzLmZvckVhY2goKGRhdGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB1bmlxdWVEYXRlc0luTmdiRGF0ZUZvcm1hdC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZVN0YW5kYXJkRm9ybWF0KGRheWpzKGRhdGUsIFwiTU0vREQvWVlcIikuZm9ybWF0KFwiTU0vREQvWVlZWVwiKSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIHJlT3JkZXJBcHBsaWVkRmlsdGVyc0FycmF5KGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQ6IGJvb2xlYW4sIGRhdGU/OiBhbnkpIHtcclxuICAgICAgICBsZXQgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgaXNGaWx0ZXJlZCA9IHRoaXMuY2hlY2tJZkRhdGFJc0ZpbHRlcmVkKGlzRmlsdGVyZWQsIGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQsIGRhdGUpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmRGF0YUlzRmlsdGVyZWQoaXNGaWx0ZXJlZDogYm9vbGVhbiwgaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZDogYm9vbGVhbiwgZGF0ZT86IGFueSkge1xyXG4gICAgICAgIGxldCBpc0RhdGFGaWx0ZXJlZCA9IGlzRmlsdGVyZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJ1c2VyXCIgJiYgIXRoaXMudG9vbHRpcE1hcC5oYXMoXCJ1c2VyXCIpKSB7XHJcbiAgICAgICAgICAgIGlzRGF0YUZpbHRlcmVkID0gY2xvbmVEZWVwKGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiRW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJzdGFydFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJ0aW1lXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInRpbWVvdXRUaW1lXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZVN0YXJ0VGltZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVFbmRUaW1lXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNEYXRhRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgIWlzRXF1YWwoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwic3RhcnRFbmRUaW1lXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgICAgICAgaXNEYXRhRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgIWlzRXF1YWwoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNsaWRlclNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBpc0RhdGFGaWx0ZXJlZCA9XHJcbiAgICAgICAgICAgICAgICAhaXNFcXVhbChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICkgJiYgIWlzRXF1YWwodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMuc2xpZGVyRGF0YSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwicG9zdGVkQWR1XCIgJiYgdGhpcy5zdWJSYWRpb0J1dHRvbiA9PT0gXCJub3RSZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpc0RhdGFGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFpc0RhdGFGaWx0ZXJlZCAmJiB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwic3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwicGVyaW9kXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIkFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwidGltZW91dERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImZsaWdodEVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJyZXZpc2lvblN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJHZW5lcmF0ZWRPblwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJXZWVrXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIkFjdHVhbFdlZWtTdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwic2NoZWR1bGVkRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJMYXN0RmV0Y2hlZERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiYWlyRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJzY2hlZHVsZWRXZWVrXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNEYXRhRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgIWlzRXF1YWwoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICApICYmICFpc0VxdWFsKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLmZsaWdodERhdGVSYW5nZSk7XHJcbiAgICAgICAgICAgIGlmICghaXNEYXRhRmlsdGVyZWQgJiYgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxPcHRpb25zQ291bnQgPSB0aGlzLnRvb2x0aXBNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbykuZmlsdGVyKCh4OiBhbnkpID0+ICF4LmlzSGlkZGVuKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uc0NvdW50ID0gdGhpcy50b29sdGlwTWFwXHJcbiAgICAgICAgICAgICAgICAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbylcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHg6IGFueSkgPT4gIXguaXNIaWRkZW4gJiYgeC5pc1NlbGVjdGVkKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlzRGF0YUZpbHRlcmVkID0gc2VsZWN0ZWRPcHRpb25zQ291bnQgPiAwICYmIHNlbGVjdGVkT3B0aW9uc0NvdW50ICE9PSB0b3RhbE9wdGlvbnNDb3VudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzRGF0YUZpbHRlcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZU9yQ2hhbmdlTGF0ZXN0RmlsdGVySW5kZXgoaXNGaWx0ZXJlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuXHJcbiAgICAgICAgaWYgKGlzRmlsdGVyZWQgJiYgIXNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBzZXQuYWRkKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0ZpbHRlcmVkICYmIHNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBzZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIHNldC5hZGQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSA9IFsuLi5zZXRdO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkVGhlblNvcnRUaGVEYXRhKG9yaWdpbmFsRGF0YTogYW55W10pIHtcclxuICAgICAgICBsZXQgc29ydGVkRGF0YSA9IG9yaWdpbmFsRGF0YTtcclxuICAgICAgICBpZiAoIXRoaXMuYW5uYVNvcnRTZXJ2aWNlPy5jb2x1bW5Tb3J0U3RhdGUpIHJldHVybiBzb3J0ZWREYXRhO1xyXG4gICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJBU0NcIikge1xyXG4gICAgICAgICAgICAgICAgc29ydGVkRGF0YSA9IGNsb25lRGVlcChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UodHJ1ZSwgb3JpZ2luYWxEYXRhLCBrZXkpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJERVNDXCIpIHtcclxuICAgICAgICAgICAgICAgIHNvcnRlZERhdGEgPSBjbG9uZURlZXAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2Uuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKGZhbHNlLCBvcmlnaW5hbERhdGEsIGtleSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzb3J0ZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlckRhdGEob3JpZ2luYWxEYXRhOiBhbnlbXSwga2V5VG9Ta2lwOiBzdHJpbmcsIGlzTHVyQ3NyUGFnZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IFsuLi5vcmlnaW5hbERhdGFdO1xyXG4gICAgICAgIGlmICghaXNMdXJDc3JQYWdlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IHRoaXMuY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWRUaGVuU29ydFRoZURhdGEob3JpZ2luYWxEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZm9yRWFjaCgodmFsdWUsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclNwbGl0ZWRWYWx1ZXM6IGJvb2xlYW4gPSBrZXkuaW5jbHVkZXModGhpcy5TUExJVEVEX0NIRUNLQk9YX0ZJTFRFUl9LRVkpO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyU3BsaXRlZFZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXHJcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkuc3BsaXQodGhpcy5TUExJVEVEX0NIRUNLQk9YX0ZJTFRFUl9LRVkpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChrZXkgIT09IGtleVRvU2tpcCAmJiBvcmlnaW5hbERhdGEubGVuZ3RoID4gMCAmJiB0aGlzLm5lc3RlZEtleUV4aXN0cyhvcmlnaW5hbERhdGFbMF0sIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlclNldC5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gb2JqW2tleV0gPj0gdmFsdWUubWluICYmIG9ialtrZXldIDw9IHZhbHVlLm1heCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJzdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJlbmREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiRW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIkFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJ0aW1lb3V0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcImZsaWdodEVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJkYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInJldmlzaW9uU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiR2VuZXJhdGVkT25cIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJXZWVrXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiQWN0dWFsV2Vla1N0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIlZpb2xhdGVkU3BvdERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJWaW9sYXRpbmdTcG90RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInNjaGVkdWxlZERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJMYXN0RmV0Y2hlZERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJjcmVhdGVkT25cIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJhaXJEYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwic2NoZWR1bGVkV2Vla1wiXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuaXNPYmplY3RJblRoZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuZ2V0RGF0YUluVGhlRGF0ZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiRW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInRpbWVvdXRUaW1lXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwic3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiZW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIlN0YXJ0VGltZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIkVuZFRpbWVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwidGltZVwiXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvckZyb21BbmRUb1RpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCIgfHwga2V5ID09PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJldHVybkRhdGFGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKCh1KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJTcGxpdGVkVmFsdWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlLmZpbmQoKHZhbDogYW55KSA9PiB1W2tleV0uaW5jbHVkZXModmFsKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWUuaW5jbHVkZXModGhpcy5nZXRWYWx1ZUZyb21PYmplY3QodSwga2V5KSksXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVGcm9tT2JqZWN0KG9iajogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBrZXkuc3BsaXQoXCIuXCIpLnJlZHVjZSgocmVzLCBjdXJyZW50S2V5KSA9PiByZXMgJiYgcmVzW2N1cnJlbnRLZXldLCBvYmopO1xyXG4gICAgfVxyXG5cclxuICAgIG5lc3RlZEtleUV4aXN0cyhvYmo6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBrZXkuc3BsaXQoXCIuXCIpLnJlZHVjZSgoYWNjLCBjdXJyZW50S2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjICYmIGN1cnJlbnRLZXkgaW4gYWNjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY1tjdXJyZW50S2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH0sIG9iaikgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuT3JkZXJzSW5UaGVSYW5nZShvcmRlcjogYW55LCByYW5nZTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGlzRGF0ZUJldHdlZW5UaGVTZWxlY3RlZFJhbmdlID0gZGF5anMob3JkZXJba2V5XSkuaXNCZXR3ZWVuKHJhbmdlLm1pblNlbGVjdGVkRGF0ZSwgcmFuZ2UubWF4U2VsZWN0ZWREYXRlKTtcclxuICAgICAgICBjb25zdCBpc0RhdGVTYW1lQXNUaGVNaW5TZWxlY3RlZERhdGUgPSBkYXlqcyhvcmRlcltrZXldKS5pc1NhbWUocmFuZ2UubWluU2VsZWN0ZWREYXRlKTtcclxuICAgICAgICBjb25zdCBpc0RhdGVTYW1lQXNUaGVNYXhTZWxlY3RlZERhdGUgPSBkYXlqcyhvcmRlcltrZXldKS5pc1NhbWUocmFuZ2UubWF4U2VsZWN0ZWREYXRlKTtcclxuICAgICAgICByZXR1cm4gaXNEYXRlQmV0d2VlblRoZVNlbGVjdGVkUmFuZ2UgfHwgaXNEYXRlU2FtZUFzVGhlTWluU2VsZWN0ZWREYXRlIHx8IGlzRGF0ZVNhbWVBc1RoZU1heFNlbGVjdGVkRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5EYXRhRm9yVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFN0YXJ0RGF0ZSA9IGRheWpzKHNlbGVjdGVkRGF0YS5zdGFydFRpbWUsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbmREYXRlID0gZGF5anMoc2VsZWN0ZWREYXRhLmVuZFRpbWUsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZGF5anMob2JqLnN0YXJ0VGltZSwgZm9ybWF0KTtcclxuICAgICAgICBjb25zdCBlbmRUaW1lID0gZGF5anMob2JqLmVuZFRpbWUsIGZvcm1hdCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgPSBzdGFydFRpbWUuaXNTYW1lKHNlbGVjdGVkU3RhcnREYXRlKTtcclxuICAgICAgICBjb25zdCBpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IHN0YXJ0VGltZS5pc0JldHdlZW4oc2VsZWN0ZWRTdGFydERhdGUsIHNlbGVjdGVkRW5kRGF0ZSk7XHJcbiAgICAgICAgY29uc3QgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lID0gZW5kVGltZS5pc1NhbWUoc2VsZWN0ZWRFbmREYXRlKTtcclxuICAgICAgICBjb25zdCBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBlbmRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKSB8fFxyXG4gICAgICAgICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6IGFueSwga2V5OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBmb3JtYXQgPSBcIk1NL0REL1lZWVkgSEg6bW06c3NcIjtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEZyb21UaW1lID0gZGF5anMoYDAxLzAxLzIwMDEgJHtzZWxlY3RlZERhdGEuZnJvbVRpbWV9YCwgZm9ybWF0KTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvVGltZSA9IGRheWpzKGAwMS8wMS8yMDAxICR7c2VsZWN0ZWREYXRhLnRvVGltZX1gLCBmb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IG9ialRpbWUgPSBvYmpba2V5XTtcclxuXHJcbiAgICAgICAgaWYgKFtcIlwiLCBcIi1cIiwgbnVsbF0uaW5jbHVkZXMob2JqVGltZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XSA9PT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XSA9PT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldID09PSBcIjBcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV0gPT09IFwiMFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVRpbWVSYW5nZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkYXlqc1RpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke29ialRpbWV9YCwgZm9ybWF0KTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRGcm9tVGltZSA9IGRheWpzVGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICAgICAgY29uc3QgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRUb1RpbWUgPSBkYXlqc1RpbWUuaXNTYW1lKHNlbGVjdGVkVG9UaW1lKTtcclxuICAgICAgICBjb25zdCBpc09ialRpbWVCZXR3ZWVuU2VsZWN0ZWRGcm9tVGltZUFuZFRvVGltZSA9IGRheWpzVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBpc09ialRpbWVTYW1lQXNTZWxlY3RlZEZyb21UaW1lIHx8XHJcbiAgICAgICAgICAgIGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkVG9UaW1lIHx8XHJcbiAgICAgICAgICAgIGlzT2JqVGltZUJldHdlZW5TZWxlY3RlZEZyb21UaW1lQW5kVG9UaW1lXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IFwiTU0vREQvWVlZWSBISDptbTpzc1wiO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRnJvbVRpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke3NlbGVjdGVkRGF0YS5mcm9tVGltZX1gLCBmb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9UaW1lID0gZGF5anMoYDAxLzAxLzIwMDEgJHtzZWxlY3RlZERhdGEudG9UaW1lfWAsIGZvcm1hdCk7XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldWzBdID09PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XVswXSA9PT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XVswXSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XVswXSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVRpbWVSYW5nZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke29ialtrZXldWzFdfWAsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IGRheWpzKGAwMS8wMS8yMDAxICR7b2JqW2tleV1bMl19YCwgZm9ybWF0KTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSA9IHN0YXJ0VGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICAgICAgY29uc3QgaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBzdGFydFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lKTtcclxuICAgICAgICBjb25zdCBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgPSBlbmRUaW1lLmlzU2FtZShzZWxlY3RlZFRvVGltZSk7XHJcbiAgICAgICAgY29uc3QgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gZW5kVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgICAgICAvLyBwcmV2aW91cyBjb25kaXRpb24gdG8gYXBwbHkgdGltYmFuZCBmaWx0dGVyXHJcbiAgICAgICAgLy8gcmV0dXJuIChcclxuICAgICAgICAvLyAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAvLyAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKSB8fFxyXG4gICAgICAgIC8vICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgLy8gICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICAgICAgLy8gKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSB8fFxyXG4gICAgICAgICAgICBpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSB8fFxyXG4gICAgICAgICAgICBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgfHxcclxuICAgICAgICAgICAgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqOiBhbnksIHZhbHVlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICAgICAgbGV0IHBhcnNpbmdGb3JtYXQ6IHN0cmluZztcclxuICAgICAgICBpZiAoa2V5ID09PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgICAgICAgIHBhcnNpbmdGb3JtYXQgPSBcIllZWVktTU0tRERcIjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRheWpzU3RhcnREYXRlID0gZGF5anMob2JqLnN0YXJ0RGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRheWpzRW5kRGF0ZSA9IGRheWpzKG9iai5lbmREYXRlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZUlzQmV0d2VlblNlbERhdGUgPSBkYXlqc1N0YXJ0RGF0ZS5pc0JldHdlZW4odmFsdWUuZnJvbURhdGUsIHZhbHVlLnRvRGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGVJc0JldHdlZW5TZWxEYXRlID0gZGF5anNFbmREYXRlLmlzQmV0d2Vlbih2YWx1ZS5mcm9tRGF0ZSwgdmFsdWUudG9EYXRlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlID0gdmFsdWUuZnJvbURhdGUuaXNTYW1lKGRheWpzU3RhcnREYXRlKTtcclxuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZSA9IHZhbHVlLnRvRGF0ZS5pc1NhbWUoZGF5anNFbmREYXRlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAoc3RhcnREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBzdGFydERhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSkgJiZcclxuICAgICAgICAgICAgICAgIChlbmREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBlbmREYXRlSXNTYW1lQXNTZWxFbmREYXRlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJBaXJEYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIldlZWtcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiQWN0dWFsV2Vla1N0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJ0aW1lb3V0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJzY2hlZHVsZWREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic2NoZWR1bGVkV2Vla1wiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHBhcnNpbmdGb3JtYXQgPSBcIk1NL0REL1lZWVlcIjtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUlzQmV0d2VlblNlbERhdGUgPSBkYXlqcyhvYmpba2V5XSwgcGFyc2luZ0Zvcm1hdCkuaXNCZXR3ZWVuKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUubWluU2VsZWN0ZWREYXRlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWUubWF4U2VsZWN0ZWREYXRlLFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlID0gZGF5anMob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzU2FtZSh2YWx1ZS5taW5TZWxlY3RlZERhdGUpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlSXNTYW1lQXNTZWxFbmREYXRlID0gZGF5anMob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzU2FtZSh2YWx1ZS5tYXhTZWxlY3RlZERhdGUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGRhdGVJc0JldHdlZW5TZWxEYXRlIHx8IGRhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSB8fCBkYXRlSXNTYW1lQXNTZWxFbmREYXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0aWFsaXplVGltZUZpbHRlckRhdGEoY2xvbmVkRGF0YTogYW55W10sIGtleSA9IFwic3RhcnRFbmRUaW1lXCIpIHtcclxuICAgICAgICBjb25zdCBzdGFydFRpbWVBcnIgPSBtYXAoY2xvbmVkRGF0YSwgXCJzdGFydFRpbWVcIik7XHJcbiAgICAgICAgY29uc3QgZW5kVGltZUFyciA9IG1hcChjbG9uZWREYXRhLCBcImVuZFRpbWVcIik7XHJcblxyXG4gICAgICAgIHN0YXJ0VGltZUFyci5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZUFzY2VuZGluZyhhLCBiKSk7XHJcblxyXG4gICAgICAgIGVuZFRpbWVBcnIuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVEZXNjZW5kaW5nKGEsIGIpKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXJ0RW5kVGltZSA9IHtcclxuICAgICAgICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWVBcnJbMF0sXHJcbiAgICAgICAgICAgIGVuZFRpbWU6IGVuZFRpbWVBcnJbMF0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQoa2V5LCBpbml0aWFsU3RhcnRFbmRUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5Db2x1bW5GaWx0ZXJTdGF0dXMoZGF0YTogYW55W10sIGhlYWRlck5hbWU6IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgICAgIGlmIChoZWFkZXJOYW1lID09PSBcInN0YXJ0RW5kVGltZVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBkYXRhLm1hcCgodSkgPT4gdVtoZWFkZXJOYW1lXVswXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVuaXFUaW1lID0gdW5pcSh0aW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIHVuaXFUaW1lLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhKHVuaXEoZGF0YS5tYXAoKHUpID0+IHVbaGVhZGVyTmFtZV0pKS5sZW5ndGggPiAxKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWx0ZXJPcHRpb25zRGF0YShkYXRhOiBhbnlbXSwgY2xvbmVkRGF0YTogYW55W10sIGtleT86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJTZXQgPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcbiAgICAgICAgY29uc3Qga2V5VG9DaGVjayA9IGtleSB8fCB0aGlzLnNlbGVjdGVkUmFkaW87XHJcbiAgICAgICAgaWYgKGFwcGxpZWRGaWx0ZXJTZXQuaGFzKGtleVRvQ2hlY2spKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlckRhdGEoY2xvbmVkRGF0YSwga2V5VG9DaGVjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHJlT3JkZXJBcHBsaWVkRmlsdGVyc1N0YXRlKGNsb25lZERhdGE6IGFueVtdLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IGlzRmlsdGVyZWQgPSB0cnVlO1xyXG4gICAgICAgIGlzRmlsdGVyZWQgPSB0aGlzLmNoZWNrSWZGaWx0ZXJJc0FwcGxpZWQoY2xvbmVkRGF0YSwgdmFsdWUpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkKTtcclxuICAgICAgICByZXR1cm4gaXNGaWx0ZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmRmlsdGVySXNBcHBsaWVkKGNsb25lZERhdGE6IGFueVtdLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlT2ZDb2x1bW4gPSBzb3J0QnkoY2xvbmVkRGF0YS5tYXAoKGl0ZW0pID0+IGl0ZW1bdGhpcy5zZWxlY3RlZFJhZGlvXSkpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZU9mQ29sdW1uID0gc29ydEJ5KFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGNsb25lZERhdGEsIHZhbHVlKS5tYXAoKGl0ZW0pID0+IGl0ZW1bdGhpcy5zZWxlY3RlZFJhZGlvXSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gIWlzRXF1YWwoaW5pdGlhbFZhbHVlT2ZDb2x1bW4sIGN1cnJlbnRWYWx1ZU9mQ29sdW1uKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUZpbHRlcihkYXRhOiBhbnlbXSwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZERhdGEgPSBkYXRhO1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2VsZWN0ZWRSYWRpbztcclxuICAgICAgICBpZiAodGhpcy5zbGlkZXJTZXQuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiBvYmpba2V5XSA+PSB2YWx1ZS5taW4gJiYgb2JqW2tleV0gPD0gdmFsdWUubWF4KTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiQWlyRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJ0aW1lb3V0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJkYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkRhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwicmV2aXNpb25TdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiR2VuZXJhdGVkT25cIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiV2Vla1wiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJBY3R1YWxXZWVrU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIlZpb2xhdGVkU3BvdERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiVmlvbGF0aW5nU3BvdERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic2NoZWR1bGVkRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJMYXN0RmV0Y2hlZERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiY3JlYXRlZE9uXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic2NoZWR1bGVkV2Vla1wiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5pc09iamVjdEluVGhlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLmdldERhdGFJblRoZURhdGVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkVuZFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwidGltZW91dFRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImVuZFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwidGltZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJTdGFydFRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiRW5kVGltZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVTdGFydFRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRW5kVGltZVwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCIgfHwga2V5ID09PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKHUpID0+IHZhbHVlLmluY2x1ZGVzKHVba2V5XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGlzT2JqZWN0SW5UaGVSYW5nZShvYmo6IGFueSwgdmFsdWU6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBvYmpWYWwgPSBvYmpba2V5XTtcclxuICAgICAgICBjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhvYmpWYWwpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUuZnJvbURhdGUgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlLnRvRGF0ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB2YWx1ZS5mcm9tRGF0ZSA9IGRheWpzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKHZhbHVlLmZyb21EYXRlLCBcIkREL01NL1lZWVlcIiksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB2YWx1ZS50b0RhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZSh2YWx1ZS50b0RhdGUsIFwiREQvTU0vWVlZWVwiKSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzRGF0ZVNhbWVBc1N0YXJ0T2ZUaGVSYW5nZSA9IHZhbHVlLmZyb21EYXRlLmlzU2FtZShvYmpWYWwpO1xyXG4gICAgICAgIGNvbnN0IGlzRGF0ZVNhbWVBc0VuZE9mVGhlUmFuZ2UgPSB2YWx1ZS50b0RhdGUuaXNTYW1lKG9ialZhbCk7XHJcbiAgICAgICAgY29uc3QgaXNEYXRlQmV0d2VlblRoZVN0YXJ0QW5kRW5kT2ZSYW5nZSA9IGRheWpzRGF0ZS5pc0JldHdlZW4odmFsdWUuZnJvbURhdGUsIHZhbHVlLnRvRGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuIGlzRGF0ZVNhbWVBc1N0YXJ0T2ZUaGVSYW5nZSB8fCBpc0RhdGVTYW1lQXNFbmRPZlRoZVJhbmdlIHx8IGlzRGF0ZUJldHdlZW5UaGVTdGFydEFuZEVuZE9mUmFuZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU3RhdGVPZlRoZUN1cnJlbnRGaWx0ZXJUYWIoc29ydE1hcDogTWFwPHN0cmluZywgU29ydFR5cGU+KSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlS2V5ID0gdGhpcy5zZWxlY3RlZFJhZGlvO1xyXG4gICAgICAgIGxldCBrZXlBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5pc0ZpbHRlclNvcnRBY3RpdmUpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKGFjdGl2ZUtleSkpIHtcclxuICAgICAgICAgICAgICAgIGtleUFyciA9IGtleS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZVtrZXldID0gdGhpcy5pc1Rvb2x0aXBBY3RpdmUoa2V5QXJyLCBzb3J0TWFwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVN0YXRlT2ZBbGxUaGVLZXlzKHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPikge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5QXJyID0ga2V5LnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgdGhpcy5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9IHRoaXMuaXNUb29sdGlwQWN0aXZlKGtleUFyciwgc29ydE1hcCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5jcmVtZW50SG91cih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQodmFsdWUsIDEwKSA8IDEyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApICsgMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGRlY3JlbWVudEhvdXIodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gMTI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJzZUludCh2YWx1ZSwgMTApID4gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKSAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAxMjtcclxuICAgIH1cclxuXHJcbiAgICBpbmNyZW1lbnRNaW51dGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIC8vIGluY3JlbWVudCB0byBuZWFyZXN0IHByb3BlciBpbnRlcnZhbCgxNSwzMCw0NSlcclxuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIGlmIChtaW51dGUgPD0gMTQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiMTVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAxNSAmJiBtaW51dGUgPD0gMjkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiMzBcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAzMCAmJiBtaW51dGUgPD0gNDQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiNDVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSA0NSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIwMFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVjcmVtZW50TWludXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIGlmIChtaW51dGUgPiAwICYmIG1pbnV0ZSA8PSAxNSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIwMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDE2ICYmIG1pbnV0ZSA8PSAzMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIxNVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDMxICYmIG1pbnV0ZSA8PSA0NSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIzMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID4gNDUgfHwgbWludXRlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIjQ1XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Q2hlY2tib3ggbWV0aG9kPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vXHJcblxyXG4gICAgZGlzYWJsZUFjdGl2ZUZpbHRlckNsZWFyQnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyU2V0ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpO1xyXG4gICAgICAgIGNvbnN0IGlzU29ydFByZXNlbnQgPVxyXG4gICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUgJiZcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLnNpemUgPiAwICYmXHJcbiAgICAgICAgICAgIGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyICE9PSBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuXHJcbiAgICAgICAgcmV0dXJuICEoc2VsZWN0ZWRGaWx0ZXJTZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykgfHwgaXNTb3J0UHJlc2VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykgJiZcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gY3VycmVudENvbHVtblNvcnRGaWx0ZXIgfHwgU29ydFR5cGVFbnVtLkRFRkFVTFQ7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUxpc3RGb3JDaGVja2JveEZpbHRlcihcclxuICAgICAgICBoZWFkZXI6IHN0cmluZyxcclxuICAgICAgICBvcHRpb25EYXRhOiBhbnlbXSxcclxuICAgICAgICBzaG93U3BsaXRlZE9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICAgICBzcGxpdERlbGltaXRlcjogc3RyaW5nID0gdGhpcy5ERUZBVUxUX1NQTElUX1NFUEFSQVRPUixcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBPcHRpb25zID0gdGhpcy5nZXRUb29sdGlwTW9kZWxGcm9tT3B0aW9uRGF0YShcclxuICAgICAgICAgICAgb3B0aW9uRGF0YSxcclxuICAgICAgICAgICAgaGVhZGVyLFxyXG4gICAgICAgICAgICBzaG93U3BsaXRlZE9wdGlvbnMsXHJcbiAgICAgICAgICAgIHNwbGl0RGVsaW1pdGVyLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0VW5zZWxlY3RMaXN0Q2hlY2tib3godG9vbHRpcE9wdGlvbnMsIGhlYWRlcik7XHJcbiAgICAgICAgdGhpcy5mb3JtYXROdWxsT3B0aW9uVG9TcGVjaWZpZWRTdHJpbmcodG9vbHRpcE9wdGlvbnMsIHRoaXMubnVsbFRvQmVGb3JtYXRlZEludG9TdHJpbmcpO1xyXG5cclxuICAgICAgICByZXR1cm4gdG9vbHRpcE9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VG9vbHRpcE1vZGVsRnJvbU9wdGlvbkRhdGEoXHJcbiAgICAgICAgb3B0aW9uRGF0YTogYW55W10sXHJcbiAgICAgICAgaGVhZGVyOiBzdHJpbmcsXHJcbiAgICAgICAgc2hvd1NwbGl0ZWRPcHRpb25zOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgc3BsaXREZWxpbWl0ZXI6IHN0cmluZyA9IHRoaXMuREVGQVVMVF9TUExJVF9TRVBBUkFUT1IsXHJcbiAgICApIHtcclxuICAgICAgICBsZXQgdW5pcU9wdGlvbkRhdGEgPSBbXTtcclxuICAgICAgICBpZiAoc2hvd1NwbGl0ZWRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGxldCBzcGxpdHRlZE9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIG9wdGlvbkRhdGEuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzcGxpdHRlZE9wdGlvbnMgPSBbLi4uc3BsaXR0ZWRPcHRpb25zLCAuLi5vcHRpb25baGVhZGVyXS5zcGxpdChzcGxpdERlbGltaXRlcildO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdW5pcU9wdGlvbkRhdGEgPSB1bmlxKHNwbGl0dGVkT3B0aW9ucyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdW5pcU9wdGlvbkRhdGEgPSB1bmlxKG9wdGlvbkRhdGEubWFwKChpdGVtKSA9PiBpdGVtW2hlYWRlcl0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuaXFPcHRpb25EYXRhLm1hcCgoaXRlbSwgaW5kZXgpID0+IG5ldyBUb29sdGlwTW9kZWwoaXRlbSwgaW5kZXggKyAxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0VW5zZWxlY3RMaXN0Q2hlY2tib3godG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdLCBoZWFkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBTZWxlY3RlZE1hcFdpdGhPcmlnaW5hbEtleXMgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICB0b29sdGlwU2VsZWN0ZWRNYXBXaXRoT3JpZ2luYWxLZXlzLnNldChrZXkuc3BsaXQodGhpcy5TUExJVEVEX0NIRUNLQk9YX0ZJTFRFUl9LRVkpWzBdLCB2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0b29sdGlwU2VsZWN0ZWRNYXBXaXRoT3JpZ2luYWxLZXlzLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVTZXQgPSBuZXcgU2V0KHRvb2x0aXBTZWxlY3RlZE1hcFdpdGhPcmlnaW5hbEtleXMuZ2V0KGhlYWRlcikpO1xyXG4gICAgICAgICAgICB0b29sdGlwT3B0aW9ucy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlU2V0LmhhcyhpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdG9vbHRpcE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdE51bGxPcHRpb25Ub1NwZWNpZmllZFN0cmluZyh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0b29sdGlwT3B0aW9ucy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT0gbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdG9vbHRpcE9wdGlvbnNbaW5kZXhdLmxhYmVsID0gZm9ybWF0dGVkU3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDbG9uZWRUb29sdGlwQW5kVG9vbHRpcE9wdGlvbih0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIHNvcnRCeVN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgW3NlbGVjdGVkSXRlbXMsIHVuc2VsZWN0ZWRJdGVtc10gPSB0aGlzLmdldFNlbGVjdGVkQW5kVW5zZWxlY3RlZEl0ZW1zKHRvb2x0aXBPcHRpb25zKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRTZWxlY3RlZEl0ZW1zID0gc29ydEJ5KHNlbGVjdGVkSXRlbXMsIHNvcnRCeVN0cmluZyk7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkVW5zZWxlY3RlZEl0ZW1zID0gc29ydEJ5KHVuc2VsZWN0ZWRJdGVtcywgc29ydEJ5U3RyaW5nKTtcclxuXHJcbiAgICAgICAgY29uc3QgY2xvbmVkVG9vbHRpcE9wdGlvbnMgPSBbLi4uc29ydGVkU2VsZWN0ZWRJdGVtcywgLi4uc29ydGVkVW5zZWxlY3RlZEl0ZW1zXTtcclxuICAgICAgICBjb25zdCB1cGRhdGVkVG9vbHRpcE9wdGlvbnMgPSBjbG9uZURlZXAoY2xvbmVkVG9vbHRpcE9wdGlvbnMpO1xyXG5cclxuICAgICAgICByZXR1cm4gW2Nsb25lZFRvb2x0aXBPcHRpb25zLCB1cGRhdGVkVG9vbHRpcE9wdGlvbnMsIHNlbGVjdGVkSXRlbXMsIHVuc2VsZWN0ZWRJdGVtc107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SGVpZ2h0T2ZDaGVja2JveFRvb2x0aXBGaWx0ZXIoZGF0YUxlbmd0aDogbnVtYmVyLCBtYXJnaW46IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBkYXRhTGVuZ3RoID4gNiA/IDE4MCA6IDIyLjMxICogZGF0YUxlbmd0aCArIG1hcmdpbiAqIGRhdGFMZW5ndGggKyBtYXJnaW47XHJcbiAgICB9XHJcblxyXG4gICAgdW5DaGVja0FsbENoZWNrYm94KHRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSwgY2xvbmVkVG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdKSB7XHJcbiAgICAgICAgdG9vbHRpcE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjbG9uZWRUb29sdGlwT3B0aW9ucy5maW5kSW5kZXgoKG9wdCkgPT4gb3B0LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgY2xvbmVkVG9vbHRpcE9wdGlvbnNbaW5kZXhdLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RBbGxDaGVja2JveCh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIGNsb25lZFRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSkge1xyXG4gICAgICAgIHRvb2x0aXBPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjbG9uZWRUb29sdGlwT3B0aW9ucy5maW5kSW5kZXgoKG9wdCkgPT4gb3B0LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgY2xvbmVkVG9vbHRpcE9wdGlvbnNbaW5kZXhdLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVuc2VsZWN0Q2hlY2tib3goZGF0YTogVG9vbHRpcE1vZGVsLCBjbG9uZWRUb29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10pIHtcclxuICAgICAgICBkYXRhLmlzU2VsZWN0ZWQgPSAhZGF0YS5pc1NlbGVjdGVkO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2xvbmVkVG9vbHRpcE9wdGlvbnMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBkYXRhLmlkKTtcclxuICAgICAgICBjbG9uZWRUb29sdGlwT3B0aW9uc1tpbmRleF0uaXNTZWxlY3RlZCA9IGRhdGEuaXNTZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWxlY3RlZEFuZFVuc2VsZWN0ZWRJdGVtcyh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10pIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdG9vbHRpcE9wdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpO1xyXG4gICAgICAgIGNvbnN0IHVuc2VsZWN0ZWRJdGVtcyA9IHRvb2x0aXBPcHRpb25zLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaXNTZWxlY3RlZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBbc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEl0ZW1zXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGVja2JveFByZXZpb3VzU2VsZWN0ZWRWYWx1ZShjbG9uZWRUYWJsZURhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHByZXZpb3VzU2VsZWN0ZWRWYWx1ZSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZFZhbHVlID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSBzb3J0QnkodW5pcShjbG9uZWRUYWJsZURhdGEubWFwKChpdGVtKSA9PiBpdGVtW3RoaXMuc2VsZWN0ZWRSYWRpb10pKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQodGhpcy5zZWxlY3RlZFJhZGlvLCBpbml0aWFsVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVmFsdWUgPSBzb3J0QnkodW5pcShjbG9uZWRUYWJsZURhdGEubWFwKChpdGVtKSA9PiBpdGVtW3RoaXMuc2VsZWN0ZWRSYWRpb10pKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldCh0aGlzLnNlbGVjdGVkUmFkaW8sIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHJldmlvdXNTZWxlY3RlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoZWNrYm94Q3VycmVudFNlbGVjdGVkVmFsdWUoc2VhcmNoZWRTdHJpbmc6IHN0cmluZywgdG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdKSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTZWxlY3RlZFZhbHVlID0gW107XHJcblxyXG4gICAgICAgIGlmICh0b29sdGlwT3B0aW9ucykge1xyXG4gICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWRWYWx1ZSA9IHNvcnRCeSh0b29sdGlwT3B0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhc2VhcmNoZWRTdHJpbmcgJiZcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZFZhbHVlLmxlbmd0aCA9PT0gdG9vbHRpcE9wdGlvbnMubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZFZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJsYW5rSW5kZXggPSBjdXJyZW50U2VsZWN0ZWRWYWx1ZS5maW5kSW5kZXgoKGl0ZW06IHN0cmluZykgPT4gaXRlbSA9PSBudWxsKTtcclxuICAgICAgICBpZiAoYmxhbmtJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY3VycmVudFNlbGVjdGVkVmFsdWUgPSBzb3J0QnkoY3VycmVudFNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWxlY3RlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZTb3J0aW5nQ2hhbmdlZCh0ZW1wU29ydE9yZGVyOiBTb3J0VHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gdGhpcy5nZXRDb2x1bW5Tb3J0U3RhdGVGb3JTZWxlY3RlZFJhZGlvKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU29ydENoYW5nZWQgPSB0ZW1wU29ydE9yZGVyICE9IG51bGwgJiYgdGVtcFNvcnRPcmRlciAhPT0gY3VycmVudENvbHVtblNvcnRGaWx0ZXI7XHJcbiAgICAgICAgcmV0dXJuIGlzU29ydENoYW5nZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyZWRPcHRpb25Bc0JvbGRTdHJpbmcoc3RyOiBzdHJpbmcsIGNsb25lZFRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSkge1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBPcHRpb25zID0gY2xvbmVEZWVwKFxyXG4gICAgICAgICAgICBjbG9uZWRUb29sdGlwT3B0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHN0ci50b0xvd2VyQ2FzZSgpKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0b29sdGlwT3B0aW9ucy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQubGFiZWwgPSB0aGlzLmJvbGRTdHJpbmcoZWxlbWVudC5sYWJlbCwgc3RyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRvb2x0aXBPcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGJvbGRTdHJpbmcoc3RyOiBzdHJpbmcsIGZpbmQ6IHN0cmluZykge1xyXG4gICAgICAgIGxldCB1cGRhdGVkU3RyaW5nID0gc3RyO1xyXG4gICAgICAgIGNvbnN0IGZpbmRTdHJpbmcgPSBmaW5kLnJlcGxhY2UoXCI8XCIsIFwiJmx0O1wiKS5yZXBsYWNlKFwiPlwiLCBcIiZndDtcIik7XHJcbiAgICAgICAgdXBkYXRlZFN0cmluZyA9IHVwZGF0ZWRTdHJpbmcucmVwbGFjZShcIjxcIiwgXCImbHQ7XCIpLnJlcGxhY2UoXCI+XCIsIFwiJmd0O1wiKTtcclxuICAgICAgICBjb25zdCBpbmRleGVzID0gdGhpcy5nZXRJbmRpY2VzT2YoZmluZFN0cmluZywgdXBkYXRlZFN0cmluZywgZmFsc2UpO1xyXG5cclxuICAgICAgICBpbmRleGVzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpdGVtICsgaW5kZXggKiA3OyAvLyBNdWx0aXBseWluZyBieSA3IGFzIHRoZXJlIGFyZSA3Y2hhcjogPGI+PC9iPlxyXG4gICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBmaW5kU3RyaW5nLmxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3Qgc3RyVG9CZVJlcGxhY2VkID0gdXBkYXRlZFN0cmluZy5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xyXG4gICAgICAgICAgICB1cGRhdGVkU3RyaW5nID0gdXBkYXRlZFN0cmluZy5yZXBsYWNlKHN0clRvQmVSZXBsYWNlZCwgYDxiPiR7c3RyVG9CZVJlcGxhY2VkfTwvYj5gKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdXBkYXRlZFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbmRpY2VzT2Yoc2VhcmNoU3RyOiBzdHJpbmcsIHN0cjogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlOiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoU3RyTGVuID0gc2VhcmNoU3RyLmxlbmd0aDtcclxuICAgICAgICBpZiAoc2VhcmNoU3RyTGVuID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xyXG4gICAgICAgIGxldCBpbmRleDtcclxuICAgICAgICBjb25zdCBpbmRpY2VzID0gW107XHJcbiAgICAgICAgbGV0IHVwZGF0ZWRTdHIgPSBzdHI7XHJcbiAgICAgICAgbGV0IHVwZGF0ZWRTZWFyY2hTdHIgPSBzZWFyY2hTdHI7XHJcbiAgICAgICAgaWYgKCFjYXNlU2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRTdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgdXBkYXRlZFNlYXJjaFN0ciA9IHNlYXJjaFN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5kZXggPSB1cGRhdGVkU3RyLmluZGV4T2YodXBkYXRlZFNlYXJjaFN0ciwgc3RhcnRJbmRleCk7XHJcbiAgICAgICAgd2hpbGUgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4KTtcclxuICAgICAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4ICsgc2VhcmNoU3RyTGVuO1xyXG4gICAgICAgICAgICBpbmRleCA9IHVwZGF0ZWRTdHIuaW5kZXhPZih1cGRhdGVkU2VhcmNoU3RyLCBzdGFydEluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluZGljZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUFsbEJ0bnNXaGVuVGhlcmVBcmVOb0ZpbHRlcmVkUmVzdWx0cygpOiBbbnVtYmVyLCBib29sZWFuLCBib29sZWFuLCBib29sZWFuXSB7XHJcbiAgICAgICAgLy8gW3NlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQsIGRpc2FibGVDaGVja2JveEFwcGx5LCBkaXNhYmxlQ2xlYXJBbGwsIGRpc2FibGVTZWxlY3RBbGxdO1xyXG4gICAgICAgIHJldHVybiBbMCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNhbGVuZGFyIGZpbHRlcj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly9cclxuICAgIGNyZWF0ZVJhbmdlRm9yVGhlRGF0ZUZpbHRlcihvcHRpb25EYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBtaW5NYXhEYXRlO1xyXG4gICAgICAgIC8vIFdoZW4geW91IHdhbnQgdG8gdXNlIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZSBjb21iaW5lZCBhcyBzaW5nbGUgY29sdW1uIHRoZW4gdXNlIFBlcmlvZC5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJwZXJpb2RcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiYnV5ZXJGbGlnaHREYXRlc1wiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJ0cmFmZmljRmxpZ2h0RGF0ZXNcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBtaW5NYXhEYXRlID0gdGhpcy5jcmVhdGVTdGFydEVuZERhdGVSYW5nZShvcHRpb25EYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtaW5NYXhEYXRlID0gdGhpcy5yZXR1cm5NaW5BbmRNYXhEYXRlKG9wdGlvbkRhdGEsIHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWluTWF4RGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTdGFydEVuZERhdGVSYW5nZShvcHRpb25EYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IG1pblN0YXJ0RGF0ZSA9IHRoaXMucmV0dXJuTWluQW5kTWF4RGF0ZShvcHRpb25EYXRhLCBcInN0YXJ0RGF0ZVwiKTtcclxuICAgICAgICBjb25zdCBtYXhFbmREYXRlID0gdGhpcy5yZXR1cm5NaW5BbmRNYXhEYXRlKG9wdGlvbkRhdGEsIFwiZW5kRGF0ZVwiKTtcclxuICAgICAgICByZXR1cm4gW21pblN0YXJ0RGF0ZVswXSwgbWF4RW5kRGF0ZVsxXV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWluQW5kTWF4RGF0ZVJhbmdlRm9yQ2FsZW5kYXIobWluTWF4RGF0ZTogYW55W10sIHBhcnNpbmdGb3JtYXQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyTWluRW5hYmxlZERhdGUgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heERhdGVbMF0sIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyTWF4RW5hYmxlZERhdGUgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heERhdGVbMV0sIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICAgIHJldHVybiBbY2FsZW5kYXJNaW5FbmFibGVkRGF0ZSwgY2FsZW5kYXJNYXhFbmFibGVkRGF0ZV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0ZWREYXRlRm9yQ2FsZW5kYXIobWluTWF4RGF0ZTogYW55W10sIHBhcnNpbmdGb3JtYXQ6IHN0cmluZywgbWluRGF0ZTogTmdiRGF0ZVR5cGUsIG1heERhdGU6IE5nYkRhdGVUeXBlKSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkTWluRGF0ZTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRNYXhEYXRlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlT2JqID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRlT2JqLmZyb21EYXRlLmlzQWZ0ZXIobWluTWF4RGF0ZVswXSkpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTWluRGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUoc2VsZWN0ZWREYXRlT2JqLmZyb21EYXRlLCBwYXJzaW5nRm9ybWF0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTWluRGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4RGF0ZVswXSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGVPYmoudG9EYXRlLmlzQWZ0ZXIobWluTWF4RGF0ZVsxXSkpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTWF4RGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4RGF0ZVsxXSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE1heERhdGUgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKHNlbGVjdGVkRGF0ZU9iai50b0RhdGUsIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRNaW5EYXRlID0gY2xvbmVEZWVwKG1pbkRhdGUpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZE1heERhdGUgPSBjbG9uZURlZXAobWF4RGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW3NlbGVjdGVkTWluRGF0ZSwgc2VsZWN0ZWRNYXhEYXRlXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcmV2aW91c1NlbGVjdGVkRGF0ZXNGb3JDYWxlbmRhcihvcHRpb25EYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBwcmV2aW91c1NlbGVjdGVkRGF0ZTogeyBmcm9tRGF0ZTogYW55OyB0b0RhdGU6IGFueSB9ID0geyBmcm9tRGF0ZTogbnVsbCwgdG9EYXRlOiBudWxsIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JEYXRlRmlsdGVyKG9wdGlvbkRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlTWFwRm9yRGF0ZUZpbHRlcihvcHRpb25EYXRhKTtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZERhdGUgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwcmV2aW91c1NlbGVjdGVkRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsVmFsdWVNYXBGb3JEYXRlRmlsdGVyKG9wdGlvbkRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgbWluTWF4RGF0ZSA9IHRoaXMuY3JlYXRlUmFuZ2VGb3JUaGVEYXRlRmlsdGVyKG9wdGlvbkRhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB7IGZyb21EYXRlOiBtaW5NYXhEYXRlWzBdLCB0b0RhdGU6IG1pbk1heERhdGVbMV0gfTtcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQodGhpcy5zZWxlY3RlZFJhZGlvLCBzZWxlY3RlZERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRTZWxlY3RlZERhdGVzRm9yQ2FsZW5kYXIoY3VycmVudFNlbGVjdGVkRGF0ZTogYW55LCBtaW5EYXRlOiBOZ2JEYXRlVHlwZSwgbWF4RGF0ZTogTmdiRGF0ZVR5cGUpIHtcclxuICAgICAgICBsZXQgY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkID0gY3VycmVudFNlbGVjdGVkRGF0ZTtcclxuICAgICAgICBjb25zdCBmcm9tRGF0ZSA9IHtcclxuICAgICAgICAgICAgeWVhcjogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLmZyb21EYXRlLnllYXIsXHJcbiAgICAgICAgICAgIG1vbnRoOiBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQuZnJvbURhdGUubW9udGgsXHJcbiAgICAgICAgICAgIGRheTogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLmZyb21EYXRlLmRheSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHRvRGF0ZSA9IHtcclxuICAgICAgICAgICAgeWVhcjogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLnRvRGF0ZS55ZWFyLFxyXG4gICAgICAgICAgICBtb250aDogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLnRvRGF0ZS5tb250aCxcclxuICAgICAgICAgICAgZGF5OiBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQudG9EYXRlLmRheSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoaXNFcXVhbChtaW5EYXRlLCBmcm9tRGF0ZSkgJiYgaXNFcXVhbChtYXhEYXRlLCB0b0RhdGUpICYmIHRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZCA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZC5mcm9tRGF0ZSA9IGRheWpzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudChjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQuZnJvbURhdGUpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQudG9EYXRlID0gZGF5anMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZC50b0RhdGUpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1TTElERVI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vXHJcblxyXG4gICAgZ2V0U2xpZGVyVHJhbnNsYXRlRnVuY1ZhbChoZWFkZXI6IHN0cmluZywgY3VycmVuY3lTZXQ6IFNldDxzdHJpbmc+KSB7XHJcbiAgICAgICAgbGV0IHRyYW5zbGF0ZUZ1bmM7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW5jeVNldC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICAgICAgICB0cmFuc2xhdGVGdW5jID0gXCJjdXJyZW5jeVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaGVhZGVyID09PSBcInBvc3RlZEF1ZFBlcmNlbnRcIiB8fCBoZWFkZXIgPT09IFwicGFyZW50Um93U2hhcmVzXCIgfHwgaGVhZGVyID09PSBcInBhcmVudFJvd1B1dFBlcmNlbnRcIikge1xyXG4gICAgICAgICAgICB0cmFuc2xhdGVGdW5jID0gXCJwZXJjZW50XCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdHJhbnNsYXRlRnVuYyA9IFwibm9ybWFsXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlRnVuYztcclxuICAgIH1cclxuXHJcbiAgICBnZXRTbGlkZXJPcHRpb25zKG9wdGlvbnNEYXRhOiBhbnlbXSwgdHJhbnNsYXRlRnVuYzogc3RyaW5nLCBoZWFkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5yZXR1cm5NYXhBbmRNaW5WYWx1ZShvcHRpb25zRGF0YSwgaGVhZGVyLCB0cnVlKTtcclxuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMucmV0dXJuTWF4QW5kTWluVmFsdWUob3B0aW9uc0RhdGEsIGhlYWRlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICBjb25zdCBvYmogPSB0aGlzLnNldE9wdGlvblZhbHVlcyhtaW5WYWx1ZSwgbWF4VmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodHJhbnNsYXRlRnVuYyA9PT0gXCJub3JtYWxcIikge1xyXG4gICAgICAgICAgICBvYmoudHJhbnNsYXRlID0gdGhpcy5ub3JtYWxUcmFuc2xhdGVGdW5jdGlvbjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZUZ1bmMgPT09IFwicGVyY2VudFwiKSB7XHJcbiAgICAgICAgICAgIG9iai50cmFuc2xhdGUgPSB0aGlzLnBlcmNlbnRUcmFuc2xhdGVGdW5jdGlvbjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZUZ1bmMgPT09IFwiY3VycmVuY3lcIikge1xyXG4gICAgICAgICAgICBvYmoudHJhbnNsYXRlID0gdGhpcy5jdXJyZW5jeVRyYW5zbGF0ZUZ1bmN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWxlY3RlZFJhbmdlRm9yU2xpZGVyKGhlYWRlcjogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IHNsaWRlck1pblZhbHVlO1xyXG4gICAgICAgIGxldCBzbGlkZXJNYXhWYWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT2JqID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGhlYWRlcik7XHJcbiAgICAgICAgICAgIHNsaWRlck1pblZhbHVlID0gc2VsZWN0ZWRPYmoubWluIDwgb3B0aW9ucy5mbG9vciA/IG9wdGlvbnMuZmxvb3IgOiBzZWxlY3RlZE9iai5taW47XHJcbiAgICAgICAgICAgIHNsaWRlck1heFZhbHVlID0gc2VsZWN0ZWRPYmoubWF4IDwgb3B0aW9ucy5jZWlsID8gc2VsZWN0ZWRPYmoubWF4IDogb3B0aW9ucy5jZWlsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNsaWRlck1pblZhbHVlID0gb3B0aW9ucy5mbG9vcjtcclxuICAgICAgICAgICAgc2xpZGVyTWF4VmFsdWUgPSBvcHRpb25zLmNlaWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW3NsaWRlck1pblZhbHVlLCBzbGlkZXJNYXhWYWx1ZV07XHJcbiAgICB9XHJcblxyXG4gICAgaXNWYWx1ZUluUmFuZ2Uob3B0aW9uczogT3B0aW9ucywgdmFsOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucy5mbG9vciA8PSB2YWwgJiYgdmFsIDw9IG9wdGlvbnMuY2VpbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcmV2aW91c1NlbGVjdGVkVmFsdWVGb3JTbGlkZXIoY2xvbmVkRGF0YTogYW55W10pIHtcclxuICAgICAgICBsZXQgcHJldmlvdXNTbGlkZXJEYXRhOiB7IG1pbjogYW55OyBtYXg6IGFueSB9ID0geyBtaW46IFwiXCIsIG1heDogXCJcIiB9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTbGlkZXJEYXRhID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlTWFwRm9yU2xpZGVyRmlsdGVyKGNsb25lZERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NsaWRlckRhdGEgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZU1hcEZvclNsaWRlckZpbHRlcihjbG9uZWREYXRhKTtcclxuICAgICAgICAgICAgcHJldmlvdXNTbGlkZXJEYXRhID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHJldmlvdXNTbGlkZXJEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxWYWx1ZU1hcEZvclNsaWRlckZpbHRlcihjbG9uZWREYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5yZXR1cm5NYXhBbmRNaW5WYWx1ZShjbG9uZWREYXRhLCB0aGlzLnNlbGVjdGVkUmFkaW8sIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5yZXR1cm5NYXhBbmRNaW5WYWx1ZShjbG9uZWREYXRhLCB0aGlzLnNlbGVjdGVkUmFkaW8sIGZhbHNlKTtcclxuICAgICAgICBjb25zdCBzbGlkZXJEYXRhID0geyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH07XHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuc2V0KHRoaXMuc2VsZWN0ZWRSYWRpbywgc2xpZGVyRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFNlbGVjdGVkVmFsdWVGb3JTbGlkZXIobWluRW50ZXJlZFZhbDogbnVtYmVyLCBtYXhFbnRlcmVkVmFsOiBudW1iZXIsIG9wdGlvbnM6IE9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgY3VycmVudFNsaWRlckRhdGE6IHsgbWluOiBhbnk7IG1heDogYW55IH0gPSB7IG1pbjogbnVsbCwgbWF4OiBudWxsIH07XHJcbiAgICAgICAgaWYgKG1heEVudGVyZWRWYWwgfHwgbWF4RW50ZXJlZFZhbCA9PT0gMCkge1xyXG4gICAgICAgICAgICBjdXJyZW50U2xpZGVyRGF0YS5tYXggPSBtYXhFbnRlcmVkVmFsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTbGlkZXJEYXRhLm1heCA9IG9wdGlvbnMuY2VpbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtaW5FbnRlcmVkVmFsIHx8IG1pbkVudGVyZWRWYWwgPT09IDApIHtcclxuICAgICAgICAgICAgY3VycmVudFNsaWRlckRhdGEubWluID0gbWluRW50ZXJlZFZhbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50U2xpZGVyRGF0YS5taW4gPSBvcHRpb25zLmZsb29yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjdXJyZW50U2xpZGVyRGF0YS5taW4gPT09IG9wdGlvbnMuZmxvb3IgJiZcclxuICAgICAgICAgICAgY3VycmVudFNsaWRlckRhdGEubWF4ID09PSBvcHRpb25zLmNlaWwgJiZcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY3VycmVudFNsaWRlckRhdGEgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50U2xpZGVyRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09VElNRT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vXHJcbiAgICBnZXRTZWxlY3RlZFRpbWVSYW5nZShoZWFkZXI6IHN0cmluZywgY2xvbmVkRGF0YTogYW55W10pIHtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRGcm9tVGltZTogYW55W107XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkVG9UaW1lOiBhbnlbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRnJvbVRpbWUgPSB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQoaGVhZGVyKS5mcm9tVGltZTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUb1RpbWUgPSB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQoaGVhZGVyKS50b1RpbWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JUaW1lRmlsdGVyKGNsb25lZERhdGEsIGhlYWRlcik7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRnJvbVRpbWUgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQoaGVhZGVyKS5mcm9tVGltZTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUb1RpbWUgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQoaGVhZGVyKS50b1RpbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZWN0ZWRGcm9tVGltZSAhPT0gdW5kZWZpbmVkIHx8IHNlbGVjdGVkVG9UaW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGcm9tVGltZSA9IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0VG9Ud2VsdmVIcnMoc2VsZWN0ZWRGcm9tVGltZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVG9UaW1lID0gQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5mb3JtYXRUb1R3ZWx2ZUhycyhzZWxlY3RlZFRvVGltZSwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGcm9tVGltZSA9IFtcIi1cIiwgXCItXCIsIFwiLVwiXTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUb1RpbWUgPSBbXCItXCIsIFwiLVwiLCBcIi1cIl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW3NlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lXTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsVmFsdWVNYXBGb3JUaW1lRmlsdGVyKGNsb25lZERhdGE6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChrZXkgPT09IFwic3RhcnRFbmRUaW1lXCIgfHwga2V5ID09PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShjbG9uZWREYXRhLCBrZXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlRm9yU3RhcnRPckVuZFRpbWVSYW5nZShjbG9uZWREYXRhLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB1c2UgZm9yIGZpbHRlciB3aGVyZSB3ZSBoYXZlIHN0YXJ0IGFuZCBlbmQgdGltZSByYW5nZSBpbiBvbmUgZmlsdGVyXHJcbiAgICAvLyBzdGFydEVuZFRpbWU6IFtcIjYgLSA3QVwiLCBcIjA2OiAwMCA6IDAwXCIgLCBcIjA3OjAwOjAwXCJdXHJcbiAgICBzZXRJbml0aWFsVmFsdWVGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShjbG9uZWREYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBpbmNsdWRlTXVsdGkgPSBjbG9uZWREYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XVswXSA9PT0gXCI8bXVsdGk+XCIpICE9PSAtMTtcclxuICAgICAgICBjb25zdCBpbmNsdWRlWmVybyA9IGNsb25lZERhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldWzBdID09PSBcIjBcIikgIT09IC0xO1xyXG4gICAgICAgIGNvbnN0IGluY2x1ZGVUaW1lUmFuZ2UgPSBjbG9uZWREYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XVswXSAhPT0gXCIwXCIgJiYgb2JqW2tleV1bMF0gIT09IFwiPG11bHRpPlwiKSAhPT0gLTE7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkU3RhcnRUaW1lID0gY2xvbmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gIVtcIlwiLCBcIi1cIiwgbnVsbCwgXCIwXCIsIFwiPG11bHRpPlwiXS5pbmNsdWRlcyhvYmouc3RhcnRUaW1lKSk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRFbmRUaW1lID0gY2xvbmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gIVtcIlwiLCBcIi1cIiwgbnVsbCwgXCIwXCIsIFwiPG11bHRpPlwiXS5pbmNsdWRlcyhvYmouZW5kVGltZSkpO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydFRpbWVBcnIgPSBtYXAoZmlsdGVyZWRTdGFydFRpbWUsIFwic3RhcnRUaW1lXCIpO1xyXG4gICAgICAgIGNvbnN0IGVuZFRpbWVBcnIgPSBtYXAoZmlsdGVyZWRFbmRUaW1lLCBcImVuZFRpbWVcIik7XHJcblxyXG4gICAgICAgIHN0YXJ0VGltZUFyci5zb3J0KChhLCBiKSA9PiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpKTtcclxuXHJcbiAgICAgICAgZW5kVGltZUFyci5zb3J0KChhLCBiKSA9PiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lRGVzY2VuZGluZyhhLCBiKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgICAgZnJvbVRpbWU6IHN0YXJ0VGltZUFyclswXSxcclxuICAgICAgICAgICAgdG9UaW1lOiBlbmRUaW1lQXJyWzBdLFxyXG4gICAgICAgICAgICBpbmNsdWRlTXVsdGksXHJcbiAgICAgICAgICAgIGluY2x1ZGVaZXJvLFxyXG4gICAgICAgICAgICBpbmNsdWRlVGltZVJhbmdlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXNlIGZvciB0aGUgZmlsdGVycyB3aGVyZSB3ZSBoYXZlIGRpZmZlcmVudCBmaWx0ZXIgZm9yIHN0YXJ0IGFuZCBlbmQgdGltZVxyXG4gICAgLy8gc3RhcnRUaW1lOiBcIjA2OjAwOjAwXCJcclxuICAgIHNldEluaXRpYWxWYWx1ZUZvclN0YXJ0T3JFbmRUaW1lUmFuZ2UoY2xvbmVkRGF0YTogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaW5jbHVkZU11bHRpID0gY2xvbmVkRGF0YS5maW5kSW5kZXgoKG9iaikgPT4gb2JqW2tleV0gPT09IFwiPG11bHRpPlwiKSAhPT0gLTE7XHJcbiAgICAgICAgY29uc3QgaW5jbHVkZVplcm8gPSBjbG9uZWREYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XSA9PT0gXCIwXCIpICE9PSAtMTtcclxuICAgICAgICBjb25zdCBpbmNsdWRlVGltZVJhbmdlID0gY2xvbmVkRGF0YS5maW5kSW5kZXgoKG9iaikgPT4gb2JqW2tleV0gIT09IFwiMFwiICYmIG9ialtrZXldICE9PSBcIjxtdWx0aT5cIikgIT09IC0xO1xyXG5cclxuICAgICAgICBjb25zdCBkYXRhID0gY2xvbmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gIVtcIlwiLCBcIi1cIiwgbnVsbCwgXCIwXCIsIFwiPG11bHRpPlwiXS5pbmNsdWRlcyhvYmpba2V5XSkpO1xyXG5cclxuICAgICAgICBjb25zdCB0aW1lQXJyID0gbWFwKGRhdGEsIGtleSk7XHJcbiAgICAgICAgdGltZUFyci5zb3J0KChhLCBiKSA9PiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgICBmcm9tVGltZTogdGltZUFyclswXSxcclxuICAgICAgICAgICAgdG9UaW1lOiB0aW1lQXJyW3RpbWVBcnIubGVuZ3RoIC0gMV0sXHJcbiAgICAgICAgICAgIGluY2x1ZGVNdWx0aSxcclxuICAgICAgICAgICAgaW5jbHVkZVplcm8sXHJcbiAgICAgICAgICAgIGluY2x1ZGVUaW1lUmFuZ2UsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuc2V0KGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVbnNlbGVjdFRpbWVGaWx0ZXJDaGVja2JveChrZXk6IHN0cmluZywgb3B0aW9uc0RhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHNob3dNdWx0aVRpbWVDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBzaG93WmVyb1RpbWVDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBzaG93RW50ZXJUaW1lQ2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICBsZXQgbXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHplcm9UaW1lQ2hlY2tib3hDaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGVudGVyVGltZUNoZWNrYm94Q2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgc2VsZWN0ZWRUaW1lT2JqO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUaW1lT2JqID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGtleSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUaW1lT2JqID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KGtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGltZUFycjogc3RyaW5nW107XHJcbiAgICAgICAgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVcIiB8fCBrZXkgPT09IFwiVGltZUJhbmRcIikge1xyXG4gICAgICAgICAgICB0aW1lQXJyID0gb3B0aW9uc0RhdGEubWFwKChpdGVtKSA9PiBpdGVtW2tleV1bMF0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRpbWVBcnIgPSBvcHRpb25zRGF0YS5tYXAoKGl0ZW0pID0+IGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZUFyci5maW5kSW5kZXgoKHZhbCkgPT4gdmFsID09PSBcIjBcIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHNob3daZXJvVGltZUNoZWNrYm94ID0gdHJ1ZTtcclxuICAgICAgICAgICAgemVyb1RpbWVDaGVja2JveENoZWNrZWQgPSBzZWxlY3RlZFRpbWVPYmouaW5jbHVkZVplcm87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZUFyci5maW5kSW5kZXgoKHZhbCkgPT4gdmFsID09PSBcIjxtdWx0aT5cIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHNob3dNdWx0aVRpbWVDaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgICAgIG11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkVGltZU9iai5pbmNsdWRlTXVsdGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2hvd1plcm9UaW1lQ2hlY2tib3ggfHwgc2hvd011bHRpVGltZUNoZWNrYm94KSB7XHJcbiAgICAgICAgICAgIHNob3dFbnRlclRpbWVDaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZUFyci5maW5kSW5kZXgoKHZhbCkgPT4gdmFsICE9PSBcIjxtdWx0aT5cIiAmJiB2YWwgIT09IFwiMFwiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkID0gc2VsZWN0ZWRUaW1lT2JqPy5pbmNsdWRlVGltZVJhbmdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2hvd011bHRpVGltZUNoZWNrYm94LFxyXG4gICAgICAgICAgICBzaG93WmVyb1RpbWVDaGVja2JveCxcclxuICAgICAgICAgICAgc2hvd0VudGVyVGltZUNoZWNrYm94LFxyXG4gICAgICAgICAgICBtdWx0aVRpbWVDaGVja2JveENoZWNrZWQsXHJcbiAgICAgICAgICAgIHplcm9UaW1lQ2hlY2tib3hDaGVja2VkLFxyXG4gICAgICAgICAgICBlbnRlclRpbWVDaGVja2JveENoZWNrZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmU3RhcnRUaW1lSXNBZnRlckVuZFRpbWUoc3RhcnRUaW1lOiBzdHJpbmdbXSwgZW5kVGltZTogc3RyaW5nW10pIHtcclxuICAgICAgICBjb25zdCB0aW1lRm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydFRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgICAgICAgYCR7c3RhcnRUaW1lWzBdfToke3N0YXJ0VGltZVsxXX0gJHtzdGFydFRpbWVbMl19YCxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZTI0SHJGb3JtYXQgPSBgJHtzdGFydFRpbWUyNEhyRm9ybWF0QXJyWzBdfToke3N0YXJ0VGltZTI0SHJGb3JtYXRBcnJbMV19OjAwYDtcclxuICAgICAgICBjb25zdCBlbmRUaW1lMjRIckZvcm1hdEFyciA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgICAgICAgIGAke2VuZFRpbWVbMF19OiR7ZW5kVGltZVsxXX0gJHtlbmRUaW1lWzJdfWAsXHJcbiAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBlbmRUaW1lMjRIckZvcm1hdCA9IGAke2VuZFRpbWUyNEhyRm9ybWF0QXJyWzBdfToke2VuZFRpbWUyNEhyRm9ybWF0QXJyWzFdfTowMGA7XHJcbiAgICAgICAgcmV0dXJuIGRheWpzKHN0YXJ0VGltZTI0SHJGb3JtYXQsIHRpbWVGb3JtYXQpLmlzQWZ0ZXIoZGF5anMoZW5kVGltZTI0SHJGb3JtYXQsIHRpbWVGb3JtYXQpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlcigpIHtcclxuICAgICAgICBsZXQgcHJldmlvdXNTZWxlY3RlZFRpbWVGaWx0ZXI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlciA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZFRpbWVGaWx0ZXIgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50U2VsZWN0ZWRUaW1lRmlsdGVyKFxyXG4gICAgICAgIHN0YXJ0VGltZTogc3RyaW5nW10sXHJcbiAgICAgICAgZW5kVGltZTogc3RyaW5nW10sXHJcbiAgICAgICAgaW5jbHVkZU11bHRpOiBib29sZWFuLFxyXG4gICAgICAgIGluY2x1ZGVaZXJvOiBib29sZWFuLFxyXG4gICAgICAgIGluY2x1ZGVUaW1lUmFuZ2U6IGJvb2xlYW4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBmcm9tVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG90d2VudHlGb3VySHJzRm9ybWF0KFxyXG4gICAgICAgICAgICBgJHtzdGFydFRpbWVbMF19OiR7c3RhcnRUaW1lWzFdfSAke3N0YXJ0VGltZVsyXX1gLFxyXG4gICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZnJvbVRpbWUyNEhyRm9ybWF0ID0gYCR7ZnJvbVRpbWUyNEhyRm9ybWF0QXJyWzBdfToke2Zyb21UaW1lMjRIckZvcm1hdEFyclsxXX06MDBgO1xyXG5cclxuICAgICAgICBjb25zdCB0b1RpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgICAgICAgYCR7ZW5kVGltZVswXX06JHtlbmRUaW1lWzFdfSAke2VuZFRpbWVbMl19YCxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHRvVGltZTI0SHJGb3JtYXQgPSBgJHt0b1RpbWUyNEhyRm9ybWF0QXJyWzBdfToke3RvVGltZTI0SHJGb3JtYXRBcnJbMV19OjAwYDtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGVkVGltZUZpbHRlciA9IHtcclxuICAgICAgICAgICAgZnJvbVRpbWU6IGZyb21UaW1lMjRIckZvcm1hdCxcclxuICAgICAgICAgICAgdG9UaW1lOiB0b1RpbWUyNEhyRm9ybWF0LFxyXG4gICAgICAgICAgICBpbmNsdWRlTXVsdGksXHJcbiAgICAgICAgICAgIGluY2x1ZGVaZXJvLFxyXG4gICAgICAgICAgICBpbmNsdWRlVGltZVJhbmdlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50U2VsZWN0ZWRUaW1lRmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGluY3JlbWVudEhvdXJJbnB1dChhcnI6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKGFyclswXSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICBhcnJbMF0gPSAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoYXJyWzBdLCAxMCkgPCAxMikge1xyXG4gICAgICAgICAgICBhcnJbMF0gPSBwYXJzZUludChhcnJbMF0sIDEwKSArIDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXJyWzBdID0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVjcmVtZW50SG91cklucHV0KGFycjogYW55W10pIHtcclxuICAgICAgICBpZiAoYXJyWzBdID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGFyclswXSA9IDEyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoYXJyWzBdLCAxMCkgPiAxKSB7XHJcbiAgICAgICAgICAgIGFyclswXSA9IHBhcnNlSW50KGFyclswXSwgMTApIC0gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhcnJbMF0gPSAxMjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5jcmVtZW50TWludXRlSW5wdXQoYXJyOiBhbnlbXSkge1xyXG4gICAgICAgIC8vIGluY3JlbWVudCB0byBuZWFyZXN0IHByb3BlciBpbnRlcnZhbCgxNSwzMCw0NSlcclxuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludChhcnJbMV0sIDEwKTtcclxuICAgICAgICBpZiAobWludXRlIDw9IDE0KSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiMTVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAxNSAmJiBtaW51dGUgPD0gMjkpIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCIzMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDMwICYmIG1pbnV0ZSA8PSA0NCkge1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBcIjQ1XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPj0gNDUpIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCIwMFwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWNyZW1lbnRNaW51dGVJbnB1dChhcnI6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGFyclsxXSwgMTApO1xyXG4gICAgICAgIGlmIChtaW51dGUgPiAwICYmIG1pbnV0ZSA8PSAxNSkge1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBcIjAwXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPj0gMTYgJiYgbWludXRlIDw9IDMwKSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiMTVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAzMSAmJiBtaW51dGUgPD0gNDUpIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCIzMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID4gNDUgfHwgbWludXRlID09PSAwKSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiNDVcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5jcmVtZW50T3JEZWNyZW1lbnRIb3VyKGluY3JlbWVudDogYm9vbGVhbiwgdGltZTogc3RyaW5nW10pIHtcclxuICAgICAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5jcmVtZW50SG91cklucHV0KHRpbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50SG91cklucHV0KHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbmNyZW1lbnRPckRlY3JlbWVudE1pbihpbmNyZW1lbnQ6IGJvb2xlYW4sIHRpbWU6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmluY3JlbWVudE1pbnV0ZUlucHV0KHRpbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50TWludXRlSW5wdXQodGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzSG91clZhbHVlSW52YWxpZChocjogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGhyLmxlbmd0aCA9PT0gMCB8fCAhK2hyIHx8IHBhcnNlSW50KGhyLCAxMCkgPCAxIHx8IHBhcnNlSW50KGhyLCAxMCkgPiAxMiB8fCBoci5pbmNsdWRlcyhcIi5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaXNNaW51dGVWYWx1ZUludmFsaWQobWludXRlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBtaW51dGUubGVuZ3RoICE9PSAyIHx8XHJcbiAgICAgICAgICAgICghK21pbnV0ZSAmJiBtaW51dGUgIT09IFwiMDBcIikgfHxcclxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlLCAxMCkgPCAwIHx8XHJcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZSwgMTApID4gNTkgfHxcclxuICAgICAgICAgICAgbWludXRlLmluY2x1ZGVzKFwiLlwiKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVNPUlQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vL1xyXG4gICAgdXBkYXRlU29ydE1hcCh0ZW1wU29ydE9yZGVyOiBTb3J0VHlwZSwgdGFibGVEYXRhOiBhbnlbXSwgaXNMdXJBbmRDc3JDb21wb25lbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLnNldCh0aGlzLnNlbGVjdGVkUmFkaW8sIHRlbXBTb3J0T3JkZXIpO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZFRhYmxlRGF0YSA9IHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmFwcGx5U29ydGluZyhcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvLFxyXG4gICAgICAgICAgICB0ZW1wU29ydE9yZGVyLFxyXG4gICAgICAgICAgICB0YWJsZURhdGEsXHJcbiAgICAgICAgICAgIGlzTHVyQW5kQ3NyQ29tcG9uZW50LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHNvcnRlZFRhYmxlRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWx0ZXIgaWNvbiBhbGlnbm1lbnQgdG8gYmlnZ2VyIGVsZW1lbnQgaW4gdXBwYXIgYW5kIGxvd2VyIGhlYWRlclxyXG4gICAgc2V0TWFyZ2luTGVmdEZvckZpbHRlckljb24odGhFbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+KSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudEFyciA9IHRoRWxlbWVudHMudG9BcnJheSgpO1xyXG4gICAgICAgIGVsZW1lbnRBcnIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZERpdkVsZW1lbnRzID0gaXRlbS5uYXRpdmVFbGVtZW50LmNoaWxkcmVuO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoOiBudW1iZXIgPSBjaGlsZERpdkVsZW1lbnRzWzBdPy5jaGlsZHJlblswXT8ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkRGl2RWxlbWVudHNbMF0/LmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoOiBudW1iZXIgPSBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblswXT8ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgICAgICAgICA6IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGggPiBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoIC0gc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGAkezR9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGAke2RpZmYgKyA0fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aCAtIGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGAke2RpZmYgKyA0fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSBgJHs0fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmVW5pcXVlVmFsdWVQcmVzZW50Rm9yVGhlSGVhZGVyKFxyXG4gICAgICAgIGhlYWRlcjogSUhlYWRlckluZm8sXHJcbiAgICAgICAgZW5hYmxlZEhlYWRlcnM6IGFueVtdLFxyXG4gICAgICAgIHRhYmxlRGF0YTogYW55W10sXHJcbiAgICAgICAgY2xvbmVkVGFibGVEYXRhOiBhbnlbXSxcclxuICAgICkge1xyXG4gICAgICAgIGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YVRvQ2hlY2sgPSB0aGlzLmdldEZpbHRlck9wdGlvbnNEYXRhKHRhYmxlRGF0YSwgY2xvbmVkVGFibGVEYXRhLCBpdGVtKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXFTdGFydERhdGUgPSB1bmlxKGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHUuc3RhcnREYXRlKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1bmlxRW5kRGF0ZSA9IHVuaXEoZGF0YVRvQ2hlY2subWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdS5lbmREYXRlKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcVN0YXJ0RGF0ZS5sZW5ndGggPiAxIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcUVuZERhdGUubGVuZ3RoID4gMSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUb29sdGlwQWN0aXZlKFtpdGVtXSwgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVbaXRlbV0pO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBhcHBsaWVkIGZpbHRlciBpcyB0aGlzIGhlYWRlciwgcHVzaCBpdCBhbG9zIGFzIGVuYWJsZWRIZWFkZXJcclxuICAgICAgICAgICAgICAgIGxldCBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5W3RoaXMuYXBwbGllZEZpbHRlcnNBcnJheS5sZW5ndGggLSAxXSA9PT0gaXRlbVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyLmZpbHRlciA9PT0gXCJDSEVDS0JPWFwiICYmICh1bmlxKHZhbHVlcykubGVuZ3RoID4gMSB8fCBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci5maWx0ZXIgIT09IFwiQ0hFQ0tCT1hcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh1bmlxKHZhbHVlcykuZmlsdGVyKChuKSA9PiBuICE9IG51bGwgJiYgbiAhPT0gXCItXCIpLmxlbmd0aCA+IDEgfHwgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlcilcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKHRhYmxlSGVhZGVyczogSUd0VGFibGVIZWFkZXJbXSwgdGFibGVEYXRhOiBhbnlbXSwgY2xvbmVkVGFibGVEYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIHRhYmxlSGVhZGVycy5mb3JFYWNoKChoZWFkZXIpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyLmhlYWRlckluZm8uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2hvd1Rvb2x0aXBJY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5maWx0ZXJTb3J0T2JqZWN0S2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF0ZXN0RmlsdGVycyA9IHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdEZpbHRlcnMubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdEZpbHRlcnNbbGF0ZXN0RmlsdGVycy5sZW5ndGggLSAxXSA9PT0ga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pcVN0YXJ0RGF0ZSA9IHVuaXEodGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHUuc3RhcnREYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pcUVuZERhdGUgPSB1bmlxKHRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1LmVuZERhdGUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSAhKHVuaXFTdGFydERhdGUubGVuZ3RoID4gMSB8fCB1bmlxRW5kRGF0ZS5sZW5ndGggPiAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gdGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbS5maWx0ZXIgPT09IFwiQ0hFQ0tCT1hcIiAmJiB1bmlxKHZhbHVlcykubGVuZ3RoID4gMSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0uZmlsdGVyICE9PSBcIkNIRUNLQk9YXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXEodmFsdWVzKS5maWx0ZXIoKG4pID0+IG4gIT0gbnVsbCAmJiBuICE9PSBcIi1cIikubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZm9yIGRhdGUgdHlwZSBvZiBmaWx0ZXJzIHdlIG5lZWQgdG8gdXBkYXRlIHRvb2x0aXAgc2VsZWN0ZWQgbWFwIHN0YXJ0IGFuZCBlbmQgZGF0ZSB2YWx1ZXMgdG8gZGF5anMgb2JqZWN0LlxyXG4gICAgdXBkYXRlRGF0ZUZpbHRlclRvb2x0aXBTZWxlY3RlZE1hcChrZXlzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcD8uaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVSYW5nZSA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldChrZXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRlUmFuZ2U/LmZyb21EYXRlICYmIGRhdGVSYW5nZT8udG9EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlT2JqOiB7IGZyb21EYXRlOiBEYXlqczsgdG9EYXRlOiBEYXlqcyB9ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tRGF0ZTogZGF5anMoZGF0ZVJhbmdlLmZyb21EYXRlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlOiBkYXlqcyhkYXRlUmFuZ2UudG9EYXRlKSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5zZXQoa2V5LCBzZWxlY3RlZERhdGVPYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19
1525
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZmlsdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFBYyxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFFbEUsT0FBTyxLQUFnQixNQUFNLE9BQU8sQ0FBQztBQUNyQyxPQUFPLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sU0FBUyxNQUFNLHdCQUF3QixDQUFDO0FBQy9DLE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pDLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRzVFLE9BQU8sRUFBWSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsaUNBQWlDO0FBQ2pDLE9BQU8sRUFBRSx5QkFBeUIsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7OztBQUt0RCxNQUFNLE9BQU8saUJBQWlCO2FBNkNaLGVBQVUsR0FBRyxFQUFFLEFBQUwsQ0FBTTtJQUs5QixZQUNZLHFCQUFnRCxFQUNoRCxlQUFnQztRQURoQywwQkFBcUIsR0FBckIscUJBQXFCLENBQTJCO1FBQ2hELG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQW5ENUMsZUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdkIsdUJBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQUUs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QUFDO29DQUNDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7Z0NBQ3BDLENBQUM7NEJBQ0wsQ0FBQzt3QkFDTCxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDZHQUE2RztJQUM3RyxrQ0FBa0MsQ0FBQyxJQUFjO1FBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFbkQsSUFBSSxTQUFTLEVBQUUsUUFBUSxJQUFJLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQztvQkFDM0MsTUFBTSxlQUFlLEdBQXVDO3dCQUN4RCxRQUFRLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7d0JBQ25DLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztxQkFDbEMsQ0FBQztvQkFFRixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBM3ZEUSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZkLE1BQU07OzRGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IEVsZW1lbnRSZWYsIEluamVjdGFibGUsIFF1ZXJ5TGlzdCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tIFwiQGFuZ3VsYXItc2xpZGVyL25neC1zbGlkZXJcIjtcclxuaW1wb3J0IGRheWpzLCB7IERheWpzIH0gZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCBDdXN0b21QYXJzZUZvcm1hdCBmcm9tIFwiZGF5anMvcGx1Z2luL2N1c3RvbVBhcnNlRm9ybWF0XCI7XHJcbmltcG9ydCBpc0JldHdlZW4gZnJvbSBcImRheWpzL3BsdWdpbi9pc0JldHdlZW5cIjtcclxuaW1wb3J0IG1pbk1heCBmcm9tIFwiZGF5anMvcGx1Z2luL21pbk1heFwiO1xyXG4vLyBUaGlyZCBwYXJ0eSBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGlzRXF1YWwsIG1hcCwgbWF4LCBtaW4sIHNvcnRCeSwgdW5pcSB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcclxuXHJcbmltcG9ydCB7IElHdFRhYmxlSGVhZGVyLCBJSGVhZGVySW5mbyB9IGZyb20gXCIuLi9tb2RlbHMvYW5uYS1ub24tZWRpdGFibGUtZ3QtbW9kZWxzXCI7XHJcbmltcG9ydCB7IFNvcnRUeXBlLCBTb3J0VHlwZUVudW0gfSBmcm9tIFwiLi4vbW9kZWxzL2FubmEtc29ydC5tb2RlbFwiO1xyXG5pbXBvcnQgeyBUb29sdGlwTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxzL2FubmEtdG9vbHRpcC5tb2RlbFwiO1xyXG4vLyBVc2VyIGRlZmluZWQgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSwgTmdiRGF0ZVR5cGUgfSBmcm9tIFwiLi9hbm5hLWRhdGUtdGltZS1mb3JtYXQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBbm5hU29ydFNlcnZpY2UgfSBmcm9tIFwiLi9hbm5hLXNvcnQuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hRmlsdGVyU2VydmljZSB7XHJcbiAgICB0b29sdGlwTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdG9vbHRpcFNlbGVjdGVkTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgaW5pdGlhbFZhbHVlTWFwOiBNYXA8c3RyaW5nLCBhbnk+O1xyXG4gICAgdHJhbnNsYXRlRnVuYzogc3RyaW5nO1xyXG4gICAgc2VsZWN0ZWRSYWRpbzogc3RyaW5nO1xyXG4gICAgc3ViUmFkaW9CdXR0b246IHN0cmluZztcclxuXHJcbiAgICBjYWxlbmRhclNldDogU2V0PHN0cmluZz47XHJcbiAgICBzbGlkZXJTZXQ6IFNldDxzdHJpbmc+O1xyXG4gICAgdGltZVNldDogU2V0PHN0cmluZz47XHJcblxyXG4gICAgaW5jbHVkZU11bHRpVGltZTogYm9vbGVhbjtcclxuICAgIGluY2x1ZGVaZXJvVGltZTogYm9vbGVhbjtcclxuICAgIGluY2x1ZGVUaW1lUmFuZ2U6IGJvb2xlYW47XHJcblxyXG4gICAgYXBwbGllZEZpbHRlcnNBcnJheTogc3RyaW5nW10gPSBbXTtcclxuICAgIGZsaWdodERhdGVSYW5nZTogeyBtaW5TZWxlY3RlZERhdGU6IGFueTsgbWF4U2VsZWN0ZWREYXRlOiBhbnkgfTtcclxuICAgIHNsaWRlckRhdGE6IHsgbWluOiBhbnk7IG1heDogYW55IH07XHJcbiAgICBuZ3hTbGlkZXJPYmo6IE9wdGlvbnM7XHJcblxyXG4gICAgU1BMSVRFRF9DSEVDS0JPWF9GSUxURVJfS0VZID0gXCJfU3BsaXRlZENoZWNrQm94T3B0aW9uc1wiO1xyXG4gICAgREVGQVVMVF9TUExJVF9TRVBBUkFUT1IgPSBcIiwgXCI7XHJcblxyXG4gICAgc2xpZGVyQ3VycmVuY3lTZXQgPSBuZXcgU2V0KFtcclxuICAgICAgICBcImJvb2tlZFwiLFxyXG4gICAgICAgIFwiY3BwXCIsXHJcbiAgICAgICAgXCJjcG1cIixcclxuICAgICAgICBcInJjdlByZWVtcHRcIixcclxuICAgICAgICBcIm9zUHJlZW1wdFwiLFxyXG4gICAgICAgIFwicG9zdGVkQWR1XCIsXHJcbiAgICAgICAgXCJzY2hlZHVsZWRBZHVcIixcclxuICAgICAgICBcImF1ZGllbmNlRGVmaWNpdFwiLFxyXG4gICAgICAgIFwiUmF0ZVwiLFxyXG4gICAgICAgIFwidXNlckFEVXNcIixcclxuICAgICAgICBcImJ1eWVyQ2hhbmdlc1wiLFxyXG4gICAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgICBcInVzZXJNR1wiLFxyXG4gICAgICAgIFwidWRWYWx1ZVwiLFxyXG4gICAgICAgIFwib2RWYWx1ZVwiLFxyXG4gICAgICAgIFwiYnV5ZXJCb29rZWRWYWx1ZVwiLFxyXG4gICAgICAgIFwidHJhZmZpY0Jvb2tlZFZhbHVlXCIsXHJcbiAgICAgICAgXCJib29rZWRWYWxcIixcclxuICAgIF0pO1xyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgYnVmZmVyU2l6ZSA9IDIwO1xyXG4gICAgaXNGaWx0ZXJTb3J0QWN0aXZlOiBhbnkgPSB7fTtcclxuICAgIHJlc2V0RmlsdGVyU29ydEFjdGl2ZVN0YXR1czogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBudWxsVG9CZUZvcm1hdGVkSW50b1N0cmluZyA9IFwiLVwiO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYW5uYVNvcnRTZXJ2aWNlOiBBbm5hU29ydFNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBkYXlqcy5leHRlbmQobWluTWF4KTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoaXNCZXR3ZWVuKTtcclxuICAgICAgICBkYXlqcy5leHRlbmQoQ3VzdG9tUGFyc2VGb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IHNsaWRlckFyciA9IFtcclxuICAgICAgICAgICAgXCJyY3ZQcmVlbXB0XCIsXHJcbiAgICAgICAgICAgIFwib3NQcmVlbXB0XCIsXHJcbiAgICAgICAgICAgIFwicmN2VW5kZXJEbHlcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRBdWRQZXJjZW50XCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkXCIsXHJcbiAgICAgICAgICAgIFwic3BvdHNcIixcclxuICAgICAgICAgICAgXCJncnBcIixcclxuICAgICAgICAgICAgXCJhdmVyYWdlUmF0ZVRoaXNZZWFyXCIsXHJcbiAgICAgICAgICAgIFwiYXZlcmFnZVJhdGVMYXN0WWVhclwiLFxyXG4gICAgICAgICAgICBcImF2ZXJhZ2VDUFBcIixcclxuICAgICAgICAgICAgXCJhdmVyYWdlQ1BNXCIsXHJcbiAgICAgICAgICAgIFwiSU1QU0RpZmZcIixcclxuICAgICAgICAgICAgXCJSVEdEaWZmXCIsXHJcbiAgICAgICAgICAgIFwiY3BwXCIsXHJcbiAgICAgICAgICAgIFwiaW1wc1wiLFxyXG4gICAgICAgICAgICBcImNwbVwiLFxyXG4gICAgICAgICAgICBcIm9zVW5kZXJEbHlcIixcclxuICAgICAgICAgICAgXCJ0b3RhbFdlZWtzXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla051bWJlclwiLFxyXG4gICAgICAgICAgICBcIlJhdGVcIixcclxuICAgICAgICAgICAgXCJPcmRlcmVkUmF0aW5nc09ySW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJQb3N0ZWRSYXRpbmdzT3JJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcInBvc3RlZEF1ZFBlcmNlbnRcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRBZHVcIixcclxuICAgICAgICAgICAgXCJzY2hlZHVsZWRBZHVcIixcclxuICAgICAgICAgICAgXCJhdWRpZW5jZURlZmljaXRcIixcclxuICAgICAgICAgICAgXCJvZmZlcmVkTUdzXCIsXHJcbiAgICAgICAgICAgIFwib3V0c3RhbmRpbmdQRVwiLFxyXG4gICAgICAgICAgICBcIm9mZmVyZWRBRFVzXCIsXHJcbiAgICAgICAgICAgIFwidWREZWZpY2l0VmFsdWVcIixcclxuICAgICAgICAgICAgXCJib29rZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcImJvb2tlZFNwb3RzXCIsXHJcbiAgICAgICAgICAgIFwidXNlckNoYW5nZXNcIixcclxuICAgICAgICAgICAgXCJVREdycFwiLFxyXG4gICAgICAgICAgICBcIlVESW1wc1wiLFxyXG4gICAgICAgICAgICBcIk9ER3JwXCIsXHJcbiAgICAgICAgICAgIFwiT0RJbXBzXCIsXHJcbiAgICAgICAgICAgIFwidWRJbXBzUGVyY2VudFwiLFxyXG4gICAgICAgICAgICBcInVkR3JwUGVyY2VudFwiLFxyXG4gICAgICAgICAgICBcIm9kSW1wc1BlcmNlbnRcIixcclxuICAgICAgICAgICAgXCJvZEdycFBlcmNlbnRcIixcclxuICAgICAgICAgICAgXCJ1c2VyQURVc1wiLFxyXG4gICAgICAgICAgICBcImJ1eWVyQ2hhbmdlc1wiLFxyXG4gICAgICAgICAgICBcInVzZXJDaGFuZ2VzXCIsXHJcbiAgICAgICAgICAgIFwidXNlck1HXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla2x5QVVSXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla2x5QVVSYXRpbmdPckltcHJlc3Npb25zXCIsXHJcbiAgICAgICAgICAgIFwiTUdzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJBRFVzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJhdWRpZW5jZURlZmljaXRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcInVzZXJBRFVWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcInVzZXJDaGFuZ2VzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJidXllckNoYW5nZXNWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlVzZXJDcmVkaXRlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiVXNlclVucmVzb2x2ZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJ1eWVyQWRkZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJ1eWVyRGVsZXRlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiQnV5ZXJDaGFuZ2VzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJVc2VyQ2hhbmdlc1ZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkR1JQT3JJTVBTXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BQT3JDUE1cIixcclxuICAgICAgICAgICAgXCJCb29rZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIkJvb2tlZFNwb3RzXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkUmF0ZVwiLFxyXG4gICAgICAgICAgICBcImF2ZXJhZ2VSYXRlXCIsXHJcbiAgICAgICAgICAgIFwicHJvamVjdGVkSU1QU1wiLFxyXG4gICAgICAgICAgICBcInByb2plY3RlZFJUR1wiLFxyXG4gICAgICAgICAgICBcImRlc2lyZWRDUE1cIixcclxuICAgICAgICAgICAgXCJkZXNpcmVkQ1BQXCIsXHJcbiAgICAgICAgICAgIFwiaW52ZW50b3J5RmlsbFBlcmNlbnRhZ2VTYW1lV2Vla1wiLFxyXG4gICAgICAgICAgICBcImludmVudG9yeUZpbGxQZXJjZW50YWdlRmluYWxcIixcclxuICAgICAgICAgICAgXCJpbnZlbnRvcnlGaWxsUGVyY2VudGFnZVRpbGxEYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZG9sbGFyUmF0ZUltcGFjdFwiLFxyXG4gICAgICAgICAgICBcImRvbGxhcklNUFNJbXBhY3RcIixcclxuICAgICAgICAgICAgXCJJTVBTSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiZG9sbGFyUlRHSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiUlRHSW1wYWN0XCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkUlRHXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkSU1QU1wiLFxyXG4gICAgICAgICAgICBcIkFVUlRHXCIsXHJcbiAgICAgICAgICAgIFwiQVVSVEdcIixcclxuICAgICAgICAgICAgXCJQb3N0ZWRSYXRpbmdcIixcclxuICAgICAgICAgICAgXCJQb3N0ZWRJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIk5vcm1hbGl6ZWRPcmRlcmVkUmF0aW5nXCIsXHJcbiAgICAgICAgICAgIFwiTm9ybWFsaXplZE9yZGVyZWRJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIk5vcm1hbGl6ZWRQb3N0ZWRSYXRpbmdcIixcclxuICAgICAgICAgICAgXCJOb3JtYWxpemVkUG9zdGVkSW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJCb29rZWRHUlBcIixcclxuICAgICAgICAgICAgXCJCb29rZWRJTVBTUmV2VGFiXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BQXCIsXHJcbiAgICAgICAgICAgIFwiQm9va2VkQ1BNXCIsXHJcbiAgICAgICAgICAgIFwiQVVJTVBTXCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkQW1vdW50VmFsdWVcIixcclxuICAgICAgICAgICAgXCJlcXVpdmFsaXplZEJvb2tlZEFtb3VudFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiSU1QU1wiLFxyXG4gICAgICAgICAgICBcInVkVmFsdWVcIixcclxuICAgICAgICAgICAgXCJvZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiVmlvbGF0ZWRCb29rZWRWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGVkQm9va2VkRVVSVmFsdWVcIixcclxuICAgICAgICAgICAgXCJWaW9sYXRpbmdCb29rZWRFVVJWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGluZ0Jvb2tlZFZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiUmViYXRlXCIsXHJcbiAgICAgICAgICAgIFwiV2Vla2x5QVVSXCIsXHJcbiAgICAgICAgICAgIFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla2x5QVVSXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1J0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFJ0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUnRnXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93U3RhdGlvbkVzdGltYXRlc1J0Z1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd0FubmFFc3RpbWF0ZXNJbXBzXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93UG9zdGVkSW1wc1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlSW1wc1wiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1N0YXRpb25Fc3RpbWF0ZXNJbXBzXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1NoYXJlXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93UG9zdGVkU2hhcmVcIixcclxuICAgICAgICAgICAgXCJwYXJlbnRSb3dSb2xsaW5nQXZlcmFnZVNoYXJlXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1B1dFBlclwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFB1dFBlclwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUHV0UGVyXCIsXHJcbiAgICAgICAgICAgIFwicGFyZW50Um93QW5uYUVzdGltYXRlc1B1dFwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1Bvc3RlZFB1dFwiLFxyXG4gICAgICAgICAgICBcInBhcmVudFJvd1JvbGxpbmdBdmVyYWdlUHV0XCIsXHJcbiAgICAgICAgICAgIFwiUHJvamVjdGVkSW1wcmVzc2lvbnNcIixcclxuICAgICAgICAgICAgXCJQcm9qZWN0ZWRSdGdcIixcclxuICAgICAgICAgICAgXCJwcm9qZWN0ZWRDUE1cIixcclxuICAgICAgICAgICAgXCJwcm9qZWN0ZWRDUFBcIixcclxuICAgICAgICAgICAgXCJib29rZWRFcUNwbVZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwiYm9va2VkRXFDcHBWYWx1ZVwiLFxyXG4gICAgICAgICAgICBcIlJhdGluZ1wiLFxyXG4gICAgICAgICAgICBcIkFjdHVhbFJhdGVcIixcclxuICAgICAgICAgICAgXCJJbXByZXNzaW9uc1wiLFxyXG4gICAgICAgICAgICBcIkFVUktleUxZXCIsXHJcbiAgICAgICAgICAgIFwiU2VsbE91dFBlcmNlbnRMWVwiLFxyXG4gICAgICAgICAgICBcIkFVUktleVRZXCIsXHJcbiAgICAgICAgICAgIFwiU2VsbE91dFBlcmNlbnRUWVwiLFxyXG4gICAgICAgICAgICBcIm9mZmVyQ291bnRcIixcclxuICAgICAgICAgICAgXCJvZmZlcmVkTUdzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJvdXRzdGFuZGluZ1Nwb3RzVmFsdWVcIixcclxuICAgICAgICAgICAgXCJvZmZlcmVkQURVc1ZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwidURQcm9qZWN0aW9uVmFsdWVcIixcclxuICAgICAgICAgICAgXCJ0b3RhbEJvb2tlZEdycFwiLFxyXG4gICAgICAgICAgICBcInRvdGFsQm9va2VkSW1wc1wiLFxyXG4gICAgICAgICAgICBcImJvb2tlZEdycFRvRGF0ZVwiLFxyXG4gICAgICAgICAgICBcImJvb2tlZEltcHNUb0RhdGVcIixcclxuICAgICAgICAgICAgXCJkZWxpdmVyeVRocmVzaG9sZFBlcmNlbnRhZ2VcIixcclxuICAgICAgICAgICAgXCJnb2FsR3JwVG9EYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZ29hbEltcHNUb0RhdGVcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRHcnBUb0RhdGVcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRJbXBzVG9EYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZGVsaXZlcmVkUGVyY2VudGFnZVwiLFxyXG4gICAgICAgICAgICBcInVkR3JwVG9EYXRlXCIsXHJcbiAgICAgICAgICAgIFwidWRJbXBzVG9EYXRlXCIsXHJcbiAgICAgICAgICAgIFwib2RHcnBUb0RhdGVcIixcclxuICAgICAgICAgICAgXCJvZEltcHNUb0RhdGVcIixcclxuICAgICAgICAgICAgXCJzY2hlZHVsZWRBRFVzUHJvakdycFwiLFxyXG4gICAgICAgICAgICBcInNjaGVkdWxlZEFEVXNQcm9qSW1wc1wiLFxyXG4gICAgICAgICAgICBcInBvc3RlZEFEVXNHcnBcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRBRFVzSW1wc1wiLFxyXG4gICAgICAgICAgICBcImJvb2tlZFZhbFwiLFxyXG4gICAgICAgICAgICBcInVzZXJNR1ZhbHVlXCIsXHJcbiAgICAgICAgICAgIFwicmF0aW5nXCIsXHJcbiAgICAgICAgICAgIFwiSU1QU1wiLFxyXG4gICAgICAgICAgICBcInJhdGVcIixcclxuICAgICAgICAgICAgXCJhbW91bnRcIixcclxuICAgICAgICAgICAgXCJib29rZWRHUlBcIixcclxuICAgICAgICAgICAgXCJib29rZWRHSVwiLFxyXG4gICAgICAgICAgICBcInByb2plY3RlZEdSUFwiLFxyXG4gICAgICAgICAgICBcInByb2plY3RlZEdJXCIsXHJcbiAgICAgICAgICAgIFwicG9zdGVkR2lcIixcclxuICAgICAgICAgICAgXCJidWRnZXRcIixcclxuICAgICAgICAgICAgXCJib29rZWRJbXBzXCIsXHJcbiAgICAgICAgICAgIFwicG9zdGVkSW1wc1wiLFxyXG4gICAgICAgICAgICBcInByb2plY3RlZEltcHNcIixcclxuICAgICAgICAgICAgXCJwb3N0ZWRHcnBcIixcclxuICAgICAgICAgICAgXCJwcm9qZWN0ZWRHcnBcIixcclxuICAgICAgICAgICAgXCJib29rZWRSdGdcIixcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBjYWxlbmRhckFyciA9IFtcclxuICAgICAgICAgICAgXCJwZXJpb2RcIixcclxuICAgICAgICAgICAgXCJBaXJEYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZmxpZ2h0U3RhcnREYXRlXCIsXHJcbiAgICAgICAgICAgIFwiZmxpZ2h0RW5kRGF0ZVwiLFxyXG4gICAgICAgICAgICBcImRhdGVcIixcclxuICAgICAgICAgICAgXCJzdGFydERhdGVcIixcclxuICAgICAgICAgICAgXCJlbmREYXRlXCIsXHJcbiAgICAgICAgICAgIFwicmV2aXNpb25TdGFydERhdGVcIixcclxuICAgICAgICAgICAgXCJHZW5lcmF0ZWRPblwiLFxyXG4gICAgICAgICAgICBcIldlZWtcIixcclxuICAgICAgICAgICAgXCJzY2hlZHVsZWREYXRlXCIsXHJcbiAgICAgICAgICAgIFwidGltZW91dERhdGVcIixcclxuICAgICAgICAgICAgXCJWaW9sYXRpbmdTcG90RGF0ZVwiLFxyXG4gICAgICAgICAgICBcIlZpb2xhdGVkU3BvdERhdGVcIixcclxuICAgICAgICAgICAgXCJBY3R1YWxXZWVrU3RhcnREYXRlXCIsXHJcbiAgICAgICAgICAgIFwiTGFzdEZldGNoZWREYXRlXCIsXHJcbiAgICAgICAgICAgIFwiY3JlYXRlZE9uXCIsXHJcbiAgICAgICAgICAgIFwiYWlyRGF0ZVwiLFxyXG4gICAgICAgICAgICBcInNjaGVkdWxlZFdlZWtcIixcclxuICAgICAgICBdO1xyXG4gICAgICAgIGNvbnN0IHRpbWVBcnIgPSBbXHJcbiAgICAgICAgICAgIFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIsXHJcbiAgICAgICAgICAgIFwiRW5kVGltZUZvckZpbHRlclwiLFxyXG4gICAgICAgICAgICBcInRpbWVcIixcclxuICAgICAgICAgICAgXCJzdGFydFRpbWVGb3JGaWx0ZXJcIixcclxuICAgICAgICAgICAgXCJlbmRUaW1lRm9yRmlsdGVyXCIsXHJcbiAgICAgICAgICAgIFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIsXHJcbiAgICAgICAgICAgIFwiZW5kX3RpbWVfZm9yX2ZpbHRlclwiLFxyXG4gICAgICAgICAgICBcInN0YXJ0RW5kVGltZU11bHRpXCIsXHJcbiAgICAgICAgICAgIFwic3RhcnRFbmRUaW1lXCIsXHJcbiAgICAgICAgICAgIFwidGltZW91dFRpbWVcIixcclxuICAgICAgICAgICAgXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVTdGFydFRpbWVcIixcclxuICAgICAgICAgICAgXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVFbmRUaW1lXCIsXHJcbiAgICAgICAgICAgIFwiU3RhcnRUaW1lXCIsXHJcbiAgICAgICAgICAgIFwiRW5kVGltZVwiLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5zbGlkZXJTZXQgPSBuZXcgU2V0KHNsaWRlckFycik7XHJcbiAgICAgICAgdGhpcy5jYWxlbmRhclNldCA9IG5ldyBTZXQoY2FsZW5kYXJBcnIpO1xyXG4gICAgICAgIHRoaXMudGltZVNldCA9IG5ldyBTZXQodGltZUFycik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuTWF4QW5kTWluVmFsdWUoZGF0YTogYW55W10sIGtleTogc3RyaW5nLCBpc01pbjogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IGRhdGEuZmlsdGVyKChvYmopID0+ICFbXCJcIiwgXCItXCIsIG51bGxdLmluY2x1ZGVzKG9ialtrZXldKSk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZmlsdGVyZWREYXRhLm1hcCgoeCkgPT4geFtrZXldKTtcclxuICAgICAgICBjb25zdCB2YWx1ZVRvUmV0dXJuID0gaXNNaW4gPyBtaW4odmFsdWVzKSA6IG1heCh2YWx1ZXMpO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVRvUmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybk1pbkFuZE1heERhdGUoZGF0YTogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWREYXRhID0gZGF0YS5maWx0ZXIoKG9iaikgPT4gIVtcIlwiLCBcIi1cIiwgbnVsbF0uaW5jbHVkZXMob2JqW2tleV0pKTtcclxuICAgICAgICBjb25zdCBEYXRlQXJyID0gZmlsdGVyZWREYXRhLm1hcCgob2JqKSA9PiBkYXlqcyhvYmpba2V5XSkpO1xyXG4gICAgICAgIGNvbnN0IG1pbkRhdGUgPSBkYXlqcy5taW4oRGF0ZUFycik7XHJcbiAgICAgICAgY29uc3QgbWF4RGF0ZSA9IGRheWpzLm1heChEYXRlQXJyKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIFttaW5EYXRlLCBtYXhEYXRlXTtcclxuICAgIH1cclxuXHJcbiAgICBpc1Rvb2x0aXBBY3RpdmUoaGVhZGVyOiBzdHJpbmdbXSwgc29ydE1hcDogTWFwPHN0cmluZywgU29ydFR5cGU+KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgc2V0OiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgICAgICBjb25zdCBpc1NvcnRNYXBGb3JIZWFkZXIwQWN0aXZlID0gc29ydE1hcC5oYXMoaGVhZGVyWzBdKSAmJiBzb3J0TWFwLmdldChoZWFkZXJbMF0pICE9PSBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuICAgICAgICBjb25zdCBpc1NvcnRNYXBGb3JIZWFkZXIxQWN0aXZlID0gc29ydE1hcC5oYXMoaGVhZGVyWzFdKSAmJiBzb3J0TWFwLmdldChoZWFkZXJbMV0pICE9PSBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuXHJcbiAgICAgICAgaWYgKGhlYWRlci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChzb3J0TWFwLnNpemUgPiAwICYmIGlzU29ydE1hcEZvckhlYWRlcjBBY3RpdmUpIHx8IHNldC5oYXMoaGVhZGVyWzBdKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIChzb3J0TWFwLnNpemUgPiAwICYmIHNvcnRNYXAuaGFzKGhlYWRlclswXSkgJiYgaXNTb3J0TWFwRm9ySGVhZGVyMEFjdGl2ZSkgfHxcclxuICAgICAgICAgICAgKHNvcnRNYXAuc2l6ZSA+IDAgJiYgc29ydE1hcC5oYXMoaGVhZGVyWzFdKSAmJiBpc1NvcnRNYXBGb3JIZWFkZXIxQWN0aXZlKSB8fFxyXG4gICAgICAgICAgICBzZXQuaGFzKGhlYWRlclswXSkgfHxcclxuICAgICAgICAgICAgc2V0LmhhcyhoZWFkZXJbMV0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckNvbHVtbkZpbHRlcigpIHtcclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJTZXQ6IFNldDxzdHJpbmc+ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG4gICAgICAgICAgICBhcHBsaWVkRmlsdGVyU2V0LmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgICAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkgPSBbLi4uYXBwbGllZEZpbHRlclNldF07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5kZWxldGUodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0T3B0aW9uVmFsdWVzKG1pblZhbHVlOiBudW1iZXIsIG1heFZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmbG9vcjogbWluVmFsdWUsXHJcbiAgICAgICAgICAgIGNlaWw6IG1heFZhbHVlLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSxcclxuICAgICAgICAgICAgdHJhbnNsYXRlOiB0aGlzLm5vcm1hbFRyYW5zbGF0ZUZ1bmN0aW9uLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcGVyY2VudFRyYW5zbGF0ZUZ1bmN0aW9uID0gKGRhdGE6IG51bWJlcik6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgY29uc3QgZm9ybWF0TnVtYmVyID0gKG51bTogbnVtYmVyKSA9PiBwYXJzZUZsb2F0KG51bS50b0ZpeGVkKDIpKTtcclxuXHJcbiAgICAgICAgaWYgKE1hdGguYWJzKGRhdGEpID49IDEwMDApIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0TnVtYmVyKE1hdGguYWJzKGRhdGEpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtkYXRhIDwgMCA/IFwiLVwiIDogXCJcIn0ke2Zvcm1hdHRlZH1rJWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtmb3JtYXROdW1iZXIoZGF0YSl9JWA7XHJcbiAgICB9O1xyXG5cclxuICAgIGN1cnJlbmN5VHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXROdW1iZXIgPSAobnVtOiBudW1iZXIpID0+IHBhcnNlRmxvYXQobnVtLnRvRml4ZWQoMikpO1xyXG5cclxuICAgICAgICBpZiAoTWF0aC5hYnMoZGF0YSkgPj0gMTAwMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBmb3JtYXROdW1iZXIoTWF0aC5hYnMoZGF0YSkgLyAxMDAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGEgPCAwID8gXCItXCIgOiBcIlwifSQke2Zvcm1hdHRlZH1rYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2RhdGEgPCAwID8gXCItXCIgOiBcIlwifSQke2Zvcm1hdE51bWJlcihNYXRoLmFicyhkYXRhKSl9YDtcclxuICAgIH07XHJcblxyXG4gICAgbm9ybWFsVHJhbnNsYXRlRnVuY3Rpb24gPSAoZGF0YTogbnVtYmVyKTogc3RyaW5nID0+IHtcclxuICAgICAgICBjb25zdCBmb3JtYXROdW1iZXIgPSAobnVtOiBudW1iZXIpID0+IHBhcnNlRmxvYXQobnVtLnRvRml4ZWQoMikpO1xyXG5cclxuICAgICAgICBpZiAoZGF0YSA+PSAxMDAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtmb3JtYXROdW1iZXIoZGF0YSAvIDEwMDApfWtgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZm9ybWF0TnVtYmVyKGRhdGEpLnRvU3RyaW5nKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGZpbmRVbmlxdWVEYXRlc1dpdGhEYXRhKGRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgdW5pcXVlRGF0ZXMgPSB1bmlxKGRhdGEubWFwKCh1KSA9PiB1LmRhdGUpKTtcclxuICAgICAgICBjb25zdCB1bmlxdWVEYXRlc0luTmdiRGF0ZUZvcm1hdDogTmdiRGF0ZVR5cGVbXSA9IFtdO1xyXG4gICAgICAgIHVuaXF1ZURhdGVzLmZvckVhY2goKGRhdGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB1bmlxdWVEYXRlc0luTmdiRGF0ZUZvcm1hdC5wdXNoKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZVN0YW5kYXJkRm9ybWF0KGRheWpzKGRhdGUsIFwiTU0vREQvWVlcIikuZm9ybWF0KFwiTU0vREQvWVlZWVwiKSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHVuaXF1ZURhdGVzSW5OZ2JEYXRlRm9ybWF0O1xyXG4gICAgfVxyXG5cclxuICAgIHJlT3JkZXJBcHBsaWVkRmlsdGVyc0FycmF5KGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQ6IGJvb2xlYW4sIGRhdGU/OiBhbnkpIHtcclxuICAgICAgICBsZXQgaXNGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgaXNGaWx0ZXJlZCA9IHRoaXMuY2hlY2tJZkRhdGFJc0ZpbHRlcmVkKGlzRmlsdGVyZWQsIGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQsIGRhdGUpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmRGF0YUlzRmlsdGVyZWQoaXNGaWx0ZXJlZDogYm9vbGVhbiwgaXNIaWVyYXJjaGlhbFVzZXJGaWx0ZXJlZDogYm9vbGVhbiwgZGF0ZT86IGFueSkge1xyXG4gICAgICAgIGxldCBpc0RhdGFGaWx0ZXJlZCA9IGlzRmlsdGVyZWQ7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJ1c2VyXCIgJiYgIXRoaXMudG9vbHRpcE1hcC5oYXMoXCJ1c2VyXCIpKSB7XHJcbiAgICAgICAgICAgIGlzRGF0YUZpbHRlcmVkID0gY2xvbmVEZWVwKGlzSGllcmFyY2hpYWxVc2VyRmlsdGVyZWQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiRW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJzdGFydFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJ0aW1lXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInRpbWVvdXRUaW1lXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIk90aGVyQXZhaWxhYmxlU3BvdHNUYWJsZVN0YXJ0VGltZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVFbmRUaW1lXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInN0YXJ0X3RpbWVfZm9yX2ZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNEYXRhRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgIWlzRXF1YWwoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwic3RhcnRFbmRUaW1lXCIgfHwgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgICAgICAgaXNEYXRhRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgIWlzRXF1YWwoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICApIHx8XHJcbiAgICAgICAgICAgICAgICAhdGhpcy5pbmNsdWRlWmVyb1RpbWUgfHxcclxuICAgICAgICAgICAgICAgICF0aGlzLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNsaWRlclNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBpc0RhdGFGaWx0ZXJlZCA9XHJcbiAgICAgICAgICAgICAgICAhaXNFcXVhbChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKSxcclxuICAgICAgICAgICAgICAgICkgJiYgIWlzRXF1YWwodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksIHRoaXMuc2xpZGVyRGF0YSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwicG9zdGVkQWR1XCIgJiYgdGhpcy5zdWJSYWRpb0J1dHRvbiA9PT0gXCJub3RSZXF1aXJlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBpc0RhdGFGaWx0ZXJlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFpc0RhdGFGaWx0ZXJlZCAmJiB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwic3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwicGVyaW9kXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIkFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwidGltZW91dERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZmxpZ2h0U3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcImZsaWdodEVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiZGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJyZXZpc2lvblN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJHZW5lcmF0ZWRPblwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJXZWVrXCIgfHxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvID09PSBcIkFjdHVhbFdlZWtTdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwic2NoZWR1bGVkRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJMYXN0RmV0Y2hlZERhdGVcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiYWlyRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJzY2hlZHVsZWRXZWVrXCJcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNEYXRhRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgIWlzRXF1YWwoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyksXHJcbiAgICAgICAgICAgICAgICApICYmICFpc0VxdWFsKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pLCB0aGlzLmZsaWdodERhdGVSYW5nZSk7XHJcbiAgICAgICAgICAgIGlmICghaXNEYXRhRmlsdGVyZWQgJiYgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmRlbGV0ZSh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgdG90YWxPcHRpb25zQ291bnQgPSB0aGlzLnRvb2x0aXBNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbykuZmlsdGVyKCh4OiBhbnkpID0+ICF4LmlzSGlkZGVuKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9uc0NvdW50ID0gdGhpcy50b29sdGlwTWFwXHJcbiAgICAgICAgICAgICAgICAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbylcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHg6IGFueSkgPT4gIXguaXNIaWRkZW4gJiYgeC5pc1NlbGVjdGVkKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlzRGF0YUZpbHRlcmVkID0gc2VsZWN0ZWRPcHRpb25zQ291bnQgPiAwICYmIHNlbGVjdGVkT3B0aW9uc0NvdW50ICE9PSB0b3RhbE9wdGlvbnNDb3VudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzRGF0YUZpbHRlcmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZU9yQ2hhbmdlTGF0ZXN0RmlsdGVySW5kZXgoaXNGaWx0ZXJlZDogYm9vbGVhbikge1xyXG4gICAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQodGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuXHJcbiAgICAgICAgaWYgKGlzRmlsdGVyZWQgJiYgIXNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBzZXQuYWRkKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0ZpbHRlcmVkICYmIHNldC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBzZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIHNldC5hZGQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXQuZGVsZXRlKHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSA9IFsuLi5zZXRdO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkVGhlblNvcnRUaGVEYXRhKG9yaWdpbmFsRGF0YTogYW55W10pIHtcclxuICAgICAgICBsZXQgc29ydGVkRGF0YSA9IG9yaWdpbmFsRGF0YTtcclxuICAgICAgICBpZiAoIXRoaXMuYW5uYVNvcnRTZXJ2aWNlPy5jb2x1bW5Tb3J0U3RhdGUpIHJldHVybiBzb3J0ZWREYXRhO1xyXG4gICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZS5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gXCJBU0NcIikge1xyXG4gICAgICAgICAgICAgICAgc29ydGVkRGF0YSA9IGNsb25lRGVlcChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5zb3J0RGF0YUZvckNvbXBvbmVudE90aGVyVGhhbkx1ckFuZENzclBhZ2UodHJ1ZSwgb3JpZ2luYWxEYXRhLCBrZXkpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJERVNDXCIpIHtcclxuICAgICAgICAgICAgICAgIHNvcnRlZERhdGEgPSBjbG9uZURlZXAoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2Uuc29ydERhdGFGb3JDb21wb25lbnRPdGhlclRoYW5MdXJBbmRDc3JQYWdlKGZhbHNlLCBvcmlnaW5hbERhdGEsIGtleSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzb3J0ZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlckRhdGEob3JpZ2luYWxEYXRhOiBhbnlbXSwga2V5VG9Ta2lwOiBzdHJpbmcsIGlzTHVyQ3NyUGFnZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkRGF0YSA9IFsuLi5vcmlnaW5hbERhdGFdO1xyXG4gICAgICAgIGlmICghaXNMdXJDc3JQYWdlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IHRoaXMuY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWRUaGVuU29ydFRoZURhdGEob3JpZ2luYWxEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZm9yRWFjaCgodmFsdWUsIGtleTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlclNwbGl0ZWRWYWx1ZXM6IGJvb2xlYW4gPSBrZXkuaW5jbHVkZXModGhpcy5TUExJVEVEX0NIRUNLQk9YX0ZJTFRFUl9LRVkpO1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyU3BsaXRlZFZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXHJcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkuc3BsaXQodGhpcy5TUExJVEVEX0NIRUNLQk9YX0ZJTFRFUl9LRVkpWzBdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChrZXkgIT09IGtleVRvU2tpcCAmJiBvcmlnaW5hbERhdGEubGVuZ3RoID4gMCAmJiB0aGlzLm5lc3RlZEtleUV4aXN0cyhvcmlnaW5hbERhdGFbMF0sIGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNsaWRlclNldC5oYXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gb2JqW2tleV0gPj0gdmFsdWUubWluICYmIG9ialtrZXldIDw9IHZhbHVlLm1heCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJzdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJlbmREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiRW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIkFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJ0aW1lb3V0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcImZsaWdodEVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJkYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInJldmlzaW9uU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiR2VuZXJhdGVkT25cIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJXZWVrXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiQWN0dWFsV2Vla1N0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIlZpb2xhdGVkU3BvdERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJWaW9sYXRpbmdTcG90RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInNjaGVkdWxlZERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJMYXN0RmV0Y2hlZERhdGVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJjcmVhdGVkT25cIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJhaXJEYXRlXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwic2NoZWR1bGVkV2Vla1wiXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuaXNPYmplY3RJblRoZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMuZ2V0RGF0YUluVGhlRGF0ZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiRW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcInRpbWVvdXRUaW1lXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwic3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwiZW5kVGltZUZvckZpbHRlclwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIlN0YXJ0VGltZVwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID09PSBcIkVuZFRpbWVcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIGtleSA9PT0gXCJlbmRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAgICAgICAgICBrZXkgPT09IFwidGltZVwiXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKChvYmopID0+IHRoaXMucmV0dXJuRGF0YUZvckZyb21BbmRUb1RpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCIgfHwga2V5ID09PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJldHVybkRhdGFGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShvYmosIHZhbHVlLCBrZXkpLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZERhdGEgPSBmaWx0ZXJlZERhdGEuZmlsdGVyKCh1KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJTcGxpdGVkVmFsdWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHZhbHVlLmZpbmQoKHZhbDogYW55KSA9PiB1W2tleV0uaW5jbHVkZXModmFsKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWUuaW5jbHVkZXModGhpcy5nZXRWYWx1ZUZyb21PYmplY3QodSwga2V5KSksXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVGcm9tT2JqZWN0KG9iajogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBrZXkuc3BsaXQoXCIuXCIpLnJlZHVjZSgocmVzLCBjdXJyZW50S2V5KSA9PiByZXMgJiYgcmVzW2N1cnJlbnRLZXldLCBvYmopO1xyXG4gICAgfVxyXG5cclxuICAgIG5lc3RlZEtleUV4aXN0cyhvYmo6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBrZXkuc3BsaXQoXCIuXCIpLnJlZHVjZSgoYWNjLCBjdXJyZW50S2V5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjICYmIGN1cnJlbnRLZXkgaW4gYWNjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjY1tjdXJyZW50S2V5XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIH0sIG9iaikgIT09IHVuZGVmaW5lZFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuT3JkZXJzSW5UaGVSYW5nZShvcmRlcjogYW55LCByYW5nZTogYW55LCBrZXk6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGlzRGF0ZUJldHdlZW5UaGVTZWxlY3RlZFJhbmdlID0gZGF5anMob3JkZXJba2V5XSkuaXNCZXR3ZWVuKHJhbmdlLm1pblNlbGVjdGVkRGF0ZSwgcmFuZ2UubWF4U2VsZWN0ZWREYXRlKTtcclxuICAgICAgICBjb25zdCBpc0RhdGVTYW1lQXNUaGVNaW5TZWxlY3RlZERhdGUgPSBkYXlqcyhvcmRlcltrZXldKS5pc1NhbWUocmFuZ2UubWluU2VsZWN0ZWREYXRlKTtcclxuICAgICAgICBjb25zdCBpc0RhdGVTYW1lQXNUaGVNYXhTZWxlY3RlZERhdGUgPSBkYXlqcyhvcmRlcltrZXldKS5pc1NhbWUocmFuZ2UubWF4U2VsZWN0ZWREYXRlKTtcclxuICAgICAgICByZXR1cm4gaXNEYXRlQmV0d2VlblRoZVNlbGVjdGVkUmFuZ2UgfHwgaXNEYXRlU2FtZUFzVGhlTWluU2VsZWN0ZWREYXRlIHx8IGlzRGF0ZVNhbWVBc1RoZU1heFNlbGVjdGVkRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5EYXRhRm9yVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IFwiSEg6bW06c3NcIjtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFN0YXJ0RGF0ZSA9IGRheWpzKHNlbGVjdGVkRGF0YS5zdGFydFRpbWUsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbmREYXRlID0gZGF5anMoc2VsZWN0ZWREYXRhLmVuZFRpbWUsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gZGF5anMob2JqLnN0YXJ0VGltZSwgZm9ybWF0KTtcclxuICAgICAgICBjb25zdCBlbmRUaW1lID0gZGF5anMob2JqLmVuZFRpbWUsIGZvcm1hdCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgPSBzdGFydFRpbWUuaXNTYW1lKHNlbGVjdGVkU3RhcnREYXRlKTtcclxuICAgICAgICBjb25zdCBpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSA9IHN0YXJ0VGltZS5pc0JldHdlZW4oc2VsZWN0ZWRTdGFydERhdGUsIHNlbGVjdGVkRW5kRGF0ZSk7XHJcbiAgICAgICAgY29uc3QgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lID0gZW5kVGltZS5pc1NhbWUoc2VsZWN0ZWRFbmREYXRlKTtcclxuICAgICAgICBjb25zdCBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBlbmRUaW1lLmlzQmV0d2VlbihzZWxlY3RlZFN0YXJ0RGF0ZSwgc2VsZWN0ZWRFbmREYXRlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKSB8fFxyXG4gICAgICAgICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iajogYW55LCBzZWxlY3RlZERhdGE6IGFueSwga2V5OiBhbnkpIHtcclxuICAgICAgICBjb25zdCBmb3JtYXQgPSBcIk1NL0REL1lZWVkgSEg6bW06c3NcIjtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEZyb21UaW1lID0gZGF5anMoYDAxLzAxLzIwMDEgJHtzZWxlY3RlZERhdGEuZnJvbVRpbWV9YCwgZm9ybWF0KTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvVGltZSA9IGRheWpzKGAwMS8wMS8yMDAxICR7c2VsZWN0ZWREYXRhLnRvVGltZX1gLCBmb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IG9ialRpbWUgPSBvYmpba2V5XTtcclxuXHJcbiAgICAgICAgaWYgKFtcIlwiLCBcIi1cIiwgbnVsbF0uaW5jbHVkZXMob2JqVGltZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XSA9PT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XSA9PT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2VsZWN0ZWREYXRhLmluY2x1ZGVaZXJvICYmIG9ialtrZXldID09PSBcIjBcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVplcm8gJiYgb2JqW2tleV0gPT09IFwiMFwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVRpbWVSYW5nZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkYXlqc1RpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke29ialRpbWV9YCwgZm9ybWF0KTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRGcm9tVGltZSA9IGRheWpzVGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICAgICAgY29uc3QgaXNPYmpUaW1lU2FtZUFzU2VsZWN0ZWRUb1RpbWUgPSBkYXlqc1RpbWUuaXNTYW1lKHNlbGVjdGVkVG9UaW1lKTtcclxuICAgICAgICBjb25zdCBpc09ialRpbWVCZXR3ZWVuU2VsZWN0ZWRGcm9tVGltZUFuZFRvVGltZSA9IGRheWpzVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBpc09ialRpbWVTYW1lQXNTZWxlY3RlZEZyb21UaW1lIHx8XHJcbiAgICAgICAgICAgIGlzT2JqVGltZVNhbWVBc1NlbGVjdGVkVG9UaW1lIHx8XHJcbiAgICAgICAgICAgIGlzT2JqVGltZUJldHdlZW5TZWxlY3RlZEZyb21UaW1lQW5kVG9UaW1lXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqOiBhbnksIHNlbGVjdGVkRGF0YTogYW55LCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IFwiTU0vREQvWVlZWSBISDptbTpzc1wiO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRnJvbVRpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke3NlbGVjdGVkRGF0YS5mcm9tVGltZX1gLCBmb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9UaW1lID0gZGF5anMoYDAxLzAxLzIwMDEgJHtzZWxlY3RlZERhdGEudG9UaW1lfWAsIGZvcm1hdCk7XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3RlZERhdGEuaW5jbHVkZU11bHRpICYmIG9ialtrZXldWzBdID09PSBcIjxtdWx0aT5cIikge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc2VsZWN0ZWREYXRhLmluY2x1ZGVNdWx0aSAmJiBvYmpba2V5XVswXSA9PT0gXCI8bXVsdGk+XCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XVswXSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXNlbGVjdGVkRGF0YS5pbmNsdWRlWmVybyAmJiBvYmpba2V5XVswXSA9PT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZERhdGEuaW5jbHVkZVRpbWVSYW5nZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBkYXlqcyhgMDEvMDEvMjAwMSAke29ialtrZXldWzFdfWAsIGZvcm1hdCk7XHJcbiAgICAgICAgY29uc3QgZW5kVGltZSA9IGRheWpzKGAwMS8wMS8yMDAxICR7b2JqW2tleV1bMl19YCwgZm9ybWF0KTtcclxuXHJcbiAgICAgICAgY29uc3QgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSA9IHN0YXJ0VGltZS5pc1NhbWUoc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICAgICAgY29uc3QgaXNTdGFydFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUgPSBzdGFydFRpbWUuaXNCZXR3ZWVuKHNlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lKTtcclxuICAgICAgICBjb25zdCBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgPSBlbmRUaW1lLmlzU2FtZShzZWxlY3RlZFRvVGltZSk7XHJcbiAgICAgICAgY29uc3QgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lID0gZW5kVGltZS5pc0JldHdlZW4oc2VsZWN0ZWRGcm9tVGltZSwgc2VsZWN0ZWRUb1RpbWUpO1xyXG5cclxuICAgICAgICAvLyBwcmV2aW91cyBjb25kaXRpb24gdG8gYXBwbHkgdGltYmFuZCBmaWx0dGVyXHJcbiAgICAgICAgLy8gcmV0dXJuIChcclxuICAgICAgICAvLyAgICAgKGlzU3RhcnRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lICYmIGlzRW5kVGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSkgfHxcclxuICAgICAgICAvLyAgICAgKGlzU3RhcnRUaW1lU2FtZUFzU2VsZWN0ZWRTdGFydFRpbWUgJiYgaXNFbmRUaW1lU2FtZUFzU2VsZWN0ZWRFbmRUaW1lKSB8fFxyXG4gICAgICAgIC8vICAgICAoaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSAmJiBpc0VuZFRpbWVCZXR3ZWVuU2VsZWN0ZWRTdGFydEFuZEVuZFRpbWUpIHx8XHJcbiAgICAgICAgLy8gICAgIChpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSAmJiBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUpXHJcbiAgICAgICAgLy8gKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgaXNTdGFydFRpbWVTYW1lQXNTZWxlY3RlZFN0YXJ0VGltZSB8fFxyXG4gICAgICAgICAgICBpc1N0YXJ0VGltZUJldHdlZW5TZWxlY3RlZFN0YXJ0QW5kRW5kVGltZSB8fFxyXG4gICAgICAgICAgICBpc0VuZFRpbWVTYW1lQXNTZWxlY3RlZEVuZFRpbWUgfHxcclxuICAgICAgICAgICAgaXNFbmRUaW1lQmV0d2VlblNlbGVjdGVkU3RhcnRBbmRFbmRUaW1lXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRhSW5UaGVEYXRlUmFuZ2Uob2JqOiBhbnksIHZhbHVlOiBhbnksIGtleTogYW55KSB7XHJcbiAgICAgICAgbGV0IHBhcnNpbmdGb3JtYXQ6IHN0cmluZztcclxuICAgICAgICBpZiAoa2V5ID09PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgICAgICAgIHBhcnNpbmdGb3JtYXQgPSBcIllZWVktTU0tRERcIjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRheWpzU3RhcnREYXRlID0gZGF5anMob2JqLnN0YXJ0RGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRheWpzRW5kRGF0ZSA9IGRheWpzKG9iai5lbmREYXRlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZUlzQmV0d2VlblNlbERhdGUgPSBkYXlqc1N0YXJ0RGF0ZS5pc0JldHdlZW4odmFsdWUuZnJvbURhdGUsIHZhbHVlLnRvRGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZERhdGVJc0JldHdlZW5TZWxEYXRlID0gZGF5anNFbmREYXRlLmlzQmV0d2Vlbih2YWx1ZS5mcm9tRGF0ZSwgdmFsdWUudG9EYXRlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0RGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlID0gdmFsdWUuZnJvbURhdGUuaXNTYW1lKGRheWpzU3RhcnREYXRlKTtcclxuICAgICAgICAgICAgY29uc3QgZW5kRGF0ZUlzU2FtZUFzU2VsRW5kRGF0ZSA9IHZhbHVlLnRvRGF0ZS5pc1NhbWUoZGF5anNFbmREYXRlKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAoc3RhcnREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBzdGFydERhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSkgJiZcclxuICAgICAgICAgICAgICAgIChlbmREYXRlSXNCZXR3ZWVuU2VsRGF0ZSB8fCBlbmREYXRlSXNTYW1lQXNTZWxFbmREYXRlKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJBaXJEYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImZsaWdodFN0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJmbGlnaHRFbmREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIldlZWtcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiQWN0dWFsV2Vla1N0YXJ0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJ0aW1lb3V0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJzY2hlZHVsZWREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic2NoZWR1bGVkV2Vla1wiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHBhcnNpbmdGb3JtYXQgPSBcIk1NL0REL1lZWVlcIjtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUlzQmV0d2VlblNlbERhdGUgPSBkYXlqcyhvYmpba2V5XSwgcGFyc2luZ0Zvcm1hdCkuaXNCZXR3ZWVuKFxyXG4gICAgICAgICAgICAgICAgdmFsdWUubWluU2VsZWN0ZWREYXRlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWUubWF4U2VsZWN0ZWREYXRlLFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0ZUlzU2FtZUFzU2VsU3RhcnREYXRlID0gZGF5anMob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzU2FtZSh2YWx1ZS5taW5TZWxlY3RlZERhdGUpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlSXNTYW1lQXNTZWxFbmREYXRlID0gZGF5anMob2JqW2tleV0sIHBhcnNpbmdGb3JtYXQpLmlzU2FtZSh2YWx1ZS5tYXhTZWxlY3RlZERhdGUpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGRhdGVJc0JldHdlZW5TZWxEYXRlIHx8IGRhdGVJc1NhbWVBc1NlbFN0YXJ0RGF0ZSB8fCBkYXRlSXNTYW1lQXNTZWxFbmREYXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0aWFsaXplVGltZUZpbHRlckRhdGEoY2xvbmVkRGF0YTogYW55W10sIGtleSA9IFwic3RhcnRFbmRUaW1lXCIpIHtcclxuICAgICAgICBjb25zdCBzdGFydFRpbWVBcnIgPSBtYXAoY2xvbmVkRGF0YSwgXCJzdGFydFRpbWVcIik7XHJcbiAgICAgICAgY29uc3QgZW5kVGltZUFyciA9IG1hcChjbG9uZWREYXRhLCBcImVuZFRpbWVcIik7XHJcblxyXG4gICAgICAgIHN0YXJ0VGltZUFyci5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZUFzY2VuZGluZyhhLCBiKSk7XHJcblxyXG4gICAgICAgIGVuZFRpbWVBcnIuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVEZXNjZW5kaW5nKGEsIGIpKTtcclxuXHJcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXJ0RW5kVGltZSA9IHtcclxuICAgICAgICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWVBcnJbMF0sXHJcbiAgICAgICAgICAgIGVuZFRpbWU6IGVuZFRpbWVBcnJbMF0sXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQoa2V5LCBpbml0aWFsU3RhcnRFbmRUaW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm5Db2x1bW5GaWx0ZXJTdGF0dXMoZGF0YTogYW55W10sIGhlYWRlck5hbWU6IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgICAgIGlmIChoZWFkZXJOYW1lID09PSBcInN0YXJ0RW5kVGltZVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWUgPSBkYXRhLm1hcCgodSkgPT4gdVtoZWFkZXJOYW1lXVswXSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVuaXFUaW1lID0gdW5pcSh0aW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIHVuaXFUaW1lLmxlbmd0aCA9PT0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAhKHVuaXEoZGF0YS5tYXAoKHUpID0+IHVbaGVhZGVyTmFtZV0pKS5sZW5ndGggPiAxKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWx0ZXJPcHRpb25zRGF0YShkYXRhOiBhbnlbXSwgY2xvbmVkRGF0YTogYW55W10sIGtleT86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGFwcGxpZWRGaWx0ZXJTZXQgPSBuZXcgU2V0KHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheSk7XHJcbiAgICAgICAgY29uc3Qga2V5VG9DaGVjayA9IGtleSB8fCB0aGlzLnNlbGVjdGVkUmFkaW87XHJcbiAgICAgICAgaWYgKGFwcGxpZWRGaWx0ZXJTZXQuaGFzKGtleVRvQ2hlY2spKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbHRlckRhdGEoY2xvbmVkRGF0YSwga2V5VG9DaGVjayk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHJlT3JkZXJBcHBsaWVkRmlsdGVyc1N0YXRlKGNsb25lZERhdGE6IGFueVtdLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgbGV0IGlzRmlsdGVyZWQgPSB0cnVlO1xyXG4gICAgICAgIGlzRmlsdGVyZWQgPSB0aGlzLmNoZWNrSWZGaWx0ZXJJc0FwcGxpZWQoY2xvbmVkRGF0YSwgdmFsdWUpO1xyXG4gICAgICAgIHRoaXMucmVtb3ZlT3JDaGFuZ2VMYXRlc3RGaWx0ZXJJbmRleChpc0ZpbHRlcmVkKTtcclxuICAgICAgICByZXR1cm4gaXNGaWx0ZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmRmlsdGVySXNBcHBsaWVkKGNsb25lZERhdGE6IGFueVtdLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlT2ZDb2x1bW4gPSBzb3J0QnkoY2xvbmVkRGF0YS5tYXAoKGl0ZW0pID0+IGl0ZW1bdGhpcy5zZWxlY3RlZFJhZGlvXSkpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZU9mQ29sdW1uID0gc29ydEJ5KFxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKGNsb25lZERhdGEsIHZhbHVlKS5tYXAoKGl0ZW0pID0+IGl0ZW1bdGhpcy5zZWxlY3RlZFJhZGlvXSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gIWlzRXF1YWwoaW5pdGlhbFZhbHVlT2ZDb2x1bW4sIGN1cnJlbnRWYWx1ZU9mQ29sdW1uKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseUZpbHRlcihkYXRhOiBhbnlbXSwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZERhdGEgPSBkYXRhO1xyXG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2VsZWN0ZWRSYWRpbztcclxuICAgICAgICBpZiAodGhpcy5zbGlkZXJTZXQuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiBvYmpba2V5XSA+PSB2YWx1ZS5taW4gJiYgb2JqW2tleV0gPD0gdmFsdWUubWF4KTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkVuZERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiQWlyRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJ0aW1lb3V0RGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJmbGlnaHRTdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiZmxpZ2h0RW5kRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJkYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkRhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwicmV2aXNpb25TdGFydERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiR2VuZXJhdGVkT25cIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiV2Vla1wiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJBY3R1YWxXZWVrU3RhcnREYXRlXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIlZpb2xhdGVkU3BvdERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiVmlvbGF0aW5nU3BvdERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic2NoZWR1bGVkRGF0ZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJMYXN0RmV0Y2hlZERhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiY3JlYXRlZE9uXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImFpckRhdGVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic2NoZWR1bGVkV2Vla1wiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5pc09iamVjdEluVGhlUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWREYXRhID0gZmlsdGVyZWREYXRhLmZpbHRlcigob2JqKSA9PiB0aGlzLmdldERhdGFJblRoZURhdGVSYW5nZShvYmosIHZhbHVlLCBrZXkpKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiU3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcIkVuZFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwidGltZW91dFRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic3RhcnRUaW1lRm9yRmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImVuZFRpbWVGb3JGaWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwic3RhcnRfdGltZV9mb3JfZmlsdGVyXCIgfHxcclxuICAgICAgICAgICAga2V5ID09PSBcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwidGltZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJTdGFydFRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiRW5kVGltZVwiIHx8XHJcbiAgICAgICAgICAgIGtleSA9PT0gXCJPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVTdGFydFRpbWVcIiB8fFxyXG4gICAgICAgICAgICBrZXkgPT09IFwiT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRW5kVGltZVwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yRnJvbUFuZFRvVGltZVJhbmdlKG9iaiwgdmFsdWUsIGtleSkpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBcInN0YXJ0RW5kVGltZU11bHRpXCIgfHwga2V5ID09PSBcInN0YXJ0RW5kVGltZVwiIHx8IGtleSA9PT0gXCJUaW1lQmFuZFwiKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gdGhpcy5yZXR1cm5EYXRhRm9yU3RhcnRBbmRFbmRUaW1lUmFuZ2Uob2JqLCB2YWx1ZSwga2V5KSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcmVkRGF0YSA9IGZpbHRlcmVkRGF0YS5maWx0ZXIoKHUpID0+IHZhbHVlLmluY2x1ZGVzKHVba2V5XSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWREYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGlzT2JqZWN0SW5UaGVSYW5nZShvYmo6IGFueSwgdmFsdWU6IGFueSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBvYmpWYWwgPSBvYmpba2V5XTtcclxuICAgICAgICBjb25zdCBkYXlqc0RhdGUgPSBkYXlqcyhvYmpWYWwpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUuZnJvbURhdGUgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlLnRvRGF0ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICB2YWx1ZS5mcm9tRGF0ZSA9IGRheWpzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudChcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKHZhbHVlLmZyb21EYXRlLCBcIkREL01NL1lZWVlcIiksXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB2YWx1ZS50b0RhdGUgPSBkYXlqcyhcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnROZ2JEYXRlVG9Nb21lbnQoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZSh2YWx1ZS50b0RhdGUsIFwiREQvTU0vWVlZWVwiKSxcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGlzRGF0ZVNhbWVBc1N0YXJ0T2ZUaGVSYW5nZSA9IHZhbHVlLmZyb21EYXRlLmlzU2FtZShvYmpWYWwpO1xyXG4gICAgICAgIGNvbnN0IGlzRGF0ZVNhbWVBc0VuZE9mVGhlUmFuZ2UgPSB2YWx1ZS50b0RhdGUuaXNTYW1lKG9ialZhbCk7XHJcbiAgICAgICAgY29uc3QgaXNEYXRlQmV0d2VlblRoZVN0YXJ0QW5kRW5kT2ZSYW5nZSA9IGRheWpzRGF0ZS5pc0JldHdlZW4odmFsdWUuZnJvbURhdGUsIHZhbHVlLnRvRGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuIGlzRGF0ZVNhbWVBc1N0YXJ0T2ZUaGVSYW5nZSB8fCBpc0RhdGVTYW1lQXNFbmRPZlRoZVJhbmdlIHx8IGlzRGF0ZUJldHdlZW5UaGVTdGFydEFuZEVuZE9mUmFuZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU3RhdGVPZlRoZUN1cnJlbnRGaWx0ZXJUYWIoc29ydE1hcDogTWFwPHN0cmluZywgU29ydFR5cGU+KSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlS2V5ID0gdGhpcy5zZWxlY3RlZFJhZGlvO1xyXG4gICAgICAgIGxldCBrZXlBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5pc0ZpbHRlclNvcnRBY3RpdmUpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKGFjdGl2ZUtleSkpIHtcclxuICAgICAgICAgICAgICAgIGtleUFyciA9IGtleS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRmlsdGVyU29ydEFjdGl2ZVtrZXldID0gdGhpcy5pc1Rvb2x0aXBBY3RpdmUoa2V5QXJyLCBzb3J0TWFwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVN0YXRlT2ZBbGxUaGVLZXlzKHNvcnRNYXA6IE1hcDxzdHJpbmcsIFNvcnRUeXBlPikge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuaXNGaWx0ZXJTb3J0QWN0aXZlKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5QXJyID0ga2V5LnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgdGhpcy5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9IHRoaXMuaXNUb29sdGlwQWN0aXZlKGtleUFyciwgc29ydE1hcCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5jcmVtZW50SG91cih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQodmFsdWUsIDEwKSA8IDEyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApICsgMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAxO1xyXG4gICAgfVxyXG5cclxuICAgIGRlY3JlbWVudEhvdXIodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gMTI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXJzZUludCh2YWx1ZSwgMTApID4gMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUsIDEwKSAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAxMjtcclxuICAgIH1cclxuXHJcbiAgICBpbmNyZW1lbnRNaW51dGUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIC8vIGluY3JlbWVudCB0byBuZWFyZXN0IHByb3BlciBpbnRlcnZhbCgxNSwzMCw0NSlcclxuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIGlmIChtaW51dGUgPD0gMTQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiMTVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAxNSAmJiBtaW51dGUgPD0gMjkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiMzBcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAzMCAmJiBtaW51dGUgPD0gNDQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiNDVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSA0NSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIwMFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZGVjcmVtZW50TWludXRlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIGlmIChtaW51dGUgPiAwICYmIG1pbnV0ZSA8PSAxNSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIwMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDE2ICYmIG1pbnV0ZSA8PSAzMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIxNVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDMxICYmIG1pbnV0ZSA8PSA0NSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIzMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID4gNDUgfHwgbWludXRlID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIjQ1XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Q2hlY2tib3ggbWV0aG9kPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vXHJcblxyXG4gICAgZGlzYWJsZUFjdGl2ZUZpbHRlckNsZWFyQnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyU2V0ID0gbmV3IFNldCh0aGlzLmFwcGxpZWRGaWx0ZXJzQXJyYXkpO1xyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpO1xyXG4gICAgICAgIGNvbnN0IGlzU29ydFByZXNlbnQgPVxyXG4gICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUgJiZcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLnNpemUgPiAwICYmXHJcbiAgICAgICAgICAgIGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyICE9PSBTb3J0VHlwZUVudW0uREVGQVVMVDtcclxuXHJcbiAgICAgICAgcmV0dXJuICEoc2VsZWN0ZWRGaWx0ZXJTZXQuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykgfHwgaXNTb3J0UHJlc2VudCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29sdW1uU29ydFN0YXRlRm9yU2VsZWN0ZWRSYWRpbygpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBjdXJyZW50Q29sdW1uU29ydEZpbHRlciA9XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykgJiZcclxuICAgICAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gY3VycmVudENvbHVtblNvcnRGaWx0ZXIgfHwgU29ydFR5cGVFbnVtLkRFRkFVTFQ7XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZUxpc3RGb3JDaGVja2JveEZpbHRlcihcclxuICAgICAgICBoZWFkZXI6IHN0cmluZyxcclxuICAgICAgICBvcHRpb25EYXRhOiBhbnlbXSxcclxuICAgICAgICBzaG93U3BsaXRlZE9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICAgICBzcGxpdERlbGltaXRlcjogc3RyaW5nID0gdGhpcy5ERUZBVUxUX1NQTElUX1NFUEFSQVRPUixcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBPcHRpb25zID0gdGhpcy5nZXRUb29sdGlwTW9kZWxGcm9tT3B0aW9uRGF0YShcclxuICAgICAgICAgICAgb3B0aW9uRGF0YSxcclxuICAgICAgICAgICAgaGVhZGVyLFxyXG4gICAgICAgICAgICBzaG93U3BsaXRlZE9wdGlvbnMsXHJcbiAgICAgICAgICAgIHNwbGl0RGVsaW1pdGVyLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0VW5zZWxlY3RMaXN0Q2hlY2tib3godG9vbHRpcE9wdGlvbnMsIGhlYWRlcik7XHJcbiAgICAgICAgdGhpcy5mb3JtYXROdWxsT3B0aW9uVG9TcGVjaWZpZWRTdHJpbmcodG9vbHRpcE9wdGlvbnMsIHRoaXMubnVsbFRvQmVGb3JtYXRlZEludG9TdHJpbmcpO1xyXG5cclxuICAgICAgICByZXR1cm4gdG9vbHRpcE9wdGlvbnM7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VG9vbHRpcE1vZGVsRnJvbU9wdGlvbkRhdGEoXHJcbiAgICAgICAgb3B0aW9uRGF0YTogYW55W10sXHJcbiAgICAgICAgaGVhZGVyOiBzdHJpbmcsXHJcbiAgICAgICAgc2hvd1NwbGl0ZWRPcHRpb25zOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICAgICAgc3BsaXREZWxpbWl0ZXI6IHN0cmluZyA9IHRoaXMuREVGQVVMVF9TUExJVF9TRVBBUkFUT1IsXHJcbiAgICApIHtcclxuICAgICAgICBsZXQgdW5pcU9wdGlvbkRhdGEgPSBbXTtcclxuICAgICAgICBpZiAoc2hvd1NwbGl0ZWRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGxldCBzcGxpdHRlZE9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIG9wdGlvbkRhdGEuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzcGxpdHRlZE9wdGlvbnMgPSBbLi4uc3BsaXR0ZWRPcHRpb25zLCAuLi5vcHRpb25baGVhZGVyXS5zcGxpdChzcGxpdERlbGltaXRlcildO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdW5pcU9wdGlvbkRhdGEgPSB1bmlxKHNwbGl0dGVkT3B0aW9ucyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdW5pcU9wdGlvbkRhdGEgPSB1bmlxKG9wdGlvbkRhdGEubWFwKChpdGVtKSA9PiBpdGVtW2hlYWRlcl0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHVuaXFPcHRpb25EYXRhLm1hcCgoaXRlbSwgaW5kZXgpID0+IG5ldyBUb29sdGlwTW9kZWwoaXRlbSwgaW5kZXggKyAxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0VW5zZWxlY3RMaXN0Q2hlY2tib3godG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdLCBoZWFkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBTZWxlY3RlZE1hcFdpdGhPcmlnaW5hbEtleXMgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICB0b29sdGlwU2VsZWN0ZWRNYXBXaXRoT3JpZ2luYWxLZXlzLnNldChrZXkuc3BsaXQodGhpcy5TUExJVEVEX0NIRUNLQk9YX0ZJTFRFUl9LRVkpWzBdLCB2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0b29sdGlwU2VsZWN0ZWRNYXBXaXRoT3JpZ2luYWxLZXlzLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVTZXQgPSBuZXcgU2V0KHRvb2x0aXBTZWxlY3RlZE1hcFdpdGhPcmlnaW5hbEtleXMuZ2V0KGhlYWRlcikpO1xyXG4gICAgICAgICAgICB0b29sdGlwT3B0aW9ucy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlU2V0LmhhcyhpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdG9vbHRpcE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvcm1hdE51bGxPcHRpb25Ub1NwZWNpZmllZFN0cmluZyh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIGZvcm1hdHRlZFN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0b29sdGlwT3B0aW9ucy5maW5kSW5kZXgoKGl0ZW0pID0+IGl0ZW0udmFsdWUgPT0gbnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgdG9vbHRpcE9wdGlvbnNbaW5kZXhdLmxhYmVsID0gZm9ybWF0dGVkU3RyaW5nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDbG9uZWRUb29sdGlwQW5kVG9vbHRpcE9wdGlvbih0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIHNvcnRCeVN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgW3NlbGVjdGVkSXRlbXMsIHVuc2VsZWN0ZWRJdGVtc10gPSB0aGlzLmdldFNlbGVjdGVkQW5kVW5zZWxlY3RlZEl0ZW1zKHRvb2x0aXBPcHRpb25zKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRTZWxlY3RlZEl0ZW1zID0gc29ydEJ5KHNlbGVjdGVkSXRlbXMsIHNvcnRCeVN0cmluZyk7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkVW5zZWxlY3RlZEl0ZW1zID0gc29ydEJ5KHVuc2VsZWN0ZWRJdGVtcywgc29ydEJ5U3RyaW5nKTtcclxuXHJcbiAgICAgICAgY29uc3QgY2xvbmVkVG9vbHRpcE9wdGlvbnMgPSBbLi4uc29ydGVkU2VsZWN0ZWRJdGVtcywgLi4uc29ydGVkVW5zZWxlY3RlZEl0ZW1zXTtcclxuICAgICAgICBjb25zdCB1cGRhdGVkVG9vbHRpcE9wdGlvbnMgPSBjbG9uZURlZXAoY2xvbmVkVG9vbHRpcE9wdGlvbnMpO1xyXG5cclxuICAgICAgICByZXR1cm4gW2Nsb25lZFRvb2x0aXBPcHRpb25zLCB1cGRhdGVkVG9vbHRpcE9wdGlvbnMsIHNlbGVjdGVkSXRlbXMsIHVuc2VsZWN0ZWRJdGVtc107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SGVpZ2h0T2ZDaGVja2JveFRvb2x0aXBGaWx0ZXIoZGF0YUxlbmd0aDogbnVtYmVyLCBtYXJnaW46IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBkYXRhTGVuZ3RoID4gNiA/IDE4MCA6IDIyLjMxICogZGF0YUxlbmd0aCArIG1hcmdpbiAqIGRhdGFMZW5ndGggKyBtYXJnaW47XHJcbiAgICB9XHJcblxyXG4gICAgdW5DaGVja0FsbENoZWNrYm94KHRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSwgY2xvbmVkVG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdKSB7XHJcbiAgICAgICAgdG9vbHRpcE9wdGlvbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjbG9uZWRUb29sdGlwT3B0aW9ucy5maW5kSW5kZXgoKG9wdCkgPT4gb3B0LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgY2xvbmVkVG9vbHRpcE9wdGlvbnNbaW5kZXhdLmlzU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RBbGxDaGVja2JveCh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10sIGNsb25lZFRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSkge1xyXG4gICAgICAgIHRvb2x0aXBPcHRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjbG9uZWRUb29sdGlwT3B0aW9ucy5maW5kSW5kZXgoKG9wdCkgPT4gb3B0LmlkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgY2xvbmVkVG9vbHRpcE9wdGlvbnNbaW5kZXhdLmlzU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFVuc2VsZWN0Q2hlY2tib3goZGF0YTogVG9vbHRpcE1vZGVsLCBjbG9uZWRUb29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10pIHtcclxuICAgICAgICBkYXRhLmlzU2VsZWN0ZWQgPSAhZGF0YS5pc1NlbGVjdGVkO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2xvbmVkVG9vbHRpcE9wdGlvbnMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBkYXRhLmlkKTtcclxuICAgICAgICBjbG9uZWRUb29sdGlwT3B0aW9uc1tpbmRleF0uaXNTZWxlY3RlZCA9IGRhdGEuaXNTZWxlY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTZWxlY3RlZEFuZFVuc2VsZWN0ZWRJdGVtcyh0b29sdGlwT3B0aW9uczogVG9vbHRpcE1vZGVsW10pIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdG9vbHRpcE9wdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmlzU2VsZWN0ZWQpO1xyXG4gICAgICAgIGNvbnN0IHVuc2VsZWN0ZWRJdGVtcyA9IHRvb2x0aXBPcHRpb25zLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaXNTZWxlY3RlZCk7XHJcblxyXG4gICAgICAgIHJldHVybiBbc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEl0ZW1zXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGVja2JveFByZXZpb3VzU2VsZWN0ZWRWYWx1ZShjbG9uZWRUYWJsZURhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHByZXZpb3VzU2VsZWN0ZWRWYWx1ZSA9IFtdO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZFZhbHVlID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbml0aWFsVmFsdWUgPSBzb3J0QnkodW5pcShjbG9uZWRUYWJsZURhdGEubWFwKChpdGVtKSA9PiBpdGVtW3RoaXMuc2VsZWN0ZWRSYWRpb10pKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQodGhpcy5zZWxlY3RlZFJhZGlvLCBpbml0aWFsVmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVmFsdWUgPSBzb3J0QnkodW5pcShjbG9uZWRUYWJsZURhdGEubWFwKChpdGVtKSA9PiBpdGVtW3RoaXMuc2VsZWN0ZWRSYWRpb10pKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldCh0aGlzLnNlbGVjdGVkUmFkaW8sIHByZXZpb3VzU2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHJldmlvdXNTZWxlY3RlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoZWNrYm94Q3VycmVudFNlbGVjdGVkVmFsdWUoc2VhcmNoZWRTdHJpbmc6IHN0cmluZywgdG9vbHRpcE9wdGlvbnM6IFRvb2x0aXBNb2RlbFtdKSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTZWxlY3RlZFZhbHVlID0gW107XHJcblxyXG4gICAgICAgIGlmICh0b29sdGlwT3B0aW9ucykge1xyXG4gICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWRWYWx1ZSA9IHNvcnRCeSh0b29sdGlwT3B0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaXNTZWxlY3RlZCkubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAhc2VhcmNoZWRTdHJpbmcgJiZcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZFZhbHVlLmxlbmd0aCA9PT0gdG9vbHRpcE9wdGlvbnMubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZFZhbHVlID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJsYW5rSW5kZXggPSBjdXJyZW50U2VsZWN0ZWRWYWx1ZS5maW5kSW5kZXgoKGl0ZW06IHN0cmluZykgPT4gaXRlbSA9PSBudWxsKTtcclxuICAgICAgICBpZiAoYmxhbmtJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgY3VycmVudFNlbGVjdGVkVmFsdWUgPSBzb3J0QnkoY3VycmVudFNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWxlY3RlZFZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSWZTb3J0aW5nQ2hhbmdlZCh0ZW1wU29ydE9yZGVyOiBTb3J0VHlwZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW5Tb3J0RmlsdGVyID0gdGhpcy5nZXRDb2x1bW5Tb3J0U3RhdGVGb3JTZWxlY3RlZFJhZGlvKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzU29ydENoYW5nZWQgPSB0ZW1wU29ydE9yZGVyICE9IG51bGwgJiYgdGVtcFNvcnRPcmRlciAhPT0gY3VycmVudENvbHVtblNvcnRGaWx0ZXI7XHJcbiAgICAgICAgcmV0dXJuIGlzU29ydENoYW5nZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyZWRPcHRpb25Bc0JvbGRTdHJpbmcoc3RyOiBzdHJpbmcsIGNsb25lZFRvb2x0aXBPcHRpb25zOiBUb29sdGlwTW9kZWxbXSkge1xyXG4gICAgICAgIGNvbnN0IHRvb2x0aXBPcHRpb25zID0gY2xvbmVEZWVwKFxyXG4gICAgICAgICAgICBjbG9uZWRUb29sdGlwT3B0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0ubGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHN0ci50b0xvd2VyQ2FzZSgpKSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0b29sdGlwT3B0aW9ucy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQubGFiZWwgPSB0aGlzLmJvbGRTdHJpbmcoZWxlbWVudC5sYWJlbCwgc3RyKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRvb2x0aXBPcHRpb25zO1xyXG4gICAgfVxyXG5cclxuICAgIGJvbGRTdHJpbmcoc3RyOiBzdHJpbmcsIGZpbmQ6IHN0cmluZykge1xyXG4gICAgICAgIGxldCB1cGRhdGVkU3RyaW5nID0gc3RyO1xyXG4gICAgICAgIGNvbnN0IGZpbmRTdHJpbmcgPSBmaW5kLnJlcGxhY2UoXCI8XCIsIFwiJmx0O1wiKS5yZXBsYWNlKFwiPlwiLCBcIiZndDtcIik7XHJcbiAgICAgICAgdXBkYXRlZFN0cmluZyA9IHVwZGF0ZWRTdHJpbmcucmVwbGFjZShcIjxcIiwgXCImbHQ7XCIpLnJlcGxhY2UoXCI+XCIsIFwiJmd0O1wiKTtcclxuICAgICAgICBjb25zdCBpbmRleGVzID0gdGhpcy5nZXRJbmRpY2VzT2YoZmluZFN0cmluZywgdXBkYXRlZFN0cmluZywgZmFsc2UpO1xyXG5cclxuICAgICAgICBpbmRleGVzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpdGVtICsgaW5kZXggKiA3OyAvLyBNdWx0aXBseWluZyBieSA3IGFzIHRoZXJlIGFyZSA3Y2hhcjogPGI+PC9iPlxyXG4gICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IHN0YXJ0SW5kZXggKyBmaW5kU3RyaW5nLmxlbmd0aDtcclxuICAgICAgICAgICAgY29uc3Qgc3RyVG9CZVJlcGxhY2VkID0gdXBkYXRlZFN0cmluZy5zdWJzdHJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xyXG4gICAgICAgICAgICB1cGRhdGVkU3RyaW5nID0gdXBkYXRlZFN0cmluZy5yZXBsYWNlKHN0clRvQmVSZXBsYWNlZCwgYDxiPiR7c3RyVG9CZVJlcGxhY2VkfTwvYj5gKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdXBkYXRlZFN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbmRpY2VzT2Yoc2VhcmNoU3RyOiBzdHJpbmcsIHN0cjogc3RyaW5nLCBjYXNlU2Vuc2l0aXZlOiBib29sZWFuKSB7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoU3RyTGVuID0gc2VhcmNoU3RyLmxlbmd0aDtcclxuICAgICAgICBpZiAoc2VhcmNoU3RyTGVuID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0YXJ0SW5kZXggPSAwO1xyXG4gICAgICAgIGxldCBpbmRleDtcclxuICAgICAgICBjb25zdCBpbmRpY2VzID0gW107XHJcbiAgICAgICAgbGV0IHVwZGF0ZWRTdHIgPSBzdHI7XHJcbiAgICAgICAgbGV0IHVwZGF0ZWRTZWFyY2hTdHIgPSBzZWFyY2hTdHI7XHJcbiAgICAgICAgaWYgKCFjYXNlU2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZWRTdHIgPSBzdHIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgdXBkYXRlZFNlYXJjaFN0ciA9IHNlYXJjaFN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5kZXggPSB1cGRhdGVkU3RyLmluZGV4T2YodXBkYXRlZFNlYXJjaFN0ciwgc3RhcnRJbmRleCk7XHJcbiAgICAgICAgd2hpbGUgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgaW5kaWNlcy5wdXNoKGluZGV4KTtcclxuICAgICAgICAgICAgc3RhcnRJbmRleCA9IGluZGV4ICsgc2VhcmNoU3RyTGVuO1xyXG4gICAgICAgICAgICBpbmRleCA9IHVwZGF0ZWRTdHIuaW5kZXhPZih1cGRhdGVkU2VhcmNoU3RyLCBzdGFydEluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGluZGljZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUFsbEJ0bnNXaGVuVGhlcmVBcmVOb0ZpbHRlcmVkUmVzdWx0cygpOiBbbnVtYmVyLCBib29sZWFuLCBib29sZWFuLCBib29sZWFuXSB7XHJcbiAgICAgICAgLy8gW3NlbGVjdGVkQ2hlY2tib3hPcHRpb25zQ291bnQsIGRpc2FibGVDaGVja2JveEFwcGx5LCBkaXNhYmxlQ2xlYXJBbGwsIGRpc2FibGVTZWxlY3RBbGxdO1xyXG4gICAgICAgIHJldHVybiBbMCwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNhbGVuZGFyIGZpbHRlcj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ly9cclxuICAgIGNyZWF0ZVJhbmdlRm9yVGhlRGF0ZUZpbHRlcihvcHRpb25EYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBtaW5NYXhEYXRlO1xyXG4gICAgICAgIC8vIFdoZW4geW91IHdhbnQgdG8gdXNlIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZSBjb21iaW5lZCBhcyBzaW5nbGUgY29sdW1uIHRoZW4gdXNlIFBlcmlvZC5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJwZXJpb2RcIiB8fFxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFkaW8gPT09IFwiYnV5ZXJGbGlnaHREYXRlc1wiIHx8XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRSYWRpbyA9PT0gXCJ0cmFmZmljRmxpZ2h0RGF0ZXNcIlxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBtaW5NYXhEYXRlID0gdGhpcy5jcmVhdGVTdGFydEVuZERhdGVSYW5nZShvcHRpb25EYXRhKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtaW5NYXhEYXRlID0gdGhpcy5yZXR1cm5NaW5BbmRNYXhEYXRlKG9wdGlvbkRhdGEsIHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbWluTWF4RGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTdGFydEVuZERhdGVSYW5nZShvcHRpb25EYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IG1pblN0YXJ0RGF0ZSA9IHRoaXMucmV0dXJuTWluQW5kTWF4RGF0ZShvcHRpb25EYXRhLCBcInN0YXJ0RGF0ZVwiKTtcclxuICAgICAgICBjb25zdCBtYXhFbmREYXRlID0gdGhpcy5yZXR1cm5NaW5BbmRNYXhEYXRlKG9wdGlvbkRhdGEsIFwiZW5kRGF0ZVwiKTtcclxuICAgICAgICByZXR1cm4gW21pblN0YXJ0RGF0ZVswXSwgbWF4RW5kRGF0ZVsxXV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWluQW5kTWF4RGF0ZVJhbmdlRm9yQ2FsZW5kYXIobWluTWF4RGF0ZTogYW55W10sIHBhcnNpbmdGb3JtYXQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyTWluRW5hYmxlZERhdGUgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heERhdGVbMF0sIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICAgIGNvbnN0IGNhbGVuZGFyTWF4RW5hYmxlZERhdGUgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heERhdGVbMV0sIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICAgIHJldHVybiBbY2FsZW5kYXJNaW5FbmFibGVkRGF0ZSwgY2FsZW5kYXJNYXhFbmFibGVkRGF0ZV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2VsZWN0ZWREYXRlRm9yQ2FsZW5kYXIobWluTWF4RGF0ZTogYW55W10sIHBhcnNpbmdGb3JtYXQ6IHN0cmluZywgbWluRGF0ZTogTmdiRGF0ZVR5cGUsIG1heERhdGU6IE5nYkRhdGVUeXBlKSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkTWluRGF0ZTtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRNYXhEYXRlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlT2JqID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWREYXRlT2JqLmZyb21EYXRlLmlzQWZ0ZXIobWluTWF4RGF0ZVswXSkpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTWluRGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUoc2VsZWN0ZWREYXRlT2JqLmZyb21EYXRlLCBwYXJzaW5nRm9ybWF0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTWluRGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4RGF0ZVswXSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZERhdGVPYmoudG9EYXRlLmlzQWZ0ZXIobWluTWF4RGF0ZVsxXSkpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkTWF4RGF0ZSA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4RGF0ZVsxXSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE1heERhdGUgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKHNlbGVjdGVkRGF0ZU9iai50b0RhdGUsIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRNaW5EYXRlID0gY2xvbmVEZWVwKG1pbkRhdGUpO1xyXG4gICAgICAgICAgICBzZWxlY3RlZE1heERhdGUgPSBjbG9uZURlZXAobWF4RGF0ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW3NlbGVjdGVkTWluRGF0ZSwgc2VsZWN0ZWRNYXhEYXRlXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcmV2aW91c1NlbGVjdGVkRGF0ZXNGb3JDYWxlbmRhcihvcHRpb25EYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCBwcmV2aW91c1NlbGVjdGVkRGF0ZTogeyBmcm9tRGF0ZTogYW55OyB0b0RhdGU6IGFueSB9ID0geyBmcm9tRGF0ZTogbnVsbCwgdG9EYXRlOiBudWxsIH07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JEYXRlRmlsdGVyKG9wdGlvbkRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkRGF0ZSA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlTWFwRm9yRGF0ZUZpbHRlcihvcHRpb25EYXRhKTtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZERhdGUgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwcmV2aW91c1NlbGVjdGVkRGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsVmFsdWVNYXBGb3JEYXRlRmlsdGVyKG9wdGlvbkRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgbWluTWF4RGF0ZSA9IHRoaXMuY3JlYXRlUmFuZ2VGb3JUaGVEYXRlRmlsdGVyKG9wdGlvbkRhdGEpO1xyXG5cclxuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB7IGZyb21EYXRlOiBtaW5NYXhEYXRlWzBdLCB0b0RhdGU6IG1pbk1heERhdGVbMV0gfTtcclxuICAgICAgICB0aGlzLmluaXRpYWxWYWx1ZU1hcC5zZXQodGhpcy5zZWxlY3RlZFJhZGlvLCBzZWxlY3RlZERhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRTZWxlY3RlZERhdGVzRm9yQ2FsZW5kYXIoY3VycmVudFNlbGVjdGVkRGF0ZTogYW55LCBtaW5EYXRlOiBOZ2JEYXRlVHlwZSwgbWF4RGF0ZTogTmdiRGF0ZVR5cGUpIHtcclxuICAgICAgICBsZXQgY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkID0gY3VycmVudFNlbGVjdGVkRGF0ZTtcclxuICAgICAgICBjb25zdCBmcm9tRGF0ZSA9IHtcclxuICAgICAgICAgICAgeWVhcjogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLmZyb21EYXRlLnllYXIsXHJcbiAgICAgICAgICAgIG1vbnRoOiBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQuZnJvbURhdGUubW9udGgsXHJcbiAgICAgICAgICAgIGRheTogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLmZyb21EYXRlLmRheSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHRvRGF0ZSA9IHtcclxuICAgICAgICAgICAgeWVhcjogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLnRvRGF0ZS55ZWFyLFxyXG4gICAgICAgICAgICBtb250aDogY3VycmVudFNlbGVjdGVkRGF0ZVRvQmVVcGRhdGVkLnRvRGF0ZS5tb250aCxcclxuICAgICAgICAgICAgZGF5OiBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQudG9EYXRlLmRheSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoaXNFcXVhbChtaW5EYXRlLCBmcm9tRGF0ZSkgJiYgaXNFcXVhbChtYXhEYXRlLCB0b0RhdGUpICYmIHRoaXMuaW5pdGlhbFZhbHVlTWFwLmhhcyh0aGlzLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZCA9IHRoaXMuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZC5mcm9tRGF0ZSA9IGRheWpzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudChjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQuZnJvbURhdGUpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjdXJyZW50U2VsZWN0ZWREYXRlVG9CZVVwZGF0ZWQudG9EYXRlID0gZGF5anMoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZC50b0RhdGUpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWxlY3RlZERhdGVUb0JlVXBkYXRlZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1TTElERVI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vXHJcblxyXG4gICAgZ2V0U2xpZGVyVHJhbnNsYXRlRnVuY1ZhbChoZWFkZXI6IHN0cmluZywgY3VycmVuY3lTZXQ6IFNldDxzdHJpbmc+KSB7XHJcbiAgICAgICAgbGV0IHRyYW5zbGF0ZUZ1bmM7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW5jeVNldC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICAgICAgICB0cmFuc2xhdGVGdW5jID0gXCJjdXJyZW5jeVwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaGVhZGVyID09PSBcInBvc3RlZEF1ZFBlcmNlbnRcIiB8fCBoZWFkZXIgPT09IFwicGFyZW50Um93U2hhcmVzXCIgfHwgaGVhZGVyID09PSBcInBhcmVudFJvd1B1dFBlcmNlbnRcIikge1xyXG4gICAgICAgICAgICB0cmFuc2xhdGVGdW5jID0gXCJwZXJjZW50XCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdHJhbnNsYXRlRnVuYyA9IFwibm9ybWFsXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJhbnNsYXRlRnVuYztcclxuICAgIH1cclxuXHJcbiAgICBnZXRTbGlkZXJPcHRpb25zKG9wdGlvbnNEYXRhOiBhbnlbXSwgdHJhbnNsYXRlRnVuYzogc3RyaW5nLCBoZWFkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5yZXR1cm5NYXhBbmRNaW5WYWx1ZShvcHRpb25zRGF0YSwgaGVhZGVyLCB0cnVlKTtcclxuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IHRoaXMucmV0dXJuTWF4QW5kTWluVmFsdWUob3B0aW9uc0RhdGEsIGhlYWRlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICBjb25zdCBvYmogPSB0aGlzLnNldE9wdGlvblZhbHVlcyhtaW5WYWx1ZSwgbWF4VmFsdWUpO1xyXG5cclxuICAgICAgICBpZiAodHJhbnNsYXRlRnVuYyA9PT0gXCJub3JtYWxcIikge1xyXG4gICAgICAgICAgICBvYmoudHJhbnNsYXRlID0gdGhpcy5ub3JtYWxUcmFuc2xhdGVGdW5jdGlvbjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZUZ1bmMgPT09IFwicGVyY2VudFwiKSB7XHJcbiAgICAgICAgICAgIG9iai50cmFuc2xhdGUgPSB0aGlzLnBlcmNlbnRUcmFuc2xhdGVGdW5jdGlvbjtcclxuICAgICAgICB9IGVsc2UgaWYgKHRyYW5zbGF0ZUZ1bmMgPT09IFwiY3VycmVuY3lcIikge1xyXG4gICAgICAgICAgICBvYmoudHJhbnNsYXRlID0gdGhpcy5jdXJyZW5jeVRyYW5zbGF0ZUZ1bmN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWxlY3RlZFJhbmdlRm9yU2xpZGVyKGhlYWRlcjogc3RyaW5nLCBvcHRpb25zOiBPcHRpb25zKSB7XHJcbiAgICAgICAgbGV0IHNsaWRlck1pblZhbHVlO1xyXG4gICAgICAgIGxldCBzbGlkZXJNYXhWYWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkT2JqID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGhlYWRlcik7XHJcbiAgICAgICAgICAgIHNsaWRlck1pblZhbHVlID0gc2VsZWN0ZWRPYmoubWluIDwgb3B0aW9ucy5mbG9vciA/IG9wdGlvbnMuZmxvb3IgOiBzZWxlY3RlZE9iai5taW47XHJcbiAgICAgICAgICAgIHNsaWRlck1heFZhbHVlID0gc2VsZWN0ZWRPYmoubWF4IDwgb3B0aW9ucy5jZWlsID8gc2VsZWN0ZWRPYmoubWF4IDogb3B0aW9ucy5jZWlsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNsaWRlck1pblZhbHVlID0gb3B0aW9ucy5mbG9vcjtcclxuICAgICAgICAgICAgc2xpZGVyTWF4VmFsdWUgPSBvcHRpb25zLmNlaWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW3NsaWRlck1pblZhbHVlLCBzbGlkZXJNYXhWYWx1ZV07XHJcbiAgICB9XHJcblxyXG4gICAgaXNWYWx1ZUluUmFuZ2Uob3B0aW9uczogT3B0aW9ucywgdmFsOiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gb3B0aW9ucy5mbG9vciA8PSB2YWwgJiYgdmFsIDw9IG9wdGlvbnMuY2VpbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcmV2aW91c1NlbGVjdGVkVmFsdWVGb3JTbGlkZXIoY2xvbmVkRGF0YTogYW55W10pIHtcclxuICAgICAgICBsZXQgcHJldmlvdXNTbGlkZXJEYXRhOiB7IG1pbjogYW55OyBtYXg6IGFueSB9ID0geyBtaW46IFwiXCIsIG1heDogXCJcIiB9O1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTbGlkZXJEYXRhID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlTWFwRm9yU2xpZGVyRmlsdGVyKGNsb25lZERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxWYWx1ZU1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NsaWRlckRhdGEgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZU1hcEZvclNsaWRlckZpbHRlcihjbG9uZWREYXRhKTtcclxuICAgICAgICAgICAgcHJldmlvdXNTbGlkZXJEYXRhID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcHJldmlvdXNTbGlkZXJEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEluaXRpYWxWYWx1ZU1hcEZvclNsaWRlckZpbHRlcihjbG9uZWREYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gdGhpcy5yZXR1cm5NYXhBbmRNaW5WYWx1ZShjbG9uZWREYXRhLCB0aGlzLnNlbGVjdGVkUmFkaW8sIHRydWUpO1xyXG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gdGhpcy5yZXR1cm5NYXhBbmRNaW5WYWx1ZShjbG9uZWREYXRhLCB0aGlzLnNlbGVjdGVkUmFkaW8sIGZhbHNlKTtcclxuICAgICAgICBjb25zdCBzbGlkZXJEYXRhID0geyBtaW46IG1pblZhbHVlLCBtYXg6IG1heFZhbHVlIH07XHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuc2V0KHRoaXMuc2VsZWN0ZWRSYWRpbywgc2xpZGVyRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFNlbGVjdGVkVmFsdWVGb3JTbGlkZXIobWluRW50ZXJlZFZhbDogbnVtYmVyLCBtYXhFbnRlcmVkVmFsOiBudW1iZXIsIG9wdGlvbnM6IE9wdGlvbnMpIHtcclxuICAgICAgICBsZXQgY3VycmVudFNsaWRlckRhdGE6IHsgbWluOiBhbnk7IG1heDogYW55IH0gPSB7IG1pbjogbnVsbCwgbWF4OiBudWxsIH07XHJcbiAgICAgICAgaWYgKG1heEVudGVyZWRWYWwgfHwgbWF4RW50ZXJlZFZhbCA9PT0gMCkge1xyXG4gICAgICAgICAgICBjdXJyZW50U2xpZGVyRGF0YS5tYXggPSBtYXhFbnRlcmVkVmFsO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRTbGlkZXJEYXRhLm1heCA9IG9wdGlvbnMuY2VpbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtaW5FbnRlcmVkVmFsIHx8IG1pbkVudGVyZWRWYWwgPT09IDApIHtcclxuICAgICAgICAgICAgY3VycmVudFNsaWRlckRhdGEubWluID0gbWluRW50ZXJlZFZhbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50U2xpZGVyRGF0YS5taW4gPSBvcHRpb25zLmZsb29yO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjdXJyZW50U2xpZGVyRGF0YS5taW4gPT09IG9wdGlvbnMuZmxvb3IgJiZcclxuICAgICAgICAgICAgY3VycmVudFNsaWRlckRhdGEubWF4ID09PSBvcHRpb25zLmNlaWwgJiZcclxuICAgICAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY3VycmVudFNsaWRlckRhdGEgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50U2xpZGVyRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09VElNRT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS8vXHJcbiAgICBnZXRTZWxlY3RlZFRpbWVSYW5nZShoZWFkZXI6IHN0cmluZywgY2xvbmVkRGF0YTogYW55W10pIHtcclxuICAgICAgICBsZXQgc2VsZWN0ZWRGcm9tVGltZTogYW55W107XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkVG9UaW1lOiBhbnlbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRnJvbVRpbWUgPSB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQoaGVhZGVyKS5mcm9tVGltZTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUb1RpbWUgPSB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQoaGVhZGVyKS50b1RpbWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVNYXBGb3JUaW1lRmlsdGVyKGNsb25lZERhdGEsIGhlYWRlcik7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkRnJvbVRpbWUgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQoaGVhZGVyKS5mcm9tVGltZTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUb1RpbWUgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQoaGVhZGVyKS50b1RpbWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZWN0ZWRGcm9tVGltZSAhPT0gdW5kZWZpbmVkIHx8IHNlbGVjdGVkVG9UaW1lICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGcm9tVGltZSA9IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0VG9Ud2VsdmVIcnMoc2VsZWN0ZWRGcm9tVGltZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNlbGVjdGVkVG9UaW1lID0gQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5mb3JtYXRUb1R3ZWx2ZUhycyhzZWxlY3RlZFRvVGltZSwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRGcm9tVGltZSA9IFtcIi1cIiwgXCItXCIsIFwiLVwiXTtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUb1RpbWUgPSBbXCItXCIsIFwiLVwiLCBcIi1cIl07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gW3NlbGVjdGVkRnJvbVRpbWUsIHNlbGVjdGVkVG9UaW1lXTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJbml0aWFsVmFsdWVNYXBGb3JUaW1lRmlsdGVyKGNsb25lZERhdGE6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChrZXkgPT09IFwic3RhcnRFbmRUaW1lXCIgfHwga2V5ID09PSBcIlRpbWVCYW5kXCIpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFsVmFsdWVGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShjbG9uZWREYXRhLCBrZXkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFZhbHVlRm9yU3RhcnRPckVuZFRpbWVSYW5nZShjbG9uZWREYXRhLCBrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB1c2UgZm9yIGZpbHRlciB3aGVyZSB3ZSBoYXZlIHN0YXJ0IGFuZCBlbmQgdGltZSByYW5nZSBpbiBvbmUgZmlsdGVyXHJcbiAgICAvLyBzdGFydEVuZFRpbWU6IFtcIjYgLSA3QVwiLCBcIjA2OiAwMCA6IDAwXCIgLCBcIjA3OjAwOjAwXCJdXHJcbiAgICBzZXRJbml0aWFsVmFsdWVGb3JTdGFydEFuZEVuZFRpbWVSYW5nZShjbG9uZWREYXRhOiBhbnlbXSwga2V5OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBpbmNsdWRlTXVsdGkgPSBjbG9uZWREYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XVswXSA9PT0gXCI8bXVsdGk+XCIpICE9PSAtMTtcclxuICAgICAgICBjb25zdCBpbmNsdWRlWmVybyA9IGNsb25lZERhdGEuZmluZEluZGV4KChvYmopID0+IG9ialtrZXldWzBdID09PSBcIjBcIikgIT09IC0xO1xyXG4gICAgICAgIGNvbnN0IGluY2x1ZGVUaW1lUmFuZ2UgPSBjbG9uZWREYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XVswXSAhPT0gXCIwXCIgJiYgb2JqW2tleV1bMF0gIT09IFwiPG11bHRpPlwiKSAhPT0gLTE7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkU3RhcnRUaW1lID0gY2xvbmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gIVtcIlwiLCBcIi1cIiwgbnVsbCwgXCIwXCIsIFwiPG11bHRpPlwiXS5pbmNsdWRlcyhvYmouc3RhcnRUaW1lKSk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRFbmRUaW1lID0gY2xvbmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gIVtcIlwiLCBcIi1cIiwgbnVsbCwgXCIwXCIsIFwiPG11bHRpPlwiXS5pbmNsdWRlcyhvYmouZW5kVGltZSkpO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydFRpbWVBcnIgPSBtYXAoZmlsdGVyZWRTdGFydFRpbWUsIFwic3RhcnRUaW1lXCIpO1xyXG4gICAgICAgIGNvbnN0IGVuZFRpbWVBcnIgPSBtYXAoZmlsdGVyZWRFbmRUaW1lLCBcImVuZFRpbWVcIik7XHJcblxyXG4gICAgICAgIHN0YXJ0VGltZUFyci5zb3J0KChhLCBiKSA9PiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpKTtcclxuXHJcbiAgICAgICAgZW5kVGltZUFyci5zb3J0KChhLCBiKSA9PiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lRGVzY2VuZGluZyhhLCBiKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgICAgZnJvbVRpbWU6IHN0YXJ0VGltZUFyclswXSxcclxuICAgICAgICAgICAgdG9UaW1lOiBlbmRUaW1lQXJyWzBdLFxyXG4gICAgICAgICAgICBpbmNsdWRlTXVsdGksXHJcbiAgICAgICAgICAgIGluY2x1ZGVaZXJvLFxyXG4gICAgICAgICAgICBpbmNsdWRlVGltZVJhbmdlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIG9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdXNlIGZvciB0aGUgZmlsdGVycyB3aGVyZSB3ZSBoYXZlIGRpZmZlcmVudCBmaWx0ZXIgZm9yIHN0YXJ0IGFuZCBlbmQgdGltZVxyXG4gICAgLy8gc3RhcnRUaW1lOiBcIjA2OjAwOjAwXCJcclxuICAgIHNldEluaXRpYWxWYWx1ZUZvclN0YXJ0T3JFbmRUaW1lUmFuZ2UoY2xvbmVkRGF0YTogYW55W10sIGtleTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaW5jbHVkZU11bHRpID0gY2xvbmVkRGF0YS5maW5kSW5kZXgoKG9iaikgPT4gb2JqW2tleV0gPT09IFwiPG11bHRpPlwiKSAhPT0gLTE7XHJcbiAgICAgICAgY29uc3QgaW5jbHVkZVplcm8gPSBjbG9uZWREYXRhLmZpbmRJbmRleCgob2JqKSA9PiBvYmpba2V5XSA9PT0gXCIwXCIpICE9PSAtMTtcclxuICAgICAgICBjb25zdCBpbmNsdWRlVGltZVJhbmdlID0gY2xvbmVkRGF0YS5maW5kSW5kZXgoKG9iaikgPT4gb2JqW2tleV0gIT09IFwiMFwiICYmIG9ialtrZXldICE9PSBcIjxtdWx0aT5cIikgIT09IC0xO1xyXG5cclxuICAgICAgICBjb25zdCBkYXRhID0gY2xvbmVkRGF0YS5maWx0ZXIoKG9iaikgPT4gIVtcIlwiLCBcIi1cIiwgbnVsbCwgXCIwXCIsIFwiPG11bHRpPlwiXS5pbmNsdWRlcyhvYmpba2V5XSkpO1xyXG5cclxuICAgICAgICBjb25zdCB0aW1lQXJyID0gbWFwKGRhdGEsIGtleSk7XHJcbiAgICAgICAgdGltZUFyci5zb3J0KChhLCBiKSA9PiB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpKTtcclxuXHJcbiAgICAgICAgY29uc3Qgb2JqID0ge1xyXG4gICAgICAgICAgICBmcm9tVGltZTogdGltZUFyclswXSxcclxuICAgICAgICAgICAgdG9UaW1lOiB0aW1lQXJyW3RpbWVBcnIubGVuZ3RoIC0gMV0sXHJcbiAgICAgICAgICAgIGluY2x1ZGVNdWx0aSxcclxuICAgICAgICAgICAgaW5jbHVkZVplcm8sXHJcbiAgICAgICAgICAgIGluY2x1ZGVUaW1lUmFuZ2UsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0aWFsVmFsdWVNYXAuc2V0KGtleSwgb2JqKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RVbnNlbGVjdFRpbWVGaWx0ZXJDaGVja2JveChrZXk6IHN0cmluZywgb3B0aW9uc0RhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHNob3dNdWx0aVRpbWVDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBzaG93WmVyb1RpbWVDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBzaG93RW50ZXJUaW1lQ2hlY2tib3ggPSBmYWxzZTtcclxuICAgICAgICBsZXQgbXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHplcm9UaW1lQ2hlY2tib3hDaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGVudGVyVGltZUNoZWNrYm94Q2hlY2tlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgc2VsZWN0ZWRUaW1lT2JqO1xyXG5cclxuICAgICAgICBpZiAodGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUaW1lT2JqID0gdGhpcy50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGtleSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc2VsZWN0ZWRUaW1lT2JqID0gdGhpcy5pbml0aWFsVmFsdWVNYXAuZ2V0KGtleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGltZUFycjogc3RyaW5nW107XHJcbiAgICAgICAgaWYgKGtleSA9PT0gXCJzdGFydEVuZFRpbWVcIiB8fCBrZXkgPT09IFwiVGltZUJhbmRcIikge1xyXG4gICAgICAgICAgICB0aW1lQXJyID0gb3B0aW9uc0RhdGEubWFwKChpdGVtKSA9PiBpdGVtW2tleV1bMF0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRpbWVBcnIgPSBvcHRpb25zRGF0YS5tYXAoKGl0ZW0pID0+IGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZUFyci5maW5kSW5kZXgoKHZhbCkgPT4gdmFsID09PSBcIjBcIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHNob3daZXJvVGltZUNoZWNrYm94ID0gdHJ1ZTtcclxuICAgICAgICAgICAgemVyb1RpbWVDaGVja2JveENoZWNrZWQgPSBzZWxlY3RlZFRpbWVPYmouaW5jbHVkZVplcm87XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZUFyci5maW5kSW5kZXgoKHZhbCkgPT4gdmFsID09PSBcIjxtdWx0aT5cIikgIT09IC0xKSB7XHJcbiAgICAgICAgICAgIHNob3dNdWx0aVRpbWVDaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgICAgIG11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9IHNlbGVjdGVkVGltZU9iai5pbmNsdWRlTXVsdGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2hvd1plcm9UaW1lQ2hlY2tib3ggfHwgc2hvd011bHRpVGltZUNoZWNrYm94KSB7XHJcbiAgICAgICAgICAgIHNob3dFbnRlclRpbWVDaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGltZUFyci5maW5kSW5kZXgoKHZhbCkgPT4gdmFsICE9PSBcIjxtdWx0aT5cIiAmJiB2YWwgIT09IFwiMFwiKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkID0gc2VsZWN0ZWRUaW1lT2JqPy5pbmNsdWRlVGltZVJhbmdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgc2hvd011bHRpVGltZUNoZWNrYm94LFxyXG4gICAgICAgICAgICBzaG93WmVyb1RpbWVDaGVja2JveCxcclxuICAgICAgICAgICAgc2hvd0VudGVyVGltZUNoZWNrYm94LFxyXG4gICAgICAgICAgICBtdWx0aVRpbWVDaGVja2JveENoZWNrZWQsXHJcbiAgICAgICAgICAgIHplcm9UaW1lQ2hlY2tib3hDaGVja2VkLFxyXG4gICAgICAgICAgICBlbnRlclRpbWVDaGVja2JveENoZWNrZWQsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmU3RhcnRUaW1lSXNBZnRlckVuZFRpbWUoc3RhcnRUaW1lOiBzdHJpbmdbXSwgZW5kVGltZTogc3RyaW5nW10pIHtcclxuICAgICAgICBjb25zdCB0aW1lRm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydFRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgICAgICAgYCR7c3RhcnRUaW1lWzBdfToke3N0YXJ0VGltZVsxXX0gJHtzdGFydFRpbWVbMl19YCxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHN0YXJ0VGltZTI0SHJGb3JtYXQgPSBgJHtzdGFydFRpbWUyNEhyRm9ybWF0QXJyWzBdfToke3N0YXJ0VGltZTI0SHJGb3JtYXRBcnJbMV19OjAwYDtcclxuICAgICAgICBjb25zdCBlbmRUaW1lMjRIckZvcm1hdEFyciA9IHRoaXMuZGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgICAgICAgIGAke2VuZFRpbWVbMF19OiR7ZW5kVGltZVsxXX0gJHtlbmRUaW1lWzJdfWAsXHJcbiAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBlbmRUaW1lMjRIckZvcm1hdCA9IGAke2VuZFRpbWUyNEhyRm9ybWF0QXJyWzBdfToke2VuZFRpbWUyNEhyRm9ybWF0QXJyWzFdfTowMGA7XHJcbiAgICAgICAgcmV0dXJuIGRheWpzKHN0YXJ0VGltZTI0SHJGb3JtYXQsIHRpbWVGb3JtYXQpLmlzQWZ0ZXIoZGF5anMoZW5kVGltZTI0SHJGb3JtYXQsIHRpbWVGb3JtYXQpKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlcigpIHtcclxuICAgICAgICBsZXQgcHJldmlvdXNTZWxlY3RlZFRpbWVGaWx0ZXI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgICAgICBwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlciA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pbml0aWFsVmFsdWVNYXAuaGFzKHRoaXMuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgICAgICAgcHJldmlvdXNTZWxlY3RlZFRpbWVGaWx0ZXIgPSB0aGlzLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5zZWxlY3RlZFJhZGlvKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwcmV2aW91c1NlbGVjdGVkVGltZUZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50U2VsZWN0ZWRUaW1lRmlsdGVyKFxyXG4gICAgICAgIHN0YXJ0VGltZTogc3RyaW5nW10sXHJcbiAgICAgICAgZW5kVGltZTogc3RyaW5nW10sXHJcbiAgICAgICAgaW5jbHVkZU11bHRpOiBib29sZWFuLFxyXG4gICAgICAgIGluY2x1ZGVaZXJvOiBib29sZWFuLFxyXG4gICAgICAgIGluY2x1ZGVUaW1lUmFuZ2U6IGJvb2xlYW4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBmcm9tVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmRhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG90d2VudHlGb3VySHJzRm9ybWF0KFxyXG4gICAgICAgICAgICBgJHtzdGFydFRpbWVbMF19OiR7c3RhcnRUaW1lWzFdfSAke3N0YXJ0VGltZVsyXX1gLFxyXG4gICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZnJvbVRpbWUyNEhyRm9ybWF0ID0gYCR7ZnJvbVRpbWUyNEhyRm9ybWF0QXJyWzBdfToke2Zyb21UaW1lMjRIckZvcm1hdEFyclsxXX06MDBgO1xyXG5cclxuICAgICAgICBjb25zdCB0b1RpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5kYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgICAgICAgYCR7ZW5kVGltZVswXX06JHtlbmRUaW1lWzFdfSAke2VuZFRpbWVbMl19YCxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHRvVGltZTI0SHJGb3JtYXQgPSBgJHt0b1RpbWUyNEhyRm9ybWF0QXJyWzBdfToke3RvVGltZTI0SHJGb3JtYXRBcnJbMV19OjAwYDtcclxuXHJcbiAgICAgICAgY29uc3QgY3VycmVudFNlbGVjdGVkVGltZUZpbHRlciA9IHtcclxuICAgICAgICAgICAgZnJvbVRpbWU6IGZyb21UaW1lMjRIckZvcm1hdCxcclxuICAgICAgICAgICAgdG9UaW1lOiB0b1RpbWUyNEhyRm9ybWF0LFxyXG4gICAgICAgICAgICBpbmNsdWRlTXVsdGksXHJcbiAgICAgICAgICAgIGluY2x1ZGVaZXJvLFxyXG4gICAgICAgICAgICBpbmNsdWRlVGltZVJhbmdlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBjdXJyZW50U2VsZWN0ZWRUaW1lRmlsdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGluY3JlbWVudEhvdXJJbnB1dChhcnI6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKGFyclswXSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICBhcnJbMF0gPSAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoYXJyWzBdLCAxMCkgPCAxMikge1xyXG4gICAgICAgICAgICBhcnJbMF0gPSBwYXJzZUludChhcnJbMF0sIDEwKSArIDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYXJyWzBdID0gMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZGVjcmVtZW50SG91cklucHV0KGFycjogYW55W10pIHtcclxuICAgICAgICBpZiAoYXJyWzBdID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGFyclswXSA9IDEyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoYXJyWzBdLCAxMCkgPiAxKSB7XHJcbiAgICAgICAgICAgIGFyclswXSA9IHBhcnNlSW50KGFyclswXSwgMTApIC0gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhcnJbMF0gPSAxMjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5jcmVtZW50TWludXRlSW5wdXQoYXJyOiBhbnlbXSkge1xyXG4gICAgICAgIC8vIGluY3JlbWVudCB0byBuZWFyZXN0IHByb3BlciBpbnRlcnZhbCgxNSwzMCw0NSlcclxuICAgICAgICBjb25zdCBtaW51dGUgPSBwYXJzZUludChhcnJbMV0sIDEwKTtcclxuICAgICAgICBpZiAobWludXRlIDw9IDE0KSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiMTVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAxNSAmJiBtaW51dGUgPD0gMjkpIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCIzMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID49IDMwICYmIG1pbnV0ZSA8PSA0NCkge1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBcIjQ1XCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPj0gNDUpIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCIwMFwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWNyZW1lbnRNaW51dGVJbnB1dChhcnI6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IG1pbnV0ZSA9IHBhcnNlSW50KGFyclsxXSwgMTApO1xyXG4gICAgICAgIGlmIChtaW51dGUgPiAwICYmIG1pbnV0ZSA8PSAxNSkge1xyXG4gICAgICAgICAgICBhcnJbMV0gPSBcIjAwXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGUgPj0gMTYgJiYgbWludXRlIDw9IDMwKSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiMTVcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZSA+PSAzMSAmJiBtaW51dGUgPD0gNDUpIHtcclxuICAgICAgICAgICAgYXJyWzFdID0gXCIzMFwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlID4gNDUgfHwgbWludXRlID09PSAwKSB7XHJcbiAgICAgICAgICAgIGFyclsxXSA9IFwiNDVcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5jcmVtZW50T3JEZWNyZW1lbnRIb3VyKGluY3JlbWVudDogYm9vbGVhbiwgdGltZTogc3RyaW5nW10pIHtcclxuICAgICAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5jcmVtZW50SG91cklucHV0KHRpbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50SG91cklucHV0KHRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbmNyZW1lbnRPckRlY3JlbWVudE1pbihpbmNyZW1lbnQ6IGJvb2xlYW4sIHRpbWU6IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmluY3JlbWVudE1pbnV0ZUlucHV0KHRpbWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVjcmVtZW50TWludXRlSW5wdXQodGltZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlzSG91clZhbHVlSW52YWxpZChocjogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIGhyLmxlbmd0aCA9PT0gMCB8fCAhK2hyIHx8IHBhcnNlSW50KGhyLCAxMCkgPCAxIHx8IHBhcnNlSW50KGhyLCAxMCkgPiAxMiB8fCBoci5pbmNsdWRlcyhcIi5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaXNNaW51dGVWYWx1ZUludmFsaWQobWludXRlOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBtaW51dGUubGVuZ3RoICE9PSAyIHx8XHJcbiAgICAgICAgICAgICghK21pbnV0ZSAmJiBtaW51dGUgIT09IFwiMDBcIikgfHxcclxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlLCAxMCkgPCAwIHx8XHJcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZSwgMTApID4gNTkgfHxcclxuICAgICAgICAgICAgbWludXRlLmluY2x1ZGVzKFwiLlwiKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVNPUlQ9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0vL1xyXG4gICAgdXBkYXRlU29ydE1hcCh0ZW1wU29ydE9yZGVyOiBTb3J0VHlwZSwgdGFibGVEYXRhOiBhbnlbXSwgaXNMdXJBbmRDc3JDb21wb25lbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlLnNldCh0aGlzLnNlbGVjdGVkUmFkaW8sIHRlbXBTb3J0T3JkZXIpO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZFRhYmxlRGF0YSA9IHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmFwcGx5U29ydGluZyhcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhZGlvLFxyXG4gICAgICAgICAgICB0ZW1wU29ydE9yZGVyLFxyXG4gICAgICAgICAgICB0YWJsZURhdGEsXHJcbiAgICAgICAgICAgIGlzTHVyQW5kQ3NyQ29tcG9uZW50LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIHNvcnRlZFRhYmxlRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGaWx0ZXIgaWNvbiBhbGlnbm1lbnQgdG8gYmlnZ2VyIGVsZW1lbnQgaW4gdXBwYXIgYW5kIGxvd2VyIGhlYWRlclxyXG4gICAgc2V0TWFyZ2luTGVmdEZvckZpbHRlckljb24odGhFbGVtZW50czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+KSB7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudEFyciA9IHRoRWxlbWVudHMudG9BcnJheSgpO1xyXG4gICAgICAgIGVsZW1lbnRBcnIuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZERpdkVsZW1lbnRzID0gaXRlbS5uYXRpdmVFbGVtZW50LmNoaWxkcmVuO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHMubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoOiBudW1iZXIgPSBjaGlsZERpdkVsZW1lbnRzWzBdPy5jaGlsZHJlblswXT8ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkRGl2RWxlbWVudHNbMF0/LmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgIDogMDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoOiBudW1iZXIgPSBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgID8gY2hpbGREaXZFbGVtZW50c1sxXS5jaGlsZHJlblswXT8ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgICAgICAgICA6IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGggPiBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoIC0gc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGAkezR9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGAke2RpZmYgKyA0fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBzZWNvbmRQYXJhZ3JhcGhPZmZzZXRXaWR0aCAtIGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW4ubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGAke2RpZmYgKyA0fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSBgJHs0fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lmVW5pcXVlVmFsdWVQcmVzZW50Rm9yVGhlSGVhZGVyKFxyXG4gICAgICAgIGhlYWRlcjogSUhlYWRlckluZm8sXHJcbiAgICAgICAgZW5hYmxlZEhlYWRlcnM6IGFueVtdLFxyXG4gICAgICAgIHRhYmxlRGF0YTogYW55W10sXHJcbiAgICAgICAgY2xvbmVkVGFibGVEYXRhOiBhbnlbXSxcclxuICAgICkge1xyXG4gICAgICAgIGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5cy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YVRvQ2hlY2sgPSB0aGlzLmdldEZpbHRlck9wdGlvbnNEYXRhKHRhYmxlRGF0YSwgY2xvbmVkVGFibGVEYXRhLCBpdGVtKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IFwicGVyaW9kXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXFTdGFydERhdGUgPSB1bmlxKGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHUuc3RhcnREYXRlKSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1bmlxRW5kRGF0ZSA9IHVuaXEoZGF0YVRvQ2hlY2subWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdS5lbmREYXRlKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcVN0YXJ0RGF0ZS5sZW5ndGggPiAxIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdW5pcUVuZERhdGUubGVuZ3RoID4gMSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNUb29sdGlwQWN0aXZlKFtpdGVtXSwgdGhpcy5hbm5hU29ydFNlcnZpY2UuY29sdW1uU29ydFN0YXRlKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVbaXRlbV0pO1xyXG4gICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBhcHBsaWVkIGZpbHRlciBpcyB0aGlzIGhlYWRlciwgcHVzaCBpdCBhbG9zIGFzIGVuYWJsZWRIZWFkZXJcclxuICAgICAgICAgICAgICAgIGxldCBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBsaWVkRmlsdGVyc0FycmF5W3RoaXMuYXBwbGllZEZpbHRlcnNBcnJheS5sZW5ndGggLSAxXSA9PT0gaXRlbVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyLmZpbHRlciA9PT0gXCJDSEVDS0JPWFwiICYmICh1bmlxKHZhbHVlcykubGVuZ3RoID4gMSB8fCBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci5maWx0ZXIgIT09IFwiQ0hFQ0tCT1hcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICh1bmlxKHZhbHVlcykuZmlsdGVyKChuKSA9PiBuICE9IG51bGwgJiYgbiAhPT0gXCItXCIpLmxlbmd0aCA+IDEgfHwgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlcilcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKHRhYmxlSGVhZGVyczogSUd0VGFibGVIZWFkZXJbXSwgdGFibGVEYXRhOiBhbnlbXSwgY2xvbmVkVGFibGVEYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIHRhYmxlSGVhZGVycy5mb3JFYWNoKChoZWFkZXIpID0+IHtcclxuICAgICAgICAgICAgaGVhZGVyLmhlYWRlckluZm8uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2hvd1Rvb2x0aXBJY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5maWx0ZXJTb3J0T2JqZWN0S2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGF0ZXN0RmlsdGVycyA9IHRoaXMuYXBwbGllZEZpbHRlcnNBcnJheTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdEZpbHRlcnMubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdEZpbHRlcnNbbGF0ZXN0RmlsdGVycy5sZW5ndGggLSAxXSA9PT0ga2V5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBcInBlcmlvZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pcVN0YXJ0RGF0ZSA9IHVuaXEodGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHUuc3RhcnREYXRlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pcUVuZERhdGUgPSB1bmlxKHRhYmxlRGF0YS5tYXAoKHU6IHsgW3g6IHN0cmluZ106IGFueSB9KSA9PiB1LmVuZERhdGUpKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSAhKHVuaXFTdGFydERhdGUubGVuZ3RoID4gMSB8fCB1bmlxRW5kRGF0ZS5sZW5ndGggPiAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gdGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbS5maWx0ZXIgPT09IFwiQ0hFQ0tCT1hcIiAmJiB1bmlxKHZhbHVlcykubGVuZ3RoID4gMSkgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGl0ZW0uZmlsdGVyICE9PSBcIkNIRUNLQk9YXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXEodmFsdWVzKS5maWx0ZXIoKG4pID0+IG4gIT0gbnVsbCAmJiBuICE9PSBcIi1cIikubGVuZ3RoID4gMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5kaXNhYmxlVG9vbHRpcEljb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZm9yIGRhdGUgdHlwZSBvZiBmaWx0ZXJzIHdlIG5lZWQgdG8gdXBkYXRlIHRvb2x0aXAgc2VsZWN0ZWQgbWFwIHN0YXJ0IGFuZCBlbmQgZGF0ZSB2YWx1ZXMgdG8gZGF5anMgb2JqZWN0LlxyXG4gICAgdXBkYXRlRGF0ZUZpbHRlclRvb2x0aXBTZWxlY3RlZE1hcChrZXlzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcD8uaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVSYW5nZSA9IHRoaXMudG9vbHRpcFNlbGVjdGVkTWFwLmdldChrZXkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRlUmFuZ2U/LmZyb21EYXRlICYmIGRhdGVSYW5nZT8udG9EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlT2JqOiB7IGZyb21EYXRlOiBEYXlqczsgdG9EYXRlOiBEYXlqcyB9ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tRGF0ZTogZGF5anMoZGF0ZVJhbmdlLmZyb21EYXRlKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlOiBkYXlqcyhkYXRlUmFuZ2UudG9EYXRlKSxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXBTZWxlY3RlZE1hcC5zZXQoa2V5LCBzZWxlY3RlZERhdGVPYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19