@igo2/common 1.14.1 → 1.15.0

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.
Files changed (135) hide show
  1. package/esm2020/lib/action/action.module.mjs +1 -1
  2. package/esm2020/lib/action/actionbar/actionbar-item.component.mjs +2 -2
  3. package/esm2020/lib/action/actionbar/actionbar.component.mjs +3 -3
  4. package/esm2020/lib/action/actionbar/actionbar.module.mjs +1 -1
  5. package/esm2020/lib/action/shared/action.interfaces.mjs +1 -1
  6. package/esm2020/lib/action/shared/store.mjs +1 -1
  7. package/esm2020/lib/backdrop/backdrop.component.mjs +3 -3
  8. package/esm2020/lib/backdrop/backdrop.module.mjs +1 -1
  9. package/esm2020/lib/badge-icon/badge-icon.directive.mjs +20 -4
  10. package/esm2020/lib/badge-icon/badge-icon.module.mjs +1 -1
  11. package/esm2020/lib/clickout/clickout.module.mjs +1 -1
  12. package/esm2020/lib/clone/clone.module.mjs +1 -1
  13. package/esm2020/lib/clone/clone.pipe.mjs +1 -1
  14. package/esm2020/lib/collapsible/collapse.directive.mjs +1 -1
  15. package/esm2020/lib/collapsible/collapsible.component.mjs +2 -2
  16. package/esm2020/lib/collapsible/collapsible.module.mjs +1 -1
  17. package/esm2020/lib/confirm-dialog/confirm-dialog.component.mjs +2 -2
  18. package/esm2020/lib/confirm-dialog/confirm-dialog.module.mjs +1 -1
  19. package/esm2020/lib/confirm-dialog/confirm-dialog.service.mjs +7 -5
  20. package/esm2020/lib/context-menu/context-menu.directive.mjs +1 -1
  21. package/esm2020/lib/context-menu/context-menu.module.mjs +1 -1
  22. package/esm2020/lib/context-menu/long-press.directive.mjs +5 -1
  23. package/esm2020/lib/custom-html/custom-html.component.mjs +2 -2
  24. package/esm2020/lib/custom-html/custom-html.module.mjs +1 -1
  25. package/esm2020/lib/custom-html/custom-html.pipe.mjs +1 -1
  26. package/esm2020/lib/dom/dom.interfaces.mjs +1 -1
  27. package/esm2020/lib/dom/dom.module.mjs +1 -1
  28. package/esm2020/lib/dom/dom.service.mjs +1 -1
  29. package/esm2020/lib/drag-drop/drag-drop.module.mjs +1 -1
  30. package/esm2020/lib/dynamic-component/dynamic-component.module.mjs +1 -1
  31. package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.component.mjs +2 -2
  32. package/esm2020/lib/dynamic-component/dynamic-outlet/dynamic-outlet.module.mjs +1 -1
  33. package/esm2020/lib/dynamic-component/shared/dynamic-component.mjs +1 -1
  34. package/esm2020/lib/dynamic-component/shared/dynamic-component.service.mjs +1 -1
  35. package/esm2020/lib/entity/entity-selector/entity-selector.component.mjs +2 -2
  36. package/esm2020/lib/entity/entity-selector/entity-selector.module.mjs +1 -1
  37. package/esm2020/lib/entity/entity-table/entity-table-row.directive.mjs +1 -1
  38. package/esm2020/lib/entity/entity-table/entity-table.component.mjs +3 -3
  39. package/esm2020/lib/entity/entity-table/entity-table.module.mjs +1 -1
  40. package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.component.mjs +2 -2
  41. package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.interface.mjs +1 -1
  42. package/esm2020/lib/entity/entity-table-paginator/entity-table-paginator.module.mjs +1 -1
  43. package/esm2020/lib/entity/entity.module.mjs +1 -1
  44. package/esm2020/lib/entity/shared/entity.interfaces.mjs +1 -1
  45. package/esm2020/lib/entity/shared/entity.utils.mjs +1 -1
  46. package/esm2020/lib/entity/shared/state.mjs +1 -1
  47. package/esm2020/lib/entity/shared/store.mjs +1 -1
  48. package/esm2020/lib/entity/shared/strategies/filter-custom-function.mjs +1 -1
  49. package/esm2020/lib/entity/shared/strategies/filter-selection.mjs +1 -1
  50. package/esm2020/lib/entity/shared/strategies/strategy.mjs +1 -1
  51. package/esm2020/lib/entity/shared/transaction.mjs +1 -1
  52. package/esm2020/lib/entity/shared/view.mjs +1 -1
  53. package/esm2020/lib/entity/shared/watcher.mjs +1 -1
  54. package/esm2020/lib/flexible/flexible.component.mjs +3 -3
  55. package/esm2020/lib/flexible/flexible.module.mjs +1 -1
  56. package/esm2020/lib/form/form/form.component.mjs +2 -2
  57. package/esm2020/lib/form/form/form.module.mjs +1 -1
  58. package/esm2020/lib/form/form-field/form-field-select.component.mjs +2 -2
  59. package/esm2020/lib/form/form-field/form-field-text.component.mjs +2 -2
  60. package/esm2020/lib/form/form-field/form-field-textarea.component.mjs +2 -2
  61. package/esm2020/lib/form/form-field/form-field.component.mjs +2 -2
  62. package/esm2020/lib/form/form-field/form-field.module.mjs +1 -1
  63. package/esm2020/lib/form/form-group/form-group.component.mjs +2 -2
  64. package/esm2020/lib/form/form-group/form-group.module.mjs +1 -1
  65. package/esm2020/lib/form/form.module.mjs +1 -1
  66. package/esm2020/lib/form/shared/form-field-component.mjs +1 -1
  67. package/esm2020/lib/form/shared/form-field.service.mjs +1 -1
  68. package/esm2020/lib/form/shared/form.interfaces.mjs +1 -1
  69. package/esm2020/lib/form/shared/form.service.mjs +1 -1
  70. package/esm2020/lib/form/shared/form.utils.mjs +1 -1
  71. package/esm2020/lib/home-button/home-button.component.mjs +3 -3
  72. package/esm2020/lib/home-button/home-button.module.mjs +1 -1
  73. package/esm2020/lib/image/image-error.directive.mjs +1 -1
  74. package/esm2020/lib/image/image.module.mjs +1 -1
  75. package/esm2020/lib/image/secure-image.pipe.mjs +1 -1
  76. package/esm2020/lib/interactive-tour/interactive-tour.component.mjs +2 -2
  77. package/esm2020/lib/interactive-tour/interactive-tour.interface.mjs +1 -1
  78. package/esm2020/lib/interactive-tour/interactive-tour.loader.mjs +1 -1
  79. package/esm2020/lib/interactive-tour/interactive-tour.module.mjs +1 -1
  80. package/esm2020/lib/interactive-tour/interactive-tour.service.mjs +1 -1
  81. package/esm2020/lib/json-dialog/json-dialog.component.mjs +2 -2
  82. package/esm2020/lib/json-dialog/json-dialog.module.mjs +1 -1
  83. package/esm2020/lib/json-dialog/json-dialog.service.mjs +1 -1
  84. package/esm2020/lib/keyvalue/keyvalue.module.mjs +1 -1
  85. package/esm2020/lib/keyvalue/keyvalue.pipe.mjs +1 -1
  86. package/esm2020/lib/list/list-item.directive.mjs +1 -1
  87. package/esm2020/lib/list/list.component.mjs +2 -2
  88. package/esm2020/lib/list/list.module.mjs +1 -1
  89. package/esm2020/lib/panel/panel.component.mjs +2 -2
  90. package/esm2020/lib/panel/panel.module.mjs +1 -1
  91. package/esm2020/lib/sidenav/sidenav-shim.directive.mjs +1 -1
  92. package/esm2020/lib/sidenav/sidenav.module.mjs +1 -1
  93. package/esm2020/lib/spinner/spinner-activity.directive.mjs +1 -1
  94. package/esm2020/lib/spinner/spinner.component.mjs +2 -2
  95. package/esm2020/lib/spinner/spinner.module.mjs +1 -1
  96. package/esm2020/lib/stop-propagation/stop-drop-propagation.directive.mjs +1 -1
  97. package/esm2020/lib/stop-propagation/stop-propagation.directive.mjs +1 -1
  98. package/esm2020/lib/stop-propagation/stop-propagation.module.mjs +1 -1
  99. package/esm2020/lib/table/table-database.mjs +1 -1
  100. package/esm2020/lib/table/table-datasource.mjs +1 -1
  101. package/esm2020/lib/table/table-model.interface.mjs +1 -1
  102. package/esm2020/lib/table/table.component.mjs +2 -2
  103. package/esm2020/lib/table/table.module.mjs +1 -1
  104. package/esm2020/lib/tool/shared/tool-component.mjs +1 -1
  105. package/esm2020/lib/tool/shared/tool.interface.mjs +1 -1
  106. package/esm2020/lib/tool/shared/tool.service.mjs +1 -1
  107. package/esm2020/lib/tool/shared/toolbox.mjs +1 -1
  108. package/esm2020/lib/tool/tool.module.mjs +1 -1
  109. package/esm2020/lib/tool/toolbox/toolbox.animation.mjs +1 -1
  110. package/esm2020/lib/tool/toolbox/toolbox.component.mjs +3 -3
  111. package/esm2020/lib/tool/toolbox/toolbox.module.mjs +1 -1
  112. package/esm2020/lib/widget/shared/widget.interfaces.mjs +1 -1
  113. package/esm2020/lib/widget/shared/widget.mjs +1 -1
  114. package/esm2020/lib/widget/shared/widget.service.mjs +1 -1
  115. package/esm2020/lib/widget/widget-outlet/widget-outlet.component.mjs +2 -2
  116. package/esm2020/lib/widget/widget-outlet/widget-outlet.module.mjs +1 -1
  117. package/esm2020/lib/widget/widget.module.mjs +1 -1
  118. package/esm2020/lib/workspace/shared/store.mjs +1 -1
  119. package/esm2020/lib/workspace/shared/workspace.interfaces.mjs +1 -1
  120. package/esm2020/lib/workspace/shared/workspace.mjs +1 -1
  121. package/esm2020/lib/workspace/workspace-selector/workspace-selector.component.mjs +2 -2
  122. package/esm2020/lib/workspace/workspace-selector/workspace-selector.module.mjs +1 -1
  123. package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.component.mjs +2 -2
  124. package/esm2020/lib/workspace/workspace-widget-outlet/workspace-widget-outlet.module.mjs +1 -1
  125. package/esm2020/lib/workspace/workspace.module.mjs +1 -1
  126. package/fesm2015/igo2-common.mjs +62 -41
  127. package/fesm2015/igo2-common.mjs.map +1 -1
  128. package/fesm2020/igo2-common.mjs +62 -41
  129. package/fesm2020/igo2-common.mjs.map +1 -1
  130. package/lib/badge-icon/badge-icon.directive.d.ts +5 -1
  131. package/lib/confirm-dialog/confirm-dialog.service.d.ts +3 -1
  132. package/package.json +10 -6
  133. package/style/common.theming.scss +12 -12
  134. package/style/partial/action.scss +18 -18
  135. package/style/partial/common.variables.scss +8 -8
@@ -846,7 +846,7 @@ export class EntityTableComponent {
846
846
  }
847
847
  }
848
848
  else if (column.type === 'date') {
849
- if (column.visible) {
849
+ if (column.visible !== false) {
850
850
  if (item[key]) {
851
851
  let date = moment(item[key]);
852
852
  item[key] = date.utc().format('YYYY-MM-DD');
@@ -1335,7 +1335,7 @@ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Entity
1335
1335
  } }, dependencies: [i4.NgClass, i4.NgForOf, i4.NgIf, i4.NgStyle, i5.MatTable, i5.MatHeaderCellDef, i5.MatHeaderRowDef, i5.MatColumnDef, i5.MatCellDef, i5.MatRowDef, i5.MatHeaderCell, i5.MatCell, i5.MatHeaderRow, i5.MatRow, i6.MatAutocomplete, i6.MatAutocompleteTrigger, i3.MatOption, i7.MatSort, i7.MatSortHeader, i8.MatIcon, i9.MatButton, i10.MatCheckbox, i11.MatSuffix, i12.MatSelect, i13.StopPropagationDirective, i14.EntityTablePaginatorComponent, i15.ImageErrorDirective, i1.DefaultValueAccessor, i1.NumberValueAccessor, i1.NgControlStatus, i1.NgControlStatusGroup, i1.RequiredValidator, i1.MinValidator, i1.MaxValidator, i1.FormGroupDirective, i1.FormControlName, i16.MatInput, i17.MatDatepicker, i17.MatDatepickerInput, i17.MatDatepickerToggle, i18.MatTooltip, i19.EntityTableRowDirective, i4.AsyncPipe, i20.SanitizeHtmlPipe, i21.SecureImagePipe, i22.TranslatePipe], styles: ["[_nghost-%COMP%]{width:100%;height:100%;display:block}.table-compact[_nghost-%COMP%] tr.mat-header-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:36px}.table-compact[_nghost-%COMP%] tr.mat-row[_ngcontent-%COMP%], .table-compact[_nghost-%COMP%] .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text[_ngcontent-%COMP%]{overflow:hidden;word-wrap:break-word}th.mat-header-cell[_ngcontent-%COMP%], td.mat-cell[_ngcontent-%COMP%], td.mat-footer-cell[_ngcontent-%COMP%]{padding:0 3px}entity-table[_ngcontent-%COMP%] table.igo-entity-table-with-selection[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{margin:7px}.class_hidden[_ngcontent-%COMP%]{visibility:hidden}.class_display_none[_ngcontent-%COMP%]{display:none}.class_boolean[_ngcontent-%COMP%], .class_icon[_ngcontent-%COMP%], .class_number[_ngcontent-%COMP%]{text-align:center;padding-right:35px!important}.class_sting[_ngcontent-%COMP%], .class_text[_ngcontent-%COMP%], .class_number_edition[_ngcontent-%COMP%]{text-align:left}td.edition[_ngcontent-%COMP%]{background:rgba(166,166,166,.2)}input[_ngcontent-%COMP%]{border-bottom:1px solid darkgrey}"], changeDetection: 0 });
1336
1336
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EntityTableComponent, [{
1337
1337
  type: Component,
1338
- args: [{ selector: 'igo-entity-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MatFormFieldControl, useExisting: EntityTableComponent }], template: "<div class=\"table-container\" [ngStyle]=\"{'height': tableHeight}\">\n <table mat-table matSort [ngClass]=\"getTableClass()\" [dataSource]=\"dataSource\" [trackBy]=\"getTrackByFunction()\" (matSortChange)=\"onSort($event)\">\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\n <th mat-header-cell *matHeaderCellDef>\n <ng-container *ngIf=\"selectMany\">\n <ng-container *ngIf=\"selectionState$ | async as selectionState\">\n <mat-checkbox (change)=\"onToggleRows($event.checked)\" [checked]=\"selectionState === entityTableSelectionState.All\"\n [indeterminate]=\"selectionState === entityTableSelectionState.Some\">\n </mat-checkbox>\n </ng-container>\n </ng-container>\n </th>\n <td mat-cell *matCellDef=\"let record\">\n <mat-checkbox (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\" (click)=\"$event.shiftKey ?\n onShiftToggleRow(!rowIsSelected(record), record, $event) : $event.stopPropagation()\" (change)=\"onToggleRow($event.checked,record)\"\n [checked]=\"rowIsSelected(record)\">\n </mat-checkbox>\n </td>\n </ng-container>\n\n <ng-container [matColumnDef]=\"column.name\" *ngFor=\"let column of template.columns\">\n <ng-container *ngIf=\"columnIsSortable(column)\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header [matTooltip]=\"column.tooltip ? column.tooltip : undefined\">\n {{column.title}}\n </th>\n </ng-container>\n\n <ng-container *ngIf=\"!columnIsSortable(column)\">\n <th mat-header-cell *matHeaderCellDef [matTooltip]=\"column.tooltip ? column.tooltip : undefined\">\n {{column.title}}\n </th>\n </ng-container>\n\n <ng-container *ngIf=\"getColumnRenderer(column) as columnRenderer\">\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Default\">\n <ng-container *matCellDef=\"let record\">\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlDefault\" [ngClass]=\"getCellClass(record, column)\">\n {{getValue(record, column)}}\n </td>\n <ng-template #isAnUrlDefault>\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\n <img igoImageError *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\n <ng-template #notImg><span>{{\n 'igo.common.entity-table.targetHtmlUrl' | translate }}\n </span></ng-template>\n </a>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.HTML\">\n <ng-container *matCellDef=\"let record\">\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlHTML\" [ngClass]=\"getCellClass(record, column)\"\n [innerHTML]=\"getValue(record, column)\">\n </td>\n <ng-template #isAnUrlHTML>\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\n <img igoImageError *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\n <ng-template #notImg><span>{{ 'igo.geo.targetHtmlUrl' |\n translate }} </span></ng-template>\n </a>\n </td>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.UnsanitizedHTML\">\n <ng-container *matCellDef=\"let record\">\n <td mat-cell class=\"mat-cell-text edition\" [formGroup]=\"formGroup\" *ngIf=\"isEdition(record);else isUnsanitizedHTML\"\n [ngClass]=\"getCellClass(record, column)\">\n <div class=\"date-picker\" *ngIf=\"column.type === 'date'\">\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n <input matInput [matDatepicker]=\"picker\" [formControlName]=\"column.name\" value=\"{{getValue(record, column)}}\"\n (dateChange)=\"onDateChange(column.name, record, $event)\">\n <mat-datepicker #picker></mat-datepicker>\n </div>\n <input matInput type=\"time\" *ngIf=\"column.type === 'time'\" [formControlName]=\"column.name\" step=\"900\" (focus)=\"column.onFocus($event)\"\n (keypress)=\"column.onChange($event)\" (blur)=\"column.onBlur($event)\">\n <input matInput type=\"number\" class=\"class_number_edition\" *ngIf=\"column.type === 'number'\" [formControlName]=\"column.name\" step=\"{{column.step}}\"\n value=\"{{getValue(record,column)}}\" (input)=\"onValueChange(column.name, record, $event)\"\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\"\n min=\"{{getValidationAttributeValue(column, 'minValue')}}\" max=\"{{getValidationAttributeValue(column, 'maxValue')}}\">\n <input matInput type=\"text\" *ngIf=\"!column.type || column.type ==='string'\" [formControlName]=\"column.name\"\n value=\"{{getValue(record, column)}}\" (input)=\"onValueChange(column.name, record, $event)\"\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\">\n <mat-checkbox *ngIf=\"column.type === 'boolean'\" [formControlName]=\"column.name\" [checked]=\"getValue(record,column)\"\n (change)=\"onBooleanValueChange(column.name, record,$event)\"></mat-checkbox>\n <mat-select *ngIf=\"column.type === 'list'\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\"\n [formControlName]=\"column.name\" [multiple]=\"column.multiple\" (selectionChange)=\"onSelectValueChange(column.name, record, $event)\"\n [value]=\"getValue(record, column)\">\n <mat-option *ngFor=\"let option of column.domainValues\" [value]=\"option.id\" [disabled]=\"option.disabled\">\n {{ option.value }}\n </mat-option>\n </mat-select>\n <input matInput type=\"text\" [formControlName]=\"column.name\" *ngIf=\"column.type === 'autocomplete'\" [matAutocomplete]=\"auto\"\n required=\"{{getValidationAttributeValue(column, 'mandatory')}}\" value=\"{{getValue(record, column)}}\"\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\">\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteValueChange(column, record, $event)\"\n panelWidth=\"430px\">\n <mat-option *ngFor=\"let option of filteredOptions[column.name] | async\"\n [value]=\"option.id\">\n {{ option.value }}\n </mat-option>\n </mat-autocomplete>\n </td>\n <ng-template #isUnsanitizedHTML>\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlUnsanitizedHTML\" [ngClass]=\"getCellClass(record, column)\"\n [innerHTML]=\"getValue(record, column) | sanitizeHtml\">\n </td>\n <ng-template #isAnUrlUnsanitizedHTML>\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\n <img igoImageError *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\n <ng-template #notImg><span>{{ 'igo.geo.targetHtmlUrl' | translate }} </span></ng-template>\n </a>\n </td>\n </ng-template>\n </ng-template>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Icon\">\n <td mat-cell *matCellDef=\"let record\" class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\n <mat-icon *ngIf=\"column.onClick\" svgIcon=\"{{getValue(record, column)|| column.icon}}\" (click)=\"column.onClick($event)\"></mat-icon>\n <mat-icon *ngIf=\"!column.onClick\" svgIcon=\"{{getValue(record, column)|| column.icon}}\"></mat-icon>\n </td>\n </ng-container>\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.ButtonGroup\">\n <ng-container *matCellDef=\"let record\">\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\n <span *ngFor=\"let button of getValue(record, column)\">\n <ng-container *ngIf=\"isEdition(record) === button.editMode || button.editMode === undefined\">\n <button *ngIf=\"button.style === 'mat-icon-button'\" igoStopPropagation mat-icon-button\n [color]=\"button.color\" (mousedown)=\"onButtonClick(button.click, record)\" [disabled]=\"button.disabled\">\n <mat-icon svgIcon=\"{{button.icon}}\"></mat-icon>\n </button>\n <button *ngIf=\"button.style !== 'mat-icon-button'\" igoStopPropagation mat-mini-fab\n [color]=\"button.color\" (mousedown)=\"onButtonClick(button.click, record)\" [disabled]=\"button.disabled\">\n <mat-icon svgIcon=\"{{button.icon}}\"></mat-icon>\n </button>\n </ng-container>\n </span>\n </td>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"headers; sticky: fixedHeader\" [ngClass]=\"getHeaderClass()\">\n </tr>\n <tr mat-row igoEntityTableRow *matRowDef=\"let record; columns: headers;\" [scrollBehavior]=\"scrollBehavior\" [ngClass]=\"getRowClass(record)\" [selection]=\"selection\" [selected]=\"rowIsSelected(record)\" (select)=\"onRowSelect(record)\" (click)=\"onRowClick(record)\">\n </tr>\n </table>\n <igo-entity-table-paginator *ngIf=\"withPaginator\" [store]=\"store\" [paginatorOptions]=\"paginatorOptions\" [entitySortChange$]=\"entitySortChange$\" (paginatorChange)=\"paginatorChange($event)\">\n </igo-entity-table-paginator>\n</div>", styles: [":host{width:100%;height:100%;display:block}:host.table-compact tr.mat-header-row,:host.table-compact ::ng-deep .mat-checkbox .mat-checkbox-ripple{height:36px}:host.table-compact tr.mat-row,:host.table-compact ::ng-deep .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text{overflow:hidden;word-wrap:break-word}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0 3px}entity-table table.igo-entity-table-with-selection tr:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table button{margin:7px}.class_hidden{visibility:hidden}.class_display_none{display:none}.class_boolean,.class_icon,.class_number{text-align:center;padding-right:35px!important}.class_sting,.class_text,.class_number_edition{text-align:left}td.edition{background:rgba(166,166,166,.2)}input{border-bottom:1px solid darkgrey}\n"] }]
1338
+ args: [{ selector: 'igo-entity-table', changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MatFormFieldControl, useExisting: EntityTableComponent }], template: "<div class=\"table-container\" [ngStyle]=\"{'height': tableHeight}\">\r\n <table mat-table matSort [ngClass]=\"getTableClass()\" [dataSource]=\"dataSource\" [trackBy]=\"getTrackByFunction()\" (matSortChange)=\"onSort($event)\">\r\n <ng-container matColumnDef=\"selectionCheckbox\" class=\"mat-cell-checkbox\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <ng-container *ngIf=\"selectMany\">\r\n <ng-container *ngIf=\"selectionState$ | async as selectionState\">\r\n <mat-checkbox (change)=\"onToggleRows($event.checked)\" [checked]=\"selectionState === entityTableSelectionState.All\"\r\n [indeterminate]=\"selectionState === entityTableSelectionState.Some\">\r\n </mat-checkbox>\r\n </ng-container>\r\n </ng-container>\r\n </th>\r\n <td mat-cell *matCellDef=\"let record\">\r\n <mat-checkbox (mousedown)=\"$event.shiftKey ? $event.preventDefault() : null\" (click)=\"$event.shiftKey ?\r\n onShiftToggleRow(!rowIsSelected(record), record, $event) : $event.stopPropagation()\" (change)=\"onToggleRow($event.checked,record)\"\r\n [checked]=\"rowIsSelected(record)\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container [matColumnDef]=\"column.name\" *ngFor=\"let column of template.columns\">\r\n <ng-container *ngIf=\"columnIsSortable(column)\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header [matTooltip]=\"column.tooltip ? column.tooltip : undefined\">\r\n {{column.title}}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!columnIsSortable(column)\">\r\n <th mat-header-cell *matHeaderCellDef [matTooltip]=\"column.tooltip ? column.tooltip : undefined\">\r\n {{column.title}}\r\n </th>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"getColumnRenderer(column) as columnRenderer\">\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Default\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlDefault\" [ngClass]=\"getCellClass(record, column)\">\r\n {{getValue(record, column)}}\r\n </td>\r\n <ng-template #isAnUrlDefault>\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\r\n <img igoImageError *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\r\n <ng-template #notImg><span>{{\r\n 'igo.common.entity-table.targetHtmlUrl' | translate }}\r\n </span></ng-template>\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.HTML\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlHTML\" [ngClass]=\"getCellClass(record, column)\"\r\n [innerHTML]=\"getValue(record, column)\">\r\n </td>\r\n <ng-template #isAnUrlHTML>\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\r\n <img igoImageError *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\r\n <ng-template #notImg><span>{{ 'igo.geo.targetHtmlUrl' |\r\n translate }} </span></ng-template>\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.UnsanitizedHTML\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text edition\" [formGroup]=\"formGroup\" *ngIf=\"isEdition(record);else isUnsanitizedHTML\"\r\n [ngClass]=\"getCellClass(record, column)\">\r\n <div class=\"date-picker\" *ngIf=\"column.type === 'date'\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <input matInput [matDatepicker]=\"picker\" [formControlName]=\"column.name\" value=\"{{getValue(record, column)}}\"\r\n (dateChange)=\"onDateChange(column.name, record, $event)\">\r\n <mat-datepicker #picker></mat-datepicker>\r\n </div>\r\n <input matInput type=\"time\" *ngIf=\"column.type === 'time'\" [formControlName]=\"column.name\" step=\"900\" (focus)=\"column.onFocus($event)\"\r\n (keypress)=\"column.onChange($event)\" (blur)=\"column.onBlur($event)\">\r\n <input matInput type=\"number\" class=\"class_number_edition\" *ngIf=\"column.type === 'number'\" [formControlName]=\"column.name\" step=\"{{column.step}}\"\r\n value=\"{{getValue(record,column)}}\" (input)=\"onValueChange(column.name, record, $event)\"\r\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\"\r\n min=\"{{getValidationAttributeValue(column, 'minValue')}}\" max=\"{{getValidationAttributeValue(column, 'maxValue')}}\">\r\n <input matInput type=\"text\" *ngIf=\"!column.type || column.type ==='string'\" [formControlName]=\"column.name\"\r\n value=\"{{getValue(record, column)}}\" (input)=\"onValueChange(column.name, record, $event)\"\r\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\">\r\n <mat-checkbox *ngIf=\"column.type === 'boolean'\" [formControlName]=\"column.name\" [checked]=\"getValue(record,column)\"\r\n (change)=\"onBooleanValueChange(column.name, record,$event)\"></mat-checkbox>\r\n <mat-select *ngIf=\"column.type === 'list'\" required=\"{{getValidationAttributeValue(column, 'mandatory')}}\"\r\n [formControlName]=\"column.name\" [multiple]=\"column.multiple\" (selectionChange)=\"onSelectValueChange(column.name, record, $event)\"\r\n [value]=\"getValue(record, column)\">\r\n <mat-option *ngFor=\"let option of column.domainValues\" [value]=\"option.id\" [disabled]=\"option.disabled\">\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-select>\r\n <input matInput type=\"text\" [formControlName]=\"column.name\" *ngIf=\"column.type === 'autocomplete'\" [matAutocomplete]=\"auto\"\r\n required=\"{{getValidationAttributeValue(column, 'mandatory')}}\" value=\"{{getValue(record, column)}}\"\r\n readonly=\"{{getValidationAttributeValue(column, 'readonly')}}\">\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteValueChange(column, record, $event)\"\r\n panelWidth=\"430px\">\r\n <mat-option *ngFor=\"let option of filteredOptions[column.name] | async\"\r\n [value]=\"option.id\">\r\n {{ option.value }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n </td>\r\n <ng-template #isUnsanitizedHTML>\r\n <td mat-cell class=\"mat-cell-text\" *ngIf=\"!isUrl(getValue(record, column));else isAnUrlUnsanitizedHTML\" [ngClass]=\"getCellClass(record, column)\"\r\n [innerHTML]=\"getValue(record, column) | sanitizeHtml\">\r\n </td>\r\n <ng-template #isAnUrlUnsanitizedHTML>\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <a href=\"{{getValue(record, column)}}\" target='_blank' rel=\"noopener noreferrer\" (click)=\"$event.stopPropagation()\">\r\n <img igoImageError *ngIf=\"isImg(getValue(record, column));else notImg\" src=\"{{(getValue(record, column) | secureImage) | async}}\" width=\"50\" heigth=\"auto\">\r\n <ng-template #notImg><span>{{ 'igo.geo.targetHtmlUrl' | translate }} </span></ng-template>\r\n </a>\r\n </td>\r\n </ng-template>\r\n </ng-template>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.Icon\">\r\n <td mat-cell *matCellDef=\"let record\" class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <mat-icon *ngIf=\"column.onClick\" svgIcon=\"{{getValue(record, column)|| column.icon}}\" (click)=\"column.onClick($event)\"></mat-icon>\r\n <mat-icon *ngIf=\"!column.onClick\" svgIcon=\"{{getValue(record, column)|| column.icon}}\"></mat-icon>\r\n </td>\r\n </ng-container>\r\n <ng-container *ngIf=\"columnRenderer === entityTableColumnRenderer.ButtonGroup\">\r\n <ng-container *matCellDef=\"let record\">\r\n <td mat-cell class=\"mat-cell-text\" [ngClass]=\"getCellClass(record, column)\">\r\n <span *ngFor=\"let button of getValue(record, column)\">\r\n <ng-container *ngIf=\"isEdition(record) === button.editMode || button.editMode === undefined\">\r\n <button *ngIf=\"button.style === 'mat-icon-button'\" igoStopPropagation mat-icon-button\r\n [color]=\"button.color\" (mousedown)=\"onButtonClick(button.click, record)\" [disabled]=\"button.disabled\">\r\n <mat-icon svgIcon=\"{{button.icon}}\"></mat-icon>\r\n </button>\r\n <button *ngIf=\"button.style !== 'mat-icon-button'\" igoStopPropagation mat-mini-fab\r\n [color]=\"button.color\" (mousedown)=\"onButtonClick(button.click, record)\" [disabled]=\"button.disabled\">\r\n <mat-icon svgIcon=\"{{button.icon}}\"></mat-icon>\r\n </button>\r\n </ng-container>\r\n </span>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"headers; sticky: fixedHeader\" [ngClass]=\"getHeaderClass()\">\r\n </tr>\r\n <tr mat-row igoEntityTableRow *matRowDef=\"let record; columns: headers;\" [scrollBehavior]=\"scrollBehavior\" [ngClass]=\"getRowClass(record)\" [selection]=\"selection\" [selected]=\"rowIsSelected(record)\" (select)=\"onRowSelect(record)\" (click)=\"onRowClick(record)\">\r\n </tr>\r\n </table>\r\n <igo-entity-table-paginator *ngIf=\"withPaginator\" [store]=\"store\" [paginatorOptions]=\"paginatorOptions\" [entitySortChange$]=\"entitySortChange$\" (paginatorChange)=\"paginatorChange($event)\">\r\n </igo-entity-table-paginator>\r\n</div>", styles: [":host{width:100%;height:100%;display:block}:host.table-compact tr.mat-header-row,:host.table-compact ::ng-deep .mat-checkbox .mat-checkbox-ripple{height:36px}:host.table-compact tr.mat-row,:host.table-compact ::ng-deep .mat-checkbox .mat-checkbox-ripple{height:28px}.table-container{display:flex;flex-direction:column;height:100%;overflow:auto;flex:1 1 auto}.mat-cell-text{overflow:hidden;word-wrap:break-word}th.mat-header-cell,td.mat-cell,td.mat-footer-cell{padding:0 3px}entity-table table.igo-entity-table-with-selection tr:hover{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd;cursor:pointer}table button{margin:7px}.class_hidden{visibility:hidden}.class_display_none{display:none}.class_boolean,.class_icon,.class_number{text-align:center;padding-right:35px!important}.class_sting,.class_text,.class_number_edition{text-align:left}td.edition{background:rgba(166,166,166,.2)}input{border-bottom:1px solid darkgrey}\n"] }]
1339
1339
  }], function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.UntypedFormBuilder }, { type: i2.FocusMonitor }, { type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
1340
1340
  type: Optional
1341
1341
  }, {
@@ -1365,4 +1365,4 @@ EntityTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Entity
1365
1365
  }], entitySortChange: [{
1366
1366
  type: Output
1367
1367
  }] }); })();
1368
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBT3ZCLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFPTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUMxQixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQTBELGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHMUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ2hDekIsNkJBQWdFO0lBQzVELHdDQUNvRTtJQUR0RCw4TUFBVSxlQUFBLG1DQUE0QixDQUFBLElBQUM7SUFFckQsaUJBQWU7SUFDbkIsMEJBQWU7Ozs7SUFIMkMsZUFBNEQ7SUFBNUQsb0ZBQTRELDhFQUFBOzs7SUFGMUgsNkJBQWlDO0lBQzdC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QztRQUM1SSxnQ0FBeUU7UUFDckUsbUVBUUs7UUFDTCxtRUFLSztRQUNULDBCQUFlO1FBRWYsdUZBOEhlO1FBRWYsbUVBQ0s7UUFDTCxtRUFDSztRQUNULGlCQUFRO1FBQ1IsbUhBQzZCO1FBQy9CLGlCQUFNOztRQTNKdUIscUVBQW1DO1FBQ3JDLGVBQTJCO1FBQTNCLDZDQUEyQiw4QkFBQSxxQ0FBQTtRQW1CYyxlQUFtQjtRQUFuQiw4Q0FBbUI7UUFnSTdELGVBQTBCO1FBQTFCLDZDQUEwQiwwQ0FBQTtRQUVRLGVBQWlCO1FBQWpCLDhDQUFpQjtRQUc5QyxlQUFtQjtRQUFuQix3Q0FBbUI7O3VGRDNHckMsb0JBQW9CO2NBUGhDLFNBQVM7MkJBQ0Usa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU0sYUFDcEMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLHNCQUFzQixFQUFFLENBQUM7O3NCQWlLN0UsUUFBUTs7c0JBQUksSUFBSTs7c0JBQ2hCLFFBQVE7O3NCQUNSLFFBQVE7a0ZBbkhGLEtBQUs7a0JBQWIsS0FBSztZQUtPLFNBQVM7a0JBQXJCLEtBQUs7WUFhRyxRQUFRO2tCQUFoQixLQUFLO1lBTU4sY0FBYztrQkFEYixLQUFLO1lBT04sY0FBYztrQkFEYixLQUFLO1lBT04sYUFBYTtrQkFEWixLQUFLO1lBT04sZ0JBQWdCO2tCQURmLEtBQUs7WUFNSSxXQUFXO2tCQUFwQixNQUFNO1lBS0csa0JBQWtCO2tCQUEzQixNQUFNO1lBT0csZ0JBQWdCO2tCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgRWxlbWVudFJlZixcbiAgT3B0aW9uYWwsXG4gIFNlbGZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIEVudGl0eUtleSxcbiAgRW50aXR5UmVjb3JkLFxuICBFbnRpdHlTdGF0ZSxcbiAgRW50aXR5U3RvcmUsXG4gIEVudGl0eVRhYmxlVGVtcGxhdGUsXG4gIEVudGl0eVRhYmxlQ29sdW1uLFxuICBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLFxuICBFbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLFxuICBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yXG59IGZyb20gJy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBNYXRQYWdpbmF0b3IgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zIH0gZnJvbSAnLi4vZW50aXR5LXRhYmxlLXBhZ2luYXRvci9lbnRpdHktdGFibGUtcGFnaW5hdG9yLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUJ1aWxkZXIsIE5nQ29udHJvbCwgTmdGb3JtLCBGb3JtQ29udHJvbE5hbWUsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciwgRXJyb3JTdGF0ZU1hdGNoZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgbW9tZW50IH0gZnJvbSAnbW9tZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWVudGl0eS10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnRpdHktdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9lbnRpdHktdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCwgdXNlRXhpc3Rpbmc6IEVudGl0eVRhYmxlQ29tcG9uZW50IH1dXG59KVxuZXhwb3J0IGNsYXNzIEVudGl0eVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgZW50aXR5U29ydENoYW5nZSQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIHB1YmxpYyBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XG5cbiAgcHVibGljIGZpbHRlcmVkT3B0aW9ucyA9IHt9O1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbHVtbiByZW5kZXJlciB0eXBlc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIgPSBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIHNlbGVjdGlvbidzIHN0YXRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSA9IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIHNlbGVjdGlvbixzIHN0YXRlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVhZG9ubHkgc2VsZWN0aW9uU3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8RW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgLyoqXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgc3RvcmUncyBzZWxlY3Rpb25cbiAgICovXG4gIHByaXZhdGUgc2VsZWN0aW9uJCQ6IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogU3Vic2NyaXB0aW9uIHRvIHRoZSBkYXRhU291cmNlXG4gICAqL1xuICBwcml2YXRlIGRhdGFTb3VyY2UkJDogU3Vic2NyaXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbGFzdCByZWNvcmQgY2hlY2tlZC4gVXNlZnVsIGZvciBzZWxlY3RpbmdcbiAgICogbXVsdGlwbGUgcmVjb3JkcyBieSBob2xkaW5nIHRoZSBzaGlmdCBrZXkgYW5kIGNoZWNraW5nXG4gICAqIGNoZWNrYm94ZXMuXG4gICAqL1xuICBwcml2YXRlIGxhc3RSZWNvcmRDaGVja2VkS2V5OiBFbnRpdHlLZXk7XG5cbiAgLyoqXG4gICAqIEVudGl0eSBzdG9yZVxuICAgKi9cbiAgQElucHV0KCkgc3RvcmU6IEVudGl0eVN0b3JlPG9iamVjdD47XG5cbiAgLyoqXG4gICAqIFRhYmxlIHBhZ2luYXRvclxuICAgKi9cbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XG4gICAgdGhpcy5fcGFnaW5hdG9yID0gdmFsdWU7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhZ2luYXRvcigpOiBNYXRQYWdpbmF0b3Ige1xuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3I7XG4gIH1cbiAgcHJpdmF0ZSBfcGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgLyoqXG4gICAqIFRhYmxlIHRlbXBsYXRlXG4gICAqL1xuICBASW5wdXQoKSB0ZW1wbGF0ZTogRW50aXR5VGFibGVUZW1wbGF0ZTtcblxuICAvKipcbiAgICogU2Nyb2xsIGJlaGF2aW9yIG9uIHNlbGVjdGlvblxuICAgKi9cbiAgQElucHV0KClcbiAgc2Nyb2xsQmVoYXZpb3I6IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IgPSBFbnRpdHlUYWJsZVNjcm9sbEJlaGF2aW9yLkF1dG87XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgbnVsbHMgc2hvdWxkIGJlIGZpcnN0IHdoZW4gc29ydGluZ1xuICAgKi9cbiAgQElucHV0KClcbiAgc29ydE51bGxzRmlyc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogU2hvdyB0aGUgdGFibGUgcGFnaW5hdG9yIG9yIG5vdC4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHdpdGhQYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogUGFnaW5hdG9yIG9wdGlvbnNcbiAgICovXG4gIEBJbnB1dCgpXG4gIHBhZ2luYXRvck9wdGlvbnM6IEVudGl0eVRhYmxlUGFnaW5hdG9yT3B0aW9ucztcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBjbGlja2VkXG4gICAqL1xuICBAT3V0cHV0KCkgZW50aXR5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBzZWxlY3RlZFxuICAgKi9cbiAgQE91dHB1dCgpIGVudGl0eVNlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGFkZGVkOiBvYmplY3RbXTtcbiAgfT4oKTtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSB0YWJsZSBzb3J0IGlzIGNoYW5nZWQuXG4gICAqL1xuICBAT3V0cHV0KCkgZW50aXR5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPHtjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcih1bmRlZmluZWQpO1xuXG4gIC8qKlxuICAgKiBUYWJsZSBoZWFkZXJzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IGhlYWRlcnMoKTogc3RyaW5nW10ge1xuICAgIGxldCBjb2x1bW5zID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXG4gICAgICAuZmlsdGVyKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4udmlzaWJsZSAhPT0gZmFsc2UpXG4gICAgICAubWFwKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XG5cbiAgICBpZiAodGhpcy5zZWxlY3Rpb25DaGVja2JveCA9PT0gdHJ1ZSkge1xuICAgICAgY29sdW1ucyA9IFsnc2VsZWN0aW9uQ2hlY2tib3gnXS5jb25jYXQoY29sdW1ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbnM7XG4gIH1cblxuICAvKipcbiAgICogRGF0YSBzb3VyY2UgY29uc3VtYWJsZSBieSB0aGUgdW5kZXJseWluZyBtYXRlcmlhbCB0YWJsZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPG9iamVjdD4oKTtcblxuICAvKipcbiAgICogV2hldGhlciBzZWxlY3Rpb24gaXMgc3VwcG9ydGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IHNlbGVjdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uIHx8IGZhbHNlOyB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBzZWxlY3Rpb24gY2hlY2tib3ggc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldCBzZWxlY3Rpb25DaGVja2JveCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0aW9uQ2hlY2tib3ggfHwgZmFsc2U7IH1cblxuICAvKipcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IHNlbGVjdE1hbnkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLnNlbGVjdE1hbnkgfHwgZmFsc2U7IH1cblxuICAvKipcbiAgICogV2hldGhlciBzZWxlY3Rpb24gbWFueSBlbnRpdGllcyBzaG91bGQgZWIgc3VwcG9ydGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0IGZpeGVkSGVhZGVyKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlciA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IHRoaXMudGVtcGxhdGUuZml4ZWRIZWFkZXI7IH1cblxuICBnZXQgdGFibGVIZWlnaHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUudGFibGVIZWlnaHQgPyB0aGlzLnRlbXBsYXRlLnRhYmxlSGVpZ2h0IDogJ2F1dG8nOyB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJvdGVjdGVkIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX3BhcmVudEZvcm06IE5nRm9ybSxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX2NvbnRyb2xOYW1lOiBGb3JtQ29udHJvbE5hbWUsXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxuICAgIHByaXZhdGUgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPERhdGU+XG4gICkge1xuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKCdmci1DQScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrIHRoZSBzZWxlY3Rpb24gc3RhdGUgdG8gcHJvcGVybHkgZGlzcGxheSB0aGUgc2VsZWN0aW9uIGNoZWNrYm94ZXNcbiAgICogQGludGVybmFsXG4gICAqL1xuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmhhbmRsZURhdGFzb3VyY2UoKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgY29uc3Qgc3RvcmUgPSBjaGFuZ2VzLnN0b3JlO1xuICAgIGlmIChzdG9yZSAmJiBzdG9yZS5jdXJyZW50VmFsdWUgIT09IHN0b3JlLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRleHQgb3IgbnVtYmVyIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcbiAgICovXG4gIG9uVmFsdWVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYm9vbGVhbiB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXG4gICAqL1xuICBvbkJvb2xlYW5WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBldmVudC5jaGVja2VkO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3Mgc2VsZWN0IHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcbiAgICovXG4gIG9uU2VsZWN0VmFsdWVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQudmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhdXRvY29tcGxldGUgdmFsdWUgY2hhbmdlIChlZGl0aW9uKVxuICAgKi9cbiAgb25BdXRvY29tcGxldGVWYWx1ZUNoYW5nZShjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xuICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShldmVudC5vcHRpb24udmlld1ZhbHVlKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKTtcbiAgICByZWNvcmQuZW50aXR5LnByb3BlcnRpZXNba2V5XSA9IGV2ZW50Lm9wdGlvbi52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGRhdGUgdmFsdWUgY2hhbmdlIChlZGl0aW9uKVxuICAgKi9cbiAgb25EYXRlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xuICAgIGNvbnN0IGZvcm1hdCA9IFwiWVlZWS1NTS1ERFwiO1xuICAgIGNvbnN0IHZhbHVlID0gbW9tZW50KGV2ZW50LnZhbHVlKS5mb3JtYXQoZm9ybWF0KTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbik7XG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgZWRpdGlvbiBtb2RlIGZvciBvbmUgcm93XG4gICAqIE1vcmUgdGhhbiBvbmUgcm93IGNhbiBiZSBlZGl0ZWQgYXQgdGhlIHNhbWUgdGltZVxuICAgKi9cbiAgcHJpdmF0ZSBlbmFibGVFZGl0KHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4pIHtcbiAgICBjb25zdCBpdGVtID0gcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzIHx8IHJlY29yZC5lbnRpdHk7XG4gICAgdGhpcy50ZW1wbGF0ZS5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgIGNvbHVtbi50aXRsZSA9IGNvbHVtbi52YWxpZGF0aW9uPy5tYW5kYXRvcnkgJiYgIWNvbHVtbi50aXRsZS5pbmNsdWRlcygnKicpID8gY29sdW1uLnRpdGxlICsgJyAqJyA6IGNvbHVtbi50aXRsZTtcblxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSk7XG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICBpZiAoIWl0ZW1ba2V5XSB8fCBpdGVtW2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICBpdGVtW2tleV0gPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbVtrZXldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGl0ZW1ba2V5XSA9IEpTT04ucGFyc2UoaXRlbVtrZXldLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgICAgICBpdGVtW2tleV1cbiAgICAgICAgKSk7XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcpIHtcbiAgICAgICAgaWYgKGNvbHVtbi5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgICAgICAgIFtpdGVtW2tleV1dXG4gICAgICAgICAgKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICAgICAgaXRlbVtrZXldXG4gICAgICAgICAgKSk7XG5cbiAgICAgICAgICB0eXBlb2YgaXRlbVtrZXldID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUocGFyc2VJbnQoaXRlbVtrZXldKSkgOlxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGl0ZW1ba2V5XSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdhdXRvY29tcGxldGUnKSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgICAgICBpdGVtW2tleV1cbiAgICAgICAgKSk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbY29sdW1uLm5hbWVdID0gbmV3IE9ic2VydmFibGU8YW55W10+KCk7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW2NvbHVtbi5uYW1lXSA9XG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLmRvbWFpblZhbHVlcz8uZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB2YWx1ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJykgOiAnJztcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmVOYW1lTm9ybWFsaXplZCA9IG9wdGlvbi52YWx1ZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmVOYW1lTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuXG4gICAgICAgIGxldCBmb3JtQ29udHJvbFZhbHVlID0gaXRlbVtrZXldO1xuICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICBpZiAodHlwZW9mIGZvcm1Db250cm9sVmFsdWUgPT09ICdzdHJpbmcnICYmIC9eXFxkKyQvLnRlc3QoZm9ybUNvbnRyb2xWYWx1ZSkpIHtcbiAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWUgPSBwYXJzZUludChmb3JtQ29udHJvbFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gZm9ybUNvbnRyb2xWYWx1ZSB8fCBvcHRpb24uaWQgPT09IGZvcm1Db250cm9sVmFsdWUpIHtcbiAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWUgPSBvcHRpb24udmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoZm9ybUNvbnRyb2xWYWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpIHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoXG4gICAgICAgICAgICBlbnRpdHk/LnByb3BlcnRpZXNbdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubGlua0NvbHVtbkZvcmNlKV1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgaWYgKGNvbHVtbi52aXNpYmxlKSB7XG4gICAgICAgICAgaWYgKGl0ZW1ba2V5XSkge1xuICAgICAgICAgICAgbGV0IGRhdGUgPSBtb21lbnQoaXRlbVtrZXldKTtcbiAgICAgICAgICAgIGl0ZW1ba2V5XSA9IGRhdGUudXRjKCkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXG4gICAgICAgICAgICAgIGl0ZW1ba2V5XVxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0tleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xuICAgICAgICAgICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW25ld0tleV0gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgICAgICBpdGVtW2tleV1cbiAgICAgICAgKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0gJiYgdGhpcy5nZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKSkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uZGlzYWJsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVEYXRhc291cmNlKCkge1xuICAgIHRoaXMudW5zdWJzY3JpYmVTdG9yZSgpO1xuICAgIHRoaXMuc2VsZWN0aW9uJCQgPSB0aGlzLnN0b3JlLnN0YXRlVmlld1xuICAgICAgLm1hbnlCeSQoKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHJlY29yZC5zdGF0ZS5zZWxlY3RlZCA9PT0gdHJ1ZSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxvYmplY3Q+W10pID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3RTZWxlY3RlZCA9IHJlY29yZHNbMF07XG4gICAgICAgIGNvbnN0IGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmFsbCgpLmluZGV4T2YoZmlyc3RTZWxlY3RlZCk7XG4gICAgICAgIGNvbnN0IHBhZ2VNYXggPSB0aGlzLnBhZ2luYXRvciA/IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplICogKHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCArIDEpIDogMDtcbiAgICAgICAgY29uc3QgcGFnZU1pbiA9IHRoaXMucGFnaW5hdG9yID8gcGFnZU1heCAtIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplIDogMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wYWdpbmF0b3IgJiZcbiAgICAgICAgICAoZmlyc3RTZWxlY3RlZFN0YXRldmlld1Bvc2l0aW9uIDwgcGFnZU1pbiB8fFxuICAgICAgICAgIGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA+PSBwYWdlTWF4KSkge1xuICAgICAgICAgIGNvbnN0IHBhZ2VUb1JlYWNoID0gTWF0aC5mbG9vcihmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gLyB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSk7XG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvci5wYWdlSW5kZXggPSBwYWdlVG9SZWFjaDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXRlJC5uZXh0KHRoaXMuY29tcHV0ZVNlbGVjdGlvblN0YXRlKHJlY29yZHMpKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuZGF0YVNvdXJjZSQkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsJCgpLnN1YnNjcmliZSgoYWxsKSA9PiB7XG4gICAgICBpZiAoYWxsWzBdKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlRWRpdChhbGxbMF0pO1xuICAgICAgfVxuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBhbGw7XG4gICAgfSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBVbmJpbmQgdGhlIHN0b3JlIHdhdGNoZXJcbiAgICogQGludGVybmFsXG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlU3RvcmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmVTdG9yZSgpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24kJCkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24kJC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhU291cmNlJCQpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSQkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrYnkgZnVuY3Rpb25cbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHBhcmFtIGluZGV4IFJlY29yZCBpbmRleFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFRyYWNrQnlGdW5jdGlvbigpIHtcbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdCwgRW50aXR5U3RhdGU+KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb3JkLnJlZjtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgYSByZWZyZXNoIG9mIHRocmUgdGFibGUuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuXG4gICAqIHRoZSBkYXRhIHNvdXJjZSBkb2Vzbid0IGVtaXQgYSBuZXcgdmFsdWUgYnV0IGZvciBzb21lIHJlYXNvblxuICAgKiB0aGUgcmVjb3JkcyBuZWVkIGFuIHVwZGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWZyZXNoKCkge1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcGFnaW5hdG9yQ2hhbmdlKGV2ZW50OiBNYXRQYWdpbmF0b3IpIHtcbiAgICB0aGlzLnBhZ2luYXRvciA9IGV2ZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIE9uIHNvcnQsIHNvcnQgdGhlIHN0b3JlXG4gICAqIEBwYXJhbSBldmVudCBTb3J0IGV2ZW50XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Tb3J0KGV2ZW50OiB7YWN0aXZlOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nfSkge1xuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGV2ZW50LmRpcmVjdGlvbjtcbiAgICBjb25zdCBjb2x1bW4gPSB0aGlzLnRlbXBsYXRlLmNvbHVtbnNcbiAgICAgIC5maW5kKChjOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gYy5uYW1lID09PSBldmVudC5hY3RpdmUpO1xuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2FzYycgfHwgZGlyZWN0aW9uID09PSAnZGVzYycpIHtcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQoe1xuICAgICAgICB2YWx1ZUFjY2Vzc29yOiAocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gdGhpcy5nZXRWYWx1ZShyZWNvcmQsIGNvbHVtbiksXG4gICAgICAgIGRpcmVjdGlvbixcbiAgICAgICAgbnVsbHNGaXJzdDogdGhpcy5zb3J0TnVsbHNGaXJzdFxuICAgICAgfSk7XG4gICAgICB0aGlzLmVudGl0eVNvcnRDaGFuZ2UuZW1pdCh7Y29sdW1uLCBkaXJlY3Rpb259KTtcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZSQubmV4dCh0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdG9yZS5zdGF0ZVZpZXcuc29ydCh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyBjbGlja2VkLCBlbWl0IGFuIGV2ZW50XG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Sb3dDbGljayhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xuICAgIHRoaXMuZW50aXR5Q2xpY2suZW1pdChyZWNvcmQuZW50aXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyBzZWxlY3RlZCwgc2VsZWN0IGl0IGluIHRoZSBzdG9yZSBhbmQgZW1pdCBhbiBldmVudC4gRXZlbiBpZlxuICAgKiBcIm1hbnlcIiBpcyBzZXQgdG8gdHJ1ZSwgdGhpcyBtZXRob2QgYWx3YXlzIHNlbGVjdCBhIHNpbmdsZSwgZXhjbHVzaXZlIHJvdy4gU2VsZWN0aW5nXG4gICAqIG11bHRpcGxlIHJvd3Mgc2hvdWxkIGJlIGFjaGlldmVkIGJ5IHVzaW5nIHRoZSBjaGVja2JveGVzLlxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uUm93U2VsZWN0KHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxuXG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZShlbnRpdHksIHtzZWxlY3RlZDogdHJ1ZX0sIHRydWUpO1xuICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBbZW50aXR5XX0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdCBvciB1bnNlbGVjdCBhbGwgcm93cyBhdCBvbmNlLiBPbiBzZWxlY3QsIGVtaXQgYW4gZXZlbnQuXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgb25Ub2dnbGVSb3dzKHRvZ2dsZTogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG5cbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7c2VsZWN0ZWQ6IHRvZ2dsZX0pO1xuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGVudGl0aWVzID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXdcbiAgICAgICAgLmFsbCgpXG4gICAgICAgIC5tYXAoKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHJlY29yZC5lbnRpdHkpO1xuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdGllc119KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgdG9nZ2xlZCwgc2VsZWN0IG9yIHVuc2VsZWN0IGl0IGluIHRoZSBzdG9yZS4gT24gc2VsZWN0LFxuICAgKiBlbWl0IGFuIGV2ZW50LlxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uVG9nZ2xlUm93KHRvZ2dsZTogYm9vbGVhbiwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG5cbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xuICAgIGNvbnN0IGV4Y2x1c2l2ZSA9IHRvZ2dsZSA9PT0gdHJ1ZSAmJiAhdGhpcy5zZWxlY3RNYW55O1xuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlKGVudGl0eSwge3NlbGVjdGVkOiB0b2dnbGV9LCBleGNsdXNpdmUpO1xuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBbZW50aXR5XX0pO1xuICAgIH1cbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XG4gIH1cblxuICAvKipcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgdG9nZ2xlZCwgc2VsZWN0IG9yIHVuc2VsZWN0IGl0IGluIHRoZSBzdG9yZS4gT24gc2VsZWN0LFxuICAgKiBlbWl0IGFuIGV2ZW50LlxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG9uU2hpZnRUb2dnbGVSb3codG9nZ2xlOiBib29sZWFuLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBldmVudDogTW91c2VFdmVudCkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RNYW55ID09PSBmYWxzZSB8fCB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub25Ub2dnbGVSb3codG9nZ2xlLCByZWNvcmQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgYSB3b3JrYXJvdW5kIG1hdCBjaGVja2JveCB3cm9uZyBiZWhhdmlvclxuICAgIC8vIHdoZW4gdGhlIHNoaWZ0IGtleSBpcyBoZWxkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy82MjMyXG4gICAgY29uc3QgcmFuZ2UgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgICByYW5nZS5zZWxlY3ROb2RlKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5hZGRSYW5nZShyYW5nZSk7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCByZWNvcmRzID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsKCk7XG4gICAgY29uc3QgcmVjb3JkSW5kZXggPSByZWNvcmRzLmluZGV4T2YocmVjb3JkKTtcbiAgICBjb25zdCBsYXN0UmVjb3JkQ2hlY2tlZCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldCh0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5KTtcbiAgICBjb25zdCBsYXN0UmVjb3JkSW5kZXggPSByZWNvcmRzLmluZGV4T2YobGFzdFJlY29yZENoZWNrZWQpO1xuICAgIGNvbnN0IGluZGV4ZXMgPSBbcmVjb3JkSW5kZXgsIGxhc3RSZWNvcmRJbmRleF07XG4gICAgY29uc3Qgc2VsZWN0UmVjb3JkcyA9IHJlY29yZHMuc2xpY2UoTWF0aC5taW4oLi4uaW5kZXhlcyksIE1hdGgubWF4KC4uLmluZGV4ZXMpICsgMSk7XG5cbiAgICBjb25zdCBlbnRpdGllcyA9IHNlbGVjdFJlY29yZHMubWFwKChfcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gX3JlY29yZC5lbnRpdHkpO1xuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlTWFueShlbnRpdGllcywge3NlbGVjdGVkOiB0b2dnbGV9KTtcbiAgICBpZiAodG9nZ2xlID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogZW50aXRpZXN9KTtcbiAgICB9XG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHNlbGVjdGlvbiBzdGF0ZVxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGFsbCwgc29tZSBvciBubyByb3dzIGFyZSBzZWxlY3RlZFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZVNlbGVjdGlvblN0YXRlKHNlbGVjdGVkUmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSk6IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUge1xuICAgIGNvbnN0IHN0YXRlcyA9IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ291bnQgPSBzZWxlY3RlZFJlY29yZHMubGVuZ3RoO1xuICAgIHJldHVybiBzZWxlY3Rpb25Db3VudCA9PT0gMCA/XG4gICAgICBzdGF0ZXMuTm9uZSA6XG4gICAgICAoc2VsZWN0aW9uQ291bnQgPT09IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmNvdW50ID8gc3RhdGVzLkFsbCA6IHN0YXRlcy5Tb21lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXG4gICAqIEByZXR1cm5zIFRydWUgaWYgYSBjb2x1bW4gaXMgc29ydGFibGVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBjb2x1bW5Jc1NvcnRhYmxlKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4pOiBib29sZWFuIHtcbiAgICBsZXQgc29ydGFibGUgPSBjb2x1bW4uc29ydDtcbiAgICBpZiAoc29ydGFibGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgc29ydGFibGUgPSB0aGlzLnRlbXBsYXRlLnNvcnQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogdGhpcy50ZW1wbGF0ZS5zb3J0O1xuICAgIH1cbiAgICByZXR1cm4gc29ydGFibGU7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBhIHJvdyBpcyBzaG91bGQgYmUgc2VsZWN0ZWQgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgZW50aXR5IHN0YXRlXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXG4gICAqIEByZXR1cm5zIFRydWUgaWYgYSByb3cgc2hvdWxkIGJlIHNlbGVjdGVkXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcm93SXNTZWxlY3RlZChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RhdGUgPSByZWNvcmQuc3RhdGU7XG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkID8gc3RhdGUuc2VsZWN0ZWQgOiBmYWxzZTtcbiAgfVxuXG4gIGlzSW1nKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuaXNVcmwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBbJ2pwZycsICdwbmcnLCAnZ2lmJ10uaW5kZXhPZih2YWx1ZS5zcGxpdCgnLicpLnBvcCgpLnRvTG93ZXJDYXNlKCkpICE9PSAtMVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlzVXJsKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHZhbHVlLnNsaWNlKDAsIDgpID09PSAnaHR0cHM6Ly8nIHx8IHZhbHVlLnNsaWNlKDAsIDcpID09PSAnaHR0cDovLydcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIGFjY2VzcyBhbiBlbnRpdHkncyB2YWx1ZXNcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cbiAgICogQHJldHVybnMgQW55IHZhbHVlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0VmFsdWUocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IGFueSB7XG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKGNvbHVtbi52YWx1ZUFjY2Vzc29yICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjb2x1bW4udmFsdWVBY2Nlc3NvcihlbnRpdHksIHJlY29yZCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGUudmFsdWVBY2Nlc3NvcihlbnRpdHksIGNvbHVtbi5uYW1lLCByZWNvcmQpO1xuICAgIH1cbiAgICB2YWx1ZSA9IHRoaXMuc3RvcmUuZ2V0UHJvcGVydHkoZW50aXR5LCBjb2x1bW4ubmFtZSk7XG5cbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpe1xuICAgICAgICAgIHZhbHVlID0gQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkpe1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8gJyYjMTAwMDM7JyA6ICcnOyAvLyBjaGVjayBtYXJrXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xpc3QnICYmIHZhbHVlICYmIGNvbHVtbi5kb21haW5WYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHkgYXMgYW55O1xuICAgICAgaWYgKGNvbHVtbi5tdWx0aXBsZSkge1xuICAgICAgICBsZXQgbGlzdF9pZDtcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IGxpc3RfaWQgPSB2YWx1ZS5tYXRjaCgvW1xcdy4tXSsvZykubWFwKE51bWJlcikgOiBsaXN0X2lkID0gdmFsdWU7XG4gICAgICAgIGxldCBsaXN0X29wdGlvbiA9IFtdO1xuXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgIGlmIChsaXN0X2lkLmluY2x1ZGVzKG9wdGlvbi5pZCkpIHtcbiAgICAgICAgICAgIGlmIChyZWNvcmQuZWRpdGlvbikge1xuICAgICAgICAgICAgICBsaXN0X29wdGlvbi5wdXNoKG9wdGlvbi5pZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBsaXN0X29wdGlvbi5wdXNoKG9wdGlvbi52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmlzRWRpdGlvbihyZWNvcmQpID8gdmFsdWUgPSBsaXN0X2lkIDogdmFsdWUgPSBsaXN0X29wdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XG4gICAgICAgICAgdmFsdWUgPSBlbnRpdHk/LnByb3BlcnRpZXNbdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubGlua0NvbHVtbkZvcmNlKV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IHZhbHVlIHx8IG9wdGlvbi5pZCA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5pc0VkaXRpb24ocmVjb3JkKSA/IHZhbHVlID0gb3B0aW9uLmlkIDogdmFsdWUgPSBvcHRpb24udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJyAmJiB2YWx1ZSAmJiBjb2x1bW4uZG9tYWluVmFsdWVzKSB7XG4gICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcbiAgICAgIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XG4gICAgICAgIHZhbHVlID0gZW50aXR5Py5wcm9wZXJ0aWVzW3RoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSB8fCBvcHRpb24uaWQgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgaWYgKHRoaXMuaXNFZGl0aW9uKHJlY29yZCkpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgbGV0IGRhdGUgPSBtb21lbnQodmFsdWUpO1xuICAgICAgICAgIHZhbHVlID0gZGF0ZS5mb3JtYXQoKTtcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogTWV0aG9kIHRvIGFjY2VzcyBhbiBlbnRpdHkncyB2YWxpZGF0aW9uIHZhbHVlc1xuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcGFyYW0gdmFsaWRhdGlvblR5cGUgc3RyaW5nXG4gICAqIEByZXR1cm5zIEFueSB2YWx1ZSAoZmFsc2UgaWYgbm8gdmFsaWRhdGlvbiBvciBub3QgdGhlIG9uZSBjb25jZXJuZWQpXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sIHZhbGlkYXRpb25UeXBlOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChjb2x1bW4udmFsaWRhdGlvbiAhPT0gdW5kZWZpbmVkICYmIGNvbHVtbi52YWxpZGF0aW9uW3ZhbGlkYXRpb25UeXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnZhbGlkYXRpb25bdmFsaWRhdGlvblR5cGVdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRWRpdGlvbihyZWNvcmQpIHtcbiAgICByZXR1cm4gcmVjb3JkLmVudGl0eS5lZGl0aW9uID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgdHlwZSBvZiByZW5kZXJlciBvZiBhIGNvbHVtblxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxuICAgKiBAcmV0dXJucyBSZW5kZXJlciB0eXBlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIge1xuICAgIGlmIChjb2x1bW4ucmVuZGVyZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNvbHVtbi5yZW5kZXJlcjtcbiAgICB9XG4gICAgcmV0dXJuIEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHRhYmxlIG5nQ2xhc3NcbiAgICogQHJldHVybnMgbmdDbGFzc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFRhYmxlQ2xhc3MoKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2lnby1lbnRpdHktdGFibGUtd2l0aC1zZWxlY3Rpb24nOiB0aGlzLnNlbGVjdGlvblxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgaGVhZGVyIG5nQ2xhc3NcbiAgICogQHJldHVybnMgbmdDbGFzc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldEhlYWRlckNsYXNzKCk6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XG4gICAgY29uc3QgZnVuYyA9IHRoaXMudGVtcGxhdGUuaGVhZGVyQ2xhc3NGdW5jO1xuICAgIGlmIChmdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIHJldHVybiBmdW5jKCk7XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSByb3cgbmdDbGFzc1xuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxuICAgKiBAcmV0dXJucyBuZ0NsYXNzXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0Um93Q2xhc3MocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pik6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XG4gICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eTtcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5yb3dDbGFzc0Z1bmM7XG4gICAgaWYgKGZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgcmV0dXJuIGZ1bmMoZW50aXR5LCByZWNvcmQpO1xuICAgIH1cbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcm93IG5nQ2xhc3NcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cbiAgICogQHJldHVybnMgbmdDbGFzc1xuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldENlbGxDbGFzcyhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+LCBjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xuICAgIGNvbnN0IGNscyA9IHt9O1xuXG4gICAgY29uc3QgdGFibGVGdW5jID0gdGhpcy50ZW1wbGF0ZS5jZWxsQ2xhc3NGdW5jO1xuICAgIGlmICh0YWJsZUZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIHRhYmxlRnVuYyhlbnRpdHksIGNvbHVtbiwgcmVjb3JkKSk7XG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uRnVuYyA9IGNvbHVtbi5jZWxsQ2xhc3NGdW5jO1xuICAgIGlmIChjb2x1bW5GdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY2xzLCBjb2x1bW5GdW5jKGVudGl0eSwgcmVjb3JkKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNscztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGEgYnV0dG9uIGlzIGNsaWNrZWRcbiAgICogQHBhcmFtIGZ1bmMgRnVuY3Rpb25cbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcbiAgICogQGludGVybmFsXG4gICAqL1xuICBvbkJ1dHRvbkNsaWNrKFxuICAgIGNsaWNrRnVuYzogKGVudGl0eTogb2JqZWN0LCByZWNvcmQ/OiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gdm9pZCxcbiAgICByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+XG4gICkge1xuICAgIHRoaXMuZW5hYmxlRWRpdChyZWNvcmQpO1xuICAgIGlmICh0eXBlb2YgY2xpY2tGdW5jID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjbGlja0Z1bmMocmVjb3JkLmVudGl0eSwgcmVjb3JkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgY29sdW1uIG5hbWUgd2l0aG91dCBoaXMgXCJwcm9wZXJ0aWVzXCIgdGFnICh1c2VmdWwgZm9yIGVkaXRpb24gd29ya3NwYWNlIHByb3BlcnRpZXMpXG4gICAqL1xuICBwdWJsaWMgZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uOiBzdHJpbmcpIHtcbiAgICBpZiAoY29sdW1uLmluY2x1ZGVzKCdwcm9wZXJ0aWVzLicpKSB7XG4gICAgICByZXR1cm4gY29sdW1uLnNwbGl0KCcuJylbMV07XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7J2hlaWdodCc6IHRhYmxlSGVpZ2h0fVwiPlxuICA8dGFibGUgbWF0LXRhYmxlIG1hdFNvcnQgW25nQ2xhc3NdPVwiZ2V0VGFibGVDbGFzcygpXCIgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIFt0cmFja0J5XT1cImdldFRyYWNrQnlGdW5jdGlvbigpXCIgKG1hdFNvcnRDaGFuZ2UpPVwib25Tb3J0KCRldmVudClcIj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwic2VsZWN0aW9uQ2hlY2tib3hcIiBjbGFzcz1cIm1hdC1jZWxsLWNoZWNrYm94XCI+XG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdE1hbnlcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25TdGF0ZSQgfCBhc3luYyBhcyBzZWxlY3Rpb25TdGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblRvZ2dsZVJvd3MoJGV2ZW50LmNoZWNrZWQpXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuQWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3Rpb25TdGF0ZSA9PT0gZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZS5Tb21lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC90aD5cbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKG1vdXNlZG93bik9XCIkZXZlbnQuc2hpZnRLZXkgPyAkZXZlbnQucHJldmVudERlZmF1bHQoKSA6IG51bGxcIiAoY2xpY2spPVwiJGV2ZW50LnNoaWZ0S2V5ID9cbiAgICAgICAgICAgICAgb25TaGlmdFRvZ2dsZVJvdyghcm93SXNTZWxlY3RlZChyZWNvcmQpLCByZWNvcmQsICRldmVudCkgOiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAoY2hhbmdlKT1cIm9uVG9nZ2xlUm93KCRldmVudC5jaGVja2VkLHJlY29yZClcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3dJc1NlbGVjdGVkKHJlY29yZClcIj5cbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLm5hbWVcIiAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRlbXBsYXRlLmNvbHVtbnNcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgbWF0LXNvcnQtaGVhZGVyIFttYXRUb29sdGlwXT1cImNvbHVtbi50b29sdGlwID8gY29sdW1uLnRvb2x0aXAgOiB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW21hdFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXAgPyBjb2x1bW4udG9vbHRpcCA6IHVuZGVmaW5lZFwiPlxuICAgICAgICAgICAgICAgICAge3tjb2x1bW4udGl0bGV9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtblJlbmRlcmVyKGNvbHVtbikgYXMgY29sdW1uUmVuZGVyZXJcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkRlZmF1bHRcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsRGVmYXVsdFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsRGVmYXVsdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBpZ29JbWFnZUVycm9yICpuZ0lmPVwiaXNJbWcoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIG5vdEltZ1wiIHNyYz1cInt7KGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNlY3VyZUltYWdlKSB8IGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICdpZ28uY29tbW9uLmVudGl0eS10YWJsZS50YXJnZXRIdG1sVXJsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkhUTUxcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsSFRNTFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzQW5VcmxIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfX1cIiB0YXJnZXQ9J19ibGFuaycgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGlnb0ltYWdlRXJyb3IgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHwgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWc+PHNwYW4+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgfX0gPC9zcGFuPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLlVuc2FuaXRpemVkSFRNTFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0IGVkaXRpb25cIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiICpuZ0lmPVwiaXNFZGl0aW9uKHJlY29yZCk7ZWxzZSBpc1Vuc2FuaXRpemVkSFRNTFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZS1waWNrZXJcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnZGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiIHZhbHVlPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZUNoYW5nZSk9XCJvbkRhdGVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGltZVwiICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICd0aW1lJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBzdGVwPVwiOTAwXCIgKGZvY3VzKT1cImNvbHVtbi5vbkZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwiY29sdW1uLm9uQ2hhbmdlKCRldmVudClcIiAoYmx1cik9XCJjb2x1bW4ub25CbHVyKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImNsYXNzX251bWJlcl9lZGl0aW9uXCIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ251bWJlcidcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgc3RlcD1cInt7Y29sdW1uLnN0ZXB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tnZXRWYWx1ZShyZWNvcmQsY29sdW1uKX19XCIgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKX19XCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWluPVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWluVmFsdWUnKX19XCIgbWF4PVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWF4VmFsdWUnKX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiICpuZ0lmPVwiIWNvbHVtbi50eXBlIHx8IGNvbHVtbi50eXBlID09PSdzdHJpbmcnXCIgW2Zvcm1Db250cm9sTmFtZV09XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seT1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ3JlYWRvbmx5Jyl9fVwiIHJlcXVpcmVkPVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWFuZGF0b3J5Jyl9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94ICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdib29sZWFuJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBbY2hlY2tlZF09XCJnZXRWYWx1ZShyZWNvcmQsY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Cb29sZWFuVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwkZXZlbnQpXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0ICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdsaXN0J1wiIHJlcXVpcmVkPVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAnbWFuZGF0b3J5Jyl9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBbbXVsdGlwbGVdPVwiY29sdW1uLm11bHRpcGxlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdFZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGNvbHVtbi5kb21haW5WYWx1ZXNcIiBbdmFsdWVdPVwib3B0aW9uLmlkXCIgW2Rpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJ1wiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCIgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seT1cInt7Z2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ3JlYWRvbmx5Jyl9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJvbkF1dG9jb21wbGV0ZVZhbHVlQ2hhbmdlKGNvbHVtbiwgcmVjb3JkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxXaWR0aD1cIjQzMHB4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1tjb2x1bW4ubmFtZV0gfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi5pZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2lzVW5zYW5pdGl6ZWRIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgKm5nSWY9XCIhaXNVcmwoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIGlzQW5VcmxVbnNhbml0aXplZEhUTUxcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzYW5pdGl6ZUh0bWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGlnb0ltYWdlRXJyb3IgKm5nSWY9XCJpc0ltZyhnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2Ugbm90SW1nXCIgc3JjPVwie3soZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pIHwgc2VjdXJlSW1hZ2UpIHwgYXN5bmN9fVwiIHdpZHRoPVwiNTBcIiBoZWlndGg9XCJhdXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19IDwvc3Bhbj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkljb25cIj5cbiAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIiBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLm9uQ2xpY2tcIiBzdmdJY29uPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil8fCBjb2x1bW4uaWNvbn19XCIgKGNsaWNrKT1cImNvbHVtbi5vbkNsaWNrKCRldmVudClcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFjb2x1bW4ub25DbGlja1wiIHN2Z0ljb249XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKXx8IGNvbHVtbi5pY29ufX1cIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW5SZW5kZXJlciA9PT0gZW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5CdXR0b25Hcm91cFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgYnV0dG9uIG9mIGdldFZhbHVlKHJlY29yZCwgY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGlvbihyZWNvcmQpID09PSBidXR0b24uZWRpdE1vZGUgfHwgYnV0dG9uLmVkaXRNb2RlID09PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlID09PSAnbWF0LWljb24tYnV0dG9uJ1wiIGlnb1N0b3BQcm9wYWdhdGlvbiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiIChtb3VzZWRvd24pPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlICE9PSAnbWF0LWljb24tYnV0dG9uJ1wiIGlnb1N0b3BQcm9wYWdhdGlvbiBtYXQtbWluaS1mYWJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImJ1dHRvbi5jb2xvclwiIChtb3VzZWRvd24pPVwib25CdXR0b25DbGljayhidXR0b24uY2xpY2ssIHJlY29yZClcIiBbZGlzYWJsZWRdPVwiYnV0dG9uLmRpc2FibGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImhlYWRlcnM7IHN0aWNreTogZml4ZWRIZWFkZXJcIiBbbmdDbGFzc109XCJnZXRIZWFkZXJDbGFzcygpXCI+XG4gICAgICA8L3RyPlxuICAgICAgPHRyIG1hdC1yb3cgaWdvRW50aXR5VGFibGVSb3cgKm1hdFJvd0RlZj1cImxldCByZWNvcmQ7IGNvbHVtbnM6IGhlYWRlcnM7XCIgW3Njcm9sbEJlaGF2aW9yXT1cInNjcm9sbEJlaGF2aW9yXCIgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3MocmVjb3JkKVwiIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCIgW3NlbGVjdGVkXT1cInJvd0lzU2VsZWN0ZWQocmVjb3JkKVwiIChzZWxlY3QpPVwib25Sb3dTZWxlY3QocmVjb3JkKVwiIChjbGljayk9XCJvblJvd0NsaWNrKHJlY29yZClcIj5cbiAgICAgIDwvdHI+XG4gIDwvdGFibGU+XG4gIDxpZ28tZW50aXR5LXRhYmxlLXBhZ2luYXRvciAqbmdJZj1cIndpdGhQYWdpbmF0b3JcIiBbc3RvcmVdPVwic3RvcmVcIiBbcGFnaW5hdG9yT3B0aW9uc109XCJwYWdpbmF0b3JPcHRpb25zXCIgW2VudGl0eVNvcnRDaGFuZ2UkXT1cImVudGl0eVNvcnRDaGFuZ2UkXCIgKHBhZ2luYXRvckNoYW5nZSk9XCJwYWdpbmF0b3JDaGFuZ2UoJGV2ZW50KVwiPlxuICA8L2lnby1lbnRpdHktdGFibGUtcGFnaW5hdG9yPlxuPC9kaXY+Il19
1368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osdUJBQXVCLEVBT3ZCLFFBQVEsRUFDUixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBRWpFLE9BQU8sRUFPTCx5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUMxQixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQTBELGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHMUcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ2hDekIsNkJBQWdFO0lBQzVELHdDQUNvRTtJQUR0RCw4TUFBVSxlQUFBLG1DQUE0QixDQUFBLElBQUM7SUFFckQsaUJBQWU7SUFDbkIsMEJBQWU7Ozs7SUFIMkMsZUFBNEQ7SUFBNUQsb0ZBQTRELDhFQUFBOzs7SUFGMUgsNkJBQWlDO0lBQzdC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LGtCQUFjLElBQUM7UUFDNUksZ0NBQXlFO1FBQ3JFLG1FQVFLO1FBQ0wsbUVBS0s7UUFDVCwwQkFBZTtRQUVmLHVGQThIZTtRQUVmLG1FQUNLO1FBQ0wsbUVBQ0s7UUFDVCxpQkFBUTtRQUNSLG1IQUM2QjtRQUMvQixpQkFBTTs7UUEzSnVCLHFFQUFtQztRQUNyQyxlQUEyQjtRQUEzQiw2Q0FBMkIsOEJBQUEscUNBQUE7UUFtQmMsZUFBbUI7UUFBbkIsOENBQW1CO1FBZ0k3RCxlQUEwQjtRQUExQiw2Q0FBMEIsMENBQUE7UUFFUSxlQUFpQjtRQUFqQiw4Q0FBaUI7UUFHOUMsZUFBbUI7UUFBbkIsd0NBQW1COzt1RkQzR3JDLG9CQUFvQjtjQVBoQyxTQUFTOzJCQUNFLGtCQUFrQixtQkFHWCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDLENBQUMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxzQkFBc0IsRUFBRSxDQUFDOztzQkFpSzdFLFFBQVE7O3NCQUFJLElBQUk7O3NCQUNoQixRQUFROztzQkFDUixRQUFRO2tGQW5IRixLQUFLO2tCQUFiLEtBQUs7WUFLTyxTQUFTO2tCQUFyQixLQUFLO1lBYUcsUUFBUTtrQkFBaEIsS0FBSztZQU1OLGNBQWM7a0JBRGIsS0FBSztZQU9OLGNBQWM7a0JBRGIsS0FBSztZQU9OLGFBQWE7a0JBRFosS0FBSztZQU9OLGdCQUFnQjtrQkFEZixLQUFLO1lBTUksV0FBVztrQkFBcEIsTUFBTTtZQUtHLGtCQUFrQjtrQkFBM0IsTUFBTTtZQU9HLGdCQUFnQjtrQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkNoYW5nZXMsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9wdGlvbmFsLFxyXG4gIFNlbGZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIEVudGl0eUtleSxcclxuICBFbnRpdHlSZWNvcmQsXHJcbiAgRW50aXR5U3RhdGUsXHJcbiAgRW50aXR5U3RvcmUsXHJcbiAgRW50aXR5VGFibGVUZW1wbGF0ZSxcclxuICBFbnRpdHlUYWJsZUNvbHVtbixcclxuICBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLFxyXG4gIEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUsXHJcbiAgRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvclxyXG59IGZyb20gJy4uL3NoYXJlZCc7XHJcbmltcG9ydCB7IE1hdFBhZ2luYXRvciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zIH0gZnJvbSAnLi4vZW50aXR5LXRhYmxlLXBhZ2luYXRvci9lbnRpdHktdGFibGUtcGFnaW5hdG9yLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBOZ0NvbnRyb2wsIE5nRm9ybSwgRm9ybUNvbnRyb2xOYW1lLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XHJcbmltcG9ydCB7IERhdGVBZGFwdGVyLCBFcnJvclN0YXRlTWF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGRlZmF1bHQgYXMgbW9tZW50IH0gZnJvbSAnbW9tZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWVudGl0eS10YWJsZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VudGl0eS10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZW50aXR5LXRhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLCB1c2VFeGlzdGluZzogRW50aXR5VGFibGVDb21wb25lbnQgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEVudGl0eVRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcblxyXG4gIGVudGl0eVNvcnRDaGFuZ2UkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuXHJcbiAgcHVibGljIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KTtcclxuXHJcbiAgcHVibGljIGZpbHRlcmVkT3B0aW9ucyA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIGNvbHVtbiByZW5kZXJlciB0eXBlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIgPSBFbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyO1xyXG5cclxuICAvKipcclxuICAgKiBSZWZlcmVuY2UgdG8gdGhlIHNlbGVjdGlvbidzIHN0YXRlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZSA9IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGU7XHJcblxyXG4gIC8qKlxyXG4gICAqIE9ic2VydmFibGUgb2YgdGhlIHNlbGVjdGlvbixzIHN0YXRlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcmVhZG9ubHkgc2VsZWN0aW9uU3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8RW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHVuZGVmaW5lZCk7XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgc3RvcmUncyBzZWxlY3Rpb25cclxuICAgKi9cclxuICBwcml2YXRlIHNlbGVjdGlvbiQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1YnNjcmlwdGlvbiB0byB0aGUgZGF0YVNvdXJjZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgZGF0YVNvdXJjZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoZSBsYXN0IHJlY29yZCBjaGVja2VkLiBVc2VmdWwgZm9yIHNlbGVjdGluZ1xyXG4gICAqIG11bHRpcGxlIHJlY29yZHMgYnkgaG9sZGluZyB0aGUgc2hpZnQga2V5IGFuZCBjaGVja2luZ1xyXG4gICAqIGNoZWNrYm94ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsYXN0UmVjb3JkQ2hlY2tlZEtleTogRW50aXR5S2V5O1xyXG5cclxuICAvKipcclxuICAgKiBFbnRpdHkgc3RvcmVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdG9yZTogRW50aXR5U3RvcmU8b2JqZWN0PjtcclxuXHJcbiAgLyoqXHJcbiAgICogVGFibGUgcGFnaW5hdG9yXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IHBhZ2luYXRvcih2YWx1ZTogTWF0UGFnaW5hdG9yKSB7XHJcbiAgICB0aGlzLl9wYWdpbmF0b3IgPSB2YWx1ZTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBwYWdpbmF0b3IoKTogTWF0UGFnaW5hdG9yIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0b3I7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3BhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSB0ZW1wbGF0ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRlbXBsYXRlOiBFbnRpdHlUYWJsZVRlbXBsYXRlO1xyXG5cclxuICAvKipcclxuICAgKiBTY3JvbGwgYmVoYXZpb3Igb24gc2VsZWN0aW9uXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzY3JvbGxCZWhhdmlvcjogRW50aXR5VGFibGVTY3JvbGxCZWhhdmlvciA9IEVudGl0eVRhYmxlU2Nyb2xsQmVoYXZpb3IuQXV0bztcclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBudWxscyBzaG91bGQgYmUgZmlyc3Qgd2hlbiBzb3J0aW5nXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzb3J0TnVsbHNGaXJzdDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBTaG93IHRoZSB0YWJsZSBwYWdpbmF0b3Igb3Igbm90LiBGYWxzZSBieSBkZWZhdWx0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgd2l0aFBhZ2luYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBQYWdpbmF0b3Igb3B0aW9uc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcGFnaW5hdG9yT3B0aW9uczogRW50aXR5VGFibGVQYWdpbmF0b3JPcHRpb25zO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gYW4gZW50aXR5IChyb3cpIGlzIGNsaWNrZWRcclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPG9iamVjdD4oKTtcclxuXHJcbiAgLyoqXHJcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuIGVudGl0eSAocm93KSBpcyBzZWxlY3RlZFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoKSBlbnRpdHlTZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIGFkZGVkOiBvYmplY3RbXTtcclxuICB9PigpO1xyXG5cclxuICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIHRhYmxlIHNvcnQgaXMgY2hhbmdlZC5cclxuICAgKi9cclxuICBAT3V0cHV0KCkgZW50aXR5U29ydENoYW5nZTogRXZlbnRFbWl0dGVyPHtjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uLCBkaXJlY3Rpb246IHN0cmluZ30+ID0gbmV3IEV2ZW50RW1pdHRlcih1bmRlZmluZWQpO1xyXG5cclxuICAvKipcclxuICAgKiBUYWJsZSBoZWFkZXJzXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IGhlYWRlcnMoKTogc3RyaW5nW10ge1xyXG4gICAgbGV0IGNvbHVtbnMgPSB0aGlzLnRlbXBsYXRlLmNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gY29sdW1uLnZpc2libGUgIT09IGZhbHNlKVxyXG4gICAgICAubWFwKChjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKSA9PiBjb2x1bW4ubmFtZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uQ2hlY2tib3ggPT09IHRydWUpIHtcclxuICAgICAgY29sdW1ucyA9IFsnc2VsZWN0aW9uQ2hlY2tib3gnXS5jb25jYXQoY29sdW1ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEYXRhIHNvdXJjZSBjb25zdW1hYmxlIGJ5IHRoZSB1bmRlcmx5aW5nIG1hdGVyaWFsIHRhYmxlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8b2JqZWN0PigpO1xyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBpcyBzdXBwb3J0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgc2VsZWN0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb24gfHwgZmFsc2U7IH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hldGhlciBhIHNlbGVjdGlvbiBjaGVja2JveCBzaG91bGQgYmUgZGlzcGxheWVkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0IHNlbGVjdGlvbkNoZWNrYm94KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50ZW1wbGF0ZS5zZWxlY3Rpb25DaGVja2JveCB8fCBmYWxzZTsgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgc2VsZWN0TWFueSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUuc2VsZWN0TWFueSB8fCBmYWxzZTsgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIHNlbGVjdGlvbiBtYW55IGVudGl0aWVzIHNob3VsZCBlYiBzdXBwb3J0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXQgZml4ZWRIZWFkZXIoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLnRlbXBsYXRlLmZpeGVkSGVhZGVyID09PSB1bmRlZmluZWQgPyB0cnVlIDogdGhpcy50ZW1wbGF0ZS5maXhlZEhlYWRlcjsgfVxyXG5cclxuICBnZXQgdGFibGVIZWlnaHQoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMudGVtcGxhdGUudGFibGVIZWlnaHQgPyB0aGlzLnRlbXBsYXRlLnRhYmxlSGVpZ2h0IDogJ2F1dG8nOyB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgcHJvdGVjdGVkIF9mb2N1c01vbml0b3I6IEZvY3VzTW9uaXRvcixcclxuICAgIHByb3RlY3RlZCBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXHJcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcclxuICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfcGFyZW50Rm9ybTogTmdGb3JtLFxyXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIF9jb250cm9sTmFtZTogRm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyLFxyXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8RGF0ZT5cclxuICApIHtcclxuICAgIHRoaXMuZGF0ZUFkYXB0ZXIuc2V0TG9jYWxlKCdmci1DQScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJhY2sgdGhlIHNlbGVjdGlvbiBzdGF0ZSB0byBwcm9wZXJseSBkaXNwbGF5IHRoZSBzZWxlY3Rpb24gY2hlY2tib3hlc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5oYW5kbGVEYXRhc291cmNlKCk7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBzdG9yZSA9IGNoYW5nZXMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuY3VycmVudFZhbHVlICE9PSBzdG9yZS5wcmV2aW91c1ZhbHVlKSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlRGF0YXNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyB0ZXh0IG9yIG51bWJlciB2YWx1ZSBjaGFuZ2UgKGVkaXRpb24pXHJcbiAgICovXHJcbiAgb25WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBib29sZWFuIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkJvb2xlYW5WYWx1ZUNoYW5nZShjb2x1bW46IHN0cmluZywgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8YW55PiwgZXZlbnQpIHtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQuY2hlY2tlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3Mgc2VsZWN0IHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvblNlbGVjdFZhbHVlQ2hhbmdlKGNvbHVtbjogc3RyaW5nLCByZWNvcmQ6IEVudGl0eVJlY29yZDxhbnk+LCBldmVudCkge1xyXG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4pO1xyXG4gICAgcmVjb3JkLmVudGl0eS5wcm9wZXJ0aWVzW2tleV0gPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFByb2Nlc3MgYXV0b2NvbXBsZXRlIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkF1dG9jb21wbGV0ZVZhbHVlQ2hhbmdlKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XHJcbiAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUoZXZlbnQub3B0aW9uLnZpZXdWYWx1ZSk7XHJcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5uYW1lKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gZXZlbnQub3B0aW9uLnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUHJvY2VzcyBkYXRlIHZhbHVlIGNoYW5nZSAoZWRpdGlvbilcclxuICAgKi9cclxuICBvbkRhdGVDaGFuZ2UoY29sdW1uOiBzdHJpbmcsIHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4sIGV2ZW50KSB7XHJcbiAgICBjb25zdCBmb3JtYXQgPSBcIllZWVktTU0tRERcIjtcclxuICAgIGNvbnN0IHZhbHVlID0gbW9tZW50KGV2ZW50LnZhbHVlKS5mb3JtYXQoZm9ybWF0KTtcclxuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uKTtcclxuICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1trZXldID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFbmFibGUgZWRpdGlvbiBtb2RlIGZvciBvbmUgcm93XHJcbiAgICogTW9yZSB0aGFuIG9uZSByb3cgY2FuIGJlIGVkaXRlZCBhdCB0aGUgc2FtZSB0aW1lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBlbmFibGVFZGl0KHJlY29yZDogRW50aXR5UmVjb3JkPGFueT4pIHtcclxuICAgIGNvbnN0IGl0ZW0gPSByZWNvcmQuZW50aXR5LnByb3BlcnRpZXMgfHwgcmVjb3JkLmVudGl0eTtcclxuICAgIHRoaXMudGVtcGxhdGUuY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGNvbHVtbi50aXRsZSA9IGNvbHVtbi52YWxpZGF0aW9uPy5tYW5kYXRvcnkgJiYgIWNvbHVtbi50aXRsZS5pbmNsdWRlcygnKicpID8gY29sdW1uLnRpdGxlICsgJyAqJyA6IGNvbHVtbi50aXRsZTtcclxuXHJcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLm5hbWUpO1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgIGlmICghaXRlbVtrZXldIHx8IGl0ZW1ba2V5XSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgaXRlbVtrZXldID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaXRlbVtrZXldID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgaXRlbVtrZXldID0gSlNPTi5wYXJzZShpdGVtW2tleV0udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgIGl0ZW1ba2V5XVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnbGlzdCcpIHtcclxuICAgICAgICBpZiAoY29sdW1uLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICAgIFtpdGVtW2tleV1dXHJcbiAgICAgICAgICApKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgICBpdGVtW2tleV1cclxuICAgICAgICAgICkpO1xyXG5cclxuICAgICAgICAgIHR5cGVvZiBpdGVtW2tleV0gPT09ICdzdHJpbmcnID9cclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKHBhcnNlSW50KGl0ZW1ba2V5XSkpIDpcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnNldFZhbHVlKGl0ZW1ba2V5XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgIGl0ZW1ba2V5XVxyXG4gICAgICAgICkpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc1tjb2x1bW4ubmFtZV0gPSBuZXcgT2JzZXJ2YWJsZTxhbnlbXT4oKTtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc1tjb2x1bW4ubmFtZV0gPVxyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh2YWx1ZT8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sdW1uLmRvbWFpblZhbHVlcz8uZmlsdGVyKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHZhbHVlID8gdmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlTmFtZU5vcm1hbGl6ZWQgPSBvcHRpb24udmFsdWUudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZlYXR1cmVOYW1lTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBmb3JtQ29udHJvbFZhbHVlID0gaXRlbVtrZXldO1xyXG4gICAgICAgIGNvbHVtbi5kb21haW5WYWx1ZXMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBmb3JtQ29udHJvbFZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZCskLy50ZXN0KGZvcm1Db250cm9sVmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWUgPSBwYXJzZUludChmb3JtQ29udHJvbFZhbHVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChvcHRpb24udmFsdWUgPT09IGZvcm1Db250cm9sVmFsdWUgfHwgb3B0aW9uLmlkID09PSBmb3JtQ29udHJvbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZvcm1Db250cm9sVmFsdWUgPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShmb3JtQ29udHJvbFZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiBjb2x1bW4ubGlua0NvbHVtbkZvcmNlKSB7XHJcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzW2NvbHVtbi5uYW1lXS5zZXRWYWx1ZShcclxuICAgICAgICAgICAgZW50aXR5Py5wcm9wZXJ0aWVzW3RoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSldXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi52aXNpYmxlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgaWYgKGl0ZW1ba2V5XSkge1xyXG4gICAgICAgICAgICBsZXQgZGF0ZSA9IG1vbWVudChpdGVtW2tleV0pO1xyXG4gICAgICAgICAgICBpdGVtW2tleV0gPSBkYXRlLnV0YygpLmZvcm1hdCgnWVlZWS1NTS1ERCcpO1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5zZXRDb250cm9sKGNvbHVtbi5uYW1lLCB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXHJcbiAgICAgICAgICAgICAgaXRlbVtrZXldXHJcbiAgICAgICAgICAgICkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3S2V5ID0gdGhpcy5nZXRDb2x1bW5LZXlXaXRob3V0UHJvcGVydGllc1RhZyhjb2x1bW4ubmFtZSk7XHJcbiAgICAgICAgICAgIHJlY29yZC5lbnRpdHkucHJvcGVydGllc1tuZXdLZXldID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0Q29udHJvbChjb2x1bW4ubmFtZSwgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxyXG4gICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLnNldENvbnRyb2woY29sdW1uLm5hbWUsIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcclxuICAgICAgICAgIGl0ZW1ba2V5XVxyXG4gICAgICAgICkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5mb3JtR3JvdXAuY29udHJvbHNbY29sdW1uLm5hbWVdICYmIHRoaXMuZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbiwgJ3JlYWRvbmx5JykpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uZGlzYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlRGF0YXNvdXJjZSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmVTdG9yZSgpO1xyXG4gICAgdGhpcy5zZWxlY3Rpb24kJCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgIC5tYW55QnkkKChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiByZWNvcmQuc3RhdGUuc2VsZWN0ZWQgPT09IHRydWUpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlY29yZHM6IEVudGl0eVJlY29yZDxvYmplY3Q+W10pID0+IHtcclxuICAgICAgICBjb25zdCBmaXJzdFNlbGVjdGVkID0gcmVjb3Jkc1swXTtcclxuICAgICAgICBjb25zdCBmaXJzdFNlbGVjdGVkU3RhdGV2aWV3UG9zaXRpb24gPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwoKS5pbmRleE9mKGZpcnN0U2VsZWN0ZWQpO1xyXG4gICAgICAgIGNvbnN0IHBhZ2VNYXggPSB0aGlzLnBhZ2luYXRvciA/IHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplICogKHRoaXMucGFnaW5hdG9yLnBhZ2VJbmRleCArIDEpIDogMDtcclxuICAgICAgICBjb25zdCBwYWdlTWluID0gdGhpcy5wYWdpbmF0b3IgPyBwYWdlTWF4IC0gdGhpcy5wYWdpbmF0b3IucGFnZVNpemUgOiAwO1xyXG5cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnBhZ2luYXRvciAmJlxyXG4gICAgICAgICAgKGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA8IHBhZ2VNaW4gfHxcclxuICAgICAgICAgIGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiA+PSBwYWdlTWF4KSkge1xyXG4gICAgICAgICAgY29uc3QgcGFnZVRvUmVhY2ggPSBNYXRoLmZsb29yKGZpcnN0U2VsZWN0ZWRTdGF0ZXZpZXdQb3NpdGlvbiAvIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplKTtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IucGFnZUluZGV4ID0gcGFnZVRvUmVhY2g7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdGUkLm5leHQodGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGUocmVjb3JkcykpO1xyXG4gICAgICB9KTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZSQkID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuYWxsJCgpLnN1YnNjcmliZSgoYWxsKSA9PiB7XHJcbiAgICAgIGlmIChhbGxbMF0pIHtcclxuICAgICAgICB0aGlzLmVuYWJsZUVkaXQoYWxsWzBdKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGFsbDtcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVuYmluZCB0aGUgc3RvcmUgd2F0Y2hlclxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZVN0b3JlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlU3RvcmUoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24kJCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGlvbiQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlJCQpIHtcclxuICAgICAgdGhpcy5kYXRhU291cmNlJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyYWNrYnkgZnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBwYXJhbSBpbmRleCBSZWNvcmQgaW5kZXhcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRUcmFja0J5RnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdCwgRW50aXR5U3RhdGU+KSA9PiB7XHJcbiAgICAgIHJldHVybiByZWNvcmQucmVmO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRyaWdnZXIgYSByZWZyZXNoIG9mIHRocmUgdGFibGUuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuXHJcbiAgICogdGhlIGRhdGEgc291cmNlIGRvZXNuJ3QgZW1pdCBhIG5ldyB2YWx1ZSBidXQgZm9yIHNvbWUgcmVhc29uXHJcbiAgICogdGhlIHJlY29yZHMgbmVlZCBhbiB1cGRhdGUuXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcGFnaW5hdG9yQ2hhbmdlKGV2ZW50OiBNYXRQYWdpbmF0b3IpIHtcclxuICAgIHRoaXMucGFnaW5hdG9yID0gZXZlbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPbiBzb3J0LCBzb3J0IHRoZSBzdG9yZVxyXG4gICAqIEBwYXJhbSBldmVudCBTb3J0IGV2ZW50XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Tb3J0KGV2ZW50OiB7YWN0aXZlOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nfSkge1xyXG4gICAgY29uc3QgZGlyZWN0aW9uID0gZXZlbnQuZGlyZWN0aW9uO1xyXG4gICAgY29uc3QgY29sdW1uID0gdGhpcy50ZW1wbGF0ZS5jb2x1bW5zXHJcbiAgICAgIC5maW5kKChjOiBFbnRpdHlUYWJsZUNvbHVtbikgPT4gYy5uYW1lID09PSBldmVudC5hY3RpdmUpO1xyXG5cclxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdhc2MnIHx8IGRpcmVjdGlvbiA9PT0gJ2Rlc2MnKSB7XHJcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQoe1xyXG4gICAgICAgIHZhbHVlQWNjZXNzb3I6IChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSA9PiB0aGlzLmdldFZhbHVlKHJlY29yZCwgY29sdW1uKSxcclxuICAgICAgICBkaXJlY3Rpb24sXHJcbiAgICAgICAgbnVsbHNGaXJzdDogdGhpcy5zb3J0TnVsbHNGaXJzdFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5lbnRpdHlTb3J0Q2hhbmdlLmVtaXQoe2NvbHVtbiwgZGlyZWN0aW9ufSk7XHJcbiAgICAgIHRoaXMuZW50aXR5U29ydENoYW5nZSQubmV4dCh0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmUuc3RhdGVWaWV3LnNvcnQodW5kZWZpbmVkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIGNsaWNrZWQsIGVtaXQgYW4gZXZlbnRcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uUm93Q2xpY2socmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0Pikge1xyXG4gICAgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldEtleShyZWNvcmQpO1xyXG4gICAgdGhpcy5lbnRpdHlDbGljay5lbWl0KHJlY29yZC5lbnRpdHkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhbiBlbnRpdHkgaXMgc2VsZWN0ZWQsIHNlbGVjdCBpdCBpbiB0aGUgc3RvcmUgYW5kIGVtaXQgYW4gZXZlbnQuIEV2ZW4gaWZcclxuICAgKiBcIm1hbnlcIiBpcyBzZXQgdG8gdHJ1ZSwgdGhpcyBtZXRob2QgYWx3YXlzIHNlbGVjdCBhIHNpbmdsZSwgZXhjbHVzaXZlIHJvdy4gU2VsZWN0aW5nXHJcbiAgICogbXVsdGlwbGUgcm93cyBzaG91bGQgYmUgYWNoaWV2ZWQgYnkgdXNpbmcgdGhlIGNoZWNrYm94ZXMuXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblJvd1NlbGVjdChyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZShlbnRpdHksIHtzZWxlY3RlZDogdHJ1ZX0sIHRydWUpO1xyXG4gICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IFtlbnRpdHldfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3Qgb3IgdW5zZWxlY3QgYWxsIHJvd3MgYXQgb25jZS4gT24gc2VsZWN0LCBlbWl0IGFuIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Ub2dnbGVSb3dzKHRvZ2dsZTogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uID09PSBmYWxzZSkgeyByZXR1cm47IH1cclxuXHJcbiAgICB0aGlzLnN0b3JlLnN0YXRlLnVwZGF0ZUFsbCh7c2VsZWN0ZWQ6IHRvZ2dsZX0pO1xyXG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICBjb25zdCBlbnRpdGllcyA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3XHJcbiAgICAgICAgLmFsbCgpXHJcbiAgICAgICAgLm1hcCgocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PikgPT4gcmVjb3JkLmVudGl0eSk7XHJcbiAgICAgIHRoaXMuZW50aXR5U2VsZWN0Q2hhbmdlLmVtaXQoe2FkZGVkOiBbZW50aXRpZXNdfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGVuIGFuIGVudGl0eSBpcyB0b2dnbGVkLCBzZWxlY3Qgb3IgdW5zZWxlY3QgaXQgaW4gdGhlIHN0b3JlLiBPbiBzZWxlY3QsXHJcbiAgICogZW1pdCBhbiBldmVudC5cclxuICAgKiBAcGFyYW0gdG9nZ2xlIFNlbGVjdCBvciB1bnNlbGVjdFxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgb25Ub2dnbGVSb3codG9nZ2xlOiBib29sZWFuLCByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24gPT09IGZhbHNlKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBleGNsdXNpdmUgPSB0b2dnbGUgPT09IHRydWUgJiYgIXRoaXMuc2VsZWN0TWFueTtcclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlKGVudGl0eSwge3NlbGVjdGVkOiB0b2dnbGV9LCBleGNsdXNpdmUpO1xyXG4gICAgaWYgKHRvZ2dsZSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmVudGl0eVNlbGVjdENoYW5nZS5lbWl0KHthZGRlZDogW2VudGl0eV19KTtcclxuICAgIH1cclxuICAgIHRoaXMubGFzdFJlY29yZENoZWNrZWRLZXkgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5nZXRLZXkocmVjb3JkKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZW4gYW4gZW50aXR5IGlzIHRvZ2dsZWQsIHNlbGVjdCBvciB1bnNlbGVjdCBpdCBpbiB0aGUgc3RvcmUuIE9uIHNlbGVjdCxcclxuICAgKiBlbWl0IGFuIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB0b2dnbGUgU2VsZWN0IG9yIHVuc2VsZWN0XHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBvblNoaWZ0VG9nZ2xlUm93KHRvZ2dsZTogYm9vbGVhbiwgcmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VsZWN0TWFueSA9PT0gZmFsc2UgfHwgdGhpcy5sYXN0UmVjb3JkQ2hlY2tlZEtleSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMub25Ub2dnbGVSb3codG9nZ2xlLCByZWNvcmQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhpcyBpcyBhIHdvcmthcm91bmQgbWF0IGNoZWNrYm94IHdyb25nIGJlaGF2aW9yXHJcbiAgICAvLyB3aGVuIHRoZSBzaGlmdCBrZXkgaXMgaGVsZC5cclxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy82MjMyXHJcbiAgICBjb25zdCByYW5nZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgcmFuZ2Uuc2VsZWN0Tm9kZShldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgd2luZG93LmdldFNlbGVjdGlvbigpLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLnN0b3JlLnN0YXRlVmlldy5hbGwoKTtcclxuICAgIGNvbnN0IHJlY29yZEluZGV4ID0gcmVjb3Jkcy5pbmRleE9mKHJlY29yZCk7XHJcbiAgICBjb25zdCBsYXN0UmVjb3JkQ2hlY2tlZCA9IHRoaXMuc3RvcmUuc3RhdGVWaWV3LmdldCh0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5KTtcclxuICAgIGNvbnN0IGxhc3RSZWNvcmRJbmRleCA9IHJlY29yZHMuaW5kZXhPZihsYXN0UmVjb3JkQ2hlY2tlZCk7XHJcbiAgICBjb25zdCBpbmRleGVzID0gW3JlY29yZEluZGV4LCBsYXN0UmVjb3JkSW5kZXhdO1xyXG4gICAgY29uc3Qgc2VsZWN0UmVjb3JkcyA9IHJlY29yZHMuc2xpY2UoTWF0aC5taW4oLi4uaW5kZXhlcyksIE1hdGgubWF4KC4uLmluZGV4ZXMpICsgMSk7XHJcblxyXG4gICAgY29uc3QgZW50aXRpZXMgPSBzZWxlY3RSZWNvcmRzLm1hcCgoX3JlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IF9yZWNvcmQuZW50aXR5KTtcclxuICAgIHRoaXMuc3RvcmUuc3RhdGUudXBkYXRlTWFueShlbnRpdGllcywge3NlbGVjdGVkOiB0b2dnbGV9KTtcclxuICAgIGlmICh0b2dnbGUgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5lbnRpdHlTZWxlY3RDaGFuZ2UuZW1pdCh7YWRkZWQ6IGVudGl0aWVzfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxhc3RSZWNvcmRDaGVja2VkS2V5ID0gdGhpcy5zdG9yZS5zdGF0ZVZpZXcuZ2V0S2V5KHJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wdXRlIHRoZSBzZWxlY3Rpb24gc3RhdGVcclxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGFsbCwgc29tZSBvciBubyByb3dzIGFyZSBzZWxlY3RlZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29tcHV0ZVNlbGVjdGlvblN0YXRlKHNlbGVjdGVkUmVjb3JkczogRW50aXR5UmVjb3JkPG9iamVjdD5bXSk6IEVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUge1xyXG4gICAgY29uc3Qgc3RhdGVzID0gRW50aXR5VGFibGVTZWxlY3Rpb25TdGF0ZTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbkNvdW50ID0gc2VsZWN0ZWRSZWNvcmRzLmxlbmd0aDtcclxuICAgIHJldHVybiBzZWxlY3Rpb25Db3VudCA9PT0gMCA/XHJcbiAgICAgIHN0YXRlcy5Ob25lIDpcclxuICAgICAgKHNlbGVjdGlvbkNvdW50ID09PSB0aGlzLnN0b3JlLnN0YXRlVmlldy5jb3VudCA/IHN0YXRlcy5BbGwgOiBzdGF0ZXMuU29tZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBXaGV0aGVyIGEgY29sdW1uIGlzIHNvcnRhYmxlXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGEgY29sdW1uIGlzIHNvcnRhYmxlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgY29sdW1uSXNTb3J0YWJsZShjb2x1bW46IEVudGl0eVRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc29ydGFibGUgPSBjb2x1bW4uc29ydDtcclxuICAgIGlmIChzb3J0YWJsZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHNvcnRhYmxlID0gdGhpcy50ZW1wbGF0ZS5zb3J0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IHRoaXMudGVtcGxhdGUuc29ydDtcclxuICAgIH1cclxuICAgIHJldHVybiBzb3J0YWJsZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFdoZXRoZXIgYSByb3cgaXMgc2hvdWxkIGJlIHNlbGVjdGVkIGJhc2VkIG9uIHRoZSB1bmRlcmx5aW5nIGVudGl0eSBzdGF0ZVxyXG4gICAqIEBwYXJhbSByZWNvcmQgUmVjb3JkXHJcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBhIHJvdyBzaG91bGQgYmUgc2VsZWN0ZWRcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICByb3dJc1NlbGVjdGVkKHJlY29yZDogRW50aXR5UmVjb3JkPG9iamVjdD4pOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHN0YXRlID0gcmVjb3JkLnN0YXRlO1xyXG4gICAgcmV0dXJuIHN0YXRlLnNlbGVjdGVkID8gc3RhdGUuc2VsZWN0ZWQgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGlzSW1nKHZhbHVlKSB7XHJcbiAgICBpZiAodGhpcy5pc1VybCh2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBbJ2pwZycsICdwbmcnLCAnZ2lmJ10uaW5kZXhPZih2YWx1ZS5zcGxpdCgnLicpLnBvcCgpLnRvTG93ZXJDYXNlKCkpICE9PSAtMVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNVcmwodmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdmFsdWUuc2xpY2UoMCwgOCkgPT09ICdodHRwczovLycgfHwgdmFsdWUuc2xpY2UoMCwgNykgPT09ICdodHRwOi8vJ1xyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIGFjY2VzcyBhbiBlbnRpdHkncyB2YWx1ZXNcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHJldHVybnMgQW55IHZhbHVlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VmFsdWUocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IGFueSB7XHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgbGV0IHZhbHVlO1xyXG4gICAgaWYgKGNvbHVtbi52YWx1ZUFjY2Vzc29yICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi52YWx1ZUFjY2Vzc29yKGVudGl0eSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRlbXBsYXRlLnZhbHVlQWNjZXNzb3IgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZS52YWx1ZUFjY2Vzc29yKGVudGl0eSwgY29sdW1uLm5hbWUsIHJlY29yZCk7XHJcbiAgICB9XHJcbiAgICB2YWx1ZSA9IHRoaXMuc3RvcmUuZ2V0UHJvcGVydHkoZW50aXR5LCBjb2x1bW4ubmFtZSk7XHJcblxyXG4gICAgaWYgKGNvbHVtbi50eXBlID09PSAnYm9vbGVhbicpIHtcclxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgdmFsdWUgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJyAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpe1xyXG4gICAgICAgICAgdmFsdWUgPSBCb29sZWFuKHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdmFsdWUgPSBKU09OLnBhcnNlKHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuaXNFZGl0aW9uKHJlY29yZCkpe1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUgPyAnJiMxMDAwMzsnIDogJyc7IC8vIGNoZWNrIG1hcmtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2xpc3QnICYmIHZhbHVlICYmIGNvbHVtbi5kb21haW5WYWx1ZXMpIHtcclxuICAgICAgY29uc3QgZW50aXR5ID0gcmVjb3JkLmVudGl0eSBhcyBhbnk7XHJcbiAgICAgIGlmIChjb2x1bW4ubXVsdGlwbGUpIHtcclxuICAgICAgICBsZXQgbGlzdF9pZDtcclxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbGlzdF9pZCA9IHZhbHVlLm1hdGNoKC9bXFx3Li1dKy9nKS5tYXAoTnVtYmVyKSA6IGxpc3RfaWQgPSB2YWx1ZTtcclxuICAgICAgICBsZXQgbGlzdF9vcHRpb24gPSBbXTtcclxuXHJcbiAgICAgICAgY29sdW1uLmRvbWFpblZhbHVlcy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBpZiAobGlzdF9pZC5pbmNsdWRlcyhvcHRpb24uaWQpKSB7XHJcbiAgICAgICAgICAgIGlmIChyZWNvcmQuZWRpdGlvbikge1xyXG4gICAgICAgICAgICAgIGxpc3Rfb3B0aW9uLnB1c2gob3B0aW9uLmlkKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBsaXN0X29wdGlvbi5wdXNoKG9wdGlvbi52YWx1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5pc0VkaXRpb24ocmVjb3JkKSA/IHZhbHVlID0gbGlzdF9pZCA6IHZhbHVlID0gbGlzdF9vcHRpb247XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpIHtcclxuICAgICAgICAgIHZhbHVlID0gZW50aXR5Py5wcm9wZXJ0aWVzW3RoaXMuZ2V0Q29sdW1uS2V5V2l0aG91dFByb3BlcnRpZXNUYWcoY29sdW1uLmxpbmtDb2x1bW5Gb3JjZSldO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAob3B0aW9uLnZhbHVlID09PSB2YWx1ZSB8fCBvcHRpb24uaWQgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0VkaXRpb24ocmVjb3JkKSA/IHZhbHVlID0gb3B0aW9uLmlkIDogdmFsdWUgPSBvcHRpb24udmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScgJiYgdmFsdWUgJiYgY29sdW1uLmRvbWFpblZhbHVlcykge1xyXG4gICAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5IGFzIGFueTtcclxuICAgICAgaWYgKCF0aGlzLmlzRWRpdGlvbihyZWNvcmQpICYmIGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpIHtcclxuICAgICAgICB2YWx1ZSA9IGVudGl0eT8ucHJvcGVydGllc1t0aGlzLmdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbi5saW5rQ29sdW1uRm9yY2UpXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb2x1bW4uZG9tYWluVmFsdWVzLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUgfHwgb3B0aW9uLmlkID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG9wdGlvbi52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgIGlmICh0aGlzLmlzRWRpdGlvbihyZWNvcmQpKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICBsZXQgZGF0ZSA9IG1vbWVudCh2YWx1ZSk7XHJcbiAgICAgICAgICB2YWx1ZSA9IGRhdGUuZm9ybWF0KCk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5jb250cm9sc1tjb2x1bW4ubmFtZV0uc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICghdGhpcy5pc0VkaXRpb24ocmVjb3JkKSAmJiB2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHZhbHVlID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHZhbHVlID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kIHRvIGFjY2VzcyBhbiBlbnRpdHkncyB2YWxpZGF0aW9uIHZhbHVlc1xyXG4gICAqIEBwYXJhbSBjb2x1bW4gQ29sdW1uXHJcbiAgICogQHBhcmFtIHZhbGlkYXRpb25UeXBlIHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIEFueSB2YWx1ZSAoZmFsc2UgaWYgbm8gdmFsaWRhdGlvbiBvciBub3QgdGhlIG9uZSBjb25jZXJuZWQpXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0VmFsaWRhdGlvbkF0dHJpYnV0ZVZhbHVlKGNvbHVtbjogRW50aXR5VGFibGVDb2x1bW4sIHZhbGlkYXRpb25UeXBlOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgaWYgKGNvbHVtbi52YWxpZGF0aW9uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLnZhbGlkYXRpb25bdmFsaWRhdGlvblR5cGVdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbi52YWxpZGF0aW9uW3ZhbGlkYXRpb25UeXBlXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0VkaXRpb24ocmVjb3JkKSB7XHJcbiAgICByZXR1cm4gcmVjb3JkLmVudGl0eS5lZGl0aW9uID8gdHJ1ZSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0eXBlIG9mIHJlbmRlcmVyIG9mIGEgY29sdW1uXHJcbiAgICogQHBhcmFtIGNvbHVtbiBDb2x1bW5cclxuICAgKiBAcmV0dXJucyBSZW5kZXJlciB0eXBlXHJcbiAgICogQGludGVybmFsXHJcbiAgICovXHJcbiAgZ2V0Q29sdW1uUmVuZGVyZXIoY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IEVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIge1xyXG4gICAgaWYgKGNvbHVtbi5yZW5kZXJlciAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4ucmVuZGVyZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gRW50aXR5VGFibGVDb2x1bW5SZW5kZXJlci5EZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0YWJsZSBuZ0NsYXNzXHJcbiAgICogQHJldHVybnMgbmdDbGFzc1xyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIGdldFRhYmxlQ2xhc3MoKToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdpZ28tZW50aXR5LXRhYmxlLXdpdGgtc2VsZWN0aW9uJzogdGhpcy5zZWxlY3Rpb25cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYSBoZWFkZXIgbmdDbGFzc1xyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRIZWFkZXJDbGFzcygpOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0ge1xyXG4gICAgY29uc3QgZnVuYyA9IHRoaXMudGVtcGxhdGUuaGVhZGVyQ2xhc3NGdW5jO1xyXG4gICAgaWYgKGZ1bmMgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xyXG4gICAgICByZXR1cm4gZnVuYygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGEgcm93IG5nQ2xhc3NcclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRSb3dDbGFzcyhyZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+KToge1trZXk6IHN0cmluZ106IGJvb2xlYW59IHtcclxuICAgIGNvbnN0IGVudGl0eSA9IHJlY29yZC5lbnRpdHk7XHJcbiAgICBjb25zdCBmdW5jID0gdGhpcy50ZW1wbGF0ZS5yb3dDbGFzc0Z1bmM7XHJcbiAgICBpZiAoZnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIHJldHVybiBmdW5jKGVudGl0eSwgcmVjb3JkKTtcclxuICAgIH1cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiBhIHJvdyBuZ0NsYXNzXHJcbiAgICogQHBhcmFtIHJlY29yZCBSZWNvcmRcclxuICAgKiBAcGFyYW0gY29sdW1uIENvbHVtblxyXG4gICAqIEByZXR1cm5zIG5nQ2xhc3NcclxuICAgKiBAaW50ZXJuYWxcclxuICAgKi9cclxuICBnZXRDZWxsQ2xhc3MocmVjb3JkOiBFbnRpdHlSZWNvcmQ8b2JqZWN0PiwgY29sdW1uOiBFbnRpdHlUYWJsZUNvbHVtbik6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSB7XHJcbiAgICBjb25zdCBlbnRpdHkgPSByZWNvcmQuZW50aXR5O1xyXG4gICAgY29uc3QgY2xzID0ge307XHJcblxyXG4gICAgY29uc3QgdGFibGVGdW5jID0gdGhpcy50ZW1wbGF0ZS5jZWxsQ2xhc3NGdW5jO1xyXG4gICAgaWYgKHRhYmxlRnVuYyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oY2xzLCB0YWJsZUZ1bmMoZW50aXR5LCBjb2x1bW4sIHJlY29yZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbHVtbkZ1bmMgPSBjb2x1bW4uY2VsbENsYXNzRnVuYztcclxuICAgIGlmIChjb2x1bW5GdW5jIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcclxuICAgICAgT2JqZWN0LmFzc2lnbihjbHMsIGNvbHVtbkZ1bmMoZW50aXR5LCByZWNvcmQpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY2xzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2hlbiBhIGJ1dHRvbiBpcyBjbGlja2VkXHJcbiAgICogQHBhcmFtIGZ1bmMgRnVuY3Rpb25cclxuICAgKiBAcGFyYW0gcmVjb3JkIFJlY29yZFxyXG4gICAqIEBpbnRlcm5hbFxyXG4gICAqL1xyXG4gIG9uQnV0dG9uQ2xpY2soXHJcbiAgICBjbGlja0Z1bmM6IChlbnRpdHk6IG9iamVjdCwgcmVjb3JkPzogRW50aXR5UmVjb3JkPG9iamVjdD4pID0+IHZvaWQsXHJcbiAgICByZWNvcmQ6IEVudGl0eVJlY29yZDxvYmplY3Q+XHJcbiAgKSB7XHJcbiAgICB0aGlzLmVuYWJsZUVkaXQocmVjb3JkKTtcclxuICAgIGlmICh0eXBlb2YgY2xpY2tGdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNsaWNrRnVuYyhyZWNvcmQuZW50aXR5LCByZWNvcmQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmUgY29sdW1uIG5hbWUgd2l0aG91dCBoaXMgXCJwcm9wZXJ0aWVzXCIgdGFnICh1c2VmdWwgZm9yIGVkaXRpb24gd29ya3NwYWNlIHByb3BlcnRpZXMpXHJcbiAgICovXHJcbiAgcHVibGljIGdldENvbHVtbktleVdpdGhvdXRQcm9wZXJ0aWVzVGFnKGNvbHVtbjogc3RyaW5nKSB7XHJcbiAgICBpZiAoY29sdW1uLmluY2x1ZGVzKCdwcm9wZXJ0aWVzLicpKSB7XHJcbiAgICAgIHJldHVybiBjb2x1bW4uc3BsaXQoJy4nKVsxXTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb2x1bW47XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIiBbbmdTdHlsZV09XCJ7J2hlaWdodCc6IHRhYmxlSGVpZ2h0fVwiPlxyXG4gIDx0YWJsZSBtYXQtdGFibGUgbWF0U29ydCBbbmdDbGFzc109XCJnZXRUYWJsZUNsYXNzKClcIiBbZGF0YVNvdXJjZV09XCJkYXRhU291cmNlXCIgW3RyYWNrQnldPVwiZ2V0VHJhY2tCeUZ1bmN0aW9uKClcIiAobWF0U29ydENoYW5nZSk9XCJvblNvcnQoJGV2ZW50KVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInNlbGVjdGlvbkNoZWNrYm94XCIgY2xhc3M9XCJtYXQtY2VsbC1jaGVja2JveFwiPlxyXG4gICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0TWFueVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uU3RhdGUkIHwgYXN5bmMgYXMgc2VsZWN0aW9uU3RhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggKGNoYW5nZSk9XCJvblRvZ2dsZVJvd3MoJGV2ZW50LmNoZWNrZWQpXCIgW2NoZWNrZWRdPVwic2VsZWN0aW9uU3RhdGUgPT09IGVudGl0eVRhYmxlU2VsZWN0aW9uU3RhdGUuQWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdGlvblN0YXRlID09PSBlbnRpdHlUYWJsZVNlbGVjdGlvblN0YXRlLlNvbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAobW91c2Vkb3duKT1cIiRldmVudC5zaGlmdEtleSA/ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpIDogbnVsbFwiIChjbGljayk9XCIkZXZlbnQuc2hpZnRLZXkgP1xyXG4gICAgICAgICAgICAgIG9uU2hpZnRUb2dnbGVSb3coIXJvd0lzU2VsZWN0ZWQocmVjb3JkKSwgcmVjb3JkLCAkZXZlbnQpIDogJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgKGNoYW5nZSk9XCJvblRvZ2dsZVJvdygkZXZlbnQuY2hlY2tlZCxyZWNvcmQpXCJcclxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJyb3dJc1NlbGVjdGVkKHJlY29yZClcIj5cclxuICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiB0ZW1wbGF0ZS5jb2x1bW5zXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBtYXQtc29ydC1oZWFkZXIgW21hdFRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXAgPyBjb2x1bW4udG9vbHRpcCA6IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7e2NvbHVtbi50aXRsZX19XHJcbiAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uSXNTb3J0YWJsZShjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbbWF0VG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcCA/IGNvbHVtbi50b29sdGlwIDogdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7Y29sdW1uLnRpdGxlfX1cclxuICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldENvbHVtblJlbmRlcmVyKGNvbHVtbikgYXMgY29sdW1uUmVuZGVyZXJcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuRGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRDZWxsRGVmPVwibGV0IHJlY29yZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsRGVmYXVsdFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBpZ29JbWFnZUVycm9yICpuZ0lmPVwiaXNJbWcoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIG5vdEltZ1wiIHNyYz1cInt7KGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNlY3VyZUltYWdlKSB8IGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWc+PHNwYW4+e3tcclxuICAgICAgICAgICAgICAgICAgICAnaWdvLmNvbW1vbi5lbnRpdHktdGFibGUudGFyZ2V0SHRtbFVybCcgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkhUTUxcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCByZWNvcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBtYXQtY2VsbCBjbGFzcz1cIm1hdC1jZWxsLXRleHRcIiAqbmdJZj1cIiFpc1VybChnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikpO2Vsc2UgaXNBblVybEhUTUxcIiBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpc0FuVXJsSFRNTD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIHRhcmdldD0nX2JsYW5rJyByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBpZ29JbWFnZUVycm9yICpuZ0lmPVwiaXNJbWcoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIG5vdEltZ1wiIHNyYz1cInt7KGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNlY3VyZUltYWdlKSB8IGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub3RJbWc+PHNwYW4+e3sgJ2lnby5nZW8udGFyZ2V0SHRtbFVybCcgfFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZSB9fSA8L3NwYW4+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuVW5zYW5pdGl6ZWRIVE1MXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0IGVkaXRpb25cIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiICpuZ0lmPVwiaXNFZGl0aW9uKHJlY29yZCk7ZWxzZSBpc1Vuc2FuaXRpemVkSFRNTFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDZWxsQ2xhc3MocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtcGlja2VyXCIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGVDaGFuZ2UpPVwib25EYXRlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRpbWVcIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAndGltZSdcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgc3RlcD1cIjkwMFwiIChmb2N1cyk9XCJjb2x1bW4ub25Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwiY29sdW1uLm9uQ2hhbmdlKCRldmVudClcIiAoYmx1cik9XCJjb2x1bW4ub25CbHVyKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiY2xhc3NfbnVtYmVyX2VkaXRpb25cIiAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnbnVtYmVyJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIiBzdGVwPVwie3tjb2x1bW4uc3RlcH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7Z2V0VmFsdWUocmVjb3JkLGNvbHVtbil9fVwiIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKX19XCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBtaW49XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtaW5WYWx1ZScpfX1cIiBtYXg9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYXhWYWx1ZScpfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiAqbmdJZj1cIiFjb2x1bW4udHlwZSB8fCBjb2x1bW4udHlwZSA9PT0nc3RyaW5nJ1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiY29sdW1uLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil9fVwiIChpbnB1dCk9XCJvblZhbHVlQ2hhbmdlKGNvbHVtbi5uYW1lLCByZWNvcmQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKX19XCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAqbmdJZj1cImNvbHVtbi50eXBlID09PSAnYm9vbGVhbidcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgW2NoZWNrZWRdPVwiZ2V0VmFsdWUocmVjb3JkLGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25Cb29sZWFuVmFsdWVDaGFuZ2UoY29sdW1uLm5hbWUsIHJlY29yZCwkZXZlbnQpXCI+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2xpc3QnXCIgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgW211bHRpcGxlXT1cImNvbHVtbi5tdWx0aXBsZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3RWYWx1ZUNoYW5nZShjb2x1bW4ubmFtZSwgcmVjb3JkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY29sdW1uLmRvbWFpblZhbHVlc1wiIFt2YWx1ZV09XCJvcHRpb24uaWRcIiBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImNvbHVtbi5uYW1lXCIgKm5nSWY9XCJjb2x1bW4udHlwZSA9PT0gJ2F1dG9jb21wbGV0ZSdcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ7e2dldFZhbGlkYXRpb25BdHRyaWJ1dGVWYWx1ZShjb2x1bW4sICdtYW5kYXRvcnknKX19XCIgdmFsdWU9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5PVwie3tnZXRWYWxpZGF0aW9uQXR0cmlidXRlVmFsdWUoY29sdW1uLCAncmVhZG9ubHknKX19XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25BdXRvY29tcGxldGVWYWx1ZUNoYW5nZShjb2x1bW4sIHJlY29yZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWxXaWR0aD1cIjQzMHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zW2NvbHVtbi5uYW1lXSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb24uaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi52YWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNVbnNhbml0aXplZEhUTUw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiICpuZ0lmPVwiIWlzVXJsKGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSk7ZWxzZSBpc0FuVXJsVW5zYW5pdGl6ZWRIVE1MXCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbikgfCBzYW5pdGl6ZUh0bWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXNBblVybFVuc2FuaXRpemVkSFRNTD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsIGNsYXNzPVwibWF0LWNlbGwtdGV4dFwiIFtuZ0NsYXNzXT1cImdldENlbGxDbGFzcyhyZWNvcmQsIGNvbHVtbilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJ7e2dldFZhbHVlKHJlY29yZCwgY29sdW1uKX19XCIgdGFyZ2V0PSdfYmxhbmsnIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBpZ29JbWFnZUVycm9yICpuZ0lmPVwiaXNJbWcoZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pKTtlbHNlIG5vdEltZ1wiIHNyYz1cInt7KGdldFZhbHVlKHJlY29yZCwgY29sdW1uKSB8IHNlY3VyZUltYWdlKSB8IGFzeW5jfX1cIiB3aWR0aD1cIjUwXCIgaGVpZ3RoPVwiYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm90SW1nPjxzcGFuPnt7ICdpZ28uZ2VvLnRhcmdldEh0bWxVcmwnIHwgdHJhbnNsYXRlIH19IDwvc3Bhbj48L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uUmVuZGVyZXIgPT09IGVudGl0eVRhYmxlQ29sdW1uUmVuZGVyZXIuSWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCIgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiY29sdW1uLm9uQ2xpY2tcIiBzdmdJY29uPVwie3tnZXRWYWx1ZShyZWNvcmQsIGNvbHVtbil8fCBjb2x1bW4uaWNvbn19XCIgKGNsaWNrKT1cImNvbHVtbi5vbkNsaWNrKCRldmVudClcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIWNvbHVtbi5vbkNsaWNrXCIgc3ZnSWNvbj1cInt7Z2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pfHwgY29sdW1uLmljb259fVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblJlbmRlcmVyID09PSBlbnRpdHlUYWJsZUNvbHVtblJlbmRlcmVyLkJ1dHRvbkdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdENlbGxEZWY9XCJsZXQgcmVjb3JkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgY2xhc3M9XCJtYXQtY2VsbC10ZXh0XCIgW25nQ2xhc3NdPVwiZ2V0Q2VsbENsYXNzKHJlY29yZCwgY29sdW1uKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBidXR0b24gb2YgZ2V0VmFsdWUocmVjb3JkLCBjb2x1bW4pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRpb24ocmVjb3JkKSA9PT0gYnV0dG9uLmVkaXRNb2RlIHx8IGJ1dHRvbi5lZGl0TW9kZSA9PT0gdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiYnV0dG9uLnN0eWxlID09PSAnbWF0LWljb24tYnV0dG9uJ1wiIGlnb1N0b3BQcm9wYWdhdGlvbiBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uLmNvbG9yXCIgKG1vdXNlZG93bik9XCJvbkJ1dHRvbkNsaWNrKGJ1dHRvbi5jbGljaywgcmVjb3JkKVwiIFtkaXNhYmxlZF09XCJidXR0b24uZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cInt7YnV0dG9uLmljb259fVwiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJidXR0b24uc3R5bGUgIT09ICdtYXQtaWNvbi1idXR0b24nXCIgaWdvU3RvcFByb3BhZ2F0aW9uIG1hdC1taW5pLWZhYlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJidXR0b24uY29sb3JcIiAobW91c2Vkb3duKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uLmNsaWNrLCByZWNvcmQpXCIgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwie3tidXR0b24uaWNvbn19XCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwiaGVhZGVyczsgc3RpY2t5OiBmaXhlZEhlYWRlclwiIFtuZ0NsYXNzXT1cImdldEhlYWRlckNsYXNzKClcIj5cclxuICAgICAgPC90cj5cclxuICAgICAgPHRyIG1hdC1yb3cgaWdvRW50aXR5VGFibGVSb3cgKm1hdFJvd0RlZj1cImxldCByZWNvcmQ7IGNvbHVtbnM6IGhlYWRlcnM7XCIgW3Njcm9sbEJlaGF2aW9yXT1cInNjcm9sbEJlaGF2aW9yXCIgW25nQ2xhc3NdPVwiZ2V0Um93Q2xhc3MocmVjb3JkKVwiIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCIgW3NlbGVjdGVkXT1cInJvd0lzU2VsZWN0ZWQocmVjb3JkKVwiIChzZWxlY3QpPVwib25Sb3dTZWxlY3QocmVjb3JkKVwiIChjbGljayk9XCJvblJvd0NsaWNrKHJlY29yZClcIj5cclxuICAgICAgPC90cj5cclxuICA8L3RhYmxlPlxyXG4gIDxpZ28tZW50aXR5LXRhYmxlLXBhZ2luYXRvciAqbmdJZj1cIndpdGhQYWdpbmF0b3JcIiBbc3RvcmVdPVwic3RvcmVcIiBbcGFnaW5hdG9yT3B0aW9uc109XCJwYWdpbmF0b3JPcHRpb25zXCIgW2VudGl0eVNvcnRDaGFuZ2UkXT1cImVudGl0eVNvcnRDaGFuZ2UkXCIgKHBhZ2luYXRvckNoYW5nZSk9XCJwYWdpbmF0b3JDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gIDwvaWdvLWVudGl0eS10YWJsZS1wYWdpbmF0b3I+XHJcbjwvZGl2PiJdfQ==
@@ -99,4 +99,4 @@ IgoEntityTableModule.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ imports: [Com
99
99
  MatInputModule,
100
100
  MatDatepickerModule,
101
101
  MatTooltipModule], exports: [EntityTableComponent] }); })();
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDMUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDeEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFFM0Q7O0dBRUc7QUErQkgsTUFBTSxPQUFPLG9CQUFvQjs7d0ZBQXBCLG9CQUFvQjtzRUFBcEIsb0JBQW9COzBFQTVCN0IsWUFBWTtRQUNaLGNBQWM7UUFDZCxxQkFBcUI7UUFDckIsYUFBYTtRQUNiLGFBQWE7UUFDYixlQUFlO1FBQ2YsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixlQUFlO1FBQ2Ysd0JBQXdCO1FBQ3hCLG1CQUFtQjtRQUNuQiw2QkFBNkI7UUFDN0IsY0FBYztRQUNkLGlCQUFpQjtRQUNqQixXQUFXO1FBQ1gsbUJBQW1CO1FBQ25CLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsZ0JBQWdCO3VGQVVQLG9CQUFvQjtjQTlCaEMsUUFBUTtlQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLGNBQWM7b0JBQ2QscUJBQXFCO29CQUNyQixhQUFhO29CQUNiLGFBQWE7b0JBQ2IsZUFBZTtvQkFDZixpQkFBaUI7b0JBQ2pCLGtCQUFrQjtvQkFDbEIsZUFBZTtvQkFDZix3QkFBd0I7b0JBQ3hCLG1CQUFtQjtvQkFDbkIsNkJBQTZCO29CQUM3QixjQUFjO29CQUNkLGlCQUFpQjtvQkFDakIsV0FBVztvQkFDWCxtQkFBbUI7b0JBQ25CLGNBQWM7b0JBQ2QsbUJBQW1CO29CQUNuQixnQkFBZ0I7aUJBQ2pCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxvQkFBb0I7aUJBQ3JCO2dCQUNELFlBQVksRUFBRTtvQkFDWixvQkFBb0I7b0JBQ3BCLHVCQUF1QjtpQkFDeEI7YUFDRjs7d0ZBQ1ksb0JBQW9CLG1CQUo3QixvQkFBb0I7UUFDcEIsdUJBQXVCLGFBekJ2QixZQUFZO1FBQ1osY0FBYztRQUNkLHFCQUFxQjtRQUNyQixhQUFhO1FBQ2IsYUFBYTtRQUNiLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZix3QkFBd0I7UUFDeEIsbUJBQW1CO1FBQ25CLDZCQUE2QjtRQUM3QixjQUFjO1FBQ2QsaUJBQWlCO1FBQ2pCLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsY0FBYztRQUNkLG1CQUFtQjtRQUNuQixnQkFBZ0IsYUFHaEIsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRTb3J0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5cbmltcG9ydCB7IElnb1N0b3BQcm9wYWdhdGlvbk1vZHVsZSB9IGZyb20gJy4uLy4uL3N0b3AtcHJvcGFnYXRpb24vc3RvcC1wcm9wYWdhdGlvbi5tb2R1bGUnO1xuaW1wb3J0IHsgSWdvQ3VzdG9tSHRtbE1vZHVsZSB9IGZyb20gJy4uLy4uL2N1c3RvbS1odG1sL2N1c3RvbS1odG1sLm1vZHVsZSc7XG5pbXBvcnQgeyBFbnRpdHlUYWJsZVJvd0RpcmVjdGl2ZSB9IGZyb20gJy4vZW50aXR5LXRhYmxlLXJvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRW50aXR5VGFibGVDb21wb25lbnQgfSBmcm9tICcuL2VudGl0eS10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IElnb0VudGl0eVRhYmxlUGFnaW5hdG9yTW9kdWxlIH0gZnJvbSAnLi4vZW50aXR5LXRhYmxlLXBhZ2luYXRvci9lbnRpdHktdGFibGUtcGFnaW5hdG9yLm1vZHVsZSc7XG5pbXBvcnQgeyBJZ29JbWFnZU1vZHVsZSB9IGZyb20gJy4uLy4uL2ltYWdlL2ltYWdlLm1vZHVsZSc7XG5pbXBvcnQgeyBJZ29MYW5ndWFnZU1vZHVsZSB9IGZyb20gJ0BpZ28yL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7IE1hdERhdGVwaWNrZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kYXRlcGlja2VyJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5cbi8qKlxuICogQGlnbm9yZVxuICovXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE1hdFRhYmxlTW9kdWxlLFxuICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcbiAgICBNYXRTb3J0TW9kdWxlLFxuICAgIE1hdEljb25Nb2R1bGUsXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxuICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcbiAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgSWdvU3RvcFByb3BhZ2F0aW9uTW9kdWxlLFxuICAgIElnb0N1c3RvbUh0bWxNb2R1bGUsXG4gICAgSWdvRW50aXR5VGFibGVQYWdpbmF0b3JNb2R1bGUsXG4gICAgSWdvSW1hZ2VNb2R1bGUsXG4gICAgSWdvTGFuZ3VhZ2VNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBNYXRJbnB1dE1vZHVsZSxcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGVcbiAgXSxcbiAgZXhwb3J0czogW1xuICAgIEVudGl0eVRhYmxlQ29tcG9uZW50XG4gIF0sXG4gIGRlY2xhcmF0aW9uczogW1xuICAgIEVudGl0eVRhYmxlQ29tcG9uZW50LFxuICAgIEVudGl0eVRhYmxlUm93RGlyZWN0aXZlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgSWdvRW50aXR5VGFibGVNb2R1bGUge31cbiJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LXRhYmxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvbGliL2VudGl0eS9lbnRpdHktdGFibGUvZW50aXR5LXRhYmxlLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDMUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDeEcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7QUFFM0Q7O0dBRUc7QUErQkgsTUFBTSxPQUFPLG9CQUFvQjs7d0ZBQXBCLG9CQUFvQjtzRUFBcEIsb0JBQW9COzBFQTVCN0IsWUFBWTtRQUNaLGNBQWM7UUFDZCxxQkFBcUI7UUFDckIsYUFBYTtRQUNiLGFBQWE7UUFDYixlQUFlO1FBQ2YsaUJBQWlCO1FBQ2pCLGtCQUFrQjtRQUNsQixlQUFlO1FBQ2Ysd0JBQXdCO1FBQ3hCLG1CQUFtQjtRQUNuQiw2QkFBNkI7UUFDN0IsY0FBYztRQUNkLGlCQUFpQjtRQUNqQixXQUFXO1FBQ1gsbUJBQW1CO1FBQ25CLGNBQWM7UUFDZCxtQkFBbUI7UUFDbkIsZ0JBQWdCO3VGQVVQLG9CQUFvQjtjQTlCaEMsUUFBUTtlQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLGNBQWM7b0JBQ2QscUJBQXFCO29CQUNyQixhQUFhO29CQUNiLGFBQWE7b0JBQ2IsZUFBZTtvQkFDZixpQkFBaUI7b0JBQ2pCLGtCQUFrQjtvQkFDbEIsZUFBZTtvQkFDZix3QkFBd0I7b0JBQ3hCLG1CQUFtQjtvQkFDbkIsNkJBQTZCO29CQUM3QixjQUFjO29CQUNkLGlCQUFpQjtvQkFDakIsV0FBVztvQkFDWCxtQkFBbUI7b0JBQ25CLGNBQWM7b0JBQ2QsbUJBQW1CO29CQUNuQixnQkFBZ0I7aUJBQ2pCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxvQkFBb0I7aUJBQ3JCO2dCQUNELFlBQVksRUFBRTtvQkFDWixvQkFBb0I7b0JBQ3BCLHVCQUF1QjtpQkFDeEI7YUFDRjs7d0ZBQ1ksb0JBQW9CLG1CQUo3QixvQkFBb0I7UUFDcEIsdUJBQXVCLGFBekJ2QixZQUFZO1FBQ1osY0FBYztRQUNkLHFCQUFxQjtRQUNyQixhQUFhO1FBQ2IsYUFBYTtRQUNiLGVBQWU7UUFDZixpQkFBaUI7UUFDakIsa0JBQWtCO1FBQ2xCLGVBQWU7UUFDZix3QkFBd0I7UUFDeEIsbUJBQW1CO1FBQ25CLDZCQUE2QjtRQUM3QixjQUFjO1FBQ2QsaUJBQWlCO1FBQ2pCLFdBQVc7UUFDWCxtQkFBbUI7UUFDbkIsY0FBYztRQUNkLG1CQUFtQjtRQUNuQixnQkFBZ0IsYUFHaEIsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0U29ydE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xyXG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuXHJcbmltcG9ydCB7IElnb1N0b3BQcm9wYWdhdGlvbk1vZHVsZSB9IGZyb20gJy4uLy4uL3N0b3AtcHJvcGFnYXRpb24vc3RvcC1wcm9wYWdhdGlvbi5tb2R1bGUnO1xyXG5pbXBvcnQgeyBJZ29DdXN0b21IdG1sTW9kdWxlIH0gZnJvbSAnLi4vLi4vY3VzdG9tLWh0bWwvY3VzdG9tLWh0bWwubW9kdWxlJztcclxuaW1wb3J0IHsgRW50aXR5VGFibGVSb3dEaXJlY3RpdmUgfSBmcm9tICcuL2VudGl0eS10YWJsZS1yb3cuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRW50aXR5VGFibGVDb21wb25lbnQgfSBmcm9tICcuL2VudGl0eS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBJZ29FbnRpdHlUYWJsZVBhZ2luYXRvck1vZHVsZSB9IGZyb20gJy4uL2VudGl0eS10YWJsZS1wYWdpbmF0b3IvZW50aXR5LXRhYmxlLXBhZ2luYXRvci5tb2R1bGUnO1xyXG5pbXBvcnQgeyBJZ29JbWFnZU1vZHVsZSB9IGZyb20gJy4uLy4uL2ltYWdlL2ltYWdlLm1vZHVsZSc7XHJcbmltcG9ydCB7IElnb0xhbmd1YWdlTW9kdWxlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcblxyXG4vKipcclxuICogQGlnbm9yZVxyXG4gKi9cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBNYXRUYWJsZU1vZHVsZSxcclxuICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcclxuICAgIE1hdFNvcnRNb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRQYWdpbmF0b3JNb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBJZ29TdG9wUHJvcGFnYXRpb25Nb2R1bGUsXHJcbiAgICBJZ29DdXN0b21IdG1sTW9kdWxlLFxyXG4gICAgSWdvRW50aXR5VGFibGVQYWdpbmF0b3JNb2R1bGUsXHJcbiAgICBJZ29JbWFnZU1vZHVsZSxcclxuICAgIElnb0xhbmd1YWdlTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZVxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgRW50aXR5VGFibGVDb21wb25lbnRcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgRW50aXR5VGFibGVDb21wb25lbnQsXHJcbiAgICBFbnRpdHlUYWJsZVJvd0RpcmVjdGl2ZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIElnb0VudGl0eVRhYmxlTW9kdWxlIHt9XHJcbiJdfQ==