@ai-table/grid 0.0.58 → 0.0.60

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.
@@ -8,7 +8,7 @@ import { AITableRenderer } from './renderer/renderer.component';
8
8
  import { AITableGridEventService } from './services/event.service';
9
9
  import { AITableGridFieldService } from './services/field.service';
10
10
  import { AITableGridSelectionService } from './services/selection.service';
11
- import { AITableMouseDownType, AITableSelectAllState } from './types';
11
+ import { AITableAreaType, AITableMouseDownType, AITableSelectAllState } from './types';
12
12
  import { AITableGridI18nKey, buildGridLinearRows, getColumnIndicesSizeMap, getDetailByTargetName, getI18nTextByKey, handleMouseStyle, isCellMatchKeywords, isWindows } from './utils';
13
13
  import { getMousePosition } from './utils/position';
14
14
  import { AITableDragComponent } from './components/drag/drag.component';
@@ -211,7 +211,12 @@ export class AITableGrid extends AITableGridBase {
211
211
  const { x, y } = pos;
212
212
  const curMousePosition = getMousePosition(this.aiTable, x, y, this.coordinate(), AITable.getVisibleFields(this.aiTable), context, targetName);
213
213
  handleMouseStyle(curMousePosition.realTargetName, curMousePosition.areaType, this.containerElement(), this.aiReadonly(), this.aiRowDragDisabled());
214
- context.setPointPosition(curMousePosition);
214
+ if (curMousePosition.areaType !== AITableAreaType.none) {
215
+ context.setPointPosition(curMousePosition);
216
+ }
217
+ else {
218
+ context.setPointPosition(DEFAULT_POINT_POSITION);
219
+ }
215
220
  this.timer = null;
216
221
  if (this.isDragSelecting) {
217
222
  const { fieldId, recordId } = getDetailByTargetName(curMousePosition.realTargetName);
@@ -614,4 +619,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
614
619
  class: 'ai-table-grid'
615
620
  }, imports: [AITableRenderer, AITableDragComponent], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], template: "<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n (koMouseleave)=\"stageMouseleave($event)\"\n >\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n <ai-table-drag (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n" }]
616
621
  }], ctorParameters: () => [] });
617
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sTUFBTSxFQUlOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQ0gsYUFBYSxFQUNiLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLGdDQUFnQyxFQUNoQyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUN2QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBSUgsVUFBVSxFQUNWLGVBQWUsRUFHZixRQUFRLEVBRVIsT0FBTyxFQUVWLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1B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Q3pCLFdBQ1EsQ0FBQyxlQUFlLEVBQUUsb0JBQW9CLENBQUMsYUFDckMsQ0FBQyx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRSwyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgYWZ0ZXJOZXh0UmVuZGVyLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBlZmZlY3QsXG4gICAgRWxlbWVudFJlZixcbiAgICBpbmplY3QsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBTaWduYWwsXG4gICAgc2lnbmFsLFxuICAgIHVudHJhY2tlZCxcbiAgICB2aWV3Q2hpbGQsXG4gICAgVmlld0NvbnRhaW5lclJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGZpbHRlciwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBLb0V2ZW50T2JqZWN0IH0gZnJvbSAnLi9hbmd1bGFyLWtvbnZhJztcbmltcG9ydCB7XG4gICAgQUlfVEFCTEVfQ0VMTCxcbiAgICBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTixcbiAgICBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OX1dJRFRILFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQUQsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRF9NT1JFLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfT1BBQ0lUWV9MSU5FLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfU0VMRUNUX0NIRUNLQk9YLFxuICAgIEFJX1RBQkxFX1BSRVZFTlRfQ0xFQVJfU0VMRUNUSU9OX0NMQVNTLFxuICAgIEFJX1RBQkxFX1JPV19BRERfQlVUVE9OLFxuICAgIEFJX1RBQkxFX1JPV19EUkFHLFxuICAgIEFJX1RBQkxFX1JPV19IRUFEX1dJRFRILFxuICAgIEFJX1RBQkxFX1JPV19TRUxFQ1RfQ0hFQ0tCT1gsXG4gICAgREJMX0NMSUNLX0VESVRfVFlQRSxcbiAgICBERUZBVUxUX1BPSU5UX1BPU0lUSU9OLFxuICAgIERFRkFVTFRfU0NST0xMX1NUQVRFXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gICAgQWRkRmllbGRPcHRpb25zLFxuICAgIEFkZFJlY29yZE9wdGlvbnMsXG4gICAgQUlUYWJsZUZpZWxkLFxuICAgIENvb3JkaW5hdGUsXG4gICAgUmVuZGVyZXJDb250ZXh0LFxuICAgIFVwZGF0ZUZpZWxkVmFsdWVPcHRpb25zLFxuICAgIERyYWdFbmREYXRhLFxuICAgIERyYWdUeXBlLFxuICAgIEFJUmVjb3JkRmllbGRJZFBhdGgsXG4gICAgQUlUYWJsZSxcbiAgICBJZFBhdGhcbn0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkQmFzZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlUmVuZGVyZXIgfSBmcm9tICcuL3JlbmRlcmVyL3JlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEZpZWxkU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFJVGFibGVDb250ZXh0TWVudUl0ZW0sIEFJVGFibGVNb3VzZURvd25UeXBlLCBBSVRhYmxlUmVuZGVyZXJDb25maWcsIEFJVGFibGVTZWxlY3RBbGxTdGF0ZSwgU2Nyb2xsQWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgICBBSVRhYmxlR3JpZEkxOG5LZXksXG4gICAgYnVpbGRHcmlkTGluZWFyUm93cyxcbiAgICBnZXRDb2x1bW5JbmRpY2VzU2l6ZU1hcCxcbiAgICBnZXREZXRhaWxCeVRhcmdldE5hbWUsXG4gICAgZ2V0STE4blRleHRCeUtleSxcbiAgICBoYW5kbGVNb3VzZVN0eWxlLFxuICAgIGlzQ2VsbE1hdGNoS2V5d29yZHMsXG4gICAgaXNXaW5kb3dzXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TW91c2VQb3NpdGlvbiB9IGZyb20gJy4vdXRpbHMvcG9zaXRpb24nO1xuaW1wb3J0IHsgQUlUYWJsZURyYWdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZHJhZy9kcmFnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBidWlsZENsaXBib2FyZERhdGEsIHdyaXRlVG9DbGlwYm9hcmQsIHdyaXRlVG9BSVRhYmxlLCBBSVRhYmxlQWN0aW9ucyB9IGZyb20gJy4vdXRpbHMvY2xpcGJvYXJkJztcbmltcG9ydCB7IFRoeU5vdGlmeVNlcnZpY2UgfSBmcm9tICduZ3gtdGV0aHlzL25vdGlmeSc7XG5pbXBvcnQgeyBpc051bWJlciB9IGZyb20gJ2xvZGFzaCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtZ3JpZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2FpLXRhYmxlLWdyaWQnXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbQUlUYWJsZVJlbmRlcmVyLCBBSVRhYmxlRHJhZ0NvbXBvbmVudF0sXG4gICAgcHJvdmlkZXJzOiBbQUlUYWJsZUdyaWRFdmVudFNlcnZpY2UsIEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlLCBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVHcmlkIGV4dGVuZHMgQUlUYWJsZUdyaWRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuICAgIHByaXZhdGUgaXNEcmFnU2VsZWN0aW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGRyYWdTZWxlY3Rpb25TdGFydDogQUlSZWNvcmRGaWVsZElkUGF0aCB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlID0gaW5qZWN0KFRoeU5vdGlmeVNlcnZpY2UpO1xuXG4gICAgdGltZXIhOiBudW1iZXIgfCBudWxsO1xuXG4gICAgcmVzaXplT2JzZXJ2ZXIhOiBSZXNpemVPYnNlcnZlcjtcblxuICAgIGZpZWxkSGVhZEhlaWdodCA9IEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hUO1xuXG4gICAgY29udGFpbmVyUmVjdCA9IHNpZ25hbCh7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XG5cbiAgICBmcm96ZW5Db2x1bW5Db3VudCA9IHNpZ25hbCgxKTtcblxuICAgIGhhc0NvbnRhaW5lclJlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclJlY3QoKS53aWR0aCA+IDAgJiYgdGhpcy5jb250YWluZXJSZWN0KCkuaGVpZ2h0ID4gMDtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGFpbmVyJyk7XG5cbiAgICB2ZXJ0aWNhbEJhclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndmVydGljYWxCYXInKTtcblxuICAgIGhvcml6b250YWxCYXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2hvcml6b250YWxCYXInKTtcblxuICAgIGxpbmVhclJvd3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBidWlsZEdyaWRMaW5lYXJSb3dzKHRoaXMuZ3JpZERhdGEoKS5yZWNvcmRzLCAhdGhpcy5haVJlYWRvbmx5KCkpO1xuICAgIH0pO1xuXG4gICAgdmlzaWJsZUNvbHVtbnNJbmRleE1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyh0aGlzLmFpVGFibGUpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcChjb2x1bW5zPy5tYXAoKGl0ZW0sIGluZGV4KSA9PiBbaXRlbS5faWQsIGluZGV4XSkpO1xuICAgIH0pO1xuXG4gICAgdmlzaWJsZVJvd3NJbmRleE1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXAodGhpcy5saW5lYXJSb3dzKCkubWFwKChyb3csIGluZGV4KSA9PiBbcm93Ll9pZCwgaW5kZXhdKSk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXJFbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIoKSEubmF0aXZlRWxlbWVudDtcbiAgICB9KTtcblxuICAgIHJlbmRlcmVyQ29uZmlnOiBTaWduYWw8QUlUYWJsZVJlbmRlcmVyQ29uZmlnPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKHRoaXMuYWlUYWJsZSk7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGUgPSBuZXcgQ29vcmRpbmF0ZSh7XG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgcm93SGVpZ2h0OiBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICAgICAgICAgIHJvd0NvdW50OiB0aGlzLmxpbmVhclJvd3MoKS5sZW5ndGgsXG4gICAgICAgICAgICBjb2x1bW5Db3VudDogZmllbGRzLmxlbmd0aCxcbiAgICAgICAgICAgIHJvd0luaXRTaXplOiBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICAgICAgICAgIGNvbHVtbkluaXRTaXplOiBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCxcbiAgICAgICAgICAgIHJvd0luZGljZXNTaXplTWFwOiB7fSxcbiAgICAgICAgICAgIGNvbHVtbkluZGljZXNTaXplTWFwOiBnZXRDb2x1bW5JbmRpY2VzU2l6ZU1hcCh0aGlzLmFpVGFibGUsIGZpZWxkcyksXG4gICAgICAgICAgICBmcm96ZW5Db2x1bW5Db3VudDogdGhpcy5mcm96ZW5Db2x1bW5Db3VudCgpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWlUYWJsZTogdGhpcy5haVRhYmxlLFxuICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ3JpZERhdGEoKSxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXJFbGVtZW50KCksXG4gICAgICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlLFxuICAgICAgICAgICAgY29udGFpbmVyV2lkdGg6IHRoaXMuY29udGFpbmVyUmVjdCgpLndpZHRoLFxuICAgICAgICAgICAgY29udGFpbmVySGVpZ2h0OiB0aGlzLmNvbnRhaW5lclJlY3QoKS5oZWlnaHQsXG4gICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLmFpUmVmZXJlbmNlcygpLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMuYWlSZWFkb25seSgpLFxuICAgICAgICAgICAgcm93RHJhZ0Rpc2FibGVkOiB0aGlzLmFpUm93RHJhZ0Rpc2FibGVkKCksXG4gICAgICAgICAgICBhY3Rpb25zOiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlRmllbGRWYWx1ZTogKG9wdGlvbnM6IFVwZGF0ZUZpZWxkVmFsdWVPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlVcGRhdGVGaWVsZFZhbHVlLmVtaXQob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29vcmRpbmF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyZXJDb25maWcoKS5jb29yZGluYXRlO1xuICAgIH0pO1xuXG4gICAgc2Nyb2xsVG90YWxIZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCh0aGlzLmNvb3JkaW5hdGUoKS50b3RhbEhlaWdodCwgdGhpcy5jb250YWluZXJSZWN0KCkuaGVpZ2h0IC0gdGhpcy5maWVsZEhlYWRIZWlnaHQpO1xuICAgIH0pO1xuXG4gICAgc2Nyb2xsYmFyV2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvb3JkaW5hdGUoKS50b3RhbFdpZHRoICsgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTl9XSURUSDtcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRDb250YWluZXJSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRHbG9iYWxNb3VzZWRvd24oKTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyUmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmluZFdoZWVsKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRDbGlwYm9hcmRTaG9ydGN1dHMoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDb250YWluZXJSZWN0KCkgJiYgdGhpcy5ob3Jpem9udGFsQmFyUmVmKCkgJiYgdGhpcy52ZXJ0aWNhbEJhclJlZigpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kU2Nyb2xsQmFyU2Nyb2xsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRLZXl3b3Jkc01hdGNoZWRDZWxscygpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICApO1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8g5b2T5paw5aKe6KGM6YCJ5Lit55qEY2VsbCznvJbovpHlkI7vvIxhY3RpdmVDZWxsIOS4jeWcqOaWsOWinueahOihjOS4reaXtu+8jOagueaNruetm+mAiSDov4fmu6TooYzmlbDmja4s6Kem5Y+R6YeN5paw5riy5p+TXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlQ2VsbFBhdGggPSB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuYWN0aXZlQ2VsbDtcbiAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZUNlbGxQYXRoIHx8ICF0aGlzLmFpVGFibGUucmVjb3Jkc1dpbGxIaWRkZW4oKS5pbmNsdWRlcyhhY3RpdmVDZWxsUGF0aFswXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFpVGFibGUucmVjb3Jkc1dpbGxIaWRkZW4oKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlLnJlY29yZHNXaWxsSGlkZGVuLnNldChbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcblxuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkSWRTZXQgPSBuZXcgU2V0PHN0cmluZz4odGhpcy5haVRhYmxlLnJlY29yZHMoKS5tYXAoKGl0ZW0pID0+IGl0ZW0uX2lkKSk7XG4gICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZWNvcmRzID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RlZFJlY29yZElkIG9mIHNlbGVjdGVkUmVjb3Jkcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNvcmRJZFNldC5oYXMoc2VsZWN0ZWRSZWNvcmRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJlY29yZHMuZGVsZXRlKHNlbGVjdGVkUmVjb3JkSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24udXBkYXRlKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSZWNvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEFsbFN0YXRlOiB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5zZWxlY3RBbGxTdGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5pbml0Q29udGV4dCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0Q29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQgPSBuZXcgUmVuZGVyZXJDb250ZXh0KHtcbiAgICAgICAgICAgIGxpbmVhclJvd3M6IHRoaXMubGluZWFyUm93cyxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5zSW5kZXhNYXA6IHRoaXMudmlzaWJsZUNvbHVtbnNJbmRleE1hcCxcbiAgICAgICAgICAgIHZpc2libGVSb3dzSW5kZXhNYXA6IHRoaXMudmlzaWJsZVJvd3NJbmRleE1hcCxcbiAgICAgICAgICAgIHBvaW50UG9zaXRpb246IHNpZ25hbChERUZBVUxUX1BPSU5UX1BPU0lUSU9OKSxcbiAgICAgICAgICAgIHNjcm9sbFN0YXRlOiBzaWduYWwoREVGQVVMVF9TQ1JPTExfU1RBVEUpLFxuICAgICAgICAgICAgZnJvemVuQ29sdW1uQ291bnQ6IHRoaXMuZnJvemVuQ29sdW1uQ291bnQsXG4gICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLmFpUmVmZXJlbmNlcyxcbiAgICAgICAgICAgIGFpRmllbGRDb25maWc6IHRoaXMuYWlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgIHNjcm9sbEFjdGlvbjogdGhpcy5zY3JvbGxBY3Rpb25cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRLZXl3b3Jkc01hdGNoZWRDZWxscygpIHtcbiAgICAgICAgY29uc3Qga2V5d29yZHMgPSB0aGlzLmFpS2V5d29yZHMoKTtcbiAgICAgICAgbGV0IG1hdGNoZWRDZWxscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgIGlmIChrZXl3b3Jkcykge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuYWlSZWZlcmVuY2VzKCk7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGUucmVjb3JkcygpLmZvckVhY2goKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5maWVsZHMoKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDZWxsTWF0Y2hLZXl3b3Jkcyh0aGlzLmFpVGFibGUsIGZpZWxkLCByZWNvcmQuX2lkLCBrZXl3b3JkcywgcmVmZXJlbmNlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRDZWxscy5hZGQoYCR7cmVjb3JkLl9pZH06JHtmaWVsZC5faWR9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5haVRhYmxlLmtleXdvcmRzTWF0Y2hlZENlbGxzLnNldChtYXRjaGVkQ2VsbHMpO1xuICAgIH1cblxuICAgIHN0YWdlTW91c2Vtb3ZlKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGUuZXZlbnQudGFyZ2V0Lm5hbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRTdGFnZSA9IGUuZXZlbnQuY3VycmVudFRhcmdldC5nZXRTdGFnZSgpO1xuICAgICAgICAgICAgY29uc3QgcG9zID0gZ3JpZFN0YWdlPy5nZXRQb2ludGVyUG9zaXRpb24oKTtcbiAgICAgICAgICAgIGlmIChwb3MgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeyBjb250ZXh0IH0gPSB0aGlzLmFpVGFibGU7XG4gICAgICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHBvcztcbiAgICAgICAgICAgIGNvbnN0IGN1ck1vdXNlUG9zaXRpb24gPSBnZXRNb3VzZVBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZSxcbiAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgdGhpcy5jb29yZGluYXRlKCksXG4gICAgICAgICAgICAgICAgQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKHRoaXMuYWlUYWJsZSksXG4gICAgICAgICAgICAgICAgY29udGV4dCEsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGhhbmRsZU1vdXNlU3R5bGUoXG4gICAgICAgICAgICAgICAgY3VyTW91c2VQb3NpdGlvbi5yZWFsVGFyZ2V0TmFtZSxcbiAgICAgICAgICAgICAgICBjdXJNb3VzZVBvc2l0aW9uLmFyZWFUeXBlLFxuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgICAgIHRoaXMuYWlSZWFkb25seSgpLFxuICAgICAgICAgICAgICAgIHRoaXMuYWlSb3dEcmFnRGlzYWJsZWQoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnRleHQhLnNldFBvaW50UG9zaXRpb24oY3VyTW91c2VQb3NpdGlvbik7XG4gICAgICAgICAgICB0aGlzLnRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRHJhZ1NlbGVjdGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmllbGRJZCwgcmVjb3JkSWQgfSA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZShjdXJNb3VzZVBvc2l0aW9uLnJlYWxUYXJnZXROYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRJZCAmJiByZWNvcmRJZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydENlbGwgPSB0aGlzLmRyYWdTZWxlY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kQ2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCA9IFtyZWNvcmRJZCwgZmllbGRJZF07XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydENlbGwgJiYgISFzdGFydENlbGwubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5zZWxlY3RDZWxscyhzdGFydENlbGwsIGVuZENlbGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGFnZU1vdXNlZG93bihlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBlLmV2ZW50LmV2dDtcbiAgICAgICAgY29uc3QgX3RhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG5cbiAgICAgICAgY29uc3QgeyB0YXJnZXROYW1lLCBmaWVsZElkLCByZWNvcmRJZCB9ID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKF90YXJnZXROYW1lKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbW91c2VFdmVudC5idXR0b24gPT09IEFJVGFibGVNb3VzZURvd25UeXBlLlJpZ2h0ICYmXG4gICAgICAgICAgICByZWNvcmRJZCAmJlxuICAgICAgICAgICAgZmllbGRJZCAmJlxuICAgICAgICAgICAgKHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHMuaGFzKHJlY29yZElkKSB8fCB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRDZWxscy5oYXMoYCR7cmVjb3JkSWR9OiR7ZmllbGRJZH1gKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHRhcmdldE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfSEVBRDpcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWVsZElkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0RmllbGQoZmllbGRJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWVsZERyYWdTdGFydCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfSEVBRF9PUEFDSVRZX0xJTkU6XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmICghZmllbGRJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmllbGRXaWR0aERyYWdTdGFydChmaWVsZElkKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0NFTEw6XG4gICAgICAgICAgICAgICAgaWYgKCFyZWNvcmRJZCB8fCAhZmllbGRJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWdTZWxlY3Rpb25TdGFydDogQUlSZWNvcmRGaWVsZElkUGF0aCA9IFtyZWNvcmRJZCwgZmllbGRJZF07XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEcmFnU2VsZWN0aW9uU3RhdGUodHJ1ZSwgZHJhZ1NlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5zZWxlY3RDZWxscyhkcmFnU2VsZWN0aW9uU3RhcnQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfUk9XX0RSQUc6XG4gICAgICAgICAgICAgICAgaWYgKCFyZWNvcmRJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFJlY29yZHMgPSB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRSZWNvcmRzO1xuICAgICAgICAgICAgICAgIGxldCBkcmFnUmVjb3Jkczogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRSZWNvcmRzLmhhcyhyZWNvcmRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ1JlY29yZHMgPSBbcmVjb3JkSWQsIC4uLnNlbGVjdGVkUmVjb3Jkcy52YWx1ZXMoKV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8g5b2T5YmN5ouW5ou96KGM5LiN5Zyo6YCJ5Lit6KGM5Lit77yM5Y+q5ouW5ou95b2T5YmN6KGMXG4gICAgICAgICAgICAgICAgICAgIGRyYWdSZWNvcmRzID0gW3JlY29yZElkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSb3dEcmFnU3RhcnQoZHJhZ1JlY29yZHMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfUk9XX0FERF9CVVRUT046XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT046XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX1JPV19TRUxFQ1RfQ0hFQ0tCT1g6XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0hFQURfU0VMRUNUX0NIRUNLQk9YOlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YWdlTW91c2V1cChlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIHRoaXMudXBkYXRlRHJhZ1NlbGVjdGlvblN0YXRlKGZhbHNlLCBudWxsKTtcbiAgICB9XG5cbiAgICBzdGFnZU1vdXNlbGVhdmUoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy50aW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aW1lciA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGNvbnRleHQgfSA9IHRoaXMuYWlUYWJsZTtcbiAgICAgICAgICAgIGNvbnRleHQhLnNldFBvaW50UG9zaXRpb24oREVGQVVMVF9QT0lOVF9QT1NJVElPTik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YWdlQ29udGV4dG1lbnUoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5ldmVudC5ldnQ7XG4gICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAodGhpcy5haVJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgIGNvbnN0IHsgZmllbGRJZCwgcmVjb3JkSWQgfSA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZSh0YXJnZXROYW1lKTtcbiAgICAgICAgaWYgKCFyZWNvcmRJZCB8fCAhZmllbGRJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB7XG4gICAgICAgICAgICB4OiBtb3VzZUV2ZW50LngsXG4gICAgICAgICAgICB5OiBtb3VzZUV2ZW50LnlcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtZW51SXRlbXM6IEFJVGFibGVDb250ZXh0TWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5haUNvbnRleHRNZW51SXRlbXMoKSkge1xuICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2goLi4udGhpcy5haUNvbnRleHRNZW51SXRlbXMoKSEodGhpcy5haVRhYmxlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZW51SXRlbXMubGVuZ3RoIHx8IG1lbnVJdGVtcy5ldmVyeSgoaXRlbSkgPT4gISEoaXRlbS5oaWRkZW4gJiYgaXRlbS5oaWRkZW4odGhpcy5haVRhYmxlLCB0YXJnZXROYW1lLCBwb3NpdGlvbikpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5vcGVuQ29udGV4dE1lbnUodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICBvcmlnaW46IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgbWVudUl0ZW1zLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YWdlQ2xpY2soZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBjb25zdCB0YXJnZXROYW1lRGV0YWlsID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKGUuZXZlbnQudGFyZ2V0Lm5hbWUoKSk7XG4gICAgICAgIHRoaXMuYWlDbGljay5lbWl0KHtcbiAgICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgICB0YXJnZXROYW1lRGV0YWlsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5ldmVudC5ldnQ7XG4gICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5jbG9zZUNlbGxFZGl0b3IoKTtcblxuICAgICAgICBjb25zdCB7IGNvbnRleHQgfSA9IHRoaXMuYWlUYWJsZTtcbiAgICAgICAgY29uc3QgeyB0YXJnZXROYW1lLCByb3dJbmRleDogcG9pbnRSb3dJbmRleCB9ID0gY29udGV4dCEucG9pbnRQb3NpdGlvbigpO1xuICAgICAgICBpZiAobW91c2VFdmVudC5idXR0b24gIT09IEFJVGFibGVNb3VzZURvd25UeXBlLkxlZnQgfHwgKHRhcmdldE5hbWUgIT09IEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSAmJiB0aGlzLmFpUmVhZG9ubHkoKSkpIHJldHVybjtcbiAgICAgICAgc3dpdGNoICh0YXJnZXROYW1lKSB7XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX1JPV19BRERfQlVUVE9OOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFJlY29yZCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcmVjb3JkcywgZmllbGRzIH0gPSB0aGlzLmdyaWREYXRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2V0QWN0aXZlQ2VsbChbcmVjb3Jkc1tyZWNvcmRzLmxlbmd0aCAtIDFdLl9pZCwgZmllbGRzWzBdLl9pZF0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfU0VMRUNUX0NIRUNLQk9YOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRSZWNvcmRJZCA9IGNvbnRleHQhLmxpbmVhclJvd3MoKVtwb2ludFJvd0luZGV4XT8uX2lkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjb3JkKHBvaW50UmVjb3JkSWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX1NFTEVDVF9DSEVDS0JPWDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RBbGxTdGF0ZSA9PT0gQUlUYWJsZVNlbGVjdEFsbFN0YXRlLmFsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdEFsbCghaXNDaGVja2VkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRHcm91cFJlY3QgPSBlLmV2ZW50LnRhcmdldC5nZXRQYXJlbnQoKT8uZ2V0Q2xpZW50UmVjdCgpITtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGaWVsZCh0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSwge1xuICAgICAgICAgICAgICAgICAgICB4OiBmaWVsZEdyb3VwUmVjdC54ICsgY29udGFpbmVyUmVjdC54LFxuICAgICAgICAgICAgICAgICAgICB5OiBjb250YWluZXJSZWN0LnkgKyBmaWVsZEdyb3VwUmVjdC55ICsgZmllbGRHcm91cFJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRTpcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgX3RhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmaWVsZElkIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUoX3RhcmdldE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vcmVSZWN0ID0gZS5ldmVudC50YXJnZXQuZ2V0Q2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEdyb3VwUmVjdCA9IGUuZXZlbnQudGFyZ2V0LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0Q2xpZW50UmVjdCgpITtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogY29udGFpbmVyUmVjdC54ICsgbW9yZVJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGNvbnRhaW5lclJlY3QueSArIG1vcmVSZWN0LnkgKyBtb3JlUmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRpdEZpZWxkUG9zaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjb250YWluZXJSZWN0LnggKyBmaWVsZEdyb3VwUmVjdC54IC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY29udGFpbmVyUmVjdC55ICsgZmllbGRHcm91cFJlY3QueSArIGZpZWxkR3JvdXBSZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRPcmlnaW4gPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCcua29udmFqcy1jb250ZW50JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRGaWVsZFNlcnZpY2Uub3BlbkZpZWxkTWVudSh0aGlzLmFpVGFibGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE1lbnVzOiB0aGlzLmZpZWxkTWVudXMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogdGhpcy5jb250YWluZXJFbGVtZW50KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRPcmlnaW46IGVkaXRPcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0RmllbGRQb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0YWdlRGJsY2xpY2soZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBjb25zdCBfdGFyZ2V0TmFtZSA9IGUuZXZlbnQudGFyZ2V0Lm5hbWUoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZURldGFpbCA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZShfdGFyZ2V0TmFtZSk7XG4gICAgICAgIHRoaXMuYWlEYkNsaWNrLmVtaXQoe1xuICAgICAgICAgICAgLi4uZSxcbiAgICAgICAgICAgIHRhcmdldE5hbWVEZXRhaWxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWlSZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGZpZWxkSWQsIHJlY29yZElkIH0gPSB0YXJnZXROYW1lRGV0YWlsO1xuICAgICAgICBpZiAoIXJlY29yZElkIHx8ICFmaWVsZElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmFpVGFibGUuZmllbGRzTWFwKClbZmllbGRJZF07XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgIGlmIChEQkxfQ0xJQ0tfRURJVF9UWVBFLmluY2x1ZGVzKGZpZWxkVHlwZSkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2Uub3BlbkNlbGxFZGl0b3IodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZTogdGhpcy5jb29yZGluYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkSWQhLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRJZDogcmVjb3JkSWQhLFxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLmFpUmVmZXJlbmNlcygpLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVGaWVsZFZhbHVlOiAodmFsdWU6IFVwZGF0ZUZpZWxkVmFsdWVPcHRpb25zPGFueT4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlVcGRhdGVGaWVsZFZhbHVlLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmluZFdoZWVsKCkge1xuICAgICAgICBmcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy5jb250YWluZXJFbGVtZW50KCksICd3aGVlbCcsIHsgcGFzc2l2ZTogZmFsc2UgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZTogV2hlZWxFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmNsb3NlQ2VsbEVkaXRvcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQWN0aW9uKHsgZGVsdGFYOiBlLmRlbHRhWCwgZGVsdGFZOiBlLmRlbHRhWSwgc2hpZnRLZXk6IGUuc2hpZnRLZXkgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzY3JvbGxBY3Rpb24gPSAob3B0aW9uczogU2Nyb2xsQWN0aW9uT3B0aW9ucykgPT4ge1xuICAgICAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy50aW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aW1lciA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRlbHRhWCwgZGVsdGFZLCBzaGlmdEtleSB9ID0gb3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGZpeGVkRGVsdGFZID0gc2hpZnRLZXkgJiYgaXNXaW5kb3dzID8gMCA6IGRlbHRhWTtcbiAgICAgICAgICAgIGNvbnN0IGZpeGVkRGVsdGFYID0gc2hpZnRLZXkgJiYgaXNXaW5kb3dzID8gZGVsdGFZIDogZGVsdGFYO1xuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbEJhciA9IHRoaXMuaG9yaXpvbnRhbEJhclJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdmVydGljYWxCYXIgPSB0aGlzLnZlcnRpY2FsQmFyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoaG9yaXpvbnRhbEJhcikge1xuICAgICAgICAgICAgICAgIGhvcml6b250YWxCYXIuc2Nyb2xsTGVmdCA9IGhvcml6b250YWxCYXIuc2Nyb2xsTGVmdCArIGZpeGVkRGVsdGFYO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZlcnRpY2FsQmFyKSB7XG4gICAgICAgICAgICAgICAgdmVydGljYWxCYXIuc2Nyb2xsVG9wID0gdmVydGljYWxCYXIuc2Nyb2xsVG9wICsgZml4ZWREZWx0YVk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrICYmIG9wdGlvbnMuY2FsbGJhY2soKTtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBiaW5kU2Nyb2xsQmFyU2Nyb2xsKCkge1xuICAgICAgICBmcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy5ob3Jpem9udGFsQmFyUmVmKCkhLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbFNjcm9sbChlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxXaGVlbEV2ZW50Pih0aGlzLnZlcnRpY2FsQmFyUmVmKCkhLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWxTY3JvbGwoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRHbG9iYWxNb3VzZWRvd24oKSB7XG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlZG93bicsIHsgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY29udGFpbmVyRWxlbWVudCgpLmNvbnRhaW5zKGUudGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWUudGFyZ2V0LmNsb3Nlc3QoQUlfVEFCTEVfUFJFVkVOVF9DTEVBUl9TRUxFQ1RJT05fQ0xBU1MpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEcmFnU2VsZWN0aW9uU3RhdGUoZmFsc2UsIG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURyYWdTZWxlY3Rpb25TdGF0ZShpc0RyYWdTZWxlY3Rpbmc6IGJvb2xlYW4sIGRyYWdTZWxlY3Rpb25TdGFydDogQUlSZWNvcmRGaWVsZElkUGF0aCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5pc0RyYWdTZWxlY3RpbmcgPSBpc0RyYWdTZWxlY3Rpbmc7XG4gICAgICAgIHRoaXMuZHJhZ1NlbGVjdGlvblN0YXJ0ID0gZHJhZ1NlbGVjdGlvblN0YXJ0O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTY3JvbGxpbmcgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0IS5zZXRTY3JvbGxTdGF0ZSh7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaG9yaXpvbnRhbFNjcm9sbCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0IH0gPSBlLnRhcmdldDtcbiAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQhLnNldFNjcm9sbFN0YXRlKHtcbiAgICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNldFNjcm9sbGluZygpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHZlcnRpY2FsU2Nyb2xsKGU6IGFueSkge1xuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCB9ID0gZS50YXJnZXQ7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0IS5zZXRTY3JvbGxTdGF0ZSh7XG4gICAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNldFNjcm9sbGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29udGFpbmVyUmVjdCgpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJSZWN0LnNldCh7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy5jb250YWluZXJFbGVtZW50KCkub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLm9mZnNldEhlaWdodFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnRhaW5lclJlc2l6ZUxpc3RlbmVyKCkge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5jb250YWluZXJFbGVtZW50KCkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFdpZHRoID0gdGhpcy5jb29yZGluYXRlKCkudG90YWxXaWR0aCArIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEg7XG4gICAgICAgICAgICB0aGlzLnNldENvbnRhaW5lclJlY3QoKTtcbiAgICAgICAgICAgIGlmIChjb250YWluZXJXaWR0aCA+PSB0b3RhbFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQhLnNldFNjcm9sbFN0YXRlKHsgc2Nyb2xsTGVmdDogMCB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXJFbGVtZW50KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZENsaXBib2FyZFNob3J0Y3V0cygpIHtcbiAgICAgICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5KSAmJiAoZXZlbnQua2V5ID09PSAnYycgfHwgZXZlbnQua2V5ID09PSAndicpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5haVJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1NlbGVjdGVkQ2VsbHMgPSB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRDZWxscy5zaXplID4gMDtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc1NlbGVjdGVkQ2VsbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc0VkaXRpbmdDZWxsID0gISF0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmdldEN1cnJlbnRFZGl0Q2VsbCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ2MnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBidWlsZENsaXBib2FyZERhdGEodGhpcy5haVRhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsaXBib2FyZERhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVG9DbGlwYm9hcmQoY2xpcGJvYXJkRGF0YSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29waWVkQ2VsbHNDb3VudCA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZENlbGxzLnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGdldEkxOG5UZXh0QnlLZXkodGhpcy5haVRhYmxlLCBBSVRhYmxlR3JpZEkxOG5LZXkuY29waWVkQ2VsbHMpLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7Y291bnR9JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29waWVkQ2VsbHNDb3VudC50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2Uuc3VjY2VzcyhtZXNzYWdlLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tTGVmdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICd2JyAmJiAhaGFzRWRpdGluZ0NlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25zOiBBSVRhYmxlQWN0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmFsdWU6IChkYXRhOiBVcGRhdGVGaWVsZFZhbHVlT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlVcGRhdGVGaWVsZFZhbHVlLmVtaXQoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RmllbGQ6IChmaWVsZDogQUlUYWJsZUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVNldEZpZWxkLmVtaXQoZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZpZWxkOiAoZGF0YTogQWRkRmllbGRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haUFkZEZpZWxkLmVtaXQoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmVjb3JkOiAoZGF0YTogQWRkUmVjb3JkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkUmVjb3JkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVUb0FJVGFibGUodGhpcy5haVRhYmxlLCBhY3Rpb25zKS50aGVuKChpc1Bhc3RlU3VjY2VzcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1Bhc3RlU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5lcnJvcihnZXRJMThuVGV4dEJ5S2V5KHRoaXMuYWlUYWJsZSwgQUlUYWJsZUdyaWRJMThuS2V5LmludmFsaWRQYXN0ZUNvbnRlbnQpLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tTGVmdCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVGaWVsZERyYWdTdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFpUmVhZG9ubHkoKSAmJiB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5zZWxlY3RlZEZpZWxkcy5zaXplID4gMCkge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuZHJhZyh7XG4gICAgICAgICAgICAgICAgdHlwZTogRHJhZ1R5cGUuZmllbGQsXG4gICAgICAgICAgICAgICAgc291cmNlSWRzOiB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5zZWxlY3RlZEZpZWxkcyxcbiAgICAgICAgICAgICAgICBzY3JvbGw6IHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxcbiAgICAgICAgICAgICAgICBjb29yZGluYXRlOiB0aGlzLmNvb3JkaW5hdGUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUZpZWxkV2lkdGhEcmFnU3RhcnQoZmllbGRJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghdGhpcy5haVJlYWRvbmx5KCkgJiYgZmllbGRJZCkge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuZHJhZyh7XG4gICAgICAgICAgICAgICAgdHlwZTogRHJhZ1R5cGUuY29sdW1uV2lkdGgsXG4gICAgICAgICAgICAgICAgc291cmNlSWRzOiBuZXcgU2V0KFtmaWVsZElkXSksXG4gICAgICAgICAgICAgICAgc2Nyb2xsOiB0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZTogdGhpcy5jb29yZGluYXRlKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSb3dEcmFnU3RhcnQocmVjb3JkSWRzOiBzdHJpbmdbXSkge1xuICAgICAgICBpZiAoIXRoaXMuYWlSZWFkb25seSgpICYmICF0aGlzLmFpUm93RHJhZ0Rpc2FibGVkKCkgJiYgcmVjb3JkSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmRyYWcoe1xuICAgICAgICAgICAgICAgIHR5cGU6IERyYWdUeXBlLnJlY29yZCxcbiAgICAgICAgICAgICAgICBzb3VyY2VJZHM6IG5ldyBTZXQocmVjb3JkSWRzKSxcbiAgICAgICAgICAgICAgICBzY3JvbGw6IHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxcbiAgICAgICAgICAgICAgICBjb29yZGluYXRlOiB0aGlzLmNvb3JkaW5hdGUoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFNjcm9sbFBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCBob3Jpem9udGFsQmFyID0gdGhpcy5ob3Jpem9udGFsQmFyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHZlcnRpY2FsQmFyID0gdGhpcy52ZXJ0aWNhbEJhclJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBsZXQgc2Nyb2xsTGVmdCA9IGhvcml6b250YWxCYXI/LnNjcm9sbExlZnQgfHwgMDtcbiAgICAgICAgbGV0IHNjcm9sbFRvcCA9IHZlcnRpY2FsQmFyPy5zY3JvbGxUb3AgfHwgMDtcbiAgICAgICAgcmV0dXJuIHsgeDogc2Nyb2xsTGVmdCwgeTogc2Nyb2xsVG9wIH07XG4gICAgfVxuXG4gICAgZHJhZ0VuZChkYXRhOiBEcmFnRW5kRGF0YSkge1xuICAgICAgICBzd2l0Y2ggKGRhdGEudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBEcmFnVHlwZS5maWVsZDpcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5maWVsZHNJbmRleCAmJiBpc051bWJlcihkYXRhLnRhcmdldEluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEuZmllbGRzSW5kZXgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlNb3ZlRmllbGQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogW2RhdGEuZmllbGRzSW5kZXhbaV1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhdGg6IFtkYXRhLnRhcmdldEluZGV4ICsgaV1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEcmFnVHlwZS5jb2x1bW5XaWR0aDpcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5maWVsZElkcyAmJiBpc051bWJlcihkYXRhLndpZHRoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZElkID0gZGF0YS5maWVsZElkcy52YWx1ZXMoKS5uZXh0KCkudmFsdWUhO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFpU2V0RmllbGRXaWR0aC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IFtmaWVsZElkXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBkYXRhLndpZHRoXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUucmVjb3JkOlxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlY29yZElkcyAmJiBpc051bWJlcihkYXRhLnRhcmdldEluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFpTW92ZVJlY29yZHMuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRJZHM6IEFycmF5LmZyb20oZGF0YS5yZWNvcmRJZHMpLm1hcCgoaWQpID0+IFtpZF0gYXMgSWRQYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1BhdGg6IFtkYXRhLnRhcmdldEluZGV4XVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyRHJhZygpO1xuICAgIH1cbn1cbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImFpLXRhYmxlLWdyaWQtdmlld1wiPlxuICAgIEBpZiAoaGFzQ29udGFpbmVyUmVjdCgpKSB7XG4gICAgICAgIDxhaS10YWJsZS1yZW5kZXJlclxuICAgICAgICAgICAgW2NvbmZpZ109XCJyZW5kZXJlckNvbmZpZygpXCJcbiAgICAgICAgICAgIChrb01vdXNlbW92ZSk9XCJzdGFnZU1vdXNlbW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb01vdXNlZG93bik9XCJzdGFnZU1vdXNlZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb01vdXNldXApPVwic3RhZ2VNb3VzZXVwKCRldmVudClcIlxuICAgICAgICAgICAgKGtvQ29udGV4dG1lbnUpPVwic3RhZ2VDb250ZXh0bWVudSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb0NsaWNrKT1cInN0YWdlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29EYmxjbGljayk9XCJzdGFnZURibGNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKGtvTW91c2VsZWF2ZSk9XCJzdGFnZU1vdXNlbGVhdmUoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgI2hvcml6b250YWxCYXIgY2xhc3M9XCJhaS10YWJsZS1ob3Jpem9udGFsLXNjcm9sbC1iYXItd3JhcHBlclwiIFtzdHlsZS53aWR0aC5weF09XCJjb250YWluZXJSZWN0KCkud2lkdGhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktdGFibGUtc2Nyb2xsLWJhci1pbm5lclwiIFtzdHlsZS53aWR0aC5weF09XCJzY3JvbGxiYXJXaWR0aCgpXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAjdmVydGljYWxCYXJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFpLXRhYmxlLXZlcnRpY2FsLXNjcm9sbC1iYXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJjb250YWluZXJSZWN0KCkuaGVpZ2h0IC0gZmllbGRIZWFkSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudG9wLnB4XT1cImZpZWxkSGVhZEhlaWdodFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXRhYmxlLXNjcm9sbC1iYXItaW5uZXJcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cInNjcm9sbFRvdGFsSGVpZ2h0KClcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2FpLXRhYmxlLXJlbmRlcmVyPlxuICAgIH1cbiAgICA8YWktdGFibGUtZHJhZyAoZHJhZ0VuZCk9XCJkcmFnRW5kKCRldmVudClcIj48L2FpLXRhYmxlLWRyYWc+XG48L2Rpdj5cbiJdfQ==
622
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sTUFBTSxFQUlOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQ0gsYUFBYSxFQUNiLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLGdDQUFnQyxFQUNoQyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUN2QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBSUgsVUFBVSxFQUNWLGVBQWUsRUFHZixRQUFRLEVBRVIsT0FBTyxFQUVWLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1B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Q0FBQyw2WUN6RjlGLGd3Q0EyQkEsNENENkRjLGVBQWUsNk1BQUUsb0JBQW9COzs0RkFHdEMsV0FBVztrQkFYdkIsU0FBUzsrQkFDSSxlQUFlLGNBRWIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxlQUFlO3FCQUN6QixXQUNRLENBQUMsZUFBZSxFQUFFLG9CQUFvQixDQUFDLGFBQ3JDLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIGFmdGVyTmV4dFJlbmRlcixcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgaW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgU2lnbmFsLFxuICAgIHNpZ25hbCxcbiAgICB1bnRyYWNrZWQsXG4gICAgdmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmaWx0ZXIsIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgS29FdmVudE9iamVjdCB9IGZyb20gJy4vYW5ndWxhci1rb252YSc7XG5pbXBvcnQge1xuICAgIEFJX1RBQkxFX0NFTEwsXG4gICAgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT04sXG4gICAgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTl9XSURUSCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFELFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hULFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX09QQUNJVFlfTElORSxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX1NFTEVDVF9DSEVDS0JPWCxcbiAgICBBSV9UQUJMRV9QUkVWRU5UX0NMRUFSX1NFTEVDVElPTl9DTEFTUyxcbiAgICBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTixcbiAgICBBSV9UQUJMRV9ST1dfRFJBRyxcbiAgICBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCxcbiAgICBBSV9UQUJMRV9ST1dfU0VMRUNUX0NIRUNLQk9YLFxuICAgIERCTF9DTElDS19FRElUX1RZUEUsXG4gICAgREVGQVVMVF9QT0lOVF9QT1NJVElPTixcbiAgICBERUZBVUxUX1NDUk9MTF9TVEFURVxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZEZpZWxkT3B0aW9ucyxcbiAgICBBZGRSZWNvcmRPcHRpb25zLFxuICAgIEFJVGFibGVGaWVsZCxcbiAgICBDb29yZGluYXRlLFxuICAgIFJlbmRlcmVyQ29udGV4dCxcbiAgICBVcGRhdGVGaWVsZFZhbHVlT3B0aW9ucyxcbiAgICBEcmFnRW5kRGF0YSxcbiAgICBEcmFnVHlwZSxcbiAgICBBSVJlY29yZEZpZWxkSWRQYXRoLFxuICAgIEFJVGFibGUsXG4gICAgSWRQYXRoXG59IGZyb20gJy4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEJhc2UgfSBmcm9tICcuL2dyaWQtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZVJlbmRlcmVyIH0gZnJvbSAnLi9yZW5kZXJlci9yZW5kZXJlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRFdmVudFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRGaWVsZFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2ZpZWxkLnNlcnZpY2UnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICAgIEFJVGFibGVBcmVhVHlwZSxcbiAgICBBSVRhYmxlQ29udGV4dE1lbnVJdGVtLFxuICAgIEFJVGFibGVNb3VzZURvd25UeXBlLFxuICAgIEFJVGFibGVSZW5kZXJlckNvbmZpZyxcbiAgICBBSVRhYmxlU2VsZWN0QWxsU3RhdGUsXG4gICAgU2Nyb2xsQWN0aW9uT3B0aW9uc1xufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gICAgQUlUYWJsZUdyaWRJMThuS2V5LFxuICAgIGJ1aWxkR3JpZExpbmVhclJvd3MsXG4gICAgZ2V0Q29sdW1uSW5kaWNlc1NpemVNYXAsXG4gICAgZ2V0RGV0YWlsQnlUYXJnZXROYW1lLFxuICAgIGdldEkxOG5UZXh0QnlLZXksXG4gICAgaGFuZGxlTW91c2VTdHlsZSxcbiAgICBpc0NlbGxNYXRjaEtleXdvcmRzLFxuICAgIGlzV2luZG93c1xufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGdldE1vdXNlUG9zaXRpb24gfSBmcm9tICcuL3V0aWxzL3Bvc2l0aW9uJztcbmltcG9ydCB7IEFJVGFibGVEcmFnQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgYnVpbGRDbGlwYm9hcmREYXRhLCB3cml0ZVRvQ2xpcGJvYXJkLCB3cml0ZVRvQUlUYWJsZSwgQUlUYWJsZUFjdGlvbnMgfSBmcm9tICcuL3V0aWxzL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBUaHlOb3RpZnlTZXJ2aWNlIH0gZnJvbSAnbmd4LXRldGh5cy9ub3RpZnknO1xuaW1wb3J0IHsgaXNOdW1iZXIgfSBmcm9tICdsb2Rhc2gnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWdyaWQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdhaS10YWJsZS1ncmlkJ1xuICAgIH0sXG4gICAgaW1wb3J0czogW0FJVGFibGVSZW5kZXJlciwgQUlUYWJsZURyYWdDb21wb25lbnRdLFxuICAgIHByb3ZpZGVyczogW0FJVGFibGVHcmlkRXZlbnRTZXJ2aWNlLCBBSVRhYmxlR3JpZEZpZWxkU2VydmljZSwgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlR3JpZCBleHRlbmRzIEFJVGFibGVHcmlkQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cbiAgICBwcml2YXRlIGlzRHJhZ1NlbGVjdGluZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBkcmFnU2VsZWN0aW9uU3RhcnQ6IEFJUmVjb3JkRmllbGRJZFBhdGggfCBudWxsID0gbnVsbDtcblxuICAgIHByaXZhdGUgbm90aWZ5U2VydmljZSA9IGluamVjdChUaHlOb3RpZnlTZXJ2aWNlKTtcblxuICAgIHRpbWVyITogbnVtYmVyIHwgbnVsbDtcblxuICAgIHJlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgICBmaWVsZEhlYWRIZWlnaHQgPSBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVDtcblxuICAgIGNvbnRhaW5lclJlY3QgPSBzaWduYWwoeyB3aWR0aDogMCwgaGVpZ2h0OiAwIH0pO1xuXG4gICAgZnJvemVuQ29sdW1uQ291bnQgPSBzaWduYWwoMSk7XG5cbiAgICBoYXNDb250YWluZXJSZWN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXJSZWN0KCkud2lkdGggPiAwICYmIHRoaXMuY29udGFpbmVyUmVjdCgpLmhlaWdodCA+IDA7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXIgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2NvbnRhaW5lcicpO1xuXG4gICAgdmVydGljYWxCYXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3ZlcnRpY2FsQmFyJyk7XG5cbiAgICBob3Jpem9udGFsQmFyUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCdob3Jpem9udGFsQmFyJyk7XG5cbiAgICBsaW5lYXJSb3dzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gYnVpbGRHcmlkTGluZWFyUm93cyh0aGlzLmdyaWREYXRhKCkucmVjb3JkcywgIXRoaXMuYWlSZWFkb25seSgpKTtcbiAgICB9KTtcblxuICAgIHZpc2libGVDb2x1bW5zSW5kZXhNYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBBSVRhYmxlLmdldFZpc2libGVGaWVsZHModGhpcy5haVRhYmxlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXAoY29sdW1ucz8ubWFwKChpdGVtLCBpbmRleCkgPT4gW2l0ZW0uX2lkLCBpbmRleF0pKTtcbiAgICB9KTtcblxuICAgIHZpc2libGVSb3dzSW5kZXhNYXAgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwKHRoaXMubGluZWFyUm93cygpLm1hcCgocm93LCBpbmRleCkgPT4gW3Jvdy5faWQsIGluZGV4XSkpO1xuICAgIH0pO1xuXG4gICAgY29udGFpbmVyRWxlbWVudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyKCkhLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfSk7XG5cbiAgICByZW5kZXJlckNvbmZpZzogU2lnbmFsPEFJVGFibGVSZW5kZXJlckNvbmZpZz4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyh0aGlzLmFpVGFibGUpO1xuICAgICAgICBjb25zdCBjb29yZGluYXRlID0gbmV3IENvb3JkaW5hdGUoe1xuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSxcbiAgICAgICAgICAgIHJvd0hlaWdodDogQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsXG4gICAgICAgICAgICByb3dDb3VudDogdGhpcy5saW5lYXJSb3dzKCkubGVuZ3RoLFxuICAgICAgICAgICAgY29sdW1uQ291bnQ6IGZpZWxkcy5sZW5ndGgsXG4gICAgICAgICAgICByb3dJbml0U2l6ZTogQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsXG4gICAgICAgICAgICBjb2x1bW5Jbml0U2l6ZTogQUlfVEFCTEVfUk9XX0hFQURfV0lEVEgsXG4gICAgICAgICAgICByb3dJbmRpY2VzU2l6ZU1hcDoge30sXG4gICAgICAgICAgICBjb2x1bW5JbmRpY2VzU2l6ZU1hcDogZ2V0Q29sdW1uSW5kaWNlc1NpemVNYXAodGhpcy5haVRhYmxlLCBmaWVsZHMpLFxuICAgICAgICAgICAgZnJvemVuQ29sdW1uQ291bnQ6IHRoaXMuZnJvemVuQ29sdW1uQ291bnQoKVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFpVGFibGU6IHRoaXMuYWlUYWJsZSxcbiAgICAgICAgICAgIGdyaWREYXRhOiB0aGlzLmdyaWREYXRhKCksXG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgY29vcmRpbmF0ZTogY29vcmRpbmF0ZSxcbiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiB0aGlzLmNvbnRhaW5lclJlY3QoKS53aWR0aCxcbiAgICAgICAgICAgIGNvbnRhaW5lckhlaWdodDogdGhpcy5jb250YWluZXJSZWN0KCkuaGVpZ2h0LFxuICAgICAgICAgICAgcmVmZXJlbmNlczogdGhpcy5haVJlZmVyZW5jZXMoKSxcbiAgICAgICAgICAgIHJlYWRvbmx5OiB0aGlzLmFpUmVhZG9ubHkoKSxcbiAgICAgICAgICAgIHJvd0RyYWdEaXNhYmxlZDogdGhpcy5haVJvd0RyYWdEaXNhYmxlZCgpLFxuICAgICAgICAgICAgYWN0aW9uczoge1xuICAgICAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmFsdWU6IChvcHRpb25zOiBVcGRhdGVGaWVsZFZhbHVlT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVXBkYXRlRmllbGRWYWx1ZS5lbWl0KG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvb3JkaW5hdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyQ29uZmlnKCkuY29vcmRpbmF0ZTtcbiAgICB9KTtcblxuICAgIHNjcm9sbFRvdGFsSGVpZ2h0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5jb29yZGluYXRlKCkudG90YWxIZWlnaHQsIHRoaXMuY29udGFpbmVyUmVjdCgpLmhlaWdodCAtIHRoaXMuZmllbGRIZWFkSGVpZ2h0KTtcbiAgICB9KTtcblxuICAgIHNjcm9sbGJhcldpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb29yZGluYXRlKCkudG90YWxXaWR0aCArIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEg7XG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0Q29udGFpbmVyUmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5iaW5kR2xvYmFsTW91c2Vkb3duKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lclJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLmJpbmRXaGVlbCgpO1xuICAgICAgICAgICAgdGhpcy5iaW5kQ2xpcGJvYXJkU2hvcnRjdXRzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ29udGFpbmVyUmVjdCgpICYmIHRoaXMuaG9yaXpvbnRhbEJhclJlZigpICYmIHRoaXMudmVydGljYWxCYXJSZWYoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZFNjcm9sbEJhclNjcm9sbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0S2V5d29yZHNNYXRjaGVkQ2VsbHMoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIOW9k+aWsOWinuihjOmAieS4reeahGNlbGws57yW6L6R5ZCO77yMYWN0aXZlQ2VsbCDkuI3lnKjmlrDlop7nmoTooYzkuK3ml7bvvIzmoLnmja7nrZvpgIkg6L+H5ruk6KGM5pWw5o2uLOinpuWPkemHjeaWsOa4suafk1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUNlbGxQYXRoID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLmFjdGl2ZUNlbGw7XG4gICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhY3RpdmVDZWxsUGF0aCB8fCAhdGhpcy5haVRhYmxlLnJlY29yZHNXaWxsSGlkZGVuKCkuaW5jbHVkZXMoYWN0aXZlQ2VsbFBhdGhbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5haVRhYmxlLnJlY29yZHNXaWxsSGlkZGVuKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5yZWNvcmRzV2lsbEhpZGRlbi5zZXQoW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG5cbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZElkU2V0ID0gbmV3IFNldDxzdHJpbmc+KHRoaXMuYWlUYWJsZS5yZWNvcmRzKCkubWFwKChpdGVtKSA9PiBpdGVtLl9pZCkpO1xuICAgICAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkcyA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHM7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2VsZWN0ZWRSZWNvcmRJZCBvZiBzZWxlY3RlZFJlY29yZHMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVjb3JkSWRTZXQuaGFzKHNlbGVjdGVkUmVjb3JkSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSZWNvcmRzLmRlbGV0ZShzZWxlY3RlZFJlY29yZElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGUuc2VsZWN0aW9uLnVwZGF0ZSgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUmVjb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RBbGxTdGF0ZTogdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0QWxsU3RhdGUoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuaW5pdENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdENvbnRleHQoKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0ID0gbmV3IFJlbmRlcmVyQ29udGV4dCh7XG4gICAgICAgICAgICBsaW5lYXJSb3dzOiB0aGlzLmxpbmVhclJvd3MsXG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uc0luZGV4TWFwOiB0aGlzLnZpc2libGVDb2x1bW5zSW5kZXhNYXAsXG4gICAgICAgICAgICB2aXNpYmxlUm93c0luZGV4TWFwOiB0aGlzLnZpc2libGVSb3dzSW5kZXhNYXAsXG4gICAgICAgICAgICBwb2ludFBvc2l0aW9uOiBzaWduYWwoREVGQVVMVF9QT0lOVF9QT1NJVElPTiksXG4gICAgICAgICAgICBzY3JvbGxTdGF0ZTogc2lnbmFsKERFRkFVTFRfU0NST0xMX1NUQVRFKSxcbiAgICAgICAgICAgIGZyb3plbkNvbHVtbkNvdW50OiB0aGlzLmZyb3plbkNvbHVtbkNvdW50LFxuICAgICAgICAgICAgcmVmZXJlbmNlczogdGhpcy5haVJlZmVyZW5jZXMsXG4gICAgICAgICAgICBhaUZpZWxkQ29uZmlnOiB0aGlzLmFpRmllbGRDb25maWcsXG4gICAgICAgICAgICBzY3JvbGxBY3Rpb246IHRoaXMuc2Nyb2xsQWN0aW9uXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0S2V5d29yZHNNYXRjaGVkQ2VsbHMoKSB7XG4gICAgICAgIGNvbnN0IGtleXdvcmRzID0gdGhpcy5haUtleXdvcmRzKCk7XG4gICAgICAgIGxldCBtYXRjaGVkQ2VsbHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICBpZiAoa2V5d29yZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB0aGlzLmFpUmVmZXJlbmNlcygpO1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlLnJlY29yZHMoKS5mb3JFYWNoKChyZWNvcmQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGUuZmllbGRzKCkuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ2VsbE1hdGNoS2V5d29yZHModGhpcy5haVRhYmxlLCBmaWVsZCwgcmVjb3JkLl9pZCwga2V5d29yZHMsIHJlZmVyZW5jZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkQ2VsbHMuYWRkKGAke3JlY29yZC5faWR9OiR7ZmllbGQuX2lkfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWlUYWJsZS5rZXl3b3Jkc01hdGNoZWRDZWxscy5zZXQobWF0Y2hlZENlbGxzKTtcbiAgICB9XG5cbiAgICBzdGFnZU1vdXNlbW92ZShlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGlmICh0aGlzLnRpbWVyKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRpbWVyID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgICAgICBjb25zdCBncmlkU3RhZ2UgPSBlLmV2ZW50LmN1cnJlbnRUYXJnZXQuZ2V0U3RhZ2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IGdyaWRTdGFnZT8uZ2V0UG9pbnRlclBvc2l0aW9uKCk7XG4gICAgICAgICAgICBpZiAocG9zID09IG51bGwpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHsgY29udGV4dCB9ID0gdGhpcy5haVRhYmxlO1xuICAgICAgICAgICAgY29uc3QgeyB4LCB5IH0gPSBwb3M7XG4gICAgICAgICAgICBjb25zdCBjdXJNb3VzZVBvc2l0aW9uID0gZ2V0TW91c2VQb3NpdGlvbihcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGUsXG4gICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICB5LFxuICAgICAgICAgICAgICAgIHRoaXMuY29vcmRpbmF0ZSgpLFxuICAgICAgICAgICAgICAgIEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyh0aGlzLmFpVGFibGUpLFxuICAgICAgICAgICAgICAgIGNvbnRleHQhLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBoYW5kbGVNb3VzZVN0eWxlKFxuICAgICAgICAgICAgICAgIGN1ck1vdXNlUG9zaXRpb24ucmVhbFRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgY3VyTW91c2VQb3NpdGlvbi5hcmVhVHlwZSxcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSxcbiAgICAgICAgICAgICAgICB0aGlzLmFpUmVhZG9ubHkoKSxcbiAgICAgICAgICAgICAgICB0aGlzLmFpUm93RHJhZ0Rpc2FibGVkKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoY3VyTW91c2VQb3NpdGlvbi5hcmVhVHlwZSAhPT0gQUlUYWJsZUFyZWFUeXBlLm5vbmUpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0IS5zZXRQb2ludFBvc2l0aW9uKGN1ck1vdXNlUG9zaXRpb24pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0IS5zZXRQb2ludFBvc2l0aW9uKERFRkFVTFRfUE9JTlRfUE9TSVRJT04pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RyYWdTZWxlY3RpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGZpZWxkSWQsIHJlY29yZElkIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUoY3VyTW91c2VQb3NpdGlvbi5yZWFsVGFyZ2V0TmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkSWQgJiYgcmVjb3JkSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhcnRDZWxsID0gdGhpcy5kcmFnU2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVuZENlbGw6IEFJUmVjb3JkRmllbGRJZFBhdGggPSBbcmVjb3JkSWQsIGZpZWxkSWRdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRDZWxsICYmICEhc3RhcnRDZWxsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q2VsbHMoc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhZ2VNb3VzZWRvd24oZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5ldmVudC5ldnQ7XG4gICAgICAgIGNvbnN0IF90YXJnZXROYW1lID0gZS5ldmVudC50YXJnZXQubmFtZSgpO1xuXG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0TmFtZSwgZmllbGRJZCwgcmVjb3JkSWQgfSA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZShfdGFyZ2V0TmFtZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1vdXNlRXZlbnQuYnV0dG9uID09PSBBSVRhYmxlTW91c2VEb3duVHlwZS5SaWdodCAmJlxuICAgICAgICAgICAgcmVjb3JkSWQgJiZcbiAgICAgICAgICAgIGZpZWxkSWQgJiZcbiAgICAgICAgICAgICh0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRSZWNvcmRzLmhhcyhyZWNvcmRJZCkgfHwgdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuaGFzKGAke3JlY29yZElkfToke2ZpZWxkSWR9YCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICh0YXJnZXROYW1lKSB7XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0hFQUQ6XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmICghZmllbGRJZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdEZpZWxkKGZpZWxkSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmllbGREcmFnU3RhcnQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0hFQURfT1BBQ0lUWV9MSU5FOlxuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpZWxkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpZWxkV2lkdGhEcmFnU3RhcnQoZmllbGRJZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9DRUxMOlxuICAgICAgICAgICAgICAgIGlmICghcmVjb3JkSWQgfHwgIWZpZWxkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnU2VsZWN0aW9uU3RhcnQ6IEFJUmVjb3JkRmllbGRJZFBhdGggPSBbcmVjb3JkSWQsIGZpZWxkSWRdO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRHJhZ1NlbGVjdGlvblN0YXRlKHRydWUsIGRyYWdTZWxlY3Rpb25TdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q2VsbHMoZHJhZ1NlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX1JPV19EUkFHOlxuICAgICAgICAgICAgICAgIGlmICghcmVjb3JkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZWNvcmRzID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3JkcztcbiAgICAgICAgICAgICAgICBsZXQgZHJhZ1JlY29yZHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkUmVjb3Jkcy5oYXMocmVjb3JkSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRyYWdSZWNvcmRzID0gW3JlY29yZElkLCAuLi5zZWxlY3RlZFJlY29yZHMudmFsdWVzKCldO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIOW9k+WJjeaLluaLveihjOS4jeWcqOmAieS4reihjOS4re+8jOWPquaLluaLveW9k+WJjeihjFxuICAgICAgICAgICAgICAgICAgICBkcmFnUmVjb3JkcyA9IFtyZWNvcmRJZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93RHJhZ1N0YXJ0KGRyYWdSZWNvcmRzKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX1JPV19BRERfQlVUVE9OOlxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OOlxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfU0VMRUNUX0NIRUNLQk9YOlxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX1NFTEVDVF9DSEVDS0JPWDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGFnZU1vdXNldXAoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICB0aGlzLnVwZGF0ZURyYWdTZWxlY3Rpb25TdGF0ZShmYWxzZSwgbnVsbCk7XG4gICAgfVxuXG4gICAgc3RhZ2VNb3VzZWxlYXZlKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjb250ZXh0IH0gPSB0aGlzLmFpVGFibGU7XG4gICAgICAgICAgICBjb250ZXh0IS5zZXRQb2ludFBvc2l0aW9uKERFRkFVTFRfUE9JTlRfUE9TSVRJT04pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGFnZUNvbnRleHRtZW51KGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IGUuZXZlbnQuZXZ0O1xuICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWlSZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YXJnZXROYW1lID0gZS5ldmVudC50YXJnZXQubmFtZSgpO1xuICAgICAgICBjb25zdCB7IGZpZWxkSWQsIHJlY29yZElkIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUodGFyZ2V0TmFtZSk7XG4gICAgICAgIGlmICghcmVjb3JkSWQgfHwgIWZpZWxkSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgICAgICAgeDogbW91c2VFdmVudC54LFxuICAgICAgICAgICAgeTogbW91c2VFdmVudC55XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgbWVudUl0ZW1zOiBBSVRhYmxlQ29udGV4dE1lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuYWlDb250ZXh0TWVudUl0ZW1zKCkpIHtcbiAgICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKC4uLnRoaXMuYWlDb250ZXh0TWVudUl0ZW1zKCkhKHRoaXMuYWlUYWJsZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWVudUl0ZW1zLmxlbmd0aCB8fCBtZW51SXRlbXMuZXZlcnkoKGl0ZW0pID0+ICEhKGl0ZW0uaGlkZGVuICYmIGl0ZW0uaGlkZGVuKHRoaXMuYWlUYWJsZSwgdGFyZ2V0TmFtZSwgcG9zaXRpb24pKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2Uub3BlbkNvbnRleHRNZW51KHRoaXMuYWlUYWJsZSwge1xuICAgICAgICAgICAgb3JpZ2luOiB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSxcbiAgICAgICAgICAgIG1lbnVJdGVtcyxcbiAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZlxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGFnZUNsaWNrKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZURldGFpbCA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZShlLmV2ZW50LnRhcmdldC5uYW1lKCkpO1xuICAgICAgICB0aGlzLmFpQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZURldGFpbFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IGUuZXZlbnQuZXZ0O1xuICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuY2xvc2VDZWxsRWRpdG9yKCk7XG5cbiAgICAgICAgY29uc3QgeyBjb250ZXh0IH0gPSB0aGlzLmFpVGFibGU7XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0TmFtZSwgcm93SW5kZXg6IHBvaW50Um93SW5kZXggfSA9IGNvbnRleHQhLnBvaW50UG9zaXRpb24oKTtcbiAgICAgICAgaWYgKG1vdXNlRXZlbnQuYnV0dG9uICE9PSBBSVRhYmxlTW91c2VEb3duVHlwZS5MZWZ0IHx8ICh0YXJnZXROYW1lICE9PSBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkUgJiYgdGhpcy5haVJlYWRvbmx5KCkpKSByZXR1cm47XG4gICAgICAgIHN3aXRjaCAodGFyZ2V0TmFtZSkge1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRSZWNvcmQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHJlY29yZHMsIGZpZWxkcyB9ID0gdGhpcy5ncmlkRGF0YSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNldEFjdGl2ZUNlbGwoW3JlY29yZHNbcmVjb3Jkcy5sZW5ndGggLSAxXS5faWQsIGZpZWxkc1swXS5faWRdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfUk9XX1NFTEVDVF9DSEVDS0JPWDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50UmVjb3JkSWQgPSBjb250ZXh0IS5saW5lYXJSb3dzKClbcG9pbnRSb3dJbmRleF0/Ll9pZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJlY29yZChwb2ludFJlY29yZElkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfSEVBRF9TRUxFQ1RfQ0hFQ0tCT1g6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0NoZWNrZWQgPSB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0QWxsU3RhdGUgPT09IEFJVGFibGVTZWxlY3RBbGxTdGF0ZS5hbGw7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RBbGwoIWlzQ2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT046IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkR3JvdXBSZWN0ID0gZS5ldmVudC50YXJnZXQuZ2V0UGFyZW50KCk/LmdldENsaWVudFJlY3QoKSE7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmllbGQodGhpcy5jb250YWluZXJFbGVtZW50KCksIHtcbiAgICAgICAgICAgICAgICAgICAgeDogZmllbGRHcm91cFJlY3QueCArIGNvbnRhaW5lclJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgeTogY29udGFpbmVyUmVjdC55ICsgZmllbGRHcm91cFJlY3QueSArIGZpZWxkR3JvdXBSZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkU6XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IF90YXJnZXROYW1lID0gZS5ldmVudC50YXJnZXQubmFtZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmllbGRJZCB9ID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKF90YXJnZXROYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRJZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb3JlUmVjdCA9IGUuZXZlbnQudGFyZ2V0LmdldENsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRHcm91cFJlY3QgPSBlLmV2ZW50LnRhcmdldC5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldENsaWVudFJlY3QoKSE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGNvbnRhaW5lclJlY3QueCArIG1vcmVSZWN0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBjb250YWluZXJSZWN0LnkgKyBtb3JlUmVjdC55ICsgbW9yZVJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRGaWVsZFBvc2l0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogY29udGFpbmVyUmVjdC54ICsgZmllbGRHcm91cFJlY3QueCAtIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGNvbnRhaW5lclJlY3QueSArIGZpZWxkR3JvdXBSZWN0LnkgKyBmaWVsZEdyb3VwUmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlZGl0T3JpZ2luID0gdGhpcy5jb250YWluZXJFbGVtZW50KCkucXVlcnlTZWxlY3RvcignLmtvbnZhanMtY29udGVudCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRmllbGRTZXJ2aWNlLm9wZW5GaWVsZE1lbnUodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRNZW51czogdGhpcy5maWVsZE1lbnVzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0T3JpZ2luOiBlZGl0T3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdEZpZWxkUG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdGFnZURibGNsaWNrKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgY29uc3QgX3RhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWVEZXRhaWwgPSBnZXREZXRhaWxCeVRhcmdldE5hbWUoX3RhcmdldE5hbWUpO1xuICAgICAgICB0aGlzLmFpRGJDbGljay5lbWl0KHtcbiAgICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgICB0YXJnZXROYW1lRGV0YWlsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0aGlzLmFpUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBmaWVsZElkLCByZWNvcmRJZCB9ID0gdGFyZ2V0TmFtZURldGFpbDtcbiAgICAgICAgaWYgKCFyZWNvcmRJZCB8fCAhZmllbGRJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5haVRhYmxlLmZpZWxkc01hcCgpW2ZpZWxkSWRdO1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZC50eXBlO1xuICAgICAgICBpZiAoREJMX0NMSUNLX0VESVRfVFlQRS5pbmNsdWRlcyhmaWVsZFR5cGUpKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLm9wZW5DZWxsRWRpdG9yKHRoaXMuYWlUYWJsZSwge1xuICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXJFbGVtZW50KCksXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRoaXMuY29vcmRpbmF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZElkISxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkSWQ6IHJlY29yZElkISxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlczogdGhpcy5haVJlZmVyZW5jZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlRmllbGRWYWx1ZTogKHZhbHVlOiBVcGRhdGVGaWVsZFZhbHVlT3B0aW9uczxhbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVXBkYXRlRmllbGRWYWx1ZS5lbWl0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRXaGVlbCgpIHtcbiAgICAgICAgZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KHRoaXMuY29udGFpbmVyRWxlbWVudCgpLCAnd2hlZWwnLCB7IHBhc3NpdmU6IGZhbHNlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGU6IFdoZWVsRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5jbG9zZUNlbGxFZGl0b3IoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEFjdGlvbih7IGRlbHRhWDogZS5kZWx0YVgsIGRlbHRhWTogZS5kZWx0YVksIHNoaWZ0S2V5OiBlLnNoaWZ0S2V5IH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2Nyb2xsQWN0aW9uID0gKG9wdGlvbnM6IFNjcm9sbEFjdGlvbk9wdGlvbnMpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBkZWx0YVgsIGRlbHRhWSwgc2hpZnRLZXkgfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBmaXhlZERlbHRhWSA9IHNoaWZ0S2V5ICYmIGlzV2luZG93cyA/IDAgOiBkZWx0YVk7XG4gICAgICAgICAgICBjb25zdCBmaXhlZERlbHRhWCA9IHNoaWZ0S2V5ICYmIGlzV2luZG93cyA/IGRlbHRhWSA6IGRlbHRhWDtcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxCYXIgPSB0aGlzLmhvcml6b250YWxCYXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsQmFyID0gdGhpcy52ZXJ0aWNhbEJhclJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGhvcml6b250YWxCYXIpIHtcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsQmFyLnNjcm9sbExlZnQgPSBob3Jpem9udGFsQmFyLnNjcm9sbExlZnQgKyBmaXhlZERlbHRhWDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2ZXJ0aWNhbEJhcikge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsQmFyLnNjcm9sbFRvcCA9IHZlcnRpY2FsQmFyLnNjcm9sbFRvcCArIGZpeGVkRGVsdGFZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFjayAmJiBvcHRpb25zLmNhbGxiYWNrKCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVyID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgYmluZFNjcm9sbEJhclNjcm9sbCgpIHtcbiAgICAgICAgZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KHRoaXMuaG9yaXpvbnRhbEJhclJlZigpIS5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvcml6b250YWxTY3JvbGwoZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy52ZXJ0aWNhbEJhclJlZigpIS5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnRpY2FsU2Nyb2xsKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kR2xvYmFsTW91c2Vkb3duKCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZWRvd24nLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5jb250YWlucyhlLnRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFlLnRhcmdldC5jbG9zZXN0KEFJX1RBQkxFX1BSRVZFTlRfQ0xFQVJfU0VMRUNUSU9OX0NMQVNTKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRHJhZ1NlbGVjdGlvblN0YXRlKGZhbHNlLCBudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVEcmFnU2VsZWN0aW9uU3RhdGUoaXNEcmFnU2VsZWN0aW5nOiBib29sZWFuLCBkcmFnU2VsZWN0aW9uU3RhcnQ6IEFJUmVjb3JkRmllbGRJZFBhdGggfCBudWxsKSB7XG4gICAgICAgIHRoaXMuaXNEcmFnU2VsZWN0aW5nID0gaXNEcmFnU2VsZWN0aW5nO1xuICAgICAgICB0aGlzLmRyYWdTZWxlY3Rpb25TdGFydCA9IGRyYWdTZWxlY3Rpb25TdGFydDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0U2Nyb2xsaW5nID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmFpVGFibGUuY29udGV4dCEuc2V0U2Nyb2xsU3RhdGUoe1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhvcml6b250YWxTY3JvbGwgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCB9ID0gZS50YXJnZXQ7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0IS5zZXRTY3JvbGxTdGF0ZSh7XG4gICAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzZXRTY3JvbGxpbmcoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSB2ZXJ0aWNhbFNjcm9sbChlOiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AgfSA9IGUudGFyZ2V0O1xuICAgICAgICB0aGlzLmFpVGFibGUuY29udGV4dCEuc2V0U2Nyb2xsU3RhdGUoe1xuICAgICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzZXRTY3JvbGxpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENvbnRhaW5lclJlY3QoKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyUmVjdC5zZXQoe1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5vZmZzZXRIZWlnaHRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb250YWluZXJSZXNpemVMaXN0ZW5lcigpIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgdG90YWxXaWR0aCA9IHRoaXMuY29vcmRpbmF0ZSgpLnRvdGFsV2lkdGggKyBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OX1dJRFRIO1xuICAgICAgICAgICAgdGhpcy5zZXRDb250YWluZXJSZWN0KCk7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyV2lkdGggPj0gdG90YWxXaWR0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0IS5zZXRTY3JvbGxTdGF0ZSh7IHNjcm9sbExlZnQ6IDAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGFpbmVyRWxlbWVudCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRDbGlwYm9hcmRTaG9ydGN1dHMoKSB7XG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgKGV2ZW50LmtleSA9PT0gJ2MnIHx8IGV2ZW50LmtleSA9PT0gJ3YnKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWlSZWFkb25seSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNTZWxlY3RlZENlbGxzID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuc2l6ZSA+IDA7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNTZWxlY3RlZENlbGxzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNFZGl0aW5nQ2VsbCA9ICEhdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5nZXRDdXJyZW50RWRpdENlbGwoKTtcblxuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdjJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjbGlwYm9hcmREYXRhID0gYnVpbGRDbGlwYm9hcmREYXRhKHRoaXMuYWlUYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVRvQ2xpcGJvYXJkKGNsaXBib2FyZERhdGEpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvcGllZENlbGxzQ291bnQgPSB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRDZWxscy5zaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBnZXRJMThuVGV4dEJ5S2V5KHRoaXMuYWlUYWJsZSwgQUlUYWJsZUdyaWRJMThuS2V5LmNvcGllZENlbGxzKS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAne2NvdW50fScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcGllZENlbGxzQ291bnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLnN1Y2Nlc3MobWVzc2FnZSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbUxlZnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAndicgJiYgIWhhc0VkaXRpbmdDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aW9uczogQUlUYWJsZUFjdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVGaWVsZFZhbHVlOiAoZGF0YTogVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVXBkYXRlRmllbGRWYWx1ZS5lbWl0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpZWxkOiAoZmllbGQ6IEFJVGFibGVGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlTZXRGaWVsZC5lbWl0KGZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRGaWVsZDogKGRhdGE6IEFkZEZpZWxkT3B0aW9ucykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlBZGRGaWVsZC5lbWl0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJlY29yZDogKGRhdGE6IEFkZFJlY29yZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZFJlY29yZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVG9BSVRhYmxlKHRoaXMuYWlUYWJsZSwgYWN0aW9ucykudGhlbigoaXNQYXN0ZVN1Y2Nlc3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXN0ZVN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuZXJyb3IoZ2V0STE4blRleHRCeUtleSh0aGlzLmFpVGFibGUsIEFJVGFibGVHcmlkSTE4bktleS5pbnZhbGlkUGFzdGVDb250ZW50KSwgdW5kZWZpbmVkLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ2JvdHRvbUxlZnQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRmllbGREcmFnU3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5haVJlYWRvbmx5KCkgJiYgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0ZWRGaWVsZHMuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmRyYWcoe1xuICAgICAgICAgICAgICAgIHR5cGU6IERyYWdUeXBlLmZpZWxkLFxuICAgICAgICAgICAgICAgIHNvdXJjZUlkczogdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0ZWRGaWVsZHMsXG4gICAgICAgICAgICAgICAgc2Nyb2xsOiB0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZTogdGhpcy5jb29yZGluYXRlKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVGaWVsZFdpZHRoRHJhZ1N0YXJ0KGZpZWxkSWQ6IHN0cmluZykge1xuICAgICAgICBpZiAoIXRoaXMuYWlSZWFkb25seSgpICYmIGZpZWxkSWQpIHtcbiAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmRyYWcoe1xuICAgICAgICAgICAgICAgIHR5cGU6IERyYWdUeXBlLmNvbHVtbldpZHRoLFxuICAgICAgICAgICAgICAgIHNvdXJjZUlkczogbmV3IFNldChbZmllbGRJZF0pLFxuICAgICAgICAgICAgICAgIHNjcm9sbDogdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRoaXMuY29vcmRpbmF0ZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUm93RHJhZ1N0YXJ0KHJlY29yZElkczogc3RyaW5nW10pIHtcbiAgICAgICAgaWYgKCF0aGlzLmFpUmVhZG9ubHkoKSAmJiAhdGhpcy5haVJvd0RyYWdEaXNhYmxlZCgpICYmIHJlY29yZElkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5kcmFnKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBEcmFnVHlwZS5yZWNvcmQsXG4gICAgICAgICAgICAgICAgc291cmNlSWRzOiBuZXcgU2V0KHJlY29yZElkcyksXG4gICAgICAgICAgICAgICAgc2Nyb2xsOiB0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgY29vcmRpbmF0ZTogdGhpcy5jb29yZGluYXRlKClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbEJhciA9IHRoaXMuaG9yaXpvbnRhbEJhclJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB2ZXJ0aWNhbEJhciA9IHRoaXMudmVydGljYWxCYXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgbGV0IHNjcm9sbExlZnQgPSBob3Jpem9udGFsQmFyPy5zY3JvbGxMZWZ0IHx8IDA7XG4gICAgICAgIGxldCBzY3JvbGxUb3AgPSB2ZXJ0aWNhbEJhcj8uc2Nyb2xsVG9wIHx8IDA7XG4gICAgICAgIHJldHVybiB7IHg6IHNjcm9sbExlZnQsIHk6IHNjcm9sbFRvcCB9O1xuICAgIH1cblxuICAgIGRyYWdFbmQoZGF0YTogRHJhZ0VuZERhdGEpIHtcbiAgICAgICAgc3dpdGNoIChkYXRhLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUuZmllbGQ6XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZmllbGRzSW5kZXggJiYgaXNOdW1iZXIoZGF0YS50YXJnZXRJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmZpZWxkc0luZGV4Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpTW92ZUZpZWxkLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IFtkYXRhLmZpZWxkc0luZGV4W2ldXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXRoOiBbZGF0YS50YXJnZXRJbmRleCArIGldXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUuY29sdW1uV2lkdGg6XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZmllbGRJZHMgJiYgaXNOdW1iZXIoZGF0YS53aWR0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRJZCA9IGRhdGEuZmllbGRJZHMudmFsdWVzKCkubmV4dCgpLnZhbHVlITtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5haVNldEZpZWxkV2lkdGguZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBbZmllbGRJZF0sXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZGF0YS53aWR0aFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLnJlY29yZDpcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZWNvcmRJZHMgJiYgaXNOdW1iZXIoZGF0YS50YXJnZXRJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5haU1vdmVSZWNvcmRzLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkSWRzOiBBcnJheS5mcm9tKGRhdGEucmVjb3JkSWRzKS5tYXAoKGlkKSA9PiBbaWRdIGFzIElkUGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXRoOiBbZGF0YS50YXJnZXRJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5jbGVhckRyYWcoKTtcbiAgICB9XG59XG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJhaS10YWJsZS1ncmlkLXZpZXdcIj5cbiAgICBAaWYgKGhhc0NvbnRhaW5lclJlY3QoKSkge1xuICAgICAgICA8YWktdGFibGUtcmVuZGVyZXJcbiAgICAgICAgICAgIFtjb25maWddPVwicmVuZGVyZXJDb25maWcoKVwiXG4gICAgICAgICAgICAoa29Nb3VzZW1vdmUpPVwic3RhZ2VNb3VzZW1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29Nb3VzZWRvd24pPVwic3RhZ2VNb3VzZWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29Nb3VzZXVwKT1cInN0YWdlTW91c2V1cCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb0NvbnRleHRtZW51KT1cInN0YWdlQ29udGV4dG1lbnUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29DbGljayk9XCJzdGFnZUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgKGtvRGJsY2xpY2spPVwic3RhZ2VEYmxjbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb01vdXNlbGVhdmUpPVwic3RhZ2VNb3VzZWxlYXZlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2ICNob3Jpem9udGFsQmFyIGNsYXNzPVwiYWktdGFibGUtaG9yaXpvbnRhbC1zY3JvbGwtYmFyLXdyYXBwZXJcIiBbc3R5bGUud2lkdGgucHhdPVwiY29udGFpbmVyUmVjdCgpLndpZHRoXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXRhYmxlLXNjcm9sbC1iYXItaW5uZXJcIiBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsYmFyV2lkdGgoKVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgI3ZlcnRpY2FsQmFyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhaS10YWJsZS12ZXJ0aWNhbC1zY3JvbGwtYmFyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29udGFpbmVyUmVjdCgpLmhlaWdodCAtIGZpZWxkSGVhZEhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJmaWVsZEhlYWRIZWlnaHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10YWJsZS1zY3JvbGwtYmFyLWlubmVyXCIgW3N0eWxlLmhlaWdodC5weF09XCJzY3JvbGxUb3RhbEhlaWdodCgpXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9haS10YWJsZS1yZW5kZXJlcj5cbiAgICB9XG4gICAgPGFpLXRhYmxlLWRyYWcgKGRyYWdFbmQpPVwiZHJhZ0VuZCgkZXZlbnQpXCI+PC9haS10YWJsZS1kcmFnPlxuPC9kaXY+XG4iXX0=
@@ -54,7 +54,10 @@ export class AITableCellRate {
54
54
  this.pointerX() <= lastStarRightX &&
55
55
  this.pointerY() >= startTopY &&
56
56
  this.pointerY() <= startBottomY;
57
- return [...Array(max).keys()].map((item, index) => {
57
+ const renderWidth = coordinate.getColumnWidth(columnIndex) - AI_TABLE_CELL_PADDING;
58
+ const starWidth = AI_TABLE_CELL_EMOJI_SIZE + AI_TABLE_CELL_EMOJI_PADDING;
59
+ const maxStar = Math.min(max, Math.floor(renderWidth / starWidth));
60
+ return [...Array(maxStar).keys()].map((item, index) => {
58
61
  const value = index + 1;
59
62
  const checked = value <= transformValue;
60
63
  const starX = x + index * (AI_TABLE_CELL_EMOJI_SIZE + AI_TABLE_CELL_EMOJI_PADDING);
@@ -147,4 +150,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
147
150
  changeDetection: ChangeDetectionStrategy.OnPush
148
151
  }]
149
152
  }] });
150
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2NlbGxzL3JhdGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFHaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0gsUUFBUSxFQUNSLE1BQU0sRUFDTiwyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3ZCLE1BQU0sb0JBQW9CLENBQUM7O0FBZ0I1QixNQUFNLE9BQU8sZUFBZTtJQWQ1QjtRQWlCWSxhQUFRLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTdCLGFBQVEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFN0IsZ0JBQVcsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFN0MsV0FBTSxHQUFHLEtBQUssRUFBMEIsQ0FBQztRQUV6QyxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7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QVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUcsQ0FBQztRQUN0RSxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBRWxDLElBQUksS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxjQUFjLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDM0IsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuRCxPQUFPLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3JCLEtBQUs7Z0JBQ0wsSUFBSSxFQUFFLENBQUMsUUFBUyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDL0IsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7K0dBaklRLGVBQWU7bUdBQWYsZUFBZSxnTkFaZDs7Ozs7OztLQU9ULDREQUVTLE9BQU87OzRGQUdSLGVBQWU7a0JBZDNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRTs7Ozs7OztLQU9UO29CQUNELFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLb1NoYXBlLCBLb0V2ZW50T2JqZWN0IH0gZnJvbSAnLi4vLi4vLi4vYW5ndWxhci1rb252YSc7XG5pbXBvcnQgeyBIb3ZlckNlbGxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFJVGFibGVIb3ZlckNlbGxDb25maWcgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBnZW5lcmF0ZVRhcmdldE5hbWUgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgeyBpc0FjdGl2ZUNlbGwgfSBmcm9tICcuLi8uLi8uLi9yZW5kZXJlcic7XG5pbXBvcnQge1xuICAgIFN0YXJGaWxsLFxuICAgIENvbG9ycyxcbiAgICBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgIEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQsXG4gICAgQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFLFxuICAgIEFJX1RBQkxFX09GRlNFVCxcbiAgICBBSV9UQUJMRV9DRUxMLFxuICAgIEFJX1RBQkxFX1JBVEVfTUFYLFxuICAgIEFJX1RBQkxFX0NFTExfQk9SREVSXG59IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtcmF0ZScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgQGlmICghcmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgPGtvLXJlY3QgW2NvbmZpZ109XCJ3aGl0ZUJnQ29uZmlnKClcIiAoa29Nb3VzZW1vdmUpPVwia29Nb3VzZW1vdmUoJGV2ZW50KVwiPjwva28tcmVjdD5cbiAgICAgICAgfVxuICAgICAgICBAZm9yIChjb25maWcgb2Ygc3RhckNvbmZpZ3MoKTsgbGV0IGluZGV4ID0gJGluZGV4OyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxrby1wYXRoIFtjb25maWddPVwiY29uZmlnXCIgKGtvQ2xpY2spPVwia29DbGljaygkZXZlbnQsIGluZGV4KVwiPjwva28tcGF0aD5cbiAgICAgICAgfVxuICAgIGAsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbS29TaGFwZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQUlUYWJsZUNlbGxSYXRlIGltcGxlbWVudHMgSG92ZXJDZWxsQ29tcG9uZW50IHtcbiAgICBzdGF0aWMgZmllbGRUeXBlID0gQUlUYWJsZUZpZWxkVHlwZS5yYXRlO1xuXG4gICAgcHJpdmF0ZSBwb2ludGVyWCA9IHNpZ25hbDxudW1iZXI+KDApO1xuXG4gICAgcHJpdmF0ZSBwb2ludGVyWSA9IHNpZ25hbDxudW1iZXI+KDApO1xuXG4gICAgcHJpdmF0ZSByZXNldFN0YXR1cyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBjb25maWcgPSBpbnB1dDxBSVRhYmxlSG92ZXJDZWxsQ29uZmlnPigpO1xuXG4gICAgcmVhZG9ubHkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZygpPy5yZWFkb25seTtcbiAgICB9KTtcblxuICAgIHdoaXRlQmdDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYWlUYWJsZSwgcmVuZGVyLCBmaWVsZCwgcmVjb3JkSWQsIGNvb3JkaW5hdGUgfSA9IHRoaXMuY29uZmlnKCkhO1xuICAgICAgICBjb25zdCBwb2ludFBvc2l0aW9uID0gYWlUYWJsZS5jb250ZXh0IS5wb2ludFBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCB7IGNvbHVtbkluZGV4IH0gPSBwb2ludFBvc2l0aW9uO1xuICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IGlzQWN0aXZlQ2VsbChbcmVjb3JkSWQhLCBmaWVsZC5faWRdLCBhaVRhYmxlKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogeCAtIEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX0NFTExfQk9SREVSLFxuICAgICAgICAgICAgeTogeSArIEFJX1RBQkxFX0NFTExfQk9SREVSICsgQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgd2lkdGg6IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoY29sdW1uSW5kZXgpIC0gKEFJX1RBQkxFX0NFTExfQk9SREVSICsgQUlfVEFCTEVfT0ZGU0VUKSAqIDIsXG4gICAgICAgICAgICBoZWlnaHQ6IEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSAoQUlfVEFCTEVfQ0VMTF9CT1JERVIgKyBBSV9UQUJMRV9PRkZTRVQpLFxuICAgICAgICAgICAgZmlsbDogQ29sb3JzLndoaXRlLFxuICAgICAgICAgICAgc3Ryb2tlOiBpc0FjdGl2ZSA/IG51bGwgOiBDb2xvcnMud2hpdGUsXG4gICAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgICBuYW1lOiBnZW5lcmF0ZVRhcmdldE5hbWUoe1xuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0NFTEwsXG4gICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGQuX2lkLFxuICAgICAgICAgICAgICAgIHJlY29yZElkXG4gICAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgc3RhckNvbmZpZ3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCBmaWVsZCwgcmVjb3JkSWQsIHJlYWRvbmx5LCBhaVRhYmxlLCBjb29yZGluYXRlIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgeyB4LCB0cmFuc2Zvcm1WYWx1ZSB9ID0gcmVuZGVyO1xuICAgICAgICBjb25zdCBtYXggPSBBSV9UQUJMRV9SQVRFX01BWDtcbiAgICAgICAgY29uc3Qgc3RhclkgPSAoQUlfVEFCTEVfUk9XX0JMQU5LX0hFSUdIVCAtIEFJX1RBQkxFX0NFTExfRU1PSklfU0laRSkgLyAyICsgQUlfVEFCTEVfT0ZGU0VUO1xuXG4gICAgICAgIGNvbnN0IHBvaW50UG9zaXRpb24gPSBhaVRhYmxlLmNvbnRleHQhLnBvaW50UG9zaXRpb24oKTtcbiAgICAgICAgY29uc3QgeyByb3dJbmRleCwgY29sdW1uSW5kZXggfSA9IHBvaW50UG9zaXRpb247XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wIH0gPSBhaVRhYmxlLmNvbnRleHQhLnNjcm9sbFN0YXRlKCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbkxlZnRYID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoY29sdW1uSW5kZXgpIC0gc2Nyb2xsTGVmdCArIEFJX1RBQkxFX09GRlNFVDtcbiAgICAgICAgY29uc3QgY29sdW1uVG9wWSA9IGNvb3JkaW5hdGUuZ2V0Um93T2Zmc2V0KHJvd0luZGV4KSAtIHNjcm9sbFRvcCArIEFJX1RBQkxFX09GRlNFVDtcbiAgICAgICAgY29uc3QgZmlyc3RTdGFyTGVmdFggPSBjb2x1bW5MZWZ0WCArIEFJX1RBQkxFX0NFTExfUEFERElORztcbiAgICAgICAgY29uc3QgbGFzdFN0YXJSaWdodFggPVxuICAgICAgICAgICAgY29sdW1uTGVmdFggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBtYXggKiBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUgKyAobWF4IC0gMSkgKiBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IHN0YXJ0VG9wWSA9IGNvbHVtblRvcFkgKyBzdGFyWTtcbiAgICAgICAgY29uc3Qgc3RhcnRCb3R0b21ZID0gY29sdW1uVG9wWSArIHN0YXJZICsgQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFO1xuXG4gICAgICAgIGNvbnN0IGlzSG92ZXJTdGFyID1cbiAgICAgICAgICAgIHRoaXMucG9pbnRlclgoKSA+PSBmaXJzdFN0YXJMZWZ0WCAmJlxuICAgICAgICAgICAgdGhpcy5wb2ludGVyWCgpIDw9IGxhc3RTdGFyUmlnaHRYICYmXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJZKCkgPj0gc3RhcnRUb3BZICYmXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJZKCkgPD0gc3RhcnRCb3R0b21ZO1xuXG4gICAgICAgIHJldHVybiBbLi4uQXJyYXkobWF4KS5rZXlzKCldLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5kZXggKyAxO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZCA9IHZhbHVlIDw9IHRyYW5zZm9ybVZhbHVlO1xuICAgICAgICAgICAgY29uc3Qgc3RhclggPSB4ICsgaW5kZXggKiAoQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFICsgQUlfVEFCTEVfQ0VMTF9FTU9KSV9QQURESU5HKTtcblxuICAgICAgICAgICAgbGV0IGZpbGwgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzZXRTdGF0dXMoKSkge1xuICAgICAgICAgICAgICAgIGZpbGwgPSBDb2xvcnMuZ3JheTEwMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzSG92ZXJTdGFyKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGwgPSBjb2x1bW5MZWZ0WCArIHN0YXJYIDw9IHRoaXMucG9pbnRlclgoKSA/IENvbG9ycy53YXJpbmcgOiBDb2xvcnMuZ3JheTEwMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWxsID0gY2hlY2tlZCA/IENvbG9ycy53YXJpbmcgOiBDb2xvcnMuZ3JheTEwMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogc3RhclgsXG4gICAgICAgICAgICAgICAgeTogc3RhclksXG4gICAgICAgICAgICAgICAgc2l6ZTogMjIsXG4gICAgICAgICAgICAgICAgZGF0YTogU3RhckZpbGwsXG4gICAgICAgICAgICAgICAgZmlsbCxcbiAgICAgICAgICAgICAgICBzY2FsZVg6IDEuMTQsXG4gICAgICAgICAgICAgICAgc2NhbGVZOiAxLjE0LFxuICAgICAgICAgICAgICAgIG5hbWU6IGdlbmVyYXRlVGFyZ2V0TmFtZSh7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0NFTEwsXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLl9pZCxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkSWQsXG4gICAgICAgICAgICAgICAgICAgIG1vdXNlU3R5bGU6IHJlYWRvbmx5ID8gJ2RlZmF1bHQnIDogJ3BvaW50ZXInXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAga29Nb3VzZW1vdmUoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0U3RhdHVzLnNldChmYWxzZSk7XG4gICAgICAgIGNvbnN0IHBvcyA9IGUuZXZlbnQudGFyZ2V0LmdldFN0YWdlKCk/LmdldFBvaW50ZXJQb3NpdGlvbigpO1xuICAgICAgICBpZiAoIXBvcykgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHBvcztcbiAgICAgICAgdGhpcy5wb2ludGVyWC5zZXQoeCk7XG4gICAgICAgIHRoaXMucG9pbnRlclkuc2V0KHkpO1xuICAgIH1cblxuICAgIGtvQ2xpY2soZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50PiwgaW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0U3RhdHVzLnNldChmYWxzZSk7XG4gICAgICAgIGNvbnN0IHsgcmVuZGVyLCByZWFkb25seSwgZmllbGQsIHJlY29yZElkLCBhY3Rpb25zIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgeyB0cmFuc2Zvcm1WYWx1ZSB9ID0gcmVuZGVyO1xuXG4gICAgICAgIGxldCB2YWx1ZSA9IGluZGV4ICsgMTtcbiAgICAgICAgaWYgKHRyYW5zZm9ybVZhbHVlID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICAgICAgdGhpcy5yZXNldFN0YXR1cy5zZXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlYWRvbmx5ICYmIGFjdGlvbnMgJiYgYWN0aW9ucy51cGRhdGVGaWVsZFZhbHVlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnVwZGF0ZUZpZWxkVmFsdWUoe1xuICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgIHBhdGg6IFtyZWNvcmRJZCEsIGZpZWxkLl9pZF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2NlbGxzL3JhdGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sd0JBQXdCLENBQUM7QUFHaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0gsUUFBUSxFQUNSLE1BQU0sRUFDTiwyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3JCLHlCQUF5QixFQUN6Qix3QkFBd0IsRUFDeEIsZUFBZSxFQUNmLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3ZCLE1BQU0sb0JBQW9CLENBQUM7O0FBZ0I1QixNQUFNLE9BQU8sZUFBZTtJQWQ1QjtRQWlCWSxhQUFRLEdBQUcsTUFBTSxDQUFTLENBQUMsQ0FBQyxDQUFDO1FBRTdCLGFBQVEsR0FBRyxNQUFNLENBQVMsQ0FBQyxDQUFDLENBQUM7UUFFN0IsZ0JBQVcsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFN0MsV0FBTSxHQUFHLEtBQUssRUFBMEIsQ0FBQztRQUV6QyxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7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LCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgS29TaGFwZSwgS29FdmVudE9iamVjdCB9IGZyb20gJy4uLy4uLy4uL2FuZ3VsYXIta29udmEnO1xuaW1wb3J0IHsgSG92ZXJDZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBSVRhYmxlSG92ZXJDZWxsQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkVHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgZ2VuZXJhdGVUYXJnZXROYW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgaXNBY3RpdmVDZWxsIH0gZnJvbSAnLi4vLi4vLi4vcmVuZGVyZXInO1xuaW1wb3J0IHtcbiAgICBTdGFyRmlsbCxcbiAgICBDb2xvcnMsXG4gICAgQUlfVEFCTEVfQ0VMTF9FTU9KSV9QQURESU5HLFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hULFxuICAgIEFJX1RBQkxFX0NFTExfRU1PSklfU0laRSxcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQUlfVEFCTEVfQ0VMTCxcbiAgICBBSV9UQUJMRV9SQVRFX01BWCxcbiAgICBBSV9UQUJMRV9DRUxMX0JPUkRFUlxufSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLXJhdGUnLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIEBpZiAoIXJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIDxrby1yZWN0IFtjb25maWddPVwid2hpdGVCZ0NvbmZpZygpXCIgKGtvTW91c2Vtb3ZlKT1cImtvTW91c2Vtb3ZlKCRldmVudClcIj48L2tvLXJlY3Q+XG4gICAgICAgIH1cbiAgICAgICAgQGZvciAoY29uZmlnIG9mIHN0YXJDb25maWdzKCk7IGxldCBpbmRleCA9ICRpbmRleDsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8a28tcGF0aCBbY29uZmlnXT1cImNvbmZpZ1wiIChrb0NsaWNrKT1cImtvQ2xpY2soJGV2ZW50LCBpbmRleClcIj48L2tvLXBhdGg+XG4gICAgICAgIH1cbiAgICBgLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0tvU2hhcGVdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVDZWxsUmF0ZSBpbXBsZW1lbnRzIEhvdmVyQ2VsbENvbXBvbmVudCB7XG4gICAgc3RhdGljIGZpZWxkVHlwZSA9IEFJVGFibGVGaWVsZFR5cGUucmF0ZTtcblxuICAgIHByaXZhdGUgcG9pbnRlclggPSBzaWduYWw8bnVtYmVyPigwKTtcblxuICAgIHByaXZhdGUgcG9pbnRlclkgPSBzaWduYWw8bnVtYmVyPigwKTtcblxuICAgIHByaXZhdGUgcmVzZXRTdGF0dXMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgY29uZmlnID0gaW5wdXQ8QUlUYWJsZUhvdmVyQ2VsbENvbmZpZz4oKTtcblxuICAgIHJlYWRvbmx5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWcoKT8ucmVhZG9ubHk7XG4gICAgfSk7XG5cbiAgICB3aGl0ZUJnQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGFpVGFibGUsIHJlbmRlciwgZmllbGQsIHJlY29yZElkLCBjb29yZGluYXRlIH0gPSB0aGlzLmNvbmZpZygpITtcbiAgICAgICAgY29uc3QgcG9pbnRQb3NpdGlvbiA9IGFpVGFibGUuY29udGV4dCEucG9pbnRQb3NpdGlvbigpO1xuICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgeyBjb2x1bW5JbmRleCB9ID0gcG9pbnRQb3NpdGlvbjtcbiAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBpc0FjdGl2ZUNlbGwoW3JlY29yZElkISwgZmllbGQuX2lkXSwgYWlUYWJsZSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHggLSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9DRUxMX0JPUkRFUixcbiAgICAgICAgICAgIHk6IHkgKyBBSV9UQUJMRV9DRUxMX0JPUkRFUiArIEFJX1RBQkxFX09GRlNFVCxcbiAgICAgICAgICAgIHdpZHRoOiBjb29yZGluYXRlLmdldENvbHVtbldpZHRoKGNvbHVtbkluZGV4KSAtIChBSV9UQUJMRV9DRUxMX0JPUkRFUiArIEFJX1RBQkxFX09GRlNFVCkgKiAyLFxuICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9ST1dfQkxBTktfSEVJR0hUIC0gKEFJX1RBQkxFX0NFTExfQk9SREVSICsgQUlfVEFCTEVfT0ZGU0VUKSxcbiAgICAgICAgICAgIGZpbGw6IENvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIHN0cm9rZTogaXNBY3RpdmUgPyBudWxsIDogQ29sb3JzLndoaXRlLFxuICAgICAgICAgICAgekluZGV4OiAwLFxuICAgICAgICAgICAgbmFtZTogZ2VuZXJhdGVUYXJnZXROYW1lKHtcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBBSV9UQUJMRV9DRUxMLFxuICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLl9pZCxcbiAgICAgICAgICAgICAgICByZWNvcmRJZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIHN0YXJDb25maWdzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJlbmRlciwgZmllbGQsIHJlY29yZElkLCByZWFkb25seSwgYWlUYWJsZSwgY29vcmRpbmF0ZSB9ID0gdGhpcy5jb25maWcoKSE7XG4gICAgICAgIGNvbnN0IHsgeCwgdHJhbnNmb3JtVmFsdWUgfSA9IHJlbmRlcjtcbiAgICAgICAgY29uc3QgbWF4ID0gQUlfVEFCTEVfUkFURV9NQVg7XG4gICAgICAgIGNvbnN0IHN0YXJZID0gKEFJX1RBQkxFX1JPV19CTEFOS19IRUlHSFQgLSBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUpIC8gMiArIEFJX1RBQkxFX09GRlNFVDtcblxuICAgICAgICBjb25zdCBwb2ludFBvc2l0aW9uID0gYWlUYWJsZS5jb250ZXh0IS5wb2ludFBvc2l0aW9uKCk7XG4gICAgICAgIGNvbnN0IHsgcm93SW5kZXgsIGNvbHVtbkluZGV4IH0gPSBwb2ludFBvc2l0aW9uO1xuICAgICAgICBjb25zdCB7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCB9ID0gYWlUYWJsZS5jb250ZXh0IS5zY3JvbGxTdGF0ZSgpO1xuICAgICAgICBjb25zdCBjb2x1bW5MZWZ0WCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uT2Zmc2V0KGNvbHVtbkluZGV4KSAtIHNjcm9sbExlZnQgKyBBSV9UQUJMRV9PRkZTRVQ7XG4gICAgICAgIGNvbnN0IGNvbHVtblRvcFkgPSBjb29yZGluYXRlLmdldFJvd09mZnNldChyb3dJbmRleCkgLSBzY3JvbGxUb3AgKyBBSV9UQUJMRV9PRkZTRVQ7XG4gICAgICAgIGNvbnN0IGZpcnN0U3RhckxlZnRYID0gY29sdW1uTGVmdFggKyBBSV9UQUJMRV9DRUxMX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IGxhc3RTdGFyUmlnaHRYID1cbiAgICAgICAgICAgIGNvbHVtbkxlZnRYICsgQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgbWF4ICogQUlfVEFCTEVfQ0VMTF9FTU9KSV9TSVpFICsgKG1heCAtIDEpICogQUlfVEFCTEVfQ0VMTF9FTU9KSV9QQURESU5HO1xuICAgICAgICBjb25zdCBzdGFydFRvcFkgPSBjb2x1bW5Ub3BZICsgc3Rhclk7XG4gICAgICAgIGNvbnN0IHN0YXJ0Qm90dG9tWSA9IGNvbHVtblRvcFkgKyBzdGFyWSArIEFJX1RBQkxFX0NFTExfRU1PSklfU0laRTtcblxuICAgICAgICBjb25zdCBpc0hvdmVyU3RhciA9XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJYKCkgPj0gZmlyc3RTdGFyTGVmdFggJiZcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclgoKSA8PSBsYXN0U3RhclJpZ2h0WCAmJlxuICAgICAgICAgICAgdGhpcy5wb2ludGVyWSgpID49IHN0YXJ0VG9wWSAmJlxuICAgICAgICAgICAgdGhpcy5wb2ludGVyWSgpIDw9IHN0YXJ0Qm90dG9tWTtcblxuICAgICAgICBjb25zdCByZW5kZXJXaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoY29sdW1uSW5kZXgpIC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HO1xuICAgICAgICBjb25zdCBzdGFyV2lkdGggPSBBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUgKyBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkc7XG4gICAgICAgIGNvbnN0IG1heFN0YXIgPSBNYXRoLm1pbihtYXgsIE1hdGguZmxvb3IocmVuZGVyV2lkdGggLyBzdGFyV2lkdGgpKTtcblxuICAgICAgICByZXR1cm4gWy4uLkFycmF5KG1heFN0YXIpLmtleXMoKV0ubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbmRleCArIDE7XG4gICAgICAgICAgICBjb25zdCBjaGVja2VkID0gdmFsdWUgPD0gdHJhbnNmb3JtVmFsdWU7XG4gICAgICAgICAgICBjb25zdCBzdGFyWCA9IHggKyBpbmRleCAqIChBSV9UQUJMRV9DRUxMX0VNT0pJX1NJWkUgKyBBSV9UQUJMRV9DRUxMX0VNT0pJX1BBRERJTkcpO1xuXG4gICAgICAgICAgICBsZXQgZmlsbCA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNldFN0YXR1cygpKSB7XG4gICAgICAgICAgICAgICAgZmlsbCA9IENvbG9ycy5ncmF5MTAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNIb3ZlclN0YXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbCA9IGNvbHVtbkxlZnRYICsgc3RhclggPD0gdGhpcy5wb2ludGVyWCgpID8gQ29sb3JzLndhcmluZyA6IENvbG9ycy5ncmF5MTAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGwgPSBjaGVja2VkID8gQ29sb3JzLndhcmluZyA6IENvbG9ycy5ncmF5MTAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiBzdGFyWCxcbiAgICAgICAgICAgICAgICB5OiBzdGFyWSxcbiAgICAgICAgICAgICAgICBzaXplOiAyMixcbiAgICAgICAgICAgICAgICBkYXRhOiBTdGFyRmlsbCxcbiAgICAgICAgICAgICAgICBmaWxsLFxuICAgICAgICAgICAgICAgIHNjYWxlWDogMS4xNCxcbiAgICAgICAgICAgICAgICBzY2FsZVk6IDEuMTQsXG4gICAgICAgICAgICAgICAgbmFtZTogZ2VuZXJhdGVUYXJnZXROYW1lKHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogQUlfVEFCTEVfQ0VMTCxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGQuX2lkLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRJZCxcbiAgICAgICAgICAgICAgICAgICAgbW91c2VTdHlsZTogcmVhZG9ubHkgPyAnZGVmYXVsdCcgOiAncG9pbnRlcidcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBrb01vdXNlbW92ZShlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzZXRTdGF0dXMuc2V0KGZhbHNlKTtcbiAgICAgICAgY29uc3QgcG9zID0gZS5ldmVudC50YXJnZXQuZ2V0U3RhZ2UoKT8uZ2V0UG9pbnRlclBvc2l0aW9uKCk7XG4gICAgICAgIGlmICghcG9zKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHsgeCwgeSB9ID0gcG9zO1xuICAgICAgICB0aGlzLnBvaW50ZXJYLnNldCh4KTtcbiAgICAgICAgdGhpcy5wb2ludGVyWS5zZXQoeSk7XG4gICAgfVxuXG4gICAga29DbGljayhlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVzZXRTdGF0dXMuc2V0KGZhbHNlKTtcbiAgICAgICAgY29uc3QgeyByZW5kZXIsIHJlYWRvbmx5LCBmaWVsZCwgcmVjb3JkSWQsIGFjdGlvbnMgfSA9IHRoaXMuY29uZmlnKCkhO1xuICAgICAgICBjb25zdCB7IHRyYW5zZm9ybVZhbHVlIH0gPSByZW5kZXI7XG5cbiAgICAgICAgbGV0IHZhbHVlID0gaW5kZXggKyAxO1xuICAgICAgICBpZiAodHJhbnNmb3JtVmFsdWUgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U3RhdHVzLnNldCh0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVhZG9ubHkgJiYgYWN0aW9ucyAmJiBhY3Rpb25zLnVwZGF0ZUZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgIGFjdGlvbnMudXBkYXRlRmllbGRWYWx1ZSh7XG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgcGF0aDogW3JlY29yZElkISwgZmllbGQuX2lkXVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -122,11 +122,11 @@ export const createCells = (config) => {
122
122
  ctx.save();
123
123
  ctx.rect(realX, realY, width, rowHeight);
124
124
  ctx.clip();
125
- cellDrawer.renderCell(render, ctx);
125
+ cellDrawer.renderCell(render, ctx, columnWidth);
126
126
  ctx.restore();
127
127
  }
128
128
  else {
129
- cellDrawer.renderCell(render, ctx);
129
+ cellDrawer.renderCell(render, ctx, columnWidth);
130
130
  }
131
131
  }
132
132
  }
@@ -182,4 +182,4 @@ const isSelectedRecord = (recordId, aiTable) => {
182
182
  const isHoverRecord = (isHover, targetName) => {
183
183
  return isHover && targetName !== AI_TABLE_FIELD_HEAD;
184
184
  };
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNlbGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvY3JlYXRpb25zL2NyZWF0ZS1jZWxscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNyQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBdUIsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxZQUFZLENBQUM7QUFDM0YsT0FBTyxFQUEyQyxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV0RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBZ0MsRUFBRSxFQUFFO0lBQzVELE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDeEgsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQTBCLENBQUM7SUFDbkQsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0lBQ3hELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMs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QUMsR0FBRyxJQUFJLENBQUM7SUFDakMsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQWUsRUFBRSxPQUFnQixFQUFXLEVBQUU7SUFDMUUsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzRCxDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxPQUFnQixFQUFXLEVBQUU7SUFDckUsT0FBTyxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQWdCLEVBQUUsVUFBa0IsRUFBVyxFQUFFO0lBQ3BFLE9BQU8sT0FBTyxJQUFJLFVBQVUsS0FBSyxtQkFBbUIsQ0FBQztBQUN6RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQUQsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsXG4gICAgQUlfVEFCTEVfT0ZGU0VULFxuICAgIEFJX1RBQkxFX1JPV19BRERfQlVUVE9OLFxuICAgIERFRkFVTFRfRk9OVF9TVFlMRVxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUlSZWNvcmRGaWVsZElkUGF0aCwgQUlUYWJsZSwgQUlUYWJsZVF1ZXJpZXMsIFJlbmRlcmVyQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZUNlbGxzRHJhd2VyQ29uZmlnLCBBSVRhYmxlUmVuZGVyLCBBSVRhYmxlUm93VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGdldENlbGxIb3Jpem9udGFsUG9zaXRpb24sIGdldEhvdmVyQ2VsbCwgdHJhbnNmb3JtQ2VsbFZhbHVlIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgYWRkUm93TGF5b3V0IH0gZnJvbSAnLi4vZHJhd2Vycy9hZGQtcm93LWxheW91dC1kcmF3ZXInO1xuaW1wb3J0IHsgY2VsbERyYXdlciB9IGZyb20gJy4uL2RyYXdlcnMvY2VsbC1kcmF3ZXInO1xuaW1wb3J0IHsgcmVjb3JkUm93TGF5b3V0IH0gZnJvbSAnLi4vZHJhd2Vycy9yZWNvcmQtcm93LWxheW91dC1kcmF3ZXInO1xuXG4vKipcbiAqIOe7mOWItuWNleWFg+agvOWGheWuueeahOWHveaVsFxuICog5Yip55SoIENhbnZhcyBBUEkg57uY5Yi25q+P5Liq5Y2V5YWD5qC855qE6IOM5pmv6aKc6Imy44CB5paH5pys5Lul5Y+K5YW25LuW5Y+v6IO955qE5qC35byP44CC6L+Z5Liq5Ye95pWw6YCa5bi455So5LqO6Ieq5a6a5LmJ6KGo5qC85riy5p+T77yM5bCk5YW25piv5Zyo5aSE55CG5aSn6YeP5pWw5o2u5pe277yM6YCa6L+H55u05o6l5pON5L2cIENhbnZhcyDmnaXmj5Dpq5jmuLLmn5PmgKfog71cbiAqIEBwYXJhbSBjb25maWdcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUNlbGxzID0gKGNvbmZpZzogQUlUYWJsZUNlbGxzRHJhd2VyQ29uZmlnKSA9PiB7XG4gICAgY29uc3QgeyBhaVRhYmxlLCBjb29yZGluYXRlLCByZWZlcmVuY2VzLCBjdHgsIHJvd1N0YXJ0SW5kZXgsIHJvd1N0b3BJbmRleCwgY29sdW1uU3RhcnRJbmRleCwgY29sdW1uU3RvcEluZGV4IH0gPSBjb25maWc7XG4gICAgY29uc3QgY29udGV4dCA9IGFpVGFibGUuY29udGV4dCBhcyBSZW5kZXJlckNvbnRleHQ7XG4gICAgY29uc3QgeyByb3dIZWlnaHQsIGNvbHVtbkNvdW50LCByb3dDb3VudCB9ID0gY29vcmRpbmF0ZTtcbiAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgIGNvbnN0IHZpc2libGVDb2x1bW5zID0gQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKGFpVGFibGUpO1xuXG4gICAgLy8g5Yid5aeL5YyW57uY5Zu+5LiK5LiL5paHLCDkuLrlkI7nu63nmoTnu5jliLbmk43kvZzlgZrlh4blpIdcbiAgICBjZWxsRHJhd2VyLmluaXRDdHgoY3R4IGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgYWRkUm93TGF5b3V0LmluaXRDdHgoY3R4IGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG4gICAgcmVjb3JkUm93TGF5b3V0LmluaXRDdHgoY3R4IGFzIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCk7XG5cbiAgICBjb25zdCBob3ZlckNlbGwgPSBnZXRIb3ZlckNlbGwoYWlUYWJsZSk7XG5cbiAgICAvLyDpgY3ljobliJcsIOehruWumuWcqOWTquS6m+WIl+S4iue7mOWItuWNleWFg+agvFxuICAgIGZvciAobGV0IGNvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDsgY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4OyBjb2x1bW5JbmRleCsrKSB7XG4gICAgICAgIGlmIChjb2x1bW5JbmRleCA+IGNvbHVtbkNvdW50IC0gMSkgYnJlYWs7XG5cbiAgICAgICAgLy8g6I635Y+W6K+l5YiX5a+55bqU55qEIGZpZWxk77yM5aaC5p6cIGZpZWxkIOS4jeWGjeWxleekuuiMg+WbtO+8jOWImei3s+i/h+ivpeWIl1xuICAgICAgICBjb25zdCBmaWVsZCA9IHZpc2libGVDb2x1bW5zW2NvbHVtbkluZGV4XTtcbiAgICAgICAgaWYgKGZpZWxkID09IG51bGwpIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIOiOt+WPluivpeWIl+WvueW6lOeahOWuveW6plxuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aCA9IGNvb3JkaW5hdGUuZ2V0Q29sdW1uV2lkdGgoY29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCB4ID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoY29sdW1uSW5kZXgpICsgQUlfVEFCTEVfT0ZGU0VUO1xuICAgICAgICBjb25zdCBpc0xhc3RDb2x1bW4gPSBjb2x1bW5JbmRleCA9PT0gYWlUYWJsZS5ncmlkRGF0YSgpLmZpZWxkcz8ubGVuZ3RoIC0gMTtcblxuICAgICAgICBpZiAoY29sdW1uSW5kZXggPT09IDEpIHtcbiAgICAgICAgICAgIGNlbGxEcmF3ZXIuaW5pdFN0eWxlKGZpZWxkLCB7IGZvbnRXZWlnaHQ6IERFRkFVTFRfRk9OVF9TVFlMRSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIOmBjeWOhuihjCwg5LuOIHJvd1N0YXJ0SW5kZXgg5YiwIHJvd1N0b3BJbmRleCDnmoTmiYDmnInooYzvvIzlhrPlrprlsIblnKjlk6rkupvooYzkuIrnu5jliLbljZXlhYPmoLxcbiAgICAgICAgZm9yIChsZXQgcm93SW5kZXggPSByb3dTdGFydEluZGV4OyByb3dJbmRleCA8PSByb3dTdG9wSW5kZXg7IHJvd0luZGV4KyspIHtcbiAgICAgICAgICAgIGlmIChyb3dJbmRleCA+IHJvd0NvdW50IC0gMSkgYnJlYWs7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBjb250ZXh0LmxpbmVhclJvd3MoKVtyb3dJbmRleF07XG4gICAgICAgICAgICBjb25zdCB7IF9pZDogcmVjb3JkSWQsIHR5cGUgfSA9IHJvdztcbiAgICAgICAgICAgIGNvbnN0IHkgPSBjb29yZGluYXRlLmdldFJvd09mZnNldChyb3dJbmRleCkgKyBBSV9UQUJMRV9PRkZTRVQ7XG4gICAgICAgICAgICBjb25zdCB7IHJvd0luZGV4OiBwb2ludFJvd0luZGV4LCB0YXJnZXROYW1lIH0gPSBjb250ZXh0LnBvaW50UG9zaXRpb24oKTtcbiAgICAgICAgICAgIGNvbnN0IGlzSG92ZXIgPSBwb2ludFJvd0luZGV4ID09PSByb3dJbmRleDtcblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlUm93VHlwZS5hZGQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNIb3ZlclJvdyA9IGlzSG92ZXIgJiYgdGFyZ2V0TmFtZSA9PT0gQUlfVEFCTEVfUk9XX0FERF9CVVRUT047XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2hlY2tlZFJvdyA9IGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRSZWNvcmRzLmhhcyhyb3cuX2lkKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkUm93TGF5b3V0LmluaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dIZWlnaHQ6IEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hULFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJXaWR0aDogY29vcmRpbmF0ZS5jb250YWluZXJXaWR0aFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkUm93TGF5b3V0LnJlbmRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc0hvdmVyUm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGVja2VkUm93XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBBSVRhYmxlUm93VHlwZS5yZWNvcmQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRJZCA9IGZpZWxkLl9pZDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCA9IFtyZWNvcmRJZCwgZmllbGRJZF07XG4gICAgICAgICAgICAgICAgICAgIGxldCBiYWNrZ3JvdW5kID0gZ2V0Q2VsbEJhY2tncm91bmQoY2VsbCwgaXNIb3ZlciwgdGFyZ2V0TmFtZSwgYWlUYWJsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkUm93TGF5b3V0LmluaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBjb29yZGluYXRlLmNvbnRhaW5lcldpZHRoXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZWNvcmRSb3dMYXlvdXQucmVuZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiB7IGZpbGw6IGJhY2tncm91bmQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSG92ZXJSb3c6IGlzSG92ZXJSZWNvcmQoaXNIb3ZlciwgdGFyZ2V0TmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NoZWNrZWRSb3c6IGlzU2VsZWN0ZWRSZWNvcmQocmVjb3JkSWQsIGFpVGFibGUpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHdpZHRoLCBvZmZzZXQgfSA9IGdldENlbGxIb3Jpem9udGFsUG9zaXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFsWCA9IHggKyBvZmZzZXQgKyBBSV9UQUJMRV9PRkZTRVQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxZID0geSArIEFJX1RBQkxFX09GRlNFVDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSB7IGZvbnRXZWlnaHQ6IERFRkFVTFRfRk9OVF9TVFlMRSB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsVmFsdWUgPSBBSVRhYmxlUXVlcmllcy5nZXRGaWVsZFZhbHVlKGFpVGFibGUsIFtyZWNvcmRJZCwgZmllbGRJZF0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1WYWx1ZSA9IHRyYW5zZm9ybUNlbGxWYWx1ZShhaVRhYmxlLCBmaWVsZCwgY2VsbFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVuZGVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWlUYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHJlYWxYLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogcmVhbFksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGxWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQWN0aXZlOiBpc1NlbGVjdGVkRmllbGQoZmllbGRJZCwgYWlUYWJsZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyBob3ZlciDnu4Tku7bmuLLmn5Pml7bvvIzlupXlsYLnmoQgY2VsbCDmuLLmn5PkuLrnqbpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhvdmVyQ2VsbCAmJiBob3ZlckNlbGwucmVjb3JkSWQgPT09IHJlY29yZElkICYmIGhvdmVyQ2VsbC5maWVsZElkID09PSBmaWVsZElkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXIuY2VsbFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXIudHJhbnNmb3JtVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNlbGxEcmF3ZXIuaW5pdFN0eWxlKGZpZWxkLCBzdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIOacgOWQjuS4gOWIl++8jOS4lOWNleWFg+agvOWGheWuueWtmOWcqO+8jOmcgOimgeijgeWJquWGheWuue+8jOS7pemYsuatouaWh+acrOa6ouWHuuWNleWFg+agvOi+ueeVjFxuICAgICAgICAgICAgICAgICAgICAvLyDnhLblkI7vvIzmoLnmja7orqHnrpflpb3nmoTmoLflvI/lkozluIPlsYDnu5jliLbljZXlhYPmoLzlhoXlrrlcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTGFzdENvbHVtbiAmJiBjZWxsVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZWN0KHJlYWxYLCByZWFsWSwgd2lkdGgsIHJvd0hlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguY2xpcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbERyYXdlci5yZW5kZXJDZWxsKHJlbmRlciBhcyBBSVRhYmxlUmVuZGVyLCBjdHggYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsRHJhd2VyLnJlbmRlckNlbGwocmVuZGVyIGFzIEFJVGFibGVSZW5kZXIsIGN0eCBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuY29uc3QgZ2V0Q2VsbEJhY2tncm91bmQgPSAoY2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCwgaXNIb3ZlcjogYm9vbGVhbiwgdGFyZ2V0TmFtZTogc3RyaW5nLCBhaVRhYmxlOiBBSVRhYmxlKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBjb2xvcnMgPSBBSVRhYmxlLmdldENvbG9ycygpO1xuICAgIGNvbnN0IFtyZWNvcmRJZCwgZmllbGRJZF0gPSBjZWxsO1xuICAgIGxldCBiYWNrZ3JvdW5kID0gY29sb3JzLndoaXRlO1xuXG4gICAgY29uc3QgX2lzSG92ZXJSZWNvcmQgPSBpc0hvdmVyUmVjb3JkKGlzSG92ZXIsIHRhcmdldE5hbWUpO1xuICAgIGNvbnN0IF9pc1NlbGVjdGVkUmVjb3JkID0gaXNTZWxlY3RlZFJlY29yZChyZWNvcmRJZCwgYWlUYWJsZSk7XG4gICAgY29uc3QgX2lzU2VsZWN0ZWRGaWVsZCA9IGlzU2VsZWN0ZWRGaWVsZChmaWVsZElkLCBhaVRhYmxlKTtcbiAgICBjb25zdCBfaXNTaWJsaW5nQ2VsbCA9IGlzU2libGluZ0NlbGwoY2VsbCwgYWlUYWJsZSk7XG4gICAgY29uc3QgX2lzQWN0aXZlQ2VsbCA9IGlzQWN0aXZlQ2VsbChjZWxsLCBhaVRhYmxlKTtcbiAgICBjb25zdCBfaXNTZWxlY3RlZENlbGwgPSBpc1NlbGVjdGVkQ2VsbChjZWxsLCBhaVRhYmxlKTtcbiAgICBjb25zdCBfaXNLZXl3b3Jkc01hdGNoZWRDZWxsID0gaXNLZXl3b3Jkc01hdGNoZWRDZWxsKGNlbGwsIGFpVGFibGUpO1xuXG4gICAgaWYgKF9pc0tleXdvcmRzTWF0Y2hlZENlbGwpIHtcbiAgICAgICAgYmFja2dyb3VuZCA9IGNvbG9ycy5pdGVtTWF0Y2hCZ0NvbG9yO1xuICAgIH0gZWxzZSBpZiAoX2lzU2VsZWN0ZWRSZWNvcmQgfHwgX2lzU2VsZWN0ZWRGaWVsZCB8fCBfaXNTaWJsaW5nQ2VsbCB8fCAoX2lzU2VsZWN0ZWRDZWxsICYmICFfaXNBY3RpdmVDZWxsKSkge1xuICAgICAgICBiYWNrZ3JvdW5kID0gY29sb3JzLml0ZW1BY3RpdmVCZ0NvbG9yO1xuICAgIH0gZWxzZSBpZiAoX2lzSG92ZXJSZWNvcmQgJiYgIV9pc0FjdGl2ZUNlbGwpIHtcbiAgICAgICAgYmFja2dyb3VuZCA9IGNvbG9ycy5ncmF5ODA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhY2tncm91bmQ7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBY3RpdmVDZWxsID0gKGNlbGw6IEFJUmVjb3JkRmllbGRJZFBhdGgsIGFpVGFibGU6IEFJVGFibGUpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBbcmVjb3JkSWQsIGZpZWxkSWRdID0gY2VsbDtcbiAgICBjb25zdCBbYWN0aXZlUmVjb3JkSWQsIGFjdGl2ZUZpZWxkSWRdID0gQUlUYWJsZS5nZXRBY3RpdmVDZWxsKGFpVGFibGUpIHx8IFtdO1xuICAgIHJldHVybiByZWNvcmRJZCA9PT0gYWN0aXZlUmVjb3JkSWQgJiYgZmllbGRJZCA9PT0gYWN0aXZlRmllbGRJZDtcbn07XG5cbmNvbnN0IGlzU2libGluZ0NlbGwgPSAoY2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCwgYWlUYWJsZTogQUlUYWJsZSk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IFtyZWNvcmRJZCwgZmllbGRJZF0gPSBjZWxsO1xuICAgIGNvbnN0IFthY3RpdmVSZWNvcmRJZCwgYWN0aXZlRmllbGRJZF0gPSBBSVRhYmxlLmdldEFjdGl2ZUNlbGwoYWlUYWJsZSkgfHwgW107XG4gICAgcmV0dXJuIEFJVGFibGUuZ2V0QWN0aXZlUmVjb3JkSWRzKGFpVGFibGUpLmxlbmd0aCA9PT0gMSAmJiByZWNvcmRJZCA9PT0gYWN0aXZlUmVjb3JkSWQgJiYgZmllbGRJZCAhPT0gYWN0aXZlRmllbGRJZDtcbn07XG5cbmNvbnN0IGlzS2V5d29yZHNNYXRjaGVkQ2VsbCA9IChjZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoLCBhaVRhYmxlOiBBSVRhYmxlKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgW3JlY29yZElkLCBmaWVsZElkXSA9IGNlbGw7XG4gICAgcmV0dXJuIGFpVGFibGUua2V5d29yZHNNYXRjaGVkQ2VsbHMoKS5oYXMoYCR7cmVjb3JkSWR9OiR7ZmllbGRJZH1gKTtcbn07XG5cbmNvbnN0IGlzU2VsZWN0ZWRDZWxsID0gKGNlbGw6IEFJUmVjb3JkRmllbGRJZFBhdGgsIGFpVGFibGU6IEFJVGFibGUpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBbcmVjb3JkSWQsIGZpZWxkSWRdID0gY2VsbDtcbiAgICByZXR1cm4gYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZENlbGxzLmhhcyhgJHtyZWNvcmRJZH06JHtmaWVsZElkfWApO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VsZWN0ZWRGaWVsZCA9IChmaWVsZElkOiBzdHJpbmcsIGFpVGFibGU6IEFJVGFibGUpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZEZpZWxkcy5oYXMoZmllbGRJZCk7XG59O1xuXG5jb25zdCBpc1NlbGVjdGVkUmVjb3JkID0gKHJlY29yZElkOiBzdHJpbmcsIGFpVGFibGU6IEFJVGFibGUpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHMuaGFzKHJlY29yZElkKTtcbn07XG5cbmNvbnN0IGlzSG92ZXJSZWNvcmQgPSAoaXNIb3ZlcjogYm9vbGVhbiwgdGFyZ2V0TmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIGlzSG92ZXIgJiYgdGFyZ2V0TmFtZSAhPT0gQUlfVEFCTEVfRklFTERfSEVBRDtcbn07XG4iXX0=
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNlbGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZ3JpZC9zcmMvcmVuZGVyZXIvY3JlYXRpb25zL2NyZWF0ZS1jZWxscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsbUJBQW1CLEVBQ25CLDBCQUEwQixFQUMxQixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLGtCQUFrQixFQUNyQixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBdUIsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxZQUFZLENBQUM7QUFDM0YsT0FBTyxFQUEyQyxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV0RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBZ0MsRUFBRSxFQUFFO0lBQzVELE1BQU0sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDeEgsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQTBCLENBQUM7SUFDbkQsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDO0lBQ3hELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMs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QUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNqQyxPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsT0FBZSxFQUFFLE9BQWdCLEVBQVcsRUFBRTtJQUMxRSxPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzNELENBQUMsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFnQixFQUFFLE9BQWdCLEVBQVcsRUFBRTtJQUNyRSxPQUFPLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBZ0IsRUFBRSxVQUFrQixFQUFXLEVBQUU7SUFDcEUsT0FBTyxPQUFPLElBQUksVUFBVSxLQUFLLG1CQUFtQixDQUFDO0FBQ3pELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQUlfVEFCTEVfRklFTERfSEVBRCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQUlfVEFCTEVfUk9XX0FERF9CVVRUT04sXG4gICAgREVGQVVMVF9GT05UX1NUWUxFXG59IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBSVJlY29yZEZpZWxkSWRQYXRoLCBBSVRhYmxlLCBBSVRhYmxlUXVlcmllcywgUmVuZGVyZXJDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ2VsbHNEcmF3ZXJDb25maWcsIEFJVGFibGVSZW5kZXIsIEFJVGFibGVSb3dUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0Q2VsbEhvcml6b250YWxQb3NpdGlvbiwgZ2V0SG92ZXJDZWxsLCB0cmFuc2Zvcm1DZWxsVmFsdWUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBhZGRSb3dMYXlvdXQgfSBmcm9tICcuLi9kcmF3ZXJzL2FkZC1yb3ctbGF5b3V0LWRyYXdlcic7XG5pbXBvcnQgeyBjZWxsRHJhd2VyIH0gZnJvbSAnLi4vZHJhd2Vycy9jZWxsLWRyYXdlcic7XG5pbXBvcnQgeyByZWNvcmRSb3dMYXlvdXQgfSBmcm9tICcuLi9kcmF3ZXJzL3JlY29yZC1yb3ctbGF5b3V0LWRyYXdlcic7XG5cbi8qKlxuICog57uY5Yi25Y2V5YWD5qC85YaF5a6555qE5Ye95pWwXG4gKiDliKnnlKggQ2FudmFzIEFQSSDnu5jliLbmr4/kuKrljZXlhYPmoLznmoTog4zmma/popzoibLjgIHmlofmnKzku6Xlj4rlhbbku5blj6/og73nmoTmoLflvI/jgILov5nkuKrlh73mlbDpgJrluLjnlKjkuo7oh6rlrprkuYnooajmoLzmuLLmn5PvvIzlsKTlhbbmmK/lnKjlpITnkIblpKfph4/mlbDmja7ml7bvvIzpgJrov4fnm7TmjqXmk43kvZwgQ2FudmFzIOadpeaPkOmrmOa4suafk+aAp+iDvVxuICogQHBhcmFtIGNvbmZpZ1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlQ2VsbHMgPSAoY29uZmlnOiBBSVRhYmxlQ2VsbHNEcmF3ZXJDb25maWcpID0+IHtcbiAgICBjb25zdCB7IGFpVGFibGUsIGNvb3JkaW5hdGUsIHJlZmVyZW5jZXMsIGN0eCwgcm93U3RhcnRJbmRleCwgcm93U3RvcEluZGV4LCBjb2x1bW5TdGFydEluZGV4LCBjb2x1bW5TdG9wSW5kZXggfSA9IGNvbmZpZztcbiAgICBjb25zdCBjb250ZXh0ID0gYWlUYWJsZS5jb250ZXh0IGFzIFJlbmRlcmVyQ29udGV4dDtcbiAgICBjb25zdCB7IHJvd0hlaWdodCwgY29sdW1uQ291bnQsIHJvd0NvdW50IH0gPSBjb29yZGluYXRlO1xuICAgIGNvbnN0IGNvbG9ycyA9IEFJVGFibGUuZ2V0Q29sb3JzKCk7XG4gICAgY29uc3QgdmlzaWJsZUNvbHVtbnMgPSBBSVRhYmxlLmdldFZpc2libGVGaWVsZHMoYWlUYWJsZSk7XG5cbiAgICAvLyDliJ3lp4vljJbnu5jlm77kuIrkuIvmlocsIOS4uuWQjue7reeahOe7mOWItuaTjeS9nOWBmuWHhuWkh1xuICAgIGNlbGxEcmF3ZXIuaW5pdEN0eChjdHggYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICBhZGRSb3dMYXlvdXQuaW5pdEN0eChjdHggYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcbiAgICByZWNvcmRSb3dMYXlvdXQuaW5pdEN0eChjdHggYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTtcblxuICAgIGNvbnN0IGhvdmVyQ2VsbCA9IGdldEhvdmVyQ2VsbChhaVRhYmxlKTtcblxuICAgIC8vIOmBjeWOhuWIlywg56Gu5a6a5Zyo5ZOq5Lqb5YiX5LiK57uY5Yi25Y2V5YWD5qC8XG4gICAgZm9yIChsZXQgY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4OyBjb2x1bW5JbmRleCA8PSBjb2x1bW5TdG9wSW5kZXg7IGNvbHVtbkluZGV4KyspIHtcbiAgICAgICAgaWYgKGNvbHVtbkluZGV4ID4gY29sdW1uQ291bnQgLSAxKSBicmVhaztcblxuICAgICAgICAvLyDojrflj5bor6XliJflr7nlupTnmoQgZmllbGTvvIzlpoLmnpwgZmllbGQg5LiN5YaN5bGV56S66IyD5Zu077yM5YiZ6Lez6L+H6K+l5YiXXG4gICAgICAgIGNvbnN0IGZpZWxkID0gdmlzaWJsZUNvbHVtbnNbY29sdW1uSW5kZXhdO1xuICAgICAgICBpZiAoZmllbGQgPT0gbnVsbCkgY29udGludWU7XG5cbiAgICAgICAgLy8g6I635Y+W6K+l5YiX5a+55bqU55qE5a695bqmXG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChjb2x1bW5JbmRleCk7XG4gICAgICAgIGNvbnN0IHggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldChjb2x1bW5JbmRleCkgKyBBSV9UQUJMRV9PRkZTRVQ7XG4gICAgICAgIGNvbnN0IGlzTGFzdENvbHVtbiA9IGNvbHVtbkluZGV4ID09PSBhaVRhYmxlLmdyaWREYXRhKCkuZmllbGRzPy5sZW5ndGggLSAxO1xuXG4gICAgICAgIGlmIChjb2x1bW5JbmRleCA9PT0gMSkge1xuICAgICAgICAgICAgY2VsbERyYXdlci5pbml0U3R5bGUoZmllbGQsIHsgZm9udFdlaWdodDogREVGQVVMVF9GT05UX1NUWUxFIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g6YGN5Y6G6KGMLCDku44gcm93U3RhcnRJbmRleCDliLAgcm93U3RvcEluZGV4IOeahOaJgOacieihjO+8jOWGs+WumuWwhuWcqOWTquS6m+ihjOS4iue7mOWItuWNleWFg+agvFxuICAgICAgICBmb3IgKGxldCByb3dJbmRleCA9IHJvd1N0YXJ0SW5kZXg7IHJvd0luZGV4IDw9IHJvd1N0b3BJbmRleDsgcm93SW5kZXgrKykge1xuICAgICAgICAgICAgaWYgKHJvd0luZGV4ID4gcm93Q291bnQgLSAxKSBicmVhaztcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IGNvbnRleHQubGluZWFyUm93cygpW3Jvd0luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IHsgX2lkOiByZWNvcmRJZCwgdHlwZSB9ID0gcm93O1xuICAgICAgICAgICAgY29uc3QgeSA9IGNvb3JkaW5hdGUuZ2V0Um93T2Zmc2V0KHJvd0luZGV4KSArIEFJX1RBQkxFX09GRlNFVDtcbiAgICAgICAgICAgIGNvbnN0IHsgcm93SW5kZXg6IHBvaW50Um93SW5kZXgsIHRhcmdldE5hbWUgfSA9IGNvbnRleHQucG9pbnRQb3NpdGlvbigpO1xuICAgICAgICAgICAgY29uc3QgaXNIb3ZlciA9IHBvaW50Um93SW5kZXggPT09IHJvd0luZGV4O1xuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVSb3dUeXBlLmFkZDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0hvdmVyUm93ID0gaXNIb3ZlciAmJiB0YXJnZXROYW1lID09PSBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNDaGVja2VkUm93ID0gYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHMuaGFzKHJvdy5faWQpO1xuICAgICAgICAgICAgICAgICAgICBhZGRSb3dMYXlvdXQuaW5pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0hlaWdodDogQUlfVEFCTEVfRklFTERfSEVBRF9IRUlHSFQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db3VudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBjb29yZGluYXRlLmNvbnRhaW5lcldpZHRoXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhZGRSb3dMYXlvdXQucmVuZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzSG92ZXJSb3csXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0NoZWNrZWRSb3dcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIEFJVGFibGVSb3dUeXBlLnJlY29yZDoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZElkID0gZmllbGQuX2lkO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoID0gW3JlY29yZElkLCBmaWVsZElkXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJhY2tncm91bmQgPSBnZXRDZWxsQmFja2dyb3VuZChjZWxsLCBpc0hvdmVyLCB0YXJnZXROYW1lLCBhaVRhYmxlKTtcblxuICAgICAgICAgICAgICAgICAgICByZWNvcmRSb3dMYXlvdXQuaW5pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5XaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyV2lkdGg6IGNvb3JkaW5hdGUuY29udGFpbmVyV2lkdGhcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFJvd0xheW91dC5yZW5kZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU6IHsgZmlsbDogYmFja2dyb3VuZCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNIb3ZlclJvdzogaXNIb3ZlclJlY29yZChpc0hvdmVyLCB0YXJnZXROYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hlY2tlZFJvdzogaXNTZWxlY3RlZFJlY29yZChyZWNvcmRJZCwgYWlUYWJsZSlcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGgsIG9mZnNldCB9ID0gZ2V0Q2VsbEhvcml6b250YWxQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbldpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uQ291bnRcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWxYID0geCArIG9mZnNldCArIEFJX1RBQkxFX09GRlNFVDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhbFkgPSB5ICsgQUlfVEFCTEVfT0ZGU0VUO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHlsZSA9IHsgZm9udFdlaWdodDogREVGQVVMVF9GT05UX1NUWUxFIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IEFJVGFibGVRdWVyaWVzLmdldEZpZWxkVmFsdWUoYWlUYWJsZSwgW3JlY29yZElkLCBmaWVsZElkXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybVZhbHVlID0gdHJhbnNmb3JtQ2VsbFZhbHVlKGFpVGFibGUsIGZpZWxkLCBjZWxsVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW5kZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhaVRhYmxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgeDogcmVhbFgsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiByZWFsWSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbldpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvd0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZElkOiByZWNvcmRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNBY3RpdmU6IGlzU2VsZWN0ZWRGaWVsZChmaWVsZElkLCBhaVRhYmxlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8vIGhvdmVyIOe7hOS7tua4suafk+aXtu+8jOW6leWxgueahCBjZWxsIOa4suafk+S4uuepulxuICAgICAgICAgICAgICAgICAgICBpZiAoaG92ZXJDZWxsICYmIGhvdmVyQ2VsbC5yZWNvcmRJZCA9PT0gcmVjb3JkSWQgJiYgaG92ZXJDZWxsLmZpZWxkSWQgPT09IGZpZWxkSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlci5jZWxsVmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlci50cmFuc2Zvcm1WYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY2VsbERyYXdlci5pbml0U3R5bGUoZmllbGQsIHN0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8g5pyA5ZCO5LiA5YiX77yM5LiU5Y2V5YWD5qC85YaF5a655a2Y5Zyo77yM6ZyA6KaB6KOB5Ymq5YaF5a6577yM5Lul6Ziy5q2i5paH5pys5rqi5Ye65Y2V5YWD5qC86L6555WMXG4gICAgICAgICAgICAgICAgICAgIC8vIOeEtuWQju+8jOagueaNruiuoeeul+WlveeahOagt+W8j+WSjOW4g+WxgOe7mOWItuWNleWFg+agvOWGheWuuVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNMYXN0Q29sdW1uICYmIGNlbGxWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlY3QocmVhbFgsIHJlYWxZLCB3aWR0aCwgcm93SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5jbGlwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsRHJhd2VyLnJlbmRlckNlbGwocmVuZGVyIGFzIEFJVGFibGVSZW5kZXIsIGN0eCBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGNvbHVtbldpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsRHJhd2VyLnJlbmRlckNlbGwocmVuZGVyIGFzIEFJVGFibGVSZW5kZXIsIGN0eCBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIGNvbHVtbldpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IGdldENlbGxCYWNrZ3JvdW5kID0gKGNlbGw6IEFJUmVjb3JkRmllbGRJZFBhdGgsIGlzSG92ZXI6IGJvb2xlYW4sIHRhcmdldE5hbWU6IHN0cmluZywgYWlUYWJsZTogQUlUYWJsZSk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgY29sb3JzID0gQUlUYWJsZS5nZXRDb2xvcnMoKTtcbiAgICBjb25zdCBbcmVjb3JkSWQsIGZpZWxkSWRdID0gY2VsbDtcbiAgICBsZXQgYmFja2dyb3VuZCA9IGNvbG9ycy53aGl0ZTtcblxuICAgIGNvbnN0IF9pc0hvdmVyUmVjb3JkID0gaXNIb3ZlclJlY29yZChpc0hvdmVyLCB0YXJnZXROYW1lKTtcbiAgICBjb25zdCBfaXNTZWxlY3RlZFJlY29yZCA9IGlzU2VsZWN0ZWRSZWNvcmQocmVjb3JkSWQsIGFpVGFibGUpO1xuICAgIGNvbnN0IF9pc1NlbGVjdGVkRmllbGQgPSBpc1NlbGVjdGVkRmllbGQoZmllbGRJZCwgYWlUYWJsZSk7XG4gICAgY29uc3QgX2lzU2libGluZ0NlbGwgPSBpc1NpYmxpbmdDZWxsKGNlbGwsIGFpVGFibGUpO1xuICAgIGNvbnN0IF9pc0FjdGl2ZUNlbGwgPSBpc0FjdGl2ZUNlbGwoY2VsbCwgYWlUYWJsZSk7XG4gICAgY29uc3QgX2lzU2VsZWN0ZWRDZWxsID0gaXNTZWxlY3RlZENlbGwoY2VsbCwgYWlUYWJsZSk7XG4gICAgY29uc3QgX2lzS2V5d29yZHNNYXRjaGVkQ2VsbCA9IGlzS2V5d29yZHNNYXRjaGVkQ2VsbChjZWxsLCBhaVRhYmxlKTtcblxuICAgIGlmIChfaXNLZXl3b3Jkc01hdGNoZWRDZWxsKSB7XG4gICAgICAgIGJhY2tncm91bmQgPSBjb2xvcnMuaXRlbU1hdGNoQmdDb2xvcjtcbiAgICB9IGVsc2UgaWYgKF9pc1NlbGVjdGVkUmVjb3JkIHx8IF9pc1NlbGVjdGVkRmllbGQgfHwgX2lzU2libGluZ0NlbGwgfHwgKF9pc1NlbGVjdGVkQ2VsbCAmJiAhX2lzQWN0aXZlQ2VsbCkpIHtcbiAgICAgICAgYmFja2dyb3VuZCA9IGNvbG9ycy5pdGVtQWN0aXZlQmdDb2xvcjtcbiAgICB9IGVsc2UgaWYgKF9pc0hvdmVyUmVjb3JkICYmICFfaXNBY3RpdmVDZWxsKSB7XG4gICAgICAgIGJhY2tncm91bmQgPSBjb2xvcnMuZ3JheTgwO1xuICAgIH1cblxuICAgIHJldHVybiBiYWNrZ3JvdW5kO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQWN0aXZlQ2VsbCA9IChjZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoLCBhaVRhYmxlOiBBSVRhYmxlKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgW3JlY29yZElkLCBmaWVsZElkXSA9IGNlbGw7XG4gICAgY29uc3QgW2FjdGl2ZVJlY29yZElkLCBhY3RpdmVGaWVsZElkXSA9IEFJVGFibGUuZ2V0QWN0aXZlQ2VsbChhaVRhYmxlKSB8fCBbXTtcbiAgICByZXR1cm4gcmVjb3JkSWQgPT09IGFjdGl2ZVJlY29yZElkICYmIGZpZWxkSWQgPT09IGFjdGl2ZUZpZWxkSWQ7XG59O1xuXG5jb25zdCBpc1NpYmxpbmdDZWxsID0gKGNlbGw6IEFJUmVjb3JkRmllbGRJZFBhdGgsIGFpVGFibGU6IEFJVGFibGUpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBbcmVjb3JkSWQsIGZpZWxkSWRdID0gY2VsbDtcbiAgICBjb25zdCBbYWN0aXZlUmVjb3JkSWQsIGFjdGl2ZUZpZWxkSWRdID0gQUlUYWJsZS5nZXRBY3RpdmVDZWxsKGFpVGFibGUpIHx8IFtdO1xuICAgIHJldHVybiBBSVRhYmxlLmdldEFjdGl2ZVJlY29yZElkcyhhaVRhYmxlKS5sZW5ndGggPT09IDEgJiYgcmVjb3JkSWQgPT09IGFjdGl2ZVJlY29yZElkICYmIGZpZWxkSWQgIT09IGFjdGl2ZUZpZWxkSWQ7XG59O1xuXG5jb25zdCBpc0tleXdvcmRzTWF0Y2hlZENlbGwgPSAoY2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCwgYWlUYWJsZTogQUlUYWJsZSk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IFtyZWNvcmRJZCwgZmllbGRJZF0gPSBjZWxsO1xuICAgIHJldHVybiBhaVRhYmxlLmtleXdvcmRzTWF0Y2hlZENlbGxzKCkuaGFzKGAke3JlY29yZElkfToke2ZpZWxkSWR9YCk7XG59O1xuXG5jb25zdCBpc1NlbGVjdGVkQ2VsbCA9IChjZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoLCBhaVRhYmxlOiBBSVRhYmxlKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3QgW3JlY29yZElkLCBmaWVsZElkXSA9IGNlbGw7XG4gICAgcmV0dXJuIGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRDZWxscy5oYXMoYCR7cmVjb3JkSWR9OiR7ZmllbGRJZH1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NlbGVjdGVkRmllbGQgPSAoZmllbGRJZDogc3RyaW5nLCBhaVRhYmxlOiBBSVRhYmxlKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRGaWVsZHMuaGFzKGZpZWxkSWQpO1xufTtcblxuY29uc3QgaXNTZWxlY3RlZFJlY29yZCA9IChyZWNvcmRJZDogc3RyaW5nLCBhaVRhYmxlOiBBSVRhYmxlKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIGFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRSZWNvcmRzLmhhcyhyZWNvcmRJZCk7XG59O1xuXG5jb25zdCBpc0hvdmVyUmVjb3JkID0gKGlzSG92ZXI6IGJvb2xlYW4sIHRhcmdldE5hbWU6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBpc0hvdmVyICYmIHRhcmdldE5hbWUgIT09IEFJX1RBQkxFX0ZJRUxEX0hFQUQ7XG59O1xuIl19