tango-app-ui-store-builder 1.0.24 → 1.0.25

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.
@@ -148,6 +148,9 @@ export class ManageStorePlanoComponent {
148
148
  this.selectedFloorId.valueChanges.subscribe(async (id) => {
149
149
  this.floorData = null;
150
150
  this.createForm();
151
+ this.removeHighlight();
152
+ this.isLeftPanelCollapsed = true;
153
+ this.isRightPanelCollapsed = true;
151
154
  this.floorData = this.planoData?.floors?.find((floor) => floor._id === id);
152
155
  try {
153
156
  await Promise.all([
@@ -4251,4 +4254,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
4251
4254
  type: HostListener,
4252
4255
  args: ["window:resize"]
4253
4256
  }] } });
4254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby9tYW5hZ2Utc3RvcmUtcGxhbm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvbWFuYWdlLXN0b3JlLXBsYW5vL21hbmFnZS1zdG9yZS1wbGFuby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFJWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFELE9BQU8sRUFHTCxXQUFXLEVBRVgsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUNMLE9BQU8sRUFFUCxZQUFZLEVBQ1osY0FBYyxFQUNkLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQU1qQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUN4SCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUUxRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQmhILE1BQU0sT0FBTyx5QkFBeUI7SUE4RjFCO0lBQ0E7SUFDQTtJ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QyxHQUFHLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FDeEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQ3hCLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7d0dBNzFLVSx5QkFBeUI7NEZBQXpCLHlCQUF5Qix5R0FGekIsQ0FBQyxhQUFhLENBQUMsNFVDNUQ1QiwycXhEQXEwQmM7OzRGRHZ3QkQseUJBQXlCO2tCQU5yQyxTQUFTOytCQUNFLHdCQUF3QixhQUd2QixDQUFDLGFBQWEsQ0FBQzt3V0FNMUIsU0FBUztzQkFEUixTQUFTO3VCQUFDLFlBQVk7Z0JBRU8sWUFBWTtzQkFBekMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ0Qsb0JBQW9CO3NCQUE5QyxTQUFTO3VCQUFDLGNBQWM7Z0JBR3pCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuaW1wb3J0IHsgTG9jYXRpb24sIFRpdGxlQ2FzZVBpcGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIEZvcm1BcnJheSxcclxuICBGb3JtQnVpbGRlcixcclxuICBGb3JtQ29udHJvbCxcclxuICBGb3JtR3JvdXAsXHJcbiAgVmFsaWRhdG9ycyxcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIFN1YmplY3QsXHJcbiAgU3Vic2NyaXB0aW9uLFxyXG4gIGRlYm91bmNlVGltZSxcclxuICBmaXJzdFZhbHVlRnJvbSxcclxuICBmcm9tRXZlbnQsXHJcbiAgdGFrZVVudGlsLFxyXG59IGZyb20gXCJyeGpzXCI7XHJcblxyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQgKiBhcyBmYWJyaWMgZnJvbSBcImZhYnJpY1wiO1xyXG5cclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLXNoYXJlZFwiO1xyXG5cclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTGF5b3V0RWRpdENvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uL2xheW91dC1lZGl0LWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUHVibGlzaHRhc2tQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuL3B1Ymxpc2h0YXNrLXBvcHVwL3B1Ymxpc2h0YXNrLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTdG9yZVRhc2tSZXZva2VDb21wb25lbnQgfSBmcm9tIFwiLi9zdG9yZS10YXNrLXJldm9rZS9zdG9yZS10YXNrLXJldm9rZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERyb3Bkb3duSUYgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9wbGFuby1nZW5lcmFsLmludGVyZmFjZVwiO1xyXG5pbXBvcnQgeyBDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9wb3B1cHMvY29tcGxldGUtY29uZmlybWF0aW9uL2NvbXBsZXRlLWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVm1MaWJyYXJ5TGlzdCB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlXCI7XHJcblxyXG50eXBlIEJvdW5kRml4dHVyZUdyb3VwID0ge1xyXG4gIGZpeHR1cmVHcm91cDogZmFicmljLkdyb3VwO1xyXG4gIG9mZnNldFg6IG51bWJlcjtcclxuICBvZmZzZXRZOiBudW1iZXI7XHJcbiAgX3RlbXBPbGRUb3A/OiBudW1iZXI7XHJcbiAgX3RlbXBPbGRMZWZ0PzogbnVtYmVyO1xyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLW1hbmFnZS1zdG9yZS1wbGFub1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vbWFuYWdlLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9tYW5hZ2Utc3RvcmUtcGxhbm8uY29tcG9uZW50LnNjc3NcIixcclxuICBwcm92aWRlcnM6IFtUaXRsZUNhc2VQaXBlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1hbmFnZVN0b3JlUGxhbm9Db21wb25lbnRcclxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0XHJcbntcclxuICBAVmlld0NoaWxkKFwiYmFzZUNhbnZhc1wiKVxyXG4gIGNhbnZhc1JlZiE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gIEBWaWV3Q2hpbGQoXCJjYW52YXNDb250YWluZXJcIikgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChcIm5vU3RvcmVWaWRlb1wiKSBub1N0b3JlVmlkZW9Nb2RhbFJlZiE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIpXHJcbiAgb25SZXNpemUoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG5cclxuICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcblxyXG4gIGNhbnZhcyE6IGZhYnJpYy5DYW52YXM7XHJcbiAgem9vbUxldmVsOiBudW1iZXIgPSAxO1xyXG4gIHdhbGxUaGlja25lc3MgPSAzMDtcclxuICB2ZXJ0aWNhbE1hcmdpbiA9ICgxLjI1IC8gMTAwKSAqIHRoaXMudG9QaXhlbHMoMTUyNCwgXCJtbVwiKTtcclxuICB3YWxsQmluZGluZ3MgPSBuZXcgTWFwPGZhYnJpYy5Hcm91cCwgQm91bmRGaXh0dXJlR3JvdXBbXT4oKTtcclxuXHJcbiAgbGF5b3V0Rm9ybTogRm9ybUdyb3VwO1xyXG4gIHNlbGVjdGVkRmxvb3JJZCA9IG5ldyBGb3JtQ29udHJvbChcIlwiKTtcclxuICBmaXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBmaXh0dXJlVGVtcGxhdGVJZFN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgb3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIHBsYW5vRGF0YTogYW55O1xyXG5cclxuICBmbG9vckRhdGE6IGFueTtcclxuICByZWFkb25seSBvcmlnaW5hbEZsb29yRGF0YTogYW55OyAvL3VzZWQgdG8gcm9sbGJhY2sgdG8gb3JpZ2luYWwgbGF5b3V0IHN0YXRlIG9uIGNsaWNrIGNhbmNlbCB3aGlsZSBlZGl0aW5nLlxyXG5cclxuICBjZG5Vcmw6IHN0cmluZztcclxuICBmaXh0dXJlVGVtcGxhdGVzOiBhbnlbXSA9IFtdO1xyXG4gIGFsbEZpeHR1cmVzOiBhbnlbXSA9IFtdOyAvLyBhbGwgZml4dHVyZXMgaW5jbHVkaW5nIHRoZSBtYXN0ZXIgdGVtcGxhdGVzIGZvciB0cmVlIHZpZXdcclxuICBhbGxGaXh0dXJlSW5zdGFuY2VzOiBhbnlbXSA9IFtdOyAvL29ubHkgdGhlIGxheW91dCBmaXh0dXJlcyBpbnN0YW5jZXMuXHJcbiAgc3RvcmVGZWVkYmFjazogYW55O1xyXG5cclxuICBzZWxlY3RlZEZpeHR1cmU6IGFueTtcclxuICBzZWxlY3RlZEZpeHR1cmVEYXRhOiBhbnk7XHJcbiAgc2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2s6IGFueTtcclxuICBlZGl0Rml4dHVyZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVkaXRGaXh0dXJlU2VjdGlvbjogXCJiYXNpYy1kZXRhaWxzXCIgfCBcInByb2R1Y3RzXCIgfCBcInZtc1wiID0gXCJiYXNpYy1kZXRhaWxzXCI7XHJcbiAgc3VibWl0Rml4dHVyZSA9IGZhbHNlO1xyXG5cclxuICBzdG9yZU1ldHJpY3MgPSB7XHJcbiAgICBmbG9vckNvdW50OiAwLFxyXG4gICAgZml4dHVyZUNvdW50OiAwLFxyXG4gICAgdm1Db3VudDogMCxcclxuICB9O1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzTGVmdFBhbmVsQ29sbGFwc2VkOiBib29sZWFuID0gdHJ1ZTtcclxuICBzZWxlY3RlZFZpZXc6IFwidHJlZVwiIHwgXCJkZXRhaWxcIiA9IFwiZGV0YWlsXCI7XHJcblxyXG4gIHB1Ymxpc2hpbmdTdGF0ZTpcclxuICAgIHwgXCJsYXlvdXRcIlxyXG4gICAgfCBcImxheW91dC1yZWRvXCJcclxuICAgIHwgXCJmaXh0dXJlXCJcclxuICAgIHwgXCJmaXh0dXJlLXJlZG9cIlxyXG4gICAgfCBcInZtXCJcclxuICAgIHwgXCJ2bS1yZWRvXCJcclxuICAgIHwgXCJjb21wbGV0ZVwiXHJcbiAgICB8IFwiXCIgPSBcIlwiO1xyXG4gIGRpc2FibGVkUHVibGlzaDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGRpc2FibGVFZGl0OiBib29sZWFuID0gdHJ1ZTtcclxuICB0YXNrSW5mbzogYW55O1xyXG4gIHRhc2tTdHlsZSA9IHtcclxuICAgIGxheW91dDogeyBuYW1lOiBcIllldCBUbyBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9LFxyXG4gICAgZml4dHVyZTogeyBuYW1lOiBcIllldCBUbyBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9LFxyXG4gICAgdm06IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICB9O1xyXG5cclxuICBvdGhlckVsZW1lbnRMaXN0OiBEcm9wZG93bklGW10gPSBbXHJcbiAgICB7IGxhYmVsOiBcIlBPUyBDb3VudGVyXCIsIHZhbHVlOiBcIlBPUyBDb3VudGVyXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiRGlzY3Vzc2lvbiBUYWJsZVwiLCB2YWx1ZTogXCJEaXNjdXNzaW9uIFRhYmxlXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiTWlycm9yXCIsIHZhbHVlOiBcIk1pcnJvclwiIH0sXHJcbiAgICB7IGxhYmVsOiBcIk90aGVyc1wiLCB2YWx1ZTogXCJPdGhlcnNcIiB9LFxyXG4gIF07XHJcbiAgc3RvcmVMaXN0OmFueSA9IFtdO1xyXG4gIHNlbGVjdGVkU3RvcmVOYW1lOmFueTtcclxuXHJcbiAgdm1MaXN0OiBWbUxpYnJhcnlMaXN0W10gPSBbXTtcclxuICAvLyBpc1VzZXJJbnRlcmFjdGVkV2l0aENhbnZhczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGFjdGl2ZUhpZ2hsaWdodDogZmFicmljLlJlY3QgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBTdG9yZUJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgdGl0bGVDYXNlOiBUaXRsZUNhc2VQaXBlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcGFnZUluZm86IFBhZ2VJbmZvU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuXHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgaWYgKGUpIHRoaXMuY2RuVXJsID0gZS5wbGFub2dyYW1DRE47XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXRQYWdlRGF0YSgpO1xyXG5cclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGE/LmNsaWVudCkge1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGE/LmNsaWVudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGhlYWRlckRhdGEgPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhlYWRlci1maWx0ZXJzXCIpIGFzIHN0cmluZ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuY2xpZW50SWQgPSBoZWFkZXJEYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmdldFZtc0xpc3QoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XHJcbiAgICAgICAgaWYgKHBhcmFtcz8ucGxhbm9JZCkge1xyXG4gICAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHBhcmFtcz8ucGxhbm9JZCk7XHJcbiAgICAgICAgICB0aGlzLmdldFN0b3JlTGlzdChwYXJhbXM/LnBsYW5vSWQpO1xyXG4gICAgICAgICAgaWYgKHBhcmFtcz8uZmxvb3JJZCkge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHsgX2lkOiBwYXJhbXM/LmZsb29ySWQgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWRGbG9vcklkLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoYXN5bmMgKGlkKSA9PiB7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcblxyXG4gICAgICB0aGlzLmZsb29yRGF0YSA9IHRoaXMucGxhbm9EYXRhPy5mbG9vcnM/LmZpbmQoXHJcbiAgICAgICAgKGZsb29yOiBhbnkpID0+IGZsb29yLl9pZCA9PT0gaWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgdGhpcy50YXNrRGV0YWlscyh0aGlzLmZsb29yRGF0YS5wbGFub0lkLCB0aGlzLmZsb29yRGF0YS5faWQpLFxyXG4gICAgICAgICAgdGhpcy5nZXRTdG9yZUZlZWRiYWNrKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCwge30pLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcblxyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKCk7XHJcbiAgICAgIHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgY29uc3QgbmV3UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcclxuICAgICAgbmV3UGFyYW1zLnNldChcInBsYW5vSWRcIiwgdGhpcy5mbG9vckRhdGEucGxhbm9JZCk7XHJcbiAgICAgIG5ld1BhcmFtcy5zZXQoXCJmbG9vcklkXCIsIHRoaXMuZmxvb3JEYXRhLl9pZCk7XHJcblxyXG4gICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsXHJcbiAgICAgICAgbmV3UGFyYW1zLnRvU3RyaW5nKClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQuc2V0VmFsdWUodGhpcy5mbG9vckRhdGEuX2lkLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcyA9IG5ldyBmYWJyaWMuQ2FudmFzKHRoaXMuY2FudmFzUmVmPy5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIHNlbGVjdGlvbkZ1bGx5Q29udGFpbmVkOiB0cnVlLFxyXG4gICAgICBwZXJQaXhlbFRhcmdldEZpbmQ6IHRydWUsXHJcbiAgICAgIHRhcmdldEZpbmRUb2xlcmFuY2U6IDUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBmcm9tRXZlbnQodGhpcy5jYW52YXMgYXMgYW55LCBcIm9iamVjdDptb2RpZmllZFwiKVxyXG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcclxuICAgICAgLnN1YnNjcmliZShhc3luYyAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbW92ZWRPYmo6IGFueSA9IGUudGFyZ2V0O1xyXG5cclxuICAgICAgICBpZiAoIW1vdmVkT2JqKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZS50cmFuc2Zvcm0/LmFjdGlvbjtcclxuXHJcbiAgICAgICAgY29uc3QgaXNSZXNpemUgPVxyXG4gICAgICAgICAgYWN0aW9uID09PSBcInNjYWxlXCIgfHwgYWN0aW9uID09PSBcInNjYWxlWFwiIHx8IGFjdGlvbiA9PT0gXCJzY2FsZVlcIjtcclxuXHJcbiAgICAgICAgaWYgKGlzUmVzaXplKSB7XHJcbiAgICAgICAgICBjb25zdCB0eXBlID0gbW92ZWRPYmo/Lm9ialR5cGUgPz8gXCJncm91cFwiO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRDb25maWcgPSB7XHJcbiAgICAgICAgICAgIHg6IG1vdmVkT2JqLmxlZnQsXHJcbiAgICAgICAgICAgIHk6IG1vdmVkT2JqLnRvcCxcclxuICAgICAgICAgICAgd2lkdGg6IG1vdmVkT2JqLmdldFNjYWxlZFdpZHRoKCksXHJcbiAgICAgICAgICAgIGhlaWdodDogbW92ZWRPYmouZ2V0U2NhbGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgIGFuZ2xlOiBtb3ZlZE9iai5hbmdsZSxcclxuICAgICAgICAgICAgZWxlbWVudERhdGE6IG1vdmVkT2JqLmRhdGEsXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwid2FsbFwiOiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKG1vdmVkT2JqKTtcclxuICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhLmFuZ2xlID0gdXBkYXRlZENvbmZpZy5hbmdsZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3V2FsbCA9IGF3YWl0IHRoaXMuZHJhd1dhbGwoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueCxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueSxcclxuICAgICAgICAgICAgICAgIHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcud2lkdGggLSAwLjI3LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIChuZXdXYWxsIGFzIGFueSkub2JqVHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgICAgIChuZXdXYWxsIGFzIGFueSkuZGF0YSA9IHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChuZXdXYWxsKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FzZSBcIm90aGVyc1wiOiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKG1vdmVkT2JqKTtcclxuICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPVxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy5hbmdsZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgbmV3T3RoZXIgPSB0aGlzLmRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLngsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLnksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmFuZ2xlLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy53aWR0aCAtIDIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmhlaWdodCAtIDIsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgKG5ld090aGVyIGFzIGFueSkub2JqVHlwZSA9IFwib3RoZXJzXCI7XHJcbiAgICAgICAgICAgICAgKG5ld090aGVyIGFzIGFueSkuZGF0YSA9IHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGE7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChuZXdPdGhlcik7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhc2UgXCJlbnRyYW5jZVwiOiB7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhc2UgXCJmaXh0dXJlXCI6IHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnVwZGF0ZVdhbGxDb29yZGluYXRlcygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRml4dHVyZUNvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVPdGhlckVsZW1lbnRzQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXR1cFpvb21IYW5kbGVycygpO1xyXG5cclxuICAgIHRoaXMubGlzdGVuVG9EZWxldGVLZXkoKTtcclxuICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJsZWZ0XCIsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcmVzaXplQ2FudmFzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMuY2FudmFzLnNldERpbWVuc2lvbnMoe1xyXG4gICAgICB3aWR0aDogY29udGFpbmVyLmNsaWVudFdpZHRoIC0gNTAsXHJcblxyXG4gICAgICBoZWlnaHQ6IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgLSA0MCxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBab29tSGFuZGxlcnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOndoZWVsXCIsIChvcHQ6IGZhYnJpYy5URXZlbnQ8V2hlZWxFdmVudD4pID0+IHtcclxuICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG5cclxuICAgICAgaWYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHtcclxuICAgICAgICAvLyB0aGlzLmlzVXNlckludGVyYWN0ZWRXaXRoQ2FudmFzID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBkZWx0YSA9IGUuZGVsdGFZO1xyXG4gICAgICAgIGxldCB6b29tID0gdGhpcy5jYW52YXMuZ2V0Wm9vbSgpO1xyXG4gICAgICAgIHpvb20gKj0gMC45OTUgKiogZGVsdGE7XHJcblxyXG4gICAgICAgIHpvb20gPSBNYXRoLm1heCgwLjIsIE1hdGgubWluKHpvb20sIDMpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYW52YXMuem9vbVRvUG9pbnQoXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHg6IGUub2Zmc2V0WCxcclxuICAgICAgICAgICAgeTogZS5vZmZzZXRZLFxyXG4gICAgICAgICAgfSBhcyBmYWJyaWMuUG9pbnQsXHJcbiAgICAgICAgICB6b29tXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICBsZXQgbGFzdFBvc1ggPSAwO1xyXG4gICAgbGV0IGxhc3RQb3NZID0gMDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOmRvd25cIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghb3B0LnRhcmdldCkge1xyXG4gICAgICAgIGlzRHJhZ2dpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNlbGVjdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTptb3ZlXCIsIChvcHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNEcmFnZ2luZyAmJiB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSkge1xyXG4gICAgICAgIC8vIHRoaXMuaXNVc2VySW50ZXJhY3RlZFdpdGhDYW52YXMgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGUgPSBvcHQuZTtcclxuICAgICAgICBjb25zdCB2cHQgPSB0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybTtcclxuICAgICAgICB2cHRbNF0gKz0gZS5jbGllbnRYIC0gbGFzdFBvc1g7XHJcbiAgICAgICAgdnB0WzVdICs9IGUuY2xpZW50WSAtIGxhc3RQb3NZO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICBsYXN0UG9zWCA9IGUuY2xpZW50WDtcclxuICAgICAgICBsYXN0UG9zWSA9IGUuY2xpZW50WTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMub24oXCJtb3VzZTp1cFwiLCAoKSA9PiB7XHJcbiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiTWFuYWdlIFN0b3JlIFBsYW5vXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogXCJQbGFub2dyYW1cIixcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL21hbmFnZS1wbGFub2dyYW1zXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlwiLFxyXG4gICAgICAgIHBhdGg6IFwiXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRWbXNMaXN0KCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0Vk1OYW1lTGlzdCh0aGlzLmNsaWVudElkKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgdGhpcy52bUxpc3QgPSByZXM/LmRhdGE/Lm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBpZDogaXRlbS5faWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0udm1OYW1lLFxyXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogaXRlbS52bU5hbWUsXHJcbiAgICAgICAgICAgIHdpZHRoOiBpdGVtLnZtV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICAgIGhlaWdodDogaXRlbS52bUhlaWdodC52YWx1ZSxcclxuICAgICAgICAgICAgdHlwZTogaXRlbS52bVR5cGUsXHJcbiAgICAgICAgICAgIC4uLihpdGVtLnZtSW1hZ2VVcmxcclxuICAgICAgICAgICAgICA/IHsgaW1nVXJsOiBgJHt0aGlzLmNkblVybH0ke2l0ZW0udm1JbWFnZVVybH1gIH1cclxuICAgICAgICAgICAgICA6IHt9KSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBnZXRWbXNMaXN0IFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkZpeHR1cmVTYXZlKCkge1xyXG4gICAgdGhpcy5zdWJtaXRGaXh0dXJlID0gdHJ1ZTtcclxuICAgIC8vIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS50YXNrVHlwZSA9IHRoaXMucHVibGlzaGluZ1N0YXRlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3VibWl0Rml4dHVyZSA9IGZhbHNlO1xyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uRml4dHVyZVBhZ2VDYW5jZWwoKSB7XHJcbiAgICB0aGlzLnN1Ym1pdEZpeHR1cmUgPSBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IG51bGw7XHJcbiAgICB0aGlzLmVkaXRGaXh0dXJlU2VjdGlvbiA9IFwiYmFzaWMtZGV0YWlsc1wiO1xyXG4gICAgdGhpcy5lZGl0Rml4dHVyZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5sYXlvdXRGb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgYXdhaXQgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIG9uRml4dHVyZVN1Ym1pdChldmVudDogYW55KSB7XHJcbiAgICBpZiAoIWV2ZW50ICYmICF0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZXZlbnQ/LnNoZWxmICYmIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8uc2hlbGZDb25maWcpIHtcclxuICAgICAgZXZlbnQuc2hlbGYgPSBldmVudC5zaGVsZi5tYXAoKHNoZWxmOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBsZXQgZmluZFNoZWxmID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnLmZpbmQoXHJcbiAgICAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5zaGVsZk51bWJlciA9PSBpbmRleCArIDFcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChmaW5kU2hlbGYpIHtcclxuICAgICAgICAgIHNoZWxmID0geyAuLi5maW5kU2hlbGYsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBkZXRhaWxzID1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnW1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5zaGVsZkNvbmZpZy5sZW5ndGggLSAxXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICBkZXRhaWxzLnNoZWxmTnVtYmVyID0gaW5kZXggKyAxO1xyXG4gICAgICAgICAgc2hlbGYgPSB7IC4uLmRldGFpbHMsIC4uLnNoZWxmIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaGVsZjtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJzaGVsZkNvbmZpZ1wiXSA9IGV2ZW50Py5zaGVsZjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1wiZGVzY3JpcHRpb25cIl0gPSBldmVudD8uZGVzY3JpcHRpb24gPz8gXCJcIjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1widGVtcGxhdGVHcm91cE5hbWVcIl0gPVxyXG4gICAgICAgIGV2ZW50Py50ZW1wbGF0ZUdyb3VwTmFtZSA/PyBcIlwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuaGVhZGVyLmxhYmVsID0gZXZlbnQ/LmhlYWRlckxhYmVsID8/IFwiXCI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5mb290ZXIubGFiZWwgPSBldmVudD8uZm9vdGVyTGFiZWwgPz8gXCJcIjtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnNlY3Rpb24pIHtcclxuICAgICAgZXZlbnQuc2VjdGlvbi5mb3JFYWNoKChzZWM6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBudW1iZXIgPSBzZWM/LnNoZWx2ZXM/Lm1hcCgoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgICBwYXJzZUludChlbGUuc3BsaXQoXCIgXCIpWzFdKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5zaGVsZkNvbmZpZy5mb3JFYWNoKChzaGVsZjogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAobnVtYmVyLmluY2x1ZGVzKHNoZWxmLnNoZWxmTnVtYmVyKSkge1xyXG4gICAgICAgICAgICBzaGVsZi56b25lID0gc2VjLnpvbmU7XHJcbiAgICAgICAgICAgIHNoZWxmLnByb2R1Y3RCcmFuZE5hbWUgPSBzZWMucHJvZHVjdEJyYW5kTmFtZTtcclxuICAgICAgICAgICAgc2hlbGYucHJvZHVjdENhdGVnb3J5ID0gc2VjLnByb2R1Y3RDYXRlZ29yeTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50Py52bUNvbmZpZyAmJiB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE/LnZtQ29uZmlnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YVtcInZtQ29uZmlnXCJdID0gZXZlbnQ/LnZtQ29uZmlnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5nZXRWbXNMaXN0KCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVkaXRGaXh0dXJlU2VjdGlvbiA9IFwiYmFzaWMtZGV0YWlsc1wiO1xyXG4gICAgICAgIHRoaXMuZWRpdEZpeHR1cmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGE/Ll9pZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICAgdmFsaWRhdGVGaXh0dXJlRGF0YSgpIHtcclxuICAvLyAgIHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8udm1Db25maWc/LmZvckVhY2goKHZtKSA9PiB7XHJcbiAgLy8gICAgIGlmICgodm0/LnN0YXJ0WVBvc2l0aW9uID8/IDEpID4gKHRoaXMuZml4dHVyZVRlbXBsYXRlRGV0YWlscz8uc2hlbGZDb25maWc/Lmxlbmd0aCA/PyAxKSkge1xyXG4gIC8vICAgICAgIHZtLnN0YXJ0WVBvc2l0aW9uID0gbnVsbDtcclxuICAvLyAgICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZUVycm9yVGFicy52bXMgPSB0cnVlO1xyXG4gIC8vICAgICB9XHJcblxyXG4gIC8vICAgICBpZiAoKHZtPy5lbmRZUG9zaXRpb24gPz8gMSkgPiAodGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDEpKSB7XHJcbiAgLy8gICAgICAgdm0uZW5kWVBvc2l0aW9uID0gbnVsbDtcclxuICAvLyAgICAgICB0aGlzLnBzLmZpeHR1cmVUZW1wbGF0ZUVycm9yVGFicy52bXMgPSB0cnVlO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIHRvZ2dsZVBhbmVsKHNpZGU6IFwibGVmdFwiIHwgXCJyaWdodFwiLCBhY3Rpb24/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoc2lkZSA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCA9IGFjdGlvbiA/PyAhdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZDtcclxuICAgICAgaWYgKCF0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkKSB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCA9IGFjdGlvbiA/PyAhdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQ7XHJcbiAgICAgIGlmICghdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQpIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrKSB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoe30pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgNDAwKTtcclxuICB9XHJcblxyXG4gIGdldFN0b3JlRmVlZGJhY2soXHJcbiAgICBwbGFub0lkOiBzdHJpbmcsXHJcbiAgICBmbG9vcklkOiBzdHJpbmcsXHJcbiAgICBmaWx0ZXI6IGFueSxcclxuICAgIGNoZWNrUHVibGlzaFN0YXRlOiBib29sZWFuID0gdHJ1ZVxyXG4gICkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IHtcclxuICAgICAgICBwbGFub0lkOiBwbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IGZsb29ySWQsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChmaWx0ZXIpIHtcclxuICAgICAgICBkYXRhID0geyAuLi5kYXRhLCAuLi5maWx0ZXIgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFN0b3JlRmVlZGJhY2soZGF0YSkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjayA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgaWYgKHJlcy5kYXRhPy5sYXlvdXREYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzTGF5b3V0RmVlZGJhY2socmVzLmRhdGEubGF5b3V0RGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NMYXlvdXRGZWVkYmFjayhbXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlcy5kYXRhPy5maXh0dXJlRGF0YT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZpeHR1cmVGZWVkYmFjayhyZXMuZGF0YS5maXh0dXJlRGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NGaXh0dXJlRmVlZGJhY2soW10pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChyZXMuZGF0YT8uVm1EYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzVm1GZWVkYmFjayhyZXMuZGF0YS5WbURhdGEpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzVm1GZWVkYmFjayhbXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGNoZWNrUHVibGlzaFN0YXRlKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuY2FsY3VsYXRlUHVibGlzaGluZ1N0YXRlKClcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUZlZWRiYWNrPy5maXh0dXJlSWQpIHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoe1xyXG4gICAgICAgICAgICAgIGN1cnJlbnRGaXh0dXJlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjay5maXh0dXJlRmVlZGJhY2suZml4dHVyZUlkLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBmZXRjaCBzdG9yZSBmZWVkYmFja1wiKTtcclxuICAgICAgICAgIHJlamVjdCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYWxjdWxhdGVQdWJsaXNoaW5nU3RhdGUoKSB7XHJcbiAgICBsZXQgZGlzYWJsZUVkaXQgPSBmYWxzZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpXTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50LmZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IGVsZW1lbnQuZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlLmlzc3VlKSB7XHJcbiAgICAgICAgICBkaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ldO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZS5pc3N1ZSkge1xyXG4gICAgICAgICAgZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChkaXNhYmxlRWRpdCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUVkaXQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5mbG9vckRhdGEuaXNFZGl0ZWQpIHtcclxuICAgIC8vICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnbGF5b3V0J1xyXG4gICAgLy8gICByZXR1cm47XHJcbiAgICAvLyB9XHJcblxyXG4gICAgbGV0IGxheW91dERhdGEgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSBcImxheW91dFwiXHJcbiAgICApO1xyXG4gICAgbGV0IGZpeHR1cmVEYXRhID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHM/LmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gXCJmaXh0dXJlXCJcclxuICAgICk7XHJcbiAgICBsZXQgdm1EYXRhID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHM/LmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gXCJmaXh0dXJlXCJcclxuICAgICk7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudGFza1N0eWxlLmxheW91dC5uYW1lID09IFwiQXBwcm92ZWRcIiAmJlxyXG4gICAgICB0aGlzLnRhc2tTdHlsZS5maXh0dXJlLm5hbWUgPT0gXCJBcHByb3ZlZFwiICYmXHJcbiAgICAgIHRoaXMudGFza1N0eWxlLnZtLm5hbWUgPT0gXCJBcHByb3ZlZFwiXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImNvbXBsZXRlXCI7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMudGFza1N0eWxlLmZpeHR1cmUubmFtZSA9PSBcIkFwcHJvdmVkXCIpIHtcclxuICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcInZtXCI7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB2bURhdGEgJiZcclxuICAgICAgICAoKHZtRGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJiB2bURhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJkaXNhZ3JlZVwiKSB8fFxyXG4gICAgICAgICAgdm1EYXRhPy5yZWRvU3RhdHVzKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwidm0tcmVkb1wiO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwiZml4dHVyZVwiO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgZml4dHVyZURhdGEgJiZcclxuICAgICAgICAoKGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmXHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcImRpc2FncmVlXCIpIHx8XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YT8ucmVkb1N0YXR1cylcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAhdGhpcy5mbG9vckRhdGEuaXNFZGl0ZWRcclxuICAgICAgICAgID8gXCJmaXh0dXJlLXJlZG9cIlxyXG4gICAgICAgICAgOiBcImZpeHR1cmVcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gZWxzZSB7XHJcbiAgICAvLyAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2xheW91dCdcclxuICAgIC8vICAgaWYgKGxheW91dERhdGEgJiYgKChsYXlvdXREYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmIGxheW91dERhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJkaXNhZ3JlZVwiKSB8fCBsYXlvdXREYXRhPy5yZWRvU3RhdHVzKSkge1xyXG4gICAgLy8gICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2xheW91dC1yZWRvJztcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLnN0b3JlRmVlZGJhY2s/LlZtRGF0YS5sZW5ndGgpIHtcclxuICAgIC8vICAgY29uc3Qgdm1GZWVkYmFjayA9IHRoaXMuc3RvcmVGZWVkYmFjaz8uVm1EYXRhLmZpbHRlcigoZmVlZGJhY2s6IGFueSkgPT4gZmVlZGJhY2sudHlwZSA9PT0gJ3ZtJylcclxuXHJcbiAgICAvLyAgIGNvbnN0IGFsbEZpeHR1cmVzQ29tcGxldGVkID0gdm1GZWVkYmFjay5ldmVyeSgoZmVlZGJhY2s6IGFueSkgPT4gZmVlZGJhY2suc3RhdHVzID09PSAnY29tcGxldGUnKVxyXG5cclxuICAgIC8vICAgaWYgKGFsbEZpeHR1cmVzQ29tcGxldGVkKSB7XHJcbiAgICAvLyAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnY29tcGxldGUnXHJcbiAgICAvLyAgICAgcmV0dXJuXHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyAgIGxldCBoYXNEaXNhZ3JlZSA9IGZhbHNlO1xyXG5cclxuICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2bUZlZWRiYWNrLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAvLyAgICAgY29uc3QgaXNzdWVzID0gdm1GZWVkYmFjaz8uW2ldPy5hbnN3ZXJzPy5bMF0/Lmlzc3VlcztcclxuXHJcbiAgICAvLyAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlzc3Vlcy5sZW5ndGg7IGorKykge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBpc3N1ZSA9IGlzc3Vlc1tqXTtcclxuICAgIC8vICAgICAgICAgY29uc3QgZGV0YWlscyA9IGlzc3VlPy5EZXRhaWxzIHx8IFtdO1xyXG5cclxuICAgIC8vICAgICAgICAgaWYgKGRldGFpbHMuc29tZSgoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gJ2Rpc2FncmVlJykpIHtcclxuICAgIC8vICAgICAgICAgICBoYXNEaXNhZ3JlZSA9IHRydWU7XHJcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICBpZiAoaGFzRGlzYWdyZWUpIGJyZWFrO1xyXG4gICAgLy8gICAgIGlmIChpc3N1ZXM/Lmxlbmd0aCkge1xyXG4gICAgLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpc3N1ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgIC8vICAgICAgICAgY29uc3QgaXNzdWUgPSBpc3N1ZXNbal07XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGRldGFpbHMgPSBpc3N1ZT8uRGV0YWlscyB8fCBbXTtcclxuXHJcbiAgICAvLyAgICAgICAgIGlmIChkZXRhaWxzLnNvbWUoKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5zdGF0dXMgPT09ICdkaXNhZ3JlZScpKSB7XHJcbiAgICAvLyAgICAgICAgICAgaGFzRGlzYWdyZWUgPSB0cnVlO1xyXG4gICAgLy8gICAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgaWYgKGhhc0Rpc2FncmVlKSBicmVhaztcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgaWYgKGhhc0Rpc2FncmVlKSB7XHJcbiAgICAvLyAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnZml4dHVyZS1yZWRvJztcclxuICAgIC8vICAgICByZXR1cm5cclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnZml4dHVyZSdcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5zdG9yZUZlZWRiYWNrPy5sYXlvdXREYXRhLmxlbmd0aCkge1xyXG4gICAgLy8gICBjb25zdCBsYXlvdXRGZWVkYmFjayA9IHRoaXMuc3RvcmVGZWVkYmFjaz8ubGF5b3V0RGF0YS5maWx0ZXIoKGZlZWRiYWNrOiBhbnkpID0+IGZlZWRiYWNrLnR5cGUgPT09ICdsYXlvdXQnKVxyXG4gICAgLy8gICBsZXQgaGFzRGlzYWdyZWUgPSBmYWxzZTtcclxuXHJcbiAgICAvLyAgIGlmIChsYXlvdXRGZWVkYmFja1tsYXlvdXRGZWVkYmFjay5sZW5ndGggLSAxXS5zdGF0dXMgPT09ICdjb21wbGV0ZScpIHtcclxuICAgIC8vICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdmaXh0dXJlJ1xyXG4gICAgLy8gICAgIHJldHVyblxyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gICBjb25zdCBpc3N1ZXMgPSBsYXlvdXRGZWVkYmFja1tsYXlvdXRGZWVkYmFjay5sZW5ndGggLSAxXT8uYW5zd2Vycz8uWzBdPy5pc3N1ZXM7XHJcblxyXG4gICAgLy8gICBpZiAoaXNzdWVzPy5sZW5ndGgpIHtcclxuICAgIC8vICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGlzc3Vlcykge1xyXG4gICAgLy8gICAgICAgY29uc3QgZGV0YWlscyA9IGlzc3VlPy5EZXRhaWxzIHx8IFtdO1xyXG4gICAgLy8gICAgICAgaWYgKGRldGFpbHMuc29tZSgoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gJ2Rpc2FncmVlJykpIHtcclxuICAgIC8vICAgICAgICAgaGFzRGlzYWdyZWUgPSB0cnVlO1xyXG4gICAgLy8gICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyAgIGlmIChoYXNEaXNhZ3JlZSkge1xyXG4gICAgLy8gICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2xheW91dC1yZWRvJztcclxuICAgIC8vICAgICByZXR1cm5cclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnbGF5b3V0J1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICgoIXRoaXMuc3RvcmVGZWVkYmFjaz8ubGF5b3V0RGF0YT8ubGVuZ3RoICYmICF0aGlzLnN0b3JlRmVlZGJhY2s/LmZpeHR1cmVEYXRhPy5sZW5ndGggJiYgIXRoaXMuc3RvcmVGZWVkYmFjaz8uVm1EYXRhPy5sZW5ndGgpKSB7XHJcbiAgICAvLyAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2xheW91dCdcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFRlbXBsYXRlKGZpeHR1cmVDb25maWdJZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRGaXh0dXJlVGVtcGxhdGUoZml4dHVyZUNvbmZpZ0lkKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3NMYXlvdXRGZWVkYmFjayhzdG9yZUZlZWRiYWNrOiBhbnlbXSkge1xyXG4gICAgY29uc3QgbGF5b3V0RmVlZGJhY2sgPSBzdG9yZUZlZWRiYWNrLmZpbmQoXHJcbiAgICAgIChmZWVkYmFjaykgPT4gZmVlZGJhY2sudHlwZSA9PT0gXCJsYXlvdXRcIlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB3YWxsRWxlbWVudHMgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbHRlcihcclxuICAgICAgKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCJcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGxheW91dEZlZWRiYWNrKSB7XHJcbiAgICAgIGNvbnN0IGlzc3VlcyA9IGxheW91dEZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/Lmlzc3VlcztcclxuXHJcbiAgICAgIGlmIChpc3N1ZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGlzc3Vlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXNzdWUgPSBpc3N1ZXNbaV07XHJcblxyXG4gICAgICAgICAgaWYgKGlzc3VlLmlzc3VlVHlwZSA9PT0gXCJleHRyYUZpeHR1cmVcIikge1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IGlzc3VlLkRldGFpbHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSBcInBlbmRpbmdcIlxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmaXh0dXJlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBmaXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdGVtcGxhdGU6IGFueSA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGUoXHJcbiAgICAgICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVDb25maWdJZFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICghdGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGdob3N0Rml4dHVyZSA9IHtcclxuICAgICAgICAgICAgICAgIC4uLnRlbXBsYXRlPy5kYXRhLFxyXG4gICAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZT8uZGF0YT8uX2lkLFxyXG4gICAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIHVuaXQ6IFwiZnRcIiB9LFxyXG4gICAgICAgICAgICAgICAgc2hlbGZDb25maWc6IGZpeHR1cmUuc2hlbGZDb25maWcsXHJcbiAgICAgICAgICAgICAgICBnaG9zdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBmaXh0dXJlLFxyXG4gICAgICAgICAgICAgICAgdGFza1R5cGU6IFwibGF5b3V0XCIsXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoeyBmaXh0dXJlTmFtZTogZ2hvc3RGaXh0dXJlLmZpeHR1cmVOYW1lLCBmaXh0dXJlQ29uZmlnSWQ6IGdob3N0Rml4dHVyZS5maXh0dXJlQ29uZmlnSWQsIF9pZDogZ2hvc3RGaXh0dXJlLl9pZCB9KTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHdhbGxJbmRleDogbnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc29jV2FsbE51bSA9IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzb2NXYWxsTnVtID49IHdhbGxFbGVtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEluZGV4ID0gd2FsbEVsZW1lbnRzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXNzb2NXYWxsTnVtIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEluZGV4ID0gMDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHdhbGxJbmRleCA9IGFzc29jV2FsbE51bTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50Rml4dHVyZXM6IGFueSA9IHdhbGxFbGVtZW50cy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSB3YWxsSW5kZXhcclxuICAgICAgICAgICAgICAgICkuZml4dHVyZXM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhc3NvY0ZpeHR1cmVOdW0gPSBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXNzb2NGaXh0dXJlTnVtID4gZWxlbWVudEZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuZml4dHVyZXMucHVzaChnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghIC0gMSkucHVzaChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhc3NvY0ZpeHR1cmVOdW0gPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuZml4dHVyZXMudW5zaGlmdChnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghIC0gMSkuaW5zZXJ0KDAsIGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAgICAgICAgICAgLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZWxlbWVudDogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuZml4dHVyZXMuc3BsaWNlKGFzc29jRml4dHVyZU51bSAtIDEsIDAsIGdob3N0Rml4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEgLSAxKS5pbnNlcnQoYXNzb2NGaXh0dXJlTnVtIC0gMSwgZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc29jRml4dHVyZU51bSA9IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhc3NvY0ZpeHR1cmVOdW0gPiB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLnB1c2goZ2hvc3RGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFzc29jRml4dHVyZU51bSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUudW5zaGlmdChnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLmluc2VydCgwLCBmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5zcGxpY2UoXHJcbiAgICAgICAgICAgICAgICAgICAgYXNzb2NGaXh0dXJlTnVtIC0gMSxcclxuICAgICAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGdob3N0Rml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLmluc2VydChhc3NvY0ZpeHR1cmVOdW0gLSAxLCBmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgaXNzdWUuaXNzdWVUeXBlID09PSBcImZpeHR1cmVNaXNzaW5nXCIgfHxcclxuICAgICAgICAgICAgaXNzdWUuaXNzdWVUeXBlID09PSBcImZpeHR1cmVNaXNtYXRjaFwiXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZXMgPSBpc3N1ZS5EZXRhaWxzLmZpbHRlcihcclxuICAgICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCJcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlID0gZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgICAgICAgIC8vIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ3dhbGwnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgd2FsbEVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5lbGVtZW50VHlwZSAhPT0gXCJ3YWxsXCIgfHxcclxuICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkod2FsbEVsZW1lbnQuZml4dHVyZXMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IHdhbGxFbGVtZW50LmZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLndhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFza1R5cGU6IFwibGF5b3V0XCIsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIC8vIGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnZmxvb3InKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNlbnRlckZpeHR1cmVzID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gY2VudGVyRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi5jZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcImxheW91dFwiLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NGaXh0dXJlRmVlZGJhY2soc3RvcmVGZWVkYmFjazogYW55W10pIHtcclxuICAgIGNvbnN0IGZpeHR1cmVGZWVkYmFjayA9IHN0b3JlRmVlZGJhY2suZmlsdGVyKFxyXG4gICAgICAoZmVlZGJhY2spID0+IGZlZWRiYWNrLnR5cGUgPT09IFwiZml4dHVyZVwiXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBmaW5kRml4dHVyZVRhc2sgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZChcclxuICAgICAgKHRhc2s6IGFueSkgPT4gdGFzay50eXBlID09IFwiZml4dHVyZVwiXHJcbiAgICApO1xyXG5cclxuICAgIGZvciAoY29uc3QgZmVlZGJhY2sgb2YgZml4dHVyZUZlZWRiYWNrID8/IFtdKSB7XHJcbiAgICAgIGNvbnN0IGFpRGF0YSA9IGZlZWRiYWNrPy5maXh0dXJlQUlEYXRhO1xyXG4gICAgICBpZiAoIWFpRGF0YSkgY29udGludWU7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZpbmQoXHJcbiAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IGFpRGF0YS5maXh0dXJlSWRcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFmaXh0dXJlKSBjb250aW51ZTtcclxuXHJcbiAgICAgIGZlZWRiYWNrLkZpeHR1cmVEYXRhID0gc3RydWN0dXJlZENsb25lKGZpeHR1cmUpO1xyXG5cclxuICAgICAgY29uc3Qgc3RhdHVzID1cclxuICAgICAgICAoZmluZEZpeHR1cmVUYXNrPy5zdGF0dXMgPT09IFwic3VibWl0XCIgfHwgZmluZEZpeHR1cmVUYXNrPy5yZWRvU3RhdHVzKSAmJlxyXG4gICAgICAgIGZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/LnN0YXR1c1xyXG4gICAgICAgICAgPyBmZWVkYmFjay5hbnN3ZXJzWzBdLnN0YXR1c1xyXG4gICAgICAgICAgOiBcIlwiO1xyXG5cclxuICAgICAgT2JqZWN0LmFzc2lnbihmaXh0dXJlLCB7XHJcbiAgICAgICAgaXNzdWU6IGZhbHNlLFxyXG4gICAgICAgIGlzc3VlRGF0YTogYWlEYXRhLFxyXG4gICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgICBzdGF0dXMsXHJcbiAgICAgICAgYnJlYWNoOiBmaW5kRml4dHVyZVRhc2s/LmJyZWFjaCxcclxuICAgICAgICB0YXNrU3RhdHVzOiBmaW5kRml4dHVyZVRhc2s/LnN0YXR1cyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcm9jZXNzRml4dHVyZUZlZWRiYWNrT2xkKHN0b3JlRmVlZGJhY2s6IGFueVtdKSB7XHJcbiAgICBjb25zdCBmaXh0dXJlRmVlZGJhY2sgPSBzdG9yZUZlZWRiYWNrLmZpbHRlcihcclxuICAgICAgKGZlZWRiYWNrKSA9PiBmZWVkYmFjay50eXBlID09PSBcImZpeHR1cmVcIlxyXG4gICAgKTtcclxuICAgIGlmIChmaXh0dXJlRmVlZGJhY2subGVuZ3RoKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZUZlZWRiYWNrLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgaXNzdWVzID0gZml4dHVyZUZlZWRiYWNrPy5baV0/LmFuc3dlcnM/LlswXT8uaXNzdWVzO1xyXG5cclxuICAgICAgICBpZiAoaXNzdWVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaXNzdWVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzc3VlID0gaXNzdWVzW2pdO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZXMgPSBpc3N1ZS5EZXRhaWxzLmZpbHRlcihcclxuICAgICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gXCJwZW5kaW5nXCJcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlID0gZml4dHVyZXNbal07XHJcblxyXG4gICAgICAgICAgICAgIC8vIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ3dhbGwnKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgd2FsbEVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5lbGVtZW50VHlwZSAhPT0gXCJ3YWxsXCIgfHxcclxuICAgICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkod2FsbEVsZW1lbnQuZml4dHVyZXMpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IHdhbGxFbGVtZW50LmZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICB3YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLndhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgdGFza1R5cGU6IFwiZml4dHVyZVwiLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBlbHNlIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ2Zsb29yJykge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBjZW50ZXJGaXh0dXJlcyA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IGNlbnRlckZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWRcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgLi4uY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NWbUZlZWRiYWNrKHN0b3JlRmVlZGJhY2s6IGFueVtdKSB7XHJcbiAgICBjb25zdCBmaXh0dXJlRmVlZGJhY2sgPSBzdG9yZUZlZWRiYWNrLmZpbHRlcihcclxuICAgICAgKGZlZWRiYWNrKSA9PiBmZWVkYmFjay50eXBlID09PSBcInZtXCJcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVGZWVkYmFjay5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRmVlZGJhY2subGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpc3N1ZXMgPSBmaXh0dXJlRmVlZGJhY2s/LltpXT8uYW5zd2Vycz8uWzBdPy5pc3N1ZXM7XHJcblxyXG4gICAgICAgIGlmIChpc3N1ZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpc3N1ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXNzdWUgPSBpc3N1ZXNbal07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IGlzc3VlLkRldGFpbHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSBcInBlbmRpbmdcIlxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmaXh0dXJlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBmaXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnd2FsbCcpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0YXJnZXRGaXh0dXJlSWQgPSBmaXh0dXJlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB3YWxsRWxlbWVudCBvZiB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHdhbGxFbGVtZW50LmVsZW1lbnRUeXBlICE9PSBcIndhbGxcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh3YWxsRWxlbWVudC5maXh0dXJlcylcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gd2FsbEVsZW1lbnQuZml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAoZjogYW55KSA9PiBmLl9pZCA9PT0gdGFyZ2V0Rml4dHVyZUlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ud2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlcyxcclxuICAgICAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJ2bVwiLFxyXG4gICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAvLyBlbHNlIGlmIChmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9PT0gJ2Zsb29yJykge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBjZW50ZXJGaXh0dXJlcyA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IGNlbnRlckZpeHR1cmVzLmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWRcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgLi4uY2VudGVyRml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJ2bVwiLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRyYW5zZmVyQXJyYXlJdGVtPFQgPSBhbnk+KFxyXG4gICAgY3VycmVudEFycmF5OiBUW10sXHJcbiAgICB0YXJnZXRBcnJheTogVFtdLFxyXG4gICAgY3VycmVudEluZGV4OiBudW1iZXIsXHJcbiAgICB0YXJnZXRJbmRleDogbnVtYmVyXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBmcm9tID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY3VycmVudEFycmF5Lmxlbmd0aCAtIDEsIGN1cnJlbnRJbmRleCkpO1xyXG4gICAgY29uc3QgdG8gPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0YXJnZXRBcnJheS5sZW5ndGgsIHRhcmdldEluZGV4KSk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRBcnJheS5sZW5ndGgpIHtcclxuICAgICAgdGFyZ2V0QXJyYXkuc3BsaWNlKHRvLCAwLCBjdXJyZW50QXJyYXkuc3BsaWNlKGZyb20sIDEpWzBdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlb3JkZXJGaXh0dXJlTWV0YShmbG9vckRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgbW1Ub0ZlZXQgPSAzMDU7XHJcbiAgICBjb25zdCB3MUZpeHR1cmVzID0gZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSAxXHJcbiAgICApPy5maXh0dXJlcztcclxuICAgIGNvbnN0IHcxRml4dHVyZXNYID0gdzFGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChzdW06IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIHN1bSArIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3MUZpeHR1cmVzWSA9IHcxRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHcyRml4dHVyZXMgPSBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDJcclxuICAgICk/LmZpeHR1cmVzO1xyXG4gICAgY29uc3QgdzJGaXh0dXJlc1ggPSB3MkZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHcyRml4dHVyZXNZID0gdzJGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChzdW06IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIHN1bSArIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0LFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzNGaXh0dXJlcyA9IGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gM1xyXG4gICAgKT8uZml4dHVyZXM7XHJcbiAgICBjb25zdCB3M0ZpeHR1cmVzWCA9IHczRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAoc3VtOiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBzdW0gKyBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0LFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzNGaXh0dXJlc1kgPSB3M0ZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3NEZpeHR1cmVzID0gZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSA0XHJcbiAgICApPy5maXh0dXJlcztcclxuICAgIGNvbnN0IHc0Rml4dHVyZXNYID0gdzRGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3NEZpeHR1cmVzWSA9IHc0Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAoc3VtOiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBzdW0gKyBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHc1Rml4dHVyZXMgPSBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDVcclxuICAgICk/LmZpeHR1cmVzO1xyXG4gICAgY29uc3QgdzVGaXh0dXJlc1ggPSB3NUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHc1Rml4dHVyZXNZID0gdzVGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChzdW06IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIHN1bSArIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0LFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgY0ZpeHR1cmVzID0gZmxvb3JEYXRhLmNlbnRlckZpeHR1cmU7XHJcbiAgICBjb25zdCBjRml4dHVyZXNYID1cclxuICAgICAgY0ZpeHR1cmVzLmxlbmd0aCAqXHJcbiAgICAgIGNGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgIGNvbnN0IGNGaXh0dXJlc1kgPVxyXG4gICAgICAyICpcclxuICAgICAgY0ZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgIGNvbnN0IGVudHJhbmNlWSA9IDEwO1xyXG5cclxuICAgIGxldCBtaW5YRGlzdGFuY2UgPSBNYXRoLm1heCh3MUZpeHR1cmVzWCwgY0ZpeHR1cmVzWCwgdzNGaXh0dXJlc1gpO1xyXG4gICAgaWYgKHcyRml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgIG1pblhEaXN0YW5jZSArPSB3MkZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh3NEZpeHR1cmVzLmxlbmd0aCB8fCB3NUZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICBpZiAodzRGaXh0dXJlcy5sZW5ndGggJiYgdzVGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICBtaW5YRGlzdGFuY2UgKz0gdzVGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAgIDBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHc0Rml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbWluWERpc3RhbmNlICs9IHc0Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmICh3NUZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgIG1pblhEaXN0YW5jZSArPSB3NUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBpZihjRml4dHVyZXMubGVuZ3RoKXtcclxuICAgIC8vICAgbWluWERpc3RhbmNlICs9IDIgKiAoY0ZpeHR1cmVzLnJlZHVjZSgobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT4gTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSwgMCkpXHJcbiAgICAvLyB9XHJcblxyXG4gICAgbGV0IG1pbllEaXN0YW5jZSA9IE1hdGgubWF4KFxyXG4gICAgICB3MkZpeHR1cmVzWSxcclxuICAgICAgY0ZpeHR1cmVzWSxcclxuICAgICAgdzRGaXh0dXJlc1kgKyB3NUZpeHR1cmVzWSArIGVudHJhbmNlWVxyXG4gICAgKTtcclxuICAgIGlmICh3MUZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICBtaW5ZRGlzdGFuY2UgKz0gdzFGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHczRml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgIG1pbllEaXN0YW5jZSArPSB3M0ZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY0ZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICBtaW5ZRGlzdGFuY2UgKz1cclxuICAgICAgICAyICpcclxuICAgICAgICBjRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDEpIHtcclxuICAgICAgICBlbGVtZW50LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKG1pblhEaXN0YW5jZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDJcclxuICAgICAgKSB7XHJcbiAgICAgICAgZWxlbWVudC5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhtaW5ZRGlzdGFuY2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSAzXHJcbiAgICAgICkge1xyXG4gICAgICAgIGVsZW1lbnQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28obWluWERpc3RhbmNlKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICAgIChlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDQgfHwgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSA1KSkgfHxcclxuICAgICAgICAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiICYmIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gMSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHc0TGVuZ3RoID0gdzRGaXh0dXJlcz8ubGVuZ3RoXHJcbiAgICAgICAgICA/ICh3NEZpeHR1cmVzLmxlbmd0aCArIDEpICpcclxuICAgICAgICAgICAgdzRGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIDogMDtcclxuXHJcbiAgICAgICAgY29uc3QgdzVMZW5ndGggPSB3NUZpeHR1cmVzPy5sZW5ndGhcclxuICAgICAgICAgID8gKHc1Rml4dHVyZXMubGVuZ3RoICsgMSkgKlxyXG4gICAgICAgICAgICB3NUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgOiAwO1xyXG5cclxuICAgICAgICBjb25zdCB1c2VkWSA9IHc0TGVuZ3RoICsgdzVMZW5ndGg7XHJcbiAgICAgICAgY29uc3QgcmVtYWluaW5nWSA9IE1hdGgubWF4KG1pbllEaXN0YW5jZSAtIHVzZWRZLCAwKTtcclxuXHJcbiAgICAgICAgY29uc3QgdzRFbXB0eSA9IHc0TGVuZ3RoID09PSAwO1xyXG4gICAgICAgIGNvbnN0IHc1RW1wdHkgPSB3NUxlbmd0aCA9PT0gMDtcclxuXHJcbiAgICAgICAgbGV0IGVudHJhbmNlTGVuZ3RoID0gMDtcclxuICAgICAgICBsZXQgdzRGaW5hbCA9IHc0TGVuZ3RoO1xyXG4gICAgICAgIGxldCB3NUZpbmFsID0gdzVMZW5ndGg7XHJcblxyXG4gICAgICAgIGlmICh3NEVtcHR5ICYmIHc1RW1wdHkpIHtcclxuICAgICAgICAgIHc0RmluYWwgPSB3NUZpbmFsID0gZW50cmFuY2VMZW5ndGggPSBtaW5ZRGlzdGFuY2UgLyAzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodzRFbXB0eSAmJiAhdzVFbXB0eSkge1xyXG4gICAgICAgICAgdzVGaW5hbCA9IHc1TGVuZ3RoO1xyXG4gICAgICAgICAgdzRGaW5hbCA9IHJlbWFpbmluZ1kgLyAyO1xyXG4gICAgICAgICAgZW50cmFuY2VMZW5ndGggPSByZW1haW5pbmdZIC8gMjtcclxuICAgICAgICB9IGVsc2UgaWYgKCF3NEVtcHR5ICYmIHc1RW1wdHkpIHtcclxuICAgICAgICAgIHc0RmluYWwgPSB3NExlbmd0aDtcclxuICAgICAgICAgIHc1RmluYWwgPSByZW1haW5pbmdZIC8gMjtcclxuICAgICAgICAgIGVudHJhbmNlTGVuZ3RoID0gcmVtYWluaW5nWSAvIDI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGVudHJhbmNlTGVuZ3RoID0gcmVtYWluaW5nWTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDQpIHtcclxuICAgICAgICAgIGVsZW1lbnQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28odzRGaW5hbCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGVsZW1lbnQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28odzVGaW5hbCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIiAmJlxyXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSAxXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBlbGVtZW50LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKGVudHJhbmNlTGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBmaXh0dXJlTnVtYmVyID0gMTtcclxuXHJcbiAgICBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gMSkge1xyXG4gICAgICAgIGxldCB3YWxsQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuICAgICAgICBsZXQgY3VycmVudFggPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50WSA9IDA7XHJcbiAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY3VycmVudFggPSAoZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCkgKiBpO1xyXG4gICAgICAgICAgaWYgKHc1Rml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRYICs9IGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WCk7XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WSk7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IDE7XHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJ3YWxsXCI7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSB3YWxsQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDJcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgICAgIGxldCBjdXJyZW50WCA9IGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDFcclxuICAgICAgICApPy5kaXN0YW5jZTtcclxuICAgICAgICBsZXQgY3VycmVudFkgPSAwO1xyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRZID0gKGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSAqIGk7XHJcbiAgICAgICAgICBpZiAodzFGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY3VycmVudFkgKz0gZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMucm91bmRUb1R3byhcclxuICAgICAgICAgICAgY3VycmVudFggLSBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLnJvdW5kVG9Ud28oY3VycmVudFkpO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIgPSAyO1xyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwid2FsbFwiO1xyXG5cclxuICAgICAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gd2FsbEFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSAzXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCB3YWxsQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuICAgICAgICBsZXQgY3VycmVudFggPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50WSA9IGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDJcclxuICAgICAgICApPy5kaXN0YW5jZTtcclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjdXJyZW50WCA9IChmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSAqIGk7XHJcbiAgICAgICAgICBpZiAodzRGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY3VycmVudFggKz0gZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRYKTtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5yb3VuZFRvVHdvKFxyXG4gICAgICAgICAgICBjdXJyZW50WSAtIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPSBcIndhbGxcIjtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIgPSAzO1xyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwid2FsbFwiO1xyXG5cclxuICAgICAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gd2FsbEFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSA0XHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCB3YWxsQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuICAgICAgICBsZXQgY3VycmVudFggPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50WSA9XHJcbiAgICAgICAgICBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgICAod2FsbDogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gNVxyXG4gICAgICAgICAgKT8uZGlzdGFuY2UgK1xyXG4gICAgICAgICAgZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICAgKHdhbGw6IGFueSkgPT5cclxuICAgICAgICAgICAgICB3YWxsLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSAxXHJcbiAgICAgICAgICApPy5kaXN0YW5jZTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLnJvdW5kVG9Ud28oY3VycmVudFgpO1xyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLnJvdW5kVG9Ud28oXHJcbiAgICAgICAgICAgIGN1cnJlbnRZICsgKGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSAqIGlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IDQ7XHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJ3YWxsXCI7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSB3YWxsQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDVcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgICAgIGxldCBjdXJyZW50WCA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gMDtcclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjdXJyZW50WSA9XHJcbiAgICAgICAgICAgIChmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCkgKiBpICtcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQ7XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WCk7XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WSk7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IDU7XHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJ3YWxsXCI7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSB3YWxsQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IG1heEZpeHR1cmVzUGVyUm93ID0gZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUubGVuZ3RoIC8gMjtcclxuICAgIGNvbnN0IHRvdGFsUm93cyA9IDI7XHJcbiAgICBjb25zdCBjZW50ZXJSb3cgPSBNYXRoLmZsb29yKHRvdGFsUm93cyAvIDIpO1xyXG5cclxuICAgIGxldCBmbG9vckFzc29jaWF0ZWRJbmRleCA9IDE7XHJcblxyXG4gICAgZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGNvbnN0IHN0YXJ0WCA9XHJcbiAgICAgICAgbWluWERpc3RhbmNlIC8gMiAtXHJcbiAgICAgICAgKG1heEZpeHR1cmVzUGVyUm93IC8gMikgKiAoZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCk7XHJcbiAgICAgIGNvbnN0IHN0YXJ0WSA9XHJcbiAgICAgICAgbWluWURpc3RhbmNlIC8gMiAtXHJcbiAgICAgICAgY2VudGVyUm93ICogKGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KTtcclxuXHJcbiAgICAgIGNvbnN0IGNvbEluZGV4ID0gTWF0aC5mbG9vcihpbmRleCAvIDIpO1xyXG4gICAgICBjb25zdCByb3dJbmRleCA9IGluZGV4ICUgMiA9PT0gMCA/IDEgOiAwO1xyXG5cclxuICAgICAgY29uc3QgY3VycmVudFggPVxyXG4gICAgICAgIHN0YXJ0WCArIGNvbEluZGV4ICogKGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpO1xyXG4gICAgICBjb25zdCBjdXJyZW50WSA9XHJcbiAgICAgICAgc3RhcnRZICsgcm93SW5kZXggKiAoZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpO1xyXG5cclxuICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLnJvdW5kVG9Ud28oY3VycmVudFgpO1xyXG4gICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WSk7XHJcbiAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcImZsb29yXCI7XHJcblxyXG4gICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBmbG9vckFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlb3JkZXJGaXh0dXJlKGZsb29yRGF0YTogYW55KSB7XHJcbiAgICBsZXQgZml4dHVyZU51bWJlciA9IDE7XHJcblxyXG4gICAgLy8gV2FsbHNcclxuICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcblxyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IGVsZW1lbnQuZWxlbWVudE51bWJlcjtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ2VudGVyIGZsb29yIGZpeHR1cmVzXHJcbiAgICBsZXQgZmxvb3JBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcImZsb29yXCI7XHJcblxyXG4gICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBmbG9vckFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEVsZW1lbnRWYWx1ZShncm91cDogYW55KSB7XHJcbiAgICByZXR1cm4gZ3JvdXAuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXI6IGdldCB3YWxsIG1ldGEgYnkgZWxlbWVudCBudW1iZXIgKDEtYmFzZWQpXHJcbiAgcHJpdmF0ZSBnZXRXYWxsQnlOdW1iZXIoZWxlbWVudE51bWJlcjogbnVtYmVyKTogYW55IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbj8uZmluZChcclxuICAgICAgKHc6IGFueSkgPT4gdy5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgdy5lbGVtZW50TnVtYmVyID09PSBlbGVtZW50TnVtYmVyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gSGVscGVyOiBmaW5kIGZpeHR1cmUgYnkgaWQgYWNyb3NzIHdhbGxzIGFuZCBjZW50ZXIgZml4dHVyZXNcclxuICBwcml2YXRlIGZpbmRGaXh0dXJlQnlJZChcclxuICAgIGZpeHR1cmVJZDogc3RyaW5nXHJcbiAgKTogeyBmaXh0dXJlOiBhbnk7IHBhcmVudD86IGFueSB9IHwgbnVsbCB7XHJcbiAgICBpZiAoIWZpeHR1cmVJZCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uID8/IFtdKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQuZml4dHVyZXMpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaXh0dXJlIG9mIGVsZW1lbnQuZml4dHVyZXMpIHtcclxuICAgICAgICAgIGlmIChmaXh0dXJlLl9pZCA9PT0gZml4dHVyZUlkKSByZXR1cm4geyBmaXh0dXJlLCBwYXJlbnQ6IGVsZW1lbnQgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgdGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUgPz8gW10pIHtcclxuICAgICAgaWYgKGZpeHR1cmUuX2lkID09PSBmaXh0dXJlSWQpIHJldHVybiB7IGZpeHR1cmUsIHBhcmVudDogdGhpcy5mbG9vckRhdGEgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHJvdW5kVG9Ud28obnVtOiBudW1iZXIpIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKG51bSAqIDEwMCkgLyAxMDA7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRTdG9yZUZpeHR1cmVzKHN0b3JlSWQ6IHN0cmluZywgZW5hYmxlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuZml4dHVyZVRlbXBsYXRlcy5sZW5ndGgpIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRGaXh0dXJlVGVtcGxhdGVzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IG51bGw7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldFN0b3JlRml4dHVyZXMoeyBpZDogW3N0b3JlSWRdLCB0cmVlVmlldzogdHJ1ZSB9KVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCFyZXM/LmRhdGE/LlswXT8uZmxvb3JzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMucGxhbm9EYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdKTtcclxuICAgICAgICAgIGlmICh0aGlzLmZsb29yRGF0YT8uX2lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0gc3RydWN0dXJlZENsb25lKFxyXG4gICAgICAgICAgICAgIHJlcy5kYXRhWzBdLmZsb29ycy5maW5kKFxyXG4gICAgICAgICAgICAgICAgKGZsb29yOiBhbnkpID0+IGZsb29yPy5faWQgPT09IHRoaXMuZmxvb3JEYXRhPy5faWRcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZsb29yRGF0YSA9IHN0cnVjdHVyZWRDbG9uZShyZXMuZGF0YVswXS5mbG9vcnNbMF0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuZXh0cmFjdEFsbEZpeHR1cmVzKHRoaXMuZmxvb3JEYXRhKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vcklkLnNldFZhbHVlKHRoaXMuZmxvb3JEYXRhLl9pZCwge1xyXG4gICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zdG9yZU1ldHJpY3MuZmxvb3JDb3VudCA9IHRoaXMucGxhbm9EYXRhPy5mbG9vcnM/Lmxlbmd0aDtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpc2FibGVFZGl0ID0gZmFsc2U7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICAgICAgdGhpcy50YXNrRGV0YWlscyh0aGlzLmZsb29yRGF0YS5wbGFub0lkLCB0aGlzLmZsb29yRGF0YS5faWQpLFxyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGZWVkYmFjayhcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgICB7fVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfSBjYXRjaCB7fVxyXG5cclxuICAgICAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuXHJcbiAgICAgICAgICAvLyB0aGlzLnNlbGVjdEZpeHR1cmVGZWVkYmFjaygpO1xyXG5cclxuICAgICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgaWYgKGVuYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxheW91dEZvcm0/LmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHBsYW5vXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXh0cmFjdEFsbEZpeHR1cmVzKGZsb29yRGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBleHRyYWN0ZWRGaXh0dXJlID0gW1xyXG4gICAgICAuLi4oZmxvb3JEYXRhPy5tYXN0ZXJUZW1wbGF0ZXMgPz8gW10pLFxyXG4gICAgICAuLi4oZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlID8/IFtdKSxcclxuICAgIF07XHJcblxyXG4gICAgZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5mb3JFYWNoKChscDogYW55KSA9PiB7XHJcbiAgICAgIGV4dHJhY3RlZEZpeHR1cmUucHVzaCguLi4obHAuZml4dHVyZXMgPz8gW10pKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWxsRml4dHVyZXMgPSBleHRyYWN0ZWRGaXh0dXJlO1xyXG5cclxuICAgIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcyA9IFtcclxuICAgICAgLi4udGhpcy5mbG9vckRhdGEhLmxheW91dFBvbHlnb24uZmxhdE1hcCgoZTogYW55KSA9PiBlPy5maXh0dXJlcyA/PyBbXSksXHJcbiAgICAgIC4uLih0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZSA/PyBbXSksXHJcbiAgICBdO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVuZGVyRmxvb3IodXBkYXRlOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5zdG9yZU1ldHJpY3MuZml4dHVyZUNvdW50ID0gdGhpcy5mbG9vckRhdGEuZml4dHVyZUNvdW50O1xyXG4gICAgdGhpcy5zdG9yZU1ldHJpY3Mudm1Db3VudCA9IHRoaXMuZmxvb3JEYXRhLnZtQ291bnQ7XHJcbiAgICB0aGlzLmRyYXdJbml0aWFsQ29udGVudCgpO1xyXG4gICAgaWYgKHVwZGF0ZSkge1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgod2FsbDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBjb25zdCB3YWxsSXRlbSA9IHRoaXMucGF0Y2hXYWxsRWxlbWVudHMoe1xyXG4gICAgICAgICAgICBlbGVtZW50VHlwZTogd2FsbC5lbGVtZW50VHlwZSxcclxuICAgICAgICAgICAgZWxlbWVudE51bWJlcjogd2FsbC5lbGVtZW50TnVtYmVyLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgd2FsbC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpeHR1cmU/LmZpeHR1cmVOYW1lID09PSBcInNwYWNlXCIpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVOYW1lOiBmaXh0dXJlLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogZml4dHVyZS5maXh0dXJlQ29uZmlnSWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlLl9pZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICh3YWxsSXRlbS5nZXQoXCJmaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHdhbGwub3RoZXJFbGVtZW50cz8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZWxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgICB0eXBlOiBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLm90aGVyRWxlbWVudExpc3Quc29tZSgobykgPT4gby52YWx1ZSA9PT0gZWxlLmZpeHR1cmVOYW1lKVxyXG4gICAgICAgICAgICAgICAgICA/IGVsZS5maXh0dXJlTmFtZVxyXG4gICAgICAgICAgICAgICAgICA6IFwiT3RoZXJzXCIsXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBjdXN0b21OYW1lOiBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLm90aGVyRWxlbWVudExpc3Quc29tZSgobykgPT4gby52YWx1ZSA9PT0gZWxlLmZpeHR1cmVOYW1lKVxyXG4gICAgICAgICAgICAgICAgICA/IFwiXCJcclxuICAgICAgICAgICAgICAgICAgOiBlbGUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICh3YWxsSXRlbS5nZXQoXCJvdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheSkucHVzaChlbGVHcm91cCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1XYWxscy5wdXNoKHdhbGxJdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZS5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgZml4dHVyZU5hbWU6IGZpeHR1cmUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogZml4dHVyZS5maXh0dXJlQ29uZmlnSWQsXHJcbiAgICAgICAgICAgIF9pZDogZml4dHVyZS5faWQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgICh0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgICAgIGZpeHR1cmVHcm91cFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YT8ub3RoZXJFbGVtZW50cz8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGVsZUdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFtcclxuICAgICAgICAgICAgICB0aGlzLm90aGVyRWxlbWVudExpc3Quc29tZSgobykgPT4gby52YWx1ZSA9PT0gZWxlLmZpeHR1cmVOYW1lKVxyXG4gICAgICAgICAgICAgICAgPyBlbGUuZml4dHVyZU5hbWVcclxuICAgICAgICAgICAgICAgIDogXCJPdGhlcnNcIixcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgY3VzdG9tTmFtZTogW1xyXG4gICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICA/IFwiXCJcclxuICAgICAgICAgICAgICAgIDogZWxlLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vck90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgICAgICBlbGVHcm91cFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlVG9GaXh0dXJlQ29uZmlnSWRDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnN1YnNjcmliZVRvT3RoZXJFbGVtZW50c0NoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdJbml0aWFsQ29udGVudCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuY2FudmFzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnJlb3JkZXJGaXh0dXJlKHRoaXMuZmxvb3JEYXRhKTtcclxuICAgIGF3YWl0IHRoaXMuZHJhd0xheW91dEVsZW1lbnRzKCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVzaXplQ2FudmFzKCk7XHJcbiAgICAgIHRoaXMuZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZCgpO1xyXG4gICAgfSwgMzAwKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2s/LmZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUlkICYmXHJcbiAgICAgICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCAmJlxyXG4gICAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuY2FudmFzLmFkZCh0aGlzLmFjdGl2ZUhpZ2hsaWdodCk7XHJcbiAgICAgIHRoaXMua2VlcEhpZ2hsaWdodE9uVG9wKCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmRyYXdCZygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGdWxsTGF5b3V0Qm91bmRzKCkge1xyXG4gICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHJldHVybiB7IGxlZnQ6IDAsIHRvcDogMCwgd2lkdGg6IDAsIGhlaWdodDogMCB9O1xyXG5cclxuICAgIGxldCBtaW5YID0gSW5maW5pdHksXHJcbiAgICAgIG1pblkgPSBJbmZpbml0eSxcclxuICAgICAgbWF4WCA9IC1JbmZpbml0eSxcclxuICAgICAgbWF4WSA9IC1JbmZpbml0eTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IG9iaiBvZiBvYmplY3RzKSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCByZWN0LmxlZnQpO1xyXG4gICAgICBtaW5ZID0gTWF0aC5taW4obWluWSwgcmVjdC50b3ApO1xyXG4gICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCk7XHJcbiAgICAgIG1heFkgPSBNYXRoLm1heChtYXhZLCByZWN0LnRvcCArIHJlY3QuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBsZWZ0OiBtaW5YLFxyXG4gICAgICB0b3A6IG1pblksXHJcbiAgICAgIHdpZHRoOiBtYXhYIC0gbWluWCxcclxuICAgICAgaGVpZ2h0OiBtYXhZIC0gbWluWSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQoZHVyYXRpb24gPSA0MDApIHtcclxuICAgIGlmICghdGhpcy5jYW52YXMpIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoKTtcclxuICAgIGlmICghYm91bmRzLndpZHRoIHx8ICFib3VuZHMuaGVpZ2h0KSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgY2FudmFzVyA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCk7XHJcbiAgICBjb25zdCBjYW52YXNIID0gdGhpcy5jYW52YXMuZ2V0SGVpZ2h0KCk7XHJcblxyXG4gICAgLy8gRmluYWwgem9vbSB0byBmaXQgKHdpdGggcGFkZGluZylcclxuICAgIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1cgLyBib3VuZHMud2lkdGg7XHJcbiAgICBjb25zdCBzY2FsZVkgPSBjYW52YXNIIC8gYm91bmRzLmhlaWdodDtcclxuICAgIGNvbnN0IHRhcmdldFpvb20gPSBNYXRoLm1pbihzY2FsZVgsIHNjYWxlWSkgKiAwLjk7IC8vIHBhZGRpbmcgMTAlXHJcblxyXG4gICAgLy8gRGVzaXJlZCB2aWV3cG9ydCBvZmZzZXQgdG8gY2VudGVyIGxheW91dFxyXG4gICAgY29uc3QgdGFyZ2V0VnB0ID0gW1xyXG4gICAgICAuLi4odGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0gfHwgWzEsIDAsIDAsIDEsIDAsIDBdKSxcclxuICAgIF0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICB0YXJnZXRWcHRbMF0gPSB0YXJnZXRab29tOyAvLyBzY2FsZVhcclxuICAgIHRhcmdldFZwdFszXSA9IHRhcmdldFpvb207IC8vIHNjYWxlWVxyXG5cclxuICAgIHRhcmdldFZwdFs0XSA9IGNhbnZhc1cgLyAyIC0gKGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC8gMikgKiB0YXJnZXRab29tOyAvLyBjZW50ZXIgWFxyXG4gICAgdGFyZ2V0VnB0WzVdID0gY2FudmFzSCAvIDIgLSAoYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLyAyKSAqIHRhcmdldFpvb207IC8vIGNlbnRlciBZXHJcblxyXG4gICAgLy8gQ3VycmVudCB2aWV3cG9ydCAoc3RhcnRpbmcgcG9pbnQgb2YgYW5pbWF0aW9uKVxyXG4gICAgY29uc3Qgc3RhcnRWcHQgPSBbLi4udGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIGZhYnJpYy51dGlsLmFuaW1hdGUoe1xyXG4gICAgICBzdGFydFZhbHVlOiAwLFxyXG4gICAgICBlbmRWYWx1ZTogMSxcclxuICAgICAgZHVyYXRpb24sXHJcbiAgICAgIGVhc2luZzogZmFicmljLnV0aWwuZWFzZS5lYXNlT3V0Q3ViaWMsXHJcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IG51bWJlcikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtITtcclxuXHJcbiAgICAgICAgLy8gSW50ZXJwb2xhdGUgbWF0cml4IHZhbHVlc1xyXG4gICAgICAgIHZwdFswXSA9IHN0YXJ0VnB0WzBdICsgKHRhcmdldFZwdFswXSAtIHN0YXJ0VnB0WzBdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFszXSA9IHN0YXJ0VnB0WzNdICsgKHRhcmdldFZwdFszXSAtIHN0YXJ0VnB0WzNdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFs0XSA9IHN0YXJ0VnB0WzRdICsgKHRhcmdldFZwdFs0XSAtIHN0YXJ0VnB0WzRdKSAqIHZhbHVlO1xyXG4gICAgICAgIHZwdFs1XSA9IHN0YXJ0VnB0WzVdICsgKHRhcmdldFZwdFs1XSAtIHN0YXJ0VnB0WzVdKSAqIHZhbHVlO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRyYXdMYXlvdXRFbGVtZW50cygpIHtcclxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbltpbmRleF07XHJcblxyXG4gICAgICBsZXQgd2FsbDtcclxuXHJcbiAgICAgIGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbiA/Pz0ge1xyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMCxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgZWxlbWVudC51bml0KTtcclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIGVsZW1lbnQudW5pdCk7XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLndhbGxUaGlja25lc3M7XHJcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQuZGlzdGFuY2UsIGVsZW1lbnQudW5pdCk7XHJcbiAgICAgICAgd2FsbCA9IGF3YWl0IHRoaXMuZHJhd1dhbGwodGhpcy5jYW52YXMsIHgsIHksIGhlaWdodCwgd2lkdGgsIGVsZW1lbnQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICAgIGNvbnN0IGFycm93V2lkdGggPSA4MDtcclxuICAgICAgICBjb25zdCBhcnJvd0hlaWdodCA9IDc1O1xyXG4gICAgICAgIGNvbnN0IGFycm93QmFzZSA9IDQwO1xyXG4gICAgICAgIHRoaXMuZHJhd0VudHJhbmNlKFxyXG4gICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICB4LFxyXG4gICAgICAgICAgeSxcclxuICAgICAgICAgIGFycm93V2lkdGgsXHJcbiAgICAgICAgICBhcnJvd0hlaWdodCxcclxuICAgICAgICAgIGFycm93QmFzZSxcclxuICAgICAgICAgIGVsZW1lbnRcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXBzOiBmYWJyaWMuR3JvdXBbXSA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/LmZpeHR1cmVzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3QgZml4dHVyZSA9IGVsZW1lbnQuZml4dHVyZXNbal07XHJcbiAgICAgICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVIZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZml4dHVyZVdpZHRoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgY29uc3QgZml4dHVyZU9iaiA9IGF3YWl0IHRoaXMuZHJhd0ZpeHR1cmUoXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICB5LFxyXG4gICAgICAgICAgICBmaXh0dXJlSGVpZ2h0LFxyXG4gICAgICAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAgICAgICAgIGZpeHR1cmVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBmaXh0dXJlR3JvdXBzLnB1c2goZml4dHVyZU9iaiBhcyBmYWJyaWMuR3JvdXApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaXNMb2NrZWQgJiYgd2FsbCkge1xyXG4gICAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlKHdhbGwpO1xyXG4gICAgICAgICAgZml4dHVyZUdyb3Vwcy5mb3JFYWNoKChmKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZikpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNvbWJpbmVkR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFt3YWxsLCAuLi5maXh0dXJlR3JvdXBzXSwge1xyXG4gICAgICAgICAgICBoYXNDb250cm9sczogdHJ1ZSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBjb21iaW5lZEdyb3VwLnNldCh7IGlzTG9ja2VkOiB0cnVlIH0pO1xyXG4gICAgICAgICAgdGhpcy5jYW52YXMuYWRkKGNvbWJpbmVkR3JvdXApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBlbGVtZW50Py5vdGhlckVsZW1lbnRzPy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgb3RoZXJFbGVtZW50ID0gZWxlbWVudC5vdGhlckVsZW1lbnRzW2pdO1xyXG4gICAgICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKTtcclxuICAgICAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgICAgICBjb25zdCBhID0gb3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24uYW5nbGU7XHJcbiAgICAgICAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVPYmogPSB0aGlzLmRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgYSxcclxuICAgICAgICAgICAgdyxcclxuICAgICAgICAgICAgaCxcclxuICAgICAgICAgICAgb3RoZXJFbGVtZW50XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIGVsZW1lbnRzR3JvdXAucHVzaChmaXh0dXJlT2JqIGFzIGZhYnJpYy5Hcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZT8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54LFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVIZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBmaXh0dXJlV2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICAgKTtcclxuICAgICAgYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShcclxuICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICB4LFxyXG4gICAgICAgIHksXHJcbiAgICAgICAgZml4dHVyZUhlaWdodCxcclxuICAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAgICAgZml4dHVyZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIGNvbnN0IG90aGVyRWxlbWVudCA9IHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHNbal07XHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLngsIFwiZnRcIik7XHJcbiAgICAgIGNvbnN0IHkgPSB0aGlzLnRvUGl4ZWxzKG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLnksIFwiZnRcIik7XHJcbiAgICAgIGNvbnN0IGEgPSBvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuICAgICAgY29uc3QgaCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZU9iaiA9IHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgeCxcclxuICAgICAgICB5LFxyXG4gICAgICAgIGEsXHJcbiAgICAgICAgdyxcclxuICAgICAgICBoLFxyXG4gICAgICAgIG90aGVyRWxlbWVudFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd1dhbGwoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBlbGVtZW50RGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICBjb25zdCByYWRpdXMgPSA1O1xyXG4gICAgY29uc3QgZmlsbENvbG9yID0gXCIjRjZGQ0ZGXCI7XHJcbiAgICBjb25zdCBzdHJva2VDb2xvciA9IFwiI0QwRDVERFwiO1xyXG4gICAgY29uc3QgbGFiZWxDb2xvciA9IFwiIzAwOUJGM1wiO1xyXG4gICAgbGV0IHRleHQgPSBgJHt0aGlzLnRpdGxlQ2FzZS50cmFuc2Zvcm0oZWxlbWVudERhdGEuZWxlbWVudFR5cGUpfSAke1xyXG4gICAgICBlbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyXHJcbiAgICB9YDtcclxuXHJcbiAgICBjb25zdCB3YWxsID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogMCxcclxuICAgICAgdG9wOiAwLFxyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBmaWxsOiBmaWxsQ29sb3IsXHJcbiAgICAgIHN0cm9rZTogc3Ryb2tlQ29sb3IsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgc3Ryb2tlVW5pZm9ybTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGNlbnRlclggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCBjZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGlzVmVydGljYWwgPSBoZWlnaHQgPiB3aWR0aDtcclxuXHJcbiAgICBjb25zdCBsYWJlbCA9IG5ldyBmYWJyaWMuRmFicmljVGV4dCh0ZXh0LCB7XHJcbiAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgZm9udFNpemU6IDEwLFxyXG4gICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGFuZ2xlOiBpc1ZlcnRpY2FsID8gLTkwIDogMCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBhcnJvd0hlYWQgPSA1O1xyXG4gICAgY29uc3QgZWxlbWVudHM6IGZhYnJpYy5PYmplY3RbXSA9IFt3YWxsLCBsYWJlbF07XHJcblxyXG4gICAgaWYgKGlzVmVydGljYWwpIHtcclxuICAgICAgY29uc3QgdGV4dFdpZHRoID0gbGFiZWwud2lkdGggfHwgMDtcclxuICAgICAgY29uc3QgdG9wQXJyb3dZID0gNTtcclxuICAgICAgY29uc3QgdG9wQXJyb3dFbmRZID0gY2VudGVyWSAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKHRvcEFycm93RW5kWSA+IHRvcEFycm93WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2NlbnRlclgsIHRvcEFycm93WSwgY2VudGVyWCwgdG9wQXJyb3dFbmRZXSwge1xyXG4gICAgICAgICAgICBzdHJva2U6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogdG9wQXJyb3dZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBib3R0b21BcnJvd1N0YXJ0WSA9IGNlbnRlclkgKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgYm90dG9tQXJyb3dFbmRZID0gaGVpZ2h0IC0gNTtcclxuXHJcbiAgICAgIGlmIChib3R0b21BcnJvd0VuZFkgPiBib3R0b21BcnJvd1N0YXJ0WSArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgIFtjZW50ZXJYLCBib3R0b21BcnJvd1N0YXJ0WSwgY2VudGVyWCwgYm90dG9tQXJyb3dFbmRZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBjZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGJvdHRvbUFycm93RW5kWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAxODAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwidG9wXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dTdGFydFggPSA1O1xyXG4gICAgICBjb25zdCBsZWZ0QXJyb3dFbmRYID0gY2VudGVyWCAtIHRleHRXaWR0aCAvIDIgLSA1O1xyXG5cclxuICAgICAgaWYgKGxlZnRBcnJvd0VuZFggPiBsZWZ0QXJyb3dTdGFydFggKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFtsZWZ0QXJyb3dTdGFydFgsIGNlbnRlclksIGxlZnRBcnJvd0VuZFgsIGNlbnRlclldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogbGVmdEFycm93U3RhcnRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogLTkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcmlnaHRBcnJvd1N0YXJ0WCA9IGNlbnRlclggKyB0ZXh0V2lkdGggLyAyICsgNTtcclxuICAgICAgY29uc3QgcmlnaHRBcnJvd0VuZFggPSB3aWR0aCAtIDU7XHJcblxyXG4gICAgICBpZiAocmlnaHRBcnJvd0VuZFggPiByaWdodEFycm93U3RhcnRYICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW3JpZ2h0QXJyb3dTdGFydFgsIGNlbnRlclksIHJpZ2h0QXJyb3dFbmRYLCBjZW50ZXJZXSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiByaWdodEFycm93RW5kWCxcclxuICAgICAgICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDkwLFxyXG4gICAgICAgICAgICBmaWxsOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxvY2tTdmdTdHJpbmcgPSBgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgIDxwYXRoIGQ9XCJNNyAxMVY3QzcgNS42NzM5MiA3LjUyNjc4IDQuNDAyMTUgOC40NjQ0NyAzLjQ2NDQ3QzkuNDAyMTUgMi41MjY3OCAxMC42NzM5IDIgMTIgMkMxMy4zMjYxIDIgMTQuNTk3OSAyLjUyNjc4IDE1LjUzNTUgMy40NjQ0N0MxNi40NzMyIDQuNDAyMTUgMTcgNS42NzM5MiAxNyA3VjExTTUgMTFIMTlDMjAuMTA0NiAxMSAyMSAxMS44OTU0IDIxIDEzVjIwQzIxIDIxLjEwNDYgMjAuMTA0NiAyMiAxOSAyMkg1QzMuODk1NDMgMjIgMyAyMS4xMDQ2IDMgMjBWMTNDMyAxMS44OTU0IDMuODk1NDMgMTEgNSAxMVpcIiBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgPC9zdmc+YDtcclxuXHJcbiAgICBsZXQgbG9hZGVkU1ZHOiBhbnkgPSBhd2FpdCBmYWJyaWMubG9hZFNWR0Zyb21TdHJpbmcobG9ja1N2Z1N0cmluZyk7XHJcblxyXG4gICAgbGV0IGxvY2tTdmcgPSBmYWJyaWMudXRpbC5ncm91cFNWR0VsZW1lbnRzKFxyXG4gICAgICBsb2FkZWRTVkcub2JqZWN0cyxcclxuICAgICAgbG9hZGVkU1ZHLm9wdGlvbnNcclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgd2FsbENlbnRlclggPSB3aWR0aCAvIDI7XHJcbiAgICBjb25zdCB3YWxsQ2VudGVyWSA9IGhlaWdodCAvIDI7XHJcblxyXG4gICAgbG9ja1N2Zy5zY2FsZVRvV2lkdGgoMjApO1xyXG4gICAgbG9ja1N2Zy5zY2FsZVRvSGVpZ2h0KDIwKTtcclxuXHJcbiAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICBsb2NrU3ZnLnNldCh7XHJcbiAgICAgICAgbGVmdDogd2FsbENlbnRlclgsXHJcbiAgICAgICAgdG9wOiB3YWxsQ2VudGVyWSxcclxuICAgICAgICBhbmdsZTogLTkwLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsb2NrU3ZnLnNldCh7XHJcbiAgICAgICAgbGVmdDogd2FsbENlbnRlclgsXHJcbiAgICAgICAgdG9wOiB3YWxsQ2VudGVyWSxcclxuICAgICAgICBhbmdsZTogMCxcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvY2tTdmcuc2V0KHtcclxuICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBsb2NrU3ZnLm9uKFwibW91c2Vkb3duXCIsIChvcHQpID0+IHtcclxuICAgICAgaWYgKG9wdCAmJiBvcHQuZSAmJiBvcHQuZS5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgICBvcHQuZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICAgIGVsZW1lbnREYXRhLmlzTG9ja2VkID0gIWVsZW1lbnREYXRhPy5pc0xvY2tlZDtcclxuICAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBlbGVtZW50cy5wdXNoKGxvY2tTdmcpO1xyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChlbGVtZW50cywge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGhhc0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ1g6IGlzVmVydGljYWwsXHJcbiAgICAgIGxvY2tTY2FsaW5nWTogIWlzVmVydGljYWwsXHJcbiAgICAgIC8vIGxvY2tSb3RhdGlvbjogdHJ1ZSxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgYW5nbGU6IGVsZW1lbnREYXRhLmFuZ2xlLFxyXG4gICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBlbGVtZW50RGF0YS5lbGVtZW50VHlwZTtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50RGF0YTtcclxuXHJcbiAgICAvLyBncm91cC5vbihcIm1vZGlmaWVkXCIsIChlOiBhbnkpID0+IHtcclxuICAgIC8vICAgY29uc3QgYWN0aW9uID0gZS50cmFuc2Zvcm0/LmFjdGlvbjtcclxuICAgIC8vICAgaWYgKGFjdGlvbiA9PT0gXCJkcmFnXCIgfHwgYWN0aW9uID09PSBcInJvdGF0ZVwiKSB7XHJcbiAgICAvLyAgICAgY29uc3Qgd2FsbEZpeHR1cmVJZHMgPSBlbGVtZW50RGF0YT8uZml4dHVyZXM/Lm1hcCgoZTogYW55KSA9PiBlLl9pZCk7XHJcbiAgICAvLyAgICAgaWYgKCF3YWxsRml4dHVyZUlkcz8ubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgLy8gICAgIGNvbnN0IGZpeHR1cmVzID0gdGhpcy5jYW52YXNcclxuICAgIC8vICAgICAgIC5nZXRPYmplY3RzKClcclxuICAgIC8vICAgICAgIC5maWx0ZXIoXHJcbiAgICAvLyAgICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgIC8vICAgICAgICAgICBvYmoub2JqVHlwZSA9PT0gXCJmaXh0dXJlXCIgJiZcclxuICAgIC8vICAgICAgICAgICB3YWxsRml4dHVyZUlkcy5pbmNsdWRlcyhvYmouZml4dHVyZUlkKVxyXG4gICAgLy8gICAgICAgKTtcclxuICAgIC8vICAgICBpZiAoIWZpeHR1cmVzLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgIC8vICAgICAvLyBSZW1vdmUgZXhpc3RpbmcgZml4dHVyZXMgdGVtcG9yYXJpbHlcclxuICAgIC8vICAgICBmaXh0dXJlcy5mb3JFYWNoKChmKSA9PiB0aGlzLmNhbnZhcy5yZW1vdmUoZikpO1xyXG5cclxuICAgIC8vICAgICBjb25zdCBjb21iaW5lZEdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChmaXh0dXJlcywge1xyXG4gICAgLy8gICAgICAgaGFzQ29udHJvbHM6IHRydWUsXHJcbiAgICAvLyAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgLy8gICAgICAgc3ViVGFyZ2V0Q2hlY2s6IHRydWUsXHJcbiAgICAvLyAgICAgfSk7XHJcblxyXG4gICAgLy8gICAgIC8vIHdhbGwncyBwb3NpdGlvbiBhbmQgYW5nbGVcclxuICAgIC8vICAgICBjb25zdCB4MCA9IHRoaXMuZnJvbVBpeGVscyhlLnRhcmdldC5sZWZ0LCBcImZ0XCIpO1xyXG4gICAgLy8gICAgIGNvbnN0IHkwID0gdGhpcy5mcm9tUGl4ZWxzKGUudGFyZ2V0LnRvcCwgXCJmdFwiKTtcclxuICAgIC8vICAgICBjb25zdCBhID0gZS50YXJnZXQuYW5nbGUgfHwgMDtcclxuICAgIC8vICAgICBjb25zdCBhbmdsZVJhZCA9IChhICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgLy8gICAgIC8vIEluc3RlYWQgb2Ygd2FsbCBlbmQsIHVzZSB3YWxsIHN0YXJ0ICsgcGVycGVuZGljdWxhciBvZmZzZXRcclxuICAgIC8vICAgICBjb25zdCBvZmZzZXQgPSAxOyAvLyBwZXJwZW5kaWN1bGFyIGRpc3RhbmNlIGZyb20gd2FsbFxyXG4gICAgLy8gICAgIGNvbnN0IGZ4X29mZnNldCA9IHgwICsgb2Zmc2V0ICogLU1hdGguc2luKGFuZ2xlUmFkKTtcclxuICAgIC8vICAgICBjb25zdCBmeV9vZmZzZXQgPSB5MCArIG9mZnNldCAqIE1hdGguY29zKGFuZ2xlUmFkKTtcclxuXHJcbiAgICAvLyAgICAgLy8gQ29udmVydCBiYWNrIHRvIHBpeGVscyBhbmQgYXBwbHlcclxuICAgIC8vICAgICBjb21iaW5lZEdyb3VwLmxlZnQgPSB0aGlzLnRvUGl4ZWxzKGZ4X29mZnNldCwgXCJmdFwiKTtcclxuICAgIC8vICAgICBjb21iaW5lZEdyb3VwLnRvcCA9IHRoaXMudG9QaXhlbHMoZnlfb2Zmc2V0LCBcImZ0XCIpO1xyXG4gICAgLy8gICAgIGNvbWJpbmVkR3JvdXAuYW5nbGUgPSBhO1xyXG5cclxuICAgIC8vICAgICB0aGlzLmNhbnZhcy5hZGQoY29tYmluZWRHcm91cCk7XHJcbiAgICAvLyAgICAgdW5ncm91cFByZXNlcnZlUG9zaXRpb25zKGNvbWJpbmVkR3JvdXAsIHRoaXMuY2FudmFzKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgLy8gY29uc3QgdW5ncm91cFByZXNlcnZlUG9zaXRpb25zID0gYXN5bmMgKFxyXG4gICAgLy8gICBjb21iaW5lZEdyb3VwOiBmYWJyaWMuR3JvdXAsXHJcbiAgICAvLyAgIGNhbnZhczogZmFicmljLkNhbnZhc1xyXG4gICAgLy8gKSA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IGl0ZW1zID0gY29tYmluZWRHcm91cC5nZXRPYmplY3RzKCkubWFwKChvYmopID0+IHtcclxuICAgIC8vICAgICBjb25zdCBhYnMgPSBmYWJyaWMudXRpbC50cmFuc2Zvcm1Qb2ludChcclxuICAgIC8vICAgICAgIG5ldyBmYWJyaWMuUG9pbnQob2JqLmxlZnQhLCBvYmoudG9wISksXHJcbiAgICAvLyAgICAgICBjb21iaW5lZEdyb3VwLmNhbGNUcmFuc2Zvcm1NYXRyaXgoKVxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgICAgcmV0dXJuIHtcclxuICAgIC8vICAgICAgIGlkOiAob2JqIGFzIGFueSkuZml4dHVyZUlkLFxyXG4gICAgLy8gICAgICAgeDogYWJzLngsXHJcbiAgICAvLyAgICAgICB5OiBhYnMueSxcclxuICAgIC8vICAgICAgIGFuZ2xlOiBjb21iaW5lZEdyb3VwLmFuZ2xlLFxyXG4gICAgLy8gICAgIH07XHJcbiAgICAvLyAgIH0pO1xyXG5cclxuICAgIC8vICAgdGhpcy51cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoaXRlbXMpO1xyXG4gICAgLy8gICBjYW52YXMucmVtb3ZlKGNvbWJpbmVkR3JvdXApO1xyXG4gICAgLy8gICBjb25zdCB3YWxsVG9SZXJlbmRlciA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgIC8vICAgICAoZTogYW55KSA9PlxyXG4gICAgLy8gICAgICAgZS5lbGVtZW50TnVtYmVyID09PSBlbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyICYmXHJcbiAgICAvLyAgICAgICBlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIlxyXG4gICAgLy8gICApO1xyXG5cclxuICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3YWxsVG9SZXJlbmRlcj8uZml4dHVyZXM/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAvLyAgICAgY29uc3QgZml4dHVyZSA9IHdhbGxUb1JlcmVuZGVyLmZpeHR1cmVzW2ldO1xyXG4gICAgLy8gICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgLy8gICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24udW5pdFxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSxcclxuICAgIC8vICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0XHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gdGhpcy50b1BpeGVscyhcclxuICAgIC8vICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgIC8vICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgICBjb25zdCBmaXh0dXJlV2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgLy8gICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAvLyAgICAgKTtcclxuXHJcbiAgICAvLyAgICAgYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShcclxuICAgIC8vICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgLy8gICAgICAgeCxcclxuICAgIC8vICAgICAgIHksXHJcbiAgICAvLyAgICAgICBmaXh0dXJlSGVpZ2h0LFxyXG4gICAgLy8gICAgICAgZml4dHVyZVdpZHRoLFxyXG4gICAgLy8gICAgICAgZml4dHVyZVxyXG4gICAgLy8gICAgICk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIC8vIH07XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcblxyXG4gICAgLy8gSWYgbmV3bHkgYWRkZWQsIGZvY3VzIGl0IG9uY2VcclxuICAgIGlmICgoZWxlbWVudERhdGEgYXMgYW55KT8ubmV3QWRkZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZ3JvdXApO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSBjYXRjaCB7fVxyXG4gICAgICBkZWxldGUgKGVsZW1lbnREYXRhIGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0ZpeHR1cmUoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBmaXh0dXJlRGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICBsZXQgZml4dHVyZUNvbG9yOiBhbnk7XHJcbiAgICBpZiAoW1wiZml4dHVyZVwiLCBcImZpeHR1cmUtcmVkb1wiXS5pbmNsdWRlcyh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSkpIHtcclxuICAgICAgZml4dHVyZUNvbG9yID0ge1xyXG4gICAgICAgIHByaW1hcnk6XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJcIiAmJiBmaXh0dXJlRGF0YS50YXNrU3RhdHVzID09IFwic3VibWl0XCJcclxuICAgICAgICAgICAgPyBcIiNhNWE2YThcIlxyXG4gICAgICAgICAgICA6IGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcImFncmVlXCJcclxuICAgICAgICAgICAgPyBcIiM2Q0U5QTZcIlxyXG4gICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIGZpbGw6XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zdGF0dXMgPT0gXCJcIiAmJiBmaXh0dXJlRGF0YS50YXNrU3RhdHVzID09IFwic3VibWl0XCJcclxuICAgICAgICAgICAgPyBcIiNmM2Y0ZjhcIlxyXG4gICAgICAgICAgICA6IGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcImFncmVlXCJcclxuICAgICAgICAgICAgPyBcIiM2Q0U5QTZcIlxyXG4gICAgICAgICAgICA6IFwiI0VBRjhGRlwiLFxyXG4gICAgICAgIHZtRmlsbDpcclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcIlwiICYmIGZpeHR1cmVEYXRhLnRhc2tTdGF0dXMgPT0gXCJzdWJtaXRcIlxyXG4gICAgICAgICAgICA/IFwiI2E1YTZhOFwiXHJcbiAgICAgICAgICAgIDogXCIjNjkzOEVGXCIsXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAoZml4dHVyZURhdGEuZml4dHVyZU5hbWUgPT09IFwic3BhY2VcIikgcmV0dXJuO1xyXG4gICAgY29uc3QgcmFkaXVzID0gNTtcclxuICAgIGNvbnN0IG1haW5Db250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdG9wV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCB0b3BIZWlnaHQgPSAoMTUgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgdG9wWCA9IHggKyAod2lkdGggLSB0b3BXaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgdG9wWSA9IHkgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IHRvcENvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRvcFgsXHJcbiAgICAgIHRvcDogdG9wWSxcclxuICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IHRvcEhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBpbm5lckJveEhlaWdodCA9IHRvcEhlaWdodCAvIDI7XHJcbiAgICBjb25zdCBpbm5lclRvcEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYICsgcmFkaXVzfSAke3RvcFl9IFxyXG4gICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGggLSByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZfSAke3RvcFggKyB0b3BXaWR0aH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke3RvcFh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgcmFkaXVzfSBcclxuICAgICAgICBRICR7dG9wWH0gJHt0b3BZfSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgdG9wVGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYEZpeHR1cmUgJHtcclxuICAgICAgICBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgID8gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyICtcclxuICAgICAgICAgICAgKGZpeHR1cmVEYXRhPy5maXh0dXJlTnVtYmVyXHJcbiAgICAgICAgICAgICAgPyBcIiAtIEZYLVwiICsgZml4dHVyZURhdGEuZml4dHVyZU51bWJlclxyXG4gICAgICAgICAgICAgIDogXCJcIilcclxuICAgICAgICAgIDogXCJuZXdcIlxyXG4gICAgICB9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiB0b3BZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBpbm5lckJveEhlaWdodCxcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc2Vjb25kQm94WSA9IHRvcFkgKyBpbm5lckJveEhlaWdodDtcclxuXHJcbiAgICBjb25zdCBpbm5lckJvdHRvbUJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHt0b3BYfSAke3NlY29uZEJveFl9IFxyXG4gICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZfSBcclxuICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0IC0gcmFkaXVzfSBcclxuICAgIFEgJHt0b3BYICsgdG9wV2lkdGh9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSAke1xyXG4gICAgICAgIHRvcFggKyB0b3BXaWR0aCAtIHJhZGl1c1xyXG4gICAgICB9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgIEwgJHt0b3BYICsgcmFkaXVzfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gXHJcbiAgICBRICR7dG9wWH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7dG9wWH0gJHtcclxuICAgICAgICBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgfSBcclxuICAgIEwgJHt0b3BYfSAke3NlY29uZEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogXCIjMzQ0MDU0XCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgIGxldCBib3R0b21UZXh0O1xyXG5cclxuICAgIGNvbnN0IHRleHRDb250ZW50ID0gYCR7Zml4dHVyZURhdGE/LmZpeHR1cmVOYW1lfSAtICR7Zml4dHVyZURhdGE/LmZpeHR1cmVXaWR0aC52YWx1ZX0gJHtmaXh0dXJlRGF0YT8uZml4dHVyZVdpZHRoLnVuaXR9YDtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVCb3R0b21UZXh0ID0gKGZzOiBhbnkpID0+XHJcbiAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0Q29udGVudCwge1xyXG4gICAgICAgIGxlZnQ6IHRvcFggKyB0b3BXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICBmaWxsOiBcIiNGRkZGRkZcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgfSk7XHJcblxyXG4gICAgZG8ge1xyXG4gICAgICBib3R0b21UZXh0ID0gY3JlYXRlQm90dG9tVGV4dChmb250U2l6ZSk7XHJcbiAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgIH0gd2hpbGUgKGJvdHRvbVRleHQuaGVpZ2h0ID4gaW5uZXJCb3hIZWlnaHQgJiYgZm9udFNpemUgPiAyKTtcclxuXHJcbiAgICBjb25zdCBtaWRXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IG1pZEhlaWdodCA9ICg3NyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBtaWRYID0geCArICh3aWR0aCAtIG1pZFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBtaWRZID0gdG9wWSArIHRvcEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgbWlkQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgdG9wOiBtaWRZLFxyXG4gICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgIGhlaWdodDogbWlkSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNoZWxmQ291bnQgPSBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8ubGVuZ3RoO1xyXG4gICAgY29uc3QgYm94SGVpZ2h0ID0gbWlkSGVpZ2h0IC8gKHNoZWxmQ291bnQgKyAyKTtcclxuICAgIGNvbnN0IGZpcnN0Qm94WSA9IG1pZFk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGggLSByYWRpdXN9ICR7Zmlyc3RCb3hZfSBcclxuICAgICAgICBRICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WX0gJHttaWRYICsgbWlkV2lkdGh9ICR7XHJcbiAgICAgICAgZmlyc3RCb3hZICsgcmFkaXVzXHJcbiAgICAgIH0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtmaXJzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgIEwgJHttaWRYfSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgcmFkaXVzfSBcclxuICAgICAgICBRICR7bWlkWH0gJHtmaXJzdEJveFl9ICR7bWlkWCArIHJhZGl1c30gJHtmaXJzdEJveFl9IFpgLFxyXG4gICAgICB7XHJcbiAgICAgICAgZmlsbDogZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgOiBcIiNFQUY4RkZcIixcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgIDogXCIjNkJDQUZGXCIsXHJcbiAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZmlyc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uaGVhZGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmhlYWRlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBmaXJzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA3LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVEYXRhLmlzc3VlID8gXCIjZmZmXCIgOiBcIiMxMDE4MjhcIixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzaGVsdmVzID0gW107XHJcbiAgICBjb25zdCBzaGVsZkhlaWdodCA9IG1pZEhlaWdodCAtIDIgKiBib3hIZWlnaHQ7XHJcblxyXG4gICAgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDFcIikge1xyXG4gICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0O1xyXG5cclxuICAgICAgY29uc3Qgc2hlbGYgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IHNoZWxmSGVpZ2h0LFxyXG4gICAgICAgIC8vIHN0cm9rZTogJyM1MUMxRkYnLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgdGV4dCA9IGZpeHR1cmVEYXRhPy5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiICsgXCIpIHx8IFwiXCI7XHJcblxyXG4gICAgICAvLyBXcmFwIHRleHQgd2l0aGluIGZpeHR1cmUgd2lkdGggYW5kIHNocmluayB0byBmaXQgdmVydGljYWwgc3BhY2VcclxuICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGggKiAwLjk7XHJcbiAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBzaGVsZkhlaWdodCAqIDAuODtcclxuICAgICAgbGV0IGZvbnRTaXplTDEgPSA2O1xyXG5cclxuICAgICAgY29uc3QgY3JlYXRlV3JhcHBlZFRleHRib3ggPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmaWxsOiBcIiMzMzNcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgd3JhcHBlZFRleHQgPSBjcmVhdGVXcmFwcGVkVGV4dGJveChmb250U2l6ZUwxKTtcclxuICAgICAgd2hpbGUgKHdyYXBwZWRUZXh0LmhlaWdodCA+IG1heFRleHRIZWlnaHQgJiYgZm9udFNpemVMMSA+IDIpIHtcclxuICAgICAgICBmb250U2l6ZUwxIC09IDAuNTtcclxuICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBwYWRkaW5nID0gMjtcclxuICAgICAgY29uc3QgYmFja2dyb3VuZCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJveFkgKyBzaGVsZkhlaWdodCAvIDIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiBNYXRoLm1pbihtYXhUZXh0V2lkdGgsIHdyYXBwZWRUZXh0LndpZHRoISkgKyBwYWRkaW5nLFxyXG4gICAgICAgIGhlaWdodDogd3JhcHBlZFRleHQuZ2V0U2NhbGVkSGVpZ2h0KCkgKyAyLFxyXG4gICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgcng6IDEsXHJcbiAgICAgICAgcnk6IDEsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmLCBiYWNrZ3JvdW5kLCB3cmFwcGVkVGV4dCk7XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVEYXRhLnByb2R1Y3RSZXNvbHV0aW9uTGV2ZWwgPT09IFwiTDJcIikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoZWxmQ291bnQ7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoaSArIDEpO1xyXG5cclxuICAgICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGYpO1xyXG5cclxuICAgICAgICBpZiAoZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICBjb25zdCB0cmF5Um93cyA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0udHJheVJvd3MgfHwgMTtcclxuICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB0cmF5TGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBzaGVsdmVzLnB1c2godHJheUxpbmUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGV4dCA9XHJcbiAgICAgICAgICBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgICAgLy8gTDI6IFNpbmdsZS1saW5lIGVsbGlwc2lzIGFnYWluc3QgZnVsbCBzaGVsZiB3aWR0aFxyXG4gICAgICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gNjtcclxuICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBNYXRoLm1heCgwLCBtaWRXaWR0aCAtIGhvcml6b250YWxQYWRkaW5nKTtcclxuICAgICAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gYm94SGVpZ2h0ICogMC44O1xyXG4gICAgICAgIGNvbnN0IGJhc2VGb250U2l6ZSA9IDU7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lYXN1cmUgPSAodDogc3RyaW5nKSA9PlxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UZXh0KHQsIHtcclxuICAgICAgICAgICAgZm9udFNpemU6IGJhc2VGb250U2l6ZSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxldCBkaXNwbGF5VGV4dCA9IHRleHQ7XHJcbiAgICAgICAgbGV0IG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcblxyXG4gICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgIGNvbnN0IGVsbGlwc2lzID0gXCIuLi5cIjtcclxuICAgICAgICAgIGxldCBsZWZ0SWR4ID0gMDtcclxuICAgICAgICAgIGxldCByaWdodElkeCA9IHRleHQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHdoaWxlIChsZWZ0SWR4IDwgcmlnaHRJZHgpIHtcclxuICAgICAgICAgICAgY29uc3QgbWlkSWR4ID0gTWF0aC5mbG9vcigobGVmdElkeCArIHJpZ2h0SWR4KSAvIDIpO1xyXG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0ZXh0LnNsaWNlKDAsIG1pZElkeCkgKyBlbGxpcHNpcztcclxuICAgICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGNhbmRpZGF0ZSk7XHJcbiAgICAgICAgICAgIGlmICgobWVhc3VyZWQud2lkdGggPz8gMCkgPiBtYXhUZXh0V2lkdGgpIHtcclxuICAgICAgICAgICAgICByaWdodElkeCA9IG1pZElkeDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsZWZ0SWR4ID0gbWlkSWR4ICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZGlzcGxheVRleHQgPSB0ZXh0LnNsaWNlKDAsIE1hdGgubWF4KDAsIGxlZnRJZHggLSAxKSkgKyBlbGxpcHNpcztcclxuICAgICAgICAgIG1lYXN1cmVkID0gbWVhc3VyZShkaXNwbGF5VGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IE1hdGgubWluKG1heFRleHRIZWlnaHQsIG1lYXN1cmVkLmhlaWdodCA/PyAxMCkgKyAyLFxyXG4gICAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICByeDogMSxcclxuICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCBmaW5hbFRleHQgPSBuZXcgZmFicmljLlRleHQoZGlzcGxheVRleHQsIHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICB0b3A6IGJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGJhY2tncm91bmQsIGZpbmFsVGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMM1wiKSB7XHJcbiAgICAgIGNvbnN0IHNlcXVlbnRpYWxHcm91cHM6IHsgem9uZTogc3RyaW5nOyBzaGVsdmVzOiBhbnlbXSB9W10gPSBbXTtcclxuXHJcbiAgICAgIGxldCBwcmV2aW91c1pvbmU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgZm9yIChjb25zdCBzaGVsZiBvZiBmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZykge1xyXG4gICAgICAgIGNvbnN0IHpvbmUgPSBzaGVsZi56b25lIHx8IFwiVW5rbm93blwiO1xyXG4gICAgICAgIGlmICh6b25lICE9PSBwcmV2aW91c1pvbmUpIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHMucHVzaCh7IHpvbmUsIHNoZWx2ZXM6IFtzaGVsZl0gfSk7XHJcbiAgICAgICAgICBwcmV2aW91c1pvbmUgPSB6b25lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZXF1ZW50aWFsR3JvdXBzW3NlcXVlbnRpYWxHcm91cHMubGVuZ3RoIC0gMV0uc2hlbHZlcy5wdXNoKHNoZWxmKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjdXJyZW50U2hlbGZJbmRleCA9IDA7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIHNlcXVlbnRpYWxHcm91cHMpIHtcclxuICAgICAgICBjb25zdCB7IHpvbmUsIHNoZWx2ZXM6IHNoZWx2ZXNJbkdyb3VwIH0gPSBncm91cDtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBTdGFydEluZGV4ID0gY3VycmVudFNoZWxmSW5kZXg7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBMZW5ndGggPSBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChncm91cFN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBncm91cEJvdHRvbVkgPSBncm91cFRvcFkgKyBib3hIZWlnaHQgKiBncm91cExlbmd0aDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzaGVsdmVzSW5Hcm91cC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgY29uc3Qgc2hlbGZEYXRhID0gc2hlbHZlc0luR3JvdXBbal07XHJcbiAgICAgICAgICBjb25zdCBib3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGN1cnJlbnRTaGVsZkluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2hlbGZSZWN0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICAgICAgdG9wOiBib3hZLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICAgIGhlaWdodDogYm94SGVpZ2h0LFxyXG4gICAgICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgICAgID8gXCIjRDkyRDIwXCJcclxuICAgICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHNoZWxmUmVjdCk7XHJcblxyXG4gICAgICAgICAgaWYgKHNoZWxmRGF0YS5zaGVsZlR5cGUgPT09IFwidHJheVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gc2hlbGZEYXRhLnRyYXlSb3dzIHx8IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RQZXJTaGVsZiA9IHNoZWxmRGF0YS5wcm9kdWN0UGVyU2hlbGYgfHwgMDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJvd1NwYWNpbmcgPSBib3hIZWlnaHQgLyB0cmF5Um93cztcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uU3BhY2luZyA9IG1pZFdpZHRoIC8gcHJvZHVjdFBlclNoZWxmO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgciA9IDE7IHIgPCB0cmF5Um93czsgcisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbGluZVkgPSBib3hZICsgciAqIHJvd1NwYWNpbmc7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW21pZFgsIGxpbmVZLCBtaWRYICsgbWlkV2lkdGgsIGxpbmVZXSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAxOyBjIDwgcHJvZHVjdFBlclNoZWxmOyBjKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWCA9IG1pZFggKyBjICogY29sdW1uU3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgICAgW2xpbmVYLCBib3hZLCBsaW5lWCwgYm94WSArIGJveEhlaWdodF0sXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjOTk5XCIsXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICBzaGVsdmVzLnB1c2godmVydGljYWxMaW5lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGN1cnJlbnRTaGVsZkluZGV4Kys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBncm91cEJvdHRvbUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICBbbWlkWCwgZ3JvdXBCb3R0b21ZLCBtaWRYICsgbWlkV2lkdGgsIGdyb3VwQm90dG9tWV0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQm90dG9tTGluZSk7XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsUGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBsYWJlbFRleHQgPSBuZXcgZmFicmljLlRleHRib3goem9uZSwge1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLSBsYWJlbFBhZGRpbmcsXHJcbiAgICAgICAgICAgIHRvcDogZ3JvdXBCb3R0b21ZLFxyXG4gICAgICAgICAgICBmb250U2l6ZTogNSxcclxuICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICBmaWxsOiBcIiM3MDcwNzBcIixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJyaWdodFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImJvdHRvbVwiLFxyXG4gICAgICAgICAgICB3aWR0aDogbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFwicmlnaHRcIixcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChsYWJlbFRleHQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJYID0gbWlkWCArIG1pZFdpZHRoIC8gMjtcclxuICAgICAgICBjb25zdCBncm91cENlbnRlclkgPSBncm91cFRvcFkgKyAoZ3JvdXBCb3R0b21ZIC0gZ3JvdXBUb3BZKSAvIDI7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlY3Rpb25CcmFuZHMgPSBuZXcgU2V0KCk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXNJbkdyb3VwPy5mb3JFYWNoKChzaGVsZikgPT4ge1xyXG4gICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZT8uZm9yRWFjaCgoYnJhbmQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uQnJhbmRzLmFkZChicmFuZCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKFsuLi5zZWN0aW9uQnJhbmRzXS5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBbLi4uc2VjdGlvbkJyYW5kc10uam9pbihcIiArIFwiKTtcclxuICAgICAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dFdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICBjb25zdCByZWN0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSAyMDtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA2O1xyXG4gICAgICAgICAgbGV0IHdyYXBwZWRUZXh0O1xyXG5cclxuICAgICAgICAgIGNvbnN0IGNyZWF0ZVRleHRib3ggPSAoZnM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IGZhYnJpYy5UZXh0Ym94KHRleHQsIHtcclxuICAgICAgICAgICAgICBmb250U2l6ZTogZnMsXHJcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNDAwXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IG1heFRleHRXaWR0aCxcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGxlZnQ6IGdyb3VwQ2VudGVyWCxcclxuICAgICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgd3JhcHBlZFRleHQgPSBjcmVhdGVUZXh0Ym94KGZvbnRTaXplKTtcclxuICAgICAgICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgICAgICAgfSB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIGNvbnN0IHJlY3RIZWlnaHQgPSB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIHBhZGRpbmc7XHJcblxyXG4gICAgICAgICAgY29uc3QgZ3JvdXBDZW50ZXJUZXh0ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICB0b3A6IGdyb3VwQ2VudGVyWSxcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgd2lkdGg6IHJlY3RXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiByZWN0SGVpZ2h0LFxyXG4gICAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgICByeTogMSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaChncm91cENlbnRlclRleHQsIHdyYXBwZWRUZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGE/LnZtQ29uZmlnPy5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRGF0YS52bUNvbmZpZy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHZtID0gZml4dHVyZURhdGEudm1Db25maWdbaV07XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB2bS5zdGFydFlQb3NpdGlvbiAtIDE7XHJcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB2bS5lbmRZUG9zaXRpb24gLSAxO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBzdGFydEluZGV4ID4gZml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmxlbmd0aCB8fFxyXG4gICAgICAgICAgZW5kSW5kZXggPiBmaXh0dXJlRGF0YT8uc2hlbGZDb25maWcubGVuZ3RoXHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmVG9wWSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzdGFydEluZGV4ICsgMSk7XHJcbiAgICAgICAgY29uc3Qgc2hlbGZIZWlnaHRTcGFuID0gYm94SGVpZ2h0ICogKGVuZEluZGV4IC0gc3RhcnRJbmRleCArIDEpO1xyXG5cclxuICAgICAgICBsZXQgdm1IZWlnaHRQeDogbnVtYmVyID0gc2hlbGZIZWlnaHRTcGFuO1xyXG4gICAgICAgIGxldCB5OiBudW1iZXIgPSBzaGVsZlRvcFk7XHJcblxyXG4gICAgICAgIGlmICh2bS55Wm9uZSAmJiB2bS55Wm9uZSAhPT0gXCJzdHJldGNoXCIpIHtcclxuICAgICAgICAgIHZtSGVpZ2h0UHggPSBzaGVsZkhlaWdodFNwYW4gLyAzO1xyXG5cclxuICAgICAgICAgIHN3aXRjaCAodm0ueVpvbmUpIHtcclxuICAgICAgICAgICAgY2FzZSBcInRvcFwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZICsgdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJvdHRvbVwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyAyICogdm1IZWlnaHRQeDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICB5ID0gc2hlbGZUb3BZO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHggPSBtaWRYO1xyXG4gICAgICAgIGxldCB3aWR0aCA9IG1pZFdpZHRoO1xyXG5cclxuICAgICAgICBpZiAoIXZtLnhab25lIHx8IHZtLnhab25lID09PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgIHggPSBtaWRYO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzZWN0aW9uV2lkdGggPSBtaWRXaWR0aCAvIDM7XHJcbiAgICAgICAgICBzd2l0Y2ggKHZtLnhab25lKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJsZWZ0XCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJtaWRkbGVcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWCArIHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInJpZ2h0XCI6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFggKyAyICogc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gbWlkV2lkdGg7XHJcbiAgICAgICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodm0udm1JbWFnZVVybCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qgdm1JbWFnZTogYW55ID0gYXdhaXQgZmFicmljLkZhYnJpY0ltYWdlLmZyb21VUkwoXHJcbiAgICAgICAgICAgICAgYCR7dGhpcy5jZG5Vcmx9JHt2bS52bUltYWdlVXJsfT92PSR7RGF0ZS5ub3coKX1gLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGNyb3NzT3JpZ2luOiBcImFub255bW91c1wiLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHZtSW1hZ2Uuc2V0KHtcclxuICAgICAgICAgICAgICBsZWZ0OiB4ICsgd2lkdGggLyAyLFxyXG4gICAgICAgICAgICAgIHRvcDogeSArIHZtSGVpZ2h0UHggLyAyLFxyXG4gICAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBzY2FsZVg6IHdpZHRoIC8gdm1JbWFnZS53aWR0aCEsXHJcbiAgICAgICAgICAgICAgc2NhbGVZOiB2bUhlaWdodFB4IC8gdm1JbWFnZS5oZWlnaHQhLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUltYWdlKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBsb2FkaW5nIGltYWdlIGZvciBWTTogJHt2bS52bUltYWdlVXJsfWAsIGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHZtQm94ID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgICAgbGVmdDogeCxcclxuICAgICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgICB3aWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiB2bUhlaWdodFB4LFxyXG4gICAgICAgICAgICBmaWxsOiBmaXh0dXJlQ29sb3I/LnZtRmlsbCA/PyBcIiM2OTM4RUZcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgbGV0IGZvbnRTaXplID0gNTtcclxuICAgICAgICAgIGxldCB2bVRleHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlVm1UZXh0ID0gKGZzOiBudW1iZXIpID0+XHJcbiAgICAgICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh2bS52bU5hbWUgfHwgXCJcIiwge1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI2MDBcIixcclxuICAgICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB2bVRleHQgPSBjcmVhdGVWbVRleHQoZm9udFNpemUpO1xyXG4gICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICB9IHdoaWxlICh2bVRleHQuaGVpZ2h0ID4gdm1IZWlnaHRQeCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgICAgICAgIHNoZWx2ZXMucHVzaCh2bUJveCwgdm1UZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXN0Qm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChzaGVsZkNvdW50ICsgMSk7XHJcbiAgICBjb25zdCBsYXN0Qm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke21pZFh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFl9IFxyXG4gICAgICAgIEwgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7XHJcbiAgICAgICAgbWlkWCArIG1pZFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgIH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke21pZFggKyByYWRpdXN9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9IFxyXG4gICAgICAgIFEgJHttaWRYfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSAke21pZFh9ICR7XHJcbiAgICAgICAgbGFzdEJveFkgKyBib3hIZWlnaHQgLSByYWRpdXNcclxuICAgICAgfSBcclxuICAgICAgICBMICR7bWlkWH0gJHtsYXN0Qm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICA/IFwiI0ZFRTRFMlwiXHJcbiAgICAgICAgICA6IFwiI0VBRjhGRlwiLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBsYXN0Qm94VGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChcclxuICAgICAgYCR7Zml4dHVyZURhdGE/LmZvb3Rlcj8ubGFiZWwgPyBmaXh0dXJlRGF0YS5mb290ZXIubGFiZWwgOiBcIlwifWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogbGFzdEJveFkgKyBib3hIZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWd0aDogYm94SGVpZ2h0LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgYm90dG9tSGVpZ2h0ID0gKDMgLyAxMDApICogaGVpZ2h0O1xyXG4gICAgY29uc3QgYm90dG9tWCA9IHggKyAod2lkdGggLSBib3R0b21XaWR0aCkgLyAyO1xyXG4gICAgY29uc3QgYm90dG9tWSA9IG1pZFkgKyBtaWRIZWlnaHQgKyB0aGlzLnZlcnRpY2FsTWFyZ2luO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbUNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGJvdHRvbVgsXHJcbiAgICAgIHRvcDogYm90dG9tWSxcclxuICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGJvdHRvbUhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGJvdHRvbVRleHRDb250ZW50ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgU2hlbHZlcyAtICR7Zml4dHVyZURhdGEuc2hlbGZDb25maWc/Lmxlbmd0aH0gLiBQcm9kdWN0cyAtICAke2ZpeHR1cmVEYXRhLmZpeHR1cmVDYXBhY2l0eX0gLiBWTSAtICR7Zml4dHVyZURhdGEudm1Db25maWc/Lmxlbmd0aH1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogYm90dG9tWCArIGJvdHRvbVdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGJvdHRvbVkgKyBib3R0b21IZWlnaHQgLyAyLFxyXG4gICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IGJvdHRvbVdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHN2Z1N0cmluZyA9IGBcclxuICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHJ4PVwiMTJcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgIDxwYXRoIGQ9XCJNMTQuOTk5OCA2LjYwMDAxQzE1LjE1NzQgNi40NDI0MyAxNS4zNDQ1IDYuMzE3NDIgMTUuNTUwNCA2LjIzMjE0QzE1Ljc1NjMgNi4xNDY4NSAxNS45NzcgNi4xMDI5NiAxNi4xOTk4IDYuMTAyOTZDMTYuNDIyNyA2LjEwMjk2IDE2LjY0MzQgNi4xNDY4NSAxNi44NDkyIDYuMjMyMTRDMTcuMDU1MSA2LjMxNzQyIDE3LjI0MjIgNi40NDI0MyAxNy4zOTk4IDYuNjAwMDFDMTcuNTU3NCA2Ljc1NzYgMTcuNjgyNCA2Ljk0NDY4IDE3Ljc2NzcgNy4xNTA1OEMxNy44NTMgNy4zNTY0OCAxNy44OTY5IDcuNTc3MTUgMTcuODk2OSA3LjgwMDAxQzE3Ljg5NjkgOC4wMjI4OCAxNy44NTMgOC4yNDM1NSAxNy43Njc3IDguNDQ5NDVDMTcuNjgyNCA4LjY1NTM1IDE3LjU1NzQgOC44NDI0MyAxNy4zOTk4IDkuMDAwMDFMOS4yOTk4MiAxNy4xTDUuOTk5ODIgMThMNi44OTk4MiAxNC43TDE0Ljk5OTggNi42MDAwMVpcIiBzdHJva2U9XCIjMUQyOTM5XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICA8L3N2Zz5gO1xyXG5cclxuICAgIGxldCBsb2FkZWRTVkc6IGFueSA9IGF3YWl0IGZhYnJpYy5sb2FkU1ZHRnJvbVN0cmluZyhzdmdTdHJpbmcpO1xyXG5cclxuICAgIGxldCBlZGl0U3ZnID0gZmFicmljLnV0aWwuZ3JvdXBTVkdFbGVtZW50cyhcclxuICAgICAgbG9hZGVkU1ZHLm9iamVjdHMsXHJcbiAgICAgIGxvYWRlZFNWRy5vcHRpb25zXHJcbiAgICApO1xyXG5cclxuICAgIGVkaXRTdmcuc2V0KHtcclxuICAgICAgc2NhbGVYOiAxLFxyXG4gICAgICBzY2FsZVk6IDEsXHJcbiAgICAgIGxlZnQ6IHggKyB3aWR0aCAtIDMwLFxyXG4gICAgICB0b3A6IHkgKyAxNCxcclxuICAgICAgdmlzaWJsZTogZmFsc2UsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiB0cnVlLCAvLyBhbGxvdyBldmVudHNcclxuICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgZWRpdFN2Zy5vbihcIm1vdXNlZG93blwiLCAob3B0KSA9PiB7XHJcbiAgICAgIGlmIChvcHQgJiYgb3B0LmUgJiYgb3B0LmUuc3RvcFByb3BhZ2F0aW9uKSB7XHJcbiAgICAgICAgb3B0LmUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUgPSB7XHJcbiAgICAgICAgZml4dHVyZVR5cGU6IGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlLFxyXG4gICAgICAgIHdhbGxJbmRleDogZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIsXHJcbiAgICAgICAgZml4dHVyZUluZGV4OiBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIsXHJcbiAgICAgICAgZml4dHVyZUlkOiBmaXh0dXJlRGF0YS5faWQsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgY29uc3Qgd2FsbCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudE51bWJlciA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUud2FsbEluZGV4XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gd2FsbC5maXh0dXJlcy5maW5kKFxyXG4gICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gZml4dHVyZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZmluZChcclxuICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWRcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IGZpeHR1cmU7XHJcbiAgICAgIH1cclxuICAgICAgZGVsZXRlIHRoaXM/LnNlbGVjdGVkRml4dHVyZURhdGE/LnRhc2tUeXBlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YTtcclxuICAgICAgdGhpcy5lZGl0Rml4dHVyZSA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFxyXG4gICAgICBbXHJcbiAgICAgICAgbWFpbkNvbnRhaW5lcixcclxuICAgICAgICB0b3BDb250YWluZXIsXHJcbiAgICAgICAgaW5uZXJUb3BCb3gsXHJcbiAgICAgICAgdG9wVGV4dCxcclxuICAgICAgICBpbm5lckJvdHRvbUJveCxcclxuICAgICAgICBib3R0b21UZXh0LFxyXG4gICAgICAgIG1pZENvbnRhaW5lcixcclxuICAgICAgICBmaXJzdEJveCxcclxuICAgICAgICBmaXJzdEJveFRleHQsXHJcbiAgICAgICAgLi4uc2hlbHZlcyxcclxuICAgICAgICBsYXN0Qm94LFxyXG4gICAgICAgIGxhc3RCb3hUZXh0LFxyXG4gICAgICAgIGJvdHRvbUNvbnRhaW5lcixcclxuICAgICAgICBib3R0b21UZXh0Q29udGVudCxcclxuICAgICAgICBlZGl0U3ZnLFxyXG4gICAgICBdLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogeCxcclxuICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICAgIGxvY2tTY2FsaW5nWTogdHJ1ZSxcclxuICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICAvLyBoYXNDb250cm9sczogZml4dHVyZURhdGEuZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIixcclxuICAgICAgICAvLyBsb2NrUm90YXRpb246IGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlICE9PSBcImZsb29yXCIsXHJcbiAgICAgICAgLy8gbG9ja01vdmVtZW50WDogY3VycmVudEZpeHR1cmVJbmZvPy53YWxsRGlyZWN0aW9uID09PSAndXAnIHx8IGN1cnJlbnRGaXh0dXJlSW5mbz8ud2FsbERpcmVjdGlvbiA9PT0gJ2Rvd24nLFxyXG4gICAgICAgIC8vIGxvY2tNb3ZlbWVudFk6IGN1cnJlbnRGaXh0dXJlSW5mbz8ud2FsbERpcmVjdGlvbiA9PT0gJ3JpZ2h0JyB8fCBjdXJyZW50Rml4dHVyZUluZm8/LndhbGxEaXJlY3Rpb24gPT09ICdsZWZ0JyxcclxuICAgICAgICBhbmdsZTogZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbj8uYW5nbGUgPz8gMCxcclxuICAgICAgfVxyXG4gICAgKSBhcyBmYWJyaWMuR3JvdXAgJiB7XHJcbiAgICAgIHdhbGxJbmRleDogbnVtYmVyO1xyXG4gICAgICBmaXh0dXJlSW5kZXg6IG51bWJlcjtcclxuICAgICAgZml4dHVyZUlkOiBzdHJpbmc7XHJcbiAgICAgIGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIjtcclxuICAgICAgaXNzdWU6IGJvb2xlYW47XHJcbiAgICAgIGlzc3VlRGF0YTogYW55O1xyXG4gICAgICB0YXNrVHlwZTogc3RyaW5nO1xyXG4gICAgICB2bUNvbmZpZzogW107XHJcbiAgICAgIG9ialR5cGU6IHN0cmluZztcclxuICAgIH07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhZml4dHVyZURhdGE/Lmlzc3VlICYmXHJcbiAgICAgICFmaXh0dXJlRGF0YT8udW5zYXZlZENoYW5nZXMgJiZcclxuICAgICAgdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWRcclxuICAgICkge1xyXG4gICAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGVkaXRTdmcuc2V0KFwidmlzaWJsZVwiLCB0cnVlKTtcclxuICAgICAgICBjYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBmaXh0dXJlR3JvdXAub24oXCJtb3VzZW91dFwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZWRpdFN2Zy5zZXQoXCJ2aXNpYmxlXCIsIGZhbHNlKTtcclxuICAgICAgICBjYW52YXMucmVuZGVyQWxsKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlZG93blwiLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XHJcbiAgICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHtcclxuICAgICAgICB0aGlzLnRvZ2dsZVBhbmVsKFwicmlnaHRcIiwgZmFsc2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmhpZ2hsaWdodEZpeHR1cmUodGFyZ2V0KTtcclxuICAgICAgdGhpcy5zZWxlY3RGaXh0dXJlT25DYW52YXNDbGljayh0YXJnZXQsIHRydWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVUeXBlID0gZml4dHVyZURhdGEuZml4dHVyZVR5cGU7XHJcbiAgICBmaXh0dXJlR3JvdXAud2FsbEluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI7XHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUluZGV4ID0gZml4dHVyZURhdGEuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgZml4dHVyZUdyb3VwLmZpeHR1cmVJZCA9IGZpeHR1cmVEYXRhLl9pZDtcclxuICAgIGZpeHR1cmVHcm91cC5pc3N1ZSA9IGZpeHR1cmVEYXRhLmlzc3VlO1xyXG4gICAgZml4dHVyZUdyb3VwLmlzc3VlRGF0YSA9IGZpeHR1cmVEYXRhLmlzc3VlRGF0YTtcclxuICAgIGZpeHR1cmVHcm91cC50YXNrVHlwZSA9IGZpeHR1cmVEYXRhLnRhc2tUeXBlO1xyXG4gICAgZml4dHVyZUdyb3VwLnZtQ29uZmlnID0gZml4dHVyZURhdGEudm1Db25maWc7XHJcbiAgICBmaXh0dXJlR3JvdXAub2JqVHlwZSA9IFwiZml4dHVyZVwiO1xyXG5cclxuICAgIC8vIHRoaXMuY2FudmFzLm9uKFwib2JqZWN0Om1vdmluZ1wiLCAoZSkgPT4ge1xyXG4gICAgLy8gICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBhbnk7XHJcbiAgICAvLyAgIGlmICghdGFyZ2V0IHx8IHRhcmdldC5vYmpUeXBlICE9PSBcImZpeHR1cmVcIikgcmV0dXJuO1xyXG5cclxuICAgIC8vICAgY29uc3QgYW5nbGVEZWcgPSB0YXJnZXQuYW5nbGUgfHwgMDtcclxuICAgIC8vICAgY29uc3QgYW5nbGUgPSAoYW5nbGVEZWcgKiBNYXRoLlBJKSAvIDE4MDtcclxuICAgIC8vICAgaWYgKCF0YXJnZXQuX2xhc3RMZWZ0KSB7XHJcbiAgICAvLyAgICAgdGFyZ2V0Ll9sYXN0TGVmdCA9IHRhcmdldC5sZWZ0O1xyXG4gICAgLy8gICAgIHRhcmdldC5fbGFzdFRvcCA9IHRhcmdldC50b3A7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vICAgY29uc3QgZHggPSB0YXJnZXQubGVmdCAtIHRhcmdldC5fbGFzdExlZnQ7XHJcbiAgICAvLyAgIGNvbnN0IGR5ID0gdGFyZ2V0LnRvcCAtIHRhcmdldC5fbGFzdFRvcDtcclxuICAgIC8vICAgY29uc3QgcHJvamVjdGVkID0gZHggKiBNYXRoLmNvcyhhbmdsZSkgKyBkeSAqIE1hdGguc2luKGFuZ2xlKTtcclxuICAgIC8vICAgdGFyZ2V0LmxlZnQgPSB0YXJnZXQuX2xhc3RMZWZ0ICsgcHJvamVjdGVkICogTWF0aC5jb3MoYW5nbGUpO1xyXG4gICAgLy8gICB0YXJnZXQudG9wID0gdGFyZ2V0Ll9sYXN0VG9wICsgcHJvamVjdGVkICogTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgLy8gICB0YXJnZXQuX2xhc3RMZWZ0ID0gdGFyZ2V0LmxlZnQ7XHJcbiAgICAvLyAgIHRhcmdldC5fbGFzdFRvcCA9IHRhcmdldC50b3A7XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICBjYW52YXMuYWRkKGZpeHR1cmVHcm91cCk7XHJcblxyXG4gICAgLy8gSWYgbmV3bHkgYWRkZWQsIGZvY3VzIGl0IG9uY2VcclxuICAgIGlmICgoZml4dHVyZURhdGEgYXMgYW55KT8ubmV3QWRkZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZml4dHVyZUdyb3VwKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuICAgICAgZGVsZXRlIChmaXh0dXJlRGF0YSBhcyBhbnkpLm5ld0FkZGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaXh0dXJlR3JvdXA7XHJcbiAgfVxyXG5cclxuICBkcmF3RW50cmFuY2UoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBhcnJvd1dpZHRoOiBudW1iZXIsXHJcbiAgICBlbGVtZW50RGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICBjb25zdCBib2R5V2lkdGggPSB3aWR0aCAtIGFycm93V2lkdGg7XHJcblxyXG4gICAgY29uc3QgcGF0aERhdGEgPSBbXHJcbiAgICAgIGBNIDAgMGAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7LWhlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHt3aWR0aH0gJHtoZWlnaHQgLyAyfWAsXHJcbiAgICAgIGBMICR7Ym9keVdpZHRofSAke2hlaWdodCArIGhlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0fWAsXHJcbiAgICAgIGBMIDAgJHtoZWlnaHR9YCxcclxuICAgICAgYFpgLFxyXG4gICAgXS5qb2luKFwiIFwiKTtcclxuXHJcbiAgICBjb25zdCBhcnJvdyA9IG5ldyBmYWJyaWMuUGF0aChwYXRoRGF0YSwge1xyXG4gICAgICBmaWxsOiBcIiMwM0E5RjRcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IGhlaWdodCAtIDY7XHJcbiAgICBjb25zdCB0ZXh0ID0gbmV3IGZhYnJpYy5UZXh0KFwiRW50cmFuY2VcIiwge1xyXG4gICAgICBmb250RmFtaWx5OiBcIkFyaWFsXCIsXHJcbiAgICAgIGZvbnRXZWlnaHQ6IFwiYm9sZFwiLFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIGxlZnQ6IDE1LFxyXG4gICAgICB0b3A6IGhlaWdodCAvIDIsXHJcbiAgICAgIGZvbnRTaXplOiAyMCxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGV4dEJvdW5kcyA9IHRleHQuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gbWF4VGV4dEhlaWdodCAvIHRleHRCb3VuZHMuaGVpZ2h0O1xyXG4gICAgICB0ZXh0LnNldChcImZvbnRTaXplXCIsIHRleHQuZm9udFNpemUhICogc2NhbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGdyb3VwID0gbmV3IGZhYnJpYy5Hcm91cChbYXJyb3csIHRleHRdLCB7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQsXHJcbiAgICAgIGxvY2tTY2FsaW5nWDogdHJ1ZSxcclxuICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ0ZsaXA6IHRydWUsXHJcbiAgICAgIGFuZ2xlOiBlbGVtZW50RGF0YS5hbmdsZSxcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBlbGVtZW50RGF0YS5lbGVtZW50VHlwZTtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50RGF0YTtcclxuXHJcbiAgICBjYW52YXMuYWRkKGdyb3VwKTtcclxuICB9XHJcblxyXG4gIGRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzLFxyXG4gICAgeDogbnVtYmVyLFxyXG4gICAgeTogbnVtYmVyLFxyXG4gICAgYTogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgZWxlbWVudDogYW55XHJcbiAgKTogZmFicmljLkdyb3VwIHtcclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICB3aWR0aCxcclxuICAgICAgaGVpZ2h0LFxyXG4gICAgICByeDogMixcclxuICAgICAgcnk6IDIsXHJcbiAgICAgIGZpbGw6IFwiI0RBRjFGRlwiLFxyXG4gICAgICBzdHJva2U6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHRib3goZWxlbWVudC5maXh0dXJlTmFtZSwge1xyXG4gICAgICB3aWR0aDogd2lkdGggLSA4LFxyXG4gICAgICBmb250U2l6ZTogMTQsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgZWRpdGFibGU6IGZhbHNlLFxyXG4gICAgICBzcGxpdEJ5R3JhcGhlbWU6IHRydWUsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICBpZiAodGV4dEJvdW5kcy5oZWlnaHQgPiBoZWlnaHQgLSA4KSB7XHJcbiAgICAgIGNvbnN0IHNjYWxlID0gKGhlaWdodCAtIDgpIC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFtyZWN0LCB0ZXh0XSwge1xyXG4gICAgICBsZWZ0OiB4LFxyXG4gICAgICB0b3A6IHksXHJcbiAgICAgIGFuZ2xlOiBhLFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgIH0pIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICB9O1xyXG5cclxuICAgIGdyb3VwLm9ialR5cGUgPSBcIm90aGVyc1wiO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnQ7XHJcblxyXG4gICAgY2FudmFzLmFkZChncm91cCk7XHJcblxyXG4gICAgaWYgKChlbGVtZW50IGFzIGFueSk/Lm5ld0FkZGVkKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KGdyb3VwKTtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuICAgICAgZGVsZXRlIChlbGVtZW50IGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZHJhd0JnKCkge1xyXG4gICAgY29uc3Qgd2FsbDEgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlOiBhbnkpID0+IGUuZWxlbWVudE51bWJlciA9PT0gMSAmJiBlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIlxyXG4gICAgKTtcclxuICAgIGNvbnN0IHdhbGwyID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZTogYW55KSA9PiBlLmVsZW1lbnROdW1iZXIgPT09IDIgJiYgZS5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCJcclxuICAgICk7XHJcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMod2FsbDEuZGlzdGFuY2UsIHdhbGwxLnVuaXQpO1xyXG4gICAgY29uc3QgaGVpZ2h0ID0gdGhpcy50b1BpeGVscyh3YWxsMi5kaXN0YW5jZSwgd2FsbDIudW5pdCk7XHJcblxyXG4gICAgY29uc3QgYmcgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiB0aGlzLndhbGxUaGlja25lc3MsXHJcbiAgICAgIHRvcDogdGhpcy53YWxsVGhpY2tuZXNzLFxyXG4gICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICBmaWxsOiBcIiNlYWVjZjBcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKGJnKTtcclxuICAgIHRoaXMuY2FudmFzLnJlbW92ZShiZyk7XHJcbiAgICB0aGlzLmNhbnZhcy5pbnNlcnRBdCgwLCBiZyk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIHN1YnNjcmliZVRvRml4dHVyZUNvbmZpZ0lkQ2hhbmdlcygpIHtcclxuICAgIHRoaXMuZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XHJcbiAgICB0aGlzLmZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zID0gW107XHJcblxyXG4gICAgdGhpcy5nZXRGb3JtV2FsbHMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCwgaSkgPT4ge1xyXG4gICAgICBjb25zdCB3YWxsR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgY29uc3QgZml4dHVyZXNBcnJheSA9IHdhbGxHcm91cC5nZXQoXCJmaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXk7XHJcblxyXG4gICAgICBmaXh0dXJlc0FycmF5LmNvbnRyb2xzLmZvckVhY2goKGZpeHR1cmVDb250cm9sLCBqKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gZml4dHVyZUNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgIGNvbnN0IHN1YiA9IGZpeHR1cmVHcm91cFxyXG4gICAgICAgICAgLmdldChcImZpeHR1cmVDb25maWdJZFwiKVxyXG4gICAgICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZUZpeHR1cmVUZW1wbGF0ZShuZXdWYWx1ZSwgXCJ3YWxsXCIsIGosIGkpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChzdWIpIHRoaXMuZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnMucHVzaChzdWIpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMuY29udHJvbHMuZm9yRWFjaCgoZml4dHVyZUNvbnRyb2wsIGspID0+IHtcclxuICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gZml4dHVyZUNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBzdWIgPSBmaXh0dXJlR3JvdXBcclxuICAgICAgICAuZ2V0KFwiZml4dHVyZUNvbmZpZ0lkXCIpXHJcbiAgICAgICAgPy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgobmV3VmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRml4dHVyZVRlbXBsYXRlKG5ld1ZhbHVlLCBcImZsb29yXCIsIGspO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKHN1YikgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucy5wdXNoKHN1Yik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN1YnNjcmliZVRvT3RoZXJFbGVtZW50c0NoYW5nZXMoKSB7XHJcbiAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YikgPT4gc3ViPy51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMgPSBbXTtcclxuXHJcbiAgICAvLyBXYWxsLWxldmVsIG90aGVyRWxlbWVudHMgbGFiZWwgc3Vic2NyaXB0aW9uc1xyXG4gICAgdGhpcy5nZXRGb3JtV2FsbHMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xyXG4gICAgICBjb25zdCB3YWxsR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuICAgICAgY29uc3Qgb3RoZXJBcnJheSA9IHdhbGxHcm91cC5nZXQoXCJvdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheTtcclxuXHJcbiAgICAgIG90aGVyQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoY3RybCwgb3RoZXJJZHgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGVtZW50R3JvdXAgPSBjdHJsIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICBjb25zdCB0eXBlQ29udHJvbCA9IGVsZW1lbnRHcm91cC5nZXQoXCJ0eXBlXCIpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgICAgIGNvbnN0IGN1c3RvbU5hbWVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcImN1c3RvbU5hbWVcIikgYXMgRm9ybUNvbnRyb2w7XHJcblxyXG4gICAgICAgIGNvbnN0IHdhbGxNZXRhID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgKGVsOiBhbnkpID0+XHJcbiAgICAgICAgICAgIGVsLmVsZW1lbnRUeXBlID09PSB3YWxsR3JvdXAuZ2V0KFwiZWxlbWVudFR5cGVcIik/LnZhbHVlICYmXHJcbiAgICAgICAgICAgIGVsLmVsZW1lbnROdW1iZXIgPT09IHdhbGxHcm91cC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZWxlbWVudFJlZiA9IHdhbGxNZXRhPy5vdGhlckVsZW1lbnRzPy5bb3RoZXJJZHhdO1xyXG4gICAgICAgIGlmICghZWxlbWVudFJlZikgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyB3aGVuIHR5cGUgY2hhbmdlcyAoZHJvcGRvd24pXHJcbiAgICAgICAgY29uc3Qgc3ViVHlwZSA9IHR5cGVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAvLyBpZiB1c2VyIHBpY2tzIFwiT3RoZXJzXCIsIHByZWZlciBjdXN0b21OYW1lIGlmIHByZXNlbnQsIG90aGVyd2lzZSBzZXQgZml4dHVyZU5hbWUgdG8gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICBlbGVtZW50UmVmLmZpeHR1cmVOYW1lID1cclxuICAgICAgICAgICAgICBzZWxlY3RlZCA9PT0gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgICAgPyBjdXN0b21OYW1lQ29udHJvbD8udmFsdWUgfHwgXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgICAgOiBzZWxlY3RlZDtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB3aGVuIGN1c3RvbU5hbWUgY2hhbmdlcyAodGV4dCBpbnB1dCB2aXNpYmxlIG9ubHkgd2hlbiB0eXBlID09PSAnT3RoZXJzJylcclxuICAgICAgICBjb25zdCBzdWJDdXN0b20gPSBjdXN0b21OYW1lQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKGN1c3RvbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0eXBlQ29udHJvbC52YWx1ZSA9PT0gXCJPdGhlcnNcIikge1xyXG4gICAgICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPSBjdXN0b207XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMucHVzaChzdWJUeXBlLCBzdWJDdXN0b20pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIEZsb29yLWxldmVsIG90aGVyRWxlbWVudHMgbGFiZWwgc3Vic2NyaXB0aW9uc1xyXG4gICAgdGhpcy5nZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLmNvbnRyb2xzLmZvckVhY2goKGN0cmwsIGlkeCkgPT4ge1xyXG4gICAgICBjb25zdCBlbGVtZW50R3JvdXAgPSBjdHJsIGFzIEZvcm1Hcm91cDtcclxuICAgICAgY29uc3QgdHlwZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwidHlwZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgY29uc3QgY3VzdG9tTmFtZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwiY3VzdG9tTmFtZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgY29uc3QgZWxlbWVudFJlZiA9IHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5baWR4XTtcclxuICAgICAgaWYgKCFlbGVtZW50UmVmKSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBzdWJUeXBlID0gdHlwZUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHNlbGVjdGVkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPVxyXG4gICAgICAgICAgICBzZWxlY3RlZCA9PT0gXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgID8gY3VzdG9tTmFtZUNvbnRyb2w/LnZhbHVlIHx8IFwiT3RoZXJzXCJcclxuICAgICAgICAgICAgICA6IHNlbGVjdGVkO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGNvbnN0IHN1YkN1c3RvbSA9IGN1c3RvbU5hbWVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChjdXN0b206IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVDb250cm9sLnZhbHVlID09PSBcIk90aGVyc1wiKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPSBjdXN0b207XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLm90aGVyRWxlbWVudHNTdWJzY3JpcHRpb25zLnB1c2goc3ViVHlwZSwgc3ViQ3VzdG9tKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2FudmFzT3RoZXJFbGVtZW50TGFiZWwoZWxlbWVudFJlZjogYW55KSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbmQoXHJcbiAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgb2JqPy5vYmpUeXBlID09PSBcIm90aGVyc1wiICYmIG9iaj8uZGF0YS5faWQgPT09IGVsZW1lbnRSZWYuX2lkXHJcbiAgICAgICkgYXMgYW55O1xyXG5cclxuICAgIGlmICghZ3JvdXApIHJldHVybjtcclxuICAgIGdyb3VwLmRhdGEgPSBlbGVtZW50UmVmO1xyXG5cclxuICAgIGNvbnN0IHRleHRPYmogPSAoZ3JvdXAuZ2V0T2JqZWN0cygpIHx8IFtdKS5maW5kKFxyXG4gICAgICAobzogYW55KSA9PiBvPy50eXBlID09PSBcInRleHRcIiB8fCBvPy50eXBlID09PSBcInRleHRib3hcIlxyXG4gICAgKSBhcyBmYWJyaWMuVGV4dCB8IGZhYnJpYy5UZXh0Ym94IHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmICh0ZXh0T2JqKSB7XHJcbiAgICAgICh0ZXh0T2JqIGFzIGFueSkuc2V0KHsgdGV4dDogZWxlbWVudFJlZi5maXh0dXJlTmFtZSB9KTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcm90YXRlQ2FudmFzKGNhbnZhczogZmFicmljLkNhbnZhcywgYW5nbGVEZWc6IG51bWJlcikge1xyXG4gICAgaWYgKCFjYW52YXMpIHJldHVybjtcclxuICAgIGNvbnN0IGFsbE9iamVjdHMgPSBjYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgaWYgKCFhbGxPYmplY3RzIHx8IGFsbE9iamVjdHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgLy8gQ3JlYXRlIGFuIEFjdGl2ZVNlbGVjdGlvbiBjb250YWluaW5nIGFsbCBvYmplY3RzIG9uIHRoZSBjYW52YXNcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IG5ldyBmYWJyaWMuQWN0aXZlU2VsZWN0aW9uKGFsbE9iamVjdHMgYXMgYW55LCB7IGNhbnZhcyB9KTtcclxuICAgIGNhbnZhcy5zZXRBY3RpdmVPYmplY3Qoc2VsZWN0aW9uKTtcclxuXHJcbiAgICAvLyBSb3RhdGUgdGhlIEFjdGl2ZVNlbGVjdGlvbiBkaXJlY3RseSAod29ya3MgbGlrZSBhIHRlbXBvcmFyeSBncm91cClcclxuICAgIGNvbnN0IGFjdGl2ZTogYW55ID0gY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpO1xyXG4gICAgaWYgKCFhY3RpdmUpIHtcclxuICAgICAgY2FudmFzLmRpc2NhcmRBY3RpdmVPYmplY3QoKTtcclxuICAgICAgY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGN1cnJlbnRBbmdsZSA9IGFjdGl2ZS5hbmdsZSB8fCAwO1xyXG4gICAgYWN0aXZlLnJvdGF0ZShjdXJyZW50QW5nbGUgKyBhbmdsZURlZyk7XHJcbiAgICBhY3RpdmUuc2V0Q29vcmRzKCk7XHJcblxyXG4gICAgLy8gQ2xlYXIgc2VsZWN0aW9uIGJ1dCBrZWVwIHJvdGF0ZWQgcG9zaXRpb25zIG9mIGNoaWxkIG9iamVjdHNcclxuICAgIGNhbnZhcy5kaXNjYXJkQWN0aXZlT2JqZWN0KCk7XHJcbiAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0Rml4dHVyZU9uQ2FudmFzQ2xpY2sodGFyZ2V0OiBhbnksIGNvbGxhcHNlVGFza0luZm86IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKHRhcmdldCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHtcclxuICAgICAgICBmaXh0dXJlVHlwZTogdGFyZ2V0LmZpeHR1cmVUeXBlLFxyXG4gICAgICAgIHdhbGxJbmRleDogdGFyZ2V0LndhbGxJbmRleCxcclxuICAgICAgICBmaXh0dXJlSW5kZXg6IHRhcmdldC5maXh0dXJlSW5kZXgsXHJcbiAgICAgICAgZml4dHVyZUlkOiB0YXJnZXQuZml4dHVyZUlkLFxyXG4gICAgICAgIGlzc3VlOiB0YXJnZXQuaXNzdWUsXHJcbiAgICAgICAgaXNzdWVEYXRhOiB0YXJnZXQuaXNzdWVEYXRhLFxyXG4gICAgICAgIHZtQ29uZmlnOiB0YXJnZXQudm1Db25maWcsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdEZpeHR1cmVGZWVkYmFjayhcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWQsXHJcbiAgICAgICAgY29sbGFwc2VUYXNrSW5mb1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0Rml4dHVyZUZlZWRiYWNrKGZpeHR1cmVJZDogc3RyaW5nLCBjb2xsYXBzZVRhc2tJbmZvOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRGaXh0dXJlRmVlZGJhY2sgPSB0aGlzLnN0b3JlRmVlZGJhY2suZml4dHVyZURhdGEuZmluZChcclxuICAgICAgKGZiOiBhbnkpID0+IGZiLmZpeHR1cmVJZCA9PT0gZml4dHVyZUlkXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChjdXJyZW50Rml4dHVyZUZlZWRiYWNrKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2sgPSB7XHJcbiAgICAgICAgZ2xvYmFsQ29tbWVudHM6IHRoaXMuc3RvcmVGZWVkYmFjay5maXh0dXJlQ29tbWVudCxcclxuICAgICAgICBmaXh0dXJlRmVlZGJhY2s6IHtcclxuICAgICAgICAgIC4uLmN1cnJlbnRGaXh0dXJlRmVlZGJhY2ssXHJcbiAgICAgICAgICBGaXh0dXJlRGF0YTogc3RydWN0dXJlZENsb25lKFxyXG4gICAgICAgICAgICB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMuZmluZCgoZmk6IGFueSkgPT4gZmkuX2lkID09PSBmaXh0dXJlSWQpXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgdGFza0luZm9Ub2dnbGU6IGNvbGxhcHNlVGFza0luZm8sXHJcbiAgICAgIH07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrID0ge1xyXG4gICAgICAgIGdsb2JhbENvbW1lbnRzOiBbXSxcclxuICAgICAgICBmaXh0dXJlRmVlZGJhY2s6IHtcclxuICAgICAgICAgIGZpeHR1cmVJZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgRml4dHVyZURhdGE6IHN0cnVjdHVyZWRDbG9uZShcclxuICAgICAgICAgICAgdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZpbmQoKGZpOiBhbnkpID0+IGZpLl9pZCA9PT0gZml4dHVyZUlkKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIGZpeHR1cmVBSURhdGE6IG51bGwsXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0YXNrSW5mb1RvZ2dsZTogY29sbGFwc2VUYXNrSW5mbyxcclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEZpeHR1cmVUZW1wbGF0ZXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0QWxsVGVtcGxhdGVzKHBheWxvYWQpXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSByZXM/LmRhdGE7XHJcblxyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuZml4dHVyZVRlbXBsYXRlcyA9IGRhdGEubWFwKCh0OiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIF9pZDogdC5faWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGAke3QuZml4dHVyZU5hbWV9IC0gJHt0LmZpeHR1cmVXaWR0aC52YWx1ZX0gJHt0LmZpeHR1cmVXaWR0aC51bml0fWAsXHJcbiAgICAgICAgICAgIHN1YnRleHQ6IGAke3QucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiwgXCIpfWAsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgZmV0Y2hpbmcgZml4dHVyZSB0ZW1wbGF0ZXM6XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNyZWF0ZUZvcm0oKSB7XHJcbiAgICB0aGlzLmxheW91dEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgd2FsbHM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBmbG9vckZpeHR1cmVzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgZmxvb3JPdGhlckVsZW1lbnRzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldEZvcm1XYWxscygpIHtcclxuICAgIHJldHVybiB0aGlzLmxheW91dEZvcm0uZ2V0KFwid2FsbHNcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldEZvcm1GbG9vckZpeHR1cmVzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vckZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGdldCBnZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vck90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldEVudHJhbmNlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmZsb29yRGF0YT8ubGF5b3V0UG9seWdvbj8uZmlsdGVyKFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZS5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2FsbE90aGVyRWxlbWVudHMod2FsbEluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAodGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHdhbGxJbmRleClcclxuICAgICAgLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJ3YWxsc1wiKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgIC5hdCh3YWxsSW5kZXgpXHJcbiAgICAgIC5nZXQoXCJmaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBwYXRjaFdhbGxFbGVtZW50cyh7IGVsZW1lbnRUeXBlLCBlbGVtZW50TnVtYmVyIH06IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgZWxlbWVudFR5cGU6IFtlbGVtZW50VHlwZSA/IGVsZW1lbnRUeXBlIDogXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZWxlbWVudE51bWJlcjogW2VsZW1lbnROdW1iZXIgPyBlbGVtZW50TnVtYmVyIDogMCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgICAgZml4dHVyZXM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBvdGhlckVsZW1lbnRzOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBwYXRjaEZpeHR1cmUoeyBmaXh0dXJlTmFtZSwgZml4dHVyZUNvbmZpZ0lkLCBfaWQgfTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBmaXh0dXJlTmFtZTogW2ZpeHR1cmVOYW1lID8gZml4dHVyZU5hbWUgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBmaXh0dXJlQ29uZmlnSWQ6IFtcclxuICAgICAgICBmaXh0dXJlQ29uZmlnSWQgPyBmaXh0dXJlQ29uZmlnSWQgOiBcIlwiLFxyXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgXSxcclxuICAgICAgX2lkOiBbX2lkID8gX2lkIDogXCJcIiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl0ZW07XHJcbiAgfVxyXG5cclxuICBhZGRXYWxsU3BhY2Uod2FsbEluZGV4OiBudW1iZXIsIG9wZXJhdGlvbjogXCJpbmNyZW1lbnRcIiB8IFwiZGVjcmVtZW50XCIpIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNsaWNrZWRXYWxsTnVtYmVyID0gd2FsbEluZGV4ICsgMTtcclxuICAgIGNvbnN0IG1tVG9GZWV0ID0gMzA1O1xyXG4gICAgY29uc3QgZml4dHVyZUhlaWdodCA9IDE1MjQgLyBtbVRvRmVldDsgLy8gfjUgZnQgKGhvcml6b250YWwgaW5jcmVtZW50KVxyXG4gICAgY29uc3QgZml4dHVyZVdpZHRoID0gMTIyMCAvIG1tVG9GZWV0OyAvLyB+NCBmdCAodmVydGljYWwgaW5jcmVtZW50KVxyXG5cclxuICAgIGNvbnN0IGxheW91dCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb247XHJcblxyXG4gICAgY29uc3QgZ2V0V2FsbCA9IChudW06IG51bWJlcikgPT5cclxuICAgICAgbGF5b3V0LmZpbmQoXHJcbiAgICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbC5lbGVtZW50TnVtYmVyID09PSBudW1cclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBhbW91bnQgPSBvcGVyYXRpb24gPT09IFwiaW5jcmVtZW50XCIgPyAxIDogLTE7XHJcblxyXG4gICAgY29uc3QgdzEgPSBnZXRXYWxsKDEpO1xyXG4gICAgY29uc3QgdzIgPSBnZXRXYWxsKDIpO1xyXG4gICAgY29uc3QgdzMgPSBnZXRXYWxsKDMpO1xyXG4gICAgY29uc3QgdzQgPSBnZXRXYWxsKDQpO1xyXG4gICAgY29uc3QgdzUgPSBnZXRXYWxsKDUpO1xyXG4gICAgY29uc3QgZW50cmFuY2UgPSBsYXlvdXQuZmluZCgoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIik7XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gSG9yaXpvbnRhbCBncm93dGggIChXYWxsLTEgLyBXYWxsLTMpXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBpZiAoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDEgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDMpIHtcclxuICAgICAgaWYgKHcxKSB3MS5kaXN0YW5jZSArPSBhbW91bnQgKiBmaXh0dXJlV2lkdGg7XHJcbiAgICAgIGlmICh3MykgdzMuZGlzdGFuY2UgKz0gYW1vdW50ICogZml4dHVyZVdpZHRoO1xyXG5cclxuICAgICAgaWYgKHcyKSB7XHJcbiAgICAgICAgdzIuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZngucmVsYXRpdmVQb3NpdGlvbi54ID1cclxuICAgICAgICAgICAgKGZ4LnJlbGF0aXZlUG9zaXRpb24ueCB8fCAwKSArIGFtb3VudCAqIGZpeHR1cmVXaWR0aDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC8vIFZlcnRpY2FsIGdyb3d0aCAgKFdhbGwtMiAvIFdhbGwtNCAvIFdhbGwtNSlcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlmIChcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIgfHxcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDQgfHxcclxuICAgICAgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDVcclxuICAgICkge1xyXG4gICAgICBpZiAodzIpIHcyLmRpc3RhbmNlICs9IGFtb3VudCAqIGZpeHR1cmVIZWlnaHQ7XHJcblxyXG4gICAgICBpZiAodzMpIHtcclxuICAgICAgICB3My5maXh0dXJlcy5mb3JFYWNoKChmeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAoZngucmVsYXRpdmVQb3NpdGlvbi55IHx8IDApICsgYW1vdW50ICogZml4dHVyZUhlaWdodDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZW50cmFuY2VZID0gZW50cmFuY2U/LmRpc3RhbmNlIHx8IDA7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nVzQgPSB3ND8uZGlzdGFuY2UgfHwgMDtcclxuICAgICAgY29uc3QgZXhpc3RpbmdXNSA9IHc1Py5kaXN0YW5jZSB8fCAwO1xyXG5cclxuICAgICAgLy8gR3JvdyB3YWxsLTQgaWYgd2UgY2xpY2tlZCB3YWxsLTQgT1Igd2FsbC0yXHJcbiAgICAgIGlmICgoY2xpY2tlZFdhbGxOdW1iZXIgPT09IDQgfHwgY2xpY2tlZFdhbGxOdW1iZXIgPT09IDIpICYmIHc0KSB7XHJcbiAgICAgICAgdzQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28oZXhpc3RpbmdXNCArIGFtb3VudCAqIGZpeHR1cmVIZWlnaHQpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBHcm93IHdhbGwtNSBpZiB3ZSBjbGlja2VkIHdhbGwtNSBPUiB3YWxsLTJcclxuICAgICAgaWYgKChjbGlja2VkV2FsbE51bWJlciA9PT0gNSB8fCBjbGlja2VkV2FsbE51bWJlciA9PT0gMikgJiYgdzUpIHtcclxuICAgICAgICB3NS5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhleGlzdGluZ1c1ICsgYW1vdW50ICogZml4dHVyZUhlaWdodCk7XHJcblxyXG4gICAgICAgIGlmICh3NCkge1xyXG4gICAgICAgICAgdzQuZml4dHVyZXMuZm9yRWFjaCgoZng6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgPVxyXG4gICAgICAgICAgICAgIChmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgfHwgMCkgKyBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcmV2ZW50IG92ZXJmbG93OiBzaHJpbmsgYmFjayBpZiB0b3RhbCA+IHcyIHNpemVcclxuICAgICAgY29uc3QgdG90YWxVc2VkID0gZW50cmFuY2VZICsgKHc0Py5kaXN0YW5jZSB8fCAwKSArICh3NT8uZGlzdGFuY2UgfHwgMCk7XHJcbiAgICAgIGlmICh0b3RhbFVzZWQgPiB3MiEuZGlzdGFuY2UpIHtcclxuICAgICAgICBpZiAodzUpIHtcclxuICAgICAgICAgIHc1LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKFxyXG4gICAgICAgICAgICB3NS5kaXN0YW5jZSAtICh0b3RhbFVzZWQgLSB3MiEuZGlzdGFuY2UpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRml4dHVyZShcclxuICAgIGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIixcclxuICAgIGZpeHR1cmVJbmRleDogbnVtYmVyLFxyXG4gICAgd2FsbEluZGV4PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICB0aGlzLmdldEZvcm1GaXh0dXJlcyh3YWxsSW5kZXghKS5yZW1vdmVBdChmaXh0dXJlSW5kZXgpO1xyXG5cclxuICAgICAgY29uc3Qgd2FsbCA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKTtcclxuICAgICAgaWYgKHdhbGwgJiYgQXJyYXkuaXNBcnJheSh3YWxsLmZpeHR1cmVzKSkge1xyXG4gICAgICAgIHdhbGwuZml4dHVyZXMuc3BsaWNlKGZpeHR1cmVJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLnJlbW92ZUF0KGZpeHR1cmVJbmRleCk7XHJcblxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKSkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuc3BsaWNlKGZpeHR1cmVJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJsYXlvdXRcIjtcclxuICB9XHJcblxyXG4gIHJlbW92ZU90aGVyRWxlbWVudChcclxuICAgIGVsZW1lbnRUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIixcclxuICAgIGVsZW1lbnRJbmRleDogbnVtYmVyLFxyXG4gICAgd2FsbEluZGV4PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgaWYgKGVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICB0aGlzLmdldFdhbGxPdGhlckVsZW1lbnRzKHdhbGxJbmRleCEpLnJlbW92ZUF0KGVsZW1lbnRJbmRleCk7XHJcblxyXG4gICAgICBjb25zdCB3YWxsID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG4gICAgICBpZiAod2FsbCAmJiBBcnJheS5pc0FycmF5KHdhbGwub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgICB3YWxsLm90aGVyRWxlbWVudHMuc3BsaWNlKGVsZW1lbnRJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoZWxlbWVudFR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICB0aGlzLmdldEZvcm1GbG9vck90aGVyRWxlbWVudHMucmVtb3ZlQXQoZWxlbWVudEluZGV4KTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMpKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cy5zcGxpY2UoZWxlbWVudEluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlRml4dHVyZVRlbXBsYXRlKFxyXG4gICAgY29uZmlnSWQ6IHN0cmluZyxcclxuICAgIGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIixcclxuICAgIGZpeHR1cmVJbmRleDogbnVtYmVyLFxyXG4gICAgd2FsbEluZGV4PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLmdldEZpeHR1cmVUZW1wbGF0ZShjb25maWdJZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVEYXRhID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IHRoaXMucGF0Y2hGaXh0dXJlKHtcclxuICAgICAgICAgICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEpLnNldENvbnRyb2woXHJcbiAgICAgICAgICAgICAgZml4dHVyZUluZGV4LFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVHcm91cFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlRGF0YSA9IHtcclxuICAgICAgICAgICAgICAuLi50ZW1wbGF0ZURhdGEsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICAgICAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCB3YWxsUmVmID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpITtcclxuICAgICAgICAgICAgd2FsbFJlZi5maXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgIC4uLndhbGxSZWYuZml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAuLi5maXh0dXJlRGF0YSxcclxuICAgICAgICAgICAgICB1bnNhdmVkQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZml4dHVyZVR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZUlkID0gYG5ldy0ke2NyeXB0by5yYW5kb21VVUlEKCl9YDtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVOYW1lOiB0ZW1wbGF0ZURhdGEuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICAgICAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vckZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkuc2V0Q29udHJvbChcclxuICAgICAgICAgICAgICBmaXh0dXJlSW5kZXgsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUdyb3VwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRlbXBsYXRlRGF0YSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAuLi50aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgLi4uZml4dHVyZURhdGEsXHJcbiAgICAgICAgICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICAgICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwibGF5b3V0XCI7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBmZXRjaCB0ZW1wbGF0ZXNcIik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoXHJcbiAgICBldmVudDogYW55LFxyXG4gICAgZGVzdGluYXRpb25XYWxsSW5kZXg6IG51bWJlciB8IFwiZmxvb3JcIixcclxuICAgIGRlc3RpbmF0aW9uRml4dHVyZUluZGV4PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBjb25zdCBkYXRhID0gZXZlbnQuZGF0YTtcclxuXHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCBpc1NvdXJjZUZsb29yID0gZGF0YS53YWxsSW5kZXggPT09IFwiZmxvb3JcIjtcclxuICAgIGNvbnN0IGlzRGVzdGluYXRpb25GbG9vciA9IGRlc3RpbmF0aW9uV2FsbEluZGV4ID09PSBcImZsb29yXCI7XHJcblxyXG4gICAgY29uc3Qgc291cmNlRm9ybUFycmF5OiBGb3JtQXJyYXkgPSBpc1NvdXJjZUZsb29yXHJcbiAgICAgID8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlc1xyXG4gICAgICA6IHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKGRhdGEud2FsbEluZGV4KTtcclxuXHJcbiAgICBjb25zdCBkZXN0aW5hdGlvbkZvcm1BcnJheTogRm9ybUFycmF5ID0gaXNEZXN0aW5hdGlvbkZsb29yXHJcbiAgICAgID8gdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlc1xyXG4gICAgICA6IHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKGRlc3RpbmF0aW9uV2FsbEluZGV4IGFzIG51bWJlcik7XHJcblxyXG4gICAgY29uc3Qgc291cmNlV2FsbE1ldGEgPSBpc1NvdXJjZUZsb29yXHJcbiAgICAgID8gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVxyXG4gICAgICA6IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKFxyXG4gICAgICAgICAgdGhpcy5nZXRGb3JtV2FsbHMuYXQoZGF0YS53YWxsSW5kZXgpLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlXHJcbiAgICAgICAgKT8uZml4dHVyZXMgPz8gW107XHJcblxyXG4gICAgY29uc3QgZGVzdGluYXRpb25XYWxsTWV0YSA9IGlzRGVzdGluYXRpb25GbG9vclxyXG4gICAgICA/IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVcclxuICAgICAgOiB0aGlzLmdldFdhbGxCeU51bWJlcihcclxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybVdhbGxzXHJcbiAgICAgICAgICAgIC5hdChkZXN0aW5hdGlvbldhbGxJbmRleCBhcyBudW1iZXIpXHJcbiAgICAgICAgICAgIC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZVxyXG4gICAgICAgICk/LmZpeHR1cmVzID8/IFtdO1xyXG5cclxuICAgIGNvbnN0IHNGaXh0dXJlSW5kZXggPSBzb3VyY2VXYWxsTWV0YS5maW5kSW5kZXgoXHJcbiAgICAgIChmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgZml4dHVyZS5faWQgPT09IHNvdXJjZUZvcm1BcnJheS5hdChkYXRhLmZpeHR1cmVJbmRleCk/LmdldChcIl9pZFwiKT8udmFsdWVcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgZEZpeHR1cmVJbmRleCA9XHJcbiAgICAgIGRlc3RpbmF0aW9uRml4dHVyZUluZGV4ICE9PSB1bmRlZmluZWRcclxuICAgICAgICA/IGRlc3RpbmF0aW9uV2FsbE1ldGEuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAoZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgIGZpeHR1cmUuX2lkID09PVxyXG4gICAgICAgICAgICAgIGRlc3RpbmF0aW9uRm9ybUFycmF5LmF0KGRlc3RpbmF0aW9uRml4dHVyZUluZGV4KT8uZ2V0KFwiX2lkXCIpXHJcbiAgICAgICAgICAgICAgICA/LnZhbHVlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgOiBkZXN0aW5hdGlvbkZvcm1BcnJheS5sZW5ndGg7XHJcblxyXG4gICAgY29uc3Qgc1Bvc2l0aW9uID0ge1xyXG4gICAgICBmaXh0dXJlTnVtYmVyOiBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyLFxyXG4gICAgICBhc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI6XHJcbiAgICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGRQb3NpdGlvbiA9IHtcclxuICAgICAgZml4dHVyZU51bWJlcjogZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyLFxyXG4gICAgICBhc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI6XHJcbiAgICAgICAgZGVzdGluYXRpb25XYWxsTWV0YVtkRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChzb3VyY2VXYWxsTWV0YSA9PT0gZGVzdGluYXRpb25XYWxsTWV0YSkge1xyXG4gICAgICBkZXN0aW5hdGlvbldhbGxNZXRhW2RGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIHNQb3NpdGlvbi5maXh0dXJlTnVtYmVyO1xyXG4gICAgICBkZXN0aW5hdGlvbldhbGxNZXRhW2RGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9XHJcbiAgICAgICAgc1Bvc2l0aW9uLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlciA9IGRQb3NpdGlvbi5maXh0dXJlTnVtYmVyO1xyXG4gICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPVxyXG4gICAgICAgIGRQb3NpdGlvbi5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyID0gZFBvc2l0aW9uLmZpeHR1cmVOdW1iZXI7XHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9XHJcbiAgICAgICAgZFBvc2l0aW9uLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRyYW5zZmVyQXJyYXlJdGVtKFxyXG4gICAgICBzb3VyY2VGb3JtQXJyYXkuY29udHJvbHMsXHJcbiAgICAgIGRlc3RpbmF0aW9uRm9ybUFycmF5LmNvbnRyb2xzLFxyXG4gICAgICBkYXRhLmZpeHR1cmVJbmRleCxcclxuICAgICAgZEZpeHR1cmVJbmRleFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnRyYW5zZmVyQXJyYXlJdGVtKFxyXG4gICAgICBzb3VyY2VXYWxsTWV0YSxcclxuICAgICAgZGVzdGluYXRpb25XYWxsTWV0YSxcclxuICAgICAgc0ZpeHR1cmVJbmRleCxcclxuICAgICAgZEZpeHR1cmVJbmRleFxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJsYXlvdXRcIjtcclxuICB9XHJcblxyXG4gIGRvd25sb2FkQ2FudmFzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG9yaWdpbmFsVmlld3BvcnQgPSBbXHJcbiAgICAgIC4uLnRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtISxcclxuICAgIF0gYXMgZmFicmljLlRNYXQyRDtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5zZXRWaWV3cG9ydFRyYW5zZm9ybShbMSwgMCwgMCwgMSwgMCwgMF0pO1xyXG5cclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG5cclxuICAgIGNvbnN0IGRhdGFVUkwgPSB0aGlzLmNhbnZhcy50b0RhdGFVUkwoe1xyXG4gICAgICBmb3JtYXQ6IFwicG5nXCIsXHJcbiAgICAgIGxlZnQ6IGJvdW5kcy5sZWZ0LFxyXG4gICAgICB0b3A6IGJvdW5kcy50b3AsXHJcbiAgICAgIHdpZHRoOiBib3VuZHMud2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm91bmRzLmhlaWdodCxcclxuICAgICAgbXVsdGlwbGllcjogMixcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFZpZXdwb3J0VHJhbnNmb3JtKG9yaWdpbmFsVmlld3BvcnQpO1xyXG5cclxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIGxpbmsuaHJlZiA9IGRhdGFVUkw7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gYCR7dGhpcy5wbGFub0RhdGEuc3RvcmVOYW1lfV8ke3RoaXMuZmxvb3JEYXRhLmZsb29yTmFtZX0ucG5nYDtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZUZlZWRiYWNrQWN0aW9uKHVzZXJBY3Rpb246IGFueSkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IHRhcmdldEZpeHR1cmU6IGFueSA9IHtcclxuICAgICAgICAuLi4odGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvblxyXG4gICAgICAgICAgLmZsYXRNYXAoKHA6IGFueSkgPT4gcC5maXh0dXJlcylcclxuICAgICAgICAgIC5jb25jYXQodGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSlcclxuICAgICAgICAgIC5maW5kKChmOiBhbnkpID0+IGYuX2lkID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlSWQpIHx8IG51bGwpLFxyXG4gICAgICAgIHVzZXJBY3Rpb246IHVzZXJBY3Rpb24uYWN0aW9uLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0geyAuLi50YXJnZXRGaXh0dXJlIH07XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdXNlckFjdGlvbi5hY3Rpb24gPT09IFwiYWNjZXB0QWlcIiB8fFxyXG4gICAgICAgIHVzZXJBY3Rpb24uYWN0aW9uID09PSBcImVkaXRXaXRoQWlcIlxyXG4gICAgICApIHtcclxuICAgICAgICB0YXJnZXRGaXh0dXJlID0ge1xyXG4gICAgICAgICAgLi4udGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgIC4uLnVzZXJBY3Rpb24uZml4dHVyZURhdGEsXHJcbiAgICAgICAgICBoZWFkZXI6IHtcclxuICAgICAgICAgICAgLi4udGFyZ2V0Rml4dHVyZS5oZWFkZXIsXHJcbiAgICAgICAgICAgIC4uLnVzZXJBY3Rpb24uZml4dHVyZURhdGEuaGVhZGVyLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB1c2VyQWN0aW9uLmZpeHR1cmVEYXRhPy5oZWFkZXI/LmxhYmVsXHJcbiAgICAgICAgICAgID8udG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICA/LmluY2x1ZGVzKFwiaGVhZGVyIG5vdCBpZGVudGlmaWVkXCIpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0YXJnZXRGaXh0dXJlLmhlYWRlci5sYWJlbCA9IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5oZWFkZXIubGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdXNlckFjdGlvbi5hY3Rpb24gPT09IFwiZWRpdFdpdGhBaVwiIHx8XHJcbiAgICAgICAgdXNlckFjdGlvbi5hY3Rpb24gPT09IFwiZWRpdFdpdGhQbGFub1wiXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSA9IHtcclxuICAgICAgICAgIC4uLnRhcmdldEZpeHR1cmUsXHJcbiAgICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZURhdGEgPSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE7XHJcblxyXG4gICAgICAgIHRoaXMuZWRpdEZpeHR1cmUgPSB0cnVlO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5lZGl0Rml4dHVyZVNlY3Rpb24gPSB1c2VyQWN0aW9uPy50YWIgPz8gXCJiYXNpYy1kZXRhaWxzXCI7XHJcbiAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9LCAxMDApO1xyXG5cclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGZlZWRiYWNrID0gdXNlckFjdGlvbi5mZWVkYmFjaztcclxuXHJcbiAgICAgIGNvbnN0IGFuc3dlcklkID0gdXNlckFjdGlvbi5mZWVkYmFjaz8uYW5zd2Vycz8uWzBdPy5faWQ7XHJcbiAgICAgIGlmICghYW5zd2VySWQpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgX2lkOiBmZWVkYmFjay5faWQsXHJcbiAgICAgICAgYW5zd2VySWQ6IGFuc3dlcklkLFxyXG4gICAgICAgIHR5cGU6IHVzZXJBY3Rpb24udHlwZSxcclxuICAgICAgICB1c2VyQWN0aW9uOiB1c2VyQWN0aW9uLmFjdGlvbixcclxuICAgICAgICBjb21tZW50czogdXNlckFjdGlvbi5yZW1hcmtzLFxyXG4gICAgICAgIHRhc2tUeXBlOiB1c2VyQWN0aW9uLnRhc2tUeXBlLFxyXG4gICAgICAgIHBsYW5vSWQ6IHVzZXJBY3Rpb24ucGxhbm9JZCxcclxuICAgICAgICBmbG9vcklkOiB1c2VyQWN0aW9uLmZsb29ySWQsXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlRml4dHVyZUNvbXBsaWFuY2VTdGF0dXMocGF5bG9hZClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghcmVzICYmIHVzZXJBY3Rpb24udHlwZSAhPSBcImFncmVlXCIpIHJldHVybjtcclxuXHJcbiAgICAgIGlmICh1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJrZWVwUGxhbm9cIikge1xyXG4gICAgICAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB1cGRhdGVGaXh0dXJlUGF5bG9hZCA9IHtcclxuICAgICAgICBmaXh0dXJlSWQ6IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCxcclxuICAgICAgICBkYXRhOiB0YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVTdG9yZUZpeHR1cmUodXBkYXRlRml4dHVyZVBheWxvYWQpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgdGhpcy5nZXRWbXNMaXN0KCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YS5faWQpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBleGVjdXRlIHVzZXIgYWN0aW9uXCIpO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gaGFuZGxlRmVlZGJhY2tBY3Rpb24gW2Vycl06XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGJpbmRGaXh0dXJlVG9XYWxsKHdhbGxHcm91cDogZmFicmljLkdyb3VwLCBmaXh0dXJlR3JvdXA6IGZhYnJpYy5Hcm91cCkge1xyXG4gICAgY29uc3Qgb2Zmc2V0WCA9IGZpeHR1cmVHcm91cC5sZWZ0ISAtIHdhbGxHcm91cC5sZWZ0ITtcclxuICAgIGNvbnN0IG9mZnNldFkgPSBmaXh0dXJlR3JvdXAudG9wISAtIHdhbGxHcm91cC50b3AhO1xyXG5cclxuICAgIGlmICghdGhpcy53YWxsQmluZGluZ3MuaGFzKHdhbGxHcm91cCkpIHRoaXMud2FsbEJpbmRpbmdzLnNldCh3YWxsR3JvdXAsIFtdKTtcclxuICAgIHRoaXMud2FsbEJpbmRpbmdzLmdldCh3YWxsR3JvdXApIS5wdXNoKHsgZml4dHVyZUdyb3VwLCBvZmZzZXRYLCBvZmZzZXRZIH0pO1xyXG4gIH1cclxuXHJcbiAga2VlcFdpdGhpbkJvdW5kaW5nQm94KFxyXG4gICAgb2JqOiBmYWJyaWMuT2JqZWN0LFxyXG4gICAgYm94OiB7IGxlZnQ6IG51bWJlcjsgdG9wOiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH1cclxuICApIHtcclxuICAgIGNvbnN0IHJlY3QgPSBvYmouZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICBsZXQgZHggPSAwO1xyXG4gICAgbGV0IGR5ID0gMDtcclxuXHJcbiAgICBpZiAocmVjdC5sZWZ0IDwgYm94LmxlZnQpIHtcclxuICAgICAgZHggPSBib3gubGVmdCAtIHJlY3QubGVmdDtcclxuICAgIH1cclxuICAgIGlmIChyZWN0LnRvcCA8IGJveC50b3ApIHtcclxuICAgICAgZHkgPSBib3gudG9wIC0gcmVjdC50b3A7XHJcbiAgICB9XHJcbiAgICBpZiAocmVjdC5sZWZ0ICsgcmVjdC53aWR0aCA+IGJveC5sZWZ0ICsgYm94LndpZHRoKSB7XHJcbiAgICAgIGR4ID0gYm94LmxlZnQgKyBib3gud2lkdGggLSAocmVjdC5sZWZ0ICsgcmVjdC53aWR0aCk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVjdC50b3AgKyByZWN0LmhlaWdodCA+IGJveC50b3AgKyBib3guaGVpZ2h0KSB7XHJcbiAgICAgIGR5ID0gYm94LnRvcCArIGJveC5oZWlnaHQgLSAocmVjdC50b3AgKyByZWN0LmhlaWdodCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGR4ICE9PSAwIHx8IGR5ICE9PSAwKSB7XHJcbiAgICAgIG9iai5sZWZ0ID0gb2JqLmxlZnQhICsgZHg7XHJcbiAgICAgIG9iai50b3AgPSBvYmoudG9wISArIGR5O1xyXG4gICAgICBvYmouc2V0Q29vcmRzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIGlzT3ZlcmxhcHBpbmdBbnlGaXh0dXJlKG1vdmVkT2JqOiBmYWJyaWMuT2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBCVUZGRVJfUFggPSA0OyAvLyBvdmVybGFwIHRvbGVyYW5jZSBwZXIgc2lkZVxyXG5cclxuICAgIGNvbnN0IG9iamVjdHMgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iajogYW55KSA9PiBvYmogIT09IG1vdmVkT2JqICYmIG9iai5maXh0dXJlSWQpO1xyXG5cclxuICAgIGNvbnN0IHNocmlua1JlY3QgPSAoXHJcbiAgICAgIHI6IHsgbGVmdDogbnVtYmVyOyB0b3A6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcclxuICAgICAgYjogbnVtYmVyXHJcbiAgICApID0+IHtcclxuICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCgwLCByLndpZHRoIC0gMiAqIGIpO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBNYXRoLm1heCgwLCByLmhlaWdodCAtIDIgKiBiKTtcclxuICAgICAgY29uc3QgbGVmdCA9IHIubGVmdCArIGI7XHJcbiAgICAgIGNvbnN0IHRvcCA9IHIudG9wICsgYjtcclxuICAgICAgcmV0dXJuIHsgbGVmdCwgdG9wLCB3aWR0aCwgaGVpZ2h0IH07XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHJlY3RzSW50ZXJzZWN0ID0gKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgIHJldHVybiAhKFxyXG4gICAgICAgIGEubGVmdCArIGEud2lkdGggPD0gYi5sZWZ0IHx8XHJcbiAgICAgICAgYi5sZWZ0ICsgYi53aWR0aCA8PSBhLmxlZnQgfHxcclxuICAgICAgICBhLnRvcCArIGEuaGVpZ2h0IDw9IGIudG9wIHx8XHJcbiAgICAgICAgYi50b3AgKyBiLmhlaWdodCA8PSBhLnRvcFxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBtb3ZlZFJlY3RSYXcgPSBtb3ZlZE9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGNvbnN0IG1vdmVkUmVjdCA9IHNocmlua1JlY3QobW92ZWRSZWN0UmF3LCBCVUZGRVJfUFgpO1xyXG5cclxuICAgIHJldHVybiBvYmplY3RzLnNvbWUoKG9iajogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IG90aGVyUmVjdFJhdyA9IG9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgY29uc3Qgb3RoZXJSZWN0ID0gc2hyaW5rUmVjdChvdGhlclJlY3RSYXcsIEJVRkZFUl9QWCk7XHJcbiAgICAgIHJldHVybiByZWN0c0ludGVyc2VjdChtb3ZlZFJlY3QsIG90aGVyUmVjdCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJvdGF0ZVdhbGwoZWxlTnVtYmVyOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHdhbGwgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlbDogYW55KSA9PiBlbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWwuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyXHJcbiAgICApO1xyXG4gICAgaWYgKHdhbGwuYW5nbGUgKyA5MCA8IDM2MCkge1xyXG4gICAgICB3YWxsLmFuZ2xlICs9IDkwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd2FsbC5hbmdsZSA9IDA7XHJcbiAgICB9XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3V2FsbChlbGVOdW1iZXI6IG51bWJlcikge1xyXG4gICAgY29uc3QgbmV3V2FsbCA9IHtcclxuICAgICAgZWxlbWVudFR5cGU6IFwid2FsbFwiLFxyXG4gICAgICBkaXN0YW5jZTogMTUsXHJcbiAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgZGlyZWN0aW9uOiBcInJpZ2h0XCIsXHJcbiAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICBlbGVtZW50TnVtYmVyOiBlbGVOdW1iZXIgKyAxLFxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgICAgZml4dHVyZXM6IFtdLFxyXG4gICAgICBvdGhlckVsZW1lbnRzOiBbXSxcclxuICAgICAgbmV3QWRkZWQ6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGluc2VydEluZGV4ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kSW5kZXgoXHJcbiAgICAgICh3YWxsOiBhbnkpID0+XHJcbiAgICAgICAgd2FsbC5lbGVtZW50TnVtYmVyID09PSBlbGVOdW1iZXIgJiYgd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCJcclxuICAgICk7XHJcblxyXG4gICAgLy8gLy8gQ2VudGVyIHRoZSBuZXcgd2FsbCBvbiBjYW52YXNcclxuICAgIC8vIHRyeSB7XHJcbiAgICAvLyAgIGNvbnN0IGNhbnZhc0NlbnRlclggPSB0aGlzLmNhbnZhcy5nZXRXaWR0aCgpIC8gMjtcclxuICAgIC8vICAgY29uc3QgY2FudmFzQ2VudGVyWSA9IHRoaXMuY2FudmFzLmdldEhlaWdodCgpIC8gMjtcclxuICAgIC8vICAgY29uc3Qgd2FsbFdpZHRoUHggPSB0aGlzLnRvUGl4ZWxzKG5ld1dhbGwuZGlzdGFuY2UsIG5ld1dhbGwudW5pdCk7XHJcbiAgICAvLyAgIGNvbnN0IHdhbGxIZWlnaHRQeCA9IHRoaXMud2FsbFRoaWNrbmVzcztcclxuICAgIC8vICAgY29uc3QgbGVmdFB4ID0gY2FudmFzQ2VudGVyWCAtIHdhbGxXaWR0aFB4IC8gMjtcclxuICAgIC8vICAgY29uc3QgdG9wUHggPSBjYW52YXNDZW50ZXJZIC0gd2FsbEhlaWdodFB4IC8gMjtcclxuICAgIC8vICAgbmV3V2FsbC5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLmZyb21QaXhlbHMobGVmdFB4LCBcImZ0XCIpO1xyXG4gICAgLy8gICBuZXdXYWxsLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMuZnJvbVBpeGVscyh0b3BQeCwgXCJmdFwiKTtcclxuICAgIC8vIH0gY2F0Y2gge31cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnNwbGljZShpbnNlcnRJbmRleCArIDEsIDAsIG5ld1dhbGwpO1xyXG5cclxuICAgIHRoaXMudXBkYXRlV2FsbEVsZW1lbnROdW1iZXIoKTtcclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVdhbGxDb29yZGluYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3RW50cmFuY2UoKSB7XHJcbiAgICBjb25zdCBlbGVOdW1iZXIgPVxyXG4gICAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbHRlcihcclxuICAgICAgICAoZWxlOiBhbnkpID0+IGVsZS5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiXHJcbiAgICAgICk/Lmxlbmd0aCA/PyAwO1xyXG5cclxuICAgIGNvbnN0IG5ld0VudHJhbmNlID0ge1xyXG4gICAgICBlbGVtZW50VHlwZTogXCJlbnRyYW5jZVwiLFxyXG4gICAgICBkaXN0YW5jZTogNixcclxuICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICBkaXJlY3Rpb246IFwidXBcIixcclxuICAgICAgYW5nbGU6IDAsXHJcbiAgICAgIGVsZW1lbnROdW1iZXI6IGVsZU51bWJlciArIDEsXHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb246IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9LFxyXG4gICAgICBmaXh0dXJlczogW10sXHJcbiAgICAgIG90aGVyRWxlbWVudHM6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnB1c2gobmV3RW50cmFuY2UpO1xyXG4gICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy51cGRhdGVFbnRyYW5jZUNvb3JkaW5hdGVzKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGROZXdGaXh0dXJlKGZpeHR1cmVUeXBlOiBcIndhbGxcIiB8IFwiZmxvb3JcIiwgd2FsbEluZGV4PzogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcbiAgICBjb25zdCB0ZW1wbGF0ZTogYW55ID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZSh0aGlzLmZpeHR1cmVUZW1wbGF0ZXNbMF0uX2lkKTtcclxuICAgIGNvbnN0IHRlbXBsYXRlRGF0YSA9IHRlbXBsYXRlLmRhdGE7XHJcbiAgICBjb25zdCBmaXh0dXJlSWQgPSBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xyXG4gICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICBmaXh0dXJlTmFtZTogdGVtcGxhdGVEYXRhLmZpeHR1cmVOYW1lLFxyXG4gICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgIC4uLnRlbXBsYXRlRGF0YSxcclxuICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIHVuaXQ6IFwiZnRcIiB9LFxyXG4gICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgdW5zYXZlZENoYW5nZXM6IHRydWUsXHJcbiAgICAgIG5ld0FkZGVkOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxEYXRhID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG5cclxuICAgICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHdwID0gdGhpcy5mcm9tUGl4ZWxzKHcsIFwiZnRcIik7XHJcblxyXG4gICAgICBpZiAod2FsbERhdGEpIHtcclxuICAgICAgICBjb25zdCB4MCA9IHdhbGxEYXRhLnJlbGF0aXZlUG9zaXRpb24ueDtcclxuICAgICAgICBjb25zdCB5MCA9IHdhbGxEYXRhLnJlbGF0aXZlUG9zaXRpb24ueTtcclxuICAgICAgICBjb25zdCBsZW5ndGggPSB3YWxsRGF0YS5kaXN0YW5jZSAtIHdwO1xyXG5cclxuICAgICAgICBjb25zdCBhbmdsZURlZyA9IHdhbGxEYXRhLmFuZ2xlIHx8IDA7XHJcbiAgICAgICAgY29uc3QgYW5nbGVSYWQgPSAoYW5nbGVEZWcgKiBNYXRoLlBJKSAvIDE4MDtcclxuXHJcbiAgICAgICAgY29uc3QgZnggPSB4MCArIGxlbmd0aCAqIE1hdGguY29zKGFuZ2xlUmFkKTtcclxuXHJcbiAgICAgICAgY29uc3QgZnkgPSB5MCArIGxlbmd0aCAqIE1hdGguc2luKGFuZ2xlUmFkKTtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSAxO1xyXG4gICAgICAgIGNvbnN0IGZ4X29mZnNldCA9IGZ4ICsgb2Zmc2V0ICogLU1hdGguc2luKGFuZ2xlUmFkKTtcclxuXHJcbiAgICAgICAgY29uc3QgZnlfb2Zmc2V0ID0gZnkgKyBvZmZzZXQgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24ueCA9IGZ4X29mZnNldDtcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBmeV9vZmZzZXQ7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9IGFuZ2xlRGVnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAodGhpcy5nZXRGb3JtV2FsbHMuYXQod2FsbEluZGV4ISkuZ2V0KFwiZml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIGZpeHR1cmVHcm91cFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk/LmZpeHR1cmVzLnB1c2goZml4dHVyZURhdGEpO1xyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVXaWR0aFB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmVIZWlnaHRQeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIC8vIFRyeSB0byBmaW5kIGVtcHR5IGNlbnRlciBzcGFjZVxyXG4gICAgICBjb25zdCBlbXB0eVNwb3QgPSB0aGlzLmZpbmRFbXB0eUNlbnRlclNwb3QoXHJcbiAgICAgICAgZml4dHVyZVdpZHRoUHgsXHJcbiAgICAgICAgZml4dHVyZUhlaWdodFB4XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoZW1wdHlTcG90KSB7XHJcbiAgICAgICAgLy8gQ29udmVydCBiYWNrIHRvIGZ0IHNpbmNlIHlvdXIgc3RydWN0dXJlIHN0b3JlcyBmdFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMuZnJvbVBpeGVscyhlbXB0eVNwb3QueCwgXCJmdFwiKTtcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLmZyb21QaXhlbHMoZW1wdHlTcG90LnksIFwiZnRcIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZmFsbGJhY2tcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnggPSAwO1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24ueSA9IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICh0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JGaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goZml4dHVyZUdyb3VwKTtcclxuICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5wdXNoKGZpeHR1cmVEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJsYXlvdXRcIjtcclxuICAgIHRoaXMudXBkYXRlRml4dHVyZUNvb3JkaW5hdGVzKCk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdPdGhlckVsZW1lbnRzKHBvc1R5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLCB3YWxsSW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBwb3NEYXRhID0ge1xyXG4gICAgICBfaWQ6IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWAsXHJcbiAgICAgIGZpeHR1cmVOYW1lOiBgUE9TIENvdW50ZXJgLFxyXG4gICAgICBmaXh0dXJlVHlwZTogXCJvdGhlclwiLFxyXG4gICAgICByZWxhdGl2ZVBvc2l0aW9uOiB7IHg6IDAsIHk6IDAsIGFuZ2xlOiAwLCB1bml0OiBcImZ0XCIgfSxcclxuICAgICAgZml4dHVyZVN0YXRpY0xlbmd0aDoge1xyXG4gICAgICAgIHZhbHVlOiAzLFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfSxcclxuICAgICAgZml4dHVyZVN0YXRpY1dpZHRoOiB7XHJcbiAgICAgICAgdmFsdWU6IDUsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgeCA9IHBvc0RhdGEucmVsYXRpdmVQb3NpdGlvbi54O1xyXG4gICAgbGV0IHkgPSBwb3NEYXRhLnJlbGF0aXZlUG9zaXRpb24ueTtcclxuICAgIGxldCBhID0gcG9zRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG5cclxuICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUsXHJcbiAgICAgIHBvc0RhdGEuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICApO1xyXG4gICAgY29uc3QgdyA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIHBvc0RhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICBwb3NEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IG5ld090aGVyR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgdHlwZTogW3Bvc0RhdGEuZml4dHVyZU5hbWUgfHwgXCJQT1MgQ291bnRlclwiXSwgLy8gZGVmYXVsdCBzZWxlY3RlZCBsYWJlbFxyXG4gICAgICBjdXN0b21OYW1lOiBbXCJcIl0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAocG9zVHlwZSA9PSBcIndhbGxcIikge1xyXG4gICAgICBjb25zdCB3YWxsRGF0YSA9IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKTtcclxuICAgICAgaWYgKHdhbGxEYXRhKSB7XHJcbiAgICAgICAgY29uc3QgeDAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICAgICAgY29uc3QgeTAgPSB3YWxsRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLnk7XHJcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gd2FsbERhdGEuZGlzdGFuY2U7XHJcbiAgICAgICAgY29uc3QgYW5nbGVEZWcgPSB3YWxsRGF0YS5hbmdsZSB8fCAwO1xyXG4gICAgICAgIGNvbnN0IGFuZ2xlUmFkID0gKGFuZ2xlRGVnICogTWF0aC5QSSkgLyAxODA7XHJcblxyXG4gICAgICAgIGNvbnN0IGZ4ID0geDAgKyAobGVuZ3RoIC8gMikgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3QgZnkgPSB5MCArIChsZW5ndGggLyAyKSAqIE1hdGguc2luKGFuZ2xlUmFkKTtcclxuICAgICAgICBjb25zdCBvZmZzZXQgPSAyLjU7XHJcbiAgICAgICAgY29uc3QgZnhfb2Zmc2V0ID0gZnggKyBvZmZzZXQgKiAtTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG4gICAgICAgIGNvbnN0IGZ5X29mZnNldCA9IGZ5ICsgb2Zmc2V0ICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICB4ID0gdGhpcy50b1BpeGVscyhmeF9vZmZzZXQsIFwiZnRcIik7XHJcbiAgICAgICAgeSA9IHRoaXMudG9QaXhlbHMoZnlfb2Zmc2V0LCBcImZ0XCIpO1xyXG4gICAgICAgIGEgPSBhbmdsZURlZztcclxuICAgICAgfVxyXG5cclxuICAgICAgT2JqZWN0LmFzc2lnbihwb3NEYXRhLCB7XHJcbiAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI6IHdhbGxJbmRleCEgKyAxLFxyXG4gICAgICAgIGFzc29jaWF0ZWRFbGVtZW50VHlwZTogXCJ3YWxsXCIsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgKHRoaXMuZ2V0Rm9ybVdhbGxzLmF0KHdhbGxJbmRleCEpLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICAgIG5ld090aGVyR3JvdXBcclxuICAgICAgKTtcclxuICAgICAgd2FsbERhdGEub3RoZXJFbGVtZW50cy5wdXNoKHsgLi4ucG9zRGF0YSwgbmV3QWRkZWQ6IHRydWUgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHBvc1R5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yT3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgbmV3T3RoZXJHcm91cFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzLnB1c2goeyAuLi5wb3NEYXRhLCBuZXdBZGRlZDogdHJ1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWN0R3JvdXAgPSB0aGlzLmRyYXdPdGhlckVsZW1lbnRzV2l0aExhYmVsKFxyXG4gICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgeCxcclxuICAgICAgeSxcclxuICAgICAgYSxcclxuICAgICAgdyxcclxuICAgICAgaCxcclxuICAgICAgcG9zRGF0YVxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBtYWtlIGFjdGl2ZVxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KHJlY3RHcm91cCk7XHJcbiAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgIH0gY2F0Y2gge31cclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVRvT3RoZXJFbGVtZW50c0NoYW5nZXMoKTtcclxuICAgIHRoaXMudXBkYXRlT3RoZXJFbGVtZW50c0Nvb3JkaW5hdGVzKCk7XHJcbiAgfVxyXG5cclxuICBmaW5kRW1wdHlDZW50ZXJTcG90KG9iamVjdFdpZHRoUHg6IG51bWJlciwgb2JqZWN0SGVpZ2h0UHg6IG51bWJlcikge1xyXG4gICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIGlmICghb2JqZWN0cy5sZW5ndGgpIHJldHVybiBudWxsO1xyXG5cclxuICAgIC8vIDEuIEdldCBsYXlvdXQgYm91bmRzXHJcbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEZ1bGxMYXlvdXRCb3VuZHMoKTtcclxuICAgIGNvbnN0IGNlbnRlclggPSBib3VuZHMubGVmdCArIGJvdW5kcy53aWR0aCAvIDI7XHJcbiAgICBjb25zdCBjZW50ZXJZID0gYm91bmRzLnRvcCArIGJvdW5kcy5oZWlnaHQgLyAyO1xyXG5cclxuICAgIC8vIDIuIFNwaXJhbCBzZWFyY2ggcGFyYW1ldGVyc1xyXG4gICAgY29uc3Qgc3RlcCA9IDIwOyAvLyBncmlkIHN0ZXAgKHB4KVxyXG4gICAgY29uc3QgbWF4UmFkaXVzID0gTWF0aC5tYXgoYm91bmRzLndpZHRoLCBib3VuZHMuaGVpZ2h0KTtcclxuXHJcbiAgICAvLyBTcGlyYWwgb3V0d2FyZHNcclxuICAgIGZvciAobGV0IHJhZGl1cyA9IDA7IHJhZGl1cyA8IG1heFJhZGl1czsgcmFkaXVzICs9IHN0ZXApIHtcclxuICAgICAgZm9yIChsZXQgYW5nbGUgPSAwOyBhbmdsZSA8IDM2MDsgYW5nbGUgKz0gMzApIHtcclxuICAgICAgICBjb25zdCByYWQgPSAoYW5nbGUgKiBNYXRoLlBJKSAvIDE4MDtcclxuXHJcbiAgICAgICAgY29uc3QgeCA9IGNlbnRlclggKyByYWRpdXMgKiBNYXRoLmNvcyhyYWQpO1xyXG4gICAgICAgIGNvbnN0IHkgPSBjZW50ZXJZICsgcmFkaXVzICogTWF0aC5zaW4ocmFkKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGVzdFJlY3QgPSB7XHJcbiAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgdG9wOiB5LFxyXG4gICAgICAgICAgd2lkdGg6IG9iamVjdFdpZHRoUHgsXHJcbiAgICAgICAgICBoZWlnaHQ6IG9iamVjdEhlaWdodFB4LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGNvbGxpc2lvblxyXG4gICAgICAgIGNvbnN0IGludGVyc2VjdHMgPSBvYmplY3RzLnNvbWUoKG9iaikgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVjdCA9IG9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgICAgIHJldHVybiAhKFxyXG4gICAgICAgICAgICByZWN0LmxlZnQgPiB0ZXN0UmVjdC5sZWZ0ICsgdGVzdFJlY3Qud2lkdGggfHxcclxuICAgICAgICAgICAgcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCA8IHRlc3RSZWN0LmxlZnQgfHxcclxuICAgICAgICAgICAgcmVjdC50b3AgPiB0ZXN0UmVjdC50b3AgKyB0ZXN0UmVjdC5oZWlnaHQgfHxcclxuICAgICAgICAgICAgcmVjdC50b3AgKyByZWN0LmhlaWdodCA8IHRlc3RSZWN0LnRvcFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFpbnRlcnNlY3RzKSB7XHJcbiAgICAgICAgICByZXR1cm4geyB4LCB5IH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7IC8vIG5vIGVtcHR5IGFyZWEgZm91bmRcclxuICB9XHJcblxyXG4gIGxpc3RlblRvRGVsZXRlS2V5KCkge1xyXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgKGUpID0+IHtcclxuICAgICAgaWYgKGUua2V5ID09PSBcIkRlbGV0ZVwiICYmIHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkKSB7XHJcbiAgICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5jYW52YXM/LmdldEFjdGl2ZU9iamVjdCgpIGFzIGFueTtcclxuICAgICAgICBpZiAoYWN0aXZlICYmIChhY3RpdmUgYXMgYW55KS5vYmpUeXBlID09PSBcImVudHJhbmNlXCIpIHtcclxuICAgICAgICAgIHRoaXMuZGVsZXRlRW50cmFuY2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChhY3RpdmUgJiYgKGFjdGl2ZSBhcyBhbnkpLm9ialR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICBpZiAoYWN0aXZlPy5kYXRhPy5lbGVtZW50TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlV2FsbChhY3RpdmU/LmRhdGE/LmVsZW1lbnROdW1iZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVFbnRyYW5jZSgpIHtcclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuY2FudmFzLmdldEFjdGl2ZU9iamVjdCgpIGFzIGFueTtcclxuXHJcbiAgICBpZiAoYWN0aXZlICYmIGFjdGl2ZS5vYmpUeXBlID09PSBcImVudHJhbmNlXCIpIHtcclxuICAgICAgY29uc3QgaSA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZEluZGV4KFxyXG4gICAgICAgIChlbDogYW55KSA9PlxyXG4gICAgICAgICAgZWwuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIiAmJlxyXG4gICAgICAgICAgZWwuZWxlbWVudE51bWJlciA9PT0gYWN0aXZlLmRhdGEuZWxlbWVudE51bWJlclxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uc3BsaWNlKGksIDEpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlV2FsbChlbGVOdW1iZXI6IG51bWJlcikge1xyXG4gICAgY29uc3Qgd2FsbCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PlxyXG4gICAgICAgIGVsZS5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWxlLmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlclxyXG4gICAgKTtcclxuICAgIGlmICh3YWxsLmZpeHR1cmVzLmxlbmd0aCB8fCB3YWxsLm90aGVyRWxlbWVudHMubGVuZ3RoKVxyXG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmNvbmZpcm1EZWxldGVXYWxsKCkpKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgaSA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZEluZGV4KFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlclxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLnNwbGljZShpLCAxKTtcclxuICAgIHRoaXMudXBkYXRlV2FsbEVsZW1lbnROdW1iZXIoKTtcclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVdhbGxFbGVtZW50TnVtYmVyKCkge1xyXG4gICAgY29uc3Qgb25seVdhbGxzID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbj8uZmlsdGVyKFxyXG4gICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiXHJcbiAgICApO1xyXG5cclxuICAgIG9ubHlXYWxscz8uZm9yRWFjaCgoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIGl0ZW0uZWxlbWVudE51bWJlciA9IGluZGV4ICsgMTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNPdmVybGFwcGluZ1dpdGhUb2xlcmFuY2UoXHJcbiAgICBhOiBmYWJyaWMuT2JqZWN0LFxyXG4gICAgYjogZmFicmljLk9iamVjdCxcclxuICAgIHRvbGVyYW5jZTogbnVtYmVyID0gMFxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgYUJvdW5kcyA9IGEuZ2V0Qm91bmRpbmdSZWN0KCk7XHJcbiAgICBjb25zdCBiQm91bmRzID0gYi5nZXRCb3VuZGluZ1JlY3QoKTtcclxuXHJcbiAgICByZXR1cm4gIShcclxuICAgICAgKFxyXG4gICAgICAgIGFCb3VuZHMubGVmdCA+IGJCb3VuZHMubGVmdCArIGJCb3VuZHMud2lkdGggLSB0b2xlcmFuY2UgfHwgLy8gYSBpcyB0byB0aGUgcmlnaHQgb2YgYlxyXG4gICAgICAgIGFCb3VuZHMubGVmdCArIGFCb3VuZHMud2lkdGggLSB0b2xlcmFuY2UgPCBiQm91bmRzLmxlZnQgfHwgLy8gYSBpcyB0byB0aGUgbGVmdCBvZiBiXHJcbiAgICAgICAgYUJvdW5kcy50b3AgPiBiQm91bmRzLnRvcCArIGJCb3VuZHMuaGVpZ2h0IC0gdG9sZXJhbmNlIHx8IC8vIGEgaXMgYmVsb3cgYlxyXG4gICAgICAgIGFCb3VuZHMudG9wICsgYUJvdW5kcy5oZWlnaHQgLSB0b2xlcmFuY2UgPCBiQm91bmRzLnRvcFxyXG4gICAgICApIC8vIGEgaXMgYWJvdmUgYlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldEFzc29jaWF0ZWRFbGVtZW50SW5mbyhmaXh0dXJlSWQ6IHN0cmluZyk6IHtcclxuICAgIGFzc29jaWF0ZWRFbGVtZW50TnVtYmVyOiBudW1iZXI7XHJcbiAgICBhc3NvY2lhdGVkRWxlbWVudFR5cGU6IHN0cmluZztcclxuICAgIHdhbGxEaXJlY3Rpb246IHN0cmluZztcclxuICB9IHwgbnVsbCB7XHJcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbikge1xyXG4gICAgICBpZiAoZWxlbWVudC5maXh0dXJlcyAmJiBBcnJheS5pc0FycmF5KGVsZW1lbnQuZml4dHVyZXMpKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaXh0dXJlIG9mIGVsZW1lbnQuZml4dHVyZXMpIHtcclxuICAgICAgICAgIGlmIChmaXh0dXJlLl9pZCA9PT0gZml4dHVyZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI6IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnROdW1iZXIgPz8gbnVsbCxcclxuICAgICAgICAgICAgICBhc3NvY2lhdGVkRWxlbWVudFR5cGU6IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID8/IG51bGwsXHJcbiAgICAgICAgICAgICAgd2FsbERpcmVjdGlvbjogZWxlbWVudC5kaXJlY3Rpb24sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvUGl4ZWxzKHZhbHVlOiBudW1iZXIsIHVuaXQ6IHN0cmluZywgZHBpID0gMi44KSB7XHJcbiAgICBsZXQgcGl4ZWxzOiBudW1iZXI7XHJcblxyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICBwaXhlbHMgPSAodmFsdWUgLyAyNS40KSAqIGRwaTtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHBpeGVscyA9IHZhbHVlICogMTIgKiBkcGk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB1bml0LiBVc2UgJ21tJyBvciAnZnQnLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gTnVtYmVyKHBpeGVscy50b0ZpeGVkKDQpKTtcclxuICB9XHJcblxyXG4gIGZyb21QaXhlbHMocGl4ZWxzOiBudW1iZXIsIHVuaXQ6IHN0cmluZywgZHBpID0gMi44KTogbnVtYmVyIHtcclxuICAgIGxldCB2YWx1ZTogbnVtYmVyO1xyXG5cclxuICAgIC8vIHBpeGVscyA9IHBpeGVscyA+PSB0aGlzLndhbGxUaGlja25lc3MgPyBwaXhlbHMgLSB0aGlzLndhbGxUaGlja25lc3MgOiB0aGlzLndhbGxUaGlja25lc3M7XHJcblxyXG4gICAgaWYgKHVuaXQgPT09IFwibW1cIikge1xyXG4gICAgICB2YWx1ZSA9IChwaXhlbHMgLyBkcGkpICogMjUuNDtcclxuICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gXCJmdFwiKSB7XHJcbiAgICAgIHZhbHVlID0gcGl4ZWxzIC8gKDEyICogZHBpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHVuaXQuIFVzZSAnbW0nIG9yICdmdCcuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOdW1iZXIodmFsdWUudG9GaXhlZCg0KSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtRWRpdCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihMYXlvdXRFZGl0Q29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gYXdhaXQgbW9kZWxSZWYucmVzdWx0LnRoZW48Ym9vbGVhbj4oKHJlc3VsdCkgPT4gcmVzdWx0ID09PSBcIm9rXCIpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgY29uZmlybURlbGV0ZVdhbGwoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50LCB7XHJcbiAgICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBcIkRlbGV0ZSB3YWxsXCI7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID1cclxuICAgICAgICBcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB3YWxsIGFsb25nIHdpdGggaXRzIGFzc29jaWF0ZWQgZml4dHVyZXMgYW5kIGVsZW1lbnRzP1wiO1xyXG5cclxuICAgICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gXCJva1wiKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpeHR1cmVDb29yZGluYXRlcyhmaXh0dXJlcz86IGFueSkge1xyXG4gICAgY29uc3QgZml4dHVyZXNGcm9tQ2FudmFzID1cclxuICAgICAgZml4dHVyZXMgPz9cclxuICAgICAgdGhpcy5jYW52YXNcclxuICAgICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgICAgLmZpbHRlcigob2JqKSA9PiAob2JqIGFzIGFueSkuZml4dHVyZUlkKVxyXG4gICAgICAgIC5tYXAoKG9iaikgPT4gKHtcclxuICAgICAgICAgIGlkOiAob2JqIGFzIGFueSkuZml4dHVyZUlkLFxyXG4gICAgICAgICAgeDogb2JqLmxlZnQsXHJcbiAgICAgICAgICB5OiBvYmoudG9wLFxyXG4gICAgICAgICAgYW5nbGU6IG9iaj8uYW5nbGUgPz8gMCxcclxuICAgICAgICB9KSk7XHJcbiAgICBjb25zdCBwb3NNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBmaXh0dXJlIG9mIGZpeHR1cmVzRnJvbUNhbnZhcykge1xyXG4gICAgICBwb3NNYXAuc2V0KGZpeHR1cmUuaWQsIHtcclxuICAgICAgICB4OiB0aGlzLmZyb21QaXhlbHMoZml4dHVyZS54LCBcImZ0XCIpLFxyXG4gICAgICAgIHk6IHRoaXMuZnJvbVBpeGVscyhmaXh0dXJlLnksIFwiZnRcIiksXHJcbiAgICAgICAgYW5nbGU6IGZpeHR1cmUuYW5nbGUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUuZm9yRWFjaCgoY2Y6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBsYXRlc3RGaXh0dXJlUG9zID0gcG9zTWFwLmdldChjZi5faWQpO1xyXG4gICAgICBpZiAobGF0ZXN0Rml4dHVyZVBvcykge1xyXG4gICAgICAgIGNmLnJlbGF0aXZlUG9zaXRpb24ueCA9IGxhdGVzdEZpeHR1cmVQb3MueDtcclxuICAgICAgICBjZi5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBsYXRlc3RGaXh0dXJlUG9zLnk7XHJcbiAgICAgICAgY2YucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9IGxhdGVzdEZpeHR1cmVQb3MuYW5nbGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgodzogYW55KSA9PiB7XHJcbiAgICAgIHc/LmZpeHR1cmVzPy5mb3JFYWNoKCh3ZjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgbGF0ZXN0Rml4dHVyZVBvcyA9IHBvc01hcC5nZXQod2YuX2lkKTtcclxuICAgICAgICBpZiAobGF0ZXN0Rml4dHVyZVBvcykge1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi54ID0gbGF0ZXN0Rml4dHVyZVBvcy54O1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi55ID0gbGF0ZXN0Rml4dHVyZVBvcy55O1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9IGxhdGVzdEZpeHR1cmVQb3MuYW5nbGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlT3RoZXJFbGVtZW50c0Nvb3JkaW5hdGVzKCkge1xyXG4gICAgY29uc3Qgb3RoZXJzRnJvbUNhbnZhcyA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcigob2JqKSA9PiAob2JqIGFzIGFueSkub2JqVHlwZSA9PT0gXCJvdGhlcnNcIilcclxuICAgICAgLm1hcCgob2JqKSA9PiAoe1xyXG4gICAgICAgIGlkOiAob2JqIGFzIGFueSkuZGF0YT8uX2lkLFxyXG4gICAgICAgIGxhYmVsOiAob2JqIGFzIGFueSkuZGF0YT8uZml4dHVyZU5hbWUsXHJcbiAgICAgICAgeDogb2JqLmxlZnQsXHJcbiAgICAgICAgeTogb2JqLnRvcCxcclxuICAgICAgICBhbmdsZTogb2JqPy5hbmdsZSA/PyAwLFxyXG4gICAgICAgIHdpZHRoOiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZFdpZHRoKCkgLSAyLCBcImZ0XCIpLFxyXG4gICAgICAgIGhlaWdodDogdGhpcy5mcm9tUGl4ZWxzKG9iai5nZXRTY2FsZWRIZWlnaHQoKSAtIDIsIFwiZnRcIiksXHJcbiAgICAgIH0pKTtcclxuXHJcbiAgICBjb25zdCBwb3NNYXAgPSBuZXcgTWFwPFxyXG4gICAgICBzdHJpbmcsXHJcbiAgICAgIHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGFuZ2xlOiBudW1iZXI7IGg6IG51bWJlcjsgdzogbnVtYmVyIH1cclxuICAgID4oKTtcclxuICAgIGZvciAoY29uc3Qgb3RoZXIgb2Ygb3RoZXJzRnJvbUNhbnZhcykge1xyXG4gICAgICBpZiAob3RoZXIuaWQpIHtcclxuICAgICAgICBwb3NNYXAuc2V0KG90aGVyLmlkLCB7XHJcbiAgICAgICAgICB4OiB0aGlzLmZyb21QaXhlbHMob3RoZXIueCwgXCJmdFwiKSxcclxuICAgICAgICAgIHk6IHRoaXMuZnJvbVBpeGVscyhvdGhlci55LCBcImZ0XCIpLFxyXG4gICAgICAgICAgYW5nbGU6IG90aGVyLmFuZ2xlLFxyXG4gICAgICAgICAgaDogb3RoZXIuaGVpZ2h0LFxyXG4gICAgICAgICAgdzogb3RoZXIud2lkdGgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzKSkge1xyXG4gICAgICB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzLmZvckVhY2goKGVsOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBsYXRlc3RPdGhlcnNQb3MgPSBwb3NNYXAuZ2V0KGVsLl9pZCk7XHJcbiAgICAgICAgaWYgKGxhdGVzdE90aGVyc1Bvcykge1xyXG4gICAgICAgICAgZWwucmVsYXRpdmVQb3NpdGlvbi54ID0gbGF0ZXN0T3RoZXJzUG9zLng7XHJcbiAgICAgICAgICBlbC5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBsYXRlc3RPdGhlcnNQb3MueTtcclxuICAgICAgICAgIGVsLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBsYXRlc3RPdGhlcnNQb3MuYW5nbGU7XHJcbiAgICAgICAgICBlbC5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlID0gbGF0ZXN0T3RoZXJzUG9zLmg7XHJcbiAgICAgICAgICBlbC5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgPSBsYXRlc3RPdGhlcnNQb3MudztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgodzogYW55KSA9PiB7XHJcbiAgICAgIHc/Lm90aGVyRWxlbWVudHM/LmZvckVhY2goKHdmOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBsYXRlc3RPdGhlcnNQb3MgPSBwb3NNYXAuZ2V0KHdmLl9pZCk7XHJcbiAgICAgICAgaWYgKGxhdGVzdE90aGVyc1Bvcykge1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi54ID0gbGF0ZXN0T3RoZXJzUG9zLng7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBsYXRlc3RPdGhlcnNQb3MueTtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24uYW5nbGUgPSBsYXRlc3RPdGhlcnNQb3MuYW5nbGU7XHJcbiAgICAgICAgICB3Zi5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlID0gbGF0ZXN0T3RoZXJzUG9zLmg7XHJcbiAgICAgICAgICB3Zi5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgPSBsYXRlc3RPdGhlcnNQb3MudztcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVXYWxsQ29vcmRpbmF0ZXMoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5vYmpUeXBlID09PSBcIndhbGxcIilcclxuICAgICAgLm1hcCgob2JqKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHRvcDogdGhpcy5mcm9tUGl4ZWxzKG9iai50b3AsIFwiZnRcIiksXHJcbiAgICAgICAgICBsZWZ0OiB0aGlzLmZyb21QaXhlbHMob2JqLmxlZnQsIFwiZnRcIiksXHJcbiAgICAgICAgICB3aWR0aDogdGhpcy5mcm9tUGl4ZWxzKG9iai5nZXRTY2FsZWRXaWR0aCgpIC0gMC4yNywgXCJmdFwiKSxcclxuICAgICAgICAgIGhlaWdodDogdGhpcy5mcm9tUGl4ZWxzKG9iai5nZXRTY2FsZWRIZWlnaHQoKSAtIDAuMjcsIFwiZnRcIiksXHJcbiAgICAgICAgICBhbmdsZTogb2JqLmFuZ2xlLFxyXG4gICAgICAgICAgZWxlbWVudERhdGE6IChvYmogYXMgYW55KS5kYXRhLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHBvc01hcCA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHdhbGwgb2YgZGF0YSkge1xyXG4gICAgICBwb3NNYXAuc2V0KFxyXG4gICAgICAgIGAke3dhbGwuZWxlbWVudERhdGEuZWxlbWVudFR5cGV9JHt3YWxsLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXJ9YCxcclxuICAgICAgICBkYXRhLmZpbmQoXHJcbiAgICAgICAgICAob2JqKSA9PlxyXG4gICAgICAgICAgICBvYmouZWxlbWVudERhdGEuZWxlbWVudFR5cGUgPT09IHdhbGwuZWxlbWVudERhdGEuZWxlbWVudFR5cGUgJiZcclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXIgPT09IHdhbGwuZWxlbWVudERhdGEuZWxlbWVudE51bWJlclxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCB3YWxsUG9zID0gcG9zTWFwLmdldChgJHt3LmVsZW1lbnRUeXBlfSR7dy5lbGVtZW50TnVtYmVyfWApO1xyXG4gICAgICBpZiAod2FsbFBvcykge1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi54ID0gd2FsbFBvcy5sZWZ0O1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi55ID0gd2FsbFBvcy50b3A7XHJcbiAgICAgICAgdy5hbmdsZSA9IHdhbGxQb3MuYW5nbGU7XHJcbiAgICAgICAgdy5kaXN0YW5jZSA9IHdhbGxQb3Mud2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRW50cmFuY2VDb29yZGluYXRlcygpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLm9ialR5cGUgPT09IFwiZW50cmFuY2VcIilcclxuICAgICAgLm1hcCgob2JqKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHRvcDogdGhpcy5mcm9tUGl4ZWxzKG9iai50b3AsIFwiZnRcIiksXHJcbiAgICAgICAgICBsZWZ0OiB0aGlzLmZyb21QaXhlbHMob2JqLmxlZnQsIFwiZnRcIiksXHJcbiAgICAgICAgICB3aWR0aDogdGhpcy5mcm9tUGl4ZWxzKG9iai5nZXRTY2FsZWRXaWR0aCgpLCBcImZ0XCIpLFxyXG4gICAgICAgICAgYW5nbGU6IG9iai5hbmdsZSxcclxuICAgICAgICAgIGVsZW1lbnREYXRhOiAob2JqIGFzIGFueSkuZGF0YSxcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCBwb3NNYXAgPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgZm9yIChjb25zdCBlbnRyYW5jZSBvZiBkYXRhKSB7XHJcbiAgICAgIHBvc01hcC5zZXQoXHJcbiAgICAgICAgYCR7ZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudFR5cGV9JHtlbnRyYW5jZS5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyfWAsXHJcbiAgICAgICAgZGF0YS5maW5kKFxyXG4gICAgICAgICAgKG9iaikgPT5cclxuICAgICAgICAgICAgb2JqLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlID09PSBlbnRyYW5jZS5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSAmJlxyXG4gICAgICAgICAgICBvYmouZWxlbWVudERhdGEuZWxlbWVudE51bWJlciA9PT0gZW50cmFuY2UuZWxlbWVudERhdGEuZWxlbWVudE51bWJlclxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKHc6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBlbnRyYW5jZVBvcyA9IHBvc01hcC5nZXQoYCR7dy5lbGVtZW50VHlwZX0ke3cuZWxlbWVudE51bWJlcn1gKTtcclxuICAgICAgaWYgKGVudHJhbmNlUG9zKSB7XHJcbiAgICAgICAgdy5yZWxhdGl2ZVBvc2l0aW9uLnggPSBlbnRyYW5jZVBvcy5sZWZ0O1xyXG4gICAgICAgIHcucmVsYXRpdmVQb3NpdGlvbi55ID0gZW50cmFuY2VQb3MudG9wO1xyXG4gICAgICAgIHcuYW5nbGUgPSBlbnRyYW5jZVBvcy5hbmdsZTtcclxuICAgICAgICB3LmRpc3RhbmNlID0gZW50cmFuY2VQb3Mud2lkdGg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlTGF5b3V0KGVkaXRNb2RlOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmIChlZGl0TW9kZSkge1xyXG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmNvbmZpcm1FZGl0KCkpKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSB0aGlzLnRhc2tJbmZvLmRpc2FibGVkO1xyXG4gICAgICAgIHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMudGFza1N0eWxlLmZpeHR1cmUuY2xhc3MgPT0gXCJyZXZpZXdQZW5kaW5nXCIpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkUHVibGlzaCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmVcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgZWxlbWVudC5maXh0dXJlcyA9IGVsZW1lbnQuZml4dHVyZXMuZmlsdGVyKFxyXG4gICAgICAgIChmaXh0dXJlOiBhbnkpID0+ICFmaXh0dXJlPy5naG9zdCAmJiBmaXh0dXJlLmZpeHR1cmVOYW1lICE9PSBcInNwYWNlXCJcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVcclxuICAgICAgLmZpbHRlcigoZml4dHVyZTogYW55KSA9PiAhZml4dHVyZT8uZ2hvc3QpXHJcbiAgICAgIC5tYXAoKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgYXNzb2NpYXRlZEVsZW1lbnRUeXBlLCBhc3NvY2lhdGVkRWxlbWVudE51bWJlciwgLi4ucmVzdCB9ID1cclxuICAgICAgICAgIGZpeHR1cmU7XHJcbiAgICAgICAgcmV0dXJuIHJlc3Q7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy5yZW9yZGVyRml4dHVyZSh0aGlzLmZsb29yRGF0YSk7XHJcblxyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICBkYXRhOiB0aGlzLmZsb29yRGF0YSxcclxuICAgICAgZWRpdE1vZGU6IGVkaXRNb2RlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlU3RvcmVQbGFubyhwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgICAgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byB1cGRhdGUgbGF5b3V0XCIpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3NpZ25UYXNrKCkge1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICByZWRvOiBmYWxzZSxcclxuICAgICAgY2hlY2tMaXN0TmFtZTogXCJcIixcclxuICAgICAgc3RvcmU6IHRoaXMucGxhbm9EYXRhLnN0b3JlTmFtZSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMucGxhbm9EYXRhLmNsaWVudElkLFxyXG4gICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dFwiKSB7XHJcbiAgICAgIC8vIHRoaXMudXBkYXRlTGF5b3V0KClcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJMYXlvdXQgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXQtcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiTGF5b3V0IFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgICBwYXlsb2FkLnRhc2tJZCA9XHJcbiAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLmxheW91dERhdGFbXHJcbiAgICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2subGF5b3V0RGF0YS5sZW5ndGggLSAxXHJcbiAgICAgICAgXS50YXNrSWQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmVcIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkZpeHR1cmUgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlLXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkZpeHR1cmUgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICAgIHBheWxvYWQudGFza0lkID1cclxuICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2suZml4dHVyZURhdGFbXHJcbiAgICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2suZml4dHVyZURhdGEubGVuZ3RoIC0gMVxyXG4gICAgICAgIF0udGFza0lkO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bVwiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiVk0gVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bS1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJWTSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgICAgcGF5bG9hZC50YXNrSWQgPVxyXG4gICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjay5WbURhdGFbdGhpcy5zdG9yZUZlZWRiYWNrLlZtRGF0YS5sZW5ndGggLSAxXS50YXNrSWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUHVibGlzaHRhc2tQb3B1cENvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgd2luZG93Q2xhc3M6IFwiY3VzdG9tLWhlaWdodC1tb2RhbFwiLCAvLyA8LS0gQWRkIGEgY3VzdG9tIGNsYXNzIGhlcmVcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHlwZSA9IHRoaXMucHVibGlzaGluZ1N0YXRlO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW5wdXREYXRhID0gcGF5bG9hZDtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwic3VibWl0XCIpIHtcclxuICAgICAgICBsZXQgdGFza1R5cGUgPSB0aGlzLnB1Ymxpc2hpbmdTdGF0ZTtcclxuICAgICAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm0tcmVkb1wiKSB7XHJcbiAgICAgICAgICB0YXNrVHlwZSA9IFwidm1cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmUtcmVkb1wiKSB7XHJcbiAgICAgICAgICB0YXNrVHlwZSA9IFwiZml4dHVyZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0LXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcImxheW91dFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LmNvbW1lbnRzICYmIHJlc3VsdC5jb21tZW50cyAhPSBcIlwiKSB7XHJcbiAgICAgICAgICBsZXQgY29tbWVudFBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgICAgICAgICAgdGFza1R5cGU6IHRhc2tUeXBlLFxyXG4gICAgICAgICAgICBjb21tZW50OiByZXN1bHQuY29tbWVudHMsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZUdsb2JhbENvbW1lbnQoY29tbWVudFBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge30sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLmNyZWF0ZVRhc2socGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50YXNrRGV0YWlscyh0aGlzLmZsb29yRGF0YS5wbGFub0lkLCB0aGlzLmZsb29yRGF0YS5faWQpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U3RvcmVGZWVkYmFjayhcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgICB7fVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcz8uZGF0YT8ubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIHB1Ymxpc2ggdGFza1wiKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0VkaXQoKSB7XHJcbiAgICBpZiAodGhpcy50YXNrU3R5bGUuZml4dHVyZS5uYW1lICE9PSBcIkFwcHJvdmVkXCIpIHtcclxuICAgICAgdGhpcy50b2dnbGVQYW5lbChcInJpZ2h0XCIsIHRydWUpO1xyXG4gICAgICB0aGlzLnRvZ2dsZVBhbmVsKFwibGVmdFwiLCBmYWxzZSk7XHJcblxyXG4gICAgICB0aGlzLmRpc2FibGVkUHVibGlzaCA9IHRydWU7XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICB0aGlzLmxheW91dEZvcm0uZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgdGhpcy5yZW5kZXJGbG9vcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChcclxuICAgICAgICBgbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2Utcm9sbG91dD9wbGFub0lkPSR7dGhpcy5mbG9vckRhdGEucGxhbm9JZH0mZmxvb3JJZD0ke3RoaXMuZmxvb3JEYXRhLl9pZH1gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0YXNrRGV0YWlscyhwbGFub0lkOiBhbnksIGZsb29ySWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy50YXNrSW5mbyA9IHt9O1xyXG4gICAgICB0aGlzLnRhc2tTdHlsZSA9IHtcclxuICAgICAgICBsYXlvdXQ6IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICAgICAgICBmaXh0dXJlOiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICAgICAgdm06IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFRhc2tJbmZvKHsgcGxhbm9JZCwgZmxvb3JJZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZFB1Ymxpc2ggPSByZXM/LmRhdGE/LmRpc2FibGVkIHx8IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnRhc2tJbmZvID0gcmVzPy5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZWxlLnR5cGUgPT0gXCJsYXlvdXRcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrU3R5bGUubGF5b3V0ID0gdGhpcy5nZXRTdGF0dXMoXCJsYXlvdXRcIik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChlbGUudHlwZSA9PSBcImZpeHR1cmVcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50YXNrU3R5bGUuZml4dHVyZSA9IHRoaXMuZ2V0U3RhdHVzKFwiZml4dHVyZVwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGVsZS50eXBlID09IFwiZml4dHVyZVwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tTdHlsZS52bSA9IHRoaXMudGFza1N0eWxlLmZpeHR1cmU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQdWJsaXNoaW5nU3RhdGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBnZXQgdGFzayBkZXRhaWxzXCIpO1xyXG4gICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldFN0YXR1cyh0eXBlOiBhbnkpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHM/LmZpbmQoKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSB0eXBlKTtcclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBkYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmXHJcbiAgICAgICAgKGRhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJjb21wbGV0ZVwiIHx8ICFkYXRhPy5mZWVkYmFja1N0YXR1cylcclxuICAgICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJBcHByb3ZlZFwiLCBjbGFzczogXCJjb21wbGV0ZWRcIiB9O1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiYgZGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcInBlbmRpbmdcIikge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6IFwiUmV2aWV3IFBlbmRpbmdcIiwgY2xhc3M6IFwicmV2aWV3UGVuZGluZ1wiIH07XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJiBkYXRhLmZlZWRiYWNrU3RhdHVzID09IFwiZGlzYWdyZWVcIikge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6IFwiWWV0IHRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGRhdGEucmVkb1N0YXR1cyAmJiAhZGF0YS5icmVhY2gpIHtcclxuICAgICAgICAgIHJldHVybiB7IG5hbWU6IFwiUmVkb1wiLCBjbGFzczogXCJ0YXNrQXNzaWduZWRcIiB9O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS5icmVhY2gpIHtcclxuICAgICAgICAgIHJldHVybiB7IG5hbWU6IFwiRmxhZ2dlZFwiLCBjbGFzczogXCJmbGFnZ2VkXCIgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJUYXNrIEFzc2lnbmVkXCIsIGNsYXNzOiBcInRhc2tBc3NpZ25lZFwiIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IG5hbWU6IFwiWWV0IHRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH07XHJcbiAgfVxyXG5cclxuICBnZXRFbGVtZW50TnVtYmVyKGdyb3VwOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcclxuICAgIHJldHVybiBncm91cC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZSA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0Rml4dHVyZShncm91cDogYW55LCBibGluazogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQpIHJldHVybjtcclxuICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgY2VudGVyID0gZ3JvdXAuZ2V0Q2VudGVyUG9pbnQoKTtcclxuXHJcbiAgICBjb25zdCByZWFsV2lkdGggPSBncm91cC53aWR0aCEgKiBncm91cC5zY2FsZVghO1xyXG4gICAgY29uc3QgcmVhbEhlaWdodCA9IGdyb3VwLmhlaWdodCEgKiBncm91cC5zY2FsZVkhO1xyXG5cclxuICAgIGNvbnN0IHJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBjZW50ZXIueCxcclxuICAgICAgdG9wOiBjZW50ZXIueSxcclxuICAgICAgd2lkdGg6IHJlYWxXaWR0aCArIDgsIC8vIGNvbnNpc3RlbnQgcGFkZGluZ1xyXG4gICAgICBoZWlnaHQ6IHJlYWxIZWlnaHQgKyA4LFxyXG4gICAgICByeDogNSxcclxuICAgICAgcnk6IDUsXHJcbiAgICAgIHN0cm9rZTogXCIjMDBhYWZmXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAzLFxyXG4gICAgICBmaWxsOiBcInRyYW5zcGFyZW50XCIsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgYW5nbGU6IGdyb3VwLmFuZ2xlIHx8IDAsXHJcbiAgICAgIG9wYWNpdHk6IGJsaW5rID8gMCA6IDEsXHJcbiAgICB9KTtcclxuXHJcbiAgICAocmVjdCBhcyBhbnkpLmRhdGEgPSB7IHR5cGU6IFwiZml4dHVyZS1oaWdobGlnaHRcIiB9O1xyXG5cclxuICAgIHRoaXMuY2FudmFzLmFkZChyZWN0KTtcclxuICAgIHRoaXMuY2FudmFzLm1vdmVPYmplY3RUbyhyZWN0LCB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCkubGVuZ3RoIC0gMSk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcblxyXG4gICAgdGhpcy5hY3RpdmVIaWdobGlnaHQgPSByZWN0O1xyXG5cclxuICAgIC8vIC0tLSBObyBibGlua2luZyBuZWVkZWQgLS0tXHJcbiAgICBpZiAoIWJsaW5rKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGN5Y2xlcyA9IDA7XHJcblxyXG4gICAgY29uc3QgYmxpbmtPbmNlID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZWN0LmFuaW1hdGUoXHJcbiAgICAgICAgeyBvcGFjaXR5OiAxIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZHVyYXRpb246IDIwMCxcclxuICAgICAgICAgIG9uQ2hhbmdlOiAoKSA9PiB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCksXHJcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlY3QuYW5pbWF0ZShcclxuICAgICAgICAgICAgICB7IG9wYWNpdHk6IDAgfSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6ICgpID0+IHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKSxcclxuICAgICAgICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgY3ljbGVzKys7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjeWNsZXMgPCAyMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJsaW5rT25jZSgpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXQoeyBvcGFjaXR5OiAxIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgYmxpbmtPbmNlKCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVIaWdobGlnaHQoKSB7XHJcbiAgICB0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcz8uZ2V0T2JqZWN0cygpPy5mb3JFYWNoKChvYmopID0+IHtcclxuICAgICAgaWYgKChvYmogYXMgYW55KS5kYXRhPy50eXBlID09PSBcImZpeHR1cmUtaGlnaGxpZ2h0XCIpIHtcclxuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmUob2JqKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hY3RpdmVIaWdobGlnaHQgPSBudWxsO1xyXG4gICAgdGhpcy5jYW52YXM/LnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICB9XHJcblxyXG4gIGtlZXBIaWdobGlnaHRPblRvcCA9ICgpID0+IHtcclxuICAgIGlmICghdGhpcy5hY3RpdmVIaWdobGlnaHQpIHJldHVybjtcclxuICAgIGNvbnN0IG9ianMgPSB0aGlzLmNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICB0aGlzLmNhbnZhcy5tb3ZlT2JqZWN0VG8odGhpcy5hY3RpdmVIaWdobGlnaHQsIG9ianMubGVuZ3RoIC0gMSk7XHJcbiAgfTtcclxuXHJcbiAgb25DaGFuZ2VGaXh0dXJlT25GZWVkYmFja1BhbmVsKFxyXG4gICAge1xyXG4gICAgICBjdXJyZW50Rml4dHVyZSxcclxuICAgICAgYWN0aW9uLFxyXG4gICAgfToge1xyXG4gICAgICBjdXJyZW50Rml4dHVyZT86IHN0cmluZztcclxuICAgICAgYWN0aW9uPzogXCJuZXh0XCIgfCBcInByZXZpb3VzXCI7XHJcbiAgICB9LFxyXG4gICAgY29sbGFwc2VUYXNrSW5mbzogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICBsZXQgaW5kZXhUb1NlbGVjdCA9IGN1cnJlbnRGaXh0dXJlXHJcbiAgICAgID8gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmZpbmRJbmRleCgoZjogYW55KSA9PiBmLl9pZCA9PT0gY3VycmVudEZpeHR1cmUpXHJcbiAgICAgIDogMDtcclxuXHJcbiAgICBpZiAoYWN0aW9uID09PSBcIm5leHRcIikge1xyXG4gICAgICBpZiAoaW5kZXhUb1NlbGVjdCA9PSB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGluZGV4VG9TZWxlY3QgPSAwO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGluZGV4VG9TZWxlY3QrKztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChhY3Rpb24gPT09IFwicHJldmlvdXNcIikge1xyXG4gICAgICBpZiAoaW5kZXhUb1NlbGVjdCA9PSAwKSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdCA9IHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5sZW5ndGggLSAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGluZGV4VG9TZWxlY3QtLTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICghY3VycmVudEZpeHR1cmUgJiYgIWFjdGlvbikge1xyXG4gICAgICBpbmRleFRvU2VsZWN0ID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaXh0dXJlSWRUb1NlbGVjdCA9IHRoaXMuYWxsRml4dHVyZUluc3RhbmNlc1tpbmRleFRvU2VsZWN0XT8uX2lkO1xyXG5cclxuICAgIGNvbnN0IGFjdGlvbkZpeHR1cmUgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maW5kKFxyXG4gICAgICAgIChvYmo6IGFueSkgPT5cclxuICAgICAgICAgIG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJiBvYmouZml4dHVyZUlkID09PSBmaXh0dXJlSWRUb1NlbGVjdFxyXG4gICAgICApIGFzIGZhYnJpYy5Hcm91cCB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAoIWFjdGlvbkZpeHR1cmUpIHJldHVybjtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCAzMDApO1xyXG5cclxuICAgIHRoaXMuaGlnaGxpZ2h0Rml4dHVyZShhY3Rpb25GaXh0dXJlKTtcclxuICAgIHRoaXMuc2VsZWN0Rml4dHVyZU9uQ2FudmFzQ2xpY2soYWN0aW9uRml4dHVyZSwgY29sbGFwc2VUYXNrSW5mbyk7XHJcbiAgfVxyXG5cclxuICByZXZva2VUYXNrKCkge1xyXG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICByZWRvOiBmYWxzZSxcclxuICAgICAgY2hlY2tMaXN0TmFtZTogXCJcIixcclxuICAgICAgc3RvcmU6IHRoaXMucGxhbm9EYXRhLnN0b3JlTmFtZSxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMucGxhbm9EYXRhLmNsaWVudElkLFxyXG4gICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgIHBsYW5vSWQ6IHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXRcIikge1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcImxheW91dFwiO1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZUxheW91dCgpXHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiTGF5b3V0IFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0LXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkxheW91dCBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJsYXlvdXRcIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZVwiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiRml4dHVyZSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlLXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkZpeHR1cmUgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwiZml4dHVyZVwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bVwiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiVk0gVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwidm1cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtLXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIlZNIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcInZtXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBwYXlsb2FkLnRhc2tJZCA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzLmZpbmQoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLnR5cGUgPT0gcGF5bG9hZC50eXBlXHJcbiAgICApPy50YXNrSWQ7XHJcblxyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFN0b3JlVGFza1Jldm9rZUNvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgd2luZG93Q2xhc3M6IFwiY3VzdG9tLWhlaWdodC1tb2RhbFwiLCAvLyA8LS0gQWRkIGEgY3VzdG9tIGNsYXNzIGhlcmVcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHlwZSA9IHRoaXMucHVibGlzaGluZ1N0YXRlO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuaW5wdXREYXRhID0gcGF5bG9hZDtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwic3VibWl0XCIpIHtcclxuICAgICAgICBsZXQgdGFza1R5cGUgPSB0aGlzLnB1Ymxpc2hpbmdTdGF0ZTtcclxuICAgICAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm0tcmVkb1wiKSB7XHJcbiAgICAgICAgICB0YXNrVHlwZSA9IFwidm1cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmUtcmVkb1wiKSB7XHJcbiAgICAgICAgICB0YXNrVHlwZSA9IFwiZml4dHVyZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0LXJlZG9cIikge1xyXG4gICAgICAgICAgdGFza1R5cGUgPSBcImxheW91dFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVzdWx0LmNvbW1lbnRzICYmIHJlc3VsdC5jb21tZW50cyAhPSBcIlwiKSB7XHJcbiAgICAgICAgICBsZXQgY29tbWVudFBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgICAgICAgICAgdGFza1R5cGU6IHRhc2tUeXBlLFxyXG4gICAgICAgICAgICBjb21tZW50OiByZXN1bHQuY29tbWVudHMsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZUdsb2JhbENvbW1lbnQoY29tbWVudFBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge30sXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnJldm9rZVRhc2socGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50YXNrRGV0YWlscyh0aGlzLmZsb29yRGF0YS5wbGFub0lkLCB0aGlzLmZsb29yRGF0YS5faWQpO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChyZXM/Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIkZhaWxlZCB0byBwdWJsaXNoIHRhc2tcIik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1Ymxpc2goKSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQ29tcGxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICAgIHNpemU6IFwibWRcIixcclxuICAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgICAgYmFja2Ryb3A6IFwic3RhdGljXCIsXHJcbiAgICAgIHdpbmRvd0NsYXNzOiBcImN1c3RvbS1oZWlnaHQtbW9kYWxcIixcclxuICAgIH0pO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBcIlB1Ymxpc2ggcGxhbm9ncmFtXCI7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9IFwiWW91IGFyZSBhYm91dCB0byBwdWJsaXNoIHRoZSBwbGFub2dyYW0gdG8gdGhlIHN0b3JlLiBUaGlzIHdpbGwgYmUgdGhlIGxhdGVzdCBhbmQgbW9zdCB1cC10by1kYXRlIHBsYW5vZ3JhbSBmb3IgdGhlIHN0b3JlLlwiO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHlwZSA9IFwicHVibGlzaFwiO1xyXG5cclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXMpID0+IHtcclxuICAgICAgaWYocmVzID09ICdvaycpIHtcclxuICAgICAgICBsZXQgZGF0YSA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnBsYW5vRGF0YSk7XHJcbiAgICAgICAgZGF0YS5mbG9vcklkID0gdGhpcy5mbG9vckRhdGEuX2lkO1xyXG4gICAgICAgIGRhdGEuZmxvb3JEYXRhID0gdGhpcy5mbG9vckRhdGE7XHJcbiAgICAgICAgZGVsZXRlIGRhdGEuZmxvb3JzO1xyXG4gICAgICAgIGRlbGV0ZSBkYXRhLmZsb29yRGF0YS5tYXN0ZXJUZW1wbGF0ZXM7XHJcbiAgICAgICAgbGV0IHBheWxvYWQgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5wdWJsaXNoKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS52ZXJpZmljYXRpb25TdGF0dXMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdChyZXM/Lm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIHB1Ymxpc2ggcGxhbm9cIik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBcclxuICBhc3luYyBnb1RvU3RvcmVUb3VyUGFnZSgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldFBsYW5vU3RvcmVWaWRlb1BhcmFtcyh7XHJcbiAgICAgICAgICBzdG9yZUlkOiB0aGlzLnBsYW5vRGF0YS5zdG9yZUlkLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAocmVzPy5kYXRhKSB7XHJcbiAgICAgICAgbGV0IHBhcmFtcyA9IHJlcz8uZGF0YTtcclxuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbXCIvbWFuYWdlL3RyYXgvZ2FsbGVyeVwiXSwge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHBhcmFtcyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodXJsVHJlZSk7XHJcbiAgICAgICAgd2luZG93Lm9wZW4odXJsLCBcIl9ibGFua1wiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9wZW5Ob1ZpZGVvRm91bmRNb2RhbCgpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgdGhpcy5vcGVuTm9WaWRlb0ZvdW5kTW9kYWwoKTtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGdvVG9TdG9yZVRvdXJQYWdlIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvcGVuTm9WaWRlb0ZvdW5kTW9kYWwoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHRoaXMubm9TdG9yZVZpZGVvTW9kYWxSZWYsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSkucmVzdWx0O1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHt9XHJcbiAgfVxyXG5cclxuICBnb1RvU3RvcmVDYW1lcmFQYWdlKCkge1xyXG4gICAgY29uc3QgdXJsVHJlZSA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoW1wiL21hbmFnZS9zdG9yZXMvY2FtZXJhc1wiXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgIHN0b3JlSWQ6IHRoaXMucGxhbm9EYXRhLnN0b3JlSWQsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwodXJsVHJlZSk7XHJcbiAgICB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmVMaXN0KHBsYW5vSWQ/OnN0cmluZykge1xyXG4gICAgdGhpcy5hcGlTZXJ2aWNlLmdldFBsYW5vU3RvcmVMaXN0KHRoaXMuY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihyZXM6YW55KSA9PntcclxuICAgICAgICBpZihyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSB0aGlzLnN0b3JlTGlzdC5tYXAoKGVsZTphbnkpID0+IHtyZXR1cm4gey4uLmVsZSxzdG9yZU5hbWU6ZWxlLnN0b3JlTmFtZS50b1VwcGVyQ2FzZSgpfX0pO1xyXG4gICAgICAgICAgaWYocGxhbm9JZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RvcmVOYW1lID0gdGhpcy5zdG9yZUxpc3QuZmluZCgoZWxlOmFueSkgPT4gZWxlLnBsYW5vSWQudG9TdHJpbmcoKSA9PSBwbGFub0lkLnRvU3RyaW5nKCkpIFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uU2VsZWN0ZWQoZXZlbnQ6YW55KSB7XHJcbiAgICB0aGlzLnBsYW5vRGF0YSA9IG51bGw7XHJcbiAgICB0aGlzLmZsb29yRGF0YSA9IG51bGw7XHJcbiAgICBjb25zdCBuZXdQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xyXG4gICAgbmV3UGFyYW1zLnNldChcInBsYW5vSWRcIiwgZXZlbnQucGxhbm9JZCk7XHJcbiAgICBuZXdQYXJhbXMuc2V0KFwiZmxvb3JJZFwiLCBldmVudC5mbG9vcklkKTtcclxuXHJcbiAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShcclxuICAgICAgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLFxyXG4gICAgICBuZXdQYXJhbXMudG9TdHJpbmcoKVxyXG4gICAgKTtcclxuICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgYXdhaXQgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKGV2ZW50Ll9pZCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gaWQ9XCJtYW5hZ2UtcGxhbm9cIj5cclxuICA8IS0tIExvYWRpbmcgU3RhdGUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImlzUGFnZUxvYWRpbmdcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtLTBcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclNrZWxldG9uXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2tlbGV0b25Mb2FkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza2VsZXRvbkxvYWRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNrZWxldG9uTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBDb250ZW50IC0tPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogaXNQYWdlTG9hZGluZyB9XCI+XHJcbiAgICA8IS0tIEhlYWRlciBBY2NvcmRpb24gLS0+XHJcbiAgICA8ZGl2IGlkPVwiaGVhZGVyXCIgbmdiQWNjb3JkaW9uICNhY2NvcmRpb249XCJuZ2JBY2NvcmRpb25cIiBjbGFzcz1cIm15LTRcIj5cclxuICAgICAgPGRpdiBuZ2JBY2NvcmRpb25JdGVtPVwiZGV0YWlsc1wiIFtjb2xsYXBzZWRdPVwiZmFsc2VcIj5cclxuICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkhlYWRlciBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgcHgtNiBweS0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OjVweFwiICpuZ0lmPVwicGxhbm9EYXRhPy5zdG9yZU5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0ndGl0bGUnPnt7cGxhbm9EYXRhPy5zdG9yZU5hbWV9fSAtIFBsYW5vPC9oMj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPGxpYi1zZWxlY3QtcGxhbm8gKm5nSWY9XCJzdG9yZUxpc3Q/Lmxlbmd0aFwiIFtpZEZpZWxkXT1cIidfaWQnXCIgW3NlbGVjdGVkVmFsdWVzXT1cIltzZWxlY3RlZFN0b3JlTmFtZV1cIlxyXG4gICAgICAgICAgICAgICAgIFtpdGVtc109XCJzdG9yZUxpc3RcIiBbbXVsdGldPWZhbHNlIHNlYXJjaEZpZWxkPVwic3RvcmVOYW1lXCIgKHNlbGVjdGVkKT1cIm9uU2VsZWN0ZWQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPC9saWItc2VsZWN0LXBsYW5vPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tIHt7IHBsYW5vRGF0YT8uc3RvcmVOYW1lIH19IC0tPiBcclxuICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgKm5nSWY9XCJwbGFub0RhdGE/LmZsb29ycz8ubGVuZ3RoXCIgW2Zvcm1Db250cm9sXT1cInNlbGVjdGVkRmxvb3JJZFwiIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIidmbG9vck51bSdcIiBbZGF0YV09XCJwbGFub0RhdGEuZmxvb3JzXCI+XHJcbiAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cy1idG5cIiAoY2xpY2spPVwiZ29Ub1N0b3JlVG91clBhZ2UoKVwiPlxyXG4gICAgICAgICAgICAgIFZpZXcgc3RvcmUgdG91clxyXG5cclxuICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDA4XzE2NDk4KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNiAxMUM4Ljc2MTQyIDExIDExIDguNzYxNDIgMTEgNkMxMSAzLjIzODU4IDguNzYxNDIgMSA2IDFDMy4yMzg1OCAxIDEgMy4yMzg1OCAxIDZDMSA4Ljc2MTQyIDMuMjM4NTggMTEgNiAxMVpcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzM0I1RkZcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUgNEw4IDZMNSA4VjRaXCIgc3Ryb2tlPVwiIzMzQjVGRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80MDhfMTY0OThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXMtYnRuXCIgKGNsaWNrKT1cImdvVG9TdG9yZUNhbWVyYVBhZ2UoKVwiPlxyXG4gICAgICAgICAgICAgIFZpZXcgY2FtZXJhXHJcblxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MjJfMzYzMjEpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk05IDYuNVY5LjVDOSA5Ljc2NTIyIDguODk0NjQgMTAuMDE5NiA4LjcwNzExIDEwLjIwNzFDOC41MTk1NyAxMC4zOTQ2IDguMjY1MjIgMTAuNSA4IDEwLjVIMi41QzIuMjM0NzggMTAuNSAxLjk4MDQzIDEwLjM5NDYgMS43OTI4OSAxMC4yMDcxQzEuNjA1MzYgMTAuMDE5NiAxLjUgOS43NjUyMiAxLjUgOS41VjRDMS41IDMuNzM0NzggMS42MDUzNiAzLjQ4MDQzIDEuNzkyODkgMy4yOTI4OUMxLjk4MDQzIDMuMTA1MzYgMi4yMzQ3OCAzIDIuNSAzSDUuNU03LjUgMS41SDEwLjVNMTAuNSAxLjVWNC41TTEwLjUgMS41TDUgN1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDIyXzM2MzIxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC00XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZWRpdEZpeHR1cmVcIiBjbGFzcz1cInVwZGF0ZUNsYXNzXCI+TGFzdCBVcGRhdGU6IHt7Zmxvb3JEYXRhPy51cGRhdGVkQXR9fTwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtNCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICA8IS0tIEVkaXQgRml4dHVyZSBNb2RlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwib25GaXh0dXJlUGFnZUNhbmNlbCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIENhbmNlbFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJvbkZpeHR1cmVTYXZlKClcIj5cclxuICAgICAgICAgICAgICAgICAgU2F2ZSAmIENsb3NlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBOb3JtYWwgTW9kZSAtLT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVkaXRGaXh0dXJlICYmICFbJ3Rhc2tBc3NpZ25lZCddLmluY2x1ZGVzKHRhc2tTdHlsZS5maXh0dXJlLmNsYXNzKVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBQdWJsaXNoIEJ1dHRvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09PSAnbGF5b3V0J1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhc3NpZ25UYXNrKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQdWJsaXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggTGF5b3V0IFZlcmlmaWNhdGlvblxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09PSAnbGF5b3V0LXJlZG8nXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaCBMYXlvdXQgUmVkb1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09PSAnZml4dHVyZSdcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkUHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICBQdWJsaXNoIEZpeHR1cmUgVmVyaWZpY2F0aW9uXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdmaXh0dXJlLXJlZG8nXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaCBGaXh0dXJlIFJlZG9cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ3ZtJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhc3NpZ25UYXNrKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQdWJsaXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggVk0gVmVyaWZpY2F0aW9uXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICd2bS1yZWRvJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhc3NpZ25UYXNrKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQdWJsaXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggVk0gUmVkb1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PSAnY29tcGxldGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kaWNhdG9yIGNvbXBsZXRlZFwiICpuZ0lmPVwiZmxvb3JEYXRhPy52ZXJpZmljYXRpb25TdGF0dXNcIj5QdWJsaXNoZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZsb29yRGF0YT8udmVyaWZpY2F0aW9uU3RhdHVzXCIgXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicHVibGlzaCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIFB1Ymxpc2hcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFJldm9rZSBCdXR0b24gLS0+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+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwicmVtb3ZlRml4dHVyZSgnd2FsbCcsIGosIGkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogMThweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+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+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cInJlbW92ZUZpeHR1cmUoJ2Zsb29yJywgailcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiAxOHB4XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCAxMCAxMFwiIGZpbGw9XCJub25lXCI+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+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIEVudHJhbmNlIEJ1dHRvbiAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJsYXlvdXRGb3JtLmVuYWJsZWRcIiBuZ2JUb29sdGlwPVwiWW91IGNhbiBhZGQgdXAgdG8gdHdvIGVudHJhbmNlcy5cIiBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDE5MHB4XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiIFtkaXNhYmxlVG9vbHRpcF09XCJnZXRFbnRyYW5jZXM/Lmxlbmd0aCA8IDJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMyBiZy13aGl0ZSBzaGFkb3ctc21cIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRFbnRyYW5jZXM/Lmxlbmd0aCA+PSAyXCIgKGNsaWNrKT1cImFkZE5ld0VudHJhbmNlKClcIj5cclxuICAgICAgICAgICAgICBBZGQgRW50cmFuY2VcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIEVkaXQgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUVkaXQgfHwgWyd0YXNrQXNzaWduZWQnLCdyZXZpZXdQZW5kaW5nJ10uaW5jbHVkZXModGFza1N0eWxlLmZpeHR1cmUuY2xhc3MpXCJcclxuICAgICAgICAgICAgc3R5bGU9XCJ0b3A6IDI0cHg7IHJpZ2h0OiAxNjRweFwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHBvc2l0aW9uLWFic29sdXRlIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrRWRpdCgpXCI+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+XHJcblxyXG4gICAgPGxpYi12ZXJpZmljYXRpb24tZmVlZGJhY2sgW2Zsb29yRGF0YV09XCJmbG9vckRhdGFcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgJiYgIWVkaXRGaXh0dXJlfVwiXHJcbiAgICAgIFtmZWVkYmFja0RldGFpbHNdPVwic2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2tcIiAoY2hhbmdlRml4dHVyZSk9XCJvbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoJGV2ZW50LHRydWUpXCJcclxuICAgICAgW3RvdGFsRml4dHVyZXNdPVwiYWxsRml4dHVyZUluc3RhbmNlc1wiIFtjZG5dPVwiY2RuVXJsXCIgKGFjdGlvbik9XCJoYW5kbGVGZWVkYmFja0FjdGlvbigkZXZlbnQpXCJcclxuICAgICAgW3Nob3dBY3Rpb25dPVwiIWVkaXRGaXh0dXJlXCIgIFt2bUxpc3RdPVwidm1MaXN0XCI+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+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
4257
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLXN0b3JlLXBsYW5vLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL21hbmFnZS1zdG9yZS1wbGFuby9tYW5hZ2Utc3RvcmUtcGxhbm8uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvbWFuYWdlLXN0b3JlLXBsYW5vL21hbmFnZS1zdG9yZS1wbGFuby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFJWixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFZLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFELE9BQU8sRUFHTCxXQUFXLEVBRVgsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFJeEIsT0FBTyxFQUNMLE9BQU8sRUFFUCxZQUFZLEVBQ1osY0FBYyxFQUNkLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFHZCxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQU1qQyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUN4SCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUUxRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQmhILE1BQU0sT0FBTyx5QkFBeUI7SUE4RjFCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFwR1YsU0FBUyxDQUFpQztJQUNaLFlBQVksQ0FBOEI7SUFDN0Msb0JBQW9CLENBQW9CO0lBR25FLFFBQVE7UUFDTixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUV6QixRQUFRLENBQVM7SUFFakIsTUFBTSxDQUFpQjtJQUN2QixTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBQ3RCLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDbkIsY0FBYyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFELFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBcUMsQ0FBQztJQUU1RCxVQUFVLENBQVk7SUFDdEIsZUFBZSxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLDBCQUEwQixHQUFtQixFQUFFLENBQUM7SUFDaEQsOEJBQThCLEdBQW1CLEVBQUUsQ0FBQztJQUNwRCwwQkFBMEIsR0FBbUIsRUFBRSxDQUFDO0lBRWhELFNBQVMsQ0FBTTtJQUVmLFNBQVMsQ0FBTTtJQUNOLGlCQUFpQixDQUFNLENBQUMsMEVBQTBFO0lBRTNHLE1BQU0sQ0FBUztJQUNmLGdCQUFnQixHQUFVLEVBQUUsQ0FBQztJQUM3QixXQUFXLEdBQVUsRUFBRSxDQUFDLENBQUMsNERBQTREO0lBQ3JGLG1CQUFtQixHQUFVLEVBQUUsQ0FBQyxDQUFDLHFDQUFxQztJQUN0RSxhQUFhLENBQU07SUFFbkIsZUFBZSxDQUFNO0lBQ3JCLG1CQUFtQixDQUFNO0lBQ3pCLHVCQUF1QixDQUFNO0lBQzdCLFdBQVcsR0FBWSxLQUFLLENBQUM7SUFDN0Isa0JBQWtCLEdBQXlDLGVBQWUsQ0FBQztJQUMzRSxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBRXRCLFlBQVksR0FBRztRQUNiLFVBQVUsRUFBRSxDQUFDO1FBQ2IsWUFBWSxFQUFFLENBQUM7UUFDZixPQUFPLEVBQUUsQ0FBQztLQUNYLENBQUM7SUFFRixhQUFhLEdBQVksSUFBSSxDQUFDO0lBQzlCLHFCQUFxQixHQUFZLElBQUksQ0FBQztJQUN0QyxvQkFBb0IsR0FBWSxJQUFJLENBQUM7SUFDckMsWUFBWSxHQUFzQixRQUFRLENBQUM7SUFFM0MsZUFBZSxHQVFOLEVBQUUsQ0FBQztJQUNaLGVBQWUsR0FBWSxLQUFLLENBQUM7SUFDakMsV0FBVyxHQUFZLElBQUksQ0FBQztJQUM1QixRQUFRLENBQU07SUFDZCxTQUFTLEdBQUc7UUFDVixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7UUFDdkQsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQ3hELEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtLQUNwRCxDQUFDO0lBRUYsZ0JBQWdCLEdBQWlCO1FBQy9CLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQzlDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRTtRQUN4RCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtRQUNwQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTtLQUNyQyxDQUFDO0lBQ0YsU0FBUyxHQUFPLEVBQUUsQ0FBQztJQUNuQixpQkFBaUIsQ0FBSztJQUV0QixNQUFNLEdBQW9CLEVBQUUsQ0FBQztJQUM3QiwrQ0FBK0M7SUFFdkMsZUFBZSxHQUF1QixJQUFJLENBQUM7SUFDM0Msb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXJDLFlBQ1UsVUFBK0IsRUFDL0IsS0FBcUIsRUFDckIsRUFBZSxFQUNmLEVBQXNCLEVBQ3RCLFNBQXdCLEVBQ3hCLFlBQTBCLEVBQzFCLFlBQXNCLEVBQ3RCLFFBQXlCLEVBQ3pCLFFBQWtCLEVBQ2xCLE1BQWMsRUFDZCxFQUFxQjtRQVZyQixlQUFVLEdBQVYsVUFBVSxDQUFxQjtRQUMvQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBZTtRQUN4QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQUN6QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUU3QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNqRSxJQUFJLENBQUM7Z0JBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjO2FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzlCLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDeEIsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7YUFDOUI7aUJBQU07Z0JBQ0wsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDekIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBVyxDQUNqRCxDQUFDO2dCQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQzthQUNwQztZQUVELE1BQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7YUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxNQUFNLEVBQUUsT0FBTyxFQUFFO2dCQUNuQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxNQUFNLEVBQUUsT0FBTyxFQUFFO29CQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsQ0FBQztpQkFDM0M7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFDakMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztZQUVsQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FDM0MsQ0FBQyxLQUFVLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUNqQyxDQUFDO1lBRUYsSUFBSTtnQkFDRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7b0JBQzVELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7aUJBQ3RFLENBQUMsQ0FBQzthQUNKO1lBQUMsTUFBTSxHQUFFO1lBRVYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5RCxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUN4QixTQUFTLENBQUMsUUFBUSxFQUFFLENBQ3JCLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUU7WUFDN0QsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLG1CQUFtQixFQUFFLENBQUM7U0FDdkIsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFhLEVBQUUsaUJBQWlCLENBQUM7YUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QixTQUFTLENBQUMsS0FBSyxFQUFFLENBQU0sRUFBRSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFRLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFFL0IsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTztZQUN0QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQztZQUVuQyxNQUFNLFFBQVEsR0FDWixNQUFNLEtBQUssT0FBTyxJQUFJLE1BQU0sS0FBSyxRQUFRLElBQUksTUFBTSxLQUFLLFFBQVEsQ0FBQztZQUVuRSxJQUFJLFFBQVEsRUFBRTtnQkFDWixNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsT0FBTyxJQUFJLE9BQU8sQ0FBQztnQkFFMUMsTUFBTSxhQUFhLEdBQUc7b0JBQ3BCLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSTtvQkFDaEIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxHQUFHO29CQUNmLEtBQUssRUFBRSxRQUFRLENBQUMsY0FBYyxFQUFFO29CQUNoQyxNQUFNLEVBQUUsUUFBUSxDQUFDLGVBQWUsRUFBRTtvQkFDbEMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO29CQUNyQixXQUFXLEVBQUUsUUFBUSxDQUFDLElBQUk7aUJBQzNCLENBQUM7Z0JBRUYsUUFBUSxJQUFJLEVBQUU7b0JBQ1osS0FBSyxNQUFNLENBQUMsQ0FBQzt3QkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDN0IsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQzt3QkFFdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUNqQyxJQUFJLENBQUMsTUFBTSxFQUNYLGFBQWEsQ0FBQyxDQUFDLEVBQ2YsYUFBYSxDQUFDLENBQUMsRUFDZixJQUFJLENBQUMsYUFBYSxFQUNsQixhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksRUFDMUIsYUFBYSxDQUFDLFdBQVcsQ0FDMUIsQ0FBQzt3QkFFRCxPQUFlLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQzt3QkFDakMsT0FBZSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsV0FBVyxDQUFDO3dCQUVsRCxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDckMsTUFBTTtxQkFDUDtvQkFFRCxLQUFLLFFBQVEsQ0FBQyxDQUFDO3dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUM3QixhQUFhLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUs7NEJBQzlDLGFBQWEsQ0FBQyxLQUFLLENBQUM7d0JBRXRCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDOUMsSUFBSSxDQUFDLE1BQU0sRUFDWCxhQUFhLENBQUMsQ0FBQyxFQUNmLGFBQWEsQ0FBQyxDQUFDLEVBQ2YsYUFBYSxDQUFDLEtBQUssRUFDbkIsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQ3ZCLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUN4QixhQUFhLENBQUMsV0FBVyxDQUMxQixDQUFDO3dCQUVELFFBQWdCLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQzt3QkFDcEMsUUFBZ0IsQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQzt3QkFFbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3RDLE1BQU07cUJBQ1A7b0JBRUQsS0FBSyxVQUFVLENBQUMsQ0FBQzt3QkFDZixNQUFNO3FCQUNQO29CQUVELEtBQUssU0FBUyxDQUFDLENBQUM7d0JBQ2QsTUFBTTtxQkFDUDtvQkFFRDt3QkFDRSxNQUFNO2lCQUNUO2dCQUVELElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUNoQztZQUVELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztRQUNsRCxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUN4QixLQUFLLEVBQUUsU0FBUyxDQUFDLFdBQVcsR0FBRyxFQUFFO1lBRWpDLE1BQU0sRUFBRSxTQUFTLENBQUMsWUFBWSxHQUFHLEVBQUU7U0FDcEMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxHQUE4QixFQUFFLEVBQUU7WUFDL0QsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUVoQixJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQkFDMUIsMENBQTBDO2dCQUMxQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUN2QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQyxJQUFJLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQztnQkFFdkIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXhDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUNyQjtvQkFDRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU87b0JBQ1osQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPO2lCQUNHLEVBQ2pCLElBQUksQ0FDTCxDQUFDO2dCQUVGLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtnQkFDZixVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hCLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNyQixRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQzthQUN0QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDeEMsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtnQkFDL0MsMENBQTBDO2dCQUMxQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNoQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO2dCQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7Z0JBQy9CLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMvQixRQUFRLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDckIsUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7YUFDdEI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUU7WUFDOUIsVUFBVSxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUM7WUFDM0I7Z0JBQ0UsS0FBSyxFQUFFLFdBQVc7Z0JBQ2xCLElBQUksRUFBRSxxQ0FBcUM7Z0JBQzNDLFFBQVEsRUFBRSxLQUFLO2dCQUNmLFdBQVcsRUFBRSxLQUFLO2FBQ25CO1lBQ0Q7Z0JBQ0UsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsV0FBVyxFQUFFLElBQUk7YUFDbEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDZCxJQUFJO1lBQ0YsTUFBTSxHQUFHLEdBQVEsTUFBTSxjQUFjLENBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDN0MsQ0FBQztZQUNGLElBQUksR0FBRyxFQUFFLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtvQkFDekMsT0FBTzt3QkFDTCxFQUFFLEVBQUUsSUFBSSxDQUFDLEdBQUc7d0JBQ1osSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7d0JBQ3pCLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7d0JBQzNCLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTTt3QkFDakIsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVOzRCQUNqQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRTs0QkFDaEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztxQkFDUixDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM5QztJQUNILENBQUM7SUFFRCxhQUFhO1FBQ1gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsNERBQTREO1FBQzVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUM3QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxlQUFlLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNuQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7WUFBRSxPQUFPO1FBRWhELElBQUksS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFO1lBQ3pELEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFVLEVBQUUsS0FBVSxFQUFFLEVBQUU7Z0JBQ3ZELElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUN2RCxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUMzQyxDQUFDO2dCQUNGLElBQUksU0FBUyxFQUFFO29CQUNiLEtBQUssR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7aUJBQ3BDO3FCQUFNO29CQUNMLElBQUksT0FBTyxHQUNULElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQ2xDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDaEQsQ0FBQztvQkFDSixPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7b0JBQ2hDLEtBQUssR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7aUJBQ2xDO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxFQUFFLEtBQUssQ0FBQztZQUN2RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEdBQUcsS0FBSyxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLG1CQUFtQixDQUFDO2dCQUMzQyxLQUFLLEVBQUUsaUJBQWlCLElBQUksRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO1NBQ2xFO2FBQU0sSUFBSSxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQ3pCLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ2pDLElBQUksTUFBTSxHQUFHLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDMUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDNUIsQ0FBQztnQkFDRixJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUMzRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUN0QyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQ3RCLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLENBQUM7d0JBQzlDLEtBQUssQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQztxQkFDN0M7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNKO2FBQU0sSUFBSSxLQUFLLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLEVBQUU7WUFDaEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxHQUFHLEtBQUssRUFBRSxRQUFRLENBQUM7U0FDeEQ7YUFBTTtZQUNMLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNsQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsZUFBZSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztnQkFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDNUM7U0FDRjtJQUNILENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsNkRBQTZEO0lBQzdELGlHQUFpRztJQUNqRyxrQ0FBa0M7SUFDbEMscURBQXFEO0lBQ3JELFFBQVE7SUFFUiwrRkFBK0Y7SUFDL0YsZ0NBQWdDO0lBQ2hDLHFEQUFxRDtJQUNyRCxRQUFRO0lBQ1IsUUFBUTtJQUNSLElBQUk7SUFFSixXQUFXLENBQUMsSUFBc0IsRUFBRSxNQUFnQjtRQUNsRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDbkIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztZQUNqRSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQjtnQkFBRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1NBQ25FO2FBQU07WUFDTCxJQUFJLENBQUMscUJBQXFCLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCO2dCQUFFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7WUFFbEUsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtnQkFDakMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ25DLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFRCxnQkFBZ0IsQ0FDZCxPQUFlLEVBQ2YsT0FBZSxFQUNmLE1BQVcsRUFDWCxvQkFBNkIsSUFBSTtRQUVqQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxHQUFRO2dCQUNkLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixPQUFPLEVBQUUsT0FBTzthQUNqQixDQUFDO1lBQ0YsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQzthQUMvQjtZQUVELElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUMvQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQVEsRUFBRSxFQUFFO29CQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQzlCLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO3dCQUNoQyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUN2RDt5QkFBTTt3QkFDTCxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztxQkFDdEM7b0JBRUQsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUU7d0JBQ2pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO3FCQUNuRDt5QkFBTTt3QkFDTCxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDLENBQUM7cUJBQ2pDO29CQUVELElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO3dCQUM1QixJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDekM7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUM1QjtvQkFFRCxJQUFJLGlCQUFpQixFQUFFO3dCQUNyQixrQ0FBa0M7cUJBQ25DO29CQUVELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUU7d0JBQzVELElBQUksQ0FBQyw4QkFBOEIsQ0FBQzs0QkFDbEMsY0FBYyxFQUNaLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsU0FBUzt5QkFDekQsQ0FBQyxDQUFDO3FCQUNKO29CQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEIsQ0FBQztnQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO29CQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7b0JBQ2xFLE1BQU0sRUFBRSxDQUFDO2dCQUNYLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0I7UUFDdEIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNoRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVwQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQ2pCLFdBQVcsR0FBRyxJQUFJLENBQUM7aUJBQ3BCO2FBQ0Y7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUU7WUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDNUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRWhELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtvQkFDakIsV0FBVyxHQUFHLElBQUksQ0FBQztpQkFDcEI7YUFDRjtTQUNGO1FBRUQsSUFBSSxXQUFXLEVBQUU7WUFDZixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDMUI7UUFFRCxpQ0FBaUM7UUFDakMsb0NBQW9DO1FBQ3BDLFlBQVk7UUFDWixJQUFJO1FBRUosSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUMvQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxRQUFRLENBQ25DLENBQUM7UUFDRixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQ2hELENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FDcEMsQ0FBQztRQUNGLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FDM0MsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksU0FBUyxDQUNwQyxDQUFDO1FBQ0YsSUFDRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksVUFBVTtZQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksVUFBVTtZQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksVUFBVSxFQUNwQztZQUNBLElBQUksQ0FBQyxlQUFlLEdBQUcsVUFBVSxDQUFDO1NBQ25DO2FBQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksVUFBVSxFQUFFO1lBQ3BELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQ0UsTUFBTTtnQkFDTixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLGNBQWMsSUFBSSxVQUFVLENBQUM7b0JBQ2pFLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFDckI7Z0JBQ0EsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7YUFDbEM7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUM7WUFDakMsSUFDRSxXQUFXO2dCQUNYLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxJQUFJLFFBQVE7b0JBQzlCLFdBQVcsQ0FBQyxjQUFjLElBQUksVUFBVSxDQUFDO29CQUN6QyxXQUFXLEVBQUUsVUFBVSxDQUFDLEVBQzFCO2dCQUNBLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7b0JBQzdDLENBQUMsQ0FBQyxjQUFjO29CQUNoQixDQUFDLENBQUMsU0FBUyxDQUFDO2FBQ2Y7U0FDRjtRQUNELFNBQVM7UUFDVCxvQ0FBb0M7UUFDcEMsZ0lBQWdJO1FBQ2hJLDRDQUE0QztRQUM1QyxNQUFNO1FBQ04sSUFBSTtRQUVKLDJDQUEyQztRQUMzQyxvR0FBb0c7UUFFcEcscUdBQXFHO1FBRXJHLGdDQUFnQztRQUNoQyx3Q0FBd0M7UUFDeEMsYUFBYTtRQUNiLE1BQU07UUFFTiw2QkFBNkI7UUFFN0Isa0RBQWtEO1FBQ2xELDREQUE0RDtRQUU1RCxrREFBa0Q7UUFDbEQsbUNBQW1DO1FBQ25DLGdEQUFnRDtRQUVoRCwrRUFBK0U7UUFDL0UsZ0NBQWdDO1FBQ2hDLG1CQUFtQjtRQUNuQixZQUFZO1FBRVosVUFBVTtRQUNWLFFBQVE7UUFFUiw4QkFBOEI7UUFDOUIsNEJBQTRCO1FBQzVCLGtEQUFrRDtRQUNsRCxtQ0FBbUM7UUFDbkMsZ0RBQWdEO1FBRWhELCtFQUErRTtRQUMvRSxnQ0FBZ0M7UUFDaEMsbUJBQW1CO1FBQ25CLFlBQVk7UUFFWixVQUFVO1FBQ1YsUUFBUTtRQUVSLDhCQUE4QjtRQUM5QixNQUFNO1FBRU4sdUJBQXVCO1FBQ3ZCLDZDQUE2QztRQUM3QyxhQUFhO1FBQ2IsTUFBTTtRQUVOLHFDQUFxQztRQUNyQyxJQUFJO1FBRUosK0NBQStDO1FBQy9DLGdIQUFnSDtRQUNoSCw2QkFBNkI7UUFFN0IsMkVBQTJFO1FBQzNFLHVDQUF1QztRQUN2QyxhQUFhO1FBQ2IsTUFBTTtRQUVOLG9GQUFvRjtRQUVwRiwwQkFBMEI7UUFDMUIsb0NBQW9DO1FBQ3BDLDhDQUE4QztRQUM5Qyw2RUFBNkU7UUFDN0UsOEJBQThCO1FBQzlCLGlCQUFpQjtRQUNqQixVQUFVO1FBQ1YsUUFBUTtRQUNSLE1BQU07UUFFTix1QkFBdUI7UUFDdkIsNENBQTRDO1FBQzVDLGFBQWE7UUFDYixNQUFNO1FBRU4sb0NBQW9DO1FBQ3BDLElBQUk7UUFFSixzSUFBc0k7UUFDdEksb0NBQW9DO1FBQ3BDLElBQUk7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxlQUF1QjtRQUN2QyxPQUFPLE1BQU0sY0FBYyxDQUN6QixJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxhQUFvQjtRQUM5QyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUN2QyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxRQUFRLENBQ3pDLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQ3RELENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FDakQsQ0FBQztRQUVGLElBQUksY0FBYyxFQUFFO1lBQ2xCLE1BQU0sTUFBTSxHQUFHLGNBQWMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUM7WUFFcEQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3RDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFeEIsSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLGNBQWMsRUFBRTt3QkFDdEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ25DLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FDL0MsQ0FBQzt3QkFFRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDeEMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUU1QixNQUFNLFFBQVEsR0FBUSxNQUFNLElBQUksQ0FBQyxXQUFXLENBQzFDLE9BQU8sQ0FBQyxlQUFlLENBQ3hCLENBQUM7NEJBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQ0FDYixPQUFPOzZCQUNSOzRCQUVELE1BQU0sU0FBUyxHQUFHLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7NEJBRS9DLE1BQU0sWUFBWSxHQUFHO2dDQUNuQixHQUFHLFFBQVEsRUFBRSxJQUFJO2dDQUNqQixlQUFlLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHO2dDQUNwQyxHQUFHLEVBQUUsU0FBUztnQ0FDZCxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO2dDQUM1QyxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7Z0NBQ2hDLEtBQUssRUFBRSxJQUFJO2dDQUNYLEtBQUssRUFBRSxJQUFJO2dDQUNYLFNBQVMsRUFBRSxPQUFPO2dDQUNsQixRQUFRLEVBQUUsUUFBUTs2QkFDbkIsQ0FBQzs0QkFFRiwySkFBMko7NEJBRTNKLElBQUksT0FBTyxDQUFDLHFCQUFxQixLQUFLLE1BQU0sRUFBRTtnQ0FDNUMsSUFBSSxTQUFpQixDQUFDO2dDQUV0QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7Z0NBQ3JELElBQUksWUFBWSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7b0NBQ3ZDLFNBQVMsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDO2lDQUNqQztxQ0FBTSxJQUFJLFlBQVksSUFBSSxDQUFDLEVBQUU7b0NBQzVCLFNBQVMsR0FBRyxDQUFDLENBQUM7aUNBQ2Y7cUNBQU07b0NBQ0wsU0FBUyxHQUFHLFlBQVksQ0FBQztpQ0FDMUI7Z0NBRUQsTUFBTSxlQUFlLEdBQVEsWUFBWSxDQUFDLElBQUksQ0FDNUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNmLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTtvQ0FDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3RDLENBQUMsUUFBUSxDQUFDO2dDQUNYLE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQztnQ0FFL0QsSUFBSSxlQUFlLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRTtvQ0FDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO3lDQUN6QixJQUFJLENBQ0gsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNmLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTt3Q0FDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3RDO3lDQUNBLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0NBQy9CLDJEQUEyRDtpQ0FDNUQ7cUNBQU0sSUFBSSxlQUFlLElBQUksQ0FBQyxFQUFFO29DQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWE7eUNBQ3pCLElBQUksQ0FDSCxDQUFDLE9BQVksRUFBRSxFQUFFLENBQ2YsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNO3dDQUM5QixPQUFPLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FDdEM7eUNBQ0EsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztvQ0FDbEMsZ0VBQWdFO2lDQUNqRTtxQ0FBTTtvQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWE7eUNBQ3pCLElBQUksQ0FDSCxDQUFDLE9BQVksRUFBRSxFQUFFLENBQ2YsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNO3dDQUM5QixPQUFPLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FDdEM7eUNBQ0EsUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztvQ0FDekQsa0ZBQWtGO2lDQUNuRjs2QkFDRjtpQ0FBTSxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsS0FBSyxPQUFPLEVBQUU7Z0NBQ3BELE1BQU0sZUFBZSxHQUFHLE9BQU8sQ0FBQyw4QkFBOEIsQ0FBQztnQ0FFL0QsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFO29DQUN6RCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0NBQ2hELGdEQUFnRDtpQ0FDakQ7cUNBQU0sSUFBSSxlQUFlLElBQUksQ0FBQyxFQUFFO29DQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7b0NBQ25ELHFEQUFxRDtpQ0FDdEQ7cUNBQU07b0NBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUNqQyxlQUFlLEdBQUcsQ0FBQyxFQUNuQixDQUFDLEVBQ0QsWUFBWSxDQUNiLENBQUM7b0NBQ0YsdUVBQXVFO2lDQUN4RTs2QkFDRjt5QkFDRjtxQkFDRjtvQkFFRCxJQUNFLEtBQUssQ0FBQyxTQUFTLEtBQUssZ0JBQWdCO3dCQUNwQyxLQUFLLENBQUMsU0FBUyxLQUFLLGlCQUFpQixFQUNyQzt3QkFDQSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUMvQyxDQUFDO3dCQUVGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUN4QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBRTVCLGtEQUFrRDs0QkFDbEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzs0QkFFMUMsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTtnQ0FDdEQsSUFDRSxXQUFXLENBQUMsV0FBVyxLQUFLLE1BQU07b0NBQ2xDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO29DQUVwQyxTQUFTO2dDQUVYLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUNqRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQ3RDLENBQUM7Z0NBRUYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0NBQ3ZCLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUc7d0NBQ25DLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7d0NBQ3JDLEtBQUssRUFBRSxJQUFJO3dDQUNYLFNBQVMsRUFBRSxNQUFNO3dDQUNqQixRQUFRLEVBQUUsUUFBUTtxQ0FDbkIsQ0FBQztvQ0FFRixNQUFNO2lDQUNQOzZCQUNGOzRCQUNELElBQUk7NEJBQ0osd0RBQXdEOzRCQUN4RCw2Q0FBNkM7NEJBRTdDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDOzRCQUVwRCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsU0FBUyxDQUMzQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQ3RDLENBQUM7NEJBRUYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0NBQ3ZCLGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRztvQ0FDN0IsR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDO29DQUMvQixLQUFLLEVBQUUsSUFBSTtvQ0FDWCxTQUFTLEVBQUUsTUFBTTtvQ0FDakIsUUFBUSxFQUFFLFFBQVE7aUNBQ25CLENBQUM7NkJBQ0g7eUJBQ0Y7d0JBRUQsSUFBSTtxQkFDTDtpQkFDRjthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsYUFBb0I7UUFDekMsTUFBTSxlQUFlLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FDMUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssU0FBUyxDQUMxQyxDQUFDO1FBRUYsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUNwRCxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxTQUFTLENBQ3RDLENBQUM7UUFFRixLQUFLLE1BQU0sUUFBUSxJQUFJLGVBQWUsSUFBSSxFQUFFLEVBQUU7WUFDNUMsTUFBTSxNQUFNLEdBQUcsUUFBUSxFQUFFLGFBQWEsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTTtnQkFBRSxTQUFTO1lBRXRCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQzNDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxTQUFTLENBQ3ZDLENBQUM7WUFDRixJQUFJLENBQUMsT0FBTztnQkFBRSxTQUFTO1lBRXZCLFFBQVEsQ0FBQyxXQUFXLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWhELE1BQU0sTUFBTSxHQUNWLENBQUMsZUFBZSxFQUFFLE1BQU0sS0FBSyxRQUFRLElBQUksZUFBZSxFQUFFLFVBQVUsQ0FBQztnQkFDckUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU07Z0JBQzVCLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU07Z0JBQzVCLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFFVCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRTtnQkFDckIsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osU0FBUyxFQUFFLE1BQU07Z0JBQ2pCLFFBQVEsRUFBRSxTQUFTO2dCQUNuQixNQUFNO2dCQUNOLE1BQU0sRUFBRSxlQUFlLEVBQUUsTUFBTTtnQkFDL0IsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNO2FBQ3BDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELHlCQUF5QixDQUFDLGFBQW9CO1FBQzVDLE1BQU0sZUFBZSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQzFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FDMUMsQ0FBQztRQUNGLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUMxQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0MsTUFBTSxNQUFNLEdBQUcsZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDO2dCQUUxRCxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUU7b0JBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUN0QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBRXhCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUNuQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQy9DLENBQUM7d0JBRUYsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ3hDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFFNUIsa0RBQWtEOzRCQUNsRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDOzRCQUUxQyxLQUFLLE1BQU0sV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFO2dDQUN0RCxJQUNFLFdBQVcsQ0FBQyxXQUFXLEtBQUssTUFBTTtvQ0FDbEMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUM7b0NBRXBDLFNBQVM7Z0NBRVgsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQ2pELENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGVBQWUsQ0FDdEMsQ0FBQztnQ0FFRixJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtvQ0FDdkIsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRzt3Q0FDbkMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQzt3Q0FDckMsS0FBSyxFQUFFLElBQUk7d0NBQ1gsU0FBUyxFQUFFLE1BQU07d0NBQ2pCLFFBQVEsRUFBRSxTQUFTO3FDQUNwQixDQUFDO29DQUVGLE1BQU07aUNBQ1A7NkJBQ0Y7NEJBQ0QsSUFBSTs0QkFDSix3REFBd0Q7NEJBQ3hELDZDQUE2Qzs0QkFFN0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7NEJBRXBELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQzNDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGVBQWUsQ0FDdEMsQ0FBQzs0QkFFRixJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtnQ0FDdkIsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHO29DQUM3QixHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUM7b0NBQy9CLEtBQUssRUFBRSxJQUFJO29DQUNYLFNBQVMsRUFBRSxNQUFNO29DQUNqQixRQUFRLEVBQUUsU0FBUztpQ0FDcEIsQ0FBQzs2QkFDSDt5QkFDRjtxQkFDRjtpQkFDRjtnQkFDRCxJQUFJO2FBQ0w7U0FDRjtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxhQUFvQjtRQUNwQyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUMxQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQ3JDLENBQUM7UUFFRixJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDMUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9DLE1BQU0sTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztnQkFFMUQsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFO29CQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUV4QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUMvQyxDQUFDO3dCQUVGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFOzRCQUN4QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBRTVCLGtEQUFrRDs0QkFDbEQsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzs0QkFFMUMsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRTtnQ0FDdEQsSUFDRSxXQUFXLENBQUMsV0FBVyxLQUFLLE1BQU07b0NBQ2xDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO29DQUVwQyxTQUFTO2dDQUVYLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUNqRCxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQ3RDLENBQUM7Z0NBRUYsSUFBSSxZQUFZLEtBQUssQ0FBQyxDQUFDLEVBQUU7b0NBQ3ZCLFdBQVcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUc7d0NBQ25DLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7d0NBQ3JDLEtBQUssRUFBRSxJQUFJO3dDQUNYLFNBQVMsRUFBRSxNQUFNO3dDQUNqQixRQUFRLEVBQUUsSUFBSTtxQ0FDZixDQUFDO29DQUVGLE1BQU07aUNBQ1A7NkJBQ0Y7NEJBQ0QsSUFBSTs0QkFDSix3REFBd0Q7NEJBQ3hELDZDQUE2Qzs0QkFFN0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7NEJBRXBELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQzNDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLGVBQWUsQ0FDdEMsQ0FBQzs0QkFFRixJQUFJLFlBQVksS0FBSyxDQUFDLENBQUMsRUFBRTtnQ0FDdkIsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHO29DQUM3QixHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUM7b0NBQy9CLEtBQUssRUFBRSxJQUFJO29DQUNYLFNBQVMsRUFBRSxNQUFNO29DQUNqQixRQUFRLEVBQUUsSUFBSTtpQ0FDZixDQUFDOzZCQUNIO3lCQUNGO3FCQUNGO29CQUNELElBQUk7aUJBQ0w7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUNmLFlBQWlCLEVBQ2pCLFdBQWdCLEVBQ2hCLFlBQW9CLEVBQ3BCLFdBQW1CO1FBRW5CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQztRQUMxRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUVsRSxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDdkIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUQ7SUFDSCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBYztRQUMvQixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDckIsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzdDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FDdkUsRUFBRSxRQUFRLENBQUM7UUFDWixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixHQUFHLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLEVBQ25ELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDN0QsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUN2RSxFQUFFLFFBQVEsQ0FBQztRQUNaLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ25DLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzVELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUNwRCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQ3ZFLEVBQUUsUUFBUSxDQUFDO1FBQ1osTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUNuRCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ25DLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzdELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzdDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FDdkUsRUFBRSxRQUFRLENBQUM7UUFDWixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUNuQyxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM1RCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ25DLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLEdBQUcsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFDcEQsQ0FBQyxDQUNGLENBQUM7UUFDRixNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUN2RSxFQUFFLFFBQVEsQ0FBQztRQUNaLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQ25DLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzVELENBQUMsQ0FDRixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FDbkMsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsR0FBRyxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUNwRCxDQUFDLENBQ0YsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFDMUMsTUFBTSxVQUFVLEdBQ2QsU0FBUyxDQUFDLE1BQU07WUFDaEIsU0FBUyxDQUFDLE1BQU0sQ0FDZCxDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM1RCxDQUFDLENBQ0YsQ0FBQztRQUNKLE1BQU0sVUFBVSxHQUNkLENBQUM7WUFDRCxTQUFTLENBQUMsTUFBTSxDQUNkLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzdELENBQUMsQ0FDRixDQUFDO1FBQ0osTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBRXJCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNsRSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckIsWUFBWSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQy9CLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzVELENBQUMsQ0FDRixDQUFDO1NBQ0g7UUFFRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUMxQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtnQkFDMUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQy9CLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzVELENBQUMsQ0FDRixDQUFDO2FBQ0g7aUJBQU0sSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUM1QixZQUFZLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FDL0IsQ0FBQyxHQUFXLEVBQUUsT0FBWSxFQUFFLEVBQUUsQ0FDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsRUFDNUQsQ0FBQyxDQUNGLENBQUM7YUFDSDtpQkFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBQzVCLFlBQVksSUFBSSxVQUFVLENBQUMsTUFBTSxDQUMvQixDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM1RCxDQUFDLENBQ0YsQ0FBQzthQUNIO1NBQ0Y7UUFFRCx3QkFBd0I7UUFDeEIseUlBQXlJO1FBQ3pJLElBQUk7UUFFSixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN6QixXQUFXLEVBQ1gsVUFBVSxFQUNWLFdBQVcsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUN0QyxDQUFDO1FBQ0YsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ3JCLFlBQVksSUFBSSxVQUFVLENBQUMsTUFBTSxDQUMvQixDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM3RCxDQUFDLENBQ0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ3JCLFlBQVksSUFBSSxVQUFVLENBQUMsTUFBTSxDQUMvQixDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM3RCxDQUFDLENBQ0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3BCLFlBQVk7Z0JBQ1YsQ0FBQztvQkFDRCxTQUFTLENBQUMsTUFBTSxDQUNkLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzdELENBQUMsQ0FDRixDQUFDO1NBQ0w7UUFFRCxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQy9DLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsRDtpQkFBTSxJQUNMLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTtnQkFDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQzNCO2dCQUNBLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsRDtpQkFBTSxJQUNMLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTtnQkFDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQzNCO2dCQUNBLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNsRDtpQkFBTSxJQUNMLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNO2dCQUM3QixDQUFDLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxVQUFVLElBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFDbkU7Z0JBQ0EsSUFBSSxRQUFRLEdBQUcsVUFBVSxFQUFFLE1BQU07b0JBQy9CLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO3dCQUN2QixVQUFVLENBQUMsTUFBTSxDQUNmLENBQUMsR0FBVyxFQUFFLE9BQVksRUFBRSxFQUFFLENBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEVBQzdELENBQUMsQ0FDRjtvQkFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVOLE1BQU0sUUFBUSxHQUFHLFVBQVUsRUFBRSxNQUFNO29CQUNqQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzt3QkFDdkIsVUFBVSxDQUFDLE1BQU0sQ0FDZixDQUFDLEdBQVcsRUFBRSxPQUFZLEVBQUUsRUFBRSxDQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxFQUM3RCxDQUFDLENBQ0Y7b0JBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFTixNQUFNLEtBQUssR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDO2dCQUNsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRXJELE1BQU0sT0FBTyxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUM7Z0JBQy9CLE1BQU0sT0FBTyxHQUFHLFFBQVEsS0FBSyxDQUFDLENBQUM7Z0JBRS9CLElBQUksY0FBYyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDO2dCQUN2QixJQUFJLE9BQU8sR0FBRyxRQUFRLENBQUM7Z0JBRXZCLElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRTtvQkFDdEIsT0FBTyxHQUFHLE9BQU8sR0FBRyxjQUFjLEdBQUcsWUFBWSxHQUFHLENBQUMsQ0FBQztpQkFDdkQ7cUJBQU0sSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQzlCLE9BQU8sR0FBRyxRQUFRLENBQUM7b0JBQ25CLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixjQUFjLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztpQkFDakM7cUJBQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLEVBQUU7b0JBQzlCLE9BQU8sR0FBRyxRQUFRLENBQUM7b0JBQ25CLE9BQU8sR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDO29CQUN6QixjQUFjLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztpQkFDakM7cUJBQU07b0JBQ0wsY0FBYyxHQUFHLFVBQVUsQ0FBQztpQkFDN0I7Z0JBRUQsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRTtvQkFDakUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM3QztxQkFBTSxJQUNMLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTTtvQkFDOUIsT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQzNCO29CQUNBLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDN0M7cUJBQU0sSUFDTCxPQUFPLENBQUMsV0FBVyxLQUFLLFVBQVU7b0JBQ2xDLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUMzQjtvQkFDQSxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ3BEO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztRQUV0QixTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQy9DLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pFLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDakIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsQ0FBUyxFQUFFLEVBQUU7b0JBQ25ELFFBQVEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM3RCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7d0JBQ3JCLFFBQVEsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztxQkFDekQ7b0JBQ0QsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUM7b0JBQ3BDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO29CQUU3QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTt3QkFDbEIsMkNBQTJDO3dCQUMzQyxPQUFPLENBQUMsOEJBQThCLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztxQkFDaEU7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQzdCLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7cUJBQy9DO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU0sSUFDTCxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07Z0JBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUMzQjtnQkFDQSxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3pDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FDdkUsRUFBRSxRQUFRLENBQUM7Z0JBQ1osSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxDQUFTLEVBQUUsRUFBRTtvQkFDbkQsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzlELElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTt3QkFDckIsUUFBUSxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO3FCQUMxRDtvQkFDRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQzFDLFFBQVEsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FDdkQsQ0FBQztvQkFDRixPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUM7b0JBQ3BDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO29CQUU3QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTt3QkFDbEIsMkNBQTJDO3dCQUMzQyxPQUFPLENBQUMsOEJBQThCLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztxQkFDaEU7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQzdCLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7cUJBQy9DO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU0sSUFDTCxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07Z0JBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUMzQjtnQkFDQSxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLFFBQVEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDekMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUN2RSxFQUFFLFFBQVEsQ0FBQztnQkFDWixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxDQUFTLEVBQUUsRUFBRTtvQkFDbkQsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzdELElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTt3QkFDckIsUUFBUSxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO3FCQUN6RDtvQkFDRCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3ZELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FDMUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUN4RCxDQUFDO29CQUNGLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUM7b0JBQ3ZDLE9BQU8sQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLENBQUM7b0JBQ3BDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO29CQUU3QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTt3QkFDbEIsMkNBQTJDO3dCQUMzQyxPQUFPLENBQUMsOEJBQThCLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztxQkFDaEU7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQzdCLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7cUJBQy9DO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7aUJBQU0sSUFDTCxPQUFPLENBQUMsV0FBVyxLQUFLLE1BQU07Z0JBQzlCLE9BQU8sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUMzQjtnQkFDQSxJQUFJLG1CQUFtQixHQUFHLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixJQUFJLFFBQVEsR0FDVixTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDMUIsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUNaLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUMxRCxFQUFFLFFBQVE7b0JBQ1gsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQzFCLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FDWixJQUFJLENBQUMsV0FBVyxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FDOUQsRUFBRSxRQUFRLENBQUM7Z0JBRWQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsQ0FBUyxFQUFFLEVBQUU7b0JBQ25ELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdkQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUMxQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FDOUQsQ0FBQztvQkFDRixPQUFPLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDO29CQUN2QyxPQUFPLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO29CQUNwQyxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztvQkFFN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7d0JBQ2xCLDJDQUEyQzt3QkFDM0MsT0FBTyxDQUFDLDhCQUE4QixHQUFHLG1CQUFtQixFQUFFLENBQUM7cUJBQ2hFO3lCQUFNO3dCQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO3dCQUM3QixPQUFPLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO3FCQUMvQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO2lCQUFNLElBQ0wsT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNO2dCQUM5QixPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsRUFDM0I7Z0JBQ0EsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7Z0JBQzVCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDakIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUNqQixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxDQUFTLEVBQUUsRUFBRTtvQkFDbkQsUUFBUTt3QkFDTixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQzs0QkFDbEQsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7b0JBQy9DLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDdkQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUN2RCxPQUFPLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDO29CQUN2QyxPQUFPLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO29CQUNwQyxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztvQkFFN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7d0JBQ2xCLDJDQUEyQzt3QkFDM0MsT0FBTyxDQUFDLDhCQUE4QixHQUFHLG1CQUFtQixFQUFFLENBQUM7cUJBQ2hFO3lCQUFNO3dCQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO3dCQUM3QixPQUFPLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO3FCQUMvQztnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUM3RCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFNUMsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7UUFFN0IsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDOUQsTUFBTSxNQUFNLEdBQ1YsWUFBWSxHQUFHLENBQUM7Z0JBQ2hCLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQzFFLE1BQU0sTUFBTSxHQUNWLFlBQVksR0FBRyxDQUFDO2dCQUNoQixTQUFTLEdBQUcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBRTdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sUUFBUSxHQUFHLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV6QyxNQUFNLFFBQVEsR0FDWixNQUFNLEdBQUcsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQztZQUNwRSxNQUFNLFFBQVEsR0FDWixNQUFNLEdBQUcsUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQztZQUVyRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1lBRTlCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO2dCQUNsQiwyQ0FBMkM7Z0JBQzNDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO2FBQ2pFO2lCQUFNO2dCQUNMLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUM3QixPQUFPLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDO2FBQy9DO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQWM7UUFDM0IsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLFFBQVE7UUFDUixTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQy9DLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7Z0JBQ2xDLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO2dCQUU1QixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO29CQUN4QyxPQUFPLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDO29CQUN2QyxPQUFPLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztvQkFDeEQsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBRTdCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3dCQUNsQiwyQ0FBMkM7d0JBQzNDLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO3FCQUNoRTt5QkFBTTt3QkFDTCxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQzt3QkFDN0IsT0FBTyxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQztxQkFDL0M7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsd0JBQXdCO1FBQ3hCLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDL0MsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7WUFFOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ2xCLDJDQUEyQztnQkFDM0MsT0FBTyxDQUFDLDhCQUE4QixHQUFHLG9CQUFvQixFQUFFLENBQUM7YUFDakU7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLE9BQU8sQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUM7YUFDL0M7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBVTtRQUN4QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQzNDLENBQUM7SUFFRCxvREFBb0Q7SUFDNUMsZUFBZSxDQUFDLGFBQXFCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUN4QyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksQ0FBQyxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRUQsOERBQThEO0lBQ3RELGVBQWUsQ0FDckIsU0FBaUI7UUFFakIsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUU1QixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxJQUFJLEVBQUUsRUFBRTtZQUN6RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNuQyxLQUFLLE1BQU0sT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ3RDLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTO3dCQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO2lCQUNwRTthQUNGO1NBQ0Y7UUFFRCxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxJQUFJLEVBQUUsRUFBRTtZQUN6RCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUztnQkFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDM0U7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE9BQWUsRUFBRSxTQUFrQixJQUFJO1FBQzVELElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRTtZQUNqQyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLFVBQVU7YUFDWixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNuRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQVEsRUFBRSxFQUFFO2dCQUN2QixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7b0JBQ25DLE9BQU87aUJBQ1I7Z0JBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO29CQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLGVBQWUsQ0FDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNyQixDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FDbkQsQ0FDRixDQUFDO2lCQUNIO3FCQUFNO29CQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3pEO2dCQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNoRCxTQUFTLEVBQUUsS0FBSztpQkFDakIsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztnQkFFOUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3pCLElBQUk7b0JBQ0YsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO3dCQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO3dCQUM1RCxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFDbEIsRUFBRSxDQUNIO3FCQUNGLENBQUMsQ0FBQztpQkFDSjtnQkFBQyxNQUFNLEdBQUU7Z0JBRVYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVuQixnQ0FBZ0M7Z0JBRWhDLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2dCQUMzQixJQUFJLE1BQU0sRUFBRTtvQkFDVixJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2lCQUNoRDtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDM0QsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxTQUFjO1FBQy9CLE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsR0FBRyxDQUFDLFNBQVMsRUFBRSxlQUFlLElBQUksRUFBRSxDQUFDO1lBQ3JDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsYUFBYSxJQUFJLEVBQUUsQ0FBQztTQUNwQyxDQUFDO1FBRUYsU0FBUyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtZQUM1QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUM7UUFFcEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHO1lBQ3pCLEdBQUcsSUFBSSxDQUFDLFNBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUN2RSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLElBQUksRUFBRSxDQUFDO1NBQ3pDLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFrQixJQUFJO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDO1FBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDO1FBQ25ELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBRWxCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUNqRCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO29CQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7d0JBQ3RDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVzt3QkFDN0IsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO3FCQUNsQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTt3QkFDckMsSUFBSSxPQUFPLEVBQUUsV0FBVyxLQUFLLE9BQU87NEJBQUUsT0FBTzt3QkFDN0MsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQzs0QkFDckMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXOzRCQUNoQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7NEJBQ3hDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRzt5QkFDakIsQ0FBQyxDQUFDO3dCQUNGLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUM3RCxDQUFDLENBQUMsQ0FBQztvQkFFSCxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUN2QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQzs0QkFDN0IsSUFBSSxFQUFFO2dDQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLFdBQVcsQ0FBQztvQ0FDNUQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXO29DQUNqQixDQUFDLENBQUMsUUFBUTs2QkFDYjs0QkFDRCxVQUFVLEVBQUU7Z0NBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDO29DQUM1RCxDQUFDLENBQUMsRUFBRTtvQ0FDSixDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7NkJBQ3BCO3lCQUNGLENBQUMsQ0FBQzt3QkFDRixRQUFRLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDOUQsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ2xDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRTtnQkFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7b0JBQ3JELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7d0JBQ3JDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVzt3QkFDaEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO3dCQUN4QyxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7cUJBQ2pCLENBQUMsQ0FBQztvQkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQWUsQ0FBQyxJQUFJLENBQ3RELFlBQVksQ0FDYixDQUFDO2dCQUNKLENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRTtnQkFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2xELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO3dCQUM3QixJQUFJLEVBQUU7NEJBQ0osSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsV0FBVyxDQUFDO2dDQUM1RCxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVc7Z0NBQ2pCLENBQUMsQ0FBQyxRQUFRO3lCQUNiO3dCQUNELFVBQVUsRUFBRTs0QkFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEdBQUcsQ0FBQyxXQUFXLENBQUM7Z0NBQzVELENBQUMsQ0FBQyxFQUFFO2dDQUNKLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVzt5QkFDcEI7cUJBQ0YsQ0FBQyxDQUFDO29CQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFlLENBQUMsSUFBSSxDQUMzRCxRQUFRLENBQ1QsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxJQUFJLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQjtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFaEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNuQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFUixJQUNFLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsU0FBUztZQUN4RCxDQUFDLElBQUksQ0FBQyxxQkFBcUI7WUFDM0IsSUFBSSxDQUFDLGVBQWUsRUFDcEI7WUFDQSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7U0FDM0I7UUFDRCxpQkFBaUI7SUFDbkIsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFFckUsSUFBSSxJQUFJLEdBQUcsUUFBUSxFQUNqQixJQUFJLEdBQUcsUUFBUSxFQUNmLElBQUksR0FBRyxDQUFDLFFBQVEsRUFDaEIsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDO1FBRW5CLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNuQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQztRQUVELE9BQU87WUFDTCxJQUFJLEVBQUUsSUFBSTtZQUNWLEdBQUcsRUFBRSxJQUFJO1lBQ1QsS0FBSyxFQUFFLElBQUksR0FBRyxJQUFJO1lBQ2xCLE1BQU0sRUFBRSxJQUFJLEdBQUcsSUFBSTtTQUNwQixDQUFDO0lBQ0osQ0FBQztJQUVPLHlCQUF5QixDQUFDLFFBQVEsR0FBRyxHQUFHO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87UUFFekIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXBDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRTVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUV4QyxtQ0FBbUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsY0FBYztRQUVqRSwyQ0FBMkM7UUFDM0MsTUFBTSxTQUFTLEdBQUc7WUFDaEIsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3hDLENBQUM7UUFFbkIsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLFNBQVM7UUFDcEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLFNBQVM7UUFFcEMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsV0FBVztRQUN2RixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxXQUFXO1FBRXZGLGlEQUFpRDtRQUNqRCxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBa0IsQ0FBa0IsQ0FBQztRQUV0RSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUNsQixVQUFVLEVBQUUsQ0FBQztZQUNiLFFBQVEsRUFBRSxDQUFDO1lBQ1gsUUFBUTtZQUNSLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFO2dCQUMxQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFrQixDQUFDO2dCQUUzQyw0QkFBNEI7Z0JBQzVCLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUM1RCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDNUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7Z0JBQzVELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUU1RCxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakMsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCO1FBQ3RCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDeEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFcEQsSUFBSSxJQUFJLENBQUM7WUFFVCxPQUFPLENBQUMsZ0JBQWdCLEtBQUs7Z0JBQzNCLENBQUMsRUFBRSxDQUFDO2dCQUNKLENBQUMsRUFBRSxDQUFDO2dCQUNKLElBQUksRUFBRSxJQUFJO2FBQ1gsQ0FBQztZQUVGLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVsRSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO2dCQUNsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO2dCQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ3ZFO2lCQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxVQUFVLEVBQUU7Z0JBQzdDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO2dCQUN2QixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLENBQ2YsSUFBSSxDQUFDLE1BQU0sRUFDWCxDQUFDLEVBQ0QsQ0FBQyxFQUNELFVBQVUsRUFDVixXQUFXLEVBQ1gsU0FBUyxFQUNULE9BQU8sQ0FDUixDQUFDO2FBQ0g7WUFFRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFO2dCQUNsQyxNQUFNLGFBQWEsR0FBbUIsRUFBRSxDQUFDO2dCQUV6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2xELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQzFCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQzlCLENBQUM7b0JBQ0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFDMUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDOUIsQ0FBQztvQkFDRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNqQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUNqQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUNqQyxDQUFDO29CQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ2hDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQ2hDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ2hDLENBQUM7b0JBRUYsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUN2QyxJQUFJLENBQUMsTUFBTSxFQUNYLENBQUMsRUFDRCxDQUFDLEVBQ0QsYUFBYSxFQUNiLFlBQVksRUFDWixPQUFPLENBQ1IsQ0FBQztvQkFDRixhQUFhLENBQUMsSUFBSSxDQUFDLFVBQTBCLENBQUMsQ0FBQztpQkFDaEQ7Z0JBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtvQkFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pCLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBRXBELE1BQU0sYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLGFBQWEsQ0FBQyxFQUFFO3dCQUMvRCxXQUFXLEVBQUUsSUFBSTt3QkFDakIsVUFBVSxFQUFFLElBQUk7d0JBQ2hCLGNBQWMsRUFBRSxJQUFJO3FCQUNyQixDQUFDLENBQUM7b0JBRUgsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN0QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztpQkFDaEM7Z0JBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN2RCxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM5QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQy9ELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDL0QsTUFBTSxDQUFDLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQztvQkFDOUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFDdEMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDdEMsQ0FBQztvQkFDRixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNyQixZQUFZLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUNyQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUNyQyxDQUFDO29CQUVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FDaEQsSUFBSSxDQUFDLE1BQU0sRUFDWCxDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0QsQ0FBQyxFQUNELFlBQVksQ0FDYixDQUFDO29CQUVGLGtEQUFrRDtpQkFDbkQ7YUFDRjtTQUNGO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNyQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUMxQixPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUM5QixDQUFDO1lBQ0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFDMUIsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDOUIsQ0FBQztZQUNGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ2pDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQ2pDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ2pDLENBQUM7WUFDRixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUNoQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUNoQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUNoQyxDQUFDO1lBQ0YsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUNwQixJQUFJLENBQUMsTUFBTSxFQUNYLENBQUMsRUFDRCxDQUFDLEVBQ0QsYUFBYSxFQUNiLFlBQVksRUFDWixPQUFPLENBQ1IsQ0FBQztTQUNIO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM5RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDL0QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9ELE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7WUFDOUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsWUFBWSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFDdEMsWUFBWSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDdEMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQ3JDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3JDLENBQUM7WUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQ2hELElBQUksQ0FBQyxNQUFNLEVBQ1gsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDRCxZQUFZLENBQ2IsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FDWixNQUFxQixFQUNyQixDQUFTLEVBQ1QsQ0FBUyxFQUNULE1BQWMsRUFDZCxLQUFhLEVBQ2IsV0FBZ0I7UUFFaEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUM1QixNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDOUIsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzdCLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUM3RCxXQUFXLENBQUMsYUFDZCxFQUFFLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEVBQUUsQ0FBQztZQUNOLEtBQUs7WUFDTCxNQUFNO1lBQ04sRUFBRSxFQUFFLE1BQU07WUFDVixFQUFFLEVBQUUsTUFBTTtZQUNWLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFdBQVc7WUFDbkIsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLEtBQUs7WUFDakIsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxPQUFPLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzNCLE1BQU0sVUFBVSxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFFbEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUN4QyxJQUFJLEVBQUUsT0FBTztZQUNiLEdBQUcsRUFBRSxPQUFPO1lBQ1osUUFBUSxFQUFFLEVBQUU7WUFDWixVQUFVLEVBQUUsT0FBTztZQUNuQixVQUFVLEVBQUUsS0FBSztZQUNqQixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsUUFBUTtZQUNqQixPQUFPLEVBQUUsUUFBUTtZQUNqQixLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixVQUFVLEVBQUUsS0FBSztTQUNsQixDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDcEIsTUFBTSxRQUFRLEdBQW9CLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhELElBQUksVUFBVSxFQUFFO1lBQ2QsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sWUFBWSxHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVqRCxJQUFJLFlBQVksR0FBRyxTQUFTLEdBQUcsU0FBUyxFQUFFO2dCQUN4QyxRQUFRLENBQUMsSUFBSSxDQUNYLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxFQUFFO29CQUMzRCxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsV0FBVyxFQUFFLENBQUM7b0JBQ2QsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsRUFDRixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQ2xCLElBQUksRUFBRSxPQUFPO29CQUNiLEdBQUcsRUFBRSxTQUFTO29CQUNkLEtBQUssRUFBRSxTQUFTO29CQUNoQixNQUFNLEVBQUUsU0FBUztvQkFDakIsS0FBSyxFQUFFLENBQUM7b0JBQ1IsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FDSCxDQUFDO2FBQ0g7WUFFRCxNQUFNLGlCQUFpQixHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN0RCxNQUFNLGVBQWUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBRW5DLElBQUksZUFBZSxHQUFHLGlCQUFpQixHQUFHLFNBQVMsRUFBRTtnQkFDbkQsUUFBUSxDQUFDLElBQUksQ0FDWCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQ2IsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxFQUN0RDtvQkFDRSxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsV0FBVyxFQUFFLENBQUM7b0JBQ2QsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQ0YsRUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQ2xCLElBQUksRUFBRSxPQUFPO29CQUNiLEdBQUcsRUFBRSxlQUFlO29CQUNwQixLQUFLLEVBQUUsU0FBUztvQkFDaEIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLEtBQUssRUFBRSxHQUFHO29CQUNWLElBQUksRUFBRSxVQUFVO29CQUNoQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FDSCxDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sYUFBYSxHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVsRCxJQUFJLGFBQWEsR0FBRyxlQUFlLEdBQUcsU0FBUyxFQUFFO2dCQUMvQyxRQUFRLENBQUMsSUFBSSxDQUNYLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxFQUFFO29CQUNsRSxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsV0FBVyxFQUFFLENBQUM7b0JBQ2QsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsRUFDRixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQ2xCLElBQUksRUFBRSxlQUFlO29CQUNyQixHQUFHLEVBQUUsT0FBTztvQkFDWixLQUFLLEVBQUUsU0FBUztvQkFDaEIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLEtBQUssRUFBRSxDQUFDLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FDSCxDQUFDO2FBQ0g7WUFFRCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyRCxNQUFNLGNBQWMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBRWpDLElBQUksY0FBYyxHQUFHLGdCQUFnQixHQUFHLFNBQVMsRUFBRTtnQkFDakQsUUFBUSxDQUFDLElBQUksQ0FDWCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQ2IsQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE9BQU8sQ0FBQyxFQUNwRDtvQkFDRSxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsV0FBVyxFQUFFLENBQUM7b0JBQ2QsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQ0YsRUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUM7b0JBQ2xCLElBQUksRUFBRSxjQUFjO29CQUNwQixHQUFHLEVBQUUsT0FBTztvQkFDWixLQUFLLEVBQUUsU0FBUztvQkFDaEIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLEtBQUssRUFBRSxFQUFFO29CQUNULElBQUksRUFBRSxVQUFVO29CQUNoQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQ0gsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxNQUFNLGFBQWEsR0FBRzs7YUFFYixDQUFDO1FBRVYsSUFBSSxTQUFTLEdBQVEsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbkUsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FDeEMsU0FBUyxDQUFDLE9BQU8sRUFDakIsU0FBUyxDQUFDLE9BQU8sQ0FDbEIsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDOUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUUvQixPQUFPLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFMUIsSUFBSSxVQUFVLEVBQUU7WUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUNWLElBQUksRUFBRSxXQUFXO2dCQUNqQixHQUFHLEVBQUUsV0FBVztnQkFDaEIsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDVixPQUFPLEVBQUUsUUFBUTtnQkFDakIsT0FBTyxFQUFFLFFBQVE7YUFDbEIsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ1YsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixLQUFLLEVBQUUsQ0FBQztnQkFDUixPQUFPLEVBQUUsUUFBUTtnQkFDakIsT0FBTyxFQUFFLFFBQVE7YUFDbEIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ1YsT0FBTyxFQUFFLEtBQUs7WUFDZCxVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUUsSUFBSTtZQUNiLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRTtnQkFDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFDckMsV0FBVyxDQUFDLFFBQVEsR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUM7WUFDOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUN2QyxJQUFJLEVBQUUsQ0FBQztZQUNQLEdBQUcsRUFBRSxDQUFDO1lBQ04sV0FBVyxFQUFFLElBQUk7WUFDakIsWUFBWSxFQUFFLFVBQVU7WUFDeEIsWUFBWSxFQUFFLENBQUMsVUFBVTtZQUN6QixzQkFBc0I7WUFDdEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztZQUNuQyxPQUFPLEVBQUUsSUFBSTtZQUNiLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztZQUN4QixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUdBLENBQUM7UUFFRixLQUFLLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFDeEMsS0FBSyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7UUFFekIscUNBQXFDO1FBQ3JDLHdDQUF3QztRQUN4QyxvREFBb0Q7UUFDcEQsNEVBQTRFO1FBQzVFLDJDQUEyQztRQUUzQyxtQ0FBbUM7UUFDbkMsc0JBQXNCO1FBQ3RCLGlCQUFpQjtRQUNqQix3QkFBd0I7UUFDeEIseUNBQXlDO1FBQ3pDLG1EQUFtRDtRQUNuRCxXQUFXO1FBQ1gsb0NBQW9DO1FBRXBDLDhDQUE4QztRQUM5QyxzREFBc0Q7UUFFdEQseURBQXlEO1FBQ3pELDJCQUEyQjtRQUMzQiwwQkFBMEI7UUFDMUIsOEJBQThCO1FBQzlCLFVBQVU7UUFFVixtQ0FBbUM7UUFDbkMsdURBQXVEO1FBQ3ZELHNEQUFzRDtRQUN0RCxxQ0FBcUM7UUFDckMsNENBQTRDO1FBRTVDLG9FQUFvRTtRQUNwRSw0REFBNEQ7UUFDNUQsMkRBQTJEO1FBQzNELDBEQUEwRDtRQUUxRCwwQ0FBMEM7UUFDMUMsMkRBQTJEO1FBQzNELDBEQUEwRDtRQUMxRCwrQkFBK0I7UUFFL0Isc0NBQXNDO1FBQ3RDLDREQUE0RDtRQUM1RCxNQUFNO1FBQ04sTUFBTTtRQUVOLDJDQUEyQztRQUMzQyxpQ0FBaUM7UUFDakMsMEJBQTBCO1FBQzFCLFNBQVM7UUFDVCw0REFBNEQ7UUFDNUQsOENBQThDO1FBQzlDLCtDQUErQztRQUMvQyw0Q0FBNEM7UUFDNUMsU0FBUztRQUNULGVBQWU7UUFDZixvQ0FBb0M7UUFDcEMsa0JBQWtCO1FBQ2xCLGtCQUFrQjtRQUNsQixvQ0FBb0M7UUFDcEMsU0FBUztRQUNULFFBQVE7UUFFUiwwQ0FBMEM7UUFDMUMsa0NBQWtDO1FBQ2xDLDhEQUE4RDtRQUM5RCxrQkFBa0I7UUFDbEIseURBQXlEO1FBQ3pELGlDQUFpQztRQUNqQyxPQUFPO1FBRVAsaUVBQWlFO1FBQ2pFLGtEQUFrRDtRQUNsRCwrQkFBK0I7UUFDL0Isb0NBQW9DO1FBQ3BDLHNDQUFzQztRQUN0QyxTQUFTO1FBQ1QsK0JBQStCO1FBQy9CLG9DQUFvQztRQUNwQyxzQ0FBc0M7UUFDdEMsU0FBUztRQUNULDJDQUEyQztRQUMzQywyQ0FBMkM7UUFDM0MseUNBQXlDO1FBQ3pDLFNBQVM7UUFDVCwwQ0FBMEM7UUFDMUMsMENBQTBDO1FBQzFDLHdDQUF3QztRQUN4QyxTQUFTO1FBRVQsOEJBQThCO1FBQzlCLHFCQUFxQjtRQUNyQixXQUFXO1FBQ1gsV0FBVztRQUNYLHVCQUF1QjtRQUN2QixzQkFBc0I7UUFDdEIsZ0JBQWdCO1FBQ2hCLFNBQVM7UUFDVCxNQUFNO1FBQ04sK0JBQStCO1FBQy9CLEtBQUs7UUFFTCxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWxCLGdDQUFnQztRQUNoQyxJQUFLLFdBQW1CLEVBQUUsUUFBUSxFQUFFO1lBQ2xDLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUNoQztZQUFDLE1BQU0sR0FBRTtZQUNWLE9BQVEsV0FBbUIsQ0FBQyxRQUFRLENBQUM7U0FDdEM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUNmLE1BQXFCLEVBQ3JCLENBQVMsRUFDVCxDQUFTLEVBQ1QsTUFBYyxFQUNkLEtBQWEsRUFDYixXQUFnQjtRQUVoQixJQUFJLFlBQWlCLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1lBQzlELFlBQVksR0FBRztnQkFDYixPQUFPLEVBQ0wsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLFVBQVUsSUFBSSxRQUFRO29CQUM1RCxDQUFDLENBQUMsU0FBUztvQkFDWCxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxPQUFPO3dCQUMvQixDQUFDLENBQUMsU0FBUzt3QkFDWCxDQUFDLENBQUMsU0FBUztnQkFDZixJQUFJLEVBQ0YsV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLFVBQVUsSUFBSSxRQUFRO29CQUM1RCxDQUFDLENBQUMsU0FBUztvQkFDWCxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxPQUFPO3dCQUMvQixDQUFDLENBQUMsU0FBUzt3QkFDWCxDQUFDLENBQUMsU0FBUztnQkFDZixNQUFNLEVBQ0osV0FBVyxDQUFDLE1BQU0sSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLFVBQVUsSUFBSSxRQUFRO29CQUM1RCxDQUFDLENBQUMsU0FBUztvQkFDWCxDQUFDLENBQUMsU0FBUzthQUNoQixDQUFDO1NBQ0g7UUFDRCxJQUFJLFdBQVcsQ0FBQyxXQUFXLEtBQUssT0FBTztZQUFFLE9BQU87UUFDaEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLE1BQU0sYUFBYSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztZQUNwQyxJQUFJLEVBQUUsQ0FBQztZQUNQLEdBQUcsRUFBRSxDQUFDO1lBQ04sS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUsTUFBTTtZQUNkLEVBQUUsRUFBRSxNQUFNO1lBQ1YsRUFBRSxFQUFFLE1BQU07WUFDVixNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sSUFBSSxTQUFTO1lBQzFDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLElBQUksRUFBRSxPQUFPO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQztRQUM5QixNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDdEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUVyQyxNQUFNLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDbkMsSUFBSSxFQUFFLElBQUk7WUFDVixHQUFHLEVBQUUsSUFBSTtZQUNULEtBQUssRUFBRSxRQUFRO1lBQ2YsTUFBTSxFQUFFLFNBQVM7WUFDakIsRUFBRSxFQUFFLE1BQU07WUFDVixFQUFFLEVBQUUsTUFBTTtZQUNWLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxJQUFJLFNBQVM7WUFDMUMsV0FBVyxFQUFFLElBQUk7WUFDakIsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDLENBQUM7UUFFSCxNQUFNLGNBQWMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FDakMsS0FBSyxJQUFJLEdBQUcsTUFBTSxJQUFJLElBQUk7WUFDcEIsSUFBSSxHQUFHLFFBQVEsR0FBRyxNQUFNLElBQUksSUFBSTtZQUNoQyxJQUFJLEdBQUcsUUFBUSxJQUFJLElBQUksSUFBSSxJQUFJLEdBQUcsUUFBUSxJQUFJLElBQUksR0FBRyxNQUFNO1lBQzNELElBQUksR0FBRyxRQUFRLElBQUksSUFBSSxHQUFHLGNBQWM7WUFDeEMsSUFBSSxJQUFJLElBQUksR0FBRyxjQUFjO1lBQzdCLElBQUksSUFBSSxJQUFJLEdBQUcsTUFBTTtZQUNyQixJQUFJLElBQUksSUFBSSxJQUFJLElBQUksR0FBRyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQy9DO1lBQ0UsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLElBQUksU0FBUztZQUMxQyxXQUFXLEVBQUUsSUFBSTtZQUNqQixJQUFJLEVBQUUsYUFBYTtTQUNwQixDQUNGLENBQUM7UUFFRixNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQ2hDLFdBQ0UsV0FBVyxDQUFDLDhCQUE4QjtZQUN4QyxDQUFDLENBQUMsV0FBVyxDQUFDLDhCQUE4QjtnQkFDMUMsQ0FBQyxXQUFXLEVBQUUsYUFBYTtvQkFDekIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsYUFBYTtvQkFDdEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNULENBQUMsQ0FBQyxLQUNOLEVBQUUsRUFDRjtZQUNFLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUM7WUFDekIsR0FBRyxFQUFFLElBQUksR0FBRyxjQUFjLEdBQUcsQ0FBQztZQUM5QixRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsS0FBSyxFQUFFLFFBQVE7WUFDZixNQUFNLEVBQUUsY0FBYztZQUN0QixTQUFTLEVBQUUsUUFBUTtTQUNwQixDQUNGLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsY0FBYyxDQUFDO1FBRXpDLE1BQU0sY0FBYyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FDcEMsS0FBSyxJQUFJLElBQUksVUFBVTtRQUNyQixJQUFJLEdBQUcsUUFBUSxJQUFJLFVBQVU7UUFDN0IsSUFBSSxHQUFHLFFBQVEsSUFBSSxVQUFVLEdBQUcsY0FBYyxHQUFHLE1BQU07UUFDdkQsSUFBSSxHQUFHLFFBQVEsSUFBSSxVQUFVLEdBQUcsY0FBYyxJQUM5QyxJQUFJLEdBQUcsUUFBUSxHQUFHLE1BQ3BCLElBQUksVUFBVSxHQUFHLGNBQWM7UUFDN0IsSUFBSSxHQUFHLE1BQU0sSUFBSSxVQUFVLEdBQUcsY0FBYztRQUM1QyxJQUFJLElBQUksVUFBVSxHQUFHLGNBQWMsSUFBSSxJQUFJLElBQzNDLFVBQVUsR0FBRyxjQUFjLEdBQUcsTUFDaEM7UUFDRSxJQUFJLElBQUksVUFBVSxJQUFJLEVBQ3hCO1lBQ0UsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU8sSUFBSSxTQUFTO1lBQzFDLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQ0YsQ0FBQztRQUVGLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLFVBQVUsQ0FBQztRQUVmLE1BQU0sV0FBVyxHQUFHLEdBQUcsV0FBVyxFQUFFLFdBQVcsTUFBTSxXQUFXLEVBQUUsWUFBWSxDQUFDLEtBQUssSUFBSSxXQUFXLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXpILE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUNuQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQzlCLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUM7WUFDekIsR0FBRyxFQUFFLFVBQVUsR0FBRyxjQUFjLEdBQUcsQ0FBQztZQUNwQyxRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsS0FBSyxFQUFFLFFBQVE7U0FDaEIsQ0FBQyxDQUFDO1FBRUwsR0FBRztZQUNELFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN4QyxRQUFRLElBQUksR0FBRyxDQUFDO1NBQ2pCLFFBQVEsVUFBVSxDQUFDLE1BQU0sR0FBRyxjQUFjLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtRQUU3RCxNQUFNLFFBQVEsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQzlCLE1BQU0sU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUVwRCxNQUFNLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDbkMsSUFBSSxFQUFFLElBQUk7WUFDVixHQUFHLEVBQUUsSUFBSTtZQUNULEtBQUssRUFBRSxRQUFRO1lBQ2YsTUFBTSxFQUFFLFNBQVM7WUFDakIsRUFBRSxFQUFFLE1BQU07WUFDVixFQUFFLEVBQUUsTUFBTTtZQUNWLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxJQUFJLFNBQVM7WUFDMUMsV0FBVyxFQUFFLElBQUk7WUFDakIsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBRXZCLE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FDOUIsS0FBSyxJQUFJLEdBQUcsTUFBTSxJQUFJLFNBQVM7WUFDekIsSUFBSSxHQUFHLFFBQVEsR0FBRyxNQUFNLElBQUksU0FBUztZQUNyQyxJQUFJLEdBQUcsUUFBUSxJQUFJLFNBQVMsSUFBSSxJQUFJLEdBQUcsUUFBUSxJQUNuRCxTQUFTLEdBQUcsTUFDZDtZQUNNLElBQUksR0FBRyxRQUFRLElBQUksU0FBUyxHQUFHLFNBQVM7WUFDeEMsSUFBSSxJQUFJLFNBQVMsR0FBRyxTQUFTO1lBQzdCLElBQUksSUFBSSxTQUFTLEdBQUcsTUFBTTtZQUMxQixJQUFJLElBQUksU0FBUyxJQUFJLElBQUksR0FBRyxNQUFNLElBQUksU0FBUyxJQUFJLEVBQ3pEO1lBQ0UsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJO2dCQUN0QixDQUFDLENBQUMsWUFBWSxFQUFFLElBQUk7Z0JBQ3BCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSztvQkFDbkIsQ0FBQyxDQUFDLFNBQVM7b0JBQ1gsQ0FBQyxDQUFDLFNBQVM7WUFDYixNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU87Z0JBQzNCLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztnQkFDdkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLO29CQUNuQixDQUFDLENBQUMsU0FBUztvQkFDWCxDQUFDLENBQUMsU0FBUztZQUNiLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQ0YsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FDckMsR0FBRyxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUMvRDtZQUNFLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUM7WUFDekIsR0FBRyxFQUFFLFNBQVMsR0FBRyxTQUFTLEdBQUcsQ0FBQztZQUM5QixRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDNUMsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsS0FBSyxFQUFFLFFBQVE7WUFDZixNQUFNLEVBQUUsU0FBUztZQUNqQixTQUFTLEVBQUUsUUFBUTtTQUNwQixDQUNGLENBQUM7UUFFRixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsTUFBTSxXQUFXLEdBQUcsU0FBUyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7UUFFOUMsSUFBSSxXQUFXLENBQUMsc0JBQXNCLEtBQUssSUFBSSxFQUFFO1lBQy9DLE1BQU0sSUFBSSxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFFbkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUM1QixJQUFJLEVBQUUsSUFBSTtnQkFDVixHQUFHLEVBQUUsSUFBSTtnQkFDVCxLQUFLLEVBQUUsUUFBUTtnQkFDZixNQUFNLEVBQUUsV0FBVztnQkFDbkIscUJBQXFCO2dCQUNyQixNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU87b0JBQzNCLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztvQkFDdkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLO3dCQUNuQixDQUFDLENBQUMsU0FBUzt3QkFDWCxDQUFDLENBQUMsU0FBUztnQkFDYixXQUFXLEVBQUUsSUFBSTtnQkFDakIsSUFBSSxFQUFFLE9BQU87YUFDZCxDQUFDLENBQUM7WUFFSCxNQUFNLElBQUksR0FBRyxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUU5RCxrRUFBa0U7WUFDbEUsTUFBTSxZQUFZLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNwQyxNQUFNLGFBQWEsR0FBRyxXQUFXLEdBQUcsR0FBRyxDQUFDO1lBQ3hDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztZQUVuQixNQUFNLG9CQUFvQixHQUFHLENBQUMsRUFBVSxFQUFFLEVBQUUsQ0FDMUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDdkIsSUFBSSxFQUFFLElBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQztnQkFDekIsR0FBRyxFQUFFLElBQUksR0FBRyxXQUFXLEdBQUcsQ0FBQztnQkFDM0IsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixLQUFLLEVBQUUsWUFBWTtnQkFDbkIsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osVUFBVSxFQUFFLE9BQU87Z0JBQ25CLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsSUFBSSxFQUFFLE1BQU07Z0JBQ1osVUFBVSxFQUFFLEtBQUs7Z0JBQ2pCLE9BQU8sRUFBRSxLQUFLO2FBQ2YsQ0FBQyxDQUFDO1lBRUwsSUFBSSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsT0FBTyxXQUFXLENBQUMsTUFBTSxHQUFHLGFBQWEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFO2dCQUMzRCxVQUFVLElBQUksR0FBRyxDQUFDO2dCQUNsQixXQUFXLEdBQUcsb0JBQW9CLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDaEQ7WUFFRCxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDbEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUNqQyxJQUFJLEVBQUUsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDO2dCQUN6QixHQUFHLEVBQUUsSUFBSSxHQUFHLFdBQVcsR0FBRyxDQUFDO2dCQUMzQixPQUFPLEVBQUUsUUFBUTtnQkFDakIsT0FBTyxFQUFFLFFBQVE7Z0JBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsS0FBTSxDQUFDLEdBQUcsT0FBTztnQkFDM0QsTUFBTSxFQUFFLFdBQVcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDO2dCQUN6QyxJQUFJLEVBQUUsMEJBQTBCO2dCQUNoQyxVQUFVLEVBQUUsS0FBSztnQkFDakIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsRUFBRSxFQUFFLENBQUM7Z0JBQ0wsRUFBRSxFQUFFLENBQUM7YUFDTixDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDOUM7YUFBTSxJQUFJLFdBQVcsQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLEVBQUU7WUFDdEQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbkMsTUFBTSxJQUFJLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFN0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUM1QixJQUFJLEVBQUUsSUFBSTtvQkFDVixHQUFHLEVBQUUsSUFBSTtvQkFDVCxLQUFLLEVBQUUsUUFBUTtvQkFDZixNQUFNLEVBQUUsU0FBUztvQkFDakIsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPO3dCQUMzQixDQUFDLENBQUMsWUFBWSxFQUFFLE9BQU87d0JBQ3ZCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSzs0QkFDbkIsQ0FBQyxDQUFDLFNBQVM7NEJBQ1gsQ0FBQyxDQUFDLFNBQVM7b0JBQ2IsV0FBVyxFQUFFLElBQUk7b0JBQ2pCLElBQUksRUFBRSxPQUFPO2lCQUNkLENBQUMsQ0FBQztnQkFFSCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVwQixJQUFJLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssTUFBTSxFQUFFO29CQUNyRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQztvQkFDNUQsTUFBTSxVQUFVLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQztvQkFFeEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTt3QkFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7d0JBRXBDLE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FDOUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQ3JDOzRCQUNFLE1BQU0sRUFBRSxNQUFNOzRCQUNkLFdBQVcsRUFBRSxHQUFHOzRCQUNoQixVQUFVLEVBQUUsS0FBSzs0QkFDakIsT0FBTyxFQUFFLEtBQUs7eUJBQ2YsQ0FDRixDQUFDO3dCQUVGLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQ3hCO2lCQUNGO2dCQUVELE1BQU0sSUFBSSxHQUNSLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUVuRSxvREFBb0Q7Z0JBQ3BELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztnQkFDL0QsTUFBTSxhQUFhLEdBQUcsU0FBUyxHQUFHLEdBQUcsQ0FBQztnQkFDdEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDO2dCQUV2QixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQzVCLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7b0JBQ2pCLFFBQVEsRUFBRSxZQUFZO29CQUN0QixVQUFVLEVBQUUsT0FBTztvQkFDbkIsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCLENBQUMsQ0FBQztnQkFFTCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFFcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxFQUFFO29CQUN4QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztvQkFDaEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztvQkFFM0IsT0FBTyxPQUFPLEdBQUcsUUFBUSxFQUFFO3dCQUN6QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO3dCQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUM7d0JBQ25ELFFBQVEsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksRUFBRTs0QkFDeEMsUUFBUSxHQUFHLE1BQU0sQ0FBQzt5QkFDbkI7NkJBQU07NEJBQ0wsT0FBTyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUM7eUJBQ3RCO3FCQUNGO29CQUNELFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7b0JBQ2pFLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ2pDO2dCQUVELE1BQU0sVUFBVSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDakMsSUFBSSxFQUFFLElBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQztvQkFDekIsR0FBRyxFQUFFLElBQUksR0FBRyxTQUFTLEdBQUcsQ0FBQztvQkFDekIsT0FBTyxFQUFFLFFBQVE7b0JBQ2pCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixLQUFLLEVBQUUsUUFBUTtvQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDO29CQUMxRCxJQUFJLEVBQUUsMEJBQTBCO29CQUNoQyxVQUFVLEVBQUUsS0FBSztvQkFDakIsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsRUFBRSxFQUFFLENBQUM7b0JBQ0wsRUFBRSxFQUFFLENBQUM7aUJBQ04sQ0FBQyxDQUFDO2dCQUVILE1BQU0sU0FBUyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQzdDLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUM7b0JBQ3pCLEdBQUcsRUFBRSxJQUFJLEdBQUcsU0FBUyxHQUFHLENBQUM7b0JBQ3pCLE9BQU8sRUFBRSxRQUFRO29CQUNqQixPQUFPLEVBQUUsUUFBUTtvQkFDakIsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFVBQVUsRUFBRSxPQUFPO29CQUNuQixVQUFVLEVBQUUsS0FBSztvQkFDakIsSUFBSSxFQUFFLE1BQU07b0JBQ1osVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLE9BQU8sRUFBRSxLQUFLO2lCQUNmLENBQUMsQ0FBQztnQkFFSCxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQzthQUNyQztTQUNGO2FBQU0sSUFBSSxXQUFXLENBQUMsc0JBQXNCLEtBQUssSUFBSSxFQUFFO1lBQ3RELE1BQU0sZ0JBQWdCLEdBQXVDLEVBQUUsQ0FBQztZQUVoRSxJQUFJLFlBQVksR0FBa0IsSUFBSSxDQUFDO1lBRXZDLEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxDQUFDLFdBQVcsRUFBRTtnQkFDM0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUM7Z0JBQ3JDLElBQUksSUFBSSxLQUFLLFlBQVksRUFBRTtvQkFDekIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbEQsWUFBWSxHQUFHLElBQUksQ0FBQztpQkFDckI7cUJBQU07b0JBQ0wsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ25FO2FBQ0Y7WUFFRCxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQztZQUUxQixLQUFLLE1BQU0sS0FBSyxJQUFJLGdCQUFnQixFQUFFO2dCQUNwQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUM7Z0JBRWhELE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDO2dCQUMxQyxNQUFNLFdBQVcsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDO2dCQUUxQyxNQUFNLFNBQVMsR0FBRyxTQUFTLEdBQUcsU0FBUyxHQUFHLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLFlBQVksR0FBRyxTQUFTLEdBQUcsU0FBUyxHQUFHLFdBQVcsQ0FBQztnQkFFekQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQzlDLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEMsTUFBTSxJQUFJLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUU3RCxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQ2hDLElBQUksRUFBRSxJQUFJO3dCQUNWLEdBQUcsRUFBRSxJQUFJO3dCQUNULEtBQUssRUFBRSxRQUFRO3dCQUNmLE1BQU0sRUFBRSxTQUFTO3dCQUNqQixNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU87NEJBQzNCLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTzs0QkFDdkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLO2dDQUNuQixDQUFDLENBQUMsU0FBUztnQ0FDWCxDQUFDLENBQUMsU0FBUzt3QkFDYixXQUFXLEVBQUUsSUFBSTt3QkFDakIsSUFBSSxFQUFFLE9BQU87cUJBQ2QsQ0FBQyxDQUFDO29CQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBRXhCLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxNQUFNLEVBQUU7d0JBQ2xDLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO3dCQUN6QyxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsZUFBZSxJQUFJLENBQUMsQ0FBQzt3QkFFdkQsTUFBTSxVQUFVLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQzt3QkFDeEMsTUFBTSxhQUFhLEdBQUcsUUFBUSxHQUFHLGVBQWUsQ0FBQzt3QkFFakQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUM7NEJBRXBDLE1BQU0sUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FDOUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQ3JDO2dDQUNFLE1BQU0sRUFBRSxNQUFNO2dDQUNkLFdBQVcsRUFBRSxHQUFHO2dDQUNoQixVQUFVLEVBQUUsS0FBSztnQ0FDakIsT0FBTyxFQUFFLEtBQUs7NkJBQ2YsQ0FDRixDQUFDOzRCQUVGLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7eUJBQ3hCO3dCQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEVBQUU7NEJBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDOzRCQUV2QyxNQUFNLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQ2xDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxFQUN0QztnQ0FDRSxNQUFNLEVBQUUsTUFBTTtnQ0FDZCxXQUFXLEVBQUUsR0FBRztnQ0FDaEIsVUFBVSxFQUFFLEtBQUs7Z0NBQ2pCLE9BQU8sRUFBRSxLQUFLOzZCQUNmLENBQ0YsQ0FBQzs0QkFFRixPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO3lCQUM1QjtxQkFDRjtvQkFFRCxpQkFBaUIsRUFBRSxDQUFDO2lCQUNyQjtnQkFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQ3JDLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEdBQUcsUUFBUSxFQUFFLFlBQVksQ0FBQyxFQUNuRDtvQkFDRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU87d0JBQzNCLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTzt3QkFDdkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLOzRCQUNuQixDQUFDLENBQUMsU0FBUzs0QkFDWCxDQUFDLENBQUMsU0FBUztvQkFDYixXQUFXLEVBQUUsQ0FBQztvQkFDZCxVQUFVLEVBQUUsS0FBSztvQkFDakIsT0FBTyxFQUFFLEtBQUs7aUJBQ2YsQ0FDRixDQUFDO2dCQUVGLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBRTlCLElBQUksV0FBVyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7b0JBQ3RDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztvQkFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTt3QkFDekMsSUFBSSxFQUFFLElBQUksR0FBRyxRQUFRLEdBQUcsWUFBWTt3QkFDcEMsR0FBRyxFQUFFLFlBQVk7d0JBQ2pCLFFBQVEsRUFBRSxDQUFDO3dCQUNYLFVBQVUsRUFBRSxPQUFPO3dCQUNuQixVQUFVLEVBQUUsS0FBSzt3QkFDakIsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsT0FBTyxFQUFFLE9BQU87d0JBQ2hCLE9BQU8sRUFBRSxRQUFRO3dCQUNqQixLQUFLLEVBQUUsUUFBUSxHQUFHLENBQUM7d0JBQ25CLFNBQVMsRUFBRSxPQUFPO3FCQUNuQixDQUFDLENBQUM7b0JBRUgsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDekI7Z0JBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sWUFBWSxHQUFHLFNBQVMsR0FBRyxDQUFDLFlBQVksR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRWhFLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBRWhDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDaEMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO3dCQUNoRCxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzQixDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQzdCLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzVDLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztvQkFDbEIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDO29CQUM5QixNQUFNLFNBQVMsR0FBRyxRQUFRLEdBQUcsR0FBRyxDQUFDO29CQUNqQyxNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUM7b0JBRXpCLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztvQkFDakIsSUFBSSxXQUFXLENBQUM7b0JBRWhCLE1BQU0sYUFBYSxHQUFHLENBQUMsRUFBTyxFQUFFLEVBQUU7d0JBQ2hDLE9BQU8sSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTs0QkFDOUIsUUFBUSxFQUFFLEVBQUU7NEJBQ1osVUFBVSxFQUFFLE9BQU87NEJBQ25CLFVBQVUsRUFBRSxLQUFLOzRCQUNqQixLQUFLLEVBQUUsWUFBWTs0QkFDbkIsU0FBUyxFQUFFLFFBQVE7NEJBQ25CLE9BQU8sRUFBRSxRQUFROzRCQUNqQixPQUFPLEVBQUUsUUFBUTs0QkFDakIsSUFBSSxFQUFFLFNBQVM7NEJBQ2YsVUFBVSxFQUFFLEtBQUs7NEJBQ2pCLE9BQU8sRUFBRSxLQUFLOzRCQUNkLElBQUksRUFBRSxZQUFZOzRCQUNsQixHQUFHLEVBQUUsWUFBWTt5QkFDbEIsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQztvQkFFRixHQUFHO3dCQUNELFdBQVcsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3RDLFFBQVEsSUFBSSxHQUFHLENBQUM7cUJBQ2pCLFFBQVEsV0FBVyxDQUFDLE1BQU0sR0FBRyxhQUFhLElBQUksUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFFN0QsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQztvQkFFM0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO3dCQUN0QyxJQUFJLEVBQUUsWUFBWTt3QkFDbEIsR0FBRyxFQUFFLFlBQVk7d0JBQ2pCLE9BQU8sRUFBRSxRQUFRO3dCQUNqQixPQUFPLEVBQUUsUUFBUTt3QkFDakIsS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLE1BQU0sRUFBRSxVQUFVO3dCQUNsQixJQUFJLEVBQUUsMEJBQTBCO3dCQUNoQyxVQUFVLEVBQUUsS0FBSzt3QkFDakIsT0FBTyxFQUFFLEtBQUs7d0JBQ2QsRUFBRSxFQUFFLENBQUM7d0JBQ0wsRUFBRSxFQUFFLENBQUM7cUJBQ04sQ0FBQyxDQUFDO29CQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLFdBQVcsQ0FBQyxDQUFDO2lCQUM1QzthQUNGO1NBQ0Y7UUFFRCxJQUFJLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO1lBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDcEQsTUFBTSxFQUFFLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFbkMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7Z0JBQ3pDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO2dCQUVyQyxJQUNFLFVBQVUsR0FBRyxXQUFXLEVBQUUsV0FBVyxDQUFDLE1BQU07b0JBQzVDLFFBQVEsR0FBRyxXQUFXLEVBQUUsV0FBVyxDQUFDLE1BQU07b0JBRTFDLFNBQVM7Z0JBRVgsTUFBTSxTQUFTLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDM0QsTUFBTSxlQUFlLEdBQUcsU0FBUyxHQUFHLENBQUMsUUFBUSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFaEUsSUFBSSxVQUFVLEdBQVcsZUFBZSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsR0FBVyxTQUFTLENBQUM7Z0JBRTFCLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtvQkFDdEMsVUFBVSxHQUFHLGVBQWUsR0FBRyxDQUFDLENBQUM7b0JBRWpDLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRTt3QkFDaEIsS0FBSyxLQUFLOzRCQUNSLENBQUMsR0FBRyxTQUFTLENBQUM7NEJBQ2QsTUFBTTt3QkFDUixLQUFLLFFBQVE7NEJBQ1gsQ0FBQyxHQUFHLFNBQVMsR0FBRyxVQUFVLENBQUM7NEJBQzNCLE1BQU07d0JBQ1IsS0FBSyxRQUFROzRCQUNYLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQzs0QkFDL0IsTUFBTTt3QkFDUjs0QkFDRSxDQUFDLEdBQUcsU0FBUyxDQUFDO3FCQUNqQjtpQkFDRjtnQkFFRCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ2IsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDO2dCQUVyQixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtvQkFDdkMsS0FBSyxHQUFHLFFBQVEsQ0FBQztvQkFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQztpQkFDVjtxQkFBTTtvQkFDTCxNQUFNLFlBQVksR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLEVBQUU7d0JBQ2hCLEtBQUssTUFBTTs0QkFDVCxLQUFLLEdBQUcsWUFBWSxDQUFDOzRCQUNyQixDQUFDLEdBQUcsSUFBSSxDQUFDOzRCQUNULE1BQU07d0JBQ1IsS0FBSyxRQUFROzRCQUNYLEtBQUssR0FBRyxZQUFZLENBQUM7NEJBQ3JCLENBQUMsR0FBRyxJQUFJLEdBQUcsWUFBWSxDQUFDOzRCQUN4QixNQUFNO3dCQUNSLEtBQUssT0FBTzs0QkFDVixLQUFLLEdBQUcsWUFBWSxDQUFDOzRCQUNyQixDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUM7NEJBQzVCLE1BQU07d0JBQ1I7NEJBQ0UsS0FBSyxHQUFHLFFBQVEsQ0FBQzs0QkFDakIsQ0FBQyxHQUFHLElBQUksQ0FBQztxQkFDWjtpQkFDRjtnQkFFRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUU7b0JBQ2pCLElBQUk7d0JBQ0YsTUFBTSxPQUFPLEdBQVEsTUFBTSxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDbkQsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQ2hEOzRCQUNFLFdBQVcsRUFBRSxXQUFXO3lCQUN6QixDQUNGLENBQUM7d0JBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQzs0QkFDVixJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDOzRCQUNuQixHQUFHLEVBQUUsQ0FBQyxHQUFHLFVBQVUsR0FBRyxDQUFDOzRCQUN2QixPQUFPLEVBQUUsUUFBUTs0QkFDakIsT0FBTyxFQUFFLFFBQVE7NEJBQ2pCLE1BQU0sRUFBRSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQU07NEJBQzlCLE1BQU0sRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU87NEJBQ3BDLFVBQVUsRUFBRSxLQUFLOzRCQUNqQixPQUFPLEVBQUUsS0FBSzt5QkFDZixDQUFDLENBQUM7d0JBRUgsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDdkI7b0JBQUMsT0FBTyxHQUFHLEVBQUU7d0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO3FCQUNwRTtpQkFDRjtxQkFBTTtvQkFDTCxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7d0JBQzVCLElBQUksRUFBRSxDQUFDO3dCQUNQLEdBQUcsRUFBRSxDQUFDO3dCQUNOLEtBQUs7d0JBQ0wsTUFBTSxFQUFFLFVBQVU7d0JBQ2xCLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxJQUFJLFNBQVM7d0JBQ3ZDLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixPQUFPLEVBQUUsS0FBSztxQkFDZixDQUFDLENBQUM7b0JBRUgsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO29CQUNqQixJQUFJLE1BQU0sQ0FBQztvQkFFWCxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQVUsRUFBRSxFQUFFLENBQ2xDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsRUFBRTt3QkFDbEMsSUFBSSxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQzt3QkFDbkIsR0FBRyxFQUFFLENBQUMsR0FBRyxVQUFVLEdBQUcsQ0FBQzt3QkFDdkIsT0FBTyxFQUFFLFFBQVE7d0JBQ2pCLE9BQU8sRUFBRSxRQUFRO3dCQUNqQixRQUFRLEVBQUUsRUFBRTt3QkFDWixVQUFVLEVBQUUsT0FBTzt3QkFDbkIsVUFBVSxFQUFFLEtBQUs7d0JBQ2pCLElBQUksRUFBRSxPQUFPO3dCQUNiLFNBQVMsRUFBRSxRQUFRO3dCQUNuQixLQUFLLEVBQUUsS0FBSzt3QkFDWixVQUFVLEVBQUUsS0FBSzt3QkFDakIsT0FBTyxFQUFFLEtBQUs7cUJBQ2YsQ0FBQyxDQUFDO29CQUVMLEdBQUc7d0JBQ0QsTUFBTSxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDaEMsUUFBUSxJQUFJLEdBQUcsQ0FBQztxQkFDakIsUUFBUSxNQUFNLENBQUMsTUFBTSxHQUFHLFVBQVUsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO29CQUVyRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDN0I7YUFDRjtTQUNGO1FBRUQsTUFBTSxRQUFRLEdBQUcsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxRCxNQUFNLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQzdCLEtBQUssSUFBSSxJQUFJLFFBQVE7WUFDZixJQUFJLEdBQUcsUUFBUSxJQUFJLFFBQVE7WUFDM0IsSUFBSSxHQUFHLFFBQVEsSUFBSSxRQUFRLEdBQUcsU0FBUyxHQUFHLE1BQU07WUFDaEQsSUFBSSxHQUFHLFFBQVEsSUFBSSxRQUFRLEdBQUcsU0FBUyxJQUMzQyxJQUFJLEdBQUcsUUFBUSxHQUFHLE1BQ3BCLElBQUksUUFBUSxHQUFHLFNBQVM7WUFDbEIsSUFBSSxHQUFHLE1BQU0sSUFBSSxRQUFRLEdBQUcsU0FBUztZQUNyQyxJQUFJLElBQUksUUFBUSxHQUFHLFNBQVMsSUFBSSxJQUFJLElBQ3hDLFFBQVEsR0FBRyxTQUFTLEdBQUcsTUFDekI7WUFDTSxJQUFJLElBQUksUUFBUSxJQUFJLEVBQzFCO1lBQ0UsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJO2dCQUN0QixDQUFDLENBQUMsWUFBWSxFQUFFLElBQUk7Z0JBQ3BCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSztvQkFDbkIsQ0FBQyxDQUFDLFNBQVM7b0JBQ1gsQ0FBQyxDQUFDLFNBQVM7WUFDYixNQUFNLEVBQUUsWUFBWSxFQUFFLE9BQU87Z0JBQzNCLENBQUMsQ0FBQyxZQUFZLEVBQUUsT0FBTztnQkFDdkIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLO29CQUNuQixDQUFDLENBQUMsU0FBUztvQkFDWCxDQUFDLENBQUMsU0FBUztZQUNiLFdBQVcsRUFBRSxJQUFJO1NBQ2xCLENBQ0YsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FDcEMsR0FBRyxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUMvRDtZQUNFLElBQUksRUFBRSxJQUFJLEdBQUcsUUFBUSxHQUFHLENBQUM7WUFDekIsR0FBRyxFQUFFLFFBQVEsR0FBRyxTQUFTLEdBQUcsQ0FBQztZQUM3QixRQUFRLEVBQUUsQ0FBQztZQUNYLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsS0FBSyxFQUFFLFFBQVE7WUFDZixNQUFNLEVBQUUsU0FBUztTQUNsQixDQUNGLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUV2RCxNQUFNLGVBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDdEMsSUFBSSxFQUFFLE9BQU87WUFDYixHQUFHLEVBQUUsT0FBTztZQUNaLEtBQUssRUFBRSxXQUFXO1lBQ2xCLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLEVBQUUsRUFBRSxNQUFNO1lBQ1YsRUFBRSxFQUFFLE1BQU07WUFDVixNQUFNLEVBQUUsYUFBYTtZQUNyQixJQUFJLEVBQUUsYUFBYTtTQUNwQixDQUFDLENBQUM7UUFFSCxNQUFNLGlCQUFpQixHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FDMUMsYUFBYSxXQUFXLENBQUMsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLFdBQVcsQ0FBQyxlQUFlLFdBQVcsV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFDbEk7WUFDRSxJQUFJLEVBQUUsT0FBTyxHQUFHLFdBQVcsR0FBRyxDQUFDO1lBQy9CLEdBQUcsRUFBRSxPQUFPLEdBQUcsWUFBWSxHQUFHLENBQUM7WUFDL0IsUUFBUSxFQUFFLENBQUM7WUFDWCxVQUFVLEVBQUUsT0FBTztZQUNuQixVQUFVLEVBQUUsS0FBSztZQUNqQixJQUFJLEVBQUUsTUFBTTtZQUNaLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLFNBQVMsRUFBRSxRQUFRO1lBQ25CLEtBQUssRUFBRSxXQUFXO1lBQ2xCLE1BQU0sRUFBRSxZQUFZO1NBQ3JCLENBQ0YsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHOzs7O2FBSVQsQ0FBQztRQUVWLElBQUksU0FBUyxHQUFRLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRS9ELElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQ3hDLFNBQVMsQ0FBQyxPQUFPLEVBQ2pCLFNBQVMsQ0FBQyxPQUFPLENBQ2xCLENBQUM7UUFFRixPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ1YsTUFBTSxFQUFFLENBQUM7WUFDVCxNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEVBQUU7WUFDcEIsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFO1lBQ1gsT0FBTyxFQUFFLEtBQUs7WUFDZCxVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUUsSUFBSTtZQUNiLFdBQVcsRUFBRSxTQUFTO1NBQ3ZCLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRTtnQkFDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQzthQUN6QjtZQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFFckMsSUFBSSxDQUFDLGVBQWUsR0FBRztnQkFDckIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXO2dCQUNwQyxTQUFTLEVBQUUsV0FBVyxDQUFDLHVCQUF1QjtnQkFDOUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyw4QkFBOEI7Z0JBQ3hELFNBQVMsRUFBRSxXQUFXLENBQUMsR0FBRzthQUMzQixDQUFDO1lBRUYsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUU7Z0JBQy9DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDNUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQ3JFLENBQUM7Z0JBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQ2hDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUNqRSxDQUFDO2dCQUNGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUM7YUFDcEM7aUJBQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsS0FBSyxPQUFPLEVBQUU7Z0JBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDL0MsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQ2pFLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQzthQUNwQztZQUNELE9BQU8sSUFBSSxFQUFFLG1CQUFtQixFQUFFLFFBQVEsQ0FBQztZQUMzQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQ25DO1lBQ0UsYUFBYTtZQUNiLFlBQVk7WUFDWixXQUFXO1lBQ1gsT0FBTztZQUNQLGNBQWM7WUFDZCxVQUFVO1lBQ1YsWUFBWTtZQUNaLFFBQVE7WUFDUixZQUFZO1lBQ1osR0FBRyxPQUFPO1lBQ1YsT0FBTztZQUNQLFdBQVc7WUFDWCxlQUFlO1lBQ2YsaUJBQWlCO1lBQ2pCLE9BQU87U0FDUixFQUNEO1lBQ0UsSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEVBQUUsQ0FBQztZQUNOLE9BQU8sRUFBRSxJQUFJO1lBQ2IsV0FBVyxFQUFFLFNBQVM7WUFDdEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztZQUNuQyxZQUFZLEVBQUUsSUFBSTtZQUNsQixZQUFZLEVBQUUsSUFBSTtZQUNsQixjQUFjLEVBQUUsSUFBSTtZQUNwQixvREFBb0Q7WUFDcEQscURBQXFEO1lBQ3JELDZHQUE2RztZQUM3RyxnSEFBZ0g7WUFDaEgsS0FBSyxFQUFFLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLElBQUksQ0FBQztTQUNoRCxDQVdGLENBQUM7UUFFRixJQUNFLENBQUMsV0FBVyxFQUFFLEtBQUs7WUFDbkIsQ0FBQyxXQUFXLEVBQUUsY0FBYztZQUM1QixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFDdkI7WUFDQSxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTtnQkFDM0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztZQUNILFlBQVksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFO2dCQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUIsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxZQUFZLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzFDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQkFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDbEM7WUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUVILFlBQVksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUNuRCxZQUFZLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQztRQUM3RCxZQUFZLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQztRQUN2RSxZQUFZLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUM7UUFDekMsWUFBWSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ3ZDLFlBQVksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUMvQyxZQUFZLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7UUFDN0MsWUFBWSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQzdDLFlBQVksQ0FBQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBRWpDLDJDQUEyQztRQUMzQyxvQ0FBb0M7UUFDcEMseURBQXlEO1FBRXpELHdDQUF3QztRQUN4Qyw4Q0FBOEM7UUFDOUMsNkJBQTZCO1FBQzdCLHNDQUFzQztRQUN0QyxvQ0FBb0M7UUFDcEMsTUFBTTtRQUNOLCtDQUErQztRQUMvQyw2Q0FBNkM7UUFDN0MsbUVBQW1FO1FBQ25FLGtFQUFrRTtRQUNsRSxnRUFBZ0U7UUFDaEUsb0NBQW9DO1FBQ3BDLGtDQUFrQztRQUNsQyxNQUFNO1FBRU4sTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV6QixnQ0FBZ0M7UUFDaEMsSUFBSyxXQUFtQixFQUFFLFFBQVEsRUFBRTtZQUNsQyxJQUFJO2dCQUNGLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDaEM7WUFBQyxNQUFNLEdBQUU7WUFDVixPQUFRLFdBQW1CLENBQUMsUUFBUSxDQUFDO1NBQ3RDO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELFlBQVksQ0FDVixNQUFxQixFQUNyQixDQUFTLEVBQ1QsQ0FBUyxFQUNULEtBQWEsRUFDYixNQUFjLEVBQ2QsVUFBa0IsRUFDbEIsV0FBZ0I7UUFFaEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxHQUFHLFVBQVUsQ0FBQztRQUVyQyxNQUFNLFFBQVEsR0FBRztZQUNmLE9BQU87WUFDUCxLQUFLLFNBQVMsSUFBSTtZQUNsQixLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0IsS0FBSyxLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMxQixLQUFLLFNBQVMsSUFBSSxNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUN2QyxLQUFLLFNBQVMsSUFBSSxNQUFNLEVBQUU7WUFDMUIsT0FBTyxNQUFNLEVBQUU7WUFDZixHQUFHO1NBQ0osQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFWixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3RDLElBQUksRUFBRSxTQUFTO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFFSCxNQUFNLGFBQWEsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdkMsVUFBVSxFQUFFLE9BQU87WUFDbkIsVUFBVSxFQUFFLE1BQU07WUFDbEIsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsQ0FBQyxFQUFFO1lBQ1YsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsSUFBSSxFQUFFLEVBQUU7WUFDUixHQUFHLEVBQUUsTUFBTSxHQUFHLENBQUM7WUFDZixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxhQUFhLEVBQUU7WUFDckMsTUFBTSxLQUFLLEdBQUcsYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQztTQUM5QztRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRTtZQUM1QyxJQUFJLEVBQUUsQ0FBQztZQUNQLEdBQUcsRUFBRSxDQUFDO1lBQ04sVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTztZQUNuQyxZQUFZLEVBQUUsSUFBSTtZQUNsQixZQUFZLEVBQUUsSUFBSTtZQUNsQixlQUFlLEVBQUUsSUFBSTtZQUNyQixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7U0FDekIsQ0FHQSxDQUFDO1FBRUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQ3hDLEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO1FBRXpCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQztJQUVELDBCQUEwQixDQUN4QixNQUFxQixFQUNyQixDQUFTLEVBQ1QsQ0FBUyxFQUNULENBQVMsRUFDVCxLQUFhLEVBQ2IsTUFBYyxFQUNkLE9BQVk7UUFFWixNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDM0IsS0FBSztZQUNMLE1BQU07WUFDTixFQUFFLEVBQUUsQ0FBQztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsSUFBSSxFQUFFLFNBQVM7WUFDZixNQUFNLEVBQUUsU0FBUztZQUNqQixXQUFXLEVBQUUsQ0FBQztZQUNkLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1NBQ2xCLENBQUMsQ0FBQztRQUVILE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ25ELEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQztZQUNoQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxPQUFPO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7WUFDakIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsUUFBUSxFQUFFLEtBQUs7WUFDZixlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFMUMsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUMvQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUyxHQUFHLEtBQUssQ0FBQyxDQUFDO1NBQzlDO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQzNDLElBQUksRUFBRSxDQUFDO1lBQ1AsR0FBRyxFQUFFLENBQUM7WUFDTixLQUFLLEVBQUUsQ0FBQztZQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU87WUFDbkMsT0FBTyxFQUFFLFFBQVE7WUFDakIsT0FBTyxFQUFFLFFBQVE7U0FDbEIsQ0FHQSxDQUFDO1FBRUYsS0FBSyxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUM7UUFDekIsS0FBSyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7UUFFckIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVsQixJQUFLLE9BQWUsRUFBRSxRQUFRLEVBQUU7WUFDOUIsSUFBSTtnQkFDRixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2FBQ2hDO1lBQUMsTUFBTSxHQUFFO1lBQ1YsT0FBUSxPQUFlLENBQUMsUUFBUSxDQUFDO1NBQ2xDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUM5RCxDQUFDO1FBQ0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQzlELENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekQsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3pCLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWE7WUFDdkIsS0FBSyxFQUFFLEtBQUs7WUFDWixNQUFNLEVBQUUsTUFBTTtZQUNkLElBQUksRUFBRSxTQUFTO1lBQ2YsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsaUNBQWlDO1FBQy9CLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFFckMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hELE1BQU0sU0FBUyxHQUFHLE9BQW9CLENBQUM7WUFDdkMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQWMsQ0FBQztZQUU3RCxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDbkQsTUFBTSxZQUFZLEdBQUcsY0FBMkIsQ0FBQztnQkFDakQsTUFBTSxHQUFHLEdBQUcsWUFBWTtxQkFDckIsR0FBRyxDQUFDLGlCQUFpQixDQUFDO29CQUN2QixFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDNUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLENBQUM7Z0JBRUwsSUFBSSxHQUFHO29CQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBYyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQy9ELE1BQU0sWUFBWSxHQUFHLGNBQTJCLENBQUM7WUFDakQsTUFBTSxHQUFHLEdBQUcsWUFBWTtpQkFDckIsR0FBRyxDQUFDLGlCQUFpQixDQUFDO2dCQUN2QixFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDNUMsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxDQUFDO1lBRUwsSUFBSSxHQUFHO2dCQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsK0JBQStCO1FBQzdCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQywwQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFFckMsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdDLE1BQU0sU0FBUyxHQUFHLE9BQW9CLENBQUM7WUFDdkMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQWMsQ0FBQztZQUUvRCxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsRUFBRTtnQkFDN0MsTUFBTSxZQUFZLEdBQUcsSUFBaUIsQ0FBQztnQkFDdkMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQWdCLENBQUM7Z0JBQzVELE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQWdCLENBQUM7Z0JBRXhFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDaEQsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUNWLEVBQUUsQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLO29CQUN0RCxFQUFFLENBQUMsYUFBYSxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsS0FBSyxDQUM3RCxDQUFDO2dCQUNGLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLFVBQVU7b0JBQUUsT0FBTztnQkFFeEIsK0JBQStCO2dCQUMvQixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsWUFBWTtxQkFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzlCLFNBQVMsQ0FBQyxDQUFDLFFBQWdCLEVBQUUsRUFBRTtvQkFDOUIsOEZBQThGO29CQUM5RixVQUFVLENBQUMsV0FBVzt3QkFDcEIsUUFBUSxLQUFLLFFBQVE7NEJBQ25CLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLElBQUksUUFBUTs0QkFDdEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztvQkFDZixJQUFJLENBQUMsNkJBQTZCLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ2pELENBQUMsQ0FBQyxDQUFDO2dCQUVMLDJFQUEyRTtnQkFDM0UsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsWUFBWTtxQkFDN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzlCLFNBQVMsQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFO29CQUM1QixJQUFJLFdBQVcsQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO3dCQUNsQyxVQUFVLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQzt3QkFDaEMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUNoRDtnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFFTCxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsZ0RBQWdEO1FBQ2hELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzVELE1BQU0sWUFBWSxHQUFHLElBQWlCLENBQUM7WUFDdkMsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQWdCLENBQUM7WUFDNUQsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBZ0IsQ0FBQztZQUN4RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxVQUFVO2dCQUFFLE9BQU87WUFFeEIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFlBQVk7aUJBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxRQUFnQixFQUFFLEVBQUU7Z0JBQzlCLFVBQVUsQ0FBQyxXQUFXO29CQUNwQixRQUFRLEtBQUssUUFBUTt3QkFDbkIsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEtBQUssSUFBSSxRQUFRO3dCQUN0QyxDQUFDLENBQUMsUUFBUSxDQUFDO2dCQUNmLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUVMLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFlBQVk7aUJBQzdDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtnQkFDNUIsSUFBSSxXQUFXLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDbEMsVUFBVSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBQ2hDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDaEQ7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVMLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDZCQUE2QixDQUFDLFVBQWU7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN6QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTTthQUN0QixVQUFVLEVBQUU7YUFDWixJQUFJLENBQ0gsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsRUFBRSxPQUFPLEtBQUssUUFBUSxJQUFJLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQyxHQUFHLENBQ3pELENBQUM7UUFFWCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFDbkIsS0FBSyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7UUFFeEIsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM3QyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxTQUFTLENBQ1osQ0FBQztRQUU5QyxJQUFJLE9BQU8sRUFBRTtZQUNWLE9BQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFxQixFQUFFLFFBQWdCO1FBQ2xELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRW5ELGlFQUFpRTtRQUNqRSxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVsQyxxRUFBcUU7UUFDckUsTUFBTSxNQUFNLEdBQVEsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM3QixNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixPQUFPO1NBQ1I7UUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFbkIsOERBQThEO1FBQzlELE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxNQUFXLEVBQUUsbUJBQTRCLEtBQUs7UUFDdkUsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsZUFBZSxHQUFHO2dCQUNyQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7Z0JBQy9CLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztnQkFDM0IsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO2dCQUNqQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7Z0JBQzNCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztnQkFDbkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO2dCQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7YUFDMUIsQ0FBQztZQUVGLElBQUksQ0FBQyxxQkFBcUIsQ0FDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQzlCLGdCQUFnQixDQUNqQixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQscUJBQXFCLENBQUMsU0FBaUIsRUFBRSxtQkFBNEIsS0FBSztRQUN4RSxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FDaEUsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUN4QyxDQUFDO1FBRUYsSUFBSSxzQkFBc0IsRUFBRTtZQUMxQixJQUFJLENBQUMsdUJBQXVCLEdBQUc7Z0JBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWM7Z0JBQ2pELGVBQWUsRUFBRTtvQkFDZixHQUFHLHNCQUFzQjtvQkFDekIsV0FBVyxFQUFFLGVBQWUsQ0FDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FDakU7aUJBQ0Y7Z0JBQ0QsY0FBYyxFQUFFLGdCQUFnQjthQUNqQyxDQUFDO1NBQ0g7YUFBTTtZQUNMLElBQUksQ0FBQyx1QkFBdUIsR0FBRztnQkFDN0IsY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLGVBQWUsRUFBRTtvQkFDZixTQUFTLEVBQUUsU0FBUztvQkFDcEIsV0FBVyxFQUFFLGVBQWUsQ0FDMUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FDakU7b0JBQ0QsYUFBYSxFQUFFLElBQUk7aUJBQ3BCO2dCQUNELGNBQWMsRUFBRSxnQkFBZ0I7YUFDakMsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUI7UUFDdkIsTUFBTSxPQUFPLEdBQUc7WUFDZCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDeEIsQ0FBQztRQUVGLElBQUk7WUFDRixNQUFNLEdBQUcsR0FBUSxNQUFNLGNBQWMsQ0FDbkMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQ3pDLENBQUM7WUFDRixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDO1lBRXZCLElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7b0JBQzFDLE9BQU87d0JBQ0wsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHO3dCQUNWLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUU7d0JBQ3pFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7cUJBQzdDLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzNEO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQzlCLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7U0FDdEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFjLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFjLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQUkseUJBQXlCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQWMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQzFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxLQUFLLFVBQVUsQ0FDN0MsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxTQUFpQjtRQUNwQyxPQUFRLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBZTthQUMvQyxFQUFFLENBQUMsU0FBUyxDQUFDO2FBQ2IsR0FBRyxDQUFDLGVBQWUsQ0FBYyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBaUI7UUFDL0IsT0FBUSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQWU7YUFDL0MsRUFBRSxDQUFDLFNBQVMsQ0FBQzthQUNiLEdBQUcsQ0FBQyxVQUFVLENBQWMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUF1QjtRQUNuRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN6QixXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLGFBQWEsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDekUsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQixhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQ2pDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUF1QjtRQUNyRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN6QixXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLGVBQWUsRUFBRTtnQkFDZixlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDdEMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3RCO1lBQ0QsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3QyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBaUIsRUFBRSxTQUFvQztRQUNsRSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDckMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztRQUNyQixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsK0JBQStCO1FBQ3RFLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyw2QkFBNkI7UUFFbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFFNUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUM5QixNQUFNLENBQUMsSUFBSSxDQUNULENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsYUFBYSxLQUFLLEdBQUcsQ0FDbkUsQ0FBQztRQUVKLE1BQU0sTUFBTSxHQUFHLFNBQVMsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbEQsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBRXpFLGlEQUFpRDtRQUNqRCx1Q0FBdUM7UUFDdkMsaURBQWlEO1FBQ2pELElBQUksaUJBQWlCLEtBQUssQ0FBQyxJQUFJLGlCQUFpQixLQUFLLENBQUMsRUFBRTtZQUN0RCxJQUFJLEVBQUU7Z0JBQUUsRUFBRSxDQUFDLFFBQVEsSUFBSSxNQUFNLEdBQUcsWUFBWSxDQUFDO1lBQzdDLElBQUksRUFBRTtnQkFBRSxFQUFFLENBQUMsUUFBUSxJQUFJLE1BQU0sR0FBRyxZQUFZLENBQUM7WUFFN0MsSUFBSSxFQUFFLEVBQUU7Z0JBQ04sRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtvQkFDOUIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7d0JBQ25CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsWUFBWSxDQUFDO2dCQUN6RCxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxpREFBaUQ7UUFDakQsOENBQThDO1FBQzlDLGlEQUFpRDtRQUNqRCxJQUNFLGlCQUFpQixLQUFLLENBQUM7WUFDdkIsaUJBQWlCLEtBQUssQ0FBQztZQUN2QixpQkFBaUIsS0FBSyxDQUFDLEVBQ3ZCO1lBQ0EsSUFBSSxFQUFFO2dCQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksTUFBTSxHQUFHLGFBQWEsQ0FBQztZQUU5QyxJQUFJLEVBQUUsRUFBRTtnQkFDTixFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQU8sRUFBRSxFQUFFO29CQUM5QixFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxNQUFNLFNBQVMsR0FBRyxRQUFRLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQztZQUMxQyxNQUFNLFVBQVUsR0FBRyxFQUFFLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxFQUFFLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQztZQUVyQyw2Q0FBNkM7WUFDN0MsSUFBSSxDQUFDLGlCQUFpQixLQUFLLENBQUMsSUFBSSxpQkFBaUIsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQzlELEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsTUFBTSxHQUFHLGFBQWEsQ0FBQyxDQUFDO2FBQ3BFO1lBRUQsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLElBQUksaUJBQWlCLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM5RCxFQUFFLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQztnQkFFbkUsSUFBSSxFQUFFLEVBQUU7b0JBQ04sRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTt3QkFDOUIsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7NEJBQ25CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsYUFBYSxDQUFDO29CQUMxRCxDQUFDLENBQUMsQ0FBQztpQkFDSjthQUNGO1lBRUQsbURBQW1EO1lBQ25ELE1BQU0sU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksU0FBUyxHQUFHLEVBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQzVCLElBQUksRUFBRSxFQUFFO29CQUNOLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FDM0IsRUFBRSxDQUFDLFFBQVEsR0FBRyxDQUFDLFNBQVMsR0FBRyxFQUFHLENBQUMsUUFBUSxDQUFDLENBQ3pDLENBQUM7aUJBQ0g7YUFDRjtTQUNGO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsYUFBYSxDQUNYLFdBQTZCLEVBQzdCLFlBQW9CLEVBQ3BCLFNBQWtCO1FBRWxCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUVyQyxJQUFJLFdBQVcsS0FBSyxNQUFNLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFeEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN2QztTQUNGO2FBQU0sSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFakQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7U0FDRjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELGtCQUFrQixDQUNoQixXQUE2QixFQUM3QixZQUFvQixFQUNwQixTQUFrQjtRQUVsQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFckMsSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFO1lBQzFCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFN0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEQsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1QztTQUNGO2FBQU0sSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFO1lBQ2xDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFdEQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUU7Z0JBQy9DLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7U0FDRjtRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7SUFDbEMsQ0FBQztJQUVELHFCQUFxQixDQUNuQixRQUFnQixFQUNoQixXQUE2QixFQUM3QixZQUFvQixFQUNwQixTQUFrQjtRQUVsQixJQUFJLENBQUMsVUFBVTthQUNaLGtCQUFrQixDQUFDLFFBQVEsQ0FBQzthQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUM7WUFDVCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFO29CQUMxQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUM5QixNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO29CQUMvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO3dCQUNyQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7d0JBQ3JDLGVBQWUsRUFBRSxZQUFZLENBQUMsR0FBRzt3QkFDakMsR0FBRyxFQUFFLFNBQVM7cUJBQ2YsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxDQUFDLENBQUMsVUFBVSxDQUN6QyxZQUFZLEVBQ1osWUFBWSxDQUNiLENBQUM7b0JBQ0YsTUFBTSxXQUFXLEdBQUc7d0JBQ2xCLEdBQUcsWUFBWTt3QkFDZixlQUFlLEVBQUUsWUFBWSxDQUFDLEdBQUc7d0JBQ2pDLEdBQUcsRUFBRSxTQUFTO3FCQUNmLENBQUM7b0JBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFVLEdBQUcsQ0FBQyxDQUFFLENBQUM7b0JBQ3RELE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUc7d0JBQy9CLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7d0JBQ2pDLEdBQUcsV0FBVzt3QkFDZCxjQUFjLEVBQUUsSUFBSTtxQkFDckIsQ0FBQztpQkFDSDtxQkFBTSxJQUFJLFdBQVcsS0FBSyxPQUFPLEVBQUU7b0JBQ2xDLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQzlCLE1BQU0sU0FBUyxHQUFHLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7b0JBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7d0JBQ3JDLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVzt3QkFDckMsZUFBZSxFQUFFLFlBQVksQ0FBQyxHQUFHO3dCQUNqQyxHQUFHLEVBQUUsU0FBUztxQkFDZixDQUFDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFlLENBQUMsVUFBVSxDQUM1RCxZQUFZLEVBQ1osWUFBWSxDQUNiLENBQUM7b0JBQ0YsTUFBTSxXQUFXLEdBQUc7d0JBQ2xCLEdBQUcsWUFBWTt3QkFDZixlQUFlLEVBQUUsWUFBWSxDQUFDLEdBQUc7d0JBQ2pDLEdBQUcsRUFBRSxTQUFTO3FCQUNmLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUc7d0JBQzNDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO3dCQUM3QyxHQUFHLFdBQVc7d0JBQ2QsY0FBYyxFQUFFLElBQUk7cUJBQ3JCLENBQUM7aUJBQ0g7Z0JBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxRQUFRLENBQUM7WUFDbEMsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUMvRCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU0sQ0FDSixLQUFVLEVBQ1Ysb0JBQXNDLEVBQ3RDLHVCQUFnQztRQUVoQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUNyQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQztRQUNqRCxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixLQUFLLE9BQU8sQ0FBQztRQUU1RCxNQUFNLGVBQWUsR0FBYyxhQUFhO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CO1lBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV6QyxNQUFNLG9CQUFvQixHQUFjLGtCQUFrQjtZQUN4RCxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQjtZQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxvQkFBOEIsQ0FBQyxDQUFDO1FBRXpELE1BQU0sY0FBYyxHQUFHLGFBQWE7WUFDbEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYTtZQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQ2pFLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUV0QixNQUFNLG1CQUFtQixHQUFHLGtCQUFrQjtZQUM1QyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO1lBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLENBQUMsWUFBWTtpQkFDZCxFQUFFLENBQUMsb0JBQThCLENBQUM7aUJBQ2xDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLENBQy9CLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUV0QixNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUM1QyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQ2YsT0FBTyxDQUFDLEdBQUcsS0FBSyxlQUFlLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUMzRSxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQ2pCLHVCQUF1QixLQUFLLFNBQVM7WUFDbkMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FDM0IsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUNmLE9BQU8sQ0FBQyxHQUFHO2dCQUNYLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUM7b0JBQzFELEVBQUUsS0FBSyxDQUNaO1lBQ0gsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQztRQUVsQyxNQUFNLFNBQVMsR0FBRztZQUNoQixhQUFhLEVBQUUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWE7WUFDMUQsOEJBQThCLEVBQzVCLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyw4QkFBOEI7U0FDL0QsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLGFBQWEsRUFBRSxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxhQUFhO1lBQy9ELDhCQUE4QixFQUM1QixtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyw4QkFBOEI7U0FDcEUsQ0FBQztRQUVGLElBQUksY0FBYyxLQUFLLG1CQUFtQixFQUFFO1lBQzFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWE7Z0JBQzlDLFNBQVMsQ0FBQyxhQUFhLENBQUM7WUFDMUIsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUMsOEJBQThCO2dCQUMvRCxTQUFTLENBQUMsOEJBQThCLENBQUM7WUFDM0MsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3RFLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyw4QkFBOEI7Z0JBQzFELFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQztTQUM1QzthQUFNO1lBQ0wsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3RFLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyw4QkFBOEI7Z0JBQzFELFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQztTQUM1QztRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsZUFBZSxDQUFDLFFBQVEsRUFDeEIsb0JBQW9CLENBQUMsUUFBUSxFQUM3QixJQUFJLENBQUMsWUFBWSxFQUNqQixhQUFhLENBQ2QsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsQ0FDcEIsY0FBYyxFQUNkLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsYUFBYSxDQUNkLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUV6QixNQUFNLGdCQUFnQixHQUFHO1lBQ3ZCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBa0I7U0FDakIsQ0FBQztRQUVuQixJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRTFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ3BDLE1BQU0sRUFBRSxLQUFLO1lBQ2IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztZQUNmLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztZQUNuQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFbkQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLE1BQU0sQ0FBQztRQUM5RSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFVBQWU7UUFDeEMsSUFBSTtZQUNGLElBQUksYUFBYSxHQUFRO2dCQUN2QixHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhO3FCQUM3QixPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7cUJBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQztxQkFDcEMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDO2dCQUN0RSxVQUFVLEVBQUUsVUFBVSxDQUFDLE1BQU07YUFDOUIsQ0FBQztZQUVGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUM7WUFFaEQsSUFDRSxVQUFVLENBQUMsTUFBTSxLQUFLLFVBQVU7Z0JBQ2hDLFVBQVUsQ0FBQyxNQUFNLEtBQUssWUFBWSxFQUNsQztnQkFDQSxhQUFhLEdBQUc7b0JBQ2QsR0FBRyxhQUFhO29CQUNoQixHQUFHLFVBQVUsQ0FBQyxXQUFXO29CQUN6QixNQUFNLEVBQUU7d0JBQ04sR0FBRyxhQUFhLENBQUMsTUFBTTt3QkFDdkIsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU07cUJBQ2pDO2lCQUNGLENBQUM7Z0JBRUYsSUFDRSxVQUFVLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLO29CQUNuQyxFQUFFLFdBQVcsRUFBRTtvQkFDZixFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUNyQztvQkFDQSxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztpQkFDcEU7YUFDRjtZQUVELElBQ0UsVUFBVSxDQUFDLE1BQU0sS0FBSyxZQUFZO2dCQUNsQyxVQUFVLENBQUMsTUFBTSxLQUFLLGVBQWUsRUFDckM7Z0JBQ0EsSUFBSSxDQUFDLG1CQUFtQixHQUFHO29CQUN6QixHQUFHLGFBQWE7b0JBQ2hCLFFBQVEsRUFBRSxTQUFTO2lCQUNwQixDQUFDO2dCQUVGLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztnQkFFNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsRUFBRSxHQUFHLElBQUksZUFBZSxDQUFDO29CQUM3RCxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUMxQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBRVIsT0FBTzthQUNSO1lBRUQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUVyQyxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUN4RCxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBRXRCLE1BQU0sT0FBTyxHQUFHO2dCQUNkLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDakIsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtnQkFDckIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2dCQUM3QixRQUFRLEVBQUUsVUFBVSxDQUFDLE9BQU87Z0JBQzVCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtnQkFDN0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO2dCQUMzQixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87YUFDNUIsQ0FBQztZQUVGLE1BQU0sR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxDQUN2RCxDQUFDO1lBRUYsSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLE9BQU87Z0JBQUUsT0FBTztZQUUvQyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssV0FBVyxFQUFFO2dCQUNyQyxhQUFhLEdBQUc7b0JBQ2QsR0FBRyxhQUFhO29CQUNoQixHQUFHLFVBQVUsQ0FBQyxXQUFXO2lCQUMxQixDQUFDO2FBQ0g7WUFFRCxNQUFNLG9CQUFvQixHQUFHO2dCQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTO2dCQUN6QyxJQUFJLEVBQUUsYUFBYTtnQkFDbkIsUUFBUSxFQUFFLFNBQVM7YUFDcEIsQ0FBQztZQUVGLE1BQU0sY0FBYyxDQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQ3pELENBQUM7WUFFRixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakQ7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLCtCQUErQixDQUFDLENBQUM7WUFDakUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUN4RDtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUF1QixFQUFFLFlBQTBCO1FBQ25FLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFLLEdBQUcsU0FBUyxDQUFDLElBQUssQ0FBQztRQUNyRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBSSxHQUFHLFNBQVMsQ0FBQyxHQUFJLENBQUM7UUFFbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztZQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELHFCQUFxQixDQUNuQixHQUFrQixFQUNsQixHQUFpRTtRQUVqRSxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDbkMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRVgsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDeEIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUMzQjtRQUNELElBQUksSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3RCLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7U0FDekI7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFDakQsRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFO1lBQ2pELEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0RDtRQUVELElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUssR0FBRyxFQUFFLENBQUM7WUFDMUIsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBSSxHQUFHLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDakI7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxRQUF1QjtRQUM3QyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7UUFFbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU07YUFDeEIsVUFBVSxFQUFFO2FBQ1osTUFBTSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUUzRCxNQUFNLFVBQVUsR0FBRyxDQUNqQixDQUErRCxFQUMvRCxDQUFTLEVBQ1QsRUFBRTtZQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdDLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUN0QyxDQUFDLENBQUM7UUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRTtZQUN4QyxPQUFPLENBQUMsQ0FDTixDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUk7Z0JBQzFCLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsSUFBSTtnQkFDMUIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHO2dCQUN6QixDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FDMUIsQ0FBQztRQUNKLENBQUMsQ0FBQztRQUVGLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXRELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQy9CLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMzQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsU0FBaUI7UUFDMUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM1QyxDQUFDLEVBQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQ3pFLENBQUM7UUFDRixJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUNsQjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7U0FDaEI7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxVQUFVLENBQUMsU0FBaUI7UUFDMUIsTUFBTSxPQUFPLEdBQUc7WUFDZCxXQUFXLEVBQUUsTUFBTTtZQUNuQixRQUFRLEVBQUUsRUFBRTtZQUNaLElBQUksRUFBRSxJQUFJO1lBQ1YsU0FBUyxFQUFFLE9BQU87WUFDbEIsS0FBSyxFQUFFLENBQUM7WUFDUixhQUFhLEVBQUUsU0FBUyxHQUFHLENBQUM7WUFDNUIsZ0JBQWdCLEVBQUU7Z0JBQ2hCLENBQUMsRUFBRSxDQUFDO2dCQUNKLENBQUMsRUFBRSxDQUFDO2dCQUNKLElBQUksRUFBRSxJQUFJO2FBQ1g7WUFDRCxRQUFRLEVBQUUsRUFBRTtZQUNaLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FDeEQsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUNaLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssTUFBTSxDQUNsRSxDQUFDO1FBRUYsbUNBQW1DO1FBQ25DLFFBQVE7UUFDUixzREFBc0Q7UUFDdEQsdURBQXVEO1FBQ3ZELHVFQUF1RTtRQUN2RSw2Q0FBNkM7UUFDN0Msb0RBQW9EO1FBQ3BELG9EQUFvRDtRQUNwRCxnRUFBZ0U7UUFDaEUsK0RBQStEO1FBQy9ELGFBQWE7UUFFYixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYztRQUNaLE1BQU0sU0FBUyxHQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FDakMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEtBQUssVUFBVSxDQUM3QyxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFFakIsTUFBTSxXQUFXLEdBQUc7WUFDbEIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsUUFBUSxFQUFFLENBQUM7WUFDWCxJQUFJLEVBQUUsSUFBSTtZQUNWLFNBQVMsRUFBRSxJQUFJO1lBQ2YsS0FBSyxFQUFFLENBQUM7WUFDUixhQUFhLEVBQUUsU0FBUyxHQUFHLENBQUM7WUFDNUIsZ0JBQWdCLEVBQUU7Z0JBQ2hCLENBQUMsRUFBRSxDQUFDO2dCQUNKLENBQUMsRUFBRSxDQUFDO2dCQUNKLElBQUksRUFBRSxJQUFJO2FBQ1g7WUFDRCxRQUFRLEVBQUUsRUFBRTtZQUNaLGFBQWEsRUFBRSxFQUFFO1NBQ2xCLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFdBQTZCLEVBQUUsU0FBa0I7UUFDbkUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQ3JDLE1BQU0sUUFBUSxHQUFRLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0UsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDckMsV0FBVyxFQUFFLFlBQVksQ0FBQyxXQUFXO1lBQ3JDLGVBQWUsRUFBRSxZQUFZLENBQUMsR0FBRztZQUNqQyxHQUFHLEVBQUUsU0FBUztTQUNmLENBQUMsQ0FBQztRQUVILE1BQU0sV0FBVyxHQUFHO1lBQ2xCLEdBQUcsWUFBWTtZQUNmLGVBQWUsRUFBRSxZQUFZLENBQUMsR0FBRztZQUNqQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQzVDLEdBQUcsRUFBRSxTQUFTO1lBQ2QsY0FBYyxFQUFFLElBQUk7WUFDcEIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRUYsSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFO1lBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXRELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQ3BDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ3BDLENBQUM7WUFDRixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUVwQyxJQUFJLFFBQVEsRUFBRTtnQkFDWixNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztnQkFFdEMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sUUFBUSxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBRTVDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFNUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUVwRCxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRW5ELFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO2dCQUMzQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztnQkFDM0MsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxRQUFRLENBQUM7YUFDL0M7WUFFQSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFlLENBQUMsSUFBSSxDQUNsRSxZQUFZLENBQ2IsQ0FBQztZQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbEU7YUFBTSxJQUFJLFdBQVcsS0FBSyxPQUFPLEVBQUU7WUFDbEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDbEMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFDcEMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FDcEMsQ0FBQztZQUVGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ25DLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQ3JDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQ3JDLENBQUM7WUFFRixpQ0FBaUM7WUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUN4QyxjQUFjLEVBQ2QsZUFBZSxDQUNoQixDQUFDO1lBRUYsSUFBSSxTQUFTLEVBQUU7Z0JBQ2Isb0RBQW9EO2dCQUNwRCxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDcEUsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDckU7aUJBQU07Z0JBQ0wsV0FBVztnQkFDWCxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDcEM7WUFFQSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2hEO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsT0FBeUIsRUFBRSxTQUFrQjtRQUMvRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtZQUFFLE9BQU87UUFFckMsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLEVBQUUsT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDakMsV0FBVyxFQUFFLGFBQWE7WUFDMUIsV0FBVyxFQUFFLE9BQU87WUFDcEIsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQ3RELG1CQUFtQixFQUFFO2dCQUNuQixLQUFLLEVBQUUsQ0FBQztnQkFDUixJQUFJLEVBQUUsSUFBSTthQUNYO1lBQ0Qsa0JBQWtCLEVBQUU7Z0JBQ2xCLEtBQUssRUFBRSxDQUFDO2dCQUNSLElBQUksRUFBRSxJQUFJO2FBQ1g7U0FDRixDQUFDO1FBRUYsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFFdkMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FDckIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFDakMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FDakMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQ3JCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQ2hDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQ2hDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNsQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLGFBQWEsQ0FBQztZQUM1QyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7U0FDakIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxPQUFPLElBQUksTUFBTSxFQUFFO1lBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksUUFBUSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO2dCQUU1QyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDbEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQztnQkFDbkIsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sU0FBUyxHQUFHLEVBQUUsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFbkQsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLENBQUMsR0FBRyxRQUFRLENBQUM7YUFDZDtZQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNyQix1QkFBdUIsRUFBRSxTQUFVLEdBQUcsQ0FBQztnQkFDdkMscUJBQXFCLEVBQUUsTUFBTTthQUM5QixDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxTQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFlLENBQUMsSUFBSSxDQUN2RSxhQUFhLENBQ2QsQ0FBQztZQUNGLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDN0Q7YUFBTSxJQUFJLE9BQU8sS0FBSyxPQUFPLEVBQUU7WUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQWUsQ0FBQyxJQUFJLENBQzNELGFBQWEsQ0FDZCxDQUFDO1lBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDbkU7UUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQy9DLElBQUksQ0FBQyxNQUFNLEVBQ1gsQ0FBQyxFQUNELENBQUMsRUFDRCxDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsRUFDRCxPQUFPLENBQ1IsQ0FBQztRQUVGLGNBQWM7UUFDZCxJQUFJO1lBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ2hDO1FBQUMsTUFBTSxHQUFFO1FBRVYsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELG1CQUFtQixDQUFDLGFBQXFCLEVBQUUsY0FBc0I7UUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUVqQyx1QkFBdUI7UUFDdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMvQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRS9DLDhCQUE4QjtRQUM5QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxpQkFBaUI7UUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV4RCxrQkFBa0I7UUFDbEIsS0FBSyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFBRSxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ3ZELEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsRUFBRTtnQkFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFFcEMsTUFBTSxDQUFDLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLENBQUMsR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBRTNDLE1BQU0sUUFBUSxHQUFHO29CQUNmLElBQUksRUFBRSxDQUFDO29CQUNQLEdBQUcsRUFBRSxDQUFDO29CQUNOLEtBQUssRUFBRSxhQUFhO29CQUNwQixNQUFNLEVBQUUsY0FBYztpQkFDdkIsQ0FBQztnQkFFRixrQkFBa0I7Z0JBQ2xCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDdEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUNuQyxPQUFPLENBQUMsQ0FDTixJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEtBQUs7d0JBQzFDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSTt3QkFDdEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxNQUFNO3dCQUN6QyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FDdEMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsVUFBVSxFQUFFO29CQUNmLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7aUJBQ2pCO2FBQ0Y7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDLENBQUMsc0JBQXNCO0lBQ3JDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDakQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLEVBQVMsQ0FBQztnQkFDckQsSUFBSSxNQUFNLElBQUssTUFBYyxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUU7b0JBQ3BELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztpQkFDdkI7Z0JBRUQsSUFBSSxNQUFNLElBQUssTUFBYyxDQUFDLE9BQU8sS0FBSyxNQUFNLEVBQUU7b0JBQ2hELElBQUksTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7d0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztxQkFDOUM7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBUyxDQUFDO1FBRXBELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFO1lBQzNDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FDOUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUNWLEVBQUUsQ0FBQyxXQUFXLEtBQUssVUFBVTtnQkFDN0IsRUFBRSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDakQsQ0FBQztZQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDVixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hCO1lBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQWlCO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDNUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUNYLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLEdBQUcsQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUNoRSxDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDbkQsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFBRSxPQUFPO1FBRWhELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FDOUMsQ0FBQyxFQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLEVBQUUsQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUN6RSxDQUFDO1FBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQ3BELENBQUMsRUFBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FDdkMsQ0FBQztRQUVGLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsS0FBYSxFQUFFLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBCQUEwQixDQUN4QixDQUFnQixFQUNoQixDQUFnQixFQUNoQixZQUFvQixDQUFDO1FBRXJCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFcEMsT0FBTyxDQUFDLENBQ04sQ0FDRSxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLElBQUkseUJBQXlCO1lBQ3BGLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSx3QkFBd0I7WUFDbkYsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxJQUFJLGVBQWU7WUFDekUsT0FBTyxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUN2RCxDQUFDLGVBQWU7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxTQUFpQjtRQUt4QyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFO1lBQ2xELElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDdkQsS0FBSyxNQUFNLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO29CQUN0QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxFQUFFO3dCQUM3QixPQUFPOzRCQUNMLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyx1QkFBdUIsSUFBSSxJQUFJOzRCQUNoRSxxQkFBcUIsRUFBRSxPQUFPLENBQUMscUJBQXFCLElBQUksSUFBSTs0QkFDNUQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxTQUFTO3lCQUNqQyxDQUFDO3FCQUNIO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhLEVBQUUsSUFBWSxFQUFFLEdBQUcsR0FBRyxHQUFHO1FBQzdDLElBQUksTUFBYyxDQUFDO1FBRW5CLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNqQixNQUFNLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQy9CO2FBQU0sSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ3hCLE1BQU0sR0FBRyxLQUFLLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztTQUMzQjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRCxVQUFVLENBQUMsTUFBYyxFQUFFLElBQVksRUFBRSxHQUFHLEdBQUcsR0FBRztRQUNoRCxJQUFJLEtBQWEsQ0FBQztRQUVsQiw0RkFBNEY7UUFFNUYsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO1lBQ2pCLEtBQUssR0FBRyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDL0I7YUFBTSxJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7WUFDeEIsS0FBSyxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1NBQ3hEO1FBRUQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywrQkFBK0IsRUFBRTtnQkFDdkUsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFDSCxPQUFPLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsQ0FBQztTQUN6RTtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCO1FBQ3JCLElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtnQkFDbkUsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDLENBQUM7WUFFSCxRQUFRLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQztZQUNqRCxRQUFRLENBQUMsaUJBQWlCLENBQUMsV0FBVztnQkFDcEMsNEZBQTRGLENBQUM7WUFFL0YsT0FBTyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUM7U0FDekU7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsd0JBQXdCLENBQUMsUUFBYztRQUNyQyxNQUFNLGtCQUFrQixHQUN0QixRQUFRO1lBQ1IsSUFBSSxDQUFDLE1BQU07aUJBQ1IsVUFBVSxFQUFFO2lCQUNaLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUUsR0FBVyxDQUFDLFNBQVMsQ0FBQztpQkFDdkMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNiLEVBQUUsRUFBRyxHQUFXLENBQUMsU0FBUztnQkFDMUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxJQUFJO2dCQUNYLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRztnQkFDVixLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDO2FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ1IsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUV6QixLQUFLLE1BQU0sT0FBTyxJQUFJLGtCQUFrQixFQUFFO1lBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRTtnQkFDckIsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUM7Z0JBQ25DLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO2dCQUNuQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7YUFDckIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtZQUMvQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLElBQUksZ0JBQWdCLEVBQUU7Z0JBQ3BCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztnQkFDM0MsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7YUFDcEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzlDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBTyxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLElBQUksZ0JBQWdCLEVBQUU7b0JBQ3BCLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO29CQUMzQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztvQkFDM0MsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7aUJBQ3BEO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4QkFBOEI7UUFDNUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTTthQUNqQyxVQUFVLEVBQUU7YUFDWixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFFLEdBQVcsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDO2FBQ2xELEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNiLEVBQUUsRUFBRyxHQUFXLENBQUMsSUFBSSxFQUFFLEdBQUc7WUFDMUIsS0FBSyxFQUFHLEdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVztZQUNyQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUk7WUFDWCxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUc7WUFDVixLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssSUFBSSxDQUFDO1lBQ3RCLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1lBQ3RELE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDO1NBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRU4sTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBR25CLENBQUM7UUFDSixLQUFLLE1BQU0sS0FBSyxJQUFJLGdCQUFnQixFQUFFO1lBQ3BDLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDWixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7b0JBQ25CLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO29CQUNqQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQztvQkFDakMsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixDQUFDLEVBQUUsS0FBSyxDQUFDLE1BQU07b0JBQ2YsQ0FBQyxFQUFFLEtBQUssQ0FBQyxLQUFLO2lCQUNmLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUMvQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDL0MsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLElBQUksZUFBZSxFQUFFO29CQUNuQixFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO29CQUNsRCxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQ2pELEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztpQkFDakQ7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDOUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFPLEVBQUUsRUFBRTtnQkFDcEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzNDLElBQUksZUFBZSxFQUFFO29CQUNuQixFQUFFLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQzFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztvQkFDMUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO29CQUNsRCxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUM7b0JBQ2pELEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQztpQkFDakQ7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQjtRQUNuQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTTthQUNyQixVQUFVLEVBQUU7YUFDWixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFFLEdBQVcsQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDO2FBQ2hELEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ1gsT0FBTztnQkFDTCxHQUFHLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQztnQkFDbkMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7Z0JBQ3JDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDO2dCQUN6RCxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FBQztnQkFDM0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dCQUNoQixXQUFXLEVBQUcsR0FBVyxDQUFDLElBQUk7YUFDL0IsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUwsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUV6QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRTtZQUN2QixNQUFNLENBQUMsR0FBRyxDQUNSLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsRUFDbEUsSUFBSSxDQUFDLElBQUksQ0FDUCxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO2dCQUM1RCxHQUFHLENBQUMsV0FBVyxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FDbkUsQ0FDRixDQUFDO1NBQ0g7UUFFRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtZQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNqRSxJQUFJLE9BQU8sRUFBRTtnQkFDWCxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN4QixDQUFDLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU07YUFDckIsVUFBVSxFQUFFO2FBQ1osTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBRSxHQUFXLENBQUMsT0FBTyxLQUFLLFVBQVUsQ0FBQzthQUNwRCxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNYLE9BQU87Z0JBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUM7Z0JBQ25DLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO2dCQUNyQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxDQUFDO2dCQUNsRCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0JBQ2hCLFdBQVcsRUFBRyxHQUFXLENBQUMsSUFBSTthQUMvQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFTCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRXpCLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQ1IsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxFQUMxRSxJQUFJLENBQUMsSUFBSSxDQUNQLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsS0FBSyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVc7Z0JBQ2hFLEdBQUcsQ0FBQyxXQUFXLENBQUMsYUFBYSxLQUFLLFFBQVEsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUN2RSxDQUNGLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQzlDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLElBQUksV0FBVyxFQUFFO2dCQUNmLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDeEMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLENBQUMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQzthQUNoQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBb0IsS0FBSztRQUMxQyxJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hCLE9BQU87YUFDUjtZQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLGVBQWUsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxDQUFDO2FBQ3BDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNwRCxPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUN4QyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUNyRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWE7YUFDeEQsTUFBTSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDekMsR0FBRyxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUU7WUFDcEIsTUFBTSxFQUFFLHFCQUFxQixFQUFFLHVCQUF1QixFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQy9ELE9BQU8sQ0FBQztZQUNWLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwQyxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7WUFDM0IsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3BCLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUM7UUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNsRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO2dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDN0QsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxPQUFPLEdBQVE7WUFDbkIsSUFBSSxFQUFFLEtBQUs7WUFDWCxhQUFhLEVBQUUsRUFBRTtZQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTO1lBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVE7WUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztTQUM1QixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFFBQVEsRUFBRTtZQUNyQyxzQkFBc0I7WUFDdEIsT0FBTyxDQUFDLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztZQUM5QyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxhQUFhLEVBQUU7WUFDakQsT0FBTyxDQUFDLGFBQWEsR0FBRyxxQkFBcUIsQ0FBQztZQUM5QyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNwQixPQUFPLENBQUMsTUFBTTtnQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDekMsQ0FBQyxNQUFNLENBQUM7U0FDWjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDN0MsT0FBTyxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQztZQUMvQyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxjQUFjLEVBQUU7WUFDbEQsT0FBTyxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQztZQUMvQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNwQixPQUFPLENBQUMsTUFBTTtnQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FDMUMsQ0FBQyxNQUFNLENBQUM7U0FDWjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLEVBQUU7WUFDeEMsT0FBTyxDQUFDLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztZQUMxQyxPQUFPLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztTQUN0QjthQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7WUFDN0MsT0FBTyxDQUFDLGFBQWEsR0FBRyxpQkFBaUIsQ0FBQztZQUMxQyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNwQixPQUFPLENBQUMsTUFBTTtnQkFDWixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1NBQzFFO1FBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDakUsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSw4QkFBOEI7U0FDbkUsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3ZELFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQy9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtnQkFDOUIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFDcEMsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLFNBQVMsRUFBRTtvQkFDdEMsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDakI7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLGNBQWMsRUFBRTtvQkFDM0MsUUFBUSxHQUFHLFNBQVMsQ0FBQztpQkFDdEI7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLGFBQWEsRUFBRTtvQkFDMUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztpQkFDckI7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxFQUFFO29CQUM1QyxJQUFJLGNBQWMsR0FBRzt3QkFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRzt3QkFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTzt3QkFDL0IsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUTtxQkFDekIsQ0FBQztvQkFDRixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3QkFDNUQsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUUsR0FBRSxDQUFDO3FCQUN2QixDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUM1QyxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3QkFDakIsSUFBSSxHQUFHLEVBQUUsTUFBTSxLQUFLLFNBQVMsRUFBRTs0QkFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzRCQUM3RCxJQUFJLENBQUMsZ0JBQWdCLENBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFDbEIsRUFBRSxDQUNILENBQUM7NEJBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQzt5QkFDdkQ7b0JBQ0gsQ0FBQztvQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUM7b0JBQzVELENBQUM7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO1lBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWhDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzVCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQ3ZCLDJDQUEyQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNsRyxDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQVksRUFBRSxPQUFZO1FBQ3BDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRztnQkFDZixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUU7Z0JBQ3ZELE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtnQkFDeEQsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2FBQ3BELENBQUM7WUFDRixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDMUQsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7b0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFO3dCQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDO3dCQUMxQixJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTs0QkFDL0MsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLFFBQVEsRUFBRTtnQ0FDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQzs2QkFDbEQ7NEJBQ0QsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtnQ0FDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQzs2QkFDcEQ7NEJBQ0QsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLFNBQVMsRUFBRTtnQ0FDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUM7NkJBQzVDO3dCQUNILENBQUMsQ0FBQyxDQUFDO3dCQUNILElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO3FCQUNqQztvQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO29CQUM5RCxNQUFNLEVBQUUsQ0FBQztnQkFDWCxDQUFDO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVM7UUFDakIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzVFLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFDRSxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVE7Z0JBQ3ZCLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxVQUFVLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLEVBQzVEO2dCQUNBLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQzthQUNqRDtpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksU0FBUyxFQUFFO2dCQUN0RSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsQ0FBQzthQUMzRDtpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksVUFBVSxFQUFFO2dCQUN2RSxPQUFPLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7YUFDeEQ7aUJBQU07Z0JBQ0wsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDbkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO2lCQUNoRDtxQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQ3RCLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQztpQkFDOUM7Z0JBQ0QsT0FBTyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO2FBQ3pEO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVU7UUFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUM7SUFDbkQsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVUsRUFBRSxRQUFpQixLQUFLO1FBQ2pELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUNwQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQU0sR0FBRyxLQUFLLENBQUMsTUFBTyxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxNQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU8sQ0FBQztRQUVqRCxNQUFNLElBQUksR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDM0IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2QsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2IsS0FBSyxFQUFFLFNBQVMsR0FBRyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxVQUFVLEdBQUcsQ0FBQztZQUN0QixFQUFFLEVBQUUsQ0FBQztZQUNMLEVBQUUsRUFBRSxDQUFDO1lBQ0wsTUFBTSxFQUFFLFNBQVM7WUFDakIsV0FBVyxFQUFFLENBQUM7WUFDZCxJQUFJLEVBQUUsYUFBYTtZQUNuQixVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUUsS0FBSztZQUNkLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUM7WUFDdkIsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ3ZCLENBQUMsQ0FBQztRQUVGLElBQVksQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQztRQUVuRCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBRTVCLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsS0FBSztZQUFFLE9BQU87UUFFbkIsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRWYsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM3QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3ZCLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxPQUFPLENBQ1YsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLEVBQ2Q7Z0JBQ0UsUUFBUSxFQUFFLEdBQUc7Z0JBQ2IsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzlDLFVBQVUsRUFBRSxHQUFHLEVBQUU7b0JBQ2YsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7d0JBQzdCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTztxQkFDUjtvQkFFRCxJQUFJLENBQUMsT0FBTyxDQUNWLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUNkO3dCQUNFLFFBQVEsRUFBRSxHQUFHO3dCQUNiLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFO3dCQUM5QyxVQUFVLEVBQUUsR0FBRyxFQUFFOzRCQUNmLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dDQUM3QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0NBQ3ZCLE9BQU87NkJBQ1I7NEJBRUQsTUFBTSxFQUFFLENBQUM7NEJBQ1QsSUFBSSxNQUFNLEdBQUcsRUFBRSxFQUFFO2dDQUNmLFNBQVMsRUFBRSxDQUFDOzZCQUNiO2lDQUFNO2dDQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7b0NBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQ0FDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2lDQUNoQzs2QkFDRjt3QkFDSCxDQUFDO3FCQUNGLENBQ0YsQ0FBQztnQkFDSixDQUFDO2FBQ0YsQ0FDRixDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBRUYsU0FBUyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7UUFFakMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUN6QyxJQUFLLEdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLG1CQUFtQixFQUFFO2dCQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxrQkFBa0IsR0FBRyxHQUFHLEVBQUU7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQUUsT0FBTztRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDLENBQUM7SUFFRiw4QkFBOEIsQ0FDNUIsRUFDRSxjQUFjLEVBQ2QsTUFBTSxHQUlQLEVBQ0QsbUJBQTRCLEtBQUs7UUFFakMsSUFBSSxhQUFhLEdBQUcsY0FBYztZQUNoQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxjQUFjLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVOLElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRTtZQUNyQixJQUFJLGFBQWEsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDeEQsYUFBYSxHQUFHLENBQUMsQ0FBQzthQUNuQjtpQkFBTTtnQkFDTCxhQUFhLEVBQUUsQ0FBQzthQUNqQjtTQUNGO2FBQU0sSUFBSSxNQUFNLEtBQUssVUFBVSxFQUFFO1lBQ2hDLElBQUksYUFBYSxJQUFJLENBQUMsRUFBRTtnQkFDdEIsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2FBQ3JEO2lCQUFNO2dCQUNMLGFBQWEsRUFBRSxDQUFDO2FBQ2pCO1NBQ0Y7YUFBTSxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3JDLGFBQWEsR0FBRyxDQUFDLENBQUM7U0FDbkI7UUFFRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxHQUFHLENBQUM7UUFFdkUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU07YUFDOUIsVUFBVSxFQUFFO2FBQ1osSUFBSSxDQUNILENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FDWCxHQUFHLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLGlCQUFpQixDQUN2QyxDQUFDO1FBRWhDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTztRQUUzQixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ25DLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVSLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFVBQVU7UUFDUixNQUFNLE9BQU8sR0FBUTtZQUNuQixJQUFJLEVBQUUsS0FBSztZQUNYLGFBQWEsRUFBRSxFQUFFO1lBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVM7WUFDL0IsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHO1lBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87U0FDaEMsQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLEVBQUU7WUFDckMsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7WUFDeEIsc0JBQXNCO1lBQ3RCLE9BQU8sQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssYUFBYSxFQUFFO1lBQ2pELE9BQU8sQ0FBQyxhQUFhLEdBQUcscUJBQXFCLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7WUFDeEIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDckI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUM7WUFDL0MsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxFQUFFO1lBQ2xELE9BQU8sQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUM7WUFDL0MsT0FBTyxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7WUFDekIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDckI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssSUFBSSxFQUFFO1lBQ3hDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7WUFDMUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDcEIsT0FBTyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDdEI7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzdDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsaUJBQWlCLENBQUM7WUFDMUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDcEIsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7U0FDckI7UUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FDOUMsQ0FBQyxHQUFRLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FDdkMsRUFBRSxNQUFNLENBQUM7UUFFVixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRTtZQUNoRSxRQUFRLEVBQUUsSUFBSTtZQUNkLElBQUksRUFBRSxJQUFJO1lBQ1YsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFFLFFBQVE7WUFDbEIsV0FBVyxFQUFFLHFCQUFxQixFQUFFLDhCQUE4QjtTQUNuRSxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDdkQsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7UUFDL0MsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUM5QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFO2dCQUM5QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO2dCQUNwQyxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO29CQUN0QyxRQUFRLEdBQUcsSUFBSSxDQUFDO2lCQUNqQjtnQkFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssY0FBYyxFQUFFO29CQUMzQyxRQUFRLEdBQUcsU0FBUyxDQUFDO2lCQUN0QjtnQkFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEtBQUssYUFBYSxFQUFFO29CQUMxQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2lCQUNyQjtnQkFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLEVBQUU7b0JBQzVDLElBQUksY0FBYyxHQUFHO3dCQUNuQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHO3dCQUMzQixPQUFPLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPO3dCQUMvQixRQUFRLEVBQUUsUUFBUTt3QkFDbEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRO3FCQUN6QixDQUFDO29CQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDO3dCQUM1RCxJQUFJLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRSxHQUFFLENBQUM7cUJBQ3ZCLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQzVDLElBQUksRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUNqQixJQUFJLEdBQUcsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFOzRCQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQzdELElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQzt5QkFDakQ7b0JBQ0gsQ0FBQztvQkFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO3dCQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLENBQUM7b0JBQzVELENBQUM7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUU7WUFDckUsUUFBUSxFQUFFLElBQUk7WUFDZCxJQUFJLEVBQUUsSUFBSTtZQUNWLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLFdBQVcsRUFBRSxxQkFBcUI7U0FDbkMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQztRQUN2RCxRQUFRLENBQUMsaUJBQWlCLENBQUMsV0FBVyxHQUFHLDJIQUEySCxDQUFDO1FBQ3JLLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBRTVDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDM0IsSUFBRyxHQUFHLElBQUksSUFBSSxFQUFFO2dCQUNkLElBQUksSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDaEMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO2dCQUNuQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO2dCQUN0QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDekMsSUFBSSxFQUFFLENBQUMsR0FBUSxFQUFFLEVBQUU7d0JBQ2pCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFOzRCQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQzs0QkFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3lCQUNqRDtvQkFDSCxDQUFDO29CQUNELEtBQUssRUFBRSxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO29CQUM3RCxDQUFDO2lCQUNGLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQjtRQUNyQixJQUFJO1lBQ0YsTUFBTSxHQUFHLEdBQVEsTUFBTSxjQUFjLENBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3ZDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU87YUFDaEMsQ0FBQyxDQUNILENBQUM7WUFFRixJQUFJLEdBQUcsRUFBRSxJQUFJLEVBQUU7Z0JBQ2IsSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQztnQkFDdkIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO29CQUNsRSxXQUFXLEVBQUUsTUFBTTtpQkFDcEIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQzthQUM1QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDN0IsT0FBTzthQUNSO1NBQ0Y7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLHFCQUFxQjtRQUN6QixJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7Z0JBQ3RELFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQyxDQUFDLE1BQU0sQ0FBQztTQUNYO1FBQUMsT0FBTyxHQUFRLEVBQUUsR0FBRTtJQUN2QixDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsd0JBQXdCLENBQUMsRUFBRTtZQUNwRSxXQUFXLEVBQUU7Z0JBQ1gsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTzthQUNoQztTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBZTtRQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN4RixJQUFJLEVBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRTtnQkFDZixJQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBRTtvQkFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBTyxFQUFFLEVBQUUsR0FBRSxPQUFPLEVBQUMsR0FBRyxHQUFHLEVBQUMsU0FBUyxFQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUMsQ0FBQSxDQUFBLENBQUMsQ0FBQyxDQUFDO29CQUMxRyxJQUFHLE9BQU8sRUFBRTt3QkFDVixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7cUJBQ3hHO2lCQUNGO1lBQ0gsQ0FBQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQVM7UUFDeEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5RCxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUN4QixNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFDeEIsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUNyQixDQUFDO1FBQ0YsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0FoMktVLHlCQUF5Qjs0RkFBekIseUJBQXlCLHlHQUZ6QixDQUFDLGFBQWEsQ0FBQyw0VUM1RDVCLDJxeERBcTBCYzs7NEZEdndCRCx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0Usd0JBQXdCLGFBR3ZCLENBQUMsYUFBYSxDQUFDO3dXQU0xQixTQUFTO3NCQURSLFNBQVM7dUJBQUMsWUFBWTtnQkFFTyxZQUFZO3NCQUF6QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDRCxvQkFBb0I7c0JBQTlDLFNBQVM7dUJBQUMsY0FBYztnQkFHekIsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgVmlld0NoaWxkLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQgeyBMb2NhdGlvbiwgVGl0bGVDYXNlUGlwZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgRm9ybUFycmF5LFxyXG4gIEZvcm1CdWlsZGVyLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgU3ViamVjdCxcclxuICBTdWJzY3JpcHRpb24sXHJcbiAgZGVib3VuY2VUaW1lLFxyXG4gIGZpcnN0VmFsdWVGcm9tLFxyXG4gIGZyb21FdmVudCxcclxuICB0YWtlVW50aWwsXHJcbn0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCAqIGFzIGZhYnJpYyBmcm9tIFwiZmFicmljXCI7XHJcblxyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcblxyXG5pbXBvcnQgeyBTdG9yZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBMYXlvdXRFZGl0Q29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3BvcHVwcy9sYXlvdXQtZWRpdC1jb25maXJtYXRpb24vbGF5b3V0LWVkaXQtY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBQdWJsaXNodGFza1BvcHVwQ29tcG9uZW50IH0gZnJvbSBcIi4vcHVibGlzaHRhc2stcG9wdXAvcHVibGlzaHRhc2stcG9wdXAuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFN0b3JlVGFza1Jldm9rZUNvbXBvbmVudCB9IGZyb20gXCIuL3N0b3JlLXRhc2stcmV2b2tlL3N0b3JlLXRhc2stcmV2b2tlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tIFwiLi4vcG9wdXBzL2RlbGV0ZS1jb25maXJtYXRpb24vZGVsZXRlLWNvbmZpcm1hdGlvbi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgRHJvcGRvd25JRiB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL3BsYW5vLWdlbmVyYWwuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IENvbXBsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSBcIi4uL3BvcHVwcy9jb21wbGV0ZS1jb25maXJtYXRpb24vY29tcGxldGUtY29uZmlybWF0aW9uLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBWbUxpYnJhcnlMaXN0IH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvdm0tbGlicmFyeS5pbnRlcmZhY2VcIjtcclxuXHJcbnR5cGUgQm91bmRGaXh0dXJlR3JvdXAgPSB7XHJcbiAgZml4dHVyZUdyb3VwOiBmYWJyaWMuR3JvdXA7XHJcbiAgb2Zmc2V0WDogbnVtYmVyO1xyXG4gIG9mZnNldFk6IG51bWJlcjtcclxuICBfdGVtcE9sZFRvcD86IG51bWJlcjtcclxuICBfdGVtcE9sZExlZnQ/OiBudW1iZXI7XHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItbWFuYWdlLXN0b3JlLXBsYW5vXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9tYW5hZ2Utc3RvcmUtcGxhbm8uY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL21hbmFnZS1zdG9yZS1wbGFuby5jb21wb25lbnQuc2Nzc1wiLFxyXG4gIHByb3ZpZGVyczogW1RpdGxlQ2FzZVBpcGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWFuYWdlU3RvcmVQbGFub0NvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkluaXRcclxue1xyXG4gIEBWaWV3Q2hpbGQoXCJiYXNlQ2FudmFzXCIpXHJcbiAgY2FudmFzUmVmITogRWxlbWVudFJlZjxIVE1MQ2FudmFzRWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZChcImNhbnZhc0NvbnRhaW5lclwiKSBjb250YWluZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuICBAVmlld0NoaWxkKFwibm9TdG9yZVZpZGVvXCIpIG5vU3RvcmVWaWRlb01vZGFsUmVmITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcihcIndpbmRvdzpyZXNpemVcIilcclxuICBvblJlc2l6ZSgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlc2l6ZUNhbnZhcygpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuXHJcbiAgY2FudmFzITogZmFicmljLkNhbnZhcztcclxuICB6b29tTGV2ZWw6IG51bWJlciA9IDE7XHJcbiAgd2FsbFRoaWNrbmVzcyA9IDMwO1xyXG4gIHZlcnRpY2FsTWFyZ2luID0gKDEuMjUgLyAxMDApICogdGhpcy50b1BpeGVscygxNTI0LCBcIm1tXCIpO1xyXG4gIHdhbGxCaW5kaW5ncyA9IG5ldyBNYXA8ZmFicmljLkdyb3VwLCBCb3VuZEZpeHR1cmVHcm91cFtdPigpO1xyXG5cclxuICBsYXlvdXRGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc2VsZWN0ZWRGbG9vcklkID0gbmV3IEZvcm1Db250cm9sKFwiXCIpO1xyXG4gIGZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIGZpeHR1cmVUZW1wbGF0ZUlkU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBvdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgcGxhbm9EYXRhOiBhbnk7XHJcblxyXG4gIGZsb29yRGF0YTogYW55O1xyXG4gIHJlYWRvbmx5IG9yaWdpbmFsRmxvb3JEYXRhOiBhbnk7IC8vdXNlZCB0byByb2xsYmFjayB0byBvcmlnaW5hbCBsYXlvdXQgc3RhdGUgb24gY2xpY2sgY2FuY2VsIHdoaWxlIGVkaXRpbmcuXHJcblxyXG4gIGNkblVybDogc3RyaW5nO1xyXG4gIGZpeHR1cmVUZW1wbGF0ZXM6IGFueVtdID0gW107XHJcbiAgYWxsRml4dHVyZXM6IGFueVtdID0gW107IC8vIGFsbCBmaXh0dXJlcyBpbmNsdWRpbmcgdGhlIG1hc3RlciB0ZW1wbGF0ZXMgZm9yIHRyZWUgdmlld1xyXG4gIGFsbEZpeHR1cmVJbnN0YW5jZXM6IGFueVtdID0gW107IC8vb25seSB0aGUgbGF5b3V0IGZpeHR1cmVzIGluc3RhbmNlcy5cclxuICBzdG9yZUZlZWRiYWNrOiBhbnk7XHJcblxyXG4gIHNlbGVjdGVkRml4dHVyZTogYW55O1xyXG4gIHNlbGVjdGVkRml4dHVyZURhdGE6IGFueTtcclxuICBzZWxlY3RlZEZpeHR1cmVGZWVkYmFjazogYW55O1xyXG4gIGVkaXRGaXh0dXJlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZWRpdEZpeHR1cmVTZWN0aW9uOiBcImJhc2ljLWRldGFpbHNcIiB8IFwicHJvZHVjdHNcIiB8IFwidm1zXCIgPSBcImJhc2ljLWRldGFpbHNcIjtcclxuICBzdWJtaXRGaXh0dXJlID0gZmFsc2U7XHJcblxyXG4gIHN0b3JlTWV0cmljcyA9IHtcclxuICAgIGZsb29yQ291bnQ6IDAsXHJcbiAgICBmaXh0dXJlQ291bnQ6IDAsXHJcbiAgICB2bUNvdW50OiAwLFxyXG4gIH07XHJcblxyXG4gIGlzUGFnZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzUmlnaHRQYW5lbENvbGxhcHNlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNMZWZ0UGFuZWxDb2xsYXBzZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNlbGVjdGVkVmlldzogXCJ0cmVlXCIgfCBcImRldGFpbFwiID0gXCJkZXRhaWxcIjtcclxuXHJcbiAgcHVibGlzaGluZ1N0YXRlOlxyXG4gICAgfCBcImxheW91dFwiXHJcbiAgICB8IFwibGF5b3V0LXJlZG9cIlxyXG4gICAgfCBcImZpeHR1cmVcIlxyXG4gICAgfCBcImZpeHR1cmUtcmVkb1wiXHJcbiAgICB8IFwidm1cIlxyXG4gICAgfCBcInZtLXJlZG9cIlxyXG4gICAgfCBcImNvbXBsZXRlXCJcclxuICAgIHwgXCJcIiA9IFwiXCI7XHJcbiAgZGlzYWJsZWRQdWJsaXNoOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZGlzYWJsZUVkaXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHRhc2tJbmZvOiBhbnk7XHJcbiAgdGFza1N0eWxlID0ge1xyXG4gICAgbGF5b3V0OiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICBmaXh0dXJlOiB7IG5hbWU6IFwiWWV0IFRvIEFzc2lnblwiLCBjbGFzczogXCJ5ZXRUb0Fzc2lnblwiIH0sXHJcbiAgICB2bTogeyBuYW1lOiBcIllldCBUbyBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9LFxyXG4gIH07XHJcblxyXG4gIG90aGVyRWxlbWVudExpc3Q6IERyb3Bkb3duSUZbXSA9IFtcclxuICAgIHsgbGFiZWw6IFwiUE9TIENvdW50ZXJcIiwgdmFsdWU6IFwiUE9TIENvdW50ZXJcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJEaXNjdXNzaW9uIFRhYmxlXCIsIHZhbHVlOiBcIkRpc2N1c3Npb24gVGFibGVcIiB9LFxyXG4gICAgeyBsYWJlbDogXCJNaXJyb3JcIiwgdmFsdWU6IFwiTWlycm9yXCIgfSxcclxuICAgIHsgbGFiZWw6IFwiT3RoZXJzXCIsIHZhbHVlOiBcIk90aGVyc1wiIH0sXHJcbiAgXTtcclxuICBzdG9yZUxpc3Q6YW55ID0gW107XHJcbiAgc2VsZWN0ZWRTdG9yZU5hbWU6YW55O1xyXG5cclxuICB2bUxpc3Q6IFZtTGlicmFyeUxpc3RbXSA9IFtdO1xyXG4gIC8vIGlzVXNlckludGVyYWN0ZWRXaXRoQ2FudmFzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgYWN0aXZlSGlnaGxpZ2h0OiBmYWJyaWMuUmVjdCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgY2FuY2VsSGlnaGxpZ2h0QmxpbmsgPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IFN0b3JlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aXRsZUNhc2U6IFRpdGxlQ2FzZVBpcGUsXHJcbiAgICBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG5cclxuICAgIHRoaXMuZ3MuZW52aXJvbm1lbnQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBpZiAoZSkgdGhpcy5jZG5VcmwgPSBlLnBsYW5vZ3JhbUNETjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcblxyXG4gICAgdGhpcy5ncy5kYXRhUmFuZ2VWYWx1ZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGVhZGVyLWZpbHRlcnNcIikgYXMgc3RyaW5nXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRJZCA9IGhlYWRlckRhdGE/LmNsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXNcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChwYXJhbXMpID0+IHtcclxuICAgICAgICBpZiAocGFyYW1zPy5wbGFub0lkKSB7XHJcbiAgICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXMocGFyYW1zPy5wbGFub0lkKTtcclxuICAgICAgICAgIHRoaXMuZ2V0U3RvcmVMaXN0KHBhcmFtcz8ucGxhbm9JZCk7XHJcbiAgICAgICAgICBpZiAocGFyYW1zPy5mbG9vcklkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0geyBfaWQ6IHBhcmFtcz8uZmxvb3JJZCB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEZsb29ySWQudmFsdWVDaGFuZ2VzLnN1YnNjcmliZShhc3luYyAoaWQpID0+IHtcclxuICAgICAgdGhpcy5mbG9vckRhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhID0gdGhpcy5wbGFub0RhdGE/LmZsb29ycz8uZmluZChcclxuICAgICAgICAoZmxvb3I6IGFueSkgPT4gZmxvb3IuX2lkID09PSBpZFxyXG4gICAgICApO1xyXG5cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICB0aGlzLnRhc2tEZXRhaWxzKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCksXHJcbiAgICAgICAgICB0aGlzLmdldFN0b3JlRmVlZGJhY2sodGhpcy5mbG9vckRhdGEucGxhbm9JZCwgdGhpcy5mbG9vckRhdGEuX2lkLCB7fSksXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH0gY2F0Y2gge31cclxuXHJcbiAgICAgIHRoaXMucmVuZGVyRmxvb3IoKTtcclxuICAgICAgdGhpcy5sYXlvdXRGb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICBjb25zdCBuZXdQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xyXG4gICAgICBuZXdQYXJhbXMuc2V0KFwicGxhbm9JZFwiLCB0aGlzLmZsb29yRGF0YS5wbGFub0lkKTtcclxuICAgICAgbmV3UGFyYW1zLnNldChcImZsb29ySWRcIiwgdGhpcy5mbG9vckRhdGEuX2lkKTtcclxuXHJcbiAgICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKFxyXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcclxuICAgICAgICBuZXdQYXJhbXMudG9TdHJpbmcoKVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRmxvb3JJZC5zZXRWYWx1ZSh0aGlzLmZsb29yRGF0YS5faWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY2FudmFzID0gbmV3IGZhYnJpYy5DYW52YXModGhpcy5jYW52YXNSZWY/Lm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgc2VsZWN0aW9uRnVsbHlDb250YWluZWQ6IHRydWUsXHJcbiAgICAgIHBlclBpeGVsVGFyZ2V0RmluZDogdHJ1ZSxcclxuICAgICAgdGFyZ2V0RmluZFRvbGVyYW5jZTogNSxcclxuICAgIH0pO1xyXG5cclxuICAgIGZyb21FdmVudCh0aGlzLmNhbnZhcyBhcyBhbnksIFwib2JqZWN0Om1vZGlmaWVkXCIpXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBtb3ZlZE9iajogYW55ID0gZS50YXJnZXQ7XHJcblxyXG4gICAgICAgIGlmICghbW92ZWRPYmopIHJldHVybjtcclxuICAgICAgICBjb25zdCBhY3Rpb24gPSBlLnRyYW5zZm9ybT8uYWN0aW9uO1xyXG5cclxuICAgICAgICBjb25zdCBpc1Jlc2l6ZSA9XHJcbiAgICAgICAgICBhY3Rpb24gPT09IFwic2NhbGVcIiB8fCBhY3Rpb24gPT09IFwic2NhbGVYXCIgfHwgYWN0aW9uID09PSBcInNjYWxlWVwiO1xyXG5cclxuICAgICAgICBpZiAoaXNSZXNpemUpIHtcclxuICAgICAgICAgIGNvbnN0IHR5cGUgPSBtb3ZlZE9iaj8ub2JqVHlwZSA/PyBcImdyb3VwXCI7XHJcblxyXG4gICAgICAgICAgY29uc3QgdXBkYXRlZENvbmZpZyA9IHtcclxuICAgICAgICAgICAgeDogbW92ZWRPYmoubGVmdCxcclxuICAgICAgICAgICAgeTogbW92ZWRPYmoudG9wLFxyXG4gICAgICAgICAgICB3aWR0aDogbW92ZWRPYmouZ2V0U2NhbGVkV2lkdGgoKSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBtb3ZlZE9iai5nZXRTY2FsZWRIZWlnaHQoKSxcclxuICAgICAgICAgICAgYW5nbGU6IG1vdmVkT2JqLmFuZ2xlLFxyXG4gICAgICAgICAgICBlbGVtZW50RGF0YTogbW92ZWRPYmouZGF0YSxcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ3YWxsXCI6IHtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmUobW92ZWRPYmopO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGEuYW5nbGUgPSB1cGRhdGVkQ29uZmlnLmFuZ2xlO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBuZXdXYWxsID0gYXdhaXQgdGhpcy5kcmF3V2FsbChcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy54LFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy55LFxyXG4gICAgICAgICAgICAgICAgdGhpcy53YWxsVGhpY2tuZXNzLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZENvbmZpZy53aWR0aCAtIDAuMjcsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmVsZW1lbnREYXRhXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgKG5ld1dhbGwgYXMgYW55KS5vYmpUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICAgICAgKG5ld1dhbGwgYXMgYW55KS5kYXRhID0gdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KG5ld1dhbGwpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwib3RoZXJzXCI6IHtcclxuICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmUobW92ZWRPYmopO1xyXG4gICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGEucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9XHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLmFuZ2xlO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBuZXdPdGhlciA9IHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueCxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcueSxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuYW5nbGUsXHJcbiAgICAgICAgICAgICAgICB1cGRhdGVkQ29uZmlnLndpZHRoIC0gMixcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuaGVpZ2h0IC0gMixcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWRDb25maWcuZWxlbWVudERhdGFcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAobmV3T3RoZXIgYXMgYW55KS5vYmpUeXBlID0gXCJvdGhlcnNcIjtcclxuICAgICAgICAgICAgICAobmV3T3RoZXIgYXMgYW55KS5kYXRhID0gdXBkYXRlZENvbmZpZy5lbGVtZW50RGF0YTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5jYW52YXMuc2V0QWN0aXZlT2JqZWN0KG5ld090aGVyKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FzZSBcImVudHJhbmNlXCI6IHtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FzZSBcImZpeHR1cmVcIjoge1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlV2FsbENvb3JkaW5hdGVzKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU90aGVyRWxlbWVudHNDb29yZGluYXRlcygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRW50cmFuY2VDb29yZGluYXRlcygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldHVwWm9vbUhhbmRsZXJzKCk7XHJcblxyXG4gICAgdGhpcy5saXN0ZW5Ub0RlbGV0ZUtleSgpO1xyXG4gICAgdGhpcy50b2dnbGVQYW5lbChcImxlZnRcIiwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuICByZXNpemVDYW52YXMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgdGhpcy5jYW52YXMuc2V0RGltZW5zaW9ucyh7XHJcbiAgICAgIHdpZHRoOiBjb250YWluZXIuY2xpZW50V2lkdGggLSA1MCxcclxuXHJcbiAgICAgIGhlaWdodDogY29udGFpbmVyLmNsaWVudEhlaWdodCAtIDQwLFxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBzZXR1cFpvb21IYW5kbGVycygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6d2hlZWxcIiwgKG9wdDogZmFicmljLlRFdmVudDxXaGVlbEV2ZW50PikgPT4ge1xyXG4gICAgICBjb25zdCBlID0gb3B0LmU7XHJcblxyXG4gICAgICBpZiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkge1xyXG4gICAgICAgIC8vIHRoaXMuaXNVc2VySW50ZXJhY3RlZFdpdGhDYW52YXMgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGRlbHRhID0gZS5kZWx0YVk7XHJcbiAgICAgICAgbGV0IHpvb20gPSB0aGlzLmNhbnZhcy5nZXRab29tKCk7XHJcbiAgICAgICAgem9vbSAqPSAwLjk5NSAqKiBkZWx0YTtcclxuXHJcbiAgICAgICAgem9vbSA9IE1hdGgubWF4KDAuMiwgTWF0aC5taW4oem9vbSwgMykpO1xyXG5cclxuICAgICAgICB0aGlzLmNhbnZhcy56b29tVG9Qb2ludChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgeDogZS5vZmZzZXRYLFxyXG4gICAgICAgICAgICB5OiBlLm9mZnNldFksXHJcbiAgICAgICAgICB9IGFzIGZhYnJpYy5Qb2ludCxcclxuICAgICAgICAgIHpvb21cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIGxldCBsYXN0UG9zWCA9IDA7XHJcbiAgICBsZXQgbGFzdFBvc1kgPSAwO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLm9uKFwibW91c2U6ZG93blwiLCAob3B0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFvcHQudGFyZ2V0KSB7XHJcbiAgICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jYW52YXMuc2VsZWN0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOm1vdmVcIiwgKG9wdDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nICYmIHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtKSB7XHJcbiAgICAgICAgLy8gdGhpcy5pc1VzZXJJbnRlcmFjdGVkV2l0aENhbnZhcyA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgZSA9IG9wdC5lO1xyXG4gICAgICAgIGNvbnN0IHZwdCA9IHRoaXMuY2FudmFzLnZpZXdwb3J0VHJhbnNmb3JtO1xyXG4gICAgICAgIHZwdFs0XSArPSBlLmNsaWVudFggLSBsYXN0UG9zWDtcclxuICAgICAgICB2cHRbNV0gKz0gZS5jbGllbnRZIC0gbGFzdFBvc1k7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICAgIGxhc3RQb3NYID0gZS5jbGllbnRYO1xyXG4gICAgICAgIGxhc3RQb3NZID0gZS5jbGllbnRZO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5vbihcIm1vdXNlOnVwXCIsICgpID0+IHtcclxuICAgICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJNYW5hZ2UgU3RvcmUgUGxhbm9cIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIlBsYW5vZ3JhbVwiLFxyXG4gICAgICAgIHBhdGg6IFwiL21hbmFnZS9wbGFub2dyYW0vbWFuYWdlLXBsYW5vZ3JhbXNcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiXCIsXHJcbiAgICAgICAgcGF0aDogXCJcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFZtc0xpc3QoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRWTU5hbWVMaXN0KHRoaXMuY2xpZW50SWQpXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICB0aGlzLnZtTGlzdCA9IHJlcz8uZGF0YT8ubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiBpdGVtLl9pZCxcclxuICAgICAgICAgICAgbmFtZTogaXRlbS52bU5hbWUsXHJcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBpdGVtLnZtTmFtZSxcclxuICAgICAgICAgICAgd2lkdGg6IGl0ZW0udm1XaWR0aC52YWx1ZSxcclxuICAgICAgICAgICAgaGVpZ2h0OiBpdGVtLnZtSGVpZ2h0LnZhbHVlLFxyXG4gICAgICAgICAgICB0eXBlOiBpdGVtLnZtVHlwZSxcclxuICAgICAgICAgICAgLi4uKGl0ZW0udm1JbWFnZVVybFxyXG4gICAgICAgICAgICAgID8geyBpbWdVcmw6IGAke3RoaXMuY2RuVXJsfSR7aXRlbS52bUltYWdlVXJsfWAgfVxyXG4gICAgICAgICAgICAgIDoge30pLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGdldFZtc0xpc3QgW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRml4dHVyZVNhdmUoKSB7XHJcbiAgICB0aGlzLnN1Ym1pdEZpeHR1cmUgPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnRhc2tUeXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zdWJtaXRGaXh0dXJlID0gZmFsc2U7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25GaXh0dXJlUGFnZUNhbmNlbCgpIHtcclxuICAgIHRoaXMuc3VibWl0Rml4dHVyZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gbnVsbDtcclxuICAgIHRoaXMuZWRpdEZpeHR1cmVTZWN0aW9uID0gXCJiYXNpYy1kZXRhaWxzXCI7XHJcbiAgICB0aGlzLmVkaXRGaXh0dXJlID0gZmFsc2U7XHJcbiAgICB0aGlzLmxheW91dEZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICBhd2FpdCB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgb25GaXh0dXJlU3VibWl0KGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICghZXZlbnQgJiYgIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChldmVudD8uc2hlbGYgJiYgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhPy5zaGVsZkNvbmZpZykge1xyXG4gICAgICBldmVudC5zaGVsZiA9IGV2ZW50LnNoZWxmLm1hcCgoc2hlbGY6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCBmaW5kU2hlbGYgPSB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuc2hlbGZDb25maWcuZmluZChcclxuICAgICAgICAgIChlbGU6IGFueSkgPT4gZWxlLnNoZWxmTnVtYmVyID09IGluZGV4ICsgMVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGZpbmRTaGVsZikge1xyXG4gICAgICAgICAgc2hlbGYgPSB7IC4uLmZpbmRTaGVsZiwgLi4uc2hlbGYgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGRldGFpbHMgPVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEuc2hlbGZDb25maWdbXHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnLmxlbmd0aCAtIDFcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgIGRldGFpbHMuc2hlbGZOdW1iZXIgPSBpbmRleCArIDE7XHJcbiAgICAgICAgICBzaGVsZiA9IHsgLi4uZGV0YWlscywgLi4uc2hlbGYgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNoZWxmO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YVtcInNoZWxmQ29uZmlnXCJdID0gZXZlbnQ/LnNoZWxmO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJkZXNjcmlwdGlvblwiXSA9IGV2ZW50Py5kZXNjcmlwdGlvbiA/PyBcIlwiO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGFbXCJ0ZW1wbGF0ZUdyb3VwTmFtZVwiXSA9XHJcbiAgICAgICAgZXZlbnQ/LnRlbXBsYXRlR3JvdXBOYW1lID8/IFwiXCI7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YS5oZWFkZXIubGFiZWwgPSBldmVudD8uaGVhZGVyTGFiZWwgPz8gXCJcIjtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLmZvb3Rlci5sYWJlbCA9IGV2ZW50Py5mb290ZXJMYWJlbCA/PyBcIlwiO1xyXG4gICAgfSBlbHNlIGlmIChldmVudD8uc2VjdGlvbikge1xyXG4gICAgICBldmVudC5zZWN0aW9uLmZvckVhY2goKHNlYzogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IG51bWJlciA9IHNlYz8uc2hlbHZlcz8ubWFwKChlbGU6IGFueSkgPT5cclxuICAgICAgICAgIHBhcnNlSW50KGVsZS5zcGxpdChcIiBcIilbMV0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGE/LnNoZWxmQ29uZmlnLmZvckVhY2goKHNoZWxmOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChudW1iZXIuaW5jbHVkZXMoc2hlbGYuc2hlbGZOdW1iZXIpKSB7XHJcbiAgICAgICAgICAgIHNoZWxmLnpvbmUgPSBzZWMuem9uZTtcclxuICAgICAgICAgICAgc2hlbGYucHJvZHVjdEJyYW5kTmFtZSA9IHNlYy5wcm9kdWN0QnJhbmROYW1lO1xyXG4gICAgICAgICAgICBzaGVsZi5wcm9kdWN0Q2F0ZWdvcnkgPSBzZWMucHJvZHVjdENhdGVnb3J5O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQ/LnZtQ29uZmlnICYmIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YT8udm1Db25maWcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhW1widm1Db25maWdcIl0gPSBldmVudD8udm1Db25maWc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmdldFZtc0xpc3QoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZWRpdEZpeHR1cmVTZWN0aW9uID0gXCJiYXNpYy1kZXRhaWxzXCI7XHJcbiAgICAgICAgdGhpcy5lZGl0Rml4dHVyZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2V0U3RvcmVGaXh0dXJlcyh0aGlzLnBsYW5vRGF0YT8uX2lkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gICB2YWxpZGF0ZUZpeHR1cmVEYXRhKCkge1xyXG4gIC8vICAgdGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy52bUNvbmZpZz8uZm9yRWFjaCgodm0pID0+IHtcclxuICAvLyAgICAgaWYgKCh2bT8uc3RhcnRZUG9zaXRpb24gPz8gMSkgPiAodGhpcy5maXh0dXJlVGVtcGxhdGVEZXRhaWxzPy5zaGVsZkNvbmZpZz8ubGVuZ3RoID8/IDEpKSB7XHJcbiAgLy8gICAgICAgdm0uc3RhcnRZUG9zaXRpb24gPSBudWxsO1xyXG4gIC8vICAgICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRXJyb3JUYWJzLnZtcyA9IHRydWU7XHJcbiAgLy8gICAgIH1cclxuXHJcbiAgLy8gICAgIGlmICgodm0/LmVuZFlQb3NpdGlvbiA/PyAxKSA+ICh0aGlzLmZpeHR1cmVUZW1wbGF0ZURldGFpbHM/LnNoZWxmQ29uZmlnPy5sZW5ndGggPz8gMSkpIHtcclxuICAvLyAgICAgICB2bS5lbmRZUG9zaXRpb24gPSBudWxsO1xyXG4gIC8vICAgICAgIHRoaXMucHMuZml4dHVyZVRlbXBsYXRlRXJyb3JUYWJzLnZtcyA9IHRydWU7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgdG9nZ2xlUGFuZWwoc2lkZTogXCJsZWZ0XCIgfCBcInJpZ2h0XCIsIGFjdGlvbj86IGJvb2xlYW4pIHtcclxuICAgIGlmIChzaWRlID09PSBcImxlZnRcIikge1xyXG4gICAgICB0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkID0gYWN0aW9uID8/ICF0aGlzLmlzTGVmdFBhbmVsQ29sbGFwc2VkO1xyXG4gICAgICBpZiAoIXRoaXMuaXNMZWZ0UGFuZWxDb2xsYXBzZWQpIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkID0gYWN0aW9uID8/ICF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZDtcclxuICAgICAgaWYgKCF0aGlzLmlzUmlnaHRQYW5lbENvbGxhcHNlZCkgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCA9IHRydWU7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2spIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlRml4dHVyZU9uRmVlZGJhY2tQYW5lbCh7fSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCA0MDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RvcmVGZWVkYmFjayhcclxuICAgIHBsYW5vSWQ6IHN0cmluZyxcclxuICAgIGZsb29ySWQ6IHN0cmluZyxcclxuICAgIGZpbHRlcjogYW55LFxyXG4gICAgY2hlY2tQdWJsaXNoU3RhdGU6IGJvb2xlYW4gPSB0cnVlXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBsZXQgZGF0YTogYW55ID0ge1xyXG4gICAgICAgIHBsYW5vSWQ6IHBsYW5vSWQsXHJcbiAgICAgICAgZmxvb3JJZDogZmxvb3JJZCxcclxuICAgICAgfTtcclxuICAgICAgaWYgKGZpbHRlcikge1xyXG4gICAgICAgIGRhdGEgPSB7IC4uLmRhdGEsIC4uLmZpbHRlciB9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0U3RvcmVGZWVkYmFjayhkYXRhKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IGFzeW5jIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICBpZiAocmVzLmRhdGE/LmxheW91dERhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NMYXlvdXRGZWVkYmFjayhyZXMuZGF0YS5sYXlvdXREYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0xheW91dEZlZWRiYWNrKFtdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAocmVzLmRhdGE/LmZpeHR1cmVEYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzRml4dHVyZUZlZWRiYWNrKHJlcy5kYXRhLmZpeHR1cmVEYXRhKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZpeHR1cmVGZWVkYmFjayhbXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlcy5kYXRhPy5WbURhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NWbUZlZWRiYWNrKHJlcy5kYXRhLlZtRGF0YSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NWbUZlZWRiYWNrKFtdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoY2hlY2tQdWJsaXNoU3RhdGUpIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5jYWxjdWxhdGVQdWJsaXNoaW5nU3RhdGUoKVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrPy5maXh0dXJlRmVlZGJhY2s/LmZpeHR1cmVJZCkge1xyXG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlRml4dHVyZU9uRmVlZGJhY2tQYW5lbCh7XHJcbiAgICAgICAgICAgICAgY3VycmVudEZpeHR1cmU6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZUZlZWRiYWNrLmZpeHR1cmVGZWVkYmFjay5maXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHN0b3JlIGZlZWRiYWNrXCIpO1xyXG4gICAgICAgICAgcmVqZWN0KCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNhbGN1bGF0ZVB1Ymxpc2hpbmdTdGF0ZSgpIHtcclxuICAgIGxldCBkaXNhYmxlRWRpdCA9IGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2ldO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQuZml4dHVyZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gZWxlbWVudC5maXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgaWYgKGZpeHR1cmUuaXNzdWUpIHtcclxuICAgICAgICAgIGRpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmUpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbaV07XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlLmlzc3VlKSB7XHJcbiAgICAgICAgICBkaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRpc2FibGVFZGl0KSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNhYmxlRWRpdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLmZsb29yRGF0YS5pc0VkaXRlZCkge1xyXG4gICAgLy8gICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdsYXlvdXQnXHJcbiAgICAvLyAgIHJldHVybjtcclxuICAgIC8vIH1cclxuXHJcbiAgICBsZXQgbGF5b3V0RGF0YSA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5maW5kKFxyXG4gICAgICAoZWxlOiBhbnkpID0+IGVsZS50eXBlID09IFwibGF5b3V0XCJcclxuICAgICk7XHJcbiAgICBsZXQgZml4dHVyZURhdGEgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSBcImZpeHR1cmVcIlxyXG4gICAgKTtcclxuICAgIGxldCB2bURhdGEgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSBcImZpeHR1cmVcIlxyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy50YXNrU3R5bGUubGF5b3V0Lm5hbWUgPT0gXCJBcHByb3ZlZFwiICYmXHJcbiAgICAgIHRoaXMudGFza1N0eWxlLmZpeHR1cmUubmFtZSA9PSBcIkFwcHJvdmVkXCIgJiZcclxuICAgICAgdGhpcy50YXNrU3R5bGUudm0ubmFtZSA9PSBcIkFwcHJvdmVkXCJcclxuICAgICkge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwiY29tcGxldGVcIjtcclxuICAgIH0gZWxzZSBpZiAodGhpcy50YXNrU3R5bGUuZml4dHVyZS5uYW1lID09IFwiQXBwcm92ZWRcIikge1xyXG4gICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwidm1cIjtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHZtRGF0YSAmJlxyXG4gICAgICAgICgodm1EYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmIHZtRGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcImRpc2FncmVlXCIpIHx8XHJcbiAgICAgICAgICB2bURhdGE/LnJlZG9TdGF0dXMpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJ2bS1yZWRvXCI7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBmaXh0dXJlRGF0YSAmJlxyXG4gICAgICAgICgoZml4dHVyZURhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiZcclxuICAgICAgICAgIGZpeHR1cmVEYXRhLmZlZWRiYWNrU3RhdHVzID09IFwiZGlzYWdyZWVcIikgfHxcclxuICAgICAgICAgIGZpeHR1cmVEYXRhPy5yZWRvU3RhdHVzKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICF0aGlzLmZsb29yRGF0YS5pc0VkaXRlZFxyXG4gICAgICAgICAgPyBcImZpeHR1cmUtcmVkb1wiXHJcbiAgICAgICAgICA6IFwiZml4dHVyZVwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBlbHNlIHtcclxuICAgIC8vICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnbGF5b3V0J1xyXG4gICAgLy8gICBpZiAobGF5b3V0RGF0YSAmJiAoKGxheW91dERhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiYgbGF5b3V0RGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcImRpc2FncmVlXCIpIHx8IGxheW91dERhdGE/LnJlZG9TdGF0dXMpKSB7XHJcbiAgICAvLyAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnbGF5b3V0LXJlZG8nO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuc3RvcmVGZWVkYmFjaz8uVm1EYXRhLmxlbmd0aCkge1xyXG4gICAgLy8gICBjb25zdCB2bUZlZWRiYWNrID0gdGhpcy5zdG9yZUZlZWRiYWNrPy5WbURhdGEuZmlsdGVyKChmZWVkYmFjazogYW55KSA9PiBmZWVkYmFjay50eXBlID09PSAndm0nKVxyXG5cclxuICAgIC8vICAgY29uc3QgYWxsRml4dHVyZXNDb21wbGV0ZWQgPSB2bUZlZWRiYWNrLmV2ZXJ5KChmZWVkYmFjazogYW55KSA9PiBmZWVkYmFjay5zdGF0dXMgPT09ICdjb21wbGV0ZScpXHJcblxyXG4gICAgLy8gICBpZiAoYWxsRml4dHVyZXNDb21wbGV0ZWQpIHtcclxuICAgIC8vICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdjb21wbGV0ZSdcclxuICAgIC8vICAgICByZXR1cm5cclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgbGV0IGhhc0Rpc2FncmVlID0gZmFsc2U7XHJcblxyXG4gICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHZtRmVlZGJhY2subGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgICBjb25zdCBpc3N1ZXMgPSB2bUZlZWRiYWNrPy5baV0/LmFuc3dlcnM/LlswXT8uaXNzdWVzO1xyXG5cclxuICAgIC8vICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgaXNzdWVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAvLyAgICAgICAgIGNvbnN0IGlzc3VlID0gaXNzdWVzW2pdO1xyXG4gICAgLy8gICAgICAgICBjb25zdCBkZXRhaWxzID0gaXNzdWU/LkRldGFpbHMgfHwgW107XHJcblxyXG4gICAgLy8gICAgICAgICBpZiAoZGV0YWlscy5zb21lKChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSAnZGlzYWdyZWUnKSkge1xyXG4gICAgLy8gICAgICAgICAgIGhhc0Rpc2FncmVlID0gdHJ1ZTtcclxuICAgIC8vICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcblxyXG4gICAgLy8gICAgIGlmIChoYXNEaXNhZ3JlZSkgYnJlYWs7XHJcbiAgICAvLyAgICAgaWYgKGlzc3Vlcz8ubGVuZ3RoKSB7XHJcbiAgICAvLyAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlzc3Vlcy5sZW5ndGg7IGorKykge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBpc3N1ZSA9IGlzc3Vlc1tqXTtcclxuICAgIC8vICAgICAgICAgY29uc3QgZGV0YWlscyA9IGlzc3VlPy5EZXRhaWxzIHx8IFtdO1xyXG5cclxuICAgIC8vICAgICAgICAgaWYgKGRldGFpbHMuc29tZSgoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLnN0YXR1cyA9PT0gJ2Rpc2FncmVlJykpIHtcclxuICAgIC8vICAgICAgICAgICBoYXNEaXNhZ3JlZSA9IHRydWU7XHJcbiAgICAvLyAgICAgICAgICAgYnJlYWs7XHJcbiAgICAvLyAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICBpZiAoaGFzRGlzYWdyZWUpIGJyZWFrO1xyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gICBpZiAoaGFzRGlzYWdyZWUpIHtcclxuICAgIC8vICAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdmaXh0dXJlLXJlZG8nO1xyXG4gICAgLy8gICAgIHJldHVyblxyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdmaXh0dXJlJ1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLnN0b3JlRmVlZGJhY2s/LmxheW91dERhdGEubGVuZ3RoKSB7XHJcbiAgICAvLyAgIGNvbnN0IGxheW91dEZlZWRiYWNrID0gdGhpcy5zdG9yZUZlZWRiYWNrPy5sYXlvdXREYXRhLmZpbHRlcigoZmVlZGJhY2s6IGFueSkgPT4gZmVlZGJhY2sudHlwZSA9PT0gJ2xheW91dCcpXHJcbiAgICAvLyAgIGxldCBoYXNEaXNhZ3JlZSA9IGZhbHNlO1xyXG5cclxuICAgIC8vICAgaWYgKGxheW91dEZlZWRiYWNrW2xheW91dEZlZWRiYWNrLmxlbmd0aCAtIDFdLnN0YXR1cyA9PT0gJ2NvbXBsZXRlJykge1xyXG4gICAgLy8gICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gJ2ZpeHR1cmUnXHJcbiAgICAvLyAgICAgcmV0dXJuXHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyAgIGNvbnN0IGlzc3VlcyA9IGxheW91dEZlZWRiYWNrW2xheW91dEZlZWRiYWNrLmxlbmd0aCAtIDFdPy5hbnN3ZXJzPy5bMF0/Lmlzc3VlcztcclxuXHJcbiAgICAvLyAgIGlmIChpc3N1ZXM/Lmxlbmd0aCkge1xyXG4gICAgLy8gICAgIGZvciAoY29uc3QgaXNzdWUgb2YgaXNzdWVzKSB7XHJcbiAgICAvLyAgICAgICBjb25zdCBkZXRhaWxzID0gaXNzdWU/LkRldGFpbHMgfHwgW107XHJcbiAgICAvLyAgICAgICBpZiAoZGV0YWlscy5zb21lKChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSAnZGlzYWdyZWUnKSkge1xyXG4gICAgLy8gICAgICAgICBoYXNEaXNhZ3JlZSA9IHRydWU7XHJcbiAgICAvLyAgICAgICAgIGJyZWFrO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgaWYgKGhhc0Rpc2FncmVlKSB7XHJcbiAgICAvLyAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnbGF5b3V0LXJlZG8nO1xyXG4gICAgLy8gICAgIHJldHVyblxyXG4gICAgLy8gICB9XHJcblxyXG4gICAgLy8gICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9ICdsYXlvdXQnXHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gaWYgKCghdGhpcy5zdG9yZUZlZWRiYWNrPy5sYXlvdXREYXRhPy5sZW5ndGggJiYgIXRoaXMuc3RvcmVGZWVkYmFjaz8uZml4dHVyZURhdGE/Lmxlbmd0aCAmJiAhdGhpcy5zdG9yZUZlZWRiYWNrPy5WbURhdGE/Lmxlbmd0aCkpIHtcclxuICAgIC8vICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSAnbGF5b3V0J1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0VGVtcGxhdGUoZml4dHVyZUNvbmZpZ0lkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmdldEZpeHR1cmVUZW1wbGF0ZShmaXh0dXJlQ29uZmlnSWQpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcHJvY2Vzc0xheW91dEZlZWRiYWNrKHN0b3JlRmVlZGJhY2s6IGFueVtdKSB7XHJcbiAgICBjb25zdCBsYXlvdXRGZWVkYmFjayA9IHN0b3JlRmVlZGJhY2suZmluZChcclxuICAgICAgKGZlZWRiYWNrKSA9PiBmZWVkYmFjay50eXBlID09PSBcImxheW91dFwiXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHdhbGxFbGVtZW50cyA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmlsdGVyKFxyXG4gICAgICAoZWxlbWVudDogYW55KSA9PiBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIlxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAobGF5b3V0RmVlZGJhY2spIHtcclxuICAgICAgY29uc3QgaXNzdWVzID0gbGF5b3V0RmVlZGJhY2s/LmFuc3dlcnM/LlswXT8uaXNzdWVzO1xyXG5cclxuICAgICAgaWYgKGlzc3Vlcykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXNzdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpc3N1ZSA9IGlzc3Vlc1tpXTtcclxuXHJcbiAgICAgICAgICBpZiAoaXNzdWUuaXNzdWVUeXBlID09PSBcImV4dHJhRml4dHVyZVwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVzID0gaXNzdWUuRGV0YWlscy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IGZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZTogYW55ID0gYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZShcclxuICAgICAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZUNvbmZpZ0lkXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKCF0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUlkID0gYG5ldy0ke2NyeXB0by5yYW5kb21VVUlEKCl9YDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZ2hvc3RGaXh0dXJlID0ge1xyXG4gICAgICAgICAgICAgICAgLi4udGVtcGxhdGU/LmRhdGEsXHJcbiAgICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlPy5kYXRhPy5faWQsXHJcbiAgICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlUG9zaXRpb246IHsgeDogMCwgeTogMCwgdW5pdDogXCJmdFwiIH0sXHJcbiAgICAgICAgICAgICAgICBzaGVsZkNvbmZpZzogZml4dHVyZS5zaGVsZkNvbmZpZyxcclxuICAgICAgICAgICAgICAgIGdob3N0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaXNzdWU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGZpeHR1cmUsXHJcbiAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJsYXlvdXRcIixcclxuICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAvLyBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7IGZpeHR1cmVOYW1lOiBnaG9zdEZpeHR1cmUuZml4dHVyZU5hbWUsIGZpeHR1cmVDb25maWdJZDogZ2hvc3RGaXh0dXJlLmZpeHR1cmVDb25maWdJZCwgX2lkOiBnaG9zdEZpeHR1cmUuX2lkIH0pO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgd2FsbEluZGV4OiBudW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgYXNzb2NXYWxsTnVtID0gZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcjtcclxuICAgICAgICAgICAgICAgIGlmIChhc3NvY1dhbGxOdW0gPj0gd2FsbEVsZW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICB3YWxsSW5kZXggPSB3YWxsRWxlbWVudHMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhc3NvY1dhbGxOdW0gPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB3YWxsSW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEluZGV4ID0gYXNzb2NXYWxsTnVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRGaXh0dXJlczogYW55ID0gd2FsbEVsZW1lbnRzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IHdhbGxJbmRleFxyXG4gICAgICAgICAgICAgICAgKS5maXh0dXJlcztcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFzc29jRml4dHVyZU51bSA9IGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhc3NvY0ZpeHR1cmVOdW0gPiBlbGVtZW50Rml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25cclxuICAgICAgICAgICAgICAgICAgICAuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gd2FsbEluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maXh0dXJlcy5wdXNoKGdob3N0Rml4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEgLSAxKS5wdXNoKGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFzc29jRml4dHVyZU51bSA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25cclxuICAgICAgICAgICAgICAgICAgICAuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gd2FsbEluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maXh0dXJlcy51bnNoaWZ0KGdob3N0Rml4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEgLSAxKS5pbnNlcnQoMCwgZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb25cclxuICAgICAgICAgICAgICAgICAgICAuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gd2FsbEluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5maXh0dXJlcy5zcGxpY2UoYXNzb2NGaXh0dXJlTnVtIC0gMSwgMCwgZ2hvc3RGaXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5nZXRGb3JtRml4dHVyZXMod2FsbEluZGV4ISAtIDEpLmluc2VydChhc3NvY0ZpeHR1cmVOdW0gLSAxLCBmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09IFwiZmxvb3JcIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXNzb2NGaXh0dXJlTnVtID0gZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGFzc29jRml4dHVyZU51bSA+IHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUucHVzaChnaG9zdEZpeHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAvLyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzLnB1c2goZml4dHVyZUdyb3VwKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXNzb2NGaXh0dXJlTnVtIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS51bnNoaWZ0KGdob3N0Rml4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMuaW5zZXJ0KDAsIGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLnNwbGljZShcclxuICAgICAgICAgICAgICAgICAgICBhc3NvY0ZpeHR1cmVOdW0gLSAxLFxyXG4gICAgICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZ2hvc3RGaXh0dXJlXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMuaW5zZXJ0KGFzc29jRml4dHVyZU51bSAtIDEsIGZpeHR1cmVHcm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBpc3N1ZS5pc3N1ZVR5cGUgPT09IFwiZml4dHVyZU1pc3NpbmdcIiB8fFxyXG4gICAgICAgICAgICBpc3N1ZS5pc3N1ZVR5cGUgPT09IFwiZml4dHVyZU1pc21hdGNoXCJcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IGlzc3VlLkRldGFpbHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSBcInBlbmRpbmdcIlxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmaXh0dXJlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBmaXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnd2FsbCcpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0YXJnZXRGaXh0dXJlSWQgPSBmaXh0dXJlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB3YWxsRWxlbWVudCBvZiB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHdhbGxFbGVtZW50LmVsZW1lbnRUeXBlICE9PSBcIndhbGxcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh3YWxsRWxlbWVudC5maXh0dXJlcylcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gd2FsbEVsZW1lbnQuZml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAoZjogYW55KSA9PiBmLl9pZCA9PT0gdGFyZ2V0Rml4dHVyZUlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ud2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlcyxcclxuICAgICAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJsYXlvdXRcIixcclxuICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgLy8gZWxzZSBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09ICdmbG9vcicpIHtcclxuICAgICAgICAgICAgICAvLyBjb25zdCB0YXJnZXRGaXh0dXJlSWQgPSBmaXh0dXJlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgY2VudGVyRml4dHVyZXMgPSB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSBjZW50ZXJGaXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAoZjogYW55KSA9PiBmLl9pZCA9PT0gdGFyZ2V0Rml4dHVyZUlkXHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgIC4uLmNlbnRlckZpeHR1cmVzW2ZpeHR1cmVJbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlcyxcclxuICAgICAgICAgICAgICAgICAgdGFza1R5cGU6IFwibGF5b3V0XCIsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc0ZpeHR1cmVGZWVkYmFjayhzdG9yZUZlZWRiYWNrOiBhbnlbXSkge1xyXG4gICAgY29uc3QgZml4dHVyZUZlZWRiYWNrID0gc3RvcmVGZWVkYmFjay5maWx0ZXIoXHJcbiAgICAgIChmZWVkYmFjaykgPT4gZmVlZGJhY2sudHlwZSA9PT0gXCJmaXh0dXJlXCJcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGZpbmRGaXh0dXJlVGFzayA9IHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5maW5kKFxyXG4gICAgICAodGFzazogYW55KSA9PiB0YXNrLnR5cGUgPT0gXCJmaXh0dXJlXCJcclxuICAgICk7XHJcblxyXG4gICAgZm9yIChjb25zdCBmZWVkYmFjayBvZiBmaXh0dXJlRmVlZGJhY2sgPz8gW10pIHtcclxuICAgICAgY29uc3QgYWlEYXRhID0gZmVlZGJhY2s/LmZpeHR1cmVBSURhdGE7XHJcbiAgICAgIGlmICghYWlEYXRhKSBjb250aW51ZTtcclxuXHJcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMuZmluZChcclxuICAgICAgICAoZjogYW55KSA9PiBmLl9pZCA9PT0gYWlEYXRhLmZpeHR1cmVJZFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWZpeHR1cmUpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgZmVlZGJhY2suRml4dHVyZURhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoZml4dHVyZSk7XHJcblxyXG4gICAgICBjb25zdCBzdGF0dXMgPVxyXG4gICAgICAgIChmaW5kRml4dHVyZVRhc2s/LnN0YXR1cyA9PT0gXCJzdWJtaXRcIiB8fCBmaW5kRml4dHVyZVRhc2s/LnJlZG9TdGF0dXMpICYmXHJcbiAgICAgICAgZmVlZGJhY2s/LmFuc3dlcnM/LlswXT8uc3RhdHVzXHJcbiAgICAgICAgICA/IGZlZWRiYWNrLmFuc3dlcnNbMF0uc3RhdHVzXHJcbiAgICAgICAgICA6IFwiXCI7XHJcblxyXG4gICAgICBPYmplY3QuYXNzaWduKGZpeHR1cmUsIHtcclxuICAgICAgICBpc3N1ZTogZmFsc2UsXHJcbiAgICAgICAgaXNzdWVEYXRhOiBhaURhdGEsXHJcbiAgICAgICAgdGFza1R5cGU6IFwiZml4dHVyZVwiLFxyXG4gICAgICAgIHN0YXR1cyxcclxuICAgICAgICBicmVhY2g6IGZpbmRGaXh0dXJlVGFzaz8uYnJlYWNoLFxyXG4gICAgICAgIHRhc2tTdGF0dXM6IGZpbmRGaXh0dXJlVGFzaz8uc3RhdHVzLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb2Nlc3NGaXh0dXJlRmVlZGJhY2tPbGQoc3RvcmVGZWVkYmFjazogYW55W10pIHtcclxuICAgIGNvbnN0IGZpeHR1cmVGZWVkYmFjayA9IHN0b3JlRmVlZGJhY2suZmlsdGVyKFxyXG4gICAgICAoZmVlZGJhY2spID0+IGZlZWRiYWNrLnR5cGUgPT09IFwiZml4dHVyZVwiXHJcbiAgICApO1xyXG4gICAgaWYgKGZpeHR1cmVGZWVkYmFjay5sZW5ndGgpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXh0dXJlRmVlZGJhY2subGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpc3N1ZXMgPSBmaXh0dXJlRmVlZGJhY2s/LltpXT8uYW5zd2Vycz8uWzBdPy5pc3N1ZXM7XHJcblxyXG4gICAgICAgIGlmIChpc3N1ZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBpc3N1ZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3QgaXNzdWUgPSBpc3N1ZXNbal07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlcyA9IGlzc3VlLkRldGFpbHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+IGZpeHR1cmUuc3RhdHVzID09PSBcInBlbmRpbmdcIlxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBmaXh0dXJlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSBmaXh0dXJlc1tqXTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnd2FsbCcpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0YXJnZXRGaXh0dXJlSWQgPSBmaXh0dXJlLmZpeHR1cmVJZDtcclxuXHJcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB3YWxsRWxlbWVudCBvZiB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgIHdhbGxFbGVtZW50LmVsZW1lbnRUeXBlICE9PSBcIndhbGxcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheSh3YWxsRWxlbWVudC5maXh0dXJlcylcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gd2FsbEVsZW1lbnQuZml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAoZjogYW55KSA9PiBmLl9pZCA9PT0gdGFyZ2V0Rml4dHVyZUlkXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgIHdhbGxFbGVtZW50LmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ud2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IGlzc3VlcyxcclxuICAgICAgICAgICAgICAgICAgICB0YXNrVHlwZTogXCJmaXh0dXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIC8vIGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnZmxvb3InKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNlbnRlckZpeHR1cmVzID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gY2VudGVyRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi5jZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc1ZtRmVlZGJhY2soc3RvcmVGZWVkYmFjazogYW55W10pIHtcclxuICAgIGNvbnN0IGZpeHR1cmVGZWVkYmFjayA9IHN0b3JlRmVlZGJhY2suZmlsdGVyKFxyXG4gICAgICAoZmVlZGJhY2spID0+IGZlZWRiYWNrLnR5cGUgPT09IFwidm1cIlxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAoZml4dHVyZUZlZWRiYWNrLmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpeHR1cmVGZWVkYmFjay5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGlzc3VlcyA9IGZpeHR1cmVGZWVkYmFjaz8uW2ldPy5hbnN3ZXJzPy5bMF0/Lmlzc3VlcztcclxuXHJcbiAgICAgICAgaWYgKGlzc3Vlcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGlzc3Vlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBjb25zdCBpc3N1ZSA9IGlzc3Vlc1tqXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVzID0gaXNzdWUuRGV0YWlscy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5zdGF0dXMgPT09IFwicGVuZGluZ1wiXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGZpeHR1cmVzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IGZpeHR1cmVzW2pdO1xyXG5cclxuICAgICAgICAgICAgICAvLyBpZiAoZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPT09ICd3YWxsJykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRhcmdldEZpeHR1cmVJZCA9IGZpeHR1cmUuZml4dHVyZUlkO1xyXG5cclxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdhbGxFbGVtZW50IG9mIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZWxlbWVudFR5cGUgIT09IFwid2FsbFwiIHx8XHJcbiAgICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHdhbGxFbGVtZW50LmZpeHR1cmVzKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSB3YWxsRWxlbWVudC5maXh0dXJlcy5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgIChmOiBhbnkpID0+IGYuX2lkID09PSB0YXJnZXRGaXh0dXJlSWRcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgd2FsbEVsZW1lbnQuZml4dHVyZXNbZml4dHVyZUluZGV4XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAuLi53YWxsRWxlbWVudC5maXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlRGF0YTogaXNzdWVzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcInZtXCIsXHJcbiAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICAgIC8vIGVsc2UgaWYgKGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID09PSAnZmxvb3InKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc3QgdGFyZ2V0Rml4dHVyZUlkID0gZml4dHVyZS5maXh0dXJlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGNlbnRlckZpeHR1cmVzID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gY2VudGVyRml4dHVyZXMuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgKGY6IGFueSkgPT4gZi5faWQgPT09IHRhcmdldEZpeHR1cmVJZFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgICAgICAuLi5jZW50ZXJGaXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWVEYXRhOiBpc3N1ZXMsXHJcbiAgICAgICAgICAgICAgICAgIHRhc2tUeXBlOiBcInZtXCIsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdHJhbnNmZXJBcnJheUl0ZW08VCA9IGFueT4oXHJcbiAgICBjdXJyZW50QXJyYXk6IFRbXSxcclxuICAgIHRhcmdldEFycmF5OiBUW10sXHJcbiAgICBjdXJyZW50SW5kZXg6IG51bWJlcixcclxuICAgIHRhcmdldEluZGV4OiBudW1iZXJcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZyb20gPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjdXJyZW50QXJyYXkubGVuZ3RoIC0gMSwgY3VycmVudEluZGV4KSk7XHJcbiAgICBjb25zdCB0byA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRhcmdldEFycmF5Lmxlbmd0aCwgdGFyZ2V0SW5kZXgpKTtcclxuXHJcbiAgICBpZiAoY3VycmVudEFycmF5Lmxlbmd0aCkge1xyXG4gICAgICB0YXJnZXRBcnJheS5zcGxpY2UodG8sIDAsIGN1cnJlbnRBcnJheS5zcGxpY2UoZnJvbSwgMSlbMF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVvcmRlckZpeHR1cmVNZXRhKGZsb29yRGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBtbVRvRmVldCA9IDMwNTtcclxuICAgIGNvbnN0IHcxRml4dHVyZXMgPSBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDFcclxuICAgICk/LmZpeHR1cmVzO1xyXG4gICAgY29uc3QgdzFGaXh0dXJlc1ggPSB3MUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKHN1bTogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgc3VtICsgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHcxRml4dHVyZXNZID0gdzFGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzJGaXh0dXJlcyA9IGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gMlxyXG4gICAgKT8uZml4dHVyZXM7XHJcbiAgICBjb25zdCB3MkZpeHR1cmVzWCA9IHcyRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzJGaXh0dXJlc1kgPSB3MkZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKHN1bTogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgc3VtICsgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3M0ZpeHR1cmVzID0gZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSAzXHJcbiAgICApPy5maXh0dXJlcztcclxuICAgIGNvbnN0IHczRml4dHVyZXNYID0gdzNGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChzdW06IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIHN1bSArIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCB3M0ZpeHR1cmVzWSA9IHczRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHc0Rml4dHVyZXMgPSBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAod2FsbDogYW55KSA9PiB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDRcclxuICAgICk/LmZpeHR1cmVzO1xyXG4gICAgY29uc3QgdzRGaXh0dXJlc1ggPSB3NEZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgMFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHc0Rml4dHVyZXNZID0gdzRGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgIChzdW06IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgIHN1bSArIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0LFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzVGaXh0dXJlcyA9IGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gNVxyXG4gICAgKT8uZml4dHVyZXM7XHJcbiAgICBjb25zdCB3NUZpeHR1cmVzWCA9IHc1Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAwXHJcbiAgICApO1xyXG4gICAgY29uc3QgdzVGaXh0dXJlc1kgPSB3NUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgKHN1bTogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgc3VtICsgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQsXHJcbiAgICAgIDBcclxuICAgICk7XHJcbiAgICBjb25zdCBjRml4dHVyZXMgPSBmbG9vckRhdGEuY2VudGVyRml4dHVyZTtcclxuICAgIGNvbnN0IGNGaXh0dXJlc1ggPVxyXG4gICAgICBjRml4dHVyZXMubGVuZ3RoICpcclxuICAgICAgY0ZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgY29uc3QgY0ZpeHR1cmVzWSA9XHJcbiAgICAgIDIgKlxyXG4gICAgICBjRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgY29uc3QgZW50cmFuY2VZID0gMTA7XHJcblxyXG4gICAgbGV0IG1pblhEaXN0YW5jZSA9IE1hdGgubWF4KHcxRml4dHVyZXNYLCBjRml4dHVyZXNYLCB3M0ZpeHR1cmVzWCk7XHJcbiAgICBpZiAodzJGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgbWluWERpc3RhbmNlICs9IHcyRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHc0Rml4dHVyZXMubGVuZ3RoIHx8IHc1Rml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgIGlmICh3NEZpeHR1cmVzLmxlbmd0aCAmJiB3NUZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgIG1pblhEaXN0YW5jZSArPSB3NUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgICAgMFxyXG4gICAgICAgICk7XHJcbiAgICAgIH0gZWxzZSBpZiAodzRGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICBtaW5YRGlzdGFuY2UgKz0gdzRGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSxcclxuICAgICAgICAgIDBcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHc1Rml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgbWluWERpc3RhbmNlICs9IHc1Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgICAgKG1heDogbnVtYmVyLCBmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmKGNGaXh0dXJlcy5sZW5ndGgpe1xyXG4gICAgLy8gICBtaW5YRGlzdGFuY2UgKz0gMiAqIChjRml4dHVyZXMucmVkdWNlKChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PiBNYXRoLm1heChtYXgsIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpLCAwKSlcclxuICAgIC8vIH1cclxuXHJcbiAgICBsZXQgbWluWURpc3RhbmNlID0gTWF0aC5tYXgoXHJcbiAgICAgIHcyRml4dHVyZXNZLFxyXG4gICAgICBjRml4dHVyZXNZLFxyXG4gICAgICB3NEZpeHR1cmVzWSArIHc1Rml4dHVyZXNZICsgZW50cmFuY2VZXHJcbiAgICApO1xyXG4gICAgaWYgKHcxRml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgIG1pbllEaXN0YW5jZSArPSB3MUZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgIDBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodzNGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgbWluWURpc3RhbmNlICs9IHczRml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgMFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjRml4dHVyZXMubGVuZ3RoKSB7XHJcbiAgICAgIG1pbllEaXN0YW5jZSArPVxyXG4gICAgICAgIDIgKlxyXG4gICAgICAgIGNGaXh0dXJlcy5yZWR1Y2UoXHJcbiAgICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gMSkge1xyXG4gICAgICAgIGVsZW1lbnQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28obWluWERpc3RhbmNlKTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gMlxyXG4gICAgICApIHtcclxuICAgICAgICBlbGVtZW50LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKG1pbllEaXN0YW5jZSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDNcclxuICAgICAgKSB7XHJcbiAgICAgICAgZWxlbWVudC5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhtaW5YRGlzdGFuY2UpO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgICAgKGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gNCB8fCBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDUpKSB8fFxyXG4gICAgICAgIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCIgJiYgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSAxKVxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgdzRMZW5ndGggPSB3NEZpeHR1cmVzPy5sZW5ndGhcclxuICAgICAgICAgID8gKHc0Rml4dHVyZXMubGVuZ3RoICsgMSkgKlxyXG4gICAgICAgICAgICB3NEZpeHR1cmVzLnJlZHVjZShcclxuICAgICAgICAgICAgICAobWF4OiBudW1iZXIsIGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgIE1hdGgubWF4KG1heCwgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpLFxyXG4gICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgOiAwO1xyXG5cclxuICAgICAgICBjb25zdCB3NUxlbmd0aCA9IHc1Rml4dHVyZXM/Lmxlbmd0aFxyXG4gICAgICAgICAgPyAodzVGaXh0dXJlcy5sZW5ndGggKyAxKSAqXHJcbiAgICAgICAgICAgIHc1Rml4dHVyZXMucmVkdWNlKFxyXG4gICAgICAgICAgICAgIChtYXg6IG51bWJlciwgZml4dHVyZTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgTWF0aC5tYXgobWF4LCBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCksXHJcbiAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICA6IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZWRZID0gdzRMZW5ndGggKyB3NUxlbmd0aDtcclxuICAgICAgICBjb25zdCByZW1haW5pbmdZID0gTWF0aC5tYXgobWluWURpc3RhbmNlIC0gdXNlZFksIDApO1xyXG5cclxuICAgICAgICBjb25zdCB3NEVtcHR5ID0gdzRMZW5ndGggPT09IDA7XHJcbiAgICAgICAgY29uc3QgdzVFbXB0eSA9IHc1TGVuZ3RoID09PSAwO1xyXG5cclxuICAgICAgICBsZXQgZW50cmFuY2VMZW5ndGggPSAwO1xyXG4gICAgICAgIGxldCB3NEZpbmFsID0gdzRMZW5ndGg7XHJcbiAgICAgICAgbGV0IHc1RmluYWwgPSB3NUxlbmd0aDtcclxuXHJcbiAgICAgICAgaWYgKHc0RW1wdHkgJiYgdzVFbXB0eSkge1xyXG4gICAgICAgICAgdzRGaW5hbCA9IHc1RmluYWwgPSBlbnRyYW5jZUxlbmd0aCA9IG1pbllEaXN0YW5jZSAvIDM7XHJcbiAgICAgICAgfSBlbHNlIGlmICh3NEVtcHR5ICYmICF3NUVtcHR5KSB7XHJcbiAgICAgICAgICB3NUZpbmFsID0gdzVMZW5ndGg7XHJcbiAgICAgICAgICB3NEZpbmFsID0gcmVtYWluaW5nWSAvIDI7XHJcbiAgICAgICAgICBlbnRyYW5jZUxlbmd0aCA9IHJlbWFpbmluZ1kgLyAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXc0RW1wdHkgJiYgdzVFbXB0eSkge1xyXG4gICAgICAgICAgdzRGaW5hbCA9IHc0TGVuZ3RoO1xyXG4gICAgICAgICAgdzVGaW5hbCA9IHJlbWFpbmluZ1kgLyAyO1xyXG4gICAgICAgICAgZW50cmFuY2VMZW5ndGggPSByZW1haW5pbmdZIC8gMjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgZW50cmFuY2VMZW5ndGggPSByZW1haW5pbmdZO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gNCkge1xyXG4gICAgICAgICAgZWxlbWVudC5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byh3NEZpbmFsKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gNVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgZWxlbWVudC5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byh3NUZpbmFsKTtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiICYmXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDFcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGVsZW1lbnQuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28oZW50cmFuY2VMZW5ndGgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IGZpeHR1cmVOdW1iZXIgPSAxO1xyXG5cclxuICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWxlbWVudC5lbGVtZW50TnVtYmVyID09PSAxKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgICAgIGxldCBjdXJyZW50WCA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gMDtcclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBjdXJyZW50WCA9IChmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KSAqIGk7XHJcbiAgICAgICAgICBpZiAodzVGaXh0dXJlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY3VycmVudFggKz0gZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRYKTtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRZKTtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID0gMTtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gMlxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRYID0gZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gMVxyXG4gICAgICAgICk/LmRpc3RhbmNlO1xyXG4gICAgICAgIGxldCBjdXJyZW50WSA9IDA7XHJcbiAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgY3VycmVudFkgPSAoZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpICogaTtcclxuICAgICAgICAgIGlmICh3MUZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjdXJyZW50WSArPSBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5yb3VuZFRvVHdvKFxyXG4gICAgICAgICAgICBjdXJyZW50WCAtIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WSk7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IDI7XHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJ3YWxsXCI7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSB3YWxsQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDNcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgICAgIGxldCBjdXJyZW50WCA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRZID0gZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgICAgICh3YWxsOiBhbnkpID0+IHdhbGwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIHdhbGwuZWxlbWVudE51bWJlciA9PT0gMlxyXG4gICAgICAgICk/LmRpc3RhbmNlO1xyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRYID0gKGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlIC8gbW1Ub0ZlZXQpICogaTtcclxuICAgICAgICAgIGlmICh3NEZpeHR1cmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjdXJyZW50WCArPSBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnggPSB0aGlzLnJvdW5kVG9Ud28oY3VycmVudFgpO1xyXG4gICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB0aGlzLnJvdW5kVG9Ud28oXHJcbiAgICAgICAgICAgIGN1cnJlbnRZIC0gZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50VHlwZSA9IFwid2FsbFwiO1xyXG4gICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA9IDM7XHJcbiAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVUeXBlID0gXCJ3YWxsXCI7XHJcblxyXG4gICAgICAgICAgaWYgKCFmaXh0dXJlLmdob3N0KSB7XHJcbiAgICAgICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSB3YWxsQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiZcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnROdW1iZXIgPT09IDRcclxuICAgICAgKSB7XHJcbiAgICAgICAgbGV0IHdhbGxBc3NvY2lhdGVkSW5kZXggPSAxO1xyXG4gICAgICAgIGxldCBjdXJyZW50WCA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRZID1cclxuICAgICAgICAgIGZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAgICh3YWxsOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgd2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgd2FsbC5lbGVtZW50TnVtYmVyID09PSA1XHJcbiAgICAgICAgICApPy5kaXN0YW5jZSArXHJcbiAgICAgICAgICBmbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgICAod2FsbDogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHdhbGwuZWxlbWVudFR5cGUgPT09IFwiZW50cmFuY2VcIiAmJiB3YWxsLmVsZW1lbnROdW1iZXIgPT09IDFcclxuICAgICAgICAgICk/LmRpc3RhbmNlO1xyXG5cclxuICAgICAgICBlbGVtZW50LmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSwgaTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WCk7XHJcbiAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMucm91bmRUb1R3byhcclxuICAgICAgICAgICAgY3VycmVudFkgKyAoZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpICogaVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID0gNDtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICBlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJlxyXG4gICAgICAgIGVsZW1lbnQuZWxlbWVudE51bWJlciA9PT0gNVxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgd2FsbEFzc29jaWF0ZWRJbmRleCA9IDE7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRYID0gMDtcclxuICAgICAgICBsZXQgY3VycmVudFkgPSAwO1xyXG4gICAgICAgIGVsZW1lbnQuZml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGN1cnJlbnRZID1cclxuICAgICAgICAgICAgKGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSAvIG1tVG9GZWV0KSAqIGkgK1xyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldDtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRYKTtcclxuICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRZKTtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID0gNTtcclxuICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVR5cGUgPSBcIndhbGxcIjtcclxuXHJcbiAgICAgICAgICBpZiAoIWZpeHR1cmUuZ2hvc3QpIHtcclxuICAgICAgICAgICAgLy8gZml4dHVyZS5maXh0dXJlTnVtYmVyID0gZml4dHVyZU51bWJlcisrO1xyXG4gICAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IHdhbGxBc3NvY2lhdGVkSW5kZXgrKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgbWF4Rml4dHVyZXNQZXJSb3cgPSBmbG9vckRhdGEuY2VudGVyRml4dHVyZS5sZW5ndGggLyAyO1xyXG4gICAgY29uc3QgdG90YWxSb3dzID0gMjtcclxuICAgIGNvbnN0IGNlbnRlclJvdyA9IE1hdGguZmxvb3IodG90YWxSb3dzIC8gMik7XHJcblxyXG4gICAgbGV0IGZsb29yQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuXHJcbiAgICBmbG9vckRhdGEuY2VudGVyRml4dHVyZS5mb3JFYWNoKChmaXh0dXJlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3Qgc3RhcnRYID1cclxuICAgICAgICBtaW5YRGlzdGFuY2UgLyAyIC1cclxuICAgICAgICAobWF4Rml4dHVyZXNQZXJSb3cgLyAyKSAqIChmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSAvIG1tVG9GZWV0KTtcclxuICAgICAgY29uc3Qgc3RhcnRZID1cclxuICAgICAgICBtaW5ZRGlzdGFuY2UgLyAyIC1cclxuICAgICAgICBjZW50ZXJSb3cgKiAoZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlIC8gbW1Ub0ZlZXQpO1xyXG5cclxuICAgICAgY29uc3QgY29sSW5kZXggPSBNYXRoLmZsb29yKGluZGV4IC8gMik7XHJcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gaW5kZXggJSAyID09PSAwID8gMSA6IDA7XHJcblxyXG4gICAgICBjb25zdCBjdXJyZW50WCA9XHJcbiAgICAgICAgc3RhcnRYICsgY29sSW5kZXggKiAoZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUgLyBtbVRvRmVldCk7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRZID1cclxuICAgICAgICBzdGFydFkgKyByb3dJbmRleCAqIChmaXh0dXJlLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgLyBtbVRvRmVldCk7XHJcblxyXG4gICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMucm91bmRUb1R3byhjdXJyZW50WCk7XHJcbiAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5yb3VuZFRvVHdvKGN1cnJlbnRZKTtcclxuICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwiZmxvb3JcIjtcclxuXHJcbiAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IGZsb29yQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVvcmRlckZpeHR1cmUoZmxvb3JEYXRhOiBhbnkpIHtcclxuICAgIGxldCBmaXh0dXJlTnVtYmVyID0gMTtcclxuXHJcbiAgICAvLyBXYWxsc1xyXG4gICAgZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGxldCB3YWxsQXNzb2NpYXRlZEluZGV4ID0gMTtcclxuXHJcbiAgICAgICAgZWxlbWVudC5maXh0dXJlcy5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRUeXBlID0gXCJ3YWxsXCI7XHJcbiAgICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50TnVtYmVyID0gZWxlbWVudC5lbGVtZW50TnVtYmVyO1xyXG4gICAgICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwid2FsbFwiO1xyXG5cclxuICAgICAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgICAgICAvLyBmaXh0dXJlLmZpeHR1cmVOdW1iZXIgPSBmaXh0dXJlTnVtYmVyKys7XHJcbiAgICAgICAgICAgIGZpeHR1cmUuYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID0gd2FsbEFzc29jaWF0ZWRJbmRleCsrO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICAgICAgZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgPSBudWxsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBDZW50ZXIgZmxvb3IgZml4dHVyZXNcclxuICAgIGxldCBmbG9vckFzc29jaWF0ZWRJbmRleCA9IDE7XHJcbiAgICBmbG9vckRhdGEuY2VudGVyRml4dHVyZS5mb3JFYWNoKChmaXh0dXJlOiBhbnkpID0+IHtcclxuICAgICAgZml4dHVyZS5maXh0dXJlVHlwZSA9IFwiZmxvb3JcIjtcclxuXHJcbiAgICAgIGlmICghZml4dHVyZS5naG9zdCkge1xyXG4gICAgICAgIC8vIGZpeHR1cmUuZml4dHVyZU51bWJlciA9IGZpeHR1cmVOdW1iZXIrKztcclxuICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IGZsb29yQXNzb2NpYXRlZEluZGV4Kys7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlTnVtYmVyID0gbnVsbDtcclxuICAgICAgICBmaXh0dXJlLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0RWxlbWVudFZhbHVlKGdyb3VwOiBhbnkpIHtcclxuICAgIHJldHVybiBncm91cC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlcjogZ2V0IHdhbGwgbWV0YSBieSBlbGVtZW50IG51bWJlciAoMS1iYXNlZClcclxuICBwcml2YXRlIGdldFdhbGxCeU51bWJlcihlbGVtZW50TnVtYmVyOiBudW1iZXIpOiBhbnkgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5maW5kKFxyXG4gICAgICAodzogYW55KSA9PiB3LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiB3LmVsZW1lbnROdW1iZXIgPT09IGVsZW1lbnROdW1iZXJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXI6IGZpbmQgZml4dHVyZSBieSBpZCBhY3Jvc3Mgd2FsbHMgYW5kIGNlbnRlciBmaXh0dXJlc1xyXG4gIHByaXZhdGUgZmluZEZpeHR1cmVCeUlkKFxyXG4gICAgZml4dHVyZUlkOiBzdHJpbmdcclxuICApOiB7IGZpeHR1cmU6IGFueTsgcGFyZW50PzogYW55IH0gfCBudWxsIHtcclxuICAgIGlmICghZml4dHVyZUlkKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5mbG9vckRhdGE/LmxheW91dFBvbHlnb24gPz8gW10pIHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWxlbWVudC5maXh0dXJlcykpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgZWxlbWVudC5maXh0dXJlcykge1xyXG4gICAgICAgICAgaWYgKGZpeHR1cmUuX2lkID09PSBmaXh0dXJlSWQpIHJldHVybiB7IGZpeHR1cmUsIHBhcmVudDogZWxlbWVudCB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiB0aGlzLmZsb29yRGF0YT8uY2VudGVyRml4dHVyZSA/PyBbXSkge1xyXG4gICAgICBpZiAoZml4dHVyZS5faWQgPT09IGZpeHR1cmVJZCkgcmV0dXJuIHsgZml4dHVyZSwgcGFyZW50OiB0aGlzLmZsb29yRGF0YSB9O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcm91bmRUb1R3byhudW06IG51bWJlcikge1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQobnVtICogMTAwKSAvIDEwMDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFN0b3JlRml4dHVyZXMoc3RvcmVJZDogc3RyaW5nLCBlbmFibGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICghdGhpcy5maXh0dXJlVGVtcGxhdGVzLmxlbmd0aCkge1xyXG4gICAgICBhd2FpdCB0aGlzLmdldEZpeHR1cmVUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0gbnVsbDtcclxuICAgIHRoaXMuYXBpU2VydmljZVxyXG4gICAgICAuZ2V0U3RvcmVGaXh0dXJlcyh7IGlkOiBbc3RvcmVJZF0sIHRyZWVWaWV3OiB0cnVlIH0pXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXJlcz8uZGF0YT8uWzBdPy5mbG9vcnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5wbGFub0RhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUocmVzLmRhdGFbMF0pO1xyXG4gICAgICAgICAgaWYgKHRoaXMuZmxvb3JEYXRhPy5faWQpIHtcclxuICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEgPSBzdHJ1Y3R1cmVkQ2xvbmUoXHJcbiAgICAgICAgICAgICAgcmVzLmRhdGFbMF0uZmxvb3JzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoZmxvb3I6IGFueSkgPT4gZmxvb3I/Ll9pZCA9PT0gdGhpcy5mbG9vckRhdGE/Ll9pZFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhID0gc3RydWN0dXJlZENsb25lKHJlcy5kYXRhWzBdLmZsb29yc1swXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5leHRyYWN0QWxsRml4dHVyZXModGhpcy5mbG9vckRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29ySWQuc2V0VmFsdWUodGhpcy5mbG9vckRhdGEuX2lkLCB7XHJcbiAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnN0b3JlTWV0cmljcy5mbG9vckNvdW50ID0gdGhpcy5wbGFub0RhdGE/LmZsb29ycz8ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIHRoaXMuZGlzYWJsZUVkaXQgPSBmYWxzZTtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcclxuICAgICAgICAgICAgICB0aGlzLnRhc2tEZXRhaWxzKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCksXHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRTdG9yZUZlZWRiYWNrKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICAgICAgICAgIHt9XHJcbiAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICB9IGNhdGNoIHt9XHJcblxyXG4gICAgICAgICAgdGhpcy5yZW5kZXJGbG9vcigpO1xyXG5cclxuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0Rml4dHVyZUZlZWRiYWNrKCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoZW5hYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Rm9ybT8uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gZmV0Y2ggcGxhbm9cIik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBleHRyYWN0QWxsRml4dHVyZXMoZmxvb3JEYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGV4dHJhY3RlZEZpeHR1cmUgPSBbXHJcbiAgICAgIC4uLihmbG9vckRhdGE/Lm1hc3RlclRlbXBsYXRlcyA/PyBbXSksXHJcbiAgICAgIC4uLihmbG9vckRhdGE/LmNlbnRlckZpeHR1cmUgPz8gW10pLFxyXG4gICAgXTtcclxuXHJcbiAgICBmbG9vckRhdGE/LmxheW91dFBvbHlnb24/LmZvckVhY2goKGxwOiBhbnkpID0+IHtcclxuICAgICAgZXh0cmFjdGVkRml4dHVyZS5wdXNoKC4uLihscC5maXh0dXJlcyA/PyBbXSkpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hbGxGaXh0dXJlcyA9IGV4dHJhY3RlZEZpeHR1cmU7XHJcblxyXG4gICAgdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzID0gW1xyXG4gICAgICAuLi50aGlzLmZsb29yRGF0YSEubGF5b3V0UG9seWdvbi5mbGF0TWFwKChlOiBhbnkpID0+IGU/LmZpeHR1cmVzID8/IFtdKSxcclxuICAgICAgLi4uKHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlID8/IFtdKSxcclxuICAgIF07XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJGbG9vcih1cGRhdGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICB0aGlzLnN0b3JlTWV0cmljcy5maXh0dXJlQ291bnQgPSB0aGlzLmZsb29yRGF0YS5maXh0dXJlQ291bnQ7XHJcbiAgICB0aGlzLnN0b3JlTWV0cmljcy52bUNvdW50ID0gdGhpcy5mbG9vckRhdGEudm1Db3VudDtcclxuICAgIHRoaXMuZHJhd0luaXRpYWxDb250ZW50KCk7XHJcbiAgICBpZiAodXBkYXRlKSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG5cclxuICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3YWxsOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAod2FsbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGNvbnN0IHdhbGxJdGVtID0gdGhpcy5wYXRjaFdhbGxFbGVtZW50cyh7XHJcbiAgICAgICAgICAgIGVsZW1lbnRUeXBlOiB3YWxsLmVsZW1lbnRUeXBlLFxyXG4gICAgICAgICAgICBlbGVtZW50TnVtYmVyOiB3YWxsLmVsZW1lbnROdW1iZXIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB3YWxsLmZpeHR1cmVzLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZml4dHVyZT8uZml4dHVyZU5hbWUgPT09IFwic3BhY2VcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgICAgICAgICAgZml4dHVyZU5hbWU6IGZpeHR1cmUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiBmaXh0dXJlLmZpeHR1cmVDb25maWdJZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmUuX2lkLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgKHdhbGxJdGVtLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgd2FsbC5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlbGVHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAgIHR5cGU6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICAgID8gZWxlLmZpeHR1cmVOYW1lXHJcbiAgICAgICAgICAgICAgICAgIDogXCJPdGhlcnNcIixcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIGN1c3RvbU5hbWU6IFtcclxuICAgICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICAgID8gXCJcIlxyXG4gICAgICAgICAgICAgICAgICA6IGVsZS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgKHdhbGxJdGVtLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKGVsZUdyb3VwKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybVdhbGxzLnB1c2god2FsbEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGE/LmNlbnRlckZpeHR1cmU/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlLmZvckVhY2goKGZpeHR1cmU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICAgICAgICBmaXh0dXJlTmFtZTogZml4dHVyZS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiBmaXh0dXJlLmZpeHR1cmVDb25maWdJZCxcclxuICAgICAgICAgICAgX2lkOiBmaXh0dXJlLl9pZCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vckZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICAgICAgZml4dHVyZUdyb3VwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuZmxvb3JEYXRhPy5vdGhlckVsZW1lbnRzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZWxlR3JvdXAgPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgdHlwZTogW1xyXG4gICAgICAgICAgICAgIHRoaXMub3RoZXJFbGVtZW50TGlzdC5zb21lKChvKSA9PiBvLnZhbHVlID09PSBlbGUuZml4dHVyZU5hbWUpXHJcbiAgICAgICAgICAgICAgICA/IGVsZS5maXh0dXJlTmFtZVxyXG4gICAgICAgICAgICAgICAgOiBcIk90aGVyc1wiLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBjdXN0b21OYW1lOiBbXHJcbiAgICAgICAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRMaXN0LnNvbWUoKG8pID0+IG8udmFsdWUgPT09IGVsZS5maXh0dXJlTmFtZSlcclxuICAgICAgICAgICAgICAgID8gXCJcIlxyXG4gICAgICAgICAgICAgICAgOiBlbGUuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yT3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgICAgIGVsZUdyb3VwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpYmVUb0ZpeHR1cmVDb25maWdJZENoYW5nZXMoKTtcclxuICAgIHRoaXMuc3Vic2NyaWJlVG9PdGhlckVsZW1lbnRzQ2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0luaXRpYWxDb250ZW50KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5jYW52YXMuY2xlYXIoKTtcclxuICAgIHRoaXMucmVvcmRlckZpeHR1cmUodGhpcy5mbG9vckRhdGEpO1xyXG4gICAgYXdhaXQgdGhpcy5kcmF3TGF5b3V0RWxlbWVudHMoKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZXNpemVDYW52YXMoKTtcclxuICAgICAgdGhpcy5maXRDYW52YXNUb0xheW91dEFuaW1hdGVkKCk7XHJcbiAgICB9LCAzMDApO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjaz8uZml4dHVyZUZlZWRiYWNrPy5maXh0dXJlSWQgJiZcclxuICAgICAgIXRoaXMuaXNSaWdodFBhbmVsQ29sbGFwc2VkICYmXHJcbiAgICAgIHRoaXMuYWN0aXZlSGlnaGxpZ2h0XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5jYW52YXMuYWRkKHRoaXMuYWN0aXZlSGlnaGxpZ2h0KTtcclxuICAgICAgdGhpcy5rZWVwSGlnaGxpZ2h0T25Ub3AoKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZHJhd0JnKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEZ1bGxMYXlvdXRCb3VuZHMoKSB7XHJcbiAgICBjb25zdCBvYmplY3RzID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgaWYgKCFvYmplY3RzLmxlbmd0aCkgcmV0dXJuIHsgbGVmdDogMCwgdG9wOiAwLCB3aWR0aDogMCwgaGVpZ2h0OiAwIH07XHJcblxyXG4gICAgbGV0IG1pblggPSBJbmZpbml0eSxcclxuICAgICAgbWluWSA9IEluZmluaXR5LFxyXG4gICAgICBtYXhYID0gLUluZmluaXR5LFxyXG4gICAgICBtYXhZID0gLUluZmluaXR5O1xyXG5cclxuICAgIGZvciAoY29uc3Qgb2JqIG9mIG9iamVjdHMpIHtcclxuICAgICAgY29uc3QgcmVjdCA9IG9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgICAgbWluWCA9IE1hdGgubWluKG1pblgsIHJlY3QubGVmdCk7XHJcbiAgICAgIG1pblkgPSBNYXRoLm1pbihtaW5ZLCByZWN0LnRvcCk7XHJcbiAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCByZWN0LmxlZnQgKyByZWN0LndpZHRoKTtcclxuICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJlY3QudG9wICsgcmVjdC5oZWlnaHQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxlZnQ6IG1pblgsXHJcbiAgICAgIHRvcDogbWluWSxcclxuICAgICAgd2lkdGg6IG1heFggLSBtaW5YLFxyXG4gICAgICBoZWlnaHQ6IG1heFkgLSBtaW5ZLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZml0Q2FudmFzVG9MYXlvdXRBbmltYXRlZChkdXJhdGlvbiA9IDQwMCkge1xyXG4gICAgaWYgKCF0aGlzLmNhbnZhcykgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZW5hYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG4gICAgaWYgKCFib3VuZHMud2lkdGggfHwgIWJvdW5kcy5oZWlnaHQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBjYW52YXNXID0gdGhpcy5jYW52YXMuZ2V0V2lkdGgoKTtcclxuICAgIGNvbnN0IGNhbnZhc0ggPSB0aGlzLmNhbnZhcy5nZXRIZWlnaHQoKTtcclxuXHJcbiAgICAvLyBGaW5hbCB6b29tIHRvIGZpdCAod2l0aCBwYWRkaW5nKVxyXG4gICAgY29uc3Qgc2NhbGVYID0gY2FudmFzVyAvIGJvdW5kcy53aWR0aDtcclxuICAgIGNvbnN0IHNjYWxlWSA9IGNhbnZhc0ggLyBib3VuZHMuaGVpZ2h0O1xyXG4gICAgY29uc3QgdGFyZ2V0Wm9vbSA9IE1hdGgubWluKHNjYWxlWCwgc2NhbGVZKSAqIDAuOTsgLy8gcGFkZGluZyAxMCVcclxuXHJcbiAgICAvLyBEZXNpcmVkIHZpZXdwb3J0IG9mZnNldCB0byBjZW50ZXIgbGF5b3V0XHJcbiAgICBjb25zdCB0YXJnZXRWcHQgPSBbXHJcbiAgICAgIC4uLih0aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSB8fCBbMSwgMCwgMCwgMSwgMCwgMF0pLFxyXG4gICAgXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIHRhcmdldFZwdFswXSA9IHRhcmdldFpvb207IC8vIHNjYWxlWFxyXG4gICAgdGFyZ2V0VnB0WzNdID0gdGFyZ2V0Wm9vbTsgLy8gc2NhbGVZXHJcblxyXG4gICAgdGFyZ2V0VnB0WzRdID0gY2FudmFzVyAvIDIgLSAoYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyKSAqIHRhcmdldFpvb207IC8vIGNlbnRlciBYXHJcbiAgICB0YXJnZXRWcHRbNV0gPSBjYW52YXNIIC8gMiAtIChib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDIpICogdGFyZ2V0Wm9vbTsgLy8gY2VudGVyIFlcclxuXHJcbiAgICAvLyBDdXJyZW50IHZpZXdwb3J0IChzdGFydGluZyBwb2ludCBvZiBhbmltYXRpb24pXHJcbiAgICBjb25zdCBzdGFydFZwdCA9IFsuLi50aGlzLmNhbnZhcy52aWV3cG9ydFRyYW5zZm9ybSFdIGFzIGZhYnJpYy5UTWF0MkQ7XHJcblxyXG4gICAgZmFicmljLnV0aWwuYW5pbWF0ZSh7XHJcbiAgICAgIHN0YXJ0VmFsdWU6IDAsXHJcbiAgICAgIGVuZFZhbHVlOiAxLFxyXG4gICAgICBkdXJhdGlvbixcclxuICAgICAgZWFzaW5nOiBmYWJyaWMudXRpbC5lYXNlLmVhc2VPdXRDdWJpYyxcclxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdnB0ID0gdGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hO1xyXG5cclxuICAgICAgICAvLyBJbnRlcnBvbGF0ZSBtYXRyaXggdmFsdWVzXHJcbiAgICAgICAgdnB0WzBdID0gc3RhcnRWcHRbMF0gKyAodGFyZ2V0VnB0WzBdIC0gc3RhcnRWcHRbMF0pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzNdID0gc3RhcnRWcHRbM10gKyAodGFyZ2V0VnB0WzNdIC0gc3RhcnRWcHRbM10pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzRdID0gc3RhcnRWcHRbNF0gKyAodGFyZ2V0VnB0WzRdIC0gc3RhcnRWcHRbNF0pICogdmFsdWU7XHJcbiAgICAgICAgdnB0WzVdID0gc3RhcnRWcHRbNV0gKyAodGFyZ2V0VnB0WzVdIC0gc3RhcnRWcHRbNV0pICogdmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZHJhd0xheW91dEVsZW1lbnRzKCkge1xyXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24ubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uW2luZGV4XTtcclxuXHJcbiAgICAgIGxldCB3YWxsO1xyXG5cclxuICAgICAgZWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uID8/PSB7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICAgIHVuaXQ6IFwiZnRcIixcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKGVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBlbGVtZW50LnVuaXQpO1xyXG4gICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhlbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgZWxlbWVudC51bml0KTtcclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMud2FsbFRoaWNrbmVzcztcclxuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMudG9QaXhlbHMoZWxlbWVudC5kaXN0YW5jZSwgZWxlbWVudC51bml0KTtcclxuICAgICAgICB3YWxsID0gYXdhaXQgdGhpcy5kcmF3V2FsbCh0aGlzLmNhbnZhcywgeCwgeSwgaGVpZ2h0LCB3aWR0aCwgZWxlbWVudCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiKSB7XHJcbiAgICAgICAgY29uc3QgYXJyb3dXaWR0aCA9IDgwO1xyXG4gICAgICAgIGNvbnN0IGFycm93SGVpZ2h0ID0gNzU7XHJcbiAgICAgICAgY29uc3QgYXJyb3dCYXNlID0gNDA7XHJcbiAgICAgICAgdGhpcy5kcmF3RW50cmFuY2UoXHJcbiAgICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICAgIHgsXHJcbiAgICAgICAgICB5LFxyXG4gICAgICAgICAgYXJyb3dXaWR0aCxcclxuICAgICAgICAgIGFycm93SGVpZ2h0LFxyXG4gICAgICAgICAgYXJyb3dCYXNlLFxyXG4gICAgICAgICAgZWxlbWVudFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChlbGVtZW50LmVsZW1lbnRUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmVHcm91cHM6IGZhYnJpYy5Hcm91cFtdID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgZWxlbWVudD8uZml4dHVyZXM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlID0gZWxlbWVudC5maXh0dXJlc1tqXTtcclxuICAgICAgICAgIGNvbnN0IHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAgICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgY29uc3QgZml4dHVyZUhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlV2lkdGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmaXh0dXJlT2JqID0gYXdhaXQgdGhpcy5kcmF3Rml4dHVyZShcclxuICAgICAgICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgIGZpeHR1cmVIZWlnaHQsXHJcbiAgICAgICAgICAgIGZpeHR1cmVXaWR0aCxcclxuICAgICAgICAgICAgZml4dHVyZVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGZpeHR1cmVHcm91cHMucHVzaChmaXh0dXJlT2JqIGFzIGZhYnJpYy5Hcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC5pc0xvY2tlZCAmJiB3YWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmUod2FsbCk7XHJcbiAgICAgICAgICBmaXh0dXJlR3JvdXBzLmZvckVhY2goKGYpID0+IHRoaXMuY2FudmFzLnJlbW92ZShmKSk7XHJcblxyXG4gICAgICAgICAgY29uc3QgY29tYmluZWRHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoW3dhbGwsIC4uLmZpeHR1cmVHcm91cHNdLCB7XHJcbiAgICAgICAgICAgIGhhc0NvbnRyb2xzOiB0cnVlLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGNvbWJpbmVkR3JvdXAuc2V0KHsgaXNMb2NrZWQ6IHRydWUgfSk7XHJcbiAgICAgICAgICB0aGlzLmNhbnZhcy5hZGQoY29tYmluZWRHcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnQ/Lm90aGVyRWxlbWVudHM/Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBvdGhlckVsZW1lbnQgPSBlbGVtZW50Lm90aGVyRWxlbWVudHNbal07XHJcbiAgICAgICAgICBjb25zdCB4ID0gdGhpcy50b1BpeGVscyhvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi54LCBcImZ0XCIpO1xyXG4gICAgICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgXCJmdFwiKTtcclxuICAgICAgICAgIGNvbnN0IGEgPSBvdGhlckVsZW1lbnQucmVsYXRpdmVQb3NpdGlvbi5hbmdsZTtcclxuICAgICAgICAgIGNvbnN0IGggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnZhbHVlLFxyXG4gICAgICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgY29uc3QgZml4dHVyZU9iaiA9IHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICB5LFxyXG4gICAgICAgICAgICBhLFxyXG4gICAgICAgICAgICB3LFxyXG4gICAgICAgICAgICBoLFxyXG4gICAgICAgICAgICBvdGhlckVsZW1lbnRcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgLy8gZWxlbWVudHNHcm91cC5wdXNoKGZpeHR1cmVPYmogYXMgZmFicmljLkdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZmxvb3JEYXRhPy5jZW50ZXJGaXh0dXJlPy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVtpXTtcclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLngsXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXRcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnksXHJcbiAgICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXRcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZml4dHVyZUhlaWdodCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IGZpeHR1cmVXaWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgICApO1xyXG4gICAgICBhd2FpdCB0aGlzLmRyYXdGaXh0dXJlKFxyXG4gICAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICAgIHgsXHJcbiAgICAgICAgeSxcclxuICAgICAgICBmaXh0dXJlSGVpZ2h0LFxyXG4gICAgICAgIGZpeHR1cmVXaWR0aCxcclxuICAgICAgICBmaXh0dXJlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmZsb29yRGF0YT8ub3RoZXJFbGVtZW50cz8ubGVuZ3RoOyBqKyspIHtcclxuICAgICAgY29uc3Qgb3RoZXJFbGVtZW50ID0gdGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50c1tqXTtcclxuICAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueCwgXCJmdFwiKTtcclxuICAgICAgY29uc3QgeSA9IHRoaXMudG9QaXhlbHMob3RoZXJFbGVtZW50LnJlbGF0aXZlUG9zaXRpb24ueSwgXCJmdFwiKTtcclxuICAgICAgY29uc3QgYSA9IG90aGVyRWxlbWVudC5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlO1xyXG4gICAgICBjb25zdCBoID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgICBvdGhlckVsZW1lbnQuZml4dHVyZVN0YXRpY0xlbmd0aC51bml0XHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHcgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIG90aGVyRWxlbWVudC5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgb3RoZXJFbGVtZW50LmZpeHR1cmVTdGF0aWNXaWR0aC51bml0XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBjb25zdCBmaXh0dXJlT2JqID0gdGhpcy5kcmF3T3RoZXJFbGVtZW50c1dpdGhMYWJlbChcclxuICAgICAgICB0aGlzLmNhbnZhcyxcclxuICAgICAgICB4LFxyXG4gICAgICAgIHksXHJcbiAgICAgICAgYSxcclxuICAgICAgICB3LFxyXG4gICAgICAgIGgsXHJcbiAgICAgICAgb3RoZXJFbGVtZW50XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3V2FsbChcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IHJhZGl1cyA9IDU7XHJcbiAgICBjb25zdCBmaWxsQ29sb3IgPSBcIiNGNkZDRkZcIjtcclxuICAgIGNvbnN0IHN0cm9rZUNvbG9yID0gXCIjRDBENUREXCI7XHJcbiAgICBjb25zdCBsYWJlbENvbG9yID0gXCIjMDA5QkYzXCI7XHJcbiAgICBsZXQgdGV4dCA9IGAke3RoaXMudGl0bGVDYXNlLnRyYW5zZm9ybShlbGVtZW50RGF0YS5lbGVtZW50VHlwZSl9ICR7XHJcbiAgICAgIGVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXJcclxuICAgIH1gO1xyXG5cclxuICAgIGNvbnN0IHdhbGwgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiAwLFxyXG4gICAgICB0b3A6IDAsXHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIGZpbGw6IGZpbGxDb2xvcixcclxuICAgICAgc3Ryb2tlOiBzdHJva2VDb2xvcixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICBzdHJva2VVbmlmb3JtOiB0cnVlLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgY2VudGVyWCA9IHdpZHRoIC8gMjtcclxuICAgIGNvbnN0IGNlbnRlclkgPSBoZWlnaHQgLyAyO1xyXG4gICAgY29uc3QgaXNWZXJ0aWNhbCA9IGhlaWdodCA+IHdpZHRoO1xyXG5cclxuICAgIGNvbnN0IGxhYmVsID0gbmV3IGZhYnJpYy5GYWJyaWNUZXh0KHRleHQsIHtcclxuICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgdG9wOiBjZW50ZXJZLFxyXG4gICAgICBmb250U2l6ZTogMTAsXHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgYW5nbGU6IGlzVmVydGljYWwgPyAtOTAgOiAwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGFycm93SGVhZCA9IDU7XHJcbiAgICBjb25zdCBlbGVtZW50czogZmFicmljLk9iamVjdFtdID0gW3dhbGwsIGxhYmVsXTtcclxuXHJcbiAgICBpZiAoaXNWZXJ0aWNhbCkge1xyXG4gICAgICBjb25zdCB0ZXh0V2lkdGggPSBsYWJlbC53aWR0aCB8fCAwO1xyXG4gICAgICBjb25zdCB0b3BBcnJvd1kgPSA1O1xyXG4gICAgICBjb25zdCB0b3BBcnJvd0VuZFkgPSBjZW50ZXJZIC0gdGV4dFdpZHRoIC8gMiAtIDU7XHJcblxyXG4gICAgICBpZiAodG9wQXJyb3dFbmRZID4gdG9wQXJyb3dZICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShbY2VudGVyWCwgdG9wQXJyb3dZLCBjZW50ZXJYLCB0b3BBcnJvd0VuZFldLCB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgZmFicmljLlRyaWFuZ2xlKHtcclxuICAgICAgICAgICAgbGVmdDogY2VudGVyWCxcclxuICAgICAgICAgICAgdG9wOiB0b3BBcnJvd1ksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogMCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJib3R0b21cIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGJvdHRvbUFycm93U3RhcnRZID0gY2VudGVyWSArIHRleHRXaWR0aCAvIDIgKyA1O1xyXG4gICAgICBjb25zdCBib3R0b21BcnJvd0VuZFkgPSBoZWlnaHQgLSA1O1xyXG5cclxuICAgICAgaWYgKGJvdHRvbUFycm93RW5kWSA+IGJvdHRvbUFycm93U3RhcnRZICsgYXJyb3dIZWFkKSB7XHJcbiAgICAgICAgZWxlbWVudHMucHVzaChcclxuICAgICAgICAgIG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgICAgW2NlbnRlclgsIGJvdHRvbUFycm93U3RhcnRZLCBjZW50ZXJYLCBib3R0b21BcnJvd0VuZFldLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IGNlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogYm90dG9tQXJyb3dFbmRZLFxyXG4gICAgICAgICAgICB3aWR0aDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgYW5nbGU6IDE4MCxcclxuICAgICAgICAgICAgZmlsbDogbGFiZWxDb2xvcixcclxuICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgb3JpZ2luWTogXCJ0b3BcIixcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRleHRXaWR0aCA9IGxhYmVsLndpZHRoIHx8IDA7XHJcbiAgICAgIGNvbnN0IGxlZnRBcnJvd1N0YXJ0WCA9IDU7XHJcbiAgICAgIGNvbnN0IGxlZnRBcnJvd0VuZFggPSBjZW50ZXJYIC0gdGV4dFdpZHRoIC8gMiAtIDU7XHJcblxyXG4gICAgICBpZiAobGVmdEFycm93RW5kWCA+IGxlZnRBcnJvd1N0YXJ0WCArIGFycm93SGVhZCkge1xyXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXHJcbiAgICAgICAgICBuZXcgZmFicmljLkxpbmUoW2xlZnRBcnJvd1N0YXJ0WCwgY2VudGVyWSwgbGVmdEFycm93RW5kWCwgY2VudGVyWV0sIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcclxuICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIG5ldyBmYWJyaWMuVHJpYW5nbGUoe1xyXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0QXJyb3dTdGFydFgsXHJcbiAgICAgICAgICAgIHRvcDogY2VudGVyWSxcclxuICAgICAgICAgICAgd2lkdGg6IGFycm93SGVhZCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCByaWdodEFycm93U3RhcnRYID0gY2VudGVyWCArIHRleHRXaWR0aCAvIDIgKyA1O1xyXG4gICAgICBjb25zdCByaWdodEFycm93RW5kWCA9IHdpZHRoIC0gNTtcclxuXHJcbiAgICAgIGlmIChyaWdodEFycm93RW5kWCA+IHJpZ2h0QXJyb3dTdGFydFggKyBhcnJvd0hlYWQpIHtcclxuICAgICAgICBlbGVtZW50cy5wdXNoKFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICBbcmlnaHRBcnJvd1N0YXJ0WCwgY2VudGVyWSwgcmlnaHRBcnJvd0VuZFgsIGNlbnRlclldLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiBsYWJlbENvbG9yLFxyXG4gICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgbmV3IGZhYnJpYy5UcmlhbmdsZSh7XHJcbiAgICAgICAgICAgIGxlZnQ6IHJpZ2h0QXJyb3dFbmRYLFxyXG4gICAgICAgICAgICB0b3A6IGNlbnRlclksXHJcbiAgICAgICAgICAgIHdpZHRoOiBhcnJvd0hlYWQsXHJcbiAgICAgICAgICAgIGhlaWdodDogYXJyb3dIZWFkLFxyXG4gICAgICAgICAgICBhbmdsZTogOTAsXHJcbiAgICAgICAgICAgIGZpbGw6IGxhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbG9ja1N2Z1N0cmluZyA9IGA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgPHBhdGggZD1cIk03IDExVjdDNyA1LjY3MzkyIDcuNTI2NzggNC40MDIxNSA4LjQ2NDQ3IDMuNDY0NDdDOS40MDIxNSAyLjUyNjc4IDEwLjY3MzkgMiAxMiAyQzEzLjMyNjEgMiAxNC41OTc5IDIuNTI2NzggMTUuNTM1NSAzLjQ2NDQ3QzE2LjQ3MzIgNC40MDIxNSAxNyA1LjY3MzkyIDE3IDdWMTFNNSAxMUgxOUMyMC4xMDQ2IDExIDIxIDExLjg5NTQgMjEgMTNWMjBDMjEgMjEuMTA0NiAyMC4xMDQ2IDIyIDE5IDIySDVDMy44OTU0MyAyMiAzIDIxLjEwNDYgMyAyMFYxM0MzIDExLjg5NTQgMy44OTU0MyAxMSA1IDExWlwiIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICA8L3N2Zz5gO1xyXG5cclxuICAgIGxldCBsb2FkZWRTVkc6IGFueSA9IGF3YWl0IGZhYnJpYy5sb2FkU1ZHRnJvbVN0cmluZyhsb2NrU3ZnU3RyaW5nKTtcclxuXHJcbiAgICBsZXQgbG9ja1N2ZyA9IGZhYnJpYy51dGlsLmdyb3VwU1ZHRWxlbWVudHMoXHJcbiAgICAgIGxvYWRlZFNWRy5vYmplY3RzLFxyXG4gICAgICBsb2FkZWRTVkcub3B0aW9uc1xyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB3YWxsQ2VudGVyWCA9IHdpZHRoIC8gMjtcclxuICAgIGNvbnN0IHdhbGxDZW50ZXJZID0gaGVpZ2h0IC8gMjtcclxuXHJcbiAgICBsb2NrU3ZnLnNjYWxlVG9XaWR0aCgyMCk7XHJcbiAgICBsb2NrU3ZnLnNjYWxlVG9IZWlnaHQoMjApO1xyXG5cclxuICAgIGlmIChpc1ZlcnRpY2FsKSB7XHJcbiAgICAgIGxvY2tTdmcuc2V0KHtcclxuICAgICAgICBsZWZ0OiB3YWxsQ2VudGVyWCxcclxuICAgICAgICB0b3A6IHdhbGxDZW50ZXJZLFxyXG4gICAgICAgIGFuZ2xlOiAtOTAsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxvY2tTdmcuc2V0KHtcclxuICAgICAgICBsZWZ0OiB3YWxsQ2VudGVyWCxcclxuICAgICAgICB0b3A6IHdhbGxDZW50ZXJZLFxyXG4gICAgICAgIGFuZ2xlOiAwLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9ja1N2Zy5zZXQoe1xyXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsXHJcbiAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGxvY2tTdmcub24oXCJtb3VzZWRvd25cIiwgKG9wdCkgPT4ge1xyXG4gICAgICBpZiAob3B0ICYmIG9wdC5lICYmIG9wdC5lLnN0b3BQcm9wYWdhdGlvbikge1xyXG4gICAgICAgIG9wdC5lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAgICAgZWxlbWVudERhdGEuaXNMb2NrZWQgPSAhZWxlbWVudERhdGE/LmlzTG9ja2VkO1xyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGVsZW1lbnRzLnB1c2gobG9ja1N2Zyk7XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKGVsZW1lbnRzLCB7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgaGFzQ29udHJvbHM6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nWDogaXNWZXJ0aWNhbCxcclxuICAgICAgbG9ja1NjYWxpbmdZOiAhaXNWZXJ0aWNhbCxcclxuICAgICAgLy8gbG9ja1JvdGF0aW9uOiB0cnVlLFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgZXZlbnRlZDogdHJ1ZSxcclxuICAgICAgaG92ZXJDdXJzb3I6IFwicG9pbnRlclwiLFxyXG4gICAgICBhbmdsZTogZWxlbWVudERhdGEuYW5nbGUsXHJcbiAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnREYXRhO1xyXG5cclxuICAgIC8vIGdyb3VwLm9uKFwibW9kaWZpZWRcIiwgKGU6IGFueSkgPT4ge1xyXG4gICAgLy8gICBjb25zdCBhY3Rpb24gPSBlLnRyYW5zZm9ybT8uYWN0aW9uO1xyXG4gICAgLy8gICBpZiAoYWN0aW9uID09PSBcImRyYWdcIiB8fCBhY3Rpb24gPT09IFwicm90YXRlXCIpIHtcclxuICAgIC8vICAgICBjb25zdCB3YWxsRml4dHVyZUlkcyA9IGVsZW1lbnREYXRhPy5maXh0dXJlcz8ubWFwKChlOiBhbnkpID0+IGUuX2lkKTtcclxuICAgIC8vICAgICBpZiAoIXdhbGxGaXh0dXJlSWRzPy5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAvLyAgICAgY29uc3QgZml4dHVyZXMgPSB0aGlzLmNhbnZhc1xyXG4gICAgLy8gICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgLy8gICAgICAgLmZpbHRlcihcclxuICAgIC8vICAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgLy8gICAgICAgICAgIG9iai5vYmpUeXBlID09PSBcImZpeHR1cmVcIiAmJlxyXG4gICAgLy8gICAgICAgICAgIHdhbGxGaXh0dXJlSWRzLmluY2x1ZGVzKG9iai5maXh0dXJlSWQpXHJcbiAgICAvLyAgICAgICApO1xyXG4gICAgLy8gICAgIGlmICghZml4dHVyZXMubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgLy8gICAgIC8vIFJlbW92ZSBleGlzdGluZyBmaXh0dXJlcyB0ZW1wb3JhcmlseVxyXG4gICAgLy8gICAgIGZpeHR1cmVzLmZvckVhY2goKGYpID0+IHRoaXMuY2FudmFzLnJlbW92ZShmKSk7XHJcblxyXG4gICAgLy8gICAgIGNvbnN0IGNvbWJpbmVkR3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKGZpeHR1cmVzLCB7XHJcbiAgICAvLyAgICAgICBoYXNDb250cm9sczogdHJ1ZSxcclxuICAgIC8vICAgICAgIHNlbGVjdGFibGU6IHRydWUsXHJcbiAgICAvLyAgICAgICBzdWJUYXJnZXRDaGVjazogdHJ1ZSxcclxuICAgIC8vICAgICB9KTtcclxuXHJcbiAgICAvLyAgICAgLy8gd2FsbCdzIHBvc2l0aW9uIGFuZCBhbmdsZVxyXG4gICAgLy8gICAgIGNvbnN0IHgwID0gdGhpcy5mcm9tUGl4ZWxzKGUudGFyZ2V0LmxlZnQsIFwiZnRcIik7XHJcbiAgICAvLyAgICAgY29uc3QgeTAgPSB0aGlzLmZyb21QaXhlbHMoZS50YXJnZXQudG9wLCBcImZ0XCIpO1xyXG4gICAgLy8gICAgIGNvbnN0IGEgPSBlLnRhcmdldC5hbmdsZSB8fCAwO1xyXG4gICAgLy8gICAgIGNvbnN0IGFuZ2xlUmFkID0gKGEgKiBNYXRoLlBJKSAvIDE4MDtcclxuXHJcbiAgICAvLyAgICAgLy8gSW5zdGVhZCBvZiB3YWxsIGVuZCwgdXNlIHdhbGwgc3RhcnQgKyBwZXJwZW5kaWN1bGFyIG9mZnNldFxyXG4gICAgLy8gICAgIGNvbnN0IG9mZnNldCA9IDE7IC8vIHBlcnBlbmRpY3VsYXIgZGlzdGFuY2UgZnJvbSB3YWxsXHJcbiAgICAvLyAgICAgY29uc3QgZnhfb2Zmc2V0ID0geDAgKyBvZmZzZXQgKiAtTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG4gICAgLy8gICAgIGNvbnN0IGZ5X29mZnNldCA9IHkwICsgb2Zmc2V0ICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG5cclxuICAgIC8vICAgICAvLyBDb252ZXJ0IGJhY2sgdG8gcGl4ZWxzIGFuZCBhcHBseVxyXG4gICAgLy8gICAgIGNvbWJpbmVkR3JvdXAubGVmdCA9IHRoaXMudG9QaXhlbHMoZnhfb2Zmc2V0LCBcImZ0XCIpO1xyXG4gICAgLy8gICAgIGNvbWJpbmVkR3JvdXAudG9wID0gdGhpcy50b1BpeGVscyhmeV9vZmZzZXQsIFwiZnRcIik7XHJcbiAgICAvLyAgICAgY29tYmluZWRHcm91cC5hbmdsZSA9IGE7XHJcblxyXG4gICAgLy8gICAgIHRoaXMuY2FudmFzLmFkZChjb21iaW5lZEdyb3VwKTtcclxuICAgIC8vICAgICB1bmdyb3VwUHJlc2VydmVQb3NpdGlvbnMoY29tYmluZWRHcm91cCwgdGhpcy5jYW52YXMpO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICAvLyBjb25zdCB1bmdyb3VwUHJlc2VydmVQb3NpdGlvbnMgPSBhc3luYyAoXHJcbiAgICAvLyAgIGNvbWJpbmVkR3JvdXA6IGZhYnJpYy5Hcm91cCxcclxuICAgIC8vICAgY2FudmFzOiBmYWJyaWMuQ2FudmFzXHJcbiAgICAvLyApID0+IHtcclxuICAgIC8vICAgY29uc3QgaXRlbXMgPSBjb21iaW5lZEdyb3VwLmdldE9iamVjdHMoKS5tYXAoKG9iaikgPT4ge1xyXG4gICAgLy8gICAgIGNvbnN0IGFicyA9IGZhYnJpYy51dGlsLnRyYW5zZm9ybVBvaW50KFxyXG4gICAgLy8gICAgICAgbmV3IGZhYnJpYy5Qb2ludChvYmoubGVmdCEsIG9iai50b3AhKSxcclxuICAgIC8vICAgICAgIGNvbWJpbmVkR3JvdXAuY2FsY1RyYW5zZm9ybU1hdHJpeCgpXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgICByZXR1cm4ge1xyXG4gICAgLy8gICAgICAgaWQ6IChvYmogYXMgYW55KS5maXh0dXJlSWQsXHJcbiAgICAvLyAgICAgICB4OiBhYnMueCxcclxuICAgIC8vICAgICAgIHk6IGFicy55LFxyXG4gICAgLy8gICAgICAgYW5nbGU6IGNvbWJpbmVkR3JvdXAuYW5nbGUsXHJcbiAgICAvLyAgICAgfTtcclxuICAgIC8vICAgfSk7XHJcblxyXG4gICAgLy8gICB0aGlzLnVwZGF0ZUZpeHR1cmVDb29yZGluYXRlcyhpdGVtcyk7XHJcbiAgICAvLyAgIGNhbnZhcy5yZW1vdmUoY29tYmluZWRHcm91cCk7XHJcbiAgICAvLyAgIGNvbnN0IHdhbGxUb1JlcmVuZGVyID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgLy8gICAgIChlOiBhbnkpID0+XHJcbiAgICAvLyAgICAgICBlLmVsZW1lbnROdW1iZXIgPT09IGVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXIgJiZcclxuICAgIC8vICAgICAgIGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiXHJcbiAgICAvLyAgICk7XHJcblxyXG4gICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHdhbGxUb1JlcmVuZGVyPy5maXh0dXJlcz8ubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgICBjb25zdCBmaXh0dXJlID0gd2FsbFRvUmVyZW5kZXIuZml4dHVyZXNbaV07XHJcbiAgICAvLyAgICAgY29uc3QgeCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLnJlbGF0aXZlUG9zaXRpb24ueCxcclxuICAgIC8vICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi51bml0XHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgICBjb25zdCB5ID0gdGhpcy50b1BpeGVscyhcclxuICAgIC8vICAgICAgIGZpeHR1cmUucmVsYXRpdmVQb3NpdGlvbi55LFxyXG4gICAgLy8gICAgICAgZml4dHVyZS5yZWxhdGl2ZVBvc2l0aW9uLnVuaXRcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gICAgIGNvbnN0IGZpeHR1cmVIZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgLy8gICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgLy8gICAgICAgZml4dHVyZS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gICAgIGNvbnN0IGZpeHR1cmVXaWR0aCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAvLyAgICAgICBmaXh0dXJlLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgIC8vICAgICAgIGZpeHR1cmUuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgIC8vICAgICApO1xyXG5cclxuICAgIC8vICAgICBhd2FpdCB0aGlzLmRyYXdGaXh0dXJlKFxyXG4gICAgLy8gICAgICAgdGhpcy5jYW52YXMsXHJcbiAgICAvLyAgICAgICB4LFxyXG4gICAgLy8gICAgICAgeSxcclxuICAgIC8vICAgICAgIGZpeHR1cmVIZWlnaHQsXHJcbiAgICAvLyAgICAgICBmaXh0dXJlV2lkdGgsXHJcbiAgICAvLyAgICAgICBmaXh0dXJlXHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgLy8gfTtcclxuXHJcbiAgICBjYW52YXMuYWRkKGdyb3VwKTtcclxuXHJcbiAgICAvLyBJZiBuZXdseSBhZGRlZCwgZm9jdXMgaXQgb25jZVxyXG4gICAgaWYgKChlbGVtZW50RGF0YSBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChncm91cCk7XHJcbiAgICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICB9IGNhdGNoIHt9XHJcbiAgICAgIGRlbGV0ZSAoZWxlbWVudERhdGEgYXMgYW55KS5uZXdBZGRlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkcmF3Rml4dHVyZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIGhlaWdodDogbnVtYmVyLFxyXG4gICAgd2lkdGg6IG51bWJlcixcclxuICAgIGZpeHR1cmVEYXRhOiBhbnlcclxuICApIHtcclxuICAgIGxldCBmaXh0dXJlQ29sb3I6IGFueTtcclxuICAgIGlmIChbXCJmaXh0dXJlXCIsIFwiZml4dHVyZS1yZWRvXCJdLmluY2x1ZGVzKHRoaXMucHVibGlzaGluZ1N0YXRlKSkge1xyXG4gICAgICBmaXh0dXJlQ29sb3IgPSB7XHJcbiAgICAgICAgcHJpbWFyeTpcclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcIlwiICYmIGZpeHR1cmVEYXRhLnRhc2tTdGF0dXMgPT0gXCJzdWJtaXRcIlxyXG4gICAgICAgICAgICA/IFwiI2E1YTZhOFwiXHJcbiAgICAgICAgICAgIDogZml4dHVyZURhdGEuc3RhdHVzID09IFwiYWdyZWVcIlxyXG4gICAgICAgICAgICA/IFwiIzZDRTlBNlwiXHJcbiAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgZmlsbDpcclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnN0YXR1cyA9PSBcIlwiICYmIGZpeHR1cmVEYXRhLnRhc2tTdGF0dXMgPT0gXCJzdWJtaXRcIlxyXG4gICAgICAgICAgICA/IFwiI2YzZjRmOFwiXHJcbiAgICAgICAgICAgIDogZml4dHVyZURhdGEuc3RhdHVzID09IFwiYWdyZWVcIlxyXG4gICAgICAgICAgICA/IFwiIzZDRTlBNlwiXHJcbiAgICAgICAgICAgIDogXCIjRUFGOEZGXCIsXHJcbiAgICAgICAgdm1GaWxsOlxyXG4gICAgICAgICAgZml4dHVyZURhdGEuc3RhdHVzID09IFwiXCIgJiYgZml4dHVyZURhdGEudGFza1N0YXR1cyA9PSBcInN1Ym1pdFwiXHJcbiAgICAgICAgICAgID8gXCIjYTVhNmE4XCJcclxuICAgICAgICAgICAgOiBcIiM2OTM4RUZcIixcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGlmIChmaXh0dXJlRGF0YS5maXh0dXJlTmFtZSA9PT0gXCJzcGFjZVwiKSByZXR1cm47XHJcbiAgICBjb25zdCByYWRpdXMgPSA1O1xyXG4gICAgY29uc3QgbWFpbkNvbnRhaW5lciA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgcng6IHJhZGl1cyxcclxuICAgICAgcnk6IHJhZGl1cyxcclxuICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnkgPz8gXCIjNTFDMUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0b3BXaWR0aCA9IHdpZHRoIC8gMS4wNTtcclxuICAgIGNvbnN0IHRvcEhlaWdodCA9ICgxNSAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCB0b3BYID0geCArICh3aWR0aCAtIHRvcFdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCB0b3BZID0geSArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgdG9wQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogdG9wWCxcclxuICAgICAgdG9wOiB0b3BZLFxyXG4gICAgICB3aWR0aDogdG9wV2lkdGgsXHJcbiAgICAgIGhlaWdodDogdG9wSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGlubmVyQm94SGVpZ2h0ID0gdG9wSGVpZ2h0IC8gMjtcclxuICAgIGNvbnN0IGlubmVyVG9wQm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke3RvcFggKyByYWRpdXN9ICR7dG9wWX0gXHJcbiAgICAgICAgTCAke3RvcFggKyB0b3BXaWR0aCAtIHJhZGl1c30gJHt0b3BZfSBcclxuICAgICAgICBRICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFl9ICR7dG9wWCArIHRvcFdpZHRofSAke3RvcFkgKyByYWRpdXN9IFxyXG4gICAgICAgIEwgJHt0b3BYICsgdG9wV2lkdGh9ICR7dG9wWSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgICAgICBMICR7dG9wWH0gJHt0b3BZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgICAgIEwgJHt0b3BYfSAke3RvcFkgKyByYWRpdXN9IFxyXG4gICAgICAgIFEgJHt0b3BYfSAke3RvcFl9ICR7dG9wWCArIHJhZGl1c30gJHt0b3BZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCB0b3BUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgRml4dHVyZSAke1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlclxyXG4gICAgICAgICAgPyBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIgK1xyXG4gICAgICAgICAgICAoZml4dHVyZURhdGE/LmZpeHR1cmVOdW1iZXJcclxuICAgICAgICAgICAgICA/IFwiIC0gRlgtXCIgKyBmaXh0dXJlRGF0YS5maXh0dXJlTnVtYmVyXHJcbiAgICAgICAgICAgICAgOiBcIlwiKVxyXG4gICAgICAgICAgOiBcIm5ld1wiXHJcbiAgICAgIH1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IHRvcFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiB0b3BXaWR0aCxcclxuICAgICAgICBoZWlnaHQ6IGlubmVyQm94SGVpZ2h0LFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBzZWNvbmRCb3hZID0gdG9wWSArIGlubmVyQm94SGVpZ2h0O1xyXG5cclxuICAgIGNvbnN0IGlubmVyQm90dG9tQm94ID0gbmV3IGZhYnJpYy5QYXRoKFxyXG4gICAgICBgTSAke3RvcFh9ICR7c2Vjb25kQm94WX0gXHJcbiAgICBMICR7dG9wWCArIHRvcFdpZHRofSAke3NlY29uZEJveFl9IFxyXG4gICAgTCAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHQgLSByYWRpdXN9IFxyXG4gICAgUSAke3RvcFggKyB0b3BXaWR0aH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9ICR7XHJcbiAgICAgICAgdG9wWCArIHRvcFdpZHRoIC0gcmFkaXVzXHJcbiAgICAgIH0gJHtzZWNvbmRCb3hZICsgaW5uZXJCb3hIZWlnaHR9IFxyXG4gICAgTCAke3RvcFggKyByYWRpdXN9ICR7c2Vjb25kQm94WSArIGlubmVyQm94SGVpZ2h0fSBcclxuICAgIFEgJHt0b3BYfSAke3NlY29uZEJveFkgKyBpbm5lckJveEhlaWdodH0gJHt0b3BYfSAke1xyXG4gICAgICAgIHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICB9IFxyXG4gICAgTCAke3RvcFh9ICR7c2Vjb25kQm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBcIiMzNDQwNTRcIixcclxuICAgICAgICBzdHJva2U6IGZpeHR1cmVDb2xvcj8ucHJpbWFyeSA/PyBcIiM1MUMxRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgbGV0IGJvdHRvbVRleHQ7XHJcblxyXG4gICAgY29uc3QgdGV4dENvbnRlbnQgPSBgJHtmaXh0dXJlRGF0YT8uZml4dHVyZU5hbWV9IC0gJHtmaXh0dXJlRGF0YT8uZml4dHVyZVdpZHRoLnZhbHVlfSAke2ZpeHR1cmVEYXRhPy5maXh0dXJlV2lkdGgudW5pdH1gO1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZUJvdHRvbVRleHQgPSAoZnM6IGFueSkgPT5cclxuICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHRleHRDb250ZW50LCB7XHJcbiAgICAgICAgbGVmdDogdG9wWCArIHRvcFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IHNlY29uZEJveFkgKyBpbm5lckJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgIGZpbGw6IFwiI0ZGRkZGRlwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IHRvcFdpZHRoLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICBkbyB7XHJcbiAgICAgIGJvdHRvbVRleHQgPSBjcmVhdGVCb3R0b21UZXh0KGZvbnRTaXplKTtcclxuICAgICAgZm9udFNpemUgLT0gMC41O1xyXG4gICAgfSB3aGlsZSAoYm90dG9tVGV4dC5oZWlnaHQgPiBpbm5lckJveEhlaWdodCAmJiBmb250U2l6ZSA+IDIpO1xyXG5cclxuICAgIGNvbnN0IG1pZFdpZHRoID0gd2lkdGggLyAxLjA1O1xyXG4gICAgY29uc3QgbWlkSGVpZ2h0ID0gKDc3IC8gMTAwKSAqIGhlaWdodDtcclxuICAgIGNvbnN0IG1pZFggPSB4ICsgKHdpZHRoIC0gbWlkV2lkdGgpIC8gMjtcclxuICAgIGNvbnN0IG1pZFkgPSB0b3BZICsgdG9wSGVpZ2h0ICsgdGhpcy52ZXJ0aWNhbE1hcmdpbjtcclxuXHJcbiAgICBjb25zdCBtaWRDb250YWluZXIgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICB0b3A6IG1pZFksXHJcbiAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgaGVpZ2h0OiBtaWRIZWlnaHQsXHJcbiAgICAgIHJ4OiByYWRpdXMsXHJcbiAgICAgIHJ5OiByYWRpdXMsXHJcbiAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5ID8/IFwiIzUxQzFGRlwiLFxyXG4gICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgZmlsbDogXCJ3aGl0ZVwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc2hlbGZDb3VudCA9IGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5sZW5ndGg7XHJcbiAgICBjb25zdCBib3hIZWlnaHQgPSBtaWRIZWlnaHQgLyAoc2hlbGZDb3VudCArIDIpO1xyXG4gICAgY29uc3QgZmlyc3RCb3hZID0gbWlkWTtcclxuXHJcbiAgICBjb25zdCBmaXJzdEJveCA9IG5ldyBmYWJyaWMuUGF0aChcclxuICAgICAgYE0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aCAtIHJhZGl1c30gJHtmaXJzdEJveFl9IFxyXG4gICAgICAgIFEgJHttaWRYICsgbWlkV2lkdGh9ICR7Zmlyc3RCb3hZfSAke21pZFggKyBtaWRXaWR0aH0gJHtcclxuICAgICAgICBmaXJzdEJveFkgKyByYWRpdXNcclxuICAgICAgfSBcclxuICAgICAgICBMICR7bWlkWCArIG1pZFdpZHRofSAke2ZpcnN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgTCAke21pZFh9ICR7Zmlyc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICBMICR7bWlkWH0gJHtmaXJzdEJveFkgKyByYWRpdXN9IFxyXG4gICAgICAgIFEgJHttaWRYfSAke2ZpcnN0Qm94WX0gJHttaWRYICsgcmFkaXVzfSAke2ZpcnN0Qm94WX0gWmAsXHJcbiAgICAgIHtcclxuICAgICAgICBmaWxsOiBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5maWxsXHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICA6IFwiI0VBRjhGRlwiLFxyXG4gICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgOiBmaXh0dXJlRGF0YS5pc3N1ZVxyXG4gICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgOiBcIiM2QkNBRkZcIixcclxuICAgICAgICBzdHJva2VXaWR0aDogMC4yNyxcclxuICAgICAgfVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmaXJzdEJveFRleHQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGAke2ZpeHR1cmVEYXRhPy5oZWFkZXI/LmxhYmVsID8gZml4dHVyZURhdGEuaGVhZGVyLmxhYmVsIDogXCJcIn1gLFxyXG4gICAgICB7XHJcbiAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICB0b3A6IGZpcnN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDcsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgZmlsbDogZml4dHVyZURhdGEuaXNzdWUgPyBcIiNmZmZcIiA6IFwiIzEwMTgyOFwiLFxyXG4gICAgICAgIG9yaWdpblg6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IHNoZWx2ZXMgPSBbXTtcclxuICAgIGNvbnN0IHNoZWxmSGVpZ2h0ID0gbWlkSGVpZ2h0IC0gMiAqIGJveEhlaWdodDtcclxuXHJcbiAgICBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMVwiKSB7XHJcbiAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQ7XHJcblxyXG4gICAgICBjb25zdCBzaGVsZiA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgICAgbGVmdDogbWlkWCxcclxuICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgd2lkdGg6IG1pZFdpZHRoLFxyXG4gICAgICAgIGhlaWdodDogc2hlbGZIZWlnaHQsXHJcbiAgICAgICAgLy8gc3Ryb2tlOiAnIzUxQzFGRicsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCB0ZXh0ID0gZml4dHVyZURhdGE/LnByb2R1Y3RCcmFuZE5hbWU/LmpvaW4oXCIgKyBcIikgfHwgXCJcIjtcclxuXHJcbiAgICAgIC8vIFdyYXAgdGV4dCB3aXRoaW4gZml4dHVyZSB3aWR0aCBhbmQgc2hyaW5rIHRvIGZpdCB2ZXJ0aWNhbCBzcGFjZVxyXG4gICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aCAqIDAuOTtcclxuICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IHNoZWxmSGVpZ2h0ICogMC44O1xyXG4gICAgICBsZXQgZm9udFNpemVMMSA9IDY7XHJcblxyXG4gICAgICBjb25zdCBjcmVhdGVXcmFwcGVkVGV4dGJveCA9IChmczogbnVtYmVyKSA9PlxyXG4gICAgICAgIG5ldyBmYWJyaWMuVGV4dGJveCh0ZXh0LCB7XHJcbiAgICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgICAgdG9wOiBib3hZICsgc2hlbGZIZWlnaHQgLyAyLFxyXG4gICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgICAgZm9udFdlaWdodDogXCI1MDBcIixcclxuICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZpbGw6IFwiIzMzM1wiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGxldCB3cmFwcGVkVGV4dCA9IGNyZWF0ZVdyYXBwZWRUZXh0Ym94KGZvbnRTaXplTDEpO1xyXG4gICAgICB3aGlsZSAod3JhcHBlZFRleHQuaGVpZ2h0ID4gbWF4VGV4dEhlaWdodCAmJiBmb250U2l6ZUwxID4gMikge1xyXG4gICAgICAgIGZvbnRTaXplTDEgLT0gMC41O1xyXG4gICAgICAgIHdyYXBwZWRUZXh0ID0gY3JlYXRlV3JhcHBlZFRleHRib3goZm9udFNpemVMMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHBhZGRpbmcgPSAyO1xyXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICBsZWZ0OiBtaWRYICsgbWlkV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm94WSArIHNoZWxmSGVpZ2h0IC8gMixcclxuICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgd2lkdGg6IE1hdGgubWluKG1heFRleHRXaWR0aCwgd3JhcHBlZFRleHQud2lkdGghKSArIHBhZGRpbmcsXHJcbiAgICAgICAgaGVpZ2h0OiB3cmFwcGVkVGV4dC5nZXRTY2FsZWRIZWlnaHQoKSArIDIsXHJcbiAgICAgICAgZmlsbDogXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSlcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICByeDogMSxcclxuICAgICAgICByeTogMSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzaGVsdmVzLnB1c2goc2hlbGYsIGJhY2tncm91bmQsIHdyYXBwZWRUZXh0KTtcclxuICAgIH0gZWxzZSBpZiAoZml4dHVyZURhdGEucHJvZHVjdFJlc29sdXRpb25MZXZlbCA9PT0gXCJMMlwiKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hlbGZDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgYm94WSA9IGZpcnN0Qm94WSArIGJveEhlaWdodCAqIChpICsgMSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNoZWxmID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgICAgIGxlZnQ6IG1pZFgsXHJcbiAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IGJveEhlaWdodCxcclxuICAgICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICA6IFwiIzUxQzFGRlwiLFxyXG4gICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMjcsXHJcbiAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHNoZWx2ZXMucHVzaChzaGVsZik7XHJcblxyXG4gICAgICAgIGlmIChmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8uW2ldLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgIGNvbnN0IHRyYXlSb3dzID0gZml4dHVyZURhdGEuc2hlbGZDb25maWc/LltpXS50cmF5Um93cyB8fCAxO1xyXG4gICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgdHJheVJvd3M7IHIrKykge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRyYXlMaW5lID0gbmV3IGZhYnJpYy5MaW5lKFxyXG4gICAgICAgICAgICAgIFttaWRYLCBsaW5lWSwgbWlkWCArIG1pZFdpZHRoLCBsaW5lWV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjIsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh0cmF5TGluZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0ZXh0ID1cclxuICAgICAgICAgIGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnPy5baV0ucHJvZHVjdEJyYW5kTmFtZT8uam9pbihcIiArIFwiKSB8fCBcIlwiO1xyXG5cclxuICAgICAgICAvLyBMMjogU2luZ2xlLWxpbmUgZWxsaXBzaXMgYWdhaW5zdCBmdWxsIHNoZWxmIHdpZHRoXHJcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFBhZGRpbmcgPSA2O1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRXaWR0aCA9IE1hdGgubWF4KDAsIG1pZFdpZHRoIC0gaG9yaXpvbnRhbFBhZGRpbmcpO1xyXG4gICAgICAgIGNvbnN0IG1heFRleHRIZWlnaHQgPSBib3hIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgY29uc3QgYmFzZUZvbnRTaXplID0gNTtcclxuXHJcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9ICh0OiBzdHJpbmcpID0+XHJcbiAgICAgICAgICBuZXcgZmFicmljLlRleHQodCwge1xyXG4gICAgICAgICAgICBmb250U2l6ZTogYmFzZUZvbnRTaXplLFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGV0IGRpc3BsYXlUZXh0ID0gdGV4dDtcclxuICAgICAgICBsZXQgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuXHJcbiAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgY29uc3QgZWxsaXBzaXMgPSBcIi4uLlwiO1xyXG4gICAgICAgICAgbGV0IGxlZnRJZHggPSAwO1xyXG4gICAgICAgICAgbGV0IHJpZ2h0SWR4ID0gdGV4dC5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgd2hpbGUgKGxlZnRJZHggPCByaWdodElkeCkge1xyXG4gICAgICAgICAgICBjb25zdCBtaWRJZHggPSBNYXRoLmZsb29yKChsZWZ0SWR4ICsgcmlnaHRJZHgpIC8gMik7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRleHQuc2xpY2UoMCwgbWlkSWR4KSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgICBtZWFzdXJlZCA9IG1lYXN1cmUoY2FuZGlkYXRlKTtcclxuICAgICAgICAgICAgaWYgKChtZWFzdXJlZC53aWR0aCA/PyAwKSA+IG1heFRleHRXaWR0aCkge1xyXG4gICAgICAgICAgICAgIHJpZ2h0SWR4ID0gbWlkSWR4O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGxlZnRJZHggPSBtaWRJZHggKyAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBkaXNwbGF5VGV4dCA9IHRleHQuc2xpY2UoMCwgTWF0aC5tYXgoMCwgbGVmdElkeCAtIDEpKSArIGVsbGlwc2lzO1xyXG4gICAgICAgICAgbWVhc3VyZWQgPSBtZWFzdXJlKGRpc3BsYXlUZXh0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGJhY2tncm91bmQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgIGhlaWdodDogTWF0aC5taW4obWF4VGV4dEhlaWdodCwgbWVhc3VyZWQuaGVpZ2h0ID8/IDEwKSArIDIsXHJcbiAgICAgICAgICBmaWxsOiBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KVwiLFxyXG4gICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIHJ4OiAxLFxyXG4gICAgICAgICAgcnk6IDEsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbmFsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dChkaXNwbGF5VGV4dCwge1xyXG4gICAgICAgICAgbGVmdDogbWlkWCArIG1pZFdpZHRoIC8gMixcclxuICAgICAgICAgIHRvcDogYm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgICAgIGZvbnRTaXplOiBiYXNlRm9udFNpemUsXHJcbiAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goYmFja2dyb3VuZCwgZmluYWxUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlRGF0YS5wcm9kdWN0UmVzb2x1dGlvbkxldmVsID09PSBcIkwzXCIpIHtcclxuICAgICAgY29uc3Qgc2VxdWVudGlhbEdyb3VwczogeyB6b25lOiBzdHJpbmc7IHNoZWx2ZXM6IGFueVtdIH1bXSA9IFtdO1xyXG5cclxuICAgICAgbGV0IHByZXZpb3VzWm9uZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IHNoZWxmIG9mIGZpeHR1cmVEYXRhLnNoZWxmQ29uZmlnKSB7XHJcbiAgICAgICAgY29uc3Qgem9uZSA9IHNoZWxmLnpvbmUgfHwgXCJVbmtub3duXCI7XHJcbiAgICAgICAgaWYgKHpvbmUgIT09IHByZXZpb3VzWm9uZSkge1xyXG4gICAgICAgICAgc2VxdWVudGlhbEdyb3Vwcy5wdXNoKHsgem9uZSwgc2hlbHZlczogW3NoZWxmXSB9KTtcclxuICAgICAgICAgIHByZXZpb3VzWm9uZSA9IHpvbmU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNlcXVlbnRpYWxHcm91cHNbc2VxdWVudGlhbEdyb3Vwcy5sZW5ndGggLSAxXS5zaGVsdmVzLnB1c2goc2hlbGYpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGN1cnJlbnRTaGVsZkluZGV4ID0gMDtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc2VxdWVudGlhbEdyb3Vwcykge1xyXG4gICAgICAgIGNvbnN0IHsgem9uZSwgc2hlbHZlczogc2hlbHZlc0luR3JvdXAgfSA9IGdyb3VwO1xyXG5cclxuICAgICAgICBjb25zdCBncm91cFN0YXJ0SW5kZXggPSBjdXJyZW50U2hlbGZJbmRleDtcclxuICAgICAgICBjb25zdCBncm91cExlbmd0aCA9IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDtcclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXBUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKGdyb3VwU3RhcnRJbmRleCArIDEpO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tWSA9IGdyb3VwVG9wWSArIGJveEhlaWdodCAqIGdyb3VwTGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHNoZWx2ZXNJbkdyb3VwLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBjb25zdCBzaGVsZkRhdGEgPSBzaGVsdmVzSW5Hcm91cFtqXTtcclxuICAgICAgICAgIGNvbnN0IGJveFkgPSBmaXJzdEJveFkgKyBib3hIZWlnaHQgKiAoY3VycmVudFNoZWxmSW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBzaGVsZlJlY3QgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBtaWRYLFxyXG4gICAgICAgICAgICB0b3A6IGJveFksXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCxcclxuICAgICAgICAgICAgaGVpZ2h0OiBib3hIZWlnaHQsXHJcbiAgICAgICAgICAgIHN0cm9rZTogZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICAgICAgPyBcIiNEOTJEMjBcIlxyXG4gICAgICAgICAgICAgIDogXCIjNTFDMUZGXCIsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICAgICAgICBmaWxsOiBcIndoaXRlXCIsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBzaGVsdmVzLnB1c2goc2hlbGZSZWN0KTtcclxuXHJcbiAgICAgICAgICBpZiAoc2hlbGZEYXRhLnNoZWxmVHlwZSA9PT0gXCJ0cmF5XCIpIHtcclxuICAgICAgICAgICAgY29uc3QgdHJheVJvd3MgPSBzaGVsZkRhdGEudHJheVJvd3MgfHwgMDtcclxuICAgICAgICAgICAgY29uc3QgcHJvZHVjdFBlclNoZWxmID0gc2hlbGZEYXRhLnByb2R1Y3RQZXJTaGVsZiB8fCAwO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgcm93U3BhY2luZyA9IGJveEhlaWdodCAvIHRyYXlSb3dzO1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5TcGFjaW5nID0gbWlkV2lkdGggLyBwcm9kdWN0UGVyU2hlbGY7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCByID0gMTsgciA8IHRyYXlSb3dzOyByKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCBsaW5lWSA9IGJveFkgKyByICogcm93U3BhY2luZztcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgdHJheUxpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbWlkWCwgbGluZVksIG1pZFggKyBtaWRXaWR0aCwgbGluZVldLFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBzdHJva2U6IFwiIzk5OVwiLFxyXG4gICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMC4yLFxyXG4gICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHRyYXlMaW5lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDE7IGMgPCBwcm9kdWN0UGVyU2hlbGY7IGMrKykge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxpbmVYID0gbWlkWCArIGMgKiBjb2x1bW5TcGFjaW5nO1xyXG5cclxuICAgICAgICAgICAgICBjb25zdCB2ZXJ0aWNhbExpbmUgPSBuZXcgZmFicmljLkxpbmUoXHJcbiAgICAgICAgICAgICAgICBbbGluZVgsIGJveFksIGxpbmVYLCBib3hZICsgYm94SGVpZ2h0XSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBcIiM5OTlcIixcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAuMixcclxuICAgICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHNoZWx2ZXMucHVzaCh2ZXJ0aWNhbExpbmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY3VycmVudFNoZWxmSW5kZXgrKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGdyb3VwQm90dG9tTGluZSA9IG5ldyBmYWJyaWMuTGluZShcclxuICAgICAgICAgIFttaWRYLCBncm91cEJvdHRvbVksIG1pZFggKyBtaWRXaWR0aCwgZ3JvdXBCb3R0b21ZXSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgICAgICA/IGZpeHR1cmVDb2xvcj8ucHJpbWFyeVxyXG4gICAgICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICAgICAgOiBcIiM1MUMxRkZcIixcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBzaGVsdmVzLnB1c2goZ3JvdXBCb3R0b21MaW5lKTtcclxuXHJcbiAgICAgICAgaWYgKGZpeHR1cmVEYXRhLmZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxQYWRkaW5nID0gMjtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsVGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveCh6b25lLCB7XHJcbiAgICAgICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAtIGxhYmVsUGFkZGluZyxcclxuICAgICAgICAgICAgdG9wOiBncm91cEJvdHRvbVksXHJcbiAgICAgICAgICAgIGZvbnRTaXplOiA1LFxyXG4gICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgICAgIGZpbGw6IFwiIzcwNzA3MFwiLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcInJpZ2h0XCIsXHJcbiAgICAgICAgICAgIG9yaWdpblk6IFwiYm90dG9tXCIsXHJcbiAgICAgICAgICAgIHdpZHRoOiBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogXCJyaWdodFwiLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKGxhYmVsVGV4dCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBncm91cENlbnRlclggPSBtaWRYICsgbWlkV2lkdGggLyAyO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2VudGVyWSA9IGdyb3VwVG9wWSArIChncm91cEJvdHRvbVkgLSBncm91cFRvcFkpIC8gMjtcclxuXHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbkJyYW5kcyA9IG5ldyBTZXQoKTtcclxuXHJcbiAgICAgICAgc2hlbHZlc0luR3JvdXA/LmZvckVhY2goKHNoZWxmKSA9PiB7XHJcbiAgICAgICAgICBzaGVsZi5wcm9kdWN0QnJhbmROYW1lPy5mb3JFYWNoKChicmFuZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHNlY3Rpb25CcmFuZHMuYWRkKGJyYW5kKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoWy4uLnNlY3Rpb25CcmFuZHNdLmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3QgdGV4dCA9IFsuLi5zZWN0aW9uQnJhbmRzXS5qb2luKFwiICsgXCIpO1xyXG4gICAgICAgICAgY29uc3QgcGFkZGluZyA9IDI7XHJcbiAgICAgICAgICBjb25zdCBtYXhUZXh0V2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgIGNvbnN0IHJlY3RXaWR0aCA9IG1pZFdpZHRoICogMC45O1xyXG4gICAgICAgICAgY29uc3QgbWF4VGV4dEhlaWdodCA9IDIwO1xyXG5cclxuICAgICAgICAgIGxldCBmb250U2l6ZSA9IDY7XHJcbiAgICAgICAgICBsZXQgd3JhcHBlZFRleHQ7XHJcblxyXG4gICAgICAgICAgY29uc3QgY3JlYXRlVGV4dGJveCA9IChmczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgZmFicmljLlRleHRib3godGV4dCwge1xyXG4gICAgICAgICAgICAgIGZvbnRTaXplOiBmcyxcclxuICAgICAgICAgICAgICBmb250RmFtaWx5OiBcIkludGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFdlaWdodDogXCI0MDBcIixcclxuICAgICAgICAgICAgICB3aWR0aDogbWF4VGV4dFdpZHRoLFxyXG4gICAgICAgICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgbGVmdDogZ3JvdXBDZW50ZXJYLFxyXG4gICAgICAgICAgICAgIHRvcDogZ3JvdXBDZW50ZXJZLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICB3cmFwcGVkVGV4dCA9IGNyZWF0ZVRleHRib3goZm9udFNpemUpO1xyXG4gICAgICAgICAgICBmb250U2l6ZSAtPSAwLjU7XHJcbiAgICAgICAgICB9IHdoaWxlICh3cmFwcGVkVGV4dC5oZWlnaHQgPiBtYXhUZXh0SGVpZ2h0ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgY29uc3QgcmVjdEhlaWdodCA9IHdyYXBwZWRUZXh0LmdldFNjYWxlZEhlaWdodCgpICsgcGFkZGluZztcclxuXHJcbiAgICAgICAgICBjb25zdCBncm91cENlbnRlclRleHQgPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiBncm91cENlbnRlclgsXHJcbiAgICAgICAgICAgIHRvcDogZ3JvdXBDZW50ZXJZLFxyXG4gICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICB3aWR0aDogcmVjdFdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHJlY3RIZWlnaHQsXHJcbiAgICAgICAgICAgIGZpbGw6IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCIsXHJcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBldmVudGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgcng6IDEsXHJcbiAgICAgICAgICAgIHJ5OiAxLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKGdyb3VwQ2VudGVyVGV4dCwgd3JhcHBlZFRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChmaXh0dXJlRGF0YT8udm1Db25maWc/Lmxlbmd0aCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZpeHR1cmVEYXRhLnZtQ29uZmlnLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3Qgdm0gPSBmaXh0dXJlRGF0YS52bUNvbmZpZ1tpXTtcclxuXHJcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHZtLnN0YXJ0WVBvc2l0aW9uIC0gMTtcclxuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHZtLmVuZFlQb3NpdGlvbiAtIDE7XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHN0YXJ0SW5kZXggPiBmaXh0dXJlRGF0YT8uc2hlbGZDb25maWcubGVuZ3RoIHx8XHJcbiAgICAgICAgICBlbmRJbmRleCA+IGZpeHR1cmVEYXRhPy5zaGVsZkNvbmZpZy5sZW5ndGhcclxuICAgICAgICApXHJcbiAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgY29uc3Qgc2hlbGZUb3BZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHN0YXJ0SW5kZXggKyAxKTtcclxuICAgICAgICBjb25zdCBzaGVsZkhlaWdodFNwYW4gPSBib3hIZWlnaHQgKiAoZW5kSW5kZXggLSBzdGFydEluZGV4ICsgMSk7XHJcblxyXG4gICAgICAgIGxldCB2bUhlaWdodFB4OiBudW1iZXIgPSBzaGVsZkhlaWdodFNwYW47XHJcbiAgICAgICAgbGV0IHk6IG51bWJlciA9IHNoZWxmVG9wWTtcclxuXHJcbiAgICAgICAgaWYgKHZtLnlab25lICYmIHZtLnlab25lICE9PSBcInN0cmV0Y2hcIikge1xyXG4gICAgICAgICAgdm1IZWlnaHRQeCA9IHNoZWxmSGVpZ2h0U3BhbiAvIDM7XHJcblxyXG4gICAgICAgICAgc3dpdGNoICh2bS55Wm9uZSkge1xyXG4gICAgICAgICAgICBjYXNlIFwidG9wXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFkgKyB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XHJcbiAgICAgICAgICAgICAgeSA9IHNoZWxmVG9wWSArIDIgKiB2bUhlaWdodFB4O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHkgPSBzaGVsZlRvcFk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgeCA9IG1pZFg7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gbWlkV2lkdGg7XHJcblxyXG4gICAgICAgIGlmICghdm0ueFpvbmUgfHwgdm0ueFpvbmUgPT09IFwic3RyZXRjaFwiKSB7XHJcbiAgICAgICAgICB3aWR0aCA9IG1pZFdpZHRoO1xyXG4gICAgICAgICAgeCA9IG1pZFg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHNlY3Rpb25XaWR0aCA9IG1pZFdpZHRoIC8gMztcclxuICAgICAgICAgIHN3aXRjaCAodm0ueFpvbmUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImxlZnRcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIm1pZGRsZVwiOlxyXG4gICAgICAgICAgICAgIHdpZHRoID0gc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIHggPSBtaWRYICsgc2VjdGlvbldpZHRoO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicmlnaHRcIjpcclxuICAgICAgICAgICAgICB3aWR0aCA9IHNlY3Rpb25XaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWCArIDIgKiBzZWN0aW9uV2lkdGg7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgd2lkdGggPSBtaWRXaWR0aDtcclxuICAgICAgICAgICAgICB4ID0gbWlkWDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2bS52bUltYWdlVXJsKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB2bUltYWdlOiBhbnkgPSBhd2FpdCBmYWJyaWMuRmFicmljSW1hZ2UuZnJvbVVSTChcclxuICAgICAgICAgICAgICBgJHt0aGlzLmNkblVybH0ke3ZtLnZtSW1hZ2VVcmx9P3Y9JHtEYXRlLm5vdygpfWAsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgY3Jvc3NPcmlnaW46IFwiYW5vbnltb3VzXCIsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdm1JbWFnZS5zZXQoe1xyXG4gICAgICAgICAgICAgIGxlZnQ6IHggKyB3aWR0aCAvIDIsXHJcbiAgICAgICAgICAgICAgdG9wOiB5ICsgdm1IZWlnaHRQeCAvIDIsXHJcbiAgICAgICAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIHNjYWxlWDogd2lkdGggLyB2bUltYWdlLndpZHRoISxcclxuICAgICAgICAgICAgICBzY2FsZVk6IHZtSGVpZ2h0UHggLyB2bUltYWdlLmhlaWdodCEsXHJcbiAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2hlbHZlcy5wdXNoKHZtSW1hZ2UpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGxvYWRpbmcgaW1hZ2UgZm9yIFZNOiAke3ZtLnZtSW1hZ2VVcmx9YCwgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgdm1Cb3ggPSBuZXcgZmFicmljLlJlY3Qoe1xyXG4gICAgICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICAgIHdpZHRoLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IHZtSGVpZ2h0UHgsXHJcbiAgICAgICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8udm1GaWxsID8/IFwiIzY5MzhFRlwiLFxyXG4gICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBsZXQgZm9udFNpemUgPSA1O1xyXG4gICAgICAgICAgbGV0IHZtVGV4dDtcclxuXHJcbiAgICAgICAgICBjb25zdCBjcmVhdGVWbVRleHQgPSAoZnM6IG51bWJlcikgPT5cclxuICAgICAgICAgICAgbmV3IGZhYnJpYy5UZXh0Ym94KHZtLnZtTmFtZSB8fCBcIlwiLCB7XHJcbiAgICAgICAgICAgICAgbGVmdDogeCArIHdpZHRoIC8gMixcclxuICAgICAgICAgICAgICB0b3A6IHkgKyB2bUhlaWdodFB4IC8gMixcclxuICAgICAgICAgICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICAgICAgICAgIG9yaWdpblk6IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgZm9udFNpemU6IGZzLFxyXG4gICAgICAgICAgICAgIGZvbnRGYW1pbHk6IFwiSW50ZXJcIixcclxuICAgICAgICAgICAgICBmb250V2VpZ2h0OiBcIjYwMFwiLFxyXG4gICAgICAgICAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIHZtVGV4dCA9IGNyZWF0ZVZtVGV4dChmb250U2l6ZSk7XHJcbiAgICAgICAgICAgIGZvbnRTaXplIC09IDAuNTtcclxuICAgICAgICAgIH0gd2hpbGUgKHZtVGV4dC5oZWlnaHQgPiB2bUhlaWdodFB4ICYmIGZvbnRTaXplID4gMik7XHJcblxyXG4gICAgICAgICAgc2hlbHZlcy5wdXNoKHZtQm94LCB2bVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hZID0gZmlyc3RCb3hZICsgYm94SGVpZ2h0ICogKHNoZWxmQ291bnQgKyAxKTtcclxuICAgIGNvbnN0IGxhc3RCb3ggPSBuZXcgZmFicmljLlBhdGgoXHJcbiAgICAgIGBNICR7bWlkWH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WX0gXHJcbiAgICAgICAgTCAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c30gXHJcbiAgICAgICAgUSAke21pZFggKyBtaWRXaWR0aH0gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gJHtcclxuICAgICAgICBtaWRYICsgbWlkV2lkdGggLSByYWRpdXNcclxuICAgICAgfSAke2xhc3RCb3hZICsgYm94SGVpZ2h0fSBcclxuICAgICAgICBMICR7bWlkWCArIHJhZGl1c30gJHtsYXN0Qm94WSArIGJveEhlaWdodH0gXHJcbiAgICAgICAgUSAke21pZFh9ICR7bGFzdEJveFkgKyBib3hIZWlnaHR9ICR7bWlkWH0gJHtcclxuICAgICAgICBsYXN0Qm94WSArIGJveEhlaWdodCAtIHJhZGl1c1xyXG4gICAgICB9IFxyXG4gICAgICAgIEwgJHttaWRYfSAke2xhc3RCb3hZfSBaYCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGw6IGZpeHR1cmVDb2xvcj8uZmlsbFxyXG4gICAgICAgICAgPyBmaXh0dXJlQ29sb3I/LmZpbGxcclxuICAgICAgICAgIDogZml4dHVyZURhdGEuaXNzdWVcclxuICAgICAgICAgID8gXCIjRkVFNEUyXCJcclxuICAgICAgICAgIDogXCIjRUFGOEZGXCIsXHJcbiAgICAgICAgc3Ryb2tlOiBmaXh0dXJlQ29sb3I/LnByaW1hcnlcclxuICAgICAgICAgID8gZml4dHVyZUNvbG9yPy5wcmltYXJ5XHJcbiAgICAgICAgICA6IGZpeHR1cmVEYXRhLmlzc3VlXHJcbiAgICAgICAgICA/IFwiI0Q5MkQyMFwiXHJcbiAgICAgICAgICA6IFwiIzZCQ0FGRlwiLFxyXG4gICAgICAgIHN0cm9rZVdpZHRoOiAwLjI3LFxyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGxhc3RCb3hUZXh0ID0gbmV3IGZhYnJpYy5UZXh0Ym94KFxyXG4gICAgICBgJHtmaXh0dXJlRGF0YT8uZm9vdGVyPy5sYWJlbCA/IGZpeHR1cmVEYXRhLmZvb3Rlci5sYWJlbCA6IFwiXCJ9YCxcclxuICAgICAge1xyXG4gICAgICAgIGxlZnQ6IG1pZFggKyBtaWRXaWR0aCAvIDIsXHJcbiAgICAgICAgdG9wOiBsYXN0Qm94WSArIGJveEhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNjAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMTAxODI4XCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogbWlkV2lkdGgsXHJcbiAgICAgICAgaGVpZ3RoOiBib3hIZWlnaHQsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tV2lkdGggPSB3aWR0aCAvIDEuMDU7XHJcbiAgICBjb25zdCBib3R0b21IZWlnaHQgPSAoMyAvIDEwMCkgKiBoZWlnaHQ7XHJcbiAgICBjb25zdCBib3R0b21YID0geCArICh3aWR0aCAtIGJvdHRvbVdpZHRoKSAvIDI7XHJcbiAgICBjb25zdCBib3R0b21ZID0gbWlkWSArIG1pZEhlaWdodCArIHRoaXMudmVydGljYWxNYXJnaW47XHJcblxyXG4gICAgY29uc3QgYm90dG9tQ29udGFpbmVyID0gbmV3IGZhYnJpYy5SZWN0KHtcclxuICAgICAgbGVmdDogYm90dG9tWCxcclxuICAgICAgdG9wOiBib3R0b21ZLFxyXG4gICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgIGhlaWdodDogYm90dG9tSGVpZ2h0LFxyXG4gICAgICByeDogcmFkaXVzLFxyXG4gICAgICByeTogcmFkaXVzLFxyXG4gICAgICBzdHJva2U6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgZmlsbDogXCJ0cmFuc3BhcmVudFwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgYm90dG9tVGV4dENvbnRlbnQgPSBuZXcgZmFicmljLlRleHRib3goXHJcbiAgICAgIGBTaGVsdmVzIC0gJHtmaXh0dXJlRGF0YS5zaGVsZkNvbmZpZz8ubGVuZ3RofSAuIFByb2R1Y3RzIC0gICR7Zml4dHVyZURhdGEuZml4dHVyZUNhcGFjaXR5fSAuIFZNIC0gJHtmaXh0dXJlRGF0YS52bUNvbmZpZz8ubGVuZ3RofWAsXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiBib3R0b21YICsgYm90dG9tV2lkdGggLyAyLFxyXG4gICAgICAgIHRvcDogYm90dG9tWSArIGJvdHRvbUhlaWdodCAvIDIsXHJcbiAgICAgICAgZm9udFNpemU6IDUsXHJcbiAgICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICAgIGZvbnRXZWlnaHQ6IFwiNTAwXCIsXHJcbiAgICAgICAgZmlsbDogXCIjMzMzXCIsXHJcbiAgICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcclxuICAgICAgICB3aWR0aDogYm90dG9tV2lkdGgsXHJcbiAgICAgICAgaGVpZ2h0OiBib3R0b21IZWlnaHQsXHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc3Qgc3ZnU3RyaW5nID0gYFxyXG4gICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgPHJlY3Qgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgcng9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgPHBhdGggZD1cIk0xNC45OTk4IDYuNjAwMDFDMTUuMTU3NCA2LjQ0MjQzIDE1LjM0NDUgNi4zMTc0MiAxNS41NTA0IDYuMjMyMTRDMTUuNzU2MyA2LjE0Njg1IDE1Ljk3NyA2LjEwMjk2IDE2LjE5OTggNi4xMDI5NkMxNi40MjI3IDYuMTAyOTYgMTYuNjQzNCA2LjE0Njg1IDE2Ljg0OTIgNi4yMzIxNEMxNy4wNTUxIDYuMzE3NDIgMTcuMjQyMiA2LjQ0MjQzIDE3LjM5OTggNi42MDAwMUMxNy41NTc0IDYuNzU3NiAxNy42ODI0IDYuOTQ0NjggMTcuNzY3NyA3LjE1MDU4QzE3Ljg1MyA3LjM1NjQ4IDE3Ljg5NjkgNy41NzcxNSAxNy44OTY5IDcuODAwMDFDMTcuODk2OSA4LjAyMjg4IDE3Ljg1MyA4LjI0MzU1IDE3Ljc2NzcgOC40NDk0NUMxNy42ODI0IDguNjU1MzUgMTcuNTU3NCA4Ljg0MjQzIDE3LjM5OTggOS4wMDAwMUw5LjI5OTgyIDE3LjFMNS45OTk4MiAxOEw2Ljg5OTgyIDE0LjdMMTQuOTk5OCA2LjYwMDAxWlwiIHN0cm9rZT1cIiMxRDI5MzlcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgIDwvc3ZnPmA7XHJcblxyXG4gICAgbGV0IGxvYWRlZFNWRzogYW55ID0gYXdhaXQgZmFicmljLmxvYWRTVkdGcm9tU3RyaW5nKHN2Z1N0cmluZyk7XHJcblxyXG4gICAgbGV0IGVkaXRTdmcgPSBmYWJyaWMudXRpbC5ncm91cFNWR0VsZW1lbnRzKFxyXG4gICAgICBsb2FkZWRTVkcub2JqZWN0cyxcclxuICAgICAgbG9hZGVkU1ZHLm9wdGlvbnNcclxuICAgICk7XHJcblxyXG4gICAgZWRpdFN2Zy5zZXQoe1xyXG4gICAgICBzY2FsZVg6IDEsXHJcbiAgICAgIHNjYWxlWTogMSxcclxuICAgICAgbGVmdDogeCArIHdpZHRoIC0gMzAsXHJcbiAgICAgIHRvcDogeSArIDE0LFxyXG4gICAgICB2aXNpYmxlOiBmYWxzZSxcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IHRydWUsIC8vIGFsbG93IGV2ZW50c1xyXG4gICAgICBob3ZlckN1cnNvcjogXCJwb2ludGVyXCIsXHJcbiAgICB9KTtcclxuXHJcbiAgICBlZGl0U3ZnLm9uKFwibW91c2Vkb3duXCIsIChvcHQpID0+IHtcclxuICAgICAgaWYgKG9wdCAmJiBvcHQuZSAmJiBvcHQuZS5zdG9wUHJvcGFnYXRpb24pIHtcclxuICAgICAgICBvcHQuZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5sYXlvdXRGb3JtLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZSA9IHtcclxuICAgICAgICBmaXh0dXJlVHlwZTogZml4dHVyZURhdGEuZml4dHVyZVR5cGUsXHJcbiAgICAgICAgd2FsbEluZGV4OiBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcixcclxuICAgICAgICBmaXh0dXJlSW5kZXg6IGZpeHR1cmVEYXRhLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgICAgICBmaXh0dXJlSWQ6IGZpeHR1cmVEYXRhLl9pZCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAgICAgKHdhbGw6IGFueSkgPT4gd2FsbC5lbGVtZW50TnVtYmVyID09PSB0aGlzLnNlbGVjdGVkRml4dHVyZS53YWxsSW5kZXhcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB3YWxsLmZpeHR1cmVzLmZpbmQoXHJcbiAgICAgICAgICAoZml4dHVyZTogYW55KSA9PiBmaXh0dXJlLl9pZCA9PT0gdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSBmaXh0dXJlO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5maW5kKFxyXG4gICAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gZml4dHVyZS5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0gZml4dHVyZTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGhpcz8uc2VsZWN0ZWRGaXh0dXJlRGF0YT8udGFza1R5cGU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVEYXRhID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhO1xyXG4gICAgICB0aGlzLmVkaXRGaXh0dXJlID0gdHJ1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGZpeHR1cmVHcm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoXHJcbiAgICAgIFtcclxuICAgICAgICBtYWluQ29udGFpbmVyLFxyXG4gICAgICAgIHRvcENvbnRhaW5lcixcclxuICAgICAgICBpbm5lclRvcEJveCxcclxuICAgICAgICB0b3BUZXh0LFxyXG4gICAgICAgIGlubmVyQm90dG9tQm94LFxyXG4gICAgICAgIGJvdHRvbVRleHQsXHJcbiAgICAgICAgbWlkQ29udGFpbmVyLFxyXG4gICAgICAgIGZpcnN0Qm94LFxyXG4gICAgICAgIGZpcnN0Qm94VGV4dCxcclxuICAgICAgICAuLi5zaGVsdmVzLFxyXG4gICAgICAgIGxhc3RCb3gsXHJcbiAgICAgICAgbGFzdEJveFRleHQsXHJcbiAgICAgICAgYm90dG9tQ29udGFpbmVyLFxyXG4gICAgICAgIGJvdHRvbVRleHRDb250ZW50LFxyXG4gICAgICAgIGVkaXRTdmcsXHJcbiAgICAgIF0sXHJcbiAgICAgIHtcclxuICAgICAgICBsZWZ0OiB4LFxyXG4gICAgICAgIHRvcDogeSxcclxuICAgICAgICBldmVudGVkOiB0cnVlLFxyXG4gICAgICAgIGhvdmVyQ3Vyc29yOiBcInBvaW50ZXJcIixcclxuICAgICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgICBsb2NrU2NhbGluZ1g6IHRydWUsXHJcbiAgICAgICAgbG9ja1NjYWxpbmdZOiB0cnVlLFxyXG4gICAgICAgIHN1YlRhcmdldENoZWNrOiB0cnVlLFxyXG4gICAgICAgIC8vIGhhc0NvbnRyb2xzOiBmaXh0dXJlRGF0YS5maXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiLFxyXG4gICAgICAgIC8vIGxvY2tSb3RhdGlvbjogZml4dHVyZURhdGEuZml4dHVyZVR5cGUgIT09IFwiZmxvb3JcIixcclxuICAgICAgICAvLyBsb2NrTW92ZW1lbnRYOiBjdXJyZW50Rml4dHVyZUluZm8/LndhbGxEaXJlY3Rpb24gPT09ICd1cCcgfHwgY3VycmVudEZpeHR1cmVJbmZvPy53YWxsRGlyZWN0aW9uID09PSAnZG93bicsXHJcbiAgICAgICAgLy8gbG9ja01vdmVtZW50WTogY3VycmVudEZpeHR1cmVJbmZvPy53YWxsRGlyZWN0aW9uID09PSAncmlnaHQnIHx8IGN1cnJlbnRGaXh0dXJlSW5mbz8ud2FsbERpcmVjdGlvbiA9PT0gJ2xlZnQnLFxyXG4gICAgICAgIGFuZ2xlOiBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uPy5hbmdsZSA/PyAwLFxyXG4gICAgICB9XHJcbiAgICApIGFzIGZhYnJpYy5Hcm91cCAmIHtcclxuICAgICAgd2FsbEluZGV4OiBudW1iZXI7XHJcbiAgICAgIGZpeHR1cmVJbmRleDogbnVtYmVyO1xyXG4gICAgICBmaXh0dXJlSWQ6IHN0cmluZztcclxuICAgICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiO1xyXG4gICAgICBpc3N1ZTogYm9vbGVhbjtcclxuICAgICAgaXNzdWVEYXRhOiBhbnk7XHJcbiAgICAgIHRhc2tUeXBlOiBzdHJpbmc7XHJcbiAgICAgIHZtQ29uZmlnOiBbXTtcclxuICAgICAgb2JqVHlwZTogc3RyaW5nO1xyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICFmaXh0dXJlRGF0YT8uaXNzdWUgJiZcclxuICAgICAgIWZpeHR1cmVEYXRhPy51bnNhdmVkQ2hhbmdlcyAmJlxyXG4gICAgICB0aGlzLmxheW91dEZvcm0uZW5hYmxlZFxyXG4gICAgKSB7XHJcbiAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZWRpdFN2Zy5zZXQoXCJ2aXNpYmxlXCIsIHRydWUpO1xyXG4gICAgICAgIGNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGZpeHR1cmVHcm91cC5vbihcIm1vdXNlb3V0XCIsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBlZGl0U3ZnLnNldChcInZpc2libGVcIiwgZmFsc2UpO1xyXG4gICAgICAgIGNhbnZhcy5yZW5kZXJBbGwoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZml4dHVyZUdyb3VwLm9uKFwibW91c2Vkb3duXCIsIChldmVudDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkge1xyXG4gICAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJyaWdodFwiLCBmYWxzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuaGlnaGxpZ2h0Rml4dHVyZSh0YXJnZXQpO1xyXG4gICAgICB0aGlzLnNlbGVjdEZpeHR1cmVPbkNhbnZhc0NsaWNrKHRhcmdldCwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZVR5cGUgPSBmaXh0dXJlRGF0YS5maXh0dXJlVHlwZTtcclxuICAgIGZpeHR1cmVHcm91cC53YWxsSW5kZXggPSBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudE51bWJlcjtcclxuICAgIGZpeHR1cmVHcm91cC5maXh0dXJlSW5kZXggPSBmaXh0dXJlRGF0YS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXI7XHJcbiAgICBmaXh0dXJlR3JvdXAuZml4dHVyZUlkID0gZml4dHVyZURhdGEuX2lkO1xyXG4gICAgZml4dHVyZUdyb3VwLmlzc3VlID0gZml4dHVyZURhdGEuaXNzdWU7XHJcbiAgICBmaXh0dXJlR3JvdXAuaXNzdWVEYXRhID0gZml4dHVyZURhdGEuaXNzdWVEYXRhO1xyXG4gICAgZml4dHVyZUdyb3VwLnRhc2tUeXBlID0gZml4dHVyZURhdGEudGFza1R5cGU7XHJcbiAgICBmaXh0dXJlR3JvdXAudm1Db25maWcgPSBmaXh0dXJlRGF0YS52bUNvbmZpZztcclxuICAgIGZpeHR1cmVHcm91cC5vYmpUeXBlID0gXCJmaXh0dXJlXCI7XHJcblxyXG4gICAgLy8gdGhpcy5jYW52YXMub24oXCJvYmplY3Q6bW92aW5nXCIsIChlKSA9PiB7XHJcbiAgICAvLyAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIGFueTtcclxuICAgIC8vICAgaWYgKCF0YXJnZXQgfHwgdGFyZ2V0Lm9ialR5cGUgIT09IFwiZml4dHVyZVwiKSByZXR1cm47XHJcblxyXG4gICAgLy8gICBjb25zdCBhbmdsZURlZyA9IHRhcmdldC5hbmdsZSB8fCAwO1xyXG4gICAgLy8gICBjb25zdCBhbmdsZSA9IChhbmdsZURlZyAqIE1hdGguUEkpIC8gMTgwO1xyXG4gICAgLy8gICBpZiAoIXRhcmdldC5fbGFzdExlZnQpIHtcclxuICAgIC8vICAgICB0YXJnZXQuX2xhc3RMZWZ0ID0gdGFyZ2V0LmxlZnQ7XHJcbiAgICAvLyAgICAgdGFyZ2V0Ll9sYXN0VG9wID0gdGFyZ2V0LnRvcDtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gICBjb25zdCBkeCA9IHRhcmdldC5sZWZ0IC0gdGFyZ2V0Ll9sYXN0TGVmdDtcclxuICAgIC8vICAgY29uc3QgZHkgPSB0YXJnZXQudG9wIC0gdGFyZ2V0Ll9sYXN0VG9wO1xyXG4gICAgLy8gICBjb25zdCBwcm9qZWN0ZWQgPSBkeCAqIE1hdGguY29zKGFuZ2xlKSArIGR5ICogTWF0aC5zaW4oYW5nbGUpO1xyXG4gICAgLy8gICB0YXJnZXQubGVmdCA9IHRhcmdldC5fbGFzdExlZnQgKyBwcm9qZWN0ZWQgKiBNYXRoLmNvcyhhbmdsZSk7XHJcbiAgICAvLyAgIHRhcmdldC50b3AgPSB0YXJnZXQuX2xhc3RUb3AgKyBwcm9qZWN0ZWQgKiBNYXRoLnNpbihhbmdsZSk7XHJcbiAgICAvLyAgIHRhcmdldC5fbGFzdExlZnQgPSB0YXJnZXQubGVmdDtcclxuICAgIC8vICAgdGFyZ2V0Ll9sYXN0VG9wID0gdGFyZ2V0LnRvcDtcclxuICAgIC8vIH0pO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZml4dHVyZUdyb3VwKTtcclxuXHJcbiAgICAvLyBJZiBuZXdseSBhZGRlZCwgZm9jdXMgaXQgb25jZVxyXG4gICAgaWYgKChmaXh0dXJlRGF0YSBhcyBhbnkpPy5uZXdBZGRlZCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnNldEFjdGl2ZU9iamVjdChmaXh0dXJlR3JvdXApO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSBjYXRjaCB7fVxyXG4gICAgICBkZWxldGUgKGZpeHR1cmVEYXRhIGFzIGFueSkubmV3QWRkZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZpeHR1cmVHcm91cDtcclxuICB9XHJcblxyXG4gIGRyYXdFbnRyYW5jZShcclxuICAgIGNhbnZhczogZmFicmljLkNhbnZhcyxcclxuICAgIHg6IG51bWJlcixcclxuICAgIHk6IG51bWJlcixcclxuICAgIHdpZHRoOiBudW1iZXIsXHJcbiAgICBoZWlnaHQ6IG51bWJlcixcclxuICAgIGFycm93V2lkdGg6IG51bWJlcixcclxuICAgIGVsZW1lbnREYXRhOiBhbnlcclxuICApIHtcclxuICAgIGNvbnN0IGJvZHlXaWR0aCA9IHdpZHRoIC0gYXJyb3dXaWR0aDtcclxuXHJcbiAgICBjb25zdCBwYXRoRGF0YSA9IFtcclxuICAgICAgYE0gMCAwYCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9IDBgLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHstaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke3dpZHRofSAke2hlaWdodCAvIDJ9YCxcclxuICAgICAgYEwgJHtib2R5V2lkdGh9ICR7aGVpZ2h0ICsgaGVpZ2h0IC8gMn1gLFxyXG4gICAgICBgTCAke2JvZHlXaWR0aH0gJHtoZWlnaHR9YCxcclxuICAgICAgYEwgMCAke2hlaWdodH1gLFxyXG4gICAgICBgWmAsXHJcbiAgICBdLmpvaW4oXCIgXCIpO1xyXG5cclxuICAgIGNvbnN0IGFycm93ID0gbmV3IGZhYnJpYy5QYXRoKHBhdGhEYXRhLCB7XHJcbiAgICAgIGZpbGw6IFwiIzAzQTlGNFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBtYXhUZXh0SGVpZ2h0ID0gaGVpZ2h0IC0gNjtcclxuICAgIGNvbnN0IHRleHQgPSBuZXcgZmFicmljLlRleHQoXCJFbnRyYW5jZVwiLCB7XHJcbiAgICAgIGZvbnRGYW1pbHk6IFwiQXJpYWxcIixcclxuICAgICAgZm9udFdlaWdodDogXCJib2xkXCIsXHJcbiAgICAgIGZpbGw6IFwid2hpdGVcIixcclxuICAgICAgYW5nbGU6IC05MCxcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgbGVmdDogMTUsXHJcbiAgICAgIHRvcDogaGVpZ2h0IC8gMixcclxuICAgICAgZm9udFNpemU6IDIwLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0ZXh0Qm91bmRzID0gdGV4dC5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGlmICh0ZXh0Qm91bmRzLmhlaWdodCA+IG1heFRleHRIZWlnaHQpIHtcclxuICAgICAgY29uc3Qgc2NhbGUgPSBtYXhUZXh0SGVpZ2h0IC8gdGV4dEJvdW5kcy5oZWlnaHQ7XHJcbiAgICAgIHRleHQuc2V0KFwiZm9udFNpemVcIiwgdGV4dC5mb250U2l6ZSEgKiBzY2FsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZ3JvdXAgPSBuZXcgZmFicmljLkdyb3VwKFthcnJvdywgdGV4dF0sIHtcclxuICAgICAgbGVmdDogeCxcclxuICAgICAgdG9wOiB5LFxyXG4gICAgICBzZWxlY3RhYmxlOiB0aGlzLmxheW91dEZvcm0uZW5hYmxlZCxcclxuICAgICAgbG9ja1NjYWxpbmdYOiB0cnVlLFxyXG4gICAgICBsb2NrU2NhbGluZ1k6IHRydWUsXHJcbiAgICAgIGxvY2tTY2FsaW5nRmxpcDogdHJ1ZSxcclxuICAgICAgYW5nbGU6IGVsZW1lbnREYXRhLmFuZ2xlLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IGVsZW1lbnREYXRhLmVsZW1lbnRUeXBlO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnREYXRhO1xyXG5cclxuICAgIGNhbnZhcy5hZGQoZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICBjYW52YXM6IGZhYnJpYy5DYW52YXMsXHJcbiAgICB4OiBudW1iZXIsXHJcbiAgICB5OiBudW1iZXIsXHJcbiAgICBhOiBudW1iZXIsXHJcbiAgICB3aWR0aDogbnVtYmVyLFxyXG4gICAgaGVpZ2h0OiBudW1iZXIsXHJcbiAgICBlbGVtZW50OiBhbnlcclxuICApOiBmYWJyaWMuR3JvdXAge1xyXG4gICAgY29uc3QgcmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIHdpZHRoLFxyXG4gICAgICBoZWlnaHQsXHJcbiAgICAgIHJ4OiAyLFxyXG4gICAgICByeTogMixcclxuICAgICAgZmlsbDogXCIjREFGMUZGXCIsXHJcbiAgICAgIHN0cm9rZTogXCIjNkJDQUZGXCIsXHJcbiAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3QgdGV4dCA9IG5ldyBmYWJyaWMuVGV4dGJveChlbGVtZW50LmZpeHR1cmVOYW1lLCB7XHJcbiAgICAgIHdpZHRoOiB3aWR0aCAtIDgsXHJcbiAgICAgIGZvbnRTaXplOiAxNCxcclxuICAgICAgZm9udEZhbWlseTogXCJJbnRlclwiLFxyXG4gICAgICBmb250V2VpZ2h0OiBcIjUwMFwiLFxyXG4gICAgICBmaWxsOiBcIiMxMDE4MjhcIixcclxuICAgICAgb3JpZ2luWDogXCJjZW50ZXJcIixcclxuICAgICAgb3JpZ2luWTogXCJjZW50ZXJcIixcclxuICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICBlZGl0YWJsZTogZmFsc2UsXHJcbiAgICAgIHNwbGl0QnlHcmFwaGVtZTogdHJ1ZSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHRleHRCb3VuZHMgPSB0ZXh0LmdldEJvdW5kaW5nUmVjdCgpO1xyXG5cclxuICAgIGlmICh0ZXh0Qm91bmRzLmhlaWdodCA+IGhlaWdodCAtIDgpIHtcclxuICAgICAgY29uc3Qgc2NhbGUgPSAoaGVpZ2h0IC0gOCkgLyB0ZXh0Qm91bmRzLmhlaWdodDtcclxuICAgICAgdGV4dC5zZXQoXCJmb250U2l6ZVwiLCB0ZXh0LmZvbnRTaXplISAqIHNjYWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncm91cCA9IG5ldyBmYWJyaWMuR3JvdXAoW3JlY3QsIHRleHRdLCB7XHJcbiAgICAgIGxlZnQ6IHgsXHJcbiAgICAgIHRvcDogeSxcclxuICAgICAgYW5nbGU6IGEsXHJcbiAgICAgIHNlbGVjdGFibGU6IHRoaXMubGF5b3V0Rm9ybS5lbmFibGVkLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgfSkgYXMgZmFicmljLkdyb3VwICYge1xyXG4gICAgICBvYmpUeXBlOiBzdHJpbmc7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgIH07XHJcblxyXG4gICAgZ3JvdXAub2JqVHlwZSA9IFwib3RoZXJzXCI7XHJcbiAgICBncm91cC5kYXRhID0gZWxlbWVudDtcclxuXHJcbiAgICBjYW52YXMuYWRkKGdyb3VwKTtcclxuXHJcbiAgICBpZiAoKGVsZW1lbnQgYXMgYW55KT8ubmV3QWRkZWQpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QoZ3JvdXApO1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuICAgICAgfSBjYXRjaCB7fVxyXG4gICAgICBkZWxldGUgKGVsZW1lbnQgYXMgYW55KS5uZXdBZGRlZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZ3JvdXA7XHJcbiAgfVxyXG5cclxuICBkcmF3QmcoKSB7XHJcbiAgICBjb25zdCB3YWxsMSA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGU6IGFueSkgPT4gZS5lbGVtZW50TnVtYmVyID09PSAxICYmIGUuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiXHJcbiAgICApO1xyXG4gICAgY29uc3Qgd2FsbDIgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgIChlOiBhbnkpID0+IGUuZWxlbWVudE51bWJlciA9PT0gMiAmJiBlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIlxyXG4gICAgKTtcclxuICAgIGNvbnN0IHdpZHRoID0gdGhpcy50b1BpeGVscyh3YWxsMS5kaXN0YW5jZSwgd2FsbDEudW5pdCk7XHJcbiAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnRvUGl4ZWxzKHdhbGwyLmRpc3RhbmNlLCB3YWxsMi51bml0KTtcclxuXHJcbiAgICBjb25zdCBiZyA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IHRoaXMud2FsbFRoaWNrbmVzcyxcclxuICAgICAgdG9wOiB0aGlzLndhbGxUaGlja25lc3MsXHJcbiAgICAgIHdpZHRoOiB3aWR0aCxcclxuICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgIGZpbGw6IFwiI2VhZWNmMFwiLFxyXG4gICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcclxuICAgICAgZXZlbnRlZDogZmFsc2UsXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNhbnZhcy5hZGQoYmcpO1xyXG4gICAgdGhpcy5jYW52YXMucmVtb3ZlKGJnKTtcclxuICAgIHRoaXMuY2FudmFzLmluc2VydEF0KDAsIGJnKTtcclxuICAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9GaXh0dXJlQ29uZmlnSWRDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucy5mb3JFYWNoKChzdWIpID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcclxuICAgIHRoaXMuZml4dHVyZUNvbmZpZ1N1YnNjcmlwdGlvbnMgPSBbXTtcclxuXHJcbiAgICB0aGlzLmdldEZvcm1XYWxscy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdhbGxHcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBmaXh0dXJlc0FycmF5ID0gd2FsbEdyb3VwLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheTtcclxuXHJcbiAgICAgIGZpeHR1cmVzQXJyYXkuY29udHJvbHMuZm9yRWFjaCgoZml4dHVyZUNvbnRyb2wsIGopID0+IHtcclxuICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBmaXh0dXJlQ29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgY29uc3Qgc3ViID0gZml4dHVyZUdyb3VwXHJcbiAgICAgICAgICAuZ2V0KFwiZml4dHVyZUNvbmZpZ0lkXCIpXHJcbiAgICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKG5ld1ZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRml4dHVyZVRlbXBsYXRlKG5ld1ZhbHVlLCBcIndhbGxcIiwgaiwgaSk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHN1YikgdGhpcy5maXh0dXJlQ29uZmlnU3Vic2NyaXB0aW9ucy5wdXNoKHN1Yik7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5nZXRGb3JtRmxvb3JGaXh0dXJlcy5jb250cm9scy5mb3JFYWNoKChmaXh0dXJlQ29udHJvbCwgaykgPT4ge1xyXG4gICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSBmaXh0dXJlQ29udHJvbCBhcyBGb3JtR3JvdXA7XHJcbiAgICAgIGNvbnN0IHN1YiA9IGZpeHR1cmVHcm91cFxyXG4gICAgICAgIC5nZXQoXCJmaXh0dXJlQ29uZmlnSWRcIilcclxuICAgICAgICA/LnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChuZXdWYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VGaXh0dXJlVGVtcGxhdGUobmV3VmFsdWUsIFwiZmxvb3JcIiwgayk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoc3ViKSB0aGlzLmZpeHR1cmVDb25maWdTdWJzY3JpcHRpb25zLnB1c2goc3ViKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3Vic2NyaWJlVG9PdGhlckVsZW1lbnRzQ2hhbmdlcygpIHtcclxuICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViKSA9PiBzdWI/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgdGhpcy5vdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9ucyA9IFtdO1xyXG5cclxuICAgIC8vIFdhbGwtbGV2ZWwgb3RoZXJFbGVtZW50cyBsYWJlbCBzdWJzY3JpcHRpb25zXHJcbiAgICB0aGlzLmdldEZvcm1XYWxscy5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgIGNvbnN0IHdhbGxHcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCBvdGhlckFycmF5ID0gd2FsbEdyb3VwLmdldChcIm90aGVyRWxlbWVudHNcIikgYXMgRm9ybUFycmF5O1xyXG5cclxuICAgICAgb3RoZXJBcnJheS5jb250cm9scy5mb3JFYWNoKChjdHJsLCBvdGhlcklkeCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRHcm91cCA9IGN0cmwgYXMgRm9ybUdyb3VwO1xyXG4gICAgICAgIGNvbnN0IHR5cGVDb250cm9sID0gZWxlbWVudEdyb3VwLmdldChcInR5cGVcIikgYXMgRm9ybUNvbnRyb2w7XHJcbiAgICAgICAgY29uc3QgY3VzdG9tTmFtZUNvbnRyb2wgPSBlbGVtZW50R3JvdXAuZ2V0KFwiY3VzdG9tTmFtZVwiKSBhcyBGb3JtQ29udHJvbDtcclxuXHJcbiAgICAgICAgY29uc3Qgd2FsbE1ldGEgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmQoXHJcbiAgICAgICAgICAoZWw6IGFueSkgPT5cclxuICAgICAgICAgICAgZWwuZWxlbWVudFR5cGUgPT09IHdhbGxHcm91cC5nZXQoXCJlbGVtZW50VHlwZVwiKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgZWwuZWxlbWVudE51bWJlciA9PT0gd2FsbEdyb3VwLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBlbGVtZW50UmVmID0gd2FsbE1ldGE/Lm90aGVyRWxlbWVudHM/LltvdGhlcklkeF07XHJcbiAgICAgICAgaWYgKCFlbGVtZW50UmVmKSByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIHdoZW4gdHlwZSBjaGFuZ2VzIChkcm9wZG93bilcclxuICAgICAgICBjb25zdCBzdWJUeXBlID0gdHlwZUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGlmIHVzZXIgcGlja3MgXCJPdGhlcnNcIiwgcHJlZmVyIGN1c3RvbU5hbWUgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIHNldCBmaXh0dXJlTmFtZSB0byBcIk90aGVyc1wiXHJcbiAgICAgICAgICAgIGVsZW1lbnRSZWYuZml4dHVyZU5hbWUgPVxyXG4gICAgICAgICAgICAgIHNlbGVjdGVkID09PSBcIk90aGVyc1wiXHJcbiAgICAgICAgICAgICAgICA/IGN1c3RvbU5hbWVDb250cm9sPy52YWx1ZSB8fCBcIk90aGVyc1wiXHJcbiAgICAgICAgICAgICAgICA6IHNlbGVjdGVkO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbnZhc090aGVyRWxlbWVudExhYmVsKGVsZW1lbnRSZWYpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIHdoZW4gY3VzdG9tTmFtZSBjaGFuZ2VzICh0ZXh0IGlucHV0IHZpc2libGUgb25seSB3aGVuIHR5cGUgPT09ICdPdGhlcnMnKVxyXG4gICAgICAgIGNvbnN0IHN1YkN1c3RvbSA9IGN1c3RvbU5hbWVDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoY3VzdG9tOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVDb250cm9sLnZhbHVlID09PSBcIk90aGVyc1wiKSB7XHJcbiAgICAgICAgICAgICAgZWxlbWVudFJlZi5maXh0dXJlTmFtZSA9IGN1c3RvbTtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhbnZhc090aGVyRWxlbWVudExhYmVsKGVsZW1lbnRSZWYpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5vdGhlckVsZW1lbnRzU3Vic2NyaXB0aW9ucy5wdXNoKHN1YlR5cGUsIHN1YkN1c3RvbSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gRmxvb3ItbGV2ZWwgb3RoZXJFbGVtZW50cyBsYWJlbCBzdWJzY3JpcHRpb25zXHJcbiAgICB0aGlzLmdldEZvcm1GbG9vck90aGVyRWxlbWVudHMuY29udHJvbHMuZm9yRWFjaCgoY3RybCwgaWR4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnRHcm91cCA9IGN0cmwgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBjb25zdCB0eXBlQ29udHJvbCA9IGVsZW1lbnRHcm91cC5nZXQoXCJ0eXBlXCIpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgICBjb25zdCBjdXN0b21OYW1lQ29udHJvbCA9IGVsZW1lbnRHcm91cC5nZXQoXCJjdXN0b21OYW1lXCIpIGFzIEZvcm1Db250cm9sO1xyXG4gICAgICBjb25zdCBlbGVtZW50UmVmID0gdGhpcy5mbG9vckRhdGE/Lm90aGVyRWxlbWVudHM/LltpZHhdO1xyXG4gICAgICBpZiAoIWVsZW1lbnRSZWYpIHJldHVybjtcclxuXHJcbiAgICAgIGNvbnN0IHN1YlR5cGUgPSB0eXBlQ29udHJvbC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoc2VsZWN0ZWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgZWxlbWVudFJlZi5maXh0dXJlTmFtZSA9XHJcbiAgICAgICAgICAgIHNlbGVjdGVkID09PSBcIk90aGVyc1wiXHJcbiAgICAgICAgICAgICAgPyBjdXN0b21OYW1lQ29udHJvbD8udmFsdWUgfHwgXCJPdGhlcnNcIlxyXG4gICAgICAgICAgICAgIDogc2VsZWN0ZWQ7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNhbnZhc090aGVyRWxlbWVudExhYmVsKGVsZW1lbnRSZWYpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3Qgc3ViQ3VzdG9tID0gY3VzdG9tTmFtZUNvbnRyb2wudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGN1c3RvbTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICBpZiAodHlwZUNvbnRyb2wudmFsdWUgPT09IFwiT3RoZXJzXCIpIHtcclxuICAgICAgICAgICAgZWxlbWVudFJlZi5maXh0dXJlTmFtZSA9IGN1c3RvbTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMub3RoZXJFbGVtZW50c1N1YnNjcmlwdGlvbnMucHVzaChzdWJUeXBlLCBzdWJDdXN0b20pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDYW52YXNPdGhlckVsZW1lbnRMYWJlbChlbGVtZW50UmVmOiBhbnkpIHtcclxuICAgIGlmICghdGhpcy5jYW52YXMpIHJldHVybjtcclxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmluZChcclxuICAgICAgICAob2JqOiBhbnkpID0+XHJcbiAgICAgICAgICBvYmo/Lm9ialR5cGUgPT09IFwib3RoZXJzXCIgJiYgb2JqPy5kYXRhLl9pZCA9PT0gZWxlbWVudFJlZi5faWRcclxuICAgICAgKSBhcyBhbnk7XHJcblxyXG4gICAgaWYgKCFncm91cCkgcmV0dXJuO1xyXG4gICAgZ3JvdXAuZGF0YSA9IGVsZW1lbnRSZWY7XHJcblxyXG4gICAgY29uc3QgdGV4dE9iaiA9IChncm91cC5nZXRPYmplY3RzKCkgfHwgW10pLmZpbmQoXHJcbiAgICAgIChvOiBhbnkpID0+IG8/LnR5cGUgPT09IFwidGV4dFwiIHx8IG8/LnR5cGUgPT09IFwidGV4dGJveFwiXHJcbiAgICApIGFzIGZhYnJpYy5UZXh0IHwgZmFicmljLlRleHRib3ggfCB1bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKHRleHRPYmopIHtcclxuICAgICAgKHRleHRPYmogYXMgYW55KS5zZXQoeyB0ZXh0OiBlbGVtZW50UmVmLmZpeHR1cmVOYW1lIH0pO1xyXG4gICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByb3RhdGVDYW52YXMoY2FudmFzOiBmYWJyaWMuQ2FudmFzLCBhbmdsZURlZzogbnVtYmVyKSB7XHJcbiAgICBpZiAoIWNhbnZhcykgcmV0dXJuO1xyXG4gICAgY29uc3QgYWxsT2JqZWN0cyA9IGNhbnZhcy5nZXRPYmplY3RzKCk7XHJcbiAgICBpZiAoIWFsbE9iamVjdHMgfHwgYWxsT2JqZWN0cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAvLyBDcmVhdGUgYW4gQWN0aXZlU2VsZWN0aW9uIGNvbnRhaW5pbmcgYWxsIG9iamVjdHMgb24gdGhlIGNhbnZhc1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gbmV3IGZhYnJpYy5BY3RpdmVTZWxlY3Rpb24oYWxsT2JqZWN0cyBhcyBhbnksIHsgY2FudmFzIH0pO1xyXG4gICAgY2FudmFzLnNldEFjdGl2ZU9iamVjdChzZWxlY3Rpb24pO1xyXG5cclxuICAgIC8vIFJvdGF0ZSB0aGUgQWN0aXZlU2VsZWN0aW9uIGRpcmVjdGx5ICh3b3JrcyBsaWtlIGEgdGVtcG9yYXJ5IGdyb3VwKVxyXG4gICAgY29uc3QgYWN0aXZlOiBhbnkgPSBjYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCk7XHJcbiAgICBpZiAoIWFjdGl2ZSkge1xyXG4gICAgICBjYW52YXMuZGlzY2FyZEFjdGl2ZU9iamVjdCgpO1xyXG4gICAgICBjYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudEFuZ2xlID0gYWN0aXZlLmFuZ2xlIHx8IDA7XHJcbiAgICBhY3RpdmUucm90YXRlKGN1cnJlbnRBbmdsZSArIGFuZ2xlRGVnKTtcclxuICAgIGFjdGl2ZS5zZXRDb29yZHMoKTtcclxuXHJcbiAgICAvLyBDbGVhciBzZWxlY3Rpb24gYnV0IGtlZXAgcm90YXRlZCBwb3NpdGlvbnMgb2YgY2hpbGQgb2JqZWN0c1xyXG4gICAgY2FudmFzLmRpc2NhcmRBY3RpdmVPYmplY3QoKTtcclxuICAgIGNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGaXh0dXJlT25DYW52YXNDbGljayh0YXJnZXQ6IGFueSwgY29sbGFwc2VUYXNrSW5mbzogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodGFyZ2V0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlID0ge1xyXG4gICAgICAgIGZpeHR1cmVUeXBlOiB0YXJnZXQuZml4dHVyZVR5cGUsXHJcbiAgICAgICAgd2FsbEluZGV4OiB0YXJnZXQud2FsbEluZGV4LFxyXG4gICAgICAgIGZpeHR1cmVJbmRleDogdGFyZ2V0LmZpeHR1cmVJbmRleCxcclxuICAgICAgICBmaXh0dXJlSWQ6IHRhcmdldC5maXh0dXJlSWQsXHJcbiAgICAgICAgaXNzdWU6IHRhcmdldC5pc3N1ZSxcclxuICAgICAgICBpc3N1ZURhdGE6IHRhcmdldC5pc3N1ZURhdGEsXHJcbiAgICAgICAgdm1Db25maWc6IHRhcmdldC52bUNvbmZpZyxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0Rml4dHVyZUZlZWRiYWNrKFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCxcclxuICAgICAgICBjb2xsYXBzZVRhc2tJbmZvXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RGaXh0dXJlRmVlZGJhY2soZml4dHVyZUlkOiBzdHJpbmcsIGNvbGxhcHNlVGFza0luZm86IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgY29uc3QgY3VycmVudEZpeHR1cmVGZWVkYmFjayA9IHRoaXMuc3RvcmVGZWVkYmFjay5maXh0dXJlRGF0YS5maW5kKFxyXG4gICAgICAoZmI6IGFueSkgPT4gZmIuZml4dHVyZUlkID09PSBmaXh0dXJlSWRcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGN1cnJlbnRGaXh0dXJlRmVlZGJhY2spIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVGZWVkYmFjayA9IHtcclxuICAgICAgICBnbG9iYWxDb21tZW50czogdGhpcy5zdG9yZUZlZWRiYWNrLmZpeHR1cmVDb21tZW50LFxyXG4gICAgICAgIGZpeHR1cmVGZWVkYmFjazoge1xyXG4gICAgICAgICAgLi4uY3VycmVudEZpeHR1cmVGZWVkYmFjayxcclxuICAgICAgICAgIEZpeHR1cmVEYXRhOiBzdHJ1Y3R1cmVkQ2xvbmUoXHJcbiAgICAgICAgICAgIHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5maW5kKChmaTogYW55KSA9PiBmaS5faWQgPT09IGZpeHR1cmVJZClcclxuICAgICAgICAgICksXHJcbiAgICAgICAgfSxcclxuICAgICAgICB0YXNrSW5mb1RvZ2dsZTogY29sbGFwc2VUYXNrSW5mbyxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGaXh0dXJlRmVlZGJhY2sgPSB7XHJcbiAgICAgICAgZ2xvYmFsQ29tbWVudHM6IFtdLFxyXG4gICAgICAgIGZpeHR1cmVGZWVkYmFjazoge1xyXG4gICAgICAgICAgZml4dHVyZUlkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICBGaXh0dXJlRGF0YTogc3RydWN0dXJlZENsb25lKFxyXG4gICAgICAgICAgICB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMuZmluZCgoZmk6IGFueSkgPT4gZmkuX2lkID09PSBmaXh0dXJlSWQpXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgZml4dHVyZUFJRGF0YTogbnVsbCxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRhc2tJbmZvVG9nZ2xlOiBjb2xsYXBzZVRhc2tJbmZvLFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Rml4dHVyZVRlbXBsYXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5nZXRBbGxUZW1wbGF0ZXMocGF5bG9hZClcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgZGF0YSA9IHJlcz8uZGF0YTtcclxuXHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5maXh0dXJlVGVtcGxhdGVzID0gZGF0YS5tYXAoKHQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgX2lkOiB0Ll9pZCxcclxuICAgICAgICAgICAgbmFtZTogYCR7dC5maXh0dXJlTmFtZX0gLSAke3QuZml4dHVyZVdpZHRoLnZhbHVlfSAke3QuZml4dHVyZVdpZHRoLnVuaXR9YCxcclxuICAgICAgICAgICAgc3VidGV4dDogYCR7dC5wcm9kdWN0QnJhbmROYW1lPy5qb2luKFwiLCBcIil9YCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciBmZXRjaGluZyBmaXh0dXJlIHRlbXBsYXRlczpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlRm9ybSgpIHtcclxuICAgIHRoaXMubGF5b3V0Rm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB3YWxsczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIGZsb29yRml4dHVyZXM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICBmbG9vck90aGVyRWxlbWVudHM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0Rm9ybVdhbGxzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJ3YWxsc1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0Rm9ybUZsb29yRml4dHVyZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGdldEZvcm1GbG9vck90aGVyRWxlbWVudHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yT3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXQgZ2V0RW50cmFuY2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZmxvb3JEYXRhPy5sYXlvdXRQb2x5Z29uPy5maWx0ZXIoXHJcbiAgICAgIChlbGU6IGFueSkgPT4gZWxlLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRXYWxsT3RoZXJFbGVtZW50cyh3YWxsSW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuICh0aGlzLmxheW91dEZvcm0uZ2V0KFwid2FsbHNcIikgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQod2FsbEluZGV4KVxyXG4gICAgICAuZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtRml4dHVyZXMod2FsbEluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAodGhpcy5sYXlvdXRGb3JtLmdldChcIndhbGxzXCIpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHdhbGxJbmRleClcclxuICAgICAgLmdldChcImZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIHBhdGNoV2FsbEVsZW1lbnRzKHsgZWxlbWVudFR5cGUsIGVsZW1lbnROdW1iZXIgfTogUmVjb3JkPHN0cmluZywgYW55Pikge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBlbGVtZW50VHlwZTogW2VsZW1lbnRUeXBlID8gZWxlbWVudFR5cGUgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBlbGVtZW50TnVtYmVyOiBbZWxlbWVudE51bWJlciA/IGVsZW1lbnROdW1iZXIgOiAwLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgICBmaXh0dXJlczogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgIG90aGVyRWxlbWVudHM6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIHBhdGNoRml4dHVyZSh7IGZpeHR1cmVOYW1lLCBmaXh0dXJlQ29uZmlnSWQsIF9pZCB9OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGZpeHR1cmVOYW1lOiBbZml4dHVyZU5hbWUgPyBmaXh0dXJlTmFtZSA6IFwiXCIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXHJcbiAgICAgIGZpeHR1cmVDb25maWdJZDogW1xyXG4gICAgICAgIGZpeHR1cmVDb25maWdJZCA/IGZpeHR1cmVDb25maWdJZCA6IFwiXCIsXHJcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBdLFxyXG4gICAgICBfaWQ6IFtfaWQgPyBfaWQgOiBcIlwiLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIGFkZFdhbGxTcGFjZSh3YWxsSW5kZXg6IG51bWJlciwgb3BlcmF0aW9uOiBcImluY3JlbWVudFwiIHwgXCJkZWNyZW1lbnRcIikge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG4gICAgY29uc3QgY2xpY2tlZFdhbGxOdW1iZXIgPSB3YWxsSW5kZXggKyAxO1xyXG4gICAgY29uc3QgbW1Ub0ZlZXQgPSAzMDU7XHJcbiAgICBjb25zdCBmaXh0dXJlSGVpZ2h0ID0gMTUyNCAvIG1tVG9GZWV0OyAvLyB+NSBmdCAoaG9yaXpvbnRhbCBpbmNyZW1lbnQpXHJcbiAgICBjb25zdCBmaXh0dXJlV2lkdGggPSAxMjIwIC8gbW1Ub0ZlZXQ7IC8vIH40IGZ0ICh2ZXJ0aWNhbCBpbmNyZW1lbnQpXHJcblxyXG4gICAgY29uc3QgbGF5b3V0ID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbjtcclxuXHJcbiAgICBjb25zdCBnZXRXYWxsID0gKG51bTogbnVtYmVyKSA9PlxyXG4gICAgICBsYXlvdXQuZmluZChcclxuICAgICAgICAoZWw6IGFueSkgPT4gZWwuZWxlbWVudFR5cGUgPT09IFwid2FsbFwiICYmIGVsLmVsZW1lbnROdW1iZXIgPT09IG51bVxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbnN0IGFtb3VudCA9IG9wZXJhdGlvbiA9PT0gXCJpbmNyZW1lbnRcIiA/IDEgOiAtMTtcclxuXHJcbiAgICBjb25zdCB3MSA9IGdldFdhbGwoMSk7XHJcbiAgICBjb25zdCB3MiA9IGdldFdhbGwoMik7XHJcbiAgICBjb25zdCB3MyA9IGdldFdhbGwoMyk7XHJcbiAgICBjb25zdCB3NCA9IGdldFdhbGwoNCk7XHJcbiAgICBjb25zdCB3NSA9IGdldFdhbGwoNSk7XHJcbiAgICBjb25zdCBlbnRyYW5jZSA9IGxheW91dC5maW5kKChlbDogYW55KSA9PiBlbC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiKTtcclxuXHJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAvLyBIb3Jpem9udGFsIGdyb3d0aCAgKFdhbGwtMSAvIFdhbGwtMylcclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIGlmIChjbGlja2VkV2FsbE51bWJlciA9PT0gMSB8fCBjbGlja2VkV2FsbE51bWJlciA9PT0gMykge1xyXG4gICAgICBpZiAodzEpIHcxLmRpc3RhbmNlICs9IGFtb3VudCAqIGZpeHR1cmVXaWR0aDtcclxuICAgICAgaWYgKHczKSB3My5kaXN0YW5jZSArPSBhbW91bnQgKiBmaXh0dXJlV2lkdGg7XHJcblxyXG4gICAgICBpZiAodzIpIHtcclxuICAgICAgICB3Mi5maXh0dXJlcy5mb3JFYWNoKChmeDogYW55KSA9PiB7XHJcbiAgICAgICAgICBmeC5yZWxhdGl2ZVBvc2l0aW9uLnggPVxyXG4gICAgICAgICAgICAoZngucmVsYXRpdmVQb3NpdGlvbi54IHx8IDApICsgYW1vdW50ICogZml4dHVyZVdpZHRoO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLy8gVmVydGljYWwgZ3Jvd3RoICAoV2FsbC0yIC8gV2FsbC00IC8gV2FsbC01KVxyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgaWYgKFxyXG4gICAgICBjbGlja2VkV2FsbE51bWJlciA9PT0gMiB8fFxyXG4gICAgICBjbGlja2VkV2FsbE51bWJlciA9PT0gNCB8fFxyXG4gICAgICBjbGlja2VkV2FsbE51bWJlciA9PT0gNVxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh3MikgdzIuZGlzdGFuY2UgKz0gYW1vdW50ICogZml4dHVyZUhlaWdodDtcclxuXHJcbiAgICAgIGlmICh3Mykge1xyXG4gICAgICAgIHczLmZpeHR1cmVzLmZvckVhY2goKGZ4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGZ4LnJlbGF0aXZlUG9zaXRpb24ueSA9XHJcbiAgICAgICAgICAgIChmeC5yZWxhdGl2ZVBvc2l0aW9uLnkgfHwgMCkgKyBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBlbnRyYW5jZVkgPSBlbnRyYW5jZT8uZGlzdGFuY2UgfHwgMDtcclxuICAgICAgY29uc3QgZXhpc3RpbmdXNCA9IHc0Py5kaXN0YW5jZSB8fCAwO1xyXG4gICAgICBjb25zdCBleGlzdGluZ1c1ID0gdzU/LmRpc3RhbmNlIHx8IDA7XHJcblxyXG4gICAgICAvLyBHcm93IHdhbGwtNCBpZiB3ZSBjbGlja2VkIHdhbGwtNCBPUiB3YWxsLTJcclxuICAgICAgaWYgKChjbGlja2VkV2FsbE51bWJlciA9PT0gNCB8fCBjbGlja2VkV2FsbE51bWJlciA9PT0gMikgJiYgdzQpIHtcclxuICAgICAgICB3NC5kaXN0YW5jZSA9IHRoaXMucm91bmRUb1R3byhleGlzdGluZ1c0ICsgYW1vdW50ICogZml4dHVyZUhlaWdodCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEdyb3cgd2FsbC01IGlmIHdlIGNsaWNrZWQgd2FsbC01IE9SIHdhbGwtMlxyXG4gICAgICBpZiAoKGNsaWNrZWRXYWxsTnVtYmVyID09PSA1IHx8IGNsaWNrZWRXYWxsTnVtYmVyID09PSAyKSAmJiB3NSkge1xyXG4gICAgICAgIHc1LmRpc3RhbmNlID0gdGhpcy5yb3VuZFRvVHdvKGV4aXN0aW5nVzUgKyBhbW91bnQgKiBmaXh0dXJlSGVpZ2h0KTtcclxuXHJcbiAgICAgICAgaWYgKHc0KSB7XHJcbiAgICAgICAgICB3NC5maXh0dXJlcy5mb3JFYWNoKChmeDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGZ4LnJlbGF0aXZlUG9zaXRpb24ueSA9XHJcbiAgICAgICAgICAgICAgKGZ4LnJlbGF0aXZlUG9zaXRpb24ueSB8fCAwKSArIGFtb3VudCAqIGZpeHR1cmVIZWlnaHQ7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXZlbnQgb3ZlcmZsb3c6IHNocmluayBiYWNrIGlmIHRvdGFsID4gdzIgc2l6ZVxyXG4gICAgICBjb25zdCB0b3RhbFVzZWQgPSBlbnRyYW5jZVkgKyAodzQ/LmRpc3RhbmNlIHx8IDApICsgKHc1Py5kaXN0YW5jZSB8fCAwKTtcclxuICAgICAgaWYgKHRvdGFsVXNlZCA+IHcyIS5kaXN0YW5jZSkge1xyXG4gICAgICAgIGlmICh3NSkge1xyXG4gICAgICAgICAgdzUuZGlzdGFuY2UgPSB0aGlzLnJvdW5kVG9Ud28oXHJcbiAgICAgICAgICAgIHc1LmRpc3RhbmNlIC0gKHRvdGFsVXNlZCAtIHcyIS5kaXN0YW5jZSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVGaXh0dXJlKFxyXG4gICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLFxyXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXHJcbiAgICB3YWxsSW5kZXg/OiBudW1iZXJcclxuICApIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZml4dHVyZVR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZpeHR1cmVzKHdhbGxJbmRleCEpLnJlbW92ZUF0KGZpeHR1cmVJbmRleCk7XHJcblxyXG4gICAgICBjb25zdCB3YWxsID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG4gICAgICBpZiAod2FsbCAmJiBBcnJheS5pc0FycmF5KHdhbGwuZml4dHVyZXMpKSB7XHJcbiAgICAgICAgd2FsbC5maXh0dXJlcy5zcGxpY2UoZml4dHVyZUluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZsb29yRml4dHVyZXMucmVtb3ZlQXQoZml4dHVyZUluZGV4KTtcclxuXHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmUpKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5zcGxpY2UoZml4dHVyZUluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlT3RoZXJFbGVtZW50KFxyXG4gICAgZWxlbWVudFR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLFxyXG4gICAgZWxlbWVudEluZGV4OiBudW1iZXIsXHJcbiAgICB3YWxsSW5kZXg/OiBudW1iZXJcclxuICApIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuXHJcbiAgICBpZiAoZWxlbWVudFR5cGUgPT09IFwid2FsbFwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0V2FsbE90aGVyRWxlbWVudHMod2FsbEluZGV4ISkucmVtb3ZlQXQoZWxlbWVudEluZGV4KTtcclxuXHJcbiAgICAgIGNvbnN0IHdhbGwgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk7XHJcbiAgICAgIGlmICh3YWxsICYmIEFycmF5LmlzQXJyYXkod2FsbC5vdGhlckVsZW1lbnRzKSkge1xyXG4gICAgICAgIHdhbGwub3RoZXJFbGVtZW50cy5zcGxpY2UoZWxlbWVudEluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChlbGVtZW50VHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgIHRoaXMuZ2V0Rm9ybUZsb29yT3RoZXJFbGVtZW50cy5yZW1vdmVBdChlbGVtZW50SW5kZXgpO1xyXG5cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5mbG9vckRhdGEub3RoZXJFbGVtZW50cykpIHtcclxuICAgICAgICB0aGlzLmZsb29yRGF0YS5vdGhlckVsZW1lbnRzLnNwbGljZShlbGVtZW50SW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZW5kZXJGbG9vcihmYWxzZSk7XHJcbiAgICB0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9IFwibGF5b3V0XCI7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VGaXh0dXJlVGVtcGxhdGUoXHJcbiAgICBjb25maWdJZDogc3RyaW5nLFxyXG4gICAgZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLFxyXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXHJcbiAgICB3YWxsSW5kZXg/OiBudW1iZXJcclxuICApIHtcclxuICAgIHRoaXMuYXBpU2VydmljZVxyXG4gICAgICAuZ2V0Rml4dHVyZVRlbXBsYXRlKGNvbmZpZ0lkKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZpeHR1cmVUeXBlID09PSBcIndhbGxcIikge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZURhdGEgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZUlkID0gYG5ldy0ke2NyeXB0by5yYW5kb21VVUlEKCl9YDtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZUdyb3VwID0gdGhpcy5wYXRjaEZpeHR1cmUoe1xyXG4gICAgICAgICAgICAgIGZpeHR1cmVOYW1lOiB0ZW1wbGF0ZURhdGEuZml4dHVyZU5hbWUsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUNvbmZpZ0lkOiB0ZW1wbGF0ZURhdGEuX2lkLFxyXG4gICAgICAgICAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5nZXRGb3JtRml4dHVyZXMod2FsbEluZGV4ISkuc2V0Q29udHJvbChcclxuICAgICAgICAgICAgICBmaXh0dXJlSW5kZXgsXHJcbiAgICAgICAgICAgICAgZml4dHVyZUdyb3VwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRlbXBsYXRlRGF0YSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHdhbGxSZWYgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSkhO1xyXG4gICAgICAgICAgICB3YWxsUmVmLmZpeHR1cmVzW2ZpeHR1cmVJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgLi4ud2FsbFJlZi5maXh0dXJlc1tmaXh0dXJlSW5kZXhdLFxyXG4gICAgICAgICAgICAgIC4uLmZpeHR1cmVEYXRhLFxyXG4gICAgICAgICAgICAgIHVuc2F2ZWRDaGFuZ2VzOiB0cnVlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlRGF0YSA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlSWQgPSBgbmV3LSR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xyXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgICAgICAgICAgZml4dHVyZU5hbWU6IHRlbXBsYXRlRGF0YS5maXh0dXJlTmFtZSxcclxuICAgICAgICAgICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgICAgICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAodGhpcy5sYXlvdXRGb3JtLmdldChcImZsb29yRml4dHVyZXNcIikgYXMgRm9ybUFycmF5KS5zZXRDb250cm9sKFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVJbmRleCxcclxuICAgICAgICAgICAgICBmaXh0dXJlR3JvdXBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZml4dHVyZURhdGEgPSB7XHJcbiAgICAgICAgICAgICAgLi4udGVtcGxhdGVEYXRhLFxyXG4gICAgICAgICAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgICAgICAgICBfaWQ6IGZpeHR1cmVJZCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVtmaXh0dXJlSW5kZXhdID0ge1xyXG4gICAgICAgICAgICAgIC4uLnRoaXMuZmxvb3JEYXRhLmNlbnRlckZpeHR1cmVbZml4dHVyZUluZGV4XSxcclxuICAgICAgICAgICAgICAuLi5maXh0dXJlRGF0YSxcclxuICAgICAgICAgICAgICB1bnNhdmVkQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnJlbmRlckZsb29yKGZhbHNlKTtcclxuICAgICAgICAgIHRoaXMucHVibGlzaGluZ1N0YXRlID0gXCJsYXlvdXRcIjtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGZldGNoIHRlbXBsYXRlc1wiKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBkZXN0aW5hdGlvbldhbGxJbmRleDogbnVtYmVyIHwgXCJmbG9vclwiLFxyXG4gICAgZGVzdGluYXRpb25GaXh0dXJlSW5kZXg/OiBudW1iZXJcclxuICApIHtcclxuICAgIGNvbnN0IGRhdGEgPSBldmVudC5kYXRhO1xyXG5cclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAgIGNvbnN0IGlzU291cmNlRmxvb3IgPSBkYXRhLndhbGxJbmRleCA9PT0gXCJmbG9vclwiO1xyXG4gICAgY29uc3QgaXNEZXN0aW5hdGlvbkZsb29yID0gZGVzdGluYXRpb25XYWxsSW5kZXggPT09IFwiZmxvb3JcIjtcclxuXHJcbiAgICBjb25zdCBzb3VyY2VGb3JtQXJyYXk6IEZvcm1BcnJheSA9IGlzU291cmNlRmxvb3JcclxuICAgICAgPyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzXHJcbiAgICAgIDogdGhpcy5nZXRGb3JtRml4dHVyZXMoZGF0YS53YWxsSW5kZXgpO1xyXG5cclxuICAgIGNvbnN0IGRlc3RpbmF0aW9uRm9ybUFycmF5OiBGb3JtQXJyYXkgPSBpc0Rlc3RpbmF0aW9uRmxvb3JcclxuICAgICAgPyB0aGlzLmdldEZvcm1GbG9vckZpeHR1cmVzXHJcbiAgICAgIDogdGhpcy5nZXRGb3JtRml4dHVyZXMoZGVzdGluYXRpb25XYWxsSW5kZXggYXMgbnVtYmVyKTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2VXYWxsTWV0YSA9IGlzU291cmNlRmxvb3JcclxuICAgICAgPyB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlXHJcbiAgICAgIDogdGhpcy5nZXRXYWxsQnlOdW1iZXIoXHJcbiAgICAgICAgICB0aGlzLmdldEZvcm1XYWxscy5hdChkYXRhLndhbGxJbmRleCkuZ2V0KFwiZWxlbWVudE51bWJlclwiKT8udmFsdWVcclxuICAgICAgICApPy5maXh0dXJlcyA/PyBbXTtcclxuXHJcbiAgICBjb25zdCBkZXN0aW5hdGlvbldhbGxNZXRhID0gaXNEZXN0aW5hdGlvbkZsb29yXHJcbiAgICAgID8gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVxyXG4gICAgICA6IHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKFxyXG4gICAgICAgICAgdGhpcy5nZXRGb3JtV2FsbHNcclxuICAgICAgICAgICAgLmF0KGRlc3RpbmF0aW9uV2FsbEluZGV4IGFzIG51bWJlcilcclxuICAgICAgICAgICAgLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlXHJcbiAgICAgICAgKT8uZml4dHVyZXMgPz8gW107XHJcblxyXG4gICAgY29uc3Qgc0ZpeHR1cmVJbmRleCA9IHNvdXJjZVdhbGxNZXRhLmZpbmRJbmRleChcclxuICAgICAgKGZpeHR1cmU6IGFueSkgPT5cclxuICAgICAgICBmaXh0dXJlLl9pZCA9PT0gc291cmNlRm9ybUFycmF5LmF0KGRhdGEuZml4dHVyZUluZGV4KT8uZ2V0KFwiX2lkXCIpPy52YWx1ZVxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBkRml4dHVyZUluZGV4ID1cclxuICAgICAgZGVzdGluYXRpb25GaXh0dXJlSW5kZXggIT09IHVuZGVmaW5lZFxyXG4gICAgICAgID8gZGVzdGluYXRpb25XYWxsTWV0YS5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgIChmaXh0dXJlOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgZml4dHVyZS5faWQgPT09XHJcbiAgICAgICAgICAgICAgZGVzdGluYXRpb25Gb3JtQXJyYXkuYXQoZGVzdGluYXRpb25GaXh0dXJlSW5kZXgpPy5nZXQoXCJfaWRcIilcclxuICAgICAgICAgICAgICAgID8udmFsdWVcclxuICAgICAgICAgIClcclxuICAgICAgICA6IGRlc3RpbmF0aW9uRm9ybUFycmF5Lmxlbmd0aDtcclxuXHJcbiAgICBjb25zdCBzUG9zaXRpb24gPSB7XHJcbiAgICAgIGZpeHR1cmVOdW1iZXI6IHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIsXHJcbiAgICAgIGFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjpcclxuICAgICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5hc3NvY2lhdGVkRWxlbWVudEZpeHR1cmVOdW1iZXIsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgZFBvc2l0aW9uID0ge1xyXG4gICAgICBmaXh0dXJlTnVtYmVyOiBkZXN0aW5hdGlvbldhbGxNZXRhW2RGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIsXHJcbiAgICAgIGFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjpcclxuICAgICAgICBkZXN0aW5hdGlvbldhbGxNZXRhW2RGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcixcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHNvdXJjZVdhbGxNZXRhID09PSBkZXN0aW5hdGlvbldhbGxNZXRhKSB7XHJcbiAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uZml4dHVyZU51bWJlciA9XHJcbiAgICAgICAgc1Bvc2l0aW9uLmZpeHR1cmVOdW1iZXI7XHJcbiAgICAgIGRlc3RpbmF0aW9uV2FsbE1ldGFbZEZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAgICAgICBzUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgICBzb3VyY2VXYWxsTWV0YVtzRml4dHVyZUluZGV4XS5maXh0dXJlTnVtYmVyID0gZFBvc2l0aW9uLmZpeHR1cmVOdW1iZXI7XHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlciA9XHJcbiAgICAgICAgZFBvc2l0aW9uLmFzc29jaWF0ZWRFbGVtZW50Rml4dHVyZU51bWJlcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhW3NGaXh0dXJlSW5kZXhdLmZpeHR1cmVOdW1iZXIgPSBkUG9zaXRpb24uZml4dHVyZU51bWJlcjtcclxuICAgICAgc291cmNlV2FsbE1ldGFbc0ZpeHR1cmVJbmRleF0uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyID1cclxuICAgICAgICBkUG9zaXRpb24uYXNzb2NpYXRlZEVsZW1lbnRGaXh0dXJlTnVtYmVyO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHJhbnNmZXJBcnJheUl0ZW0oXHJcbiAgICAgIHNvdXJjZUZvcm1BcnJheS5jb250cm9scyxcclxuICAgICAgZGVzdGluYXRpb25Gb3JtQXJyYXkuY29udHJvbHMsXHJcbiAgICAgIGRhdGEuZml4dHVyZUluZGV4LFxyXG4gICAgICBkRml4dHVyZUluZGV4XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudHJhbnNmZXJBcnJheUl0ZW0oXHJcbiAgICAgIHNvdXJjZVdhbGxNZXRhLFxyXG4gICAgICBkZXN0aW5hdGlvbldhbGxNZXRhLFxyXG4gICAgICBzRml4dHVyZUluZGV4LFxyXG4gICAgICBkRml4dHVyZUluZGV4XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gIH1cclxuXHJcbiAgZG93bmxvYWRDYW52YXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2FudmFzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgb3JpZ2luYWxWaWV3cG9ydCA9IFtcclxuICAgICAgLi4udGhpcy5jYW52YXMudmlld3BvcnRUcmFuc2Zvcm0hLFxyXG4gICAgXSBhcyBmYWJyaWMuVE1hdDJEO1xyXG5cclxuICAgIHRoaXMuY2FudmFzLnNldFZpZXdwb3J0VHJhbnNmb3JtKFsxLCAwLCAwLCAxLCAwLCAwXSk7XHJcblxyXG4gICAgY29uc3QgYm91bmRzID0gdGhpcy5nZXRGdWxsTGF5b3V0Qm91bmRzKCk7XHJcblxyXG4gICAgY29uc3QgZGF0YVVSTCA9IHRoaXMuY2FudmFzLnRvRGF0YVVSTCh7XHJcbiAgICAgIGZvcm1hdDogXCJwbmdcIixcclxuICAgICAgbGVmdDogYm91bmRzLmxlZnQsXHJcbiAgICAgIHRvcDogYm91bmRzLnRvcCxcclxuICAgICAgd2lkdGg6IGJvdW5kcy53aWR0aCxcclxuICAgICAgaGVpZ2h0OiBib3VuZHMuaGVpZ2h0LFxyXG4gICAgICBtdWx0aXBsaWVyOiAyLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jYW52YXMuc2V0Vmlld3BvcnRUcmFuc2Zvcm0ob3JpZ2luYWxWaWV3cG9ydCk7XHJcblxyXG4gICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgbGluay5ocmVmID0gZGF0YVVSTDtcclxuICAgIGxpbmsuZG93bmxvYWQgPSBgJHt0aGlzLnBsYW5vRGF0YS5zdG9yZU5hbWV9XyR7dGhpcy5mbG9vckRhdGEuZmxvb3JOYW1lfS5wbmdgO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaGFuZGxlRmVlZGJhY2tBY3Rpb24odXNlckFjdGlvbjogYW55KSB7XHJcbiAgICB0cnkge1xyXG4gICAgICBsZXQgdGFyZ2V0Rml4dHVyZTogYW55ID0ge1xyXG4gICAgICAgIC4uLih0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uXHJcbiAgICAgICAgICAuZmxhdE1hcCgocDogYW55KSA9PiBwLmZpeHR1cmVzKVxyXG4gICAgICAgICAgLmNvbmNhdCh0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlKVxyXG4gICAgICAgICAgLmZpbmQoKGY6IGFueSkgPT4gZi5faWQgPT09IHRoaXMuc2VsZWN0ZWRGaXh0dXJlLmZpeHR1cmVJZCkgfHwgbnVsbCksXHJcbiAgICAgICAgdXNlckFjdGlvbjogdXNlckFjdGlvbi5hY3Rpb24sXHJcbiAgICAgIH07XHJcblxyXG4gICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZURhdGEgPSB7IC4uLnRhcmdldEZpeHR1cmUgfTtcclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJhY2NlcHRBaVwiIHx8XHJcbiAgICAgICAgdXNlckFjdGlvbi5hY3Rpb24gPT09IFwiZWRpdFdpdGhBaVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRhcmdldEZpeHR1cmUgPSB7XHJcbiAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLFxyXG4gICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YSxcclxuICAgICAgICAgIGhlYWRlcjoge1xyXG4gICAgICAgICAgICAuLi50YXJnZXRGaXh0dXJlLmhlYWRlcixcclxuICAgICAgICAgICAgLi4udXNlckFjdGlvbi5maXh0dXJlRGF0YS5oZWFkZXIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHVzZXJBY3Rpb24uZml4dHVyZURhdGE/LmhlYWRlcj8ubGFiZWxcclxuICAgICAgICAgICAgPy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgID8uaW5jbHVkZXMoXCJoZWFkZXIgbm90IGlkZW50aWZpZWRcIilcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRhcmdldEZpeHR1cmUuaGVhZGVyLmxhYmVsID0gdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhLmhlYWRlci5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJlZGl0V2l0aEFpXCIgfHxcclxuICAgICAgICB1c2VyQWN0aW9uLmFjdGlvbiA9PT0gXCJlZGl0V2l0aFBsYW5vXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZpeHR1cmVEYXRhID0ge1xyXG4gICAgICAgICAgLi4udGFyZ2V0Rml4dHVyZSxcclxuICAgICAgICAgIHRhc2tUeXBlOiBcImZpeHR1cmVcIixcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGVkRml4dHVyZS5maXh0dXJlRGF0YSA9IHRoaXMuc2VsZWN0ZWRGaXh0dXJlRGF0YTtcclxuXHJcbiAgICAgICAgdGhpcy5lZGl0Rml4dHVyZSA9IHRydWU7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRGaXh0dXJlU2VjdGlvbiA9IHVzZXJBY3Rpb24/LnRhYiA/PyBcImJhc2ljLWRldGFpbHNcIjtcclxuICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgZmVlZGJhY2sgPSB1c2VyQWN0aW9uLmZlZWRiYWNrO1xyXG5cclxuICAgICAgY29uc3QgYW5zd2VySWQgPSB1c2VyQWN0aW9uLmZlZWRiYWNrPy5hbnN3ZXJzPy5bMF0/Ll9pZDtcclxuICAgICAgaWYgKCFhbnN3ZXJJZCkgcmV0dXJuO1xyXG5cclxuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgICBfaWQ6IGZlZWRiYWNrLl9pZCxcclxuICAgICAgICBhbnN3ZXJJZDogYW5zd2VySWQsXHJcbiAgICAgICAgdHlwZTogdXNlckFjdGlvbi50eXBlLFxyXG4gICAgICAgIHVzZXJBY3Rpb246IHVzZXJBY3Rpb24uYWN0aW9uLFxyXG4gICAgICAgIGNvbW1lbnRzOiB1c2VyQWN0aW9uLnJlbWFya3MsXHJcbiAgICAgICAgdGFza1R5cGU6IHVzZXJBY3Rpb24udGFza1R5cGUsXHJcbiAgICAgICAgcGxhbm9JZDogdXNlckFjdGlvbi5wbGFub0lkLFxyXG4gICAgICAgIGZsb29ySWQ6IHVzZXJBY3Rpb24uZmxvb3JJZCxcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVGaXh0dXJlQ29tcGxpYW5jZVN0YXR1cyhwYXlsb2FkKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgaWYgKCFyZXMgJiYgdXNlckFjdGlvbi50eXBlICE9IFwiYWdyZWVcIikgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKHVzZXJBY3Rpb24uYWN0aW9uID09PSBcImtlZXBQbGFub1wiKSB7XHJcbiAgICAgICAgdGFyZ2V0Rml4dHVyZSA9IHtcclxuICAgICAgICAgIC4uLnRhcmdldEZpeHR1cmUsXHJcbiAgICAgICAgICAuLi51c2VyQWN0aW9uLmZpeHR1cmVEYXRhLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHVwZGF0ZUZpeHR1cmVQYXlsb2FkID0ge1xyXG4gICAgICAgIGZpeHR1cmVJZDogdGhpcy5zZWxlY3RlZEZpeHR1cmUuZml4dHVyZUlkLFxyXG4gICAgICAgIGRhdGE6IHRhcmdldEZpeHR1cmUsXHJcbiAgICAgICAgdGFza1R5cGU6IFwiZml4dHVyZVwiLFxyXG4gICAgICB9O1xyXG5cclxuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnVwZGF0ZVN0b3JlRml4dHVyZSh1cGRhdGVGaXh0dXJlUGF5bG9hZClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gICAgICB0aGlzLmdldFZtc0xpc3QoKTtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRTdG9yZUZpeHR1cmVzKHRoaXMucGxhbm9EYXRhLl9pZCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGV4ZWN1dGUgdXNlciBhY3Rpb25cIik7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBoYW5kbGVGZWVkYmFja0FjdGlvbiBbZXJyXTpcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmluZEZpeHR1cmVUb1dhbGwod2FsbEdyb3VwOiBmYWJyaWMuR3JvdXAsIGZpeHR1cmVHcm91cDogZmFicmljLkdyb3VwKSB7XHJcbiAgICBjb25zdCBvZmZzZXRYID0gZml4dHVyZUdyb3VwLmxlZnQhIC0gd2FsbEdyb3VwLmxlZnQhO1xyXG4gICAgY29uc3Qgb2Zmc2V0WSA9IGZpeHR1cmVHcm91cC50b3AhIC0gd2FsbEdyb3VwLnRvcCE7XHJcblxyXG4gICAgaWYgKCF0aGlzLndhbGxCaW5kaW5ncy5oYXMod2FsbEdyb3VwKSkgdGhpcy53YWxsQmluZGluZ3Muc2V0KHdhbGxHcm91cCwgW10pO1xyXG4gICAgdGhpcy53YWxsQmluZGluZ3MuZ2V0KHdhbGxHcm91cCkhLnB1c2goeyBmaXh0dXJlR3JvdXAsIG9mZnNldFgsIG9mZnNldFkgfSk7XHJcbiAgfVxyXG5cclxuICBrZWVwV2l0aGluQm91bmRpbmdCb3goXHJcbiAgICBvYmo6IGZhYnJpYy5PYmplY3QsXHJcbiAgICBib3g6IHsgbGVmdDogbnVtYmVyOyB0b3A6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfVxyXG4gICkge1xyXG4gICAgY29uc3QgcmVjdCA9IG9iai5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGxldCBkeCA9IDA7XHJcbiAgICBsZXQgZHkgPSAwO1xyXG5cclxuICAgIGlmIChyZWN0LmxlZnQgPCBib3gubGVmdCkge1xyXG4gICAgICBkeCA9IGJveC5sZWZ0IC0gcmVjdC5sZWZ0O1xyXG4gICAgfVxyXG4gICAgaWYgKHJlY3QudG9wIDwgYm94LnRvcCkge1xyXG4gICAgICBkeSA9IGJveC50b3AgLSByZWN0LnRvcDtcclxuICAgIH1cclxuICAgIGlmIChyZWN0LmxlZnQgKyByZWN0LndpZHRoID4gYm94LmxlZnQgKyBib3gud2lkdGgpIHtcclxuICAgICAgZHggPSBib3gubGVmdCArIGJveC53aWR0aCAtIChyZWN0LmxlZnQgKyByZWN0LndpZHRoKTtcclxuICAgIH1cclxuICAgIGlmIChyZWN0LnRvcCArIHJlY3QuaGVpZ2h0ID4gYm94LnRvcCArIGJveC5oZWlnaHQpIHtcclxuICAgICAgZHkgPSBib3gudG9wICsgYm94LmhlaWdodCAtIChyZWN0LnRvcCArIHJlY3QuaGVpZ2h0KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHggIT09IDAgfHwgZHkgIT09IDApIHtcclxuICAgICAgb2JqLmxlZnQgPSBvYmoubGVmdCEgKyBkeDtcclxuICAgICAgb2JqLnRvcCA9IG9iai50b3AhICsgZHk7XHJcbiAgICAgIG9iai5zZXRDb29yZHMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2FudmFzLnJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAgaXNPdmVybGFwcGluZ0FueUZpeHR1cmUobW92ZWRPYmo6IGZhYnJpYy5PYmplY3QpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IEJVRkZFUl9QWCA9IDQ7IC8vIG92ZXJsYXAgdG9sZXJhbmNlIHBlciBzaWRlXHJcblxyXG4gICAgY29uc3Qgb2JqZWN0cyA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcigob2JqOiBhbnkpID0+IG9iaiAhPT0gbW92ZWRPYmogJiYgb2JqLmZpeHR1cmVJZCk7XHJcblxyXG4gICAgY29uc3Qgc2hyaW5rUmVjdCA9IChcclxuICAgICAgcjogeyBsZWZ0OiBudW1iZXI7IHRvcDogbnVtYmVyOyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9LFxyXG4gICAgICBiOiBudW1iZXJcclxuICAgICkgPT4ge1xyXG4gICAgICBjb25zdCB3aWR0aCA9IE1hdGgubWF4KDAsIHIud2lkdGggLSAyICogYik7XHJcbiAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KDAsIHIuaGVpZ2h0IC0gMiAqIGIpO1xyXG4gICAgICBjb25zdCBsZWZ0ID0gci5sZWZ0ICsgYjtcclxuICAgICAgY29uc3QgdG9wID0gci50b3AgKyBiO1xyXG4gICAgICByZXR1cm4geyBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQgfTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgcmVjdHNJbnRlcnNlY3QgPSAoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuICEoXHJcbiAgICAgICAgYS5sZWZ0ICsgYS53aWR0aCA8PSBiLmxlZnQgfHxcclxuICAgICAgICBiLmxlZnQgKyBiLndpZHRoIDw9IGEubGVmdCB8fFxyXG4gICAgICAgIGEudG9wICsgYS5oZWlnaHQgPD0gYi50b3AgfHxcclxuICAgICAgICBiLnRvcCArIGIuaGVpZ2h0IDw9IGEudG9wXHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG1vdmVkUmVjdFJhdyA9IG1vdmVkT2JqLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgY29uc3QgbW92ZWRSZWN0ID0gc2hyaW5rUmVjdChtb3ZlZFJlY3RSYXcsIEJVRkZFUl9QWCk7XHJcblxyXG4gICAgcmV0dXJuIG9iamVjdHMuc29tZSgob2JqOiBhbnkpID0+IHtcclxuICAgICAgY29uc3Qgb3RoZXJSZWN0UmF3ID0gb2JqLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgICBjb25zdCBvdGhlclJlY3QgPSBzaHJpbmtSZWN0KG90aGVyUmVjdFJhdywgQlVGRkVSX1BYKTtcclxuICAgICAgcmV0dXJuIHJlY3RzSW50ZXJzZWN0KG1vdmVkUmVjdCwgb3RoZXJSZWN0KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcm90YXRlV2FsbChlbGVOdW1iZXI6IG51bWJlcikge1xyXG4gICAgY29uc3Qgd2FsbCA9IHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmluZChcclxuICAgICAgKGVsOiBhbnkpID0+IGVsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbC5lbGVtZW50TnVtYmVyID09PSBlbGVOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAod2FsbC5hbmdsZSArIDkwIDwgMzYwKSB7XHJcbiAgICAgIHdhbGwuYW5nbGUgKz0gOTA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3YWxsLmFuZ2xlID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyRmxvb3IodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdXYWxsKGVsZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBuZXdXYWxsID0ge1xyXG4gICAgICBlbGVtZW50VHlwZTogXCJ3YWxsXCIsXHJcbiAgICAgIGRpc3RhbmNlOiAxNSxcclxuICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICBkaXJlY3Rpb246IFwicmlnaHRcIixcclxuICAgICAgYW5nbGU6IDAsXHJcbiAgICAgIGVsZW1lbnROdW1iZXI6IGVsZU51bWJlciArIDEsXHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb246IHtcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9LFxyXG4gICAgICBmaXh0dXJlczogW10sXHJcbiAgICAgIG90aGVyRWxlbWVudHM6IFtdLFxyXG4gICAgICBuZXdBZGRlZDogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaW5zZXJ0SW5kZXggPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZpbmRJbmRleChcclxuICAgICAgKHdhbGw6IGFueSkgPT5cclxuICAgICAgICB3YWxsLmVsZW1lbnROdW1iZXIgPT09IGVsZU51bWJlciAmJiB3YWxsLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIlxyXG4gICAgKTtcclxuXHJcbiAgICAvLyAvLyBDZW50ZXIgdGhlIG5ldyB3YWxsIG9uIGNhbnZhc1xyXG4gICAgLy8gdHJ5IHtcclxuICAgIC8vICAgY29uc3QgY2FudmFzQ2VudGVyWCA9IHRoaXMuY2FudmFzLmdldFdpZHRoKCkgLyAyO1xyXG4gICAgLy8gICBjb25zdCBjYW52YXNDZW50ZXJZID0gdGhpcy5jYW52YXMuZ2V0SGVpZ2h0KCkgLyAyO1xyXG4gICAgLy8gICBjb25zdCB3YWxsV2lkdGhQeCA9IHRoaXMudG9QaXhlbHMobmV3V2FsbC5kaXN0YW5jZSwgbmV3V2FsbC51bml0KTtcclxuICAgIC8vICAgY29uc3Qgd2FsbEhlaWdodFB4ID0gdGhpcy53YWxsVGhpY2tuZXNzO1xyXG4gICAgLy8gICBjb25zdCBsZWZ0UHggPSBjYW52YXNDZW50ZXJYIC0gd2FsbFdpZHRoUHggLyAyO1xyXG4gICAgLy8gICBjb25zdCB0b3BQeCA9IGNhbnZhc0NlbnRlclkgLSB3YWxsSGVpZ2h0UHggLyAyO1xyXG4gICAgLy8gICBuZXdXYWxsLnJlbGF0aXZlUG9zaXRpb24ueCA9IHRoaXMuZnJvbVBpeGVscyhsZWZ0UHgsIFwiZnRcIik7XHJcbiAgICAvLyAgIG5ld1dhbGwucmVsYXRpdmVQb3NpdGlvbi55ID0gdGhpcy5mcm9tUGl4ZWxzKHRvcFB4LCBcImZ0XCIpO1xyXG4gICAgLy8gfSBjYXRjaCB7fVxyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uc3BsaWNlKGluc2VydEluZGV4ICsgMSwgMCwgbmV3V2FsbCk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVXYWxsRWxlbWVudE51bWJlcigpO1xyXG4gICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICAgIHRoaXMudXBkYXRlV2FsbENvb3JkaW5hdGVzKCk7XHJcbiAgfVxyXG5cclxuICBhZGROZXdFbnRyYW5jZSgpIHtcclxuICAgIGNvbnN0IGVsZU51bWJlciA9XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZmlsdGVyKFxyXG4gICAgICAgIChlbGU6IGFueSkgPT4gZWxlLmVsZW1lbnRUeXBlID09PSBcImVudHJhbmNlXCJcclxuICAgICAgKT8ubGVuZ3RoID8/IDA7XHJcblxyXG4gICAgY29uc3QgbmV3RW50cmFuY2UgPSB7XHJcbiAgICAgIGVsZW1lbnRUeXBlOiBcImVudHJhbmNlXCIsXHJcbiAgICAgIGRpc3RhbmNlOiA2LFxyXG4gICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIGRpcmVjdGlvbjogXCJ1cFwiLFxyXG4gICAgICBhbmdsZTogMCxcclxuICAgICAgZWxlbWVudE51bWJlcjogZWxlTnVtYmVyICsgMSxcclxuICAgICAgcmVsYXRpdmVQb3NpdGlvbjoge1xyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMCxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIGZpeHR1cmVzOiBbXSxcclxuICAgICAgb3RoZXJFbGVtZW50czogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24ucHVzaChuZXdFbnRyYW5jZSk7XHJcbiAgICB0aGlzLnJlbmRlckZsb29yKHRydWUpO1xyXG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUVudHJhbmNlQ29vcmRpbmF0ZXMoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGFkZE5ld0ZpeHR1cmUoZml4dHVyZVR5cGU6IFwid2FsbFwiIHwgXCJmbG9vclwiLCB3YWxsSW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZGlzYWJsZWQpIHJldHVybjtcclxuICAgIGNvbnN0IHRlbXBsYXRlOiBhbnkgPSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlKHRoaXMuZml4dHVyZVRlbXBsYXRlc1swXS5faWQpO1xyXG4gICAgY29uc3QgdGVtcGxhdGVEYXRhID0gdGVtcGxhdGUuZGF0YTtcclxuICAgIGNvbnN0IGZpeHR1cmVJZCA9IGBuZXctJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XHJcbiAgICBjb25zdCBmaXh0dXJlR3JvdXAgPSB0aGlzLnBhdGNoRml4dHVyZSh7XHJcbiAgICAgIGZpeHR1cmVOYW1lOiB0ZW1wbGF0ZURhdGEuZml4dHVyZU5hbWUsXHJcbiAgICAgIGZpeHR1cmVDb25maWdJZDogdGVtcGxhdGVEYXRhLl9pZCxcclxuICAgICAgX2lkOiBmaXh0dXJlSWQsXHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBmaXh0dXJlRGF0YSA9IHtcclxuICAgICAgLi4udGVtcGxhdGVEYXRhLFxyXG4gICAgICBmaXh0dXJlQ29uZmlnSWQ6IHRlbXBsYXRlRGF0YS5faWQsXHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb246IHsgeDogMCwgeTogMCwgdW5pdDogXCJmdFwiIH0sXHJcbiAgICAgIF9pZDogZml4dHVyZUlkLFxyXG4gICAgICB1bnNhdmVkQ2hhbmdlczogdHJ1ZSxcclxuICAgICAgbmV3QWRkZWQ6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChmaXh0dXJlVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgY29uc3Qgd2FsbERhdGEgPSB0aGlzLmdldFdhbGxCeU51bWJlcih3YWxsSW5kZXghICsgMSk7XHJcblxyXG4gICAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgICAgZml4dHVyZURhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgd3AgPSB0aGlzLmZyb21QaXhlbHModywgXCJmdFwiKTtcclxuXHJcbiAgICAgIGlmICh3YWxsRGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHgwID0gd2FsbERhdGEucmVsYXRpdmVQb3NpdGlvbi54O1xyXG4gICAgICAgIGNvbnN0IHkwID0gd2FsbERhdGEucmVsYXRpdmVQb3NpdGlvbi55O1xyXG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IHdhbGxEYXRhLmRpc3RhbmNlIC0gd3A7XHJcblxyXG4gICAgICAgIGNvbnN0IGFuZ2xlRGVnID0gd2FsbERhdGEuYW5nbGUgfHwgMDtcclxuICAgICAgICBjb25zdCBhbmdsZVJhZCA9IChhbmdsZURlZyAqIE1hdGguUEkpIC8gMTgwO1xyXG5cclxuICAgICAgICBjb25zdCBmeCA9IHgwICsgbGVuZ3RoICogTWF0aC5jb3MoYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICBjb25zdCBmeSA9IHkwICsgbGVuZ3RoICogTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDE7XHJcbiAgICAgICAgY29uc3QgZnhfb2Zmc2V0ID0gZnggKyBvZmZzZXQgKiAtTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG5cclxuICAgICAgICBjb25zdCBmeV9vZmZzZXQgPSBmeSArIG9mZnNldCAqIE1hdGguY29zKGFuZ2xlUmFkKTtcclxuXHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi54ID0gZnhfb2Zmc2V0O1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24ueSA9IGZ5X29mZnNldDtcclxuICAgICAgICBmaXh0dXJlRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gYW5nbGVEZWc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgICh0aGlzLmdldEZvcm1XYWxscy5hdCh3YWxsSW5kZXghKS5nZXQoXCJmaXh0dXJlc1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgZml4dHVyZUdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZ2V0V2FsbEJ5TnVtYmVyKHdhbGxJbmRleCEgKyAxKT8uZml4dHVyZXMucHVzaChmaXh0dXJlRGF0YSk7XHJcbiAgICB9IGVsc2UgaWYgKGZpeHR1cmVUeXBlID09PSBcImZsb29yXCIpIHtcclxuICAgICAgY29uc3QgZml4dHVyZVdpZHRoUHggPSB0aGlzLnRvUGl4ZWxzKFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSxcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudW5pdFxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgZml4dHVyZUhlaWdodFB4ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgICBmaXh0dXJlRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnZhbHVlLFxyXG4gICAgICAgIGZpeHR1cmVEYXRhLmZpeHR1cmVTdGF0aWNMZW5ndGgudW5pdFxyXG4gICAgICApO1xyXG5cclxuICAgICAgLy8gVHJ5IHRvIGZpbmQgZW1wdHkgY2VudGVyIHNwYWNlXHJcbiAgICAgIGNvbnN0IGVtcHR5U3BvdCA9IHRoaXMuZmluZEVtcHR5Q2VudGVyU3BvdChcclxuICAgICAgICBmaXh0dXJlV2lkdGhQeCxcclxuICAgICAgICBmaXh0dXJlSGVpZ2h0UHhcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChlbXB0eVNwb3QpIHtcclxuICAgICAgICAvLyBDb252ZXJ0IGJhY2sgdG8gZnQgc2luY2UgeW91ciBzdHJ1Y3R1cmUgc3RvcmVzIGZ0XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi54ID0gdGhpcy5mcm9tUGl4ZWxzKGVtcHR5U3BvdC54LCBcImZ0XCIpO1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24ueSA9IHRoaXMuZnJvbVBpeGVscyhlbXB0eVNwb3QueSwgXCJmdFwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBmYWxsYmFja1xyXG4gICAgICAgIGZpeHR1cmVEYXRhLnJlbGF0aXZlUG9zaXRpb24ueCA9IDA7XHJcbiAgICAgICAgZml4dHVyZURhdGEucmVsYXRpdmVQb3NpdGlvbi55ID0gMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgKHRoaXMubGF5b3V0Rm9ybS5nZXQoXCJmbG9vckZpeHR1cmVzXCIpIGFzIEZvcm1BcnJheSkucHVzaChmaXh0dXJlR3JvdXApO1xyXG4gICAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlLnB1c2goZml4dHVyZURhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPSBcImxheW91dFwiO1xyXG4gICAgdGhpcy51cGRhdGVGaXh0dXJlQ29vcmRpbmF0ZXMoKTtcclxuICB9XHJcblxyXG4gIGFkZE5ld090aGVyRWxlbWVudHMocG9zVHlwZTogXCJ3YWxsXCIgfCBcImZsb29yXCIsIHdhbGxJbmRleD86IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Rm9ybS5kaXNhYmxlZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHBvc0RhdGEgPSB7XHJcbiAgICAgIF9pZDogYG5ldy0ke2NyeXB0by5yYW5kb21VVUlEKCl9YCxcclxuICAgICAgZml4dHVyZU5hbWU6IGBQT1MgQ291bnRlcmAsXHJcbiAgICAgIGZpeHR1cmVUeXBlOiBcIm90aGVyXCIsXHJcbiAgICAgIHJlbGF0aXZlUG9zaXRpb246IHsgeDogMCwgeTogMCwgYW5nbGU6IDAsIHVuaXQ6IFwiZnRcIiB9LFxyXG4gICAgICBmaXh0dXJlU3RhdGljTGVuZ3RoOiB7XHJcbiAgICAgICAgdmFsdWU6IDMsXHJcbiAgICAgICAgdW5pdDogXCJmdFwiLFxyXG4gICAgICB9LFxyXG4gICAgICBmaXh0dXJlU3RhdGljV2lkdGg6IHtcclxuICAgICAgICB2YWx1ZTogNSxcclxuICAgICAgICB1bml0OiBcImZ0XCIsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCB4ID0gcG9zRGF0YS5yZWxhdGl2ZVBvc2l0aW9uLng7XHJcbiAgICBsZXQgeSA9IHBvc0RhdGEucmVsYXRpdmVQb3NpdGlvbi55O1xyXG4gICAgbGV0IGEgPSBwb3NEYXRhLnJlbGF0aXZlUG9zaXRpb24uYW5nbGU7XHJcblxyXG4gICAgY29uc3QgaCA9IHRoaXMudG9QaXhlbHMoXHJcbiAgICAgIHBvc0RhdGEuZml4dHVyZVN0YXRpY0xlbmd0aC52YWx1ZSxcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljTGVuZ3RoLnVuaXRcclxuICAgICk7XHJcbiAgICBjb25zdCB3ID0gdGhpcy50b1BpeGVscyhcclxuICAgICAgcG9zRGF0YS5maXh0dXJlU3RhdGljV2lkdGgudmFsdWUsXHJcbiAgICAgIHBvc0RhdGEuZml4dHVyZVN0YXRpY1dpZHRoLnVuaXRcclxuICAgICk7XHJcblxyXG4gICAgY29uc3QgbmV3T3RoZXJHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICB0eXBlOiBbcG9zRGF0YS5maXh0dXJlTmFtZSB8fCBcIlBPUyBDb3VudGVyXCJdLCAvLyBkZWZhdWx0IHNlbGVjdGVkIGxhYmVsXHJcbiAgICAgIGN1c3RvbU5hbWU6IFtcIlwiXSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChwb3NUeXBlID09IFwid2FsbFwiKSB7XHJcbiAgICAgIGNvbnN0IHdhbGxEYXRhID0gdGhpcy5nZXRXYWxsQnlOdW1iZXIod2FsbEluZGV4ISArIDEpO1xyXG4gICAgICBpZiAod2FsbERhdGEpIHtcclxuICAgICAgICBjb25zdCB4MCA9IHdhbGxEYXRhLnJlbGF0aXZlUG9zaXRpb24ueDtcclxuICAgICAgICBjb25zdCB5MCA9IHdhbGxEYXRhLnJlbGF0aXZlUG9zaXRpb24ueTtcclxuICAgICAgICBjb25zdCBsZW5ndGggPSB3YWxsRGF0YS5kaXN0YW5jZTtcclxuICAgICAgICBjb25zdCBhbmdsZURlZyA9IHdhbGxEYXRhLmFuZ2xlIHx8IDA7XHJcbiAgICAgICAgY29uc3QgYW5nbGVSYWQgPSAoYW5nbGVEZWcgKiBNYXRoLlBJKSAvIDE4MDtcclxuXHJcbiAgICAgICAgY29uc3QgZnggPSB4MCArIChsZW5ndGggLyAyKSAqIE1hdGguY29zKGFuZ2xlUmFkKTtcclxuICAgICAgICBjb25zdCBmeSA9IHkwICsgKGxlbmd0aCAvIDIpICogTWF0aC5zaW4oYW5nbGVSYWQpO1xyXG4gICAgICAgIGNvbnN0IG9mZnNldCA9IDIuNTtcclxuICAgICAgICBjb25zdCBmeF9vZmZzZXQgPSBmeCArIG9mZnNldCAqIC1NYXRoLnNpbihhbmdsZVJhZCk7XHJcbiAgICAgICAgY29uc3QgZnlfb2Zmc2V0ID0gZnkgKyBvZmZzZXQgKiBNYXRoLmNvcyhhbmdsZVJhZCk7XHJcblxyXG4gICAgICAgIHggPSB0aGlzLnRvUGl4ZWxzKGZ4X29mZnNldCwgXCJmdFwiKTtcclxuICAgICAgICB5ID0gdGhpcy50b1BpeGVscyhmeV9vZmZzZXQsIFwiZnRcIik7XHJcbiAgICAgICAgYSA9IGFuZ2xlRGVnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBPYmplY3QuYXNzaWduKHBvc0RhdGEsIHtcclxuICAgICAgICBhc3NvY2lhdGVkRWxlbWVudE51bWJlcjogd2FsbEluZGV4ISArIDEsXHJcbiAgICAgICAgYXNzb2NpYXRlZEVsZW1lbnRUeXBlOiBcIndhbGxcIixcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAodGhpcy5nZXRGb3JtV2FsbHMuYXQod2FsbEluZGV4ISkuZ2V0KFwib3RoZXJFbGVtZW50c1wiKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgICAgbmV3T3RoZXJHcm91cFxyXG4gICAgICApO1xyXG4gICAgICB3YWxsRGF0YS5vdGhlckVsZW1lbnRzLnB1c2goeyAuLi5wb3NEYXRhLCBuZXdBZGRlZDogdHJ1ZSB9KTtcclxuICAgIH0gZWxzZSBpZiAocG9zVHlwZSA9PT0gXCJmbG9vclwiKSB7XHJcbiAgICAgICh0aGlzLmxheW91dEZvcm0uZ2V0KFwiZmxvb3JPdGhlckVsZW1lbnRzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgICBuZXdPdGhlckdyb3VwXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMucHVzaCh7IC4uLnBvc0RhdGEsIG5ld0FkZGVkOiB0cnVlIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlY3RHcm91cCA9IHRoaXMuZHJhd090aGVyRWxlbWVudHNXaXRoTGFiZWwoXHJcbiAgICAgIHRoaXMuY2FudmFzLFxyXG4gICAgICB4LFxyXG4gICAgICB5LFxyXG4gICAgICBhLFxyXG4gICAgICB3LFxyXG4gICAgICBoLFxyXG4gICAgICBwb3NEYXRhXHJcbiAgICApO1xyXG5cclxuICAgIC8vIG1ha2UgYWN0aXZlXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmNhbnZhcy5zZXRBY3RpdmVPYmplY3QocmVjdEdyb3VwKTtcclxuICAgICAgdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gICAgfSBjYXRjaCB7fVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlVG9PdGhlckVsZW1lbnRzQ2hhbmdlcygpO1xyXG4gICAgdGhpcy51cGRhdGVPdGhlckVsZW1lbnRzQ29vcmRpbmF0ZXMoKTtcclxuICB9XHJcblxyXG4gIGZpbmRFbXB0eUNlbnRlclNwb3Qob2JqZWN0V2lkdGhQeDogbnVtYmVyLCBvYmplY3RIZWlnaHRQeDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBvYmplY3RzID0gdGhpcy5jYW52YXMuZ2V0T2JqZWN0cygpO1xyXG4gICAgaWYgKCFvYmplY3RzLmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgLy8gMS4gR2V0IGxheW91dCBib3VuZHNcclxuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuZ2V0RnVsbExheW91dEJvdW5kcygpO1xyXG4gICAgY29uc3QgY2VudGVyWCA9IGJvdW5kcy5sZWZ0ICsgYm91bmRzLndpZHRoIC8gMjtcclxuICAgIGNvbnN0IGNlbnRlclkgPSBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDI7XHJcblxyXG4gICAgLy8gMi4gU3BpcmFsIHNlYXJjaCBwYXJhbWV0ZXJzXHJcbiAgICBjb25zdCBzdGVwID0gMjA7IC8vIGdyaWQgc3RlcCAocHgpXHJcbiAgICBjb25zdCBtYXhSYWRpdXMgPSBNYXRoLm1heChib3VuZHMud2lkdGgsIGJvdW5kcy5oZWlnaHQpO1xyXG5cclxuICAgIC8vIFNwaXJhbCBvdXR3YXJkc1xyXG4gICAgZm9yIChsZXQgcmFkaXVzID0gMDsgcmFkaXVzIDwgbWF4UmFkaXVzOyByYWRpdXMgKz0gc3RlcCkge1xyXG4gICAgICBmb3IgKGxldCBhbmdsZSA9IDA7IGFuZ2xlIDwgMzYwOyBhbmdsZSArPSAzMCkge1xyXG4gICAgICAgIGNvbnN0IHJhZCA9IChhbmdsZSAqIE1hdGguUEkpIC8gMTgwO1xyXG5cclxuICAgICAgICBjb25zdCB4ID0gY2VudGVyWCArIHJhZGl1cyAqIE1hdGguY29zKHJhZCk7XHJcbiAgICAgICAgY29uc3QgeSA9IGNlbnRlclkgKyByYWRpdXMgKiBNYXRoLnNpbihyYWQpO1xyXG5cclxuICAgICAgICBjb25zdCB0ZXN0UmVjdCA9IHtcclxuICAgICAgICAgIGxlZnQ6IHgsXHJcbiAgICAgICAgICB0b3A6IHksXHJcbiAgICAgICAgICB3aWR0aDogb2JqZWN0V2lkdGhQeCxcclxuICAgICAgICAgIGhlaWdodDogb2JqZWN0SGVpZ2h0UHgsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgY29sbGlzaW9uXHJcbiAgICAgICAgY29uc3QgaW50ZXJzZWN0cyA9IG9iamVjdHMuc29tZSgob2JqKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByZWN0ID0gb2JqLmdldEJvdW5kaW5nUmVjdCgpO1xyXG4gICAgICAgICAgcmV0dXJuICEoXHJcbiAgICAgICAgICAgIHJlY3QubGVmdCA+IHRlc3RSZWN0LmxlZnQgKyB0ZXN0UmVjdC53aWR0aCB8fFxyXG4gICAgICAgICAgICByZWN0LmxlZnQgKyByZWN0LndpZHRoIDwgdGVzdFJlY3QubGVmdCB8fFxyXG4gICAgICAgICAgICByZWN0LnRvcCA+IHRlc3RSZWN0LnRvcCArIHRlc3RSZWN0LmhlaWdodCB8fFxyXG4gICAgICAgICAgICByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IDwgdGVzdFJlY3QudG9wXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWludGVyc2VjdHMpIHtcclxuICAgICAgICAgIHJldHVybiB7IHgsIHkgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDsgLy8gbm8gZW1wdHkgYXJlYSBmb3VuZFxyXG4gIH1cclxuXHJcbiAgbGlzdGVuVG9EZWxldGVLZXkoKSB7XHJcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCAoZSkgPT4ge1xyXG4gICAgICBpZiAoZS5rZXkgPT09IFwiRGVsZXRlXCIgJiYgdGhpcy5sYXlvdXRGb3JtLmVuYWJsZWQpIHtcclxuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmNhbnZhcz8uZ2V0QWN0aXZlT2JqZWN0KCkgYXMgYW55O1xyXG4gICAgICAgIGlmIChhY3RpdmUgJiYgKGFjdGl2ZSBhcyBhbnkpLm9ialR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICAgICAgdGhpcy5kZWxldGVFbnRyYW5jZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFjdGl2ZSAmJiAoYWN0aXZlIGFzIGFueSkub2JqVHlwZSA9PT0gXCJ3YWxsXCIpIHtcclxuICAgICAgICAgIGlmIChhY3RpdmU/LmRhdGE/LmVsZW1lbnROdW1iZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5kZWxldGVXYWxsKGFjdGl2ZT8uZGF0YT8uZWxlbWVudE51bWJlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZUVudHJhbmNlKCkge1xyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5jYW52YXMuZ2V0QWN0aXZlT2JqZWN0KCkgYXMgYW55O1xyXG5cclxuICAgIGlmIChhY3RpdmUgJiYgYWN0aXZlLm9ialR5cGUgPT09IFwiZW50cmFuY2VcIikge1xyXG4gICAgICBjb25zdCBpID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kSW5kZXgoXHJcbiAgICAgICAgKGVsOiBhbnkpID0+XHJcbiAgICAgICAgICBlbC5lbGVtZW50VHlwZSA9PT0gXCJlbnRyYW5jZVwiICYmXHJcbiAgICAgICAgICBlbC5lbGVtZW50TnVtYmVyID09PSBhY3RpdmUuZGF0YS5lbGVtZW50TnVtYmVyXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBkZWxldGVXYWxsKGVsZU51bWJlcjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB3YWxsID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kKFxyXG4gICAgICAoZWxlOiBhbnkpID0+XHJcbiAgICAgICAgZWxlLmVsZW1lbnRUeXBlID09PSBcIndhbGxcIiAmJiBlbGUuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyXHJcbiAgICApO1xyXG4gICAgaWYgKHdhbGwuZml4dHVyZXMubGVuZ3RoIHx8IHdhbGwub3RoZXJFbGVtZW50cy5sZW5ndGgpXHJcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuY29uZmlybURlbGV0ZVdhbGwoKSkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBpID0gdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5maW5kSW5kZXgoXHJcbiAgICAgIChlbDogYW55KSA9PiBlbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCIgJiYgZWwuZWxlbWVudE51bWJlciA9PT0gZWxlTnVtYmVyXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uc3BsaWNlKGksIDEpO1xyXG4gICAgdGhpcy51cGRhdGVXYWxsRWxlbWVudE51bWJlcigpO1xyXG4gICAgdGhpcy5yZW5kZXJGbG9vcih0cnVlKTtcclxuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlV2FsbEVsZW1lbnROdW1iZXIoKSB7XHJcbiAgICBjb25zdCBvbmx5V2FsbHMgPSB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uPy5maWx0ZXIoXHJcbiAgICAgIChlbDogYW55KSA9PiBlbC5lbGVtZW50VHlwZSA9PT0gXCJ3YWxsXCJcclxuICAgICk7XHJcblxyXG4gICAgb25seVdhbGxzPy5mb3JFYWNoKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgaXRlbS5lbGVtZW50TnVtYmVyID0gaW5kZXggKyAxO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc092ZXJsYXBwaW5nV2l0aFRvbGVyYW5jZShcclxuICAgIGE6IGZhYnJpYy5PYmplY3QsXHJcbiAgICBiOiBmYWJyaWMuT2JqZWN0LFxyXG4gICAgdG9sZXJhbmNlOiBudW1iZXIgPSAwXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhQm91bmRzID0gYS5nZXRCb3VuZGluZ1JlY3QoKTtcclxuICAgIGNvbnN0IGJCb3VuZHMgPSBiLmdldEJvdW5kaW5nUmVjdCgpO1xyXG5cclxuICAgIHJldHVybiAhKFxyXG4gICAgICAoXHJcbiAgICAgICAgYUJvdW5kcy5sZWZ0ID4gYkJvdW5kcy5sZWZ0ICsgYkJvdW5kcy53aWR0aCAtIHRvbGVyYW5jZSB8fCAvLyBhIGlzIHRvIHRoZSByaWdodCBvZiBiXHJcbiAgICAgICAgYUJvdW5kcy5sZWZ0ICsgYUJvdW5kcy53aWR0aCAtIHRvbGVyYW5jZSA8IGJCb3VuZHMubGVmdCB8fCAvLyBhIGlzIHRvIHRoZSBsZWZ0IG9mIGJcclxuICAgICAgICBhQm91bmRzLnRvcCA+IGJCb3VuZHMudG9wICsgYkJvdW5kcy5oZWlnaHQgLSB0b2xlcmFuY2UgfHwgLy8gYSBpcyBiZWxvdyBiXHJcbiAgICAgICAgYUJvdW5kcy50b3AgKyBhQm91bmRzLmhlaWdodCAtIHRvbGVyYW5jZSA8IGJCb3VuZHMudG9wXHJcbiAgICAgICkgLy8gYSBpcyBhYm92ZSBiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0QXNzb2NpYXRlZEVsZW1lbnRJbmZvKGZpeHR1cmVJZDogc3RyaW5nKToge1xyXG4gICAgYXNzb2NpYXRlZEVsZW1lbnROdW1iZXI6IG51bWJlcjtcclxuICAgIGFzc29jaWF0ZWRFbGVtZW50VHlwZTogc3RyaW5nO1xyXG4gICAgd2FsbERpcmVjdGlvbjogc3RyaW5nO1xyXG4gIH0gfCBudWxsIHtcclxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uKSB7XHJcbiAgICAgIGlmIChlbGVtZW50LmZpeHR1cmVzICYmIEFycmF5LmlzQXJyYXkoZWxlbWVudC5maXh0dXJlcykpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgZWxlbWVudC5maXh0dXJlcykge1xyXG4gICAgICAgICAgaWYgKGZpeHR1cmUuX2lkID09PSBmaXh0dXJlSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICBhc3NvY2lhdGVkRWxlbWVudE51bWJlcjogZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudE51bWJlciA/PyBudWxsLFxyXG4gICAgICAgICAgICAgIGFzc29jaWF0ZWRFbGVtZW50VHlwZTogZml4dHVyZS5hc3NvY2lhdGVkRWxlbWVudFR5cGUgPz8gbnVsbCxcclxuICAgICAgICAgICAgICB3YWxsRGlyZWN0aW9uOiBlbGVtZW50LmRpcmVjdGlvbixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgdG9QaXhlbHModmFsdWU6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpIHtcclxuICAgIGxldCBwaXhlbHM6IG51bWJlcjtcclxuXHJcbiAgICBpZiAodW5pdCA9PT0gXCJtbVwiKSB7XHJcbiAgICAgIHBpeGVscyA9ICh2YWx1ZSAvIDI1LjQpICogZHBpO1xyXG4gICAgfSBlbHNlIGlmICh1bml0ID09PSBcImZ0XCIpIHtcclxuICAgICAgcGl4ZWxzID0gdmFsdWUgKiAxMiAqIGRwaTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHVuaXQuIFVzZSAnbW0nIG9yICdmdCcuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBOdW1iZXIocGl4ZWxzLnRvRml4ZWQoNCkpO1xyXG4gIH1cclxuXHJcbiAgZnJvbVBpeGVscyhwaXhlbHM6IG51bWJlciwgdW5pdDogc3RyaW5nLCBkcGkgPSAyLjgpOiBudW1iZXIge1xyXG4gICAgbGV0IHZhbHVlOiBudW1iZXI7XHJcblxyXG4gICAgLy8gcGl4ZWxzID0gcGl4ZWxzID49IHRoaXMud2FsbFRoaWNrbmVzcyA/IHBpeGVscyAtIHRoaXMud2FsbFRoaWNrbmVzcyA6IHRoaXMud2FsbFRoaWNrbmVzcztcclxuXHJcbiAgICBpZiAodW5pdCA9PT0gXCJtbVwiKSB7XHJcbiAgICAgIHZhbHVlID0gKHBpeGVscyAvIGRwaSkgKiAyNS40O1xyXG4gICAgfSBlbHNlIGlmICh1bml0ID09PSBcImZ0XCIpIHtcclxuICAgICAgdmFsdWUgPSBwaXhlbHMgLyAoMTIgKiBkcGkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgdW5pdC4gVXNlICdtbScgb3IgJ2Z0Jy5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZS50b0ZpeGVkKDQpKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1FZGl0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKExheW91dEVkaXRDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09IFwib2tcIik7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtRGVsZXRlV2FsbCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9IFwiRGVsZXRlIHdhbGxcIjtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPVxyXG4gICAgICAgIFwiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHdhbGwgYWxvbmcgd2l0aCBpdHMgYXNzb2NpYXRlZCBmaXh0dXJlcyBhbmQgZWxlbWVudHM/XCI7XHJcblxyXG4gICAgICByZXR1cm4gYXdhaXQgbW9kZWxSZWYucmVzdWx0LnRoZW48Ym9vbGVhbj4oKHJlc3VsdCkgPT4gcmVzdWx0ID09PSBcIm9rXCIpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRml4dHVyZUNvb3JkaW5hdGVzKGZpeHR1cmVzPzogYW55KSB7XHJcbiAgICBjb25zdCBmaXh0dXJlc0Zyb21DYW52YXMgPVxyXG4gICAgICBmaXh0dXJlcyA/P1xyXG4gICAgICB0aGlzLmNhbnZhc1xyXG4gICAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5maXh0dXJlSWQpXHJcbiAgICAgICAgLm1hcCgob2JqKSA9PiAoe1xyXG4gICAgICAgICAgaWQ6IChvYmogYXMgYW55KS5maXh0dXJlSWQsXHJcbiAgICAgICAgICB4OiBvYmoubGVmdCxcclxuICAgICAgICAgIHk6IG9iai50b3AsXHJcbiAgICAgICAgICBhbmdsZTogb2JqPy5hbmdsZSA/PyAwLFxyXG4gICAgICAgIH0pKTtcclxuICAgIGNvbnN0IHBvc01hcCA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgZml4dHVyZXNGcm9tQ2FudmFzKSB7XHJcbiAgICAgIHBvc01hcC5zZXQoZml4dHVyZS5pZCwge1xyXG4gICAgICAgIHg6IHRoaXMuZnJvbVBpeGVscyhmaXh0dXJlLngsIFwiZnRcIiksXHJcbiAgICAgICAgeTogdGhpcy5mcm9tUGl4ZWxzKGZpeHR1cmUueSwgXCJmdFwiKSxcclxuICAgICAgICBhbmdsZTogZml4dHVyZS5hbmdsZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZS5mb3JFYWNoKChjZjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhdGVzdEZpeHR1cmVQb3MgPSBwb3NNYXAuZ2V0KGNmLl9pZCk7XHJcbiAgICAgIGlmIChsYXRlc3RGaXh0dXJlUG9zKSB7XHJcbiAgICAgICAgY2YucmVsYXRpdmVQb3NpdGlvbi54ID0gbGF0ZXN0Rml4dHVyZVBvcy54O1xyXG4gICAgICAgIGNmLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdEZpeHR1cmVQb3MueTtcclxuICAgICAgICBjZi5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0Rml4dHVyZVBvcy5hbmdsZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgdz8uZml4dHVyZXM/LmZvckVhY2goKHdmOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBsYXRlc3RGaXh0dXJlUG9zID0gcG9zTWFwLmdldCh3Zi5faWQpO1xyXG4gICAgICAgIGlmIChsYXRlc3RGaXh0dXJlUG9zKSB7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RGaXh0dXJlUG9zLng7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBsYXRlc3RGaXh0dXJlUG9zLnk7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLmFuZ2xlID0gbGF0ZXN0Rml4dHVyZVBvcy5hbmdsZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVPdGhlckVsZW1lbnRzQ29vcmRpbmF0ZXMoKSB7XHJcbiAgICBjb25zdCBvdGhlcnNGcm9tQ2FudmFzID0gdGhpcy5jYW52YXNcclxuICAgICAgLmdldE9iamVjdHMoKVxyXG4gICAgICAuZmlsdGVyKChvYmopID0+IChvYmogYXMgYW55KS5vYmpUeXBlID09PSBcIm90aGVyc1wiKVxyXG4gICAgICAubWFwKChvYmopID0+ICh7XHJcbiAgICAgICAgaWQ6IChvYmogYXMgYW55KS5kYXRhPy5faWQsXHJcbiAgICAgICAgbGFiZWw6IChvYmogYXMgYW55KS5kYXRhPy5maXh0dXJlTmFtZSxcclxuICAgICAgICB4OiBvYmoubGVmdCxcclxuICAgICAgICB5OiBvYmoudG9wLFxyXG4gICAgICAgIGFuZ2xlOiBvYmo/LmFuZ2xlID8/IDAsXHJcbiAgICAgICAgd2lkdGg6IHRoaXMuZnJvbVBpeGVscyhvYmouZ2V0U2NhbGVkV2lkdGgoKSAtIDIsIFwiZnRcIiksXHJcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZEhlaWdodCgpIC0gMiwgXCJmdFwiKSxcclxuICAgICAgfSkpO1xyXG5cclxuICAgIGNvbnN0IHBvc01hcCA9IG5ldyBNYXA8XHJcbiAgICAgIHN0cmluZyxcclxuICAgICAgeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgYW5nbGU6IG51bWJlcjsgaDogbnVtYmVyOyB3OiBudW1iZXIgfVxyXG4gICAgPigpO1xyXG4gICAgZm9yIChjb25zdCBvdGhlciBvZiBvdGhlcnNGcm9tQ2FudmFzKSB7XHJcbiAgICAgIGlmIChvdGhlci5pZCkge1xyXG4gICAgICAgIHBvc01hcC5zZXQob3RoZXIuaWQsIHtcclxuICAgICAgICAgIHg6IHRoaXMuZnJvbVBpeGVscyhvdGhlci54LCBcImZ0XCIpLFxyXG4gICAgICAgICAgeTogdGhpcy5mcm9tUGl4ZWxzKG90aGVyLnksIFwiZnRcIiksXHJcbiAgICAgICAgICBhbmdsZTogb3RoZXIuYW5nbGUsXHJcbiAgICAgICAgICBoOiBvdGhlci5oZWlnaHQsXHJcbiAgICAgICAgICB3OiBvdGhlci53aWR0aCxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMpKSB7XHJcbiAgICAgIHRoaXMuZmxvb3JEYXRhLm90aGVyRWxlbWVudHMuZm9yRWFjaCgoZWw6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE90aGVyc1BvcyA9IHBvc01hcC5nZXQoZWwuX2lkKTtcclxuICAgICAgICBpZiAobGF0ZXN0T3RoZXJzUG9zKSB7XHJcbiAgICAgICAgICBlbC5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RPdGhlcnNQb3MueDtcclxuICAgICAgICAgIGVsLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdE90aGVyc1Bvcy55O1xyXG4gICAgICAgICAgZWwucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9IGxhdGVzdE90aGVyc1Bvcy5hbmdsZTtcclxuICAgICAgICAgIGVsLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgPSBsYXRlc3RPdGhlcnNQb3MuaDtcclxuICAgICAgICAgIGVsLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy53O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5mbG9vckRhdGEubGF5b3V0UG9seWdvbi5mb3JFYWNoKCh3OiBhbnkpID0+IHtcclxuICAgICAgdz8ub3RoZXJFbGVtZW50cz8uZm9yRWFjaCgod2Y6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdE90aGVyc1BvcyA9IHBvc01hcC5nZXQod2YuX2lkKTtcclxuICAgICAgICBpZiAobGF0ZXN0T3RoZXJzUG9zKSB7XHJcbiAgICAgICAgICB3Zi5yZWxhdGl2ZVBvc2l0aW9uLnggPSBsYXRlc3RPdGhlcnNQb3MueDtcclxuICAgICAgICAgIHdmLnJlbGF0aXZlUG9zaXRpb24ueSA9IGxhdGVzdE90aGVyc1Bvcy55O1xyXG4gICAgICAgICAgd2YucmVsYXRpdmVQb3NpdGlvbi5hbmdsZSA9IGxhdGVzdE90aGVyc1Bvcy5hbmdsZTtcclxuICAgICAgICAgIHdmLmZpeHR1cmVTdGF0aWNMZW5ndGgudmFsdWUgPSBsYXRlc3RPdGhlcnNQb3MuaDtcclxuICAgICAgICAgIHdmLmZpeHR1cmVTdGF0aWNXaWR0aC52YWx1ZSA9IGxhdGVzdE90aGVyc1Bvcy53O1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVdhbGxDb29yZGluYXRlcygpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNhbnZhc1xyXG4gICAgICAuZ2V0T2JqZWN0cygpXHJcbiAgICAgIC5maWx0ZXIoKG9iaikgPT4gKG9iaiBhcyBhbnkpLm9ialR5cGUgPT09IFwid2FsbFwiKVxyXG4gICAgICAubWFwKChvYmopID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdG9wOiB0aGlzLmZyb21QaXhlbHMob2JqLnRvcCwgXCJmdFwiKSxcclxuICAgICAgICAgIGxlZnQ6IHRoaXMuZnJvbVBpeGVscyhvYmoubGVmdCwgXCJmdFwiKSxcclxuICAgICAgICAgIHdpZHRoOiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZFdpZHRoKCkgLSAwLjI3LCBcImZ0XCIpLFxyXG4gICAgICAgICAgaGVpZ2h0OiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZEhlaWdodCgpIC0gMC4yNywgXCJmdFwiKSxcclxuICAgICAgICAgIGFuZ2xlOiBvYmouYW5nbGUsXHJcbiAgICAgICAgICBlbGVtZW50RGF0YTogKG9iaiBhcyBhbnkpLmRhdGEsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgY29uc3QgcG9zTWFwID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIGZvciAoY29uc3Qgd2FsbCBvZiBkYXRhKSB7XHJcbiAgICAgIHBvc01hcC5zZXQoXHJcbiAgICAgICAgYCR7d2FsbC5lbGVtZW50RGF0YS5lbGVtZW50VHlwZX0ke3dhbGwuZWxlbWVudERhdGEuZWxlbWVudE51bWJlcn1gLFxyXG4gICAgICAgIGRhdGEuZmluZChcclxuICAgICAgICAgIChvYmopID0+XHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSA9PT0gd2FsbC5lbGVtZW50RGF0YS5lbGVtZW50VHlwZSAmJlxyXG4gICAgICAgICAgICBvYmouZWxlbWVudERhdGEuZWxlbWVudE51bWJlciA9PT0gd2FsbC5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgodzogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHdhbGxQb3MgPSBwb3NNYXAuZ2V0KGAke3cuZWxlbWVudFR5cGV9JHt3LmVsZW1lbnROdW1iZXJ9YCk7XHJcbiAgICAgIGlmICh3YWxsUG9zKSB7XHJcbiAgICAgICAgdy5yZWxhdGl2ZVBvc2l0aW9uLnggPSB3YWxsUG9zLmxlZnQ7XHJcbiAgICAgICAgdy5yZWxhdGl2ZVBvc2l0aW9uLnkgPSB3YWxsUG9zLnRvcDtcclxuICAgICAgICB3LmFuZ2xlID0gd2FsbFBvcy5hbmdsZTtcclxuICAgICAgICB3LmRpc3RhbmNlID0gd2FsbFBvcy53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVFbnRyYW5jZUNvb3JkaW5hdGVzKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbHRlcigob2JqKSA9PiAob2JqIGFzIGFueSkub2JqVHlwZSA9PT0gXCJlbnRyYW5jZVwiKVxyXG4gICAgICAubWFwKChvYmopID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdG9wOiB0aGlzLmZyb21QaXhlbHMob2JqLnRvcCwgXCJmdFwiKSxcclxuICAgICAgICAgIGxlZnQ6IHRoaXMuZnJvbVBpeGVscyhvYmoubGVmdCwgXCJmdFwiKSxcclxuICAgICAgICAgIHdpZHRoOiB0aGlzLmZyb21QaXhlbHMob2JqLmdldFNjYWxlZFdpZHRoKCksIFwiZnRcIiksXHJcbiAgICAgICAgICBhbmdsZTogb2JqLmFuZ2xlLFxyXG4gICAgICAgICAgZWxlbWVudERhdGE6IChvYmogYXMgYW55KS5kYXRhLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHBvc01hcCA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGVudHJhbmNlIG9mIGRhdGEpIHtcclxuICAgICAgcG9zTWFwLnNldChcclxuICAgICAgICBgJHtlbnRyYW5jZS5lbGVtZW50RGF0YS5lbGVtZW50VHlwZX0ke2VudHJhbmNlLmVsZW1lbnREYXRhLmVsZW1lbnROdW1iZXJ9YCxcclxuICAgICAgICBkYXRhLmZpbmQoXHJcbiAgICAgICAgICAob2JqKSA9PlxyXG4gICAgICAgICAgICBvYmouZWxlbWVudERhdGEuZWxlbWVudFR5cGUgPT09IGVudHJhbmNlLmVsZW1lbnREYXRhLmVsZW1lbnRUeXBlICYmXHJcbiAgICAgICAgICAgIG9iai5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyID09PSBlbnRyYW5jZS5lbGVtZW50RGF0YS5lbGVtZW50TnVtYmVyXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmxvb3JEYXRhLmxheW91dFBvbHlnb24uZm9yRWFjaCgodzogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGVudHJhbmNlUG9zID0gcG9zTWFwLmdldChgJHt3LmVsZW1lbnRUeXBlfSR7dy5lbGVtZW50TnVtYmVyfWApO1xyXG4gICAgICBpZiAoZW50cmFuY2VQb3MpIHtcclxuICAgICAgICB3LnJlbGF0aXZlUG9zaXRpb24ueCA9IGVudHJhbmNlUG9zLmxlZnQ7XHJcbiAgICAgICAgdy5yZWxhdGl2ZVBvc2l0aW9uLnkgPSBlbnRyYW5jZVBvcy50b3A7XHJcbiAgICAgICAgdy5hbmdsZSA9IGVudHJhbmNlUG9zLmFuZ2xlO1xyXG4gICAgICAgIHcuZGlzdGFuY2UgPSBlbnRyYW5jZVBvcy53aWR0aDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVMYXlvdXQoZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKGVkaXRNb2RlKSB7XHJcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuY29uZmlybUVkaXQoKSkpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkUHVibGlzaCA9IHRoaXMudGFza0luZm8uZGlzYWJsZWQ7XHJcbiAgICAgICAgdGhpcy5sYXlvdXRGb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIHRoaXMucmVuZGVyRmxvb3IoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy50YXNrU3R5bGUuZml4dHVyZS5jbGFzcyA9PSBcInJldmlld1BlbmRpbmdcIikge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWRQdWJsaXNoID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZVwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmZsb29yRGF0YS5sYXlvdXRQb2x5Z29uLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBlbGVtZW50LmZpeHR1cmVzID0gZWxlbWVudC5maXh0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgKGZpeHR1cmU6IGFueSkgPT4gIWZpeHR1cmU/Lmdob3N0ICYmIGZpeHR1cmUuZml4dHVyZU5hbWUgIT09IFwic3BhY2VcIlxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZsb29yRGF0YS5jZW50ZXJGaXh0dXJlID0gdGhpcy5mbG9vckRhdGEuY2VudGVyRml4dHVyZVxyXG4gICAgICAuZmlsdGVyKChmaXh0dXJlOiBhbnkpID0+ICFmaXh0dXJlPy5naG9zdClcclxuICAgICAgLm1hcCgoZml4dHVyZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBhc3NvY2lhdGVkRWxlbWVudFR5cGUsIGFzc29jaWF0ZWRFbGVtZW50TnVtYmVyLCAuLi5yZXN0IH0gPVxyXG4gICAgICAgICAgZml4dHVyZTtcclxuICAgICAgICByZXR1cm4gcmVzdDtcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnJlb3JkZXJGaXh0dXJlKHRoaXMuZmxvb3JEYXRhKTtcclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBmbG9vcklkOiB0aGlzLmZsb29yRGF0YS5faWQsXHJcbiAgICAgIGRhdGE6IHRoaXMuZmxvb3JEYXRhLFxyXG4gICAgICBlZGl0TW9kZTogZWRpdE1vZGUsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuYXBpU2VydmljZS51cGRhdGVTdG9yZVBsYW5vKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUZvcm0oKTtcclxuICAgICAgICB0aGlzLmdldFN0b3JlRml4dHVyZXModGhpcy5wbGFub0RhdGEuX2lkKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIHVwZGF0ZSBsYXlvdXRcIik7XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzc2lnblRhc2soKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIHJlZG86IGZhbHNlLFxyXG4gICAgICBjaGVja0xpc3ROYW1lOiBcIlwiLFxyXG4gICAgICBzdG9yZTogdGhpcy5wbGFub0RhdGEuc3RvcmVOYW1lLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5wbGFub0RhdGEuY2xpZW50SWQsXHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgIH07XHJcbiAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwibGF5b3V0XCIpIHtcclxuICAgICAgLy8gdGhpcy51cGRhdGVMYXlvdXQoKVxyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIkxheW91dCBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dC1yZWRvXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJMYXlvdXQgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICAgIHBheWxvYWQudGFza0lkID1cclxuICAgICAgICB0aGlzLnN0b3JlRmVlZGJhY2subGF5b3V0RGF0YVtcclxuICAgICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjay5sYXlvdXREYXRhLmxlbmd0aCAtIDFcclxuICAgICAgICBdLnRhc2tJZDtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZVwiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiRml4dHVyZSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmUtcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiRml4dHVyZSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgICAgcGF5bG9hZC50YXNrSWQgPVxyXG4gICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjay5maXh0dXJlRGF0YVtcclxuICAgICAgICAgIHRoaXMuc3RvcmVGZWVkYmFjay5maXh0dXJlRGF0YS5sZW5ndGggLSAxXHJcbiAgICAgICAgXS50YXNrSWQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJWTSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtLXJlZG9cIikge1xyXG4gICAgICBwYXlsb2FkLmNoZWNrTGlzdE5hbWUgPSBcIlZNIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgICBwYXlsb2FkLnRhc2tJZCA9XHJcbiAgICAgICAgdGhpcy5zdG9yZUZlZWRiYWNrLlZtRGF0YVt0aGlzLnN0b3JlRmVlZGJhY2suVm1EYXRhLmxlbmd0aCAtIDFdLnRhc2tJZDtcclxuICAgIH1cclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihQdWJsaXNodGFza1BvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICBzaXplOiBcIm1kXCIsXHJcbiAgICAgIHNjcm9sbGFibGU6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICB3aW5kb3dDbGFzczogXCJjdXN0b20taGVpZ2h0LW1vZGFsXCIsIC8vIDwtLSBBZGQgYSBjdXN0b20gY2xhc3MgaGVyZVxyXG4gICAgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pbnB1dERhdGEgPSBwYXlsb2FkO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJzdWJtaXRcIikge1xyXG4gICAgICAgIGxldCB0YXNrVHlwZSA9IHRoaXMucHVibGlzaGluZ1N0YXRlO1xyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bS1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJ2bVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZS1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXQtcmVkb1wiKSB7XHJcbiAgICAgICAgICB0YXNrVHlwZSA9IFwibGF5b3V0XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQuY29tbWVudHMgJiYgcmVzdWx0LmNvbW1lbnRzICE9IFwiXCIpIHtcclxuICAgICAgICAgIGxldCBjb21tZW50UGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICAgICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgICAgICB0YXNrVHlwZTogdGFza1R5cGUsXHJcbiAgICAgICAgICAgIGNvbW1lbnQ6IHJlc3VsdC5jb21tZW50cyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlR2xvYmFsQ29tbWVudChjb21tZW50UGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7fSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuY3JlYXRlVGFzayhwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRhc2tEZXRhaWxzKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRTdG9yZUZlZWRiYWNrKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgICAgICAgICAgIHt9XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QocmVzPy5kYXRhPy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gcHVibGlzaCB0YXNrXCIpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrRWRpdCgpIHtcclxuICAgIGlmICh0aGlzLnRhc2tTdHlsZS5maXh0dXJlLm5hbWUgIT09IFwiQXBwcm92ZWRcIikge1xyXG4gICAgICB0aGlzLnRvZ2dsZVBhbmVsKFwicmlnaHRcIiwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMudG9nZ2xlUGFuZWwoXCJsZWZ0XCIsIGZhbHNlKTtcclxuXHJcbiAgICAgIHRoaXMuZGlzYWJsZWRQdWJsaXNoID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgICAgIHRoaXMubGF5b3V0Rm9ybS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB0aGlzLnJlbmRlckZsb29yKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAgIGBtYW5hZ2UvcGxhbm9ncmFtL21hbmFnZS1yb2xsb3V0P3BsYW5vSWQ9JHt0aGlzLmZsb29yRGF0YS5wbGFub0lkfSZmbG9vcklkPSR7dGhpcy5mbG9vckRhdGEuX2lkfWBcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRhc2tEZXRhaWxzKHBsYW5vSWQ6IGFueSwgZmxvb3JJZDogYW55KSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLnRhc2tJbmZvID0ge307XHJcbiAgICAgIHRoaXMudGFza1N0eWxlID0ge1xyXG4gICAgICAgIGxheW91dDogeyBuYW1lOiBcIllldCBUbyBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9LFxyXG4gICAgICAgIGZpeHR1cmU6IHsgbmFtZTogXCJZZXQgVG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfSxcclxuICAgICAgICB2bTogeyBuYW1lOiBcIllldCBUbyBBc3NpZ25cIiwgY2xhc3M6IFwieWV0VG9Bc3NpZ25cIiB9LFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0VGFza0luZm8oeyBwbGFub0lkLCBmbG9vcklkIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkUHVibGlzaCA9IHJlcz8uZGF0YT8uZGlzYWJsZWQgfHwgZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMudGFza0luZm8gPSByZXM/LmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMudGFza0luZm8/LnRhc2tEZXRhaWxzPy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChlbGUudHlwZSA9PSBcImxheW91dFwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tTdHlsZS5sYXlvdXQgPSB0aGlzLmdldFN0YXR1cyhcImxheW91dFwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGVsZS50eXBlID09IFwiZml4dHVyZVwiKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tTdHlsZS5maXh0dXJlID0gdGhpcy5nZXRTdGF0dXMoXCJmaXh0dXJlXCIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZWxlLnR5cGUgPT0gXCJmaXh0dXJlXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFza1N0eWxlLnZtID0gdGhpcy50YXNrU3R5bGUuZml4dHVyZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVB1Ymxpc2hpbmdTdGF0ZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIGdldCB0YXNrIGRldGFpbHNcIik7XHJcbiAgICAgICAgICByZWplY3QoKTtcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3RhdHVzKHR5cGU6IGFueSkge1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLnRhc2tJbmZvPy50YXNrRGV0YWlscz8uZmluZCgoZWxlOiBhbnkpID0+IGVsZS50eXBlID09IHR5cGUpO1xyXG4gICAgaWYgKGRhdGEpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGRhdGEuc3RhdHVzID09IFwic3VibWl0XCIgJiZcclxuICAgICAgICAoZGF0YS5mZWVkYmFja1N0YXR1cyA9PSBcImNvbXBsZXRlXCIgfHwgIWRhdGE/LmZlZWRiYWNrU3RhdHVzKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4geyBuYW1lOiBcIkFwcHJvdmVkXCIsIGNsYXNzOiBcImNvbXBsZXRlZFwiIH07XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdGF0dXMgPT0gXCJzdWJtaXRcIiAmJiBkYXRhLmZlZWRiYWNrU3RhdHVzID09IFwicGVuZGluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJSZXZpZXcgUGVuZGluZ1wiLCBjbGFzczogXCJyZXZpZXdQZW5kaW5nXCIgfTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnN0YXR1cyA9PSBcInN1Ym1pdFwiICYmIGRhdGEuZmVlZGJhY2tTdGF0dXMgPT0gXCJkaXNhZ3JlZVwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJZZXQgdG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoZGF0YS5yZWRvU3RhdHVzICYmICFkYXRhLmJyZWFjaCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJSZWRvXCIsIGNsYXNzOiBcInRhc2tBc3NpZ25lZFwiIH07XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLmJyZWFjaCkge1xyXG4gICAgICAgICAgcmV0dXJuIHsgbmFtZTogXCJGbGFnZ2VkXCIsIGNsYXNzOiBcImZsYWdnZWRcIiB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyBuYW1lOiBcIlRhc2sgQXNzaWduZWRcIiwgY2xhc3M6IFwidGFza0Fzc2lnbmVkXCIgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbmFtZTogXCJZZXQgdG8gQXNzaWduXCIsIGNsYXNzOiBcInlldFRvQXNzaWduXCIgfTtcclxuICB9XHJcblxyXG4gIGdldEVsZW1lbnROdW1iZXIoZ3JvdXA6IGFueSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIGdyb3VwLmdldChcImVsZW1lbnROdW1iZXJcIik/LnZhbHVlID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHRGaXh0dXJlKGdyb3VwOiBhbnksIGJsaW5rOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICh0aGlzLmxheW91dEZvcm0uZW5hYmxlZCkgcmV0dXJuO1xyXG4gICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgIHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmsgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjZW50ZXIgPSBncm91cC5nZXRDZW50ZXJQb2ludCgpO1xyXG5cclxuICAgIGNvbnN0IHJlYWxXaWR0aCA9IGdyb3VwLndpZHRoISAqIGdyb3VwLnNjYWxlWCE7XHJcbiAgICBjb25zdCByZWFsSGVpZ2h0ID0gZ3JvdXAuaGVpZ2h0ISAqIGdyb3VwLnNjYWxlWSE7XHJcblxyXG4gICAgY29uc3QgcmVjdCA9IG5ldyBmYWJyaWMuUmVjdCh7XHJcbiAgICAgIGxlZnQ6IGNlbnRlci54LFxyXG4gICAgICB0b3A6IGNlbnRlci55LFxyXG4gICAgICB3aWR0aDogcmVhbFdpZHRoICsgOCwgLy8gY29uc2lzdGVudCBwYWRkaW5nXHJcbiAgICAgIGhlaWdodDogcmVhbEhlaWdodCArIDgsXHJcbiAgICAgIHJ4OiA1LFxyXG4gICAgICByeTogNSxcclxuICAgICAgc3Ryb2tlOiBcIiMwMGFhZmZcIixcclxuICAgICAgc3Ryb2tlV2lkdGg6IDMsXHJcbiAgICAgIGZpbGw6IFwidHJhbnNwYXJlbnRcIixcclxuICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXHJcbiAgICAgIGV2ZW50ZWQ6IGZhbHNlLFxyXG4gICAgICBvcmlnaW5YOiBcImNlbnRlclwiLFxyXG4gICAgICBvcmlnaW5ZOiBcImNlbnRlclwiLFxyXG4gICAgICBhbmdsZTogZ3JvdXAuYW5nbGUgfHwgMCxcclxuICAgICAgb3BhY2l0eTogYmxpbmsgPyAwIDogMSxcclxuICAgIH0pO1xyXG5cclxuICAgIChyZWN0IGFzIGFueSkuZGF0YSA9IHsgdHlwZTogXCJmaXh0dXJlLWhpZ2hsaWdodFwiIH07XHJcblxyXG4gICAgdGhpcy5jYW52YXMuYWRkKHJlY3QpO1xyXG4gICAgdGhpcy5jYW52YXMubW92ZU9iamVjdFRvKHJlY3QsIHRoaXMuY2FudmFzLmdldE9iamVjdHMoKS5sZW5ndGggLSAxKTtcclxuICAgIHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKTtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IHJlY3Q7XHJcblxyXG4gICAgLy8gLS0tIE5vIGJsaW5raW5nIG5lZWRlZCAtLS1cclxuICAgIGlmICghYmxpbmspIHJldHVybjtcclxuXHJcbiAgICBsZXQgY3ljbGVzID0gMDtcclxuXHJcbiAgICBjb25zdCBibGlua09uY2UgPSAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlY3QuYW5pbWF0ZShcclxuICAgICAgICB7IG9wYWNpdHk6IDEgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkdXJhdGlvbjogMjAwLFxyXG4gICAgICAgICAgb25DaGFuZ2U6ICgpID0+IHRoaXMuY2FudmFzLnJlcXVlc3RSZW5kZXJBbGwoKSxcclxuICAgICAgICAgIG9uQ29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmspIHtcclxuICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVjdC5hbmltYXRlKFxyXG4gICAgICAgICAgICAgIHsgb3BhY2l0eTogMCB9LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiAyMDAsXHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogKCkgPT4gdGhpcy5jYW52YXMucmVxdWVzdFJlbmRlckFsbCgpLFxyXG4gICAgICAgICAgICAgICAgb25Db21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5jZWxIaWdobGlnaHRCbGluaykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSGlnaGxpZ2h0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICBjeWNsZXMrKztcclxuICAgICAgICAgICAgICAgICAgaWYgKGN5Y2xlcyA8IDIwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmxpbmtPbmNlKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNhbmNlbEhpZ2hsaWdodEJsaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldCh7IG9wYWNpdHk6IDEgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhcy5yZXF1ZXN0UmVuZGVyQWxsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfTtcclxuXHJcbiAgICBibGlua09uY2UoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUhpZ2hsaWdodCgpIHtcclxuICAgIHRoaXMuY2FuY2VsSGlnaGxpZ2h0QmxpbmsgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMuY2FudmFzPy5nZXRPYmplY3RzKCk/LmZvckVhY2goKG9iaikgPT4ge1xyXG4gICAgICBpZiAoKG9iaiBhcyBhbnkpLmRhdGE/LnR5cGUgPT09IFwiZml4dHVyZS1oaWdobGlnaHRcIikge1xyXG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZShvYmopO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZUhpZ2hsaWdodCA9IG51bGw7XHJcbiAgICB0aGlzLmNhbnZhcz8ucmVxdWVzdFJlbmRlckFsbCgpO1xyXG4gIH1cclxuXHJcbiAga2VlcEhpZ2hsaWdodE9uVG9wID0gKCkgPT4ge1xyXG4gICAgaWYgKCF0aGlzLmFjdGl2ZUhpZ2hsaWdodCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgb2JqcyA9IHRoaXMuY2FudmFzLmdldE9iamVjdHMoKTtcclxuICAgIHRoaXMuY2FudmFzLm1vdmVPYmplY3RUbyh0aGlzLmFjdGl2ZUhpZ2hsaWdodCwgb2Jqcy5sZW5ndGggLSAxKTtcclxuICB9O1xyXG5cclxuICBvbkNoYW5nZUZpeHR1cmVPbkZlZWRiYWNrUGFuZWwoXHJcbiAgICB7XHJcbiAgICAgIGN1cnJlbnRGaXh0dXJlLFxyXG4gICAgICBhY3Rpb24sXHJcbiAgICB9OiB7XHJcbiAgICAgIGN1cnJlbnRGaXh0dXJlPzogc3RyaW5nO1xyXG4gICAgICBhY3Rpb24/OiBcIm5leHRcIiB8IFwicHJldmlvdXNcIjtcclxuICAgIH0sXHJcbiAgICBjb2xsYXBzZVRhc2tJbmZvOiBib29sZWFuID0gZmFsc2VcclxuICApIHtcclxuICAgIGxldCBpbmRleFRvU2VsZWN0ID0gY3VycmVudEZpeHR1cmVcclxuICAgICAgPyB0aGlzLmFsbEZpeHR1cmVJbnN0YW5jZXMuZmluZEluZGV4KChmOiBhbnkpID0+IGYuX2lkID09PSBjdXJyZW50Rml4dHVyZSlcclxuICAgICAgOiAwO1xyXG5cclxuICAgIGlmIChhY3Rpb24gPT09IFwibmV4dFwiKSB7XHJcbiAgICAgIGlmIChpbmRleFRvU2VsZWN0ID09IHRoaXMuYWxsRml4dHVyZUluc3RhbmNlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdCA9IDA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdCsrO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJwcmV2aW91c1wiKSB7XHJcbiAgICAgIGlmIChpbmRleFRvU2VsZWN0ID09IDApIHtcclxuICAgICAgICBpbmRleFRvU2VsZWN0ID0gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzLmxlbmd0aCAtIDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW5kZXhUb1NlbGVjdC0tO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKCFjdXJyZW50Rml4dHVyZSAmJiAhYWN0aW9uKSB7XHJcbiAgICAgIGluZGV4VG9TZWxlY3QgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGZpeHR1cmVJZFRvU2VsZWN0ID0gdGhpcy5hbGxGaXh0dXJlSW5zdGFuY2VzW2luZGV4VG9TZWxlY3RdPy5faWQ7XHJcblxyXG4gICAgY29uc3QgYWN0aW9uRml4dHVyZSA9IHRoaXMuY2FudmFzXHJcbiAgICAgIC5nZXRPYmplY3RzKClcclxuICAgICAgLmZpbmQoXHJcbiAgICAgICAgKG9iajogYW55KSA9PlxyXG4gICAgICAgICAgb2JqLm9ialR5cGUgPT09IFwiZml4dHVyZVwiICYmIG9iai5maXh0dXJlSWQgPT09IGZpeHR1cmVJZFRvU2VsZWN0XHJcbiAgICAgICkgYXMgZmFicmljLkdyb3VwIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmICghYWN0aW9uRml4dHVyZSkgcmV0dXJuO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlc2l6ZUNhbnZhcygpO1xyXG4gICAgICB0aGlzLmZpdENhbnZhc1RvTGF5b3V0QW5pbWF0ZWQoKTtcclxuICAgIH0sIDMwMCk7XHJcblxyXG4gICAgdGhpcy5oaWdobGlnaHRGaXh0dXJlKGFjdGlvbkZpeHR1cmUpO1xyXG4gICAgdGhpcy5zZWxlY3RGaXh0dXJlT25DYW52YXNDbGljayhhY3Rpb25GaXh0dXJlLCBjb2xsYXBzZVRhc2tJbmZvKTtcclxuICB9XHJcblxyXG4gIHJldm9rZVRhc2soKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgIHJlZG86IGZhbHNlLFxyXG4gICAgICBjaGVja0xpc3ROYW1lOiBcIlwiLFxyXG4gICAgICBzdG9yZTogdGhpcy5wbGFub0RhdGEuc3RvcmVOYW1lLFxyXG4gICAgICBjbGllbnRJZDogdGhpcy5wbGFub0RhdGEuY2xpZW50SWQsXHJcbiAgICAgIGZsb29ySWQ6IHRoaXMuZmxvb3JEYXRhLl9pZCxcclxuICAgICAgcGxhbm9JZDogdGhpcy5mbG9vckRhdGEucGxhbm9JZCxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImxheW91dFwiKSB7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwibGF5b3V0XCI7XHJcbiAgICAgIC8vIHRoaXMudXBkYXRlTGF5b3V0KClcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJMYXlvdXQgVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXQtcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiTGF5b3V0IFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcImxheW91dFwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSB0cnVlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJmaXh0dXJlXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJGaXh0dXJlIFZlcmlmaWNhdGlvblwiO1xyXG4gICAgICBwYXlsb2FkLnR5cGUgPSBcImZpeHR1cmVcIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcImZpeHR1cmUtcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiRml4dHVyZSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgIHBheWxvYWQucmVkbyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucHVibGlzaGluZ1N0YXRlID09PSBcInZtXCIpIHtcclxuICAgICAgcGF5bG9hZC5jaGVja0xpc3ROYW1lID0gXCJWTSBWZXJpZmljYXRpb25cIjtcclxuICAgICAgcGF5bG9hZC50eXBlID0gXCJ2bVwiO1xyXG4gICAgICBwYXlsb2FkLnJlZG8gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwidm0tcmVkb1wiKSB7XHJcbiAgICAgIHBheWxvYWQuY2hlY2tMaXN0TmFtZSA9IFwiVk0gVmVyaWZpY2F0aW9uXCI7XHJcbiAgICAgIHBheWxvYWQudHlwZSA9IFwidm1cIjtcclxuICAgICAgcGF5bG9hZC5yZWRvID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHBheWxvYWQudGFza0lkID0gdGhpcy50YXNrSW5mbz8udGFza0RldGFpbHMuZmluZChcclxuICAgICAgKGVsZTogYW55KSA9PiBlbGUudHlwZSA9PSBwYXlsb2FkLnR5cGVcclxuICAgICk/LnRhc2tJZDtcclxuXHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oU3RvcmVUYXNrUmV2b2tlQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICBzaXplOiBcIm1kXCIsXHJcbiAgICAgIHNjcm9sbGFibGU6IHRydWUsXHJcbiAgICAgIGJhY2tkcm9wOiBcInN0YXRpY1wiLFxyXG4gICAgICB3aW5kb3dDbGFzczogXCJjdXN0b20taGVpZ2h0LW1vZGFsXCIsIC8vIDwtLSBBZGQgYSBjdXN0b20gY2xhc3MgaGVyZVxyXG4gICAgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gdGhpcy5wdWJsaXNoaW5nU3RhdGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5pbnB1dERhdGEgPSBwYXlsb2FkO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJzdWJtaXRcIikge1xyXG4gICAgICAgIGxldCB0YXNrVHlwZSA9IHRoaXMucHVibGlzaGluZ1N0YXRlO1xyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJ2bS1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJ2bVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5wdWJsaXNoaW5nU3RhdGUgPT09IFwiZml4dHVyZS1yZWRvXCIpIHtcclxuICAgICAgICAgIHRhc2tUeXBlID0gXCJmaXh0dXJlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnB1Ymxpc2hpbmdTdGF0ZSA9PT0gXCJsYXlvdXQtcmVkb1wiKSB7XHJcbiAgICAgICAgICB0YXNrVHlwZSA9IFwibGF5b3V0XCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHQuY29tbWVudHMgJiYgcmVzdWx0LmNvbW1lbnRzICE9IFwiXCIpIHtcclxuICAgICAgICAgIGxldCBjb21tZW50UGF5bG9hZCA9IHtcclxuICAgICAgICAgICAgZmxvb3JJZDogdGhpcy5mbG9vckRhdGEuX2lkLFxyXG4gICAgICAgICAgICBwbGFub0lkOiB0aGlzLmZsb29yRGF0YS5wbGFub0lkLFxyXG4gICAgICAgICAgICB0YXNrVHlwZTogdGFza1R5cGUsXHJcbiAgICAgICAgICAgIGNvbW1lbnQ6IHJlc3VsdC5jb21tZW50cyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLmFwaVNlcnZpY2UudXBkYXRlR2xvYmFsQ29tbWVudChjb21tZW50UGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7fSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UucmV2b2tlVGFzayhwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgICB0aGlzLnRhc2tEZXRhaWxzKHRoaXMuZmxvb3JEYXRhLnBsYW5vSWQsIHRoaXMuZmxvb3JEYXRhLl9pZCk7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcz8ubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiRmFpbGVkIHRvIHB1Ymxpc2ggdGFza1wiKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGlzaCgpIHtcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihDb21wbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwge1xyXG4gICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICAgc2l6ZTogXCJtZFwiLFxyXG4gICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICAgICBiYWNrZHJvcDogXCJzdGF0aWNcIixcclxuICAgICAgd2luZG93Q2xhc3M6IFwiY3VzdG9tLWhlaWdodC1tb2RhbFwiLFxyXG4gICAgfSk7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9IFwiUHVibGlzaCBwbGFub2dyYW1cIjtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID0gXCJZb3UgYXJlIGFib3V0IHRvIHB1Ymxpc2ggdGhlIHBsYW5vZ3JhbSB0byB0aGUgc3RvcmUuIFRoaXMgd2lsbCBiZSB0aGUgbGF0ZXN0IGFuZCBtb3N0IHVwLXRvLWRhdGUgcGxhbm9ncmFtIGZvciB0aGUgc3RvcmUuXCI7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gXCJwdWJsaXNoXCI7XHJcblxyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICBpZihyZXMgPT0gJ29rJykge1xyXG4gICAgICAgIGxldCBkYXRhID0gc3RydWN0dXJlZENsb25lKHRoaXMucGxhbm9EYXRhKTtcclxuICAgICAgICBkYXRhLmZsb29ySWQgPSB0aGlzLmZsb29yRGF0YS5faWQ7XHJcbiAgICAgICAgZGF0YS5mbG9vckRhdGEgPSB0aGlzLmZsb29yRGF0YTtcclxuICAgICAgICBkZWxldGUgZGF0YS5mbG9vcnM7XHJcbiAgICAgICAgZGVsZXRlIGRhdGEuZmxvb3JEYXRhLm1hc3RlclRlbXBsYXRlcztcclxuICAgICAgICBsZXQgcGF5bG9hZCA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnB1Ymxpc2gocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmxvb3JEYXRhLnZlcmlmaWNhdGlvblN0YXR1cyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0U3VjY2Vzc1RvYXN0KHJlcz8ubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJGYWlsZWQgdG8gcHVibGlzaCBwbGFub1wiKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIFxyXG4gIGFzeW5jIGdvVG9TdG9yZVRvdXJQYWdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0UGxhbm9TdG9yZVZpZGVvUGFyYW1zKHtcclxuICAgICAgICAgIHN0b3JlSWQ6IHRoaXMucGxhbm9EYXRhLnN0b3JlSWQsXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChyZXM/LmRhdGEpIHtcclxuICAgICAgICBsZXQgcGFyYW1zID0gcmVzPy5kYXRhO1xyXG4gICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtcIi9tYW5hZ2UvdHJheC9nYWxsZXJ5XCJdLCB7XHJcbiAgICAgICAgICBxdWVyeVBhcmFtczogcGFyYW1zLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcclxuICAgICAgICB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3Blbk5vVmlkZW9Gb3VuZE1vZGFsKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLm9wZW5Ob1ZpZGVvRm91bmRNb2RhbCgpO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkBAIH4gZ29Ub1N0b3JlVG91clBhZ2UgW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9wZW5Ob1ZpZGVvRm91bmRNb2RhbCgpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5ub1N0b3JlVmlkZW9Nb2RhbFJlZiwge1xyXG4gICAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICB9KS5yZXN1bHQ7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkge31cclxuICB9XHJcblxyXG4gIGdvVG9TdG9yZUNhbWVyYVBhZ2UoKSB7XHJcbiAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbXCIvbWFuYWdlL3N0b3Jlcy9jYW1lcmFzXCJdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgc3RvcmVJZDogdGhpcy5wbGFub0RhdGEuc3RvcmVJZCxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLnNlcmlhbGl6ZVVybCh1cmxUcmVlKTtcclxuICAgIHdpbmRvdy5vcGVuKHVybCwgXCJfYmxhbmtcIik7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZUxpc3QocGxhbm9JZD86c3RyaW5nKSB7XHJcbiAgICB0aGlzLmFwaVNlcnZpY2UuZ2V0UGxhbm9TdG9yZUxpc3QodGhpcy5jbGllbnRJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6KHJlczphbnkpID0+e1xyXG4gICAgICAgIGlmKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gcmVzLmRhdGE7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IHRoaXMuc3RvcmVMaXN0Lm1hcCgoZWxlOmFueSkgPT4ge3JldHVybiB7Li4uZWxlLHN0b3JlTmFtZTplbGUuc3RvcmVOYW1lLnRvVXBwZXJDYXNlKCl9fSk7XHJcbiAgICAgICAgICBpZihwbGFub0lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdG9yZU5hbWUgPSB0aGlzLnN0b3JlTGlzdC5maW5kKChlbGU6YW55KSA9PiBlbGUucGxhbm9JZC50b1N0cmluZygpID09IHBsYW5vSWQudG9TdHJpbmcoKSkgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgb25TZWxlY3RlZChldmVudDphbnkpIHtcclxuICAgIHRoaXMucGxhbm9EYXRhID0gbnVsbDtcclxuICAgIHRoaXMuZmxvb3JEYXRhID0gbnVsbDtcclxuICAgIGNvbnN0IG5ld1BhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XHJcbiAgICBuZXdQYXJhbXMuc2V0KFwicGxhbm9JZFwiLCBldmVudC5wbGFub0lkKTtcclxuICAgIG5ld1BhcmFtcy5zZXQoXCJmbG9vcklkXCIsIGV2ZW50LmZsb29ySWQpO1xyXG5cclxuICAgIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKFxyXG4gICAgICB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsXHJcbiAgICAgIG5ld1BhcmFtcy50b1N0cmluZygpXHJcbiAgICApO1xyXG4gICAgdGhpcy5pc1JpZ2h0UGFuZWxDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5pc0xlZnRQYW5lbENvbGxhcHNlZCA9IHRydWU7XHJcbiAgICBhd2FpdCB0aGlzLmdldFN0b3JlRml4dHVyZXMoZXZlbnQuX2lkKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8c2VjdGlvbiBpZD1cIm1hbmFnZS1wbGFub1wiPlxyXG4gIDwhLS0gTG9hZGluZyBTdGF0ZSAtLT5cclxuICA8ZGl2ICpuZ0lmPVwiaXNQYWdlTG9hZGluZ1wiIGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG0tMFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyU2tlbGV0b25cIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJza2VsZXRvbkxvYWRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNrZWxldG9uTG9hZGVyXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2tlbGV0b25Mb2FkZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIENvbnRlbnQgLS0+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1BhZ2VMb2FkaW5nIH1cIj5cclxuICAgIDwhLS0gSGVhZGVyIEFjY29yZGlvbiAtLT5cclxuICAgIDxkaXYgaWQ9XCJoZWFkZXJcIiBuZ2JBY2NvcmRpb24gI2FjY29yZGlvbj1cIm5nYkFjY29yZGlvblwiIGNsYXNzPVwibXktNFwiPlxyXG4gICAgICA8ZGl2IG5nYkFjY29yZGlvbkl0ZW09XCJkZXRhaWxzXCIgW2NvbGxhcHNlZF09XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uSGVhZGVyIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBweC02IHB5LTNcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDoxMHB4O21hcmdpbi1sZWZ0OjVweDttYXJnaW4tcmlnaHQ6NXB4XCIgKm5nSWY9XCJwbGFub0RhdGE/LnN0b3JlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPSd0aXRsZSc+e3twbGFub0RhdGE/LnN0b3JlTmFtZX19IC0gUGxhbm88L2gyPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8bGliLXNlbGVjdC1wbGFubyAqbmdJZj1cInN0b3JlTGlzdD8ubGVuZ3RoXCIgW2lkRmllbGRdPVwiJ19pZCdcIiBbc2VsZWN0ZWRWYWx1ZXNdPVwiW3NlbGVjdGVkU3RvcmVOYW1lXVwiXHJcbiAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInN0b3JlTGlzdFwiIFttdWx0aV09ZmFsc2Ugc2VhcmNoRmllbGQ9XCJzdG9yZU5hbWVcIiAoc2VsZWN0ZWQpPVwib25TZWxlY3RlZCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2xpYi1zZWxlY3QtcGxhbm8+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS0ge3sgcGxhbm9EYXRhPy5zdG9yZU5hbWUgfX0gLS0+IFxyXG4gICAgICAgICAgICA8bGliLXJlYWN0aXZlLXNlbGVjdCAqbmdJZj1cInBsYW5vRGF0YT8uZmxvb3JzPy5sZW5ndGhcIiBbZm9ybUNvbnRyb2xdPVwic2VsZWN0ZWRGbG9vcklkXCIgW2lkRmllbGRdPVwiJ19pZCdcIlxyXG4gICAgICAgICAgICAgIFtuYW1lRmllbGRdPVwiJ2Zsb29yTnVtJ1wiIFtkYXRhXT1cInBsYW5vRGF0YS5mbG9vcnNcIj5cclxuICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzLWJ0blwiIChjbGljayk9XCJnb1RvU3RvcmVUb3VyUGFnZSgpXCI+XHJcbiAgICAgICAgICAgICAgVmlldyBzdG9yZSB0b3VyXHJcblxyXG4gICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDhfMTY0OTgpXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk02IDExQzguNzYxNDIgMTEgMTEgOC43NjE0MiAxMSA2QzExIDMuMjM4NTggOC43NjE0MiAxIDYgMUMzLjIzODU4IDEgMSAzLjIzODU4IDEgNkMxIDguNzYxNDIgMy4yMzg1OCAxMSA2IDExWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzMzQjVGRlwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNSA0TDggNkw1IDhWNFpcIiBzdHJva2U9XCIjMzNCNUZGXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwOF8xNjQ5OFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cy1idG5cIiAoY2xpY2spPVwiZ29Ub1N0b3JlQ2FtZXJhUGFnZSgpXCI+XHJcbiAgICAgICAgICAgICAgVmlldyBjYW1lcmFcclxuXHJcbiAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzQyMl8zNjMyMSlcIj5cclxuICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTkgNi41VjkuNUM5IDkuNzY1MjIgOC44OTQ2NCAxMC4wMTk2IDguNzA3MTEgMTAuMjA3MUM4LjUxOTU3IDEwLjM5NDYgOC4yNjUyMiAxMC41IDggMTAuNUgyLjVDMi4yMzQ3OCAxMC41IDEuOTgwNDMgMTAuMzk0NiAxLjc5Mjg5IDEwLjIwNzFDMS42MDUzNiAxMC4wMTk2IDEuNSA5Ljc2NTIyIDEuNSA5LjVWNEMxLjUgMy43MzQ3OCAxLjYwNTM2IDMuNDgwNDMgMS43OTI4OSAzLjI5Mjg5QzEuOTgwNDMgMy4xMDUzNiAyLjIzNDc4IDMgMi41IDNINS41TTcuNSAxLjVIMTAuNU0xMC41IDEuNVY0LjVNMTAuNSAxLjVMNSA3XCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80MjJfMzYzMjFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFlZGl0Rml4dHVyZVwiIGNsYXNzPVwidXBkYXRlQ2xhc3NcIj5MYXN0IFVwZGF0ZToge3tmbG9vckRhdGE/LnVwZGF0ZWRBdH19PC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgIDwhLS0gRWRpdCBGaXh0dXJlIE1vZGUgLS0+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJvbkZpeHR1cmVQYWdlQ2FuY2VsKClcIj5cclxuICAgICAgICAgICAgICAgICAgQ2FuY2VsXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCIgKGNsaWNrKT1cIm9uRml4dHVyZVNhdmUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICBTYXZlICYgQ2xvc2VcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIE5vcm1hbCBNb2RlIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZWRpdEZpeHR1cmUgJiYgIVsndGFza0Fzc2lnbmVkJ10uaW5jbHVkZXModGFza1N0eWxlLmZpeHR1cmUuY2xhc3MpXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFB1Ymxpc2ggQnV0dG9ucyAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdsYXlvdXQnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaCBMYXlvdXQgVmVyaWZpY2F0aW9uXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdsYXlvdXQtcmVkbydcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkUHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICBQdWJsaXNoIExheW91dCBSZWRvXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWJsaXNoaW5nU3RhdGUgPT09ICdmaXh0dXJlJ1wiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhc3NpZ25UYXNrKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRQdWJsaXNoXCI+XHJcbiAgICAgICAgICAgICAgICAgIFB1Ymxpc2ggRml4dHVyZSBWZXJpZmljYXRpb25cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ2ZpeHR1cmUtcmVkbydcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdGV4dC1ub3dyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXNzaWduVGFzaygpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkUHVibGlzaFwiPlxyXG4gICAgICAgICAgICAgICAgICBQdWJsaXNoIEZpeHR1cmUgUmVkb1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09PSAndm0nXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaCBWTSBWZXJpZmljYXRpb25cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInB1Ymxpc2hpbmdTdGF0ZSA9PT0gJ3ZtLXJlZG8nXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHRleHQtbm93cmFwXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFzc2lnblRhc2soKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFB1Ymxpc2hcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaCBWTSBSZWRvXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHVibGlzaGluZ1N0YXRlID09ICdjb21wbGV0ZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgY29tcGxldGVkXCIgKm5nSWY9XCJmbG9vckRhdGE/LnZlcmlmaWNhdGlvblN0YXR1c1wiPlB1Ymxpc2hlZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZmxvb3JEYXRhPy52ZXJpZmljYXRpb25TdGF0dXNcIiBcclxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSB0ZXh0LW5vd3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwdWJsaXNoKClcIj5cclxuICAgICAgICAgICAgICAgICAgUHVibGlzaFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gUmV2b2tlIEJ1dHRvbiAtLT5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJyZXZva2VUYXNrKClcIiAqbmdJZj1cIlsndGFza0Fzc2lnbmVkJ10uaW5jbHVkZXModGFza1N0eWxlLmZpeHR1cmUuY2xhc3MpICYmICFlZGl0Rml4dHVyZVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcmVkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtZS0yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzY0MF81NTk0KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICBkPVwiTTYuNjY2NjkgMTAuMDAxM0gxMy4zMzM0TTE4LjMzMzQgMTAuMDAxM0MxOC4zMzM0IDE0LjYwMzcgMTQuNjAyNCAxOC4zMzQ2IDEwIDE4LjMzNDZDNS4zOTc2NSAxOC4zMzQ2IDEuNjY2NjkgMTQuNjAzNyAxLjY2NjY5IDEwLjAwMTNDMS42NjY2OSA1LjM5ODkzIDUuMzk3NjUgMS42Njc5NyAxMCAxLjY2Nzk3QzE0LjYwMjQgMS42Njc5NyAxOC4zMzM0IDUuMzk4OTMgMTguMzMzNCAxMC4wMDEzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNjQwXzU1OTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICBSZXZva2VcclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBuZ2JBY2NvcmRpb25CdXR0b24+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgbmdiQWNjb3JkaW9uQ29sbGFwc2U+XHJcbiAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHk+XHJcbiAgICAgICAgICAgIDxkaXYgaWQ9XCJoZWFkZXJcIiBjbGFzcz1cInJvdyBteC0wIGdhcC0zXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBQbGFubyBDb21wbGV0aW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjdXJzb3I6IHVuc2V0O1wiIGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgUGxhbm8gQ29tcGxldGlvbiAlXHJcbiAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cIiUgb2Ygb3ZlcmFsbCBwbGFub2dyYW0gY29tcGxldGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTUxN18xMjk4MDUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkgMTJWOU05IDZIOS4wMDc1TTE2LjUgOUMxNi41IDEzLjE0MjEgMTMuMTQyMSAxNi41IDkgMTYuNUM0Ljg1Nzg2IDE2LjUgMS41IDEzLjE0MjEgMS41IDlDMS41IDQuODU3ODYgNC44NTc4NiAxLjUgOSAxLjVDMTMuMTQyMSAxLjUgMTYuNSA0Ljg1Nzg2IDE2LjUgOVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTUxN18xMjk4MDVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiIHN0eWxlPVwiaGVpZ2h0OiA0cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIiBbbmdDbGFzc109XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrSW5mbz8ucGxhbm9Qcm9ncmVzcyA8PSA1MFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnYmctd2FybmluZydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFza0luZm8/LnBsYW5vUHJvZ3Jlc3MgPT09IDc1XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdiZy1wcmltYXJ5J1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYmctc3VjY2VzcydcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgcm9sZT1cInByb2dyZXNzYmFyXCIgW3N0eWxlXT1cIid3aWR0aDonICsgdGFza0luZm8/LnBsYW5vUHJvZ3Jlc3MgKyAnJSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbm93XT1cInRhc2tJbmZvPy5wbGFub1Byb2dyZXNzXCIgYXJpYS12YWx1ZW1pbj1cIjBcIiBhcmlhLXZhbHVlbWF4PVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPnt7IHRhc2tJbmZvPy5wbGFub1Byb2dyZXNzIH19JTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gTGF5b3V0IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJjdXJzb3I6IHVuc2V0O1wiIGNsYXNzPVwiY29sIGZpbHRlci10YWJcIj5cclxuICAgICAgICAgICAgICAgIDxoMz48Yj57eyBzdG9yZU1ldHJpY3MuZmxvb3JDb3VudCB9fTwvYj4gTGF5b3V0PC9oMz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRpY2F0b3IgbXQtMlwiIFtuZ0NsYXNzXT1cInRhc2tTdHlsZS5sYXlvdXQuY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCIgW2hpZGRlbl09XCJ0YXNrU3R5bGUubGF5b3V0Lm5hbWUgIT09ICdSZWRvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80OTg0XzI3NTY5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMC41IDIuMDAwNzdWNS4wMDA3N00wLjUgNS4wMDA3N0gzLjVNMC41IDUuMDAwNzdMMi44MiAyLjgyMDc3QzMuMzU3MzcgMi4yODMxMyA0LjAyMjE5IDEuODkwMzcgNC43NTI0IDEuNjc5MTZDNS40ODI2MiAxLjQ2Nzk0IDYuMjU0NDUgMS40NDUxNSA2Ljk5NTg2IDEuNjEyOUM3LjczNzI3IDEuNzgwNjUgOC40MjQxIDIuMTMzNDkgOC45OTIyNyAyLjYzODQ4QzkuNTYwNDMgMy4xNDM0NyA5Ljk5MTQyIDMuNzg0MTYgMTAuMjQ1IDQuNTAwNzdNMTEuNSAxMC4wMDA4VjcuMDAwNzdNMTEuNSA3LjAwMDc3SDguNU0xMS41IDcuMDAwNzdMOS4xOCA5LjE4MDc3QzguNjQyNjMgOS43MTg0MSA3Ljk3NzgxIDEwLjExMTIgNy4yNDc2IDEwLjMyMjRDNi41MTczOCAxMC41MzM2IDUuNzQ1NTUgMTAuNTU2NCA1LjAwNDE0IDEwLjM4ODZDNC4yNjI3MyAxMC4yMjA5IDMuNTc1OSA5Ljg2ODA1IDMuMDA3NzMgOS4zNjMwNkMyLjQzOTU3IDguODU4MDcgMi4wMDg1OCA4LjIxNzM4IDEuNzU1IDcuNTAwNzdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3QTVBRjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQ5ODRfMjc1NjlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwidGFza1N0eWxlLmxheW91dC5uYW1lICE9PSAnRmxhZ2dlZCdcIiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMiA3LjVDMiA3LjUgMi41IDcgNCA3QzUuNSA3IDYuNSA4IDggOEM5LjUgOCAxMCA3LjUgMTAgNy41VjEuNUMxMCAxLjUgOS41IDIgOCAyQzYuNSAyIDUuNSAxIDQgMUMyLjUgMSAyIDEuNSAyIDEuNVY3LjVaTTIgNy41VjExXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAge3sgdGFza1N0eWxlLmxheW91dC5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBGaXh0dXJlcyAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiY3Vyc29yOiB1bnNldDtcIiBjbGFzcz1cImNvbCBmaWx0ZXItdGFiXCI+XHJcbiAgICAgICAgICAgICAgICA8aDM+PGI+e3sgc3RvcmVNZXRyaWNzLmZpeHR1cmVDb3VudCB9fTwvYj4gRml4dHVyZXM8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZGljYXRvciBtdC0yXCIgW25nQ2xhc3NdPVwidGFza1N0eWxlLmZpeHR1cmUuY2xhc3NcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0yXCIgW2hpZGRlbl09XCJ0YXNrU3R5bGUuZml4dHVyZS5uYW1lICE9PSAnUmVkbydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiB2aWV3Qm94PVwiMCAwIDEyIDEyXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDk4NF8yNzU2OSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTAuNSAyLjAwMDc3VjUuMDAwNzdNMC41IDUuMDAwNzdIMy41TTAuNSA1LjAwMDc3TDIuODIgMi44MjA3N0MzLjM1NzM3IDIuMjgzMTMgNC4wMjIxOSAxLjg5MDM3IDQuNzUyNCAxLjY3OTE2QzUuNDgyNjIgMS40Njc5NCA2LjI1NDQ1IDEuNDQ1MTUgNi45OTU4NiAxLjYxMjlDNy43MzcyNyAxLjc4MDY1IDguNDI0MSAyLjEzMzQ5IDguOTkyMjcgMi42Mzg0OEM5LjU2MDQzIDMuMTQzNDcgOS45OTE0MiAzLjc4NDE2IDEwLjI0NSA0LjUwMDc3TTExLjUgMTAuMDAwOFY3LjAwMDc3TTExLjUgNy4wMDA3N0g4LjVNMTEuNSA3LjAwMDc3TDkuMTggOS4xODA3N0M4LjY0MjYzIDkuNzE4NDEgNy45Nzc4MSAxMC4xMTEyIDcuMjQ3NiAxMC4zMjI0QzYuNTE3MzggMTAuNTMzNiA1Ljc0NTU1IDEwLjU1NjQgNS4wMDQxNCAxMC4zODg2QzQuMjYyNzMgMTAuMjIwOSAzLjU3NTkgOS44NjgwNSAzLjAwNzczIDkuMzYzMDZDMi40Mzk1NyA4Ljg1ODA3IDIuMDA4NTggOC4yMTczOCAxLjc1NSA3LjUwMDc3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjN0E1QUY4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80OTg0XzI3NTY5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBbaGlkZGVuXT1cInRhc2tTdHlsZS5maXh0dXJlLm5hbWUgIT09ICdGbGFnZ2VkJ1wiIGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yIDcuNUMyIDcuNSAyLjUgNyA0IDdDNS41IDcgNi41IDggOCA4QzkuNSA4IDEwIDcuNSAxMCA3LjVWMS41QzEwIDEuNSA5LjUgMiA4IDJDNi41IDIgNS41IDEgNCAxQzIuNSAxIDIgMS41IDIgMS41VjcuNVpNMiA3LjVWMTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyB0YXNrU3R5bGUuZml4dHVyZS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBWaXN1YWwgTWVyY2hhbmRpc2UgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImN1cnNvcjogdW5zZXQ7XCIgY2xhc3M9XCJjb2wgZmlsdGVyLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAgPGgzPjxiPnt7IHN0b3JlTWV0cmljcy52bUNvdW50IH19PC9iPiBWaXN1YWwgTWVyY2hhbmRpc2U8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZGljYXRvciBtdC0yXCIgW25nQ2xhc3NdPVwidGFza1N0eWxlLnZtLmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMlwiIFtoaWRkZW5dPVwidGFza1N0eWxlLnZtLm5hbWUgIT09ICdSZWRvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80OTg0XzI3NTY5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMC41IDIuMDAwNzdWNS4wMDA3N00wLjUgNS4wMDA3N0gzLjVNMC41IDUuMDAwNzdMMi44MiAyLjgyMDc3QzMuMzU3MzcgMi4yODMxMyA0LjAyMjE5IDEuODkwMzcgNC43NTI0IDEuNjc5MTZDNS40ODI2MiAxLjQ2Nzk0IDYuMjU0NDUgMS40NDUxNSA2Ljk5NTg2IDEuNjEyOUM3LjczNzI3IDEuNzgwNjUgOC40MjQxIDIuMTMzNDkgOC45OTIyNyAyLjYzODQ4QzkuNTYwNDMgMy4xNDM0NyA5Ljk5MTQyIDMuNzg0MTYgMTAuMjQ1IDQuNTAwNzdNMTEuNSAxMC4wMDA4VjcuMDAwNzdNMTEuNSA3LjAwMDc3SDguNU0xMS41IDcuMDAwNzdMOS4xOCA5LjE4MDc3QzguNjQyNjMgOS43MTg0MSA3Ljk3NzgxIDEwLjExMTIgNy4yNDc2IDEwLjMyMjRDNi41MTczOCAxMC41MzM2IDUuNzQ1NTUgMTAuNTU2NCA1LjAwNDE0IDEwLjM4ODZDNC4yNjI3MyAxMC4yMjA5IDMuNTc1OSA5Ljg2ODA1IDMuMDA3NzMgOS4zNjMwNkMyLjQzOTU3IDguODU4MDcgMi4wMDg1OCA4LjIxNzM4IDEuNzU1IDcuNTAwNzdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM3QTVBRjhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQ5ODRfMjc1NjlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjEyXCIgaGVpZ2h0PVwiMTJcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwidGFza1N0eWxlLnZtLm5hbWUgIT09ICdGbGFnZ2VkJ1wiIGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTJcIiBoZWlnaHQ9XCIxMlwiIHZpZXdCb3g9XCIwIDAgMTIgMTJcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yIDcuNUMyIDcuNSAyLjUgNyA0IDdDNS41IDcgNi41IDggOCA4QzkuNSA4IDEwIDcuNSAxMCA3LjVWMS41QzEwIDEuNSA5LjUgMiA4IDJDNi41IDIgNS41IDEgNCAxQzIuNSAxIDIgMS41IDIgMS41VjcuNVpNMiA3LjVWMTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyB0YXNrU3R5bGUudm0ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBCb2R5IC0tPlxyXG4gICAgPGRpdiBpZD1cImJvZHlcIiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICA8IS0tIExlZnQgQ29sdW1uIC0tPlxyXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2NvbGxhcHNlZC1jb2wnOiBpc0xlZnRQYW5lbENvbGxhcHNlZCwgJ2NvbC0zJzogIWlzTGVmdFBhbmVsQ29sbGFwc2VkLCdkLW5vbmUnOiBlZGl0Rml4dHVyZSAgfVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzLWNhcmRcIj5cclxuICAgICAgICAgIDxmb3JtIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IGlzTGVmdFBhbmVsQ29sbGFwc2VkIH1cIiBbZm9ybUdyb3VwXT1cImxheW91dEZvcm1cIj5cclxuICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb24gYWNjb3JkaW9uPVwiTmdiQWNjb3JkaW9uXCI+XHJcbiAgICAgICAgICAgICAgPCEtLSBXYWxscyBTZWN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtV2FsbHMuY29udHJvbHMubGVuZ3RoOyBlbHNlIGFkZFdhbGxBY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUFycmF5TmFtZT1cIndhbGxzXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdldEZvcm1XYWxscy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiIFtuZ2JBY2NvcmRpb25JdGVtXT1cImkudG9TdHJpbmcoKVwiIGNsYXNzPVwibWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiIG5nYkFjY29yZGlvbkhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJtYWluaGVhZGluZyBwLTBcIiBuZ2JBY2NvcmRpb25CdXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMiB3YWxsLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdyb3VwLmdldChcImVsZW1lbnRUeXBlXCIpPy52YWx1ZSB8IHRpdGxlY2FzZSB9fSB7eyBncm91cC5nZXQoXCJlbGVtZW50TnVtYmVyXCIpPy52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZihsYXlvdXRGb3JtLmVuYWJsZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTFcIiBuZ2JUb29sdGlwPVwiUm90YXRlIHRoaXMgd2FsbC5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGVXYWxsKGdldEVsZW1lbnROdW1iZXIoZ3JvdXApISk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjczNzM1IDguMjUwMTFDNC4xMjE5MyA4LjI0MzYyIDQuNDQzNzcgOC41Mjc3NiA0LjQ5MzM4IDguODk5OThMNC40OTk5IDguOTg3MzVMNC41MDI2MiA5LjE1NTE2QzQuNTg0MzQgMTEuNTc0MSA2LjU3MjQzIDEzLjUgOSAxMy41QzkuMTQwMjIgMTMuNSA5LjI3OTUxIDEzLjQ5MzYgOS40MTc1NiAxMy40ODA5TDkuMjE5NjcgMTMuMjgwM0M4LjkyNjc4IDEyLjk4NzQgOC45MjY3OCAxMi41MTI2IDkuMjE5NjcgMTIuMjE5N0M5LjUxMjU3IDExLjkyNjggOS45ODc0NCAxMS45MjY4IDEwLjI4MDMgMTIuMjE5N0wxMS43ODAzIDEzLjcxOTdDMTIuMDczMiAxNC4wMTI2IDEyLjA3MzIgMTQuNDg3NCAxMS43ODAzIDE0Ljc4MDNMMTAuMjgwMyAxNi4yODAzQzkuOTg3NDQgMTYuNTczMiA5LjUxMjU3IDE2LjU3MzIgOS4yMTk2NyAxNi4yODAzQzguOTI2NzggMTUuOTg3NCA4LjkyNjc4IDE1LjUxMjYgOS4yMTk2NyAxNS4yMTk3TDkuNDU4MzcgMTQuOTgyN0M5LjMwNjQ2IDE0Ljk5NDIgOS4xNTM1OSAxNSA5IDE1QzUuODI2NTMgMTUgMy4yMTY2NSAxMi41MzIxIDMuMDEyNSA5LjM4Mjg5TDMuMDAzMTUgOS4xOTMxNEwzLjAwMDExIDkuMDEyNjVDMi45OTMxMiA4LjU5ODQ5IDMuMzIzMiA4LjI1NzA5IDMuNzM3MzUgOC4yNTAxMVpNOC43ODAzMyAxLjcxOTY3QzkuMDUwNyAxLjk5MDAzIDkuMDcxNDkgMi40MTU0NiA4Ljg0MjcyIDIuNzA5NjdMOC43ODAzMyAyLjc4MDMzTDguNTQxODcgMy4wMTcyNkM4LjY5MzcxIDMuMDA1NzggOC44NDY1IDMgOSAzQzEyLjMxMzcgMyAxNSA1LjY4NjI5IDE1IDlDMTUgOS40MTQyMSAxNC42NjQyIDkuNzUgMTQuMjUgOS43NUMxMy44MzU4IDkuNzUgMTMuNSA5LjQxNDIxIDEzLjUgOUMxMy41IDYuNTE0NzIgMTEuNDg1MyA0LjUgOSA0LjVDOC44NTk3IDQuNSA4LjcyMDM0IDQuNTA2NCA4LjU4MjIxIDQuNTE5MDlMOC43ODAzMyA0LjcxOTY3QzkuMDczMjMgNS4wMTI1NiA5LjA3MzIzIDUuNDg3NDQgOC43ODAzMyA1Ljc4MDMzQzguNTA5OTcgNi4wNTA2OSA4LjA4NDU1IDYuMDcxNDkgNy43OTAzMyA1Ljg0MjcyTDcuNzE5NjcgNS43ODAzM0w2LjIxOTY3IDQuMjgwMzNDNS45NDkzMSA0LjAwOTk3IDUuOTI4NTEgMy41ODQ1NCA2LjE1NzI4IDMuMjkwMzNMNi4yMTk2NyAzLjIxOTY3TDcuNzE5NjcgMS43MTk2N0M4LjAxMjU3IDEuNDI2NzggOC40ODc0NCAxLjQyNjc4IDguNzgwMzMgMS43MTk2N1pcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIwLjAwMDY0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTFcIiBuZ2JUb29sdGlwPVwiSW5zZXJ0IG5ldyB3YWxsIGJlbG93LlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld1dhbGwoZ2V0RWxlbWVudE51bWJlcihncm91cCkhKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF82Ml84KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOSA5Ljc1QzExLjA3MDcgOS43NSAxMi43NSAxMS40MjkzIDEyLjc1IDEzLjVDMTIuNzUgMTUuNTcwOCAxMS4wNzA3IDE3LjI1IDkgMTcuMjVDNi45MjkyNSAxNy4yNSA1LjI1IDE1LjU3MDggNS4yNSAxMy41QzUuMjUgMTEuNDI5MyA2LjkyOTI1IDkuNzUgOSA5Ljc1Wk05Ljc1IDExLjI1SDguMjVWMTIuNzQ5M0w2Ljc1IDEyLjc1VjE0LjI1TDguMjUgMTQuMjQ5M1YxNS43NUg5Ljc1VjE0LjI0OTNMMTEuMjUgMTQuMjVWMTIuNzVMOS43NSAxMi43NDkzVjExLjI1Wk0xNSAyLjI1QzE1LjQxNCAyLjI1IDE1Ljc1IDIuNTg2IDE1Ljc1IDNWNy41QzE1Ljc1IDcuOTE0IDE1LjQxNCA4LjI1IDE1IDguMjVIM0MyLjU4NiA4LjI1IDIuMjUgNy45MTQgMi4yNSA3LjVWM0MyLjI1IDIuNTg2IDIuNTg2IDIuMjUgMyAyLjI1SDE1Wk0zLjc1IDMuNzVWNi43NUgxNC4yNVYzLjc1SDMuNzVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzQ3NTQ2N1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNjJfOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0xXCIgbmdiVG9vbHRpcD1cIlJlbW92ZSB0aGlzIHdhbGwgYW5kIGl0cyBmaXh0dXJlcy5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVXYWxsKGdldEVsZW1lbnROdW1iZXIoZ3JvdXApISk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNjNfMjUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMC43MDk0IDEuNUMxMS4zNTUxIDEuNSAxMS45MjgzIDEuOTEzMTQgMTIuMTMyNCAyLjUyNTY1TDEyLjU0MDYgMy43NUgxNUMxNS40MTQyIDMuNzUgMTUuNzUgNC4wODU3OSAxNS43NSA0LjVDMTUuNzUgNC45MTQyIDE1LjQxNDIgNS4yNDk5OSAxNSA1LjI1TDE0Ljk5ODEgNS4zMDM0NEwxNC4zNDc2IDE0LjQxMDNDMTQuMjYzNSAxNS41ODc4IDEzLjI4MzggMTYuNSAxMi4xMDM0IDE2LjVINS44OTY2OEM0LjcxNjI0IDE2LjUgMy43MzY1IDE1LjU4NzggMy42NTI0IDE0LjQxMDNMMy4wMDE5MSA1LjMwMzQ0QzMuMDAwNjIgNS4yODU1MSAyLjk5OTk4IDUuMjY3NjkgMi45OTk5NyA1LjI1QzIuNTg1NzcgNS4yNDk5OSAyLjI1IDQuOTE0MiAyLjI1IDQuNUMyLjI1IDQuMDg1NzkgMi41ODU3OSAzLjc1IDMgMy43NUg1LjQ1OTQzTDUuODY3NTQgMi41MjU2NUM2LjA3MTcyIDEuOTEzMTQgNi42NDQ5MyAxLjUgNy4yOTA1NyAxLjVIMTAuNzA5NFpNMTMuNDk4MSA1LjI1SDQuNTAxOTFMNS4xNDg1OCAxNC4zMDM0QzUuMTc2NjIgMTQuNjk2IDUuNTAzMiAxNSA1Ljg5NjY4IDE1SDEyLjEwMzRDMTIuNDk2OCAxNSAxMi44MjM0IDE0LjY5NiAxMi44NTE0IDE0LjMwMzRMMTMuNDk4MSA1LjI1Wk03LjUgNy41QzcuODg0NjQgNy41IDguMjAxNjMgNy43ODk1MiA4LjI0NDk1IDguMTYyNTNMOC4yNSA4LjI1VjEyQzguMjUgMTIuNDE0MiA3LjkxNDIyIDEyLjc1IDcuNSAxMi43NUM3LjExNTM3IDEyLjc1IDYuNzk4MzcgMTIuNDYwNSA2Ljc1NTA1IDEyLjA4NzVMNi43NSAxMlY4LjI1QzYuNzUgNy44MzU3OCA3LjA4NTc4IDcuNSA3LjUgNy41Wk0xMC41IDcuNUMxMC45MTQyIDcuNSAxMS4yNSA3LjgzNTc4IDExLjI1IDguMjVWMTJDMTEuMjUgMTIuNDE0MiAxMC45MTQyIDEyLjc1IDEwLjUgMTIuNzVDMTAuMDg1OCAxMi43NSA5Ljc1IDEyLjQxNDIgOS43NSAxMlY4LjI1QzkuNzUgNy44MzU3OCAxMC4wODU4IDcuNSAxMC41IDcuNVpNMTAuNzA5NCAzSDcuMjkwNTdMNy4wNDA1NyAzLjc1SDEwLjk1OTVMMTAuNzA5NCAzWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIiNGMzJCMkJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzYzXzI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Db2xsYXBzZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JBY2NvcmRpb25Cb2R5IGNsYXNzPVwicHMtMCBwZS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDUwcHhcIiBkbmREcm9wem9uZSAoZG5kRHJvcCk9XCJvbkRyb3AoJGV2ZW50LCBpKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEZpeHR1cmVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0Rm9ybUZpeHR1cmVzKGkpLmNvbnRyb2xzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImZpeHR1cmVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaXh0dXJlIG9mIGdldEZvcm1GaXh0dXJlcyhpKS5jb250cm9sczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRuZERyb3B6b25lIChkbmREcm9wKT1cIm9uRHJvcCgkZXZlbnQsIGksIGopXCIgW2Zvcm1Hcm91cE5hbWVdPVwialwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RuZERyYWdnYWJsZV09XCJ7IHdhbGxJbmRleDogaSwgZml4dHVyZUluZGV4OiBqIH1cIiBbZG5kRWZmZWN0QWxsb3dlZF09XCInYWxsJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3cgZy0wIG1iLTVcIiBbZG5kRGlzYWJsZURyYWdJZl09XCJsYXlvdXRGb3JtLmRpc2FibGVkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGRuZERyYWdJbWFnZVJlZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7IGN1cnNvcjogbGF5b3V0Rm9ybS5kaXNhYmxlZCA/ICdkZWZhdWx0JyA6ICdtb3ZlJywgb3BhY2l0eTogJzAuNScgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyNXB4XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIm0gNC40OTYwOTQgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAtNiA2IGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIC02IDYgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gMCAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJncmV5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1yZWFjdGl2ZS1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiZml4dHVyZUNvbmZpZ0lkXCIgW2lkRmllbGRdPVwiJ19pZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZUZpZWxkXT1cIiduYW1lJ1wiIFtkYXRhXT1cImZpeHR1cmVUZW1wbGF0ZXNcIiBbbGFiZWxdPVwiJ0ZpeHR1cmUgJyArIChqICsgMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3ViVGV4dEZpZWxkXT1cIidzdWJ0ZXh0J1wiIFtzZWFyY2hdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtZW5kIGp1c3RpZnktY29udGVudC1jZW50ZXIgaC0xMDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJyZW1vdmVGaXh0dXJlKCd3YWxsJywgaiwgaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiAxOHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDEwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMUwxIDlNMSAxTDkgOVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJsaW5rLWJ0blwiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdGaXh0dXJlKCd3YWxsJywgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBmaXh0dXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBzdHlsZT1cImJvcmRlci10b3A6IDFweCBkYXNoZWQgIzAwMDAwMDtcIiAvPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBPdGhlciBFbGVtZW50cyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFdhbGxPdGhlckVsZW1lbnRzKGkpLmNvbnRyb2xzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cIm90aGVyRWxlbWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpeHR1cmUgb2YgZ2V0V2FsbE90aGVyRWxlbWVudHMoaSkuY29udHJvbHM7IGxldCBqID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbZm9ybUdyb3VwTmFtZV09XCJqXCIgY2xhc3M9XCJyb3cgZy0wIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTExXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIG1iLTFcIj5FbGVtZW50IHt7IGogKyAxIH19PC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIERyb3Bkb3duIGJvdW5kIHRvICd0eXBlJyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJvdGhlckVsZW1lbnRMaXN0XCIgW2lkXT1cIidlbGVtZW50TGFiZWwnICsgalwiIGZvcm1Db250cm9sTmFtZT1cInR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNob3cgY3VzdG9tIHRleHQgaW5wdXQgb25seSB3aGVuICdPdGhlcnMnIGlzIHNlbGVjdGVkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiKGZpeHR1cmUuZ2V0KCd0eXBlJyk/LnZhbHVlKSA9PT0gJ090aGVycydcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG10LTJcIiBmb3JtQ29udHJvbE5hbWU9XCJjdXN0b21OYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBjdXN0b20gZWxlbWVudCBuYW1lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwicmVtb3ZlT3RoZXJFbGVtZW50KCd3YWxsJywgaiwgaSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyOyBtYXJnaW4tYm90dG9tOiAxOHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDEwIDEwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMUwxIDlNMSAxTDkgOVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJsaW5rLWJ0blwiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdPdGhlckVsZW1lbnRzKCd3YWxsJywgaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYWRkV2FsbEFjdGlvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImFkZE5ld1dhbGwoMClcIiBbY2xhc3MuZGlzYWJsZWQtY2xpY2tdPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgdy0xMDAgcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgIEluc2VydCBuZXcgd2FsbFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgPGhyIHN0eWxlPVwiYm9yZGVyLXRvcDogMXB4IGRhc2hlZCAjMDAwMDAwO1wiIC8+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRmxvb3IgU2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IFtuZ2JBY2NvcmRpb25JdGVtXT1cIidmbG9vcidcIiBjbGFzcz1cIm1iLTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiBuZ2JBY2NvcmRpb25IZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibWFpbmhlYWRpbmcgcC0wXCIgbmdiQWNjb3JkaW9uQnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWUtMiB3YWxsLWxhYmVsXCI+Rmxvb3I8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkNvbGxhcHNlPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IG5nYkFjY29yZGlvbkJvZHkgY2xhc3M9XCJwcy0wIHBlLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWluLWhlaWdodDogNTBweFwiIGRuZERyb3B6b25lIChkbmREcm9wKT1cIm9uRHJvcCgkZXZlbnQsICdmbG9vcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmxvb3IgRml4dHVyZXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtRmxvb3JGaXh0dXJlcy5jb250cm9scy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJmbG9vckZpeHR1cmVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaXh0dXJlIG9mIGdldEZvcm1GbG9vckZpeHR1cmVzLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZG5kRHJvcHpvbmUgKGRuZERyb3ApPVwib25Ecm9wKCRldmVudCwgJ2Zsb29yJywgailcIiBbZm9ybUdyb3VwTmFtZV09XCJqXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG5kRHJhZ2dhYmxlXT1cInsgd2FsbEluZGV4OiAnZmxvb3InLCBmaXh0dXJlSW5kZXg6IGogfVwiIFtkbmRFZmZlY3RBbGxvd2VkXT1cIidhbGwnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG5kRGlzYWJsZURyYWdJZl09XCJsYXlvdXRGb3JtLmRpc2FibGVkXCIgY2xhc3M9XCJyb3cgZy0wIG1iLTVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgZG5kRHJhZ0ltYWdlUmVmIHN0eWxlPVwiY3Vyc29yOiBtb3ZlOyBvcGFjaXR5OiAwLjVcIiB3aWR0aD1cIjI1cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJtIDQuNDk2MDk0IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDYgMCBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gLTYgNiBjIC0wLjgzMjAzMiAwIC0xLjUgMC42NzE4NzUgLTEuNSAxLjUgcyAwLjY2Nzk2OCAxLjUgMS41IDEuNSBjIDAuODI4MTI1IDAgMS41IC0wLjY3MTg3NSAxLjUgLTEuNSBzIC0wLjY3MTg3NSAtMS41IC0xLjUgLTEuNSB6IG0gNiAwIGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSAtNiA2IGMgLTAuODMyMDMyIDAgLTEuNSAwLjY3MTg3NSAtMS41IDEuNSBzIDAuNjY3OTY4IDEuNSAxLjUgMS41IGMgMC44MjgxMjUgMCAxLjUgLTAuNjcxODc1IDEuNSAtMS41IHMgLTAuNjcxODc1IC0xLjUgLTEuNSAtMS41IHogbSA2IDAgYyAtMC44MzIwMzIgMCAtMS41IDAuNjcxODc1IC0xLjUgMS41IHMgMC42Njc5NjggMS41IDEuNSAxLjUgYyAwLjgyODEyNSAwIDEuNSAtMC42NzE4NzUgMS41IC0xLjUgcyAtMC42NzE4NzUgLTEuNSAtMS41IC0xLjUgeiBtIDAgMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiZ3JleVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImZpeHR1cmVDb25maWdJZFwiIFtpZEZpZWxkXT1cIidfaWQnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25hbWVGaWVsZF09XCInbmFtZSdcIiBbZGF0YV09XCJmaXh0dXJlVGVtcGxhdGVzXCIgW2xhYmVsXT1cIidGaXh0dXJlICcgKyAoaiArIDEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaF09XCJ0cnVlXCIgW3N1YlRleHRGaWVsZF09XCInc3VidGV4dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGliLXJlYWN0aXZlLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwicmVtb3ZlRml4dHVyZSgnZmxvb3InLCBqKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7IG1hcmdpbi1ib3R0b206IDE4cHhcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTBcIiB2aWV3Qm94PVwiMCAwIDEwIDEwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMUwxIDlNMSAxTDkgOVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJsaW5rLWJ0blwiIFtjbGFzcy5kaXNhYmxlZC1jbGlja109XCJsYXlvdXRGb3JtLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhZGROZXdGaXh0dXJlKCdmbG9vcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgZml4dHVyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aHIgc3R5bGU9XCJib3JkZXItdG9wOiAxcHggZGFzaGVkICMwMDAwMDA7XCIgLz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRmxvb3IgT3RoZXIgRWxlbWVudHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLmNvbnRyb2xzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZm9ybUFycmF5TmFtZT1cImZsb29yT3RoZXJFbGVtZW50c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZml4dHVyZSBvZiBnZXRGb3JtRmxvb3JPdGhlckVsZW1lbnRzLmNvbnRyb2xzOyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2Zvcm1Hcm91cE5hbWVdPVwialwiIGNsYXNzPVwicm93IGctMCBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBtYi0xXCI+RWxlbWVudCB7eyBqICsgMSB9fTwvbGFiZWw+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBEcm9wZG93biBmb3IgdHlwZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcmVhY3RpdmUtc2VsZWN0IFtpZEZpZWxkXT1cIid2YWx1ZSdcIiBbbmFtZUZpZWxkXT1cIidsYWJlbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJvdGhlckVsZW1lbnRMaXN0XCIgW2lkXT1cIidmbG9vckVsZW1lbnRMYWJlbCcgKyBqXCIgZm9ybUNvbnRyb2xOYW1lPVwidHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcmVhY3RpdmUtc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQ29uZGl0aW9uYWwgaW5wdXQgZm9yIGN1c3RvbSBuYW1lIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiKGZpeHR1cmUuZ2V0KCd0eXBlJyk/LnZhbHVlKSA9PT0gJ090aGVycydcIiB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG10LTJcIiBmb3JtQ29udHJvbE5hbWU9XCJjdXN0b21OYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBjdXN0b20gZWxlbWVudCBuYW1lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWVuZCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGgtMTAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwicmVtb3ZlT3RoZXJFbGVtZW50KCdmbG9vcicsIGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjsgbWFyZ2luLWJvdHRvbTogMThweFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTBcIiBoZWlnaHQ9XCIxMFwiIHZpZXdCb3g9XCIwIDAgMTAgMTBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxTDEgOU0xIDFMOSA5XCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImxpbmstYnRuXCIgW2NsYXNzLmRpc2FibGVkLWNsaWNrXT1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZE5ld090aGVyRWxlbWVudHMoJ2Zsb29yJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZCBlbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gQ2VudGVyIENvbHVtbiAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbCBvdmVyZmxvdy1oaWRkZW4gcG9zaXRpb24tcmVsYXRpdmVcIiBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBlZGl0Rml4dHVyZSB9XCI+XHJcbiAgICAgICAgPGRpdiBpZD1cImNhbnZhcy1jYXJkXCIgY2xhc3M9XCJjLWNhcmQgcG9zaXRpb24tcmVsYXRpdmVcIiAjY2FudmFzQ29udGFpbmVyPlxyXG4gICAgICAgICAgPCEtLSBDYW52YXMgVmlldyAtLT5cclxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogc2VsZWN0ZWRWaWV3ID09PSAndHJlZScgfVwiPlxyXG4gICAgICAgICAgICA8Y2FudmFzIGlkPVwiYmFzZS1jYW52YXNcIiAjYmFzZUNhbnZhcz48L2NhbnZhcz5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gVHJlZSBWaWV3IC0tPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNlbGVjdGVkVmlldyA9PT0gJ3RyZWUnXCIgY2xhc3M9XCJ3LTEwMFwiPlxyXG4gICAgICAgICAgICA8c3RvcmUtcGxhbm8tdHJlZS12aWV3IFthbGxGaXh0dXJlXT1cImFsbEZpeHR1cmVzXCI+PC9zdG9yZS1wbGFuby10cmVlLXZpZXc+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFRvcCBDb250cm9scyAtLT5cclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0b3A6IDI0cHg7IGxlZnQ6IDI2cHg7IHBvc2l0aW9uOiBhYnNvbHV0ZTtcIiBpZD1cInNlZ21lbnQtYnRuXCIgY2xhc3M9XCJwYi01XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCBkLWZsZXgganVzdGlmeS1jb250ZW50LXN0YXJ0IGdhcC00XCI+XHJcbiAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzIGN1c3RvbS10YWJzIGQtZmxleFwiIHN0eWxlPVwid2lkdGg6IDIwMHB4OyBtYXJnaW46IDBcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGZsZXgtZmlsbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2LWxpbmsgdy0xMDAgaC0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkVmlldyA9PT0gJ2RldGFpbCdcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFZpZXcgPSAnZGV0YWlsJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIERldGFpbCBWaWV3XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGZsZXgtZmlsbFwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibmF2LWxpbmsgdy0xMDAgaC0xMDBcIiBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkVmlldyA9PT0gJ3RyZWUnXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0ZWRWaWV3ID0gJ3RyZWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVHJlZSBWaWV3XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gRW50cmFuY2UgQnV0dG9uIC0tPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImxheW91dEZvcm0uZW5hYmxlZFwiIG5nYlRvb2x0aXA9XCJZb3UgY2FuIGFkZCB1cCB0byB0d28gZW50cmFuY2VzLlwiIHN0eWxlPVwidG9wOiAyNHB4OyByaWdodDogMTkwcHhcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCIgW2Rpc2FibGVUb29sdGlwXT1cImdldEVudHJhbmNlcz8ubGVuZ3RoIDwgMlwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldEVudHJhbmNlcz8ubGVuZ3RoID49IDJcIiAoY2xpY2spPVwiYWRkTmV3RW50cmFuY2UoKVwiPlxyXG4gICAgICAgICAgICAgIEFkZCBFbnRyYW5jZVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gRWRpdCBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwibGF5b3V0Rm9ybS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlRWRpdCB8fCBbJ3Rhc2tBc3NpZ25lZCcsJ3Jldmlld1BlbmRpbmcnXS5pbmNsdWRlcyh0YXNrU3R5bGUuZml4dHVyZS5jbGFzcylcIlxyXG4gICAgICAgICAgICBzdHlsZT1cInRvcDogMjRweDsgcmlnaHQ6IDE2NHB4XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgcG9zaXRpb24tYWJzb2x1dGUgYmctd2hpdGUgc2hhZG93LXNtXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tFZGl0KClcIj5cclxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xMzIyXzUzMjUpXCI+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICBkPVwiTTE0LjE2NjcgMi40OTk5M0MxNC4zODU2IDIuMjgxMDYgMTQuNjQ1NSAyLjEwNzQ0IDE0LjkzMTQgMS45ODg5OUMxNS4yMTc0IDEuODcwNTQgMTUuNTIzOSAxLjgwOTU3IDE1LjgzMzQgMS44MDk1N0MxNi4xNDI5IDEuODA5NTcgMTYuNDQ5NCAxLjg3MDU0IDE2LjczNTQgMS45ODg5OUMxNy4wMjE0IDIuMTA3NDQgMTcuMjgxMiAyLjI4MTA2IDE3LjUwMDEgMi40OTk5M0MxNy43MTkgMi43MTg4IDE3Ljg5MjYgMi45Nzg2MyAxOC4wMTEgMy4yNjQ2QzE4LjEyOTUgMy41NTA1NyAxOC4xOTA0IDMuODU3MDYgMTguMTkwNCA0LjE2NjU5QzE4LjE5MDQgNC40NzYxMiAxOC4xMjk1IDQuNzgyNjIgMTguMDExIDUuMDY4NTlDMTcuODkyNiA1LjM1NDU1IDE3LjcxOSA1LjYxNDM5IDE3LjUwMDEgNS44MzMyNkw2LjI1MDA4IDE3LjA4MzNMMS42NjY3NSAxOC4zMzMzTDIuOTE2NzUgMTMuNzQ5OUwxNC4xNjY3IDIuNDk5OTNaXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzEzMjJfNTMyNVwiPlxyXG4gICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICBFZGl0XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIFJvdGF0ZSBCdXR0b24gLS0+XHJcbiAgICAgICAgICA8YnV0dG9uIHN0eWxlPVwidG9wOiAyNHB4OyByaWdodDogOTRweFwiIHR5cGU9XCJidXR0b25cIiAqbmdJZj1cImxheW91dEZvcm0uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHBvc2l0aW9uLWFic29sdXRlIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJyb3RhdGVDYW52YXMoY2FudmFzLDkwKVwiPlxyXG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIiB2aWV3Qm94PVwiMCAwIDI2IDI2XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgZD1cIk02LjM2MjY1IDcuMTc4ODdMNy4xNzYyNSA2LjM2Mjg3TDUuOTA0MjUgNS4wOTIwN0w1LjA4OTQ1IDUuOTA1NjdMNi4zNjI2NSA3LjE3ODg3Wk0xNS42NzEgNi4zNjQwN0wxOS42Mzc5IDEwLjMzMDlMMjAuOTA5OSA5LjA1NzY5TDE2Ljk0NDIgNS4wOTA4N0wxNS42NzEgNi4zNjQwN1pNMTkuNjM3OSAxOC44MjU3TDE4LjgyNDMgMTkuNjM5M0wyMC4wOTYzIDIwLjkxMDFMMjAuOTA5OSAyMC4wOTc3TDE5LjYzNzkgMTguODI1N1pNMTAuMzI5NSAxOS42MzkzTDYuMzYyNjUgMTUuNjcyNUw1LjA5MDY1IDE2Ljk0NTdMOS4wNTYyNiAyMC45MTEzTDEwLjMyOTUgMTkuNjM5M1pNMTguODI0MyAxOS42MzkzQzE3LjY1NDMgMjAuODA4MSAxNi44NDA3IDIxLjYxOTMgMTYuMTQ1OSAyMi4xNDk3QzE1LjQ3MTUgMjIuNjY0NSAxNS4wMTU1IDIyLjgyODkgMTQuNTc2MyAyMi44Mjg5VjI0LjYyODlDMTUuNTY3NSAyNC42Mjg5IDE2LjQwMjcgMjQuMjE3MyAxNy4yMzY3IDIzLjU4MTNDMTguMDUwMyAyMi45NjA5IDE4Ljk2MzUgMjIuMDQ1MyAyMC4wOTYzIDIwLjkxMjVMMTguODI0MyAxOS42MzkzWk05LjA1NjI2IDIwLjkxMTNDMTAuMTg5MSAyMi4wNDUzIDExLjEwMjMgMjIuOTU5NyAxMS45MTU5IDIzLjU4MTNDMTIuNzQ5OSAyNC4yMTczIDEzLjU4NTEgMjQuNjI4OSAxNC41NzYzIDI0LjYyODlWMjIuODI4OUMxNC4xMzcxIDIyLjgyODkgMTMuNjgyMyAyMi42NjQ1IDEzLjAwNjcgMjIuMTQ5N0MxMi4zMTE5IDIxLjYxOTMgMTEuNDk4MyAyMC44MDgxIDEwLjMyOTUgMTkuNjM5M0w5LjA1NjI2IDIwLjkxMTNaTTE5LjYzNzkgMTAuMzMwOUMyMC44MDY3IDExLjQ5OTcgMjEuNjE3OSAxMi4zMTMzIDIyLjE0ODMgMTMuMDA4MUMyMi42NjMxIDEzLjY4MzcgMjIuODI3NSAxNC4xMzg1IDIyLjgyNzUgMTQuNTc3N0gyNC42Mjc1QzI0LjYyNzUgMTMuNTg2NSAyNC4yMTU5IDEyLjc1MTMgMjMuNTc5OSAxMS45MTczQzIyLjk1OTUgMTEuMTAzNyAyMi4wNDI3IDEwLjE5MDUgMjAuOTA5OSA5LjA1NzY5TDE5LjYzNzkgMTAuMzMwOVpNMjAuOTA5OSAyMC4wOTc3QzIyLjA0MzkgMTguOTYzNyAyMi45NTgzIDE4LjA1MTcgMjMuNTc5OSAxNy4yMzgxQzI0LjIxNTkgMTYuNDA0MSAyNC42Mjc1IDE1LjU2ODkgMjQuNjI3NSAxNC41Nzc3SDIyLjgyNzVDMjIuODI3NSAxNS4wMTY5IDIyLjY2MzEgMTUuNDcyOSAyMi4xNDgzIDE2LjE0NzNDMjEuNjE3OSAxNi44NDIxIDIwLjgwNjcgMTcuNjU1NyAxOS42Mzc5IDE4LjgyNTdMMjAuOTA5OSAyMC4wOTc3Wk03LjE3NjI1IDYuMzYyODdDOC4zNDYyNSA1LjE5NDA3IDkuMTU5ODUgNC4zODE2NyA5Ljg1NDY1IDMuODUxMjdDMTAuNTI5IDMuMzM2NDcgMTAuOTg1IDMuMTczMjcgMTEuNDI0MiAzLjE3MzI3VjEuMzcyMDdDMTAuNDMzIDEuMzcyMDcgOS41OTc4NSAxLjc4MzY3IDguNzYzODUgMi40MTk2N0M3Ljk0OTA1IDMuMDQxMjcgNy4wMzcwNSAzLjk1NTY3IDUuOTA0MjUgNS4wODg0N0w3LjE3NjI1IDYuMzYyODdaTTE2Ljk0NDIgNS4wOTA4N0MxNS44MTE0IDMuOTU2ODcgMTQuODk4MiAzLjA0MTI3IDE0LjA4NDYgMi40MTk2N0MxMy4yNTA2IDEuNzgzNjcgMTIuNDE1NCAxLjM3MjA3IDExLjQyNDIgMS4zNzIwN1YzLjE3MzI3QzExLjg2MzQgMy4xNzMyNyAxMi4zMTgyIDMuMzM2NDcgMTIuOTkzOCAzLjg1MTI3QzEzLjY4ODYgNC4zODE2NyAxNC41MDIyIDUuMTkyODcgMTUuNjcxIDYuMzYxNjdMMTYuOTQ0MiA1LjA5MDg3Wk01LjA4OTQ1IDUuOTAzMjdDMy45NTY2NSA3LjAzNjA3IDMuMDQyMjUgNy45NDgwNyAyLjQyMDY1IDguNzYyODdDMS43ODQ2NSA5LjU5Njg3IDEuMzczMDUgMTAuNDMyMSAxLjM3MzA1IDExLjQyMzNIMy4xNzMwNUMzLjE3MzA1IDEwLjk4NDEgMy4zMzc0NSAxMC41MjgxIDMuODUyMjUgOS44NTM2N0M0LjM4MjY1IDkuMTU4ODcgNS4xOTM4NSA4LjM0NTI3IDYuMzYyNjUgNy4xNzUyN0w1LjA4OTQ1IDUuOTAzMjdaTTYuMzYyNjUgMTUuNjcxM0M1LjE5Mzg1IDE0LjUwMTMgNC4zODI2NSAxMy42ODc3IDMuODUyMjUgMTIuOTkyOUMzLjMzNzQ1IDEyLjMxODUgMy4xNzMwNSAxMS44NjI1IDMuMTczMDUgMTEuNDIzM0gxLjM3MzA1QzEuMzczMDUgMTIuNDE0NSAxLjc4NDY1IDEzLjI0OTcgMi40MjA2NSAxNC4wODM3QzMuMDQyMjUgMTQuODk3MyAzLjk1NjY1IDE1LjgxMDUgNS4wODk0NSAxNi45NDMzTDYuMzYyNjUgMTUuNjcxM1pcIlxyXG4gICAgICAgICAgICAgICAgZmlsbD1cIiMxRDI5MzlcIiAvPlxyXG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMjMuMiA2Ljk4MzJMMjUgOC4yQzI1IDQuNTgyIDIyLjQwNTYgMS41Nzk2IDE5IDFNMi44IDE5LjAxNjhMMSAxNy44QzEgMjEuNDE4IDMuNTk0NCAyNC40MjA0IDcgMjVcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzFEMjkzOVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgIDwhLS0gU3VibWl0IEJ1dHRvbiAtLT5cclxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhbGF5b3V0Rm9ybS5kaXNhYmxlZFwiIHN0eWxlPVwidG9wOiAyNHB4OyByaWdodDogOTRweDtwYWRkaW5nOiA5cHggMjBweCAhaW1wb3J0YW50O1wiXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zIHBvc2l0aW9uLWFic29sdXRlIGJnLXdoaXRlIHNoYWRvdy1zbVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGVMYXlvdXQodHJ1ZSlcIj5cclxuICAgICAgICAgICAgU3VibWl0XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICA8IS0tIERvd25sb2FkIEJ1dHRvbiAtLT5cclxuICAgICAgICAgIDxidXR0b24gc3R5bGU9XCJ0b3A6IDI0cHg7IHJpZ2h0OiAyNnB4XCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTMgcG9zaXRpb24tYWJzb2x1dGUgYmctd2hpdGUgc2hhZG93LXNtXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkQ2FudmFzKClcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIiB2aWV3Qm94PVwiMCAwIDI2IDI2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjMDAwMDAwXCIgc3Ryb2tlLXdpZHRoPVwiMC4yNDAwMDAwMDAwMDAwMDAwNVwiPlxyXG4gICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPlxyXG4gICAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgc3Ryb2tlPVwiI0NDQ0NDQ1wiXHJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIwLjM4NFwiPjwvZz5cclxuICAgICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTIuNTUzNSAxNi41MDYxQzEyLjQxMTQgMTYuNjYxNSAxMi4yMTA2IDE2Ljc1IDEyIDE2Ljc1QzExLjc4OTQgMTYuNzUgMTEuNTg4NiAxNi42NjE1IDExLjQ0NjUgMTYuNTA2MUw3LjQ0NjQ4IDEyLjEzMTFDNy4xNjY5OCAxMS44MjU0IDcuMTg4MjIgMTEuMzUxIDcuNDkzOTIgMTEuMDcxNUM3Ljc5OTYzIDEwLjc5MiA4LjI3NDAyIDEwLjgxMzIgOC41NTM1MiAxMS4xMTg5TDExLjI1IDE0LjA2ODJWM0MxMS4yNSAyLjU4NTc5IDExLjU4NTggMi4yNSAxMiAyLjI1QzEyLjQxNDIgMi4yNSAxMi43NSAyLjU4NTc5IDEyLjc1IDNWMTQuMDY4MkwxNS40NDY1IDExLjExODlDMTUuNzI2IDEwLjgxMzIgMTYuMjAwNCAxMC43OTIgMTYuNTA2MSAxMS4wNzE1QzE2LjgxMTggMTEuMzUxIDE2LjgzMyAxMS44MjU0IDE2LjU1MzUgMTIuMTMxMUwxMi41NTM1IDE2LjUwNjFaXCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIiMxRDI5MzlcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICBkPVwiTTMuNzUgMTVDMy43NSAxNC41ODU4IDMuNDE0MjIgMTQuMjUgMyAxNC4yNUMyLjU4NTc5IDE0LjI1IDIuMjUgMTQuNTg1OCAyLjI1IDE1VjE1LjA1NDlDMi4yNDk5OCAxNi40MjI1IDIuMjQ5OTYgMTcuNTI0OCAyLjM2NjUyIDE4LjM5MThDMi40ODc1NCAxOS4yOTE5IDIuNzQ2NDMgMjAuMDQ5NyAzLjM0ODM1IDIwLjY1MTZDMy45NTAyNyAyMS4yNTM2IDQuNzA4MTQgMjEuNTEyNSA1LjYwODI1IDIxLjYzMzVDNi40NzUyMiAyMS43NSA3LjU3NzU0IDIxLjc1IDguOTQ1MTMgMjEuNzVIMTUuMDU0OUMxNi40MjI1IDIxLjc1IDE3LjUyNDggMjEuNzUgMTguMzkxOCAyMS42MzM1QzE5LjI5MTkgMjEuNTEyNSAyMC4wNDk3IDIxLjI1MzYgMjAuNjUxNyAyMC42NTE2QzIxLjI1MzYgMjAuMDQ5NyAyMS41MTI1IDE5LjI5MTkgMjEuNjMzNSAxOC4zOTE4QzIxLjc1IDE3LjUyNDggMjEuNzUgMTYuNDIyNSAyMS43NSAxNS4wNTQ5VjE1QzIxLjc1IDE0LjU4NTggMjEuNDE0MiAxNC4yNSAyMSAxNC4yNUMyMC41ODU4IDE0LjI1IDIwLjI1IDE0LjU4NTggMjAuMjUgMTVDMjAuMjUgMTYuNDM1NCAyMC4yNDg0IDE3LjQzNjUgMjAuMTQ2OSAxOC4xOTE5QzIwLjA0ODIgMTguOTI1NyAxOS44Njc4IDE5LjMxNDIgMTkuNTkxIDE5LjU5MUMxOS4zMTQyIDE5Ljg2NzggMTguOTI1NyAyMC4wNDgyIDE4LjE5MTkgMjAuMTQ2OUMxNy40MzY1IDIwLjI0ODQgMTYuNDM1NCAyMC4yNSAxNSAyMC4yNUg5QzcuNTY0NTkgMjAuMjUgNi41NjM0NyAyMC4yNDg0IDUuODA4MTIgMjAuMTQ2OUM1LjA3NDM1IDIwLjA0ODIgNC42ODU3NyAxOS44Njc4IDQuNDA5MDEgMTkuNTkxQzQuMTMyMjUgMTkuMzE0MiAzLjk1MTggMTguOTI1NyAzLjg1MzE1IDE4LjE5MTlDMy43NTE1OSAxNy40MzY1IDMuNzUgMTYuNDM1NCAzLjc1IDE1WlwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMUQyOTM5XCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBQYW5lbCBDb2xsYXBzZSBIYW5kbGVycyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UtaGFuZGxlciBsZWZ0XCIgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKCdsZWZ0JylcIj5cclxuICAgICAgICAgIDxzdmcgKm5nSWY9XCIhaXNMZWZ0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4yNzMwOCAxMi42MzZMNC42MzY3MiA4Ljk5OTY0TDguMjczMDggNS4zNjMyOE0xMy4zNjQgMTIuNjM2TDkuNzI3NjMgOC45OTk2NEwxMy4zNjQgNS4zNjMyOFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiIHN0cm9rZS13aWR0aD1cIjEuNDU0NTVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICA8c3ZnICpuZ0lmPVwiaXNMZWZ0UGFuZWxDb2xsYXBzZWRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCJcclxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS43MjY5MiA1LjM2Mzk5TDEzLjM2MzMgOS4wMDAzNkw5LjcyNjkyIDEyLjYzNjdNNC42MzYwMSA1LjM2Mzk5TDguMjcyMzcgOS4wMDAzNkw0LjYzNjAxIDEyLjYzNjdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIiBzdHJva2Utd2lkdGg9XCIxLjQ1NDU1XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sbGFwc2UtaGFuZGxlciByaWdodFwiIChjbGljayk9XCJ0b2dnbGVQYW5lbCgncmlnaHQnKVwiPlxyXG4gICAgICAgICAgPHN2ZyAqbmdJZj1cImlzUmlnaHRQYW5lbENvbGxhcHNlZFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIlxyXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPHBhdGggZD1cIk04LjI3MzA4IDEyLjYzNkw0LjYzNjcyIDguOTk5NjRMOC4yNzMwOCA1LjM2MzI4TTEzLjM2NCAxMi42MzZMOS43Mjc2MyA4Ljk5OTY0TDEzLjM2NCA1LjM2MzI4XCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgIDxzdmcgKm5nSWY9XCIhaXNSaWdodFBhbmVsQ29sbGFwc2VkXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiXHJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8cGF0aCBkPVwiTTkuNzI2OTIgNS4zNjM5OUwxMy4zNjMzIDkuMDAwMzZMOS43MjY5MiAxMi42MzY3TTQuNjM2MDEgNS4zNjM5OUw4LjI3MjM3IDkuMDAwMzZMNC42MzYwMSAxMi42MzY3XCJcclxuICAgICAgICAgICAgICBzdHJva2U9XCIjMTAxODI4XCIgc3Ryb2tlLXdpZHRoPVwiMS40NTQ1NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEVkaXQgRml4dHVyZSBCb2R5IC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sXCIgW25nQ2xhc3NdPVwieyAnZC1ub25lJzogIWVkaXRGaXh0dXJlIH1cIj5cclxuICAgICAgICA8ZGl2IGlkPVwiZWRpdC1ib2R5XCIgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgIDx1bCBjbGFzcz1cIm14LTMgbXktNSBuYXYgbmF2LXBpbGxzXCIgcm9sZT1cInRhYmxpc3RcIj5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW0gY3Vyc29yLXBvaW50ZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cInN1Ym1pdEZpeHR1cmUgPSBmYWxzZTsgZWRpdEZpeHR1cmVTZWN0aW9uID0gJ2Jhc2ljLWRldGFpbHMnXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ2Jhc2ljLWRldGFpbHMnID8gJ2FjdGl2ZScgOiAnJ1wiIGNsYXNzPVwibmF2LWxpbmtcIiByb2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgICAgICBCYXNpYyBkZXRhaWxzXHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbSBjdXJzb3ItcG9pbnRlclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cclxuICAgICAgICAgICAgICA8YSAoY2xpY2spPVwic3VibWl0Rml4dHVyZSA9IGZhbHNlOyBlZGl0Rml4dHVyZVNlY3Rpb24gPSAncHJvZHVjdHMnXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ3Byb2R1Y3RzJyA/ICdhY3RpdmUnIDogJydcIiBjbGFzcz1cIm5hdi1saW5rXCIgcm9sZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgUHJvZHVjdHNcclxuICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtIGN1cnNvci1wb2ludGVyXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICAgIDxhIChjbGljayk9XCJzdWJtaXRGaXh0dXJlID0gZmFsc2U7IGVkaXRGaXh0dXJlU2VjdGlvbiA9ICd2bXMnXCJcclxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ3ZtcycgPyAnYWN0aXZlJyA6ICcnXCIgY2xhc3M9XCJuYXYtbGlua1wiIHJvbGU9XCJ0YWJcIj5cclxuICAgICAgICAgICAgICAgIFZpc3VhbCBNZXJjaGFuZGlzZVxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWRpdEZpeHR1cmVTZWN0aW9uID09PSAnYmFzaWMtZGV0YWlscydcIj5cclxuICAgICAgICAgICAgICA8bGliLWluc3RhbmNlLWJhc2ljLWRldGFpbHMgW2ZpeHR1cmVEYXRhXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBbZWRpdE1vZGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICBbaXNTdWJtaXR0ZWRdPVwic3VibWl0Rml4dHVyZVwiIChzdWJtaXRFdmVudCk9XCJvbkZpeHR1cmVTdWJtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLWluc3RhbmNlLWJhc2ljLWRldGFpbHM+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXRGaXh0dXJlU2VjdGlvbiA9PT0gJ3Byb2R1Y3RzJ1wiPlxyXG4gICAgICAgICAgICAgIDxsaWItaW5zdGFuY2UtcHJvZHVjdHMgW2ZpeHR1cmVEYXRhXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBbZWRpdE1vZGVdPVwidHJ1ZVwiIFtpc1N1Ym1pdHRlZF09XCJzdWJtaXRGaXh0dXJlXCJcclxuICAgICAgICAgICAgICAgIChzdWJtaXRFdmVudCk9XCJvbkZpeHR1cmVTdWJtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLWluc3RhbmNlLXByb2R1Y3RzPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlZGl0Rml4dHVyZVNlY3Rpb24gPT09ICd2bXMnXCI+XHJcbiAgICAgICAgICAgICAgPGxpYi1pbnN0YW5jZS12bXMgW2ZpeHR1cmVEYXRhXT1cInNlbGVjdGVkRml4dHVyZURhdGFcIiBbZWRpdE1vZGVdPVwidHJ1ZVwiIFtpc1N1Ym1pdHRlZF09XCJzdWJtaXRGaXh0dXJlXCJcclxuICAgICAgICAgICAgICAgIChzdWJtaXRFdmVudCk9XCJvbkZpeHR1cmVTdWJtaXQoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDwvbGliLWluc3RhbmNlLXZtcz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2NvbGxhcHNlZC1jb2wnOiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQsICdjb2wtMyc6ICFpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgfVwiXHJcbiAgICAgICAgW3N0eWxlXT1cInsnbWluLXdpZHRoJzogaXNSaWdodFBhbmVsQ29sbGFwc2VkID8gJzAnIDogZWRpdEZpeHR1cmUgPyAnMzQwcHgnIDogJzEwNTBweCd9XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZlZWRiYWNrQ29sXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gIDwvZGl2PlxyXG48L3NlY3Rpb24+XHJcblxyXG48IS0tIFRlbXBsYXRlcyAtLT5cclxuPG5nLXRlbXBsYXRlICNmZWVkYmFja0NvbD5cclxuICA8ZGl2IGNsYXNzPVwicy1jYXJkXCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzplZGl0Rml4dHVyZSA/ICc3MnB4JyA6ICcwcHgnfVwiPlxyXG4gICAgPCEtLSA8YXBwLW1hbmFnZS1zdG9yZS1wbGFuby1mZWVkYmFjayBbbmdDbGFzc109XCJ7ICdkLW5vbmUnOiBpc1JpZ2h0UGFuZWxDb2xsYXBzZWQgJiYgIWVkaXRGaXh0dXJlfVwiXHJcbiAgICAgIFtjdXJyZW50UGxhbm9dPVwiZmxvb3JEYXRhXCIgW3N0b3JlRmVlZGJhY2tdPVwic3RvcmVGZWVkYmFja1wiIFtzZWxlY3RlZElzc3VlXT1cInNlbGVjdGVkRml4dHVyZVwiXHJcbiAgICAgIChpc0FwcHJvdmVkKT1cImhhbmRsZUFwcHJvdmVyUmVzcG9uc2UoJGV2ZW50KVwiPlxyXG4gICAgPC9hcHAtbWFuYWdlLXN0b3JlLXBsYW5vLWZlZWRiYWNrPiAtLT5cclxuXHJcbiAgICA8bGliLXZlcmlmaWNhdGlvbi1mZWVkYmFjayBbZmxvb3JEYXRhXT1cImZsb29yRGF0YVwiIFtuZ0NsYXNzXT1cInsgJ2Qtbm9uZSc6IGlzUmlnaHRQYW5lbENvbGxhcHNlZCAmJiAhZWRpdEZpeHR1cmV9XCJcclxuICAgICAgW2ZlZWRiYWNrRGV0YWlsc109XCJzZWxlY3RlZEZpeHR1cmVGZWVkYmFja1wiIChjaGFuZ2VGaXh0dXJlKT1cIm9uQ2hhbmdlRml4dHVyZU9uRmVlZGJhY2tQYW5lbCgkZXZlbnQsdHJ1ZSlcIlxyXG4gICAgICBbdG90YWxGaXh0dXJlc109XCJhbGxGaXh0dXJlSW5zdGFuY2VzXCIgW2Nkbl09XCJjZG5VcmxcIiAoYWN0aW9uKT1cImhhbmRsZUZlZWRiYWNrQWN0aW9uKCRldmVudClcIlxyXG4gICAgICBbc2hvd0FjdGlvbl09XCIhZWRpdEZpeHR1cmVcIiAgW3ZtTGlzdF09XCJ2bUxpc3RcIj48L2xpYi12ZXJpZmljYXRpb24tZmVlZGJhY2s+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2hlYWRlclNrZWxldG9uPlxyXG4gIDxkaXYgY2xhc3M9XCJyb3cgbS0wIGctMCBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNoaW1tZXIgdy0xMDAgcC00IHJvdW5kZWRcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIG10LTAgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNza2VsZXRvbkxvYWRlcj5cclxuICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgb3ZlcmZsb3ctaGlkZGVuXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2hpbW1lciByb3VuZGVkXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8YnIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbm9TdG9yZVZpZGVvIGxldC1tb2RhbD5cclxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgPGRpdj5cclxuICAgICAgPGgyIGNsYXNzPVwibWItM1wiPk5vIFN0b3JlIFZpZGVvIEZvdW5kPC9oMj5cclxuICAgICAgPHA+VGhlIHZpZGVvIHdpbGwgYmUgYXZhaWxhYmxlIG9uY2UgYSByZXF1ZXN0IGlzIHJhaXNlZCBhbmQgdGhlIHN0b3JlIHN1Ym1pdHMgYSBjb21wbGV0ZSBzdG9yZSB2aWRlby48L3A+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJtb2RhbC5jbG9zZSgpXCI+Q2xvc2U8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==