tango-app-ui-store-builder 1.0.40 → 1.0.43

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.
@@ -2111,7 +2111,6 @@ export class ManageStorePlanoComponent {
2111
2111
  drawEntrance(canvas, x, y, width, height, arrowWidth, elementData) {
2112
2112
  const bodyWidth = width - arrowWidth;
2113
2113
  const angle = this.floorData?.cadLayout ? 0 : elementData.angle;
2114
- console.log("@@ ~ angle:", angle);
2115
2114
  const pathData = [
2116
2115
  `M 0 0`,
2117
2116
  `L ${bodyWidth} 0`,
@@ -3050,8 +3049,8 @@ export class ManageStorePlanoComponent {
3050
3049
  }
3051
3050
  findEmptyCenterSpot(objectWidthPx, objectHeightPx, tempOccupied = []) {
3052
3051
  const objects = this.canvas.getObjects();
3053
- const CENTER_OFFSET_X = -100; // 👈 move left by 40px (tune this)
3054
- const CENTER_OFFSET_Y = 0; // keep Y as-is for now
3052
+ const CENTER_OFFSET_X = -300;
3053
+ const CENTER_OFFSET_Y = 0;
3055
3054
  const bounds = this.getFullLayoutBounds();
3056
3055
  const centerX = bounds.left + bounds.width / 2 + CENTER_OFFSET_X;
3057
3056
  const centerY = bounds.top + bounds.height / 2 + CENTER_OFFSET_Y;
@@ -3889,6 +3888,7 @@ export class ManageStorePlanoComponent {
3889
3888
  },
3890
3889
  floors: undefined,
3891
3890
  };
3891
+ console.log("@@ ~ publishData:", publishData);
3892
3892
  await Promise.all([
3893
3893
  firstValueFrom(this.apiService.updateStorePlano({
3894
3894
  floorId,
@@ -3938,4 +3938,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
3938
3938
  type: HostListener,
3939
3939
  args: ["window:resize"]
3940
3940
  }] } });
3941
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby9tYW5hZ2Utc3RvcmUtcGxhbm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvbWFuYWdlLXN0b3JlLXBsYW5vL21hbmFnZS1zdG9yZS1wbGFuby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFJWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFELE9BQU8sRUFHTCxXQUFXLEVBRVgsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUNMLE9BQU8sRUFFUCxZQUFZLEVBQ1osY0FBYyxFQUNkLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQU1qQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUN4SCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUUxRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQmhILE1BQU0sT0FBTyx5QkFBeUI7SUFvRzFCO0lBQ0E7SUFDQTtJ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Q0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDaEM7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsMEJBQTBCLENBQUMsQ0FBQztTQUM3RDtnQkFBUztZQUNSLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1NBQzlCO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBNTRKVSx5QkFBeUI7NEZBQXpCLHlCQUF5Qix5R0FGekIsQ0FBQyxhQUFhLENBQUMsK2hCQzVENUIseXkyREE4M0JjOzs0RkRoMEJELHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSx3QkFBd0IsYUFHdkIsQ0FBQyxhQUFhLENBQUM7d1dBTTFCLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxZQUFZO2dCQUVPLFlBQVk7c0JBQXpDLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUNELG9CQUFvQjtzQkFBOUMsU0FBUzt1QkFBQyxjQUFjO2dCQUNDLG1CQUFtQjtzQkFBNUMsU0FBUzt1QkFBQyxhQUFhO2dCQUNTLHFCQUFxQjtzQkFBckQsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBRy9CLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHsgTG9jYXRpb24sIFRpdGxlQ2FzZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZvcm1BcnJheSxcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIFN1YmplY3QsXHJcbiAgU3Vic2NyaXB0aW9uLFxyXG4gIGRlYm91bmNlVGltZSxcclxuICBmaXJzdFZhbHVlRnJvbSxcclxuICBmcm9tRXZlbnQsXHJcbiAgdGFrZVVudGlsLFxyXG59IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQgKiBhcyBmYWJyaWMgZnJvbSBcImZhYnJpY1wiO1xyXG5cclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xyXG5cclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUHVibGlzaHRhc2tQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuL3B1Ymxpc2h0YXNrLXBvcHVwL3B1Ymxpc2h0YXNrLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTdG9yZVRhc2tSZXZva2VDb21wb25lbnQgfSBmcm9tIFwiLi9zdG9yZS10YXNrLXJldm9rZS9zdG9yZS10YXNrLXJldm9rZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERyb3Bkb3duSUYgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9wbGFuby1nZW5lcmFsLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvY29tcGxldGUtY29uZmlybWF0aW9uL2NvbXBsZXRlLWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVm1MaWJyYXJ5TGlzdCB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlXCI7XHJcblxyXG50eXBlIEJvdW5kRml4dHVyZUdyb3VwID0ge1xyXG4gIGZpeHR1cmVHcm91cDogZmFicmljLkdyb3VwO1xyXG4gIG9mZnNldFg6IG51bWJlcjtcclxuICBvZmZzZXRZOiBudW1iZXI7XHJcbiAgX3RlbXBPbGRUb3A/OiBudW1iZXI7XHJcbiAgX3RlbXBPbGRMZWZ0PzogbnVtYmVyO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLW1hbmFnZS1zdG9yZS1wbGFub1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vbWFuYWdlLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9tYW5hZ2Utc3RvcmUtcGxhbm8uY29tcG9uZW50LnNjc3NcIixcclxuICBwcm92aWRlcnM6IFtUaXRsZUNhc2VQaXBlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hbmFnZVN0b3JlUGxhbm9Db21wb25lbnRcclxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0XHJcbntcclxuICBAVmlld0NoaWxkKFwiYmFzZUNhbnZhc1wiKVxyXG4gIGNhbnZhc1JlZiE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoXCJjYW52YXNDb250YWluZXJcIikgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChcIm5vU3RvcmVWaWRlb1wiKSBub1N0b3JlVmlkZW9Nb2RhbFJlZiE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImFwcGx5TG9naWNzXCIpIGFwcGx5TG9naWNzTW9kYWxSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoXCJhcHByb3ZlTGF5b3V0TW9kYWxcIikgYXBwcm92ZUxheW91dE1vZGFsUmVmITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIilcclxuICBvblJlc2l6ZSgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlc2l6ZUNhbnZhcygpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuXHJcbiAgY2FudmFzITogZmFicmljLkNhbnZhcztcclxuICB6b29tTGV2ZWw6IG51bWJlciA9IDE7XHJcbiAgd2FsbFRoaWNrbmVzcyA9IDMwO1xyXG4gIHZlcnRpY2FsTWFyZ2luID0gKDEuMjUgLyAxMDApICogdGhpcy50b1BpeGVscygxNTI0LCBcIm1tXCIpO1xyXG4gIHdhbGxCaW5kaW5ncyA9IG5ldyBNYXA8ZmFicmljLkdyb3VwLCBCb3VuZEZpeHR1cmVHcm91cFtdPigpO1xyXG5cclxuICBsYXlvdXRGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc2VsZWN0ZWRGbG9vcklkID0gbmV3IEZvcm1Db250cm9sKFwiXCIpO1xyXG4gIGZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIGZpeHR1cmVUZW1wbGF0ZUlkU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBvdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcGxhbm9EYXRhOiBhbnk7XHJcblxyXG4gIGZsb29yRGF0YTogYW55O1xyXG4gIHJlYWRvbmx5IG9yaWdpbmFsRmxvb3JEYXRhOiBhbnk7IC8vdXNlZCB0byByb2xsYmFjayB0byBvcmlnaW5hbCBsYXlvdXQgc3RhdGUgb24gY2xpY2sgY2FuY2VsIHdoaWxlIGVkaXRpbmcuXHJcblxyXG4gIGNkblVybDogc3RyaW5nO1xyXG4gIGZpeHR1cmVUZW1wbGF0ZXM6IGFueVtdID0gW107XHJcbiAgYWxsRml4dHVyZXM6IGFueVtdID0gW107IC8vIGFsbCBmaXh0dXJlcyBpbmNsdWRpbmcgdGhlIG1hc3RlciB0ZW1wbGF0ZXMgZm9yIHRyZWUgdmlld1xyXG4gIGFsbEZpeHR1cmVJbnN0YW5jZXM6IGFueVtdID0gW107IC8vb25seSB0aGUgbGF5b3V0IGZpeHR1cmVzIGluc3RhbmNlcy5cclxuICBzdG9yZUZlZWRiYWNrOiBhbnk7XHJcblxyXG4gIHNlbGVjdGVkRml4dHVyZTogYW55O1xyXG4gIHNlbGVjdGVkRml4dHVyZURhdGE6IGFueTtcclxuICBzZWxlY3RlZEZpeHR1cmVGZWVkYmFjazogYW55O1xyXG4gIGVkaXRGaXh0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZWRpdEZpeHR1cmVTZWN0aW9uOiBcImJhc2ljLWRldGFpbHNcIiB8IFwicHJvZHVjdHNcIiB8IFwidm1zXCIgPSBcImJhc2ljLWRldGFpbHNcIjtcclxuICBzdWJtaXRGaXh0dXJlID0gZmFsc2U7XHJcblxyXG4gIHN0b3JlTWV0cmljcyA9IHtcclxuICAgIGZsb29yQ291bnQ6IDAsXHJcbiAgICBmaXh0dXJlQ291bnQ6IDAsXHJcbiAgICB2bUNvdW50OiAwLFxyXG4gIH07XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzUmlnaHRQYW5lbENvbGxhcHNlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNMZWZ0UGFuZWxDb2xsYXBzZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNlbGVjdGVkVmlldzogXCJ0cmVlXCIgfCBcImRldGFpbFwiID0gXCJkZXRhaWxcIjtcclxuXHJcbiAgcHVibGlzaGluZ1N0YXRlOlxyXG4gICAgfCBcImxheW91dFwiXHJcbiAgICB8IFwibGF5b3V0LXJlZG9cIlxyXG4gICAgfCBcImZpeHR1cmVcIlxyXG4gICAgfCBcImZpeHR1cmUtcmVkb1wiXHJcbiAgICB8IFwidm1cIlxyXG4gICAgfCBcInZtLXJlZG9cIlxyXG4gICAgfCBcImNvbXBsZXRlXCJcclxuICAgIHwgXCJcIiA9IFwiXCI7XHJcbiAgZGlzYWJsZWRQdWJsaXNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYWJsZUVkaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHRhc2tJbmZvOiBhbnk7XHJcbiAgdGFza1N0eWxlID0ge1xyXG4gICAgbGF5b3V0OiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICBmaXh0dXJlOiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICB2bTogeyBuYW1lOiBcIllldCBUbyBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9LFxyXG4gIH07XHJcblxyXG4gIG90aGVyRWxlbWVudExpc3Q6IERyb3Bkb3duSUZbXSA9IFtcclxuICAgIHsgbGFiZWw6IFwiUE9TIENvdW50ZXJcIiwgdmFsdWU6IFwiUE9TIENvdW50ZXJcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJEaXNjdXNzaW9uIFRhYmxlXCIsIHZhbHVlOiBcIkRpc2N1c3Npb24gVGFibGVcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJNaXJyb3JcIiwgdmFsdWU6IFwiTWlycm9yXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiT3RoZXJzXCIsIHZhbHVlOiBcIk90aGVyc1wiIH0sXHJcbiAgXTtcclxuICBzdG9yZUxpc3Q6IGFueSA9IFtdO1xyXG4gIHNlbGVjdGVkU3RvcmVOYW1lOiBhbnk7XHJcblxyXG4gIC8vIHZtTGlzdDogVm1MaWJyYXJ5TGlzdFtdID0gW107XHJcbiAgLy8gaXNVc2VySW50ZXJhY3RlZFdpdGhDYW52YXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBhY3RpdmVIaWdobGlnaHQ6IGZhYnJpYy5SZWN0IHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBjYW5jZWxIaWdobGlnaHRCbGluayA9IGZhbHNlO1xyXG5cclxuICBpc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgbGF5b3V0Qm91bmRzOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgdGl0bGVDYXNlOiBUaXRsZUNhc2VQaXBlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcGFnZUluZm86IFBhZ2VJbmZvU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICkge1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcblxyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGlmIChlKSB0aGlzLmNkblVybCA9IGUucGxhbm9ncmFtQ0ROO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmcsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICBpZiAocGFyYW1zPy5wbGFub0lkKSB7XHJcbiAgICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXMocGFyYW1zPy5wbGFub0lkKTtcclxuICAgICAgICAgIHRoaXMuZ2V0U3RvcmVMaXN0KHBhcmFtcz8ucGxhbm9JZCk7XHJcbiAgICAgICAgICBpZiAocGFyYW1zPy5mbG9vcklkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0geyBfaWQ6IHBhcmFtcz8uZmxvb3JJZCB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZsb29ySWQudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShhc3luYyAoaWQpID0+IHtcclxuICAgICAgdGhpcy5mbG9vckRhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhID0gdGhpcy5wbGFub0RhdGE/LmZsb29ycz8uZmluZChcclxuICAgICAgICAoZmxvb3I6IGFueSkgPT4gZmxvb3IuX2lkID09PSBpZCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgdGhpcy50YXNrRGV0YWlscyh0aGlzLmZsb29yRGF0YS5wbGFub0lkLCB0aGlzLmZsb29yRGF0YS5faWQpLFxyXG4gICAgICAgICAgdGhpcy5nZXRTdG9yZUZlZWRiYWNrKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCwge30pLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcblxyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKCk7XHJcbiAgICAgIHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgY29uc3QgbmV3UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuICAgICAgbmV3UGFyYW1zLnNldChcInBsYW5vSWRcIiwgdGhpcy5mbG9vckRhdGEucGxhbm9JZCk7XHJcbiAgICAgIG5ld1BhcmFtcy5zZXQoXCJmbG9vcklkXCIsIHRoaXMuZmxvb3JEYXRhLl9pZCk7XHJcblxyXG4gICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsXHJcbiAgICAgICAgbmV3UGFyYW1zLnRvU3RyaW5nKCksXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vcklkLnNldFZhbHVlKHRoaXMuZmxvb3JEYXRhLl9pZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMgPSBuZXcgZmFicmljLkNhbnZhcyh0aGlzLmNhbnZhc1JlZj8ubmF0aXZlRWxlbWVudCwge1xyXG4gICAgICBzZWxlY3Rpb25GdWxseUNvbnRhaW5lZDogdHJ1ZSxcclxuICAgICAgcGVyUGl4ZWxUYXJnZXRGaW5kOiB0cnVlLFxyXG4gICAgICB0YXJnZXRGaW5kVG9sZXJhbmNlOiA1LFxyXG4gICAgfSk7XHJcblxyXG4gICAgZnJvbUV2ZW50KHRoaXMuY2FudmFzIGFzIGFueSwgXCJvYmplY3Q6bW9kaWZpZWRcIilcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1vdmVkT2JqOiBhbnkgPSBlLnRhcmdldDtcclxuXHJcbiAgICAgICAgaWYgKCFtb3ZlZE9iaikgcmV0dXJuO1xyXG5cclxuICAgICAgICBpZiAobW92ZWRPYmo/LnR5cGUgPT09IFwiYWN0aXZlU2VsZWN0aW9uXCIpIHtcclxuICAgICAgICAgIHRoaXMuYXBwbHlHcm91cFRyYW5zZm9ybShtb3ZlZE9iaik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhY3Rpb24gPSBlLnRyYW5zZm9ybT8uYWN0aW9uO1xyXG5cclxuICAgICAgICBjb25zdCBpc1Jlc2l6ZSA9XHJcbiAgICAgICAgICBhY3Rpb24gPT09IFwic2NhbGVcIiB8fCBhY3Rpb24gPT09IFwic2NhbGVYXCIgfHwgYWN0aW9uID09PSBcInNjYWxlWVwiO1xyXG5cclxuICAgICAgICBpZiAoaXNSZXNpemUpIHtcclxuICAgICAgICAgIGNvbnN0IHR5cGUgPSBtb3ZlZE9iaj8ub2JqVHlwZSA/PyBcImdyb3VwXCI7XHJcblxyXG4gICAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZyA9IHtcclxuICAgICAgICAgICAgeDogbW92ZWRPYmoubGVmdCxcclxuICAgICAgICAgICAgeTogbW92ZWRPYmoudG9wLFxyXG4gICAgICAgICAgICB3aWR0aDogbW92ZWRPYmouZ2V0U2NhbGVkV2lkdGgoKSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBtb3ZlZE9iai5nZXRTY2FsZWRIZWlnaHQoKSxcclxuICAgICAgICAgICAgYW5nbGU6IG1vdmVkT2JqLmFuZ2xlLFxyXG4gICAgICAgICAgICBlbGVtZW50RGF0YTogbW92ZWRPYmouZGF0YSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ3YWxsXCI6IHtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmUobW92ZWRPYmopO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGEuYW5nbGUgPSB1cGRhdGVkQ29uZmlnLmFuZ2xlO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBuZXdXYWxsID0gYXdhaXQgdGhpcy5kcmF3V2FsbChcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy54LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy55LFxyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxsVGhpY2tuZXNzLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy53aWR0aCAtIDAuMjcsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhLFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIChuZXdXYWxsIGFzIGFueSkub2JqVHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgICAgIChuZXdXYWxsIGFzIGFueSkuZGF0YSA9IHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChuZXdXYWxsKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FzZSBcIm90aGVyc1wiOiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKG1vdmVkT2JqKTtcclxuICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5hbmdsZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3T3RoZXIgPSB0aGlzLmRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLngsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLnksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmFuZ2xlLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy53aWR0aCAtIDIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmhlaWdodCAtIDIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhLFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIChuZXdPdGhlciBhcyBhbnkpLm9ialR5cGUgPSBcIm90aGVyc1wiO1xyXG4gICAgICAgICAgICAgIChuZXdPdGhlciBhcyBhbnkpLmRhdGEgPSB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QobmV3T3RoZXIpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwiZW50cmFuY2VcIjoge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwiZml4dHVyZVwiOiB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGVXYWxsQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZpeHR1cmVDb29yZGluYXRlcygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlT3RoZXJFbGVtZW50c0Nvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVFbnRyYW5jZUNvb3JkaW5hdGVzKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2V0dXBab29tSGFuZGxlcnMoKTtcclxuXHJcbiAgICB0aGlzLmxpc3RlblRvRGVsZXRlS2V5KCk7XHJcbiAgICB0aGlzLnRvZ2dsZVBhbmVsKFwibGVmdFwiLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUFsbFBvc2l0aW9ucygpIHtcclxuICAgIHRoaXMudXBkYXRlV2FsbENvb3JkaW5hdGVzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZpeHR1cmVDb29yZGluYXRlcygpO1xyXG4gICAgdGhpcy51cGRhdGVPdGhlckVsZW1lbnRzQ29vcmRpbmF0ZXMoKTtcclxuICAgIHRoaXMudXBkYXRlRW50cmFuY2VDb29yZGluYXRlcygpO1xyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmNhZExheW91dCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlHcm91cFRyYW5zZm9ybShzZWxlY3Rpb246IGZhYnJpYy5BY3RpdmVTZWxlY3Rpb24pIHtcclxuICAgIGNvbnN0IG1hdHJpeCA9IHNlbGVjdGlvbi5jYWxjVHJhbnNmb3JtTWF0cml4KCk7XHJcblxyXG4gICAgc2VsZWN0aW9uLmdldE9iamVjdHMoKS5mb3JFYWNoKChvYmo6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBvYmpNYXRyaXggPSBvYmouY2FsY1RyYW5zZm9ybU1hdHJpeCgpO1xyXG4gICAgICBjb25zdCBmaW5hbE1hdHJpeCA9IGZhYnJpYy51dGlsLm11bHRpcGx5VHJhbnNmb3JtTWF0cmljZXMoXHJcbiAgICAgICAgbWF0cml4LFxyXG4gICAgICAgIG9iak1hdHJpeCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHBvaW50ID0gbmV3IGZhYnJpYy5Qb2ludCgwLCAwKS50cmFuc2Zvcm0oZmluYWxNYXRyaXgpO1xyXG5cclxuICAgICAgb2JqLnNldCh7XHJcbiAgICAgICAgbGVmdDogcG9pbnQueCxcclxuICAgICAgICB0b3A6IHBvaW50LnksXHJcbiAgICAgICAgYW5nbGU6IHNlbGVjdGlvbi5hbmdsZSArIChvYmouYW5nbGUgPz8gMCksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgb2JqLnNldENvb3JkcygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gVW5ncm91cCBhZnRlciBhcHBseWluZyB0cmFuc2Zvcm1cclxuICAgIHRoaXMuY2FudmFzLmRpc2NhcmRBY3RpdmVPYmplY3QoKTtcclxuICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHJlc2l6ZUNhbnZhcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB0aGlzLmNhbnZhcy5zZXREaW1lbnNpb25zKHtcclxuICAgICAgd2lkdGg6IGNvbnRhaW5lci5jbGllbnRXaWR0aCAtIDUwLFxyXG5cclxuICAgICAgaGVpZ2h0OiBjb250YWluZXIuY2xpZW50SGVpZ2h0IC0gNDAsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHNldHVwWm9vbUhhbmRsZXJzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTp3aGVlbFwiLCAob3B0OiBmYWJyaWMuVEV2ZW50PFdoZWVsRXZlbnQ+KSA9PiB7XHJcbiAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuXHJcbiAgICAgIGlmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSB7XHJcbiAgICAgICAgLy8gdGhpcy5pc1VzZXJJbnRlcmFjdGVkV2l0aENhbnZhcyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBlLmRlbHRhWTtcclxuICAgICAgICBsZXQgem9vbSA9IHRoaXMuY2FudmFzLmdldFpvb20oKTtcclxuICAgICAgICB6b29tICo9IDAuOTk1ICoqIGRlbHRhO1xyXG5cclxuICAgICAgICB6b29tID0gTWF0aC5tYXgoMC4yLCBNYXRoLm1pbih6b29tLCAzKSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLnpvb21Ub1BvaW50KFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB4OiBlLm9mZnNldFgsXHJcbiAgICAgICAgICAgIHk6IGUub2Zmc2V0WSxcclxuICAgICAgICAgIH0gYXMgZmFicmljLlBvaW50LFxyXG4gICAgICAgICAgem9vbSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6ZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtKSB7XHJcbiAgICAgICAgLy8gdGhpcy5pc1VzZXJJbnRlcmFjdGVkV2l0aENhbnZhcyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtO1xyXG4gICAgICAgIHZwdFs0XSArPSBlLmNsaWVudFggLSBsYXN0UG9zWDtcclxuICAgICAgICB2cHRbNV0gKz0gZS5jbGllbnRZIC0gbGFzdFBvc1k7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOnVwXCIsICgpID0+IHtcclxuICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJNYW5hZ2UgU3RvcmUgUGxhbm9cIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlBsYW5vZ3JhbVwiLFxyXG4gICAgICAgIHBhdGg6IFwiL21hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXBsYW5vZ3JhbXNcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiXCIsXHJcbiAgICAgICAgcGF0aDogXCJcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIC8vIGFzeW5jIGdldFZtc0xpc3QoKSB7XHJcbiAgLy8gICB0cnkge1xyXG4gIC8vICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gIC8vICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRWTU5hbWVMaXN0KHRoaXMuY2xpZW50SWQpLFxyXG4gIC8vICAgICApO1xyXG4gIC8vICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgLy8gICAgICAgdGhpcy52bUxpc3QgPSByZXM/LmRhdGE/Lm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgICByZXR1cm4ge1xyXG4gIC8vICAgICAgICAgICBpZDogaXRlbS5faWQsXHJcbiAgLy8gICAgICAgICAgIG5hbWU6IGl0ZW0udm1OYW1lLFxyXG4gIC8vICAgICAgICAgICBkaXNwbGF5TmFtZTogaXRlbS52bU5hbWUsXHJcbiAgLy8gICAgICAgICAgIHdpZHRoOiBpdGVtLnZtV2lkdGgudmFsdWUsXHJcbiAgLy8gICAgICAgICAgIGhlaWdodDogaXRlbS52bUhlaWdodC52YWx1ZSxcclxuICAvLyAgICAgICAgICAgdHlwZTogaXRlbS52bVR5cGUsXHJcbiAgLy8gICAgICAgICAgIC4uLihpdGVtLnZtSW1hZ2VVcmxcclxuICAvLyAgICAgICAgICAgICA/IHsgaW1nVXJsOiBgJHt0aGlzLmNkblVybH0ke2l0ZW0udm1JbWFnZVVybH1gIH1cclxuICAvLyAgICAgICAgICAgICA6IHt9KSxcclxuICAvLyAgICAgICAgIH07XHJcbiAgLy8gICAgICAgfSk7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKFwiQEAgfiBnZXRWbXNMaXN0IFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBvbkZpeHR1cmVTYXZlKCkge1xyXG4gICAgdGhpcy5zdWJtaXRGaXh0dXJlID0gdHJ1ZTtcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS50YXNrVHlwZSA9IHRoaXMucHVibGlzaGluZ1N0YXRlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3VibWl0Rml4dHVyZSA9IGZhbHNlO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uRml4dHVyZVBhZ2VDYW5jZWwoKSB7XHJcbiAgICAvLyB0aGlzLnN1Ym1pdEZpeHR1cmUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICB0aGlzLmVkaXRGaXh0dXJlU2VjdGlvbiA9IFwiYmFzaWMtZGV0YWlsc1wiO1xyXG4gICAgdGhpcy5lZGl0Rml4dHVyZSA9IGZhbHNlO1xyXG4gICAgLy8gdGhpcy5sYXlvdXRGb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgYXdhaXQgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIG9uRml4dHVyZVN1Ym1pdChldmVudDogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50ICYmICF0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZXZlbnQ/LnNoZWxmICYmIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uc2hlbGZDb25maWcpIHtcclxuICAgICAgZXZlbnQuc2hlbGYgPSBldmVudC5zaGVsZi5tYXAoKHNoZWxmOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZmluZFNoZWxmID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnLmZpbmQoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5zaGVsZk51bWJlciA9PSBpbmRleCArIDEsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZmluZFNoZWxmKSB7XHJcbiAgICAgICAgICBzaGVsZiA9IHsgLi4uZmluZFNoZWxmLCAuLi5zaGVsZiB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZGV0YWlscyA9XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5zaGVsZkNvbmZpZ1tcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuc2hlbGZDb25maWcubGVuZ3RoIC0gMVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgZGV0YWlscy5zaGVsZk51bWJlciA9IGluZGV4ICsgMTtcclxuICAgICAgICAgIHNoZWxmID0geyAuLi5kZXRhaWxzLCAuLi5zaGVsZiB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2hlbGY7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1wic2hlbGZDb25maWdcIl0gPSBldmVudD8uc2hlbGY7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YVtcImRlc2NyaXB0aW9uXCJdID0gZXZlbnQ/LmRlc2NyaXB0aW9uID8/IFwiXCI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YVtcInRlbXBsYXRlR3JvdXBOYW1lXCJdID1cclxuICAgICAgICBldmVudD8udGVtcGxhdGVHcm91cE5hbWUgPz8gXCJcIjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLmhlYWRlci5sYWJlbCA9IGV2ZW50Py5oZWFkZXJMYWJlbCA/PyBcIlwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuZm9vdGVyLmxhYmVsID0gZXZlbnQ/LmZvb3RlckxhYmVsID8/IFwiXCI7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50Py5zZWN0aW9uKSB7XHJcbiAgICAgIGV2ZW50LnNlY3Rpb24uZm9yRWFjaCgoc2VjOiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgbnVtYmVyID0gc2VjPy5zaGVsdmVzPy5tYXAoKGVsZTogYW55KSA9PlxyXG4gICAgICAgICAgcGFyc2VJbnQoZWxlLnNwbGl0KFwiIFwiKVsxXSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmZvckVhY2goKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChudW1iZXIuaW5jbHVkZXMoc2hlbGYuc2hlbGZOdW1iZXIpKSB7XHJcbiAgICAgICAgICAgIHNoZWxmLnpvbmUgPSBzZWMuem9uZTtcclxuICAgICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZSA9IHNlYy5wcm9kdWN0QnJhbmROYW1lO1xyXG4gICAgICAgICAgICBzaGVsZi5wcm9kdWN0Q2F0ZWdvcnkgPSBzZWMucHJvZHVjdENhdGVnb3J5O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnZtQ29uZmlnICYmIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8udm1Db25maWcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1widm1Db25maWdcIl0gPSBldmVudD8udm1Db25maWc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAvLyB0aGlzLmdldFZtc0xpc3QoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZWRpdEZpeHR1cmVTZWN0aW9uID0gXCJiYXNpYy1kZXRhaWxzXCI7XHJcbiAgICAgICAgdGhpcy5lZGl0Rml4dHVyZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YT8uX2lkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGFuZWwoc2lkZTogXCJsZWZ0XCIgfCBcInJpZ2h0XCIsIGFjdGlvbj86IGJvb2xlYW4pIHtcclxuICAgIGlmIChzaWRlID09PSBcImxlZnRcIikge1xyXG4gICAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkID0gYWN0aW9uID8/ICF0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkO1xyXG4gICAgICBpZiAoIXRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQpIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gYWN0aW9uID8/ICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZDtcclxuICAgICAgaWYgKCF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCkgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCA9IHRydWU7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2spIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlRml4dHVyZU9uRmVlZGJhY2tQYW5lbCh7fSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCA0MDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmVGZWVkYmFjayhcclxuICAgIHBsYW5vSWQ6IHN0cmluZyxcclxuICAgIGZsb29ySWQ6IHN0cmluZyxcclxuICAgIGZpbHRlcjogYW55LFxyXG4gICAgY2hlY2tQdWJsaXNoU3RhdGU6IGJvb2xlYW4gPSB0cnVlLFxyXG4gICkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IHtcclxuICAgICAgICBwbGFub0lkOiBwbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IGZsb29ySWQsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChmaWx0ZXIpIHtcclxuICAgICAgICBkYXRhID0geyAuLi5kYXRhLCAuLi5maWx0ZXIgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFN0b3JlRmVlZGJhY2soZGF0YSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjayA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgaWYgKHJlcy5kYXRhPy5sYXlvdXREYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzTGF5b3V0RmVlZGJhY2socmVzLmRhdGEubGF5b3V0RGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NMYXlvdXRGZWVkYmFjayhbXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlcy5kYXRhPy5maXh0dXJlRGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZpeHR1cmVGZWVkYmFjayhyZXMuZGF0YS5maXh0dXJlRGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaXh0dXJlRmVlZGJhY2soW10pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChyZXMuZGF0YT8uVm1EYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzVm1GZWVkYmFjayhyZXMuZGF0YS5WbURhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzVm1GZWVkYmFjayhbXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGNoZWNrUHVibGlzaFN0YXRlKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY2FsY3VsYXRlUHVibGlzaGluZ1N0YXRlKClcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUZlZWRiYWNrPy5maXh0dXJlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoe1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRGaXh0dXJlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjay5maXh0dXJlRmVlZGJhY2suZml4dHVyZUlkLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBmZXRjaCBzdG9yZSBmZWVkYmFja1wiKTtcclxuICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVQdWJsaXNoaW5nU3RhdGUoKSB7XHJcbiAgICBsZXQgZGlzYWJsZUVkaXQgPSBmYWxzZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpXTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50LmZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IGVsZW1lbnQuZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlLmlzc3VlKSB7XHJcbiAgICAgICAgICBkaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ldO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZS5pc3N1ZSkge1xyXG4gICAgICAgICAgZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkaXNhYmxlRWRpdCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUVkaXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbGF5b3V0RGF0YSA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5maW5kKFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZS50eXBlID09IFwibGF5b3V0XCIsXHJcbiAgICApO1xyXG4gICAgbGV0IGZpeHR1cmVEYXRhID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHM/LmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gXCJmaXh0dXJlXCIsXHJcbiAgICApO1xyXG4gICAgbGV0IHZtRGF0YSA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5maW5kKFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZS50eXBlID09IFwiZml4dHVyZVwiLFxyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy50YXNrU3R5bGUubGF5b3V0Lm5hbWUgPT0gXCJBcHByb3ZlZFwiICYmXHJcbiAgICAgIHRoaXMudGFza1N0eWxlLmZpeHR1cmUubmFtZSA9PSBcIkFwcHJvdmVkXCIgJiZcclxuICAgICAgdGhpcy50YXNrU3R5bGUudm0ubmFtZSA9PSBcIkFwcHJvdmVkXCJcclxuICAgICkge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwiY29tcGxldGVcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50YXNrU3R5bGUuZml4dHVyZS5uYW1lID09IFwiQXBwcm92ZWRcIikge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwidm1cIjtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHZtRGF0YSAmJlxyXG4gICAgICAgICgodm1EYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmIHZtRGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcImRpc2FncmVlXCIpIHx8XHJcbiAgICAgICAgICB2bURhdGE/LnJlZG9TdGF0dXMpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJ2bS1yZWRvXCI7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBmaXh0dXJlRGF0YSAmJlxyXG4gICAgICAgICgoZml4dHVyZURhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiZcclxuICAgICAgICAgIGZpeHR1cmVEYXRhLmZlZWRiYWNrU3RhdHVzID09IFwiZGlzYWdyZWVcIikgfHxcclxuICAgICAgICAgIGZpeHR1cmVEYXRhPy5yZWRvU3RhdHVzKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICF0aGlzLmZsb29yRGF0YS5pc0VkaXRlZFxyXG4gICAgICAgICAgPyBcImZpeHR1cmUtcmVkb1wiXHJcbiAgICAgICAgICA6IFwiZml4dHVyZVwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRUZW1wbGF0ZShmaXh0dXJlQ29uZmlnSWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0Rml4dHVyZVRlbXBsYXRlKGZpeHR1cmVDb25maWdJZCksXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcHJvY2Vzc0xheW91dEZlZWRiYWNrKHN0b3JlRmVlZGJhY2s6IGFueVtdKSB7XHJcbiAgICBjb25zdCBsYXlvdXRGZWVkYmFjayA9IHN0b3JlRmVlZGJhY2suZmluZChcclxuICAgICAgKGZlZWRiYWNrKSA9PiBmZWVkYmFjay50eXBlID09PSBcImxheW91dFwiLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB3YWxsRWxlbWVudHMgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbHRlcihcclxuICAgICAgKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIsXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChsYXlvdXRGZWVkYmFjaykge1xyXG4gICAgICBjb25zdCBpc3N1ZXMgPSBsYXlvdXRGZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy5pc3N1ZXM7XHJcblxyXG4gICAgICBpZiAoaXNzdWVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpc3N1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGlzc3VlID0gaXNzdWVzW2ldO1xyXG5cclxuICAgICAgICAgIGlmIChpc3N1ZS5pc3N1ZVR5cGUgPT09IFwiZXh0cmFGaXh0dXJlXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZXMgPSBpc3N1ZS5EZXRhaWxzLmZpbHRlcihcclxuICAgICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIsXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IGZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZTogYW55ID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZShcclxuICAgICAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZUNvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghdGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGdob3N0Rml4dHVyZSA9IHtcclxuICAgICAgICAgICAgICAgIC4uLnRlbXBsYXRlPy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZT8uZGF0YT8uX2lkLFxyXG4gICAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIHVuaXQ6IFwiZnRcIiB9LFxyXG4gICAgICAgICAgICAgICAgc2hlbGZDb25maWc6IGZpeHR1cmUuc2hlbGZDb25maWcsXHJcbiAgICAgICAgICAgICAgICBnaG9zdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBmaXh0dXJlLFxyXG4gICAgICAgICAgICAgICAgdGFza1R5cGU6IFwibGF5b3V0XCIsXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoeyBmaXh0dXJlTmFtZTogZ2hvc3RGaXh0dXJlLmZpeHR1cmVOYW1lLCBmaXh0dXJlQ29uZmlnSWQ6IGdob3N0Rml4dHVyZS5maXh0dXJlQ29uZmlnSWQsIF9pZDogZ2hvc3RGaXh0dXJlLl9pZCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHdhbGxJbmRleDogbnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc29jV2FsbE51bSA9IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzb2NXYWxsTnVtID49IHdhbGxFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEluZGV4ID0gd2FsbEVsZW1lbnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXNzb2NXYWxsTnVtIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHdhbGxJbmRleCA9IGFzc29jV2FsbE51bTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50Rml4dHVyZXM6IGFueSA9IHdhbGxFbGVtZW50cy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSB3YWxsSW5kZXgsXHJcbiAgICAgICAgICAgICAgICApLmZpeHR1cmVzO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXNzb2NGaXh0dXJlTnVtID0gZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGFzc29jRml4dHVyZU51bSA+IGVsZW1lbnRGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvblxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSB3YWxsSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maXh0dXJlcy5wdXNoKGdob3N0Rml4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEgLSAxKS5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFzc29jRml4dHVyZU51bSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25cclxuICAgICAgICAgICAgICAgICAgICAuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gd2FsbEluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuZml4dHVyZXMudW5zaGlmdChnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghIC0gMSkuaW5zZXJ0KDAsIGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpeHR1cmVzLnNwbGljZShhc3NvY0ZpeHR1cmVOdW0gLSAxLCAwLCBnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghIC0gMSkuaW5zZXJ0KGFzc29jRml4dHVyZU51bSAtIDEsIGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NvY0ZpeHR1cmVOdW0gPSBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzb2NGaXh0dXJlTnVtID4gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5wdXNoKGdob3N0Rml4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMucHVzaChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhc3NvY0ZpeHR1cmVOdW0gPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLnVuc2hpZnQoZ2hvc3RGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5pbnNlcnQoMCwgZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuc3BsaWNlKFxyXG4gICAgICAgICAgICAgICAgICAgIGFzc29jRml4dHVyZU51bSAtIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgICAgICBnaG9zdEZpeHR1cmUsXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMuaW5zZXJ0KGFzc29jRml4dHVyZU51bSAtIDEsIGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpc3N1ZS5pc3N1ZVR5cGUgPT09IFwiZml4dHVyZU1pc3NpbmdcIiB8fFxyXG4gICAgICAgICAgICBpc3N1ZS5pc3N1ZVR5cGUgPT09IFwiZml4dHVyZU1pc21hdGNoXCJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IGlzc3VlLkRldGFpbHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSBcInBlbmRpbmdcIixcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlID0gZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgICAgICAgIC8vIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ3dhbGwnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgd2FsbEVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5lbGVtZW50VHlwZSAhPT0gXCJ3YWxsXCIgfHxcclxuICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkod2FsbEVsZW1lbnQuZml4dHVyZXMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IHdhbGxFbGVtZW50LmZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZCxcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi53YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcImxheW91dFwiLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBlbHNlIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ2Zsb29yJykge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBjZW50ZXJGaXh0dXJlcyA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IGNlbnRlckZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLmNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlcyxcclxuICAgICAgICAgICAgICAgICAgdGFza1R5cGU6IFwibGF5b3V0XCIsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0ZpeHR1cmVGZWVkYmFjayhzdG9yZUZlZWRiYWNrOiBhbnlbXSkge1xyXG4gICAgY29uc3QgZml4dHVyZUZlZWRiYWNrID0gc3RvcmVGZWVkYmFjay5maWx0ZXIoXHJcbiAgICAgIChmZWVkYmFjaykgPT4gZmVlZGJhY2sudHlwZSA9PT0gXCJmaXh0dXJlXCIsXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmaW5kRml4dHVyZVRhc2sgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZChcclxuICAgICAgKHRhc2s6IGFueSkgPT4gdGFzay50eXBlID09IFwiZml4dHVyZVwiLFxyXG4gICAgKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZlZWRiYWNrIG9mIGZpeHR1cmVGZWVkYmFjayA/PyBbXSkge1xyXG4gICAgICBjb25zdCBhaURhdGEgPSBmZWVkYmFjaz8uZml4dHVyZUFJRGF0YTtcclxuICAgICAgaWYgKCFhaURhdGEpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5maW5kKFxyXG4gICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSBhaURhdGEuZml4dHVyZUlkLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWZpeHR1cmUpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgZmVlZGJhY2suRml4dHVyZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZml4dHVyZSk7XHJcblxyXG4gICAgICBjb25zdCBzdGF0dXMgPVxyXG4gICAgICAgIChmaW5kRml4dHVyZVRhc2s/LnN0YXR1cyA9PT0gXCJzdWJtaXRcIiB8fCBmaW5kRml4dHVyZVRhc2s/LnJlZG9TdGF0dXMpICYmXHJcbiAgICAgICAgZmVlZGJhY2s/LmFuc3dlcnM/LlswXT8uc3RhdHVzXHJcbiAgICAgICAgICA/IGZlZWRiYWNrLmFuc3dlcnNbMF0uc3RhdHVzXHJcbiAgICAgICAgICA6IFwiXCI7XHJcblxyXG4gICAgICBPYmplY3QuYXNzaWduKGZpeHR1cmUsIHtcclxuICAgICAgICBpc3N1ZTogZmFsc2UsXHJcbiAgICAgICAgaXNzdWVEYXRhOiBhaURhdGEsXHJcbiAgICAgICAgdGFza1R5cGU6IFwiZml4dHVyZVwiLFxyXG4gICAgICAgIHN0YXR1cyxcclxuICAgICAgICBicmVhY2g6IGZpbmRGaXh0dXJlVGFzaz8uYnJlYWNoLFxyXG4gICAgICAgIHRhc2tTdGF0dXM6IGZpbmRGaXh0dXJlVGFzaz8uc3RhdHVzLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NWbUZlZWRiYWNrKHN0b3JlRmVlZGJhY2s6IGFueVtdKSB7XHJcbiAgICBjb25zdCBmaXh0dXJlRmVlZGJhY2sgPSBzdG9yZUZlZWRiYWNrLmZpbHRlcihcclxuICAgICAgKGZlZWRiYWNrKSA9PiBmZWVkYmFjay50eXBlID09PSBcInZtXCIsXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChmaXh0dXJlRmVlZGJhY2subGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZUZlZWRiYWNrLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaXNzdWVzID0gZml4dHVyZUZlZWRiYWNrPy5baV0/LmFuc3dlcnM/LlswXT8uaXNzdWVzO1xyXG5cclxuICAgICAgICBpZiAoaXNzdWVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaXNzdWVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzc3VlID0gaXNzdWVzW2pdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZXMgPSBpc3N1ZS5EZXRhaWxzLmZpbHRlcihcclxuICAgICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCIsXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IGZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICAgICAgICAvLyBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09ICd3YWxsJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdhbGxFbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZWxlbWVudFR5cGUgIT09IFwid2FsbFwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHdhbGxFbGVtZW50LmZpeHR1cmVzKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSB3YWxsRWxlbWVudC5maXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ud2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlcyxcclxuICAgICAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJ2bVwiLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBlbHNlIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ2Zsb29yJykge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBjZW50ZXJGaXh0dXJlcyA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IGNlbnRlckZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLmNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlcyxcclxuICAgICAgICAgICAgICAgICAgdGFza1R5cGU6IFwidm1cIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0cmFuc2ZlckFycmF5SXRlbTxUID0gYW55PihcclxuICAgIGN1cnJlbnRBcnJheTogVFtdLFxyXG4gICAgdGFyZ2V0QXJyYXk6IFRbXSxcclxuICAgIGN1cnJlbnRJbmRleDogbnVtYmVyLFxyXG4gICAgdGFyZ2V0SW5kZXg6IG51bWJlcixcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZyb20gPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50QXJyYXkubGVuZ3RoIC0gMSwgY3VycmVudEluZGV4KSk7XHJcbiAgICBjb25zdCB0byA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRhcmdldEFycmF5Lmxlbmd0aCwgdGFyZ2V0SW5kZXgpKTtcclxuXHJcbiAgICBpZiAoY3VycmVudEFycmF5Lmxlbmd0aCkge1xyXG4gICAgICB0YXJnZXRBcnJheS5zcGxpY2UodG8sIDAsIGN1cnJlbnRBcnJheS5zcGxpY2UoZnJvbSwgMSlbMF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVvcmRlckZpeHR1cmUoZmxvb3JEYXRhOiBhbnkpIHtcclxuICAgIC8vIFdhbGxzXHJcbiAgICBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG5cclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIgPSBlbGVtZW50LmVsZW1lbnROdW1iZXI7XHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJ3YWxsXCI7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSB3YWxsQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIENlbnRlciBmbG9vciBmaXh0dXJlc1xyXG4gICAgbGV0IGZsb29yQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuICAgIGZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJmbG9vclwiO1xyXG5cclxuICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gZmxvb3JBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRFbGVtZW50VmFsdWUoZ3JvdXA6IGFueSkge1xyXG4gICAgcmV0dXJuIGdyb3VwLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gSGVscGVyOiBnZXQgd2FsbCBtZXRhIGJ5IGVsZW1lbnQgbnVtYmVyICgxLWJhc2VkKVxyXG4gIHByaXZhdGUgZ2V0V2FsbEJ5TnVtYmVyKGVsZW1lbnROdW1iZXI6IG51bWJlcik6IGFueSB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZpbmQoXHJcbiAgICAgICh3OiBhbnkpID0+IHcuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHcuZWxlbWVudE51bWJlciA9PT0gZWxlbWVudE51bWJlcixcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICByb3VuZFRvVHdvKG51bTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChudW0gKiAxMDApIC8gMTAwO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0U3RvcmVGaXh0dXJlcyhzdG9yZUlkOiBzdHJpbmcsIGVuYWJsZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKCF0aGlzLmZpeHR1cmVUZW1wbGF0ZXMubGVuZ3RoKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0Rml4dHVyZVRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSBudWxsO1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5nZXRTdG9yZUZpeHR1cmVzKHsgaWQ6IFtzdG9yZUlkXSwgdHJlZVZpZXc6IHRydWUgfSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICghcmVzPy5kYXRhPy5bMF0/LmZsb29ycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnBsYW5vRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShyZXMuZGF0YVswXSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5mbG9vckRhdGE/Ll9pZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShcclxuICAgICAgICAgICAgICByZXMuZGF0YVswXS5mbG9vcnMuZmluZChcclxuICAgICAgICAgICAgICAgIChmbG9vcjogYW55KSA9PiBmbG9vcj8uX2lkID09PSB0aGlzLmZsb29yRGF0YT8uX2lkLFxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShyZXMuZGF0YVswXS5mbG9vcnNbMF0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuZXh0cmFjdEFsbEZpeHR1cmVzKHRoaXMuZmxvb3JEYXRhKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vcklkLnNldFZhbHVlKHRoaXMuZmxvb3JEYXRhLl9pZCwge1xyXG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zdG9yZU1ldHJpY3MuZmxvb3JDb3VudCA9IHRoaXMucGxhbm9EYXRhPy5mbG9vcnM/Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICAgICAgdGhpcy50YXNrRGV0YWlscyh0aGlzLmZsb29yRGF0YS5wbGFub0lkLCB0aGlzLmZsb29yRGF0YS5faWQpLFxyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGZWVkYmFjayhcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgIH0gY2F0Y2gge31cclxuXHJcbiAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKCk7XHJcblxyXG4gICAgICAgICAgLy8gdGhpcy5zZWxlY3RGaXh0dXJlRmVlZGJhY2soKTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGlmIChlbmFibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sYXlvdXRGb3JtPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBmZXRjaCBwbGFub1wiKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGV4dHJhY3RBbGxGaXh0dXJlcyhmbG9vckRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgZXh0cmFjdGVkRml4dHVyZSA9IFtcclxuICAgICAgLi4uKGZsb29yRGF0YT8ubWFzdGVyVGVtcGxhdGVzID8/IFtdKSxcclxuICAgICAgLi4uKGZsb29yRGF0YT8uY2VudGVyRml4dHVyZSA/PyBbXSksXHJcbiAgICBdO1xyXG5cclxuICAgIGZsb29yRGF0YT8ubGF5b3V0UG9seWdvbj8uZm9yRWFjaCgobHA6IGFueSkgPT4ge1xyXG4gICAgICBleHRyYWN0ZWRGaXh0dXJlLnB1c2goLi4uKGxwLmZpeHR1cmVzID8/IFtdKSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFsbEZpeHR1cmVzID0gZXh0cmFjdGVkRml4dHVyZTtcclxuXHJcbiAgICB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMgPSBbXHJcbiAgICAgIC4uLnRoaXMuZmxvb3JEYXRhIS5sYXlvdXRQb2x5Z29uLmZsYXRNYXAoKGU6IGFueSkgPT4gZT8uZml4dHVyZXMgPz8gW10pLFxyXG4gICAgICAuLi4odGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUgPz8gW10pLFxyXG4gICAgXTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlbmRlckZsb29yKHVwZGF0ZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgIHRoaXMuc3RvcmVNZXRyaWNzLmZpeHR1cmVDb3VudCA9IHRoaXMuZmxvb3JEYXRhLmZpeHR1cmVDb3VudDtcclxuICAgIHRoaXMuc3RvcmVNZXRyaWNzLnZtQ291bnQgPSB0aGlzLmZsb29yRGF0YS52bUNvdW50O1xyXG4gICAgdGhpcy5kcmF3SW5pdGlhbENvbnRlbnQoKTtcclxuICAgIGlmICh1cGRhdGUpIHtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcblxyXG4gICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHdhbGw6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgY29uc3Qgd2FsbEl0ZW0gPSB0aGlzLnBhdGNoV2FsbEVsZW1lbnRzKHtcclxuICAgICAgICAgICAgZWxlbWVudFR5cGU6IHdhbGwuZWxlbWVudFR5cGUsXHJcbiAgICAgICAgICAgIGVsZW1lbnROdW1iZXI6IHdhbGwuZWxlbWVudE51bWJlcixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHdhbGwuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChmaXh0dXJlPy5maXh0dXJlTmFtZSA9PT0gXCJzcGFjZVwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogZml4dHVyZS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IGZpeHR1cmUuZml4dHVyZUNvbmZpZ0lkLFxyXG4gICAgICAgICAgICAgIF9pZDogZml4dHVyZS5faWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAod2FsbEl0ZW0uZ2V0KFwiZml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB3YWxsLm90aGVyRWxlbWVudHM/LmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgICAgdHlwZTogW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgICAgPyBlbGUuZml4dHVyZU5hbWVcclxuICAgICAgICAgICAgICAgICAgOiBcIk90aGVyc1wiLFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgY3VzdG9tTmFtZTogW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgICAgPyBcIlwiXHJcbiAgICAgICAgICAgICAgICAgIDogZWxlLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAod2FsbEl0ZW0uZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZWxlR3JvdXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5nZXRGb3JtV2FsbHMucHVzaCh3YWxsSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgICAgICAgIGZpeHR1cmVOYW1lOiBmaXh0dXJlLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IGZpeHR1cmUuZml4dHVyZUNvbmZpZ0lkLFxyXG4gICAgICAgICAgICBfaWQ6IGZpeHR1cmUuX2lkLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgICAgICBmaXh0dXJlR3JvdXAsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZWxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgdHlwZTogW1xyXG4gICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICA/IGVsZS5maXh0dXJlTmFtZVxyXG4gICAgICAgICAgICAgICAgOiBcIk90aGVyc1wiLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBjdXN0b21OYW1lOiBbXHJcbiAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgID8gXCJcIlxyXG4gICAgICAgICAgICAgICAgOiBlbGUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yT3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgICAgIGVsZUdyb3VwLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlVG9GaXh0dXJlQ29uZmlnSWRDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvT3RoZXJFbGVtZW50c0NoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdJbml0aWFsQ29udGVudCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuY2FudmFzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnJlb3JkZXJGaXh0dXJlKHRoaXMuZmxvb3JEYXRhKTtcclxuICAgIGF3YWl0IHRoaXMuZHJhd0xheW91dEVsZW1lbnRzKCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgMzAwKTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZUFsbFBvc2l0aW9ucygpO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUZlZWRiYWNrPy5maXh0dXJlSWQgJiZcclxuICAgICAgIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkICYmXHJcbiAgICAgIHRoaXMuYWN0aXZlSGlnaGxpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jYW52YXMuYWRkKHRoaXMuYWN0aXZlSGlnaGxpZ2h0KTtcclxuICAgICAgdGhpcy5rZWVwSGlnaGxpZ2h0T25Ub3AoKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZHJhd0JnKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZ1bGxMYXlvdXRCb3VuZHMoKSB7XHJcbiAgICBjb25zdCBvYmplY3RzID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgaWYgKCFvYmplY3RzLmxlbmd0aCkgcmV0dXJuIHsgbGVmdDogMCwgdG9wOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XHJcblxyXG4gICAgbGV0IG1pblggPSBJbmZpbml0eSxcclxuICAgICAgbWluWSA9IEluZmluaXR5LFxyXG4gICAgICBtYXhYID0gLUluZmluaXR5LFxyXG4gICAgICBtYXhZID0gLUluZmluaXR5O1xyXG5cclxuICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcclxuICAgICAgY29uc3QgcmVjdCA9IG9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHJlY3QubGVmdCk7XHJcbiAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCByZWN0LnRvcCk7XHJcbiAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCByZWN0LmxlZnQgKyByZWN0LndpZHRoKTtcclxuICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJlY3QudG9wICsgcmVjdC5oZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxlZnQ6IG1pblgsXHJcbiAgICAgIHRvcDogbWluWSxcclxuICAgICAgd2lkdGg6IG1heFggLSBtaW5YLFxyXG4gICAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZChkdXJhdGlvbiA9IDQwMCkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZW5hYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG4gICAgaWYgKCFib3VuZHMud2lkdGggfHwgIWJvdW5kcy5oZWlnaHQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjYW52YXNXID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgIGNvbnN0IGNhbnZhc0ggPSB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICAvLyBGaW5hbCB6b29tIHRvIGZpdCAod2l0aCBwYWRkaW5nKVxyXG4gICAgY29uc3Qgc2NhbGVYID0gY2FudmFzVyAvIGJvdW5kcy53aWR0aDtcclxuICAgIGNvbnN0IHNjYWxlWSA9IGNhbnZhc0ggLyBib3VuZHMuaGVpZ2h0O1xyXG4gICAgY29uc3QgdGFyZ2V0Wm9vbSA9IE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKSAqIDAuOTsgLy8gcGFkZGluZyAxMCVcclxuXHJcbiAgICAvLyBEZXNpcmVkIHZpZXdwb3J0IG9mZnNldCB0byBjZW50ZXIgbGF5b3V0XHJcbiAgICBjb25zdCB0YXJnZXRWcHQgPSBbXHJcbiAgICAgIC4uLih0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSB8fCBbMSwgMCwgMCwgMSwgMCwgMF0pLFxyXG4gICAgXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIHRhcmdldFZwdFswXSA9IHRhcmdldFpvb207IC8vIHNjYWxlWFxyXG4gICAgdGFyZ2V0VnB0WzNdID0gdGFyZ2V0Wm9vbTsgLy8gc2NhbGVZXHJcblxyXG4gICAgdGFyZ2V0VnB0WzRdID0gY2FudmFzVyAvIDIgLSAoYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyKSAqIHRhcmdldFpvb207IC8vIGNlbnRlciBYXHJcbiAgICB0YXJnZXRWcHRbNV0gPSBjYW52YXNIIC8gMiAtIChib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDIpICogdGFyZ2V0Wm9vbTsgLy8gY2VudGVyIFlcclxuXHJcbiAgICAvLyBDdXJyZW50IHZpZXdwb3J0IChzdGFydGluZyBwb2ludCBvZiBhbmltYXRpb24pXHJcbiAgICBjb25zdCBzdGFydFZwdCA9IFsuLi50aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSFdIGFzIGZhYnJpYy5UTWF0MkQ7XHJcblxyXG4gICAgZmFicmljLnV0aWwuYW5pbWF0ZSh7XHJcbiAgICAgIHN0YXJ0VmFsdWU6IDAsXHJcbiAgICAgIGVuZFZhbHVlOiAxLFxyXG4gICAgICBkdXJhdGlvbixcclxuICAgICAgZWFzaW5nOiBmYWJyaWMudXRpbC5lYXNlLmVhc2VPdXRDdWJpYyxcclxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hO1xyXG5cclxuICAgICAgICAvLyBJbnRlcnBvbGF0ZSBtYXRyaXggdmFsdWVzXHJcbiAgICAgICAgdnB0WzBdID0gc3RhcnRWcHRbMF0gKyAodGFyZ2V0VnB0WzBdIC0gc3RhcnRWcHRbMF0pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzNdID0gc3RhcnRWcHRbM10gKyAodGFyZ2V0VnB0WzNdIC0gc3RhcnRWcHRbM10pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzRdID0gc3RhcnRWcHRbNF0gKyAodGFyZ2V0VnB0WzRdIC0gc3RhcnRWcHRbNF0pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzVdID0gc3RhcnRWcHRbNV0gKyAodGFyZ2V0VnB0WzVdIC0gc3RhcnRWcHRbNV0pICogdmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0xheW91dEVsZW1lbnRzKCkge1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuXHJcbiAgICAgIGxldCB3YWxsO1xyXG5cclxuICAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uID8/PSB7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBlbGVtZW50LnVuaXQpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgZWxlbWVudC51bml0KTtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMud2FsbFRoaWNrbmVzcztcclxuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQuZGlzdGFuY2UsIGVsZW1lbnQudW5pdCk7XHJcbiAgICAgICAgaWYgKHdpZHRoIDwgaGVpZ2h0KSB3aWR0aCA9IHRoaXMud2FsbFRoaWNrbmVzcyArIDE7XHJcbiAgICAgICAgd2FsbCA9IGF3YWl0IHRoaXMuZHJhd1dhbGwodGhpcy5jYW52YXMsIHgsIHksIGhlaWdodCwgd2lkdGgsIGVsZW1lbnQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICAgIGNvbnN0IGFycm93V2lkdGggPSA4MDtcclxuICAgICAgICBjb25zdCBhcnJvd0hlaWdodCA9IDc1O1xyXG4gICAgICAgIGNvbnN0IGFycm93QmFzZSA9IDQwO1xyXG4gICAgICAgIHRoaXMuZHJhd0VudHJhbmNlKFxyXG4gICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICB4LFxyXG4gICAgICAgICAgeSxcclxuICAgICAgICAgIGFycm93V2lkdGgsXHJcbiAgICAgICAgICBhcnJvd0hlaWdodCxcclxuICAgICAgICAgIGFycm93QmFzZSxcclxuICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvciBjYWQgbGF5b3V0cyBvbmx5LlxyXG4gICAgdGhpcy5sYXlvdXRCb3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoKTtcclxuXHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25baW5kZXhdO1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSAhPT0gXCJ3YWxsXCIpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZUdyb3VwczogZmFicmljLkdyb3VwW10gPSBbXTtcclxuXHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWxlbWVudD8uZml4dHVyZXM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IGVsZW1lbnQuZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVIZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBmaXh0dXJlV2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LFxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBsZXQgeSA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSxcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIG92ZXJyaWRlIHRoZSBmaXh0dXJlIHBvc2l0aW9uIGZvciBpbml0aWFsIGNhZCBsYXlvdXRzLlxyXG4gICAgICAgIGlmICh0aGlzLmZsb29yRGF0YT8uY2FkTGF5b3V0KSB7XHJcbiAgICAgICAgICBjb25zdCBiYXNlWCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LFxyXG4gICAgICAgICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgY29uc3QgYmFzZVkgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSxcclxuICAgICAgICAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3Qgc3RhcnRCdWZmZXIgPSA0MDtcclxuICAgICAgICAgIGNvbnN0IHNwYWNpbmcgPSAxMzY7IC8vIGZpeHR1cmUgd2lkdGggKyBnYXAgKHB4KVxyXG4gICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gc3RhcnRCdWZmZXIgKyBzcGFjaW5nICogajtcclxuXHJcbiAgICAgICAgICAvLyB3YWxsIGFuZ2xlIGluIHJhZGlhbnNcclxuICAgICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gZmFicmljLnV0aWwuZGVncmVlc1RvUmFkaWFucyhlbGVtZW50LmFuZ2xlKTtcclxuXHJcbiAgICAgICAgICAvLyAtLS0tIGRpcmVjdGlvbiB2ZWN0b3IgKGFsb25nIHRoZSB3YWxsKSAtLS0tXHJcbiAgICAgICAgICBjb25zdCBkaXJYID0gTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG4gICAgICAgICAgY29uc3QgZGlyWSA9IE1hdGguc2luKGFuZ2xlUmFkKTtcclxuXHJcbiAgICAgICAgICAvLyAtLS0tIG5vcm1hbCB2ZWN0b3IgKHB1c2ggZml4dHVyZXMgaW5zaWRlIHdhbGwpIC0tLS1cclxuICAgICAgICAgIGNvbnN0IG5vcm1hbE9mZnNldCA9IHRoaXMud2FsbFRoaWNrbmVzczsgLy8gdHdlYWsgaWYgbmVlZGVkXHJcblxyXG4gICAgICAgICAgY29uc3Qgbm9ybVggPSBNYXRoLmNvcyhhbmdsZVJhZCArIE1hdGguUEkgLyAyKSAqIG5vcm1hbE9mZnNldDtcclxuICAgICAgICAgIGNvbnN0IG5vcm1ZID0gTWF0aC5zaW4oYW5nbGVSYWQgKyBNYXRoLlBJIC8gMikgKiBub3JtYWxPZmZzZXQ7XHJcblxyXG4gICAgICAgICAgLy8gLS0tLSBmaW5hbCBmaXh0dXJlIHBvc2l0aW9uIC0tLS1cclxuICAgICAgICAgIHggPSBiYXNlWCArIGRpclggKiBvZmZzZXQgKyBub3JtWDtcclxuICAgICAgICAgIHkgPSBiYXNlWSArIGRpclkgKiBvZmZzZXQgKyBub3JtWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVPYmogPSBhd2FpdCB0aGlzLmRyYXdGaXh0dXJlKFxyXG4gICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICB4LFxyXG4gICAgICAgICAgeSxcclxuICAgICAgICAgIGZpeHR1cmVIZWlnaHQsXHJcbiAgICAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAgICAgICBmaXh0dXJlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZml4dHVyZUdyb3Vwcy5wdXNoKGZpeHR1cmVPYmogYXMgZmFicmljLkdyb3VwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IGVsZW1lbnQub3RoZXJFbGVtZW50c1tqXTtcclxuICAgICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgICAgY29uc3QgYSA9IG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG4gICAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgIHgsXHJcbiAgICAgICAgICB5LFxyXG4gICAgICAgICAgYSxcclxuICAgICAgICAgIHcsXHJcbiAgICAgICAgICBoLFxyXG4gICAgICAgICAgb3RoZXJFbGVtZW50LFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAtLS0tIFBSRVBBUkUgRkxPT1IgRklYVFVSRSBQT1NJVElPTlMgKENBRCBPTkxZKSAtLS0tXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNhZExheW91dCAmJiB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHRlbXBPY2N1cGllZDogYW55W10gPSBbXTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZVdpZHRoUHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVIZWlnaHRQeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBzcG90ID0gdGhpcy5maW5kRW1wdHlDZW50ZXJTcG90KFxyXG4gICAgICAgICAgZml4dHVyZVdpZHRoUHgsXHJcbiAgICAgICAgICBmaXh0dXJlSGVpZ2h0UHgsXHJcbiAgICAgICAgICB0ZW1wT2NjdXBpZWQsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHNwb3QpIHtcclxuICAgICAgICAgIC8vIHN0b3JlIHBvc2l0aW9uIGJhY2sgaW50byBmaXh0dXJlIGRhdGEgKHNhbWUgYXMgdXNlci1hZGQgZmxvdylcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5mcm9tUGl4ZWxzKHNwb3QueCwgXCJmdFwiKTtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5mcm9tUGl4ZWxzKHNwb3QueSwgXCJmdFwiKTtcclxuXHJcbiAgICAgICAgICAvLyBtYXJrIHRoaXMgYXJlYSBhcyBvY2N1cGllZCBmb3IgbmV4dCBmaXh0dXJlc1xyXG4gICAgICAgICAgdGVtcE9jY3VwaWVkLnB1c2goe1xyXG4gICAgICAgICAgICB4OiBzcG90LngsXHJcbiAgICAgICAgICAgIHk6IHNwb3QueSxcclxuICAgICAgICAgICAgd2lkdGg6IGZpeHR1cmVXaWR0aFB4LFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGZpeHR1cmVIZWlnaHRQeCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmU/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ldO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZUhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZVdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSxcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoXHJcbiAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgeCxcclxuICAgICAgICB5LFxyXG4gICAgICAgIGZpeHR1cmVIZWlnaHQsXHJcbiAgICAgICAgZml4dHVyZVdpZHRoLFxyXG4gICAgICAgIGZpeHR1cmUsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmZsb29yRGF0YT8ub3RoZXJFbGVtZW50cz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3Qgb3RoZXJFbGVtZW50ID0gdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50c1tqXTtcclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKTtcclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgXCJmdFwiKTtcclxuICAgICAgY29uc3QgYSA9IG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG4gICAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwodGhpcy5jYW52YXMsIHgsIHksIGEsIHcsIGgsIG90aGVyRWxlbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBkcmF3Rml4dHVyZVJvd0xhYmVsKHRleHQ6IHN0cmluZywgeDogbnVtYmVyLCB5OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGxhYmVsID0gbmV3IGZhYnJpYy5UZXh0KHRleHQsIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBmb250U2l6ZTogMTQsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgIG9yaWdpblg6IFwibGVmdFwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQobGFiZWwpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd1dhbGwoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBlbGVtZW50RGF0YTogYW55LFxyXG4gICkge1xyXG4gICAgY29uc3QgcmFkaXVzID0gNTtcclxuICAgIGNvbnN0IGZpbGxDb2xvciA9IFwiI0Y2RkNGRlwiO1xyXG4gICAgY29uc3Qgc3Ryb2tlQ29sb3IgPSBcIiNEMEQ1RERcIjtcclxuICAgIGNvbnN0IGxhYmVsQ29sb3IgPSBcIiMwMDlCRjNcIjtcclxuICAgIGxldCB0ZXh0ID0gYCR7dGhpcy50aXRsZUNhc2UudHJhbnNmb3JtKGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlKX0gJHtcclxuICAgICAgZWxlbWVudERhdGEuZWxlbWVudE51bWJlclxyXG4gICAgfWA7XHJcblxyXG4gICAgY29uc3Qgd2FsbCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IDAsXHJcbiAgICAgIHRvcDogMCxcclxuICAgICAgd2lkdGgsXHJcbiAgICAgIGhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgZmlsbDogZmlsbENvbG9yLFxyXG4gICAgICBzdHJva2U6IHN0cm9rZUNvbG9yLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIHN0cm9rZVVuaWZvcm06IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBjZW50ZXJYID0gd2lkdGggLyAyO1xyXG4gICAgY29uc3QgY2VudGVyWSA9IGhlaWdodCAvIDI7XHJcbiAgICBjb25zdCBpc1ZlcnRpY2FsID0gaGVpZ2h0ID4gd2lkdGg7XHJcblxyXG4gICAgY29uc3QgbGFiZWwgPSBuZXcgZmFicmljLkZhYnJpY1RleHQodGV4dCwge1xyXG4gICAgICBsZWZ0OiBjZW50ZXJYLFxyXG4gICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgIGZvbnRTaXplOiAxMCxcclxuICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBhbmdsZTogaXNWZXJ0aWNhbCA/IC05MCA6IDAsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYXJyb3dIZWFkID0gNTtcclxuICAgIGNvbnN0IGVsZW1lbnRzOiBmYWJyaWMuT2JqZWN0W10gPSBbd2FsbCwgbGFiZWxdO1xyXG5cclxuICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGxhYmVsLndpZHRoIHx8IDA7XHJcbiAgICAgIGNvbnN0IHRvcEFycm93WSA9IDU7XHJcbiAgICAgIGNvbnN0IHRvcEFycm93RW5kWSA9IGNlbnRlclkgLSB0ZXh0V2lkdGggLyAyIC0gNTtcclxuXHJcbiAgICAgIGlmICh0b3BBcnJvd0VuZFkgPiB0b3BBcnJvd1kgKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFtjZW50ZXJYLCB0b3BBcnJvd1ksIGNlbnRlclgsIHRvcEFycm93RW5kWV0sIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBjZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IHRvcEFycm93WSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGJvdHRvbUFycm93U3RhcnRZID0gY2VudGVyWSArIHRleHRXaWR0aCAvIDIgKyA1O1xyXG4gICAgICBjb25zdCBib3R0b21BcnJvd0VuZFkgPSBoZWlnaHQgLSA1O1xyXG5cclxuICAgICAgaWYgKGJvdHRvbUFycm93RW5kWSA+IGJvdHRvbUFycm93U3RhcnRZICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW2NlbnRlclgsIGJvdHRvbUFycm93U3RhcnRZLCBjZW50ZXJYLCBib3R0b21BcnJvd0VuZFldLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBjZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGJvdHRvbUFycm93RW5kWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAxODAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdGV4dFdpZHRoID0gbGFiZWwud2lkdGggfHwgMDtcclxuICAgICAgY29uc3QgbGVmdEFycm93U3RhcnRYID0gNTtcclxuICAgICAgY29uc3QgbGVmdEFycm93RW5kWCA9IGNlbnRlclggLSB0ZXh0V2lkdGggLyAyIC0gNTtcclxuXHJcbiAgICAgIGlmIChsZWZ0QXJyb3dFbmRYID4gbGVmdEFycm93U3RhcnRYICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShbbGVmdEFycm93U3RhcnRYLCBjZW50ZXJZLCBsZWZ0QXJyb3dFbmRYLCBjZW50ZXJZXSwge1xyXG4gICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGxlZnRBcnJvd1N0YXJ0WCxcclxuICAgICAgICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByaWdodEFycm93U3RhcnRYID0gY2VudGVyWCArIHRleHRXaWR0aCAvIDIgKyA1O1xyXG4gICAgICBjb25zdCByaWdodEFycm93RW5kWCA9IHdpZHRoIC0gNTtcclxuXHJcbiAgICAgIGlmIChyaWdodEFycm93RW5kWCA+IHJpZ2h0QXJyb3dTdGFydFggKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICBbcmlnaHRBcnJvd1N0YXJ0WCwgY2VudGVyWSwgcmlnaHRBcnJvd0VuZFgsIGNlbnRlclldLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiByaWdodEFycm93RW5kWCxcclxuICAgICAgICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsb2NrU3ZnU3RyaW5nID0gYDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICA8cGF0aCBkPVwiTTcgMTFWN0M3IDUuNjczOTIgNy41MjY3OCA0LjQwMjE1IDguNDY0NDcgMy40NjQ0N0M5LjQwMjE1IDIuNTI2NzggMTAuNjczOSAyIDEyIDJDMTMuMzI2MSAyIDE0LjU5NzkgMi41MjY3OCAxNS41MzU1IDMuNDY0NDdDMTYuNDczMiA0LjQwMjE1IDE3IDUuNjczOTIgMTcgN1YxMU01IDExSDE5QzIwLjEwNDYgMTEgMjEgMTEuODk1NCAyMSAxM1YyMEMyMSAyMS4xMDQ2IDIwLjEwNDYgMjIgMTkgMjJINUMzLjg5NTQzIDIyIDMgMjEuMTA0NiAzIDIwVjEzQzMgMTEuODk1NCAzLjg5NTQzIDExIDUgMTFaXCIgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgIDwvc3ZnPmA7XHJcblxyXG4gICAgbGV0IGxvYWRlZFNWRzogYW55ID0gYXdhaXQgZmFicmljLmxvYWRTVkdGcm9tU3RyaW5nKGxvY2tTdmdTdHJpbmcpO1xyXG5cclxuICAgIGxldCBsb2NrU3ZnID0gZmFicmljLnV0aWwuZ3JvdXBTVkdFbGVtZW50cyhcclxuICAgICAgbG9hZGVkU1ZHLm9iamVjdHMsXHJcbiAgICAgIGxvYWRlZFNWRy5vcHRpb25zLFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB3YWxsQ2VudGVyWCA9IHdpZHRoIC8gMjtcclxuICAgIGNvbnN0IHdhbGxDZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuXHJcbiAgICBsb2NrU3ZnLnNjYWxlVG9XaWR0aCgyMCk7XHJcbiAgICBsb2NrU3ZnLnNjYWxlVG9IZWlnaHQoMjApO1xyXG5cclxuICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgIGxvY2tTdmcuc2V0KHtcclxuICAgICAgICBsZWZ0OiB3YWxsQ2VudGVyWCxcclxuICAgICAgICB0b3A6IHdhbGxDZW50ZXJZLFxyXG4gICAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxvY2tTdmcuc2V0KHtcclxuICAgICAgICBsZWZ0OiB3YWxsQ2VudGVyWCxcclxuICAgICAgICB0b3A6IHdhbGxDZW50ZXJZLFxyXG4gICAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9ja1N2Zy5zZXQoe1xyXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGxvY2tTdmcub24oXCJtb3VzZWRvd25cIiwgKG9wdCkgPT4ge1xyXG4gICAgICBpZiAob3B0ICYmIG9wdC5lICYmIG9wdC5lLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgIG9wdC5lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgZWxlbWVudERhdGEuaXNMb2NrZWQgPSAhZWxlbWVudERhdGE/LmlzTG9ja2VkO1xyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGVsZW1lbnRzLnB1c2gobG9ja1N2Zyk7XHJcblxyXG4gICAgbGV0IG1vZENlbnRlclggPSB4O1xyXG4gICAgbGV0IG1vZENlbnRlclkgPSB5O1xyXG4gICAgbGV0IGFuZ2xlID0gZWxlbWVudERhdGEuYW5nbGU7XHJcblxyXG4gICAgaWYgKHRoaXMuZmxvb3JEYXRhLmNhZExheW91dCkge1xyXG4gICAgICAvLyBpZiAoZWxlbWVudERhdGEuZGlyZWN0aW9uID09PSBcInVwXCIpIHtcclxuICAgICAgLy8gICBtb2RDZW50ZXJYID0gbW9kQ2VudGVyWDtcclxuICAgICAgLy8gICBtb2RDZW50ZXJZID0gbW9kQ2VudGVyWSArIGNlbnRlclg7XHJcbiAgICAgIC8vIH0gZWxzZSBpZiAoZWxlbWVudERhdGEuZGlyZWN0aW9uID09PSBcImRvd25cIikge1xyXG4gICAgICAvLyAgIG1vZENlbnRlclggPSBtb2RDZW50ZXJYO1xyXG4gICAgICAvLyAgIG1vZENlbnRlclkgPSBtb2RDZW50ZXJZIC0gY2VudGVyWDtcclxuICAgICAgLy8gfSBlbHNlIGlmIChlbGVtZW50RGF0YS5kaXJlY3Rpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAvLyAgIG1vZENlbnRlclggPSBtb2RDZW50ZXJYICsgY2VudGVyWDtcclxuICAgICAgLy8gICBtb2RDZW50ZXJZID0gbW9kQ2VudGVyWTtcclxuICAgICAgLy8gfSBlbHNlIGlmIChlbGVtZW50RGF0YS5kaXJlY3Rpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgIC8vICAgbW9kQ2VudGVyWCA9IG1vZENlbnRlclggLSBjZW50ZXJYO1xyXG4gICAgICAvLyAgIG1vZENlbnRlclkgPSBtb2RDZW50ZXJZO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGFuZ2xlID1cclxuICAgICAgLy8gICBlbGVtZW50RGF0YS5hbmdsZSA+IDE4MFxyXG4gICAgICAvLyAgICAgPyBlbGVtZW50RGF0YS5hbmdsZSAtIDE4MFxyXG4gICAgICAvLyAgICAgOiBlbGVtZW50RGF0YS5hbmdsZSArIDE4MDtcclxuICAgICAgLy8gZWxlbWVudERhdGEuYW5nbGUgPSBhbmdsZTtcclxuICAgICAgLy8gZWxlbWVudERhdGEucmVsYXRpdmVQb3NpdGlvbi54ID0gbW9kQ2VudGVyWDtcclxuICAgICAgLy8gZWxlbWVudERhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gbW9kQ2VudGVyWTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoZWxlbWVudHMsIHtcclxuICAgICAgbGVmdDogbW9kQ2VudGVyWCxcclxuICAgICAgdG9wOiBtb2RDZW50ZXJZLFxyXG4gICAgICBoYXNDb250cm9sczogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdYOiBpc1ZlcnRpY2FsLFxyXG4gICAgICBsb2NrU2NhbGluZ1k6ICFpc1ZlcnRpY2FsLFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICBhbmdsZTogYW5nbGUsXHJcbiAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAvLyAuLi4odGhpcy5mbG9vckRhdGEuY2FkTGF5b3V0XHJcbiAgICAgIC8vICAgPyB7IG9yaWdpblg6IFwiY2VudGVyXCIsIG9yaWdpblk6IFwiY2VudGVyXCIgfVxyXG4gICAgICAvLyAgIDoge30pLFxyXG4gICAgICAvLyBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAvLyBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnREYXRhO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG5cclxuICAgIC8vIElmIG5ld2x5IGFkZGVkLCBmb2N1cyBpdCBvbmNlXHJcbiAgICBpZiAoKGVsZW1lbnREYXRhIGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGdyb3VwKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuICAgICAgZGVsZXRlIChlbGVtZW50RGF0YSBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBncm91cDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdGaXh0dXJlKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgZml4dHVyZURhdGE6IGFueSxcclxuICApIHtcclxuICAgIGxldCBmaXh0dXJlQ29sb3I6IGFueTtcclxuICAgIGlmIChbXCJmaXh0dXJlXCIsIFwiZml4dHVyZS1yZWRvXCJdLmluY2x1ZGVzKHRoaXMucHVibGlzaGluZ1N0YXRlKSkge1xyXG4gICAgICBmaXh0dXJlQ29sb3IgPSB7XHJcbiAgICAgICAgcHJpbWFyeTpcclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcIlwiICYmIGZpeHR1cmVEYXRhLnRhc2tTdGF0dXMgPT0gXCJzdWJtaXRcIlxyXG4gICAgICAgICAgICA/IFwiI2E1YTZhOFwiXHJcbiAgICAgICAgICAgIDogZml4dHVyZURhdGEuc3RhdHVzID09IFwiYWdyZWVcIlxyXG4gICAgICAgICAgICAgID8gXCIjNkNFOUE2XCJcclxuICAgICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIGZpbGw6XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJcIiAmJiBmaXh0dXJlRGF0YS50YXNrU3RhdHVzID09IFwic3VibWl0XCJcclxuICAgICAgICAgICAgPyBcIiNmM2Y0ZjhcIlxyXG4gICAgICAgICAgICA6IGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcImFncmVlXCJcclxuICAgICAgICAgICAgICA/IFwiIzZDRTlBNlwiXHJcbiAgICAgICAgICAgICAgOiBcIiNFQUY4RkZcIixcclxuICAgICAgICB2bUZpbGw6XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJcIiAmJiBmaXh0dXJlRGF0YS50YXNrU3RhdHVzID09IFwic3VibWl0XCJcclxuICAgICAgICAgICAgPyBcIiNhNWE2YThcIlxyXG4gICAgICAgICAgICA6IFwiIzY5MzhFRlwiLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgaWYgKGZpeHR1cmVEYXRhLmZpeHR1cmVOYW1lID09PSBcInNwYWNlXCIpIHJldHVybjtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBtYWluQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRvcFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgdG9wSGVpZ2h0ID0gKDE1IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IHRvcFggPSB4ICsgKHdpZHRoIC0gdG9wV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IHRvcFkgPSB5ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCB0b3BDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB0b3BYLFxyXG4gICAgICB0b3A6IHRvcFksXHJcbiAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgaGVpZ2h0OiB0b3BIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgaW5uZXJCb3hIZWlnaHQgPSB0b3BIZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaW5uZXJUb3BCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWX0gJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIHJhZGl1c30gXHJcbiAgICAgICAgUSAke3RvcFh9ICR7dG9wWX0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB0b3BGaWVsZFRleHQgPVxyXG4gICAgICAoZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiXHJcbiAgICAgICAgPyBgV2FsbC0ke2ZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyfSAtIGBcclxuICAgICAgICA6IFwiRmxvb3IgLSBcIikgK1xyXG4gICAgICBgRml4dHVyZSAke1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlclxyXG4gICAgICAgICAgPyBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgK1xyXG4gICAgICAgICAgICAoZml4dHVyZURhdGE/LmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgICAgICA/IFwiIC0gRlgtXCIgKyBmaXh0dXJlRGF0YS5maXh0dXJlTnVtYmVyXHJcbiAgICAgICAgICAgICAgOiBcIlwiKVxyXG4gICAgICAgICAgOiBcIm5ld1wiXHJcbiAgICAgIH1gO1xyXG5cclxuICAgIGNvbnN0IHRvcFRleHQgPSBuZXcgZmFicmljLlRleHRib3godG9wRmllbGRUZXh0LCB7XHJcbiAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgIHRvcDogdG9wWSArIGlubmVyQm94SGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBpbm5lckJveEhlaWdodCxcclxuICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuXHJcbiAgICBjb25zdCBpbm5lckJvdHRvbUJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYfSAke3NlY29uZEJveFl9IFxyXG4gICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZfSBcclxuICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke1xyXG4gICAgICB0b3BYICsgdG9wV2lkdGggLSByYWRpdXNcclxuICAgIH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgTCAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYfSAke1xyXG4gICAgICBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgIH0gXHJcbiAgICBMICR7dG9wWH0gJHtzZWNvbmRCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IFwiIzM0NDA1NFwiLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgbGV0IGJvdHRvbVRleHQ7XHJcblxyXG4gICAgY29uc3QgdGV4dENvbnRlbnQgPSBmaXh0dXJlRGF0YS5maXh0dXJlTmFtZS5pbmNsdWRlcyhcIi1mdFwiKVxyXG4gICAgICA/IGZpeHR1cmVEYXRhLmZpeHR1cmVOYW1lXHJcbiAgICAgIDogYCR7Zml4dHVyZURhdGEuZml4dHVyZU5hbWV9IC0gJHtmaXh0dXJlRGF0YS5maXh0dXJlV2lkdGgudmFsdWV9ICR7Zml4dHVyZURhdGEuZml4dHVyZVdpZHRoLnVuaXR9YDtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVCb3R0b21UZXh0ID0gKGZzOiBhbnkpID0+XHJcbiAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0Q29udGVudCwge1xyXG4gICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiNGRkZGRkZcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgZG8ge1xyXG4gICAgICBib3R0b21UZXh0ID0gY3JlYXRlQm90dG9tVGV4dChmb250U2l6ZSk7XHJcbiAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgIH0gd2hpbGUgKGJvdHRvbVRleHQuaGVpZ2h0ID4gaW5uZXJCb3hIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0gdG9wWSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgbWlkQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgdG9wOiBtaWRZLFxyXG4gICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgIGhlaWdodDogbWlkSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNoZWxmQ291bnQgPSBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8ubGVuZ3RoO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKHNoZWxmQ291bnQgKyAyKTtcclxuICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WX0gJHttaWRYICsgbWlkV2lkdGh9ICR7XHJcbiAgICAgICAgICBmaXJzdEJveFkgKyByYWRpdXNcclxuICAgICAgICB9IFxyXG4gICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICBMICR7bWlkWH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIHJhZGl1c30gXHJcbiAgICAgICAgUSAke21pZFh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyByYWRpdXN9ICR7Zmlyc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICA6IFwiI0VBRjhGRlwiLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGZpcnN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmhlYWRlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5oZWFkZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogZmlyc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNyxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICBmaWxsOiBmaXh0dXJlRGF0YS5pc3N1ZSA/IFwiI2ZmZlwiIDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNoZWx2ZXMgPSBbXTtcclxuICAgIGNvbnN0IHNoZWxmSGVpZ2h0ID0gbWlkSGVpZ2h0IC0gMiAqIGJveEhlaWdodDtcclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMVwiKSB7XHJcbiAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogc2hlbGZIZWlnaHQsXHJcbiAgICAgICAgLy8gc3Ryb2tlOiAnIzUxQzFGRicsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgdGV4dCA9IGZpeHR1cmVEYXRhPy5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGggYW5kIHNocmluayB0byBmaXQgdmVydGljYWwgc3BhY2VcclxuICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBzaGVsZkhlaWdodCAqIDAuODtcclxuICAgICAgbGV0IGZvbnRTaXplTDEgPSA2O1xyXG5cclxuICAgICAgY29uc3QgY3JlYXRlV3JhcHBlZFRleHRib3ggPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemVMMSA+IDIpIHtcclxuICAgICAgICBmb250U2l6ZUwxIC09IDAuNTtcclxuICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBNYXRoLm1pbihtYXhUZXh0V2lkdGgsIHdyYXBwZWRUZXh0LndpZHRoISkgKyBwYWRkaW5nLFxyXG4gICAgICAgIGhlaWdodDogd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyAyLFxyXG4gICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgcng6IDEsXHJcbiAgICAgICAgcnk6IDEsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmLCBiYWNrZ3JvdW5kLCB3cmFwcGVkVGV4dCk7XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoZWxmQ291bnQ7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoaSArIDEpO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuXHJcbiAgICAgICAgaWYgKGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0uc2hlbGZUeXBlID09PSBcInRyYXlcIikge1xyXG4gICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnRyYXlSb3dzIHx8IDE7XHJcbiAgICAgICAgICBjb25zdCByb3dTcGFjaW5nID0gYm94SGVpZ2h0IC8gdHJheVJvd3M7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVZID0gYm94WSArIHIgKiByb3dTcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZXh0ID1cclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgICAvLyBMMjogU2luZ2xlLWxpbmUgZWxsaXBzaXMgYWdhaW5zdCBmdWxsIHNoZWxmIHdpZHRoXHJcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSA2O1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IE1hdGgubWF4KDAsIG1pZFdpZHRoIC0gaG9yaXpvbnRhbFBhZGRpbmcpO1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBib3hIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbnRTaXplID0gNTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9ICh0OiBzdHJpbmcpID0+XHJcbiAgICAgICAgICBuZXcgZmFicmljLlRleHQodCwge1xyXG4gICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGRpc3BsYXlUZXh0ID0gdGV4dDtcclxuICAgICAgICBsZXQgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgY29uc3QgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgbGV0IGxlZnRJZHggPSAwO1xyXG4gICAgICAgICAgbGV0IHJpZ2h0SWR4ID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgd2hpbGUgKGxlZnRJZHggPCByaWdodElkeCkge1xyXG4gICAgICAgICAgICBjb25zdCBtaWRJZHggPSBNYXRoLmZsb29yKChsZWZ0SWR4ICsgcmlnaHRJZHgpIC8gMik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRleHQuc2xpY2UoMCwgbWlkSWR4KSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoY2FuZGlkYXRlKTtcclxuICAgICAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgICAgIHJpZ2h0SWR4ID0gbWlkSWR4O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxlZnRJZHggPSBtaWRJZHggKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkaXNwbGF5VGV4dCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGVmdElkeCAtIDEpKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTWF0aC5taW4obWF4VGV4dEhlaWdodCwgbWVhc3VyZWQuaGVpZ2h0ID8/IDEwKSArIDIsXHJcbiAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbmFsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dChkaXNwbGF5VGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goYmFja2dyb3VuZCwgZmluYWxUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlRGF0YS5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwzXCIpIHtcclxuICAgICAgY29uc3Qgc2VxdWVudGlhbEdyb3VwczogeyB6b25lOiBzdHJpbmc7IHNoZWx2ZXM6IGFueVtdIH1bXSA9IFtdO1xyXG5cclxuICAgICAgbGV0IHByZXZpb3VzWm9uZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IHNoZWxmIG9mIGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnKSB7XHJcbiAgICAgICAgY29uc3Qgem9uZSA9IHNoZWxmLnpvbmUgfHwgXCJVbmtub3duXCI7XHJcbiAgICAgICAgaWYgKHpvbmUgIT09IHByZXZpb3VzWm9uZSkge1xyXG4gICAgICAgICAgc2VxdWVudGlhbEdyb3Vwcy5wdXNoKHsgem9uZSwgc2hlbHZlczogW3NoZWxmXSB9KTtcclxuICAgICAgICAgIHByZXZpb3VzWm9uZSA9IHpvbmU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHNbc2VxdWVudGlhbEdyb3Vwcy5sZW5ndGggLSAxXS5zaGVsdmVzLnB1c2goc2hlbGYpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGN1cnJlbnRTaGVsZkluZGV4ID0gMDtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc2VxdWVudGlhbEdyb3Vwcykge1xyXG4gICAgICAgIGNvbnN0IHsgem9uZSwgc2hlbHZlczogc2hlbHZlc0luR3JvdXAgfSA9IGdyb3VwO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFN0YXJ0SW5kZXggPSBjdXJyZW50U2hlbGZJbmRleDtcclxuICAgICAgICBjb25zdCBncm91cExlbmd0aCA9IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGdyb3VwU3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tWSA9IGdyb3VwVG9wWSArIGJveEhlaWdodCAqIGdyb3VwTGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBzaGVsZkRhdGEgPSBzaGVsdmVzSW5Hcm91cFtqXTtcclxuICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoY3VycmVudFNoZWxmSW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBzaGVsZlJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmUmVjdCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNoZWxmRGF0YS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gc2hlbGZEYXRhLnRyYXlSb3dzIHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZiA9IHNoZWxmRGF0YS5wcm9kdWN0UGVyU2hlbGYgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uU3BhY2luZyA9IG1pZFdpZHRoIC8gcHJvZHVjdFBlclNoZWxmO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBjID0gMTsgYyA8IHByb2R1Y3RQZXJTaGVsZjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVggPSBtaWRYICsgYyAqIGNvbHVtblNwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICAgIFtsaW5lWCwgYm94WSwgbGluZVgsIGJveFkgKyBib3hIZWlnaHRdLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY3VycmVudFNoZWxmSW5kZXgrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgIFttaWRYLCBncm91cEJvdHRvbVksIG1pZFggKyBtaWRXaWR0aCwgZ3JvdXBCb3R0b21ZXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChncm91cEJvdHRvbUxpbmUpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KHpvbmUsIHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC0gbGFiZWxQYWRkaW5nLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQm90dG9tWSxcclxuICAgICAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgZmlsbDogXCIjNzA3MDcwXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwicmlnaHRcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgICAgdGV4dEFsaWduOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2gobGFiZWxUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWCA9IG1pZFggKyBtaWRXaWR0aCAvIDI7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJZID0gZ3JvdXBUb3BZICsgKGdyb3VwQm90dG9tWSAtIGdyb3VwVG9wWSkgLyAyO1xyXG5cclxuICAgICAgICBjb25zdCBzZWN0aW9uQnJhbmRzID0gbmV3IFNldCgpO1xyXG5cclxuICAgICAgICBzaGVsdmVzSW5Hcm91cD8uZm9yRWFjaCgoc2hlbGYpID0+IHtcclxuICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWU/LmZvckVhY2goKGJyYW5kOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbkJyYW5kcy5hZGQoYnJhbmQpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChbLi4uc2VjdGlvbkJyYW5kc10ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gWy4uLnNlY3Rpb25CcmFuZHNdLmpvaW4oXCIgKyBcIik7XHJcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgY29uc3QgcmVjdFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gMjA7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNjtcclxuICAgICAgICAgIGxldCB3cmFwcGVkVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVUZXh0Ym94ID0gKGZzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjQwMFwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiBtYXhUZXh0V2lkdGgsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlVGV4dGJveChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBjb25zdCByZWN0SGVpZ2h0ID0gd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyBwYWRkaW5nO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyVGV4dCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiBncm91cENlbnRlclksXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiByZWN0V2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogcmVjdEhlaWdodCxcclxuICAgICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICByeDogMSxcclxuICAgICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBDZW50ZXJUZXh0LCB3cmFwcGVkVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhPy52bUNvbmZpZz8ubGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZURhdGEudm1Db25maWcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCB2bSA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnW2ldO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdm0uc3RhcnRZUG9zaXRpb24gLSAxO1xyXG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdm0uZW5kWVBvc2l0aW9uIC0gMTtcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgc3RhcnRJbmRleCA+IGZpeHR1cmVEYXRhPy5zaGVsZkNvbmZpZy5sZW5ndGggfHxcclxuICAgICAgICAgIGVuZEluZGV4ID4gZml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmxlbmd0aFxyXG4gICAgICAgIClcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZlRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IHNoZWxmSGVpZ2h0U3BhbiA9IGJveEhlaWdodCAqIChlbmRJbmRleCAtIHN0YXJ0SW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgbGV0IHZtSGVpZ2h0UHg6IG51bWJlciA9IHNoZWxmSGVpZ2h0U3BhbjtcclxuICAgICAgICBsZXQgeTogbnVtYmVyID0gc2hlbGZUb3BZO1xyXG5cclxuICAgICAgICBpZiAodm0ueVpvbmUgJiYgdm0ueVpvbmUgIT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB2bUhlaWdodFB4ID0gc2hlbGZIZWlnaHRTcGFuIC8gMztcclxuXHJcbiAgICAgICAgICBzd2l0Y2ggKHZtLnlab25lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0b3BcIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJib3R0b21cIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgMiAqIHZtSGVpZ2h0UHg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB4ID0gbWlkWDtcclxuICAgICAgICBsZXQgd2lkdGggPSBtaWRXaWR0aDtcclxuXHJcbiAgICAgICAgaWYgKCF2bS54Wm9uZSB8fCB2bS54Wm9uZSA9PT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgc2VjdGlvbldpZHRoID0gbWlkV2lkdGggLyAzO1xyXG4gICAgICAgICAgc3dpdGNoICh2bS54Wm9uZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwibWlkZGxlXCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFggKyBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYICsgMiAqIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZtLnZtSW1hZ2VVcmwpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZtSW1hZ2U6IGFueSA9IGF3YWl0IGZhYnJpYy5GYWJyaWNJbWFnZS5mcm9tVVJMKFxyXG4gICAgICAgICAgICAgIGAke3RoaXMuY2RuVXJsfSR7dm0udm1JbWFnZVVybH0/dj0ke0RhdGUubm93KCl9YCxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBjcm9zc09yaWdpbjogXCJhbm9ueW1vdXNcIixcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdm1JbWFnZS5zZXQoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHNjYWxlWDogd2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtSW1hZ2UpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgaW1hZ2UgZm9yIFZNOiAke3ZtLnZtSW1hZ2VVcmx9YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgdm1Cb3ggPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8udm1GaWxsID8/IFwiIzY5MzhFRlwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgICAgICAgbGV0IHZtVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVWbVRleHQgPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHZtLnZtTmFtZSB8fCBcIlwiLCB7XHJcbiAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHZtVGV4dCA9IGNyZWF0ZVZtVGV4dChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHZtVGV4dC5oZWlnaHQgPiB2bUhlaWdodFB4ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHZtQm94LCB2bVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHNoZWxmQ291bnQgKyAxKTtcclxuICAgIGNvbnN0IGxhc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICAgIG1pZFggKyBtaWRXaWR0aCAtIHJhZGl1c1xyXG4gICAgICAgIH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7XHJcbiAgICAgICAgICBsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgTCAke21pZFh9ICR7bGFzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICA/IFwiI0ZFRTRFMlwiXHJcbiAgICAgICAgICAgIDogXCIjRUFGOEZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbGFzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGAke2ZpeHR1cmVEYXRhPy5mb290ZXI/LmxhYmVsID8gZml4dHVyZURhdGEuZm9vdGVyLmxhYmVsIDogXCJcIn1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGxhc3RCb3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlndGg6IGJveEhlaWdodCxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBib3R0b21IZWlnaHQgPSAoMyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBib3R0b21YID0geCArICh3aWR0aCAtIGJvdHRvbVdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBib3R0b21ZID0gbWlkWSArIG1pZEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgYm90dG9tQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogYm90dG9tWCxcclxuICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tVGV4dENvbnRlbnQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGBTaGVsdmVzIC0gJHtmaXh0dXJlRGF0YT8uc2hlbGZDb25maWc/Lmxlbmd0aCA/PyAwfSAuIFByb2R1Y3RzIC0gICR7XHJcbiAgICAgICAgZml4dHVyZURhdGE/LmZpeHR1cmVDYXBhY2l0eSA/PyAwXHJcbiAgICAgIH0gLiBWTSAtICR7Zml4dHVyZURhdGE/LnZtQ29uZmlnPy5sZW5ndGggPz8gMH1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogYm90dG9tWCArIGJvdHRvbVdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzdmdTdHJpbmcgPSBgXHJcbiAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICA8cmVjdCB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiByeD1cIjEyXCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICA8cGF0aCBkPVwiTTE0Ljk5OTggNi42MDAwMUMxNS4xNTc0IDYuNDQyNDMgMTUuMzQ0NSA2LjMxNzQyIDE1LjU1MDQgNi4yMzIxNEMxNS43NTYzIDYuMTQ2ODUgMTUuOTc3IDYuMTAyOTYgMTYuMTk5OCA2LjEwMjk2QzE2LjQyMjcgNi4xMDI5NiAxNi42NDM0IDYuMTQ2ODUgMTYuODQ5MiA2LjIzMjE0QzE3LjA1NTEgNi4zMTc0MiAxNy4yNDIyIDYuNDQyNDMgMTcuMzk5OCA2LjYwMDAxQzE3LjU1NzQgNi43NTc2IDE3LjY4MjQgNi45NDQ2OCAxNy43Njc3IDcuMTUwNThDMTcuODUzIDcuMzU2NDggMTcuODk2OSA3LjU3NzE1IDE3Ljg5NjkgNy44MDAwMUMxNy44OTY5IDguMDIyODggMTcuODUzIDguMjQzNTUgMTcuNzY3NyA4LjQ0OTQ1QzE3LjY4MjQgOC42NTUzNSAxNy41NTc0IDguODQyNDMgMTcuMzk5OCA5LjAwMDAxTDkuMjk5ODIgMTcuMUw1Ljk5OTgyIDE4TDYuODk5ODIgMTQuN0wxNC45OTk4IDYuNjAwMDFaXCIgc3Ryb2tlPVwiIzFEMjkzOVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgPC9zdmc+YDtcclxuXHJcbiAgICBsZXQgbG9hZGVkU1ZHOiBhbnkgPSBhd2FpdCBmYWJyaWMubG9hZFNWR0Zyb21TdHJpbmcoc3ZnU3RyaW5nKTtcclxuXHJcbiAgICBsZXQgZWRpdFN2ZyA9IGZhYnJpYy51dGlsLmdyb3VwU1ZHRWxlbWVudHMoXHJcbiAgICAgIGxvYWRlZFNWRy5vYmplY3RzLFxyXG4gICAgICBsb2FkZWRTVkcub3B0aW9ucyxcclxuICAgICk7XHJcblxyXG4gICAgZWRpdFN2Zy5zZXQoe1xyXG4gICAgICBzY2FsZVg6IDEsXHJcbiAgICAgIHNjYWxlWTogMSxcclxuICAgICAgbGVmdDogeCArIHdpZHRoIC0gMzAsXHJcbiAgICAgIHRvcDogeSArIDE0LFxyXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsIC8vIGFsbG93IGV2ZW50c1xyXG4gICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBlZGl0U3ZnLm9uKFwibW91c2Vkb3duXCIsIChvcHQpID0+IHtcclxuICAgICAgaWYgKG9wdCAmJiBvcHQuZSAmJiBvcHQuZS5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgICBvcHQuZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHtcclxuICAgICAgICBmaXh0dXJlVHlwZTogZml4dHVyZURhdGEuZml4dHVyZVR5cGUsXHJcbiAgICAgICAgd2FsbEluZGV4OiBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcixcclxuICAgICAgICBmaXh0dXJlSW5kZXg6IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVEYXRhLl9pZCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50TnVtYmVyID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS53YWxsSW5kZXgsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHdhbGwuZml4dHVyZXMuZmluZChcclxuICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBmaXh0dXJlO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5maW5kKFxyXG4gICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IGZpeHR1cmU7XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRoaXM/LnNlbGVjdGVkRml4dHVyZURhdGE/LnRhc2tUeXBlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YTtcclxuICAgICAgdGhpcy5lZGl0Rml4dHVyZSA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgYW5nbGUgPSBmaXh0dXJlRGF0YT8ucmVsYXRpdmVQb3NpdGlvbj8uYW5nbGU7XHJcblxyXG4gICAgaWYgKHRoaXMuZmxvb3JEYXRhLmNhZExheW91dCAmJiBmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgY29uc3Qgd2FsbERhdGEgPSB0aGlzLmdldFdhbGxCeU51bWJlcihcclxuICAgICAgICBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcixcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YT8uYW5nbGUgfHwgMDtcclxuICAgICAgYW5nbGUgPSBhbmdsZURlZztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFxyXG4gICAgICBbXHJcbiAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICB0b3BDb250YWluZXIsXHJcbiAgICAgICAgaW5uZXJUb3BCb3gsXHJcbiAgICAgICAgdG9wVGV4dCxcclxuICAgICAgICBpbm5lckJvdHRvbUJveCxcclxuICAgICAgICBib3R0b21UZXh0LFxyXG4gICAgICAgIG1pZENvbnRhaW5lcixcclxuICAgICAgICBmaXJzdEJveCxcclxuICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgLi4uc2hlbHZlcyxcclxuICAgICAgICBsYXN0Qm94LFxyXG4gICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgIGJvdHRvbUNvbnRhaW5lcixcclxuICAgICAgICBib3R0b21UZXh0Q29udGVudCxcclxuICAgICAgICBlZGl0U3ZnLFxyXG4gICAgICBdLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogeCxcclxuICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICBhbmdsZTogYW5nbGUsXHJcbiAgICAgIH0sXHJcbiAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgd2FsbEluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJbmRleDogbnVtYmVyO1xyXG4gICAgICBmaXh0dXJlSWQ6IHN0cmluZztcclxuICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICBpc3N1ZTogYm9vbGVhbjtcclxuICAgICAgaXNzdWVEYXRhOiBhbnk7XHJcbiAgICAgIHRhc2tUeXBlOiBzdHJpbmc7XHJcbiAgICAgIHZtQ29uZmlnOiBbXTtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFmaXh0dXJlRGF0YT8uaXNzdWUgJiZcclxuICAgICAgIWZpeHR1cmVEYXRhPy51bnNhdmVkQ2hhbmdlcyAmJlxyXG4gICAgICB0aGlzLmxheW91dEZvcm0uZW5hYmxlZFxyXG4gICAgKSB7XHJcbiAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZWRpdFN2Zy5zZXQoXCJ2aXNpYmxlXCIsIHRydWUpO1xyXG4gICAgICAgIGNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBlZGl0U3ZnLnNldChcInZpc2libGVcIiwgZmFsc2UpO1xyXG4gICAgICAgIGNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0Rml4dHVyZSh0YXJnZXQpO1xyXG4gICAgICB0aGlzLnNlbGVjdEZpeHR1cmVPbkNhbnZhc0NsaWNrKHRhcmdldCwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZVR5cGUgPSBmaXh0dXJlRGF0YS5maXh0dXJlVHlwZTtcclxuICAgIGZpeHR1cmVHcm91cC53YWxsSW5kZXggPSBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcjtcclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSW5kZXggPSBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUlkID0gZml4dHVyZURhdGEuX2lkO1xyXG4gICAgZml4dHVyZUdyb3VwLmlzc3VlID0gZml4dHVyZURhdGEuaXNzdWU7XHJcbiAgICBmaXh0dXJlR3JvdXAuaXNzdWVEYXRhID0gZml4dHVyZURhdGEuaXNzdWVEYXRhO1xyXG4gICAgZml4dHVyZUdyb3VwLnRhc2tUeXBlID0gZml4dHVyZURhdGEudGFza1R5cGU7XHJcbiAgICBmaXh0dXJlR3JvdXAudm1Db25maWcgPSBmaXh0dXJlRGF0YS52bUNvbmZpZztcclxuICAgIGZpeHR1cmVHcm91cC5vYmpUeXBlID0gXCJmaXh0dXJlXCI7XHJcblxyXG4gICAgLy8gdGhpcy5jYW52YXMub24oXCJvYmplY3Q6bW92aW5nXCIsIChlKSA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIGFueTtcclxuICAgIC8vICAgaWYgKCF0YXJnZXQgfHwgdGFyZ2V0Lm9ialR5cGUgIT09IFwiZml4dHVyZVwiKSByZXR1cm47XHJcblxyXG4gICAgLy8gICBjb25zdCBhbmdsZURlZyA9IHRhcmdldC5hbmdsZSB8fCAwO1xyXG4gICAgLy8gICBjb25zdCBhbmdsZSA9IChhbmdsZURlZyAqIE1hdGguUEkpIC8gMTgwO1xyXG4gICAgLy8gICBpZiAoIXRhcmdldC5fbGFzdExlZnQpIHtcclxuICAgIC8vICAgICB0YXJnZXQuX2xhc3RMZWZ0ID0gdGFyZ2V0LmxlZnQ7XHJcbiAgICAvLyAgICAgdGFyZ2V0Ll9sYXN0VG9wID0gdGFyZ2V0LnRvcDtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBjb25zdCBkeCA9IHRhcmdldC5sZWZ0IC0gdGFyZ2V0Ll9sYXN0TGVmdDtcclxuICAgIC8vICAgY29uc3QgZHkgPSB0YXJnZXQudG9wIC0gdGFyZ2V0Ll9sYXN0VG9wO1xyXG4gICAgLy8gICBjb25zdCBwcm9qZWN0ZWQgPSBkeCAqIE1hdGguY29zKGFuZ2xlKSArIGR5ICogTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgLy8gICB0YXJnZXQubGVmdCA9IHRhcmdldC5fbGFzdExlZnQgKyBwcm9qZWN0ZWQgKiBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAvLyAgIHRhcmdldC50b3AgPSB0YXJnZXQuX2xhc3RUb3AgKyBwcm9qZWN0ZWQgKiBNYXRoLnNpbihhbmdsZSk7XHJcbiAgICAvLyAgIHRhcmdldC5fbGFzdExlZnQgPSB0YXJnZXQubGVmdDtcclxuICAgIC8vICAgdGFyZ2V0Ll9sYXN0VG9wID0gdGFyZ2V0LnRvcDtcclxuICAgIC8vIH0pO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZml4dHVyZUdyb3VwKTtcclxuXHJcbiAgICAvLyBJZiBuZXdseSBhZGRlZCwgZm9jdXMgaXQgb25jZVxyXG4gICAgaWYgKChmaXh0dXJlRGF0YSBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSBjYXRjaCB7fVxyXG4gICAgICBkZWxldGUgKGZpeHR1cmVEYXRhIGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpeHR1cmVHcm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdFbnRyYW5jZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIGFycm93V2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnksXHJcbiAgKSB7XHJcbiAgICBjb25zdCBib2R5V2lkdGggPSB3aWR0aCAtIGFycm93V2lkdGg7XHJcbiAgICBjb25zdCBhbmdsZSA9IHRoaXMuZmxvb3JEYXRhPy5jYWRMYXlvdXQgPyAwIDogZWxlbWVudERhdGEuYW5nbGU7XHJcbiAgICBjb25zb2xlLmxvZyhcIkBAIH4gYW5nbGU6XCIsIGFuZ2xlKTtcclxuXHJcbiAgICBjb25zdCBwYXRoRGF0YSA9IFtcclxuICAgICAgYE0gMCAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9IDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHstaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke3dpZHRofSAke2hlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0ICsgaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHR9YCxcclxuICAgICAgYEwgMCAke2hlaWdodH1gLFxyXG4gICAgICBgWmAsXHJcbiAgICBdLmpvaW4oXCIgXCIpO1xyXG5cclxuICAgIGNvbnN0IGFycm93ID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIGZpbGw6IFwiIzAzQTlGNFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gaGVpZ2h0IC0gNjtcclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHQoXCJFbnRyYW5jZVwiLCB7XHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiQXJpYWxcIixcclxuICAgICAgZm9udFdlaWdodDogXCJib2xkXCIsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgbGVmdDogMTUsXHJcbiAgICAgIHRvcDogaGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDIwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGlmICh0ZXh0Qm91bmRzLmhlaWdodCA+IG1heFRleHRIZWlnaHQpIHtcclxuICAgICAgY29uc3Qgc2NhbGUgPSBtYXhUZXh0SGVpZ2h0IC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvdywgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nRmxpcDogdHJ1ZSxcclxuICAgICAgYW5nbGU6IGFuZ2xlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnREYXRhO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBhOiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBlbGVtZW50OiBhbnksXHJcbiAgKTogZmFicmljLkdyb3VwIHtcclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogMixcclxuICAgICAgcnk6IDIsXHJcbiAgICAgIGZpbGw6IFwiI0RBRjFGRlwiLFxyXG4gICAgICBzdHJva2U6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHRib3goZWxlbWVudC5maXh0dXJlTmFtZSwge1xyXG4gICAgICB3aWR0aDogd2lkdGggLSA4LFxyXG4gICAgICBmb250U2l6ZTogMTQsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICBzcGxpdEJ5R3JhcGhlbWU6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBoZWlnaHQgLSA4KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gKGhlaWdodCAtIDgpIC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFtyZWN0LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGFuZ2xlOiBhLFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBcIm90aGVyc1wiO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnQ7XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcblxyXG4gICAgaWYgKChlbGVtZW50IGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGdyb3VwKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuICAgICAgZGVsZXRlIChlbGVtZW50IGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0JnKCkge1xyXG4gICAgY29uc3Qgd2FsbDEgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlOiBhbnkpID0+IGUuZWxlbWVudE51bWJlciA9PT0gMSAmJiBlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIixcclxuICAgICk7XHJcbiAgICBjb25zdCB3YWxsMiA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGU6IGFueSkgPT4gZS5lbGVtZW50TnVtYmVyID09PSAyICYmIGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyh3YWxsMS5kaXN0YW5jZSwgd2FsbDEudW5pdCk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKHdhbGwyLmRpc3RhbmNlLCB3YWxsMi51bml0KTtcclxuXHJcbiAgICBjb25zdCBiZyA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgdG9wOiB0aGlzLndhbGxUaGlja25lc3MsXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIGZpbGw6IFwiI2VhZWNmMFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYmcpO1xyXG4gICAgdGhpcy5jYW52YXMucmVtb3ZlKGJnKTtcclxuICAgIHRoaXMuY2FudmFzLmluc2VydEF0KDAsIGJnKTtcclxuICAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0Rml4dHVyZU1ldGFUb1JlbmRlcihmaXh0dXJlOiBhbnksIHdhbGxEYXRhOiBhbnkpIHtcclxuXHJcbiAgLy8gICByZXR1cm4ge1xyXG4gIC8vICAgICB4LFxyXG4gIC8vICAgICB5LFxyXG4gIC8vICAgICBmaXh0dXJlSGVpZ2h0LFxyXG4gIC8vICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgLy8gICB9O1xyXG4gIC8vIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9GaXh0dXJlQ29uZmlnSWRDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnMgPSBbXTtcclxuXHJcbiAgICB0aGlzLmdldEZvcm1XYWxscy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdhbGxHcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBmaXh0dXJlc0FycmF5ID0gd2FsbEdyb3VwLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheTtcclxuXHJcbiAgICAgIGZpeHR1cmVzQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoZml4dHVyZUNvbnRyb2wsIGopID0+IHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBmaXh0dXJlQ29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3Qgc3ViID0gZml4dHVyZUdyb3VwXHJcbiAgICAgICAgICAuZ2V0KFwiZml4dHVyZUNvbmZpZ0lkXCIpXHJcbiAgICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRml4dHVyZVRlbXBsYXRlKG5ld1ZhbHVlLCBcIndhbGxcIiwgaiwgaSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHN1YikgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucy5wdXNoKHN1Yik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5jb250cm9scy5mb3JFYWNoKChmaXh0dXJlQ29udHJvbCwgaykgPT4ge1xyXG4gICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBmaXh0dXJlQ29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IHN1YiA9IGZpeHR1cmVHcm91cFxyXG4gICAgICAgIC5nZXQoXCJmaXh0dXJlQ29uZmlnSWRcIilcclxuICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VGaXh0dXJlVGVtcGxhdGUobmV3VmFsdWUsIFwiZmxvb3JcIiwgayk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoc3ViKSB0aGlzLmZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zLnB1c2goc3ViKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9PdGhlckVsZW1lbnRzQ2hhbmdlcygpIHtcclxuICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWI/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5vdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9ucyA9IFtdO1xyXG5cclxuICAgIC8vIFdhbGwtbGV2ZWwgb3RoZXJFbGVtZW50cyBsYWJlbCBzdWJzY3JpcHRpb25zXHJcbiAgICB0aGlzLmdldEZvcm1XYWxscy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdhbGxHcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBvdGhlckFycmF5ID0gd2FsbEdyb3VwLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5O1xyXG5cclxuICAgICAgb3RoZXJBcnJheS5jb250cm9scy5mb3JFYWNoKChjdHJsLCBvdGhlcklkeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRHcm91cCA9IGN0cmwgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgIGNvbnN0IHR5cGVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcInR5cGVcIikgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tTmFtZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwiY3VzdG9tTmFtZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuXHJcbiAgICAgICAgY29uc3Qgd2FsbE1ldGEgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAoZWw6IGFueSkgPT5cclxuICAgICAgICAgICAgZWwuZWxlbWVudFR5cGUgPT09IHdhbGxHcm91cC5nZXQoXCJlbGVtZW50VHlwZVwiKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgZWwuZWxlbWVudE51bWJlciA9PT0gd2FsbEdyb3VwLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudFJlZiA9IHdhbGxNZXRhPy5vdGhlckVsZW1lbnRzPy5bb3RoZXJJZHhdO1xyXG4gICAgICAgIGlmICghZWxlbWVudFJlZikgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyB3aGVuIHR5cGUgY2hhbmdlcyAoZHJvcGRvd24pXHJcbiAgICAgICAgY29uc3Qgc3ViVHlwZSA9IHR5cGVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAvLyBpZiB1c2VyIHBpY2tzIFwiT3RoZXJzXCIsIHByZWZlciBjdXN0b21OYW1lIGlmIHByZXNlbnQsIG90aGVyd2lzZSBzZXQgZml4dHVyZU5hbWUgdG8gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID1cclxuICAgICAgICAgICAgICBzZWxlY3RlZCA9PT0gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgICAgPyBjdXN0b21OYW1lQ29udHJvbD8udmFsdWUgfHwgXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgICAgOiBzZWxlY3RlZDtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB3aGVuIGN1c3RvbU5hbWUgY2hhbmdlcyAodGV4dCBpbnB1dCB2aXNpYmxlIG9ubHkgd2hlbiB0eXBlID09PSAnT3RoZXJzJylcclxuICAgICAgICBjb25zdCBzdWJDdXN0b20gPSBjdXN0b21OYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGN1c3RvbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlQ29udHJvbC52YWx1ZSA9PT0gXCJPdGhlcnNcIikge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPSBjdXN0b207XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMucHVzaChzdWJUeXBlLCBzdWJDdXN0b20pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEZsb29yLWxldmVsIG90aGVyRWxlbWVudHMgbGFiZWwgc3Vic2NyaXB0aW9uc1xyXG4gICAgdGhpcy5nZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLmNvbnRyb2xzLmZvckVhY2goKGN0cmwsIGlkeCkgPT4ge1xyXG4gICAgICBjb25zdCBlbGVtZW50R3JvdXAgPSBjdHJsIGFzIEZvcm1Hcm91cDtcclxuICAgICAgY29uc3QgdHlwZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwidHlwZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgY29uc3QgY3VzdG9tTmFtZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwiY3VzdG9tTmFtZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgY29uc3QgZWxlbWVudFJlZiA9IHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5baWR4XTtcclxuICAgICAgaWYgKCFlbGVtZW50UmVmKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBzdWJUeXBlID0gdHlwZUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPVxyXG4gICAgICAgICAgICBzZWxlY3RlZCA9PT0gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgID8gY3VzdG9tTmFtZUNvbnRyb2w/LnZhbHVlIHx8IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICA6IHNlbGVjdGVkO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHN1YkN1c3RvbSA9IGN1c3RvbU5hbWVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChjdXN0b206IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVDb250cm9sLnZhbHVlID09PSBcIk90aGVyc1wiKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPSBjdXN0b207XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zLnB1c2goc3ViVHlwZSwgc3ViQ3VzdG9tKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZjogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbmQoXHJcbiAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgb2JqPy5vYmpUeXBlID09PSBcIm90aGVyc1wiICYmIG9iaj8uZGF0YS5faWQgPT09IGVsZW1lbnRSZWYuX2lkLFxyXG4gICAgICApIGFzIGFueTtcclxuXHJcbiAgICBpZiAoIWdyb3VwKSByZXR1cm47XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudFJlZjtcclxuXHJcbiAgICBjb25zdCB0ZXh0T2JqID0gKGdyb3VwLmdldE9iamVjdHMoKSB8fCBbXSkuZmluZChcclxuICAgICAgKG86IGFueSkgPT4gbz8udHlwZSA9PT0gXCJ0ZXh0XCIgfHwgbz8udHlwZSA9PT0gXCJ0ZXh0Ym94XCIsXHJcbiAgICApIGFzIGZhYnJpYy5UZXh0IHwgZmFicmljLlRleHRib3ggfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRleHRPYmopIHtcclxuICAgICAgKHRleHRPYmogYXMgYW55KS5zZXQoeyB0ZXh0OiBlbGVtZW50UmVmLmZpeHR1cmVOYW1lIH0pO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByb3RhdGVDYW52YXMoY2FudmFzOiBmYWJyaWMuQ2FudmFzLCBhbmdsZURlZzogbnVtYmVyKSB7XHJcbiAgICBpZiAoIWNhbnZhcykgcmV0dXJuO1xyXG4gICAgY29uc3QgYWxsT2JqZWN0cyA9IGNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBpZiAoIWFsbE9iamVjdHMgfHwgYWxsT2JqZWN0cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAvLyBDcmVhdGUgYW4gQWN0aXZlU2VsZWN0aW9uIGNvbnRhaW5pbmcgYWxsIG9iamVjdHMgb24gdGhlIGNhbnZhc1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV3IGZhYnJpYy5BY3RpdmVTZWxlY3Rpb24oYWxsT2JqZWN0cyBhcyBhbnksIHsgY2FudmFzIH0pO1xyXG4gICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChzZWxlY3Rpb24pO1xyXG5cclxuICAgIC8vIFJvdGF0ZSB0aGUgQWN0aXZlU2VsZWN0aW9uIGRpcmVjdGx5ICh3b3JrcyBsaWtlIGEgdGVtcG9yYXJ5IGdyb3VwKVxyXG4gICAgY29uc3QgYWN0aXZlOiBhbnkgPSBjYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCk7XHJcbiAgICBpZiAoIWFjdGl2ZSkge1xyXG4gICAgICBjYW52YXMuZGlzY2FyZEFjdGl2ZU9iamVjdCgpO1xyXG4gICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudEFuZ2xlID0gYWN0aXZlLmFuZ2xlIHx8IDA7XHJcbiAgICBhY3RpdmUucm90YXRlKGN1cnJlbnRBbmdsZSArIGFuZ2xlRGVnKTtcclxuICAgIGFjdGl2ZS5zZXRDb29yZHMoKTtcclxuXHJcbiAgICAvLyBDbGVhciBzZWxlY3Rpb24gYnV0IGtlZXAgcm90YXRlZCBwb3NpdGlvbnMgb2YgY2hpbGQgb2JqZWN0c1xyXG4gICAgY2FudmFzLmRpc2NhcmRBY3RpdmVPYmplY3QoKTtcclxuICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGaXh0dXJlT25DYW52YXNDbGljayh0YXJnZXQ6IGFueSwgY29sbGFwc2VUYXNrSW5mbzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgIGZpeHR1cmVUeXBlOiB0YXJnZXQuZml4dHVyZVR5cGUsXHJcbiAgICAgICAgd2FsbEluZGV4OiB0YXJnZXQud2FsbEluZGV4LFxyXG4gICAgICAgIGZpeHR1cmVJbmRleDogdGFyZ2V0LmZpeHR1cmVJbmRleCxcclxuICAgICAgICBmaXh0dXJlSWQ6IHRhcmdldC5maXh0dXJlSWQsXHJcbiAgICAgICAgaXNzdWU6IHRhcmdldC5pc3N1ZSxcclxuICAgICAgICBpc3N1ZURhdGE6IHRhcmdldC5pc3N1ZURhdGEsXHJcbiAgICAgICAgdm1Db25maWc6IHRhcmdldC52bUNvbmZpZyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0Rml4dHVyZUZlZWRiYWNrKFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCxcclxuICAgICAgICBjb2xsYXBzZVRhc2tJbmZvLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Rml4dHVyZUZlZWRiYWNrKGZpeHR1cmVJZDogc3RyaW5nLCBjb2xsYXBzZVRhc2tJbmZvOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRGaXh0dXJlRmVlZGJhY2sgPSB0aGlzLnN0b3JlRmVlZGJhY2suZml4dHVyZURhdGEuZmluZChcclxuICAgICAgKGZiOiBhbnkpID0+IGZiLmZpeHR1cmVJZCA9PT0gZml4dHVyZUlkLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY3VycmVudEZpeHR1cmVGZWVkYmFjaykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrID0ge1xyXG4gICAgICAgIGdsb2JhbENvbW1lbnRzOiB0aGlzLnN0b3JlRmVlZGJhY2suZml4dHVyZUNvbW1lbnQsXHJcbiAgICAgICAgZml4dHVyZUZlZWRiYWNrOiB7XHJcbiAgICAgICAgICAuLi5jdXJyZW50Rml4dHVyZUZlZWRiYWNrLFxyXG4gICAgICAgICAgRml4dHVyZURhdGE6IHN0cnVjdHVyZWRDbG9uZShcclxuICAgICAgICAgICAgdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZpbmQoKGZpOiBhbnkpID0+IGZpLl9pZCA9PT0gZml4dHVyZUlkKSxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0YXNrSW5mb1RvZ2dsZTogY29sbGFwc2VUYXNrSW5mbyxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2sgPSB7XHJcbiAgICAgICAgZ2xvYmFsQ29tbWVudHM6IFtdLFxyXG4gICAgICAgIGZpeHR1cmVGZWVkYmFjazoge1xyXG4gICAgICAgICAgZml4dHVyZUlkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICBGaXh0dXJlRGF0YTogc3RydWN0dXJlZENsb25lKFxyXG4gICAgICAgICAgICB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMuZmluZCgoZmk6IGFueSkgPT4gZmkuX2lkID09PSBmaXh0dXJlSWQpLFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGZpeHR1cmVBSURhdGE6IG51bGwsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0YXNrSW5mb1RvZ2dsZTogY29sbGFwc2VUYXNrSW5mbyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEZpeHR1cmVUZW1wbGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0QWxsVGVtcGxhdGVzKHBheWxvYWQpLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkYXRhID0gcmVzPy5kYXRhO1xyXG5cclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZXMgPSBkYXRhLm1hcCgodDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBfaWQ6IHQuX2lkLFxyXG4gICAgICAgICAgICBuYW1lOiB0LmZpeHR1cmVOYW1lLmluY2x1ZGVzKFwiLWZ0XCIpXHJcbiAgICAgICAgICAgICAgPyB0LmZpeHR1cmVOYW1lXHJcbiAgICAgICAgICAgICAgOiBgJHt0LmZpeHR1cmVOYW1lfSAtICR7dC5maXh0dXJlV2lkdGgudmFsdWV9ICR7dC5maXh0dXJlV2lkdGgudW5pdH1gLFxyXG4gICAgICAgICAgICBzdWJ0ZXh0OiBgJHt0LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIsIFwiKX1gLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIGZpeHR1cmUgdGVtcGxhdGVzOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5sYXlvdXRGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHdhbGxzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgZmxvb3JGaXh0dXJlczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIGZsb29yT3RoZXJFbGVtZW50czogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRGb3JtV2FsbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRGb3JtRmxvb3JGaXh0dXJlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JPdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRFbnRyYW5jZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZpbHRlcihcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIixcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRXYWxsT3RoZXJFbGVtZW50cyh3YWxsSW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuICh0aGlzLmxheW91dEZvcm0uZ2V0KFwid2FsbHNcIikgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQod2FsbEluZGV4KVxyXG4gICAgICAuZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtRml4dHVyZXMod2FsbEluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAodGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHdhbGxJbmRleClcclxuICAgICAgLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIHBhdGNoV2FsbEVsZW1lbnRzKHsgZWxlbWVudFR5cGUsIGVsZW1lbnROdW1iZXIgfTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBlbGVtZW50VHlwZTogW2VsZW1lbnRUeXBlID8gZWxlbWVudFR5cGUgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBlbGVtZW50TnVtYmVyOiBbZWxlbWVudE51bWJlciA/IGVsZW1lbnROdW1iZXIgOiAwLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBmaXh0dXJlczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIG90aGVyRWxlbWVudHM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIHBhdGNoRml4dHVyZSh7IGZpeHR1cmVOYW1lLCBmaXh0dXJlQ29uZmlnSWQsIF9pZCB9OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGZpeHR1cmVOYW1lOiBbZml4dHVyZU5hbWUgPyBmaXh0dXJlTmFtZSA6IFwiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGZpeHR1cmVDb25maWdJZDogW1xyXG4gICAgICAgIGZpeHR1cmVDb25maWdJZCA/IGZpeHR1cmVDb25maWdJZCA6IFwiXCIsXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBdLFxyXG4gICAgICBfaWQ6IFtfaWQgPyBfaWQgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIGFkZFdhbGxTcGFjZSh3YWxsSW5kZXg6IG51bWJlciwgb3BlcmF0aW9uOiBcImluY3JlbWVudFwiIHwgXCJkZWNyZW1lbnRcIikge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgY2xpY2tlZFdhbGxOdW1iZXIgPSB3YWxsSW5kZXggKyAxO1xyXG4gICAgY29uc3QgbW1Ub0ZlZXQgPSAzMDU7XHJcbiAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gMTUyNCAvIG1tVG9GZWV0OyAvLyB+NSBmdCAoaG9yaXpvbnRhbCBpbmNyZW1lbnQpXHJcbiAgICBjb25zdCBmaXh0dXJlV2lkdGggPSAxMjIwIC8gbW1Ub0ZlZXQ7IC8vIH40IGZ0ICh2ZXJ0aWNhbCBpbmNyZW1lbnQpXHJcblxyXG4gICAgY29uc3QgbGF5b3V0ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbjtcclxuXHJcbiAgICBjb25zdCBnZXRXYWxsID0gKG51bTogbnVtYmVyKSA9PlxyXG4gICAgICBsYXlvdXQuZmluZChcclxuICAgICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IG51bSxcclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBhbW91bnQgPSBvcGVyYXRpb24gPT09IFwiaW5jcmVtZW50XCIgPyAxIDogLTE7XHJcblxyXG4gICAgY29uc3QgdzEgPSBnZXRXYWxsKDEpO1xyXG4gICAgY29uc3QgdzIgPSBnZXRXYWxsKDIpO1xyXG4gICAgY29uc3QgdzMgPSBnZXRXYWxsKDMpO1xyXG4gICAgY29uc3QgdzQgPSBnZXRXYWxsKDQpO1xyXG4gICAgY29uc3QgdzUgPSBnZXRXYWxsKDUpO1xyXG4gICAgY29uc3QgZW50cmFuY2UgPSBsYXlvdXQuZmluZCgoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIik7XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gSG9yaXpvbnRhbCBncm93dGggIChXYWxsLTEgLyBXYWxsLTMpXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDEgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDMpIHtcclxuICAgICAgaWYgKHcxKSB3MS5kaXN0YW5jZSArPSBhbW91bnQgKiBmaXh0dXJlV2lkdGg7XHJcbiAgICAgIGlmICh3MykgdzMuZGlzdGFuY2UgKz0gYW1vdW50ICogZml4dHVyZVdpZHRoO1xyXG5cclxuICAgICAgaWYgKHcyKSB7XHJcbiAgICAgICAgdzIuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZngucmVsYXRpdmVQb3NpdGlvbi54ID1cclxuICAgICAgICAgICAgKGZ4LnJlbGF0aXZlUG9zaXRpb24ueCB8fCAwKSArIGFtb3VudCAqIGZpeHR1cmVXaWR0aDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIFZlcnRpY2FsIGdyb3d0aCAgKFdhbGwtMiAvIFdhbGwtNCAvIFdhbGwtNSlcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlmIChcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIgfHxcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDQgfHxcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDVcclxuICAgICkge1xyXG4gICAgICBpZiAodzIpIHcyLmRpc3RhbmNlICs9IGFtb3VudCAqIGZpeHR1cmVIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAodzMpIHtcclxuICAgICAgICB3My5maXh0dXJlcy5mb3JFYWNoKChmeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAoZngucmVsYXRpdmVQb3NpdGlvbi55IHx8IDApICsgYW1vdW50ICogZml4dHVyZUhlaWdodDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZW50cmFuY2VZID0gZW50cmFuY2U/LmRpc3RhbmNlIHx8IDA7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nVzQgPSB3ND8uZGlzdGFuY2UgfHwgMDtcclxuICAgICAgY29uc3QgZXhpc3RpbmdXNSA9IHc1Py5kaXN0YW5jZSB8fCAwO1xyXG5cclxuICAgICAgLy8gR3JvdyB3YWxsLTQgaWYgd2UgY2xpY2tlZCB3YWxsLTQgT1Igd2FsbC0yXHJcbiAgICAgIGlmICgoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDQgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIpICYmIHc0KSB7XHJcbiAgICAgICAgdzQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28oZXhpc3RpbmdXNCArIGFtb3VudCAqIGZpeHR1cmVIZWlnaHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBHcm93IHdhbGwtNSBpZiB3ZSBjbGlja2VkIHdhbGwtNSBPUiB3YWxsLTJcclxuICAgICAgaWYgKChjbGlja2VkV2FsbE51bWJlciA9PT0gNSB8fCBjbGlja2VkV2FsbE51bWJlciA9PT0gMikgJiYgdzUpIHtcclxuICAgICAgICB3NS5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhleGlzdGluZ1c1ICsgYW1vdW50ICogZml4dHVyZUhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmICh3NCkge1xyXG4gICAgICAgICAgdzQuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAgIChmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgfHwgMCkgKyBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcmV2ZW50IG92ZXJmbG93OiBzaHJpbmsgYmFjayBpZiB0b3RhbCA+IHcyIHNpemVcclxuICAgICAgY29uc3QgdG90YWxVc2VkID0gZW50cmFuY2VZICsgKHc0Py5kaXN0YW5jZSB8fCAwKSArICh3NT8uZGlzdGFuY2UgfHwgMCk7XHJcbiAgICAgIGlmICh0b3RhbFVzZWQgPiB3MiEuZGlzdGFuY2UpIHtcclxuICAgICAgICBpZiAodzUpIHtcclxuICAgICAgICAgIHc1LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKFxyXG4gICAgICAgICAgICB3NS5kaXN0YW5jZSAtICh0b3RhbFVzZWQgLSB3MiEuZGlzdGFuY2UpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUZpeHR1cmUoXHJcbiAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsXHJcbiAgICBmaXh0dXJlSW5kZXg6IG51bWJlcixcclxuICAgIHdhbGxJbmRleD86IG51bWJlcixcclxuICApIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEpLnJlbW92ZUF0KGZpeHR1cmVJbmRleCk7XHJcblxyXG4gICAgICBjb25zdCB3YWxsID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG4gICAgICBpZiAod2FsbCAmJiBBcnJheS5pc0FycmF5KHdhbGwuZml4dHVyZXMpKSB7XHJcbiAgICAgICAgd2FsbC5maXh0dXJlcy5zcGxpY2UoZml4dHVyZUluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMucmVtb3ZlQXQoZml4dHVyZUluZGV4KTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUpKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5zcGxpY2UoZml4dHVyZUluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVPdGhlckVsZW1lbnQoXHJcbiAgICBlbGVtZW50VHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsXHJcbiAgICBlbGVtZW50SW5kZXg6IG51bWJlcixcclxuICAgIHdhbGxJbmRleD86IG51bWJlcixcclxuICApIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0V2FsbE90aGVyRWxlbWVudHMod2FsbEluZGV4ISkucmVtb3ZlQXQoZWxlbWVudEluZGV4KTtcclxuXHJcbiAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk7XHJcbiAgICAgIGlmICh3YWxsICYmIEFycmF5LmlzQXJyYXkod2FsbC5vdGhlckVsZW1lbnRzKSkge1xyXG4gICAgICAgIHdhbGwub3RoZXJFbGVtZW50cy5zcGxpY2UoZWxlbWVudEluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChlbGVtZW50VHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5yZW1vdmVBdChlbGVtZW50SW5kZXgpO1xyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzLnNwbGljZShlbGVtZW50SW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwibGF5b3V0XCI7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGaXh0dXJlVGVtcGxhdGUoXHJcbiAgICBjb25maWdJZDogc3RyaW5nLFxyXG4gICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLFxyXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXHJcbiAgICB3YWxsSW5kZXg/OiBudW1iZXIsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldEZpeHR1cmVUZW1wbGF0ZShjb25maWdJZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEpLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgZml4dHVyZUluZGV4LFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGVtcGxhdGVEYXRhLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgd2FsbFJlZiA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKSE7XHJcbiAgICAgICAgICAgIHdhbGxSZWYuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAuLi53YWxsUmVmLmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgLi4uZml4dHVyZURhdGEsXHJcbiAgICAgICAgICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICh0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgZml4dHVyZUluZGV4LFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGVtcGxhdGVEYXRhLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVtmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAuLi5maXh0dXJlRGF0YSxcclxuICAgICAgICAgICAgICB1bnNhdmVkQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJsYXlvdXRcIjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHRlbXBsYXRlc1wiKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBkZXN0aW5hdGlvbldhbGxJbmRleDogbnVtYmVyIHwgXCJmbG9vclwiLFxyXG4gICAgZGVzdGluYXRpb25GaXh0dXJlSW5kZXg/OiBudW1iZXIsXHJcbiAgKSB7XHJcbiAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcclxuXHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCBpc1NvdXJjZUZsb29yID0gZGF0YS53YWxsSW5kZXggPT09IFwiZmxvb3JcIjtcclxuICAgIGNvbnN0IGlzRGVzdGluYXRpb25GbG9vciA9IGRlc3RpbmF0aW9uV2FsbEluZGV4ID09PSBcImZsb29yXCI7XHJcblxyXG4gICAgY29uc3Qgc291cmNlRm9ybUFycmF5OiBGb3JtQXJyYXkgPSBpc1NvdXJjZUZsb29yXHJcbiAgICAgID8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlc1xyXG4gICAgICA6IHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKGRhdGEud2FsbEluZGV4KTtcclxuXHJcbiAgICBjb25zdCBkZXN0aW5hdGlvbkZvcm1BcnJheTogRm9ybUFycmF5ID0gaXNEZXN0aW5hdGlvbkZsb29yXHJcbiAgICAgID8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlc1xyXG4gICAgICA6IHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKGRlc3RpbmF0aW9uV2FsbEluZGV4IGFzIG51bWJlcik7XHJcblxyXG4gICAgY29uc3Qgc291cmNlV2FsbE1ldGEgPSBpc1NvdXJjZUZsb29yXHJcbiAgICAgID8gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVxyXG4gICAgICA6ICh0aGlzLmdldFdhbGxCeU51bWJlcihcclxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KGRhdGEud2FsbEluZGV4KS5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZSxcclxuICAgICAgICApPy5maXh0dXJlcyA/PyBbXSk7XHJcblxyXG4gICAgY29uc3QgZGVzdGluYXRpb25XYWxsTWV0YSA9IGlzRGVzdGluYXRpb25GbG9vclxyXG4gICAgICA/IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVcclxuICAgICAgOiAodGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1XYWxsc1xyXG4gICAgICAgICAgICAuYXQoZGVzdGluYXRpb25XYWxsSW5kZXggYXMgbnVtYmVyKVxyXG4gICAgICAgICAgICAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWUsXHJcbiAgICAgICAgKT8uZml4dHVyZXMgPz8gW10pO1xyXG5cclxuICAgIGNvbnN0IHNGaXh0dXJlSW5kZXggPSBzb3VyY2VXYWxsTWV0YS5maW5kSW5kZXgoXHJcbiAgICAgIChmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgZml4dHVyZS5faWQgPT09XHJcbiAgICAgICAgc291cmNlRm9ybUFycmF5LmF0KGRhdGEuZml4dHVyZUluZGV4KT8uZ2V0KFwiX2lkXCIpPy52YWx1ZSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZEZpeHR1cmVJbmRleCA9XHJcbiAgICAgIGRlc3RpbmF0aW9uRml4dHVyZUluZGV4ICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IGRlc3RpbmF0aW9uV2FsbE1ldGEuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgIGZpeHR1cmUuX2lkID09PVxyXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uRm9ybUFycmF5LmF0KGRlc3RpbmF0aW9uRml4dHVyZUluZGV4KT8uZ2V0KFwiX2lkXCIpXHJcbiAgICAgICAgICAgICAgICA/LnZhbHVlLFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIDogZGVzdGluYXRpb25Gb3JtQXJyYXkubGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHNQb3NpdGlvbiA9IHtcclxuICAgICAgZml4dHVyZU51bWJlcjogc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgIH07XHJcbiAgICBjb25zdCBkUG9zaXRpb24gPSB7XHJcbiAgICAgIGZpeHR1cmVOdW1iZXI6IGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoc291cmNlV2FsbE1ldGEgPT09IGRlc3RpbmF0aW9uV2FsbE1ldGEpIHtcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyID1cclxuICAgICAgICBzUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIHNQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIgPSBkUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAgICAgICBkUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlciA9IGRQb3NpdGlvbi5maXh0dXJlTnVtYmVyO1xyXG4gICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIGRQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAgICAgc291cmNlRm9ybUFycmF5LmNvbnRyb2xzLFxyXG4gICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5jb250cm9scyxcclxuICAgICAgZGF0YS5maXh0dXJlSW5kZXgsXHJcbiAgICAgIGRGaXh0dXJlSW5kZXgsXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudHJhbnNmZXJBcnJheUl0ZW0oXHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhLFxyXG4gICAgICBkZXN0aW5hdGlvbldhbGxNZXRhLFxyXG4gICAgICBzRml4dHVyZUluZGV4LFxyXG4gICAgICBkRml4dHVyZUluZGV4LFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJsYXlvdXRcIjtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkQ2FudmFzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG9yaWdpbmFsVmlld3BvcnQgPSBbXHJcbiAgICAgIC4uLnRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtISxcclxuICAgIF0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5zZXRWaWV3cG9ydFRyYW5zZm9ybShbMSwgMCwgMCwgMSwgMCwgMF0pO1xyXG5cclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG5cclxuICAgIGNvbnN0IGRhdGFVUkwgPSB0aGlzLmNhbnZhcy50b0RhdGFVUkwoe1xyXG4gICAgICBmb3JtYXQ6IFwicG5nXCIsXHJcbiAgICAgIGxlZnQ6IGJvdW5kcy5sZWZ0LFxyXG4gICAgICB0b3A6IGJvdW5kcy50b3AsXHJcbiAgICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm91bmRzLmhlaWdodCxcclxuICAgICAgbXVsdGlwbGllcjogMixcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFZpZXdwb3J0VHJhbnNmb3JtKG9yaWdpbmFsVmlld3BvcnQpO1xyXG5cclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIGxpbmsuaHJlZiA9IGRhdGFVUkw7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7dGhpcy5wbGFub0RhdGEuc3RvcmVOYW1lfV8ke3RoaXMuZmxvb3JEYXRhLmZsb29yTmFtZX0ucG5nYDtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIC8vIGRvd25sb2FkQ2FudmFzKCkge1xyXG4gIC8vICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG5cclxuICAvLyAgIGNvbnN0IG9yaWdpbmFsVmlld3BvcnQgPSBbXHJcbiAgLy8gICAgIC4uLnRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtISxcclxuICAvLyAgIF0gYXMgZmFicmljLlRNYXQyRDtcclxuICAvLyAgIHRoaXMuY2FudmFzLnNldFZpZXdwb3J0VHJhbnNmb3JtKFsxLCAwLCAwLCAxLCAwLCAwXSk7XHJcblxyXG4gIC8vICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcblxyXG4gIC8vICAgY29uc3QgYmcgPSB0aGlzLmNyZWF0ZUV4cG9ydExheW91dEJhY2tncm91bmQoKTtcclxuICAvLyAgIHRoaXMuY2FudmFzLmluc2VydEF0KDAsIGJnKTtcclxuICAvLyAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG5cclxuICAvLyAgIGNvbnN0IGRhdGFVUkwgPSB0aGlzLmNhbnZhcy50b0RhdGFVUkwoe1xyXG4gIC8vICAgICBmb3JtYXQ6IFwicG5nXCIsXHJcbiAgLy8gICAgIGxlZnQ6IGJvdW5kcy5sZWZ0LFxyXG4gIC8vICAgICB0b3A6IGJvdW5kcy50b3AsXHJcbiAgLy8gICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXHJcbiAgLy8gICAgIGhlaWdodDogYm91bmRzLmhlaWdodCxcclxuICAvLyAgICAgbXVsdGlwbGllcjogMixcclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyAgIHRoaXMuY2FudmFzLnJlbW92ZShiZyk7XHJcbiAgLy8gICB0aGlzLmNhbnZhcy5zZXRWaWV3cG9ydFRyYW5zZm9ybShvcmlnaW5hbFZpZXdwb3J0KTtcclxuICAvLyAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG5cclxuICAvLyAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAvLyAgIGxpbmsuaHJlZiA9IGRhdGFVUkw7XHJcbiAgLy8gICBsaW5rLmRvd25sb2FkID0gYCR7dGhpcy5wbGFub0RhdGEuc3RvcmVOYW1lfV8ke3RoaXMuZmxvb3JEYXRhLmZsb29yTmFtZX0ucG5nYDtcclxuICAvLyAgIGxpbmsuY2xpY2soKTtcclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRXhwb3J0TGF5b3V0QmFja2dyb3VuZCgpIHtcclxuICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuYnVpbGRMYXlvdXRQb2x5Z29uRnJvbVdhbGxzKCk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUG9seWdvbihwb2ludHMsIHtcclxuICAgICAgZmlsbDogXCIjZWFlY2YwXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgb2JqZWN0Q2FjaGluZzogZmFsc2UsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRMYXlvdXRQb2x5Z29uRnJvbVdhbGxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25cclxuICAgICAgLmZpbHRlcigodzogYW55KSA9PiB3LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIilcclxuICAgICAgLm1hcCgodzogYW55KSA9PiAoe1xyXG4gICAgICAgIHg6IHRoaXMudG9QaXhlbHMody5yZWxhdGl2ZVBvc2l0aW9uLngsIFwiZnRcIiksXHJcbiAgICAgICAgeTogdGhpcy50b1BpeGVscyh3LnJlbGF0aXZlUG9zaXRpb24ueSwgXCJmdFwiKSxcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlRmVlZGJhY2tBY3Rpb24odXNlckFjdGlvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgdGFyZ2V0Rml4dHVyZTogYW55ID0ge1xyXG4gICAgICAgIC4uLih0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAuZmxhdE1hcCgocDogYW55KSA9PiBwLmZpeHR1cmVzKVxyXG4gICAgICAgICAgLmNvbmNhdCh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKVxyXG4gICAgICAgICAgLmZpbmQoKGY6IGFueSkgPT4gZi5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCkgfHwgbnVsbCksXHJcbiAgICAgICAgdXNlckFjdGlvbjogdXNlckFjdGlvbi5hY3Rpb24sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSB7IC4uLnRhcmdldEZpeHR1cmUgfTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJhY2NlcHRBaVwiIHx8XHJcbiAgICAgICAgdXNlckFjdGlvbi5hY3Rpb24gPT09IFwiZWRpdFdpdGhBaVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YSxcclxuICAgICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLmhlYWRlcixcclxuICAgICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YS5oZWFkZXIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHVzZXJBY3Rpb24uZml4dHVyZURhdGE/LmhlYWRlcj8ubGFiZWxcclxuICAgICAgICAgICAgPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgID8uaW5jbHVkZXMoXCJoZWFkZXIgbm90IGlkZW50aWZpZWRcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRhcmdldEZpeHR1cmUuaGVhZGVyLmxhYmVsID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLmhlYWRlci5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJlZGl0V2l0aEFpXCIgfHxcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJlZGl0V2l0aFBsYW5vXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAgICAgLi4udGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YTtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0Rml4dHVyZSA9IHRydWU7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRGaXh0dXJlU2VjdGlvbiA9IHVzZXJBY3Rpb24/LnRhYiA/PyBcImJhc2ljLWRldGFpbHNcIjtcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZmVlZGJhY2sgPSB1c2VyQWN0aW9uLmZlZWRiYWNrO1xyXG5cclxuICAgICAgY29uc3QgYW5zd2VySWQgPSB1c2VyQWN0aW9uLmZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/Ll9pZDtcclxuICAgICAgaWYgKCFhbnN3ZXJJZCkgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBfaWQ6IGZlZWRiYWNrLl9pZCxcclxuICAgICAgICBhbnN3ZXJJZDogYW5zd2VySWQsXHJcbiAgICAgICAgdHlwZTogdXNlckFjdGlvbi50eXBlLFxyXG4gICAgICAgIHVzZXJBY3Rpb246IHVzZXJBY3Rpb24uYWN0aW9uLFxyXG4gICAgICAgIGNvbW1lbnRzOiB1c2VyQWN0aW9uLnJlbWFya3MsXHJcbiAgICAgICAgdGFza1R5cGU6IHVzZXJBY3Rpb24udGFza1R5cGUsXHJcbiAgICAgICAgcGxhbm9JZDogdXNlckFjdGlvbi5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHVzZXJBY3Rpb24uZmxvb3JJZCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVGaXh0dXJlQ29tcGxpYW5jZVN0YXR1cyhwYXlsb2FkKSxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghcmVzICYmIHVzZXJBY3Rpb24udHlwZSAhPSBcImFncmVlXCIpIHJldHVybjtcclxuXHJcbiAgICAgIGlmICh1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJrZWVwUGxhbm9cIikge1xyXG4gICAgICAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB1cGRhdGVGaXh0dXJlUGF5bG9hZCA9IHtcclxuICAgICAgICBmaXh0dXJlSWQ6IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCxcclxuICAgICAgICBkYXRhOiB0YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVTdG9yZUZpeHR1cmUodXBkYXRlRml4dHVyZVBheWxvYWQpLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgIC8vIHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICBhd2FpdCB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGEuX2lkKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gZXhlY3V0ZSB1c2VyIGFjdGlvblwiKTtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGhhbmRsZUZlZWRiYWNrQWN0aW9uIFtlcnJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByb3RhdGVXYWxsKGVsZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlcixcclxuICAgICk7XHJcbiAgICBpZiAod2FsbC5hbmdsZSArIDkwIDwgMzYwKSB7XHJcbiAgICAgIHdhbGwuYW5nbGUgKz0gOTA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3YWxsLmFuZ2xlID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdXYWxsKGVsZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBnZXRXYWxsRW5kUG9pbnQgPSAod2FsbDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKHdhbGwuYW5nbGUgKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgICAgY29uc3QgbGVuZ3RoID0gd2FsbC5kaXN0YW5jZTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgeDogd2FsbC5yZWxhdGl2ZVBvc2l0aW9uLnggKyBsZW5ndGggKiBNYXRoLmNvcyhhbmdsZVJhZCksXHJcbiAgICAgICAgeTogd2FsbC5yZWxhdGl2ZVBvc2l0aW9uLnkgKyBsZW5ndGggKiBNYXRoLnNpbihhbmdsZVJhZCksXHJcbiAgICAgICAgdW5pdDogd2FsbC5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kSW5kZXgoXHJcbiAgICAgICh3OiBhbnkpID0+IHcuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHcuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPT09IC0xICYmIGVsZU51bWJlciAhPT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBzdGFydFBvc2l0aW9uO1xyXG5cclxuICAgIGlmIChlbGVOdW1iZXIgPT09IDApIHtcclxuICAgICAgc3RhcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcHJldldhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuICAgICAgc3RhcnRQb3NpdGlvbiA9IGdldFdhbGxFbmRQb2ludChwcmV2V2FsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmFzZVdhbGwgPVxyXG4gICAgICBlbGVOdW1iZXIgPT09IDBcclxuICAgICAgICA/IHsgYW5nbGU6IDAsIGRpcmVjdGlvbjogXCJyaWdodFwiLCB1bml0OiBcImZ0XCIgfVxyXG4gICAgICAgIDogdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpbmRleF07XHJcblxyXG4gICAgY29uc3QgbmV3V2FsbCA9IHtcclxuICAgICAgZWxlbWVudFR5cGU6IFwid2FsbFwiLFxyXG4gICAgICBkaXN0YW5jZTogMTUsXHJcbiAgICAgIHVuaXQ6IGJhc2VXYWxsLnVuaXQsXHJcbiAgICAgIGRpcmVjdGlvbjogYmFzZVdhbGwuZGlyZWN0aW9uLFxyXG4gICAgICBhbmdsZTogYmFzZVdhbGwuYW5nbGUsXHJcbiAgICAgIGVsZW1lbnROdW1iZXI6IGVsZU51bWJlciArIDEsXHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb246IHN0YXJ0UG9zaXRpb24sXHJcbiAgICAgIGZpeHR1cmVzOiBbXSxcclxuICAgICAgb3RoZXJFbGVtZW50czogW10sXHJcbiAgICAgIG5ld0FkZGVkOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnNwbGljZShcclxuICAgICAgZWxlTnVtYmVyID09PSAwID8gMCA6IGluZGV4ICsgMSxcclxuICAgICAgMCxcclxuICAgICAgbmV3V2FsbCxcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVXYWxsRWxlbWVudE51bWJlcigpO1xyXG4gICAgdGhpcy51cGRhdGVXYWxsQ29vcmRpbmF0ZXMoKTtcclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdFbnRyYW5jZSgpIHtcclxuICAgIGNvbnN0IGVsZU51bWJlciA9XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmlsdGVyKFxyXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIsXHJcbiAgICAgICk/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgIGNvbnN0IG5ld0VudHJhbmNlID0ge1xyXG4gICAgICBlbGVtZW50VHlwZTogXCJlbnRyYW5jZVwiLFxyXG4gICAgICBkaXN0YW5jZTogNixcclxuICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICBkaXJlY3Rpb246IFwidXBcIixcclxuICAgICAgYW5nbGU6IDAsXHJcbiAgICAgIGVsZW1lbnROdW1iZXI6IGVsZU51bWJlciArIDEsXHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb246IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9LFxyXG4gICAgICBmaXh0dXJlczogW10sXHJcbiAgICAgIG90aGVyRWxlbWVudHM6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnB1c2gobmV3RW50cmFuY2UpO1xyXG4gICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy51cGRhdGVFbnRyYW5jZUNvb3JkaW5hdGVzKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGROZXdGaXh0dXJlKGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIiwgd2FsbEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCB0ZW1wbGF0ZTogYW55ID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZSh0aGlzLmZpeHR1cmVUZW1wbGF0ZXNbMF0uX2lkKTtcclxuICAgIGNvbnN0IHRlbXBsYXRlRGF0YSA9IHRlbXBsYXRlLmRhdGE7XHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xyXG4gICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgIC4uLnRlbXBsYXRlRGF0YSxcclxuICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIHVuaXQ6IFwiZnRcIiB9LFxyXG4gICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgIG5ld0FkZGVkOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxEYXRhID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG5cclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3cCA9IHRoaXMuZnJvbVBpeGVscyh3LCBcImZ0XCIpO1xyXG5cclxuICAgICAgaWYgKHdhbGxEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeDAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICAgICAgY29uc3QgeTAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gd2FsbERhdGEuZGlzdGFuY2UgLSB3cDtcclxuXHJcbiAgICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YS5hbmdsZSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ4ID0geDAgKyBsZW5ndGggKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ5ID0geTAgKyBsZW5ndGggKiBNYXRoLnNpbihhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTtcclxuICAgICAgICBjb25zdCBmeF9vZmZzZXQgPSBmeCArIG9mZnNldCAqIC1NYXRoLnNpbihhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ5X29mZnNldCA9IGZ5ICsgb2Zmc2V0ICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSBmeF9vZmZzZXQ7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gZnlfb2Zmc2V0O1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBhbmdsZURlZztcclxuICAgICAgfVxyXG5cclxuICAgICAgKHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KHdhbGxJbmRleCEpLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICBmaXh0dXJlR3JvdXAsXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKT8uZml4dHVyZXMucHVzaChmaXh0dXJlRGF0YSk7XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgY29uc3QgZml4dHVyZVdpZHRoUHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmVIZWlnaHRQeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyBUcnkgdG8gZmluZCBlbXB0eSBjZW50ZXIgc3BhY2VcclxuICAgICAgY29uc3QgZW1wdHlTcG90ID0gdGhpcy5maW5kRW1wdHlDZW50ZXJTcG90KFxyXG4gICAgICAgIGZpeHR1cmVXaWR0aFB4LFxyXG4gICAgICAgIGZpeHR1cmVIZWlnaHRQeCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChlbXB0eVNwb3QpIHtcclxuICAgICAgICAvLyBDb252ZXJ0IGJhY2sgdG8gZnQgc2luY2Ugb3VyIHN0cnVjdHVyZSBzdG9yZXMgZnRcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLmZyb21QaXhlbHMoZW1wdHlTcG90LngsIFwiZnRcIik7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5mcm9tUGl4ZWxzKGVtcHR5U3BvdC55LCBcImZ0XCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGZhbGxiYWNrXHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi54ID0gMDtcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUucHVzaChmaXh0dXJlRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwibGF5b3V0XCI7XHJcbiAgICB0aGlzLnVwZGF0ZUZpeHR1cmVDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3T3RoZXJFbGVtZW50cyhwb3NUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIiwgd2FsbEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcG9zRGF0YSA9IHtcclxuICAgICAgX2lkOiBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gLFxyXG4gICAgICBmaXh0dXJlTmFtZTogYFBPUyBDb3VudGVyYCxcclxuICAgICAgZml4dHVyZVR5cGU6IFwib3RoZXJcIixcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjogeyB4OiAwLCB5OiAwLCBhbmdsZTogMCwgdW5pdDogXCJmdFwiIH0sXHJcbiAgICAgIGZpeHR1cmVTdGF0aWNMZW5ndGg6IHtcclxuICAgICAgICB2YWx1ZTogMyxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVTdGF0aWNXaWR0aDoge1xyXG4gICAgICAgIHZhbHVlOiA1LFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IHggPSBwb3NEYXRhLnJlbGF0aXZlUG9zaXRpb24ueDtcclxuICAgIGxldCB5ID0gcG9zRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICBsZXQgYSA9IHBvc0RhdGEucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuXHJcbiAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIHBvc0RhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld090aGVyR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdHlwZTogW3Bvc0RhdGEuZml4dHVyZU5hbWUgfHwgXCJQT1MgQ291bnRlclwiXSwgLy8gZGVmYXVsdCBzZWxlY3RlZCBsYWJlbFxyXG4gICAgICBjdXN0b21OYW1lOiBbXCJcIl0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocG9zVHlwZSA9PSBcIndhbGxcIikge1xyXG4gICAgICBjb25zdCB3YWxsRGF0YSA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKTtcclxuICAgICAgaWYgKHdhbGxEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeDAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICAgICAgY29uc3QgeTAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gd2FsbERhdGEuZGlzdGFuY2U7XHJcbiAgICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YS5hbmdsZSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ4ID0geDAgKyAobGVuZ3RoIC8gMikgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3QgZnkgPSB5MCArIChsZW5ndGggLyAyKSAqIE1hdGguc2luKGFuZ2xlUmFkKTtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSAyLjU7XHJcbiAgICAgICAgY29uc3QgZnhfb2Zmc2V0ID0gZnggKyBvZmZzZXQgKiAtTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG4gICAgICAgIGNvbnN0IGZ5X29mZnNldCA9IGZ5ICsgb2Zmc2V0ICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICB4ID0gdGhpcy50b1BpeGVscyhmeF9vZmZzZXQsIFwiZnRcIik7XHJcbiAgICAgICAgeSA9IHRoaXMudG9QaXhlbHMoZnlfb2Zmc2V0LCBcImZ0XCIpO1xyXG4gICAgICAgIGEgPSBhbmdsZURlZztcclxuICAgICAgfVxyXG5cclxuICAgICAgT2JqZWN0LmFzc2lnbihwb3NEYXRhLCB7XHJcbiAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI6IHdhbGxJbmRleCEgKyAxLFxyXG4gICAgICAgIGFzc29jaWF0ZWRFbGVtZW50VHlwZTogXCJ3YWxsXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgKHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KHdhbGxJbmRleCEpLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIG5ld090aGVyR3JvdXAsXHJcbiAgICAgICk7XHJcbiAgICAgIHdhbGxEYXRhLm90aGVyRWxlbWVudHMucHVzaCh7IC4uLnBvc0RhdGEsIG5ld0FkZGVkOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwb3NUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vck90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIG5ld090aGVyR3JvdXAsXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMucHVzaCh7IC4uLnBvc0RhdGEsIG5ld0FkZGVkOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlY3RHcm91cCA9IHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICB4LFxyXG4gICAgICB5LFxyXG4gICAgICBhLFxyXG4gICAgICB3LFxyXG4gICAgICBoLFxyXG4gICAgICBwb3NEYXRhLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBtYWtlIGFjdGl2ZVxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KHJlY3RHcm91cCk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH0gY2F0Y2gge31cclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVRvT3RoZXJFbGVtZW50c0NoYW5nZXMoKTtcclxuICAgIHRoaXMudXBkYXRlT3RoZXJFbGVtZW50c0Nvb3JkaW5hdGVzKCk7XHJcbiAgfVxyXG5cclxuICBmaW5kRW1wdHlDZW50ZXJTcG90KFxyXG4gICAgb2JqZWN0V2lkdGhQeDogbnVtYmVyLFxyXG4gICAgb2JqZWN0SGVpZ2h0UHg6IG51bWJlcixcclxuICAgIHRlbXBPY2N1cGllZDoge1xyXG4gICAgICB4OiBudW1iZXI7XHJcbiAgICAgIHk6IG51bWJlcjtcclxuICAgICAgd2lkdGg6IG51bWJlcjtcclxuICAgICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICB9W10gPSBbXSxcclxuICApIHtcclxuICAgIGNvbnN0IG9iamVjdHMgPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBjb25zdCBDRU5URVJfT0ZGU0VUX1ggPSAtMTAwOyAvLyDwn5GIIG1vdmUgbGVmdCBieSA0MHB4ICh0dW5lIHRoaXMpXHJcbiAgICBjb25zdCBDRU5URVJfT0ZGU0VUX1kgPSAwOyAvLyBrZWVwIFkgYXMtaXMgZm9yIG5vd1xyXG5cclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclggPSBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAvIDIgKyBDRU5URVJfT0ZGU0VUX1g7XHJcblxyXG4gICAgY29uc3QgY2VudGVyWSA9IGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMiArIENFTlRFUl9PRkZTRVRfWTtcclxuXHJcbiAgICAvLyAyLiBTcGlyYWwgc2VhcmNoIHBhcmFtZXRlcnNcclxuICAgIGNvbnN0IHN0ZXAgPSAyMDtcclxuICAgIGNvbnN0IG1heFJhZGl1cyA9IE1hdGgubWF4KGJvdW5kcy53aWR0aCwgYm91bmRzLmhlaWdodCk7XHJcblxyXG4gICAgZm9yIChsZXQgcmFkaXVzID0gMDsgcmFkaXVzIDwgbWF4UmFkaXVzOyByYWRpdXMgKz0gc3RlcCkge1xyXG4gICAgICBmb3IgKGxldCBhbmdsZSA9IDA7IGFuZ2xlIDwgMzYwOyBhbmdsZSArPSAzMCkge1xyXG4gICAgICAgIGNvbnN0IHJhZCA9IChhbmdsZSAqIE1hdGguUEkpIC8gMTgwO1xyXG5cclxuICAgICAgICAvLyDwn5SnIEZJWDogY2VudGVyIOKGkiB0b3AtbGVmdFxyXG4gICAgICAgIGNvbnN0IHggPSBjZW50ZXJYICsgcmFkaXVzICogTWF0aC5jb3MocmFkKSAtIG9iamVjdFdpZHRoUHggLyAyO1xyXG4gICAgICAgIGNvbnN0IHkgPSBjZW50ZXJZICsgcmFkaXVzICogTWF0aC5zaW4ocmFkKSAtIG9iamVjdEhlaWdodFB4IC8gMjtcclxuXHJcbiAgICAgICAgY29uc3QgdGVzdFJlY3QgPSB7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgd2lkdGg6IG9iamVjdFdpZHRoUHgsXHJcbiAgICAgICAgICBoZWlnaHQ6IG9iamVjdEhlaWdodFB4LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIDMuIENoZWNrIGNvbGxpc2lvbiB3aXRoIGV4aXN0aW5nIGNhbnZhcyBvYmplY3RzXHJcbiAgICAgICAgY29uc3QgY2FudmFzQ29sbGlzaW9uID0gb2JqZWN0cy5zb21lKChvYmopID0+IHtcclxuICAgICAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgICAgICByZXR1cm4gIShcclxuICAgICAgICAgICAgcmVjdC5sZWZ0ID4gdGVzdFJlY3QubGVmdCArIHRlc3RSZWN0LndpZHRoIHx8XHJcbiAgICAgICAgICAgIHJlY3QubGVmdCArIHJlY3Qud2lkdGggPCB0ZXN0UmVjdC5sZWZ0IHx8XHJcbiAgICAgICAgICAgIHJlY3QudG9wID4gdGVzdFJlY3QudG9wICsgdGVzdFJlY3QuaGVpZ2h0IHx8XHJcbiAgICAgICAgICAgIHJlY3QudG9wICsgcmVjdC5oZWlnaHQgPCB0ZXN0UmVjdC50b3BcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChjYW52YXNDb2xsaXNpb24pIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAvLyA0LiBDaGVjayBjb2xsaXNpb24gd2l0aCB0ZW1wIHBsYWNlZCBmaXh0dXJlcyAoQ0FEIGJhdGNoKVxyXG4gICAgICAgIGNvbnN0IHRlbXBDb2xsaXNpb24gPSB0ZW1wT2NjdXBpZWQuc29tZSgobykgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuICEoXHJcbiAgICAgICAgICAgIG8ueCA+IHRlc3RSZWN0LmxlZnQgKyB0ZXN0UmVjdC53aWR0aCB8fFxyXG4gICAgICAgICAgICBvLnggKyBvLndpZHRoIDwgdGVzdFJlY3QubGVmdCB8fFxyXG4gICAgICAgICAgICBvLnkgPiB0ZXN0UmVjdC50b3AgKyB0ZXN0UmVjdC5oZWlnaHQgfHxcclxuICAgICAgICAgICAgby55ICsgby5oZWlnaHQgPCB0ZXN0UmVjdC50b3BcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0ZW1wQ29sbGlzaW9uKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgeCwgeSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjYW5jZWxFZGl0KCkge1xyXG4gICAgYXdhaXQgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW5Ub0RlbGV0ZUtleSgpIHtcclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIChlKSA9PiB7XHJcbiAgICAgIGlmIChlLmtleSA9PT0gXCJEZWxldGVcIiAmJiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCkge1xyXG4gICAgICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuY2FudmFzPy5nZXRBY3RpdmVPYmplY3QoKSBhcyBhbnk7XHJcblxyXG4gICAgICAgIGlmIChhY3RpdmUgJiYgKGFjdGl2ZSBhcyBhbnkpLm9ialR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVFbnRyYW5jZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFjdGl2ZSAmJiAoYWN0aXZlIGFzIGFueSkub2JqVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGlmIChhY3RpdmU/LmRhdGE/LmVsZW1lbnROdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVXYWxsKGFjdGl2ZT8uZGF0YT8uZWxlbWVudE51bWJlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYWN0aXZlICYmIChhY3RpdmUgYXMgYW55KS5vYmpUeXBlID09PSBcImZpeHR1cmVcIikge1xyXG4gICAgICAgICAgaWYgKGFjdGl2ZT8uZml4dHVyZVR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVGaXh0dXJlKFxyXG4gICAgICAgICAgICAgIGFjdGl2ZT8uZml4dHVyZVR5cGUsXHJcbiAgICAgICAgICAgICAgYWN0aXZlPy5maXh0dXJlSW5kZXggLSAxLFxyXG4gICAgICAgICAgICAgIGFjdGl2ZT8ud2FsbEluZGV4IC0gMSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlRW50cmFuY2UoKSB7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmNhbnZhcy5nZXRBY3RpdmVPYmplY3QoKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSAmJiBhY3RpdmUub2JqVHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmRJbmRleChcclxuICAgICAgICAoZWw6IGFueSkgPT5cclxuICAgICAgICAgIGVsLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIgJiZcclxuICAgICAgICAgIGVsLmVsZW1lbnROdW1iZXIgPT09IGFjdGl2ZS5kYXRhLmVsZW1lbnROdW1iZXIsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBkZWxldGVXYWxsKGVsZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgZWxlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbGUuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyLFxyXG4gICAgKTtcclxuICAgIGlmICh3YWxsLmZpeHR1cmVzLmxlbmd0aCB8fCB3YWxsLm90aGVyRWxlbWVudHMubGVuZ3RoKVxyXG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGVXYWxsKCkpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgaSA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZEluZGV4KFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlcixcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5zcGxpY2UoaSwgMSk7XHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxFbGVtZW50TnVtYmVyKCk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVXYWxsRWxlbWVudE51bWJlcigpIHtcclxuICAgIGNvbnN0IG9ubHlXYWxscyA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24/LmZpbHRlcihcclxuICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIixcclxuICAgICk7XHJcblxyXG4gICAgb25seVdhbGxzPy5mb3JFYWNoKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaXRlbS5lbGVtZW50TnVtYmVyID0gaW5kZXggKyAxO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b1BpeGVscyh2YWx1ZTogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCkge1xyXG4gICAgbGV0IHBpeGVsczogbnVtYmVyO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgcGl4ZWxzID0gKHZhbHVlIC8gMjUuNCkgKiBkcGk7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICBwaXhlbHMgPSB2YWx1ZSAqIDEyICogZHBpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcihwaXhlbHMudG9GaXhlZCg0KSk7XHJcbiAgfVxyXG5cclxuICBmcm9tUGl4ZWxzKHBpeGVsczogbnVtYmVyLCB1bml0OiBzdHJpbmcsIGRwaSA9IDIuOCk6IG51bWJlciB7XHJcbiAgICBsZXQgdmFsdWU6IG51bWJlcjtcclxuXHJcbiAgICAvLyBwaXhlbHMgPSBwaXhlbHMgPj0gdGhpcy53YWxsVGhpY2tuZXNzID8gcGl4ZWxzIC0gdGhpcy53YWxsVGhpY2tuZXNzIDogdGhpcy53YWxsVGhpY2tuZXNzO1xyXG5cclxuICAgIGlmICh1bml0ID09PSBcIm1tXCIpIHtcclxuICAgICAgdmFsdWUgPSAocGl4ZWxzIC8gZHBpKSAqIDI1LjQ7XHJcbiAgICB9IGVsc2UgaWYgKHVuaXQgPT09IFwiZnRcIikge1xyXG4gICAgICB2YWx1ZSA9IHBpeGVscyAvICgxMiAqIGRwaSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlLnRvRml4ZWQoNCkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybUVkaXQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gXCJva1wiKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1EZWxldGVXYWxsKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gXCJEZWxldGUgd2FsbFwiO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9XHJcbiAgICAgICAgXCJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgd2FsbCBhbG9uZyB3aXRoIGl0cyBhc3NvY2lhdGVkIGZpeHR1cmVzIGFuZCBlbGVtZW50cz9cIjtcclxuXHJcbiAgICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoZml4dHVyZXM/OiBhbnkpIHtcclxuICAgIGNvbnN0IGZpeHR1cmVzRnJvbUNhbnZhcyA9XHJcbiAgICAgIGZpeHR1cmVzID8/XHJcbiAgICAgIHRoaXMuY2FudmFzXHJcbiAgICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLmZpeHR1cmVJZClcclxuICAgICAgICAubWFwKChvYmopID0+ICh7XHJcbiAgICAgICAgICBpZDogKG9iaiBhcyBhbnkpLmZpeHR1cmVJZCxcclxuICAgICAgICAgIHg6IG9iai5sZWZ0LFxyXG4gICAgICAgICAgeTogb2JqLnRvcCxcclxuICAgICAgICAgIGFuZ2xlOiBvYmo/LmFuZ2xlID8/IDAsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiBmaXh0dXJlc0Zyb21DYW52YXMpIHtcclxuICAgICAgcG9zTWFwLnNldChmaXh0dXJlLmlkLCB7XHJcbiAgICAgICAgeDogdGhpcy5mcm9tUGl4ZWxzKGZpeHR1cmUueCwgXCJmdFwiKSxcclxuICAgICAgICB5OiB0aGlzLmZyb21QaXhlbHMoZml4dHVyZS55LCBcImZ0XCIpLFxyXG4gICAgICAgIGFuZ2xlOiBmaXh0dXJlLmFuZ2xlLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGNmOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgbGF0ZXN0Rml4dHVyZVBvcyA9IHBvc01hcC5nZXQoY2YuX2lkKTtcclxuICAgICAgaWYgKGxhdGVzdEZpeHR1cmVQb3MpIHtcclxuICAgICAgICBjZi5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RGaXh0dXJlUG9zLng7XHJcbiAgICAgICAgY2YucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0Rml4dHVyZVBvcy55O1xyXG4gICAgICAgIGNmLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBsYXRlc3RGaXh0dXJlUG9zLmFuZ2xlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICB3Py5maXh0dXJlcz8uZm9yRWFjaCgod2Y6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdEZpeHR1cmVQb3MgPSBwb3NNYXAuZ2V0KHdmLl9pZCk7XHJcbiAgICAgICAgaWYgKGxhdGVzdEZpeHR1cmVQb3MpIHtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdEZpeHR1cmVQb3MueDtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdEZpeHR1cmVQb3MueTtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBsYXRlc3RGaXh0dXJlUG9zLmFuZ2xlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZU90aGVyRWxlbWVudHNDb29yZGluYXRlcygpIHtcclxuICAgIGNvbnN0IG90aGVyc0Zyb21DYW52YXMgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLm9ialR5cGUgPT09IFwib3RoZXJzXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4gKHtcclxuICAgICAgICBpZDogKG9iaiBhcyBhbnkpLmRhdGE/Ll9pZCxcclxuICAgICAgICBsYWJlbDogKG9iaiBhcyBhbnkpLmRhdGE/LmZpeHR1cmVOYW1lLFxyXG4gICAgICAgIHg6IG9iai5sZWZ0LFxyXG4gICAgICAgIHk6IG9iai50b3AsXHJcbiAgICAgICAgYW5nbGU6IG9iaj8uYW5nbGUgPz8gMCxcclxuICAgICAgICB3aWR0aDogdGhpcy5mcm9tUGl4ZWxzKG9iai5nZXRTY2FsZWRXaWR0aCgpIC0gMiwgXCJmdFwiKSxcclxuICAgICAgICBoZWlnaHQ6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkSGVpZ2h0KCkgLSAyLCBcImZ0XCIpLFxyXG4gICAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcDxcclxuICAgICAgc3RyaW5nLFxyXG4gICAgICB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBhbmdsZTogbnVtYmVyOyBoOiBudW1iZXI7IHc6IG51bWJlciB9XHJcbiAgICA+KCk7XHJcbiAgICBmb3IgKGNvbnN0IG90aGVyIG9mIG90aGVyc0Zyb21DYW52YXMpIHtcclxuICAgICAgaWYgKG90aGVyLmlkKSB7XHJcbiAgICAgICAgcG9zTWFwLnNldChvdGhlci5pZCwge1xyXG4gICAgICAgICAgeDogdGhpcy5mcm9tUGl4ZWxzKG90aGVyLngsIFwiZnRcIiksXHJcbiAgICAgICAgICB5OiB0aGlzLmZyb21QaXhlbHMob3RoZXIueSwgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvdGhlci5hbmdsZSxcclxuICAgICAgICAgIGg6IG90aGVyLmhlaWdodCxcclxuICAgICAgICAgIHc6IG90aGVyLndpZHRoLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cy5mb3JFYWNoKChlbDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0T3RoZXJzUG9zID0gcG9zTWFwLmdldChlbC5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RPdGhlcnNQb3MpIHtcclxuICAgICAgICAgIGVsLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdE90aGVyc1Bvcy54O1xyXG4gICAgICAgICAgZWwucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0T3RoZXJzUG9zLnk7XHJcbiAgICAgICAgICBlbC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0T3RoZXJzUG9zLmFuZ2xlO1xyXG4gICAgICAgICAgZWwuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy5oO1xyXG4gICAgICAgICAgZWwuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlID0gbGF0ZXN0T3RoZXJzUG9zLnc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICB3Py5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKCh3ZjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0T3RoZXJzUG9zID0gcG9zTWFwLmdldCh3Zi5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RPdGhlcnNQb3MpIHtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdE90aGVyc1Bvcy54O1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0T3RoZXJzUG9zLnk7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0T3RoZXJzUG9zLmFuZ2xlO1xyXG4gICAgICAgICAgd2YuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy5oO1xyXG4gICAgICAgICAgd2YuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlID0gbGF0ZXN0T3RoZXJzUG9zLnc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlV2FsbENvb3JkaW5hdGVzKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcigob2JqKSA9PiAob2JqIGFzIGFueSkub2JqVHlwZSA9PT0gXCJ3YWxsXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0b3A6IHRoaXMuZnJvbVBpeGVscyhvYmoudG9wLCBcImZ0XCIpLFxyXG4gICAgICAgICAgbGVmdDogdGhpcy5mcm9tUGl4ZWxzKG9iai5sZWZ0LCBcImZ0XCIpLFxyXG4gICAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSAtIDAuMjcsIFwiZnRcIiksXHJcbiAgICAgICAgICBoZWlnaHQ6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkSGVpZ2h0KCkgLSAwLjI3LCBcImZ0XCIpLFxyXG4gICAgICAgICAgYW5nbGU6IG9iai5hbmdsZSxcclxuICAgICAgICAgIGVsZW1lbnREYXRhOiAob2JqIGFzIGFueSkuZGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwb3NNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCB3YWxsIG9mIGRhdGEpIHtcclxuICAgICAgcG9zTWFwLnNldChcclxuICAgICAgICBgJHt3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlfSR7d2FsbC5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyfWAsXHJcbiAgICAgICAgZGF0YS5maW5kKFxyXG4gICAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlID09PSB3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlICYmXHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyID09PSB3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXIsXHJcbiAgICAgICAgKSxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB3YWxsUG9zID0gcG9zTWFwLmdldChgJHt3LmVsZW1lbnRUeXBlfSR7dy5lbGVtZW50TnVtYmVyfWApO1xyXG4gICAgICBpZiAod2FsbFBvcykge1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi54ID0gd2FsbFBvcy5sZWZ0O1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi55ID0gd2FsbFBvcy50b3A7XHJcbiAgICAgICAgdy5hbmdsZSA9IHdhbGxQb3MuYW5nbGU7XHJcbiAgICAgICAgdy5kaXN0YW5jZSA9IHdhbGxQb3Mud2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRW50cmFuY2VDb29yZGluYXRlcygpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLm9ialR5cGUgPT09IFwiZW50cmFuY2VcIilcclxuICAgICAgLm1hcCgob2JqKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHRvcDogdGhpcy5mcm9tUGl4ZWxzKG9iai50b3AsIFwiZnRcIiksXHJcbiAgICAgICAgICBsZWZ0OiB0aGlzLmZyb21QaXhlbHMob2JqLmxlZnQsIFwiZnRcIiksXHJcbiAgICAgICAgICB3aWR0aDogdGhpcy5mcm9tUGl4ZWxzKG9iai5nZXRTY2FsZWRXaWR0aCgpLCBcImZ0XCIpLFxyXG4gICAgICAgICAgYW5nbGU6IG9iai5hbmdsZSxcclxuICAgICAgICAgIGVsZW1lbnREYXRhOiAob2JqIGFzIGFueSkuZGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwb3NNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbnRyYW5jZSBvZiBkYXRhKSB7XHJcbiAgICAgIHBvc01hcC5zZXQoXHJcbiAgICAgICAgYCR7ZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudFR5cGV9JHtlbnRyYW5jZS5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyfWAsXHJcbiAgICAgICAgZGF0YS5maW5kKFxyXG4gICAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlID09PSBlbnRyYW5jZS5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSAmJlxyXG4gICAgICAgICAgICBvYmouZWxlbWVudERhdGEuZWxlbWVudE51bWJlciA9PT1cclxuICAgICAgICAgICAgICBlbnRyYW5jZS5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyLFxyXG4gICAgICAgICksXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgZW50cmFuY2VQb3MgPSBwb3NNYXAuZ2V0KGAke3cuZWxlbWVudFR5cGV9JHt3LmVsZW1lbnROdW1iZXJ9YCk7XHJcbiAgICAgIGlmIChlbnRyYW5jZVBvcykge1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi54ID0gZW50cmFuY2VQb3MubGVmdDtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueSA9IGVudHJhbmNlUG9zLnRvcDtcclxuICAgICAgICB3LmFuZ2xlID0gZW50cmFuY2VQb3MuYW5nbGU7XHJcbiAgICAgICAgdy5kaXN0YW5jZSA9IGVudHJhbmNlUG9zLndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUxheW91dChlZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUpIHtcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtRWRpdCgpKSkge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRQdWJsaXNoID0gdGhpcy50YXNrSW5mby5kaXNhYmxlZDtcclxuICAgICAgICB0aGlzLmxheW91dEZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnRhc2tTdHlsZS5maXh0dXJlLmNsYXNzID09IFwicmV2aWV3UGVuZGluZ1wiKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBlbGVtZW50LmZpeHR1cmVzID0gZWxlbWVudC5maXh0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gIWZpeHR1cmU/Lmdob3N0ICYmIGZpeHR1cmUuZml4dHVyZU5hbWUgIT09IFwic3BhY2VcIixcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVcclxuICAgICAgLmZpbHRlcigoZml4dHVyZTogYW55KSA9PiAhZml4dHVyZT8uZ2hvc3QpXHJcbiAgICAgIC5tYXAoKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgYXNzb2NpYXRlZEVsZW1lbnRUeXBlLCBhc3NvY2lhdGVkRWxlbWVudE51bWJlciwgLi4ucmVzdCB9ID1cclxuICAgICAgICAgIGZpeHR1cmU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3Q7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5yZW9yZGVyRml4dHVyZSh0aGlzLmZsb29yRGF0YSk7XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICBkYXRhOiB0aGlzLmZsb29yRGF0YSxcclxuICAgICAgZWRpdE1vZGU6IGVkaXRNb2RlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlU3RvcmVQbGFubyhwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byB1cGRhdGUgbGF5b3V0XCIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3NpZ25UYXNrKCkge1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICByZWRvOiBmYWxzZSxcclxuICAgICAgY2hlY2tMaXN0TmFtZTogXCJcIixcclxuICAgICAgc3RvcmU6IHRoaXMucGxhbm9EYXRhLnN0b3JlTmFtZSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMucGxhbm9EYXRhLmNsaWVudElkLFxyXG4gICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dFwiKSB7XHJcbiAgICAgIC8vIHRoaXMudXBkYXRlTGF5b3V0KClcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJMYXlvdXQgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXQtcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiTGF5b3V0IFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgICBwYXlsb2FkLnRhc2tJZCA9XHJcbiAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmxheW91dERhdGFbXHJcbiAgICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2subGF5b3V0RGF0YS5sZW5ndGggLSAxXHJcbiAgICAgICAgXS50YXNrSWQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmVcIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkZpeHR1cmUgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlLXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkZpeHR1cmUgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICAgIHBheWxvYWQudGFza0lkID1cclxuICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2suZml4dHVyZURhdGFbXHJcbiAgICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2suZml4dHVyZURhdGEubGVuZ3RoIC0gMVxyXG4gICAgICAgIF0udGFza0lkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bVwiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiVk0gVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bS1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJWTSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgICAgcGF5bG9hZC50YXNrSWQgPVxyXG4gICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjay5WbURhdGFbdGhpcy5zdG9yZUZlZWRiYWNrLlZtRGF0YS5sZW5ndGggLSAxXS50YXNrSWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUHVibGlzaHRhc2tQb3B1cENvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgd2luZG93Q2xhc3M6IFwiY3VzdG9tLWhlaWdodC1tb2RhbFwiLCAvLyA8LS0gQWRkIGEgY3VzdG9tIGNsYXNzIGhlcmVcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHlwZSA9IHRoaXMucHVibGlzaGluZ1N0YXRlO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW5wdXREYXRhID0gcGF5bG9hZDtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwic3VibWl0XCIpIHtcclxuICAgICAgICBsZXQgdGFza1R5cGUgPSB0aGlzLnB1Ymxpc2hpbmdTdGF0ZTtcclxuICAgICAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm0tcmVkb1wiKSB7XHJcbiAgICAgICAgICB0YXNrVHlwZSA9IFwidm1cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmUtcmVkb1wiKSB7XHJcbiAgICAgICAgICB0YXNrVHlwZSA9IFwiZml4dHVyZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0LXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcImxheW91dFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LmNvbW1lbnRzICYmIHJlc3VsdC5jb21tZW50cyAhPSBcIlwiKSB7XHJcbiAgICAgICAgICBsZXQgY29tbWVudFBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgICAgICAgICAgdGFza1R5cGU6IHRhc2tUeXBlLFxyXG4gICAgICAgICAgICBjb21tZW50OiByZXN1bHQuY29tbWVudHMsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZUdsb2JhbENvbW1lbnQoY29tbWVudFBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge30sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLmNyZWF0ZVRhc2socGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50YXNrRGV0YWlscyh0aGlzLmZsb29yRGF0YS5wbGFub0lkLCB0aGlzLmZsb29yRGF0YS5faWQpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGZWVkYmFjayhcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChyZXM/LmRhdGE/Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBwdWJsaXNoIHRhc2tcIik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uQ2xpY2tFZGl0KCkge1xyXG4gICAgaWYgKHRoaXMudGFza1N0eWxlLmZpeHR1cmUubmFtZSAhPT0gXCJBcHByb3ZlZFwiKSB7XHJcbiAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCB0cnVlKTtcclxuICAgICAgdGhpcy50b2dnbGVQYW5lbChcImxlZnRcIiwgZmFsc2UpO1xyXG5cclxuICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSB0cnVlO1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sYXlvdXRGb3JtLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXHJcbiAgICAgICAgYG1hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXJvbGxvdXQ/cGxhbm9JZD0ke3RoaXMuZmxvb3JEYXRhLnBsYW5vSWR9JmZsb29ySWQ9JHt0aGlzLmZsb29yRGF0YS5faWR9YCxcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRhc2tEZXRhaWxzKHBsYW5vSWQ6IGFueSwgZmxvb3JJZDogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLnRhc2tJbmZvID0ge307XHJcbiAgICAgIHRoaXMudGFza1N0eWxlID0ge1xyXG4gICAgICAgIGxheW91dDogeyBuYW1lOiBcIllldCBUbyBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9LFxyXG4gICAgICAgIGZpeHR1cmU6IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICAgICAgICB2bTogeyBuYW1lOiBcIllldCBUbyBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9LFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0VGFza0luZm8oeyBwbGFub0lkLCBmbG9vcklkIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkUHVibGlzaCA9IHJlcz8uZGF0YT8uZGlzYWJsZWQgfHwgZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudGFza0luZm8gPSByZXM/LmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlbGUudHlwZSA9PSBcImxheW91dFwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tTdHlsZS5sYXlvdXQgPSB0aGlzLmdldFN0YXR1cyhcImxheW91dFwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGVsZS50eXBlID09IFwiZml4dHVyZVwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tTdHlsZS5maXh0dXJlID0gdGhpcy5nZXRTdGF0dXMoXCJmaXh0dXJlXCIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZWxlLnR5cGUgPT0gXCJmaXh0dXJlXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFza1N0eWxlLnZtID0gdGhpcy50YXNrU3R5bGUuZml4dHVyZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVB1Ymxpc2hpbmdTdGF0ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGdldCB0YXNrIGRldGFpbHNcIik7XHJcbiAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzKHR5cGU6IGFueSkge1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZCgoZWxlOiBhbnkpID0+IGVsZS50eXBlID09IHR5cGUpO1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGRhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiZcclxuICAgICAgICAoZGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcImNvbXBsZXRlXCIgfHwgIWRhdGE/LmZlZWRiYWNrU3RhdHVzKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4geyBuYW1lOiBcIkFwcHJvdmVkXCIsIGNsYXNzOiBcImNvbXBsZXRlZFwiIH07XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJiBkYXRhLmZlZWRiYWNrU3RhdHVzID09IFwicGVuZGluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJSZXZpZXcgUGVuZGluZ1wiLCBjbGFzczogXCJyZXZpZXdQZW5kaW5nXCIgfTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmIGRhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJkaXNhZ3JlZVwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJZZXQgdG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoZGF0YS5yZWRvU3RhdHVzICYmICFkYXRhLmJyZWFjaCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJSZWRvXCIsIGNsYXNzOiBcInRhc2tBc3NpZ25lZFwiIH07XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmJyZWFjaCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJGbGFnZ2VkXCIsIGNsYXNzOiBcImZsYWdnZWRcIiB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBuYW1lOiBcIlRhc2sgQXNzaWduZWRcIiwgY2xhc3M6IFwidGFza0Fzc2lnbmVkXCIgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbmFtZTogXCJZZXQgdG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfTtcclxuICB9XHJcblxyXG4gIGdldEVsZW1lbnROdW1iZXIoZ3JvdXA6IGFueSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIGdyb3VwLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRGaXh0dXJlKGdyb3VwOiBhbnksIGJsaW5rOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZW5hYmxlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgIHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmsgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjZW50ZXIgPSBncm91cC5nZXRDZW50ZXJQb2ludCgpO1xyXG5cclxuICAgIGNvbnN0IHJlYWxXaWR0aCA9IGdyb3VwLndpZHRoISAqIGdyb3VwLnNjYWxlWCE7XHJcbiAgICBjb25zdCByZWFsSGVpZ2h0ID0gZ3JvdXAuaGVpZ2h0ISAqIGdyb3VwLnNjYWxlWSE7XHJcblxyXG4gICAgY29uc3QgcmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGNlbnRlci54LFxyXG4gICAgICB0b3A6IGNlbnRlci55LFxyXG4gICAgICB3aWR0aDogcmVhbFdpZHRoICsgOCwgLy8gY29uc2lzdGVudCBwYWRkaW5nXHJcbiAgICAgIGhlaWdodDogcmVhbEhlaWdodCArIDgsXHJcbiAgICAgIHJ4OiA1LFxyXG4gICAgICByeTogNSxcclxuICAgICAgc3Ryb2tlOiBcIiMwMGFhZmZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDMsXHJcbiAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBhbmdsZTogZ3JvdXAuYW5nbGUgfHwgMCxcclxuICAgICAgb3BhY2l0eTogYmxpbmsgPyAwIDogMSxcclxuICAgIH0pO1xyXG5cclxuICAgIChyZWN0IGFzIGFueSkuZGF0YSA9IHsgdHlwZTogXCJmaXh0dXJlLWhpZ2hsaWdodFwiIH07XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKHJlY3QpO1xyXG4gICAgdGhpcy5jYW52YXMubW92ZU9iamVjdFRvKHJlY3QsIHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggLSAxKTtcclxuICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IHJlY3Q7XHJcblxyXG4gICAgLy8gLS0tIE5vIGJsaW5raW5nIG5lZWRlZCAtLS1cclxuICAgIGlmICghYmxpbmspIHJldHVybjtcclxuXHJcbiAgICBsZXQgY3ljbGVzID0gMDtcclxuXHJcbiAgICBjb25zdCBibGlua09uY2UgPSAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlY3QuYW5pbWF0ZShcclxuICAgICAgICB7IG9wYWNpdHk6IDEgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgb25DaGFuZ2U6ICgpID0+IHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKSxcclxuICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVjdC5hbmltYXRlKFxyXG4gICAgICAgICAgICAgIHsgb3BhY2l0eTogMCB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogKCkgPT4gdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpLFxyXG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBjeWNsZXMrKztcclxuICAgICAgICAgICAgICAgICAgaWYgKGN5Y2xlcyA8IDIwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmxpbmtPbmNlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldCh7IG9wYWNpdHk6IDEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGJsaW5rT25jZSgpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSGlnaGxpZ2h0KCkge1xyXG4gICAgdGhpcy5jYW5jZWxIaWdobGlnaHRCbGluayA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYW52YXM/LmdldE9iamVjdHMoKT8uZm9yRWFjaCgob2JqKSA9PiB7XHJcbiAgICAgIGlmICgob2JqIGFzIGFueSkuZGF0YT8udHlwZSA9PT0gXCJmaXh0dXJlLWhpZ2hsaWdodFwiKSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKG9iaik7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlSGlnaGxpZ2h0ID0gbnVsbDtcclxuICAgIHRoaXMuY2FudmFzPy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBrZWVwSGlnaGxpZ2h0T25Ub3AgPSAoKSA9PiB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aXZlSGlnaGxpZ2h0KSByZXR1cm47XHJcbiAgICBjb25zdCBvYmpzID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgdGhpcy5jYW52YXMubW92ZU9iamVjdFRvKHRoaXMuYWN0aXZlSGlnaGxpZ2h0LCBvYmpzLmxlbmd0aCAtIDEpO1xyXG4gIH07XHJcblxyXG4gIG9uQ2hhbmdlRml4dHVyZU9uRmVlZGJhY2tQYW5lbChcclxuICAgIHtcclxuICAgICAgY3VycmVudEZpeHR1cmUsXHJcbiAgICAgIGFjdGlvbixcclxuICAgIH06IHtcclxuICAgICAgY3VycmVudEZpeHR1cmU/OiBzdHJpbmc7XHJcbiAgICAgIGFjdGlvbj86IFwibmV4dFwiIHwgXCJwcmV2aW91c1wiO1xyXG4gICAgfSxcclxuICAgIGNvbGxhcHNlVGFza0luZm86IGJvb2xlYW4gPSBmYWxzZSxcclxuICApIHtcclxuICAgIGxldCBpbmRleFRvU2VsZWN0ID0gY3VycmVudEZpeHR1cmVcclxuICAgICAgPyB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMuZmluZEluZGV4KChmOiBhbnkpID0+IGYuX2lkID09PSBjdXJyZW50Rml4dHVyZSlcclxuICAgICAgOiAwO1xyXG5cclxuICAgIGlmIChhY3Rpb24gPT09IFwibmV4dFwiKSB7XHJcbiAgICAgIGlmIChpbmRleFRvU2VsZWN0ID09IHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdCA9IDA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdCsrO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJwcmV2aW91c1wiKSB7XHJcbiAgICAgIGlmIChpbmRleFRvU2VsZWN0ID09IDApIHtcclxuICAgICAgICBpbmRleFRvU2VsZWN0ID0gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmxlbmd0aCAtIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdC0tO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFjdXJyZW50Rml4dHVyZSAmJiAhYWN0aW9uKSB7XHJcbiAgICAgIGluZGV4VG9TZWxlY3QgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpeHR1cmVJZFRvU2VsZWN0ID0gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzW2luZGV4VG9TZWxlY3RdPy5faWQ7XHJcblxyXG4gICAgY29uc3QgYWN0aW9uRml4dHVyZSA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbmQoXHJcbiAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IGZpeHR1cmVJZFRvU2VsZWN0LFxyXG4gICAgICApIGFzIGZhYnJpYy5Hcm91cCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAoIWFjdGlvbkZpeHR1cmUpIHJldHVybjtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCAzMDApO1xyXG5cclxuICAgIHRoaXMuaGlnaGxpZ2h0Rml4dHVyZShhY3Rpb25GaXh0dXJlKTtcclxuICAgIHRoaXMuc2VsZWN0Rml4dHVyZU9uQ2FudmFzQ2xpY2soYWN0aW9uRml4dHVyZSwgY29sbGFwc2VUYXNrSW5mbyk7XHJcbiAgfVxyXG5cclxuICByZXZva2VUYXNrKCkge1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICByZWRvOiBmYWxzZSxcclxuICAgICAgY2hlY2tMaXN0TmFtZTogXCJcIixcclxuICAgICAgc3RvcmU6IHRoaXMucGxhbm9EYXRhLnN0b3JlTmFtZSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMucGxhbm9EYXRhLmNsaWVudElkLFxyXG4gICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXRcIikge1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcImxheW91dFwiO1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZUxheW91dCgpXHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiTGF5b3V0IFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0LXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkxheW91dCBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJsYXlvdXRcIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZVwiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiRml4dHVyZSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlLXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkZpeHR1cmUgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwiZml4dHVyZVwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bVwiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiVk0gVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwidm1cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtLXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIlZNIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcInZtXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBwYXlsb2FkLnRhc2tJZCA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzLmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gcGF5bG9hZC50eXBlLFxyXG4gICAgKT8udGFza0lkO1xyXG5cclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihTdG9yZVRhc2tSZXZva2VDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIHdpbmRvd0NsYXNzOiBcImN1c3RvbS1oZWlnaHQtbW9kYWxcIiwgLy8gPC0tIEFkZCBhIGN1c3RvbSBjbGFzcyBoZXJlXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0aGlzLnB1Ymxpc2hpbmdTdGF0ZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmlucHV0RGF0YSA9IHBheWxvYWQ7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Ym1pdFwiKSB7XHJcbiAgICAgICAgbGV0IHRhc2tUeXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtLXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcInZtXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlLXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dC1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJsYXlvdXRcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5jb21tZW50cyAmJiByZXN1bHQuY29tbWVudHMgIT0gXCJcIikge1xyXG4gICAgICAgICAgbGV0IGNvbW1lbnRQYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgICAgIHRhc2tUeXBlOiB0YXNrVHlwZSxcclxuICAgICAgICAgICAgY29tbWVudDogcmVzdWx0LmNvbW1lbnRzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVHbG9iYWxDb21tZW50KGNvbW1lbnRQYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHt9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5yZXZva2VUYXNrKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMudGFza0RldGFpbHModGhpcy5mbG9vckRhdGEucGxhbm9JZCwgdGhpcy5mbG9vckRhdGEuX2lkKTtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QocmVzPy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gcHVibGlzaCB0YXNrXCIpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaXNoKCkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKENvbXBsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICBzaXplOiBcIm1kXCIsXHJcbiAgICAgIHNjcm9sbGFibGU6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICB3aW5kb3dDbGFzczogXCJjdXN0b20taGVpZ2h0LW1vZGFsXCIsXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gXCJQdWJsaXNoIHBsYW5vZ3JhbVwiO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICBcIllvdSBhcmUgYWJvdXQgdG8gcHVibGlzaCB0aGUgcGxhbm9ncmFtIHRvIHRoZSBzdG9yZS4gVGhpcyB3aWxsIGJlIHRoZSBsYXRlc3QgYW5kIG1vc3QgdXAtdG8tZGF0ZSBwbGFub2dyYW0gZm9yIHRoZSBzdG9yZS5cIjtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSBcInB1Ymxpc2hcIjtcclxuXHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMgPT0gXCJva1wiKSB7XHJcbiAgICAgICAgbGV0IGRhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5wbGFub0RhdGEpO1xyXG4gICAgICAgIGRhdGEuZmxvb3JJZCA9IHRoaXMuZmxvb3JEYXRhLl9pZDtcclxuICAgICAgICBkYXRhLmZsb29yRGF0YSA9IHRoaXMuZmxvb3JEYXRhO1xyXG4gICAgICAgIGRlbGV0ZSBkYXRhLmZsb29ycztcclxuICAgICAgICBkZWxldGUgZGF0YS5mbG9vckRhdGEubWFzdGVyVGVtcGxhdGVzO1xyXG4gICAgICAgIGxldCBwYXlsb2FkID0gZGF0YTtcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UucHVibGlzaChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEudmVyaWZpY2F0aW9uU3RhdHVzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QocmVzPy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBwdWJsaXNoIHBsYW5vXCIpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnb1RvU3RvcmVUb3VyUGFnZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFBsYW5vU3RvcmVWaWRlb1BhcmFtcyh7XHJcbiAgICAgICAgICBzdG9yZUlkOiB0aGlzLnBsYW5vRGF0YS5zdG9yZUlkLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKHJlcz8uZGF0YSkge1xyXG4gICAgICAgIGxldCBwYXJhbXMgPSByZXM/LmRhdGE7XHJcbiAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW1wiL21hbmFnZS90cmF4L2dhbGxlcnlcIl0sIHtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBwYXJhbXMsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHVybFRyZWUpO1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcGVuTm9WaWRlb0ZvdW5kTW9kYWwoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMub3Blbk5vVmlkZW9Gb3VuZE1vZGFsKCk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBnb1RvU3RvcmVUb3VyUGFnZSBbRVJSXTpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb3Blbk5vVmlkZW9Gb3VuZE1vZGFsKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLm5vU3RvcmVWaWRlb01vZGFsUmVmLCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH0pLnJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7fVxyXG4gIH1cclxuXHJcbiAgZ29Ub1N0b3JlQ2FtZXJhUGFnZSgpIHtcclxuICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtcIi9tYW5hZ2Uvc3RvcmVzL2NhbWVyYXNcIl0sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICBzdG9yZUlkOiB0aGlzLnBsYW5vRGF0YS5zdG9yZUlkLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKHVybFRyZWUpO1xyXG4gICAgd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcclxuICB9XHJcblxyXG4gIGdldFN0b3JlTGlzdChwbGFub0lkPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldFBsYW5vU3RvcmVMaXN0KHRoaXMuY2xpZW50SWQpXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHRoaXMuc3RvcmVMaXN0Lm1hcCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geyAuLi5lbGUsIHN0b3JlTmFtZTogZWxlLnN0b3JlTmFtZS50b1VwcGVyQ2FzZSgpIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAocGxhbm9JZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZU5hbWUgPSB0aGlzLnN0b3JlTGlzdC5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGVsZTogYW55KSA9PiBlbGUucGxhbm9JZC50b1N0cmluZygpID09IHBsYW5vSWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBvblNlbGVjdGVkKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMucGxhbm9EYXRhID0gbnVsbDtcclxuICAgIHRoaXMuZmxvb3JEYXRhID0gbnVsbDtcclxuICAgIGNvbnN0IG5ld1BhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XHJcbiAgICBuZXdQYXJhbXMuc2V0KFwicGxhbm9JZFwiLCBldmVudC5wbGFub0lkKTtcclxuICAgIG5ld1BhcmFtcy5zZXQoXCJmbG9vcklkXCIsIGV2ZW50LmZsb29ySWQpO1xyXG5cclxuICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgbmV3UGFyYW1zLnRvU3RyaW5nKCkpO1xyXG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCA9IHRydWU7XHJcbiAgICBhd2FpdCB0aGlzLmdldFN0b3JlRml4dHVyZXMoZXZlbnQuX2lkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFwcGx5UElETG9naWNzKCkge31cclxuXHJcbiAgYXN5bmMgb25DbGlja0FwcGx5TG9naWNzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmFwcGx5TG9naWNzTW9kYWxSZWYsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSkucmVzdWx0O1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHt9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkNsaWNrQXBwcm92ZUxheW91dCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5hcHByb3ZlTGF5b3V0TW9kYWxSZWYsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSkucmVzdWx0O1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHt9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhcHByb3ZlTGF5b3V0KCkge1xyXG4gICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSB0cnVlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGZsb29ySWQgPSB0aGlzLmZsb29yRGF0YS5faWQ7XHJcblxyXG4gICAgICBjb25zdCBwdWJsaXNoRGF0YSA9IHtcclxuICAgICAgICAuLi5zdHJ1Y3R1cmVkQ2xvbmUodGhpcy5wbGFub0RhdGEpLFxyXG4gICAgICAgIGZsb29ySWQsXHJcbiAgICAgICAgZmxvb3JEYXRhOiB7XHJcbiAgICAgICAgICAuLi50aGlzLmZsb29yRGF0YSxcclxuICAgICAgICAgIG1hc3RlclRlbXBsYXRlczogdW5kZWZpbmVkLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmxvb3JzOiB1bmRlZmluZWQsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlU3RvcmVQbGFubyh7XHJcbiAgICAgICAgICAgIGZsb29ySWQsXHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZmxvb3JEYXRhLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKSxcclxuICAgICAgICBmaXJzdFZhbHVlRnJvbSh0aGlzLmFwaVNlcnZpY2UucHVibGlzaChwdWJsaXNoRGF0YSkpLFxyXG4gICAgICAgIGZpcnN0VmFsdWVGcm9tKHRoaXMuYXBpU2VydmljZS5hcHByb3ZlUGxhbm9MYXlvdXQoZmxvb3JJZCkpLFxyXG4gICAgICBdKTtcclxuXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmlzUGxhbm9BcHByb3ZlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChcIkxheW91dCBhcHByb3ZlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJhcHByb3ZlTGF5b3V0IGZhaWxlZDpcIiwgZXJyb3IpO1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGFwcHJvdmUgbGF5b3V0XCIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cIm1hbmFnZS1wbGFub1wiPlxyXG4gIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiaXNQYWdlTG9hZGluZ1wiIGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG0tMFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyU2tlbGV0b25cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza2VsZXRvbkxvYWRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNrZWxldG9uTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2tlbGV0b25Mb2FkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIENvbnRlbnQgLS0+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1BhZ2VMb2FkaW5nIH1cIj5cclxuICAgIDwhLS0gSGVhZGVyIEFjY29yZGlvbiAtLT5cclxuICAgIDxkaXYgaWQ9XCJoZWFkZXJcIiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiIGNsYXNzPVwibXktNFwiPlxyXG4gICAgICA8ZGl2IG5nYkFjY29yZGlvbkl0ZW09XCJkZXRhaWxzXCIgW2NvbGxhcHNlZF09XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uSGVhZGVyIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweC02IHB5LTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4O21hcmdpbi1sZWZ0OjVweDttYXJnaW4tcmlnaHQ6NXB4XCIgKm5nSWY9XCJwbGFub0RhdGE/LnN0b3JlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSd0aXRsZSc+e3twbGFub0RhdGE/LnN0b3JlTmFtZX19IC0gUGxhbm88L2gyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdC1wbGFubyAqbmdJZj1cInN0b3JlTGlzdD8ubGVuZ3RoXCIgW2lkRmllbGRdPVwiJ19pZCdcIiBbc2VsZWN0ZWRWYWx1ZXNdPVwiW3NlbGVjdGVkU3RvcmVOYW1lXVwiXHJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJzdG9yZUxpc3RcIiBbbXVsdGldPWZhbHNlIHNlYXJjaEZpZWxkPVwic3RvcmVOYW1lXCIgKHNlbGVjdGVkKT1cIm9uU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9saWItc2VsZWN0LXBsYW5vPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSB7eyBwbGFub0RhdGE/LnN0b3JlTmFtZSB9fSAtLT5cclxuICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgKm5nSWY9XCJwbGFub0RhdGE/LmZsb29ycz8ubGVuZ3RoXCIgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkRmxvb3JJZFwiIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidmbG9vck51bSdcIiBbZGF0YV09XCJwbGFub0RhdGEuZmxvb3JzXCI+XHJcbiAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cy1idG5cIiAoY2xpY2spPVwiZ29Ub1N0b3JlVG91clBhZ2UoKVwiPlxyXG4gICAgICAgICAgICAgIFZpZXcgc3RvcmUgdG91clxyXG5cclxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDA4XzE2NDk4KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzM0I1RkZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUgNEw4IDZMNSA4VjRaXCIgc3Ryb2tlPVwiIzMzQjVGRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80MDhfMTY0OThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXMtYnRuXCIgKGNsaWNrKT1cImdvVG9TdG9yZUNhbWVyYVBhZ2UoKVwiPlxyXG4gICAgICAgICAgICAgIFZpZXcgY2FtZXJhXHJcblxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MjJfMzYzMjEpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk05IDYuNVY5LjVDOSA5Ljc2NTIyIDguODk0NjQgMTAuMDE5NiA4LjcwNzExIDEwLjIwNzFDOC41MTk1NyAxMC4zOTQ2IDguMjY1MjIgMTAuNSA4IDEwLjVIMi41QzIuMjM0NzggMTAuNSAxLjk4MDQzIDEwLjM5NDYgMS43OTI4OSAxMC4yMDcxQzEuNjA1MzYgMTAuMDE5NiAxLjUgOS43NjUyMiAxLjUgOS41VjRDMS41IDMuNzM0NzggMS42MDUzNiAzLjQ4MDQzIDEuNzkyODkgMy4yOTI4OUMxLjk4MDQzIDMuMTA1MzYgMi4yMzQ3OCAzIDIuNSAzSDUuNU03LjUgMS41SDEwLjVNMTAuNSAxLjVWNC41TTEwLjUgMS41TDUgN1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDIyXzM2MzIxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZWRpdEZpeHR1cmVcIiBjbGFzcz1cInVwZGF0ZUNsYXNzXCI+TGFzdCBVcGRhdGU6IHt7Zmxvb3JEYXRhPy51cGRhdGVkQXR9fTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtNCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8IS0tIEVkaXQgRml4dHVyZSBNb2RlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwib25GaXh0dXJlUGFnZUNhbmNlbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJvbkZpeHR1cmVTYXZlKClcIj5cclxuICAgICAgICAgICAgICAgICAgU2F2ZSAmIENsb3NlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgQGlmKCFlZGl0Rml4dHVyZSAmJiBmbG9vckRhdGE/LmlzUGxhbm9BcHByb3ZlZCA9PT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwib25DbGlja0FwcHJvdmVMYXlvdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsYXlvdXRGb3JtLmVuYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgQXBwcm92ZSBMYXlvdXRcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1AZWxzZXtcclxuICAgICAgICAgICAgICAgIDwhLS0gTm9ybWFsIE1vZGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVkaXRGaXh0dXJlICYmICFbJ3Rhc2tBc3NpZ25lZCddLmluY2x1ZGVzKHRhc2tTdHlsZS5maXh0dXJlLmNsYXNzKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIFB1Ymxpc2ggQnV0dG9ucyAtLT5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ2xheW91dCdcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhc3NpZ25UYXNrKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQdWJsaXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUHVibGlzaCBMYXlvdXQgVmVyaWZpY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09PSAnbGF5b3V0LXJlZG8nXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkUHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggTGF5b3V0IFJlZG9cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdmaXh0dXJlJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgICBQdWJsaXNoIEZpeHR1cmUgVmVyaWZpY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09PSAnZml4dHVyZS1yZWRvJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgICBQdWJsaXNoIEZpeHR1cmUgUmVkb1xyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ3ZtJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgICBQdWJsaXNoIFZNIFZlcmlmaWNhdGlvblxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ3ZtLXJlZG8nXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkUHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggVk0gUmVkb1xyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PSAnY29tcGxldGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgY29tcGxldGVkXCIgKm5nSWY9XCJmbG9vckRhdGE/LnZlcmlmaWNhdGlvblN0YXR1c1wiPlB1Ymxpc2hlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWZsb29yRGF0YT8udmVyaWZpY2F0aW9uU3RhdHVzXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHVibGlzaCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUHVibGlzaFxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFJldm9rZSBCdXR0b24gLS0+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmV2b2tlVGFzaygpXCIgKm5nSWY9XCJbJ3Rhc2tBc3NpZ25lZCddLmluY2x1ZGVzKHRhc2tTdHlsZS5maXh0dXJlLmNsYXNzKSAmJiAhZWRpdEZpeHR1cmVcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXJlZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibWUtMlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF82NDBfNTU5NClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjY2NjY5IDEwLjAwMTNIMTMuMzMzNE0xOC4zMzM0IDEwLjAwMTNDMTguMzMzNCAxNC42MDM3IDE0LjYwMjQgMTguMzM0NiAxMCAxOC4zMzQ2QzUuMzk3NjUgMTguMzM0NiAxLjY2NjY5IDE0LjYwMzcgMS42NjY2OSAxMC4wMDEzQzEuNjY2NjkgNS4zOTg5MyA1LjM5NzY1IDEuNjY3OTcgMTAgMS42Njc5N0MxNC42MDI0IDEuNjY3OTcgMTguMzMzNCA1LjM5ODkzIDE4LjMzMzQgMTAuMDAxM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzY0MF81NTk0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgUmV2b2tlXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgIDxidXR0b24gbmdiQWNjb3JkaW9uQnV0dG9uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwiaGVhZGVyXCIgY2xhc3M9XCJyb3cgbXgtMCBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgIDwhLS0gUGxhbm8gQ29tcGxldGlvbiAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY3Vyc29yOiB1bnNldDtcIiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIFBsYW5vIENvbXBsZXRpb24gJVxyXG4gICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCIlIG9mIG92ZXJhbGwgcGxhbm9ncmFtIGNvbXBsZXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE1MTdfMTI5ODA1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05IDEyVjlNOSA2SDkuMDA3NU0xNi41IDlDMTYuNSAxMy4xNDIxIDEzLjE0MjEgMTYuNSA5IDE2LjVDNC44NTc4NiAxNi41IDEuNSAxMy4xNDIxIDEuNSA5QzEuNSA0Ljg1Nzg2IDQuODU3ODYgMS41IDkgMS41QzEzLjE0MjEgMS41IDE2LjUgNC44NTc4NiAxNi41IDlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE1MTdfMTI5ODA1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBzdHlsZT1cImhlaWdodDogNHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza0luZm8/LnBsYW5vUHJvZ3Jlc3MgPD0gNTBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLXdhcm5pbmcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tJbmZvPy5wbGFub1Byb2dyZXNzID09PSA3NVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLXN1Y2Nlc3MnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIHJvbGU9XCJwcm9ncmVzc2JhclwiIFtzdHlsZV09XCInd2lkdGg6JyArIHRhc2tJbmZvPy5wbGFub1Byb2dyZXNzICsgJyUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJ0YXNrSW5mbz8ucGxhbm9Qcm9ncmVzc1wiIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj57eyB0YXNrSW5mbz8ucGxhbm9Qcm9ncmVzcyB9fSU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIExheW91dCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY3Vyc29yOiB1bnNldDtcIiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgICAgICAgICAgICA8aDM+PGI+e3sgc3RvcmVNZXRyaWNzLmZsb29yQ291bnQgfX08L2I+IExheW91dDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kaWNhdG9yIG10LTJcIiBbbmdDbGFzc109XCJ0YXNrU3R5bGUubGF5b3V0LmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiIFtoaWRkZW5dPVwidGFza1N0eWxlLmxheW91dC5uYW1lICE9PSAnUmVkbydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDk4NF8yNzU2OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuNSAyLjAwMDc3VjUuMDAwNzdNMC41IDUuMDAwNzdIMy41TTAuNSA1LjAwMDc3TDIuODIgMi44MjA3N0MzLjM1NzM3IDIuMjgzMTMgNC4wMjIxOSAxLjg5MDM3IDQuNzUyNCAxLjY3OTE2QzUuNDgyNjIgMS40Njc5NCA2LjI1NDQ1IDEuNDQ1MTUgNi45OTU4NiAxLjYxMjlDNy43MzcyNyAxLjc4MDY1IDguNDI0MSAyLjEzMzQ5IDguOTkyMjcgMi42Mzg0OEM5LjU2MDQzIDMuMTQzNDcgOS45OTE0MiAzLjc4NDE2IDEwLjI0NSA0LjUwMDc3TTExLjUgMTAuMDAwOFY3LjAwMDc3TTExLjUgNy4wMDA3N0g4LjVNMTEuNSA3LjAwMDc3TDkuMTggOS4xODA3N0M4LjY0MjYzIDkuNzE4NDEgNy45Nzc4MSAxMC4xMTEyIDcuMjQ3NiAxMC4zMjI0QzYuNTE3MzggMTAuNTMzNiA1Ljc0NTU1IDEwLjU1NjQgNS4wMDQxNCAxMC4zODg2QzQuMjYyNzMgMTAuMjIwOSAzLjU3NTkgOS44NjgwNSAzLjAwNzczIDkuMzYzMDZDMi40Mzk1NyA4Ljg1ODA3IDIuMDA4NTggOC4yMTczOCAxLjc1NSA3LjUwMDc3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjN0E1QUY4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80OTg0XzI3NTY5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInRhc2tTdHlsZS5sYXlvdXQubmFtZSAhPT0gJ0ZsYWdnZWQnXCIgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIgNy41QzIgNy41IDIuNSA3IDQgN0M1LjUgNyA2LjUgOCA4IDhDOS41IDggMTAgNy41IDEwIDcuNVYxLjVDMTAgMS41IDkuNSAyIDggMkM2LjUgMiA1LjUgMSA0IDFDMi41IDEgMiAxLjUgMiAxLjVWNy41Wk0yIDcuNVYxMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRhc2tTdHlsZS5sYXlvdXQubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRml4dHVyZXMgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImN1cnNvcjogdW5zZXQ7XCIgY2xhc3M9XCJjb2wgZmlsdGVyLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAgPGgzPjxiPnt7IHN0b3JlTWV0cmljcy5maXh0dXJlQ291bnQgfX08L2I+IEZpeHR1cmVzPC9oMz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgbXQtMlwiIFtuZ0NsYXNzXT1cInRhc2tTdHlsZS5maXh0dXJlLmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiIFtoaWRkZW5dPVwidGFza1N0eWxlLmZpeHR1cmUubmFtZSAhPT0gJ1JlZG8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ5ODRfMjc1NjkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjUgMi4wMDA3N1Y1LjAwMDc3TTAuNSA1LjAwMDc3SDMuNU0wLjUgNS4wMDA3N0wyLjgyIDIuODIwNzdDMy4zNTczNyAyLjI4MzEzIDQuMDIyMTkgMS44OTAzNyA0Ljc1MjQgMS42NzkxNkM1LjQ4MjYyIDEuNDY3OTQgNi4yNTQ0NSAxLjQ0NTE1IDYuOTk1ODYgMS42MTI5QzcuNzM3MjcgMS43ODA2NSA4LjQyNDEgMi4xMzM0OSA4Ljk5MjI3IDIuNjM4NDhDOS41NjA0MyAzLjE0MzQ3IDkuOTkxNDIgMy43ODQxNiAxMC4yNDUgNC41MDA3N00xMS41IDEwLjAwMDhWNy4wMDA3N00xMS41IDcuMDAwNzdIOC41TTExLjUgNy4wMDA3N0w5LjE4IDkuMTgwNzdDOC42NDI2MyA5LjcxODQxIDcuOTc3ODEgMTAuMTExMiA3LjI0NzYgMTAuMzIyNEM2LjUxNzM4IDEwLjUzMzYgNS43NDU1NSAxMC41NTY0IDUuMDA0MTQgMTAuMzg4NkM0LjI2MjczIDEwLjIyMDkgMy41NzU5IDkuODY4MDUgMy4wMDc3MyA5LjM2MzA2QzIuNDM5NTcgOC44NTgwNyAyLjAwODU4IDguMjE3MzggMS43NTUgNy41MDA3N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzdBNUFGOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDk4NF8yNzU2OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJ0YXNrU3R5bGUuZml4dHVyZS5uYW1lICE9PSAnRmxhZ2dlZCdcIiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMiA3LjVDMiA3LjUgMi41IDcgNCA3QzUuNSA3IDYuNSA4IDggOEM5LjUgOCAxMCA3LjUgMTAgNy41VjEuNUMxMCAxLjUgOS41IDIgOCAyQzYuNSAyIDUuNSAxIDQgMUMyLjUgMSAyIDEuNSAyIDEuNVY3LjVaTTIgNy41VjExXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgdGFza1N0eWxlLmZpeHR1cmUubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVmlzdWFsIE1lcmNoYW5kaXNlIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjdXJzb3I6IHVuc2V0O1wiIGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgICAgICAgICAgIDxoMz48Yj57eyBzdG9yZU1ldHJpY3Mudm1Db3VudCB9fTwvYj4gVmlzdWFsIE1lcmNoYW5kaXNlPC9oMz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgbXQtMlwiIFtuZ0NsYXNzXT1cInRhc2tTdHlsZS52bS5jbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIiBbaGlkZGVuXT1cInRhc2tTdHlsZS52bS5uYW1lICE9PSAnUmVkbydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDk4NF8yNzU2OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuNSAyLjAwMDc3VjUuMDAwNzdNMC41IDUuMDAwNzdIMy41TTAuNSA1LjAwMDc3TDIuODIgMi44MjA3N0MzLjM1NzM3IDIuMjgzMTMgNC4wMjIxOSAxLjg5MDM3IDQuNzUyNCAxLjY3OTE2QzUuNDgyNjIgMS40Njc5NCA2LjI1NDQ1IDEuNDQ1MTUgNi45OTU4NiAxLjYxMjlDNy43MzcyNyAxLjc4MDY1IDguNDI0MSAyLjEzMzQ5IDguOTkyMjcgMi42Mzg0OEM5LjU2MDQzIDMuMTQzNDcgOS45OTE0MiAzLjc4NDE2IDEwLjI0NSA0LjUwMDc3TTExLjUgMTAuMDAwOFY3LjAwMDc3TTExLjUgNy4wMDA3N0g4LjVNMTEuNSA3LjAwMDc3TDkuMTggOS4xODA3N0M4LjY0MjYzIDkuNzE4NDEgNy45Nzc4MSAxMC4xMTEyIDcuMjQ3NiAxMC4zMjI0QzYuNTE3MzggMTAuNTMzNiA1Ljc0NTU1IDEwLjU1NjQgNS4wMDQxNCAxMC4zODg2QzQuMjYyNzMgMTAuMjIwOSAzLjU3NTkgOS44NjgwNSAzLjAwNzczIDkuMzYzMDZDMi40Mzk1NyA4Ljg1ODA3IDIuMDA4NTggOC4yMTczOCAxLjc1NSA3LjUwMDc3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjN0E1QUY4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80OTg0XzI3NTY5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInRhc2tTdHlsZS52bS5uYW1lICE9PSAnRmxhZ2dlZCdcIiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMiA3LjVDMiA3LjUgMi41IDcgNCA3QzUuNSA3IDYuNSA4IDggOEM5LjUgOCAxMCA3LjUgMTAgNy41VjEuNUMxMCAxLjUgOS41IDIgOCAyQzYuNSAyIDUuNSAxIDQgMUMyLjUgMSAyIDEuNSAyIDEuNVY3LjVaTTIgNy41VjExXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgdGFza1N0eWxlLnZtLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQm9keSAtLT5cclxuICAgIDxkaXYgaWQ9XCJib2R5XCIgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPCEtLSBMZWZ0IENvbHVtbiAtLT5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdjb2xsYXBzZWQtY29sJzogaXNMZWZ0UGFuZWxDb2xsYXBzZWQsICdjb2wtMyc6ICFpc0xlZnRQYW5lbENvbGxhcHNlZCwnZC1ub25lJzogZWRpdEZpeHR1cmUgIH1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicy1jYXJkXCI+XHJcbiAgICAgICAgICA8Zm9ybSBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc0xlZnRQYW5lbENvbGxhcHNlZCB9XCIgW2Zvcm1Hcm91cF09XCJsYXlvdXRGb3JtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uIGFjY29yZGlvbj1cIk5nYkFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gV2FsbHMgU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Rm9ybVdhbGxzLmNvbnRyb2xzLmxlbmd0aDsgZWxzZSBhZGRXYWxsQWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJ3YWxsc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBnZXRGb3JtV2FsbHMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImlcIiBbbmdiQWNjb3JkaW9uSXRlbV09XCJpLnRvU3RyaW5nKClcIiBjbGFzcz1cIm1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWFpbmhlYWRpbmcgcC0wXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgd2FsbC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5nZXQoXCJlbGVtZW50VHlwZVwiKT8udmFsdWUgfCB0aXRsZWNhc2UgfX0ge3sgZ3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYobGF5b3V0Rm9ybS5lbmFibGVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0xXCIgbmdiVG9vbHRpcD1cIlJvdGF0ZSB0aGlzIHdhbGwuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicm90YXRlV2FsbChnZXRFbGVtZW50TnVtYmVyKGdyb3VwKSEpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43MzczNSA4LjI1MDExQzQuMTIxOTMgOC4yNDM2MiA0LjQ0Mzc3IDguNTI3NzYgNC40OTMzOCA4Ljg5OTk4TDQuNDk5OSA4Ljk4NzM1TDQuNTAyNjIgOS4xNTUxNkM0LjU4NDM0IDExLjU3NDEgNi41NzI0MyAxMy41IDkgMTMuNUM5LjE0MDIyIDEzLjUgOS4yNzk1MSAxMy40OTM2IDkuNDE3NTYgMTMuNDgwOUw5LjIxOTY3IDEzLjI4MDNDOC45MjY3OCAxMi45ODc0IDguOTI2NzggMTIuNTEyNiA5LjIxOTY3IDEyLjIxOTdDOS41MTI1NyAxMS45MjY4IDkuOTg3NDQgMTEuOTI2OCAxMC4yODAzIDEyLjIxOTdMMTEuNzgwMyAxMy43MTk3QzEyLjA3MzIgMTQuMDEyNiAxMi4wNzMyIDE0LjQ4NzQgMTEuNzgwMyAxNC43ODAzTDEwLjI4MDMgMTYuMjgwM0M5Ljk4NzQ0IDE2LjU3MzIgOS41MTI1NyAxNi41NzMyIDkuMjE5NjcgMTYuMjgwM0M4LjkyNjc4IDE1Ljk4NzQgOC45MjY3OCAxNS41MTI2IDkuMjE5NjcgMTUuMjE5N0w5LjQ1ODM3IDE0Ljk4MjdDOS4zMDY0NiAxNC45OTQyIDkuMTUzNTkgMTUgOSAxNUM1LjgyNjUzIDE1IDMuMjE2NjUgMTIuNTMyMSAzLjAxMjUgOS4zODI4OUwzLjAwMzE1IDkuMTkzMTRMMy4wMDAxMSA5LjAxMjY1QzIuOTkzMTIgOC41OTg0OSAzLjMyMzIgOC4yNTcwOSAzLjczNzM1IDguMjUwMTFaTTguNzgwMzMgMS43MTk2N0M5LjA1MDcgMS45OTAwMyA5LjA3MTQ5IDIuNDE1NDYgOC44NDI3MiAyLjcwOTY3TDguNzgwMzMgMi43ODAzM0w4LjU0MTg3IDMuMDE3MjZDOC42OTM3MSAzLjAwNTc4IDguODQ2NSAzIDkgM0MxMi4zMTM3IDMgMTUgNS42ODYyOSAxNSA5QzE1IDkuNDE0MjEgMTQuNjY0MiA5Ljc1IDE0LjI1IDkuNzVDMTMuODM1OCA5Ljc1IDEzLjUgOS40MTQyMSAxMy41IDlDMTMuNSA2LjUxNDcyIDExLjQ4NTMgNC41IDkgNC41QzguODU5NyA0LjUgOC43MjAzNCA0LjUwNjQgOC41ODIyMSA0LjUxOTA5TDguNzgwMzMgNC43MTk2N0M5LjA3MzIzIDUuMDEyNTYgOS4wNzMyMyA1LjQ4NzQ0IDguNzgwMzMgNS43ODAzM0M4LjUwOTk3IDYuMDUwNjkgOC4wODQ1NSA2LjA3MTQ5IDcuNzkwMzMgNS44NDI3Mkw3LjcxOTY3IDUuNzgwMzNMNi4yMTk2NyA0LjI4MDMzQzUuOTQ5MzEgNC4wMDk5NyA1LjkyODUxIDMuNTg0NTQgNi4xNTcyOCAzLjI5MDMzTDYuMjE5NjcgMy4yMTk2N0w3LjcxOTY3IDEuNzE5NjdDOC4wMTI1NyAxLjQyNjc4IDguNDg3NDQgMS40MjY3OCA4Ljc4MDMzIDEuNzE5NjdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0NzU0NjdcIiBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMC4wMDA2NFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0xXCIgbmdiVG9vbHRpcD1cIkluc2VydCBuZXcgd2FsbCBiZWxvdy5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdXYWxsKGdldEVsZW1lbnROdW1iZXIoZ3JvdXApISk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNjJfOClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgOS43NUMxMS4wNzA3IDkuNzUgMTIuNzUgMTEuNDI5MyAxMi43NSAxMy41QzEyLjc1IDE1LjU3MDggMTEuMDcwNyAxNy4yNSA5IDE3LjI1QzYuOTI5MjUgMTcuMjUgNS4yNSAxNS41NzA4IDUuMjUgMTMuNUM1LjI1IDExLjQyOTMgNi45MjkyNSA5Ljc1IDkgOS43NVpNOS43NSAxMS4yNUg4LjI1VjEyLjc0OTNMNi43NSAxMi43NVYxNC4yNUw4LjI1IDE0LjI0OTNWMTUuNzVIOS43NVYxNC4yNDkzTDExLjI1IDE0LjI1VjEyLjc1TDkuNzUgMTIuNzQ5M1YxMS4yNVpNMTUgMi4yNUMxNS40MTQgMi4yNSAxNS43NSAyLjU4NiAxNS43NSAzVjcuNUMxNS43NSA3LjkxNCAxNS40MTQgOC4yNSAxNSA4LjI1SDNDMi41ODYgOC4yNSAyLjI1IDcuOTE0IDIuMjUgNy41VjNDMi4yNSAyLjU4NiAyLjU4NiAyLjI1IDMgMi4yNUgxNVpNMy43NSAzLjc1VjYuNzVIMTQuMjVWMy43NUgzLjc1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0NzU0NjdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzYyXzhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiIG5nYlRvb2x0aXA9XCJSZW1vdmUgdGhpcyB3YWxsIGFuZCBpdHMgZml4dHVyZXMuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlV2FsbChnZXRFbGVtZW50TnVtYmVyKGdyb3VwKSEpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzYzXzI1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNzA5NCAxLjVDMTEuMzU1MSAxLjUgMTEuOTI4MyAxLjkxMzE0IDEyLjEzMjQgMi41MjU2NUwxMi41NDA2IDMuNzVIMTVDMTUuNDE0MiAzLjc1IDE1Ljc1IDQuMDg1NzkgMTUuNzUgNC41QzE1Ljc1IDQuOTE0MiAxNS40MTQyIDUuMjQ5OTkgMTUgNS4yNUwxNC45OTgxIDUuMzAzNDRMMTQuMzQ3NiAxNC40MTAzQzE0LjI2MzUgMTUuNTg3OCAxMy4yODM4IDE2LjUgMTIuMTAzNCAxNi41SDUuODk2NjhDNC43MTYyNCAxNi41IDMuNzM2NSAxNS41ODc4IDMuNjUyNCAxNC40MTAzTDMuMDAxOTEgNS4zMDM0NEMzLjAwMDYyIDUuMjg1NTEgMi45OTk5OCA1LjI2NzY5IDIuOTk5OTcgNS4yNUMyLjU4NTc3IDUuMjQ5OTkgMi4yNSA0LjkxNDIgMi4yNSA0LjVDMi4yNSA0LjA4NTc5IDIuNTg1NzkgMy43NSAzIDMuNzVINS40NTk0M0w1Ljg2NzU0IDIuNTI1NjVDNi4wNzE3MiAxLjkxMzE0IDYuNjQ0OTMgMS41IDcuMjkwNTcgMS41SDEwLjcwOTRaTTEzLjQ5ODEgNS4yNUg0LjUwMTkxTDUuMTQ4NTggMTQuMzAzNEM1LjE3NjYyIDE0LjY5NiA1LjUwMzIgMTUgNS44OTY2OCAxNUgxMi4xMDM0QzEyLjQ5NjggMTUgMTIuODIzNCAxNC42OTYgMTIuODUxNCAxNC4zMDM0TDEzLjQ5ODEgNS4yNVpNNy41IDcuNUM3Ljg4NDY0IDcuNSA4LjIwMTYzIDcuNzg5NTIgOC4yNDQ5NSA4LjE2MjUzTDguMjUgOC4yNVYxMkM4LjI1IDEyLjQxNDIgNy45MTQyMiAxMi43NSA3LjUgMTIuNzVDNy4xMTUzNyAxMi43NSA2Ljc5ODM3IDEyLjQ2MDUgNi43NTUwNSAxMi4wODc1TDYuNzUgMTJWOC4yNUM2Ljc1IDcuODM1NzggNy4wODU3OCA3LjUgNy41IDcuNVpNMTAuNSA3LjVDMTAuOTE0MiA3LjUgMTEuMjUgNy44MzU3OCAxMS4yNSA4LjI1VjEyQzExLjI1IDEyLjQxNDIgMTAuOTE0MiAxMi43NSAxMC41IDEyLjc1QzEwLjA4NTggMTIuNzUgOS43NSAxMi40MTQyIDkuNzUgMTJWOC4yNUM5Ljc1IDcuODM1NzggMTAuMDg1OCA3LjUgMTAuNSA3LjVaTTEwLjcwOTQgM0g3LjI5MDU3TDcuMDQwNTcgMy43NUgxMC45NTk1TDEwLjcwOTQgM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRjMyQjJCXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82M18yNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keSBjbGFzcz1cInBzLTAgcGUtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtaW4taGVpZ2h0OiA1MHB4XCIgZG5kRHJvcHpvbmUgKGRuZERyb3ApPVwib25Ecm9wKCRldmVudCwgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaXh0dXJlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1GaXh0dXJlcyhpKS5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmaXh0dXJlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRGb3JtRml4dHVyZXMoaSkuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkbmREcm9wem9uZSAoZG5kRHJvcCk9XCJvbkRyb3AoJGV2ZW50LCBpLCBqKVwiIFtmb3JtR3JvdXBOYW1lXT1cImpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkbmREcmFnZ2FibGVdPVwieyB3YWxsSW5kZXg6IGksIGZpeHR1cmVJbmRleDogaiB9XCIgW2RuZEVmZmVjdEFsbG93ZWRdPVwiJ2FsbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IGctMCBtYi01XCIgW2RuZERpc2FibGVEcmFnSWZdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBkbmREcmFnSW1hZ2VSZWZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyBjdXJzb3I6IGxheW91dEZvcm0uZGlzYWJsZWQgPyAnZGVmYXVsdCcgOiAnbW92ZScsIG9wYWNpdHk6ICcwLjUnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjVweFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJtIDQuNDk2MDk0IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gLTYgNiBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAtNiA2IGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDAgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiZ3JleVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImZpeHR1cmVDb25maWdJZFwiIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInbmFtZSdcIiBbZGF0YV09XCJmaXh0dXJlVGVtcGxhdGVzXCIgW2xhYmVsXT1cIidGaXh0dXJlICcgKyAoaiArIDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1YlRleHRGaWVsZF09XCInc3VidGV4dCdcIiBbc2VhcmNoXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZGVsZXRlRml4dHVyZSgnd2FsbCcsIGosIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogMThweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDFMMSA5TTEgMUw5IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1idG5cIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3Rml4dHVyZSgnd2FsbCcsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggZGFzaGVkICMwMDAwMDA7XCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gT3RoZXIgRWxlbWVudHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRXYWxsT3RoZXJFbGVtZW50cyhpKS5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJvdGhlckVsZW1lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaXh0dXJlIG9mIGdldFdhbGxPdGhlckVsZW1lbnRzKGkpLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwialwiIGNsYXNzPVwicm93IGctMCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+RWxlbWVudCB7eyBqICsgMSB9fTwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEcm9wZG93biBib3VuZCB0byAndHlwZScgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwib3RoZXJFbGVtZW50TGlzdFwiIFtpZF09XCInZWxlbWVudExhYmVsJyArIGpcIiBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IGN1c3RvbSB0ZXh0IGlucHV0IG9ubHkgd2hlbiAnT3RoZXJzJyBpcyBzZWxlY3RlZCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIihmaXh0dXJlLmdldCgndHlwZScpPy52YWx1ZSkgPT09ICdPdGhlcnMnXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBtdC0yXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgY3VzdG9tIGVsZW1lbnQgbmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cInJlbW92ZU90aGVyRWxlbWVudCgnd2FsbCcsIGosIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogMThweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDFMMSA5TTEgMUw5IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1idG5cIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3T3RoZXJFbGVtZW50cygnd2FsbCcsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FkZFdhbGxBY3Rpb24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGROZXdXYWxsKDApXCIgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHctMTAwIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICBJbnNlcnQgbmV3IHdhbGxcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxociBzdHlsZT1cImJvcmRlci10b3A6IDFweCBkYXNoZWQgIzAwMDAwMDtcIiAvPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEZsb29yIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBbbmdiQWNjb3JkaW9uSXRlbV09XCInZmxvb3InXCIgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1haW5oZWFkaW5nIHAtMFwiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgd2FsbC1sYWJlbFwiPkZsb29yPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5IGNsYXNzPVwicHMtMCBwZS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDUwcHhcIiBkbmREcm9wem9uZSAoZG5kRHJvcCk9XCJvbkRyb3AoJGV2ZW50LCAnZmxvb3InKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZsb29yIEZpeHR1cmVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Rm9ybUZsb29yRml4dHVyZXMuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiZmxvb3JGaXh0dXJlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRGb3JtRmxvb3JGaXh0dXJlcy5jb250cm9sczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRuZERyb3B6b25lIChkbmREcm9wKT1cIm9uRHJvcCgkZXZlbnQsICdmbG9vcicsIGopXCIgW2Zvcm1Hcm91cE5hbWVdPVwialwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZERyYWdnYWJsZV09XCJ7IHdhbGxJbmRleDogJ2Zsb29yJywgZml4dHVyZUluZGV4OiBqIH1cIiBbZG5kRWZmZWN0QWxsb3dlZF09XCInYWxsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZERpc2FibGVEcmFnSWZdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiIGNsYXNzPVwicm93IGctMCBtYi01XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGRuZERyYWdJbWFnZVJlZiBzdHlsZT1cImN1cnNvcjogbW92ZTsgb3BhY2l0eTogMC41XCIgd2lkdGg9XCIyNXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibSA0LjQ5NjA5NCAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIC02IDYgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gLTYgNiBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAwIDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImdyZXlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmaXh0dXJlQ29uZmlnSWRcIiBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ25hbWUnXCIgW2RhdGFdPVwiZml4dHVyZVRlbXBsYXRlc1wiIFtsYWJlbF09XCInRml4dHVyZSAnICsgKGogKyAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hdPVwidHJ1ZVwiIFtzdWJUZXh0RmllbGRdPVwiJ3N1YnRleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImRlbGV0ZUZpeHR1cmUoJ2Zsb29yJywgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiAxOHB4XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDFMMSA5TTEgMUw5IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1idG5cIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3Rml4dHVyZSgnZmxvb3InKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGZpeHR1cmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGhyIHN0eWxlPVwiYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjMDAwMDAwO1wiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZsb29yIE90aGVyIEVsZW1lbnRzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmbG9vck90aGVyRWxlbWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpeHR1cmUgb2YgZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5jb250cm9sczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImpcIiBjbGFzcz1cInJvdyBnLTAgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkVsZW1lbnQge3sgaiArIDEgfX08L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gZm9yIHR5cGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwib3RoZXJFbGVtZW50TGlzdFwiIFtpZF09XCInZmxvb3JFbGVtZW50TGFiZWwnICsgalwiIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbmRpdGlvbmFsIGlucHV0IGZvciBjdXN0b20gbmFtZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIihmaXh0dXJlLmdldCgndHlwZScpPy52YWx1ZSkgPT09ICdPdGhlcnMnXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBtdC0yXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgY3VzdG9tIGVsZW1lbnQgbmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cInJlbW92ZU90aGVyRWxlbWVudCgnZmxvb3InLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDEwIDEwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMUwxIDlNMSAxTDkgOVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJsaW5rLWJ0blwiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdPdGhlckVsZW1lbnRzKCdmbG9vcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIENlbnRlciBDb2x1bW4gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgb3ZlcmZsb3ctaGlkZGVuIHBvc2l0aW9uLXJlbGF0aXZlXCIgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogZWRpdEZpeHR1cmUgfVwiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJjYW52YXMtY2FyZFwiIGNsYXNzPVwiYy1jYXJkIHBvc2l0aW9uLXJlbGF0aXZlXCIgI2NhbnZhc0NvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gQ2FudmFzIFZpZXcgLS0+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IHNlbGVjdGVkVmlldyA9PT0gJ3RyZWUnIH1cIj5cclxuICAgICAgICAgICAgPGNhbnZhcyBpZD1cImJhc2UtY2FudmFzXCIgI2Jhc2VDYW52YXM+PC9jYW52YXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFRyZWUgVmlldyAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09ICd0cmVlJ1wiIGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgICAgPHN0b3JlLXBsYW5vLXRyZWUtdmlldyBbYWxsRml4dHVyZV09XCJhbGxGaXh0dXJlc1wiPjwvc3RvcmUtcGxhbm8tdHJlZS12aWV3PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBUb3AgQ29udHJvbHMgLS0+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwidG9wOiAyNHB4OyBsZWZ0OiAyNnB4OyBwb3NpdGlvbjogYWJzb2x1dGU7XCIgaWQ9XCJzZWdtZW50LWJ0blwiIGNsYXNzPVwicGItNVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtNFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBjdXN0b20tdGFicyBkLWZsZXhcIiBzdHlsZT1cIndpZHRoOiAyMDBweDsgbWFyZ2luOiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBmbGV4LWZpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5hdi1saW5rIHctMTAwIGgtMTAwXCIgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09ICdkZXRhaWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gJ2RldGFpbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICBEZXRhaWwgVmlld1xyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBmbGV4LWZpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5hdi1saW5rIHctMTAwIGgtMTAwXCIgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09ICd0cmVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9ICd0cmVlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRyZWUgVmlld1xyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFBJRCBBbGxvY2F0aW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiIHN0eWxlPVwidG9wOiAyNHB4OyBsZWZ0OiAyMzRweFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJwYWRkaW5nOiA5cHggMTlweCAhaW1wb3J0YW50O1wiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgYmctd2hpdGUgc2hhZG93LXNtXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0RW50cmFuY2VzPy5sZW5ndGggPj0gMlwiIChjbGljayk9XCJvbkNsaWNrQXBwbHlMb2dpY3MoKVwiPlxyXG4gICAgICAgICAgICAgIEFwcGx5IExvZ2ljc1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICA8IS0tIEVudHJhbmNlIEJ1dHRvbiAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYXlvdXRGb3JtLmVuYWJsZWRcIiBuZ2JUb29sdGlwPVwiWW91IGNhbiBhZGQgdXAgdG8gdHdvIGVudHJhbmNlcy5cIiBzdHlsZT1cInRvcDogMjRweDsgbGVmdDogMjM0cHhcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCIgW2Rpc2FibGVUb29sdGlwXT1cImdldEVudHJhbmNlcz8ubGVuZ3RoIDwgMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cInBhZGRpbmc6IDlweCAxOXB4ICFpbXBvcnRhbnQ7XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldEVudHJhbmNlcz8ubGVuZ3RoID49IDJcIiAoY2xpY2spPVwiYWRkTmV3RW50cmFuY2UoKVwiPlxyXG4gICAgICAgICAgICAgIEFkZCBFbnRyYW5jZVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYXlvdXRGb3JtLmVuYWJsZWRcIiBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDE5MHB4XCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEVkaXQoKVwiPlxyXG4gICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICA8IS0tIEVkaXQgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUVkaXQgfHwgWyd0YXNrQXNzaWduZWQnLCdyZXZpZXdQZW5kaW5nJ10uaW5jbHVkZXModGFza1N0eWxlLmZpeHR1cmUuY2xhc3MpXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDI0cHg7IHJpZ2h0OiAxNjRweFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHBvc2l0aW9uLWFic29sdXRlIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRWRpdCgpXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTMyMl81MzI1KVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xNjY3IDIuNDk5OTNDMTQuMzg1NiAyLjI4MTA2IDE0LjY0NTUgMi4xMDc0NCAxNC45MzE0IDEuOTg4OTlDMTUuMjE3NCAxLjg3MDU0IDE1LjUyMzkgMS44MDk1NyAxNS44MzM0IDEuODA5NTdDMTYuMTQyOSAxLjgwOTU3IDE2LjQ0OTQgMS44NzA1NCAxNi43MzU0IDEuOTg4OTlDMTcuMDIxNCAyLjEwNzQ0IDE3LjI4MTIgMi4yODEwNiAxNy41MDAxIDIuNDk5OTNDMTcuNzE5IDIuNzE4OCAxNy44OTI2IDIuOTc4NjMgMTguMDExIDMuMjY0NkMxOC4xMjk1IDMuNTUwNTcgMTguMTkwNCAzLjg1NzA2IDE4LjE5MDQgNC4xNjY1OUMxOC4xOTA0IDQuNDc2MTIgMTguMTI5NSA0Ljc4MjYyIDE4LjAxMSA1LjA2ODU5QzE3Ljg5MjYgNS4zNTQ1NSAxNy43MTkgNS42MTQzOSAxNy41MDAxIDUuODMzMjZMNi4yNTAwOCAxNy4wODMzTDEuNjY2NzUgMTguMzMzM0wyLjkxNjc1IDEzLjc0OTlMMTQuMTY2NyAyLjQ5OTkzWlwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xMzIyXzUzMjVcIj5cclxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgRWRpdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSBSb3RhdGUgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDk0cHhcIiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBwb3NpdGlvbi1hYnNvbHV0ZSBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicm90YXRlQ2FudmFzKGNhbnZhcyw5MClcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJNNi4zNjI2NSA3LjE3ODg3TDcuMTc2MjUgNi4zNjI4N0w1LjkwNDI1IDUuMDkyMDdMNS4wODk0NSA1LjkwNTY3TDYuMzYyNjUgNy4xNzg4N1pNMTUuNjcxIDYuMzY0MDdMMTkuNjM3OSAxMC4zMzA5TDIwLjkwOTkgOS4wNTc2OUwxNi45NDQyIDUuMDkwODdMMTUuNjcxIDYuMzY0MDdaTTE5LjYzNzkgMTguODI1N0wxOC44MjQzIDE5LjYzOTNMMjAuMDk2MyAyMC45MTAxTDIwLjkwOTkgMjAuMDk3N0wxOS42Mzc5IDE4LjgyNTdaTTEwLjMyOTUgMTkuNjM5M0w2LjM2MjY1IDE1LjY3MjVMNS4wOTA2NSAxNi45NDU3TDkuMDU2MjYgMjAuOTExM0wxMC4zMjk1IDE5LjYzOTNaTTE4LjgyNDMgMTkuNjM5M0MxNy42NTQzIDIwLjgwODEgMTYuODQwNyAyMS42MTkzIDE2LjE0NTkgMjIuMTQ5N0MxNS40NzE1IDIyLjY2NDUgMTUuMDE1NSAyMi44Mjg5IDE0LjU3NjMgMjIuODI4OVYyNC42Mjg5QzE1LjU2NzUgMjQuNjI4OSAxNi40MDI3IDI0LjIxNzMgMTcuMjM2NyAyMy41ODEzQzE4LjA1MDMgMjIuOTYwOSAxOC45NjM1IDIyLjA0NTMgMjAuMDk2MyAyMC45MTI1TDE4LjgyNDMgMTkuNjM5M1pNOS4wNTYyNiAyMC45MTEzQzEwLjE4OTEgMjIuMDQ1MyAxMS4xMDIzIDIyLjk1OTcgMTEuOTE1OSAyMy41ODEzQzEyLjc0OTkgMjQuMjE3MyAxMy41ODUxIDI0LjYyODkgMTQuNTc2MyAyNC42Mjg5VjIyLjgyODlDMTQuMTM3MSAyMi44Mjg5IDEzLjY4MjMgMjIuNjY0NSAxMy4wMDY3IDIyLjE0OTdDMTIuMzExOSAyMS42MTkzIDExLjQ5ODMgMjAuODA4MSAxMC4zMjk1IDE5LjYzOTNMOS4wNTYyNiAyMC45MTEzWk0xOS42Mzc5IDEwLjMzMDlDMjAuODA2NyAxMS40OTk3IDIxLjYxNzkgMTIuMzEzMyAyMi4xNDgzIDEzLjAwODFDMjIuNjYzMSAxMy42ODM3IDIyLjgyNzUgMTQuMTM4NSAyMi44Mjc1IDE0LjU3NzdIMjQuNjI3NUMyNC42Mjc1IDEzLjU4NjUgMjQuMjE1OSAxMi43NTEzIDIzLjU3OTkgMTEuOTE3M0MyMi45NTk1IDExLjEwMzcgMjIuMDQyNyAxMC4xOTA1IDIwLjkwOTkgOS4wNTc2OUwxOS42Mzc5IDEwLjMzMDlaTTIwLjkwOTkgMjAuMDk3N0MyMi4wNDM5IDE4Ljk2MzcgMjIuOTU4MyAxOC4wNTE3IDIzLjU3OTkgMTcuMjM4MUMyNC4yMTU5IDE2LjQwNDEgMjQuNjI3NSAxNS41Njg5IDI0LjYyNzUgMTQuNTc3N0gyMi44Mjc1QzIyLjgyNzUgMTUuMDE2OSAyMi42NjMxIDE1LjQ3MjkgMjIuMTQ4MyAxNi4xNDczQzIxLjYxNzkgMTYuODQyMSAyMC44MDY3IDE3LjY1NTcgMTkuNjM3OSAxOC44MjU3TDIwLjkwOTkgMjAuMDk3N1pNNy4xNzYyNSA2LjM2Mjg3QzguMzQ2MjUgNS4xOTQwNyA5LjE1OTg1IDQuMzgxNjcgOS44NTQ2NSAzLjg1MTI3QzEwLjUyOSAzLjMzNjQ3IDEwLjk4NSAzLjE3MzI3IDExLjQyNDIgMy4xNzMyN1YxLjM3MjA3QzEwLjQzMyAxLjM3MjA3IDkuNTk3ODUgMS43ODM2NyA4Ljc2Mzg1IDIuNDE5NjdDNy45NDkwNSAzLjA0MTI3IDcuMDM3MDUgMy45NTU2NyA1LjkwNDI1IDUuMDg4NDdMNy4xNzYyNSA2LjM2Mjg3Wk0xNi45NDQyIDUuMDkwODdDMTUuODExNCAzLjk1Njg3IDE0Ljg5ODIgMy4wNDEyNyAxNC4wODQ2IDIuNDE5NjdDMTMuMjUwNiAxLjc4MzY3IDEyLjQxNTQgMS4zNzIwNyAxMS40MjQyIDEuMzcyMDdWMy4xNzMyN0MxMS44NjM0IDMuMTczMjcgMTIuMzE4MiAzLjMzNjQ3IDEyLjk5MzggMy44NTEyN0MxMy42ODg2IDQuMzgxNjcgMTQuNTAyMiA1LjE5Mjg3IDE1LjY3MSA2LjM2MTY3TDE2Ljk0NDIgNS4wOTA4N1pNNS4wODk0NSA1LjkwMzI3QzMuOTU2NjUgNy4wMzYwNyAzLjA0MjI1IDcuOTQ4MDcgMi40MjA2NSA4Ljc2Mjg3QzEuNzg0NjUgOS41OTY4NyAxLjM3MzA1IDEwLjQzMjEgMS4zNzMwNSAxMS40MjMzSDMuMTczMDVDMy4xNzMwNSAxMC45ODQxIDMuMzM3NDUgMTAuNTI4MSAzLjg1MjI1IDkuODUzNjdDNC4zODI2NSA5LjE1ODg3IDUuMTkzODUgOC4zNDUyNyA2LjM2MjY1IDcuMTc1MjdMNS4wODk0NSA1LjkwMzI3Wk02LjM2MjY1IDE1LjY3MTNDNS4xOTM4NSAxNC41MDEzIDQuMzgyNjUgMTMuNjg3NyAzLjg1MjI1IDEyLjk5MjlDMy4zMzc0NSAxMi4zMTg1IDMuMTczMDUgMTEuODYyNSAzLjE3MzA1IDExLjQyMzNIMS4zNzMwNUMxLjM3MzA1IDEyLjQxNDUgMS43ODQ2NSAxMy4yNDk3IDIuNDIwNjUgMTQuMDgzN0MzLjA0MjI1IDE0Ljg5NzMgMy45NTY2NSAxNS44MTA1IDUuMDg5NDUgMTYuOTQzM0w2LjM2MjY1IDE1LjY3MTNaXCJcclxuICAgICAgICAgICAgICAgIGZpbGw9XCIjMUQyOTM5XCIgLz5cclxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIzLjIgNi45ODMyTDI1IDguMkMyNSA0LjU4MiAyMi40MDU2IDEuNTc5NiAxOSAxTTIuOCAxOS4wMTY4TDEgMTcuOEMxIDIxLjQxOCAzLjU5NDQgMjQuNDIwNCA3IDI1XCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxRDI5MzlcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIFN1Ym1pdCBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWxheW91dEZvcm0uZGlzYWJsZWRcIiBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDk0cHg7cGFkZGluZzogOXB4IDIwcHggIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBwb3NpdGlvbi1hYnNvbHV0ZSBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlTGF5b3V0KHRydWUpXCI+XHJcbiAgICAgICAgICAgIFN1Ym1pdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSBEb3dubG9hZCBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIHN0eWxlPVwidG9wOiAyNHB4OyByaWdodDogMjZweFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHBvc2l0aW9uLWFic29sdXRlIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZENhbnZhcygpXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwMDAwMFwiIHN0cm9rZS13aWR0aD1cIjAuMjQwMDAwMDAwMDAwMDAwMDVcIj5cclxuICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz5cclxuICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZT1cIiNDQ0NDQ0NcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMC4zODRcIj48L2c+XHJcbiAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICBkPVwiTTEyLjU1MzUgMTYuNTA2MUMxMi40MTE0IDE2LjY2MTUgMTIuMjEwNiAxNi43NSAxMiAxNi43NUMxMS43ODk0IDE2Ljc1IDExLjU4ODYgMTYuNjYxNSAxMS40NDY1IDE2LjUwNjFMNy40NDY0OCAxMi4xMzExQzcuMTY2OTggMTEuODI1NCA3LjE4ODIyIDExLjM1MSA3LjQ5MzkyIDExLjA3MTVDNy43OTk2MyAxMC43OTIgOC4yNzQwMiAxMC44MTMyIDguNTUzNTIgMTEuMTE4OUwxMS4yNSAxNC4wNjgyVjNDMTEuMjUgMi41ODU3OSAxMS41ODU4IDIuMjUgMTIgMi4yNUMxMi40MTQyIDIuMjUgMTIuNzUgMi41ODU3OSAxMi43NSAzVjE0LjA2ODJMMTUuNDQ2NSAxMS4xMTg5QzE1LjcyNiAxMC44MTMyIDE2LjIwMDQgMTAuNzkyIDE2LjUwNjEgMTEuMDcxNUMxNi44MTE4IDExLjM1MSAxNi44MzMgMTEuODI1NCAxNi41NTM1IDEyLjEzMTFMMTIuNTUzNSAxNi41MDYxWlwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUQyOTM5XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0zLjc1IDE1QzMuNzUgMTQuNTg1OCAzLjQxNDIyIDE0LjI1IDMgMTQuMjVDMi41ODU3OSAxNC4yNSAyLjI1IDE0LjU4NTggMi4yNSAxNVYxNS4wNTQ5QzIuMjQ5OTggMTYuNDIyNSAyLjI0OTk2IDE3LjUyNDggMi4zNjY1MiAxOC4zOTE4QzIuNDg3NTQgMTkuMjkxOSAyLjc0NjQzIDIwLjA0OTcgMy4zNDgzNSAyMC42NTE2QzMuOTUwMjcgMjEuMjUzNiA0LjcwODE0IDIxLjUxMjUgNS42MDgyNSAyMS42MzM1QzYuNDc1MjIgMjEuNzUgNy41Nzc1NCAyMS43NSA4Ljk0NTEzIDIxLjc1SDE1LjA1NDlDMTYuNDIyNSAyMS43NSAxNy41MjQ4IDIxLjc1IDE4LjM5MTggMjEuNjMzNUMxOS4yOTE5IDIxLjUxMjUgMjAuMDQ5NyAyMS4yNTM2IDIwLjY1MTcgMjAuNjUxNkMyMS4yNTM2IDIwLjA0OTcgMjEuNTEyNSAxOS4yOTE5IDIxLjYzMzUgMTguMzkxOEMyMS43NSAxNy41MjQ4IDIxLjc1IDE2LjQyMjUgMjEuNzUgMTUuMDU0OVYxNUMyMS43NSAxNC41ODU4IDIxLjQxNDIgMTQuMjUgMjEgMTQuMjVDMjAuNTg1OCAxNC4yNSAyMC4yNSAxNC41ODU4IDIwLjI1IDE1QzIwLjI1IDE2LjQzNTQgMjAuMjQ4NCAxNy40MzY1IDIwLjE0NjkgMTguMTkxOUMyMC4wNDgyIDE4LjkyNTcgMTkuODY3OCAxOS4zMTQyIDE5LjU5MSAxOS41OTFDMTkuMzE0MiAxOS44Njc4IDE4LjkyNTcgMjAuMDQ4MiAxOC4xOTE5IDIwLjE0NjlDMTcuNDM2NSAyMC4yNDg0IDE2LjQzNTQgMjAuMjUgMTUgMjAuMjVIOUM3LjU2NDU5IDIwLjI1IDYuNTYzNDcgMjAuMjQ4NCA1LjgwODEyIDIwLjE0NjlDNS4wNzQzNSAyMC4wNDgyIDQuNjg1NzcgMTkuODY3OCA0LjQwOTAxIDE5LjU5MUM0LjEzMjI1IDE5LjMxNDIgMy45NTE4IDE4LjkyNTcgMy44NTMxNSAxOC4xOTE5QzMuNzUxNTkgMTcuNDM2NSAzLjc1IDE2LjQzNTQgMy43NSAxNVpcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzFEMjkzOVwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gUGFuZWwgQ29sbGFwc2UgSGFuZGxlcnMgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLWhhbmRsZXIgbGVmdFwiIChjbGljayk9XCJ0b2dnbGVQYW5lbCgnbGVmdCcpXCI+XHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzTGVmdFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTguMjczMDggMTIuNjM2TDQuNjM2NzIgOC45OTk2NEw4LjI3MzA4IDUuMzYzMjhNMTMuMzY0IDEyLjYzNkw5LjcyNzYzIDguOTk5NjRMMTMuMzY0IDUuMzYzMjhcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPHN2ZyAqbmdJZj1cImlzTGVmdFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTkuNzI2OTIgNS4zNjM5OUwxMy4zNjMzIDkuMDAwMzZMOS43MjY5MiAxMi42MzY3TTQuNjM2MDEgNS4zNjM5OUw4LjI3MjM3IDkuMDAwMzZMNC42MzYwMSAxMi42MzY3XCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLWhhbmRsZXIgcmlnaHRcIiAoY2xpY2spPVwidG9nZ2xlUGFuZWwoJ3JpZ2h0JylcIj5cclxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yNzMwOCAxMi42MzZMNC42MzY3MiA4Ljk5OTY0TDguMjczMDggNS4zNjMyOE0xMy4zNjQgMTIuNjM2TDkuNzI3NjMgOC45OTk2NEwxMy4zNjQgNS4zNjMyOFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzUmlnaHRQYW5lbENvbGxhcHNlZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk05LjcyNjkyIDUuMzYzOTlMMTMuMzYzMyA5LjAwMDM2TDkuNzI2OTIgMTIuNjM2N000LjYzNjAxIDUuMzYzOTlMOC4yNzIzNyA5LjAwMDM2TDQuNjM2MDEgMTIuNjM2N1wiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBFZGl0IEZpeHR1cmUgQm9keSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6ICFlZGl0Rml4dHVyZSB9XCI+XHJcbiAgICAgICAgPGRpdiBpZD1cImVkaXQtYm9keVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJteC0zIG15LTUgbmF2IG5hdi1waWxsc1wiIHJvbGU9XCJ0YWJsaXN0XCI+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICAgIDxhIChjbGljayk9XCJzdWJtaXRGaXh0dXJlID0gZmFsc2U7IGVkaXRGaXh0dXJlU2VjdGlvbiA9ICdiYXNpYy1kZXRhaWxzJ1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdiYXNpYy1kZXRhaWxzJyA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cIm5hdi1saW5rXCIgcm9sZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgQmFzaWMgZGV0YWlsc1xyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gY3Vyc29yLXBvaW50ZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInN1Ym1pdEZpeHR1cmUgPSBmYWxzZTsgZWRpdEZpeHR1cmVTZWN0aW9uID0gJ3Byb2R1Y3RzJ1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdwcm9kdWN0cycgPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJuYXYtbGlua1wiIHJvbGU9XCJ0YWJcIj5cclxuICAgICAgICAgICAgICAgIFByb2R1Y3RzXHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBjdXJzb3ItcG9pbnRlclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cclxuICAgICAgICAgICAgICA8YSAoY2xpY2spPVwic3VibWl0Rml4dHVyZSA9IGZhbHNlOyBlZGl0Rml4dHVyZVNlY3Rpb24gPSAndm1zJ1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICd2bXMnID8gJ2FjdGl2ZScgOiAnJ1wiIGNsYXNzPVwibmF2LWxpbmtcIiByb2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgICAgICBWaXN1YWwgTWVyY2hhbmRpc2VcclxuICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ2Jhc2ljLWRldGFpbHMnXCI+XHJcbiAgICAgICAgICAgICAgPGxpYi1pbnN0YW5jZS1iYXNpYy1kZXRhaWxzIFtmaXh0dXJlRGF0YV09XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCIgW2VkaXRNb2RlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2lzU3VibWl0dGVkXT1cInN1Ym1pdEZpeHR1cmVcIiAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1pbnN0YW5jZS1iYXNpYy1kZXRhaWxzPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdwcm9kdWN0cydcIj5cclxuICAgICAgICAgICAgICA8bGliLWluc3RhbmNlLXByb2R1Y3RzIFtmaXh0dXJlRGF0YV09XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCIgW2VkaXRNb2RlXT1cInRydWVcIiBbaXNTdWJtaXR0ZWRdPVwic3VibWl0Rml4dHVyZVwiXHJcbiAgICAgICAgICAgICAgICAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1pbnN0YW5jZS1wcm9kdWN0cz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAndm1zJ1wiPlxyXG4gICAgICAgICAgICAgIDxsaWItaW5zdGFuY2Utdm1zIFtmaXh0dXJlRGF0YV09XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCIgW2VkaXRNb2RlXT1cInRydWVcIiBbaXNTdWJtaXR0ZWRdPVwic3VibWl0Rml4dHVyZVwiXHJcbiAgICAgICAgICAgICAgICAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1pbnN0YW5jZS12bXM+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdjb2xsYXBzZWQtY29sJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkLCAnY29sLTMnOiAhaXNSaWdodFBhbmVsQ29sbGFwc2VkIH1cIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7J21pbi13aWR0aCc6IGlzUmlnaHRQYW5lbENvbGxhcHNlZCA/ICcwJyA6IGVkaXRGaXh0dXJlID8gJzM0MHB4JyA6ICcxMDUwcHgnfVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmZWVkYmFja0NvbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPCEtLSBUZW1wbGF0ZXMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZmVlZGJhY2tDb2w+XHJcbiAgPGRpdiBjbGFzcz1cInMtY2FyZFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6ZWRpdEZpeHR1cmUgPyAnNzJweCcgOiAnMHB4J31cIj5cclxuICAgIDwhLS0gPGFwcC1tYW5hZ2Utc3RvcmUtcGxhbm8tZmVlZGJhY2sgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkICYmICFlZGl0Rml4dHVyZX1cIlxyXG4gICAgICBbY3VycmVudFBsYW5vXT1cImZsb29yRGF0YVwiIFtzdG9yZUZlZWRiYWNrXT1cInN0b3JlRmVlZGJhY2tcIiBbc2VsZWN0ZWRJc3N1ZV09XCJzZWxlY3RlZEZpeHR1cmVcIlxyXG4gICAgICAoaXNBcHByb3ZlZCk9XCJoYW5kbGVBcHByb3ZlclJlc3BvbnNlKCRldmVudClcIj5cclxuICAgIDwvYXBwLW1hbmFnZS1zdG9yZS1wbGFuby1mZWVkYmFjaz4gLS0+XHJcblxyXG4gICAgPGxpYi12ZXJpZmljYXRpb24tZmVlZGJhY2sgW2Zsb29yRGF0YV09XCJmbG9vckRhdGFcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgJiYgIWVkaXRGaXh0dXJlfVwiXHJcbiAgICAgIFtmZWVkYmFja0RldGFpbHNdPVwic2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2tcIiAoY2hhbmdlRml4dHVyZSk9XCJvbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoJGV2ZW50LHRydWUpXCJcclxuICAgICAgW3RvdGFsRml4dHVyZXNdPVwiYWxsRml4dHVyZUluc3RhbmNlc1wiIFtjZG5dPVwiY2RuVXJsXCIgKGFjdGlvbik9XCJoYW5kbGVGZWVkYmFja0FjdGlvbigkZXZlbnQpXCJcclxuICAgICAgW3Nob3dBY3Rpb25dPVwiIWVkaXRGaXh0dXJlXCI+PC9saWItdmVyaWZpY2F0aW9uLWZlZWRiYWNrPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNoZWFkZXJTa2VsZXRvbj5cclxuICA8ZGl2IGNsYXNzPVwicm93IG0tMCBnLTAgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyIHctMTAwIHAtNCByb3VuZGVkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBtdC0wIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2tlbGV0b25Mb2FkZXI+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXIgcm91bmRlZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48bmctdGVtcGxhdGUgI25vU3RvcmVWaWRlbyBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxoMiBjbGFzcz1cIm1iLTNcIj5ObyBTdG9yZSBWaWRlbyBGb3VuZDwvaDI+XHJcbiAgICAgIDxwPlRoZSB2aWRlbyB3aWxsIGJlIGF2YWlsYWJsZSBvbmNlIGEgcmVxdWVzdCBpcyByYWlzZWQgYW5kIHRoZSBzdG9yZSBzdWJtaXRzIGEgY29tcGxldGUgc3RvcmUgdmlkZW8uPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAoY2xpY2spPVwibW9kYWwuY2xvc2UoKVwiPkNsb3NlPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXBwbHlMb2dpY3MgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8aDIgY2xhc3M9XCJtYi0zXCI+QXBwbHkgSVZNIExvZ2ljczwvaDI+XHJcbiAgICAgIDxwPlRoaXMgd2lsbCBhbmFseXplIHRoZSBjdXJyZW50IGxheW91dCBhbmQgYXBwbHkgdGhlIHByZS1kZWZpbmVkIGZpeHR1cmUgbG9naWNzLjwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0zXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiYXBwbHlQSURMb2dpY3MoKVwiPlByb2NlZWQ8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhcHByb3ZlTGF5b3V0TW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8aDIgY2xhc3M9XCJtYi0zXCI+QXBwcm92ZSBsYXlvdXQvcGxhbjwvaDI+XHJcbiAgICAgIDxwPlxyXG4gICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBhcHByb3ZlIHRoZSBsYXlvdXQ/IFBsZWFzZSBlbnN1cmUgaXQgaGFzIGJlZW4gdGhvcm91Z2hseSByZXZpZXdlZCBiZWZvcmUgYXBwcm92aW5nLlxyXG4gICAgICA8L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBnYXAtM1wiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJtb2RhbC5jbG9zZSgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImFwcHJvdmVMYXlvdXQoKVwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzQnV0dG9uTG9hZGluZ1wiPkFwcHJvdmU8L3NwYW4+XHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cImlzQnV0dG9uTG9hZGluZ1wiIGNsYXNzPVwic3Bpbm5lclwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwYXRoXCIgY3g9XCIyNVwiIGN5PVwiMjVcIiByPVwiMjBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjRcIj48L2NpcmNsZT5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
3941
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby9tYW5hZ2Utc3RvcmUtcGxhbm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvbWFuYWdlLXN0b3JlLXBsYW5vL21hbmFnZS1zdG9yZS1wbGFuby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFJWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFELE9BQU8sRUFHTCxXQUFXLEVBRVgsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUNMLE9BQU8sRUFFUCxZQUFZLEVBQ1osY0FBYyxFQUNkLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQU1qQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUN4SCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUUxRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQmhILE1BQU0sT0FBTyx5QkFBeUI7SUFvRzFCO0lBQ0E7SUFDQTtJ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QUcsSUFBSSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLDhCQUE4QixDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNoQztRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1NBQzdEO2dCQUFTO1lBQ1IsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7U0FDOUI7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0E1NEpVLHlCQUF5Qjs0RkFBekIseUJBQXlCLHlHQUZ6QixDQUFDLGFBQWEsQ0FBQywraEJDNUQ1Qix5eTJEQTgzQmM7OzRGRGgwQkQseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixhQUd2QixDQUFDLGFBQWEsQ0FBQzt3V0FNMUIsU0FBUztzQkFEUixTQUFTO3VCQUFDLFlBQVk7Z0JBRU8sWUFBWTtzQkFBekMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ0Qsb0JBQW9CO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0MsbUJBQW1CO3NCQUE1QyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ1MscUJBQXFCO3NCQUFyRCxTQUFTO3VCQUFDLG9CQUFvQjtnQkFHL0IsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgeyBMb2NhdGlvbiwgVGl0bGVDYXNlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgRm9ybUFycmF5LFxyXG4gIEZvcm1CdWlsZGVyLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgU3ViamVjdCxcclxuICBTdWJzY3JpcHRpb24sXHJcbiAgZGVib3VuY2VUaW1lLFxyXG4gIGZpcnN0VmFsdWVGcm9tLFxyXG4gIGZyb21FdmVudCxcclxuICB0YWtlVW50aWwsXHJcbn0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCAqIGFzIGZhYnJpYyBmcm9tIFwiZmFicmljXCI7XHJcblxyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcblxyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMYXlvdXRFZGl0Q29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3BvcHVwcy9sYXlvdXQtZWRpdC1jb25maXJtYXRpb24vbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBQdWJsaXNodGFza1BvcHVwQ29tcG9uZW50IH0gZnJvbSBcIi4vcHVibGlzaHRhc2stcG9wdXAvcHVibGlzaHRhc2stcG9wdXAuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFN0b3JlVGFza1Jldm9rZUNvbXBvbmVudCB9IGZyb20gXCIuL3N0b3JlLXRhc2stcmV2b2tlL3N0b3JlLXRhc2stcmV2b2tlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vcG9wdXBzL2RlbGV0ZS1jb25maXJtYXRpb24vZGVsZXRlLWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRHJvcGRvd25JRiB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL3BsYW5vLWdlbmVyYWwuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IENvbXBsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3BvcHVwcy9jb21wbGV0ZS1jb25maXJtYXRpb24vY29tcGxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBWbUxpYnJhcnlMaXN0IH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvdm0tbGlicmFyeS5pbnRlcmZhY2VcIjtcclxuXHJcbnR5cGUgQm91bmRGaXh0dXJlR3JvdXAgPSB7XHJcbiAgZml4dHVyZUdyb3VwOiBmYWJyaWMuR3JvdXA7XHJcbiAgb2Zmc2V0WDogbnVtYmVyO1xyXG4gIG9mZnNldFk6IG51bWJlcjtcclxuICBfdGVtcE9sZFRvcD86IG51bWJlcjtcclxuICBfdGVtcE9sZExlZnQ/OiBudW1iZXI7XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItbWFuYWdlLXN0b3JlLXBsYW5vXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9tYW5hZ2Utc3RvcmUtcGxhbm8uY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL21hbmFnZS1zdG9yZS1wbGFuby5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIHByb3ZpZGVyczogW1RpdGxlQ2FzZVBpcGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFuYWdlU3RvcmVQbGFub0NvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXRcclxue1xyXG4gIEBWaWV3Q2hpbGQoXCJiYXNlQ2FudmFzXCIpXHJcbiAgY2FudmFzUmVmITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChcImNhbnZhc0NvbnRhaW5lclwiKSBjb250YWluZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKFwibm9TdG9yZVZpZGVvXCIpIG5vU3RvcmVWaWRlb01vZGFsUmVmITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKFwiYXBwbHlMb2dpY3NcIikgYXBwbHlMb2dpY3NNb2RhbFJlZiE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZChcImFwcHJvdmVMYXlvdXRNb2RhbFwiKSBhcHByb3ZlTGF5b3V0TW9kYWxSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxyXG4gIG9uUmVzaXplKCk6IHZvaWQge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG5cclxuICBjYW52YXMhOiBmYWJyaWMuQ2FudmFzO1xyXG4gIHpvb21MZXZlbDogbnVtYmVyID0gMTtcclxuICB3YWxsVGhpY2tuZXNzID0gMzA7XHJcbiAgdmVydGljYWxNYXJnaW4gPSAoMS4yNSAvIDEwMCkgKiB0aGlzLnRvUGl4ZWxzKDE1MjQsIFwibW1cIik7XHJcbiAgd2FsbEJpbmRpbmdzID0gbmV3IE1hcDxmYWJyaWMuR3JvdXAsIEJvdW5kRml4dHVyZUdyb3VwW10+KCk7XHJcblxyXG4gIGxheW91dEZvcm06IEZvcm1Hcm91cDtcclxuICBzZWxlY3RlZEZsb29ySWQgPSBuZXcgRm9ybUNvbnRyb2woXCJcIik7XHJcbiAgZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgZml4dHVyZVRlbXBsYXRlSWRTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIG90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBwbGFub0RhdGE6IGFueTtcclxuXHJcbiAgZmxvb3JEYXRhOiBhbnk7XHJcbiAgcmVhZG9ubHkgb3JpZ2luYWxGbG9vckRhdGE6IGFueTsgLy91c2VkIHRvIHJvbGxiYWNrIHRvIG9yaWdpbmFsIGxheW91dCBzdGF0ZSBvbiBjbGljayBjYW5jZWwgd2hpbGUgZWRpdGluZy5cclxuXHJcbiAgY2RuVXJsOiBzdHJpbmc7XHJcbiAgZml4dHVyZVRlbXBsYXRlczogYW55W10gPSBbXTtcclxuICBhbGxGaXh0dXJlczogYW55W10gPSBbXTsgLy8gYWxsIGZpeHR1cmVzIGluY2x1ZGluZyB0aGUgbWFzdGVyIHRlbXBsYXRlcyBmb3IgdHJlZSB2aWV3XHJcbiAgYWxsRml4dHVyZUluc3RhbmNlczogYW55W10gPSBbXTsgLy9vbmx5IHRoZSBsYXlvdXQgZml4dHVyZXMgaW5zdGFuY2VzLlxyXG4gIHN0b3JlRmVlZGJhY2s6IGFueTtcclxuXHJcbiAgc2VsZWN0ZWRGaXh0dXJlOiBhbnk7XHJcbiAgc2VsZWN0ZWRGaXh0dXJlRGF0YTogYW55O1xyXG4gIHNlbGVjdGVkRml4dHVyZUZlZWRiYWNrOiBhbnk7XHJcbiAgZWRpdEZpeHR1cmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlZGl0Rml4dHVyZVNlY3Rpb246IFwiYmFzaWMtZGV0YWlsc1wiIHwgXCJwcm9kdWN0c1wiIHwgXCJ2bXNcIiA9IFwiYmFzaWMtZGV0YWlsc1wiO1xyXG4gIHN1Ym1pdEZpeHR1cmUgPSBmYWxzZTtcclxuXHJcbiAgc3RvcmVNZXRyaWNzID0ge1xyXG4gICAgZmxvb3JDb3VudDogMCxcclxuICAgIGZpeHR1cmVDb3VudDogMCxcclxuICAgIHZtQ291bnQ6IDAsXHJcbiAgfTtcclxuXHJcbiAgaXNQYWdlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNSaWdodFBhbmVsQ29sbGFwc2VkOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0xlZnRQYW5lbENvbGxhcHNlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2VsZWN0ZWRWaWV3OiBcInRyZWVcIiB8IFwiZGV0YWlsXCIgPSBcImRldGFpbFwiO1xyXG5cclxuICBwdWJsaXNoaW5nU3RhdGU6XHJcbiAgICB8IFwibGF5b3V0XCJcclxuICAgIHwgXCJsYXlvdXQtcmVkb1wiXHJcbiAgICB8IFwiZml4dHVyZVwiXHJcbiAgICB8IFwiZml4dHVyZS1yZWRvXCJcclxuICAgIHwgXCJ2bVwiXHJcbiAgICB8IFwidm0tcmVkb1wiXHJcbiAgICB8IFwiY29tcGxldGVcIlxyXG4gICAgfCBcIlwiID0gXCJcIjtcclxuICBkaXNhYmxlZFB1Ymxpc2g6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBkaXNhYmxlRWRpdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgdGFza0luZm86IGFueTtcclxuICB0YXNrU3R5bGUgPSB7XHJcbiAgICBsYXlvdXQ6IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICAgIGZpeHR1cmU6IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICAgIHZtOiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgfTtcclxuXHJcbiAgb3RoZXJFbGVtZW50TGlzdDogRHJvcGRvd25JRltdID0gW1xyXG4gICAgeyBsYWJlbDogXCJQT1MgQ291bnRlclwiLCB2YWx1ZTogXCJQT1MgQ291bnRlclwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIkRpc2N1c3Npb24gVGFibGVcIiwgdmFsdWU6IFwiRGlzY3Vzc2lvbiBUYWJsZVwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIk1pcnJvclwiLCB2YWx1ZTogXCJNaXJyb3JcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJPdGhlcnNcIiwgdmFsdWU6IFwiT3RoZXJzXCIgfSxcclxuICBdO1xyXG4gIHN0b3JlTGlzdDogYW55ID0gW107XHJcbiAgc2VsZWN0ZWRTdG9yZU5hbWU6IGFueTtcclxuXHJcbiAgLy8gdm1MaXN0OiBWbUxpYnJhcnlMaXN0W10gPSBbXTtcclxuICAvLyBpc1VzZXJJbnRlcmFjdGVkV2l0aENhbnZhczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGFjdGl2ZUhpZ2hsaWdodDogZmFicmljLlJlY3QgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcblxyXG4gIGlzQnV0dG9uTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICBsYXlvdXRCb3VuZHM6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IFN0b3JlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aXRsZUNhc2U6IFRpdGxlQ2FzZVBpcGUsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuXHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGUpIHRoaXMuY2RuVXJsID0gZS5wbGFub2dyYW1DRE47XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRQYWdlRGF0YSgpO1xyXG5cclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGE/LmNsaWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIGFzIHN0cmluZyxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5nZXRWbXNMaXN0KCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtc1xyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHBhcmFtcykgPT4ge1xyXG4gICAgICAgIGlmIChwYXJhbXM/LnBsYW5vSWQpIHtcclxuICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyhwYXJhbXM/LnBsYW5vSWQpO1xyXG4gICAgICAgICAgdGhpcy5nZXRTdG9yZUxpc3QocGFyYW1zPy5wbGFub0lkKTtcclxuICAgICAgICAgIGlmIChwYXJhbXM/LmZsb29ySWQpIHtcclxuICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEgPSB7IF9pZDogcGFyYW1zPy5mbG9vcklkIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNlbGVjdGVkRmxvb3JJZC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGFzeW5jIChpZCkgPT4ge1xyXG4gICAgICB0aGlzLmZsb29yRGF0YSA9IG51bGw7XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xyXG5cclxuICAgICAgdGhpcy5mbG9vckRhdGEgPSB0aGlzLnBsYW5vRGF0YT8uZmxvb3JzPy5maW5kKFxyXG4gICAgICAgIChmbG9vcjogYW55KSA9PiBmbG9vci5faWQgPT09IGlkLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICB0aGlzLnRhc2tEZXRhaWxzKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCksXHJcbiAgICAgICAgICB0aGlzLmdldFN0b3JlRmVlZGJhY2sodGhpcy5mbG9vckRhdGEucGxhbm9JZCwgdGhpcy5mbG9vckRhdGEuX2lkLCB7fSksXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuXHJcbiAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuICAgICAgdGhpcy5sYXlvdXRGb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICBjb25zdCBuZXdQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xyXG4gICAgICBuZXdQYXJhbXMuc2V0KFwicGxhbm9JZFwiLCB0aGlzLmZsb29yRGF0YS5wbGFub0lkKTtcclxuICAgICAgbmV3UGFyYW1zLnNldChcImZsb29ySWRcIiwgdGhpcy5mbG9vckRhdGEuX2lkKTtcclxuXHJcbiAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKFxyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcclxuICAgICAgICBuZXdQYXJhbXMudG9TdHJpbmcoKSxcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQuc2V0VmFsdWUodGhpcy5mbG9vckRhdGEuX2lkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcyA9IG5ldyBmYWJyaWMuQ2FudmFzKHRoaXMuY2FudmFzUmVmPy5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvbkZ1bGx5Q29udGFpbmVkOiB0cnVlLFxyXG4gICAgICBwZXJQaXhlbFRhcmdldEZpbmQ6IHRydWUsXHJcbiAgICAgIHRhcmdldEZpbmRUb2xlcmFuY2U6IDUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBmcm9tRXZlbnQodGhpcy5jYW52YXMgYXMgYW55LCBcIm9iamVjdDptb2RpZmllZFwiKVxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbW92ZWRPYmo6IGFueSA9IGUudGFyZ2V0O1xyXG5cclxuICAgICAgICBpZiAoIW1vdmVkT2JqKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmIChtb3ZlZE9iaj8udHlwZSA9PT0gXCJhY3RpdmVTZWxlY3Rpb25cIikge1xyXG4gICAgICAgICAgdGhpcy5hcHBseUdyb3VwVHJhbnNmb3JtKG1vdmVkT2JqKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGUudHJhbnNmb3JtPy5hY3Rpb247XHJcblxyXG4gICAgICAgIGNvbnN0IGlzUmVzaXplID1cclxuICAgICAgICAgIGFjdGlvbiA9PT0gXCJzY2FsZVwiIHx8IGFjdGlvbiA9PT0gXCJzY2FsZVhcIiB8fCBhY3Rpb24gPT09IFwic2NhbGVZXCI7XHJcblxyXG4gICAgICAgIGlmIChpc1Jlc2l6ZSkge1xyXG4gICAgICAgICAgY29uc3QgdHlwZSA9IG1vdmVkT2JqPy5vYmpUeXBlID8/IFwiZ3JvdXBcIjtcclxuXHJcbiAgICAgICAgICBjb25zdCB1cGRhdGVkQ29uZmlnID0ge1xyXG4gICAgICAgICAgICB4OiBtb3ZlZE9iai5sZWZ0LFxyXG4gICAgICAgICAgICB5OiBtb3ZlZE9iai50b3AsXHJcbiAgICAgICAgICAgIHdpZHRoOiBtb3ZlZE9iai5nZXRTY2FsZWRXaWR0aCgpLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IG1vdmVkT2JqLmdldFNjYWxlZEhlaWdodCgpLFxyXG4gICAgICAgICAgICBhbmdsZTogbW92ZWRPYmouYW5nbGUsXHJcbiAgICAgICAgICAgIGVsZW1lbnREYXRhOiBtb3ZlZE9iai5kYXRhLFxyXG4gICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBcIndhbGxcIjoge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShtb3ZlZE9iaik7XHJcbiAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YS5hbmdsZSA9IHVwZGF0ZWRDb25maWcuYW5nbGU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld1dhbGwgPSBhd2FpdCB0aGlzLmRyYXdXYWxsKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLngsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLnksXHJcbiAgICAgICAgICAgICAgICB0aGlzLndhbGxUaGlja25lc3MsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLndpZHRoIC0gMC4yNyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGEsXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgKG5ld1dhbGwgYXMgYW55KS5vYmpUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICAgICAgKG5ld1dhbGwgYXMgYW55KS5kYXRhID0gdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KG5ld1dhbGwpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwib3RoZXJzXCI6IHtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmUobW92ZWRPYmopO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGEucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmFuZ2xlO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBuZXdPdGhlciA9IHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueCxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueSxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuYW5nbGUsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLndpZHRoIC0gMixcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuaGVpZ2h0IC0gMixcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGEsXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgKG5ld090aGVyIGFzIGFueSkub2JqVHlwZSA9IFwib3RoZXJzXCI7XHJcbiAgICAgICAgICAgICAgKG5ld090aGVyIGFzIGFueSkuZGF0YSA9IHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChuZXdPdGhlcik7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhc2UgXCJlbnRyYW5jZVwiOiB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhc2UgXCJmaXh0dXJlXCI6IHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVdhbGxDb29yZGluYXRlcygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRml4dHVyZUNvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVPdGhlckVsZW1lbnRzQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXR1cFpvb21IYW5kbGVycygpO1xyXG5cclxuICAgIHRoaXMubGlzdGVuVG9EZWxldGVLZXkoKTtcclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJsZWZ0XCIsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlQWxsUG9zaXRpb25zKCkge1xyXG4gICAgdGhpcy51cGRhdGVXYWxsQ29vcmRpbmF0ZXMoKTtcclxuICAgIHRoaXMudXBkYXRlRml4dHVyZUNvb3JkaW5hdGVzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZU90aGVyRWxlbWVudHNDb29yZGluYXRlcygpO1xyXG4gICAgdGhpcy51cGRhdGVFbnRyYW5jZUNvb3JkaW5hdGVzKCk7XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEuY2FkTGF5b3V0ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBhcHBseUdyb3VwVHJhbnNmb3JtKHNlbGVjdGlvbjogZmFicmljLkFjdGl2ZVNlbGVjdGlvbikge1xyXG4gICAgY29uc3QgbWF0cml4ID0gc2VsZWN0aW9uLmNhbGNUcmFuc2Zvcm1NYXRyaXgoKTtcclxuXHJcbiAgICBzZWxlY3Rpb24uZ2V0T2JqZWN0cygpLmZvckVhY2goKG9iajogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG9iak1hdHJpeCA9IG9iai5jYWxjVHJhbnNmb3JtTWF0cml4KCk7XHJcbiAgICAgIGNvbnN0IGZpbmFsTWF0cml4ID0gZmFicmljLnV0aWwubXVsdGlwbHlUcmFuc2Zvcm1NYXRyaWNlcyhcclxuICAgICAgICBtYXRyaXgsXHJcbiAgICAgICAgb2JqTWF0cml4LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgcG9pbnQgPSBuZXcgZmFicmljLlBvaW50KDAsIDApLnRyYW5zZm9ybShmaW5hbE1hdHJpeCk7XHJcblxyXG4gICAgICBvYmouc2V0KHtcclxuICAgICAgICBsZWZ0OiBwb2ludC54LFxyXG4gICAgICAgIHRvcDogcG9pbnQueSxcclxuICAgICAgICBhbmdsZTogc2VsZWN0aW9uLmFuZ2xlICsgKG9iai5hbmdsZSA/PyAwKSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBvYmouc2V0Q29vcmRzKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBVbmdyb3VwIGFmdGVyIGFwcGx5aW5nIHRyYW5zZm9ybVxyXG4gICAgdGhpcy5jYW52YXMuZGlzY2FyZEFjdGl2ZU9iamVjdCgpO1xyXG4gICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplQ2FudmFzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMuY2FudmFzLnNldERpbWVuc2lvbnMoe1xyXG4gICAgICB3aWR0aDogY29udGFpbmVyLmNsaWVudFdpZHRoIC0gNTAsXHJcblxyXG4gICAgICBoZWlnaHQ6IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgLSA0MCxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBab29tSGFuZGxlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOndoZWVsXCIsIChvcHQ6IGZhYnJpYy5URXZlbnQ8V2hlZWxFdmVudD4pID0+IHtcclxuICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG5cclxuICAgICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcclxuICAgICAgICAvLyB0aGlzLmlzVXNlckludGVyYWN0ZWRXaXRoQ2FudmFzID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGxldCB6b29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgICAgIHpvb20gKj0gMC45OTUgKiogZGVsdGE7XHJcblxyXG4gICAgICAgIHpvb20gPSBNYXRoLm1heCgwLjIsIE1hdGgubWluKHpvb20sIDMpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGUub2Zmc2V0WCxcclxuICAgICAgICAgICAgeTogZS5vZmZzZXRZLFxyXG4gICAgICAgICAgfSBhcyBmYWJyaWMuUG9pbnQsXHJcbiAgICAgICAgICB6b29tLFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgbGV0IGxhc3RQb3NYID0gMDtcclxuICAgIGxldCBsYXN0UG9zWSA9IDA7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTpkb3duXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIW9wdC50YXJnZXQpIHtcclxuICAgICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6bW92ZVwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzRHJhZ2dpbmcgJiYgdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0pIHtcclxuICAgICAgICAvLyB0aGlzLmlzVXNlckludGVyYWN0ZWRXaXRoQ2FudmFzID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBlID0gb3B0LmU7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm07XHJcbiAgICAgICAgdnB0WzRdICs9IGUuY2xpZW50WCAtIGxhc3RQb3NYO1xyXG4gICAgICAgIHZwdFs1XSArPSBlLmNsaWVudFkgLSBsYXN0UG9zWTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgbGFzdFBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICAgICAgbGFzdFBvc1kgPSBlLmNsaWVudFk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6dXBcIiwgKCkgPT4ge1xyXG4gICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFBhZ2VEYXRhKCkge1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZShcIk1hbmFnZSBTdG9yZSBQbGFub1wiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiUGxhbm9ncmFtXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogXCJcIixcclxuICAgICAgICBwYXRoOiBcIlwiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgLy8gYXN5bmMgZ2V0Vm1zTGlzdCgpIHtcclxuICAvLyAgIHRyeSB7XHJcbiAgLy8gICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgLy8gICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFZNTmFtZUxpc3QodGhpcy5jbGllbnRJZCksXHJcbiAgLy8gICAgICk7XHJcbiAgLy8gICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAvLyAgICAgICB0aGlzLnZtTGlzdCA9IHJlcz8uZGF0YT8ubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAvLyAgICAgICAgIHJldHVybiB7XHJcbiAgLy8gICAgICAgICAgIGlkOiBpdGVtLl9pZCxcclxuICAvLyAgICAgICAgICAgbmFtZTogaXRlbS52bU5hbWUsXHJcbiAgLy8gICAgICAgICAgIGRpc3BsYXlOYW1lOiBpdGVtLnZtTmFtZSxcclxuICAvLyAgICAgICAgICAgd2lkdGg6IGl0ZW0udm1XaWR0aC52YWx1ZSxcclxuICAvLyAgICAgICAgICAgaGVpZ2h0OiBpdGVtLnZtSGVpZ2h0LnZhbHVlLFxyXG4gIC8vICAgICAgICAgICB0eXBlOiBpdGVtLnZtVHlwZSxcclxuICAvLyAgICAgICAgICAgLi4uKGl0ZW0udm1JbWFnZVVybFxyXG4gIC8vICAgICAgICAgICAgID8geyBpbWdVcmw6IGAke3RoaXMuY2RuVXJsfSR7aXRlbS52bUltYWdlVXJsfWAgfVxyXG4gIC8vICAgICAgICAgICAgIDoge30pLFxyXG4gIC8vICAgICAgICAgfTtcclxuICAvLyAgICAgICB9KTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAvLyAgICAgY29uc29sZS5sb2coXCJAQCB+IGdldFZtc0xpc3QgW0VSUl06XCIsIGVycm9yKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIG9uRml4dHVyZVNhdmUoKSB7XHJcbiAgICB0aGlzLnN1Ym1pdEZpeHR1cmUgPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnRhc2tUeXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zdWJtaXRGaXh0dXJlID0gZmFsc2U7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25GaXh0dXJlUGFnZUNhbmNlbCgpIHtcclxuICAgIC8vIHRoaXMuc3VibWl0Rml4dHVyZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgIHRoaXMuZWRpdEZpeHR1cmVTZWN0aW9uID0gXCJiYXNpYy1kZXRhaWxzXCI7XHJcbiAgICB0aGlzLmVkaXRGaXh0dXJlID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLmxheW91dEZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICBhd2FpdCB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgb25GaXh0dXJlU3VibWl0KGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgJiYgIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChldmVudD8uc2hlbGYgJiYgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5zaGVsZkNvbmZpZykge1xyXG4gICAgICBldmVudC5zaGVsZiA9IGV2ZW50LnNoZWxmLm1hcCgoc2hlbGY6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBmaW5kU2hlbGYgPSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuc2hlbGZDb25maWcuZmluZChcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlLnNoZWxmTnVtYmVyID09IGluZGV4ICsgMSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChmaW5kU2hlbGYpIHtcclxuICAgICAgICAgIHNoZWxmID0geyAuLi5maW5kU2hlbGYsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBkZXRhaWxzID1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnW1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5zaGVsZkNvbmZpZy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICBkZXRhaWxzLnNoZWxmTnVtYmVyID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgc2hlbGYgPSB7IC4uLmRldGFpbHMsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaGVsZjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJzaGVsZkNvbmZpZ1wiXSA9IGV2ZW50Py5zaGVsZjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1wiZGVzY3JpcHRpb25cIl0gPSBldmVudD8uZGVzY3JpcHRpb24gPz8gXCJcIjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1widGVtcGxhdGVHcm91cE5hbWVcIl0gPVxyXG4gICAgICAgIGV2ZW50Py50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuaGVhZGVyLmxhYmVsID0gZXZlbnQ/LmhlYWRlckxhYmVsID8/IFwiXCI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5mb290ZXIubGFiZWwgPSBldmVudD8uZm9vdGVyTGFiZWwgPz8gXCJcIjtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnNlY3Rpb24pIHtcclxuICAgICAgZXZlbnQuc2VjdGlvbi5mb3JFYWNoKChzZWM6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBudW1iZXIgPSBzZWM/LnNoZWx2ZXM/Lm1hcCgoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICBwYXJzZUludChlbGUuc3BsaXQoXCIgXCIpWzFdKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uc2hlbGZDb25maWcuZm9yRWFjaCgoc2hlbGY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG51bWJlci5pbmNsdWRlcyhzaGVsZi5zaGVsZk51bWJlcikpIHtcclxuICAgICAgICAgICAgc2hlbGYuem9uZSA9IHNlYy56b25lO1xyXG4gICAgICAgICAgICBzaGVsZi5wcm9kdWN0QnJhbmROYW1lID0gc2VjLnByb2R1Y3RCcmFuZE5hbWU7XHJcbiAgICAgICAgICAgIHNoZWxmLnByb2R1Y3RDYXRlZ29yeSA9IHNlYy5wcm9kdWN0Q2F0ZWdvcnk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChldmVudD8udm1Db25maWcgJiYgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy52bUNvbmZpZykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJ2bUNvbmZpZ1wiXSA9IGV2ZW50Py52bUNvbmZpZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgIC8vIHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lZGl0Rml4dHVyZVNlY3Rpb24gPSBcImJhc2ljLWRldGFpbHNcIjtcclxuICAgICAgICB0aGlzLmVkaXRGaXh0dXJlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhPy5faWQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVQYW5lbChzaWRlOiBcImxlZnRcIiB8IFwicmlnaHRcIiwgYWN0aW9uPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHNpZGUgPT09IFwibGVmdFwiKSB7XHJcbiAgICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSBhY3Rpb24gPz8gIXRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQ7XHJcbiAgICAgIGlmICghdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCkgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSBhY3Rpb24gPz8gIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkO1xyXG4gICAgICBpZiAoIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkKSB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjaykge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VGaXh0dXJlT25GZWVkYmFja1BhbmVsKHt9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlc2l6ZUNhbnZhcygpO1xyXG4gICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQoKTtcclxuICAgIH0sIDQwMCk7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZUZlZWRiYWNrKFxyXG4gICAgcGxhbm9JZDogc3RyaW5nLFxyXG4gICAgZmxvb3JJZDogc3RyaW5nLFxyXG4gICAgZmlsdGVyOiBhbnksXHJcbiAgICBjaGVja1B1Ymxpc2hTdGF0ZTogYm9vbGVhbiA9IHRydWUsXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBsZXQgZGF0YTogYW55ID0ge1xyXG4gICAgICAgIHBsYW5vSWQ6IHBsYW5vSWQsXHJcbiAgICAgICAgZmxvb3JJZDogZmxvb3JJZCxcclxuICAgICAgfTtcclxuICAgICAgaWYgKGZpbHRlcikge1xyXG4gICAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIC4uLmZpbHRlciB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0U3RvcmVGZWVkYmFjayhkYXRhKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICBpZiAocmVzLmRhdGE/LmxheW91dERhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NMYXlvdXRGZWVkYmFjayhyZXMuZGF0YS5sYXlvdXREYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0xheW91dEZlZWRiYWNrKFtdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzLmRhdGE/LmZpeHR1cmVEYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRml4dHVyZUZlZWRiYWNrKHJlcy5kYXRhLmZpeHR1cmVEYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZpeHR1cmVGZWVkYmFjayhbXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlcy5kYXRhPy5WbURhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NWbUZlZWRiYWNrKHJlcy5kYXRhLlZtRGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NWbUZlZWRiYWNrKFtdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoY2hlY2tQdWJsaXNoU3RhdGUpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5jYWxjdWxhdGVQdWJsaXNoaW5nU3RhdGUoKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrPy5maXh0dXJlRmVlZGJhY2s/LmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlRml4dHVyZU9uRmVlZGJhY2tQYW5lbCh7XHJcbiAgICAgICAgICAgICAgY3VycmVudEZpeHR1cmU6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrLmZpeHR1cmVGZWVkYmFjay5maXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHN0b3JlIGZlZWRiYWNrXCIpO1xyXG4gICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVB1Ymxpc2hpbmdTdGF0ZSgpIHtcclxuICAgIGxldCBkaXNhYmxlRWRpdCA9IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2ldO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQuZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gZWxlbWVudC5maXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgaWYgKGZpeHR1cmUuaXNzdWUpIHtcclxuICAgICAgICAgIGRpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV07XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlLmlzc3VlKSB7XHJcbiAgICAgICAgICBkaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRpc2FibGVFZGl0KSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlRWRpdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsYXlvdXREYXRhID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHM/LmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gXCJsYXlvdXRcIixcclxuICAgICk7XHJcbiAgICBsZXQgZml4dHVyZURhdGEgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSBcImZpeHR1cmVcIixcclxuICAgICk7XHJcbiAgICBsZXQgdm1EYXRhID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHM/LmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gXCJmaXh0dXJlXCIsXHJcbiAgICApO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnRhc2tTdHlsZS5sYXlvdXQubmFtZSA9PSBcIkFwcHJvdmVkXCIgJiZcclxuICAgICAgdGhpcy50YXNrU3R5bGUuZml4dHVyZS5uYW1lID09IFwiQXBwcm92ZWRcIiAmJlxyXG4gICAgICB0aGlzLnRhc2tTdHlsZS52bS5uYW1lID09IFwiQXBwcm92ZWRcIlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJjb21wbGV0ZVwiO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnRhc2tTdHlsZS5maXh0dXJlLm5hbWUgPT0gXCJBcHByb3ZlZFwiKSB7XHJcbiAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJ2bVwiO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdm1EYXRhICYmXHJcbiAgICAgICAgKCh2bURhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiYgdm1EYXRhLmZlZWRiYWNrU3RhdHVzID09IFwiZGlzYWdyZWVcIikgfHxcclxuICAgICAgICAgIHZtRGF0YT8ucmVkb1N0YXR1cylcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcInZtLXJlZG9cIjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhICYmXHJcbiAgICAgICAgKChmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJlxyXG4gICAgICAgICAgZml4dHVyZURhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJkaXNhZ3JlZVwiKSB8fFxyXG4gICAgICAgICAgZml4dHVyZURhdGE/LnJlZG9TdGF0dXMpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gIXRoaXMuZmxvb3JEYXRhLmlzRWRpdGVkXHJcbiAgICAgICAgICA/IFwiZml4dHVyZS1yZWRvXCJcclxuICAgICAgICAgIDogXCJmaXh0dXJlXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFRlbXBsYXRlKGZpeHR1cmVDb25maWdJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRGaXh0dXJlVGVtcGxhdGUoZml4dHVyZUNvbmZpZ0lkKSxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzTGF5b3V0RmVlZGJhY2soc3RvcmVGZWVkYmFjazogYW55W10pIHtcclxuICAgIGNvbnN0IGxheW91dEZlZWRiYWNrID0gc3RvcmVGZWVkYmFjay5maW5kKFxyXG4gICAgICAoZmVlZGJhY2spID0+IGZlZWRiYWNrLnR5cGUgPT09IFwibGF5b3V0XCIsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHdhbGxFbGVtZW50cyA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmlsdGVyKFxyXG4gICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIixcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGxheW91dEZlZWRiYWNrKSB7XHJcbiAgICAgIGNvbnN0IGlzc3VlcyA9IGxheW91dEZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/Lmlzc3VlcztcclxuXHJcbiAgICAgIGlmIChpc3N1ZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3Vlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXNzdWUgPSBpc3N1ZXNbaV07XHJcblxyXG4gICAgICAgICAgaWYgKGlzc3VlLmlzc3VlVHlwZSA9PT0gXCJleHRyYUZpeHR1cmVcIikge1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IGlzc3VlLkRldGFpbHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSBcInBlbmRpbmdcIixcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlID0gZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlOiBhbnkgPSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlKFxyXG4gICAgICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlQ29uZmlnSWQsXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUlkID0gYG5ldy0ke2NyeXB0by5yYW5kb21VVUlEKCl9YDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZ2hvc3RGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAgICAgLi4udGVtcGxhdGU/LmRhdGEsXHJcbiAgICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlPy5kYXRhPy5faWQsXHJcbiAgICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUG9zaXRpb246IHsgeDogMCwgeTogMCwgdW5pdDogXCJmdFwiIH0sXHJcbiAgICAgICAgICAgICAgICBzaGVsZkNvbmZpZzogZml4dHVyZS5zaGVsZkNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGdob3N0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGZpeHR1cmUsXHJcbiAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJsYXlvdXRcIixcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAvLyBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7IGZpeHR1cmVOYW1lOiBnaG9zdEZpeHR1cmUuZml4dHVyZU5hbWUsIGZpeHR1cmVDb25maWdJZDogZ2hvc3RGaXh0dXJlLmZpeHR1cmVDb25maWdJZCwgX2lkOiBnaG9zdEZpeHR1cmUuX2lkIH0pO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgd2FsbEluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYXNzb2NXYWxsTnVtID0gZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcjtcclxuICAgICAgICAgICAgICAgIGlmIChhc3NvY1dhbGxOdW0gPj0gd2FsbEVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICB3YWxsSW5kZXggPSB3YWxsRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhc3NvY1dhbGxOdW0gPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB3YWxsSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEluZGV4ID0gYXNzb2NXYWxsTnVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRGaXh0dXJlczogYW55ID0gd2FsbEVsZW1lbnRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleCxcclxuICAgICAgICAgICAgICAgICkuZml4dHVyZXM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NvY0ZpeHR1cmVOdW0gPSBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzb2NGaXh0dXJlTnVtID4gZWxlbWVudEZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpeHR1cmVzLnB1c2goZ2hvc3RGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRml4dHVyZXMod2FsbEluZGV4ISAtIDEpLnB1c2goZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXNzb2NGaXh0dXJlTnVtIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvblxyXG4gICAgICAgICAgICAgICAgICAgIC5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgKGVsZW1lbnQ6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSB3YWxsSW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maXh0dXJlcy51bnNoaWZ0KGdob3N0Rml4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEgLSAxKS5pbnNlcnQoMCwgZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25cclxuICAgICAgICAgICAgICAgICAgICAuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gd2FsbEluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuZml4dHVyZXMuc3BsaWNlKGFzc29jRml4dHVyZU51bSAtIDEsIDAsIGdob3N0Rml4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEgLSAxKS5pbnNlcnQoYXNzb2NGaXh0dXJlTnVtIC0gMSwgZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc29jRml4dHVyZU51bSA9IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhc3NvY0ZpeHR1cmVOdW0gPiB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLnB1c2goZ2hvc3RGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFzc29jRml4dHVyZU51bSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUudW5zaGlmdChnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLmluc2VydCgwLCBmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5zcGxpY2UoXHJcbiAgICAgICAgICAgICAgICAgICAgYXNzb2NGaXh0dXJlTnVtIC0gMSxcclxuICAgICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGdob3N0Rml4dHVyZSxcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5pbnNlcnQoYXNzb2NGaXh0dXJlTnVtIC0gMSwgZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGlzc3VlLmlzc3VlVHlwZSA9PT0gXCJmaXh0dXJlTWlzc2luZ1wiIHx8XHJcbiAgICAgICAgICAgIGlzc3VlLmlzc3VlVHlwZSA9PT0gXCJmaXh0dXJlTWlzbWF0Y2hcIlxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVzID0gaXNzdWUuRGV0YWlscy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiLFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmaXh0dXJlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBmaXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnd2FsbCcpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0YXJnZXRGaXh0dXJlSWQgPSBmaXh0dXJlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB3YWxsRWxlbWVudCBvZiB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHdhbGxFbGVtZW50LmVsZW1lbnRUeXBlICE9PSBcIndhbGxcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh3YWxsRWxlbWVudC5maXh0dXJlcylcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gd2FsbEVsZW1lbnQuZml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAoZjogYW55KSA9PiBmLl9pZCA9PT0gdGFyZ2V0Rml4dHVyZUlkLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLndhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFza1R5cGU6IFwibGF5b3V0XCIsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIC8vIGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnZmxvb3InKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNlbnRlckZpeHR1cmVzID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gY2VudGVyRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZCxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgLi4uY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJsYXlvdXRcIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzRml4dHVyZUZlZWRiYWNrKHN0b3JlRmVlZGJhY2s6IGFueVtdKSB7XHJcbiAgICBjb25zdCBmaXh0dXJlRmVlZGJhY2sgPSBzdG9yZUZlZWRiYWNrLmZpbHRlcihcclxuICAgICAgKGZlZWRiYWNrKSA9PiBmZWVkYmFjay50eXBlID09PSBcImZpeHR1cmVcIixcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGZpbmRGaXh0dXJlVGFzayA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5maW5kKFxyXG4gICAgICAodGFzazogYW55KSA9PiB0YXNrLnR5cGUgPT0gXCJmaXh0dXJlXCIsXHJcbiAgICApO1xyXG5cclxuICAgIGZvciAoY29uc3QgZmVlZGJhY2sgb2YgZml4dHVyZUZlZWRiYWNrID8/IFtdKSB7XHJcbiAgICAgIGNvbnN0IGFpRGF0YSA9IGZlZWRiYWNrPy5maXh0dXJlQUlEYXRhO1xyXG4gICAgICBpZiAoIWFpRGF0YSkgY29udGludWU7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZpbmQoXHJcbiAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IGFpRGF0YS5maXh0dXJlSWQsXHJcbiAgICAgICk7XHJcbiAgICAgIGlmICghZml4dHVyZSkgY29udGludWU7XHJcblxyXG4gICAgICBmZWVkYmFjay5GaXh0dXJlRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShmaXh0dXJlKTtcclxuXHJcbiAgICAgIGNvbnN0IHN0YXR1cyA9XHJcbiAgICAgICAgKGZpbmRGaXh0dXJlVGFzaz8uc3RhdHVzID09PSBcInN1Ym1pdFwiIHx8IGZpbmRGaXh0dXJlVGFzaz8ucmVkb1N0YXR1cykgJiZcclxuICAgICAgICBmZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy5zdGF0dXNcclxuICAgICAgICAgID8gZmVlZGJhY2suYW5zd2Vyc1swXS5zdGF0dXNcclxuICAgICAgICAgIDogXCJcIjtcclxuXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oZml4dHVyZSwge1xyXG4gICAgICAgIGlzc3VlOiBmYWxzZSxcclxuICAgICAgICBpc3N1ZURhdGE6IGFpRGF0YSxcclxuICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgICAgc3RhdHVzLFxyXG4gICAgICAgIGJyZWFjaDogZmluZEZpeHR1cmVUYXNrPy5icmVhY2gsXHJcbiAgICAgICAgdGFza1N0YXR1czogZmluZEZpeHR1cmVUYXNrPy5zdGF0dXMsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1ZtRmVlZGJhY2soc3RvcmVGZWVkYmFjazogYW55W10pIHtcclxuICAgIGNvbnN0IGZpeHR1cmVGZWVkYmFjayA9IHN0b3JlRmVlZGJhY2suZmlsdGVyKFxyXG4gICAgICAoZmVlZGJhY2spID0+IGZlZWRiYWNrLnR5cGUgPT09IFwidm1cIixcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVGZWVkYmFjay5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRmVlZGJhY2subGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpc3N1ZXMgPSBmaXh0dXJlRmVlZGJhY2s/LltpXT8uYW5zd2Vycz8uWzBdPy5pc3N1ZXM7XHJcblxyXG4gICAgICAgIGlmIChpc3N1ZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpc3N1ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXNzdWUgPSBpc3N1ZXNbal07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IGlzc3VlLkRldGFpbHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSBcInBlbmRpbmdcIixcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlID0gZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgICAgICAgIC8vIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ3dhbGwnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgd2FsbEVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5lbGVtZW50VHlwZSAhPT0gXCJ3YWxsXCIgfHxcclxuICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkod2FsbEVsZW1lbnQuZml4dHVyZXMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IHdhbGxFbGVtZW50LmZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZCxcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi53YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcInZtXCIsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIC8vIGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnZmxvb3InKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNlbnRlckZpeHR1cmVzID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gY2VudGVyRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZCxcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgLi4uY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJ2bVwiLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRyYW5zZmVyQXJyYXlJdGVtPFQgPSBhbnk+KFxyXG4gICAgY3VycmVudEFycmF5OiBUW10sXHJcbiAgICB0YXJnZXRBcnJheTogVFtdLFxyXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXHJcbiAgICB0YXJnZXRJbmRleDogbnVtYmVyLFxyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZnJvbSA9IE1hdGgubWF4KDAsIE1hdGgubWluKGN1cnJlbnRBcnJheS5sZW5ndGggLSAxLCBjdXJyZW50SW5kZXgpKTtcclxuICAgIGNvbnN0IHRvID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGFyZ2V0QXJyYXkubGVuZ3RoLCB0YXJnZXRJbmRleCkpO1xyXG5cclxuICAgIGlmIChjdXJyZW50QXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgIHRhcmdldEFycmF5LnNwbGljZSh0bywgMCwgY3VycmVudEFycmF5LnNwbGljZShmcm9tLCAxKVswXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW9yZGVyRml4dHVyZShmbG9vckRhdGE6IGFueSkge1xyXG4gICAgLy8gV2FsbHNcclxuICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcblxyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IGVsZW1lbnQuZWxlbWVudE51bWJlcjtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2VudGVyIGZsb29yIGZpeHR1cmVzXHJcbiAgICBsZXQgZmxvb3JBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcImZsb29yXCI7XHJcblxyXG4gICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBmbG9vckFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEVsZW1lbnRWYWx1ZShncm91cDogYW55KSB7XHJcbiAgICByZXR1cm4gZ3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXI6IGdldCB3YWxsIG1ldGEgYnkgZWxlbWVudCBudW1iZXIgKDEtYmFzZWQpXHJcbiAgcHJpdmF0ZSBnZXRXYWxsQnlOdW1iZXIoZWxlbWVudE51bWJlcjogbnVtYmVyKTogYW55IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbj8uZmluZChcclxuICAgICAgKHc6IGFueSkgPT4gdy5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgdy5lbGVtZW50TnVtYmVyID09PSBlbGVtZW50TnVtYmVyLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJvdW5kVG9Ud28obnVtOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKG51bSAqIDEwMCkgLyAxMDA7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRTdG9yZUZpeHR1cmVzKHN0b3JlSWQ6IHN0cmluZywgZW5hYmxlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuZml4dHVyZVRlbXBsYXRlcy5sZW5ndGgpIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRGaXh0dXJlVGVtcGxhdGVzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IG51bGw7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldFN0b3JlRml4dHVyZXMoeyBpZDogW3N0b3JlSWRdLCB0cmVlVmlldzogdHJ1ZSB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyZXM/LmRhdGE/LlswXT8uZmxvb3JzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucGxhbm9EYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdKTtcclxuICAgICAgICAgIGlmICh0aGlzLmZsb29yRGF0YT8uX2lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0gc3RydWN0dXJlZENsb25lKFxyXG4gICAgICAgICAgICAgIHJlcy5kYXRhWzBdLmZsb29ycy5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGZsb29yOiBhbnkpID0+IGZsb29yPy5faWQgPT09IHRoaXMuZmxvb3JEYXRhPy5faWQsXHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdLmZsb29yc1swXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5leHRyYWN0QWxsRml4dHVyZXModGhpcy5mbG9vckRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQuc2V0VmFsdWUodGhpcy5mbG9vckRhdGEuX2lkLCB7XHJcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnN0b3JlTWV0cmljcy5mbG9vckNvdW50ID0gdGhpcy5wbGFub0RhdGE/LmZsb29ycz8ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHRoaXMuZGlzYWJsZUVkaXQgPSBmYWxzZTtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICAgICAgICB0aGlzLnRhc2tEZXRhaWxzKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCksXHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRTdG9yZUZlZWRiYWNrKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICAgICAgICAgIHt9LFxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfSBjYXRjaCB7fVxyXG5cclxuICAgICAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuXHJcbiAgICAgICAgICAvLyB0aGlzLnNlbGVjdEZpeHR1cmVGZWVkYmFjaygpO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGVuYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxheW91dEZvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHBsYW5vXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdEFsbEZpeHR1cmVzKGZsb29yRGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBleHRyYWN0ZWRGaXh0dXJlID0gW1xyXG4gICAgICAuLi4oZmxvb3JEYXRhPy5tYXN0ZXJUZW1wbGF0ZXMgPz8gW10pLFxyXG4gICAgICAuLi4oZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlID8/IFtdKSxcclxuICAgIF07XHJcblxyXG4gICAgZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5mb3JFYWNoKChscDogYW55KSA9PiB7XHJcbiAgICAgIGV4dHJhY3RlZEZpeHR1cmUucHVzaCguLi4obHAuZml4dHVyZXMgPz8gW10pKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWxsRml4dHVyZXMgPSBleHRyYWN0ZWRGaXh0dXJlO1xyXG5cclxuICAgIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcyA9IFtcclxuICAgICAgLi4udGhpcy5mbG9vckRhdGEhLmxheW91dFBvbHlnb24uZmxhdE1hcCgoZTogYW55KSA9PiBlPy5maXh0dXJlcyA/PyBbXSksXHJcbiAgICAgIC4uLih0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZSA/PyBbXSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRmxvb3IodXBkYXRlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5zdG9yZU1ldHJpY3MuZml4dHVyZUNvdW50ID0gdGhpcy5mbG9vckRhdGEuZml4dHVyZUNvdW50O1xyXG4gICAgdGhpcy5zdG9yZU1ldHJpY3Mudm1Db3VudCA9IHRoaXMuZmxvb3JEYXRhLnZtQ291bnQ7XHJcbiAgICB0aGlzLmRyYXdJbml0aWFsQ29udGVudCgpO1xyXG4gICAgaWYgKHVwZGF0ZSkge1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgod2FsbDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCB3YWxsSXRlbSA9IHRoaXMucGF0Y2hXYWxsRWxlbWVudHMoe1xyXG4gICAgICAgICAgICBlbGVtZW50VHlwZTogd2FsbC5lbGVtZW50VHlwZSxcclxuICAgICAgICAgICAgZWxlbWVudE51bWJlcjogd2FsbC5lbGVtZW50TnVtYmVyLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgd2FsbC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpeHR1cmU/LmZpeHR1cmVOYW1lID09PSBcInNwYWNlXCIpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVOYW1lOiBmaXh0dXJlLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogZml4dHVyZS5maXh0dXJlQ29uZmlnSWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlLl9pZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICh3YWxsSXRlbS5nZXQoXCJmaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHdhbGwub3RoZXJFbGVtZW50cz8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZWxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgICB0eXBlOiBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLm90aGVyRWxlbWVudExpc3Quc29tZSgobykgPT4gby52YWx1ZSA9PT0gZWxlLmZpeHR1cmVOYW1lKVxyXG4gICAgICAgICAgICAgICAgICA/IGVsZS5maXh0dXJlTmFtZVxyXG4gICAgICAgICAgICAgICAgICA6IFwiT3RoZXJzXCIsXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBjdXN0b21OYW1lOiBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLm90aGVyRWxlbWVudExpc3Quc29tZSgobykgPT4gby52YWx1ZSA9PT0gZWxlLmZpeHR1cmVOYW1lKVxyXG4gICAgICAgICAgICAgICAgICA/IFwiXCJcclxuICAgICAgICAgICAgICAgICAgOiBlbGUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICh3YWxsSXRlbS5nZXQoXCJvdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheSkucHVzaChlbGVHcm91cCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1XYWxscy5wdXNoKHdhbGxJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZS5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgZml4dHVyZU5hbWU6IGZpeHR1cmUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogZml4dHVyZS5maXh0dXJlQ29uZmlnSWQsXHJcbiAgICAgICAgICAgIF9pZDogZml4dHVyZS5faWQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgICh0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgICAgIGZpeHR1cmVHcm91cCxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmZsb29yRGF0YT8ub3RoZXJFbGVtZW50cz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/LmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBlbGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICB0eXBlOiBbXHJcbiAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgID8gZWxlLmZpeHR1cmVOYW1lXHJcbiAgICAgICAgICAgICAgICA6IFwiT3RoZXJzXCIsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIGN1c3RvbU5hbWU6IFtcclxuICAgICAgICAgICAgICB0aGlzLm90aGVyRWxlbWVudExpc3Quc29tZSgobykgPT4gby52YWx1ZSA9PT0gZWxlLmZpeHR1cmVOYW1lKVxyXG4gICAgICAgICAgICAgICAgPyBcIlwiXHJcbiAgICAgICAgICAgICAgICA6IGVsZS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICh0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JPdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICAgICAgZWxlR3JvdXAsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9PdGhlckVsZW1lbnRzQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0luaXRpYWxDb250ZW50KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jYW52YXMuY2xlYXIoKTtcclxuICAgIHRoaXMucmVvcmRlckZpeHR1cmUodGhpcy5mbG9vckRhdGEpO1xyXG4gICAgYXdhaXQgdGhpcy5kcmF3TGF5b3V0RWxlbWVudHMoKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCAzMDApO1xyXG5cclxuICAgIHRoaXMudXBkYXRlQWxsUG9zaXRpb25zKCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrPy5maXh0dXJlRmVlZGJhY2s/LmZpeHR1cmVJZCAmJlxyXG4gICAgICAhdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgJiZcclxuICAgICAgdGhpcy5hY3RpdmVIaWdobGlnaHRcclxuICAgICkge1xyXG4gICAgICB0aGlzLmNhbnZhcy5hZGQodGhpcy5hY3RpdmVIaWdobGlnaHQpO1xyXG4gICAgICB0aGlzLmtlZXBIaWdobGlnaHRPblRvcCgpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5kcmF3QmcoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RnVsbExheW91dEJvdW5kcygpIHtcclxuICAgIGNvbnN0IG9iamVjdHMgPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBpZiAoIW9iamVjdHMubGVuZ3RoKSByZXR1cm4geyBsZWZ0OiAwLCB0b3A6IDAsIHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcclxuXHJcbiAgICBsZXQgbWluWCA9IEluZmluaXR5LFxyXG4gICAgICBtaW5ZID0gSW5maW5pdHksXHJcbiAgICAgIG1heFggPSAtSW5maW5pdHksXHJcbiAgICAgIG1heFkgPSAtSW5maW5pdHk7XHJcblxyXG4gICAgZm9yIChjb25zdCBvYmogb2Ygb2JqZWN0cykge1xyXG4gICAgICBjb25zdCByZWN0ID0gb2JqLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgICBtaW5YID0gTWF0aC5taW4obWluWCwgcmVjdC5sZWZ0KTtcclxuICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHJlY3QudG9wKTtcclxuICAgICAgbWF4WCA9IE1hdGgubWF4KG1heFgsIHJlY3QubGVmdCArIHJlY3Qud2lkdGgpO1xyXG4gICAgICBtYXhZID0gTWF0aC5tYXgobWF4WSwgcmVjdC50b3AgKyByZWN0LmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbGVmdDogbWluWCxcclxuICAgICAgdG9wOiBtaW5ZLFxyXG4gICAgICB3aWR0aDogbWF4WCAtIG1pblgsXHJcbiAgICAgIGhlaWdodDogbWF4WSAtIG1pblksXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaXRDYW52YXNUb0xheW91dEFuaW1hdGVkKGR1cmF0aW9uID0gNDAwKSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcbiAgICBpZiAoIWJvdW5kcy53aWR0aCB8fCAhYm91bmRzLmhlaWdodCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGNhbnZhc1cgPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpO1xyXG4gICAgY29uc3QgY2FudmFzSCA9IHRoaXMuY2FudmFzLmdldEhlaWdodCgpO1xyXG5cclxuICAgIC8vIEZpbmFsIHpvb20gdG8gZml0ICh3aXRoIHBhZGRpbmcpXHJcbiAgICBjb25zdCBzY2FsZVggPSBjYW52YXNXIC8gYm91bmRzLndpZHRoO1xyXG4gICAgY29uc3Qgc2NhbGVZID0gY2FudmFzSCAvIGJvdW5kcy5oZWlnaHQ7XHJcbiAgICBjb25zdCB0YXJnZXRab29tID0gTWF0aC5taW4oc2NhbGVYLCBzY2FsZVkpICogMC45OyAvLyBwYWRkaW5nIDEwJVxyXG5cclxuICAgIC8vIERlc2lyZWQgdmlld3BvcnQgb2Zmc2V0IHRvIGNlbnRlciBsYXlvdXRcclxuICAgIGNvbnN0IHRhcmdldFZwdCA9IFtcclxuICAgICAgLi4uKHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtIHx8IFsxLCAwLCAwLCAxLCAwLCAwXSksXHJcbiAgICBdIGFzIGZhYnJpYy5UTWF0MkQ7XHJcblxyXG4gICAgdGFyZ2V0VnB0WzBdID0gdGFyZ2V0Wm9vbTsgLy8gc2NhbGVYXHJcbiAgICB0YXJnZXRWcHRbM10gPSB0YXJnZXRab29tOyAvLyBzY2FsZVlcclxuXHJcbiAgICB0YXJnZXRWcHRbNF0gPSBjYW52YXNXIC8gMiAtIChib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAvIDIpICogdGFyZ2V0Wm9vbTsgLy8gY2VudGVyIFhcclxuICAgIHRhcmdldFZwdFs1XSA9IGNhbnZhc0ggLyAyIC0gKGJvdW5kcy50b3AgKyBib3VuZHMuaGVpZ2h0IC8gMikgKiB0YXJnZXRab29tOyAvLyBjZW50ZXIgWVxyXG5cclxuICAgIC8vIEN1cnJlbnQgdmlld3BvcnQgKHN0YXJ0aW5nIHBvaW50IG9mIGFuaW1hdGlvbilcclxuICAgIGNvbnN0IHN0YXJ0VnB0ID0gWy4uLnRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtIV0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICBmYWJyaWMudXRpbC5hbmltYXRlKHtcclxuICAgICAgc3RhcnRWYWx1ZTogMCxcclxuICAgICAgZW5kVmFsdWU6IDEsXHJcbiAgICAgIGR1cmF0aW9uLFxyXG4gICAgICBlYXNpbmc6IGZhYnJpYy51dGlsLmVhc2UuZWFzZU91dEN1YmljLFxyXG4gICAgICBvbkNoYW5nZTogKHZhbHVlOiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCB2cHQgPSB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSE7XHJcblxyXG4gICAgICAgIC8vIEludGVycG9sYXRlIG1hdHJpeCB2YWx1ZXNcclxuICAgICAgICB2cHRbMF0gPSBzdGFydFZwdFswXSArICh0YXJnZXRWcHRbMF0gLSBzdGFydFZwdFswXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbM10gPSBzdGFydFZwdFszXSArICh0YXJnZXRWcHRbM10gLSBzdGFydFZwdFszXSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNF0gPSBzdGFydFZwdFs0XSArICh0YXJnZXRWcHRbNF0gLSBzdGFydFZwdFs0XSkgKiB2YWx1ZTtcclxuICAgICAgICB2cHRbNV0gPSBzdGFydFZwdFs1XSArICh0YXJnZXRWcHRbNV0gLSBzdGFydFZwdFs1XSkgKiB2YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3TGF5b3V0RWxlbWVudHMoKSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25baW5kZXhdO1xyXG5cclxuICAgICAgbGV0IHdhbGw7XHJcblxyXG4gICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24gPz89IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIGVsZW1lbnQudW5pdCk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBlbGVtZW50LnVuaXQpO1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy53YWxsVGhpY2tuZXNzO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5kaXN0YW5jZSwgZWxlbWVudC51bml0KTtcclxuICAgICAgICBpZiAod2lkdGggPCBoZWlnaHQpIHdpZHRoID0gdGhpcy53YWxsVGhpY2tuZXNzICsgMTtcclxuICAgICAgICB3YWxsID0gYXdhaXQgdGhpcy5kcmF3V2FsbCh0aGlzLmNhbnZhcywgeCwgeSwgaGVpZ2h0LCB3aWR0aCwgZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgICAgY29uc3QgYXJyb3dXaWR0aCA9IDgwO1xyXG4gICAgICAgIGNvbnN0IGFycm93SGVpZ2h0ID0gNzU7XHJcbiAgICAgICAgY29uc3QgYXJyb3dCYXNlID0gNDA7XHJcbiAgICAgICAgdGhpcy5kcmF3RW50cmFuY2UoXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgIHgsXHJcbiAgICAgICAgICB5LFxyXG4gICAgICAgICAgYXJyb3dXaWR0aCxcclxuICAgICAgICAgIGFycm93SGVpZ2h0LFxyXG4gICAgICAgICAgYXJyb3dCYXNlLFxyXG4gICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9yIGNhZCBsYXlvdXRzIG9ubHkuXHJcbiAgICB0aGlzLmxheW91dEJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG5cclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpbmRleF07XHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlICE9PSBcIndhbGxcIikgY29udGludWU7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlR3JvdXBzOiBmYWJyaWMuR3JvdXBbXSA9IFtdO1xyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5maXh0dXJlcz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gZWxlbWVudC5maXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZUhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVXaWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCB5ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gb3ZlcnJpZGUgdGhlIGZpeHR1cmUgcG9zaXRpb24gZm9yIGluaXRpYWwgY2FkIGxheW91dHMuXHJcbiAgICAgICAgaWYgKHRoaXMuZmxvb3JEYXRhPy5jYWRMYXlvdXQpIHtcclxuICAgICAgICAgIGNvbnN0IGJhc2VYID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBiYXNlWSA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgICAgICAgICBlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBzdGFydEJ1ZmZlciA9IDQwO1xyXG4gICAgICAgICAgY29uc3Qgc3BhY2luZyA9IDEzNjsgLy8gZml4dHVyZSB3aWR0aCArIGdhcCAocHgpXHJcbiAgICAgICAgICBjb25zdCBvZmZzZXQgPSBzdGFydEJ1ZmZlciArIHNwYWNpbmcgKiBqO1xyXG5cclxuICAgICAgICAgIC8vIHdhbGwgYW5nbGUgaW4gcmFkaWFuc1xyXG4gICAgICAgICAgY29uc3QgYW5nbGVSYWQgPSBmYWJyaWMudXRpbC5kZWdyZWVzVG9SYWRpYW5zKGVsZW1lbnQuYW5nbGUpO1xyXG5cclxuICAgICAgICAgIC8vIC0tLS0gZGlyZWN0aW9uIHZlY3RvciAoYWxvbmcgdGhlIHdhbGwpIC0tLS1cclxuICAgICAgICAgIGNvbnN0IGRpclggPSBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcbiAgICAgICAgICBjb25zdCBkaXJZID0gTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICAgIC8vIC0tLS0gbm9ybWFsIHZlY3RvciAocHVzaCBmaXh0dXJlcyBpbnNpZGUgd2FsbCkgLS0tLVxyXG4gICAgICAgICAgY29uc3Qgbm9ybWFsT2Zmc2V0ID0gdGhpcy53YWxsVGhpY2tuZXNzOyAvLyB0d2VhayBpZiBuZWVkZWRcclxuXHJcbiAgICAgICAgICBjb25zdCBub3JtWCA9IE1hdGguY29zKGFuZ2xlUmFkICsgTWF0aC5QSSAvIDIpICogbm9ybWFsT2Zmc2V0O1xyXG4gICAgICAgICAgY29uc3Qgbm9ybVkgPSBNYXRoLnNpbihhbmdsZVJhZCArIE1hdGguUEkgLyAyKSAqIG5vcm1hbE9mZnNldDtcclxuXHJcbiAgICAgICAgICAvLyAtLS0tIGZpbmFsIGZpeHR1cmUgcG9zaXRpb24gLS0tLVxyXG4gICAgICAgICAgeCA9IGJhc2VYICsgZGlyWCAqIG9mZnNldCArIG5vcm1YO1xyXG4gICAgICAgICAgeSA9IGJhc2VZICsgZGlyWSAqIG9mZnNldCArIG5vcm1ZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZU9iaiA9IGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgIHgsXHJcbiAgICAgICAgICB5LFxyXG4gICAgICAgICAgZml4dHVyZUhlaWdodCxcclxuICAgICAgICAgIGZpeHR1cmVXaWR0aCxcclxuICAgICAgICAgIGZpeHR1cmUsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmaXh0dXJlR3JvdXBzLnB1c2goZml4dHVyZU9iaiBhcyBmYWJyaWMuR3JvdXApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY29uc3Qgb3RoZXJFbGVtZW50ID0gZWxlbWVudC5vdGhlckVsZW1lbnRzW2pdO1xyXG4gICAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIFwiZnRcIik7XHJcbiAgICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgXCJmdFwiKTtcclxuICAgICAgICBjb25zdCBhID0gb3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24uYW5nbGU7XHJcbiAgICAgICAgY29uc3QgaCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgeCxcclxuICAgICAgICAgIHksXHJcbiAgICAgICAgICBhLFxyXG4gICAgICAgICAgdyxcclxuICAgICAgICAgIGgsXHJcbiAgICAgICAgICBvdGhlckVsZW1lbnQsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0gUFJFUEFSRSBGTE9PUiBGSVhUVVJFIFBPU0lUSU9OUyAoQ0FEIE9OTFkpIC0tLS1cclxuICAgIGlmICh0aGlzLmZsb29yRGF0YT8uY2FkTGF5b3V0ICYmIHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlPy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgdGVtcE9jY3VwaWVkOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBmaXh0dXJlIG9mIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUpIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlV2lkdGhQeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZml4dHVyZUhlaWdodFB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0LFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNwb3QgPSB0aGlzLmZpbmRFbXB0eUNlbnRlclNwb3QoXHJcbiAgICAgICAgICBmaXh0dXJlV2lkdGhQeCxcclxuICAgICAgICAgIGZpeHR1cmVIZWlnaHRQeCxcclxuICAgICAgICAgIHRlbXBPY2N1cGllZCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoc3BvdCkge1xyXG4gICAgICAgICAgLy8gc3RvcmUgcG9zaXRpb24gYmFjayBpbnRvIGZpeHR1cmUgZGF0YSAoc2FtZSBhcyB1c2VyLWFkZCBmbG93KVxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLmZyb21QaXhlbHMoc3BvdC54LCBcImZ0XCIpO1xyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLmZyb21QaXhlbHMoc3BvdC55LCBcImZ0XCIpO1xyXG5cclxuICAgICAgICAgIC8vIG1hcmsgdGhpcyBhcmVhIGFzIG9jY3VwaWVkIGZvciBuZXh0IGZpeHR1cmVzXHJcbiAgICAgICAgICB0ZW1wT2NjdXBpZWQucHVzaCh7XHJcbiAgICAgICAgICAgIHg6IHNwb3QueCxcclxuICAgICAgICAgICAgeTogc3BvdC55LFxyXG4gICAgICAgICAgICB3aWR0aDogZml4dHVyZVdpZHRoUHgsXHJcbiAgICAgICAgICAgIGhlaWdodDogZml4dHVyZUhlaWdodFB4LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV07XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlV2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShcclxuICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICB4LFxyXG4gICAgICAgIHksXHJcbiAgICAgICAgZml4dHVyZUhlaWdodCxcclxuICAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAgICAgZml4dHVyZSxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzW2pdO1xyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi55LCBcImZ0XCIpO1xyXG4gICAgICBjb25zdCBhID0gb3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24uYW5nbGU7XHJcbiAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbCh0aGlzLmNhbnZhcywgeCwgeSwgYSwgdywgaCwgb3RoZXJFbGVtZW50KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGRyYXdGaXh0dXJlUm93TGFiZWwodGV4dDogc3RyaW5nLCB4OiBudW1iZXIsIHk6IG51bWJlcikge1xyXG4gICAgY29uc3QgbGFiZWwgPSBuZXcgZmFicmljLlRleHQodGV4dCwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGZvbnRTaXplOiAxNCxcclxuICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgb3JpZ2luWDogXCJsZWZ0XCIsXHJcbiAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLmFkZChsYWJlbCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3V2FsbChcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnksXHJcbiAgKSB7XHJcbiAgICBjb25zdCByYWRpdXMgPSA1O1xyXG4gICAgY29uc3QgZmlsbENvbG9yID0gXCIjRjZGQ0ZGXCI7XHJcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IFwiI0QwRDVERFwiO1xyXG4gICAgY29uc3QgbGFiZWxDb2xvciA9IFwiIzAwOUJGM1wiO1xyXG4gICAgbGV0IHRleHQgPSBgJHt0aGlzLnRpdGxlQ2FzZS50cmFuc2Zvcm0oZWxlbWVudERhdGEuZWxlbWVudFR5cGUpfSAke1xyXG4gICAgICBlbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyXHJcbiAgICB9YDtcclxuXHJcbiAgICBjb25zdCB3YWxsID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgdG9wOiAwLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBmaWxsOiBmaWxsQ29sb3IsXHJcbiAgICAgIHN0cm9rZTogc3Ryb2tlQ29sb3IsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgc3Ryb2tlVW5pZm9ybTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCBjZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSBoZWlnaHQgPiB3aWR0aDtcclxuXHJcbiAgICBjb25zdCBsYWJlbCA9IG5ldyBmYWJyaWMuRmFicmljVGV4dCh0ZXh0LCB7XHJcbiAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgZm9udFNpemU6IDEwLFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBpc1ZlcnRpY2FsID8gLTkwIDogMCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSA1O1xyXG4gICAgY29uc3QgZWxlbWVudHM6IGZhYnJpYy5PYmplY3RbXSA9IFt3YWxsLCBsYWJlbF07XHJcblxyXG4gICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgY29uc3QgdGV4dFdpZHRoID0gbGFiZWwud2lkdGggfHwgMDtcclxuICAgICAgY29uc3QgdG9wQXJyb3dZID0gNTtcclxuICAgICAgY29uc3QgdG9wQXJyb3dFbmRZID0gY2VudGVyWSAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKHRvcEFycm93RW5kWSA+IHRvcEFycm93WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2NlbnRlclgsIHRvcEFycm93WSwgY2VudGVyWCwgdG9wQXJyb3dFbmRZXSwge1xyXG4gICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogdG9wQXJyb3dZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dTdGFydFkgPSBjZW50ZXJZICsgdGV4dFdpZHRoIC8gMiArIDU7XHJcbiAgICAgIGNvbnN0IGJvdHRvbUFycm93RW5kWSA9IGhlaWdodCAtIDU7XHJcblxyXG4gICAgICBpZiAoYm90dG9tQXJyb3dFbmRZID4gYm90dG9tQXJyb3dTdGFydFkgKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICBbY2VudGVyWCwgYm90dG9tQXJyb3dTdGFydFksIGNlbnRlclgsIGJvdHRvbUFycm93RW5kWV0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogYm90dG9tQXJyb3dFbmRZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDE4MCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dTdGFydFggPSA1O1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dFbmRYID0gY2VudGVyWCAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKGxlZnRBcnJvd0VuZFggPiBsZWZ0QXJyb3dTdGFydFggKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFtsZWZ0QXJyb3dTdGFydFgsIGNlbnRlclksIGxlZnRBcnJvd0VuZFgsIGNlbnRlclldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogbGVmdEFycm93U3RhcnRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogLTkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHJpZ2h0QXJyb3dTdGFydFggPSBjZW50ZXJYICsgdGV4dFdpZHRoIC8gMiArIDU7XHJcbiAgICAgIGNvbnN0IHJpZ2h0QXJyb3dFbmRYID0gd2lkdGggLSA1O1xyXG5cclxuICAgICAgaWYgKHJpZ2h0QXJyb3dFbmRYID4gcmlnaHRBcnJvd1N0YXJ0WCArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtyaWdodEFycm93U3RhcnRYLCBjZW50ZXJZLCByaWdodEFycm93RW5kWCwgY2VudGVyWV0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IHJpZ2h0QXJyb3dFbmRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogOTAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxvY2tTdmdTdHJpbmcgPSBgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgIDxwYXRoIGQ9XCJNNyAxMVY3QzcgNS42NzM5MiA3LjUyNjc4IDQuNDAyMTUgOC40NjQ0NyAzLjQ2NDQ3QzkuNDAyMTUgMi41MjY3OCAxMC42NzM5IDIgMTIgMkMxMy4zMjYxIDIgMTQuNTk3OSAyLjUyNjc4IDE1LjUzNTUgMy40NjQ0N0MxNi40NzMyIDQuNDAyMTUgMTcgNS42NzM5MiAxNyA3VjExTTUgMTFIMTlDMjAuMTA0NiAxMSAyMSAxMS44OTU0IDIxIDEzVjIwQzIxIDIxLjEwNDYgMjAuMTA0NiAyMiAxOSAyMkg1QzMuODk1NDMgMjIgMyAyMS4xMDQ2IDMgMjBWMTNDMyAxMS44OTU0IDMuODk1NDMgMTEgNSAxMVpcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgPC9zdmc+YDtcclxuXHJcbiAgICBsZXQgbG9hZGVkU1ZHOiBhbnkgPSBhd2FpdCBmYWJyaWMubG9hZFNWR0Zyb21TdHJpbmcobG9ja1N2Z1N0cmluZyk7XHJcblxyXG4gICAgbGV0IGxvY2tTdmcgPSBmYWJyaWMudXRpbC5ncm91cFNWR0VsZW1lbnRzKFxyXG4gICAgICBsb2FkZWRTVkcub2JqZWN0cyxcclxuICAgICAgbG9hZGVkU1ZHLm9wdGlvbnMsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHdhbGxDZW50ZXJYID0gd2lkdGggLyAyO1xyXG4gICAgY29uc3Qgd2FsbENlbnRlclkgPSBoZWlnaHQgLyAyO1xyXG5cclxuICAgIGxvY2tTdmcuc2NhbGVUb1dpZHRoKDIwKTtcclxuICAgIGxvY2tTdmcuc2NhbGVUb0hlaWdodCgyMCk7XHJcblxyXG4gICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgbG9ja1N2Zy5zZXQoe1xyXG4gICAgICAgIGxlZnQ6IHdhbGxDZW50ZXJYLFxyXG4gICAgICAgIHRvcDogd2FsbENlbnRlclksXHJcbiAgICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbG9ja1N2Zy5zZXQoe1xyXG4gICAgICAgIGxlZnQ6IHdhbGxDZW50ZXJYLFxyXG4gICAgICAgIHRvcDogd2FsbENlbnRlclksXHJcbiAgICAgICAgYW5nbGU6IDAsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2NrU3ZnLnNldCh7XHJcbiAgICAgIHZpc2libGU6IGZhbHNlLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgbG9ja1N2Zy5vbihcIm1vdXNlZG93blwiLCAob3B0KSA9PiB7XHJcbiAgICAgIGlmIChvcHQgJiYgb3B0LmUgJiYgb3B0LmUuc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgICAgICAgb3B0LmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgICBlbGVtZW50RGF0YS5pc0xvY2tlZCA9ICFlbGVtZW50RGF0YT8uaXNMb2NrZWQ7XHJcbiAgICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZWxlbWVudHMucHVzaChsb2NrU3ZnKTtcclxuXHJcbiAgICBsZXQgbW9kQ2VudGVyWCA9IHg7XHJcbiAgICBsZXQgbW9kQ2VudGVyWSA9IHk7XHJcbiAgICBsZXQgYW5nbGUgPSBlbGVtZW50RGF0YS5hbmdsZTtcclxuXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGEuY2FkTGF5b3V0KSB7XHJcbiAgICAgIC8vIGlmIChlbGVtZW50RGF0YS5kaXJlY3Rpb24gPT09IFwidXBcIikge1xyXG4gICAgICAvLyAgIG1vZENlbnRlclggPSBtb2RDZW50ZXJYO1xyXG4gICAgICAvLyAgIG1vZENlbnRlclkgPSBtb2RDZW50ZXJZICsgY2VudGVyWDtcclxuICAgICAgLy8gfSBlbHNlIGlmIChlbGVtZW50RGF0YS5kaXJlY3Rpb24gPT09IFwiZG93blwiKSB7XHJcbiAgICAgIC8vICAgbW9kQ2VudGVyWCA9IG1vZENlbnRlclg7XHJcbiAgICAgIC8vICAgbW9kQ2VudGVyWSA9IG1vZENlbnRlclkgLSBjZW50ZXJYO1xyXG4gICAgICAvLyB9IGVsc2UgaWYgKGVsZW1lbnREYXRhLmRpcmVjdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgIC8vICAgbW9kQ2VudGVyWCA9IG1vZENlbnRlclggKyBjZW50ZXJYO1xyXG4gICAgICAvLyAgIG1vZENlbnRlclkgPSBtb2RDZW50ZXJZO1xyXG4gICAgICAvLyB9IGVsc2UgaWYgKGVsZW1lbnREYXRhLmRpcmVjdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgLy8gICBtb2RDZW50ZXJYID0gbW9kQ2VudGVyWCAtIGNlbnRlclg7XHJcbiAgICAgIC8vICAgbW9kQ2VudGVyWSA9IG1vZENlbnRlclk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gYW5nbGUgPVxyXG4gICAgICAvLyAgIGVsZW1lbnREYXRhLmFuZ2xlID4gMTgwXHJcbiAgICAgIC8vICAgICA/IGVsZW1lbnREYXRhLmFuZ2xlIC0gMTgwXHJcbiAgICAgIC8vICAgICA6IGVsZW1lbnREYXRhLmFuZ2xlICsgMTgwO1xyXG4gICAgICAvLyBlbGVtZW50RGF0YS5hbmdsZSA9IGFuZ2xlO1xyXG4gICAgICAvLyBlbGVtZW50RGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSBtb2RDZW50ZXJYO1xyXG4gICAgICAvLyBlbGVtZW50RGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBtb2RDZW50ZXJZO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChlbGVtZW50cywge1xyXG4gICAgICBsZWZ0OiBtb2RDZW50ZXJYLFxyXG4gICAgICB0b3A6IG1vZENlbnRlclksXHJcbiAgICAgIGhhc0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IGlzVmVydGljYWwsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogIWlzVmVydGljYWwsXHJcbiAgICAgIHNlbGVjdGFibGU6IHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBhbmdsZSxcclxuICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAgIC8vIC4uLih0aGlzLmZsb29yRGF0YS5jYWRMYXlvdXRcclxuICAgICAgLy8gICA/IHsgb3JpZ2luWDogXCJjZW50ZXJcIiwgb3JpZ2luWTogXCJjZW50ZXJcIiB9XHJcbiAgICAgIC8vICAgOiB7fSksXHJcbiAgICAgIC8vIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIC8vIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICB9KSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgICAgZGF0YTogYW55O1xyXG4gICAgfTtcclxuXHJcbiAgICBncm91cC5vYmpUeXBlID0gZWxlbWVudERhdGEuZWxlbWVudFR5cGU7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudERhdGE7XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcblxyXG4gICAgLy8gSWYgbmV3bHkgYWRkZWQsIGZvY3VzIGl0IG9uY2VcclxuICAgIGlmICgoZWxlbWVudERhdGEgYXMgYW55KT8ubmV3QWRkZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZ3JvdXApO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSBjYXRjaCB7fVxyXG4gICAgICBkZWxldGUgKGVsZW1lbnREYXRhIGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0ZpeHR1cmUoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBmaXh0dXJlRGF0YTogYW55LFxyXG4gICkge1xyXG4gICAgbGV0IGZpeHR1cmVDb2xvcjogYW55O1xyXG4gICAgaWYgKFtcImZpeHR1cmVcIiwgXCJmaXh0dXJlLXJlZG9cIl0uaW5jbHVkZXModGhpcy5wdWJsaXNoaW5nU3RhdGUpKSB7XHJcbiAgICAgIGZpeHR1cmVDb2xvciA9IHtcclxuICAgICAgICBwcmltYXJ5OlxyXG4gICAgICAgICAgZml4dHVyZURhdGEuc3RhdHVzID09IFwiXCIgJiYgZml4dHVyZURhdGEudGFza1N0YXR1cyA9PSBcInN1Ym1pdFwiXHJcbiAgICAgICAgICAgID8gXCIjYTVhNmE4XCJcclxuICAgICAgICAgICAgOiBmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJhZ3JlZVwiXHJcbiAgICAgICAgICAgICAgPyBcIiM2Q0U5QTZcIlxyXG4gICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgZmlsbDpcclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcIlwiICYmIGZpeHR1cmVEYXRhLnRhc2tTdGF0dXMgPT0gXCJzdWJtaXRcIlxyXG4gICAgICAgICAgICA/IFwiI2YzZjRmOFwiXHJcbiAgICAgICAgICAgIDogZml4dHVyZURhdGEuc3RhdHVzID09IFwiYWdyZWVcIlxyXG4gICAgICAgICAgICAgID8gXCIjNkNFOUE2XCJcclxuICAgICAgICAgICAgICA6IFwiI0VBRjhGRlwiLFxyXG4gICAgICAgIHZtRmlsbDpcclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcIlwiICYmIGZpeHR1cmVEYXRhLnRhc2tTdGF0dXMgPT0gXCJzdWJtaXRcIlxyXG4gICAgICAgICAgICA/IFwiI2E1YTZhOFwiXHJcbiAgICAgICAgICAgIDogXCIjNjkzOEVGXCIsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoZml4dHVyZURhdGEuZml4dHVyZU5hbWUgPT09IFwic3BhY2VcIikgcmV0dXJuO1xyXG4gICAgY29uc3QgcmFkaXVzID0gNTtcclxuICAgIGNvbnN0IG1haW5Db250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRvcFgsXHJcbiAgICAgIHRvcDogdG9wWSxcclxuICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRvcEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBpbm5lckJveEhlaWdodCA9IHRvcEhlaWdodCAvIDI7XHJcbiAgICBjb25zdCBpbm5lclRvcEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZfSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICBRICR7dG9wWH0gJHt0b3BZfSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHRvcEZpZWxkVGV4dCA9XHJcbiAgICAgIChmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCJcclxuICAgICAgICA/IGBXYWxsLSR7Zml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXJ9IC0gYFxyXG4gICAgICAgIDogXCJGbG9vciAtIFwiKSArXHJcbiAgICAgIGBGaXh0dXJlICR7XHJcbiAgICAgICAgZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyXHJcbiAgICAgICAgICA/IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciArXHJcbiAgICAgICAgICAgIChmaXh0dXJlRGF0YT8uZml4dHVyZU51bWJlclxyXG4gICAgICAgICAgICAgID8gXCIgLSBGWC1cIiArIGZpeHR1cmVEYXRhLmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgICAgICA6IFwiXCIpXHJcbiAgICAgICAgICA6IFwibmV3XCJcclxuICAgICAgfWA7XHJcblxyXG4gICAgY29uc3QgdG9wVGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveCh0b3BGaWVsZFRleHQsIHtcclxuICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgdG9wOiB0b3BZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICBmb250U2l6ZTogNSxcclxuICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGlubmVyQm94SGVpZ2h0LFxyXG4gICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzZWNvbmRCb3hZID0gdG9wWSArIGlubmVyQm94SGVpZ2h0O1xyXG5cclxuICAgIGNvbnN0IGlubmVyQm90dG9tQm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke3RvcFh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFl9IFxyXG4gICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7XHJcbiAgICAgIHRvcFggKyB0b3BXaWR0aCAtIHJhZGl1c1xyXG4gICAgfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICBMICR7dG9wWCArIHJhZGl1c30gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgUSAke3RvcFh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke3RvcFh9ICR7XHJcbiAgICAgIHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgfSBcclxuICAgIEwgJHt0b3BYfSAke3NlY29uZEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogXCIjMzQ0MDU0XCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICBsZXQgYm90dG9tVGV4dDtcclxuXHJcbiAgICBjb25zdCB0ZXh0Q29udGVudCA9IGZpeHR1cmVEYXRhLmZpeHR1cmVOYW1lLmluY2x1ZGVzKFwiLWZ0XCIpXHJcbiAgICAgID8gZml4dHVyZURhdGEuZml4dHVyZU5hbWVcclxuICAgICAgOiBgJHtmaXh0dXJlRGF0YS5maXh0dXJlTmFtZX0gLSAke2ZpeHR1cmVEYXRhLmZpeHR1cmVXaWR0aC52YWx1ZX0gJHtmaXh0dXJlRGF0YS5maXh0dXJlV2lkdGgudW5pdH1gO1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZUJvdHRvbVRleHQgPSAoZnM6IGFueSkgPT5cclxuICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIGJvdHRvbVRleHQgPSBjcmVhdGVCb3R0b21UZXh0KGZvbnRTaXplKTtcclxuICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgfSB3aGlsZSAoYm90dG9tVGV4dC5oZWlnaHQgPiBpbm5lckJveEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB0b3BZICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCBtaWRDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICB0b3A6IG1pZFksXHJcbiAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBtaWRIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2hlbGZDb3VudCA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5sZW5ndGg7XHJcbiAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAoc2hlbGZDb3VudCArIDIpO1xyXG4gICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuXHJcbiAgICBjb25zdCBmaXJzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aCAtIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyBtaWRXaWR0aH0gJHtcclxuICAgICAgICAgIGZpcnN0Qm94WSArIHJhZGl1c1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICBRICR7bWlkWH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgIDogXCIjRUFGOEZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uaGVhZGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmhlYWRlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBmaXJzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA3LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVEYXRhLmlzc3VlID8gXCIjZmZmXCIgOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgfSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2hlbHZlcyA9IFtdO1xyXG4gICAgY29uc3Qgc2hlbGZIZWlnaHQgPSBtaWRIZWlnaHQgLSAyICogYm94SGVpZ2h0O1xyXG5cclxuICAgIGlmIChmaXh0dXJlRGF0YS5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwxXCIpIHtcclxuICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodDtcclxuXHJcbiAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBzaGVsZkhlaWdodCxcclxuICAgICAgICAvLyBzdHJva2U6ICcjNTFDMUZGJyxcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0ID0gZml4dHVyZURhdGE/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgIC8vIFdyYXAgdGV4dCB3aXRoaW4gZml4dHVyZSB3aWR0aCBhbmQgc2hyaW5rIHRvIGZpdCB2ZXJ0aWNhbCBzcGFjZVxyXG4gICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IHNoZWxmSGVpZ2h0ICogMC44O1xyXG4gICAgICBsZXQgZm9udFNpemVMMSA9IDY7XHJcblxyXG4gICAgICBjb25zdCBjcmVhdGVXcmFwcGVkVGV4dGJveCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGxldCB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZUwxID4gMikge1xyXG4gICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgaGVpZ2h0OiB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIDIsXHJcbiAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICByeDogMSxcclxuICAgICAgICByeTogMSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzaGVsdmVzLnB1c2goc2hlbGYsIGJhY2tncm91bmQsIHdyYXBwZWRUZXh0KTtcclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hlbGZDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChpICsgMSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0udHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHQgPVxyXG4gICAgICAgICAgZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAgIC8vIEwyOiBTaW5nbGUtbGluZSBlbGxpcHNpcyBhZ2FpbnN0IGZ1bGwgc2hlbGYgd2lkdGhcclxuICAgICAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IDY7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gTWF0aC5tYXgoMCwgbWlkV2lkdGggLSBob3Jpem9udGFsUGFkZGluZyk7XHJcbiAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGJveEhlaWdodCAqIDAuODtcclxuICAgICAgICBjb25zdCBiYXNlRm9udFNpemUgPSA1O1xyXG5cclxuICAgICAgICBjb25zdCBtZWFzdXJlID0gKHQ6IHN0cmluZykgPT5cclxuICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dCh0LCB7XHJcbiAgICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgZGlzcGxheVRleHQgPSB0ZXh0O1xyXG4gICAgICAgIGxldCBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG5cclxuICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICBjb25zdCBlbGxpcHNpcyA9IFwiLi4uXCI7XHJcbiAgICAgICAgICBsZXQgbGVmdElkeCA9IDA7XHJcbiAgICAgICAgICBsZXQgcmlnaHRJZHggPSB0ZXh0Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAobGVmdElkeCA8IHJpZ2h0SWR4KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pZElkeCA9IE1hdGguZmxvb3IoKGxlZnRJZHggKyByaWdodElkeCkgLyAyKTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGV4dC5zbGljZSgwLCBtaWRJZHgpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShjYW5kaWRhdGUpO1xyXG4gICAgICAgICAgICBpZiAoKG1lYXN1cmVkLndpZHRoID8/IDApID4gbWF4VGV4dFdpZHRoKSB7XHJcbiAgICAgICAgICAgICAgcmlnaHRJZHggPSBtaWRJZHg7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbGVmdElkeCA9IG1pZElkeCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGRpc3BsYXlUZXh0ID0gdGV4dC5zbGljZSgwLCBNYXRoLm1heCgwLCBsZWZ0SWR4IC0gMSkpICsgZWxsaXBzaXM7XHJcbiAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoZGlzcGxheVRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBNYXRoLm1pbihtYXhUZXh0SGVpZ2h0LCBtZWFzdXJlZC5oZWlnaHQgPz8gMTApICsgMixcclxuICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICByeTogMSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgZmluYWxUZXh0ID0gbmV3IGZhYnJpYy5UZXh0KGRpc3BsYXlUZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgYm94SGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChiYWNrZ3JvdW5kLCBmaW5hbFRleHQpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDNcIikge1xyXG4gICAgICBjb25zdCBzZXF1ZW50aWFsR3JvdXBzOiB7IHpvbmU6IHN0cmluZzsgc2hlbHZlczogYW55W10gfVtdID0gW107XHJcblxyXG4gICAgICBsZXQgcHJldmlvdXNab25lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAgIGZvciAoY29uc3Qgc2hlbGYgb2YgZml4dHVyZURhdGEuc2hlbGZDb25maWcpIHtcclxuICAgICAgICBjb25zdCB6b25lID0gc2hlbGYuem9uZSB8fCBcIlVua25vd25cIjtcclxuICAgICAgICBpZiAoem9uZSAhPT0gcHJldmlvdXNab25lKSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzLnB1c2goeyB6b25lLCBzaGVsdmVzOiBbc2hlbGZdIH0pO1xyXG4gICAgICAgICAgcHJldmlvdXNab25lID0gem9uZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VxdWVudGlhbEdyb3Vwc1tzZXF1ZW50aWFsR3JvdXBzLmxlbmd0aCAtIDFdLnNoZWx2ZXMucHVzaChzaGVsZik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY3VycmVudFNoZWxmSW5kZXggPSAwO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBncm91cCBvZiBzZXF1ZW50aWFsR3JvdXBzKSB7XHJcbiAgICAgICAgY29uc3QgeyB6b25lLCBzaGVsdmVzOiBzaGVsdmVzSW5Hcm91cCB9ID0gZ3JvdXA7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwU3RhcnRJbmRleCA9IGN1cnJlbnRTaGVsZkluZGV4O1xyXG4gICAgICAgIGNvbnN0IGdyb3VwTGVuZ3RoID0gc2hlbHZlc0luR3JvdXAubGVuZ3RoO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFRvcFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoZ3JvdXBTdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21ZID0gZ3JvdXBUb3BZICsgYm94SGVpZ2h0ICogZ3JvdXBMZW5ndGg7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2hlbHZlc0luR3JvdXAubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGNvbnN0IHNoZWxmRGF0YSA9IHNoZWx2ZXNJbkdyb3VwW2pdO1xyXG4gICAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChjdXJyZW50U2hlbGZJbmRleCArIDEpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHNoZWxmUmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICAgIHRvcDogYm94WSxcclxuICAgICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGZSZWN0KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2hlbGZEYXRhLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmID0gc2hlbGZEYXRhLnByb2R1Y3RQZXJTaGVsZiB8fCAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAxOyBjIDwgcHJvZHVjdFBlclNoZWxmOyBjKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWCA9IG1pZFggKyBjICogY29sdW1uU3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW2xpbmVYLCBib3hZLCBsaW5lWCwgYm94WSArIGJveEhlaWdodF0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZlcnRpY2FsTGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjdXJyZW50U2hlbGZJbmRleCsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBCb3R0b21MaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgW21pZFgsIGdyb3VwQm90dG9tWSwgbWlkWCArIG1pZFdpZHRoLCBncm91cEJvdHRvbVldLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQm90dG9tTGluZSk7XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsUGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBuZXcgZmFicmljLlRleHRib3goem9uZSwge1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgIHRvcDogZ3JvdXBCb3R0b21ZLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiM3MDcwNzBcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChsYWJlbFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJYID0gbWlkWCArIG1pZFdpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBncm91cENlbnRlclkgPSBncm91cFRvcFkgKyAoZ3JvdXBCb3R0b21ZIC0gZ3JvdXBUb3BZKSAvIDI7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25CcmFuZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXNJbkdyb3VwPy5mb3JFYWNoKChzaGVsZikgPT4ge1xyXG4gICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoYnJhbmQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uQnJhbmRzLmFkZChicmFuZCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKFsuLi5zZWN0aW9uQnJhbmRzXS5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBbLi4uc2VjdGlvbkJyYW5kc10uam9pbihcIiArIFwiKTtcclxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICBjb25zdCByZWN0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSAyMDtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA2O1xyXG4gICAgICAgICAgbGV0IHdyYXBwZWRUZXh0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVRleHRib3ggPSAoZnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVUZXh0Ym94KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgfSB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIHBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJUZXh0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGE/LnZtQ29uZmlnPy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRGF0YS52bUNvbmZpZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHZtID0gZml4dHVyZURhdGEudm1Db25maWdbaV07XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB2bS5zdGFydFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB2bS5lbmRZUG9zaXRpb24gLSAxO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBzdGFydEluZGV4ID4gZml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmxlbmd0aCB8fFxyXG4gICAgICAgICAgZW5kSW5kZXggPiBmaXh0dXJlRGF0YT8uc2hlbGZDb25maWcubGVuZ3RoXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZIZWlnaHRTcGFuID0gYm94SGVpZ2h0ICogKGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDEpO1xyXG5cclxuICAgICAgICBsZXQgdm1IZWlnaHRQeDogbnVtYmVyID0gc2hlbGZIZWlnaHRTcGFuO1xyXG4gICAgICAgIGxldCB5OiBudW1iZXIgPSBzaGVsZlRvcFk7XHJcblxyXG4gICAgICAgIGlmICh2bS55Wm9uZSAmJiB2bS55Wm9uZSAhPT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgIHZtSGVpZ2h0UHggPSBzaGVsZkhlaWdodFNwYW4gLyAzO1xyXG5cclxuICAgICAgICAgIHN3aXRjaCAodm0ueVpvbmUpIHtcclxuICAgICAgICAgICAgY2FzZSBcInRvcFwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyAyICogdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHggPSBtaWRYO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IG1pZFdpZHRoO1xyXG5cclxuICAgICAgICBpZiAoIXZtLnhab25lIHx8IHZtLnhab25lID09PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzZWN0aW9uV2lkdGggPSBtaWRXaWR0aCAvIDM7XHJcbiAgICAgICAgICBzd2l0Y2ggKHZtLnhab25lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWCArIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFggKyAyICogc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodm0udm1JbWFnZVVybCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgdm1JbWFnZTogYW55ID0gYXdhaXQgZmFicmljLkZhYnJpY0ltYWdlLmZyb21VUkwoXHJcbiAgICAgICAgICAgICAgYCR7dGhpcy5jZG5Vcmx9JHt2bS52bUltYWdlVXJsfT92PSR7RGF0ZS5ub3coKX1gLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB2bUltYWdlLnNldCh7XHJcbiAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgc2NhbGVYOiB3aWR0aCAvIHZtSW1hZ2Uud2lkdGghLFxyXG4gICAgICAgICAgICAgIHNjYWxlWTogdm1IZWlnaHRQeCAvIHZtSW1hZ2UuaGVpZ2h0ISxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godm1JbWFnZSk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgbG9hZGluZyBpbWFnZSBmb3IgVk06ICR7dm0udm1JbWFnZVVybH1gLCBlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB2bUJveCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgICAgd2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogdm1IZWlnaHRQeCxcclxuICAgICAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy52bUZpbGwgPz8gXCIjNjkzOEVGXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGxldCBmb250U2l6ZSA9IDU7XHJcbiAgICAgICAgICBsZXQgdm1UZXh0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVZtVGV4dCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgICAgICBuZXcgZmFicmljLlRleHRib3godm0udm1OYW1lIHx8IFwiXCIsIHtcclxuICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgdm1UZXh0ID0gY3JlYXRlVm1UZXh0KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgfSB3aGlsZSAodm1UZXh0LmhlaWdodCA+IHZtSGVpZ2h0UHggJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2godm1Cb3gsIHZtVGV4dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGFzdEJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoc2hlbGZDb3VudCArIDEpO1xyXG4gICAgY29uc3QgbGFzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYfSAke2xhc3RCb3hZfSBcclxuICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZfSBcclxuICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke1xyXG4gICAgICAgICAgbWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgICAgfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICBMICR7bWlkWCArIHJhZGl1c30gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgUSAke21pZFh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7bWlkWH0gJHtcclxuICAgICAgICAgIGxhc3RCb3hZICsgYm94SGVpZ2h0IC0gcmFkaXVzXHJcbiAgICAgICAgfSBcclxuICAgICAgICBMICR7bWlkWH0gJHtsYXN0Qm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgID8gXCIjRkVFNEUyXCJcclxuICAgICAgICAgICAgOiBcIiNFQUY4RkZcIixcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBsYXN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmZvb3Rlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWd0aDogYm94SGVpZ2h0LFxyXG4gICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBib3R0b21XaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IGJvdHRvbUhlaWdodCA9ICgzIC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IGJvdHRvbVggPSB4ICsgKHdpZHRoIC0gYm90dG9tV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IGJvdHRvbVkgPSBtaWRZICsgbWlkSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCBib3R0b21Db250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBib3R0b21YLFxyXG4gICAgICB0b3A6IGJvdHRvbVksXHJcbiAgICAgIHdpZHRoOiBib3R0b21XaWR0aCxcclxuICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBib3R0b21UZXh0Q29udGVudCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYFNoZWx2ZXMgLSAke2ZpeHR1cmVEYXRhPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDB9IC4gUHJvZHVjdHMgLSAgJHtcclxuICAgICAgICBmaXh0dXJlRGF0YT8uZml4dHVyZUNhcGFjaXR5ID8/IDBcclxuICAgICAgfSAuIFZNIC0gJHtmaXh0dXJlRGF0YT8udm1Db25maWc/Lmxlbmd0aCA/PyAwfWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBib3R0b21YICsgYm90dG9tV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm90dG9tWSArIGJvdHRvbUhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgIH0sXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHN2Z1N0cmluZyA9IGBcclxuICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiMTJcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgIDxwYXRoIGQ9XCJNMTQuOTk5OCA2LjYwMDAxQzE1LjE1NzQgNi40NDI0MyAxNS4zNDQ1IDYuMzE3NDIgMTUuNTUwNCA2LjIzMjE0QzE1Ljc1NjMgNi4xNDY4NSAxNS45NzcgNi4xMDI5NiAxNi4xOTk4IDYuMTAyOTZDMTYuNDIyNyA2LjEwMjk2IDE2LjY0MzQgNi4xNDY4NSAxNi44NDkyIDYuMjMyMTRDMTcuMDU1MSA2LjMxNzQyIDE3LjI0MjIgNi40NDI0MyAxNy4zOTk4IDYuNjAwMDFDMTcuNTU3NCA2Ljc1NzYgMTcuNjgyNCA2Ljk0NDY4IDE3Ljc2NzcgNy4xNTA1OEMxNy44NTMgNy4zNTY0OCAxNy44OTY5IDcuNTc3MTUgMTcuODk2OSA3LjgwMDAxQzE3Ljg5NjkgOC4wMjI4OCAxNy44NTMgOC4yNDM1NSAxNy43Njc3IDguNDQ5NDVDMTcuNjgyNCA4LjY1NTM1IDE3LjU1NzQgOC44NDI0MyAxNy4zOTk4IDkuMDAwMDFMOS4yOTk4MiAxNy4xTDUuOTk5ODIgMThMNi44OTk4MiAxNC43TDE0Ljk5OTggNi42MDAwMVpcIiBzdHJva2U9XCIjMUQyOTM5XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICA8L3N2Zz5gO1xyXG5cclxuICAgIGxldCBsb2FkZWRTVkc6IGFueSA9IGF3YWl0IGZhYnJpYy5sb2FkU1ZHRnJvbVN0cmluZyhzdmdTdHJpbmcpO1xyXG5cclxuICAgIGxldCBlZGl0U3ZnID0gZmFicmljLnV0aWwuZ3JvdXBTVkdFbGVtZW50cyhcclxuICAgICAgbG9hZGVkU1ZHLm9iamVjdHMsXHJcbiAgICAgIGxvYWRlZFNWRy5vcHRpb25zLFxyXG4gICAgKTtcclxuXHJcbiAgICBlZGl0U3ZnLnNldCh7XHJcbiAgICAgIHNjYWxlWDogMSxcclxuICAgICAgc2NhbGVZOiAxLFxyXG4gICAgICBsZWZ0OiB4ICsgd2lkdGggLSAzMCxcclxuICAgICAgdG9wOiB5ICsgMTQsXHJcbiAgICAgIHZpc2libGU6IGZhbHNlLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogdHJ1ZSwgLy8gYWxsb3cgZXZlbnRzXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGVkaXRTdmcub24oXCJtb3VzZWRvd25cIiwgKG9wdCkgPT4ge1xyXG4gICAgICBpZiAob3B0ICYmIG9wdC5lICYmIG9wdC5lLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgIG9wdC5lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgIGZpeHR1cmVUeXBlOiBmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSxcclxuICAgICAgICB3YWxsSW5kZXg6IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyLFxyXG4gICAgICAgIGZpeHR1cmVJbmRleDogZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyLFxyXG4gICAgICAgIGZpeHR1cmVJZDogZml4dHVyZURhdGEuX2lkLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLndhbGxJbmRleCxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gd2FsbC5maXh0dXJlcy5maW5kKFxyXG4gICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IGZpeHR1cmU7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmZpbmQoXHJcbiAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gZml4dHVyZTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGhpcz8uc2VsZWN0ZWRGaXh0dXJlRGF0YT8udGFza1R5cGU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVEYXRhID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhO1xyXG4gICAgICB0aGlzLmVkaXRGaXh0dXJlID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBhbmdsZSA9IGZpeHR1cmVEYXRhPy5yZWxhdGl2ZVBvc2l0aW9uPy5hbmdsZTtcclxuXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGEuY2FkTGF5b3V0ICYmIGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICBjb25zdCB3YWxsRGF0YSA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBhbmdsZURlZyA9IHdhbGxEYXRhPy5hbmdsZSB8fCAwO1xyXG4gICAgICBhbmdsZSA9IGFuZ2xlRGVnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoXHJcbiAgICAgIFtcclxuICAgICAgICBtYWluQ29udGFpbmVyLFxyXG4gICAgICAgIHRvcENvbnRhaW5lcixcclxuICAgICAgICBpbm5lclRvcEJveCxcclxuICAgICAgICB0b3BUZXh0LFxyXG4gICAgICAgIGlubmVyQm90dG9tQm94LFxyXG4gICAgICAgIGJvdHRvbVRleHQsXHJcbiAgICAgICAgbWlkQ29udGFpbmVyLFxyXG4gICAgICAgIGZpcnN0Qm94LFxyXG4gICAgICAgIGZpcnN0Qm94VGV4dCxcclxuICAgICAgICAuLi5zaGVsdmVzLFxyXG4gICAgICAgIGxhc3RCb3gsXHJcbiAgICAgICAgbGFzdEJveFRleHQsXHJcbiAgICAgICAgYm90dG9tQ29udGFpbmVyLFxyXG4gICAgICAgIGJvdHRvbVRleHRDb250ZW50LFxyXG4gICAgICAgIGVkaXRTdmcsXHJcbiAgICAgIF0sXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgIHRvcDogeSxcclxuICAgICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgIGFuZ2xlOiBhbmdsZSxcclxuICAgICAgfSxcclxuICAgICkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICB3YWxsSW5kZXg6IG51bWJlcjtcclxuICAgICAgZml4dHVyZUluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJZDogc3RyaW5nO1xyXG4gICAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCI7XHJcbiAgICAgIGlzc3VlOiBib29sZWFuO1xyXG4gICAgICBpc3N1ZURhdGE6IGFueTtcclxuICAgICAgdGFza1R5cGU6IHN0cmluZztcclxuICAgICAgdm1Db25maWc6IFtdO1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIWZpeHR1cmVEYXRhPy5pc3N1ZSAmJlxyXG4gICAgICAhZml4dHVyZURhdGE/LnVuc2F2ZWRDaGFuZ2VzICYmXHJcbiAgICAgIHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkXHJcbiAgICApIHtcclxuICAgICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2VvdmVyXCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBlZGl0U3ZnLnNldChcInZpc2libGVcIiwgdHJ1ZSk7XHJcbiAgICAgICAgY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gICAgICB9KTtcclxuICAgICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2VvdXRcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGVkaXRTdmcuc2V0KFwidmlzaWJsZVwiLCBmYWxzZSk7XHJcbiAgICAgICAgY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZWRvd25cIiwgKGV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy50b2dnbGVQYW5lbChcInJpZ2h0XCIsIGZhbHNlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKHRhcmdldCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0Rml4dHVyZU9uQ2FudmFzQ2xpY2sodGFyZ2V0LCB0cnVlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlVHlwZSA9IGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLndhbGxJbmRleCA9IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJbmRleCA9IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSWQgPSBmaXh0dXJlRGF0YS5faWQ7XHJcbiAgICBmaXh0dXJlR3JvdXAuaXNzdWUgPSBmaXh0dXJlRGF0YS5pc3N1ZTtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZURhdGEgPSBmaXh0dXJlRGF0YS5pc3N1ZURhdGE7XHJcbiAgICBmaXh0dXJlR3JvdXAudGFza1R5cGUgPSBmaXh0dXJlRGF0YS50YXNrVHlwZTtcclxuICAgIGZpeHR1cmVHcm91cC52bUNvbmZpZyA9IGZpeHR1cmVEYXRhLnZtQ29uZmlnO1xyXG4gICAgZml4dHVyZUdyb3VwLm9ialR5cGUgPSBcImZpeHR1cmVcIjtcclxuXHJcbiAgICAvLyB0aGlzLmNhbnZhcy5vbihcIm9iamVjdDptb3ZpbmdcIiwgKGUpID0+IHtcclxuICAgIC8vICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgYW55O1xyXG4gICAgLy8gICBpZiAoIXRhcmdldCB8fCB0YXJnZXQub2JqVHlwZSAhPT0gXCJmaXh0dXJlXCIpIHJldHVybjtcclxuXHJcbiAgICAvLyAgIGNvbnN0IGFuZ2xlRGVnID0gdGFyZ2V0LmFuZ2xlIHx8IDA7XHJcbiAgICAvLyAgIGNvbnN0IGFuZ2xlID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcbiAgICAvLyAgIGlmICghdGFyZ2V0Ll9sYXN0TGVmdCkge1xyXG4gICAgLy8gICAgIHRhcmdldC5fbGFzdExlZnQgPSB0YXJnZXQubGVmdDtcclxuICAgIC8vICAgICB0YXJnZXQuX2xhc3RUb3AgPSB0YXJnZXQudG9wO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIGNvbnN0IGR4ID0gdGFyZ2V0LmxlZnQgLSB0YXJnZXQuX2xhc3RMZWZ0O1xyXG4gICAgLy8gICBjb25zdCBkeSA9IHRhcmdldC50b3AgLSB0YXJnZXQuX2xhc3RUb3A7XHJcbiAgICAvLyAgIGNvbnN0IHByb2plY3RlZCA9IGR4ICogTWF0aC5jb3MoYW5nbGUpICsgZHkgKiBNYXRoLnNpbihhbmdsZSk7XHJcbiAgICAvLyAgIHRhcmdldC5sZWZ0ID0gdGFyZ2V0Ll9sYXN0TGVmdCArIHByb2plY3RlZCAqIE1hdGguY29zKGFuZ2xlKTtcclxuICAgIC8vICAgdGFyZ2V0LnRvcCA9IHRhcmdldC5fbGFzdFRvcCArIHByb2plY3RlZCAqIE1hdGguc2luKGFuZ2xlKTtcclxuICAgIC8vICAgdGFyZ2V0Ll9sYXN0TGVmdCA9IHRhcmdldC5sZWZ0O1xyXG4gICAgLy8gICB0YXJnZXQuX2xhc3RUb3AgPSB0YXJnZXQudG9wO1xyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgY2FudmFzLmFkZChmaXh0dXJlR3JvdXApO1xyXG5cclxuICAgIC8vIElmIG5ld2x5IGFkZGVkLCBmb2N1cyBpdCBvbmNlXHJcbiAgICBpZiAoKGZpeHR1cmVEYXRhIGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZml4dHVyZURhdGEgYXMgYW55KS5uZXdBZGRlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZml4dHVyZUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0VudHJhbmNlKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgYXJyb3dXaWR0aDogbnVtYmVyLFxyXG4gICAgZWxlbWVudERhdGE6IGFueSxcclxuICApIHtcclxuICAgIGNvbnN0IGJvZHlXaWR0aCA9IHdpZHRoIC0gYXJyb3dXaWR0aDtcclxuICAgIGNvbnN0IGFuZ2xlID0gdGhpcy5mbG9vckRhdGE/LmNhZExheW91dCA/IDAgOiBlbGVtZW50RGF0YS5hbmdsZTtcclxuXHJcbiAgICBjb25zdCBwYXRoRGF0YSA9IFtcclxuICAgICAgYE0gMCAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9IDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHstaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke3dpZHRofSAke2hlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0ICsgaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHR9YCxcclxuICAgICAgYEwgMCAke2hlaWdodH1gLFxyXG4gICAgICBgWmAsXHJcbiAgICBdLmpvaW4oXCIgXCIpO1xyXG5cclxuICAgIGNvbnN0IGFycm93ID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIGZpbGw6IFwiIzAzQTlGNFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gaGVpZ2h0IC0gNjtcclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHQoXCJFbnRyYW5jZVwiLCB7XHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiQXJpYWxcIixcclxuICAgICAgZm9udFdlaWdodDogXCJib2xkXCIsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgbGVmdDogMTUsXHJcbiAgICAgIHRvcDogaGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDIwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGlmICh0ZXh0Qm91bmRzLmhlaWdodCA+IG1heFRleHRIZWlnaHQpIHtcclxuICAgICAgY29uc3Qgc2NhbGUgPSBtYXhUZXh0SGVpZ2h0IC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvdywgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nRmxpcDogdHJ1ZSxcclxuICAgICAgYW5nbGU6IGFuZ2xlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnREYXRhO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBhOiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBlbGVtZW50OiBhbnksXHJcbiAgKTogZmFicmljLkdyb3VwIHtcclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogMixcclxuICAgICAgcnk6IDIsXHJcbiAgICAgIGZpbGw6IFwiI0RBRjFGRlwiLFxyXG4gICAgICBzdHJva2U6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHRib3goZWxlbWVudC5maXh0dXJlTmFtZSwge1xyXG4gICAgICB3aWR0aDogd2lkdGggLSA4LFxyXG4gICAgICBmb250U2l6ZTogMTQsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICBzcGxpdEJ5R3JhcGhlbWU6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBoZWlnaHQgLSA4KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gKGhlaWdodCAtIDgpIC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFtyZWN0LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGFuZ2xlOiBhLFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBcIm90aGVyc1wiO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnQ7XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcblxyXG4gICAgaWYgKChlbGVtZW50IGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGdyb3VwKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuICAgICAgZGVsZXRlIChlbGVtZW50IGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0JnKCkge1xyXG4gICAgY29uc3Qgd2FsbDEgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlOiBhbnkpID0+IGUuZWxlbWVudE51bWJlciA9PT0gMSAmJiBlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIixcclxuICAgICk7XHJcbiAgICBjb25zdCB3YWxsMiA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGU6IGFueSkgPT4gZS5lbGVtZW50TnVtYmVyID09PSAyICYmIGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyh3YWxsMS5kaXN0YW5jZSwgd2FsbDEudW5pdCk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKHdhbGwyLmRpc3RhbmNlLCB3YWxsMi51bml0KTtcclxuXHJcbiAgICBjb25zdCBiZyA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgdG9wOiB0aGlzLndhbGxUaGlja25lc3MsXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIGZpbGw6IFwiI2VhZWNmMFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYmcpO1xyXG4gICAgdGhpcy5jYW52YXMucmVtb3ZlKGJnKTtcclxuICAgIHRoaXMuY2FudmFzLmluc2VydEF0KDAsIGJnKTtcclxuICAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gZ2V0Rml4dHVyZU1ldGFUb1JlbmRlcihmaXh0dXJlOiBhbnksIHdhbGxEYXRhOiBhbnkpIHtcclxuXHJcbiAgLy8gICByZXR1cm4ge1xyXG4gIC8vICAgICB4LFxyXG4gIC8vICAgICB5LFxyXG4gIC8vICAgICBmaXh0dXJlSGVpZ2h0LFxyXG4gIC8vICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgLy8gICB9O1xyXG4gIC8vIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9GaXh0dXJlQ29uZmlnSWRDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnMgPSBbXTtcclxuXHJcbiAgICB0aGlzLmdldEZvcm1XYWxscy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdhbGxHcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBmaXh0dXJlc0FycmF5ID0gd2FsbEdyb3VwLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheTtcclxuXHJcbiAgICAgIGZpeHR1cmVzQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoZml4dHVyZUNvbnRyb2wsIGopID0+IHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBmaXh0dXJlQ29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3Qgc3ViID0gZml4dHVyZUdyb3VwXHJcbiAgICAgICAgICAuZ2V0KFwiZml4dHVyZUNvbmZpZ0lkXCIpXHJcbiAgICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRml4dHVyZVRlbXBsYXRlKG5ld1ZhbHVlLCBcIndhbGxcIiwgaiwgaSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHN1YikgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucy5wdXNoKHN1Yik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5jb250cm9scy5mb3JFYWNoKChmaXh0dXJlQ29udHJvbCwgaykgPT4ge1xyXG4gICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBmaXh0dXJlQ29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IHN1YiA9IGZpeHR1cmVHcm91cFxyXG4gICAgICAgIC5nZXQoXCJmaXh0dXJlQ29uZmlnSWRcIilcclxuICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VGaXh0dXJlVGVtcGxhdGUobmV3VmFsdWUsIFwiZmxvb3JcIiwgayk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoc3ViKSB0aGlzLmZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zLnB1c2goc3ViKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9PdGhlckVsZW1lbnRzQ2hhbmdlcygpIHtcclxuICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWI/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5vdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9ucyA9IFtdO1xyXG5cclxuICAgIC8vIFdhbGwtbGV2ZWwgb3RoZXJFbGVtZW50cyBsYWJlbCBzdWJzY3JpcHRpb25zXHJcbiAgICB0aGlzLmdldEZvcm1XYWxscy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdhbGxHcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBvdGhlckFycmF5ID0gd2FsbEdyb3VwLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5O1xyXG5cclxuICAgICAgb3RoZXJBcnJheS5jb250cm9scy5mb3JFYWNoKChjdHJsLCBvdGhlcklkeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRHcm91cCA9IGN0cmwgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgIGNvbnN0IHR5cGVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcInR5cGVcIikgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tTmFtZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwiY3VzdG9tTmFtZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuXHJcbiAgICAgICAgY29uc3Qgd2FsbE1ldGEgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAoZWw6IGFueSkgPT5cclxuICAgICAgICAgICAgZWwuZWxlbWVudFR5cGUgPT09IHdhbGxHcm91cC5nZXQoXCJlbGVtZW50VHlwZVwiKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgZWwuZWxlbWVudE51bWJlciA9PT0gd2FsbEdyb3VwLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudFJlZiA9IHdhbGxNZXRhPy5vdGhlckVsZW1lbnRzPy5bb3RoZXJJZHhdO1xyXG4gICAgICAgIGlmICghZWxlbWVudFJlZikgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyB3aGVuIHR5cGUgY2hhbmdlcyAoZHJvcGRvd24pXHJcbiAgICAgICAgY29uc3Qgc3ViVHlwZSA9IHR5cGVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAvLyBpZiB1c2VyIHBpY2tzIFwiT3RoZXJzXCIsIHByZWZlciBjdXN0b21OYW1lIGlmIHByZXNlbnQsIG90aGVyd2lzZSBzZXQgZml4dHVyZU5hbWUgdG8gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID1cclxuICAgICAgICAgICAgICBzZWxlY3RlZCA9PT0gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgICAgPyBjdXN0b21OYW1lQ29udHJvbD8udmFsdWUgfHwgXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgICAgOiBzZWxlY3RlZDtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB3aGVuIGN1c3RvbU5hbWUgY2hhbmdlcyAodGV4dCBpbnB1dCB2aXNpYmxlIG9ubHkgd2hlbiB0eXBlID09PSAnT3RoZXJzJylcclxuICAgICAgICBjb25zdCBzdWJDdXN0b20gPSBjdXN0b21OYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGN1c3RvbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlQ29udHJvbC52YWx1ZSA9PT0gXCJPdGhlcnNcIikge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPSBjdXN0b207XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMucHVzaChzdWJUeXBlLCBzdWJDdXN0b20pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEZsb29yLWxldmVsIG90aGVyRWxlbWVudHMgbGFiZWwgc3Vic2NyaXB0aW9uc1xyXG4gICAgdGhpcy5nZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLmNvbnRyb2xzLmZvckVhY2goKGN0cmwsIGlkeCkgPT4ge1xyXG4gICAgICBjb25zdCBlbGVtZW50R3JvdXAgPSBjdHJsIGFzIEZvcm1Hcm91cDtcclxuICAgICAgY29uc3QgdHlwZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwidHlwZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgY29uc3QgY3VzdG9tTmFtZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwiY3VzdG9tTmFtZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgY29uc3QgZWxlbWVudFJlZiA9IHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5baWR4XTtcclxuICAgICAgaWYgKCFlbGVtZW50UmVmKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBzdWJUeXBlID0gdHlwZUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPVxyXG4gICAgICAgICAgICBzZWxlY3RlZCA9PT0gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgID8gY3VzdG9tTmFtZUNvbnRyb2w/LnZhbHVlIHx8IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICA6IHNlbGVjdGVkO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHN1YkN1c3RvbSA9IGN1c3RvbU5hbWVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChjdXN0b206IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVDb250cm9sLnZhbHVlID09PSBcIk90aGVyc1wiKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPSBjdXN0b207XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zLnB1c2goc3ViVHlwZSwgc3ViQ3VzdG9tKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZjogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbmQoXHJcbiAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgb2JqPy5vYmpUeXBlID09PSBcIm90aGVyc1wiICYmIG9iaj8uZGF0YS5faWQgPT09IGVsZW1lbnRSZWYuX2lkLFxyXG4gICAgICApIGFzIGFueTtcclxuXHJcbiAgICBpZiAoIWdyb3VwKSByZXR1cm47XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudFJlZjtcclxuXHJcbiAgICBjb25zdCB0ZXh0T2JqID0gKGdyb3VwLmdldE9iamVjdHMoKSB8fCBbXSkuZmluZChcclxuICAgICAgKG86IGFueSkgPT4gbz8udHlwZSA9PT0gXCJ0ZXh0XCIgfHwgbz8udHlwZSA9PT0gXCJ0ZXh0Ym94XCIsXHJcbiAgICApIGFzIGZhYnJpYy5UZXh0IHwgZmFicmljLlRleHRib3ggfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRleHRPYmopIHtcclxuICAgICAgKHRleHRPYmogYXMgYW55KS5zZXQoeyB0ZXh0OiBlbGVtZW50UmVmLmZpeHR1cmVOYW1lIH0pO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByb3RhdGVDYW52YXMoY2FudmFzOiBmYWJyaWMuQ2FudmFzLCBhbmdsZURlZzogbnVtYmVyKSB7XHJcbiAgICBpZiAoIWNhbnZhcykgcmV0dXJuO1xyXG4gICAgY29uc3QgYWxsT2JqZWN0cyA9IGNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBpZiAoIWFsbE9iamVjdHMgfHwgYWxsT2JqZWN0cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAvLyBDcmVhdGUgYW4gQWN0aXZlU2VsZWN0aW9uIGNvbnRhaW5pbmcgYWxsIG9iamVjdHMgb24gdGhlIGNhbnZhc1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV3IGZhYnJpYy5BY3RpdmVTZWxlY3Rpb24oYWxsT2JqZWN0cyBhcyBhbnksIHsgY2FudmFzIH0pO1xyXG4gICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChzZWxlY3Rpb24pO1xyXG5cclxuICAgIC8vIFJvdGF0ZSB0aGUgQWN0aXZlU2VsZWN0aW9uIGRpcmVjdGx5ICh3b3JrcyBsaWtlIGEgdGVtcG9yYXJ5IGdyb3VwKVxyXG4gICAgY29uc3QgYWN0aXZlOiBhbnkgPSBjYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCk7XHJcbiAgICBpZiAoIWFjdGl2ZSkge1xyXG4gICAgICBjYW52YXMuZGlzY2FyZEFjdGl2ZU9iamVjdCgpO1xyXG4gICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudEFuZ2xlID0gYWN0aXZlLmFuZ2xlIHx8IDA7XHJcbiAgICBhY3RpdmUucm90YXRlKGN1cnJlbnRBbmdsZSArIGFuZ2xlRGVnKTtcclxuICAgIGFjdGl2ZS5zZXRDb29yZHMoKTtcclxuXHJcbiAgICAvLyBDbGVhciBzZWxlY3Rpb24gYnV0IGtlZXAgcm90YXRlZCBwb3NpdGlvbnMgb2YgY2hpbGQgb2JqZWN0c1xyXG4gICAgY2FudmFzLmRpc2NhcmRBY3RpdmVPYmplY3QoKTtcclxuICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGaXh0dXJlT25DYW52YXNDbGljayh0YXJnZXQ6IGFueSwgY29sbGFwc2VUYXNrSW5mbzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgIGZpeHR1cmVUeXBlOiB0YXJnZXQuZml4dHVyZVR5cGUsXHJcbiAgICAgICAgd2FsbEluZGV4OiB0YXJnZXQud2FsbEluZGV4LFxyXG4gICAgICAgIGZpeHR1cmVJbmRleDogdGFyZ2V0LmZpeHR1cmVJbmRleCxcclxuICAgICAgICBmaXh0dXJlSWQ6IHRhcmdldC5maXh0dXJlSWQsXHJcbiAgICAgICAgaXNzdWU6IHRhcmdldC5pc3N1ZSxcclxuICAgICAgICBpc3N1ZURhdGE6IHRhcmdldC5pc3N1ZURhdGEsXHJcbiAgICAgICAgdm1Db25maWc6IHRhcmdldC52bUNvbmZpZyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0Rml4dHVyZUZlZWRiYWNrKFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCxcclxuICAgICAgICBjb2xsYXBzZVRhc2tJbmZvLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Rml4dHVyZUZlZWRiYWNrKGZpeHR1cmVJZDogc3RyaW5nLCBjb2xsYXBzZVRhc2tJbmZvOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRGaXh0dXJlRmVlZGJhY2sgPSB0aGlzLnN0b3JlRmVlZGJhY2suZml4dHVyZURhdGEuZmluZChcclxuICAgICAgKGZiOiBhbnkpID0+IGZiLmZpeHR1cmVJZCA9PT0gZml4dHVyZUlkLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoY3VycmVudEZpeHR1cmVGZWVkYmFjaykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrID0ge1xyXG4gICAgICAgIGdsb2JhbENvbW1lbnRzOiB0aGlzLnN0b3JlRmVlZGJhY2suZml4dHVyZUNvbW1lbnQsXHJcbiAgICAgICAgZml4dHVyZUZlZWRiYWNrOiB7XHJcbiAgICAgICAgICAuLi5jdXJyZW50Rml4dHVyZUZlZWRiYWNrLFxyXG4gICAgICAgICAgRml4dHVyZURhdGE6IHN0cnVjdHVyZWRDbG9uZShcclxuICAgICAgICAgICAgdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZpbmQoKGZpOiBhbnkpID0+IGZpLl9pZCA9PT0gZml4dHVyZUlkKSxcclxuICAgICAgICAgICksXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0YXNrSW5mb1RvZ2dsZTogY29sbGFwc2VUYXNrSW5mbyxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2sgPSB7XHJcbiAgICAgICAgZ2xvYmFsQ29tbWVudHM6IFtdLFxyXG4gICAgICAgIGZpeHR1cmVGZWVkYmFjazoge1xyXG4gICAgICAgICAgZml4dHVyZUlkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICBGaXh0dXJlRGF0YTogc3RydWN0dXJlZENsb25lKFxyXG4gICAgICAgICAgICB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMuZmluZCgoZmk6IGFueSkgPT4gZmkuX2lkID09PSBmaXh0dXJlSWQpLFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGZpeHR1cmVBSURhdGE6IG51bGwsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0YXNrSW5mb1RvZ2dsZTogY29sbGFwc2VUYXNrSW5mbyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEZpeHR1cmVUZW1wbGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0QWxsVGVtcGxhdGVzKHBheWxvYWQpLFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBkYXRhID0gcmVzPy5kYXRhO1xyXG5cclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmZpeHR1cmVUZW1wbGF0ZXMgPSBkYXRhLm1hcCgodDogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBfaWQ6IHQuX2lkLFxyXG4gICAgICAgICAgICBuYW1lOiB0LmZpeHR1cmVOYW1lLmluY2x1ZGVzKFwiLWZ0XCIpXHJcbiAgICAgICAgICAgICAgPyB0LmZpeHR1cmVOYW1lXHJcbiAgICAgICAgICAgICAgOiBgJHt0LmZpeHR1cmVOYW1lfSAtICR7dC5maXh0dXJlV2lkdGgudmFsdWV9ICR7dC5maXh0dXJlV2lkdGgudW5pdH1gLFxyXG4gICAgICAgICAgICBzdWJ0ZXh0OiBgJHt0LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIsIFwiKX1gLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGZldGNoaW5nIGZpeHR1cmUgdGVtcGxhdGVzOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5sYXlvdXRGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIHdhbGxzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgZmxvb3JGaXh0dXJlczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIGZsb29yT3RoZXJFbGVtZW50czogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRGb3JtV2FsbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRGb3JtRmxvb3JGaXh0dXJlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JPdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRFbnRyYW5jZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZpbHRlcihcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIixcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRXYWxsT3RoZXJFbGVtZW50cyh3YWxsSW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuICh0aGlzLmxheW91dEZvcm0uZ2V0KFwid2FsbHNcIikgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQod2FsbEluZGV4KVxyXG4gICAgICAuZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtRml4dHVyZXMod2FsbEluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAodGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHdhbGxJbmRleClcclxuICAgICAgLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIHBhdGNoV2FsbEVsZW1lbnRzKHsgZWxlbWVudFR5cGUsIGVsZW1lbnROdW1iZXIgfTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBlbGVtZW50VHlwZTogW2VsZW1lbnRUeXBlID8gZWxlbWVudFR5cGUgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBlbGVtZW50TnVtYmVyOiBbZWxlbWVudE51bWJlciA/IGVsZW1lbnROdW1iZXIgOiAwLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBmaXh0dXJlczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIG90aGVyRWxlbWVudHM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIHBhdGNoRml4dHVyZSh7IGZpeHR1cmVOYW1lLCBmaXh0dXJlQ29uZmlnSWQsIF9pZCB9OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGZpeHR1cmVOYW1lOiBbZml4dHVyZU5hbWUgPyBmaXh0dXJlTmFtZSA6IFwiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGZpeHR1cmVDb25maWdJZDogW1xyXG4gICAgICAgIGZpeHR1cmVDb25maWdJZCA/IGZpeHR1cmVDb25maWdJZCA6IFwiXCIsXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBdLFxyXG4gICAgICBfaWQ6IFtfaWQgPyBfaWQgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIGFkZFdhbGxTcGFjZSh3YWxsSW5kZXg6IG51bWJlciwgb3BlcmF0aW9uOiBcImluY3JlbWVudFwiIHwgXCJkZWNyZW1lbnRcIikge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgY2xpY2tlZFdhbGxOdW1iZXIgPSB3YWxsSW5kZXggKyAxO1xyXG4gICAgY29uc3QgbW1Ub0ZlZXQgPSAzMDU7XHJcbiAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gMTUyNCAvIG1tVG9GZWV0OyAvLyB+NSBmdCAoaG9yaXpvbnRhbCBpbmNyZW1lbnQpXHJcbiAgICBjb25zdCBmaXh0dXJlV2lkdGggPSAxMjIwIC8gbW1Ub0ZlZXQ7IC8vIH40IGZ0ICh2ZXJ0aWNhbCBpbmNyZW1lbnQpXHJcblxyXG4gICAgY29uc3QgbGF5b3V0ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbjtcclxuXHJcbiAgICBjb25zdCBnZXRXYWxsID0gKG51bTogbnVtYmVyKSA9PlxyXG4gICAgICBsYXlvdXQuZmluZChcclxuICAgICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IG51bSxcclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBhbW91bnQgPSBvcGVyYXRpb24gPT09IFwiaW5jcmVtZW50XCIgPyAxIDogLTE7XHJcblxyXG4gICAgY29uc3QgdzEgPSBnZXRXYWxsKDEpO1xyXG4gICAgY29uc3QgdzIgPSBnZXRXYWxsKDIpO1xyXG4gICAgY29uc3QgdzMgPSBnZXRXYWxsKDMpO1xyXG4gICAgY29uc3QgdzQgPSBnZXRXYWxsKDQpO1xyXG4gICAgY29uc3QgdzUgPSBnZXRXYWxsKDUpO1xyXG4gICAgY29uc3QgZW50cmFuY2UgPSBsYXlvdXQuZmluZCgoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIik7XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gSG9yaXpvbnRhbCBncm93dGggIChXYWxsLTEgLyBXYWxsLTMpXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDEgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDMpIHtcclxuICAgICAgaWYgKHcxKSB3MS5kaXN0YW5jZSArPSBhbW91bnQgKiBmaXh0dXJlV2lkdGg7XHJcbiAgICAgIGlmICh3MykgdzMuZGlzdGFuY2UgKz0gYW1vdW50ICogZml4dHVyZVdpZHRoO1xyXG5cclxuICAgICAgaWYgKHcyKSB7XHJcbiAgICAgICAgdzIuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZngucmVsYXRpdmVQb3NpdGlvbi54ID1cclxuICAgICAgICAgICAgKGZ4LnJlbGF0aXZlUG9zaXRpb24ueCB8fCAwKSArIGFtb3VudCAqIGZpeHR1cmVXaWR0aDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIFZlcnRpY2FsIGdyb3d0aCAgKFdhbGwtMiAvIFdhbGwtNCAvIFdhbGwtNSlcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlmIChcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIgfHxcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDQgfHxcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDVcclxuICAgICkge1xyXG4gICAgICBpZiAodzIpIHcyLmRpc3RhbmNlICs9IGFtb3VudCAqIGZpeHR1cmVIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAodzMpIHtcclxuICAgICAgICB3My5maXh0dXJlcy5mb3JFYWNoKChmeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAoZngucmVsYXRpdmVQb3NpdGlvbi55IHx8IDApICsgYW1vdW50ICogZml4dHVyZUhlaWdodDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZW50cmFuY2VZID0gZW50cmFuY2U/LmRpc3RhbmNlIHx8IDA7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nVzQgPSB3ND8uZGlzdGFuY2UgfHwgMDtcclxuICAgICAgY29uc3QgZXhpc3RpbmdXNSA9IHc1Py5kaXN0YW5jZSB8fCAwO1xyXG5cclxuICAgICAgLy8gR3JvdyB3YWxsLTQgaWYgd2UgY2xpY2tlZCB3YWxsLTQgT1Igd2FsbC0yXHJcbiAgICAgIGlmICgoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDQgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIpICYmIHc0KSB7XHJcbiAgICAgICAgdzQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28oZXhpc3RpbmdXNCArIGFtb3VudCAqIGZpeHR1cmVIZWlnaHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBHcm93IHdhbGwtNSBpZiB3ZSBjbGlja2VkIHdhbGwtNSBPUiB3YWxsLTJcclxuICAgICAgaWYgKChjbGlja2VkV2FsbE51bWJlciA9PT0gNSB8fCBjbGlja2VkV2FsbE51bWJlciA9PT0gMikgJiYgdzUpIHtcclxuICAgICAgICB3NS5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhleGlzdGluZ1c1ICsgYW1vdW50ICogZml4dHVyZUhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmICh3NCkge1xyXG4gICAgICAgICAgdzQuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAgIChmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgfHwgMCkgKyBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcmV2ZW50IG92ZXJmbG93OiBzaHJpbmsgYmFjayBpZiB0b3RhbCA+IHcyIHNpemVcclxuICAgICAgY29uc3QgdG90YWxVc2VkID0gZW50cmFuY2VZICsgKHc0Py5kaXN0YW5jZSB8fCAwKSArICh3NT8uZGlzdGFuY2UgfHwgMCk7XHJcbiAgICAgIGlmICh0b3RhbFVzZWQgPiB3MiEuZGlzdGFuY2UpIHtcclxuICAgICAgICBpZiAodzUpIHtcclxuICAgICAgICAgIHc1LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKFxyXG4gICAgICAgICAgICB3NS5kaXN0YW5jZSAtICh0b3RhbFVzZWQgLSB3MiEuZGlzdGFuY2UpLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUZpeHR1cmUoXHJcbiAgICBmaXh0dXJlVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsXHJcbiAgICBmaXh0dXJlSW5kZXg6IG51bWJlcixcclxuICAgIHdhbGxJbmRleD86IG51bWJlcixcclxuICApIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEpLnJlbW92ZUF0KGZpeHR1cmVJbmRleCk7XHJcblxyXG4gICAgICBjb25zdCB3YWxsID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG4gICAgICBpZiAod2FsbCAmJiBBcnJheS5pc0FycmF5KHdhbGwuZml4dHVyZXMpKSB7XHJcbiAgICAgICAgd2FsbC5maXh0dXJlcy5zcGxpY2UoZml4dHVyZUluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMucmVtb3ZlQXQoZml4dHVyZUluZGV4KTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUpKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5zcGxpY2UoZml4dHVyZUluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVPdGhlckVsZW1lbnQoXHJcbiAgICBlbGVtZW50VHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsXHJcbiAgICBlbGVtZW50SW5kZXg6IG51bWJlcixcclxuICAgIHdhbGxJbmRleD86IG51bWJlcixcclxuICApIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0V2FsbE90aGVyRWxlbWVudHMod2FsbEluZGV4ISkucmVtb3ZlQXQoZWxlbWVudEluZGV4KTtcclxuXHJcbiAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk7XHJcbiAgICAgIGlmICh3YWxsICYmIEFycmF5LmlzQXJyYXkod2FsbC5vdGhlckVsZW1lbnRzKSkge1xyXG4gICAgICAgIHdhbGwub3RoZXJFbGVtZW50cy5zcGxpY2UoZWxlbWVudEluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChlbGVtZW50VHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5yZW1vdmVBdChlbGVtZW50SW5kZXgpO1xyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzLnNwbGljZShlbGVtZW50SW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwibGF5b3V0XCI7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGaXh0dXJlVGVtcGxhdGUoXHJcbiAgICBjb25maWdJZDogc3RyaW5nLFxyXG4gICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLFxyXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXHJcbiAgICB3YWxsSW5kZXg/OiBudW1iZXIsXHJcbiAgKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldEZpeHR1cmVUZW1wbGF0ZShjb25maWdJZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEpLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgZml4dHVyZUluZGV4LFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGVtcGxhdGVEYXRhLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgd2FsbFJlZiA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKSE7XHJcbiAgICAgICAgICAgIHdhbGxSZWYuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAuLi53YWxsUmVmLmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgLi4uZml4dHVyZURhdGEsXHJcbiAgICAgICAgICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICh0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgZml4dHVyZUluZGV4LFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGVtcGxhdGVEYXRhLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVtmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAuLi5maXh0dXJlRGF0YSxcclxuICAgICAgICAgICAgICB1bnNhdmVkQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJsYXlvdXRcIjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHRlbXBsYXRlc1wiKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBkZXN0aW5hdGlvbldhbGxJbmRleDogbnVtYmVyIHwgXCJmbG9vclwiLFxyXG4gICAgZGVzdGluYXRpb25GaXh0dXJlSW5kZXg/OiBudW1iZXIsXHJcbiAgKSB7XHJcbiAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcclxuXHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCBpc1NvdXJjZUZsb29yID0gZGF0YS53YWxsSW5kZXggPT09IFwiZmxvb3JcIjtcclxuICAgIGNvbnN0IGlzRGVzdGluYXRpb25GbG9vciA9IGRlc3RpbmF0aW9uV2FsbEluZGV4ID09PSBcImZsb29yXCI7XHJcblxyXG4gICAgY29uc3Qgc291cmNlRm9ybUFycmF5OiBGb3JtQXJyYXkgPSBpc1NvdXJjZUZsb29yXHJcbiAgICAgID8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlc1xyXG4gICAgICA6IHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKGRhdGEud2FsbEluZGV4KTtcclxuXHJcbiAgICBjb25zdCBkZXN0aW5hdGlvbkZvcm1BcnJheTogRm9ybUFycmF5ID0gaXNEZXN0aW5hdGlvbkZsb29yXHJcbiAgICAgID8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlc1xyXG4gICAgICA6IHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKGRlc3RpbmF0aW9uV2FsbEluZGV4IGFzIG51bWJlcik7XHJcblxyXG4gICAgY29uc3Qgc291cmNlV2FsbE1ldGEgPSBpc1NvdXJjZUZsb29yXHJcbiAgICAgID8gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVxyXG4gICAgICA6ICh0aGlzLmdldFdhbGxCeU51bWJlcihcclxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KGRhdGEud2FsbEluZGV4KS5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZSxcclxuICAgICAgICApPy5maXh0dXJlcyA/PyBbXSk7XHJcblxyXG4gICAgY29uc3QgZGVzdGluYXRpb25XYWxsTWV0YSA9IGlzRGVzdGluYXRpb25GbG9vclxyXG4gICAgICA/IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVcclxuICAgICAgOiAodGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1XYWxsc1xyXG4gICAgICAgICAgICAuYXQoZGVzdGluYXRpb25XYWxsSW5kZXggYXMgbnVtYmVyKVxyXG4gICAgICAgICAgICAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWUsXHJcbiAgICAgICAgKT8uZml4dHVyZXMgPz8gW10pO1xyXG5cclxuICAgIGNvbnN0IHNGaXh0dXJlSW5kZXggPSBzb3VyY2VXYWxsTWV0YS5maW5kSW5kZXgoXHJcbiAgICAgIChmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgZml4dHVyZS5faWQgPT09XHJcbiAgICAgICAgc291cmNlRm9ybUFycmF5LmF0KGRhdGEuZml4dHVyZUluZGV4KT8uZ2V0KFwiX2lkXCIpPy52YWx1ZSxcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZEZpeHR1cmVJbmRleCA9XHJcbiAgICAgIGRlc3RpbmF0aW9uRml4dHVyZUluZGV4ICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IGRlc3RpbmF0aW9uV2FsbE1ldGEuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgIGZpeHR1cmUuX2lkID09PVxyXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uRm9ybUFycmF5LmF0KGRlc3RpbmF0aW9uRml4dHVyZUluZGV4KT8uZ2V0KFwiX2lkXCIpXHJcbiAgICAgICAgICAgICAgICA/LnZhbHVlLFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIDogZGVzdGluYXRpb25Gb3JtQXJyYXkubGVuZ3RoO1xyXG5cclxuICAgIGNvbnN0IHNQb3NpdGlvbiA9IHtcclxuICAgICAgZml4dHVyZU51bWJlcjogc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgIH07XHJcbiAgICBjb25zdCBkUG9zaXRpb24gPSB7XHJcbiAgICAgIGZpeHR1cmVOdW1iZXI6IGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlcixcclxuICAgICAgYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyOlxyXG4gICAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoc291cmNlV2FsbE1ldGEgPT09IGRlc3RpbmF0aW9uV2FsbE1ldGEpIHtcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyID1cclxuICAgICAgICBzUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIHNQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIgPSBkUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAgICAgICBkUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlciA9IGRQb3NpdGlvbi5maXh0dXJlTnVtYmVyO1xyXG4gICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIGRQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50cmFuc2ZlckFycmF5SXRlbShcclxuICAgICAgc291cmNlRm9ybUFycmF5LmNvbnRyb2xzLFxyXG4gICAgICBkZXN0aW5hdGlvbkZvcm1BcnJheS5jb250cm9scyxcclxuICAgICAgZGF0YS5maXh0dXJlSW5kZXgsXHJcbiAgICAgIGRGaXh0dXJlSW5kZXgsXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudHJhbnNmZXJBcnJheUl0ZW0oXHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhLFxyXG4gICAgICBkZXN0aW5hdGlvbldhbGxNZXRhLFxyXG4gICAgICBzRml4dHVyZUluZGV4LFxyXG4gICAgICBkRml4dHVyZUluZGV4LFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJsYXlvdXRcIjtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkQ2FudmFzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG9yaWdpbmFsVmlld3BvcnQgPSBbXHJcbiAgICAgIC4uLnRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtISxcclxuICAgIF0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5zZXRWaWV3cG9ydFRyYW5zZm9ybShbMSwgMCwgMCwgMSwgMCwgMF0pO1xyXG5cclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG5cclxuICAgIGNvbnN0IGRhdGFVUkwgPSB0aGlzLmNhbnZhcy50b0RhdGFVUkwoe1xyXG4gICAgICBmb3JtYXQ6IFwicG5nXCIsXHJcbiAgICAgIGxlZnQ6IGJvdW5kcy5sZWZ0LFxyXG4gICAgICB0b3A6IGJvdW5kcy50b3AsXHJcbiAgICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm91bmRzLmhlaWdodCxcclxuICAgICAgbXVsdGlwbGllcjogMixcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFZpZXdwb3J0VHJhbnNmb3JtKG9yaWdpbmFsVmlld3BvcnQpO1xyXG5cclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIGxpbmsuaHJlZiA9IGRhdGFVUkw7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7dGhpcy5wbGFub0RhdGEuc3RvcmVOYW1lfV8ke3RoaXMuZmxvb3JEYXRhLmZsb29yTmFtZX0ucG5nYDtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIC8vIGRvd25sb2FkQ2FudmFzKCkge1xyXG4gIC8vICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG5cclxuICAvLyAgIGNvbnN0IG9yaWdpbmFsVmlld3BvcnQgPSBbXHJcbiAgLy8gICAgIC4uLnRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtISxcclxuICAvLyAgIF0gYXMgZmFicmljLlRNYXQyRDtcclxuICAvLyAgIHRoaXMuY2FudmFzLnNldFZpZXdwb3J0VHJhbnNmb3JtKFsxLCAwLCAwLCAxLCAwLCAwXSk7XHJcblxyXG4gIC8vICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcblxyXG4gIC8vICAgY29uc3QgYmcgPSB0aGlzLmNyZWF0ZUV4cG9ydExheW91dEJhY2tncm91bmQoKTtcclxuICAvLyAgIHRoaXMuY2FudmFzLmluc2VydEF0KDAsIGJnKTtcclxuICAvLyAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG5cclxuICAvLyAgIGNvbnN0IGRhdGFVUkwgPSB0aGlzLmNhbnZhcy50b0RhdGFVUkwoe1xyXG4gIC8vICAgICBmb3JtYXQ6IFwicG5nXCIsXHJcbiAgLy8gICAgIGxlZnQ6IGJvdW5kcy5sZWZ0LFxyXG4gIC8vICAgICB0b3A6IGJvdW5kcy50b3AsXHJcbiAgLy8gICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXHJcbiAgLy8gICAgIGhlaWdodDogYm91bmRzLmhlaWdodCxcclxuICAvLyAgICAgbXVsdGlwbGllcjogMixcclxuICAvLyAgIH0pO1xyXG5cclxuICAvLyAgIHRoaXMuY2FudmFzLnJlbW92ZShiZyk7XHJcbiAgLy8gICB0aGlzLmNhbnZhcy5zZXRWaWV3cG9ydFRyYW5zZm9ybShvcmlnaW5hbFZpZXdwb3J0KTtcclxuICAvLyAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG5cclxuICAvLyAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAvLyAgIGxpbmsuaHJlZiA9IGRhdGFVUkw7XHJcbiAgLy8gICBsaW5rLmRvd25sb2FkID0gYCR7dGhpcy5wbGFub0RhdGEuc3RvcmVOYW1lfV8ke3RoaXMuZmxvb3JEYXRhLmZsb29yTmFtZX0ucG5nYDtcclxuICAvLyAgIGxpbmsuY2xpY2soKTtcclxuICAvLyB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRXhwb3J0TGF5b3V0QmFja2dyb3VuZCgpIHtcclxuICAgIGNvbnN0IHBvaW50cyA9IHRoaXMuYnVpbGRMYXlvdXRQb2x5Z29uRnJvbVdhbGxzKCk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBmYWJyaWMuUG9seWdvbihwb2ludHMsIHtcclxuICAgICAgZmlsbDogXCIjZWFlY2YwXCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgb2JqZWN0Q2FjaGluZzogZmFsc2UsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRMYXlvdXRQb2x5Z29uRnJvbVdhbGxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25cclxuICAgICAgLmZpbHRlcigodzogYW55KSA9PiB3LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIilcclxuICAgICAgLm1hcCgodzogYW55KSA9PiAoe1xyXG4gICAgICAgIHg6IHRoaXMudG9QaXhlbHMody5yZWxhdGl2ZVBvc2l0aW9uLngsIFwiZnRcIiksXHJcbiAgICAgICAgeTogdGhpcy50b1BpeGVscyh3LnJlbGF0aXZlUG9zaXRpb24ueSwgXCJmdFwiKSxcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlRmVlZGJhY2tBY3Rpb24odXNlckFjdGlvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgdGFyZ2V0Rml4dHVyZTogYW55ID0ge1xyXG4gICAgICAgIC4uLih0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAuZmxhdE1hcCgocDogYW55KSA9PiBwLmZpeHR1cmVzKVxyXG4gICAgICAgICAgLmNvbmNhdCh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKVxyXG4gICAgICAgICAgLmZpbmQoKGY6IGFueSkgPT4gZi5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCkgfHwgbnVsbCksXHJcbiAgICAgICAgdXNlckFjdGlvbjogdXNlckFjdGlvbi5hY3Rpb24sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSB7IC4uLnRhcmdldEZpeHR1cmUgfTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJhY2NlcHRBaVwiIHx8XHJcbiAgICAgICAgdXNlckFjdGlvbi5hY3Rpb24gPT09IFwiZWRpdFdpdGhBaVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YSxcclxuICAgICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLmhlYWRlcixcclxuICAgICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YS5oZWFkZXIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHVzZXJBY3Rpb24uZml4dHVyZURhdGE/LmhlYWRlcj8ubGFiZWxcclxuICAgICAgICAgICAgPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgID8uaW5jbHVkZXMoXCJoZWFkZXIgbm90IGlkZW50aWZpZWRcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRhcmdldEZpeHR1cmUuaGVhZGVyLmxhYmVsID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLmhlYWRlci5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJlZGl0V2l0aEFpXCIgfHxcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJlZGl0V2l0aFBsYW5vXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAgICAgLi4udGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YTtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0Rml4dHVyZSA9IHRydWU7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRGaXh0dXJlU2VjdGlvbiA9IHVzZXJBY3Rpb24/LnRhYiA/PyBcImJhc2ljLWRldGFpbHNcIjtcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZmVlZGJhY2sgPSB1c2VyQWN0aW9uLmZlZWRiYWNrO1xyXG5cclxuICAgICAgY29uc3QgYW5zd2VySWQgPSB1c2VyQWN0aW9uLmZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/Ll9pZDtcclxuICAgICAgaWYgKCFhbnN3ZXJJZCkgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBfaWQ6IGZlZWRiYWNrLl9pZCxcclxuICAgICAgICBhbnN3ZXJJZDogYW5zd2VySWQsXHJcbiAgICAgICAgdHlwZTogdXNlckFjdGlvbi50eXBlLFxyXG4gICAgICAgIHVzZXJBY3Rpb246IHVzZXJBY3Rpb24uYWN0aW9uLFxyXG4gICAgICAgIGNvbW1lbnRzOiB1c2VyQWN0aW9uLnJlbWFya3MsXHJcbiAgICAgICAgdGFza1R5cGU6IHVzZXJBY3Rpb24udGFza1R5cGUsXHJcbiAgICAgICAgcGxhbm9JZDogdXNlckFjdGlvbi5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHVzZXJBY3Rpb24uZmxvb3JJZCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVGaXh0dXJlQ29tcGxpYW5jZVN0YXR1cyhwYXlsb2FkKSxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghcmVzICYmIHVzZXJBY3Rpb24udHlwZSAhPSBcImFncmVlXCIpIHJldHVybjtcclxuXHJcbiAgICAgIGlmICh1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJrZWVwUGxhbm9cIikge1xyXG4gICAgICAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB1cGRhdGVGaXh0dXJlUGF5bG9hZCA9IHtcclxuICAgICAgICBmaXh0dXJlSWQ6IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCxcclxuICAgICAgICBkYXRhOiB0YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVTdG9yZUZpeHR1cmUodXBkYXRlRml4dHVyZVBheWxvYWQpLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgIC8vIHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICBhd2FpdCB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGEuX2lkKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gZXhlY3V0ZSB1c2VyIGFjdGlvblwiKTtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGhhbmRsZUZlZWRiYWNrQWN0aW9uIFtlcnJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByb3RhdGVXYWxsKGVsZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlcixcclxuICAgICk7XHJcbiAgICBpZiAod2FsbC5hbmdsZSArIDkwIDwgMzYwKSB7XHJcbiAgICAgIHdhbGwuYW5nbGUgKz0gOTA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3YWxsLmFuZ2xlID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdXYWxsKGVsZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBnZXRXYWxsRW5kUG9pbnQgPSAod2FsbDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKHdhbGwuYW5nbGUgKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgICAgY29uc3QgbGVuZ3RoID0gd2FsbC5kaXN0YW5jZTtcclxuXHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgeDogd2FsbC5yZWxhdGl2ZVBvc2l0aW9uLnggKyBsZW5ndGggKiBNYXRoLmNvcyhhbmdsZVJhZCksXHJcbiAgICAgICAgeTogd2FsbC5yZWxhdGl2ZVBvc2l0aW9uLnkgKyBsZW5ndGggKiBNYXRoLnNpbihhbmdsZVJhZCksXHJcbiAgICAgICAgdW5pdDogd2FsbC5yZWxhdGl2ZVBvc2l0aW9uLnVuaXQsXHJcbiAgICAgIH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kSW5kZXgoXHJcbiAgICAgICh3OiBhbnkpID0+IHcuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHcuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyLFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPT09IC0xICYmIGVsZU51bWJlciAhPT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBzdGFydFBvc2l0aW9uO1xyXG5cclxuICAgIGlmIChlbGVOdW1iZXIgPT09IDApIHtcclxuICAgICAgc3RhcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcHJldldhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuICAgICAgc3RhcnRQb3NpdGlvbiA9IGdldFdhbGxFbmRQb2ludChwcmV2V2FsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmFzZVdhbGwgPVxyXG4gICAgICBlbGVOdW1iZXIgPT09IDBcclxuICAgICAgICA/IHsgYW5nbGU6IDAsIGRpcmVjdGlvbjogXCJyaWdodFwiLCB1bml0OiBcImZ0XCIgfVxyXG4gICAgICAgIDogdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpbmRleF07XHJcblxyXG4gICAgY29uc3QgbmV3V2FsbCA9IHtcclxuICAgICAgZWxlbWVudFR5cGU6IFwid2FsbFwiLFxyXG4gICAgICBkaXN0YW5jZTogMTUsXHJcbiAgICAgIHVuaXQ6IGJhc2VXYWxsLnVuaXQsXHJcbiAgICAgIGRpcmVjdGlvbjogYmFzZVdhbGwuZGlyZWN0aW9uLFxyXG4gICAgICBhbmdsZTogYmFzZVdhbGwuYW5nbGUsXHJcbiAgICAgIGVsZW1lbnROdW1iZXI6IGVsZU51bWJlciArIDEsXHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb246IHN0YXJ0UG9zaXRpb24sXHJcbiAgICAgIGZpeHR1cmVzOiBbXSxcclxuICAgICAgb3RoZXJFbGVtZW50czogW10sXHJcbiAgICAgIG5ld0FkZGVkOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnNwbGljZShcclxuICAgICAgZWxlTnVtYmVyID09PSAwID8gMCA6IGluZGV4ICsgMSxcclxuICAgICAgMCxcclxuICAgICAgbmV3V2FsbCxcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVXYWxsRWxlbWVudE51bWJlcigpO1xyXG4gICAgdGhpcy51cGRhdGVXYWxsQ29vcmRpbmF0ZXMoKTtcclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdFbnRyYW5jZSgpIHtcclxuICAgIGNvbnN0IGVsZU51bWJlciA9XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmlsdGVyKFxyXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIsXHJcbiAgICAgICk/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgIGNvbnN0IG5ld0VudHJhbmNlID0ge1xyXG4gICAgICBlbGVtZW50VHlwZTogXCJlbnRyYW5jZVwiLFxyXG4gICAgICBkaXN0YW5jZTogNixcclxuICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICBkaXJlY3Rpb246IFwidXBcIixcclxuICAgICAgYW5nbGU6IDAsXHJcbiAgICAgIGVsZW1lbnROdW1iZXI6IGVsZU51bWJlciArIDEsXHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb246IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9LFxyXG4gICAgICBmaXh0dXJlczogW10sXHJcbiAgICAgIG90aGVyRWxlbWVudHM6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnB1c2gobmV3RW50cmFuY2UpO1xyXG4gICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy51cGRhdGVFbnRyYW5jZUNvb3JkaW5hdGVzKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGROZXdGaXh0dXJlKGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIiwgd2FsbEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCB0ZW1wbGF0ZTogYW55ID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZSh0aGlzLmZpeHR1cmVUZW1wbGF0ZXNbMF0uX2lkKTtcclxuICAgIGNvbnN0IHRlbXBsYXRlRGF0YSA9IHRlbXBsYXRlLmRhdGE7XHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xyXG4gICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgIC4uLnRlbXBsYXRlRGF0YSxcclxuICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIHVuaXQ6IFwiZnRcIiB9LFxyXG4gICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgIG5ld0FkZGVkOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxEYXRhID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG5cclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0LFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3cCA9IHRoaXMuZnJvbVBpeGVscyh3LCBcImZ0XCIpO1xyXG5cclxuICAgICAgaWYgKHdhbGxEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeDAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICAgICAgY29uc3QgeTAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gd2FsbERhdGEuZGlzdGFuY2UgLSB3cDtcclxuXHJcbiAgICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YS5hbmdsZSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ4ID0geDAgKyBsZW5ndGggKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ5ID0geTAgKyBsZW5ndGggKiBNYXRoLnNpbihhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTtcclxuICAgICAgICBjb25zdCBmeF9vZmZzZXQgPSBmeCArIG9mZnNldCAqIC1NYXRoLnNpbihhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ5X29mZnNldCA9IGZ5ICsgb2Zmc2V0ICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSBmeF9vZmZzZXQ7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gZnlfb2Zmc2V0O1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBhbmdsZURlZztcclxuICAgICAgfVxyXG5cclxuICAgICAgKHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KHdhbGxJbmRleCEpLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICBmaXh0dXJlR3JvdXAsXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKT8uZml4dHVyZXMucHVzaChmaXh0dXJlRGF0YSk7XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgY29uc3QgZml4dHVyZVdpZHRoUHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudW5pdCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmVIZWlnaHRQeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyBUcnkgdG8gZmluZCBlbXB0eSBjZW50ZXIgc3BhY2VcclxuICAgICAgY29uc3QgZW1wdHlTcG90ID0gdGhpcy5maW5kRW1wdHlDZW50ZXJTcG90KFxyXG4gICAgICAgIGZpeHR1cmVXaWR0aFB4LFxyXG4gICAgICAgIGZpeHR1cmVIZWlnaHRQeCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChlbXB0eVNwb3QpIHtcclxuICAgICAgICAvLyBDb252ZXJ0IGJhY2sgdG8gZnQgc2luY2Ugb3VyIHN0cnVjdHVyZSBzdG9yZXMgZnRcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLmZyb21QaXhlbHMoZW1wdHlTcG90LngsIFwiZnRcIik7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5mcm9tUGl4ZWxzKGVtcHR5U3BvdC55LCBcImZ0XCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIGZhbGxiYWNrXHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi54ID0gMDtcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUucHVzaChmaXh0dXJlRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwibGF5b3V0XCI7XHJcbiAgICB0aGlzLnVwZGF0ZUZpeHR1cmVDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3T3RoZXJFbGVtZW50cyhwb3NUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIiwgd2FsbEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcG9zRGF0YSA9IHtcclxuICAgICAgX2lkOiBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gLFxyXG4gICAgICBmaXh0dXJlTmFtZTogYFBPUyBDb3VudGVyYCxcclxuICAgICAgZml4dHVyZVR5cGU6IFwib3RoZXJcIixcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjogeyB4OiAwLCB5OiAwLCBhbmdsZTogMCwgdW5pdDogXCJmdFwiIH0sXHJcbiAgICAgIGZpeHR1cmVTdGF0aWNMZW5ndGg6IHtcclxuICAgICAgICB2YWx1ZTogMyxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVTdGF0aWNXaWR0aDoge1xyXG4gICAgICAgIHZhbHVlOiA1LFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgbGV0IHggPSBwb3NEYXRhLnJlbGF0aXZlUG9zaXRpb24ueDtcclxuICAgIGxldCB5ID0gcG9zRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICBsZXQgYSA9IHBvc0RhdGEucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuXHJcbiAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdCxcclxuICAgICk7XHJcbiAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIHBvc0RhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXQsXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld090aGVyR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdHlwZTogW3Bvc0RhdGEuZml4dHVyZU5hbWUgfHwgXCJQT1MgQ291bnRlclwiXSwgLy8gZGVmYXVsdCBzZWxlY3RlZCBsYWJlbFxyXG4gICAgICBjdXN0b21OYW1lOiBbXCJcIl0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocG9zVHlwZSA9PSBcIndhbGxcIikge1xyXG4gICAgICBjb25zdCB3YWxsRGF0YSA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKTtcclxuICAgICAgaWYgKHdhbGxEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeDAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICAgICAgY29uc3QgeTAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gd2FsbERhdGEuZGlzdGFuY2U7XHJcbiAgICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YS5hbmdsZSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ4ID0geDAgKyAobGVuZ3RoIC8gMikgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3QgZnkgPSB5MCArIChsZW5ndGggLyAyKSAqIE1hdGguc2luKGFuZ2xlUmFkKTtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSAyLjU7XHJcbiAgICAgICAgY29uc3QgZnhfb2Zmc2V0ID0gZnggKyBvZmZzZXQgKiAtTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG4gICAgICAgIGNvbnN0IGZ5X29mZnNldCA9IGZ5ICsgb2Zmc2V0ICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICB4ID0gdGhpcy50b1BpeGVscyhmeF9vZmZzZXQsIFwiZnRcIik7XHJcbiAgICAgICAgeSA9IHRoaXMudG9QaXhlbHMoZnlfb2Zmc2V0LCBcImZ0XCIpO1xyXG4gICAgICAgIGEgPSBhbmdsZURlZztcclxuICAgICAgfVxyXG5cclxuICAgICAgT2JqZWN0LmFzc2lnbihwb3NEYXRhLCB7XHJcbiAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI6IHdhbGxJbmRleCEgKyAxLFxyXG4gICAgICAgIGFzc29jaWF0ZWRFbGVtZW50VHlwZTogXCJ3YWxsXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgKHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KHdhbGxJbmRleCEpLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIG5ld090aGVyR3JvdXAsXHJcbiAgICAgICk7XHJcbiAgICAgIHdhbGxEYXRhLm90aGVyRWxlbWVudHMucHVzaCh7IC4uLnBvc0RhdGEsIG5ld0FkZGVkOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwb3NUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vck90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIG5ld090aGVyR3JvdXAsXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMucHVzaCh7IC4uLnBvc0RhdGEsIG5ld0FkZGVkOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlY3RHcm91cCA9IHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICB4LFxyXG4gICAgICB5LFxyXG4gICAgICBhLFxyXG4gICAgICB3LFxyXG4gICAgICBoLFxyXG4gICAgICBwb3NEYXRhLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBtYWtlIGFjdGl2ZVxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KHJlY3RHcm91cCk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH0gY2F0Y2gge31cclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVRvT3RoZXJFbGVtZW50c0NoYW5nZXMoKTtcclxuICAgIHRoaXMudXBkYXRlT3RoZXJFbGVtZW50c0Nvb3JkaW5hdGVzKCk7XHJcbiAgfVxyXG5cclxuICBmaW5kRW1wdHlDZW50ZXJTcG90KFxyXG4gICAgb2JqZWN0V2lkdGhQeDogbnVtYmVyLFxyXG4gICAgb2JqZWN0SGVpZ2h0UHg6IG51bWJlcixcclxuICAgIHRlbXBPY2N1cGllZDoge1xyXG4gICAgICB4OiBudW1iZXI7XHJcbiAgICAgIHk6IG51bWJlcjtcclxuICAgICAgd2lkdGg6IG51bWJlcjtcclxuICAgICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICB9W10gPSBbXSxcclxuICApIHtcclxuICAgIGNvbnN0IG9iamVjdHMgPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBjb25zdCBDRU5URVJfT0ZGU0VUX1ggPSAtMzAwOyBcclxuICAgIGNvbnN0IENFTlRFUl9PRkZTRVRfWSA9IDA7XHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoKTtcclxuXHJcbiAgICBjb25zdCBjZW50ZXJYID0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyICsgQ0VOVEVSX09GRlNFVF9YO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclkgPSBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDIgKyBDRU5URVJfT0ZGU0VUX1k7XHJcblxyXG4gICAgLy8gMi4gU3BpcmFsIHNlYXJjaCBwYXJhbWV0ZXJzXHJcbiAgICBjb25zdCBzdGVwID0gMjA7XHJcbiAgICBjb25zdCBtYXhSYWRpdXMgPSBNYXRoLm1heChib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xyXG5cclxuICAgIGZvciAobGV0IHJhZGl1cyA9IDA7IHJhZGl1cyA8IG1heFJhZGl1czsgcmFkaXVzICs9IHN0ZXApIHtcclxuICAgICAgZm9yIChsZXQgYW5nbGUgPSAwOyBhbmdsZSA8IDM2MDsgYW5nbGUgKz0gMzApIHtcclxuICAgICAgICBjb25zdCByYWQgPSAoYW5nbGUgKiBNYXRoLlBJKSAvIDE4MDtcclxuXHJcbiAgICAgICAgLy8g8J+UpyBGSVg6IGNlbnRlciDihpIgdG9wLWxlZnRcclxuICAgICAgICBjb25zdCB4ID0gY2VudGVyWCArIHJhZGl1cyAqIE1hdGguY29zKHJhZCkgLSBvYmplY3RXaWR0aFB4IC8gMjtcclxuICAgICAgICBjb25zdCB5ID0gY2VudGVyWSArIHJhZGl1cyAqIE1hdGguc2luKHJhZCkgLSBvYmplY3RIZWlnaHRQeCAvIDI7XHJcblxyXG4gICAgICAgIGNvbnN0IHRlc3RSZWN0ID0ge1xyXG4gICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgIHRvcDogeSxcclxuICAgICAgICAgIHdpZHRoOiBvYmplY3RXaWR0aFB4LFxyXG4gICAgICAgICAgaGVpZ2h0OiBvYmplY3RIZWlnaHRQeCxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICAvLyAzLiBDaGVjayBjb2xsaXNpb24gd2l0aCBleGlzdGluZyBjYW52YXMgb2JqZWN0c1xyXG4gICAgICAgIGNvbnN0IGNhbnZhc0NvbGxpc2lvbiA9IG9iamVjdHMuc29tZSgob2JqKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByZWN0ID0gb2JqLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgICAgICAgcmV0dXJuICEoXHJcbiAgICAgICAgICAgIHJlY3QubGVmdCA+IHRlc3RSZWN0LmxlZnQgKyB0ZXN0UmVjdC53aWR0aCB8fFxyXG4gICAgICAgICAgICByZWN0LmxlZnQgKyByZWN0LndpZHRoIDwgdGVzdFJlY3QubGVmdCB8fFxyXG4gICAgICAgICAgICByZWN0LnRvcCA+IHRlc3RSZWN0LnRvcCArIHRlc3RSZWN0LmhlaWdodCB8fFxyXG4gICAgICAgICAgICByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IDwgdGVzdFJlY3QudG9wXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoY2FudmFzQ29sbGlzaW9uKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgLy8gNC4gQ2hlY2sgY29sbGlzaW9uIHdpdGggdGVtcCBwbGFjZWQgZml4dHVyZXMgKENBRCBiYXRjaClcclxuICAgICAgICBjb25zdCB0ZW1wQ29sbGlzaW9uID0gdGVtcE9jY3VwaWVkLnNvbWUoKG8pID0+IHtcclxuICAgICAgICAgIHJldHVybiAhKFxyXG4gICAgICAgICAgICBvLnggPiB0ZXN0UmVjdC5sZWZ0ICsgdGVzdFJlY3Qud2lkdGggfHxcclxuICAgICAgICAgICAgby54ICsgby53aWR0aCA8IHRlc3RSZWN0LmxlZnQgfHxcclxuICAgICAgICAgICAgby55ID4gdGVzdFJlY3QudG9wICsgdGVzdFJlY3QuaGVpZ2h0IHx8XHJcbiAgICAgICAgICAgIG8ueSArIG8uaGVpZ2h0IDwgdGVzdFJlY3QudG9wXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGVtcENvbGxpc2lvbikgY29udGludWU7XHJcblxyXG4gICAgICAgIHJldHVybiB7IHgsIHkgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY2FuY2VsRWRpdCgpIHtcclxuICAgIGF3YWl0IHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuVG9EZWxldGVLZXkoKSB7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xyXG4gICAgICBpZiAoZS5rZXkgPT09IFwiRGVsZXRlXCIgJiYgdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQpIHtcclxuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmNhbnZhcz8uZ2V0QWN0aXZlT2JqZWN0KCkgYXMgYW55O1xyXG5cclxuICAgICAgICBpZiAoYWN0aXZlICYmIChhY3RpdmUgYXMgYW55KS5vYmpUeXBlID09PSBcImVudHJhbmNlXCIpIHtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlRW50cmFuY2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhY3RpdmUgJiYgKGFjdGl2ZSBhcyBhbnkpLm9ialR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBpZiAoYWN0aXZlPy5kYXRhPy5lbGVtZW50TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlV2FsbChhY3RpdmU/LmRhdGE/LmVsZW1lbnROdW1iZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFjdGl2ZSAmJiAoYWN0aXZlIGFzIGFueSkub2JqVHlwZSA9PT0gXCJmaXh0dXJlXCIpIHtcclxuICAgICAgICAgIGlmIChhY3RpdmU/LmZpeHR1cmVUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlRml4dHVyZShcclxuICAgICAgICAgICAgICBhY3RpdmU/LmZpeHR1cmVUeXBlLFxyXG4gICAgICAgICAgICAgIGFjdGl2ZT8uZml4dHVyZUluZGV4IC0gMSxcclxuICAgICAgICAgICAgICBhY3RpdmU/LndhbGxJbmRleCAtIDEsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUVudHJhbmNlKCkge1xyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkgYXMgYW55O1xyXG5cclxuICAgIGlmIChhY3RpdmUgJiYgYWN0aXZlLm9ialR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICBjb25zdCBpID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kSW5kZXgoXHJcbiAgICAgICAgKGVsOiBhbnkpID0+XHJcbiAgICAgICAgICBlbC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiICYmXHJcbiAgICAgICAgICBlbC5lbGVtZW50TnVtYmVyID09PSBhY3RpdmUuZGF0YS5lbGVtZW50TnVtYmVyLFxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlV2FsbChlbGVOdW1iZXI6IG51bWJlcikge1xyXG4gICAgY29uc3Qgd2FsbCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PlxyXG4gICAgICAgIGVsZS5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWxlLmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlcixcclxuICAgICk7XHJcbiAgICBpZiAod2FsbC5maXh0dXJlcy5sZW5ndGggfHwgd2FsbC5vdGhlckVsZW1lbnRzLmxlbmd0aClcclxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5jb25maXJtRGVsZXRlV2FsbCgpKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGkgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmRJbmRleChcclxuICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbC5lbGVtZW50TnVtYmVyID09PSBlbGVOdW1iZXIsXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uc3BsaWNlKGksIDEpO1xyXG4gICAgdGhpcy51cGRhdGVXYWxsRWxlbWVudE51bWJlcigpO1xyXG4gICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlV2FsbEVsZW1lbnROdW1iZXIoKSB7XHJcbiAgICBjb25zdCBvbmx5V2FsbHMgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uPy5maWx0ZXIoXHJcbiAgICAgIChlbDogYW55KSA9PiBlbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIsXHJcbiAgICApO1xyXG5cclxuICAgIG9ubHlXYWxscz8uZm9yRWFjaCgoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGl0ZW0uZWxlbWVudE51bWJlciA9IGluZGV4ICsgMTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9QaXhlbHModmFsdWU6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpIHtcclxuICAgIGxldCBwaXhlbHM6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodW5pdCA9PT0gXCJtbVwiKSB7XHJcbiAgICAgIHBpeGVscyA9ICh2YWx1ZSAvIDI1LjQpICogZHBpO1xyXG4gICAgfSBlbHNlIGlmICh1bml0ID09PSBcImZ0XCIpIHtcclxuICAgICAgcGl4ZWxzID0gdmFsdWUgKiAxMiAqIGRwaTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHVuaXQuIFVzZSAnbW0nIG9yICdmdCcuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOdW1iZXIocGl4ZWxzLnRvRml4ZWQoNCkpO1xyXG4gIH1cclxuXHJcbiAgZnJvbVBpeGVscyhwaXhlbHM6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpOiBudW1iZXIge1xyXG4gICAgbGV0IHZhbHVlOiBudW1iZXI7XHJcblxyXG4gICAgLy8gcGl4ZWxzID0gcGl4ZWxzID49IHRoaXMud2FsbFRoaWNrbmVzcyA/IHBpeGVscyAtIHRoaXMud2FsbFRoaWNrbmVzcyA6IHRoaXMud2FsbFRoaWNrbmVzcztcclxuXHJcbiAgICBpZiAodW5pdCA9PT0gXCJtbVwiKSB7XHJcbiAgICAgIHZhbHVlID0gKHBpeGVscyAvIGRwaSkgKiAyNS40O1xyXG4gICAgfSBlbHNlIGlmICh1bml0ID09PSBcImZ0XCIpIHtcclxuICAgICAgdmFsdWUgPSBwaXhlbHMgLyAoMTIgKiBkcGkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZS50b0ZpeGVkKDQpKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1FZGl0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKExheW91dEVkaXRDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtRGVsZXRlV2FsbCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9IFwiRGVsZXRlIHdhbGxcIjtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdhbGwgYWxvbmcgd2l0aCBpdHMgYXNzb2NpYXRlZCBmaXh0dXJlcyBhbmQgZWxlbWVudHM/XCI7XHJcblxyXG4gICAgICByZXR1cm4gYXdhaXQgbW9kZWxSZWYucmVzdWx0LnRoZW48Ym9vbGVhbj4oKHJlc3VsdCkgPT4gcmVzdWx0ID09PSBcIm9rXCIpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRml4dHVyZUNvb3JkaW5hdGVzKGZpeHR1cmVzPzogYW55KSB7XHJcbiAgICBjb25zdCBmaXh0dXJlc0Zyb21DYW52YXMgPVxyXG4gICAgICBmaXh0dXJlcyA/P1xyXG4gICAgICB0aGlzLmNhbnZhc1xyXG4gICAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5maXh0dXJlSWQpXHJcbiAgICAgICAgLm1hcCgob2JqKSA9PiAoe1xyXG4gICAgICAgICAgaWQ6IChvYmogYXMgYW55KS5maXh0dXJlSWQsXHJcbiAgICAgICAgICB4OiBvYmoubGVmdCxcclxuICAgICAgICAgIHk6IG9iai50b3AsXHJcbiAgICAgICAgICBhbmdsZTogb2JqPy5hbmdsZSA/PyAwLFxyXG4gICAgICAgIH0pKTtcclxuICAgIGNvbnN0IHBvc01hcCA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgZml4dHVyZXNGcm9tQ2FudmFzKSB7XHJcbiAgICAgIHBvc01hcC5zZXQoZml4dHVyZS5pZCwge1xyXG4gICAgICAgIHg6IHRoaXMuZnJvbVBpeGVscyhmaXh0dXJlLngsIFwiZnRcIiksXHJcbiAgICAgICAgeTogdGhpcy5mcm9tUGl4ZWxzKGZpeHR1cmUueSwgXCJmdFwiKSxcclxuICAgICAgICBhbmdsZTogZml4dHVyZS5hbmdsZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5mb3JFYWNoKChjZjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhdGVzdEZpeHR1cmVQb3MgPSBwb3NNYXAuZ2V0KGNmLl9pZCk7XHJcbiAgICAgIGlmIChsYXRlc3RGaXh0dXJlUG9zKSB7XHJcbiAgICAgICAgY2YucmVsYXRpdmVQb3NpdGlvbi54ID0gbGF0ZXN0Rml4dHVyZVBvcy54O1xyXG4gICAgICAgIGNmLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdEZpeHR1cmVQb3MueTtcclxuICAgICAgICBjZi5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0Rml4dHVyZVBvcy5hbmdsZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgdz8uZml4dHVyZXM/LmZvckVhY2goKHdmOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBsYXRlc3RGaXh0dXJlUG9zID0gcG9zTWFwLmdldCh3Zi5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RGaXh0dXJlUG9zKSB7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RGaXh0dXJlUG9zLng7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBsYXRlc3RGaXh0dXJlUG9zLnk7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0Rml4dHVyZVBvcy5hbmdsZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVPdGhlckVsZW1lbnRzQ29vcmRpbmF0ZXMoKSB7XHJcbiAgICBjb25zdCBvdGhlcnNGcm9tQ2FudmFzID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5vYmpUeXBlID09PSBcIm90aGVyc1wiKVxyXG4gICAgICAubWFwKChvYmopID0+ICh7XHJcbiAgICAgICAgaWQ6IChvYmogYXMgYW55KS5kYXRhPy5faWQsXHJcbiAgICAgICAgbGFiZWw6IChvYmogYXMgYW55KS5kYXRhPy5maXh0dXJlTmFtZSxcclxuICAgICAgICB4OiBvYmoubGVmdCxcclxuICAgICAgICB5OiBvYmoudG9wLFxyXG4gICAgICAgIGFuZ2xlOiBvYmo/LmFuZ2xlID8/IDAsXHJcbiAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSAtIDIsIFwiZnRcIiksXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZEhlaWdodCgpIC0gMiwgXCJmdFwiKSxcclxuICAgICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IHBvc01hcCA9IG5ldyBNYXA8XHJcbiAgICAgIHN0cmluZyxcclxuICAgICAgeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgYW5nbGU6IG51bWJlcjsgaDogbnVtYmVyOyB3OiBudW1iZXIgfVxyXG4gICAgPigpO1xyXG4gICAgZm9yIChjb25zdCBvdGhlciBvZiBvdGhlcnNGcm9tQ2FudmFzKSB7XHJcbiAgICAgIGlmIChvdGhlci5pZCkge1xyXG4gICAgICAgIHBvc01hcC5zZXQob3RoZXIuaWQsIHtcclxuICAgICAgICAgIHg6IHRoaXMuZnJvbVBpeGVscyhvdGhlci54LCBcImZ0XCIpLFxyXG4gICAgICAgICAgeTogdGhpcy5mcm9tUGl4ZWxzKG90aGVyLnksIFwiZnRcIiksXHJcbiAgICAgICAgICBhbmdsZTogb3RoZXIuYW5nbGUsXHJcbiAgICAgICAgICBoOiBvdGhlci5oZWlnaHQsXHJcbiAgICAgICAgICB3OiBvdGhlci53aWR0aCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMpKSB7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMuZm9yRWFjaCgoZWw6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE90aGVyc1BvcyA9IHBvc01hcC5nZXQoZWwuX2lkKTtcclxuICAgICAgICBpZiAobGF0ZXN0T3RoZXJzUG9zKSB7XHJcbiAgICAgICAgICBlbC5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RPdGhlcnNQb3MueDtcclxuICAgICAgICAgIGVsLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdE90aGVyc1Bvcy55O1xyXG4gICAgICAgICAgZWwucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9IGxhdGVzdE90aGVyc1Bvcy5hbmdsZTtcclxuICAgICAgICAgIGVsLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgPSBsYXRlc3RPdGhlcnNQb3MuaDtcclxuICAgICAgICAgIGVsLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy53O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgdz8ub3RoZXJFbGVtZW50cz8uZm9yRWFjaCgod2Y6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE90aGVyc1BvcyA9IHBvc01hcC5nZXQod2YuX2lkKTtcclxuICAgICAgICBpZiAobGF0ZXN0T3RoZXJzUG9zKSB7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RPdGhlcnNQb3MueDtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdE90aGVyc1Bvcy55O1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9IGxhdGVzdE90aGVyc1Bvcy5hbmdsZTtcclxuICAgICAgICAgIHdmLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgPSBsYXRlc3RPdGhlcnNQb3MuaDtcclxuICAgICAgICAgIHdmLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy53O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVdhbGxDb29yZGluYXRlcygpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLm9ialR5cGUgPT09IFwid2FsbFwiKVxyXG4gICAgICAubWFwKChvYmopID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdG9wOiB0aGlzLmZyb21QaXhlbHMob2JqLnRvcCwgXCJmdFwiKSxcclxuICAgICAgICAgIGxlZnQ6IHRoaXMuZnJvbVBpeGVscyhvYmoubGVmdCwgXCJmdFwiKSxcclxuICAgICAgICAgIHdpZHRoOiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZFdpZHRoKCkgLSAwLjI3LCBcImZ0XCIpLFxyXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZEhlaWdodCgpIC0gMC4yNywgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvYmouYW5nbGUsXHJcbiAgICAgICAgICBlbGVtZW50RGF0YTogKG9iaiBhcyBhbnkpLmRhdGEsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3Qgd2FsbCBvZiBkYXRhKSB7XHJcbiAgICAgIHBvc01hcC5zZXQoXHJcbiAgICAgICAgYCR7d2FsbC5lbGVtZW50RGF0YS5lbGVtZW50VHlwZX0ke3dhbGwuZWxlbWVudERhdGEuZWxlbWVudE51bWJlcn1gLFxyXG4gICAgICAgIGRhdGEuZmluZChcclxuICAgICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSA9PT0gd2FsbC5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSAmJlxyXG4gICAgICAgICAgICBvYmouZWxlbWVudERhdGEuZWxlbWVudE51bWJlciA9PT0gd2FsbC5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyLFxyXG4gICAgICAgICksXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgd2FsbFBvcyA9IHBvc01hcC5nZXQoYCR7dy5lbGVtZW50VHlwZX0ke3cuZWxlbWVudE51bWJlcn1gKTtcclxuICAgICAgaWYgKHdhbGxQb3MpIHtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueCA9IHdhbGxQb3MubGVmdDtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueSA9IHdhbGxQb3MudG9wO1xyXG4gICAgICAgIHcuYW5nbGUgPSB3YWxsUG9zLmFuZ2xlO1xyXG4gICAgICAgIHcuZGlzdGFuY2UgPSB3YWxsUG9zLndpZHRoO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5vYmpUeXBlID09PSBcImVudHJhbmNlXCIpXHJcbiAgICAgIC5tYXAoKG9iaikgPT4ge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICB0b3A6IHRoaXMuZnJvbVBpeGVscyhvYmoudG9wLCBcImZ0XCIpLFxyXG4gICAgICAgICAgbGVmdDogdGhpcy5mcm9tUGl4ZWxzKG9iai5sZWZ0LCBcImZ0XCIpLFxyXG4gICAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSwgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvYmouYW5nbGUsXHJcbiAgICAgICAgICBlbGVtZW50RGF0YTogKG9iaiBhcyBhbnkpLmRhdGEsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3QgZW50cmFuY2Ugb2YgZGF0YSkge1xyXG4gICAgICBwb3NNYXAuc2V0KFxyXG4gICAgICAgIGAke2VudHJhbmNlLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlfSR7ZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudE51bWJlcn1gLFxyXG4gICAgICAgIGRhdGEuZmluZChcclxuICAgICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSA9PT0gZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudFR5cGUgJiZcclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXIgPT09XHJcbiAgICAgICAgICAgICAgZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudE51bWJlcixcclxuICAgICAgICApLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgodzogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGVudHJhbmNlUG9zID0gcG9zTWFwLmdldChgJHt3LmVsZW1lbnRUeXBlfSR7dy5lbGVtZW50TnVtYmVyfWApO1xyXG4gICAgICBpZiAoZW50cmFuY2VQb3MpIHtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueCA9IGVudHJhbmNlUG9zLmxlZnQ7XHJcbiAgICAgICAgdy5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBlbnRyYW5jZVBvcy50b3A7XHJcbiAgICAgICAgdy5hbmdsZSA9IGVudHJhbmNlUG9zLmFuZ2xlO1xyXG4gICAgICAgIHcuZGlzdGFuY2UgPSBlbnRyYW5jZVBvcy53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVMYXlvdXQoZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKGVkaXRNb2RlKSB7XHJcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuY29uZmlybUVkaXQoKSkpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkUHVibGlzaCA9IHRoaXMudGFza0luZm8uZGlzYWJsZWQ7XHJcbiAgICAgICAgdGhpcy5sYXlvdXRGb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50YXNrU3R5bGUuZml4dHVyZS5jbGFzcyA9PSBcInJldmlld1BlbmRpbmdcIikge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRQdWJsaXNoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZVwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgZWxlbWVudC5maXh0dXJlcyA9IGVsZW1lbnQuZml4dHVyZXMuZmlsdGVyKFxyXG4gICAgICAgIChmaXh0dXJlOiBhbnkpID0+ICFmaXh0dXJlPy5naG9zdCAmJiBmaXh0dXJlLmZpeHR1cmVOYW1lICE9PSBcInNwYWNlXCIsXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgICAgIC5maWx0ZXIoKGZpeHR1cmU6IGFueSkgPT4gIWZpeHR1cmU/Lmdob3N0KVxyXG4gICAgICAubWFwKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB7IGFzc29jaWF0ZWRFbGVtZW50VHlwZSwgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIsIC4uLnJlc3QgfSA9XHJcbiAgICAgICAgICBmaXh0dXJlO1xyXG4gICAgICAgIHJldHVybiByZXN0O1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMucmVvcmRlckZpeHR1cmUodGhpcy5mbG9vckRhdGEpO1xyXG5cclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgZGF0YTogdGhpcy5mbG9vckRhdGEsXHJcbiAgICAgIGVkaXRNb2RlOiBlZGl0TW9kZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZVN0b3JlUGxhbm8ocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gdXBkYXRlIGxheW91dFwiKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXNzaWduVGFzaygpIHtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgcmVkbzogZmFsc2UsXHJcbiAgICAgIGNoZWNrTGlzdE5hbWU6IFwiXCIsXHJcbiAgICAgIHN0b3JlOiB0aGlzLnBsYW5vRGF0YS5zdG9yZU5hbWUsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLnBsYW5vRGF0YS5jbGllbnRJZCxcclxuICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXRcIikge1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZUxheW91dCgpXHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiTGF5b3V0IFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0LXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkxheW91dCBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgICAgcGF5bG9hZC50YXNrSWQgPVxyXG4gICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjay5sYXlvdXREYXRhW1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmxheW91dERhdGEubGVuZ3RoIC0gMVxyXG4gICAgICAgIF0udGFza0lkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJGaXh0dXJlIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZS1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJGaXh0dXJlIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgICBwYXlsb2FkLnRhc2tJZCA9XHJcbiAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmZpeHR1cmVEYXRhW1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmZpeHR1cmVEYXRhLmxlbmd0aCAtIDFcclxuICAgICAgICBdLnRhc2tJZDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm1cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIlZNIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm0tcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiVk0gVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICAgIHBheWxvYWQudGFza0lkID1cclxuICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2suVm1EYXRhW3RoaXMuc3RvcmVGZWVkYmFjay5WbURhdGEubGVuZ3RoIC0gMV0udGFza0lkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFB1Ymxpc2h0YXNrUG9wdXBDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIHdpbmRvd0NsYXNzOiBcImN1c3RvbS1oZWlnaHQtbW9kYWxcIiwgLy8gPC0tIEFkZCBhIGN1c3RvbSBjbGFzcyBoZXJlXHJcbiAgICB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnR5cGUgPSB0aGlzLnB1Ymxpc2hpbmdTdGF0ZTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmlucHV0RGF0YSA9IHBheWxvYWQ7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInN1Ym1pdFwiKSB7XHJcbiAgICAgICAgbGV0IHRhc2tUeXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtLXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcInZtXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlLXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dC1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJsYXlvdXRcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdC5jb21tZW50cyAmJiByZXN1bHQuY29tbWVudHMgIT0gXCJcIikge1xyXG4gICAgICAgICAgbGV0IGNvbW1lbnRQYXlsb2FkID0ge1xyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgICAgIHRhc2tUeXBlOiB0YXNrVHlwZSxcclxuICAgICAgICAgICAgY29tbWVudDogcmVzdWx0LmNvbW1lbnRzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVHbG9iYWxDb21tZW50KGNvbW1lbnRQYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHt9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5jcmVhdGVUYXNrKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xyXG4gICAgICAgICAgICAgIHRoaXMudGFza0RldGFpbHModGhpcy5mbG9vckRhdGEucGxhbm9JZCwgdGhpcy5mbG9vckRhdGEuX2lkKTtcclxuICAgICAgICAgICAgICB0aGlzLmdldFN0b3JlRmVlZGJhY2soXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QocmVzPy5kYXRhPy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gcHVibGlzaCB0YXNrXCIpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrRWRpdCgpIHtcclxuICAgIGlmICh0aGlzLnRhc2tTdHlsZS5maXh0dXJlLm5hbWUgIT09IFwiQXBwcm92ZWRcIikge1xyXG4gICAgICB0aGlzLnRvZ2dsZVBhbmVsKFwicmlnaHRcIiwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJsZWZ0XCIsIGZhbHNlKTtcclxuXHJcbiAgICAgIHRoaXMuZGlzYWJsZWRQdWJsaXNoID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgIHRoaXMubGF5b3V0Rm9ybS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAgIGBtYW5hZ2UvcGxhbm9ncmFtL21hbmFnZS1yb2xsb3V0P3BsYW5vSWQ9JHt0aGlzLmZsb29yRGF0YS5wbGFub0lkfSZmbG9vcklkPSR7dGhpcy5mbG9vckRhdGEuX2lkfWAsXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0YXNrRGV0YWlscyhwbGFub0lkOiBhbnksIGZsb29ySWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy50YXNrSW5mbyA9IHt9O1xyXG4gICAgICB0aGlzLnRhc2tTdHlsZSA9IHtcclxuICAgICAgICBsYXlvdXQ6IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICAgICAgICBmaXh0dXJlOiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICAgICAgdm06IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFRhc2tJbmZvKHsgcGxhbm9JZCwgZmxvb3JJZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSByZXM/LmRhdGE/LmRpc2FibGVkIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnRhc2tJbmZvID0gcmVzPy5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZWxlLnR5cGUgPT0gXCJsYXlvdXRcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrU3R5bGUubGF5b3V0ID0gdGhpcy5nZXRTdGF0dXMoXCJsYXlvdXRcIik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChlbGUudHlwZSA9PSBcImZpeHR1cmVcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrU3R5bGUuZml4dHVyZSA9IHRoaXMuZ2V0U3RhdHVzKFwiZml4dHVyZVwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGVsZS50eXBlID09IFwiZml4dHVyZVwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tTdHlsZS52bSA9IHRoaXMudGFza1N0eWxlLmZpeHR1cmU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQdWJsaXNoaW5nU3RhdGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBnZXQgdGFzayBkZXRhaWxzXCIpO1xyXG4gICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFN0YXR1cyh0eXBlOiBhbnkpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHM/LmZpbmQoKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSB0eXBlKTtcclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBkYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmXHJcbiAgICAgICAgKGRhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJjb21wbGV0ZVwiIHx8ICFkYXRhPy5mZWVkYmFja1N0YXR1cylcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJBcHByb3ZlZFwiLCBjbGFzczogXCJjb21wbGV0ZWRcIiB9O1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiYgZGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcInBlbmRpbmdcIikge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6IFwiUmV2aWV3IFBlbmRpbmdcIiwgY2xhc3M6IFwicmV2aWV3UGVuZGluZ1wiIH07XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJiBkYXRhLmZlZWRiYWNrU3RhdHVzID09IFwiZGlzYWdyZWVcIikge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6IFwiWWV0IHRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGRhdGEucmVkb1N0YXR1cyAmJiAhZGF0YS5icmVhY2gpIHtcclxuICAgICAgICAgIHJldHVybiB7IG5hbWU6IFwiUmVkb1wiLCBjbGFzczogXCJ0YXNrQXNzaWduZWRcIiB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5icmVhY2gpIHtcclxuICAgICAgICAgIHJldHVybiB7IG5hbWU6IFwiRmxhZ2dlZFwiLCBjbGFzczogXCJmbGFnZ2VkXCIgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJUYXNrIEFzc2lnbmVkXCIsIGNsYXNzOiBcInRhc2tBc3NpZ25lZFwiIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IG5hbWU6IFwiWWV0IHRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH07XHJcbiAgfVxyXG5cclxuICBnZXRFbGVtZW50TnVtYmVyKGdyb3VwOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiBncm91cC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZSA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0Rml4dHVyZShncm91cDogYW55LCBibGluazogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuXHJcbiAgICBjb25zdCByZWFsV2lkdGggPSBncm91cC53aWR0aCEgKiBncm91cC5zY2FsZVghO1xyXG4gICAgY29uc3QgcmVhbEhlaWdodCA9IGdyb3VwLmhlaWdodCEgKiBncm91cC5zY2FsZVkhO1xyXG5cclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBjZW50ZXIueCxcclxuICAgICAgdG9wOiBjZW50ZXIueSxcclxuICAgICAgd2lkdGg6IHJlYWxXaWR0aCArIDgsIC8vIGNvbnNpc3RlbnQgcGFkZGluZ1xyXG4gICAgICBoZWlnaHQ6IHJlYWxIZWlnaHQgKyA4LFxyXG4gICAgICByeDogNSxcclxuICAgICAgcnk6IDUsXHJcbiAgICAgIHN0cm9rZTogXCIjMDBhYWZmXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAzLFxyXG4gICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgYW5nbGU6IGdyb3VwLmFuZ2xlIHx8IDAsXHJcbiAgICAgIG9wYWNpdHk6IGJsaW5rID8gMCA6IDEsXHJcbiAgICB9KTtcclxuXHJcbiAgICAocmVjdCBhcyBhbnkpLmRhdGEgPSB7IHR5cGU6IFwiZml4dHVyZS1oaWdobGlnaHRcIiB9O1xyXG5cclxuICAgIHRoaXMuY2FudmFzLmFkZChyZWN0KTtcclxuICAgIHRoaXMuY2FudmFzLm1vdmVPYmplY3RUbyhyZWN0LCB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMSk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcblxyXG4gICAgdGhpcy5hY3RpdmVIaWdobGlnaHQgPSByZWN0O1xyXG5cclxuICAgIC8vIC0tLSBObyBibGlua2luZyBuZWVkZWQgLS0tXHJcbiAgICBpZiAoIWJsaW5rKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGN5Y2xlcyA9IDA7XHJcblxyXG4gICAgY29uc3QgYmxpbmtPbmNlID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZWN0LmFuaW1hdGUoXHJcbiAgICAgICAgeyBvcGFjaXR5OiAxIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PiB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCksXHJcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlY3QuYW5pbWF0ZShcclxuICAgICAgICAgICAgICB7IG9wYWNpdHk6IDAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6ICgpID0+IHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKSxcclxuICAgICAgICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgY3ljbGVzKys7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjeWNsZXMgPCAyMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJsaW5rT25jZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXQoeyBvcGFjaXR5OiAxIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBibGlua09uY2UoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUhpZ2hsaWdodCgpIHtcclxuICAgIHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmsgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FudmFzPy5nZXRPYmplY3RzKCk/LmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICBpZiAoKG9iaiBhcyBhbnkpLmRhdGE/LnR5cGUgPT09IFwiZml4dHVyZS1oaWdobGlnaHRcIikge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShvYmopO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IG51bGw7XHJcbiAgICB0aGlzLmNhbnZhcz8ucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAga2VlcEhpZ2hsaWdodE9uVG9wID0gKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUhpZ2hsaWdodCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgb2JqcyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIHRoaXMuY2FudmFzLm1vdmVPYmplY3RUbyh0aGlzLmFjdGl2ZUhpZ2hsaWdodCwgb2Jqcy5sZW5ndGggLSAxKTtcclxuICB9O1xyXG5cclxuICBvbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoXHJcbiAgICB7XHJcbiAgICAgIGN1cnJlbnRGaXh0dXJlLFxyXG4gICAgICBhY3Rpb24sXHJcbiAgICB9OiB7XHJcbiAgICAgIGN1cnJlbnRGaXh0dXJlPzogc3RyaW5nO1xyXG4gICAgICBhY3Rpb24/OiBcIm5leHRcIiB8IFwicHJldmlvdXNcIjtcclxuICAgIH0sXHJcbiAgICBjb2xsYXBzZVRhc2tJbmZvOiBib29sZWFuID0gZmFsc2UsXHJcbiAgKSB7XHJcbiAgICBsZXQgaW5kZXhUb1NlbGVjdCA9IGN1cnJlbnRGaXh0dXJlXHJcbiAgICAgID8gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZpbmRJbmRleCgoZjogYW55KSA9PiBmLl9pZCA9PT0gY3VycmVudEZpeHR1cmUpXHJcbiAgICAgIDogMDtcclxuXHJcbiAgICBpZiAoYWN0aW9uID09PSBcIm5leHRcIikge1xyXG4gICAgICBpZiAoaW5kZXhUb1NlbGVjdCA9PSB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGluZGV4VG9TZWxlY3QgPSAwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGluZGV4VG9TZWxlY3QrKztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT09IFwicHJldmlvdXNcIikge1xyXG4gICAgICBpZiAoaW5kZXhUb1NlbGVjdCA9PSAwKSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdCA9IHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5sZW5ndGggLSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGluZGV4VG9TZWxlY3QtLTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICghY3VycmVudEZpeHR1cmUgJiYgIWFjdGlvbikge1xyXG4gICAgICBpbmRleFRvU2VsZWN0ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaXh0dXJlSWRUb1NlbGVjdCA9IHRoaXMuYWxsRml4dHVyZUluc3RhbmNlc1tpbmRleFRvU2VsZWN0XT8uX2lkO1xyXG5cclxuICAgIGNvbnN0IGFjdGlvbkZpeHR1cmUgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maW5kKFxyXG4gICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgIG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSBmaXh0dXJlSWRUb1NlbGVjdCxcclxuICAgICAgKSBhcyBmYWJyaWMuR3JvdXAgfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKCFhY3Rpb25GaXh0dXJlKSByZXR1cm47XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgMzAwKTtcclxuXHJcbiAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUoYWN0aW9uRml4dHVyZSk7XHJcbiAgICB0aGlzLnNlbGVjdEZpeHR1cmVPbkNhbnZhc0NsaWNrKGFjdGlvbkZpeHR1cmUsIGNvbGxhcHNlVGFza0luZm8pO1xyXG4gIH1cclxuXHJcbiAgcmV2b2tlVGFzaygpIHtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgcmVkbzogZmFsc2UsXHJcbiAgICAgIGNoZWNrTGlzdE5hbWU6IFwiXCIsXHJcbiAgICAgIHN0b3JlOiB0aGlzLnBsYW5vRGF0YS5zdG9yZU5hbWUsXHJcbiAgICAgIGNsaWVudElkOiB0aGlzLnBsYW5vRGF0YS5jbGllbnRJZCxcclxuICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0XCIpIHtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJsYXlvdXRcIjtcclxuICAgICAgLy8gdGhpcy51cGRhdGVMYXlvdXQoKVxyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkxheW91dCBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dC1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJMYXlvdXQgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwibGF5b3V0XCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmVcIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkZpeHR1cmUgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwiZml4dHVyZVwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZS1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJGaXh0dXJlIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm1cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIlZNIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcInZtXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bS1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJWTSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJ2bVwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgcGF5bG9hZC50YXNrSWQgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscy5maW5kKFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZS50eXBlID09IHBheWxvYWQudHlwZSxcclxuICAgICk/LnRhc2tJZDtcclxuXHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oU3RvcmVUYXNrUmV2b2tlQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICBzaXplOiBcIm1kXCIsXHJcbiAgICAgIHNjcm9sbGFibGU6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICB3aW5kb3dDbGFzczogXCJjdXN0b20taGVpZ2h0LW1vZGFsXCIsIC8vIDwtLSBBZGQgYSBjdXN0b20gY2xhc3MgaGVyZVxyXG4gICAgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pbnB1dERhdGEgPSBwYXlsb2FkO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJzdWJtaXRcIikge1xyXG4gICAgICAgIGxldCB0YXNrVHlwZSA9IHRoaXMucHVibGlzaGluZ1N0YXRlO1xyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bS1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJ2bVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZS1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXQtcmVkb1wiKSB7XHJcbiAgICAgICAgICB0YXNrVHlwZSA9IFwibGF5b3V0XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQuY29tbWVudHMgJiYgcmVzdWx0LmNvbW1lbnRzICE9IFwiXCIpIHtcclxuICAgICAgICAgIGxldCBjb21tZW50UGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICAgICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgICAgICB0YXNrVHlwZTogdGFza1R5cGUsXHJcbiAgICAgICAgICAgIGNvbW1lbnQ6IHJlc3VsdC5jb21tZW50cyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlR2xvYmFsQ29tbWVudChjb21tZW50UGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7fSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UucmV2b2tlVGFzayhwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRhc2tEZXRhaWxzKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcz8ubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIHB1Ymxpc2ggdGFza1wiKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGlzaCgpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgd2luZG93Q2xhc3M6IFwiY3VzdG9tLWhlaWdodC1tb2RhbFwiLFxyXG4gICAgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9IFwiUHVibGlzaCBwbGFub2dyYW1cIjtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID1cclxuICAgICAgXCJZb3UgYXJlIGFib3V0IHRvIHB1Ymxpc2ggdGhlIHBsYW5vZ3JhbSB0byB0aGUgc3RvcmUuIFRoaXMgd2lsbCBiZSB0aGUgbGF0ZXN0IGFuZCBtb3N0IHVwLXRvLWRhdGUgcGxhbm9ncmFtIGZvciB0aGUgc3RvcmUuXCI7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gXCJwdWJsaXNoXCI7XHJcblxyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzID09IFwib2tcIikge1xyXG4gICAgICAgIGxldCBkYXRhID0gc3RydWN0dXJlZENsb25lKHRoaXMucGxhbm9EYXRhKTtcclxuICAgICAgICBkYXRhLmZsb29ySWQgPSB0aGlzLmZsb29yRGF0YS5faWQ7XHJcbiAgICAgICAgZGF0YS5mbG9vckRhdGEgPSB0aGlzLmZsb29yRGF0YTtcclxuICAgICAgICBkZWxldGUgZGF0YS5mbG9vcnM7XHJcbiAgICAgICAgZGVsZXRlIGRhdGEuZmxvb3JEYXRhLm1hc3RlclRlbXBsYXRlcztcclxuICAgICAgICBsZXQgcGF5bG9hZCA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnB1Ymxpc2gocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLnZlcmlmaWNhdGlvblN0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcz8ubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gcHVibGlzaCBwbGFub1wiKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ29Ub1N0b3JlVG91clBhZ2UoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRQbGFub1N0b3JlVmlkZW9QYXJhbXMoe1xyXG4gICAgICAgICAgc3RvcmVJZDogdGhpcy5wbGFub0RhdGEuc3RvcmVJZCxcclxuICAgICAgICB9KSxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChyZXM/LmRhdGEpIHtcclxuICAgICAgICBsZXQgcGFyYW1zID0gcmVzPy5kYXRhO1xyXG4gICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtcIi9tYW5hZ2UvdHJheC9nYWxsZXJ5XCJdLCB7XHJcbiAgICAgICAgICBxdWVyeVBhcmFtczogcGFyYW1zLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcclxuICAgICAgICB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3Blbk5vVmlkZW9Gb3VuZE1vZGFsKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLm9wZW5Ob1ZpZGVvRm91bmRNb2RhbCgpO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZ29Ub1N0b3JlVG91clBhZ2UgW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9wZW5Ob1ZpZGVvRm91bmRNb2RhbCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5ub1N0b3JlVmlkZW9Nb2RhbFJlZiwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KS5yZXN1bHQ7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge31cclxuICB9XHJcblxyXG4gIGdvVG9TdG9yZUNhbWVyYVBhZ2UoKSB7XHJcbiAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbXCIvbWFuYWdlL3N0b3Jlcy9jYW1lcmFzXCJdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgc3RvcmVJZDogdGhpcy5wbGFub0RhdGEuc3RvcmVJZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcclxuICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZUxpc3QocGxhbm9JZD86IHN0cmluZykge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5nZXRQbGFub1N0b3JlTGlzdCh0aGlzLmNsaWVudElkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSB0aGlzLnN0b3JlTGlzdC5tYXAoKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uZWxlLCBzdG9yZU5hbWU6IGVsZS5zdG9yZU5hbWUudG9VcHBlckNhc2UoKSB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHBsYW5vSWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVOYW1lID0gdGhpcy5zdG9yZUxpc3QuZmluZChcclxuICAgICAgICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlLnBsYW5vSWQudG9TdHJpbmcoKSA9PSBwbGFub0lkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25TZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnBsYW5vRGF0YSA9IG51bGw7XHJcbiAgICB0aGlzLmZsb29yRGF0YSA9IG51bGw7XHJcbiAgICBjb25zdCBuZXdQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xyXG4gICAgbmV3UGFyYW1zLnNldChcInBsYW5vSWRcIiwgZXZlbnQucGxhbm9JZCk7XHJcbiAgICBuZXdQYXJhbXMuc2V0KFwiZmxvb3JJZFwiLCBldmVudC5mbG9vcklkKTtcclxuXHJcbiAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIG5ld1BhcmFtcy50b1N0cmluZygpKTtcclxuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgYXdhaXQgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKGV2ZW50Ll9pZCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhcHBseVBJRExvZ2ljcygpIHt9XHJcblxyXG4gIGFzeW5jIG9uQ2xpY2tBcHBseUxvZ2ljcygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5hcHBseUxvZ2ljc01vZGFsUmVmLCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH0pLnJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7fVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25DbGlja0FwcHJvdmVMYXlvdXQoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMuYXBwcm92ZUxheW91dE1vZGFsUmVmLCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH0pLnJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7fVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYXBwcm92ZUxheW91dCgpIHtcclxuICAgIHRoaXMuaXNCdXR0b25Mb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmbG9vcklkID0gdGhpcy5mbG9vckRhdGEuX2lkO1xyXG5cclxuICAgICAgY29uc3QgcHVibGlzaERhdGEgPSB7XHJcbiAgICAgICAgLi4uc3RydWN0dXJlZENsb25lKHRoaXMucGxhbm9EYXRhKSxcclxuICAgICAgICBmbG9vcklkLFxyXG4gICAgICAgIGZsb29yRGF0YToge1xyXG4gICAgICAgICAgLi4udGhpcy5mbG9vckRhdGEsXHJcbiAgICAgICAgICBtYXN0ZXJUZW1wbGF0ZXM6IHVuZGVmaW5lZCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZsb29yczogdW5kZWZpbmVkLFxyXG4gICAgICB9O1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gcHVibGlzaERhdGE6XCIsIHB1Ymxpc2hEYXRhKTtcclxuXHJcblxyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlU3RvcmVQbGFubyh7XHJcbiAgICAgICAgICAgIGZsb29ySWQsXHJcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZmxvb3JEYXRhLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgKSxcclxuICAgICAgICBmaXJzdFZhbHVlRnJvbSh0aGlzLmFwaVNlcnZpY2UucHVibGlzaChwdWJsaXNoRGF0YSkpLFxyXG4gICAgICAgIGZpcnN0VmFsdWVGcm9tKHRoaXMuYXBpU2VydmljZS5hcHByb3ZlUGxhbm9MYXlvdXQoZmxvb3JJZCkpLFxyXG4gICAgICBdKTtcclxuXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmlzUGxhbm9BcHByb3ZlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChcIkxheW91dCBhcHByb3ZlZCBzdWNjZXNzZnVsbHlcIik7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJhcHByb3ZlTGF5b3V0IGZhaWxlZDpcIiwgZXJyb3IpO1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGFwcHJvdmUgbGF5b3V0XCIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgdGhpcy5pc0J1dHRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cIm1hbmFnZS1wbGFub1wiPlxyXG4gIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiaXNQYWdlTG9hZGluZ1wiIGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG0tMFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyU2tlbGV0b25cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza2VsZXRvbkxvYWRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNrZWxldG9uTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2tlbGV0b25Mb2FkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIENvbnRlbnQgLS0+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1BhZ2VMb2FkaW5nIH1cIj5cclxuICAgIDwhLS0gSGVhZGVyIEFjY29yZGlvbiAtLT5cclxuICAgIDxkaXYgaWQ9XCJoZWFkZXJcIiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiIGNsYXNzPVwibXktNFwiPlxyXG4gICAgICA8ZGl2IG5nYkFjY29yZGlvbkl0ZW09XCJkZXRhaWxzXCIgW2NvbGxhcHNlZF09XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uSGVhZGVyIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweC02IHB5LTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4O21hcmdpbi1sZWZ0OjVweDttYXJnaW4tcmlnaHQ6NXB4XCIgKm5nSWY9XCJwbGFub0RhdGE/LnN0b3JlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSd0aXRsZSc+e3twbGFub0RhdGE/LnN0b3JlTmFtZX19IC0gUGxhbm88L2gyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdC1wbGFubyAqbmdJZj1cInN0b3JlTGlzdD8ubGVuZ3RoXCIgW2lkRmllbGRdPVwiJ19pZCdcIiBbc2VsZWN0ZWRWYWx1ZXNdPVwiW3NlbGVjdGVkU3RvcmVOYW1lXVwiXHJcbiAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJzdG9yZUxpc3RcIiBbbXVsdGldPWZhbHNlIHNlYXJjaEZpZWxkPVwic3RvcmVOYW1lXCIgKHNlbGVjdGVkKT1cIm9uU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9saWItc2VsZWN0LXBsYW5vPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSB7eyBwbGFub0RhdGE/LnN0b3JlTmFtZSB9fSAtLT5cclxuICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgKm5nSWY9XCJwbGFub0RhdGE/LmZsb29ycz8ubGVuZ3RoXCIgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkRmxvb3JJZFwiIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidmbG9vck51bSdcIiBbZGF0YV09XCJwbGFub0RhdGEuZmxvb3JzXCI+XHJcbiAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cy1idG5cIiAoY2xpY2spPVwiZ29Ub1N0b3JlVG91clBhZ2UoKVwiPlxyXG4gICAgICAgICAgICAgIFZpZXcgc3RvcmUgdG91clxyXG5cclxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDA4XzE2NDk4KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzM0I1RkZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUgNEw4IDZMNSA4VjRaXCIgc3Ryb2tlPVwiIzMzQjVGRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80MDhfMTY0OThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXMtYnRuXCIgKGNsaWNrKT1cImdvVG9TdG9yZUNhbWVyYVBhZ2UoKVwiPlxyXG4gICAgICAgICAgICAgIFZpZXcgY2FtZXJhXHJcblxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MjJfMzYzMjEpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk05IDYuNVY5LjVDOSA5Ljc2NTIyIDguODk0NjQgMTAuMDE5NiA4LjcwNzExIDEwLjIwNzFDOC41MTk1NyAxMC4zOTQ2IDguMjY1MjIgMTAuNSA4IDEwLjVIMi41QzIuMjM0NzggMTAuNSAxLjk4MDQzIDEwLjM5NDYgMS43OTI4OSAxMC4yMDcxQzEuNjA1MzYgMTAuMDE5NiAxLjUgOS43NjUyMiAxLjUgOS41VjRDMS41IDMuNzM0NzggMS42MDUzNiAzLjQ4MDQzIDEuNzkyODkgMy4yOTI4OUMxLjk4MDQzIDMuMTA1MzYgMi4yMzQ3OCAzIDIuNSAzSDUuNU03LjUgMS41SDEwLjVNMTAuNSAxLjVWNC41TTEwLjUgMS41TDUgN1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDIyXzM2MzIxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZWRpdEZpeHR1cmVcIiBjbGFzcz1cInVwZGF0ZUNsYXNzXCI+TGFzdCBVcGRhdGU6IHt7Zmxvb3JEYXRhPy51cGRhdGVkQXR9fTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtNCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8IS0tIEVkaXQgRml4dHVyZSBNb2RlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwib25GaXh0dXJlUGFnZUNhbmNlbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJvbkZpeHR1cmVTYXZlKClcIj5cclxuICAgICAgICAgICAgICAgICAgU2F2ZSAmIENsb3NlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgQGlmKCFlZGl0Rml4dHVyZSAmJiBmbG9vckRhdGE/LmlzUGxhbm9BcHByb3ZlZCA9PT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwib25DbGlja0FwcHJvdmVMYXlvdXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsYXlvdXRGb3JtLmVuYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgQXBwcm92ZSBMYXlvdXRcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1AZWxzZXtcclxuICAgICAgICAgICAgICAgIDwhLS0gTm9ybWFsIE1vZGUgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVkaXRGaXh0dXJlICYmICFbJ3Rhc2tBc3NpZ25lZCddLmluY2x1ZGVzKHRhc2tTdHlsZS5maXh0dXJlLmNsYXNzKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIFB1Ymxpc2ggQnV0dG9ucyAtLT5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ2xheW91dCdcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhc3NpZ25UYXNrKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQdWJsaXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUHVibGlzaCBMYXlvdXQgVmVyaWZpY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09PSAnbGF5b3V0LXJlZG8nXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkUHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggTGF5b3V0IFJlZG9cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdmaXh0dXJlJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgICBQdWJsaXNoIEZpeHR1cmUgVmVyaWZpY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09PSAnZml4dHVyZS1yZWRvJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgICBQdWJsaXNoIEZpeHR1cmUgUmVkb1xyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ3ZtJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgICBQdWJsaXNoIFZNIFZlcmlmaWNhdGlvblxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ3ZtLXJlZG8nXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkUHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggVk0gUmVkb1xyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PSAnY29tcGxldGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgY29tcGxldGVkXCIgKm5nSWY9XCJmbG9vckRhdGE/LnZlcmlmaWNhdGlvblN0YXR1c1wiPlB1Ymxpc2hlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWZsb29yRGF0YT8udmVyaWZpY2F0aW9uU3RhdHVzXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHVibGlzaCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUHVibGlzaFxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFJldm9rZSBCdXR0b24gLS0+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmV2b2tlVGFzaygpXCIgKm5nSWY9XCJbJ3Rhc2tBc3NpZ25lZCddLmluY2x1ZGVzKHRhc2tTdHlsZS5maXh0dXJlLmNsYXNzKSAmJiAhZWRpdEZpeHR1cmVcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXJlZCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibWUtMlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF82NDBfNTU5NClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgZD1cIk02LjY2NjY5IDEwLjAwMTNIMTMuMzMzNE0xOC4zMzM0IDEwLjAwMTNDMTguMzMzNCAxNC42MDM3IDE0LjYwMjQgMTguMzM0NiAxMCAxOC4zMzQ2QzUuMzk3NjUgMTguMzM0NiAxLjY2NjY5IDE0LjYwMzcgMS42NjY2OSAxMC4wMDEzQzEuNjY2NjkgNS4zOTg5MyA1LjM5NzY1IDEuNjY3OTcgMTAgMS42Njc5N0MxNC42MDI0IDEuNjY3OTcgMTguMzMzNCA1LjM5ODkzIDE4LjMzMzQgMTAuMDAxM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzY0MF81NTk0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgUmV2b2tlXHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgIDxidXR0b24gbmdiQWNjb3JkaW9uQnV0dG9uPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5PlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwiaGVhZGVyXCIgY2xhc3M9XCJyb3cgbXgtMCBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgIDwhLS0gUGxhbm8gQ29tcGxldGlvbiAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY3Vyc29yOiB1bnNldDtcIiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIFBsYW5vIENvbXBsZXRpb24gJVxyXG4gICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXA9XCIlIG9mIG92ZXJhbGwgcGxhbm9ncmFtIGNvbXBsZXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE1MTdfMTI5ODA1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk05IDEyVjlNOSA2SDkuMDA3NU0xNi41IDlDMTYuNSAxMy4xNDIxIDEzLjE0MjEgMTYuNSA5IDE2LjVDNC44NTc4NiAxNi41IDEuNSAxMy4xNDIxIDEuNSA5QzEuNSA0Ljg1Nzg2IDQuODU3ODYgMS41IDkgMS41QzEzLjE0MjEgMS41IDE2LjUgNC44NTc4NiAxNi41IDlaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE1MTdfMTI5ODA1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiBzdHlsZT1cImhlaWdodDogNHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCIgW25nQ2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGFza0luZm8/LnBsYW5vUHJvZ3Jlc3MgPD0gNTBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2JnLXdhcm5pbmcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRhc2tJbmZvPy5wbGFub1Byb2dyZXNzID09PSA3NVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYmctcHJpbWFyeSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2JnLXN1Y2Nlc3MnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIHJvbGU9XCJwcm9ncmVzc2JhclwiIFtzdHlsZV09XCInd2lkdGg6JyArIHRhc2tJbmZvPy5wbGFub1Byb2dyZXNzICsgJyUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS12YWx1ZW5vd109XCJ0YXNrSW5mbz8ucGxhbm9Qcm9ncmVzc1wiIGFyaWEtdmFsdWVtaW49XCIwXCIgYXJpYS12YWx1ZW1heD1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj57eyB0YXNrSW5mbz8ucGxhbm9Qcm9ncmVzcyB9fSU8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIExheW91dCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY3Vyc29yOiB1bnNldDtcIiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgICAgICAgICAgICA8aDM+PGI+e3sgc3RvcmVNZXRyaWNzLmZsb29yQ291bnQgfX08L2I+IExheW91dDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kaWNhdG9yIG10LTJcIiBbbmdDbGFzc109XCJ0YXNrU3R5bGUubGF5b3V0LmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiIFtoaWRkZW5dPVwidGFza1N0eWxlLmxheW91dC5uYW1lICE9PSAnUmVkbydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDk4NF8yNzU2OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuNSAyLjAwMDc3VjUuMDAwNzdNMC41IDUuMDAwNzdIMy41TTAuNSA1LjAwMDc3TDIuODIgMi44MjA3N0MzLjM1NzM3IDIuMjgzMTMgNC4wMjIxOSAxLjg5MDM3IDQuNzUyNCAxLjY3OTE2QzUuNDgyNjIgMS40Njc5NCA2LjI1NDQ1IDEuNDQ1MTUgNi45OTU4NiAxLjYxMjlDNy43MzcyNyAxLjc4MDY1IDguNDI0MSAyLjEzMzQ5IDguOTkyMjcgMi42Mzg0OEM5LjU2MDQzIDMuMTQzNDcgOS45OTE0MiAzLjc4NDE2IDEwLjI0NSA0LjUwMDc3TTExLjUgMTAuMDAwOFY3LjAwMDc3TTExLjUgNy4wMDA3N0g4LjVNMTEuNSA3LjAwMDc3TDkuMTggOS4xODA3N0M4LjY0MjYzIDkuNzE4NDEgNy45Nzc4MSAxMC4xMTEyIDcuMjQ3NiAxMC4zMjI0QzYuNTE3MzggMTAuNTMzNiA1Ljc0NTU1IDEwLjU1NjQgNS4wMDQxNCAxMC4zODg2QzQuMjYyNzMgMTAuMjIwOSAzLjU3NTkgOS44NjgwNSAzLjAwNzczIDkuMzYzMDZDMi40Mzk1NyA4Ljg1ODA3IDIuMDA4NTggOC4yMTczOCAxLjc1NSA3LjUwMDc3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjN0E1QUY4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80OTg0XzI3NTY5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInRhc2tTdHlsZS5sYXlvdXQubmFtZSAhPT0gJ0ZsYWdnZWQnXCIgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIgNy41QzIgNy41IDIuNSA3IDQgN0M1LjUgNyA2LjUgOCA4IDhDOS41IDggMTAgNy41IDEwIDcuNVYxLjVDMTAgMS41IDkuNSAyIDggMkM2LjUgMiA1LjUgMSA0IDFDMi41IDEgMiAxLjUgMiAxLjVWNy41Wk0yIDcuNVYxMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHRhc2tTdHlsZS5sYXlvdXQubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRml4dHVyZXMgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImN1cnNvcjogdW5zZXQ7XCIgY2xhc3M9XCJjb2wgZmlsdGVyLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAgPGgzPjxiPnt7IHN0b3JlTWV0cmljcy5maXh0dXJlQ291bnQgfX08L2I+IEZpeHR1cmVzPC9oMz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgbXQtMlwiIFtuZ0NsYXNzXT1cInRhc2tTdHlsZS5maXh0dXJlLmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiIFtoaWRkZW5dPVwidGFza1N0eWxlLmZpeHR1cmUubmFtZSAhPT0gJ1JlZG8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQ5ODRfMjc1NjkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0wLjUgMi4wMDA3N1Y1LjAwMDc3TTAuNSA1LjAwMDc3SDMuNU0wLjUgNS4wMDA3N0wyLjgyIDIuODIwNzdDMy4zNTczNyAyLjI4MzEzIDQuMDIyMTkgMS44OTAzNyA0Ljc1MjQgMS42NzkxNkM1LjQ4MjYyIDEuNDY3OTQgNi4yNTQ0NSAxLjQ0NTE1IDYuOTk1ODYgMS42MTI5QzcuNzM3MjcgMS43ODA2NSA4LjQyNDEgMi4xMzM0OSA4Ljk5MjI3IDIuNjM4NDhDOS41NjA0MyAzLjE0MzQ3IDkuOTkxNDIgMy43ODQxNiAxMC4yNDUgNC41MDA3N00xMS41IDEwLjAwMDhWNy4wMDA3N00xMS41IDcuMDAwNzdIOC41TTExLjUgNy4wMDA3N0w5LjE4IDkuMTgwNzdDOC42NDI2MyA5LjcxODQxIDcuOTc3ODEgMTAuMTExMiA3LjI0NzYgMTAuMzIyNEM2LjUxNzM4IDEwLjUzMzYgNS43NDU1NSAxMC41NTY0IDUuMDA0MTQgMTAuMzg4NkM0LjI2MjczIDEwLjIyMDkgMy41NzU5IDkuODY4MDUgMy4wMDc3MyA5LjM2MzA2QzIuNDM5NTcgOC44NTgwNyAyLjAwODU4IDguMjE3MzggMS43NTUgNy41MDA3N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzdBNUFGOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDk4NF8yNzU2OVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gW2hpZGRlbl09XCJ0YXNrU3R5bGUuZml4dHVyZS5uYW1lICE9PSAnRmxhZ2dlZCdcIiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMiA3LjVDMiA3LjUgMi41IDcgNCA3QzUuNSA3IDYuNSA4IDggOEM5LjUgOCAxMCA3LjUgMTAgNy41VjEuNUMxMCAxLjUgOS41IDIgOCAyQzYuNSAyIDUuNSAxIDQgMUMyLjUgMSAyIDEuNSAyIDEuNVY3LjVaTTIgNy41VjExXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgdGFza1N0eWxlLmZpeHR1cmUubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVmlzdWFsIE1lcmNoYW5kaXNlIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjdXJzb3I6IHVuc2V0O1wiIGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgICAgICAgICAgIDxoMz48Yj57eyBzdG9yZU1ldHJpY3Mudm1Db3VudCB9fTwvYj4gVmlzdWFsIE1lcmNoYW5kaXNlPC9oMz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgbXQtMlwiIFtuZ0NsYXNzXT1cInRhc2tTdHlsZS52bS5jbGFzc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTJcIiBbaGlkZGVuXT1cInRhc2tTdHlsZS52bS5uYW1lICE9PSAnUmVkbydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDk4NF8yNzU2OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuNSAyLjAwMDc3VjUuMDAwNzdNMC41IDUuMDAwNzdIMy41TTAuNSA1LjAwMDc3TDIuODIgMi44MjA3N0MzLjM1NzM3IDIuMjgzMTMgNC4wMjIxOSAxLjg5MDM3IDQuNzUyNCAxLjY3OTE2QzUuNDgyNjIgMS40Njc5NCA2LjI1NDQ1IDEuNDQ1MTUgNi45OTU4NiAxLjYxMjlDNy43MzcyNyAxLjc4MDY1IDguNDI0MSAyLjEzMzQ5IDguOTkyMjcgMi42Mzg0OEM5LjU2MDQzIDMuMTQzNDcgOS45OTE0MiAzLjc4NDE2IDEwLjI0NSA0LjUwMDc3TTExLjUgMTAuMDAwOFY3LjAwMDc3TTExLjUgNy4wMDA3N0g4LjVNMTEuNSA3LjAwMDc3TDkuMTggOS4xODA3N0M4LjY0MjYzIDkuNzE4NDEgNy45Nzc4MSAxMC4xMTEyIDcuMjQ3NiAxMC4zMjI0QzYuNTE3MzggMTAuNTMzNiA1Ljc0NTU1IDEwLjU1NjQgNS4wMDQxNCAxMC4zODg2QzQuMjYyNzMgMTAuMjIwOSAzLjU3NTkgOS44NjgwNSAzLjAwNzczIDkuMzYzMDZDMi40Mzk1NyA4Ljg1ODA3IDIuMDA4NTggOC4yMTczOCAxLjc1NSA3LjUwMDc3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjN0E1QUY4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80OTg0XzI3NTY5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInRhc2tTdHlsZS52bS5uYW1lICE9PSAnRmxhZ2dlZCdcIiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMiA3LjVDMiA3LjUgMi41IDcgNCA3QzUuNSA3IDYuNSA4IDggOEM5LjUgOCAxMCA3LjUgMTAgNy41VjEuNUMxMCAxLjUgOS41IDIgOCAyQzYuNSAyIDUuNSAxIDQgMUMyLjUgMSAyIDEuNSAyIDEuNVY3LjVaTTIgNy41VjExXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgdGFza1N0eWxlLnZtLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDwhLS0gQm9keSAtLT5cclxuICAgIDxkaXYgaWQ9XCJib2R5XCIgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPCEtLSBMZWZ0IENvbHVtbiAtLT5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdjb2xsYXBzZWQtY29sJzogaXNMZWZ0UGFuZWxDb2xsYXBzZWQsICdjb2wtMyc6ICFpc0xlZnRQYW5lbENvbGxhcHNlZCwnZC1ub25lJzogZWRpdEZpeHR1cmUgIH1cIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicy1jYXJkXCI+XHJcbiAgICAgICAgICA8Zm9ybSBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc0xlZnRQYW5lbENvbGxhcHNlZCB9XCIgW2Zvcm1Hcm91cF09XCJsYXlvdXRGb3JtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uIGFjY29yZGlvbj1cIk5nYkFjY29yZGlvblwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gV2FsbHMgU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Rm9ybVdhbGxzLmNvbnRyb2xzLmxlbmd0aDsgZWxzZSBhZGRXYWxsQWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJ3YWxsc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBncm91cCBvZiBnZXRGb3JtV2FsbHMuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImlcIiBbbmdiQWNjb3JkaW9uSXRlbV09XCJpLnRvU3RyaW5nKClcIiBjbGFzcz1cIm1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWFpbmhlYWRpbmcgcC0wXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgd2FsbC1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBncm91cC5nZXQoXCJlbGVtZW50VHlwZVwiKT8udmFsdWUgfCB0aXRsZWNhc2UgfX0ge3sgZ3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYobGF5b3V0Rm9ybS5lbmFibGVkKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0xXCIgbmdiVG9vbHRpcD1cIlJvdGF0ZSB0aGlzIHdhbGwuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicm90YXRlV2FsbChnZXRFbGVtZW50TnVtYmVyKGdyb3VwKSEpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMy43MzczNSA4LjI1MDExQzQuMTIxOTMgOC4yNDM2MiA0LjQ0Mzc3IDguNTI3NzYgNC40OTMzOCA4Ljg5OTk4TDQuNDk5OSA4Ljk4NzM1TDQuNTAyNjIgOS4xNTUxNkM0LjU4NDM0IDExLjU3NDEgNi41NzI0MyAxMy41IDkgMTMuNUM5LjE0MDIyIDEzLjUgOS4yNzk1MSAxMy40OTM2IDkuNDE3NTYgMTMuNDgwOUw5LjIxOTY3IDEzLjI4MDNDOC45MjY3OCAxMi45ODc0IDguOTI2NzggMTIuNTEyNiA5LjIxOTY3IDEyLjIxOTdDOS41MTI1NyAxMS45MjY4IDkuOTg3NDQgMTEuOTI2OCAxMC4yODAzIDEyLjIxOTdMMTEuNzgwMyAxMy43MTk3QzEyLjA3MzIgMTQuMDEyNiAxMi4wNzMyIDE0LjQ4NzQgMTEuNzgwMyAxNC43ODAzTDEwLjI4MDMgMTYuMjgwM0M5Ljk4NzQ0IDE2LjU3MzIgOS41MTI1NyAxNi41NzMyIDkuMjE5NjcgMTYuMjgwM0M4LjkyNjc4IDE1Ljk4NzQgOC45MjY3OCAxNS41MTI2IDkuMjE5NjcgMTUuMjE5N0w5LjQ1ODM3IDE0Ljk4MjdDOS4zMDY0NiAxNC45OTQyIDkuMTUzNTkgMTUgOSAxNUM1LjgyNjUzIDE1IDMuMjE2NjUgMTIuNTMyMSAzLjAxMjUgOS4zODI4OUwzLjAwMzE1IDkuMTkzMTRMMy4wMDAxMSA5LjAxMjY1QzIuOTkzMTIgOC41OTg0OSAzLjMyMzIgOC4yNTcwOSAzLjczNzM1IDguMjUwMTFaTTguNzgwMzMgMS43MTk2N0M5LjA1MDcgMS45OTAwMyA5LjA3MTQ5IDIuNDE1NDYgOC44NDI3MiAyLjcwOTY3TDguNzgwMzMgMi43ODAzM0w4LjU0MTg3IDMuMDE3MjZDOC42OTM3MSAzLjAwNTc4IDguODQ2NSAzIDkgM0MxMi4zMTM3IDMgMTUgNS42ODYyOSAxNSA5QzE1IDkuNDE0MjEgMTQuNjY0MiA5Ljc1IDE0LjI1IDkuNzVDMTMuODM1OCA5Ljc1IDEzLjUgOS40MTQyMSAxMy41IDlDMTMuNSA2LjUxNDcyIDExLjQ4NTMgNC41IDkgNC41QzguODU5NyA0LjUgOC43MjAzNCA0LjUwNjQgOC41ODIyMSA0LjUxOTA5TDguNzgwMzMgNC43MTk2N0M5LjA3MzIzIDUuMDEyNTYgOS4wNzMyMyA1LjQ4NzQ0IDguNzgwMzMgNS43ODAzM0M4LjUwOTk3IDYuMDUwNjkgOC4wODQ1NSA2LjA3MTQ5IDcuNzkwMzMgNS44NDI3Mkw3LjcxOTY3IDUuNzgwMzNMNi4yMTk2NyA0LjI4MDMzQzUuOTQ5MzEgNC4wMDk5NyA1LjkyODUxIDMuNTg0NTQgNi4xNTcyOCAzLjI5MDMzTDYuMjE5NjcgMy4yMTk2N0w3LjcxOTY3IDEuNzE5NjdDOC4wMTI1NyAxLjQyNjc4IDguNDg3NDQgMS40MjY3OCA4Ljc4MDMzIDEuNzE5NjdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0NzU0NjdcIiBzdHJva2U9XCIjNDc1NDY3XCIgc3Ryb2tlLXdpZHRoPVwiMC4wMDA2NFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0xXCIgbmdiVG9vbHRpcD1cIkluc2VydCBuZXcgd2FsbCBiZWxvdy5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdXYWxsKGdldEVsZW1lbnROdW1iZXIoZ3JvdXApISk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNjJfOClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgOS43NUMxMS4wNzA3IDkuNzUgMTIuNzUgMTEuNDI5MyAxMi43NSAxMy41QzEyLjc1IDE1LjU3MDggMTEuMDcwNyAxNy4yNSA5IDE3LjI1QzYuOTI5MjUgMTcuMjUgNS4yNSAxNS41NzA4IDUuMjUgMTMuNUM1LjI1IDExLjQyOTMgNi45MjkyNSA5Ljc1IDkgOS43NVpNOS43NSAxMS4yNUg4LjI1VjEyLjc0OTNMNi43NSAxMi43NVYxNC4yNUw4LjI1IDE0LjI0OTNWMTUuNzVIOS43NVYxNC4yNDkzTDExLjI1IDE0LjI1VjEyLjc1TDkuNzUgMTIuNzQ5M1YxMS4yNVpNMTUgMi4yNUMxNS40MTQgMi4yNSAxNS43NSAyLjU4NiAxNS43NSAzVjcuNUMxNS43NSA3LjkxNCAxNS40MTQgOC4yNSAxNSA4LjI1SDNDMi41ODYgOC4yNSAyLjI1IDcuOTE0IDIuMjUgNy41VjNDMi4yNSAyLjU4NiAyLjU4NiAyLjI1IDMgMi4yNUgxNVpNMy43NSAzLjc1VjYuNzVIMTQuMjVWMy43NUgzLjc1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiM0NzU0NjdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzYyXzhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMVwiIG5nYlRvb2x0aXA9XCJSZW1vdmUgdGhpcyB3YWxsIGFuZCBpdHMgZml4dHVyZXMuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlV2FsbChnZXRFbGVtZW50TnVtYmVyKGdyb3VwKSEpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzYzXzI1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNzA5NCAxLjVDMTEuMzU1MSAxLjUgMTEuOTI4MyAxLjkxMzE0IDEyLjEzMjQgMi41MjU2NUwxMi41NDA2IDMuNzVIMTVDMTUuNDE0MiAzLjc1IDE1Ljc1IDQuMDg1NzkgMTUuNzUgNC41QzE1Ljc1IDQuOTE0MiAxNS40MTQyIDUuMjQ5OTkgMTUgNS4yNUwxNC45OTgxIDUuMzAzNDRMMTQuMzQ3NiAxNC40MTAzQzE0LjI2MzUgMTUuNTg3OCAxMy4yODM4IDE2LjUgMTIuMTAzNCAxNi41SDUuODk2NjhDNC43MTYyNCAxNi41IDMuNzM2NSAxNS41ODc4IDMuNjUyNCAxNC40MTAzTDMuMDAxOTEgNS4zMDM0NEMzLjAwMDYyIDUuMjg1NTEgMi45OTk5OCA1LjI2NzY5IDIuOTk5OTcgNS4yNUMyLjU4NTc3IDUuMjQ5OTkgMi4yNSA0LjkxNDIgMi4yNSA0LjVDMi4yNSA0LjA4NTc5IDIuNTg1NzkgMy43NSAzIDMuNzVINS40NTk0M0w1Ljg2NzU0IDIuNTI1NjVDNi4wNzE3MiAxLjkxMzE0IDYuNjQ0OTMgMS41IDcuMjkwNTcgMS41SDEwLjcwOTRaTTEzLjQ5ODEgNS4yNUg0LjUwMTkxTDUuMTQ4NTggMTQuMzAzNEM1LjE3NjYyIDE0LjY5NiA1LjUwMzIgMTUgNS44OTY2OCAxNUgxMi4xMDM0QzEyLjQ5NjggMTUgMTIuODIzNCAxNC42OTYgMTIuODUxNCAxNC4zMDM0TDEzLjQ5ODEgNS4yNVpNNy41IDcuNUM3Ljg4NDY0IDcuNSA4LjIwMTYzIDcuNzg5NTIgOC4yNDQ5NSA4LjE2MjUzTDguMjUgOC4yNVYxMkM4LjI1IDEyLjQxNDIgNy45MTQyMiAxMi43NSA3LjUgMTIuNzVDNy4xMTUzNyAxMi43NSA2Ljc5ODM3IDEyLjQ2MDUgNi43NTUwNSAxMi4wODc1TDYuNzUgMTJWOC4yNUM2Ljc1IDcuODM1NzggNy4wODU3OCA3LjUgNy41IDcuNVpNMTAuNSA3LjVDMTAuOTE0MiA3LjUgMTEuMjUgNy44MzU3OCAxMS4yNSA4LjI1VjEyQzExLjI1IDEyLjQxNDIgMTAuOTE0MiAxMi43NSAxMC41IDEyLjc1QzEwLjA4NTggMTIuNzUgOS43NSAxMi40MTQyIDkuNzUgMTJWOC4yNUM5Ljc1IDcuODM1NzggMTAuMDg1OCA3LjUgMTAuNSA3LjVaTTEwLjcwOTQgM0g3LjI5MDU3TDcuMDQwNTcgMy43NUgxMC45NTk1TDEwLjcwOTQgM1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjRjMyQjJCXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF82M18yNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGl2aWRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQm9keSBjbGFzcz1cInBzLTAgcGUtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtaW4taGVpZ2h0OiA1MHB4XCIgZG5kRHJvcHpvbmUgKGRuZERyb3ApPVwib25Ecm9wKCRldmVudCwgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaXh0dXJlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldEZvcm1GaXh0dXJlcyhpKS5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmaXh0dXJlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRGb3JtRml4dHVyZXMoaSkuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkbmREcm9wem9uZSAoZG5kRHJvcCk9XCJvbkRyb3AoJGV2ZW50LCBpLCBqKVwiIFtmb3JtR3JvdXBOYW1lXT1cImpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkbmREcmFnZ2FibGVdPVwieyB3YWxsSW5kZXg6IGksIGZpeHR1cmVJbmRleDogaiB9XCIgW2RuZEVmZmVjdEFsbG93ZWRdPVwiJ2FsbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93IGctMCBtYi01XCIgW2RuZERpc2FibGVEcmFnSWZdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBkbmREcmFnSW1hZ2VSZWZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyBjdXJzb3I6IGxheW91dEZvcm0uZGlzYWJsZWQgPyAnZGVmYXVsdCcgOiAnbW92ZScsIG9wYWNpdHk6ICcwLjUnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjVweFwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJtIDQuNDk2MDk0IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gLTYgNiBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAtNiA2IGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDAgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiZ3JleVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImZpeHR1cmVDb25maWdJZFwiIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInbmFtZSdcIiBbZGF0YV09XCJmaXh0dXJlVGVtcGxhdGVzXCIgW2xhYmVsXT1cIidGaXh0dXJlICcgKyAoaiArIDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N1YlRleHRGaWVsZF09XCInc3VidGV4dCdcIiBbc2VhcmNoXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiZGVsZXRlRml4dHVyZSgnd2FsbCcsIGosIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogMThweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDFMMSA5TTEgMUw5IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1idG5cIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3Rml4dHVyZSgnd2FsbCcsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggZGFzaGVkICMwMDAwMDA7XCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gT3RoZXIgRWxlbWVudHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRXYWxsT3RoZXJFbGVtZW50cyhpKS5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJvdGhlckVsZW1lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaXh0dXJlIG9mIGdldFdhbGxPdGhlckVsZW1lbnRzKGkpLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwialwiIGNsYXNzPVwicm93IGctMCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+RWxlbWVudCB7eyBqICsgMSB9fTwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEcm9wZG93biBib3VuZCB0byAndHlwZScgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwib3RoZXJFbGVtZW50TGlzdFwiIFtpZF09XCInZWxlbWVudExhYmVsJyArIGpcIiBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTaG93IGN1c3RvbSB0ZXh0IGlucHV0IG9ubHkgd2hlbiAnT3RoZXJzJyBpcyBzZWxlY3RlZCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIihmaXh0dXJlLmdldCgndHlwZScpPy52YWx1ZSkgPT09ICdPdGhlcnMnXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBtdC0yXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgY3VzdG9tIGVsZW1lbnQgbmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cInJlbW92ZU90aGVyRWxlbWVudCgnd2FsbCcsIGosIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogMThweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDFMMSA5TTEgMUw5IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1idG5cIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3T3RoZXJFbGVtZW50cygnd2FsbCcsIGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2FkZFdhbGxBY3Rpb24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGROZXdXYWxsKDApXCIgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IHctMTAwIHAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICBJbnNlcnQgbmV3IHdhbGxcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgIDxociBzdHlsZT1cImJvcmRlci10b3A6IDFweCBkYXNoZWQgIzAwMDAwMDtcIiAvPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEZsb29yIFNlY3Rpb24gLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBbbmdiQWNjb3JkaW9uSXRlbV09XCInZmxvb3InXCIgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCIgbmdiQWNjb3JkaW9uSGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm1haW5oZWFkaW5nIHAtMFwiIG5nYkFjY29yZGlvbkJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTIgd2FsbC1sYWJlbFwiPkZsb29yPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5IGNsYXNzPVwicHMtMCBwZS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDUwcHhcIiBkbmREcm9wem9uZSAoZG5kRHJvcCk9XCJvbkRyb3AoJGV2ZW50LCAnZmxvb3InKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZsb29yIEZpeHR1cmVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Rm9ybUZsb29yRml4dHVyZXMuY29udHJvbHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmb3JtQXJyYXlOYW1lPVwiZmxvb3JGaXh0dXJlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRGb3JtRmxvb3JGaXh0dXJlcy5jb250cm9sczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRuZERyb3B6b25lIChkbmREcm9wKT1cIm9uRHJvcCgkZXZlbnQsICdmbG9vcicsIGopXCIgW2Zvcm1Hcm91cE5hbWVdPVwialwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZERyYWdnYWJsZV09XCJ7IHdhbGxJbmRleDogJ2Zsb29yJywgZml4dHVyZUluZGV4OiBqIH1cIiBbZG5kRWZmZWN0QWxsb3dlZF09XCInYWxsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZERpc2FibGVEcmFnSWZdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiIGNsYXNzPVwicm93IGctMCBtYi01XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGRuZERyYWdJbWFnZVJlZiBzdHlsZT1cImN1cnNvcjogbW92ZTsgb3BhY2l0eTogMC41XCIgd2lkdGg9XCIyNXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwibSA0LjQ5NjA5NCAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIC02IDYgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gLTYgNiBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAwIDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImdyZXlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmaXh0dXJlQ29uZmlnSWRcIiBbaWRGaWVsZF09XCInX2lkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ25hbWUnXCIgW2RhdGFdPVwiZml4dHVyZVRlbXBsYXRlc1wiIFtsYWJlbF09XCInRml4dHVyZSAnICsgKGogKyAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hdPVwidHJ1ZVwiIFtzdWJUZXh0RmllbGRdPVwiJ3N1YnRleHQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1yZWFjdGl2ZS1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImRlbGV0ZUZpeHR1cmUoJ2Zsb29yJywgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiAxOHB4XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDFMMSA5TTEgMUw5IDlcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibGluay1idG5cIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkTmV3Rml4dHVyZSgnZmxvb3InKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGZpeHR1cmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGhyIHN0eWxlPVwiYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjMDAwMDAwO1wiIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZsb29yIE90aGVyIEVsZW1lbnRzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmbG9vck90aGVyRWxlbWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpeHR1cmUgb2YgZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5jb250cm9sczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtmb3JtR3JvdXBOYW1lXT1cImpcIiBjbGFzcz1cInJvdyBnLTAgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbWItMVwiPkVsZW1lbnQge3sgaiArIDEgfX08L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gZm9yIHR5cGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCBbaWRGaWVsZF09XCIndmFsdWUnXCIgW25hbWVGaWVsZF09XCInbGFiZWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwib3RoZXJFbGVtZW50TGlzdFwiIFtpZF09XCInZmxvb3JFbGVtZW50TGFiZWwnICsgalwiIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENvbmRpdGlvbmFsIGlucHV0IGZvciBjdXN0b20gbmFtZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIihmaXh0dXJlLmdldCgndHlwZScpPy52YWx1ZSkgPT09ICdPdGhlcnMnXCIgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBtdC0yXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VzdG9tTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgY3VzdG9tIGVsZW1lbnQgbmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1lbmQganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cInJlbW92ZU90aGVyRWxlbWVudCgnZmxvb3InLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDEwIDEwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMUwxIDlNMSAxTDkgOVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJsaW5rLWJ0blwiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdPdGhlckVsZW1lbnRzKCdmbG9vcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIENlbnRlciBDb2x1bW4gLS0+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgb3ZlcmZsb3ctaGlkZGVuIHBvc2l0aW9uLXJlbGF0aXZlXCIgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogZWRpdEZpeHR1cmUgfVwiPlxyXG4gICAgICAgIDxkaXYgaWQ9XCJjYW52YXMtY2FyZFwiIGNsYXNzPVwiYy1jYXJkIHBvc2l0aW9uLXJlbGF0aXZlXCIgI2NhbnZhc0NvbnRhaW5lcj5cclxuICAgICAgICAgIDwhLS0gQ2FudmFzIFZpZXcgLS0+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IHNlbGVjdGVkVmlldyA9PT0gJ3RyZWUnIH1cIj5cclxuICAgICAgICAgICAgPGNhbnZhcyBpZD1cImJhc2UtY2FudmFzXCIgI2Jhc2VDYW52YXM+PC9jYW52YXM+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFRyZWUgVmlldyAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFZpZXcgPT09ICd0cmVlJ1wiIGNsYXNzPVwidy0xMDBcIj5cclxuICAgICAgICAgICAgPHN0b3JlLXBsYW5vLXRyZWUtdmlldyBbYWxsRml4dHVyZV09XCJhbGxGaXh0dXJlc1wiPjwvc3RvcmUtcGxhbm8tdHJlZS12aWV3PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBUb3AgQ29udHJvbHMgLS0+XHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPVwidG9wOiAyNHB4OyBsZWZ0OiAyNnB4OyBwb3NpdGlvbjogYWJzb2x1dGU7XCIgaWQ9XCJzZWdtZW50LWJ0blwiIGNsYXNzPVwicGItNVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBnYXAtNFwiPlxyXG4gICAgICAgICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBjdXN0b20tdGFicyBkLWZsZXhcIiBzdHlsZT1cIndpZHRoOiAyMDBweDsgbWFyZ2luOiAwXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBmbGV4LWZpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5hdi1saW5rIHctMTAwIGgtMTAwXCIgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09ICdkZXRhaWwnXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gJ2RldGFpbCdcIj5cclxuICAgICAgICAgICAgICAgICAgICBEZXRhaWwgVmlld1xyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBmbGV4LWZpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm5hdi1saW5rIHctMTAwIGgtMTAwXCIgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZFZpZXcgPT09ICd0cmVlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVmlldyA9ICd0cmVlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRyZWUgVmlld1xyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFBJRCBBbGxvY2F0aW9uIC0tPlxyXG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiIHN0eWxlPVwidG9wOiAyNHB4OyBsZWZ0OiAyMzRweFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGU9XCJwYWRkaW5nOiA5cHggMTlweCAhaW1wb3J0YW50O1wiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgYmctd2hpdGUgc2hhZG93LXNtXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0RW50cmFuY2VzPy5sZW5ndGggPj0gMlwiIChjbGljayk9XCJvbkNsaWNrQXBwbHlMb2dpY3MoKVwiPlxyXG4gICAgICAgICAgICAgIEFwcGx5IExvZ2ljc1xyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PiAtLT5cclxuXHJcbiAgICAgICAgICA8IS0tIEVudHJhbmNlIEJ1dHRvbiAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYXlvdXRGb3JtLmVuYWJsZWRcIiBuZ2JUb29sdGlwPVwiWW91IGNhbiBhZGQgdXAgdG8gdHdvIGVudHJhbmNlcy5cIiBzdHlsZT1cInRvcDogMjRweDsgbGVmdDogMjM0cHhcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCIgW2Rpc2FibGVUb29sdGlwXT1cImdldEVudHJhbmNlcz8ubGVuZ3RoIDwgMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBzdHlsZT1cInBhZGRpbmc6IDlweCAxOXB4ICFpbXBvcnRhbnQ7XCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldEVudHJhbmNlcz8ubGVuZ3RoID49IDJcIiAoY2xpY2spPVwiYWRkTmV3RW50cmFuY2UoKVwiPlxyXG4gICAgICAgICAgICAgIEFkZCBFbnRyYW5jZVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYXlvdXRGb3JtLmVuYWJsZWRcIiBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDE5MHB4XCIgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEVkaXQoKVwiPlxyXG4gICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICA8IS0tIEVkaXQgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUVkaXQgfHwgWyd0YXNrQXNzaWduZWQnLCdyZXZpZXdQZW5kaW5nJ10uaW5jbHVkZXModGFza1N0eWxlLmZpeHR1cmUuY2xhc3MpXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDI0cHg7IHJpZ2h0OiAxNjRweFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHBvc2l0aW9uLWFic29sdXRlIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRWRpdCgpXCI+XHJcbiAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTMyMl81MzI1KVwiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0xNC4xNjY3IDIuNDk5OTNDMTQuMzg1NiAyLjI4MTA2IDE0LjY0NTUgMi4xMDc0NCAxNC45MzE0IDEuOTg4OTlDMTUuMjE3NCAxLjg3MDU0IDE1LjUyMzkgMS44MDk1NyAxNS44MzM0IDEuODA5NTdDMTYuMTQyOSAxLjgwOTU3IDE2LjQ0OTQgMS44NzA1NCAxNi43MzU0IDEuOTg4OTlDMTcuMDIxNCAyLjEwNzQ0IDE3LjI4MTIgMi4yODEwNiAxNy41MDAxIDIuNDk5OTNDMTcuNzE5IDIuNzE4OCAxNy44OTI2IDIuOTc4NjMgMTguMDExIDMuMjY0NkMxOC4xMjk1IDMuNTUwNTcgMTguMTkwNCAzLjg1NzA2IDE4LjE5MDQgNC4xNjY1OUMxOC4xOTA0IDQuNDc2MTIgMTguMTI5NSA0Ljc4MjYyIDE4LjAxMSA1LjA2ODU5QzE3Ljg5MjYgNS4zNTQ1NSAxNy43MTkgNS42MTQzOSAxNy41MDAxIDUuODMzMjZMNi4yNTAwOCAxNy4wODMzTDEuNjY2NzUgMTguMzMzM0wyLjkxNjc1IDEzLjc0OTlMMTQuMTY2NyAyLjQ5OTkzWlwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xMzIyXzUzMjVcIj5cclxuICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgRWRpdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSBSb3RhdGUgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDk0cHhcIiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBwb3NpdGlvbi1hYnNvbHV0ZSBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicm90YXRlQ2FudmFzKGNhbnZhcyw5MClcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgIGQ9XCJNNi4zNjI2NSA3LjE3ODg3TDcuMTc2MjUgNi4zNjI4N0w1LjkwNDI1IDUuMDkyMDdMNS4wODk0NSA1LjkwNTY3TDYuMzYyNjUgNy4xNzg4N1pNMTUuNjcxIDYuMzY0MDdMMTkuNjM3OSAxMC4zMzA5TDIwLjkwOTkgOS4wNTc2OUwxNi45NDQyIDUuMDkwODdMMTUuNjcxIDYuMzY0MDdaTTE5LjYzNzkgMTguODI1N0wxOC44MjQzIDE5LjYzOTNMMjAuMDk2MyAyMC45MTAxTDIwLjkwOTkgMjAuMDk3N0wxOS42Mzc5IDE4LjgyNTdaTTEwLjMyOTUgMTkuNjM5M0w2LjM2MjY1IDE1LjY3MjVMNS4wOTA2NSAxNi45NDU3TDkuMDU2MjYgMjAuOTExM0wxMC4zMjk1IDE5LjYzOTNaTTE4LjgyNDMgMTkuNjM5M0MxNy42NTQzIDIwLjgwODEgMTYuODQwNyAyMS42MTkzIDE2LjE0NTkgMjIuMTQ5N0MxNS40NzE1IDIyLjY2NDUgMTUuMDE1NSAyMi44Mjg5IDE0LjU3NjMgMjIuODI4OVYyNC42Mjg5QzE1LjU2NzUgMjQuNjI4OSAxNi40MDI3IDI0LjIxNzMgMTcuMjM2NyAyMy41ODEzQzE4LjA1MDMgMjIuOTYwOSAxOC45NjM1IDIyLjA0NTMgMjAuMDk2MyAyMC45MTI1TDE4LjgyNDMgMTkuNjM5M1pNOS4wNTYyNiAyMC45MTEzQzEwLjE4OTEgMjIuMDQ1MyAxMS4xMDIzIDIyLjk1OTcgMTEuOTE1OSAyMy41ODEzQzEyLjc0OTkgMjQuMjE3MyAxMy41ODUxIDI0LjYyODkgMTQuNTc2MyAyNC42Mjg5VjIyLjgyODlDMTQuMTM3MSAyMi44Mjg5IDEzLjY4MjMgMjIuNjY0NSAxMy4wMDY3IDIyLjE0OTdDMTIuMzExOSAyMS42MTkzIDExLjQ5ODMgMjAuODA4MSAxMC4zMjk1IDE5LjYzOTNMOS4wNTYyNiAyMC45MTEzWk0xOS42Mzc5IDEwLjMzMDlDMjAuODA2NyAxMS40OTk3IDIxLjYxNzkgMTIuMzEzMyAyMi4xNDgzIDEzLjAwODFDMjIuNjYzMSAxMy42ODM3IDIyLjgyNzUgMTQuMTM4NSAyMi44Mjc1IDE0LjU3NzdIMjQuNjI3NUMyNC42Mjc1IDEzLjU4NjUgMjQuMjE1OSAxMi43NTEzIDIzLjU3OTkgMTEuOTE3M0MyMi45NTk1IDExLjEwMzcgMjIuMDQyNyAxMC4xOTA1IDIwLjkwOTkgOS4wNTc2OUwxOS42Mzc5IDEwLjMzMDlaTTIwLjkwOTkgMjAuMDk3N0MyMi4wNDM5IDE4Ljk2MzcgMjIuOTU4MyAxOC4wNTE3IDIzLjU3OTkgMTcuMjM4MUMyNC4yMTU5IDE2LjQwNDEgMjQuNjI3NSAxNS41Njg5IDI0LjYyNzUgMTQuNTc3N0gyMi44Mjc1QzIyLjgyNzUgMTUuMDE2OSAyMi42NjMxIDE1LjQ3MjkgMjIuMTQ4MyAxNi4xNDczQzIxLjYxNzkgMTYuODQyMSAyMC44MDY3IDE3LjY1NTcgMTkuNjM3OSAxOC44MjU3TDIwLjkwOTkgMjAuMDk3N1pNNy4xNzYyNSA2LjM2Mjg3QzguMzQ2MjUgNS4xOTQwNyA5LjE1OTg1IDQuMzgxNjcgOS44NTQ2NSAzLjg1MTI3QzEwLjUyOSAzLjMzNjQ3IDEwLjk4NSAzLjE3MzI3IDExLjQyNDIgMy4xNzMyN1YxLjM3MjA3QzEwLjQzMyAxLjM3MjA3IDkuNTk3ODUgMS43ODM2NyA4Ljc2Mzg1IDIuNDE5NjdDNy45NDkwNSAzLjA0MTI3IDcuMDM3MDUgMy45NTU2NyA1LjkwNDI1IDUuMDg4NDdMNy4xNzYyNSA2LjM2Mjg3Wk0xNi45NDQyIDUuMDkwODdDMTUuODExNCAzLjk1Njg3IDE0Ljg5ODIgMy4wNDEyNyAxNC4wODQ2IDIuNDE5NjdDMTMuMjUwNiAxLjc4MzY3IDEyLjQxNTQgMS4zNzIwNyAxMS40MjQyIDEuMzcyMDdWMy4xNzMyN0MxMS44NjM0IDMuMTczMjcgMTIuMzE4MiAzLjMzNjQ3IDEyLjk5MzggMy44NTEyN0MxMy42ODg2IDQuMzgxNjcgMTQuNTAyMiA1LjE5Mjg3IDE1LjY3MSA2LjM2MTY3TDE2Ljk0NDIgNS4wOTA4N1pNNS4wODk0NSA1LjkwMzI3QzMuOTU2NjUgNy4wMzYwNyAzLjA0MjI1IDcuOTQ4MDcgMi40MjA2NSA4Ljc2Mjg3QzEuNzg0NjUgOS41OTY4NyAxLjM3MzA1IDEwLjQzMjEgMS4zNzMwNSAxMS40MjMzSDMuMTczMDVDMy4xNzMwNSAxMC45ODQxIDMuMzM3NDUgMTAuNTI4MSAzLjg1MjI1IDkuODUzNjdDNC4zODI2NSA5LjE1ODg3IDUuMTkzODUgOC4zNDUyNyA2LjM2MjY1IDcuMTc1MjdMNS4wODk0NSA1LjkwMzI3Wk02LjM2MjY1IDE1LjY3MTNDNS4xOTM4NSAxNC41MDEzIDQuMzgyNjUgMTMuNjg3NyAzLjg1MjI1IDEyLjk5MjlDMy4zMzc0NSAxMi4zMTg1IDMuMTczMDUgMTEuODYyNSAzLjE3MzA1IDExLjQyMzNIMS4zNzMwNUMxLjM3MzA1IDEyLjQxNDUgMS43ODQ2NSAxMy4yNDk3IDIuNDIwNjUgMTQuMDgzN0MzLjA0MjI1IDE0Ljg5NzMgMy45NTY2NSAxNS44MTA1IDUuMDg5NDUgMTYuOTQzM0w2LjM2MjY1IDE1LjY3MTNaXCJcclxuICAgICAgICAgICAgICAgIGZpbGw9XCIjMUQyOTM5XCIgLz5cclxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTIzLjIgNi45ODMyTDI1IDguMkMyNSA0LjU4MiAyMi40MDU2IDEuNTc5NiAxOSAxTTIuOCAxOS4wMTY4TDEgMTcuOEMxIDIxLjQxOCAzLjU5NDQgMjQuNDIwNCA3IDI1XCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMxRDI5MzlcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIFN1Ym1pdCBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiIWxheW91dEZvcm0uZGlzYWJsZWRcIiBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDk0cHg7cGFkZGluZzogOXB4IDIwcHggIWltcG9ydGFudDtcIlxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBwb3NpdGlvbi1hYnNvbHV0ZSBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwidXBkYXRlTGF5b3V0KHRydWUpXCI+XHJcbiAgICAgICAgICAgIFN1Ym1pdFxyXG4gICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgPCEtLSBEb3dubG9hZCBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIHN0eWxlPVwidG9wOiAyNHB4OyByaWdodDogMjZweFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHBvc2l0aW9uLWFic29sdXRlIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJkb3dubG9hZENhbnZhcygpXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCIgdmlld0JveD1cIjAgMCAyNiAyNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwMDAwMFwiIHN0cm9rZS13aWR0aD1cIjAuMjQwMDAwMDAwMDAwMDAwMDVcIj5cclxuICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz5cclxuICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIHN0cm9rZT1cIiNDQ0NDQ0NcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMC4zODRcIj48L2c+XHJcbiAgICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICBkPVwiTTEyLjU1MzUgMTYuNTA2MUMxMi40MTE0IDE2LjY2MTUgMTIuMjEwNiAxNi43NSAxMiAxNi43NUMxMS43ODk0IDE2Ljc1IDExLjU4ODYgMTYuNjYxNSAxMS40NDY1IDE2LjUwNjFMNy40NDY0OCAxMi4xMzExQzcuMTY2OTggMTEuODI1NCA3LjE4ODIyIDExLjM1MSA3LjQ5MzkyIDExLjA3MTVDNy43OTk2MyAxMC43OTIgOC4yNzQwMiAxMC44MTMyIDguNTUzNTIgMTEuMTE4OUwxMS4yNSAxNC4wNjgyVjNDMTEuMjUgMi41ODU3OSAxMS41ODU4IDIuMjUgMTIgMi4yNUMxMi40MTQyIDIuMjUgMTIuNzUgMi41ODU3OSAxMi43NSAzVjE0LjA2ODJMMTUuNDQ2NSAxMS4xMTg5QzE1LjcyNiAxMC44MTMyIDE2LjIwMDQgMTAuNzkyIDE2LjUwNjEgMTEuMDcxNUMxNi44MTE4IDExLjM1MSAxNi44MzMgMTEuODI1NCAxNi41NTM1IDEyLjEzMTFMMTIuNTUzNSAxNi41MDYxWlwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUQyOTM5XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0zLjc1IDE1QzMuNzUgMTQuNTg1OCAzLjQxNDIyIDE0LjI1IDMgMTQuMjVDMi41ODU3OSAxNC4yNSAyLjI1IDE0LjU4NTggMi4yNSAxNVYxNS4wNTQ5QzIuMjQ5OTggMTYuNDIyNSAyLjI0OTk2IDE3LjUyNDggMi4zNjY1MiAxOC4zOTE4QzIuNDg3NTQgMTkuMjkxOSAyLjc0NjQzIDIwLjA0OTcgMy4zNDgzNSAyMC42NTE2QzMuOTUwMjcgMjEuMjUzNiA0LjcwODE0IDIxLjUxMjUgNS42MDgyNSAyMS42MzM1QzYuNDc1MjIgMjEuNzUgNy41Nzc1NCAyMS43NSA4Ljk0NTEzIDIxLjc1SDE1LjA1NDlDMTYuNDIyNSAyMS43NSAxNy41MjQ4IDIxLjc1IDE4LjM5MTggMjEuNjMzNUMxOS4yOTE5IDIxLjUxMjUgMjAuMDQ5NyAyMS4yNTM2IDIwLjY1MTcgMjAuNjUxNkMyMS4yNTM2IDIwLjA0OTcgMjEuNTEyNSAxOS4yOTE5IDIxLjYzMzUgMTguMzkxOEMyMS43NSAxNy41MjQ4IDIxLjc1IDE2LjQyMjUgMjEuNzUgMTUuMDU0OVYxNUMyMS43NSAxNC41ODU4IDIxLjQxNDIgMTQuMjUgMjEgMTQuMjVDMjAuNTg1OCAxNC4yNSAyMC4yNSAxNC41ODU4IDIwLjI1IDE1QzIwLjI1IDE2LjQzNTQgMjAuMjQ4NCAxNy40MzY1IDIwLjE0NjkgMTguMTkxOUMyMC4wNDgyIDE4LjkyNTcgMTkuODY3OCAxOS4zMTQyIDE5LjU5MSAxOS41OTFDMTkuMzE0MiAxOS44Njc4IDE4LjkyNTcgMjAuMDQ4MiAxOC4xOTE5IDIwLjE0NjlDMTcuNDM2NSAyMC4yNDg0IDE2LjQzNTQgMjAuMjUgMTUgMjAuMjVIOUM3LjU2NDU5IDIwLjI1IDYuNTYzNDcgMjAuMjQ4NCA1LjgwODEyIDIwLjE0NjlDNS4wNzQzNSAyMC4wNDgyIDQuNjg1NzcgMTkuODY3OCA0LjQwOTAxIDE5LjU5MUM0LjEzMjI1IDE5LjMxNDIgMy45NTE4IDE4LjkyNTcgMy44NTMxNSAxOC4xOTE5QzMuNzUxNTkgMTcuNDM2NSAzLjc1IDE2LjQzNTQgMy43NSAxNVpcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwiIzFEMjkzOVwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gUGFuZWwgQ29sbGFwc2UgSGFuZGxlcnMgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLWhhbmRsZXIgbGVmdFwiIChjbGljayk9XCJ0b2dnbGVQYW5lbCgnbGVmdCcpXCI+XHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzTGVmdFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTguMjczMDggMTIuNjM2TDQuNjM2NzIgOC45OTk2NEw4LjI3MzA4IDUuMzYzMjhNMTMuMzY0IDEyLjYzNkw5LjcyNzYzIDguOTk5NjRMMTMuMzY0IDUuMzYzMjhcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgPHN2ZyAqbmdJZj1cImlzTGVmdFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTkuNzI2OTIgNS4zNjM5OUwxMy4zNjMzIDkuMDAwMzZMOS43MjY5MiAxMi42MzY3TTQuNjM2MDEgNS4zNjM5OUw4LjI3MjM3IDkuMDAwMzZMNC42MzYwMSAxMi42MzY3XCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlLWhhbmRsZXIgcmlnaHRcIiAoY2xpY2spPVwidG9nZ2xlUGFuZWwoJ3JpZ2h0JylcIj5cclxuICAgICAgICAgIDxzdmcgKm5nSWY9XCJpc1JpZ2h0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yNzMwOCAxMi42MzZMNC42MzY3MiA4Ljk5OTY0TDguMjczMDggNS4zNjMyOE0xMy4zNjQgMTIuNjM2TDkuNzI3NjMgOC45OTk2NEwxMy4zNjQgNS4zNjMyOFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiIWlzUmlnaHRQYW5lbENvbGxhcHNlZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk05LjcyNjkyIDUuMzYzOTlMMTMuMzYzMyA5LjAwMDM2TDkuNzI2OTIgMTIuNjM2N000LjYzNjAxIDUuMzYzOTlMOC4yNzIzNyA5LjAwMDM2TDQuNjM2MDEgMTIuNjM2N1wiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPCEtLSBFZGl0IEZpeHR1cmUgQm9keSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbFwiIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6ICFlZGl0Rml4dHVyZSB9XCI+XHJcbiAgICAgICAgPGRpdiBpZD1cImVkaXQtYm9keVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICA8dWwgY2xhc3M9XCJteC0zIG15LTUgbmF2IG5hdi1waWxsc1wiIHJvbGU9XCJ0YWJsaXN0XCI+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICAgIDxhIChjbGljayk9XCJzdWJtaXRGaXh0dXJlID0gZmFsc2U7IGVkaXRGaXh0dXJlU2VjdGlvbiA9ICdiYXNpYy1kZXRhaWxzJ1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdiYXNpYy1kZXRhaWxzJyA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cIm5hdi1saW5rXCIgcm9sZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgQmFzaWMgZGV0YWlsc1xyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gY3Vyc29yLXBvaW50ZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInN1Ym1pdEZpeHR1cmUgPSBmYWxzZTsgZWRpdEZpeHR1cmVTZWN0aW9uID0gJ3Byb2R1Y3RzJ1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdwcm9kdWN0cycgPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJuYXYtbGlua1wiIHJvbGU9XCJ0YWJcIj5cclxuICAgICAgICAgICAgICAgIFByb2R1Y3RzXHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBjdXJzb3ItcG9pbnRlclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cclxuICAgICAgICAgICAgICA8YSAoY2xpY2spPVwic3VibWl0Rml4dHVyZSA9IGZhbHNlOyBlZGl0Rml4dHVyZVNlY3Rpb24gPSAndm1zJ1wiXHJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICd2bXMnID8gJ2FjdGl2ZScgOiAnJ1wiIGNsYXNzPVwibmF2LWxpbmtcIiByb2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgICAgICBWaXN1YWwgTWVyY2hhbmRpc2VcclxuICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ2Jhc2ljLWRldGFpbHMnXCI+XHJcbiAgICAgICAgICAgICAgPGxpYi1pbnN0YW5jZS1iYXNpYy1kZXRhaWxzIFtmaXh0dXJlRGF0YV09XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCIgW2VkaXRNb2RlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgW2lzU3VibWl0dGVkXT1cInN1Ym1pdEZpeHR1cmVcIiAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1pbnN0YW5jZS1iYXNpYy1kZXRhaWxzPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICdwcm9kdWN0cydcIj5cclxuICAgICAgICAgICAgICA8bGliLWluc3RhbmNlLXByb2R1Y3RzIFtmaXh0dXJlRGF0YV09XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCIgW2VkaXRNb2RlXT1cInRydWVcIiBbaXNTdWJtaXR0ZWRdPVwic3VibWl0Rml4dHVyZVwiXHJcbiAgICAgICAgICAgICAgICAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1pbnN0YW5jZS1wcm9kdWN0cz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAndm1zJ1wiPlxyXG4gICAgICAgICAgICAgIDxsaWItaW5zdGFuY2Utdm1zIFtmaXh0dXJlRGF0YV09XCJzZWxlY3RlZEZpeHR1cmVEYXRhXCIgW2VkaXRNb2RlXT1cInRydWVcIiBbaXNTdWJtaXR0ZWRdPVwic3VibWl0Rml4dHVyZVwiXHJcbiAgICAgICAgICAgICAgICAoc3VibWl0RXZlbnQpPVwib25GaXh0dXJlU3VibWl0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8L2xpYi1pbnN0YW5jZS12bXM+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdjb2xsYXBzZWQtY29sJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkLCAnY29sLTMnOiAhaXNSaWdodFBhbmVsQ29sbGFwc2VkIH1cIlxyXG4gICAgICAgIFtzdHlsZV09XCJ7J21pbi13aWR0aCc6IGlzUmlnaHRQYW5lbENvbGxhcHNlZCA/ICcwJyA6IGVkaXRGaXh0dXJlID8gJzM0MHB4JyA6ICcxMDUwcHgnfVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmZWVkYmFja0NvbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICA8L2Rpdj5cclxuPC9zZWN0aW9uPlxyXG5cclxuPCEtLSBUZW1wbGF0ZXMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZmVlZGJhY2tDb2w+XHJcbiAgPGRpdiBjbGFzcz1cInMtY2FyZFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6ZWRpdEZpeHR1cmUgPyAnNzJweCcgOiAnMHB4J31cIj5cclxuICAgIDwhLS0gPGFwcC1tYW5hZ2Utc3RvcmUtcGxhbm8tZmVlZGJhY2sgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkICYmICFlZGl0Rml4dHVyZX1cIlxyXG4gICAgICBbY3VycmVudFBsYW5vXT1cImZsb29yRGF0YVwiIFtzdG9yZUZlZWRiYWNrXT1cInN0b3JlRmVlZGJhY2tcIiBbc2VsZWN0ZWRJc3N1ZV09XCJzZWxlY3RlZEZpeHR1cmVcIlxyXG4gICAgICAoaXNBcHByb3ZlZCk9XCJoYW5kbGVBcHByb3ZlclJlc3BvbnNlKCRldmVudClcIj5cclxuICAgIDwvYXBwLW1hbmFnZS1zdG9yZS1wbGFuby1mZWVkYmFjaz4gLS0+XHJcblxyXG4gICAgPGxpYi12ZXJpZmljYXRpb24tZmVlZGJhY2sgW2Zsb29yRGF0YV09XCJmbG9vckRhdGFcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgJiYgIWVkaXRGaXh0dXJlfVwiXHJcbiAgICAgIFtmZWVkYmFja0RldGFpbHNdPVwic2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2tcIiAoY2hhbmdlRml4dHVyZSk9XCJvbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoJGV2ZW50LHRydWUpXCJcclxuICAgICAgW3RvdGFsRml4dHVyZXNdPVwiYWxsRml4dHVyZUluc3RhbmNlc1wiIFtjZG5dPVwiY2RuVXJsXCIgKGFjdGlvbik9XCJoYW5kbGVGZWVkYmFja0FjdGlvbigkZXZlbnQpXCJcclxuICAgICAgW3Nob3dBY3Rpb25dPVwiIWVkaXRGaXh0dXJlXCI+PC9saWItdmVyaWZpY2F0aW9uLWZlZWRiYWNrPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNoZWFkZXJTa2VsZXRvbj5cclxuICA8ZGl2IGNsYXNzPVwicm93IG0tMCBnLTAgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBvdmVyZmxvdy1oaWRkZW5cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyIHctMTAwIHAtNCByb3VuZGVkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBtdC0wIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2tlbGV0b25Mb2FkZXI+XHJcbiAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXIgcm91bmRlZFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcblxyXG48bmctdGVtcGxhdGUgI25vU3RvcmVWaWRlbyBsZXQtbW9kYWw+XHJcbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxoMiBjbGFzcz1cIm1iLTNcIj5ObyBTdG9yZSBWaWRlbyBGb3VuZDwvaDI+XHJcbiAgICAgIDxwPlRoZSB2aWRlbyB3aWxsIGJlIGF2YWlsYWJsZSBvbmNlIGEgcmVxdWVzdCBpcyByYWlzZWQgYW5kIHRoZSBzdG9yZSBzdWJtaXRzIGEgY29tcGxldGUgc3RvcmUgdmlkZW8uPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAoY2xpY2spPVwibW9kYWwuY2xvc2UoKVwiPkNsb3NlPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXBwbHlMb2dpY3MgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8aDIgY2xhc3M9XCJtYi0zXCI+QXBwbHkgSVZNIExvZ2ljczwvaDI+XHJcbiAgICAgIDxwPlRoaXMgd2lsbCBhbmFseXplIHRoZSBjdXJyZW50IGxheW91dCBhbmQgYXBwbHkgdGhlIHByZS1kZWZpbmVkIGZpeHR1cmUgbG9naWNzLjwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0zXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cIm1vZGFsLmNsb3NlKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiYXBwbHlQSURMb2dpY3MoKVwiPlByb2NlZWQ8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhcHByb3ZlTGF5b3V0TW9kYWwgbGV0LW1vZGFsPlxyXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8aDIgY2xhc3M9XCJtYi0zXCI+QXBwcm92ZSBsYXlvdXQvcGxhbjwvaDI+XHJcbiAgICAgIDxwPlxyXG4gICAgICAgIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBhcHByb3ZlIHRoZSBsYXlvdXQ/IFBsZWFzZSBlbnN1cmUgaXQgaGFzIGJlZW4gdGhvcm91Z2hseSByZXZpZXdlZCBiZWZvcmUgYXBwcm92aW5nLlxyXG4gICAgICA8L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBnYXAtM1wiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJtb2RhbC5jbG9zZSgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImFwcHJvdmVMYXlvdXQoKVwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiIWlzQnV0dG9uTG9hZGluZ1wiPkFwcHJvdmU8L3NwYW4+XHJcbiAgICAgICAgPHN2ZyAqbmdJZj1cImlzQnV0dG9uTG9hZGluZ1wiIGNsYXNzPVwic3Bpbm5lclwiIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj5cclxuICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJwYXRoXCIgY3g9XCIyNVwiIGN5PVwiMjVcIiByPVwiMjBcIiBmaWxsPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjRcIj48L2NpcmNsZT5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=