verben-ng-ui 1.1.2 → 1.1.4

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.
@@ -95,14 +95,14 @@ export class DataImportComponent {
95
95
  // });
96
96
  this.previewColumnsList = computed(() => {
97
97
  return this.previewColumns()
98
- .filter((col) => col.accessorKey || col.importKey || col.formControlName)
98
+ .filter((col) => col.importKey || col.formControlName)
99
99
  .map((column) => {
100
100
  const matchingTemplate = this.columnTemplates().find((t) => t.columnId === column.id);
101
101
  console.log(matchingTemplate);
102
102
  if (matchingTemplate) {
103
103
  return {
104
104
  ...column,
105
- accessorKey: column.importKey ?? column.accessorKey,
105
+ // accessorKey: column.importKey,
106
106
  cellTemplate: matchingTemplate.cellTemplate,
107
107
  cellEditTemplate: matchingTemplate.cellEditTemplate,
108
108
  headerTemplate: matchingTemplate.headerTemplate,
@@ -121,7 +121,7 @@ export class DataImportComponent {
121
121
  this.headers = computed(() => {
122
122
  return (this.fields() ??
123
123
  this.previewColumnsList()
124
- .filter((col) => col.accessorKey)
124
+ .filter((col) => col.importKey)
125
125
  .map((col) => col.header.toString()));
126
126
  });
127
127
  }
@@ -173,4 +173,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImpo
173
173
  type: Component,
174
174
  args: [{ selector: 'lib-data-import', providers: [DataImportService], template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\">click to browse</label>\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"save()\">Import</button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: { first_name: 'verben-ng', last_name: 'verbena' } }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ service.importedData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ invalidIndexSet.size }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"headers()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <div style=\"max-height: min(75vh, 780px); overflow: auto\">\n <lib-data-table\n [data]=\"service.importedData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n (rowSave)=\"service.addRow($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n </div>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed #ccc;padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:#eee}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between;width:100%}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:#404040;color:#fff}.export-button{background-color:#ffe681;color:#404040}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"] }]
175
175
  }], ctorParameters: () => [{ type: i1.DataImportService }] });
176
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWltcG9ydC9kYXRhLWltcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtaW1wb3J0L2RhdGEtaW1wb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBRUwsU0FBUyxHQUdWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7O0FBUTFELE1BQU0sT0FBTyxtQkFBbUI7SUFxQ1g7SUFwQ25CLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF5QixDQUFDO0lBQ3pELGVBQWUsR0FBRyxLQUFLLEVBSXBCLENBQUM7SUFDSixNQUFNLEdBQUcsS0FBSyxFQUFZLENBQUM7SUFDM0IsS0FBSyxHQUFHLEtBQUssQ0FBUyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pDLGVBQWUsR0FBRyxLQUFLLENBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sR0FBRyxLQUFLLEVBQStCLENBQUM7SUFDOUMsV0FBVyxHQUFHLEtBQUssRUFBTyxDQUFDO0lBQzNCLG1CQUFtQixHQUFHLE1BQU0sRUFBWSxDQUFDO0lBQ3pDLFdBQVcsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUM3QixlQUFlLEdBQUcsTUFBTSxFQUFnQixDQUFDO0lBQ3pDLE9BQU8sR0FBRyxNQUFNLEVBSVosQ0FBQztJQUVMLGtE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QkFBbUI7NEZBQW5CLG1CQUFtQix5bkNBRm5CLENBQUMsaUJBQWlCLENBQUMsMEJDM0JoQyw0ektBdUxBOzs0RkQxSmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGlCQUFpQixhQUdoQixDQUFDLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgZWZmZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBTaWduYWwsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgRm9ybUdyb3VwQ29uZmlnLFxufSBmcm9tICcuLi9kYXRhLXRhYmxlL2RhdGEtdGFibGUudHlwZXMnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQXJyYXksXG4gIEZvcm1Db250cm9sLFxuICBGb3JtR3JvdXAsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbHVtbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RhdGEtdGFibGUvY29sdW1uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhSW1wb3J0U2VydmljZSB9IGZyb20gJy4vZGF0YS1pbXBvcnQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYXRhLWltcG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLWltcG9ydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLWltcG9ydC5jb21wb25lbnQuY3NzJyxcbiAgcHJvdmlkZXJzOiBbRGF0YUltcG9ydFNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhSW1wb3J0Q29tcG9uZW50PFQgZXh0ZW5kcyB7fT4ge1xuICBwcmV2aWV3Q29sdW1ucyA9IGlucHV0LnJlcXVpcmVkPENvbHVtbkRlZmluaXRpb248VD5bXT4oKTtcbiAgZm9ybUdyb3VwQ29uZmlnID0gaW5wdXQ8XG4gICAgRm9ybUdyb3VwQ29uZmlnPHtcbiAgICAgIFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w7XG4gICAgfT5cbiAgPigpO1xuICBmaWVsZHMgPSBpbnB1dDxzdHJpbmdbXT4oKTtcbiAgdGl0bGUgPSBpbnB1dDxzdHJpbmc+KCdleHBvcnQtdGVtcGxhdGUnKTtcbiAgY29sdW1uVGVtcGxhdGVzID0gaW5wdXQ8cmVhZG9ubHkgQ29sdW1uRGlyZWN0aXZlW10+KFtdKTtcbiAgcGFyc2VyID0gaW5wdXQ8KGRhdGE6IGFueSkgPT4gUGFydGlhbDxUPltdPigpO1xuICBwcmV2aWV3RGF0YSA9IGlucHV0PFRbXT4oKTtcbiAgZXhwb3J0VGVtcGxhdGVFdmVudCA9IG91dHB1dDxzdHJpbmdbXT4oKTtcbiAgaW1wb3J0RXZlbnQgPSBvdXRwdXQ8RmlsZT4oKTtcbiAgaW1wb3J0RXZlbnREYXRhID0gb3V0cHV0PFBhcnRpYWw8VD5bXT4oKTtcbiAgcm93U2F2ZSA9IG91dHB1dDx7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBrZXk6IG51bWJlciB8IHN0cmluZztcbiAgICBkYXRhOiBQYXJ0aWFsPFQ+O1xuICB9PigpO1xuXG4gIC8vIGRhdGE6IFNpZ25hbDwoVCAmIHsgaXNEdXBsaWNhdGU6IGJvb2xlYW4gfSlbXT47XG4gIHByZXZpZXdDb2x1bW5zTGlzdDogU2lnbmFsPENvbHVtbkRlZmluaXRpb248VD5bXT47XG4gIGZvcm1zID0gbmV3IEZvcm1BcnJheTxGb3JtR3JvdXA+KFtdKTtcbiAgdW5pcXVlSWRlbnRpZmllcnM6IFdyaXRhYmxlU2lnbmFsPHN0cmluZ1tdPiA9IHNpZ25hbChbXSk7XG4gIC8vIGR1cGxpY2F0ZURhdGFNYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XG4gIGR1cGxpY2F0ZUluZGV4U2V0ID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIGludmFsaWRJbmRleFNldCA9IG5ldyBNYXA8bnVtYmVyLCBDb2x1bW5EaXJlY3RpdmVbJ2NvbHVtbklkJ11bXT4oKTtcblxuICBoZWFkZXJzOiBTaWduYWw8c3RyaW5nW10+O1xuXG4gIHByaXZhdGUgX2V4dDogJ3hsc3gnIHwgJ3hscycgfCAnY3N2JyA9ICd4bHN4JztcblxuICBmaWxlczogRmlsZVtdID0gW107XG4gIGlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgc2hvd1ByZXZpZXcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc2VydmljZTogRGF0YUltcG9ydFNlcnZpY2U8VD4pIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gdGhpcy5wcmV2aWV3RGF0YSgpPy5mb3JFYWNoKChkYXR1bSkgPT4ge1xuICAgICAgLy8gICBjb25zb2xlLmxvZyhkYXR1bSk7XG4gICAgICAvLyB9KTtcblxuICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSAoZGF0dW06IFBhcnRpYWw8VD4sIGFycmF5OiBQYXJ0aWFsPFQ+W10pID0+IHtcbiAgICAgICAgY29uc3QgaWRlbnRpZmllcnMgPSB0aGlzLnVuaXF1ZUlkZW50aWZpZXJzKCk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBhcnJheS5maWx0ZXIoXG4gICAgICAgICAgICAoZGF0KSA9PlxuICAgICAgICAgICAgICBpZGVudGlmaWVycy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgIGlkZW50aWZpZXJzLmV2ZXJ5KFxuICAgICAgICAgICAgICAgIChpZGVudGlmaWVyKSA9PlxuICAgICAgICAgICAgICAgICAgZGF0dW1baWRlbnRpZmllciBhcyBrZXlvZiBUXSAmJlxuICAgICAgICAgICAgICAgICAgZGF0dW1baWRlbnRpZmllciBhcyBrZXlvZiBUXSA9PT0gZGF0W2lkZW50aWZpZXIgYXMga2V5b2YgVF1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICkubGVuZ3RoID4gMVxuICAgICAgICApO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMucHJldmlld0NvbHVtbnNMaXN0KCk7XG5cbiAgICAgIHRoaXMuc2VydmljZS5pbXBvcnRlZERhdGEoKT8uZm9yRWFjaCgoZCwgaSwgYXJyKSA9PiB7XG4gICAgICAgIGlmIChpc0R1cGxpY2F0ZShkLCBhcnIpKSB7XG4gICAgICAgICAgdGhpcy5kdXBsaWNhdGVJbmRleFNldC5hZGQoaSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgLmZpbHRlcigoeyB2YWxpZGF0b3JGbiB9KSA9PiB2YWxpZGF0b3JGbiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIC8vIGNvbnN0IGludmFsaWRGaWVsZHMgPSBPYmplY3QuZW50cmllcyhkKS5yZWR1Y2U8KGtleW9mIFQpW10+KChmLCBbaywgdl0pID0+IHtcbiAgICAgICAgICAgIC8vICAgaWYgKGNvbHVtbi52YWxpZGF0b3JGbiAmJiAhY29sdW1uLnZhbGlkYXRvckZuKHYgYXMgVFtrZXlvZiBUXSkpIHtcbiAgICAgICAgICAgIC8vICAgICBmLnB1c2goayBhcyBrZXlvZiBUKTtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gICByZXR1cm4gZjtcbiAgICAgICAgICAgIC8vIH0sIFtdKTtcbiAgICAgICAgICAgIGNvbnN0IGludmFsaWRGaWVsZHMgPSBPYmplY3QuZW50cmllcyhkKS5yZWR1Y2U8c3RyaW5nW10+KFxuICAgICAgICAgICAgICAoZiwgW2ssIHZdLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgY29sdW1uLnZhbGlkYXRvckZuICYmXG4gICAgICAgICAgICAgICAgICAhY29sdW1uLnZhbGlkYXRvckZuKHYgYXMgVFtrZXlvZiBUXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGYucHVzaChjb2x1bW4uaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgW11cbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChpbnZhbGlkRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkSW5kZXhTZXQuc2V0KGksIGludmFsaWRGaWVsZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyB0aGlzLmltcG9ydFRhYmxlQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAvLyAgIHJldHVybiB0aGlzLnByZXZpZXdDb2x1bW5zKCkubWFwKChjb2x1bW4pID0+IHtcbiAgICAvLyAgICAgY29uc3QgbWF0Y2hpbmdUZW1wbGF0ZSA9IHRoaXMuY29sdW1uVGVtcGxhdGVzKCkuZmluZChcbiAgICAvLyAgICAgICAodCkgPT4gdC5jb2x1bW5JZCA9PT0gY29sdW1uLmlkXG4gICAgLy8gICAgICk7XG4gICAgLy8gICAgIGNvbnNvbGUubG9nKG1hdGNoaW5nVGVtcGxhdGUpO1xuICAgIC8vICAgICBpZiAobWF0Y2hpbmdUZW1wbGF0ZSkge1xuICAgIC8vICAgICAgIHJldHVybiB7XG4gICAgLy8gICAgICAgICAuLi5jb2x1bW4sXG4gICAgLy8gICAgICAgICBjZWxsVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbFRlbXBsYXRlLFxuICAgIC8vICAgICAgICAgY2VsbEVkaXRUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsRWRpdFRlbXBsYXRlLFxuICAgIC8vICAgICAgICAgaGVhZGVyVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuaGVhZGVyVGVtcGxhdGUsXG4gICAgLy8gICAgICAgICBmb290ZXJUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5mb290ZXJUZW1wbGF0ZSxcbiAgICAvLyAgICAgICB9O1xuICAgIC8vICAgICB9XG4gICAgLy8gICAgIHJldHVybiBjb2x1bW47XG4gICAgLy8gICB9KTtcbiAgICAvLyB9KTtcblxuICAgIHRoaXMucHJldmlld0NvbHVtbnNMaXN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucHJldmlld0NvbHVtbnMoKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChjb2wpID0+IGNvbC5hY2Nlc3NvcktleSB8fCBjb2wuaW1wb3J0S2V5IHx8IGNvbC5mb3JtQ29udHJvbE5hbWVcbiAgICAgICAgKVxuICAgICAgICAubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaGluZ1RlbXBsYXRlID0gdGhpcy5jb2x1bW5UZW1wbGF0ZXMoKS5maW5kKFxuICAgICAgICAgICAgKHQpID0+IHQuY29sdW1uSWQgPT09IGNvbHVtbi5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2cobWF0Y2hpbmdUZW1wbGF0ZSk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgYWNjZXNzb3JLZXk6IGNvbHVtbi5pbXBvcnRLZXkgPz8gY29sdW1uLmFjY2Vzc29yS2V5LFxuICAgICAgICAgICAgICBjZWxsVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbFRlbXBsYXRlLFxuICAgICAgICAgICAgICBjZWxsRWRpdFRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmNlbGxFZGl0VGVtcGxhdGUsXG4gICAgICAgICAgICAgIGhlYWRlclRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmhlYWRlclRlbXBsYXRlLFxuICAgICAgICAgICAgICBmb290ZXJUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5mb290ZXJUZW1wbGF0ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICAgIH0pXG4gICAgICAgIC5jb25jYXQoW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnYWN0aW9ucycsXG4gICAgICAgICAgICBoZWFkZXI6ICdBY3Rpb25zJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcbiAgICB9KTtcblxuICAgIHRoaXMuaGVhZGVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZmllbGRzKCkgPz9cbiAgICAgICAgdGhpcy5wcmV2aWV3Q29sdW1uc0xpc3QoKVxuICAgICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLmFjY2Vzc29yS2V5KVxuICAgICAgICAgIC5tYXAoKGNvbCkgPT4gY29sLmhlYWRlci50b1N0cmluZygpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICB9XG5cbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsZXMgPSBBcnJheS5mcm9tKGV2ZW50LmRhdGFUcmFuc2ZlciEuZmlsZXMpO1xuXG4gICAgdGhpcy5zZXJ2aWNlLmhhbmRsZUltcG9ydCh0aGlzLmZpbGVzWzBdLCB0aGlzLnBhcnNlcigpKTtcbiAgICAvLyB0aGlzLmltcG9ydEV2ZW50LmVtaXQodGhpcy5maWxlc1swXSk7XG4gICAgdGhpcy5zaG93UHJldmlldyA9IHRydWU7XG4gIH1cblxuICBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5maWxlcyA9IEFycmF5LmZyb20oZXZlbnQudGFyZ2V0LmZpbGVzKTtcbiAgICB0aGlzLnNlcnZpY2UuaGFuZGxlSW1wb3J0KHRoaXMuZmlsZXNbMF0sIHRoaXMucGFyc2VyKCkpO1xuXG4gICAgLy8gdGhpcy5pbXBvcnRFdmVudC5lbWl0KHRoaXMuZmlsZXNbMF0pO1xuICAgIHRoaXMuc2hvd1ByZXZpZXcgPSB0cnVlO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5maWxlcyA9IFtdO1xuICB9XG5cbiAgc2F2ZSgpIHtcbiAgICBjb25zb2xlLmxvZygnUFJFVkRBVEEnLCB0aGlzLnNlcnZpY2UuaW1wb3J0ZWREYXRhKCkpO1xuICAgIHRoaXMuaW1wb3J0RXZlbnREYXRhLmVtaXQodGhpcy5zZXJ2aWNlLmltcG9ydGVkRGF0YSgpIHx8IFtdKTtcbiAgICB0aGlzLnNob3dQcmV2aWV3ID0gZmFsc2U7XG4gIH1cblxuICBnZXRDb250cm9sTmFtZXMoKSB7XG4gICAgY29uc3QgY29udHJvbHMgPSB0aGlzLmZvcm1Hcm91cENvbmZpZygpPy5jb250cm9scztcbiAgICBpZiAoY29udHJvbHMpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9scyk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGhhbmRsZVRlbXBsYXRlRXhwb3J0KCkge1xuICAgIHRoaXMuc2VydmljZS5oYW5kbGVUZW1wbGF0ZUV4cG9ydCh0aGlzLmhlYWRlcnMoKSwgdGhpcy50aXRsZSgpKTtcbiAgICB0aGlzLmV4cG9ydFRlbXBsYXRlRXZlbnQuZW1pdCh0aGlzLmhlYWRlcnMoKSk7XG4gIH1cblxuICAvLyBnZXRGb3JtQ29udHJvbChpbmRleDogbnVtYmVyLCBmaWVsZDogc3RyaW5nKSB7XG4gIC8vICAgY29uc3QgY29udHJvbCA9IHRoaXMuLmdldChpbmRleCk/LmdldChmaWVsZCkgYXMgRm9ybUNvbnRyb2w8YW55PjtcbiAgLy8gICBjb25zb2xlLmxvZyhjb250cm9sKTtcbiAgLy8gICByZXR1cm4gY29udHJvbDtcbiAgLy8gfVxufVxuIiwiPHZlcmJlbi1jYXJkXG4gIHdpZHRoPVwiMjRyZW1cIlxuICBib3JkZXJSYWRpdXM9XCIxcmVtXCJcbiAgW2JvcmRlcl09XCInMXB4IHNvbGlkICNENEEwMDcnXCJcbiAgYmdDb2xvcj1cIiNGRkZGRkZcIlxuICBjbGFzcz1cImV4cG9ydC1jYXJkXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+SW1wb3J0PC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJyMzNDc5RTknXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgW3N0eWxlLmJvcmRlcl09XCInbm9uZSdcIlxuICAgICAgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIlxuICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTJweCdcIlxuICAgICAgKGNsaWNrKT1cInJlc2V0KClcIlxuICAgID5cbiAgICAgIFJlc2V0XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImV4cG9ydC1idXR0b25cIiAoY2xpY2spPVwiaGFuZGxlVGVtcGxhdGVFeHBvcnQoKVwiPlxuICAgICAgICBEb3dubG9hZCBUZW1wbGF0ZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8bGFiZWwgZm9yPVwiZmlsZUlucHV0XCIgY2xhc3M9XCJleHBvcnQtYnV0dG9uXCI+VXBsb2FkIEZpbGU8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyb3AtYXJlYVwiXG4gICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxwPlxuICAgICAgICAgIERyYWcgYW5kIGRyb3AgZmlsZXMgaGVyZSBvclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWxlSW5wdXRcIj5jbGljayB0byBicm93c2U8L2xhYmVsPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBpZD1cImZpbGVJbnB1dFwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICAgIGFjY2VwdD1cIi5jc3YsIGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LCBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIlxuICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJmaWxlcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxoMz5VcGxvYWRlZCBGaWxlczo8L2gzPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzXCI+e3sgZmlsZS5uYW1lIH19PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2FyZC1mb290ZXIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cInNhdmUoKVwiPkltcG9ydDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdmVyYmVuLWNhcmQ+XG5cbjwhLS0gTW9kYWwgQ29tcG9uZW50IC0tPlxuPHZlcmJlbi1kaWFsb2d1ZVxuICBbc2hvd0Nsb3NlSWNvbl09XCJ0cnVlXCJcbiAgW2Rpc21pc3NPdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gIFtjbG9zZU9uRXNjYXBlXT1cInRydWVcIlxuICBbc2l6ZV09XCInbGFyZ2UnXCJcbiAgW21vZGVdPVwiJ2RpYWxvZ3VlJ1wiXG4gIFtjdXN0b21DbGFzc109XCInbXktbW9kYWwtY3VzdG9tLWNsYXNzJ1wiXG4gIFtkaXNhYmxlRm9vdGVyXT1cImZhbHNlXCJcbiAgW21vZGFsRGF0YV09XCJbeyBkYXRhOiB7IGZpcnN0X25hbWU6ICd2ZXJiZW4tbmcnLCBsYXN0X25hbWU6ICd2ZXJiZW5hJyB9IH1dXCJcbiAgW2lzVmlzaWJsZV09XCJzaG93UHJldmlld1wiXG4gIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiXG4gIFtib2R5VGVtcGxhdGVdPVwiYm9keVRlbXBsYXRlXCJcbiAgW2Zvb3RlclRlbXBsYXRlXT1cImZvb3RlclRlbXBsYXRlXCJcbiAgZGlhbG9ndWVXaWR0aD1cIjg1JVwiXG4+XG4gIDxhIGRvd25sb2FkPVwiXCI+PC9hPlxuPC92ZXJiZW4tZGlhbG9ndWU+XG5cbjwhLS0gRGVmaW5lIHRlbXBsYXRlcyAtLT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gIDxoMj5VcGxvYWQgUHJldmlldzwvaDI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBteS00XCI+XG4gICAgPHAgY2xhc3M9XCJcIj5Ub3RhbCBJdGVtczoge3sgc2VydmljZS5pbXBvcnRlZERhdGEoKS5sZW5ndGggfX08L3A+XG5cbiAgICA8cCBjbGFzcz1cIlwiPkR1cGxpY2F0ZXM6IHt7IGR1cGxpY2F0ZUluZGV4U2V0LnNpemUgfX08L3A+XG5cbiAgICA8cCBjbGFzcz1cIlwiPkludmFsaWQgSXRlbXM6IHt7IGludmFsaWRJbmRleFNldC5zaXplIH19PC9wPlxuXG4gICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgIFttdWx0aXNlbGVjdF09XCJ0cnVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiRmluZCBkdXBsaWNhdGVzIGJ5XCJcbiAgICAgIFtvcHRpb25zXT1cImhlYWRlcnMoKVwiXG4gICAgICBbbmdNb2RlbF09XCJ1bmlxdWVJZGVudGlmaWVycygpXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVuaXF1ZUlkZW50aWZpZXJzLnNldCgkZXZlbnQpXCJcbiAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuICA8L2Rpdj5cbiAgPGRpdiBzdHlsZT1cIm1heC1oZWlnaHQ6IG1pbig3NXZoLCA3ODBweCk7IG92ZXJmbG93OiBhdXRvXCI+XG4gICAgPGxpYi1kYXRhLXRhYmxlXG4gICAgICBbZGF0YV09XCJzZXJ2aWNlLmltcG9ydGVkRGF0YSgpXCJcbiAgICAgIFtjb2x1bW5zXT1cInByZXZpZXdDb2x1bW5zTGlzdCgpXCJcbiAgICAgIFtmb3JtR3JvdXBDb25maWddPVwiZm9ybUdyb3VwQ29uZmlnKClcIlxuICAgICAgKHJvd1NhdmUpPVwic2VydmljZS5hZGRSb3coJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJhY3Rpb25zXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICNjZWxsXG4gICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgbGV0LWRlbGV0ZVJvdz1cImRlbGV0ZVJvd1wiXG4gICAgICAgICAgbGV0LWlzRWRpdGluZz1cImlzRWRpdGluZ1wiXG4gICAgICAgICAgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCJcbiAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uc1wiPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJvd0VkaXQoKVwiXG4gICAgICAgICAgICAgIGljb249XCJlZGl0XCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cblxuICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgI2NlbGxFZGl0XG4gICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgbGV0LWRlbGV0ZVJvd1xuICAgICAgICAgIGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIlxuICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIlxuICAgICAgICAgICAgICBpY29uPVwidGlja1wiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9saWItZGF0YS10YWJsZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWJ1dHRvbnMgZmxleCBnYXAtNCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG15LTRcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGNhbmNlbC1idXR0b25cIlxuICAgICAgKGNsaWNrKT1cInNob3dQcmV2aWV3ID0gZmFsc2VcIlxuICAgID5cbiAgICAgIENhbmNlbFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZXhwb3J0LWJ1dHRvblwiIChjbGljayk9XCJzYXZlKClcIj5cbiAgICAgIENvbXBsZXRlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
176
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWltcG9ydC9kYXRhLWltcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtaW1wb3J0L2RhdGEtaW1wb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBRUwsU0FBUyxHQUdWLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7O0FBUTFELE1BQU0sT0FBTyxtQkFBbUI7SUFxQ1g7SUFwQ25CLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF5QixDQUFDO0lBQ3pELGVBQWUsR0FBRyxLQUFLLEVBSXBCLENBQUM7SUFDSixNQUFNLEdBQUcsS0FBSyxFQUFZLENBQUM7SUFDM0IsS0FBSyxHQUFHLEtBQUssQ0FBUyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pDLGVBQWUsR0FBRyxLQUFLLENBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sR0FBRyxLQUFLLEVBQStCLENBQUM7SUFDOUMsV0FBVyxHQUFHLEtBQUssRUFBTyxDQUFDO0lBQzNCLG1CQUFtQixHQUFHLE1BQU0sRUFBWSxDQUFDO0lBQ3pDLFdBQVcsR0FBRyxNQUFNLEVBQVEsQ0FBQztJQUM3QixlQUFlLEdBQUcsTUFBTSxFQUFnQixDQUFDO0lBQ3pDLE9BQU8sR0FBRyxNQUFNLEVBSVosQ0FBQztJQUVMLGtE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TEE7OzRGRDFKYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsaUJBQWlCLGFBR2hCLENBQUMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBlZmZlY3QsXG4gIGlucHV0LFxuICBvdXRwdXQsXG4gIFNpZ25hbCxcbiAgc2lnbmFsLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBDb2x1bW5EZWZpbml0aW9uLFxuICBGb3JtR3JvdXBDb25maWcsXG59IGZyb20gJy4uL2RhdGEtdGFibGUvZGF0YS10YWJsZS50eXBlcyc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1BcnJheSxcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cCxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29sdW1uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YS10YWJsZS9jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFJbXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhLWltcG9ydC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGEtaW1wb3J0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGEtaW1wb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGEtaW1wb3J0LmNvbXBvbmVudC5jc3MnLFxuICBwcm92aWRlcnM6IFtEYXRhSW1wb3J0U2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIERhdGFJbXBvcnRDb21wb25lbnQ8VCBleHRlbmRzIHt9PiB7XG4gIHByZXZpZXdDb2x1bW5zID0gaW5wdXQucmVxdWlyZWQ8Q29sdW1uRGVmaW5pdGlvbjxUPltdPigpO1xuICBmb3JtR3JvdXBDb25maWcgPSBpbnB1dDxcbiAgICBGb3JtR3JvdXBDb25maWc8e1xuICAgICAgW0sgaW4ga2V5b2YgVF06IEFic3RyYWN0Q29udHJvbDtcbiAgICB9PlxuICA+KCk7XG4gIGZpZWxkcyA9IGlucHV0PHN0cmluZ1tdPigpO1xuICB0aXRsZSA9IGlucHV0PHN0cmluZz4oJ2V4cG9ydC10ZW1wbGF0ZScpO1xuICBjb2x1bW5UZW1wbGF0ZXMgPSBpbnB1dDxyZWFkb25seSBDb2x1bW5EaXJlY3RpdmVbXT4oW10pO1xuICBwYXJzZXIgPSBpbnB1dDwoZGF0YTogYW55KSA9PiBQYXJ0aWFsPFQ+W10+KCk7XG4gIHByZXZpZXdEYXRhID0gaW5wdXQ8VFtdPigpO1xuICBleHBvcnRUZW1wbGF0ZUV2ZW50ID0gb3V0cHV0PHN0cmluZ1tdPigpO1xuICBpbXBvcnRFdmVudCA9IG91dHB1dDxGaWxlPigpO1xuICBpbXBvcnRFdmVudERhdGEgPSBvdXRwdXQ8UGFydGlhbDxUPltdPigpO1xuICByb3dTYXZlID0gb3V0cHV0PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRhdGE6IFBhcnRpYWw8VD47XG4gIH0+KCk7XG5cbiAgLy8gZGF0YTogU2lnbmFsPChUICYgeyBpc0R1cGxpY2F0ZTogYm9vbGVhbiB9KVtdPjtcbiAgcHJldmlld0NvbHVtbnNMaXN0OiBTaWduYWw8Q29sdW1uRGVmaW5pdGlvbjxUPltdPjtcbiAgZm9ybXMgPSBuZXcgRm9ybUFycmF5PEZvcm1Hcm91cD4oW10pO1xuICB1bmlxdWVJZGVudGlmaWVyczogV3JpdGFibGVTaWduYWw8c3RyaW5nW10+ID0gc2lnbmFsKFtdKTtcbiAgLy8gZHVwbGljYXRlRGF0YU1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgZHVwbGljYXRlSW5kZXhTZXQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgaW52YWxpZEluZGV4U2V0ID0gbmV3IE1hcDxudW1iZXIsIENvbHVtbkRpcmVjdGl2ZVsnY29sdW1uSWQnXVtdPigpO1xuXG4gIGhlYWRlcnM6IFNpZ25hbDxzdHJpbmdbXT47XG5cbiAgcHJpdmF0ZSBfZXh0OiAneGxzeCcgfCAneGxzJyB8ICdjc3YnID0gJ3hsc3gnO1xuXG4gIGZpbGVzOiBGaWxlW10gPSBbXTtcbiAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICBzaG93UHJldmlldyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzZXJ2aWNlOiBEYXRhSW1wb3J0U2VydmljZTxUPikge1xuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAvLyB0aGlzLnByZXZpZXdEYXRhKCk/LmZvckVhY2goKGRhdHVtKSA9PiB7XG4gICAgICAvLyAgIGNvbnNvbGUubG9nKGRhdHVtKTtcbiAgICAgIC8vIH0pO1xuXG4gICAgICBjb25zdCBpc0R1cGxpY2F0ZSA9IChkYXR1bTogUGFydGlhbDxUPiwgYXJyYXk6IFBhcnRpYWw8VD5bXSkgPT4ge1xuICAgICAgICBjb25zdCBpZGVudGlmaWVycyA9IHRoaXMudW5pcXVlSWRlbnRpZmllcnMoKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGFycmF5LmZpbHRlcihcbiAgICAgICAgICAgIChkYXQpID0+XG4gICAgICAgICAgICAgIGlkZW50aWZpZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgaWRlbnRpZmllcnMuZXZlcnkoXG4gICAgICAgICAgICAgICAgKGlkZW50aWZpZXIpID0+XG4gICAgICAgICAgICAgICAgICBkYXR1bVtpZGVudGlmaWVyIGFzIGtleW9mIFRdICYmXG4gICAgICAgICAgICAgICAgICBkYXR1bVtpZGVudGlmaWVyIGFzIGtleW9mIFRdID09PSBkYXRbaWRlbnRpZmllciBhcyBrZXlvZiBUXVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgKS5sZW5ndGggPiAxXG4gICAgICAgICk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5wcmV2aWV3Q29sdW1uc0xpc3QoKTtcblxuICAgICAgdGhpcy5zZXJ2aWNlLmltcG9ydGVkRGF0YSgpPy5mb3JFYWNoKChkLCBpLCBhcnIpID0+IHtcbiAgICAgICAgaWYgKGlzRHVwbGljYXRlKGQsIGFycikpIHtcbiAgICAgICAgICB0aGlzLmR1cGxpY2F0ZUluZGV4U2V0LmFkZChpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbHVtbnNcbiAgICAgICAgICAuZmlsdGVyKCh7IHZhbGlkYXRvckZuIH0pID0+IHZhbGlkYXRvckZuICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgLy8gY29uc3QgaW52YWxpZEZpZWxkcyA9IE9iamVjdC5lbnRyaWVzKGQpLnJlZHVjZTwoa2V5b2YgVClbXT4oKGYsIFtrLCB2XSkgPT4ge1xuICAgICAgICAgICAgLy8gICBpZiAoY29sdW1uLnZhbGlkYXRvckZuICYmICFjb2x1bW4udmFsaWRhdG9yRm4odiBhcyBUW2tleW9mIFRdKSkge1xuICAgICAgICAgICAgLy8gICAgIGYucHVzaChrIGFzIGtleW9mIFQpO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyAgIHJldHVybiBmO1xuICAgICAgICAgICAgLy8gfSwgW10pO1xuICAgICAgICAgICAgY29uc3QgaW52YWxpZEZpZWxkcyA9IE9iamVjdC5lbnRyaWVzKGQpLnJlZHVjZTxzdHJpbmdbXT4oXG4gICAgICAgICAgICAgIChmLCBbaywgdl0sIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBjb2x1bW4udmFsaWRhdG9yRm4gJiZcbiAgICAgICAgICAgICAgICAgICFjb2x1bW4udmFsaWRhdG9yRm4odiBhcyBUW2tleW9mIFRdKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgZi5wdXNoKGNvbHVtbi5pZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbXVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGludmFsaWRGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB0aGlzLmludmFsaWRJbmRleFNldC5zZXQoaSwgaW52YWxpZEZpZWxkcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIHRoaXMuaW1wb3J0VGFibGVDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vICAgcmV0dXJuIHRoaXMucHJldmlld0NvbHVtbnMoKS5tYXAoKGNvbHVtbikgPT4ge1xuICAgIC8vICAgICBjb25zdCBtYXRjaGluZ1RlbXBsYXRlID0gdGhpcy5jb2x1bW5UZW1wbGF0ZXMoKS5maW5kKFxuICAgIC8vICAgICAgICh0KSA9PiB0LmNvbHVtbklkID09PSBjb2x1bW4uaWRcbiAgICAvLyAgICAgKTtcbiAgICAvLyAgICAgY29uc29sZS5sb2cobWF0Y2hpbmdUZW1wbGF0ZSk7XG4gICAgLy8gICAgIGlmIChtYXRjaGluZ1RlbXBsYXRlKSB7XG4gICAgLy8gICAgICAgcmV0dXJuIHtcbiAgICAvLyAgICAgICAgIC4uLmNvbHVtbixcbiAgICAvLyAgICAgICAgIGNlbGxUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsVGVtcGxhdGUsXG4gICAgLy8gICAgICAgICBjZWxsRWRpdFRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmNlbGxFZGl0VGVtcGxhdGUsXG4gICAgLy8gICAgICAgICBoZWFkZXJUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5oZWFkZXJUZW1wbGF0ZSxcbiAgICAvLyAgICAgICAgIGZvb3RlclRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmZvb3RlclRlbXBsYXRlLFxuICAgIC8vICAgICAgIH07XG4gICAgLy8gICAgIH1cbiAgICAvLyAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAvLyAgIH0pO1xuICAgIC8vIH0pO1xuXG4gICAgdGhpcy5wcmV2aWV3Q29sdW1uc0xpc3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5wcmV2aWV3Q29sdW1ucygpXG4gICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLmltcG9ydEtleSB8fCBjb2wuZm9ybUNvbnRyb2xOYW1lKVxuICAgICAgICAubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaGluZ1RlbXBsYXRlID0gdGhpcy5jb2x1bW5UZW1wbGF0ZXMoKS5maW5kKFxuICAgICAgICAgICAgKHQpID0+IHQuY29sdW1uSWQgPT09IGNvbHVtbi5pZFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc29sZS5sb2cobWF0Y2hpbmdUZW1wbGF0ZSk7XG4gICAgICAgICAgaWYgKG1hdGNoaW5nVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLmNvbHVtbixcbiAgICAgICAgICAgICAgLy8gYWNjZXNzb3JLZXk6IGNvbHVtbi5pbXBvcnRLZXksXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsVGVtcGxhdGUsXG4gICAgICAgICAgICAgIGNlbGxFZGl0VGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbEVkaXRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuaGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgICAgIGZvb3RlclRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmZvb3RlclRlbXBsYXRlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdhY3Rpb25zJyxcbiAgICAgICAgICAgIGhlYWRlcjogJ0FjdGlvbnMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5oZWFkZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5maWVsZHMoKSA/P1xuICAgICAgICB0aGlzLnByZXZpZXdDb2x1bW5zTGlzdCgpXG4gICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuaW1wb3J0S2V5KVxuICAgICAgICAgIC5tYXAoKGNvbCkgPT4gY29sLmhlYWRlci50b1N0cmluZygpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIG9uRHJhZ0xlYXZlKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICB9XG5cbiAgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIHRoaXMuZmlsZXMgPSBBcnJheS5mcm9tKGV2ZW50LmRhdGFUcmFuc2ZlciEuZmlsZXMpO1xuXG4gICAgdGhpcy5zZXJ2aWNlLmhhbmRsZUltcG9ydCh0aGlzLmZpbGVzWzBdLCB0aGlzLnBhcnNlcigpKTtcbiAgICAvLyB0aGlzLmltcG9ydEV2ZW50LmVtaXQodGhpcy5maWxlc1swXSk7XG4gICAgdGhpcy5zaG93UHJldmlldyA9IHRydWU7XG4gIH1cblxuICBvbkZpbGVTZWxlY3RlZChldmVudDogYW55KSB7XG4gICAgdGhpcy5maWxlcyA9IEFycmF5LmZyb20oZXZlbnQudGFyZ2V0LmZpbGVzKTtcbiAgICB0aGlzLnNlcnZpY2UuaGFuZGxlSW1wb3J0KHRoaXMuZmlsZXNbMF0sIHRoaXMucGFyc2VyKCkpO1xuXG4gICAgLy8gdGhpcy5pbXBvcnRFdmVudC5lbWl0KHRoaXMuZmlsZXNbMF0pO1xuICAgIHRoaXMuc2hvd1ByZXZpZXcgPSB0cnVlO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5maWxlcyA9IFtdO1xuICB9XG5cbiAgc2F2ZSgpIHtcbiAgICBjb25zb2xlLmxvZygnUFJFVkRBVEEnLCB0aGlzLnNlcnZpY2UuaW1wb3J0ZWREYXRhKCkpO1xuICAgIHRoaXMuaW1wb3J0RXZlbnREYXRhLmVtaXQodGhpcy5zZXJ2aWNlLmltcG9ydGVkRGF0YSgpIHx8IFtdKTtcbiAgICB0aGlzLnNob3dQcmV2aWV3ID0gZmFsc2U7XG4gIH1cblxuICBnZXRDb250cm9sTmFtZXMoKSB7XG4gICAgY29uc3QgY29udHJvbHMgPSB0aGlzLmZvcm1Hcm91cENvbmZpZygpPy5jb250cm9scztcbiAgICBpZiAoY29udHJvbHMpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9scyk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGhhbmRsZVRlbXBsYXRlRXhwb3J0KCkge1xuICAgIHRoaXMuc2VydmljZS5oYW5kbGVUZW1wbGF0ZUV4cG9ydCh0aGlzLmhlYWRlcnMoKSwgdGhpcy50aXRsZSgpKTtcbiAgICB0aGlzLmV4cG9ydFRlbXBsYXRlRXZlbnQuZW1pdCh0aGlzLmhlYWRlcnMoKSk7XG4gIH1cblxuICAvLyBnZXRGb3JtQ29udHJvbChpbmRleDogbnVtYmVyLCBmaWVsZDogc3RyaW5nKSB7XG4gIC8vICAgY29uc3QgY29udHJvbCA9IHRoaXMuLmdldChpbmRleCk/LmdldChmaWVsZCkgYXMgRm9ybUNvbnRyb2w8YW55PjtcbiAgLy8gICBjb25zb2xlLmxvZyhjb250cm9sKTtcbiAgLy8gICByZXR1cm4gY29udHJvbDtcbiAgLy8gfVxufVxuIiwiPHZlcmJlbi1jYXJkXG4gIHdpZHRoPVwiMjRyZW1cIlxuICBib3JkZXJSYWRpdXM9XCIxcmVtXCJcbiAgW2JvcmRlcl09XCInMXB4IHNvbGlkICNENEEwMDcnXCJcbiAgYmdDb2xvcj1cIiNGRkZGRkZcIlxuICBjbGFzcz1cImV4cG9ydC1jYXJkXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+SW1wb3J0PC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJyMzNDc5RTknXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgW3N0eWxlLmJvcmRlcl09XCInbm9uZSdcIlxuICAgICAgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIlxuICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTJweCdcIlxuICAgICAgKGNsaWNrKT1cInJlc2V0KClcIlxuICAgID5cbiAgICAgIFJlc2V0XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImV4cG9ydC1idXR0b25cIiAoY2xpY2spPVwiaGFuZGxlVGVtcGxhdGVFeHBvcnQoKVwiPlxuICAgICAgICBEb3dubG9hZCBUZW1wbGF0ZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8bGFiZWwgZm9yPVwiZmlsZUlucHV0XCIgY2xhc3M9XCJleHBvcnQtYnV0dG9uXCI+VXBsb2FkIEZpbGU8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyb3AtYXJlYVwiXG4gICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxwPlxuICAgICAgICAgIERyYWcgYW5kIGRyb3AgZmlsZXMgaGVyZSBvclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWxlSW5wdXRcIj5jbGljayB0byBicm93c2U8L2xhYmVsPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBpZD1cImZpbGVJbnB1dFwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICAgIGFjY2VwdD1cIi5jc3YsIGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LCBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIlxuICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJmaWxlcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxoMz5VcGxvYWRlZCBGaWxlczo8L2gzPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzXCI+e3sgZmlsZS5uYW1lIH19PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2FyZC1mb290ZXIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cInNhdmUoKVwiPkltcG9ydDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdmVyYmVuLWNhcmQ+XG5cbjwhLS0gTW9kYWwgQ29tcG9uZW50IC0tPlxuPHZlcmJlbi1kaWFsb2d1ZVxuICBbc2hvd0Nsb3NlSWNvbl09XCJ0cnVlXCJcbiAgW2Rpc21pc3NPdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gIFtjbG9zZU9uRXNjYXBlXT1cInRydWVcIlxuICBbc2l6ZV09XCInbGFyZ2UnXCJcbiAgW21vZGVdPVwiJ2RpYWxvZ3VlJ1wiXG4gIFtjdXN0b21DbGFzc109XCInbXktbW9kYWwtY3VzdG9tLWNsYXNzJ1wiXG4gIFtkaXNhYmxlRm9vdGVyXT1cImZhbHNlXCJcbiAgW21vZGFsRGF0YV09XCJbeyBkYXRhOiB7IGZpcnN0X25hbWU6ICd2ZXJiZW4tbmcnLCBsYXN0X25hbWU6ICd2ZXJiZW5hJyB9IH1dXCJcbiAgW2lzVmlzaWJsZV09XCJzaG93UHJldmlld1wiXG4gIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiXG4gIFtib2R5VGVtcGxhdGVdPVwiYm9keVRlbXBsYXRlXCJcbiAgW2Zvb3RlclRlbXBsYXRlXT1cImZvb3RlclRlbXBsYXRlXCJcbiAgZGlhbG9ndWVXaWR0aD1cIjg1JVwiXG4+XG4gIDxhIGRvd25sb2FkPVwiXCI+PC9hPlxuPC92ZXJiZW4tZGlhbG9ndWU+XG5cbjwhLS0gRGVmaW5lIHRlbXBsYXRlcyAtLT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gIDxoMj5VcGxvYWQgUHJldmlldzwvaDI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBteS00XCI+XG4gICAgPHAgY2xhc3M9XCJcIj5Ub3RhbCBJdGVtczoge3sgc2VydmljZS5pbXBvcnRlZERhdGEoKS5sZW5ndGggfX08L3A+XG5cbiAgICA8cCBjbGFzcz1cIlwiPkR1cGxpY2F0ZXM6IHt7IGR1cGxpY2F0ZUluZGV4U2V0LnNpemUgfX08L3A+XG5cbiAgICA8cCBjbGFzcz1cIlwiPkludmFsaWQgSXRlbXM6IHt7IGludmFsaWRJbmRleFNldC5zaXplIH19PC9wPlxuXG4gICAgPHZlcmJlbi1kcm9wLWRvd25cbiAgICAgIFttdWx0aXNlbGVjdF09XCJ0cnVlXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiRmluZCBkdXBsaWNhdGVzIGJ5XCJcbiAgICAgIFtvcHRpb25zXT1cImhlYWRlcnMoKVwiXG4gICAgICBbbmdNb2RlbF09XCJ1bmlxdWVJZGVudGlmaWVycygpXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVuaXF1ZUlkZW50aWZpZXJzLnNldCgkZXZlbnQpXCJcbiAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuICA8L2Rpdj5cbiAgPGRpdiBzdHlsZT1cIm1heC1oZWlnaHQ6IG1pbig3NXZoLCA3ODBweCk7IG92ZXJmbG93OiBhdXRvXCI+XG4gICAgPGxpYi1kYXRhLXRhYmxlXG4gICAgICBbZGF0YV09XCJzZXJ2aWNlLmltcG9ydGVkRGF0YSgpXCJcbiAgICAgIFtjb2x1bW5zXT1cInByZXZpZXdDb2x1bW5zTGlzdCgpXCJcbiAgICAgIFtmb3JtR3JvdXBDb25maWddPVwiZm9ybUdyb3VwQ29uZmlnKClcIlxuICAgICAgKHJvd1NhdmUpPVwic2VydmljZS5hZGRSb3coJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciBsaWJDb2x1bW49XCJhY3Rpb25zXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICNjZWxsXG4gICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgbGV0LWRlbGV0ZVJvdz1cImRlbGV0ZVJvd1wiXG4gICAgICAgICAgbGV0LWlzRWRpdGluZz1cImlzRWRpdGluZ1wiXG4gICAgICAgICAgbGV0LXRvZ2dsZVJvd0VkaXQ9XCJ0b2dnbGVSb3dFZGl0XCJcbiAgICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgICBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uc1wiPlxuICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVJvd0VkaXQoKVwiXG4gICAgICAgICAgICAgIGljb249XCJlZGl0XCJcbiAgICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cblxuICAgICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgI2NlbGxFZGl0XG4gICAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgICAgbGV0LWRlbGV0ZVJvd1xuICAgICAgICAgIGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIlxuICAgICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgICAgbGV0LXJvdz1cInJvd1wiXG4gICAgICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggYWN0aW9uLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIlxuICAgICAgICAgICAgICBpY29uPVwidGlja1wiXG4gICAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG5cbiAgICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAgIGljb249XCJkZWxldGVcIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJvdygpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9saWItZGF0YS10YWJsZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWJ1dHRvbnMgZmxleCBnYXAtNCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG15LTRcIj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGNhbmNlbC1idXR0b25cIlxuICAgICAgKGNsaWNrKT1cInNob3dQcmV2aWV3ID0gZmFsc2VcIlxuICAgID5cbiAgICAgIENhbmNlbFxuICAgIDwvYnV0dG9uPlxuICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgZXhwb3J0LWJ1dHRvblwiIChjbGljayk9XCJzYXZlKClcIj5cbiAgICAgIENvbXBsZXRlXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -325,6 +325,9 @@ export class DataTableComponent {
325
325
  if (formControl) {
326
326
  value = formControl.value;
327
327
  }
328
+ else {
329
+ value = this.getCellValue(row.originalData, column);
330
+ }
328
331
  // else if (editedData) {
329
332
  // if (column.accessorKey && column.accessorKey in editedData) {
330
333
  // // If column has an accessorKey and it exists in edited data, use that
@@ -337,7 +340,6 @@ export class DataTableComponent {
337
340
  // value = this.getCellValue(row, column);
338
341
  // }
339
342
  // }
340
- value = this.getCellValue(row.originalData, column);
341
343
  }
342
344
  else {
343
345
  value = this.getCellValue(row.originalData, column);
@@ -513,4 +515,4 @@ const defaultTableStyles = {
513
515
  borderTop: '2px solid #e0e0e0',
514
516
  },
515
517
  };
516
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUVmLFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFHTixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBbUIsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVE1RCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLHdDQUF3QztJQUN4QyxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBTyxDQUFDO0lBQzdCLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF5QixDQUFDO0lBQ2xELE9BQU8sR0FBRyxLQUFLLEVBQVcsQ0FBQyxDQUFDLDJDQUEyQztJQUN2RSxlQUFlLEdBQUcsS0FBSyxFQUlwQixDQUFDO0lBRUosT0FBTyxHQUFHLEtBQUssRUFBK0IsQ0FBQztJQUV0QyxXQUFXLEdBQWdCLGtCQUFrQixDQUFDO0lBRXZELGVBQWUsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFekMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7SUFDaEMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUloQyxDQUFDO0lBQ0ssU0FBUyxHQUFHLElBQUksWUFBWSxFQUls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LEVBQUUsTUFBTTtRQUNiLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFlBQVksRUFBRSxtQkFBbUI7S0FDbEM7SUFDRCxJQUFJLEVBQUU7UUFDSixJQUFJLEVBQUU7WUFDSixlQUFlLEVBQUUsU0FBUztTQUMzQjtRQUNELEdBQUcsRUFBRTtZQUNILGVBQWUsRUFBRSxTQUFTO1NBQzNCO1FBQ0QsR0FBRyxFQUFFO1lBQ0gsUUFBUSxFQUFFLENBQUM7WUFDWCxLQUFLLEVBQUU7Z0JBQ0wsZUFBZSxFQUFFLFNBQVM7YUFDM0I7U0FDRjtLQUNGO0lBQ0QsS0FBSyxFQUFFO1FBQ0wsT0FBTyxFQUFFLFdBQVc7UUFDcEIsWUFBWSxFQUFFLG1CQUFtQjtLQUNsQztJQUNELE1BQU0sRUFBRTtRQUNOLGVBQWUsRUFBRSxTQUFTO1FBQzFCLFVBQVUsRUFBRSxNQUFNO1FBQ2xCLEtBQUssRUFBRSxNQUFNO1FBQ2IsU0FBUyxFQUFFLE1BQU07UUFDakIsT0FBTyxFQUFFLFdBQVc7UUFDcEIsU0FBUyxFQUFFLG1CQUFtQjtLQUMvQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgY29udGVudENoaWxkcmVuLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5wdXQsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaWduYWwsXG4gIHNpZ25hbCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29sdW1uRGVmaW5pdGlvbixcbiAgRGF0YVdpdGhLZXksXG4gIEVkaXRlZERhdGEsXG4gIEZvcm1Hcm91cENvbmZpZyxcbiAgR3JvdXBlZERhdGFSb3csXG59IGZyb20gJy4vZGF0YS10YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuL2NvbHVtbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQmFzZVN0eWxlcywgVGFibGVTdHlsZXMgfSBmcm9tICcuL3N0eWxlLnR5cGVzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0YS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhdGEtdGFibGUuY29tcG9uZW50LmNzcycsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRhVGFibGVDb21wb25lbnQ8VD4ge1xuICAvLyBNb2RpZnkgZGF0YSBpbnB1dCB0byB1c2UgZ3JvdXBlZCBkYXRhXG4gIGRhdGEgPSBpbnB1dC5yZXF1aXJlZDxUW10+KCk7XG4gIGNvbHVtbnMgPSBpbnB1dC5yZXF1aXJlZDxDb2x1bW5EZWZpbml0aW9uPFQ+W10+KCk7XG4gIGRhdGFLZXkgPSBpbnB1dDxrZXlvZiBUPigpOyAvLyBOZXcgcmVxdWlyZWQgaW5wdXQgZm9yIHVuaXF1ZSBpZGVudGlmaWVyXG4gIGZvcm1Hcm91cENvbmZpZyA9IGlucHV0PFxuICAgIEZvcm1Hcm91cENvbmZpZzx7XG4gICAgICBbSyBpbiBrZXlvZiBUXTogQWJzdHJhY3RDb250cm9sO1xuICAgIH0+XG4gID4oKTtcblxuICBncm91cEJ5ID0gaW5wdXQ8a2V5b2YgVCB8ICgocm93OiBUKSA9PiBhbnkpPigpO1xuXG4gIEBJbnB1dCgpIHN0eWxlQ29uZmlnOiBUYWJsZVN0eWxlcyA9IGRlZmF1bHRUYWJsZVN0eWxlcztcblxuICBjb2x1bW5UZW1wbGF0ZXMgPSBjb250ZW50Q2hpbGRyZW4oQ29sdW1uRGlyZWN0aXZlKTtcblxuICBAT3V0cHV0KCkgcm93RWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgQE91dHB1dCgpIHJvd1NhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRhdGE6IFBhcnRpYWw8VD47XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSByb3dSZXZlcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRhdGE6IFQ7XG4gIH0+KCk7XG4gIEBPdXRwdXQoKSByb3dEZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRbXT4oKTtcblxuICAvKiogSW50ZXJuYWxseSBtYWludGFpbmVkIGRhdGEsIHdpdGggZ3VhcmFudGVlZCB1bmlxdWVuZXNzIGR1ZSB0byBrZXkgcHJvcGVydHkgKi9cbiAgdGFibGVEYXRhOiBTaWduYWw8RGF0YVdpdGhLZXk8VD5bXT47XG5cbiAgcHJpdmF0ZSBlZGl0aW5nUm93c1NpZ25hbCA9IHNpZ25hbDxTZXQ8c3RyaW5nIHwgbnVtYmVyPj4obmV3IFNldCgpKTtcbiAgcHJpdmF0ZSBzZWxlY3RlZFJvd3NTaWduYWwgPSBzaWduYWw8U2V0PHN0cmluZyB8IG51bWJlcj4+KG5ldyBTZXQoKSk7XG4gIC8vIHByaXZhdGUgZWRpdGVkRGF0YVNpZ25hbCA9IHNpZ25hbDxNYXA8c3RyaW5nIHwgbnVtYmVyLCBFZGl0ZWREYXRhPFQ+Pj4oXG4gIC8vICAgbmV3IE1hcCgpXG4gIC8vICk7XG4gIHByaXZhdGUgdW5FZGl0ZWREYXRhU2lnbmFsID0gc2lnbmFsPE1hcDxzdHJpbmcgfCBudW1iZXIsIFQ+PihuZXcgTWFwKCkpO1xuICBwcml2YXRlIGZvcm1Hcm91cHNTaWduYWwgPSBzaWduYWw8TWFwPHN0cmluZyB8IG51bWJlciwgRm9ybUdyb3VwPj4obmV3IE1hcCgpKTtcblxuICBjb2x1bW5zU2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb2x1bW5zKCkpO1xuXG4gIGRpc3BsYXlDb2x1bW5zOiBTaWduYWw8Q29sdW1uRGVmaW5pdGlvbjxUPltdPjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc1NpZ25hbCgpLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoaW5nVGVtcGxhdGUgPSB0aGlzLmNvbHVtblRlbXBsYXRlcygpLmZpbmQoXG4gICAgICAgICAgKHQpID0+IHQuY29sdW1uSWQgPT09IGNvbHVtbi5pZFxuICAgICAgICApO1xuICAgICAgICBpZiAobWF0Y2hpbmdUZW1wbGF0ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICBjZWxsVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbFRlbXBsYXRlLFxuICAgICAgICAgICAgY2VsbEVkaXRUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsRWRpdFRlbXBsYXRlLFxuICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuaGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgICBmb290ZXJUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5mb290ZXJUZW1wbGF0ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW47XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMudGFibGVEYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YSgpLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgbGV0IGtleTtcbiAgICAgICAgY29uc3QgZGF0YUtleSA9IHRoaXMuX2dldFJvd0lkQnlEYXRhS2V5KGl0ZW0pO1xuICAgICAgICBpZiAoZGF0YUtleSkge1xuICAgICAgICAgIGtleSA9IGRhdGFLZXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5ID0gaW5kZXggYXMgRGF0YVdpdGhLZXk8VD5bJ19rZXknXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9yaWdpbmFsRGF0YTogaXRlbSxcbiAgICAgICAgICBfa2V5OiBrZXksXG4gICAgICAgICAgX2tleV9wcm9wOiB0aGlzLmRhdGFLZXkoKSA/PyAnX2luZGV4JyxcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgaGFzRm9vdGVyID0gY29tcHV0ZWQoKCkgPT5cbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zKCkuc29tZSgoY29sKSA9PiBjb2wuZm9vdGVyVGVtcGxhdGUgIT09IHVuZGVmaW5lZClcbiAgKTtcblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGdldCB1bmlxdWUgaWRlbnRpZmllciBmb3IgYSByb3dcbiAgcHJpdmF0ZSBfZ2V0Um93SWRCeURhdGFLZXkocm93OiBUKTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmRhdGFLZXkoKTtcbiAgICBpZiAoa2V5KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHJvd1trZXldO1xuXG4gICAgICAvLyBDb252ZXJ0IHRvIHN0cmluZyBvciBudW1iZXIgaWYgcG9zc2libGUsIG90aGVyd2lzZSBzdHJpbmdpZnlcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gVHlwZSBndWFyZCBtZXRob2QgdG8gY2hlY2sgZm9yIGdyb3VwIHJvd3NcbiAgaXNHcm91cFJvdyhyb3c6IFQpOiByb3cgaXMgVCAmIHsgaXNHcm91cFJvdzogdHJ1ZTsgZ3JvdXBUaXRsZTogYW55IH0ge1xuICAgIHJldHVybiAhIShyb3cgYXMgYW55KS5pc0dyb3VwUm93O1xuICB9XG5cbiAgLy8gQ29tcHV0ZWQgcHJvcGVydHkgZm9yIGdyb3VwZWQgZGF0YVxuXG4gIGdyb3VwZWREYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5ncm91cEJ5KCkpIHJldHVybiB0aGlzLnRhYmxlRGF0YSgpIGFzIEdyb3VwZWREYXRhUm93PFQ+W107XG5cbiAgICBjb25zdCBnZXRHcm91cFZhbHVlID1cbiAgICAgIHR5cGVvZiB0aGlzLmdyb3VwQnkoKSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/ICh0aGlzLmdyb3VwQnkoKSBhcyAocm93OiBUKSA9PiBhbnkpXG4gICAgICAgIDogKHJvdzogVCkgPT4gcm93W3RoaXMuZ3JvdXBCeSgpIGFzIGtleW9mIFRdO1xuXG4gICAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxhbnksIERhdGFXaXRoS2V5PFQ+W10+KCk7XG5cbiAgICB0aGlzLnRhYmxlRGF0YSgpLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgaWYgKGdldEdyb3VwVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBncm91cFZhbHVlID0gZ2V0R3JvdXBWYWx1ZShyb3cub3JpZ2luYWxEYXRhKTtcbiAgICAgICAgY29uc3QgZXhpc3RpbmdHcm91cCA9IGdyb3Vwcy5nZXQoZ3JvdXBWYWx1ZSkgfHwgW107XG4gICAgICAgIGdyb3Vwcy5zZXQoZ3JvdXBWYWx1ZSwgWy4uLmV4aXN0aW5nR3JvdXAsIHJvd10pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3QgZ3JvdXBlZERhdGFBcnJheTogR3JvdXBlZERhdGFSb3c8VD5bXSA9IFtdO1xuXG4gICAgZ3JvdXBzLmZvckVhY2goKGdyb3VwUm93cywgZ3JvdXBWYWx1ZSkgPT4ge1xuICAgICAgLy8gQ3JlYXRlIGdyb3VwIGhlYWRlciByb3dcbiAgICAgIGNvbnN0IGdyb3VwUm93OiBHcm91cGVkRGF0YVJvdzxUPiA9IHtcbiAgICAgICAgLi4uKHt9IGFzIERhdGFXaXRoS2V5PFQ+KSwgLy8gQ3JlYXRlIGVtcHR5IG9iamVjdCBvZiB0eXBlIFQgYXMgYmFzZVxuICAgICAgICBfa2V5OiBgZ3JvdXAtJHtncm91cFZhbHVlfWAsXG4gICAgICAgIGlzR3JvdXBSb3c6IHRydWUsXG4gICAgICAgIGdyb3VwVmFsdWUsXG4gICAgICAgIGdyb3VwVGl0bGU6IGdyb3VwVmFsdWUsXG4gICAgICB9O1xuXG4gICAgICBncm91cGVkRGF0YUFycmF5LnB1c2goZ3JvdXBSb3cpO1xuICAgICAgLy8gQWRkIHJlZ3VsYXIgcm93cyB3aXRoIHRoZSBvcHRpb25hbCBpc0dyb3VwUm93IHByb3BlcnR5ICh1bmRlZmluZWQgYnkgZGVmYXVsdClcbiAgICAgIGdyb3VwZWREYXRhQXJyYXkucHVzaCguLi4oZ3JvdXBSb3dzIGFzIEdyb3VwZWREYXRhUm93PFQ+W10pKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBncm91cGVkRGF0YUFycmF5O1xuICB9KTtcblxuICBnZXRDZWxsVmFsdWUgPSAocm93OiBULCBjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pOiBhbnkgPT4ge1xuICAgIC8vIEZvciBncm91cCByb3dzLCByZXR1cm4gdGhlIGdyb3VwIHRpdGxlIGlmIGl0IGV4aXN0c1xuICAgIGlmICh0aGlzLmlzR3JvdXBSb3cocm93KSkge1xuICAgICAgcmV0dXJuIChyb3cgYXMgYW55KS5ncm91cFRpdGxlO1xuICAgIH1cblxuICAgIC8vIEV4aXN0aW5nIGxvZ2ljIGZvciBub3JtYWwgcm93c1xuICAgIGlmIChjb2x1bW4uYWNjZXNzb3JLZXkpIHtcbiAgICAgIHJldHVybiByb3dbY29sdW1uLmFjY2Vzc29yS2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbi5hY2Nlc3NvckZuID8gY29sdW1uLmFjY2Vzc29yRm4ocm93KSA6IHVuZGVmaW5lZDtcbiAgfTtcblxuICBwdWJsaWMgaXNSb3dFZGl0aW5nID0gKHJvd0tleTogRGF0YVdpdGhLZXk8VD5bJ19rZXknXSk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdSb3dzU2lnbmFsKCkuaGFzKHJvd0tleSk7XG4gIH07XG5cbiAgcHVibGljIHRvZ2dsZVJvd0VkaXQgPSAocm93SWQ6IERhdGFXaXRoS2V5PFQ+Wydfa2V5J10pID0+IHtcbiAgICBsZXQgZGF0YTogRGF0YVdpdGhLZXk8VD4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGluZGV4OiBudW1iZXIgPSAtMTtcblxuICAgIHRoaXMudGFibGVEYXRhKCkuZm9yRWFjaCgoZGF0dW0sIGkpID0+IHtcbiAgICAgIGlmIChkYXR1bS5fa2V5ID09PSByb3dJZCkge1xuICAgICAgICBkYXRhID0gZGF0dW07XG4gICAgICAgIGluZGV4ID0gaTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChkYXRhICE9PSB1bmRlZmluZWQgJiYgaW5kZXggPj0gMCkge1xuICAgICAgdGhpcy50b2dnbGVSb3dFZGl0SW50ZXJuYWwoZGF0YSwgaW5kZXgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIHRvZ2dsZVJvd0VkaXRJbnRlcm5hbCA9IChyb3c6IERhdGFXaXRoS2V5PFQ+LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5lZGl0aW5nUm93c1NpZ25hbC51cGRhdGUoKHNldCkgPT4ge1xuICAgICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldChzZXQpO1xuICAgICAgaWYgKG5ld1NldC5oYXMocm93Ll9rZXkpKSB7XG4gICAgICAgIG5ld1NldC5kZWxldGUocm93Ll9rZXkpO1xuICAgICAgICB0aGlzLnNhdmVSb3cocm93Ll9rZXksIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NldC5hZGQocm93Ll9rZXkpO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVFZGl0ZWREYXRhKHJvdyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3U2V0O1xuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUVkaXRlZERhdGEocm93OiBEYXRhV2l0aEtleTxUPikge1xuICAgIGNvbnN0IHJvd0lkID0gcm93Ll9rZXk7XG4gICAgdGhpcy51bkVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93Lm9yaWdpbmFsRGF0YSB9KTtcbiAgICAgIHJldHVybiBuZXdNYXA7XG4gICAgfSk7XG4gICAgY29uc3QgZm9ybUdyb3VwQ29uZmlnID0gdGhpcy5mb3JtR3JvdXBDb25maWcoKTtcbiAgICBpZiAoZm9ybUdyb3VwQ29uZmlnKSB7XG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKFxuICAgICAgICBmb3JtR3JvdXBDb25maWcuY29udHJvbHMsXG4gICAgICAgIGZvcm1Hcm91cENvbmZpZy52YWxpZGF0b3JPck9wdHMsXG4gICAgICAgIGZvcm1Hcm91cENvbmZpZy5hc3luY1ZhbGlkYXRvclxuICAgICAgKTtcbiAgICAgIGZvcm1Hcm91cC5wYXRjaFZhbHVlKHJvdyBhcyBhbnkpO1xuICAgICAgdGhpcy5mb3JtR3JvdXBzU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAgICAgbmV3TWFwLnNldChyb3dJZCwgZm9ybUdyb3VwKTtcbiAgICAgICAgcmV0dXJuIG5ld01hcDtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVJvdyhyb3dJZDogc3RyaW5nIHwgbnVtYmVyLCByb3dJbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgZWRpdGVkRm9ybSA9IHRoaXMuZm9ybUdyb3Vwc1NpZ25hbCgpLmdldChyb3dJZCk7XG4gICAgY29uc3QgdW5FZGl0ZWREYXRhID0gdGhpcy51bkVkaXRlZERhdGFTaWduYWwoKS5nZXQocm93SWQpO1xuXG4gICAgLy8gaWYgKGVkaXRlZERhdGEpIHtcbiAgICAvLyAgIGNvbnN0IG9yaWdpbmFsUm93ID0gdGhpcy50YWJsZURhdGEoKS5maW5kKChyb3cpID0+IHJvdy5fa2V5ID09PSByb3dJZCk7XG4gICAgLy8gICBpZiAob3JpZ2luYWxSb3cpIHtcbiAgICAvLyAgICAgY29uc3QgdXBkYXRlZFJvdyA9IHsgLi4ub3JpZ2luYWxSb3csIC4uLmVkaXRlZERhdGEgfTtcbiAgICAvLyAgICAgdGhpcy5yb3dTYXZlLmVtaXQodXBkYXRlZFJvdyk7XG4gICAgLy8gICAgIHRoaXMuZWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgIC8vICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgICAgICBuZXdNYXAuZGVsZXRlKHJvd0lkKTtcbiAgICAvLyAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgIC8vICAgICB9KTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBpZiAoZWRpdGVkRm9ybSkge1xuICAgICAgZWRpdGVkRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgZWRpdGVkRm9ybS5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgIHRoaXMuZm9ybUdyb3Vwc1NpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgICAgIG5ld01hcC5kZWxldGUocm93SWQpO1xuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJvd1NhdmUuZW1pdCh7XG4gICAgICAgIGluZGV4OiByb3dJbmRleCxcbiAgICAgICAga2V5OiByb3dJZCxcbiAgICAgICAgZGF0YTogZWRpdGVkRm9ybS52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh1bkVkaXRlZERhdGEpIHtcbiAgICAgIHRoaXMudW5FZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgICAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAgICAgbmV3TWFwLmRlbGV0ZShyb3dJZCk7XG4gICAgICAgIHJldHVybiBuZXdNYXA7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucm93UmV2ZXJ0LmVtaXQoe1xuICAgICAgICBpbmRleDogcm93SW5kZXgsXG4gICAgICAgIGtleTogcm93SWQsXG4gICAgICAgIGRhdGE6IHVuRWRpdGVkRGF0YSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNSb3dTZWxlY3RlZCA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuaGFzKHJvd0lkKTtcbiAgfTtcblxuICBwcml2YXRlIHRvZ2dsZVJvd1NlbGVjdGlvbiA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwudXBkYXRlKChzZXQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQoc2V0KTtcbiAgICAgIGlmIChuZXdTZXQuaGFzKHJvd0lkKSkge1xuICAgICAgICBuZXdTZXQuZGVsZXRlKHJvd0lkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld1NldC5hZGQocm93SWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICByZXR1cm4gbmV3U2V0O1xuICAgIH0pO1xuICB9O1xuXG4gIHByaXZhdGUgYWxsUm93c1NlbGVjdGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IG5vbkdyb3VwUm93cyA9IHRoaXMuZGF0YSgpLmZpbHRlcigocm93KSA9PiAhdGhpcy5pc0dyb3VwUm93KHJvdykpO1xuICAgIHJldHVybiAoXG4gICAgICBub25Hcm91cFJvd3MubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwoKS5zaXplID09PSBub25Hcm91cFJvd3MubGVuZ3RoXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIHNvbWVSb3dzU2VsZWN0ZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgY29uc3Qgbm9uR3JvdXBSb3dzID0gdGhpcy5kYXRhKCkuZmlsdGVyKChyb3cpID0+ICF0aGlzLmlzR3JvdXBSb3cocm93KSk7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuc2l6ZSA+IDAgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuc2l6ZSA8IG5vbkdyb3VwUm93cy5sZW5ndGhcbiAgICApO1xuICB9O1xuXG4gIHByaXZhdGUgdG9nZ2xlQWxsUm93cyA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5hbGxSb3dzU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwuc2V0KG5ldyBTZXQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vbkdyb3VwUm93cyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKFxuICAgICAgICAocm93KSA9PiAhdGhpcy5pc0dyb3VwUm93KHJvdy5vcmlnaW5hbERhdGEpXG4gICAgICApO1xuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwuc2V0KG5ldyBTZXQobm9uR3JvdXBSb3dzLm1hcCgocm93KSA9PiByb3cuX2tleSkpKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBlbWl0U2VsZWN0aW9uQ2hhbmdlKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMudGFibGVEYXRhKCkuZmlsdGVyKChyb3cpID0+XG4gICAgICB0aGlzLnNlbGVjdGVkUm93c1NpZ25hbCgpLmhhcyhyb3cuX2tleSlcbiAgICApO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoXG4gICAgICBzZWxlY3RlZFJvd3MubWFwKCh7IG9yaWdpbmFsRGF0YSB9KSA9PiBvcmlnaW5hbERhdGEpXG4gICAgKTtcbiAgfVxuXG4gIGdldEhlYWRlckNvbnRleHQoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogY29sdW1uLFxuICAgICAgY29sdW1uLFxuICAgICAgYWxsUm93c1NlbGVjdGVkOiB0aGlzLmFsbFJvd3NTZWxlY3RlZCxcbiAgICAgIHNvbWVSb3dzU2VsZWN0ZWQ6IHRoaXMuc29tZVJvd3NTZWxlY3RlZCxcbiAgICAgIHRvZ2dsZUFsbFJvd3M6IHRoaXMudG9nZ2xlQWxsUm93cyxcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlRWRpdGVkVmFsdWUoXG4gICAgcm93SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4sXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICAvLyB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgIGNvbnN0IHJvd0RhdGEgPSBuZXdNYXAuZ2V0KHJvd0lkKSB8fCAoe30gYXMgRWRpdGVkRGF0YTxUPik7XG4gICAgLy8gICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgLy8gICAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93RGF0YSwgW2NvbHVtbi5hY2Nlc3NvcktleV06IHZhbHVlIH0pO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgY29uc29sZS53YXJuKFxuICAgIC8vICAgICAgICdDYW5ub3QgdXBkYXRlIHZhbHVlIGZvciBjb2x1bW4gd2l0aG91dCBhY2Nlc3NvcktleTonLFxuICAgIC8vICAgICAgIGNvbHVtbi5pZFxuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHVwZGF0ZUVkaXRlZFZhbHVlRm4oXG4gICAgcm93SWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICB2YWx1ZUZuOiAodmFsdWU6IGFueSkgPT4gVCxcbiAgICB2YWx1ZTogYW55XG4gICkge1xuICAgIC8vIHRoaXMuZWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgIC8vICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgIC8vICAgY29uc3Qgcm93RGF0YSA9IG5ld01hcC5nZXQocm93SWQpIHx8ICh7fSBhcyBFZGl0ZWREYXRhPFQ+KTtcbiAgICAvLyAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93RGF0YSwgLi4udmFsdWVGbih2YWx1ZSkgfSk7XG4gICAgLy8gICByZXR1cm4gbmV3TWFwO1xuICAgIC8vIH0pO1xuICB9XG5cbiAgdXBkYXRlRWRpdGVkRGF0YShyb3dJZDogc3RyaW5nIHwgbnVtYmVyLCBkYXRhOiBQYXJ0aWFsPFQ+KSB7XG4gICAgLy8gdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgLy8gICBjb25zdCByb3dEYXRhID0gbmV3TWFwLmdldChyb3dJZCkgfHwgKHt9IGFzIEVkaXRlZERhdGE8VD4pO1xuICAgIC8vICAgbmV3TWFwLnNldChyb3dJZCwgeyAuLi5yb3dEYXRhLCAuLi5kYXRhIH0pO1xuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHVwZGF0ZU5lc3RlZEVkaXRlZFZhbHVlKFxuICAgIHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIG5lc3RlZEZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICAvLyB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgIGNvbnN0IHJvd0RhdGEgPSBuZXdNYXAuZ2V0KHJvd0lkKSB8fCAoe30gYXMgRWRpdGVkRGF0YTxUPik7XG4gICAgLy8gICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgLy8gICAgIGNvbnN0IGNvbHVtbkRhdGEgPSAocm93RGF0YVtjb2x1bW4uYWNjZXNzb3JLZXldIGFzIGFueSkgfHwge307XG4gICAgLy8gICAgIG5ld01hcC5zZXQocm93SWQsIHtcbiAgICAvLyAgICAgICAuLi5yb3dEYXRhLFxuICAgIC8vICAgICAgIFtjb2x1bW4uYWNjZXNzb3JLZXldOiB7XG4gICAgLy8gICAgICAgICAuLi5jb2x1bW5EYXRhLFxuICAgIC8vICAgICAgICAgW25lc3RlZEZpZWxkXTogdmFsdWUsXG4gICAgLy8gICAgICAgfSxcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICB9IGVsc2Uge1xuICAgIC8vICAgICBjb25zb2xlLndhcm4oXG4gICAgLy8gICAgICAgJ0Nhbm5vdCB1cGRhdGUgbmVzdGVkIHZhbHVlIGZvciBjb2x1bW4gd2l0aG91dCBhY2Nlc3NvcktleTonLFxuICAgIC8vICAgICAgIGNvbHVtbi5pZFxuICAgIC8vICAgICApO1xuICAgIC8vICAgfVxuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIGdldENlbGxDb250ZXh0KFxuICAgIHJvdzogRGF0YVdpdGhLZXk8VD4sXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIHJvd0luZGV4OiBudW1iZXJcbiAgKSB7XG4gICAgY29uc3Qgcm93SWQgPSByb3cuX2tleTtcbiAgICBjb25zdCBpc0VkaXRpbmcgPSB0aGlzLmlzUm93RWRpdGluZyhyb3cuX2tleSk7XG4gICAgLy8gY29uc3QgZWRpdGVkRGF0YSA9IHRoaXMuZWRpdGVkRGF0YVNpZ25hbCgpLmdldChyb3dJZCk7XG4gICAgY29uc3QgZWRpdGVkRm9ybSA9IHRoaXMuZm9ybUdyb3Vwc1NpZ25hbCgpLmdldChyb3dJZCk7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSBlZGl0ZWRGb3JtPy5nZXQoY29sdW1uLmZvcm1Db250cm9sTmFtZSB8fCAnJyk7XG5cbiAgICBsZXQgdmFsdWU6IGFueTtcbiAgICBpZiAoaXNFZGl0aW5nKSB7XG4gICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcbiAgICAgICAgdmFsdWUgPSBmb3JtQ29udHJvbC52YWx1ZTtcbiAgICAgIH1cbiAgICAgIC8vIGVsc2UgaWYgKGVkaXRlZERhdGEpIHtcbiAgICAgIC8vICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSAmJiBjb2x1bW4uYWNjZXNzb3JLZXkgaW4gZWRpdGVkRGF0YSkge1xuICAgICAgLy8gICAgIC8vIElmIGNvbHVtbiBoYXMgYW4gYWNjZXNzb3JLZXkgYW5kIGl0IGV4aXN0cyBpbiBlZGl0ZWQgZGF0YSwgdXNlIHRoYXRcbiAgICAgIC8vICAgICB2YWx1ZSA9IGVkaXRlZERhdGFbY29sdW1uLmFjY2Vzc29yS2V5XTtcbiAgICAgIC8vICAgfSBlbHNlIGlmIChjb2x1bW4uYWNjZXNzb3JGbikge1xuICAgICAgLy8gICAgIC8vIElmIGNvbHVtbiBoYXMgYW4gYWNjZXNzb3JGbiwgYXBwbHkgaXQgdG8gdGhlIGVkaXRlZCBkYXRhXG4gICAgICAvLyAgICAgdmFsdWUgPSBjb2x1bW4uYWNjZXNzb3JGbih7IC4uLnJvdywgLi4uZWRpdGVkRGF0YSB9KTtcbiAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAvLyBGYWxsYmFjayB0byBnZXR0aW5nIHRoZSB2YWx1ZSBmcm9tIHRoZSBvcmlnaW5hbCByb3dcbiAgICAgIC8vICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdywgY29sdW1uKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgdmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBjb2x1bW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdy5vcmlnaW5hbERhdGEsIGNvbHVtbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogdmFsdWUsXG4gICAgICB2YWx1ZSxcbiAgICAgIHJvdzogcm93Lm9yaWdpbmFsRGF0YSxcbiAgICAgIGNvbHVtbixcbiAgICAgIHJvd0luZGV4LFxuICAgICAgcm93SWQsXG4gICAgICBpc0VkaXRpbmcsXG4gICAgICBmb3JtQ29udHJvbCxcbiAgICAgIGlzU2VsZWN0ZWQ6IHRoaXMuaXNSb3dTZWxlY3RlZChyb3dJZCksXG4gICAgICB0b2dnbGVSb3dTZWxlY3Rpb246ICgpID0+IHRoaXMudG9nZ2xlUm93U2VsZWN0aW9uKHJvd0lkKSxcbiAgICAgIHRvZ2dsZVJvd0VkaXQ6ICgpID0+IHRoaXMudG9nZ2xlUm93RWRpdEludGVybmFsKHJvdywgcm93SW5kZXgpLFxuICAgICAgZGVsZXRlUm93OiAoKSA9PiB0aGlzLmRlbGV0ZVJvdyhyb3dJZCksXG4gICAgICB1cGRhdGVWYWx1ZTogKG5ld1ZhbHVlOiBhbnkpID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkVmFsdWUocm93SWQsIGNvbHVtbiwgbmV3VmFsdWUpLFxuICAgICAgdXBkYXRlTmVzdGVkVmFsdWU6IChuZXN0ZWRGaWVsZDogc3RyaW5nLCBuZXdWYWx1ZTogYW55KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZU5lc3RlZEVkaXRlZFZhbHVlKHJvd0lkLCBjb2x1bW4sIG5lc3RlZEZpZWxkLCBuZXdWYWx1ZSksXG4gICAgICB1cGRhdGVWYWx1ZUZuOiAodmFsdWVGbjogKHZhbHVlOiBhbnkpID0+IFQsIG5ld1ZhbHVlOiBhbnkpID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkVmFsdWVGbihyb3dJZCwgdmFsdWVGbiwgbmV3VmFsdWUpLFxuICAgICAgdXBkYXRlRGF0YTogKG5ld0RhdGE6IFBhcnRpYWw8VD4pID0+XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkRGF0YShyb3dJZCwgbmV3RGF0YSksXG4gICAgfTtcbiAgfVxuXG4gIGRlbGV0ZVJvdyA9IChyb3dJZDogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgcm93VG9EZWxldGUgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbmQoKHJvdykgPT4gcm93Ll9rZXkgPT09IHJvd0lkKTtcbiAgICBpZiAocm93VG9EZWxldGUpIHtcbiAgICAgIHRoaXMucm93RGVsZXRlLmVtaXQocm93VG9EZWxldGUub3JpZ2luYWxEYXRhKTtcbiAgICB9XG4gIH07XG5cbiAgZ2V0Rm9vdGVyQ29udGV4dChjb2x1bW46IENvbHVtbkRlZmluaXRpb248VD4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiBjb2x1bW4sXG4gICAgICBjb2x1bW4sXG4gICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgfTtcbiAgfVxuXG4gIGdldFRhYmxlU3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZyxcbiAgICAgIGZvbnRGYW1pbHk6IHRoaXMuc3R5bGVDb25maWcuZm9udEZhbWlseSxcbiAgICAgIGZvbnRTaXplOiB0aGlzLnN0eWxlQ29uZmlnLmZvbnRTaXplLFxuICAgICAgd2hpdGVTcGFjZTogdGhpcy5zdHlsZUNvbmZpZy53aGl0ZVNwYWNlLFxuICAgICAgbWFyZ2luOiB0aGlzLnN0eWxlQ29uZmlnLm1hcmdpbixcbiAgICAgIGJvcmRlcjogdGhpcy5zdHlsZUNvbmZpZy5ib3JkZXIsXG4gICAgICBib3JkZXJDb2xsYXBzZTogdGhpcy5zdHlsZUNvbmZpZy5ib3JkZXJDb2xsYXBzZSxcbiAgICAgIGJvcmRlclNwYWNpbmc6IHRoaXMuc3R5bGVDb25maWcuYm9yZGVyU3BhY2luZyxcbiAgICAgIHRhYmxlTGF5b3V0OiB0aGlzLnN0eWxlQ29uZmlnLnRhYmxlTGF5b3V0LFxuICAgICAgd2lkdGg6IHRoaXMuc3R5bGVDb25maWcud2lkdGgsXG4gICAgfTtcbiAgfVxuXG4gIGdldEhlYWRlclN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc3R5bGVDb25maWcuaGVhZGVyLFxuICAgICAgcG9zaXRpb246IHRoaXMuc3R5bGVDb25maWcuaGVhZGVyPy5zdGlja3lUb3AgPyAnc3RpY2t5JyA6ICdzdGF0aWMnLFxuICAgICAgdG9wOiB0aGlzLnN0eWxlQ29uZmlnLmhlYWRlcj8uc3RpY2t5VG9wID8gJzAnIDogJ2F1dG8nLFxuICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmhlYWRlcj8uekluZGV4IHx8ICdhdXRvJyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0Rm9vdGVyU3R5bGUoKTogYW55IHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZy5mb290ZXIsXG4gICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5mb290ZXI/LnN0aWNreUJvdHRvbSA/ICdzdGlja3knIDogJ3N0YXRpYycsXG4gICAgICBib3R0b206IHRoaXMuc3R5bGVDb25maWcuZm9vdGVyPy5zdGlja3lCb3R0b20gPyAnMCcgOiAnYXV0bycsXG4gICAgICB6SW5kZXg6IHRoaXMuc3R5bGVDb25maWcuZm9vdGVyPy56SW5kZXggfHwgJ2F1dG8nLFxuICAgIH07XG4gIH1cblxuICBnZXRSb3dTdHlsZShyb3dJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCByb3dTdHlsZXMgPSB0aGlzLnN0eWxlQ29uZmlnLnJvd3M7XG4gICAgaWYgKHJvd1N0eWxlcyAmJiAnZXZlbicgaW4gcm93U3R5bGVzICYmICdvZGQnIGluIHJvd1N0eWxlcykge1xuICAgICAgcmV0dXJuIHJvd0luZGV4ICUgMiA9PT0gMCA/IHJvd1N0eWxlcy5ldmVuIDogcm93U3R5bGVzLm9kZDtcbiAgICB9IGVsc2UgaWYgKHJvd1N0eWxlcyAmJiAnbnRoJyBpbiByb3dTdHlsZXMgJiYgcm93U3R5bGVzLm50aCkge1xuICAgICAgY29uc3QgeyBpbnRlcnZhbCwgc3R5bGUgfSA9IHJvd1N0eWxlcy5udGg7XG4gICAgICByZXR1cm4gKHJvd0luZGV4ICsgMSkgJSAoaW50ZXJ2YWwgfHwgMSkgPT09IDAgPyBzdHlsZSA6IHt9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcm93U3R5bGVzIHx8IHt9O1xuICAgIH1cbiAgfVxuXG4gIGdldENlbGxTdHlsZShyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogYW55IHtcbiAgICBjb25zdCBpc0ZpcnN0Q29sdW1uID0gY29sSW5kZXggPT09IDA7XG4gICAgY29uc3QgaXNMYXN0Q29sdW1uID0gY29sSW5kZXggPT09IHRoaXMuZGlzcGxheUNvbHVtbnMoKS5sZW5ndGggLSAxO1xuXG4gICAgbGV0IGNlbGxTdHlsZSA9IHsgLi4udGhpcy5zdHlsZUNvbmZpZy5jZWxscyB9O1xuXG4gICAgaWYgKGlzRmlyc3RDb2x1bW4pIHtcbiAgICAgIGNlbGxTdHlsZSA9IHtcbiAgICAgICAgLi4uY2VsbFN0eWxlLFxuICAgICAgICAuLi50aGlzLnN0eWxlQ29uZmlnLmZpcnN0Q29sdW1uLFxuICAgICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5maXJzdENvbHVtbj8uc3RpY2t5TGVmdFxuICAgICAgICAgID8gJ3N0aWNreSdcbiAgICAgICAgICA6ICdzdGF0aWMnLFxuICAgICAgICBsZWZ0OiB0aGlzLnN0eWxlQ29uZmlnLmZpcnN0Q29sdW1uPy5zdGlja3lMZWZ0ID8gJzAnIDogJ2F1dG8nLFxuICAgICAgICB6SW5kZXg6IHRoaXMuc3R5bGVDb25maWcuZmlyc3RDb2x1bW4/LnpJbmRleCB8fCAnYXV0bycsXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoaXNMYXN0Q29sdW1uKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7XG4gICAgICAgIC4uLmNlbGxTdHlsZSxcbiAgICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uLFxuICAgICAgICBwb3NpdGlvbjogdGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uPy5zdGlja3lSaWdodFxuICAgICAgICAgID8gJ3N0aWNreSdcbiAgICAgICAgICA6ICdzdGF0aWMnLFxuICAgICAgICByaWdodDogdGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uPy5zdGlja3lSaWdodCA/ICcwJyA6ICdhdXRvJyxcbiAgICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmxhc3RDb2x1bW4/LnpJbmRleCB8fCAnYXV0bycsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChyb3dJbmRleCA+PSAwKSB7XG4gICAgICAvLyBBcHBseSBib2R5IHN0eWxlcyB0byBhbGwgY2VsbHNcbiAgICAgIGNlbGxTdHlsZSA9IHsgLi4uY2VsbFN0eWxlLCAuLi50aGlzLnN0eWxlQ29uZmlnLmJvZHkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2VsbFN0eWxlID0geyAuLi50aGlzLnN0eWxlQ29uZmlnLmhlYWRlciB9O1xuICAgIH1cblxuICAgIHJldHVybiBjZWxsU3R5bGU7XG4gIH1cbn1cblxuLy8gRGVmYXVsdCBzdHlsZXNcbmNvbnN0IGRlZmF1bHRUYWJsZVN0eWxlczogVGFibGVTdHlsZXMgPSB7XG4gIGJvcmRlcjogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICBib3hTaGFkb3c6ICcwIDJweCA0cHggcmdiYSgwLDAsMCwwLjEpJyxcbiAgd2lkdGg6ICcxMDAlJyxcbiAgaGVhZGVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y1ZjVmNScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGNvbG9yOiAnIzMzMycsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgYm9yZGVyQm90dG9tOiAnMnB4IHNvbGlkICNlMGUwZTAnLFxuICB9LFxuICByb3dzOiB7XG4gICAgZXZlbjoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAnI2ZmZmZmZicsXG4gICAgfSxcbiAgICBvZGQ6IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWY5ZjknLFxuICAgIH0sXG4gICAgbnRoOiB7XG4gICAgICBpbnRlcnZhbDogNSxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmMGYwZjAnLFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxuICBjZWxsczoge1xuICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgIGJvcmRlckJvdHRvbTogJzFweCBzb2xpZCAjZTBlMGUwJyxcbiAgfSxcbiAgZm9vdGVyOiB7XG4gICAgYmFja2dyb3VuZENvbG9yOiAnI2Y1ZjVmNScsXG4gICAgZm9udFdlaWdodDogJ2JvbGQnLFxuICAgIGNvbG9yOiAnIzMzMycsXG4gICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgcGFkZGluZzogJzEycHggMTZweCcsXG4gICAgYm9yZGVyVG9wOiAnMnB4IHNvbGlkICNlMGUwZTAnLFxuICB9LFxufTtcbiIsIjx0YWJsZSBbbmdTdHlsZV09XCJnZXRUYWJsZVN0eWxlKClcIj5cbiAgPHRoZWFkPlxuICAgIDwhLS0gPHRyIFtuZ1N0eWxlXT1cImdldEhlYWRlclN0eWxlKClcIj5cbiAgICAgIDx0aCBjb2xzcGFuPVwiMlwiIHNjb3BlPVwiY29sZ3JvdXBcIj5Hcm91cCAxPC90aD5cbiAgICAgIDx0aCBjb2xzcGFuPVwiMVwiIHNjb3BlPVwiY29sZ3JvdXBcIj5Hcm91cCAyPC90aD5cbiAgICA8L3RyPiAtLT5cblxuICAgIDx0ciBbbmdTdHlsZV09XCJnZXRIZWFkZXJTdHlsZSgpXCI+XG4gICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkKSB7XG4gICAgICA8dGggW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKC0xLCAkaW5kZXgpXCI+XG4gICAgICAgIEBpZiAoY29sdW1uLmhlYWRlclRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uaGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRIZWFkZXJDb250ZXh0KGNvbHVtbilcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICB7eyBjb2x1bW4uaGVhZGVyIH19XG4gICAgICAgIH1cbiAgICAgIDwvdGg+XG4gICAgICB9XG4gICAgPC90cj5cbiAgPC90aGVhZD5cbiAgPHRib2R5PlxuICAgIEBmb3IgKHJvdyBvZiB0YWJsZURhdGEoKTsgdHJhY2sgcm93Ll9rZXk7IGxldCByb3dJbmRleCA9ICRpbmRleCkgeyBAaWZcbiAgICAoaXNHcm91cFJvdyhyb3cub3JpZ2luYWxEYXRhKSkge1xuICAgIDx0ciBjbGFzcz1cImdyb3VwLXJvd1wiIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlKHJvd0luZGV4KVwiPlxuICAgICAgPHRkXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiZGlzcGxheUNvbHVtbnMoKS5sZW5ndGhcIlxuICAgICAgICBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUocm93SW5kZXgsIDApXCJcbiAgICAgID5cbiAgICAgICAge3sgZ2V0Q2VsbFZhbHVlKHJvdy5vcmlnaW5hbERhdGEsIGRpc3BsYXlDb2x1bW5zKClbMF0pIH19XG4gICAgICA8L3RkPlxuICAgIDwvdHI+XG4gICAgfSBAZWxzZSB7XG4gICAgPHRyIFtuZ1N0eWxlXT1cImdldFJvd1N0eWxlKHJvd0luZGV4KVwiPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZDsgbGV0IGNvbEluZGV4ID0gJGluZGV4KVxuICAgICAge1xuICAgICAgPHRkIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZShyb3dJbmRleCwgY29sSW5kZXgpXCI+XG4gICAgICAgIEBpZiAoaXNSb3dFZGl0aW5nKHJvdy5fa2V5KSAmJiBjb2x1bW4uY2VsbEVkaXRUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxFZGl0VGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRDZWxsQ29udGV4dChyb3csIGNvbHVtbiwgcm93SW5kZXgpXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9IEBlbHNlIGlmIChjb2x1bW4uY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Q2VsbENvbnRleHQocm93LCBjb2x1bW4sIHJvd0luZGV4KVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBjb2x1bW4pIH19XG4gICAgICAgIH1cbiAgICAgIDwvdGQ+XG4gICAgICB9XG4gICAgPC90cj5cbiAgICB9IH1cbiAgPC90Ym9keT5cbiAgQGlmIChoYXNGb290ZXIoKSkge1xuICA8dGZvb3Q+XG4gICAgPHRyIFtuZ1N0eWxlXT1cImdldEZvb3RlclN0eWxlKClcIj5cbiAgICAgIEBmb3IgKGNvbHVtbiBvZiBkaXNwbGF5Q29sdW1ucygpOyB0cmFjayBjb2x1bW4uaWQpIHtcbiAgICAgIDx0ZCBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUoLTEsICRpbmRleClcIj5cbiAgICAgICAgQGlmIChjb2x1bW4uZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5mb290ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldEZvb3RlckNvbnRleHQoY29sdW1uKVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgPC90ZD5cbiAgICAgIH1cbiAgICA8L3RyPlxuICA8L3Rmb290PlxuICB9XG48L3RhYmxlPlxuIl19
518
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsZUFBZSxFQUVmLFlBQVksRUFDWixLQUFLLEVBQ0wsS0FBSyxFQUVMLE1BQU0sRUFHTixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXJELE9BQU8sRUFBbUIsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQVE1RCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLHdDQUF3QztJQUN4QyxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBTyxDQUFDO0lBQzdCLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUF5QixDQUFDO0lBQ2xELE9BQU8sR0FBRyxLQUFLLEVBQVcsQ0FBQyxDQUFDLDJDQUEyQztJQUN2RSxlQUFlLEdBQUcsS0FBSyxFQUlwQixDQUFDO0lBRUosT0FBTyxHQUFHLEtBQUssRUFBK0IsQ0FBQztJQUV0QyxXQUFXLEdBQWdCLGtCQUFrQixDQUFDO0lBRXZELGVBQWUsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFekMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUFLLENBQUM7SUFDaEMsT0FBTyxHQUFHLElBQUksWUFBWSxFQUloQyxDQUFDO0lBQ0ssU0FBUyxHQUFHLElBQUksWUFBWSxFQUls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VSxFQUFFLE1BQU07UUFDbEIsS0FBSyxFQUFFLE1BQU07UUFDYixTQUFTLEVBQUUsTUFBTTtRQUNqQixPQUFPLEVBQUUsV0FBVztRQUNwQixZQUFZLEVBQUUsbUJBQW1CO0tBQ2xDO0lBQ0QsSUFBSSxFQUFFO1FBQ0osSUFBSSxFQUFFO1lBQ0osZUFBZSxFQUFFLFNBQVM7U0FDM0I7UUFDRCxHQUFHLEVBQUU7WUFDSCxlQUFlLEVBQUUsU0FBUztTQUMzQjtRQUNELEdBQUcsRUFBRTtZQUNILFFBQVEsRUFBRSxDQUFDO1lBQ1gsS0FBSyxFQUFFO2dCQUNMLGVBQWUsRUFBRSxTQUFTO2FBQzNCO1NBQ0Y7S0FDRjtJQUNELEtBQUssRUFBRTtRQUNMLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFlBQVksRUFBRSxtQkFBbUI7S0FDbEM7SUFDRCxNQUFNLEVBQUU7UUFDTixlQUFlLEVBQUUsU0FBUztRQUMxQixVQUFVLEVBQUUsTUFBTTtRQUNsQixLQUFLLEVBQUUsTUFBTTtRQUNiLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLE9BQU8sRUFBRSxXQUFXO1FBQ3BCLFNBQVMsRUFBRSxtQkFBbUI7S0FDL0I7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGNvbnRlbnRDaGlsZHJlbixcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIGlucHV0LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2lnbmFsLFxuICBzaWduYWwsXG4gIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbHVtbkRlZmluaXRpb24sXG4gIERhdGFXaXRoS2V5LFxuICBFZGl0ZWREYXRhLFxuICBGb3JtR3JvdXBDb25maWcsXG4gIEdyb3VwZWREYXRhUm93LFxufSBmcm9tICcuL2RhdGEtdGFibGUudHlwZXMnO1xuaW1wb3J0IHsgQ29sdW1uRGlyZWN0aXZlIH0gZnJvbSAnLi9jb2x1bW4uZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhc2VTdHlsZXMsIFRhYmxlU3R5bGVzIH0gZnJvbSAnLi9zdHlsZS50eXBlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhdGEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYXRhLXRhYmxlLmNvbXBvbmVudC5jc3MnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVRhYmxlQ29tcG9uZW50PFQ+IHtcbiAgLy8gTW9kaWZ5IGRhdGEgaW5wdXQgdG8gdXNlIGdyb3VwZWQgZGF0YVxuICBkYXRhID0gaW5wdXQucmVxdWlyZWQ8VFtdPigpO1xuICBjb2x1bW5zID0gaW5wdXQucmVxdWlyZWQ8Q29sdW1uRGVmaW5pdGlvbjxUPltdPigpO1xuICBkYXRhS2V5ID0gaW5wdXQ8a2V5b2YgVD4oKTsgLy8gTmV3IHJlcXVpcmVkIGlucHV0IGZvciB1bmlxdWUgaWRlbnRpZmllclxuICBmb3JtR3JvdXBDb25maWcgPSBpbnB1dDxcbiAgICBGb3JtR3JvdXBDb25maWc8e1xuICAgICAgW0sgaW4ga2V5b2YgVF06IEFic3RyYWN0Q29udHJvbDtcbiAgICB9PlxuICA+KCk7XG5cbiAgZ3JvdXBCeSA9IGlucHV0PGtleW9mIFQgfCAoKHJvdzogVCkgPT4gYW55KT4oKTtcblxuICBASW5wdXQoKSBzdHlsZUNvbmZpZzogVGFibGVTdHlsZXMgPSBkZWZhdWx0VGFibGVTdHlsZXM7XG5cbiAgY29sdW1uVGVtcGxhdGVzID0gY29udGVudENoaWxkcmVuKENvbHVtbkRpcmVjdGl2ZSk7XG5cbiAgQE91dHB1dCgpIHJvd0VkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG4gIEBPdXRwdXQoKSByb3dTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBrZXk6IG51bWJlciB8IHN0cmluZztcbiAgICBkYXRhOiBQYXJ0aWFsPFQ+O1xuICB9PigpO1xuICBAT3V0cHV0KCkgcm93UmV2ZXJ0ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgaW5kZXg6IG51bWJlcjtcbiAgICBrZXk6IG51bWJlciB8IHN0cmluZztcbiAgICBkYXRhOiBUO1xuICB9PigpO1xuICBAT3V0cHV0KCkgcm93RGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxUPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KCk7XG5cbiAgLyoqIEludGVybmFsbHkgbWFpbnRhaW5lZCBkYXRhLCB3aXRoIGd1YXJhbnRlZWQgdW5pcXVlbmVzcyBkdWUgdG8ga2V5IHByb3BlcnR5ICovXG4gIHRhYmxlRGF0YTogU2lnbmFsPERhdGFXaXRoS2V5PFQ+W10+O1xuXG4gIHByaXZhdGUgZWRpdGluZ1Jvd3NTaWduYWwgPSBzaWduYWw8U2V0PHN0cmluZyB8IG51bWJlcj4+KG5ldyBTZXQoKSk7XG4gIHByaXZhdGUgc2VsZWN0ZWRSb3dzU2lnbmFsID0gc2lnbmFsPFNldDxzdHJpbmcgfCBudW1iZXI+PihuZXcgU2V0KCkpO1xuICAvLyBwcml2YXRlIGVkaXRlZERhdGFTaWduYWwgPSBzaWduYWw8TWFwPHN0cmluZyB8IG51bWJlciwgRWRpdGVkRGF0YTxUPj4+KFxuICAvLyAgIG5ldyBNYXAoKVxuICAvLyApO1xuICBwcml2YXRlIHVuRWRpdGVkRGF0YVNpZ25hbCA9IHNpZ25hbDxNYXA8c3RyaW5nIHwgbnVtYmVyLCBUPj4obmV3IE1hcCgpKTtcbiAgcHJpdmF0ZSBmb3JtR3JvdXBzU2lnbmFsID0gc2lnbmFsPE1hcDxzdHJpbmcgfCBudW1iZXIsIEZvcm1Hcm91cD4+KG5ldyBNYXAoKSk7XG5cbiAgY29sdW1uc1NpZ25hbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29sdW1ucygpKTtcblxuICBkaXNwbGF5Q29sdW1uczogU2lnbmFsPENvbHVtbkRlZmluaXRpb248VD5bXT47XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNTaWduYWwoKS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGluZ1RlbXBsYXRlID0gdGhpcy5jb2x1bW5UZW1wbGF0ZXMoKS5maW5kKFxuICAgICAgICAgICh0KSA9PiB0LmNvbHVtbklkID09PSBjb2x1bW4uaWRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG1hdGNoaW5nVGVtcGxhdGUpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uY29sdW1uLFxuICAgICAgICAgICAgY2VsbFRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmNlbGxUZW1wbGF0ZSxcbiAgICAgICAgICAgIGNlbGxFZGl0VGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbEVkaXRUZW1wbGF0ZSxcbiAgICAgICAgICAgIGhlYWRlclRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmhlYWRlclRlbXBsYXRlLFxuICAgICAgICAgICAgZm9vdGVyVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuZm9vdGVyVGVtcGxhdGUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnRhYmxlRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEoKS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCBrZXk7XG4gICAgICAgIGNvbnN0IGRhdGFLZXkgPSB0aGlzLl9nZXRSb3dJZEJ5RGF0YUtleShpdGVtKTtcbiAgICAgICAgaWYgKGRhdGFLZXkpIHtcbiAgICAgICAgICBrZXkgPSBkYXRhS2V5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGtleSA9IGluZGV4IGFzIERhdGFXaXRoS2V5PFQ+Wydfa2V5J107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvcmlnaW5hbERhdGE6IGl0ZW0sXG4gICAgICAgICAgX2tleToga2V5LFxuICAgICAgICAgIF9rZXlfcHJvcDogdGhpcy5kYXRhS2V5KCkgPz8gJ19pbmRleCcsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhc0Zvb3RlciA9IGNvbXB1dGVkKCgpID0+XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucygpLnNvbWUoKGNvbCkgPT4gY29sLmZvb3RlclRlbXBsYXRlICE9PSB1bmRlZmluZWQpXG4gICk7XG5cbiAgLy8gSGVscGVyIG1ldGhvZCB0byBnZXQgdW5pcXVlIGlkZW50aWZpZXIgZm9yIGEgcm93XG4gIHByaXZhdGUgX2dldFJvd0lkQnlEYXRhS2V5KHJvdzogVCk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5kYXRhS2V5KCk7XG4gICAgaWYgKGtleSkge1xuICAgICAgY29uc3QgdmFsdWUgPSByb3dba2V5XTtcblxuICAgICAgLy8gQ29udmVydCB0byBzdHJpbmcgb3IgbnVtYmVyIGlmIHBvc3NpYmxlLCBvdGhlcndpc2Ugc3RyaW5naWZ5XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIFR5cGUgZ3VhcmQgbWV0aG9kIHRvIGNoZWNrIGZvciBncm91cCByb3dzXG4gIGlzR3JvdXBSb3cocm93OiBUKTogcm93IGlzIFQgJiB7IGlzR3JvdXBSb3c6IHRydWU7IGdyb3VwVGl0bGU6IGFueSB9IHtcbiAgICByZXR1cm4gISEocm93IGFzIGFueSkuaXNHcm91cFJvdztcbiAgfVxuXG4gIC8vIENvbXB1dGVkIHByb3BlcnR5IGZvciBncm91cGVkIGRhdGFcblxuICBncm91cGVkRGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoIXRoaXMuZ3JvdXBCeSgpKSByZXR1cm4gdGhpcy50YWJsZURhdGEoKSBhcyBHcm91cGVkRGF0YVJvdzxUPltdO1xuXG4gICAgY29uc3QgZ2V0R3JvdXBWYWx1ZSA9XG4gICAgICB0eXBlb2YgdGhpcy5ncm91cEJ5KCkgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyAodGhpcy5ncm91cEJ5KCkgYXMgKHJvdzogVCkgPT4gYW55KVxuICAgICAgICA6IChyb3c6IFQpID0+IHJvd1t0aGlzLmdyb3VwQnkoKSBhcyBrZXlvZiBUXTtcblxuICAgIGNvbnN0IGdyb3VwcyA9IG5ldyBNYXA8YW55LCBEYXRhV2l0aEtleTxUPltdPigpO1xuXG4gICAgdGhpcy50YWJsZURhdGEoKS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGlmIChnZXRHcm91cFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBWYWx1ZSA9IGdldEdyb3VwVmFsdWUocm93Lm9yaWdpbmFsRGF0YSk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nR3JvdXAgPSBncm91cHMuZ2V0KGdyb3VwVmFsdWUpIHx8IFtdO1xuICAgICAgICBncm91cHMuc2V0KGdyb3VwVmFsdWUsIFsuLi5leGlzdGluZ0dyb3VwLCByb3ddKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGdyb3VwZWREYXRhQXJyYXk6IEdyb3VwZWREYXRhUm93PFQ+W10gPSBbXTtcblxuICAgIGdyb3Vwcy5mb3JFYWNoKChncm91cFJvd3MsIGdyb3VwVmFsdWUpID0+IHtcbiAgICAgIC8vIENyZWF0ZSBncm91cCBoZWFkZXIgcm93XG4gICAgICBjb25zdCBncm91cFJvdzogR3JvdXBlZERhdGFSb3c8VD4gPSB7XG4gICAgICAgIC4uLih7fSBhcyBEYXRhV2l0aEtleTxUPiksIC8vIENyZWF0ZSBlbXB0eSBvYmplY3Qgb2YgdHlwZSBUIGFzIGJhc2VcbiAgICAgICAgX2tleTogYGdyb3VwLSR7Z3JvdXBWYWx1ZX1gLFxuICAgICAgICBpc0dyb3VwUm93OiB0cnVlLFxuICAgICAgICBncm91cFZhbHVlLFxuICAgICAgICBncm91cFRpdGxlOiBncm91cFZhbHVlLFxuICAgICAgfTtcblxuICAgICAgZ3JvdXBlZERhdGFBcnJheS5wdXNoKGdyb3VwUm93KTtcbiAgICAgIC8vIEFkZCByZWd1bGFyIHJvd3Mgd2l0aCB0aGUgb3B0aW9uYWwgaXNHcm91cFJvdyBwcm9wZXJ0eSAodW5kZWZpbmVkIGJ5IGRlZmF1bHQpXG4gICAgICBncm91cGVkRGF0YUFycmF5LnB1c2goLi4uKGdyb3VwUm93cyBhcyBHcm91cGVkRGF0YVJvdzxUPltdKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZ3JvdXBlZERhdGFBcnJheTtcbiAgfSk7XG5cbiAgZ2V0Q2VsbFZhbHVlID0gKHJvdzogVCwgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KTogYW55ID0+IHtcbiAgICAvLyBGb3IgZ3JvdXAgcm93cywgcmV0dXJuIHRoZSBncm91cCB0aXRsZSBpZiBpdCBleGlzdHNcbiAgICBpZiAodGhpcy5pc0dyb3VwUm93KHJvdykpIHtcbiAgICAgIHJldHVybiAocm93IGFzIGFueSkuZ3JvdXBUaXRsZTtcbiAgICB9XG5cbiAgICAvLyBFeGlzdGluZyBsb2dpYyBmb3Igbm9ybWFsIHJvd3NcbiAgICBpZiAoY29sdW1uLmFjY2Vzc29yS2V5KSB7XG4gICAgICByZXR1cm4gcm93W2NvbHVtbi5hY2Nlc3NvcktleV07XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW4uYWNjZXNzb3JGbiA/IGNvbHVtbi5hY2Nlc3NvckZuKHJvdykgOiB1bmRlZmluZWQ7XG4gIH07XG5cbiAgcHVibGljIGlzUm93RWRpdGluZyA9IChyb3dLZXk6IERhdGFXaXRoS2V5PFQ+Wydfa2V5J10pOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nUm93c1NpZ25hbCgpLmhhcyhyb3dLZXkpO1xuICB9O1xuXG4gIHB1YmxpYyB0b2dnbGVSb3dFZGl0ID0gKHJvd0lkOiBEYXRhV2l0aEtleTxUPlsnX2tleSddKSA9PiB7XG4gICAgbGV0IGRhdGE6IERhdGFXaXRoS2V5PFQ+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBpbmRleDogbnVtYmVyID0gLTE7XG5cbiAgICB0aGlzLnRhYmxlRGF0YSgpLmZvckVhY2goKGRhdHVtLCBpKSA9PiB7XG4gICAgICBpZiAoZGF0dW0uX2tleSA9PT0gcm93SWQpIHtcbiAgICAgICAgZGF0YSA9IGRhdHVtO1xuICAgICAgICBpbmRleCA9IGk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoZGF0YSAhPT0gdW5kZWZpbmVkICYmIGluZGV4ID49IDApIHtcbiAgICAgIHRoaXMudG9nZ2xlUm93RWRpdEludGVybmFsKGRhdGEsIGluZGV4KTtcbiAgICB9XG4gIH07XG5cbiAgcHJpdmF0ZSB0b2dnbGVSb3dFZGl0SW50ZXJuYWwgPSAocm93OiBEYXRhV2l0aEtleTxUPiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIHRoaXMuZWRpdGluZ1Jvd3NTaWduYWwudXBkYXRlKChzZXQpID0+IHtcbiAgICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQoc2V0KTtcbiAgICAgIGlmIChuZXdTZXQuaGFzKHJvdy5fa2V5KSkge1xuICAgICAgICBuZXdTZXQuZGVsZXRlKHJvdy5fa2V5KTtcbiAgICAgICAgdGhpcy5zYXZlUm93KHJvdy5fa2V5LCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZXQuYWRkKHJvdy5fa2V5KTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRWRpdGVkRGF0YShyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld1NldDtcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIGluaXRpYWxpemVFZGl0ZWREYXRhKHJvdzogRGF0YVdpdGhLZXk8VD4pIHtcbiAgICBjb25zdCByb3dJZCA9IHJvdy5fa2V5O1xuICAgIHRoaXMudW5FZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgICBuZXdNYXAuc2V0KHJvd0lkLCB7IC4uLnJvdy5vcmlnaW5hbERhdGEgfSk7XG4gICAgICByZXR1cm4gbmV3TWFwO1xuICAgIH0pO1xuICAgIGNvbnN0IGZvcm1Hcm91cENvbmZpZyA9IHRoaXMuZm9ybUdyb3VwQ29uZmlnKCk7XG4gICAgaWYgKGZvcm1Hcm91cENvbmZpZykge1xuICAgICAgY29uc3QgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChcbiAgICAgICAgZm9ybUdyb3VwQ29uZmlnLmNvbnRyb2xzLFxuICAgICAgICBmb3JtR3JvdXBDb25maWcudmFsaWRhdG9yT3JPcHRzLFxuICAgICAgICBmb3JtR3JvdXBDb25maWcuYXN5bmNWYWxpZGF0b3JcbiAgICAgICk7XG4gICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShyb3cgYXMgYW55KTtcbiAgICAgIHRoaXMuZm9ybUdyb3Vwc1NpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgICAgIG5ld01hcC5zZXQocm93SWQsIGZvcm1Hcm91cCk7XG4gICAgICAgIHJldHVybiBuZXdNYXA7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNhdmVSb3cocm93SWQ6IHN0cmluZyB8IG51bWJlciwgcm93SW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IGVkaXRlZEZvcm0gPSB0aGlzLmZvcm1Hcm91cHNTaWduYWwoKS5nZXQocm93SWQpO1xuICAgIGNvbnN0IHVuRWRpdGVkRGF0YSA9IHRoaXMudW5FZGl0ZWREYXRhU2lnbmFsKCkuZ2V0KHJvd0lkKTtcblxuICAgIC8vIGlmIChlZGl0ZWREYXRhKSB7XG4gICAgLy8gICBjb25zdCBvcmlnaW5hbFJvdyA9IHRoaXMudGFibGVEYXRhKCkuZmluZCgocm93KSA9PiByb3cuX2tleSA9PT0gcm93SWQpO1xuICAgIC8vICAgaWYgKG9yaWdpbmFsUm93KSB7XG4gICAgLy8gICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSB7IC4uLm9yaWdpbmFsUm93LCAuLi5lZGl0ZWREYXRhIH07XG4gICAgLy8gICAgIHRoaXMucm93U2F2ZS5lbWl0KHVwZGF0ZWRSb3cpO1xuICAgIC8vICAgICB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgLy8gICAgICAgbmV3TWFwLmRlbGV0ZShyb3dJZCk7XG4gICAgLy8gICAgICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgaWYgKGVkaXRlZEZvcm0pIHtcbiAgICAgIGVkaXRlZEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIGVkaXRlZEZvcm0ubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICB0aGlzLmZvcm1Hcm91cHNTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAgICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgICAgICBuZXdNYXAuZGVsZXRlKHJvd0lkKTtcbiAgICAgICAgcmV0dXJuIG5ld01hcDtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yb3dTYXZlLmVtaXQoe1xuICAgICAgICBpbmRleDogcm93SW5kZXgsXG4gICAgICAgIGtleTogcm93SWQsXG4gICAgICAgIGRhdGE6IGVkaXRlZEZvcm0udmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodW5FZGl0ZWREYXRhKSB7XG4gICAgICB0aGlzLnVuRWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgICAgICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgICAgIG5ld01hcC5kZWxldGUocm93SWQpO1xuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJvd1JldmVydC5lbWl0KHtcbiAgICAgICAgaW5kZXg6IHJvd0luZGV4LFxuICAgICAgICBrZXk6IHJvd0lkLFxuICAgICAgICBkYXRhOiB1bkVkaXRlZERhdGEsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzUm93U2VsZWN0ZWQgPSAocm93SWQ6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkUm93c1NpZ25hbCgpLmhhcyhyb3dJZCk7XG4gIH07XG5cbiAgcHJpdmF0ZSB0b2dnbGVSb3dTZWxlY3Rpb24gPSAocm93SWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsLnVwZGF0ZSgoc2V0KSA9PiB7XG4gICAgICBjb25zdCBuZXdTZXQgPSBuZXcgU2V0KHNldCk7XG4gICAgICBpZiAobmV3U2V0Lmhhcyhyb3dJZCkpIHtcbiAgICAgICAgbmV3U2V0LmRlbGV0ZShyb3dJZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZXQuYWRkKHJvd0lkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgcmV0dXJuIG5ld1NldDtcbiAgICB9KTtcbiAgfTtcblxuICBwcml2YXRlIGFsbFJvd3NTZWxlY3RlZCA9ICgpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBub25Hcm91cFJvd3MgPSB0aGlzLmRhdGEoKS5maWx0ZXIoKHJvdykgPT4gIXRoaXMuaXNHcm91cFJvdyhyb3cpKTtcbiAgICByZXR1cm4gKFxuICAgICAgbm9uR3JvdXBSb3dzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsKCkuc2l6ZSA9PT0gbm9uR3JvdXBSb3dzLmxlbmd0aFxuICAgICk7XG4gIH07XG5cbiAgcHJpdmF0ZSBzb21lUm93c1NlbGVjdGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IG5vbkdyb3VwUm93cyA9IHRoaXMuZGF0YSgpLmZpbHRlcigocm93KSA9PiAhdGhpcy5pc0dyb3VwUm93KHJvdykpO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLnNlbGVjdGVkUm93c1NpZ25hbCgpLnNpemUgPiAwICYmXG4gICAgICB0aGlzLnNlbGVjdGVkUm93c1NpZ25hbCgpLnNpemUgPCBub25Hcm91cFJvd3MubGVuZ3RoXG4gICAgKTtcbiAgfTtcblxuICBwcml2YXRlIHRvZ2dsZUFsbFJvd3MgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuYWxsUm93c1NlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsLnNldChuZXcgU2V0KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25Hcm91cFJvd3MgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbHRlcihcbiAgICAgICAgKHJvdykgPT4gIXRoaXMuaXNHcm91cFJvdyhyb3cub3JpZ2luYWxEYXRhKVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzU2lnbmFsLnNldChuZXcgU2V0KG5vbkdyb3VwUm93cy5tYXAoKHJvdykgPT4gcm93Ll9rZXkpKSk7XG4gICAgfVxuICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZSgpO1xuICB9O1xuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbkNoYW5nZSgpIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLnRhYmxlRGF0YSgpLmZpbHRlcigocm93KSA9PlxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3NTaWduYWwoKS5oYXMocm93Ll9rZXkpXG4gICAgKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KFxuICAgICAgc2VsZWN0ZWRSb3dzLm1hcCgoeyBvcmlnaW5hbERhdGEgfSkgPT4gb3JpZ2luYWxEYXRhKVxuICAgICk7XG4gIH1cblxuICBnZXRIZWFkZXJDb250ZXh0KGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPikge1xuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgIGNvbHVtbixcbiAgICAgIGFsbFJvd3NTZWxlY3RlZDogdGhpcy5hbGxSb3dzU2VsZWN0ZWQsXG4gICAgICBzb21lUm93c1NlbGVjdGVkOiB0aGlzLnNvbWVSb3dzU2VsZWN0ZWQsXG4gICAgICB0b2dnbGVBbGxSb3dzOiB0aGlzLnRvZ2dsZUFsbFJvd3MsXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZUVkaXRlZFZhbHVlKFxuICAgIHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+LFxuICAgIHZhbHVlOiBhbnlcbiAgKSB7XG4gICAgLy8gdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgLy8gICBjb25zdCByb3dEYXRhID0gbmV3TWFwLmdldChyb3dJZCkgfHwgKHt9IGFzIEVkaXRlZERhdGE8VD4pO1xuICAgIC8vICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSkge1xuICAgIC8vICAgICBuZXdNYXAuc2V0KHJvd0lkLCB7IC4uLnJvd0RhdGEsIFtjb2x1bW4uYWNjZXNzb3JLZXldOiB2YWx1ZSB9KTtcbiAgICAvLyAgIH0gZWxzZSB7XG4gICAgLy8gICAgIGNvbnNvbGUud2FybihcbiAgICAvLyAgICAgICAnQ2Fubm90IHVwZGF0ZSB2YWx1ZSBmb3IgY29sdW1uIHdpdGhvdXQgYWNjZXNzb3JLZXk6JyxcbiAgICAvLyAgICAgICBjb2x1bW4uaWRcbiAgICAvLyAgICAgKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIHJldHVybiBuZXdNYXA7XG4gICAgLy8gfSk7XG4gIH1cblxuICB1cGRhdGVFZGl0ZWRWYWx1ZUZuKFxuICAgIHJvd0lkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgdmFsdWVGbjogKHZhbHVlOiBhbnkpID0+IFQsXG4gICAgdmFsdWU6IGFueVxuICApIHtcbiAgICAvLyB0aGlzLmVkaXRlZERhdGFTaWduYWwudXBkYXRlKChtYXApID0+IHtcbiAgICAvLyAgIGNvbnN0IG5ld01hcCA9IG5ldyBNYXAobWFwKTtcbiAgICAvLyAgIGNvbnN0IHJvd0RhdGEgPSBuZXdNYXAuZ2V0KHJvd0lkKSB8fCAoe30gYXMgRWRpdGVkRGF0YTxUPik7XG4gICAgLy8gICBuZXdNYXAuc2V0KHJvd0lkLCB7IC4uLnJvd0RhdGEsIC4uLnZhbHVlRm4odmFsdWUpIH0pO1xuICAgIC8vICAgcmV0dXJuIG5ld01hcDtcbiAgICAvLyB9KTtcbiAgfVxuXG4gIHVwZGF0ZUVkaXRlZERhdGEocm93SWQ6IHN0cmluZyB8IG51bWJlciwgZGF0YTogUGFydGlhbDxUPikge1xuICAgIC8vIHRoaXMuZWRpdGVkRGF0YVNpZ25hbC51cGRhdGUoKG1hcCkgPT4ge1xuICAgIC8vICAgY29uc3QgbmV3TWFwID0gbmV3IE1hcChtYXApO1xuICAgIC8vICAgY29uc3Qgcm93RGF0YSA9IG5ld01hcC5nZXQocm93SWQpIHx8ICh7fSBhcyBFZGl0ZWREYXRhPFQ+KTtcbiAgICAvLyAgIG5ld01hcC5zZXQocm93SWQsIHsgLi4ucm93RGF0YSwgLi4uZGF0YSB9KTtcbiAgICAvLyAgIHJldHVybiBuZXdNYXA7XG4gICAgLy8gfSk7XG4gIH1cblxuICB1cGRhdGVOZXN0ZWRFZGl0ZWRWYWx1ZShcbiAgICByb3dJZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPixcbiAgICBuZXN0ZWRGaWVsZDogc3RyaW5nLFxuICAgIHZhbHVlOiBhbnlcbiAgKSB7XG4gICAgLy8gdGhpcy5lZGl0ZWREYXRhU2lnbmFsLnVwZGF0ZSgobWFwKSA9PiB7XG4gICAgLy8gICBjb25zdCBuZXdNYXAgPSBuZXcgTWFwKG1hcCk7XG4gICAgLy8gICBjb25zdCByb3dEYXRhID0gbmV3TWFwLmdldChyb3dJZCkgfHwgKHt9IGFzIEVkaXRlZERhdGE8VD4pO1xuICAgIC8vICAgaWYgKGNvbHVtbi5hY2Nlc3NvcktleSkge1xuICAgIC8vICAgICBjb25zdCBjb2x1bW5EYXRhID0gKHJvd0RhdGFbY29sdW1uLmFjY2Vzc29yS2V5XSBhcyBhbnkpIHx8IHt9O1xuICAgIC8vICAgICBuZXdNYXAuc2V0KHJvd0lkLCB7XG4gICAgLy8gICAgICAgLi4ucm93RGF0YSxcbiAgICAvLyAgICAgICBbY29sdW1uLmFjY2Vzc29yS2V5XToge1xuICAgIC8vICAgICAgICAgLi4uY29sdW1uRGF0YSxcbiAgICAvLyAgICAgICAgIFtuZXN0ZWRGaWVsZF06IHZhbHVlLFxuICAgIC8vICAgICAgIH0sXG4gICAgLy8gICAgIH0pO1xuICAgIC8vICAgfSBlbHNlIHtcbiAgICAvLyAgICAgY29uc29sZS53YXJuKFxuICAgIC8vICAgICAgICdDYW5ub3QgdXBkYXRlIG5lc3RlZCB2YWx1ZSBmb3IgY29sdW1uIHdpdGhvdXQgYWNjZXNzb3JLZXk6JyxcbiAgICAvLyAgICAgICBjb2x1bW4uaWRcbiAgICAvLyAgICAgKTtcbiAgICAvLyAgIH1cbiAgICAvLyAgIHJldHVybiBuZXdNYXA7XG4gICAgLy8gfSk7XG4gIH1cblxuICBnZXRDZWxsQ29udGV4dChcbiAgICByb3c6IERhdGFXaXRoS2V5PFQ+LFxuICAgIGNvbHVtbjogQ29sdW1uRGVmaW5pdGlvbjxUPixcbiAgICByb3dJbmRleDogbnVtYmVyXG4gICkge1xuICAgIGNvbnN0IHJvd0lkID0gcm93Ll9rZXk7XG4gICAgY29uc3QgaXNFZGl0aW5nID0gdGhpcy5pc1Jvd0VkaXRpbmcocm93Ll9rZXkpO1xuICAgIC8vIGNvbnN0IGVkaXRlZERhdGEgPSB0aGlzLmVkaXRlZERhdGFTaWduYWwoKS5nZXQocm93SWQpO1xuICAgIGNvbnN0IGVkaXRlZEZvcm0gPSB0aGlzLmZvcm1Hcm91cHNTaWduYWwoKS5nZXQocm93SWQpO1xuICAgIGNvbnN0IGZvcm1Db250cm9sID0gZWRpdGVkRm9ybT8uZ2V0KGNvbHVtbi5mb3JtQ29udHJvbE5hbWUgfHwgJycpO1xuXG4gICAgbGV0IHZhbHVlOiBhbnk7XG4gICAgaWYgKGlzRWRpdGluZykge1xuICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgIHZhbHVlID0gZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0Q2VsbFZhbHVlKHJvdy5vcmlnaW5hbERhdGEsIGNvbHVtbik7XG4gICAgICB9XG4gICAgICAvLyBlbHNlIGlmIChlZGl0ZWREYXRhKSB7XG4gICAgICAvLyAgIGlmIChjb2x1bW4uYWNjZXNzb3JLZXkgJiYgY29sdW1uLmFjY2Vzc29yS2V5IGluIGVkaXRlZERhdGEpIHtcbiAgICAgIC8vICAgICAvLyBJZiBjb2x1bW4gaGFzIGFuIGFjY2Vzc29yS2V5IGFuZCBpdCBleGlzdHMgaW4gZWRpdGVkIGRhdGEsIHVzZSB0aGF0XG4gICAgICAvLyAgICAgdmFsdWUgPSBlZGl0ZWREYXRhW2NvbHVtbi5hY2Nlc3NvcktleV07XG4gICAgICAvLyAgIH0gZWxzZSBpZiAoY29sdW1uLmFjY2Vzc29yRm4pIHtcbiAgICAgIC8vICAgICAvLyBJZiBjb2x1bW4gaGFzIGFuIGFjY2Vzc29yRm4sIGFwcGx5IGl0IHRvIHRoZSBlZGl0ZWQgZGF0YVxuICAgICAgLy8gICAgIHZhbHVlID0gY29sdW1uLmFjY2Vzc29yRm4oeyAuLi5yb3csIC4uLmVkaXRlZERhdGEgfSk7XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgLy8gRmFsbGJhY2sgdG8gZ2V0dGluZyB0aGUgdmFsdWUgZnJvbSB0aGUgb3JpZ2luYWwgcm93XG4gICAgICAvLyAgICAgdmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3csIGNvbHVtbik7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0aGlzLmdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBjb2x1bW4pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IHZhbHVlLFxuICAgICAgdmFsdWUsXG4gICAgICByb3c6IHJvdy5vcmlnaW5hbERhdGEsXG4gICAgICBjb2x1bW4sXG4gICAgICByb3dJbmRleCxcbiAgICAgIHJvd0lkLFxuICAgICAgaXNFZGl0aW5nLFxuICAgICAgZm9ybUNvbnRyb2wsXG4gICAgICBpc1NlbGVjdGVkOiB0aGlzLmlzUm93U2VsZWN0ZWQocm93SWQpLFxuICAgICAgdG9nZ2xlUm93U2VsZWN0aW9uOiAoKSA9PiB0aGlzLnRvZ2dsZVJvd1NlbGVjdGlvbihyb3dJZCksXG4gICAgICB0b2dnbGVSb3dFZGl0OiAoKSA9PiB0aGlzLnRvZ2dsZVJvd0VkaXRJbnRlcm5hbChyb3csIHJvd0luZGV4KSxcbiAgICAgIGRlbGV0ZVJvdzogKCkgPT4gdGhpcy5kZWxldGVSb3cocm93SWQpLFxuICAgICAgdXBkYXRlVmFsdWU6IChuZXdWYWx1ZTogYW55KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZUVkaXRlZFZhbHVlKHJvd0lkLCBjb2x1bW4sIG5ld1ZhbHVlKSxcbiAgICAgIHVwZGF0ZU5lc3RlZFZhbHVlOiAobmVzdGVkRmllbGQ6IHN0cmluZywgbmV3VmFsdWU6IGFueSkgPT5cbiAgICAgICAgdGhpcy51cGRhdGVOZXN0ZWRFZGl0ZWRWYWx1ZShyb3dJZCwgY29sdW1uLCBuZXN0ZWRGaWVsZCwgbmV3VmFsdWUpLFxuICAgICAgdXBkYXRlVmFsdWVGbjogKHZhbHVlRm46ICh2YWx1ZTogYW55KSA9PiBULCBuZXdWYWx1ZTogYW55KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZUVkaXRlZFZhbHVlRm4ocm93SWQsIHZhbHVlRm4sIG5ld1ZhbHVlKSxcbiAgICAgIHVwZGF0ZURhdGE6IChuZXdEYXRhOiBQYXJ0aWFsPFQ+KSA9PlxuICAgICAgICB0aGlzLnVwZGF0ZUVkaXRlZERhdGEocm93SWQsIG5ld0RhdGEpLFxuICAgIH07XG4gIH1cblxuICBkZWxldGVSb3cgPSAocm93SWQ6IHN0cmluZyB8IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IHJvd1RvRGVsZXRlID0gdGhpcy50YWJsZURhdGEoKS5maW5kKChyb3cpID0+IHJvdy5fa2V5ID09PSByb3dJZCk7XG4gICAgaWYgKHJvd1RvRGVsZXRlKSB7XG4gICAgICB0aGlzLnJvd0RlbGV0ZS5lbWl0KHJvd1RvRGVsZXRlLm9yaWdpbmFsRGF0YSk7XG4gICAgfVxuICB9O1xuXG4gIGdldEZvb3RlckNvbnRleHQoY29sdW1uOiBDb2x1bW5EZWZpbml0aW9uPFQ+KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogY29sdW1uLFxuICAgICAgY29sdW1uLFxuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgIH07XG4gIH1cblxuICBnZXRUYWJsZVN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc3R5bGVDb25maWcsXG4gICAgICBmb250RmFtaWx5OiB0aGlzLnN0eWxlQ29uZmlnLmZvbnRGYW1pbHksXG4gICAgICBmb250U2l6ZTogdGhpcy5zdHlsZUNvbmZpZy5mb250U2l6ZSxcbiAgICAgIHdoaXRlU3BhY2U6IHRoaXMuc3R5bGVDb25maWcud2hpdGVTcGFjZSxcbiAgICAgIG1hcmdpbjogdGhpcy5zdHlsZUNvbmZpZy5tYXJnaW4sXG4gICAgICBib3JkZXI6IHRoaXMuc3R5bGVDb25maWcuYm9yZGVyLFxuICAgICAgYm9yZGVyQ29sbGFwc2U6IHRoaXMuc3R5bGVDb25maWcuYm9yZGVyQ29sbGFwc2UsXG4gICAgICBib3JkZXJTcGFjaW5nOiB0aGlzLnN0eWxlQ29uZmlnLmJvcmRlclNwYWNpbmcsXG4gICAgICB0YWJsZUxheW91dDogdGhpcy5zdHlsZUNvbmZpZy50YWJsZUxheW91dCxcbiAgICAgIHdpZHRoOiB0aGlzLnN0eWxlQ29uZmlnLndpZHRoLFxuICAgIH07XG4gIH1cblxuICBnZXRIZWFkZXJTdHlsZSgpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLnN0eWxlQ29uZmlnLmhlYWRlcixcbiAgICAgIHBvc2l0aW9uOiB0aGlzLnN0eWxlQ29uZmlnLmhlYWRlcj8uc3RpY2t5VG9wID8gJ3N0aWNreScgOiAnc3RhdGljJyxcbiAgICAgIHRvcDogdGhpcy5zdHlsZUNvbmZpZy5oZWFkZXI/LnN0aWNreVRvcCA/ICcwJyA6ICdhdXRvJyxcbiAgICAgIHpJbmRleDogdGhpcy5zdHlsZUNvbmZpZy5oZWFkZXI/LnpJbmRleCB8fCAnYXV0bycsXG4gICAgfTtcbiAgfVxuXG4gIGdldEZvb3RlclN0eWxlKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuc3R5bGVDb25maWcuZm9vdGVyLFxuICAgICAgcG9zaXRpb246IHRoaXMuc3R5bGVDb25maWcuZm9vdGVyPy5zdGlja3lCb3R0b20gPyAnc3RpY2t5JyA6ICdzdGF0aWMnLFxuICAgICAgYm90dG9tOiB0aGlzLnN0eWxlQ29uZmlnLmZvb3Rlcj8uc3RpY2t5Qm90dG9tID8gJzAnIDogJ2F1dG8nLFxuICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmZvb3Rlcj8uekluZGV4IHx8ICdhdXRvJyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0Um93U3R5bGUocm93SW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3Qgcm93U3R5bGVzID0gdGhpcy5zdHlsZUNvbmZpZy5yb3dzO1xuICAgIGlmIChyb3dTdHlsZXMgJiYgJ2V2ZW4nIGluIHJvd1N0eWxlcyAmJiAnb2RkJyBpbiByb3dTdHlsZXMpIHtcbiAgICAgIHJldHVybiByb3dJbmRleCAlIDIgPT09IDAgPyByb3dTdHlsZXMuZXZlbiA6IHJvd1N0eWxlcy5vZGQ7XG4gICAgfSBlbHNlIGlmIChyb3dTdHlsZXMgJiYgJ250aCcgaW4gcm93U3R5bGVzICYmIHJvd1N0eWxlcy5udGgpIHtcbiAgICAgIGNvbnN0IHsgaW50ZXJ2YWwsIHN0eWxlIH0gPSByb3dTdHlsZXMubnRoO1xuICAgICAgcmV0dXJuIChyb3dJbmRleCArIDEpICUgKGludGVydmFsIHx8IDEpID09PSAwID8gc3R5bGUgOiB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJvd1N0eWxlcyB8fCB7fTtcbiAgICB9XG4gIH1cblxuICBnZXRDZWxsU3R5bGUocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgY29uc3QgaXNGaXJzdENvbHVtbiA9IGNvbEluZGV4ID09PSAwO1xuICAgIGNvbnN0IGlzTGFzdENvbHVtbiA9IGNvbEluZGV4ID09PSB0aGlzLmRpc3BsYXlDb2x1bW5zKCkubGVuZ3RoIC0gMTtcblxuICAgIGxldCBjZWxsU3R5bGUgPSB7IC4uLnRoaXMuc3R5bGVDb25maWcuY2VsbHMgfTtcblxuICAgIGlmIChpc0ZpcnN0Q29sdW1uKSB7XG4gICAgICBjZWxsU3R5bGUgPSB7XG4gICAgICAgIC4uLmNlbGxTdHlsZSxcbiAgICAgICAgLi4udGhpcy5zdHlsZUNvbmZpZy5maXJzdENvbHVtbixcbiAgICAgICAgcG9zaXRpb246IHRoaXMuc3R5bGVDb25maWcuZmlyc3RDb2x1bW4/LnN0aWNreUxlZnRcbiAgICAgICAgICA/ICdzdGlja3knXG4gICAgICAgICAgOiAnc3RhdGljJyxcbiAgICAgICAgbGVmdDogdGhpcy5zdHlsZUNvbmZpZy5maXJzdENvbHVtbj8uc3RpY2t5TGVmdCA/ICcwJyA6ICdhdXRvJyxcbiAgICAgICAgekluZGV4OiB0aGlzLnN0eWxlQ29uZmlnLmZpcnN0Q29sdW1uPy56SW5kZXggfHwgJ2F1dG8nLFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGlzTGFzdENvbHVtbikge1xuICAgICAgY2VsbFN0eWxlID0ge1xuICAgICAgICAuLi5jZWxsU3R5bGUsXG4gICAgICAgIC4uLnRoaXMuc3R5bGVDb25maWcubGFzdENvbHVtbixcbiAgICAgICAgcG9zaXRpb246IHRoaXMuc3R5bGVDb25maWcubGFzdENvbHVtbj8uc3RpY2t5UmlnaHRcbiAgICAgICAgICA/ICdzdGlja3knXG4gICAgICAgICAgOiAnc3RhdGljJyxcbiAgICAgICAgcmlnaHQ6IHRoaXMuc3R5bGVDb25maWcubGFzdENvbHVtbj8uc3RpY2t5UmlnaHQgPyAnMCcgOiAnYXV0bycsXG4gICAgICAgIHpJbmRleDogdGhpcy5zdHlsZUNvbmZpZy5sYXN0Q29sdW1uPy56SW5kZXggfHwgJ2F1dG8nLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgLy8gQXBwbHkgYm9keSBzdHlsZXMgdG8gYWxsIGNlbGxzXG4gICAgICBjZWxsU3R5bGUgPSB7IC4uLmNlbGxTdHlsZSwgLi4udGhpcy5zdHlsZUNvbmZpZy5ib2R5IH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNlbGxTdHlsZSA9IHsgLi4udGhpcy5zdHlsZUNvbmZpZy5oZWFkZXIgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2VsbFN0eWxlO1xuICB9XG59XG5cbi8vIERlZmF1bHQgc3R5bGVzXG5jb25zdCBkZWZhdWx0VGFibGVTdHlsZXM6IFRhYmxlU3R5bGVzID0ge1xuICBib3JkZXI6ICcxcHggc29saWQgI2UwZTBlMCcsXG4gIGJvcmRlclJhZGl1czogJzRweCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgYm94U2hhZG93OiAnMCAycHggNHB4IHJnYmEoMCwwLDAsMC4xKScsXG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlYWRlcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNmNWY1ZjUnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBjb2xvcjogJyMzMzMnLFxuICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgIGJvcmRlckJvdHRvbTogJzJweCBzb2xpZCAjZTBlMGUwJyxcbiAgfSxcbiAgcm93czoge1xuICAgIGV2ZW46IHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmZmZmZmYnLFxuICAgIH0sXG4gICAgb2RkOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjlmOWY5JyxcbiAgICB9LFxuICAgIG50aDoge1xuICAgICAgaW50ZXJ2YWw6IDUsXG4gICAgICBzdHlsZToge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjZjBmMGYwJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSxcbiAgY2VsbHM6IHtcbiAgICBwYWRkaW5nOiAnMTJweCAxNnB4JyxcbiAgICBib3JkZXJCb3R0b206ICcxcHggc29saWQgI2UwZTBlMCcsXG4gIH0sXG4gIGZvb3Rlcjoge1xuICAgIGJhY2tncm91bmRDb2xvcjogJyNmNWY1ZjUnLFxuICAgIGZvbnRXZWlnaHQ6ICdib2xkJyxcbiAgICBjb2xvcjogJyMzMzMnLFxuICAgIHRleHRBbGlnbjogJ2xlZnQnLFxuICAgIHBhZGRpbmc6ICcxMnB4IDE2cHgnLFxuICAgIGJvcmRlclRvcDogJzJweCBzb2xpZCAjZTBlMGUwJyxcbiAgfSxcbn07XG4iLCI8dGFibGUgW25nU3R5bGVdPVwiZ2V0VGFibGVTdHlsZSgpXCI+XG4gIDx0aGVhZD5cbiAgICA8IS0tIDx0ciBbbmdTdHlsZV09XCJnZXRIZWFkZXJTdHlsZSgpXCI+XG4gICAgICA8dGggY29sc3Bhbj1cIjJcIiBzY29wZT1cImNvbGdyb3VwXCI+R3JvdXAgMTwvdGg+XG4gICAgICA8dGggY29sc3Bhbj1cIjFcIiBzY29wZT1cImNvbGdyb3VwXCI+R3JvdXAgMjwvdGg+XG4gICAgPC90cj4gLS0+XG5cbiAgICA8dHIgW25nU3R5bGVdPVwiZ2V0SGVhZGVyU3R5bGUoKVwiPlxuICAgICAgQGZvciAoY29sdW1uIG9mIGRpc3BsYXlDb2x1bW5zKCk7IHRyYWNrIGNvbHVtbi5pZCkge1xuICAgICAgPHRoIFtuZ1N0eWxlXT1cImdldENlbGxTdHlsZSgtMSwgJGluZGV4KVwiPlxuICAgICAgICBAaWYgKGNvbHVtbi5oZWFkZXJUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmhlYWRlclRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0SGVhZGVyQ29udGV4dChjb2x1bW4pXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAge3sgY29sdW1uLmhlYWRlciB9fVxuICAgICAgICB9XG4gICAgICA8L3RoPlxuICAgICAgfVxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG4gIDx0Ym9keT5cbiAgICBAZm9yIChyb3cgb2YgdGFibGVEYXRhKCk7IHRyYWNrIHJvdy5fa2V5OyBsZXQgcm93SW5kZXggPSAkaW5kZXgpIHsgQGlmXG4gICAgKGlzR3JvdXBSb3cocm93Lm9yaWdpbmFsRGF0YSkpIHtcbiAgICA8dHIgY2xhc3M9XCJncm91cC1yb3dcIiBbbmdTdHlsZV09XCJnZXRSb3dTdHlsZShyb3dJbmRleClcIj5cbiAgICAgIDx0ZFxuICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImRpc3BsYXlDb2x1bW5zKCkubGVuZ3RoXCJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKHJvd0luZGV4LCAwKVwiXG4gICAgICA+XG4gICAgICAgIHt7IGdldENlbGxWYWx1ZShyb3cub3JpZ2luYWxEYXRhLCBkaXNwbGF5Q29sdW1ucygpWzBdKSB9fVxuICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICAgIH0gQGVsc2Uge1xuICAgIDx0ciBbbmdTdHlsZV09XCJnZXRSb3dTdHlsZShyb3dJbmRleClcIj5cbiAgICAgIEBmb3IgKGNvbHVtbiBvZiBkaXNwbGF5Q29sdW1ucygpOyB0cmFjayBjb2x1bW4uaWQ7IGxldCBjb2xJbmRleCA9ICRpbmRleClcbiAgICAgIHtcbiAgICAgIDx0ZCBbbmdTdHlsZV09XCJnZXRDZWxsU3R5bGUocm93SW5kZXgsIGNvbEluZGV4KVwiPlxuICAgICAgICBAaWYgKGlzUm93RWRpdGluZyhyb3cuX2tleSkgJiYgY29sdW1uLmNlbGxFZGl0VGVtcGxhdGUpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5jZWxsRWRpdFRlbXBsYXRlXCJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0Q2VsbENvbnRleHQocm93LCBjb2x1bW4sIHJvd0luZGV4KVwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfSBAZWxzZSBpZiAoY29sdW1uLmNlbGxUZW1wbGF0ZSkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENlbGxDb250ZXh0KHJvdywgY29sdW1uLCByb3dJbmRleClcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICB7eyBnZXRDZWxsVmFsdWUocm93Lm9yaWdpbmFsRGF0YSwgY29sdW1uKSB9fVxuICAgICAgICB9XG4gICAgICA8L3RkPlxuICAgICAgfVxuICAgIDwvdHI+XG4gICAgfSB9XG4gIDwvdGJvZHk+XG4gIEBpZiAoaGFzRm9vdGVyKCkpIHtcbiAgPHRmb290PlxuICAgIDx0ciBbbmdTdHlsZV09XCJnZXRGb290ZXJTdHlsZSgpXCI+XG4gICAgICBAZm9yIChjb2x1bW4gb2YgZGlzcGxheUNvbHVtbnMoKTsgdHJhY2sgY29sdW1uLmlkKSB7XG4gICAgICA8dGQgW25nU3R5bGVdPVwiZ2V0Q2VsbFN0eWxlKC0xLCAkaW5kZXgpXCI+XG4gICAgICAgIEBpZiAoY29sdW1uLmZvb3RlclRlbXBsYXRlKSB7XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uZm9vdGVyVGVtcGxhdGVcIlxuICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRGb290ZXJDb250ZXh0KGNvbHVtbilcIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIDwvdGQ+XG4gICAgICB9XG4gICAgPC90cj5cbiAgPC90Zm9vdD5cbiAgfVxuPC90YWJsZT5cbiJdfQ==
@@ -4491,6 +4491,9 @@ class DataTableComponent {
4491
4491
  if (formControl) {
4492
4492
  value = formControl.value;
4493
4493
  }
4494
+ else {
4495
+ value = this.getCellValue(row.originalData, column);
4496
+ }
4494
4497
  // else if (editedData) {
4495
4498
  // if (column.accessorKey && column.accessorKey in editedData) {
4496
4499
  // // If column has an accessorKey and it exists in edited data, use that
@@ -4503,7 +4506,6 @@ class DataTableComponent {
4503
4506
  // value = this.getCellValue(row, column);
4504
4507
  // }
4505
4508
  // }
4506
- value = this.getCellValue(row.originalData, column);
4507
4509
  }
4508
4510
  else {
4509
4511
  value = this.getCellValue(row.originalData, column);
@@ -5972,14 +5974,14 @@ class DataImportComponent {
5972
5974
  // });
5973
5975
  this.previewColumnsList = computed(() => {
5974
5976
  return this.previewColumns()
5975
- .filter((col) => col.accessorKey || col.importKey || col.formControlName)
5977
+ .filter((col) => col.importKey || col.formControlName)
5976
5978
  .map((column) => {
5977
5979
  const matchingTemplate = this.columnTemplates().find((t) => t.columnId === column.id);
5978
5980
  console.log(matchingTemplate);
5979
5981
  if (matchingTemplate) {
5980
5982
  return {
5981
5983
  ...column,
5982
- accessorKey: column.importKey ?? column.accessorKey,
5984
+ // accessorKey: column.importKey,
5983
5985
  cellTemplate: matchingTemplate.cellTemplate,
5984
5986
  cellEditTemplate: matchingTemplate.cellEditTemplate,
5985
5987
  headerTemplate: matchingTemplate.headerTemplate,
@@ -5998,7 +6000,7 @@ class DataImportComponent {
5998
6000
  this.headers = computed(() => {
5999
6001
  return (this.fields() ??
6000
6002
  this.previewColumnsList()
6001
- .filter((col) => col.accessorKey)
6003
+ .filter((col) => col.importKey)
6002
6004
  .map((col) => col.header.toString()));
6003
6005
  });
6004
6006
  }