@sebgroup/green-angular 5.2.0 → 5.3.1

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 (36) hide show
  1. package/esm2022/lib/shared/core-control/core-control.directive.mjs +4 -4
  2. package/esm2022/src/lib/shared/core-control/core-control.directive.mjs +4 -4
  3. package/esm2022/src/v-angular/account-number/account-number.module.mjs +12 -15
  4. package/esm2022/src/v-angular/account-number/account-number.pipe.mjs +3 -2
  5. package/esm2022/src/v-angular/modal/fold-out/fold-out.component.mjs +2 -2
  6. package/esm2022/src/v-angular/table/table.component.mjs +25 -6
  7. package/esm2022/v-angular/account-number/account-number.module.mjs +15 -0
  8. package/esm2022/v-angular/account-number/account-number.pipe.mjs +55 -0
  9. package/esm2022/v-angular/account-number/index.mjs +3 -0
  10. package/esm2022/v-angular/index.mjs +2 -1
  11. package/esm2022/v-angular/modal/fold-out/fold-out.component.mjs +2 -2
  12. package/esm2022/v-angular/table/table.component.mjs +25 -6
  13. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs +3 -3
  14. package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs.map +1 -1
  15. package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs +12 -14
  16. package/fesm2022/sebgroup-green-angular-src-v-angular-account-number.mjs.map +1 -1
  17. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs +2 -2
  18. package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs.map +1 -1
  19. package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs +24 -5
  20. package/fesm2022/sebgroup-green-angular-src-v-angular-table.mjs.map +1 -1
  21. package/fesm2022/sebgroup-green-angular-v-angular.mjs +92 -9
  22. package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -1
  23. package/fesm2022/sebgroup-green-angular.mjs +3 -3
  24. package/fesm2022/sebgroup-green-angular.mjs.map +1 -1
  25. package/lib/shared/core-control/core-control.directive.d.ts +1 -1
  26. package/package.json +2 -2
  27. package/src/lib/shared/core-control/core-control.directive.d.ts +1 -1
  28. package/src/v-angular/account-number/README.md +6 -13
  29. package/src/v-angular/account-number/account-number.module.d.ts +0 -6
  30. package/src/v-angular/account-number/account-number.pipe.d.ts +1 -1
  31. package/src/v-angular/table/table.component.d.ts +11 -1
  32. package/v-angular/account-number/account-number.module.d.ts +2 -0
  33. package/v-angular/account-number/account-number.pipe.d.ts +32 -0
  34. package/v-angular/account-number/index.d.ts +2 -0
  35. package/v-angular/index.d.ts +1 -0
  36. package/v-angular/table/table.component.d.ts +11 -1
@@ -125,6 +125,15 @@ export class TableComponent {
125
125
  * Defaults to true.
126
126
  */
127
127
  this.selectable = true;
128
+ /**
129
+ * Used to enable/disable expandable rows.
130
+ * Defaults to false.
131
+ */
132
+ this.expandable = false;
133
+ /**
134
+ * Property name used to describe the subItems in the data table.
135
+ */
136
+ this.subItemsProp = 'subItems';
128
137
  /**
129
138
  * Allow nggv-table to attempt sorting the data in the table. Not recommended if only a subset is loaded or if the dataset is very large.
130
139
  * Disabled by default.
@@ -156,9 +165,9 @@ export class TableComponent {
156
165
  this.subs = [];
157
166
  }
158
167
  ngOnChanges(changes) {
159
- // table data was updated and the rows should be selectable
160
- if ((changes.tableData?.currentValue && this.selectable) ||
161
- (changes.selectable?.currentValue === true && this.tableData)) {
168
+ // Update selectable or expandable rows if table data or settings change
169
+ if ((this.selectable || this.expandable) && changes.tableData?.currentValue ||
170
+ (changes.selectable?.currentValue || changes.expandable?.currentValue) && this.tableData) {
162
171
  const wasChanged = this.registerSelectableRows(changes.tableData.currentValue);
163
172
  if (wasChanged && !this.subs.length) {
164
173
  // first time this is run
@@ -331,6 +340,8 @@ export class TableComponent {
331
340
  propagateItemClick(item, preventDefaultEmit) {
332
341
  if (!preventDefaultEmit)
333
342
  this.ngvRowClick.emit(item);
343
+ if (this.expandable)
344
+ this.toggleRowToExpand(item[this.rowId]);
334
345
  }
335
346
  getAriaLabel(column) {
336
347
  const sortOrder = column.order === 'asc'
@@ -340,12 +351,16 @@ export class TableComponent {
340
351
  return; // no aria labels defined
341
352
  return column.ariaLabelSortable?.replace('{{sortOrder}}', sortOrder);
342
353
  }
354
+ toggleRowToExpand(id) {
355
+ const row = this.rowSelectors.get(id);
356
+ row?.setValue(!row.value);
357
+ }
343
358
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
344
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableComponent, selector: "nggv-table", inputs: { tableColumns: "tableColumns", tableData: "tableData", rowId: "rowId", hasRowSpan: "hasRowSpan", selectable: "selectable", allowLocalSort: "allowLocalSort", thook: "thook", trThookFn: "trThookFn", ariaLabelCheckboxTh: "ariaLabelCheckboxTh", ariaLabelCheckboxTr: "ariaLabelCheckboxTr", ariaLabelsOrderBy: "ariaLabelsOrderBy" }, outputs: { ngvRowClick: "ngvRowClick", ngvRowSelect: "ngvRowSelect", ngvOrderBy: "ngvOrderBy" }, queries: [{ propertyName: "appendedRowsTemplate", first: true, predicate: TableAppendableRowsTemplateDirective, descendants: true }, { propertyName: "customFooterTemplate", first: true, predicate: TableFooterTemplateDirective, descendants: true }, { propertyName: "customTemplates", predicate: TableTemplateDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #sortableThTemplate let-column>\n <button class=\"sg-table-sort\" *transloco=\"let t\">\n <ng-template #thButtonTemplate>\n {{ t(column.label ?? '') }}\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else thButtonTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n </button>\n</ng-template>\n\n<ng-template #notSortableThTemplate let-column>\n <ng-template #defaultThTemplate>\n <ng-container *transloco=\"let t\">\n {{ t(column.label ?? '') }}\n </ng-container>\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else defaultThTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n</ng-template>\n\n<table class=\"gds-table\" *transloco=\"let t\">\n <!-- Table header -->\n <thead>\n <tr>\n <!-- Checkbox column for header -->\n <th *ngIf=\"selectable\" class=\"column__check\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n [formControl]=\"groupSelector\"\n [attr.aria-label]=\"ariaLabelCheckboxTh\"\n [attr.id]=\"'cb_header__' + initId\"\n [attr.data-thook]=\"thook\"\n />\n <label [attr.for]=\"'cb_header__' + initId\"></label>\n </div>\n </th>\n\n <!-- Other columns -->\n <th\n *ngFor=\"let column of tableColumns\"\n [columnType]=\"column.valueType\"\n [sortable]=\"column.sortable\"\n [sortOrder]=\"column.order\"\n [thook]=\"'column-header-' + !!column.property\"\n (click)=\"toggleSortOrder(column)\"\n (keydown.space)=\"toggleSortOrderWithSpace($event, column)\"\n [attr.aria-label]=\"getAriaLabel(column)\"\n [attr.aria-sort]=\"column.order + 'ending'\"\n >\n <ng-container *ngIf=\"column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n sortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n notSortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <!-- Table body -->\n <tbody [formGroup]=\"rowSelectors\">\n <ng-container *ngFor=\"let item of tableData; let i = index\">\n <tr\n [attr.data-thook]=\"item | trThook: i : trThookFn\"\n [attr.data-hasrowspan]=\"hasRowSpan(item)\"\n >\n <!-- Checkbox column for row -->\n <td *ngIf=\"selectable\" class=\"column__check\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n *ngIf=\"rowSelectors.get(item[rowId])\"\n type=\"checkbox\"\n [formControlName]=\"item[rowId]\"\n [attr.aria-label]=\"ariaLabelCheckboxTr\"\n [attr.id]=\"'cb_row__' + initId + '_' + i\"\n [attr.data-thook]=\"'row-select-' + i\"\n />\n <label [attr.for]=\"'cb_row__' + initId + '_' + i\"></label>\n </div>\n </td>\n\n <!-- Other columns -->\n <td\n *ngFor=\"let column of tableColumns\"\n (click)=\"propagateItemClick(item, column.preventDefaultClickEvent)\"\n [columnType]=\"column.valueType\"\n [value]=\"item[column.property]\"\n >\n <ng-container\n *ngIf=\"\n customRowTemplates.get(column.property) as tdTemplate;\n else defaultTdTemplate\n \"\n >\n <!-- Cannot infer tdTemplate as TemplateRef therefore null -->\n <ng-template\n *ngTemplateOutlet=\"\n tdTemplate || null;\n context: { $implicit: item }\n \"\n >\n </ng-template>\n </ng-container>\n\n <ng-template #defaultTdTemplate>\n {{ item[column.property] }}\n </ng-template>\n </td>\n </tr>\n\n <!-- custom appended rows -->\n <ng-container *ngIf=\"appendedRowsTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container\n *ngTemplateOutlet=\"trTemplate || null; context: { $implicit: item }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n\n <!-- Table footer -->\n <tfoot *ngIf=\"customFooterTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container *ngTemplateOutlet=\"trTemplate || null\"> </ng-container>\n </tfoot>\n</table>\n", styles: ["::ng-deep .gds-table{--gds-ref-pallet-base600: hsl(0, 0%, 53%);--sg-table-header-background: #1a1a1a;--sg-table-header-color: #fff;--sg-table-cell-padding-x: .5rem;--sg-table-cell-padding-y: .6875rem;--sg-table-border-width: 1px;--sg-table-border-color: var(--gds-ref-pallet-base600);--sg-table-sort-icon-color: var(--gds-ref-pallet-base600);--gds-ref-pallet-base500: hsl(0, 0%, 68%);--sg-table-sort-icon-color-active: #fff;border-collapse:collapse;border-bottom:var(--sg-table-border-width) solid var(--sg-table-border-color);width:100%;border-bottom:none}::ng-deep .gds-table thead tr th{border-top:var(--sg-table-border-width) solid var(--sg-table-border-color);background:#333;color:var(--sg-table-header-color);padding:.3rem var(--sg-table-cell-padding-x);text-align:left;font-weight:500}::ng-deep .gds-table thead tr th.icon-invert.sg-sortable .sg-table-sort:after{margin-left:0;margin-right:.3rem;order:-1}::ng-deep .gds-table thead tr th .sg-table-sort{color:inherit;width:100%;text-align:left;display:flex;align-items:center;border-radius:.125rem;--gds-sys-color-focus-outline: $_header-color}::ng-deep .gds-table thead tr th .sg-table-sort:focus:not(:focus-visible){box-shadow:none;outline:0}::ng-deep .gds-table thead tr th .sg-table-sort:focus,::ng-deep .gds-table thead tr th .sg-table-sort:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}::ng-deep .gds-table thead tr th[aria-sort] .sg-table-sort:after,::ng-deep .gds-table thead tr th.sg-sortable .sg-table-sort:after{content:\"\";background:var(--gds-ref-pallet-base500);-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3E%3Cpath%20d='M11.107%205.86147L10.6429%205.39741C10.5328%205.28726%2010.3546%205.28726%2010.2445%205.39741L6.60933%209.03257V1.03101C6.60933%200.876318%206.48276%200.749756%206.32808%200.749756H5.67183C5.51714%200.749756%205.39058%200.876318%205.39058%201.03101V9.03257L1.75542%205.39741C1.64526%205.28726%201.46714%205.28726%201.35698%205.39741L0.89292%205.86147C0.782764%205.97163%200.782764%206.14976%200.89292%206.25991L5.80073%2011.1677C5.91089%2011.2779%206.08901%2011.2779%206.19917%2011.1677L11.107%206.25991C11.2171%206.14976%2011.2171%205.97163%2011.107%205.86147Z'%20fill='%23ADADAD'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3E%3Cpath%20d='M11.107%205.86147L10.6429%205.39741C10.5328%205.28726%2010.3546%205.28726%2010.2445%205.39741L6.60933%209.03257V1.03101C6.60933%200.876318%206.48276%200.749756%206.32808%200.749756H5.67183C5.51714%200.749756%205.39058%200.876318%205.39058%201.03101V9.03257L1.75542%205.39741C1.64526%205.28726%201.46714%205.28726%201.35698%205.39741L0.89292%205.86147C0.782764%205.97163%200.782764%206.14976%200.89292%206.25991L5.80073%2011.1677C5.91089%2011.2779%206.08901%2011.2779%206.19917%2011.1677L11.107%206.25991C11.2171%206.14976%2011.2171%205.97163%2011.107%205.86147Z'%20fill='%23ADADAD'/%3E%3C/svg%3E\");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:right;mask-position:right;width:12px;height:12px;margin-left:.3rem}::ng-deep .gds-table thead tr th[aria-sort=ascending] .sg-table-sort:after{background:var(--sg-table-sort-icon-color-active);transform:rotate(180deg)}::ng-deep .gds-table thead tr th[aria-sort=descending] .sg-table-sort:after{background:var(--sg-table-sort-icon-color-active)}::ng-deep .gds-table tbody tr td,::ng-deep .gds-table tbody tr th{border-top:var(--sg-table-border-width) solid var(--sg-table-border-color);padding:var(--sg-table-cell-padding-y) var(--sg-table-cell-padding-x);vertical-align:top}::ng-deep .gds-table tbody tr.collapsible~.sub-row{display:none}::ng-deep .gds-table tbody tr.collapsible.expanded~.sub-row.show{display:table-row}::ng-deep .gds-table tbody tr td.collapse-control,::ng-deep .gds-table tbody tr td.select-control{width:15px}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn{min-height:unset;padding:0;background:transparent}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder{cursor:pointer;width:12px}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder svg{width:12px;fill:#868686}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder svg[name=angle-right]{width:9px}@media (max-width: 36em){::ng-deep .gds-table.table-mobile{width:100%;table-layout:fixed;border-bottom:none}::ng-deep .gds-table.table-mobile thead{position:sticky;top:0;display:block;background:#333}}@media (max-width: 36em) and (hover: none) and (pointer: coarse){::ng-deep .gds-table.table-mobile thead{display:table-header-group}}@media (max-width: 36em){::ng-deep .gds-table.table-mobile thead tr{display:flex;overflow:auto}::ng-deep .gds-table.table-mobile thead tr::-webkit-scrollbar{display:none}::ng-deep .gds-table.table-mobile thead tr th{flex:auto;text-align:left!important;white-space:nowrap}::ng-deep .gds-table.table-mobile tbody tr{display:flex;flex-direction:column;border-bottom:var(--sg-table-border-width) solid var(--sg-table-border-color)}::ng-deep .gds-table.table-mobile tbody tr td{display:flex;justify-content:space-between;align-items:center;border-top:none!important}::ng-deep .gds-table.table-mobile tbody tr td:before{content:attr(data-label);font-weight:700}}::ng-deep .gds-table tr:hover td{background-color:#f8f8f8}::ng-deep .gds-table .gds-table__numeric-col{text-align:right}::ng-deep .gds-table thead tr th.gds-table__numeric-col .sg-table-sort{justify-content:end}::ng-deep .gds-table th.gds-table__numeric-col+:not(.gds-table__numeric-col),::ng-deep .gds-table td.gds-table__numeric-col+:not(.gds-table__numeric-col){padding-left:1rem}::ng-deep .gds-table th button{background-color:#0000;border:0;font-family:inherit;font-size:inherit;font-weight:inherit;padding:0;cursor:pointer}::ng-deep .gds-table td{cursor:pointer}::ng-deep .gds-table tfoot{border-top:1px solid;border-bottom:none;font-weight:500}::ng-deep .gds-table tfoot ::ng-deep td{padding:var(--sg-table-cell-padding-y) var(--sg-table-cell-padding-x)}::ng-deep .gds-table th.column__check{height:vanilla-px-to-rem(32px);width:vanilla-px-to-rem(40px)}::ng-deep .gds-table th.column__check div{min-height:100%}::ng-deep .gds-table th.column__check input:checked+label:after{top:.6rem;display:inline}::ng-deep .gds-table th.column__check label{display:inline;padding:0}::ng-deep .gds-table th.column__check label:before{top:.55rem}::ng-deep .gds-table td.column__check{width:vanilla-px-to-rem(40px)}::ng-deep .gds-table td.column__check div{min-height:unset}::ng-deep .gds-table td.column__check label{padding:0}::ng-deep .gds-table td.column__check label:before{margin:0}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "directive", type: i4.TableDirective, selector: "[columnType]", inputs: ["columnType", "sortable", "sortOrder", "value", "thook"] }, { kind: "pipe", type: i5.TrThookPipe, name: "trThook" }] }); }
359
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TableComponent, selector: "nggv-table", inputs: { tableColumns: "tableColumns", tableData: "tableData", rowId: "rowId", hasRowSpan: "hasRowSpan", selectable: "selectable", expandable: "expandable", subItemsProp: "subItemsProp", allowLocalSort: "allowLocalSort", thook: "thook", trThookFn: "trThookFn", ariaLabelCheckboxTh: "ariaLabelCheckboxTh", ariaLabelCheckboxTr: "ariaLabelCheckboxTr", ariaLabelsOrderBy: "ariaLabelsOrderBy" }, outputs: { ngvRowClick: "ngvRowClick", ngvRowSelect: "ngvRowSelect", ngvOrderBy: "ngvOrderBy" }, queries: [{ propertyName: "appendedRowsTemplate", first: true, predicate: TableAppendableRowsTemplateDirective, descendants: true }, { propertyName: "customFooterTemplate", first: true, predicate: TableFooterTemplateDirective, descendants: true }, { propertyName: "customTemplates", predicate: TableTemplateDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #sortableThTemplate let-column>\n <button class=\"sg-table-sort\" *transloco=\"let t\">\n <ng-template #thButtonTemplate>\n {{ t(column.label ?? '') }}\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else thButtonTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n </button>\n</ng-template>\n\n<ng-template #notSortableThTemplate let-column>\n <ng-template #defaultThTemplate>\n <ng-container *transloco=\"let t\">\n {{ t(column.label ?? '') }}\n </ng-container>\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else defaultThTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n</ng-template>\n\n<table class=\"gds-table\" *transloco=\"let t\">\n <!-- Table header -->\n <thead>\n <tr>\n <!-- Checkbox column for header -->\n <th *ngIf=\"selectable\" class=\"column__check\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n [formControl]=\"groupSelector\"\n [attr.aria-label]=\"ariaLabelCheckboxTh\"\n [attr.id]=\"'cb_header__' + initId\"\n [attr.data-thook]=\"thook\"\n />\n <label [attr.for]=\"'cb_header__' + initId\"></label>\n </div>\n </th>\n\n <!-- Other columns -->\n <th\n *ngFor=\"let column of tableColumns\"\n [columnType]=\"column.valueType\"\n [sortable]=\"column.sortable\"\n [sortOrder]=\"column.order\"\n [thook]=\"'column-header-' + !!column.property\"\n (click)=\"toggleSortOrder(column)\"\n (keydown.space)=\"toggleSortOrderWithSpace($event, column)\"\n [attr.aria-label]=\"getAriaLabel(column)\"\n [attr.aria-sort]=\"column.order + 'ending'\"\n >\n <ng-container *ngIf=\"column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n sortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n notSortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <!-- Table body -->\n <tbody [formGroup]=\"rowSelectors\">\n <ng-container *ngFor=\"let item of tableData; let i = index\">\n <tr\n [class.row__expand]=\"expandable\"\n [attr.data-thook]=\"item | trThook: i : trThookFn\"\n [attr.data-hasrowspan]=\"hasRowSpan(item)\"\n >\n <!-- Checkbox column for row -->\n <td *ngIf=\"selectable\" class=\"column__check\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n *ngIf=\"rowSelectors.get(item[rowId])\"\n type=\"checkbox\"\n [formControlName]=\"item[rowId]\"\n [attr.aria-label]=\"ariaLabelCheckboxTr\"\n [attr.id]=\"'cb_row__' + initId + '_' + i\"\n [attr.data-thook]=\"'row-select-' + i\"\n />\n <label [attr.for]=\"'cb_row__' + initId + '_' + i\"></label>\n </div>\n </td>\n\n <!-- Other columns -->\n <td\n *ngFor=\"let column of tableColumns; let i = index\"\n [columnType]=\"column.valueType\"\n [value]=\"item[column.property]\"\n (click)=\"propagateItemClick(item, column.preventDefaultClickEvent)\"\n >\n <ng-container *ngIf=\"expandable && i === 0; else nonExpandableTemplate\">\n <div class=\"gds-item-field-wrap\">\n <span\n class=\"chevron-field\"\n [attr.aria-expanded]=\"rowSelectors.get(item[rowId]).value\">\n <svg\n *ngIf=\"item.subItems.length > 0\"\n width=\"18\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20 9L12 17L4 9\"\n stroke=\"currentColor\"\n stroke-width=\"2.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n {{ item[column.property] }} ({{ item.subItems.length }})\n </div>\n </ng-container>\n\n <ng-template #nonExpandableTemplate>\n <ng-container *ngIf=\"customRowTemplates.get(column.property) as tdTemplate; else defaultTdTemplate\">\n <ng-template *ngTemplateOutlet=\"tdTemplate; context: { $implicit: item }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultTdTemplate>\n {{ item[column.property] }}\n </ng-template>\n </ng-template>\n </td>\n </tr>\n\n <!-- Expanded Sub Items -->\n <ng-container *ngIf=\"expandable && rowSelectors.get(item[rowId]).value\">\n <tr *ngFor=\"let subItem of item[subItemsProp]\">\n <td\n *ngFor=\"let column of tableColumns\"\n [columnType]=\"column.valueType\"\n [value]=\"subItem[column.property]\"\n >\n <div class=\"gds-sub-item-field-wrap\">\n {{ subItem[column.property] }}\n </div>\n </td>\n </tr>\n </ng-container>\n\n <!-- Custom appended rows -->\n <ng-container *ngIf=\"appendedRowsTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container\n *ngTemplateOutlet=\"trTemplate || null; context: { $implicit: item }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n\n <!-- Table footer -->\n <tfoot *ngIf=\"customFooterTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container *ngTemplateOutlet=\"trTemplate || null\"> </ng-container>\n </tfoot>\n</table>\n", styles: ["::ng-deep .gds-table{--gds-ref-pallet-base100: #f8f8f8;--gds-ref-pallet-base600: hsl(0, 0%, 53%);--sg-table-header-background: #1a1a1a;--sg-table-header-color: #fff;--sg-table-cell-padding-x: .5rem;--sg-table-cell-padding-y: .6875rem;--sg-table-border-width: 1px;--sg-table-border-color: var(--gds-ref-pallet-base600);--sg-table-sort-icon-color: var(--gds-ref-pallet-base600);--gds-ref-pallet-base500: hsl(0, 0%, 68%);--sg-table-sort-icon-color-active: #fff;border-collapse:collapse;border-bottom:var(--sg-table-border-width) solid var(--sg-table-border-color);width:100%;border-bottom:none}::ng-deep .gds-table thead tr th{border-top:var(--sg-table-border-width) solid var(--sg-table-border-color);background:#333;color:var(--sg-table-header-color);padding:.3rem var(--sg-table-cell-padding-x);text-align:left;font-weight:500}::ng-deep .gds-table thead tr th.icon-invert.sg-sortable .sg-table-sort:after{margin-left:0;margin-right:.3rem;order:-1}::ng-deep .gds-table thead tr th .sg-table-sort{color:inherit;width:100%;text-align:left;display:flex;align-items:center;border-radius:.125rem;--gds-sys-color-focus-outline: $_header-color}::ng-deep .gds-table thead tr th .sg-table-sort:focus:not(:focus-visible){box-shadow:none;outline:0}::ng-deep .gds-table thead tr th .sg-table-sort:focus,::ng-deep .gds-table thead tr th .sg-table-sort:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}::ng-deep .gds-table thead tr th[aria-sort] .sg-table-sort:after,::ng-deep .gds-table thead tr th.sg-sortable .sg-table-sort:after{content:\"\";background:var(--gds-ref-pallet-base500);-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3E%3Cpath%20d='M11.107%205.86147L10.6429%205.39741C10.5328%205.28726%2010.3546%205.28726%2010.2445%205.39741L6.60933%209.03257V1.03101C6.60933%200.876318%206.48276%200.749756%206.32808%200.749756H5.67183C5.51714%200.749756%205.39058%200.876318%205.39058%201.03101V9.03257L1.75542%205.39741C1.64526%205.28726%201.46714%205.28726%201.35698%205.39741L0.89292%205.86147C0.782764%205.97163%200.782764%206.14976%200.89292%206.25991L5.80073%2011.1677C5.91089%2011.2779%206.08901%2011.2779%206.19917%2011.1677L11.107%206.25991C11.2171%206.14976%2011.2171%205.97163%2011.107%205.86147Z'%20fill='%23ADADAD'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3E%3Cpath%20d='M11.107%205.86147L10.6429%205.39741C10.5328%205.28726%2010.3546%205.28726%2010.2445%205.39741L6.60933%209.03257V1.03101C6.60933%200.876318%206.48276%200.749756%206.32808%200.749756H5.67183C5.51714%200.749756%205.39058%200.876318%205.39058%201.03101V9.03257L1.75542%205.39741C1.64526%205.28726%201.46714%205.28726%201.35698%205.39741L0.89292%205.86147C0.782764%205.97163%200.782764%206.14976%200.89292%206.25991L5.80073%2011.1677C5.91089%2011.2779%206.08901%2011.2779%206.19917%2011.1677L11.107%206.25991C11.2171%206.14976%2011.2171%205.97163%2011.107%205.86147Z'%20fill='%23ADADAD'/%3E%3C/svg%3E\");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:right;mask-position:right;width:12px;height:12px;margin-left:.3rem}::ng-deep .gds-table thead tr th[aria-sort=ascending] .sg-table-sort:after{background:var(--sg-table-sort-icon-color-active);transform:rotate(180deg)}::ng-deep .gds-table thead tr th[aria-sort=descending] .sg-table-sort:after{background:var(--sg-table-sort-icon-color-active)}::ng-deep .gds-table tbody tr td,::ng-deep .gds-table tbody tr th{border-top:var(--sg-table-border-width) solid var(--sg-table-border-color);padding:var(--sg-table-cell-padding-y) var(--sg-table-cell-padding-x);vertical-align:top}::ng-deep .gds-table tbody tr.collapsible~.sub-row{display:none}::ng-deep .gds-table tbody tr.collapsible.expanded~.sub-row.show{display:table-row}::ng-deep .gds-table tbody tr td.collapse-control,::ng-deep .gds-table tbody tr td.select-control{width:15px}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn{min-height:unset;padding:0;background:transparent}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder{cursor:pointer;width:12px}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder svg{width:12px;fill:#868686}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder svg[name=angle-right]{width:9px}@media (max-width: 36em){::ng-deep .gds-table.table-mobile{width:100%;table-layout:fixed;border-bottom:none}::ng-deep .gds-table.table-mobile thead{position:sticky;top:0;display:block;background:#333}}@media (max-width: 36em) and (hover: none) and (pointer: coarse){::ng-deep .gds-table.table-mobile thead{display:table-header-group}}@media (max-width: 36em){::ng-deep .gds-table.table-mobile thead tr{display:flex;overflow:auto}::ng-deep .gds-table.table-mobile thead tr::-webkit-scrollbar{display:none}::ng-deep .gds-table.table-mobile thead tr th{flex:auto;text-align:left!important;white-space:nowrap}::ng-deep .gds-table.table-mobile tbody tr{display:flex;flex-direction:column;border-bottom:var(--sg-table-border-width) solid var(--sg-table-border-color)}::ng-deep .gds-table.table-mobile tbody tr td{display:flex;justify-content:space-between;align-items:center;border-top:none!important}::ng-deep .gds-table.table-mobile tbody tr td:before{content:attr(data-label);font-weight:700}}::ng-deep .gds-table tr:hover td{background-color:var(--gds-ref-pallet-base100)}::ng-deep .gds-table .gds-table__numeric-col{text-align:right}::ng-deep .gds-table thead tr th.gds-table__numeric-col .sg-table-sort{justify-content:end}::ng-deep .gds-table th.gds-table__numeric-col+:not(.gds-table__numeric-col),::ng-deep .gds-table td.gds-table__numeric-col+:not(.gds-table__numeric-col){padding-left:1rem}::ng-deep .gds-table th button{background-color:#0000;border:0;font-family:inherit;font-size:inherit;font-weight:inherit;padding:0;cursor:pointer}::ng-deep .gds-table td{cursor:pointer}::ng-deep .gds-table tfoot{border-top:1px solid;border-bottom:none;font-weight:500}::ng-deep .gds-table tfoot ::ng-deep td{padding:var(--sg-table-cell-padding-y) var(--sg-table-cell-padding-x)}::ng-deep .gds-table th.column__check{height:vanilla-px-to-rem(32px);width:vanilla-px-to-rem(40px)}::ng-deep .gds-table th.column__check div{min-height:100%}::ng-deep .gds-table th.column__check input:checked+label:after{top:.6rem;display:inline}::ng-deep .gds-table th.column__check label{display:inline;padding:0}::ng-deep .gds-table th.column__check label:before{top:.55rem}::ng-deep .gds-table td.column__check{width:vanilla-px-to-rem(40px)}::ng-deep .gds-table td.column__check div{min-height:unset}::ng-deep .gds-table td.column__check label{padding:0}::ng-deep .gds-table td.column__check label:before{margin:0}::ng-deep .gds-table tr.row__expand{background-color:var(--gds-ref-pallet-base100)}::ng-deep .gds-table tr.row__expand .gds-item-field-wrap{display:flex;flex-wrap:nowrap}::ng-deep .gds-table tr.row__expand .gds-item-field-wrap .chevron-field{width:1.5rem}::ng-deep .gds-table tr.row__expand .gds-item-field-wrap .chevron-field svg{transition:transform .3s ease}::ng-deep .gds-table tr.row__expand .gds-item-field-wrap .chevron-field[aria-expanded=true] svg{transform:rotate(-180deg)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "directive", type: i4.TableDirective, selector: "[columnType]", inputs: ["columnType", "sortable", "sortOrder", "value", "thook"] }, { kind: "pipe", type: i5.TrThookPipe, name: "trThook" }] }); }
345
360
  }
346
361
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TableComponent, decorators: [{
347
362
  type: Component,
348
- args: [{ selector: 'nggv-table', template: "<ng-template #sortableThTemplate let-column>\n <button class=\"sg-table-sort\" *transloco=\"let t\">\n <ng-template #thButtonTemplate>\n {{ t(column.label ?? '') }}\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else thButtonTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n </button>\n</ng-template>\n\n<ng-template #notSortableThTemplate let-column>\n <ng-template #defaultThTemplate>\n <ng-container *transloco=\"let t\">\n {{ t(column.label ?? '') }}\n </ng-container>\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else defaultThTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n</ng-template>\n\n<table class=\"gds-table\" *transloco=\"let t\">\n <!-- Table header -->\n <thead>\n <tr>\n <!-- Checkbox column for header -->\n <th *ngIf=\"selectable\" class=\"column__check\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n [formControl]=\"groupSelector\"\n [attr.aria-label]=\"ariaLabelCheckboxTh\"\n [attr.id]=\"'cb_header__' + initId\"\n [attr.data-thook]=\"thook\"\n />\n <label [attr.for]=\"'cb_header__' + initId\"></label>\n </div>\n </th>\n\n <!-- Other columns -->\n <th\n *ngFor=\"let column of tableColumns\"\n [columnType]=\"column.valueType\"\n [sortable]=\"column.sortable\"\n [sortOrder]=\"column.order\"\n [thook]=\"'column-header-' + !!column.property\"\n (click)=\"toggleSortOrder(column)\"\n (keydown.space)=\"toggleSortOrderWithSpace($event, column)\"\n [attr.aria-label]=\"getAriaLabel(column)\"\n [attr.aria-sort]=\"column.order + 'ending'\"\n >\n <ng-container *ngIf=\"column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n sortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n notSortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <!-- Table body -->\n <tbody [formGroup]=\"rowSelectors\">\n <ng-container *ngFor=\"let item of tableData; let i = index\">\n <tr\n [attr.data-thook]=\"item | trThook: i : trThookFn\"\n [attr.data-hasrowspan]=\"hasRowSpan(item)\"\n >\n <!-- Checkbox column for row -->\n <td *ngIf=\"selectable\" class=\"column__check\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n *ngIf=\"rowSelectors.get(item[rowId])\"\n type=\"checkbox\"\n [formControlName]=\"item[rowId]\"\n [attr.aria-label]=\"ariaLabelCheckboxTr\"\n [attr.id]=\"'cb_row__' + initId + '_' + i\"\n [attr.data-thook]=\"'row-select-' + i\"\n />\n <label [attr.for]=\"'cb_row__' + initId + '_' + i\"></label>\n </div>\n </td>\n\n <!-- Other columns -->\n <td\n *ngFor=\"let column of tableColumns\"\n (click)=\"propagateItemClick(item, column.preventDefaultClickEvent)\"\n [columnType]=\"column.valueType\"\n [value]=\"item[column.property]\"\n >\n <ng-container\n *ngIf=\"\n customRowTemplates.get(column.property) as tdTemplate;\n else defaultTdTemplate\n \"\n >\n <!-- Cannot infer tdTemplate as TemplateRef therefore null -->\n <ng-template\n *ngTemplateOutlet=\"\n tdTemplate || null;\n context: { $implicit: item }\n \"\n >\n </ng-template>\n </ng-container>\n\n <ng-template #defaultTdTemplate>\n {{ item[column.property] }}\n </ng-template>\n </td>\n </tr>\n\n <!-- custom appended rows -->\n <ng-container *ngIf=\"appendedRowsTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container\n *ngTemplateOutlet=\"trTemplate || null; context: { $implicit: item }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n\n <!-- Table footer -->\n <tfoot *ngIf=\"customFooterTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container *ngTemplateOutlet=\"trTemplate || null\"> </ng-container>\n </tfoot>\n</table>\n", styles: ["::ng-deep .gds-table{--gds-ref-pallet-base600: hsl(0, 0%, 53%);--sg-table-header-background: #1a1a1a;--sg-table-header-color: #fff;--sg-table-cell-padding-x: .5rem;--sg-table-cell-padding-y: .6875rem;--sg-table-border-width: 1px;--sg-table-border-color: var(--gds-ref-pallet-base600);--sg-table-sort-icon-color: var(--gds-ref-pallet-base600);--gds-ref-pallet-base500: hsl(0, 0%, 68%);--sg-table-sort-icon-color-active: #fff;border-collapse:collapse;border-bottom:var(--sg-table-border-width) solid var(--sg-table-border-color);width:100%;border-bottom:none}::ng-deep .gds-table thead tr th{border-top:var(--sg-table-border-width) solid var(--sg-table-border-color);background:#333;color:var(--sg-table-header-color);padding:.3rem var(--sg-table-cell-padding-x);text-align:left;font-weight:500}::ng-deep .gds-table thead tr th.icon-invert.sg-sortable .sg-table-sort:after{margin-left:0;margin-right:.3rem;order:-1}::ng-deep .gds-table thead tr th .sg-table-sort{color:inherit;width:100%;text-align:left;display:flex;align-items:center;border-radius:.125rem;--gds-sys-color-focus-outline: $_header-color}::ng-deep .gds-table thead tr th .sg-table-sort:focus:not(:focus-visible){box-shadow:none;outline:0}::ng-deep .gds-table thead tr th .sg-table-sort:focus,::ng-deep .gds-table thead tr th .sg-table-sort:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}::ng-deep .gds-table thead tr th[aria-sort] .sg-table-sort:after,::ng-deep .gds-table thead tr th.sg-sortable .sg-table-sort:after{content:\"\";background:var(--gds-ref-pallet-base500);-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3E%3Cpath%20d='M11.107%205.86147L10.6429%205.39741C10.5328%205.28726%2010.3546%205.28726%2010.2445%205.39741L6.60933%209.03257V1.03101C6.60933%200.876318%206.48276%200.749756%206.32808%200.749756H5.67183C5.51714%200.749756%205.39058%200.876318%205.39058%201.03101V9.03257L1.75542%205.39741C1.64526%205.28726%201.46714%205.28726%201.35698%205.39741L0.89292%205.86147C0.782764%205.97163%200.782764%206.14976%200.89292%206.25991L5.80073%2011.1677C5.91089%2011.2779%206.08901%2011.2779%206.19917%2011.1677L11.107%206.25991C11.2171%206.14976%2011.2171%205.97163%2011.107%205.86147Z'%20fill='%23ADADAD'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3E%3Cpath%20d='M11.107%205.86147L10.6429%205.39741C10.5328%205.28726%2010.3546%205.28726%2010.2445%205.39741L6.60933%209.03257V1.03101C6.60933%200.876318%206.48276%200.749756%206.32808%200.749756H5.67183C5.51714%200.749756%205.39058%200.876318%205.39058%201.03101V9.03257L1.75542%205.39741C1.64526%205.28726%201.46714%205.28726%201.35698%205.39741L0.89292%205.86147C0.782764%205.97163%200.782764%206.14976%200.89292%206.25991L5.80073%2011.1677C5.91089%2011.2779%206.08901%2011.2779%206.19917%2011.1677L11.107%206.25991C11.2171%206.14976%2011.2171%205.97163%2011.107%205.86147Z'%20fill='%23ADADAD'/%3E%3C/svg%3E\");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:right;mask-position:right;width:12px;height:12px;margin-left:.3rem}::ng-deep .gds-table thead tr th[aria-sort=ascending] .sg-table-sort:after{background:var(--sg-table-sort-icon-color-active);transform:rotate(180deg)}::ng-deep .gds-table thead tr th[aria-sort=descending] .sg-table-sort:after{background:var(--sg-table-sort-icon-color-active)}::ng-deep .gds-table tbody tr td,::ng-deep .gds-table tbody tr th{border-top:var(--sg-table-border-width) solid var(--sg-table-border-color);padding:var(--sg-table-cell-padding-y) var(--sg-table-cell-padding-x);vertical-align:top}::ng-deep .gds-table tbody tr.collapsible~.sub-row{display:none}::ng-deep .gds-table tbody tr.collapsible.expanded~.sub-row.show{display:table-row}::ng-deep .gds-table tbody tr td.collapse-control,::ng-deep .gds-table tbody tr td.select-control{width:15px}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn{min-height:unset;padding:0;background:transparent}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder{cursor:pointer;width:12px}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder svg{width:12px;fill:#868686}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder svg[name=angle-right]{width:9px}@media (max-width: 36em){::ng-deep .gds-table.table-mobile{width:100%;table-layout:fixed;border-bottom:none}::ng-deep .gds-table.table-mobile thead{position:sticky;top:0;display:block;background:#333}}@media (max-width: 36em) and (hover: none) and (pointer: coarse){::ng-deep .gds-table.table-mobile thead{display:table-header-group}}@media (max-width: 36em){::ng-deep .gds-table.table-mobile thead tr{display:flex;overflow:auto}::ng-deep .gds-table.table-mobile thead tr::-webkit-scrollbar{display:none}::ng-deep .gds-table.table-mobile thead tr th{flex:auto;text-align:left!important;white-space:nowrap}::ng-deep .gds-table.table-mobile tbody tr{display:flex;flex-direction:column;border-bottom:var(--sg-table-border-width) solid var(--sg-table-border-color)}::ng-deep .gds-table.table-mobile tbody tr td{display:flex;justify-content:space-between;align-items:center;border-top:none!important}::ng-deep .gds-table.table-mobile tbody tr td:before{content:attr(data-label);font-weight:700}}::ng-deep .gds-table tr:hover td{background-color:#f8f8f8}::ng-deep .gds-table .gds-table__numeric-col{text-align:right}::ng-deep .gds-table thead tr th.gds-table__numeric-col .sg-table-sort{justify-content:end}::ng-deep .gds-table th.gds-table__numeric-col+:not(.gds-table__numeric-col),::ng-deep .gds-table td.gds-table__numeric-col+:not(.gds-table__numeric-col){padding-left:1rem}::ng-deep .gds-table th button{background-color:#0000;border:0;font-family:inherit;font-size:inherit;font-weight:inherit;padding:0;cursor:pointer}::ng-deep .gds-table td{cursor:pointer}::ng-deep .gds-table tfoot{border-top:1px solid;border-bottom:none;font-weight:500}::ng-deep .gds-table tfoot ::ng-deep td{padding:var(--sg-table-cell-padding-y) var(--sg-table-cell-padding-x)}::ng-deep .gds-table th.column__check{height:vanilla-px-to-rem(32px);width:vanilla-px-to-rem(40px)}::ng-deep .gds-table th.column__check div{min-height:100%}::ng-deep .gds-table th.column__check input:checked+label:after{top:.6rem;display:inline}::ng-deep .gds-table th.column__check label{display:inline;padding:0}::ng-deep .gds-table th.column__check label:before{top:.55rem}::ng-deep .gds-table td.column__check{width:vanilla-px-to-rem(40px)}::ng-deep .gds-table td.column__check div{min-height:unset}::ng-deep .gds-table td.column__check label{padding:0}::ng-deep .gds-table td.column__check label:before{margin:0}\n"] }]
363
+ args: [{ selector: 'nggv-table', template: "<ng-template #sortableThTemplate let-column>\n <button class=\"sg-table-sort\" *transloco=\"let t\">\n <ng-template #thButtonTemplate>\n {{ t(column.label ?? '') }}\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else thButtonTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n </button>\n</ng-template>\n\n<ng-template #notSortableThTemplate let-column>\n <ng-template #defaultThTemplate>\n <ng-container *transloco=\"let t\">\n {{ t(column.label ?? '') }}\n </ng-container>\n </ng-template>\n <ng-container\n *ngIf=\"\n customHeaderTemplates.get(column.property) as thTemplate;\n else defaultThTemplate\n \"\n >\n <ng-template\n *ngTemplateOutlet=\"thTemplate || null; context: { $implicit: column }\"\n >\n </ng-template>\n </ng-container>\n</ng-template>\n\n<table class=\"gds-table\" *transloco=\"let t\">\n <!-- Table header -->\n <thead>\n <tr>\n <!-- Checkbox column for header -->\n <th *ngIf=\"selectable\" class=\"column__check\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n type=\"checkbox\"\n [formControl]=\"groupSelector\"\n [attr.aria-label]=\"ariaLabelCheckboxTh\"\n [attr.id]=\"'cb_header__' + initId\"\n [attr.data-thook]=\"thook\"\n />\n <label [attr.for]=\"'cb_header__' + initId\"></label>\n </div>\n </th>\n\n <!-- Other columns -->\n <th\n *ngFor=\"let column of tableColumns\"\n [columnType]=\"column.valueType\"\n [sortable]=\"column.sortable\"\n [sortOrder]=\"column.order\"\n [thook]=\"'column-header-' + !!column.property\"\n (click)=\"toggleSortOrder(column)\"\n (keydown.space)=\"toggleSortOrderWithSpace($event, column)\"\n [attr.aria-label]=\"getAriaLabel(column)\"\n [attr.aria-sort]=\"column.order + 'ending'\"\n >\n <ng-container *ngIf=\"column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n sortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!column.sortable\">\n <ng-container\n *ngTemplateOutlet=\"\n notSortableThTemplate;\n context: { $implicit: column, column: column }\n \"\n >\n </ng-container>\n </ng-container>\n </th>\n </tr>\n </thead>\n\n <!-- Table body -->\n <tbody [formGroup]=\"rowSelectors\">\n <ng-container *ngFor=\"let item of tableData; let i = index\">\n <tr\n [class.row__expand]=\"expandable\"\n [attr.data-thook]=\"item | trThook: i : trThookFn\"\n [attr.data-hasrowspan]=\"hasRowSpan(item)\"\n >\n <!-- Checkbox column for row -->\n <td *ngIf=\"selectable\" class=\"column__check\">\n <div class=\"gds-field-checkbox-wrap\">\n <input\n *ngIf=\"rowSelectors.get(item[rowId])\"\n type=\"checkbox\"\n [formControlName]=\"item[rowId]\"\n [attr.aria-label]=\"ariaLabelCheckboxTr\"\n [attr.id]=\"'cb_row__' + initId + '_' + i\"\n [attr.data-thook]=\"'row-select-' + i\"\n />\n <label [attr.for]=\"'cb_row__' + initId + '_' + i\"></label>\n </div>\n </td>\n\n <!-- Other columns -->\n <td\n *ngFor=\"let column of tableColumns; let i = index\"\n [columnType]=\"column.valueType\"\n [value]=\"item[column.property]\"\n (click)=\"propagateItemClick(item, column.preventDefaultClickEvent)\"\n >\n <ng-container *ngIf=\"expandable && i === 0; else nonExpandableTemplate\">\n <div class=\"gds-item-field-wrap\">\n <span\n class=\"chevron-field\"\n [attr.aria-expanded]=\"rowSelectors.get(item[rowId]).value\">\n <svg\n *ngIf=\"item.subItems.length > 0\"\n width=\"18\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M20 9L12 17L4 9\"\n stroke=\"currentColor\"\n stroke-width=\"2.6\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n {{ item[column.property] }} ({{ item.subItems.length }})\n </div>\n </ng-container>\n\n <ng-template #nonExpandableTemplate>\n <ng-container *ngIf=\"customRowTemplates.get(column.property) as tdTemplate; else defaultTdTemplate\">\n <ng-template *ngTemplateOutlet=\"tdTemplate; context: { $implicit: item }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultTdTemplate>\n {{ item[column.property] }}\n </ng-template>\n </ng-template>\n </td>\n </tr>\n\n <!-- Expanded Sub Items -->\n <ng-container *ngIf=\"expandable && rowSelectors.get(item[rowId]).value\">\n <tr *ngFor=\"let subItem of item[subItemsProp]\">\n <td\n *ngFor=\"let column of tableColumns\"\n [columnType]=\"column.valueType\"\n [value]=\"subItem[column.property]\"\n >\n <div class=\"gds-sub-item-field-wrap\">\n {{ subItem[column.property] }}\n </div>\n </td>\n </tr>\n </ng-container>\n\n <!-- Custom appended rows -->\n <ng-container *ngIf=\"appendedRowsTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container\n *ngTemplateOutlet=\"trTemplate || null; context: { $implicit: item }\"\n >\n </ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n\n <!-- Table footer -->\n <tfoot *ngIf=\"customFooterTemplateRef as trTemplate\">\n <!-- Cannot infer trTemplate as TemplateRef therefore null -->\n <ng-container *ngTemplateOutlet=\"trTemplate || null\"> </ng-container>\n </tfoot>\n</table>\n", styles: ["::ng-deep .gds-table{--gds-ref-pallet-base100: #f8f8f8;--gds-ref-pallet-base600: hsl(0, 0%, 53%);--sg-table-header-background: #1a1a1a;--sg-table-header-color: #fff;--sg-table-cell-padding-x: .5rem;--sg-table-cell-padding-y: .6875rem;--sg-table-border-width: 1px;--sg-table-border-color: var(--gds-ref-pallet-base600);--sg-table-sort-icon-color: var(--gds-ref-pallet-base600);--gds-ref-pallet-base500: hsl(0, 0%, 68%);--sg-table-sort-icon-color-active: #fff;border-collapse:collapse;border-bottom:var(--sg-table-border-width) solid var(--sg-table-border-color);width:100%;border-bottom:none}::ng-deep .gds-table thead tr th{border-top:var(--sg-table-border-width) solid var(--sg-table-border-color);background:#333;color:var(--sg-table-header-color);padding:.3rem var(--sg-table-cell-padding-x);text-align:left;font-weight:500}::ng-deep .gds-table thead tr th.icon-invert.sg-sortable .sg-table-sort:after{margin-left:0;margin-right:.3rem;order:-1}::ng-deep .gds-table thead tr th .sg-table-sort{color:inherit;width:100%;text-align:left;display:flex;align-items:center;border-radius:.125rem;--gds-sys-color-focus-outline: $_header-color}::ng-deep .gds-table thead tr th .sg-table-sort:focus:not(:focus-visible){box-shadow:none;outline:0}::ng-deep .gds-table thead tr th .sg-table-sort:focus,::ng-deep .gds-table thead tr th .sg-table-sort:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}::ng-deep .gds-table thead tr th[aria-sort] .sg-table-sort:after,::ng-deep .gds-table thead tr th.sg-sortable .sg-table-sort:after{content:\"\";background:var(--gds-ref-pallet-base500);-webkit-mask-image:url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3E%3Cpath%20d='M11.107%205.86147L10.6429%205.39741C10.5328%205.28726%2010.3546%205.28726%2010.2445%205.39741L6.60933%209.03257V1.03101C6.60933%200.876318%206.48276%200.749756%206.32808%200.749756H5.67183C5.51714%200.749756%205.39058%200.876318%205.39058%201.03101V9.03257L1.75542%205.39741C1.64526%205.28726%201.46714%205.28726%201.35698%205.39741L0.89292%205.86147C0.782764%205.97163%200.782764%206.14976%200.89292%206.25991L5.80073%2011.1677C5.91089%2011.2779%206.08901%2011.2779%206.19917%2011.1677L11.107%206.25991C11.2171%206.14976%2011.2171%205.97163%2011.107%205.86147Z'%20fill='%23ADADAD'/%3E%3C/svg%3E\");mask-image:url(\"data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='12'%20height='12'%20viewBox='0%200%2012%2012'%20fill='none'%3E%3Cpath%20d='M11.107%205.86147L10.6429%205.39741C10.5328%205.28726%2010.3546%205.28726%2010.2445%205.39741L6.60933%209.03257V1.03101C6.60933%200.876318%206.48276%200.749756%206.32808%200.749756H5.67183C5.51714%200.749756%205.39058%200.876318%205.39058%201.03101V9.03257L1.75542%205.39741C1.64526%205.28726%201.46714%205.28726%201.35698%205.39741L0.89292%205.86147C0.782764%205.97163%200.782764%206.14976%200.89292%206.25991L5.80073%2011.1677C5.91089%2011.2779%206.08901%2011.2779%206.19917%2011.1677L11.107%206.25991C11.2171%206.14976%2011.2171%205.97163%2011.107%205.86147Z'%20fill='%23ADADAD'/%3E%3C/svg%3E\");-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:right;mask-position:right;width:12px;height:12px;margin-left:.3rem}::ng-deep .gds-table thead tr th[aria-sort=ascending] .sg-table-sort:after{background:var(--sg-table-sort-icon-color-active);transform:rotate(180deg)}::ng-deep .gds-table thead tr th[aria-sort=descending] .sg-table-sort:after{background:var(--sg-table-sort-icon-color-active)}::ng-deep .gds-table tbody tr td,::ng-deep .gds-table tbody tr th{border-top:var(--sg-table-border-width) solid var(--sg-table-border-color);padding:var(--sg-table-cell-padding-y) var(--sg-table-cell-padding-x);vertical-align:top}::ng-deep .gds-table tbody tr.collapsible~.sub-row{display:none}::ng-deep .gds-table tbody tr.collapsible.expanded~.sub-row.show{display:table-row}::ng-deep .gds-table tbody tr td.collapse-control,::ng-deep .gds-table tbody tr td.select-control{width:15px}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn{min-height:unset;padding:0;background:transparent}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder{cursor:pointer;width:12px}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder svg{width:12px;fill:#868686}::ng-deep .gds-table tbody tr td.collapse-control>.collapse-btn>.icon-holder svg[name=angle-right]{width:9px}@media (max-width: 36em){::ng-deep .gds-table.table-mobile{width:100%;table-layout:fixed;border-bottom:none}::ng-deep .gds-table.table-mobile thead{position:sticky;top:0;display:block;background:#333}}@media (max-width: 36em) and (hover: none) and (pointer: coarse){::ng-deep .gds-table.table-mobile thead{display:table-header-group}}@media (max-width: 36em){::ng-deep .gds-table.table-mobile thead tr{display:flex;overflow:auto}::ng-deep .gds-table.table-mobile thead tr::-webkit-scrollbar{display:none}::ng-deep .gds-table.table-mobile thead tr th{flex:auto;text-align:left!important;white-space:nowrap}::ng-deep .gds-table.table-mobile tbody tr{display:flex;flex-direction:column;border-bottom:var(--sg-table-border-width) solid var(--sg-table-border-color)}::ng-deep .gds-table.table-mobile tbody tr td{display:flex;justify-content:space-between;align-items:center;border-top:none!important}::ng-deep .gds-table.table-mobile tbody tr td:before{content:attr(data-label);font-weight:700}}::ng-deep .gds-table tr:hover td{background-color:var(--gds-ref-pallet-base100)}::ng-deep .gds-table .gds-table__numeric-col{text-align:right}::ng-deep .gds-table thead tr th.gds-table__numeric-col .sg-table-sort{justify-content:end}::ng-deep .gds-table th.gds-table__numeric-col+:not(.gds-table__numeric-col),::ng-deep .gds-table td.gds-table__numeric-col+:not(.gds-table__numeric-col){padding-left:1rem}::ng-deep .gds-table th button{background-color:#0000;border:0;font-family:inherit;font-size:inherit;font-weight:inherit;padding:0;cursor:pointer}::ng-deep .gds-table td{cursor:pointer}::ng-deep .gds-table tfoot{border-top:1px solid;border-bottom:none;font-weight:500}::ng-deep .gds-table tfoot ::ng-deep td{padding:var(--sg-table-cell-padding-y) var(--sg-table-cell-padding-x)}::ng-deep .gds-table th.column__check{height:vanilla-px-to-rem(32px);width:vanilla-px-to-rem(40px)}::ng-deep .gds-table th.column__check div{min-height:100%}::ng-deep .gds-table th.column__check input:checked+label:after{top:.6rem;display:inline}::ng-deep .gds-table th.column__check label{display:inline;padding:0}::ng-deep .gds-table th.column__check label:before{top:.55rem}::ng-deep .gds-table td.column__check{width:vanilla-px-to-rem(40px)}::ng-deep .gds-table td.column__check div{min-height:unset}::ng-deep .gds-table td.column__check label{padding:0}::ng-deep .gds-table td.column__check label:before{margin:0}::ng-deep .gds-table tr.row__expand{background-color:var(--gds-ref-pallet-base100)}::ng-deep .gds-table tr.row__expand .gds-item-field-wrap{display:flex;flex-wrap:nowrap}::ng-deep .gds-table tr.row__expand .gds-item-field-wrap .chevron-field{width:1.5rem}::ng-deep .gds-table tr.row__expand .gds-item-field-wrap .chevron-field svg{transition:transform .3s ease}::ng-deep .gds-table tr.row__expand .gds-item-field-wrap .chevron-field[aria-expanded=true] svg{transform:rotate(-180deg)}\n"] }]
349
364
  }], propDecorators: { customTemplates: [{
350
365
  type: ContentChildren,
351
366
  args: [TableTemplateDirective, { descendants: true }]
@@ -371,6 +386,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
371
386
  type: Input
372
387
  }], selectable: [{
373
388
  type: Input
389
+ }], expandable: [{
390
+ type: Input
391
+ }], subItemsProp: [{
392
+ type: Input
374
393
  }], allowLocalSort: [{
375
394
  type: Input
376
395
  }], thook: [{
@@ -384,4 +403,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
384
403
  }], ariaLabelsOrderBy: [{
385
404
  type: Input
386
405
  }] } });
387
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWxELE9BQU8sRUFDTCxvQ0FBb0MsRUFDcEMsNEJBQTRCLEVBQzVCLHNCQUFzQixHQUN2QixNQUFNLG1CQUFtQixDQUFBO0FBTzFCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUE7Ozs7Ozs7QUFFekUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFBO0FBRXBCLFNBQVMsaUJBQWlCLENBQUMsUUFBdUI7SUFDaEQsTUFBTSxXQUFXLEdBQTJCLEVBQUUsQ0FBQTtJQUM5QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDcEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUMxQixDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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R0csS0FBSztzQkFBYixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxpQkFBaUI7c0JBQXpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQge1xuICBUYWJsZUFwcGVuZGFibGVSb3dzVGVtcGxhdGVEaXJlY3RpdmUsXG4gIFRhYmxlRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gIFRhYmxlVGVtcGxhdGVEaXJlY3RpdmUsXG59IGZyb20gJy4vdGFibGUuZGlyZWN0aXZlJ1xuaW1wb3J0IHtcbiAgYXJpYUxhYmVsc09yZGVyQnksXG4gIE9yZGVyQnksXG4gIFRhYmxlQ29sdW1uLFxuICBUYWJsZVJvdyxcbn0gZnJvbSAnLi90YWJsZS5tb2RlbHMnXG5pbXBvcnQgeyBvcmRlckJ5QXNjZW5kaW5nLCBvcmRlckJ5RGVzY2VuZGluZywgcGljayB9IGZyb20gJy4vdGFibGUudG9vbHMnXG5cbmxldCBzdGF0aWNJbml0SWQgPSAwXG5cbmZ1bmN0aW9uIG9iamVjdEZyb21FbnRyaWVzKGVudHJ5TWFwOiBNYXA8YW55LCBhbnk+KTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gIGNvbnN0IGZyb21FbnRyaWVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgZW50cnlNYXApIHtcbiAgICBmcm9tRW50cmllc1trZXldID0gdmFsdWVcbiAgfVxuICByZXR1cm4gZnJvbUVudHJpZXNcbn1cblxuLyoqXG4gKiBBIHRhYmxlIGNvbXBvbmVudCB3aXRoIGJ1aWx0LWluIHNvcnRpbmcgYW5kIHNlbGVjdGluZyBmdW5jdGlvbmFsaXR5LlxuICogQnkgZGVmYXVsdCwgdGFibGUgY2VsbHMgKGkuZS4gYDx0ZD5gIGVsZW1lbnRzKSBhbmQgdGFibGUgaGVhZGVycyAoaS5lLiBgPHRoPmAgZWxlbWVudHMpIGFyZSBwb3B1bGF0ZWQgd2l0aCB0ZXh0IG9ubHkgdmFsdWVzLlxuICpcbiAqIFRvIGN1c3RvbWl6ZSB0aGUgY29udGVudHMgb2YgZWl0aGVyIHRoZSBgPHRkPmAgb3IgYDx0aD5gIGVsZW1lbnRzIChsaWtlIGFkZGluZyBjb2xvciwgaWNvbnMsIGZvcm0gZmllbGRzLCBleHRyYSBwYWRkaW5nIGV0Yy4pLCBwcm92aWRlXG4gKiB0aGUgY3VzdG9taXplZCBjb250ZW50IHdpdGhpbiBhIGA8bmctdGVtcGxhdGU+YC10YWcsIGFuZCBwbGFjZSB0aGUgbmctdGVtcGxhdGUgaW4gdGhlIGh0bWwgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZGluZyB0YWcgb2ZcbiAqIHRoZSBgPG5nZ3YtdGFibGU+YC4gQWRkIGEgYHRhYmxlQ29sdW1uYC1hdHRyaWJ1dGUgdG8gdGhlIGA8bmctdGVtcGxhdGU+YC1lbGVtZW50LCBhbmQgc2V0IHRoZSB2YWx1ZSB0byB0aGUgc3BlY2lmaWMgY29sdW1uIHByb3BlcnR5LlxuICogU2V0IGB0YWJsZUNvbHVtblRhcmdldGAgdG8gZWl0aGVyIGB0aGAsIGB0ZGAgb3IgYGJvdGhgIChkZWZhdWx0KSBkZXBlbmRpbmcgb24gdGFyZ2V0IGVsZW1lbnQgdHlwZS5cbiAqIFRoZSBlbnRpcmUgcm93IGZyb20gdGhlIGBASW5wdXQoKSB0YWJsZURhdGFgIGlzIGF2YWlsYWJsZSBmcm9tIHRoZSBjb250ZXh0IGAkaW1wbGljaXRgIHZhcmlhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8IS0tIGZvciB0YWJsZSBjZWxscyBpLmUuIHRkLWVsZW1lbnRzIC0tPlxuICogPG5nLXRlbXBsYXRlIHRhYmxlQ29sdW1uPVwic3RhdHVzXCIgdGFibGVDb2x1bW5UYXJnZXQ9XCJ0ZFwiIGxldC1teURhdGFWYXI9XCIkaW1wbGljaXRcIiBsZXQtc3RhdHVzPVwiJGltcGxpY2l0LnN0YXR1c1wiPlxuICogIDwhLS0gbXkgY3VzdG9tIHN0YXR1cyBlbGVtZW50IC0tPlxuICogPC9uZy10ZW1wbGF0ZT5cbiAqXG4gKiBAZXhhbXBsZVxuICogPCEtLSBmb3IgdGFibGUgaGVhZGVycyBpLmUuIHRoLWVsZW1lbnRzIC0tPlxuICogPG5nLXRlbXBsYXRlIHRhYmxlQ29sdW1uPVwic3RhdHVzXCIgdGFibGVDb2x1bW5UYXJnZXQ9XCJ0aFwiIGxldC1teURhdGFWYXI9XCIkaW1wbGljaXRcIiBsZXQtc3RhdHVzPVwiJGltcGxpY2l0LnN0YXR1c1wiPlxuICogIDwhLS0gbXkgY3VzdG9tIHN0YXR1cyBlbGVtZW50IC0tPlxuICogPC9uZy10ZW1wbGF0ZT5cbiAqXG4gKiBJdCBpcyBwb3NzaWJsZSB0byBhZGQgY3VzdG9tIHJvd3MgdGhhdCBhcmUgYXBwZW5kZWQgYmVsb3cgZGF0YSByb3cuIFVzZSBgPG5nLXRlbXBsYXRlPmAtdGFnIGFuZCBwbGFjZSB0aGUgbmctdGVtcGxhdGUgaW4gdGhlIGh0bWwgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZGluZyB0YWcgb2ZcbiAqIHRoZSBgPG5nZ3YtdGFibGU+YC4gQWRkIGEgYHRhYmxlQXBwZW5kYWJsZVJvd3NgLWF0dHJpYnV0ZSB0byB0aGUgYDxuZy10ZW1wbGF0ZT5gLWVsZW1lbnQuIEFueSBgdHJgIGVsZW1lbnRzIHRoYXQgZXhpc3Qgd2l0aGluIGA8bmctdGVtcGxhdGUgdGFibGVBcHBlbmRhYmxlUm93cz5gIGFuZCBgPC9uZy10ZW1wbGF0ZT5gIHRhZ3Mgd2lsbCBiZSBwdXQgYmVsb3cgZGF0YSByb3cncyBgdHJgIGVsZW1lbnQgaW4gdGhlIHRhYmxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiA8IS0tIGN1c3RvbSBhcHBlbmRlZCByb3dzIC0tPlxuICogPG5nLXRlbXBsYXRlIHRhYmxlQXBwZW5kYWJsZVJvd3MgbGV0LW15RGF0YVZhcj1cIiRpbXBsaWNpdFwiIGxldC1zdGF0dXM9XCIkaW1wbGljaXQuc3RhdHVzXCI+XG4gKiAgPHRyPlxuICogICA8IS0tIGZpcnN0IHJvdydzIGNvbHVtbnMgLS0+XG4gKiAgPC90cj5cbiAqICA8IS0tIG1vcmUgcm93cyBpZiBuZWVkZWQgLS0+XG4gKiA8L25nLXRlbXBsYXRlPlxuICpcbiAqIElmIGN1c3RvbSBzdHlsaW5nIGlzIG5lZWRlZCBmb3IgZGF0YSByb3cgdGhhdCBoYXMgYXBwZW5kZWQgcm93cywgeW91IGNhbiB1c2UgZGF0YSBhdHRyaWJ1dGUgYGRhdGEtaGFzcm93c3BhbmAgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSBkYXRhIHJvdyB3aXRob3V0IGFwcGVuZGVkIHJvd3MuXG4gKiBZb3UgY2FuIHBhc3MgeW91ciBvd24gY3VzdG9tIG1ldGhvZCB3aXRoIGNvbmRpdGlvbmFsIGxvZ2ljIHRvIGRlZmluZSB3aGF0IHZhbHVlIHdpbGwgYmUgcGFzc2VkIHRvIGRhdGEtaGFzcm93c3Bhbi5cbiAqIEluIGFkZGl0aW9uLCBoYXNSb3dTcGFuIGZ1bmN0aW9uIGFjY2VwdHMgaXRlbSBmcm9tIGBASW5wdXQoKSB0YWJsZURhdGFgIGFzIGFyZ3VtZW50IHdoaWNoIGlzIG9mIHRoZSBzYW1lIHR5cGUgYXMgdmFsdWUgcGFzc2VkIHRvIGNvbnRleHQgYCRpbXBsaWNpdGAgdmFyaWFibGUuXG4gKiBJTVBPUlRBTlQ6IHVzZSBhcnJvdyBmdW5jdGlvbiBzdHlsZSBmb3IgZGVmaW5pbmcgZnVuY3Rpb24gaW5zaWRlIGNvbXBvbmVudCwgaS5lLiBgaGFzUm93U3BhbiA9ICh2YWx1ZSkgPT4gb3V0cHV0O2AuIElmIHJlZ3VsYXIgZnVuY3Rpb24gd2lsbCBiZSBkZWZpbmVkLCBpLmUuIGBoYXNSb3dTcGFuKHZhbHVlKSB7IHJldHVybiBvdXRwdXQ7IH1gLCBiaW5kaW5nIHdpbGwgbm90IHdvcmsuXG4gKlxuICogQGV4YW1wbGVcbiAqIDwhLS0gaW5zaWRlIGNvbXBvbmVudFxuICogY2xhc3MgQ3VzdG9tQ29tcG9uZW50IHtcbiAqICBjdXN0b21IYXNSb3dTcGFuRnVuY3Rpb24gPSAoaXRlbTogQ3VzdG9tRGF0YVR5cGUpID0+IGl0ZW0uYXBwZW5kZWRSb3dzRGF0YS5sZW5ndGggPiAwID8gdHJ1ZSA6IGZhbHNlO1xuICogfVxuICogLS0+XG4gKiA8IS0tIGluc2lkZSBzdHlsZXNoZWV0c1xuICogW2RhdGEtaGFzcm93c3Bhbj1cInRydWVcIl0ge1xuICogIGNvbG9yOiBibHVlO1xuICogfVxuICogLmFwcGVuZGVkLXJvdyB7XG4gKiAgY29sb3I6IGJsdWU7XG4gKiB9XG4gKiAtLT5cbiAqIDxuZ2d2LXRhYmxlIFtoYXNSb3dTcGFuXT1cImN1c3RvbUhhc1Jvd1NwYW5GdW5jdGlvblwiPlxuICogIDwhLS0gY3VzdG9tIGFwcGVuZGVkIHJvd3MgLS0+XG4gKiAgPG5nLXRlbXBsYXRlIHRhYmxlQXBwZW5kYWJsZVJvd3MgbGV0LWFwcGVuZGVkUm93c0RhdGE9XCIkaW1wbGljaXQuYXBwZW5kZWRSb3dzRGF0YVwiPlxuICogICA8dHIgKm5nRm9yPVwibGV0IGFwcGVuZGVkUm93SXRlbSBvZiBhcHBlbmRlZFJvd3NEYXRhXCIgY2xhc3M9XCJhcHBlbmRlZC1yb3dcIj5cbiAqICAgIDx0ZD57eyBhcHBlbmRlZFJvd0l0ZW0gfX08L3RkPlxuICogICAgPCEtLSBvdGhlciByb3cncyBjb2x1bW5zIC0tPlxuICogICA8L3RyPlxuICogIDwvbmctdGVtcGxhdGU+XG4gKiA8L25nZ3YtdGFibGU+XG4gKlxuICogSW4gYWRkaXRpb24sIGl0IGlzIHBvc3NpYmxlIHRvIGFkZCBmb290ZXIgZm9yIHRoZSB0YWJsZS4gU2ltaWxhcmx5IHRvIGFkZGluZyBjdXN0b20gY29sdW1ucywgdXNlIGA8bmctdGVtcGxhdGU+YC10YWcgYW5kIHBsYWNlIHRoZSBuZy10ZW1wbGF0ZSBpbiB0aGUgaHRtbCBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kaW5nIHRhZyBvZlxuICogdGhlIGA8bmdndi10YWJsZT5gLiBBZGQgYSBgdGFibGVGb290ZXJgLWF0dHJpYnV0ZSB0byB0aGUgYDxuZy10ZW1wbGF0ZT5gLWVsZW1lbnQuIEFueSBlbGVtZW50cyB0aGF0IGV4aXN0IHdpdGhpbiBgPG5nLXRlbXBsYXRlIHRhYmxlRm9vdGVyPmAgYW5kIGA8L25nLXRlbXBsYXRlPmAgdGFncyB3aWxsIGJlIHB1dCB0byB0Zm9vdCBlbGVtZW50IGluc2lkZSB0aGUgdGFibGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIDwhLS0gZm9yIHRhYmxlIGZvb3RlciBpLmUuIHRmb290LWVsZW1lbnQgLS0+XG4gKiA8bmctdGVtcGxhdGUgdGFibGVGb290ZXI+XG4gKiAgPHRyPlxuICogICA8IS0tIGZpcnN0IHJvdydzIGNvbHVtbnMgLS0+XG4gKiAgPC90cj5cbiAqICA8IS0tIG1vcmUgcm93cyBpZiBuZWVkZWQgLS0+XG4gKiA8L25nLXRlbXBsYXRlPlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmdndi10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQgZXh0ZW5kcyBUYWJsZVJvdz5cbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQ3VzdG9tIHRlbXBsYXRlcyBkZWZpbmVkIGluIHRoZSBodG1sLlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZHJlbihUYWJsZVRlbXBsYXRlRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIGN1c3RvbVRlbXBsYXRlcyE6IFF1ZXJ5TGlzdDxUYWJsZVRlbXBsYXRlRGlyZWN0aXZlPGtleW9mIFQ+PlxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQ3VzdG9tIGFwcGVuZGVkIHJvd3MgdGVtcGxhdGUgZGVmaW5lZCBpbiB0aGUgaHRtbC5cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoVGFibGVBcHBlbmRhYmxlUm93c1RlbXBsYXRlRGlyZWN0aXZlKVxuICBhcHBlbmRlZFJvd3NUZW1wbGF0ZSE6IFRhYmxlQXBwZW5kYWJsZVJvd3NUZW1wbGF0ZURpcmVjdGl2ZVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQ3VzdG9tIGZvb3RlciB0ZW1wbGF0ZSBkZWZpbmVkIGluIHRoZSBodG1sLlxuICAgKi9cbiAgQENvbnRlbnRDaGlsZChUYWJsZUZvb3RlclRlbXBsYXRlRGlyZWN0aXZlKVxuICBjdXN0b21Gb290ZXJUZW1wbGF0ZSE6IFRhYmxlRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmVcblxuICAvKiogRW1pdHMgdGhlIHRhYmxlIHJvdyB0aGF0IHdhcyBjbGlja2VkLiBXb3JrcyBvbiBhbGwgY29sdW1ucyBpZiBub3QgcHJldmVudERlZmF1bHRFbWl0IGlzIHNldCBmb3IgdGhhdCBjb2x1bW4uICovXG4gIEBPdXRwdXQoKSBuZ3ZSb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VCB8IGFueT4oKVxuXG4gIC8qKlxuICAgKiBFbWl0cyBjdXJyZW50bHkgc2VsZWN0ZWQgYW5kIGRlc2VsZWN0ZWQgaXRlbXMgaW4gdGhlIHRhYmxlIGFzIGtleS12YWx1ZSBwYWlycy5cbiAgICogVXNlcyBlYWNoIGl0ZW1gcyBpdGVtSWQgYXMga2V5LCBhbmQgYSBib29sZWFuIHZhbHVlIHRvIGRlc2NyaWJlIHNlbGVjdGVkIHN0YXR1cy5cbiAgICovXG4gIEBPdXRwdXQoKSBuZ3ZSb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpXG5cbiAgLyoqXG4gICAqIEVtaXRzIGV2ZW50IHRvIHNpZ25hbCB0aGF0IHRoZSB0YWJsZSBzaG91bGQgYmUgcmVvcmRlcmVkLlxuICAgKi9cbiAgQE91dHB1dCgpIG5ndk9yZGVyQnkgPSBuZXcgRXZlbnRFbWl0dGVyPE9yZGVyQnk8VD4+KClcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgaXRlbXMgZGVzY3JpYmluZyBob3cgdGhlIHRhYmxlIGhlYWRlciBzaG91bGQgYmUgcmVuZGVyZWQsXG4gICAqIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIGZvciBob3cgZWFjaCByb3cgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGF0IGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpIHRhYmxlQ29sdW1ucyE6IFRhYmxlQ29sdW1uPFQ+W11cblxuICAvKiogRGF0YSBhcnJheSB0byBkaXNwbGF5IGRhdGEgaW4gdGhlIHRhYmxlLiBFYWNoIGl0ZW0gPFQ+IGluIHRoZSBhcnJheSByZXByZXNlbnRzIGEgcm93IGluIHRoZSB0YWJsZS4gKi9cbiAgQElucHV0KCkgdGFibGVEYXRhITogVFtdXG5cbiAgLyoqXG4gICAqIFByb3BlcnR5IG5hbWUgdXNlZCB0byB1bmlxdWVseSBkZXNjcmliZSBlYWNoIGl0ZW0gKGkuZS4gcm93KSBpbiB0aGUgZGF0YSB0YWJsZS5cbiAgICogRGVmYXVsdHMgdG8gXFwnaWRcXCcuXG4gICAqIElzIHJlcXVpcmVkIGlmIHNlbGVjdGFibGUgaXMgdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIHJvd0lkID0gJ2lkJ1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbidzIHJldHVybiB2YWx1ZSBpcyB1c2VkIGZvciBkYXRhIGF0dHJpYnV0ZSBcXCdkYXRhLWhhc3Jvd3NwYW5cXCcuXG4gICAqIElmIGN1c3RvbSBoYXNSb3dTcGFuIGZ1bmN0aW9uIGlzIG5vdCBwYXNzZWQgdG8gdGhlIHRhYmxlLFxuICAgKiB0aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB1bmRlZmluZWQgdmFsdWUgYnkgZGVmYXVsdCB3aGljaCByZXN1bHRzIGluIFxcJ2RhdGEtaGFzcm93c3BhblxcJyBhdHRyaWJ1dGUgYmVpbmcgb21pdHRlZCBpbiBodG1sXG4gICAqIChhbmd1bGFyIG9taXRzIGF0dHJpYnV0ZXMgdGhhdCBjb250YWluIG51bGwgb3IgdW5kZWZpbmVkIHZhbHVlKS5cbiAgICogSU1QT1JUQU5UOiB1c2UgYXJyb3cgZnVuY3Rpb24gc3R5bGUgZm9yIGRlZmluaW5nIGZ1bmN0aW9uIGluc2lkZSBjb21wb25lbnQsIGkuZS4gYGhhc1Jvd1NwYW4gPSAodmFsdWUpID0+IG91dHB1dDtgLiBJZiByZWd1bGFyIGZ1bmN0aW9uIHdpbGwgYmUgZGVmaW5lZCwgaS5lLiBgaGFzUm93U3Bhbih2YWx1ZSkgeyByZXR1cm4gb3V0cHV0OyB9YCwgYmluZGluZyB3aWxsIG5vdCB3b3JrLlxuICAgKi9cbiAgQElucHV0KCkgaGFzUm93U3BhbjogKGl0ZW06IFQpID0+IGFueSA9IChfKSA9PiB1bmRlZmluZWRcblxuICAvKipcbiAgICogVXNlZCB0byBlbmFibGUvZGlzYWJsZSB0aGUgbGVmdC1zaWRlIGNoZWNrYm94IGNvbHVtbi5cbiAgICogRGVmYXVsdHMgdG8gdHJ1ZS5cbiAgICovXG4gIEBJbnB1dCgpIHNlbGVjdGFibGUgPSB0cnVlXG5cbiAgLyoqXG4gICAqIEFsbG93IG5nZ3YtdGFibGUgdG8gYXR0ZW1wdCBzb3J0aW5nIHRoZSBkYXRhIGluIHRoZSB0YWJsZS4gTm90IHJlY29tbWVuZGVkIGlmIG9ubHkgYSBzdWJzZXQgaXMgbG9hZGVkIG9yIGlmIHRoZSBkYXRhc2V0IGlzIHZlcnkgbGFyZ2UuXG4gICAqIERpc2FibGVkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd0xvY2FsU29ydCA9IGZhbHNlXG5cbiAgLyoqIFNwZWNpYWwgcHJvcGVydHkgdXNlZCBmb3Igc2VsZWN0aW5nIERPTSBlbGVtZW50cyBkdXJpbmcgYXV0b21hdGVkIFVJIHRlc3RpbmcuICovXG4gIEBJbnB1dCgpIHRob29rID0gJ3RhYmxlLXNlbGVjdC1hbGwnXG5cbiAgLyoqIEZ1bmN0aW9uIHRvIG92ZXJ3cml0ZSBnZW5lcmF0ZWQgdGhvb2sgZm9yIGVhY2ggcm93LiAqL1xuICBASW5wdXQoKSB0clRob29rRm4/OiAoaXRlbTogVCkgPT4gc3RyaW5nXG5cbiAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBjaGVja2JveCBpbiB0aGUgdGFibGUgaGVhZGVyICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbENoZWNrYm94VGg/OiBzdHJpbmdcblxuICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIGNoZWNrYm94IGluIHRoZSB0YWJsZSBoZWFkZXIgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQ2hlY2tib3hUcj86IHN0cmluZ1xuXG4gIC8qKiBBcmlhIGxhYmVscyBmb3Igc29ydGluZyBpbiB0aGUgdGFibGUgaGVhZGVyICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbHNPcmRlckJ5PzogYXJpYUxhYmVsc09yZGVyQnlcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEludGVybmFsIGRhdGEgc3RydWN0dXJlIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBhZGRlZCBjb250ZW50IHRlbXBsYXRlcyB1c2VkIGluIHRkIGVsZW1lbnRzLlxuICAgKi9cbiAgY3VzdG9tUm93VGVtcGxhdGVzID0gbmV3IE1hcDxrZXlvZiBULCBUZW1wbGF0ZVJlZjxhbnk+PigpXG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBJbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgYWRkZWQgY29udGVudCB0ZW1wbGF0ZXMgdXNlZCBpbiB0aCBlbGVtZW50cy5cbiAgICovXG4gIGN1c3RvbUhlYWRlclRlbXBsYXRlcyA9IG5ldyBNYXA8a2V5b2YgVCwgVGVtcGxhdGVSZWY8YW55Pj4oKVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogSW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGN1c3RvbSBhcHBlbmRlZCByb3dzIGkuZS4gdHIgZWxlbWVudHMgKHJvd3MpLlxuICAgKi9cbiAgYXBwZW5kZWRSb3dzVGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBJbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgdGZvb3QgZWxlbWVudCBjaGlsZHJlbiBpLmUuIHRyIGVsZW1lbnRzIChyb3dzKS5cbiAgICovXG4gIGN1c3RvbUZvb3RlclRlbXBsYXRlUmVmITogVGVtcGxhdGVSZWY8YW55PlxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogSW5jcmVtZW50YWwgaWQuXG4gICAqL1xuICBpbml0SWQhOiBudW1iZXJcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZvcm1Hcm91cCBjb250YWluaW5nIGFsbCByb3cgaWRcXCdzIGFzIGNvbnRyb2xzLCBhbmQgd2hldGhlciB0aGVzZSBhcmUgc2VsZWN0ZWQgb3Igbm90IGFzIHZhbHVlcy5cbiAgICovXG4gIHJvd1NlbGVjdG9yczogVW50eXBlZEZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogTWFzdGVyIHNlbGVjdG9yIGZvciBzZWxlY3Rpbmcgb3IgZGVzZWxlY3RpbmcgYWxsIHJvdyBzZWxlY3RvcnMuXG4gICAqL1xuICBncm91cFNlbGVjdG9yOiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZhbHNlKVxuXG4gIHByaXZhdGUgc2VsZWN0ZWQ6IHN0cmluZ1tdID0gW11cbiAgcHJpdmF0ZSBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIHRhYmxlIGRhdGEgd2FzIHVwZGF0ZWQgYW5kIHRoZSByb3dzIHNob3VsZCBiZSBzZWxlY3RhYmxlXG4gICAgaWYgKFxuICAgICAgKGNoYW5nZXMudGFibGVEYXRhPy5jdXJyZW50VmFsdWUgJiYgdGhpcy5zZWxlY3RhYmxlKSB8fFxuICAgICAgKGNoYW5nZXMuc2VsZWN0YWJsZT8uY3VycmVudFZhbHVlID09PSB0cnVlICYmIHRoaXMudGFibGVEYXRhKVxuICAgICkge1xuICAgICAgY29uc3Qgd2FzQ2hhbmdlZCA9IHRoaXMucmVnaXN0ZXJTZWxlY3RhYmxlUm93cyhcbiAgICAgICAgY2hhbmdlcy50YWJsZURhdGEuY3VycmVudFZhbHVlLFxuICAgICAgKVxuICAgICAgaWYgKHdhc0NoYW5nZWQgJiYgIXRoaXMuc3Vicy5sZW5ndGgpIHtcbiAgICAgICAgLy8gZmlyc3QgdGltZSB0aGlzIGlzIHJ1blxuICAgICAgICBjb25zdCBncm91cFNlbGVjdG9yU3ViID0gdGhpcy5ncm91cFZhbHVlU3Vic2NyaXB0aW9uXG4gICAgICAgIGNvbnN0IHJvd1NlbGVjdG9yU3ViID0gdGhpcy5yb3dWYWx1ZVN1YnNjcmlwdGlvblxuICAgICAgICB0aGlzLnN1YnMucHVzaChncm91cFNlbGVjdG9yU3ViLCByb3dTZWxlY3RvclN1YilcbiAgICAgIH0gZWxzZSBpZiAod2FzQ2hhbmdlZCkge1xuICAgICAgICB0aGlzLnJvd1NlbGVjdG9ycy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzb3J0IGFueSBpbmNvbWluZyBkYXRhXG4gICAgaWYgKFxuICAgICAgdGhpcy5hbGxvd0xvY2FsU29ydCAmJlxuICAgICAgKGNoYW5nZXMudGFibGVEYXRhPy5jdXJyZW50VmFsdWUgfHwgY2hhbmdlcy50YWJsZUNvbHVtbnM/LmN1cnJlbnRWYWx1ZSlcbiAgICApIHtcbiAgICAgIGNvbnN0IG9yZGVyZWRCeUNvbHVtbjogVGFibGVDb2x1bW48VD4gfCB1bmRlZmluZWQgPVxuICAgICAgICB0aGlzLnRhYmxlQ29sdW1ucz8uZmluZCgoZWwpID0+IGVsLm9yZGVyICE9PSB1bmRlZmluZWQpXG4gICAgICBpZiAob3JkZXJlZEJ5Q29sdW1uKSB0aGlzLnNvcnRJdGVtc0J5KG9yZGVyZWRCeUNvbHVtbilcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRJZCA9IHN0YXRpY0luaXRJZCsrXG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgLy8gaWYgYW55IGN1c3RvbSB0ZW1wbGF0ZXMgd2VyZSBkZWZpbmVkIGluIHRoZSB0ZW1wbGF0ZVxuICAgIGlmICh0aGlzLmN1c3RvbVRlbXBsYXRlcy5sZW5ndGgpIHtcbiAgICAgIC8vIGZvciBlYWNoIHRlbXBsYXRlIGZvdW5kXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlcy5tYXAoKHRhYmxlVGVtcGxhdGUpID0+IHtcbiAgICAgICAgLy8gaWYgdGFyZ2V0IGlzIGVpdGhlciAndGQnIG9yICdib3RoJ1xuICAgICAgICBpZiAoXG4gICAgICAgICAgWyd0ZCcsICdib3RoJ10uaW5jbHVkZXModGFibGVUZW1wbGF0ZS50YWJsZUNvbHVtblRhcmdldCBhcyBzdHJpbmcpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIGFkZCB0byBjdXN0b20gcm93IHRlbXBsYXRlc1xuICAgICAgICAgIHRoaXMuY3VzdG9tUm93VGVtcGxhdGVzLnNldChcbiAgICAgICAgICAgIHRhYmxlVGVtcGxhdGUudGFibGVDb2x1bW4sXG4gICAgICAgICAgICB0YWJsZVRlbXBsYXRlLnRlbXBsYXRlUmVmLFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0YXJnZXQgaXMgZWl0aGVyICd0aCcgb3IgJ2JvdGgnXG4gICAgICAgIGlmIChcbiAgICAgICAgICBbJ3RoJywgJ2JvdGgnXS5pbmNsdWRlcyh0YWJsZVRlbXBsYXRlLnRhYmxlQ29sdW1uVGFyZ2V0IGFzIHN0cmluZylcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gYWRkIHRvIGN1c3RvbSBoZWFkZXIgdGVtcGxhdGVzXG4gICAgICAgICAgdGhpcy5jdXN0b21IZWFkZXJUZW1wbGF0ZXMuc2V0KFxuICAgICAgICAgICAgdGFibGVUZW1wbGF0ZS50YWJsZUNvbHVtbixcbiAgICAgICAgICAgIHRhYmxlVGVtcGxhdGUudGVtcGxhdGVSZWYsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIGlmIGFwcGVuZGVkIHJvd3MnIHRlbXBsYXRlIGlzIGRlZmluZWQgaW4gdGhlIHRlbXBsYXRlXG4gICAgaWYgKHRoaXMuYXBwZW5kZWRSb3dzVGVtcGxhdGUpIHtcbiAgICAgIC8vIHNldCB0ZW1wbGF0ZVJlZiBvZiBhcHBlbmRlZCByb3dzJyB0ZW1wbGF0ZSB0byB2YXJpYWJsZVxuICAgICAgdGhpcy5hcHBlbmRlZFJvd3NUZW1wbGF0ZVJlZiA9IHRoaXMuYXBwZW5kZWRSb3dzVGVtcGxhdGUudGVtcGxhdGVSZWZcbiAgICB9XG5cbiAgICAvLyBpZiBjdXN0b20gZm9vdGVyIHRlbXBsYXRlIGlzIGRlZmluZWQgaW4gdGhlIHRlbXBsYXRlXG4gICAgaWYgKHRoaXMuY3VzdG9tRm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgIC8vIHNldCB0ZW1wbGF0ZVJlZiBvZiB0YWJsZSBmb290ZXIgdG8gdmFyaWFibGVcbiAgICAgIHRoaXMuY3VzdG9tRm9vdGVyVGVtcGxhdGVSZWYgPSB0aGlzLmN1c3RvbUZvb3RlclRlbXBsYXRlLnRlbXBsYXRlUmVmXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzLmZvckVhY2goKHN1YikgPT4gc3ViLnVuc3Vic2NyaWJlKCkpXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFJldHVybnMgYSBzdWJzY3JpcHRpb24gdG8gdGhlIG1hc3RlciBzZWxlY3RvciBjb250cm9sIHRoYXQgZWl0aGVyIHNlbGVjdHMgb3IgZGVzZWxlY3RzIGFsbCByb3cgY29udHJvbHMuXG4gICAqL1xuICBnZXQgZ3JvdXBWYWx1ZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLmdyb3VwU2VsZWN0b3IudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAodmFsdWU6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0TWFwID0gbmV3IE1hcChPYmplY3QuZW50cmllcyh0aGlzLnJvd1NlbGVjdG9yc1ZhbHVlKSlcbiAgICAgICAgc2VsZWN0TWFwLmZvckVhY2goKF8sIGtleSkgPT4gc2VsZWN0TWFwLnNldChrZXksIHZhbHVlKSlcbiAgICAgICAgY29uc3QgcGF0Y2hWYWx1ZSA9IG9iamVjdEZyb21FbnRyaWVzKHNlbGVjdE1hcClcbiAgICAgICAgdGhpcy5yb3dTZWxlY3RvcnMucGF0Y2hWYWx1ZShwYXRjaFZhbHVlKVxuICAgICAgfSxcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBSZXR1cm5zIGEgc3Vic2NyaXB0aW9uIHRvIGFsbCBpbmRpdmlkdWFsIHJvdyBzZWxlY3RvcnMgYW5kIHVwZGF0ZSB0aGUgbWFzdGVyIHNlbGVjdG9yIGlmIGFsbCBhcmUgc2VsZWN0ZWQuXG4gICAqL1xuICBnZXQgcm93VmFsdWVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3RvcnMudmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgZGVib3VuY2VUaW1lKDApLCAvLyB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIGV2ZW50cyBhbmQgdG8gd2FpdCBmb3IgYWxsIHN1YiBjb250cm9scyB0byB1cGRhdGVcbiAgICAgICAgbWFwKCh2YWw6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KSA9PiB7XG4gICAgICAgICAgLy8gZ2V0IGEgZmlsdGVyZWQgYXJyYXkgb2Yga2V5cyBmb3IgYWxsIHJvd3MgdGhhdCBhcmUgc2VsZWN0ZWRcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IE9iamVjdC5rZXlzKHZhbCkuZmlsdGVyKChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2YWxba2V5XSA9PT0gdHJ1ZSAmJiB0aGlzLnJvd1NlbGVjdG9ycy5nZXQoa2V5KT8uZW5hYmxlZFxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBvbmx5IHRoZSBmaWx0ZXJlZCBrZXlzXG4gICAgICAgICAgcmV0dXJuIHBpY2soc2VsZWN0ZWQsIHZhbClcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHZhbHVlOiBvYmplY3QpID0+IHtcbiAgICAgICAgICAvLyB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIGtleXMgY29tcGFyZWQgdG8gdGhlIHRvdGFsIG51bWJlciBvZiBrZXlzIGF2YWlsYWJsZVxuICAgICAgICAgIGNvbnN0IG51bWJlck9mU2VsZWN0ZWQgPSBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoXG4gICAgICAgICAgY29uc3QgYWxsU2VsZWN0ZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgICAgbnVtYmVyT2ZTZWxlY3RlZCA+IDBcbiAgICAgICAgICAgICAgPyBudW1iZXJPZlNlbGVjdGVkID09PSBPYmplY3Qua2V5cyh0aGlzLnJvd1NlbGVjdG9yc1ZhbHVlKS5sZW5ndGhcbiAgICAgICAgICAgICAgOiBmYWxzZVxuICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgbWFzdGVyIHNlbGVjdG9yIGNvbnRyb2xcbiAgICAgICAgICB0aGlzLmdyb3VwU2VsZWN0b3Iuc2V0VmFsdWUoYWxsU2VsZWN0ZWQsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxuICAgICAgICAgIC8vIHVwZGF0ZSB0aGUgYXJyYXkgb2YgY3VycmVudGx5IHNlbGVjdGVkIGlkJ3NcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkID0gT2JqZWN0LmtleXModmFsdWUpXG4gICAgICAgICAgLy8gYW5kIGVtaXQgdGhlIHVwZGF0ZWQgdmFsdWVcbiAgICAgICAgICB0aGlzLm5ndlJvd1NlbGVjdC5lbWl0KHRoaXMuc2VsZWN0ZWQpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBSZWdpc3RlcnMgb3IgZGlzYWJsZXMgcm93IGNvbnRyb2xzIGZvciBuZXcgb3IgcmVtb3ZlZCByb3dzLlxuICAgKi9cbiAgcmVnaXN0ZXJTZWxlY3RhYmxlUm93cyh0YWJsZURhdGE6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0YWJsZURhdGEpIHJldHVybiBmYWxzZVxuICAgIC8vIEFycmF5IGNvbnRhaW5pbmcgb25seSB0aGUgaWQncyBmb3IgZWFjaCByb3dcbiAgICBjb25zdCBkYXRhUm93SWRzOiBzdHJpbmdbXSA9IHRhYmxlRGF0YS5tYXAoKGRhdGE6IGFueSkgPT4gZGF0YVt0aGlzLnJvd0lkXSlcblxuICAgIC8vIEFycmF5IGNvbnRhaW5pbmcgdGhlIGlkJ3MgdGhhdCBoYXZlIHJlZ2lzdGVyZWQgY29udHJvbHNcbiAgICBjb25zdCBjdXJyZW50SWRzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKHRoaXMucm93U2VsZWN0b3JzVmFsdWUpXG5cbiAgICAvLyBBcnJheSBjb250YWluaW5nIGFsbCBpZHMgdGhhdCBsYWNrcyBhIGNvcnJlc3BvbmRpbmcgY29udHJvbCAoaS5lLiBuZXcgcm93cylcbiAgICBjb25zdCBuZXdJZHM6IHN0cmluZ1tdID0gZGF0YVJvd0lkcy5maWx0ZXIoXG4gICAgICAoaWQpID0+IGN1cnJlbnRJZHMuaW5kZXhPZihpZCkgPT09IC0xLFxuICAgIClcblxuICAgIC8vIEFycmF5IGNvbnRhaW5pbmcgYWxsIGlkcyB0aGF0IGhhcyBhIGNvbnRyb2wgYnV0IGlzIG5vIGxvbmdlciBpbiB0aGUgZGF0YSBzZXQgKGkuZS4gcmVtb3ZlZCByb3dzKVxuICAgIGNvbnN0IHJlbW92ZWRJZHM6IHN0cmluZ1tdID0gY3VycmVudElkcy5maWx0ZXIoXG4gICAgICAoaWQpID0+IGRhdGFSb3dJZHMuaW5kZXhPZihpZCkgPT09IC0xLFxuICAgIClcblxuICAgIC8vIFJlZ2lzdGVyIG5ldyBjb250cm9scyBmb3IgYWRkZWQgcm93c1xuICAgIGlmIChuZXdJZHMubGVuZ3RoKSB7XG4gICAgICBuZXdJZHMuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgY29uc3QgY3RybCA9IHRoaXMucm93U2VsZWN0b3JzLnJlZ2lzdGVyQ29udHJvbChcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZhbHNlKSxcbiAgICAgICAgKVxuICAgICAgICBpZiAoY3RybC5kaXNhYmxlZCkgY3RybC5lbmFibGUoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTZXQgYWxyZWFkeSByZWdpc3RlcmVkIGNvbnRyb2xzIHRvIGRpc2FibGVkIGZvciByZW1vdmVkIHJvd3NcbiAgICBpZiAocmVtb3ZlZElkcy5sZW5ndGgpXG4gICAgICByZW1vdmVkSWRzLmZvckVhY2goKGlkKSA9PiB0aGlzLnJvd1NlbGVjdG9ycy5nZXQoaWQpPy5kaXNhYmxlKCkpXG5cbiAgICByZXR1cm4gbmV3SWRzLmxlbmd0aCA+IDAgfHwgcmVtb3ZlZElkcy5sZW5ndGggPiAwXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFJldHVybnMgYWxsIGVuYWJsZWQgdmFsdWVzIHVubGVzcyBhbGwgcm93cyBhcmUgZGlzYWJsZWQuXG4gICAqL1xuICBnZXQgcm93U2VsZWN0b3JzVmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3RvcnMuZW5hYmxlZCA/IHRoaXMucm93U2VsZWN0b3JzLnZhbHVlIDoge31cbiAgfVxuXG4gIHRvZ2dsZVNvcnRPcmRlcldpdGhTcGFjZShldmVudDogYW55LCBjb2x1bW46IFRhYmxlQ29sdW1uPFQ+KSB7XG4gICAgaWYgKGNvbHVtbi5zb3J0YWJsZSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgdGhpcy50b2dnbGVTb3J0T3JkZXIoY29sdW1uKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogU3dpdGNoZXMgc29ydGluZyBvcmRlciBiZXR3ZWVuIGFzY2VuZGluZyBhbmQgZGVzY2VuZGluZyBvcmRlciBmb3IgYSBjb2x1bW4uXG4gICAqIEBwYXJhbSBjb2x1bW4gdGhlIGNvbHVtbiB0byBzb3J0IHJvd3MgYWZ0ZXIuXG4gICAqL1xuICB0b2dnbGVTb3J0T3JkZXIoY29sdW1uOiBUYWJsZUNvbHVtbjxUPikge1xuICAgIC8vIGNoZWNrIGlmIHRoZSB0YWJsZSBpcyBhbHJlYWR5IHNvcnRlZCBieSBhbm90aGVyIGNvbHVtbiB0aGFuIHRoZSBvbmUgcHJvdmlkZWRcbiAgICBjb25zdCBjdXJyZW50bHlPcmRlcmVkQnkgPSB0aGlzLnRhYmxlQ29sdW1ucz8uZmluZChcbiAgICAgIChlbCkgPT4gZWwgIT09IGNvbHVtbiAmJiBlbC5vcmRlciAhPT0gdW5kZWZpbmVkLFxuICAgIClcbiAgICBpZiAoY3VycmVudGx5T3JkZXJlZEJ5KSBkZWxldGUgY3VycmVudGx5T3JkZXJlZEJ5Lm9yZGVyXG4gICAgY29sdW1uLm9yZGVyID0gY29sdW1uLm9yZGVyID09PSAnZGVzYycgPyAnYXNjJyA6ICdkZXNjJ1xuICAgIHRoaXMuc29ydEl0ZW1zQnkoY29sdW1uKVxuICB9XG5cbiAgLyoqIElmIHNvcnRhYmxlLCByZW9yZGVycyB0aGUgdGFibGUgZGF0YSB1c2luZyB0aGUgc3BlY2lmaWVkIGNvbHVtbiBhcyBvcmRlcmluZyBhdHRyaWJ1dGUuICovXG4gIHNvcnRJdGVtc0J5KGNvbHVtbjogVGFibGVDb2x1bW48VD4pOiBUYWJsZVJvd1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWNvbHVtbi5zb3J0YWJsZSkgcmV0dXJuXG4gICAgLy8gZW1pdCByZS1vcmRlciBldmVudFxuICAgIHRoaXMubmd2T3JkZXJCeS5lbWl0KHsgcHJvcGVydHk6IGNvbHVtbi5wcm9wZXJ0eSwgb3JkZXI6IGNvbHVtbi5vcmRlciB9KVxuICAgIC8vIGlmIGxvY2FsIHNvcnQgaXMgYWxsb3dlZCwgcmVvcmRlciBkYXRhXG4gICAgaWYgKCF0aGlzLmFsbG93TG9jYWxTb3J0IHx8ICF0aGlzLnRhYmxlRGF0YSkgcmV0dXJuXG4gICAgcmV0dXJuIHRoaXMudGFibGVEYXRhLnNvcnQoXG4gICAgICBjb2x1bW4ub3JkZXIgPT09ICdkZXNjJ1xuICAgICAgICA/IG9yZGVyQnlEZXNjZW5kaW5nKGNvbHVtbi5wcm9wZXJ0eSlcbiAgICAgICAgOiBvcmRlckJ5QXNjZW5kaW5nKGNvbHVtbi5wcm9wZXJ0eSksXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBFbWl0cyByb3cgZGF0YSBmb3Igd2hhdCByb3cgd2FzIGNsaWNrZWQgaWYgZGVmYXVsdEVtaXQgaXMgYWxsb3dlZC5cbiAgICovXG4gIHByb3BhZ2F0ZUl0ZW1DbGljayhpdGVtOiBhbnksIHByZXZlbnREZWZhdWx0RW1pdD86IGJvb2xlYW4pIHtcbiAgICBpZiAoIXByZXZlbnREZWZhdWx0RW1pdCkgdGhpcy5uZ3ZSb3dDbGljay5lbWl0KGl0ZW0pXG4gIH1cblxuICBnZXRBcmlhTGFiZWwoY29sdW1uOiBUYWJsZUNvbHVtbjxUPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc29ydE9yZGVyID1cbiAgICAgIGNvbHVtbi5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgPyB0aGlzLmFyaWFMYWJlbHNPcmRlckJ5Py5kZXNjXG4gICAgICAgIDogdGhpcy5hcmlhTGFiZWxzT3JkZXJCeT8uYXNjXG4gICAgaWYgKCFzb3J0T3JkZXIpIHJldHVybiAvLyBubyBhcmlhIGxhYmVscyBkZWZpbmVkXG4gICAgcmV0dXJuIGNvbHVtbi5hcmlhTGFiZWxTb3J0YWJsZT8ucmVwbGFjZSgne3tzb3J0T3JkZXJ9fScsIHNvcnRPcmRlcilcbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICNzb3J0YWJsZVRoVGVtcGxhdGUgbGV0LWNvbHVtbj5cbiAgPGJ1dHRvbiBjbGFzcz1cInNnLXRhYmxlLXNvcnRcIiAqdHJhbnNsb2NvPVwibGV0IHRcIj5cbiAgICA8bmctdGVtcGxhdGUgI3RoQnV0dG9uVGVtcGxhdGU+XG4gICAgICB7eyB0KGNvbHVtbi5sYWJlbCA/PyAnJykgfX1cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiXG4gICAgICAgIGN1c3RvbUhlYWRlclRlbXBsYXRlcy5nZXQoY29sdW1uLnByb3BlcnR5KSBhcyB0aFRlbXBsYXRlO1xuICAgICAgICBlbHNlIHRoQnV0dG9uVGVtcGxhdGVcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGhUZW1wbGF0ZSB8fCBudWxsOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29sdW1uIH1cIlxuICAgICAgPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vdFNvcnRhYmxlVGhUZW1wbGF0ZSBsZXQtY29sdW1uPlxuICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUaFRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKnRyYW5zbG9jbz1cImxldCB0XCI+XG4gICAgICB7eyB0KGNvbHVtbi5sYWJlbCA/PyAnJykgfX1cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwiXG4gICAgICBjdXN0b21IZWFkZXJUZW1wbGF0ZXMuZ2V0KGNvbHVtbi5wcm9wZXJ0eSkgYXMgdGhUZW1wbGF0ZTtcbiAgICAgIGVsc2UgZGVmYXVsdFRoVGVtcGxhdGVcbiAgICBcIlxuICA+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRoVGVtcGxhdGUgfHwgbnVsbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbHVtbiB9XCJcbiAgICA+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48dGFibGUgY2xhc3M9XCJnZHMtdGFibGVcIiAqdHJhbnNsb2NvPVwibGV0IHRcIj5cbiAgPCEtLSBUYWJsZSBoZWFkZXIgLS0+XG4gIDx0aGVhZD5cbiAgICA8dHI+XG4gICAgICA8IS0tIENoZWNrYm94IGNvbHVtbiBmb3IgaGVhZGVyIC0tPlxuICAgICAgPHRoICpuZ0lmPVwic2VsZWN0YWJsZVwiIGNsYXNzPVwiY29sdW1uX19jaGVja1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ2RzLWZpZWxkLWNoZWNrYm94LXdyYXBcIj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ3JvdXBTZWxlY3RvclwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbENoZWNrYm94VGhcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2NiX2hlYWRlcl9fJyArIGluaXRJZFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cInRob29rXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxsYWJlbCBbYXR0ci5mb3JdPVwiJ2NiX2hlYWRlcl9fJyArIGluaXRJZFwiPjwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90aD5cblxuICAgICAgPCEtLSBPdGhlciBjb2x1bW5zIC0tPlxuICAgICAgPHRoXG4gICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGVDb2x1bW5zXCJcbiAgICAgICAgW2NvbHVtblR5cGVdPVwiY29sdW1uLnZhbHVlVHlwZVwiXG4gICAgICAgIFtzb3J0YWJsZV09XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICBbc29ydE9yZGVyXT1cImNvbHVtbi5vcmRlclwiXG4gICAgICAgIFt0aG9va109XCInY29sdW1uLWhlYWRlci0nICsgISFjb2x1bW4ucHJvcGVydHlcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlU29ydE9yZGVyKGNvbHVtbilcIlxuICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJ0b2dnbGVTb3J0T3JkZXJXaXRoU3BhY2UoJGV2ZW50LCBjb2x1bW4pXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRBcmlhTGFiZWwoY29sdW1uKVwiXG4gICAgICAgIFthdHRyLmFyaWEtc29ydF09XCJjb2x1bW4ub3JkZXIgKyAnZW5kaW5nJ1wiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2x1bW4uc29ydGFibGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICBzb3J0YWJsZVRoVGVtcGxhdGU7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4sIGNvbHVtbjogY29sdW1uIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4uc29ydGFibGVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICBub3RTb3J0YWJsZVRoVGVtcGxhdGU7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4sIGNvbHVtbjogY29sdW1uIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvdGg+XG4gICAgPC90cj5cbiAgPC90aGVhZD5cblxuICA8IS0tIFRhYmxlIGJvZHkgLS0+XG4gIDx0Ym9keSBbZm9ybUdyb3VwXT1cInJvd1NlbGVjdG9yc1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdGFibGVEYXRhOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICA8dHJcbiAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJpdGVtIHwgdHJUaG9vazogaSA6IHRyVGhvb2tGblwiXG4gICAgICAgIFthdHRyLmRhdGEtaGFzcm93c3Bhbl09XCJoYXNSb3dTcGFuKGl0ZW0pXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBDaGVja2JveCBjb2x1bW4gZm9yIHJvdyAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0YWJsZVwiIGNsYXNzPVwiY29sdW1uX19jaGVja1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZHMtZmllbGQtY2hlY2tib3gtd3JhcFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICpuZ0lmPVwicm93U2VsZWN0b3JzLmdldChpdGVtW3Jvd0lkXSlcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW1bcm93SWRdXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxDaGVja2JveFRyXCJcbiAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2NiX3Jvd19fJyArIGluaXRJZCArICdfJyArIGlcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cIidyb3ctc2VsZWN0LScgKyBpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgW2F0dHIuZm9yXT1cIidjYl9yb3dfXycgKyBpbml0SWQgKyAnXycgKyBpXCI+PC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIE90aGVyIGNvbHVtbnMgLS0+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGVDb2x1bW5zXCJcbiAgICAgICAgICAoY2xpY2spPVwicHJvcGFnYXRlSXRlbUNsaWNrKGl0ZW0sIGNvbHVtbi5wcmV2ZW50RGVmYXVsdENsaWNrRXZlbnQpXCJcbiAgICAgICAgICBbY29sdW1uVHlwZV09XCJjb2x1bW4udmFsdWVUeXBlXCJcbiAgICAgICAgICBbdmFsdWVdPVwiaXRlbVtjb2x1bW4ucHJvcGVydHldXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIGN1c3RvbVJvd1RlbXBsYXRlcy5nZXQoY29sdW1uLnByb3BlcnR5KSBhcyB0ZFRlbXBsYXRlO1xuICAgICAgICAgICAgICBlbHNlIGRlZmF1bHRUZFRlbXBsYXRlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gQ2Fubm90IGluZmVyIHRkVGVtcGxhdGUgYXMgVGVtcGxhdGVSZWYgdGhlcmVmb3JlIG51bGwgLS0+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICB0ZFRlbXBsYXRlIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRkVGVtcGxhdGU+XG4gICAgICAgICAgICB7eyBpdGVtW2NvbHVtbi5wcm9wZXJ0eV0gfX1cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cblxuICAgICAgPCEtLSBjdXN0b20gYXBwZW5kZWQgcm93cyAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcHBlbmRlZFJvd3NUZW1wbGF0ZVJlZiBhcyB0clRlbXBsYXRlXCI+XG4gICAgICAgIDwhLS0gQ2Fubm90IGluZmVyIHRyVGVtcGxhdGUgYXMgVGVtcGxhdGVSZWYgdGhlcmVmb3JlIG51bGwgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRyVGVtcGxhdGUgfHwgbnVsbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC90Ym9keT5cblxuICA8IS0tIFRhYmxlIGZvb3RlciAtLT5cbiAgPHRmb290ICpuZ0lmPVwiY3VzdG9tRm9vdGVyVGVtcGxhdGVSZWYgYXMgdHJUZW1wbGF0ZVwiPlxuICAgIDwhLS0gQ2Fubm90IGluZmVyIHRyVGVtcGxhdGUgYXMgVGVtcGxhdGVSZWYgdGhlcmVmb3JlIG51bGwgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyVGVtcGxhdGUgfHwgbnVsbFwiPiA8L25nLWNvbnRhaW5lcj5cbiAgPC90Zm9vdD5cbjwvdGFibGU+XG4iXX0=
406
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWxELE9BQU8sRUFDTCxvQ0FBb0MsRUFDcEMsNEJBQTRCLEVBQzVCLHNCQUFzQixHQUN2QixNQUFNLG1CQUFtQixDQUFBO0FBTzFCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUE7Ozs7Ozs7QUFFekUsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFBO0FBRXBCLFNBQVMsaUJBQWlCLENBQUMsUUFBdUI7SUFDaEQsTUFBTSxXQUFXLEdBQTJCLEVBQUUsQ0FBQTtJQUM5QyxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLENBQUM7UUFDcEMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQTtJQUMxQixDQUFDO0lBQ0QsT0FBTyxXQUFXLENBQUE7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QkFDRSxZQUFZOzhCQVd0QixlQUFlO3NCQURkLGVBQWU7dUJBQUMsc0JBQXNCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQVE5RCxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsb0NBQW9DO2dCQVFsRCxvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsNEJBQTRCO2dCQUloQyxXQUFXO3NCQUFwQixNQUFNO2dCQU1HLFlBQVk7c0JBQXJCLE1BQU07Z0JBS0csVUFBVTtzQkFBbkIsTUFBTTtnQkFNRSxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0csS0FBSztzQkFBYixLQUFLO2dCQVNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBTUcsY0FBYztzQkFBdEIsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBR0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7XG4gIFRhYmxlQXBwZW5kYWJsZVJvd3NUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgVGFibGVGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSxcbn0gZnJvbSAnLi90YWJsZS5kaXJlY3RpdmUnXG5pbXBvcnQge1xuICBhcmlhTGFiZWxzT3JkZXJCeSxcbiAgT3JkZXJCeSxcbiAgVGFibGVDb2x1bW4sXG4gIFRhYmxlUm93LFxufSBmcm9tICcuL3RhYmxlLm1vZGVscydcbmltcG9ydCB7IG9yZGVyQnlBc2NlbmRpbmcsIG9yZGVyQnlEZXNjZW5kaW5nLCBwaWNrIH0gZnJvbSAnLi90YWJsZS50b29scydcblxubGV0IHN0YXRpY0luaXRJZCA9IDBcblxuZnVuY3Rpb24gb2JqZWN0RnJvbUVudHJpZXMoZW50cnlNYXA6IE1hcDxhbnksIGFueT4pOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgY29uc3QgZnJvbUVudHJpZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyeU1hcCkge1xuICAgIGZyb21FbnRyaWVzW2tleV0gPSB2YWx1ZVxuICB9XG4gIHJldHVybiBmcm9tRW50cmllc1xufVxuXG4vKipcbiAqIEEgdGFibGUgY29tcG9uZW50IHdpdGggYnVpbHQtaW4gc29ydGluZyBhbmQgc2VsZWN0aW5nIGZ1bmN0aW9uYWxpdHkuXG4gKiBCeSBkZWZhdWx0LCB0YWJsZSBjZWxscyAoaS5lLiBgPHRkPmAgZWxlbWVudHMpIGFuZCB0YWJsZSBoZWFkZXJzIChpLmUuIGA8dGg+YCBlbGVtZW50cykgYXJlIHBvcHVsYXRlZCB3aXRoIHRleHQgb25seSB2YWx1ZXMuXG4gKlxuICogVG8gY3VzdG9taXplIHRoZSBjb250ZW50cyBvZiBlaXRoZXIgdGhlIGA8dGQ+YCBvciBgPHRoPmAgZWxlbWVudHMgKGxpa2UgYWRkaW5nIGNvbG9yLCBpY29ucywgZm9ybSBmaWVsZHMsIGV4dHJhIHBhZGRpbmcgZXRjLiksIHByb3ZpZGVcbiAqIHRoZSBjdXN0b21pemVkIGNvbnRlbnQgd2l0aGluIGEgYDxuZy10ZW1wbGF0ZT5gLXRhZywgYW5kIHBsYWNlIHRoZSBuZy10ZW1wbGF0ZSBpbiB0aGUgaHRtbCBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kaW5nIHRhZyBvZlxuICogdGhlIGA8bmdndi10YWJsZT5gLiBBZGQgYSBgdGFibGVDb2x1bW5gLWF0dHJpYnV0ZSB0byB0aGUgYDxuZy10ZW1wbGF0ZT5gLWVsZW1lbnQsIGFuZCBzZXQgdGhlIHZhbHVlIHRvIHRoZSBzcGVjaWZpYyBjb2x1bW4gcHJvcGVydHkuXG4gKiBTZXQgYHRhYmxlQ29sdW1uVGFyZ2V0YCB0byBlaXRoZXIgYHRoYCwgYHRkYCBvciBgYm90aGAgKGRlZmF1bHQpIGRlcGVuZGluZyBvbiB0YXJnZXQgZWxlbWVudCB0eXBlLlxuICogVGhlIGVudGlyZSByb3cgZnJvbSB0aGUgYEBJbnB1dCgpIHRhYmxlRGF0YWAgaXMgYXZhaWxhYmxlIGZyb20gdGhlIGNvbnRleHQgYCRpbXBsaWNpdGAgdmFyaWFibGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIDwhLS0gZm9yIHRhYmxlIGNlbGxzIGkuZS4gdGQtZWxlbWVudHMgLS0+XG4gKiA8bmctdGVtcGxhdGUgdGFibGVDb2x1bW49XCJzdGF0dXNcIiB0YWJsZUNvbHVtblRhcmdldD1cInRkXCIgbGV0LW15RGF0YVZhcj1cIiRpbXBsaWNpdFwiIGxldC1zdGF0dXM9XCIkaW1wbGljaXQuc3RhdHVzXCI+XG4gKiAgPCEtLSBteSBjdXN0b20gc3RhdHVzIGVsZW1lbnQgLS0+XG4gKiA8L25nLXRlbXBsYXRlPlxuICpcbiAqIEBleGFtcGxlXG4gKiA8IS0tIGZvciB0YWJsZSBoZWFkZXJzIGkuZS4gdGgtZWxlbWVudHMgLS0+XG4gKiA8bmctdGVtcGxhdGUgdGFibGVDb2x1bW49XCJzdGF0dXNcIiB0YWJsZUNvbHVtblRhcmdldD1cInRoXCIgbGV0LW15RGF0YVZhcj1cIiRpbXBsaWNpdFwiIGxldC1zdGF0dXM9XCIkaW1wbGljaXQuc3RhdHVzXCI+XG4gKiAgPCEtLSBteSBjdXN0b20gc3RhdHVzIGVsZW1lbnQgLS0+XG4gKiA8L25nLXRlbXBsYXRlPlxuICpcbiAqIEl0IGlzIHBvc3NpYmxlIHRvIGFkZCBjdXN0b20gcm93cyB0aGF0IGFyZSBhcHBlbmRlZCBiZWxvdyBkYXRhIHJvdy4gVXNlIGA8bmctdGVtcGxhdGU+YC10YWcgYW5kIHBsYWNlIHRoZSBuZy10ZW1wbGF0ZSBpbiB0aGUgaHRtbCBiZXR3ZWVuIHRoZSBzdGFydCBhbmQgZW5kaW5nIHRhZyBvZlxuICogdGhlIGA8bmdndi10YWJsZT5gLiBBZGQgYSBgdGFibGVBcHBlbmRhYmxlUm93c2AtYXR0cmlidXRlIHRvIHRoZSBgPG5nLXRlbXBsYXRlPmAtZWxlbWVudC4gQW55IGB0cmAgZWxlbWVudHMgdGhhdCBleGlzdCB3aXRoaW4gYDxuZy10ZW1wbGF0ZSB0YWJsZUFwcGVuZGFibGVSb3dzPmAgYW5kIGA8L25nLXRlbXBsYXRlPmAgdGFncyB3aWxsIGJlIHB1dCBiZWxvdyBkYXRhIHJvdydzIGB0cmAgZWxlbWVudCBpbiB0aGUgdGFibGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIDwhLS0gY3VzdG9tIGFwcGVuZGVkIHJvd3MgLS0+XG4gKiA8bmctdGVtcGxhdGUgdGFibGVBcHBlbmRhYmxlUm93cyBsZXQtbXlEYXRhVmFyPVwiJGltcGxpY2l0XCIgbGV0LXN0YXR1cz1cIiRpbXBsaWNpdC5zdGF0dXNcIj5cbiAqICA8dHI+XG4gKiAgIDwhLS0gZmlyc3Qgcm93J3MgY29sdW1ucyAtLT5cbiAqICA8L3RyPlxuICogIDwhLS0gbW9yZSByb3dzIGlmIG5lZWRlZCAtLT5cbiAqIDwvbmctdGVtcGxhdGU+XG4gKlxuICogSWYgY3VzdG9tIHN0eWxpbmcgaXMgbmVlZGVkIGZvciBkYXRhIHJvdyB0aGF0IGhhcyBhcHBlbmRlZCByb3dzLCB5b3UgY2FuIHVzZSBkYXRhIGF0dHJpYnV0ZSBgZGF0YS1oYXNyb3dzcGFuYCB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIGRhdGEgcm93IHdpdGhvdXQgYXBwZW5kZWQgcm93cy5cbiAqIFlvdSBjYW4gcGFzcyB5b3VyIG93biBjdXN0b20gbWV0aG9kIHdpdGggY29uZGl0aW9uYWwgbG9naWMgdG8gZGVmaW5lIHdoYXQgdmFsdWUgd2lsbCBiZSBwYXNzZWQgdG8gZGF0YS1oYXNyb3dzcGFuLlxuICogSW4gYWRkaXRpb24sIGhhc1Jvd1NwYW4gZnVuY3Rpb24gYWNjZXB0cyBpdGVtIGZyb20gYEBJbnB1dCgpIHRhYmxlRGF0YWAgYXMgYXJndW1lbnQgd2hpY2ggaXMgb2YgdGhlIHNhbWUgdHlwZSBhcyB2YWx1ZSBwYXNzZWQgdG8gY29udGV4dCBgJGltcGxpY2l0YCB2YXJpYWJsZS5cbiAqIElNUE9SVEFOVDogdXNlIGFycm93IGZ1bmN0aW9uIHN0eWxlIGZvciBkZWZpbmluZyBmdW5jdGlvbiBpbnNpZGUgY29tcG9uZW50LCBpLmUuIGBoYXNSb3dTcGFuID0gKHZhbHVlKSA9PiBvdXRwdXQ7YC4gSWYgcmVndWxhciBmdW5jdGlvbiB3aWxsIGJlIGRlZmluZWQsIGkuZS4gYGhhc1Jvd1NwYW4odmFsdWUpIHsgcmV0dXJuIG91dHB1dDsgfWAsIGJpbmRpbmcgd2lsbCBub3Qgd29yay5cbiAqXG4gKiBAZXhhbXBsZVxuICogPCEtLSBpbnNpZGUgY29tcG9uZW50XG4gKiBjbGFzcyBDdXN0b21Db21wb25lbnQge1xuICogIGN1c3RvbUhhc1Jvd1NwYW5GdW5jdGlvbiA9IChpdGVtOiBDdXN0b21EYXRhVHlwZSkgPT4gaXRlbS5hcHBlbmRlZFJvd3NEYXRhLmxlbmd0aCA+IDAgPyB0cnVlIDogZmFsc2U7XG4gKiB9XG4gKiAtLT5cbiAqIDwhLS0gaW5zaWRlIHN0eWxlc2hlZXRzXG4gKiBbZGF0YS1oYXNyb3dzcGFuPVwidHJ1ZVwiXSB7XG4gKiAgY29sb3I6IGJsdWU7XG4gKiB9XG4gKiAuYXBwZW5kZWQtcm93IHtcbiAqICBjb2xvcjogYmx1ZTtcbiAqIH1cbiAqIC0tPlxuICogPG5nZ3YtdGFibGUgW2hhc1Jvd1NwYW5dPVwiY3VzdG9tSGFzUm93U3BhbkZ1bmN0aW9uXCI+XG4gKiAgPCEtLSBjdXN0b20gYXBwZW5kZWQgcm93cyAtLT5cbiAqICA8bmctdGVtcGxhdGUgdGFibGVBcHBlbmRhYmxlUm93cyBsZXQtYXBwZW5kZWRSb3dzRGF0YT1cIiRpbXBsaWNpdC5hcHBlbmRlZFJvd3NEYXRhXCI+XG4gKiAgIDx0ciAqbmdGb3I9XCJsZXQgYXBwZW5kZWRSb3dJdGVtIG9mIGFwcGVuZGVkUm93c0RhdGFcIiBjbGFzcz1cImFwcGVuZGVkLXJvd1wiPlxuICogICAgPHRkPnt7IGFwcGVuZGVkUm93SXRlbSB9fTwvdGQ+XG4gKiAgICA8IS0tIG90aGVyIHJvdydzIGNvbHVtbnMgLS0+XG4gKiAgIDwvdHI+XG4gKiAgPC9uZy10ZW1wbGF0ZT5cbiAqIDwvbmdndi10YWJsZT5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgaXQgaXMgcG9zc2libGUgdG8gYWRkIGZvb3RlciBmb3IgdGhlIHRhYmxlLiBTaW1pbGFybHkgdG8gYWRkaW5nIGN1c3RvbSBjb2x1bW5zLCB1c2UgYDxuZy10ZW1wbGF0ZT5gLXRhZyBhbmQgcGxhY2UgdGhlIG5nLXRlbXBsYXRlIGluIHRoZSBodG1sIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmRpbmcgdGFnIG9mXG4gKiB0aGUgYDxuZ2d2LXRhYmxlPmAuIEFkZCBhIGB0YWJsZUZvb3RlcmAtYXR0cmlidXRlIHRvIHRoZSBgPG5nLXRlbXBsYXRlPmAtZWxlbWVudC4gQW55IGVsZW1lbnRzIHRoYXQgZXhpc3Qgd2l0aGluIGA8bmctdGVtcGxhdGUgdGFibGVGb290ZXI+YCBhbmQgYDwvbmctdGVtcGxhdGU+YCB0YWdzIHdpbGwgYmUgcHV0IHRvIHRmb290IGVsZW1lbnQgaW5zaWRlIHRoZSB0YWJsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogPCEtLSBmb3IgdGFibGUgZm9vdGVyIGkuZS4gdGZvb3QtZWxlbWVudCAtLT5cbiAqIDxuZy10ZW1wbGF0ZSB0YWJsZUZvb3Rlcj5cbiAqICA8dHI+XG4gKiAgIDwhLS0gZmlyc3Qgcm93J3MgY29sdW1ucyAtLT5cbiAqICA8L3RyPlxuICogIDwhLS0gbW9yZSByb3dzIGlmIG5lZWRlZCAtLT5cbiAqIDwvbmctdGVtcGxhdGU+XG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZ2d2LXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCBleHRlbmRzIFRhYmxlUm93PlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEN1c3RvbSB0ZW1wbGF0ZXMgZGVmaW5lZCBpbiB0aGUgaHRtbC5cbiAgICovXG4gIEBDb250ZW50Q2hpbGRyZW4oVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBjdXN0b21UZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGFibGVUZW1wbGF0ZURpcmVjdGl2ZTxrZXlvZiBUPj5cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEN1c3RvbSBhcHBlbmRlZCByb3dzIHRlbXBsYXRlIGRlZmluZWQgaW4gdGhlIGh0bWwuXG4gICAqL1xuICBAQ29udGVudENoaWxkKFRhYmxlQXBwZW5kYWJsZVJvd3NUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgYXBwZW5kZWRSb3dzVGVtcGxhdGUhOiBUYWJsZUFwcGVuZGFibGVSb3dzVGVtcGxhdGVEaXJlY3RpdmVcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEN1c3RvbSBmb290ZXIgdGVtcGxhdGUgZGVmaW5lZCBpbiB0aGUgaHRtbC5cbiAgICovXG4gIEBDb250ZW50Q2hpbGQoVGFibGVGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgY3VzdG9tRm9vdGVyVGVtcGxhdGUhOiBUYWJsZUZvb3RlclRlbXBsYXRlRGlyZWN0aXZlXG5cbiAgLyoqIEVtaXRzIHRoZSB0YWJsZSByb3cgdGhhdCB3YXMgY2xpY2tlZC4gV29ya3Mgb24gYWxsIGNvbHVtbnMgaWYgbm90IHByZXZlbnREZWZhdWx0RW1pdCBpcyBzZXQgZm9yIHRoYXQgY29sdW1uLiAqL1xuICBAT3V0cHV0KCkgbmd2Um93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFQgfCBhbnk+KClcblxuICAvKipcbiAgICogRW1pdHMgY3VycmVudGx5IHNlbGVjdGVkIGFuZCBkZXNlbGVjdGVkIGl0ZW1zIGluIHRoZSB0YWJsZSBhcyBrZXktdmFsdWUgcGFpcnMuXG4gICAqIFVzZXMgZWFjaCBpdGVtYHMgaXRlbUlkIGFzIGtleSwgYW5kIGEgYm9vbGVhbiB2YWx1ZSB0byBkZXNjcmliZSBzZWxlY3RlZCBzdGF0dXMuXG4gICAqL1xuICBAT3V0cHV0KCkgbmd2Um93U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKVxuXG4gIC8qKlxuICAgKiBFbWl0cyBldmVudCB0byBzaWduYWwgdGhhdCB0aGUgdGFibGUgc2hvdWxkIGJlIHJlb3JkZXJlZC5cbiAgICovXG4gIEBPdXRwdXQoKSBuZ3ZPcmRlckJ5ID0gbmV3IEV2ZW50RW1pdHRlcjxPcmRlckJ5PFQ+PigpXG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGl0ZW1zIGRlc2NyaWJpbmcgaG93IHRoZSB0YWJsZSBoZWFkZXIgc2hvdWxkIGJlIHJlbmRlcmVkLFxuICAgKiB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyBmb3IgaG93IGVhY2ggcm93IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhhdCBjb2x1bW4uXG4gICAqL1xuICBASW5wdXQoKSB0YWJsZUNvbHVtbnMhOiBUYWJsZUNvbHVtbjxUPltdXG5cbiAgLyoqIERhdGEgYXJyYXkgdG8gZGlzcGxheSBkYXRhIGluIHRoZSB0YWJsZS4gRWFjaCBpdGVtIDxUPiBpbiB0aGUgYXJyYXkgcmVwcmVzZW50cyBhIHJvdyBpbiB0aGUgdGFibGUuICovXG4gIEBJbnB1dCgpIHRhYmxlRGF0YSE6IFRbXVxuXG4gIC8qKlxuICAgKiBQcm9wZXJ0eSBuYW1lIHVzZWQgdG8gdW5pcXVlbHkgZGVzY3JpYmUgZWFjaCBpdGVtIChpLmUuIHJvdykgaW4gdGhlIGRhdGEgdGFibGUuXG4gICAqIERlZmF1bHRzIHRvIFxcJ2lkXFwnLlxuICAgKiBJcyByZXF1aXJlZCBpZiBzZWxlY3RhYmxlIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSByb3dJZCA9ICdpZCdcblxuICAvKipcbiAgICogRnVuY3Rpb24ncyByZXR1cm4gdmFsdWUgaXMgdXNlZCBmb3IgZGF0YSBhdHRyaWJ1dGUgXFwnZGF0YS1oYXNyb3dzcGFuXFwnLlxuICAgKiBJZiBjdXN0b20gaGFzUm93U3BhbiBmdW5jdGlvbiBpcyBub3QgcGFzc2VkIHRvIHRoZSB0YWJsZSxcbiAgICogdGhlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdW5kZWZpbmVkIHZhbHVlIGJ5IGRlZmF1bHQgd2hpY2ggcmVzdWx0cyBpbiBcXCdkYXRhLWhhc3Jvd3NwYW5cXCcgYXR0cmlidXRlIGJlaW5nIG9taXR0ZWQgaW4gaHRtbFxuICAgKiAoYW5ndWxhciBvbWl0cyBhdHRyaWJ1dGVzIHRoYXQgY29udGFpbiBudWxsIG9yIHVuZGVmaW5lZCB2YWx1ZSkuXG4gICAqIElNUE9SVEFOVDogdXNlIGFycm93IGZ1bmN0aW9uIHN0eWxlIGZvciBkZWZpbmluZyBmdW5jdGlvbiBpbnNpZGUgY29tcG9uZW50LCBpLmUuIGBoYXNSb3dTcGFuID0gKHZhbHVlKSA9PiBvdXRwdXQ7YC4gSWYgcmVndWxhciBmdW5jdGlvbiB3aWxsIGJlIGRlZmluZWQsIGkuZS4gYGhhc1Jvd1NwYW4odmFsdWUpIHsgcmV0dXJuIG91dHB1dDsgfWAsIGJpbmRpbmcgd2lsbCBub3Qgd29yay5cbiAgICovXG4gIEBJbnB1dCgpIGhhc1Jvd1NwYW46IChpdGVtOiBUKSA9PiBhbnkgPSAoXykgPT4gdW5kZWZpbmVkXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgdGhlIGxlZnQtc2lkZSBjaGVja2JveCBjb2x1bW4uXG4gICAqIERlZmF1bHRzIHRvIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBzZWxlY3RhYmxlID0gdHJ1ZVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGVuYWJsZS9kaXNhYmxlIGV4cGFuZGFibGUgcm93cy5cbiAgICogRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqL1xuICBASW5wdXQoKSBleHBhbmRhYmxlID0gZmFsc2VcblxuICAvKipcbiAgKiBQcm9wZXJ0eSBuYW1lIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHN1Ykl0ZW1zIGluIHRoZSBkYXRhIHRhYmxlLlxuICAqL1xuICBASW5wdXQoKSBzdWJJdGVtc1Byb3AgPSAnc3ViSXRlbXMnXG5cbiAgLyoqXG4gICAqIEFsbG93IG5nZ3YtdGFibGUgdG8gYXR0ZW1wdCBzb3J0aW5nIHRoZSBkYXRhIGluIHRoZSB0YWJsZS4gTm90IHJlY29tbWVuZGVkIGlmIG9ubHkgYSBzdWJzZXQgaXMgbG9hZGVkIG9yIGlmIHRoZSBkYXRhc2V0IGlzIHZlcnkgbGFyZ2UuXG4gICAqIERpc2FibGVkIGJ5IGRlZmF1bHQuXG4gICAqL1xuICBASW5wdXQoKSBhbGxvd0xvY2FsU29ydCA9IGZhbHNlXG5cbiAgLyoqIFNwZWNpYWwgcHJvcGVydHkgdXNlZCBmb3Igc2VsZWN0aW5nIERPTSBlbGVtZW50cyBkdXJpbmcgYXV0b21hdGVkIFVJIHRlc3RpbmcuICovXG4gIEBJbnB1dCgpIHRob29rID0gJ3RhYmxlLXNlbGVjdC1hbGwnXG5cbiAgLyoqIEZ1bmN0aW9uIHRvIG92ZXJ3cml0ZSBnZW5lcmF0ZWQgdGhvb2sgZm9yIGVhY2ggcm93LiAqL1xuICBASW5wdXQoKSB0clRob29rRm4/OiAoaXRlbTogVCkgPT4gc3RyaW5nXG5cbiAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBjaGVja2JveCBpbiB0aGUgdGFibGUgaGVhZGVyICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbENoZWNrYm94VGg/OiBzdHJpbmdcblxuICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIGNoZWNrYm94IGluIHRoZSB0YWJsZSBoZWFkZXIgKi9cbiAgQElucHV0KCkgYXJpYUxhYmVsQ2hlY2tib3hUcj86IHN0cmluZ1xuXG4gIC8qKiBBcmlhIGxhYmVscyBmb3Igc29ydGluZyBpbiB0aGUgdGFibGUgaGVhZGVyICovXG4gIEBJbnB1dCgpIGFyaWFMYWJlbHNPcmRlckJ5PzogYXJpYUxhYmVsc09yZGVyQnlcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEludGVybmFsIGRhdGEgc3RydWN0dXJlIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBhZGRlZCBjb250ZW50IHRlbXBsYXRlcyB1c2VkIGluIHRkIGVsZW1lbnRzLlxuICAgKi9cbiAgY3VzdG9tUm93VGVtcGxhdGVzID0gbmV3IE1hcDxrZXlvZiBULCBUZW1wbGF0ZVJlZjxhbnk+PigpXG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBJbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgYWRkZWQgY29udGVudCB0ZW1wbGF0ZXMgdXNlZCBpbiB0aCBlbGVtZW50cy5cbiAgICovXG4gIGN1c3RvbUhlYWRlclRlbXBsYXRlcyA9IG5ldyBNYXA8a2V5b2YgVCwgVGVtcGxhdGVSZWY8YW55Pj4oKVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogSW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBob2xkIGN1c3RvbSBhcHBlbmRlZCByb3dzIGkuZS4gdHIgZWxlbWVudHMgKHJvd3MpLlxuICAgKi9cbiAgYXBwZW5kZWRSb3dzVGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBJbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgdGZvb3QgZWxlbWVudCBjaGlsZHJlbiBpLmUuIHRyIGVsZW1lbnRzIChyb3dzKS5cbiAgICovXG4gIGN1c3RvbUZvb3RlclRlbXBsYXRlUmVmITogVGVtcGxhdGVSZWY8YW55PlxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogSW5jcmVtZW50YWwgaWQuXG4gICAqL1xuICBpbml0SWQhOiBudW1iZXJcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEZvcm1Hcm91cCBjb250YWluaW5nIGFsbCByb3cgaWRcXCdzIGFzIGNvbnRyb2xzLCBhbmQgd2hldGhlciB0aGVzZSBhcmUgc2VsZWN0ZWQgb3Igbm90IGFzIHZhbHVlcy5cbiAgICovXG4gIHJvd1NlbGVjdG9yczogVW50eXBlZEZvcm1Hcm91cCA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogTWFzdGVyIHNlbGVjdG9yIGZvciBzZWxlY3Rpbmcgb3IgZGVzZWxlY3RpbmcgYWxsIHJvdyBzZWxlY3RvcnMuXG4gICAqL1xuICBncm91cFNlbGVjdG9yOiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZhbHNlKVxuXG4gIHByaXZhdGUgc2VsZWN0ZWQ6IHN0cmluZ1tdID0gW11cbiAgcHJpdmF0ZSBzdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIFVwZGF0ZSBzZWxlY3RhYmxlIG9yIGV4cGFuZGFibGUgcm93cyBpZiB0YWJsZSBkYXRhIG9yIHNldHRpbmdzIGNoYW5nZVxuICAgIGlmIChcbiAgICAgICh0aGlzLnNlbGVjdGFibGUgfHwgdGhpcy5leHBhbmRhYmxlKSAmJiBjaGFuZ2VzLnRhYmxlRGF0YT8uY3VycmVudFZhbHVlIHx8XG4gICAgICAoY2hhbmdlcy5zZWxlY3RhYmxlPy5jdXJyZW50VmFsdWUgfHwgY2hhbmdlcy5leHBhbmRhYmxlPy5jdXJyZW50VmFsdWUpICYmIHRoaXMudGFibGVEYXRhXG4gICAgKSB7XG4gICAgICBjb25zdCB3YXNDaGFuZ2VkID0gdGhpcy5yZWdpc3RlclNlbGVjdGFibGVSb3dzKFxuICAgICAgICBjaGFuZ2VzLnRhYmxlRGF0YS5jdXJyZW50VmFsdWUsXG4gICAgICApXG4gICAgICBpZiAod2FzQ2hhbmdlZCAmJiAhdGhpcy5zdWJzLmxlbmd0aCkge1xuICAgICAgICAvLyBmaXJzdCB0aW1lIHRoaXMgaXMgcnVuXG4gICAgICAgIGNvbnN0IGdyb3VwU2VsZWN0b3JTdWIgPSB0aGlzLmdyb3VwVmFsdWVTdWJzY3JpcHRpb25cbiAgICAgICAgY29uc3Qgcm93U2VsZWN0b3JTdWIgPSB0aGlzLnJvd1ZhbHVlU3Vic2NyaXB0aW9uXG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGdyb3VwU2VsZWN0b3JTdWIsIHJvd1NlbGVjdG9yU3ViKVxuICAgICAgfSBlbHNlIGlmICh3YXNDaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMucm93U2VsZWN0b3JzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHNvcnQgYW55IGluY29taW5nIGRhdGFcbiAgICBpZiAoXG4gICAgICB0aGlzLmFsbG93TG9jYWxTb3J0ICYmXG4gICAgICAoY2hhbmdlcy50YWJsZURhdGE/LmN1cnJlbnRWYWx1ZSB8fCBjaGFuZ2VzLnRhYmxlQ29sdW1ucz8uY3VycmVudFZhbHVlKVxuICAgICkge1xuICAgICAgY29uc3Qgb3JkZXJlZEJ5Q29sdW1uOiBUYWJsZUNvbHVtbjxUPiB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHRoaXMudGFibGVDb2x1bW5zPy5maW5kKChlbCkgPT4gZWwub3JkZXIgIT09IHVuZGVmaW5lZClcbiAgICAgIGlmIChvcmRlcmVkQnlDb2x1bW4pIHRoaXMuc29ydEl0ZW1zQnkob3JkZXJlZEJ5Q29sdW1uKVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdElkID0gc3RhdGljSW5pdElkKytcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAvLyBpZiBhbnkgY3VzdG9tIHRlbXBsYXRlcyB3ZXJlIGRlZmluZWQgaW4gdGhlIHRlbXBsYXRlXG4gICAgaWYgKHRoaXMuY3VzdG9tVGVtcGxhdGVzLmxlbmd0aCkge1xuICAgICAgLy8gZm9yIGVhY2ggdGVtcGxhdGUgZm91bmRcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzLm1hcCgodGFibGVUZW1wbGF0ZSkgPT4ge1xuICAgICAgICAvLyBpZiB0YXJnZXQgaXMgZWl0aGVyICd0ZCcgb3IgJ2JvdGgnXG4gICAgICAgIGlmIChcbiAgICAgICAgICBbJ3RkJywgJ2JvdGgnXS5pbmNsdWRlcyh0YWJsZVRlbXBsYXRlLnRhYmxlQ29sdW1uVGFyZ2V0IGFzIHN0cmluZylcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gYWRkIHRvIGN1c3RvbSByb3cgdGVtcGxhdGVzXG4gICAgICAgICAgdGhpcy5jdXN0b21Sb3dUZW1wbGF0ZXMuc2V0KFxuICAgICAgICAgICAgdGFibGVUZW1wbGF0ZS50YWJsZUNvbHVtbixcbiAgICAgICAgICAgIHRhYmxlVGVtcGxhdGUudGVtcGxhdGVSZWYsXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRhcmdldCBpcyBlaXRoZXIgJ3RoJyBvciAnYm90aCdcbiAgICAgICAgaWYgKFxuICAgICAgICAgIFsndGgnLCAnYm90aCddLmluY2x1ZGVzKHRhYmxlVGVtcGxhdGUudGFibGVDb2x1bW5UYXJnZXQgYXMgc3RyaW5nKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBhZGQgdG8gY3VzdG9tIGhlYWRlciB0ZW1wbGF0ZXNcbiAgICAgICAgICB0aGlzLmN1c3RvbUhlYWRlclRlbXBsYXRlcy5zZXQoXG4gICAgICAgICAgICB0YWJsZVRlbXBsYXRlLnRhYmxlQ29sdW1uLFxuICAgICAgICAgICAgdGFibGVUZW1wbGF0ZS50ZW1wbGF0ZVJlZixcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaWYgYXBwZW5kZWQgcm93cycgdGVtcGxhdGUgaXMgZGVmaW5lZCBpbiB0aGUgdGVtcGxhdGVcbiAgICBpZiAodGhpcy5hcHBlbmRlZFJvd3NUZW1wbGF0ZSkge1xuICAgICAgLy8gc2V0IHRlbXBsYXRlUmVmIG9mIGFwcGVuZGVkIHJvd3MnIHRlbXBsYXRlIHRvIHZhcmlhYmxlXG4gICAgICB0aGlzLmFwcGVuZGVkUm93c1RlbXBsYXRlUmVmID0gdGhpcy5hcHBlbmRlZFJvd3NUZW1wbGF0ZS50ZW1wbGF0ZVJlZlxuICAgIH1cblxuICAgIC8vIGlmIGN1c3RvbSBmb290ZXIgdGVtcGxhdGUgaXMgZGVmaW5lZCBpbiB0aGUgdGVtcGxhdGVcbiAgICBpZiAodGhpcy5jdXN0b21Gb290ZXJUZW1wbGF0ZSkge1xuICAgICAgLy8gc2V0IHRlbXBsYXRlUmVmIG9mIHRhYmxlIGZvb3RlciB0byB2YXJpYWJsZVxuICAgICAgdGhpcy5jdXN0b21Gb290ZXJUZW1wbGF0ZVJlZiA9IHRoaXMuY3VzdG9tRm9vdGVyVGVtcGxhdGUudGVtcGxhdGVSZWZcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnMuZm9yRWFjaCgoc3ViKSA9PiBzdWIudW5zdWJzY3JpYmUoKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogUmV0dXJucyBhIHN1YnNjcmlwdGlvbiB0byB0aGUgbWFzdGVyIHNlbGVjdG9yIGNvbnRyb2wgdGhhdCBlaXRoZXIgc2VsZWN0cyBvciBkZXNlbGVjdHMgYWxsIHJvdyBjb250cm9scy5cbiAgICovXG4gIGdldCBncm91cFZhbHVlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBTZWxlY3Rvci52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICh2YWx1ZTogYm9vbGVhbikgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RNYXAgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKHRoaXMucm93U2VsZWN0b3JzVmFsdWUpKVxuICAgICAgICBzZWxlY3RNYXAuZm9yRWFjaCgoXywga2V5KSA9PiBzZWxlY3RNYXAuc2V0KGtleSwgdmFsdWUpKVxuICAgICAgICBjb25zdCBwYXRjaFZhbHVlID0gb2JqZWN0RnJvbUVudHJpZXMoc2VsZWN0TWFwKVxuICAgICAgICB0aGlzLnJvd1NlbGVjdG9ycy5wYXRjaFZhbHVlKHBhdGNoVmFsdWUpXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFJldHVybnMgYSBzdWJzY3JpcHRpb24gdG8gYWxsIGluZGl2aWR1YWwgcm93IHNlbGVjdG9ycyBhbmQgdXBkYXRlIHRoZSBtYXN0ZXIgc2VsZWN0b3IgaWYgYWxsIGFyZSBzZWxlY3RlZC5cbiAgICovXG4gIGdldCByb3dWYWx1ZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdG9ycy52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMCksIC8vIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgZXZlbnRzIGFuZCB0byB3YWl0IGZvciBhbGwgc3ViIGNvbnRyb2xzIHRvIHVwZGF0ZVxuICAgICAgICBtYXAoKHZhbDogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pID0+IHtcbiAgICAgICAgICAvLyBnZXQgYSBmaWx0ZXJlZCBhcnJheSBvZiBrZXlzIGZvciBhbGwgcm93cyB0aGF0IGFyZSBzZWxlY3RlZFxuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gT2JqZWN0LmtleXModmFsKS5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHZhbFtrZXldID09PSB0cnVlICYmIHRoaXMucm93U2VsZWN0b3JzLmdldChrZXkpPy5lbmFibGVkXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIG9ubHkgdGhlIGZpbHRlcmVkIGtleXNcbiAgICAgICAgICByZXR1cm4gcGljayhzZWxlY3RlZCwgdmFsKVxuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAodmFsdWU6IG9iamVjdCkgPT4ge1xuICAgICAgICAgIC8vIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQga2V5cyBjb21wYXJlZCB0byB0aGUgdG90YWwgbnVtYmVyIG9mIGtleXMgYXZhaWxhYmxlXG4gICAgICAgICAgY29uc3QgbnVtYmVyT2ZTZWxlY3RlZCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGhcbiAgICAgICAgICBjb25zdCBhbGxTZWxlY3RlZDogYm9vbGVhbiA9XG4gICAgICAgICAgICBudW1iZXJPZlNlbGVjdGVkID4gMFxuICAgICAgICAgICAgICA/IG51bWJlck9mU2VsZWN0ZWQgPT09IE9iamVjdC5rZXlzKHRoaXMucm93U2VsZWN0b3JzVmFsdWUpLmxlbmd0aFxuICAgICAgICAgICAgICA6IGZhbHNlXG4gICAgICAgICAgLy8gdXBkYXRlIHRoZSBtYXN0ZXIgc2VsZWN0b3IgY29udHJvbFxuICAgICAgICAgIHRoaXMuZ3JvdXBTZWxlY3Rvci5zZXRWYWx1ZShhbGxTZWxlY3RlZCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pXG4gICAgICAgICAgLy8gdXBkYXRlIHRoZSBhcnJheSBvZiBjdXJyZW50bHkgc2VsZWN0ZWQgaWQnc1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBPYmplY3Qua2V5cyh2YWx1ZSlcbiAgICAgICAgICAvLyBhbmQgZW1pdCB0aGUgdXBkYXRlZCB2YWx1ZVxuICAgICAgICAgIHRoaXMubmd2Um93U2VsZWN0LmVtaXQodGhpcy5zZWxlY3RlZClcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIFJlZ2lzdGVycyBvciBkaXNhYmxlcyByb3cgY29udHJvbHMgZm9yIG5ldyBvciByZW1vdmVkIHJvd3MuXG4gICAqL1xuICByZWdpc3RlclNlbGVjdGFibGVSb3dzKHRhYmxlRGF0YTogYW55W10pOiBib29sZWFuIHtcbiAgICBpZiAoIXRhYmxlRGF0YSkgcmV0dXJuIGZhbHNlXG4gICAgLy8gQXJyYXkgY29udGFpbmluZyBvbmx5IHRoZSBpZCdzIGZvciBlYWNoIHJvd1xuICAgIGNvbnN0IGRhdGFSb3dJZHM6IHN0cmluZ1tdID0gdGFibGVEYXRhLm1hcCgoZGF0YTogYW55KSA9PiBkYXRhW3RoaXMucm93SWRdKVxuXG4gICAgLy8gQXJyYXkgY29udGFpbmluZyB0aGUgaWQncyB0aGF0IGhhdmUgcmVnaXN0ZXJlZCBjb250cm9sc1xuICAgIGNvbnN0IGN1cnJlbnRJZHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXModGhpcy5yb3dTZWxlY3RvcnNWYWx1ZSlcblxuICAgIC8vIEFycmF5IGNvbnRhaW5pbmcgYWxsIGlkcyB0aGF0IGxhY2tzIGEgY29ycmVzcG9uZGluZyBjb250cm9sIChpLmUuIG5ldyByb3dzKVxuICAgIGNvbnN0IG5ld0lkczogc3RyaW5nW10gPSBkYXRhUm93SWRzLmZpbHRlcihcbiAgICAgIChpZCkgPT4gY3VycmVudElkcy5pbmRleE9mKGlkKSA9PT0gLTEsXG4gICAgKVxuXG4gICAgLy8gQXJyYXkgY29udGFpbmluZyBhbGwgaWRzIHRoYXQgaGFzIGEgY29udHJvbCBidXQgaXMgbm8gbG9uZ2VyIGluIHRoZSBkYXRhIHNldCAoaS5lLiByZW1vdmVkIHJvd3MpXG4gICAgY29uc3QgcmVtb3ZlZElkczogc3RyaW5nW10gPSBjdXJyZW50SWRzLmZpbHRlcihcbiAgICAgIChpZCkgPT4gZGF0YVJvd0lkcy5pbmRleE9mKGlkKSA9PT0gLTEsXG4gICAgKVxuXG4gICAgLy8gUmVnaXN0ZXIgbmV3IGNvbnRyb2xzIGZvciBhZGRlZCByb3dzXG4gICAgaWYgKG5ld0lkcy5sZW5ndGgpIHtcbiAgICAgIG5ld0lkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICBjb25zdCBjdHJsID0gdGhpcy5yb3dTZWxlY3RvcnMucmVnaXN0ZXJDb250cm9sKFxuICAgICAgICAgIGlkLFxuICAgICAgICAgIG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woZmFsc2UpLFxuICAgICAgICApXG4gICAgICAgIGlmIChjdHJsLmRpc2FibGVkKSBjdHJsLmVuYWJsZSgpXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBhbHJlYWR5IHJlZ2lzdGVyZWQgY29udHJvbHMgdG8gZGlzYWJsZWQgZm9yIHJlbW92ZWQgcm93c1xuICAgIGlmIChyZW1vdmVkSWRzLmxlbmd0aClcbiAgICAgIHJlbW92ZWRJZHMuZm9yRWFjaCgoaWQpID0+IHRoaXMucm93U2VsZWN0b3JzLmdldChpZCk/LmRpc2FibGUoKSlcblxuICAgIHJldHVybiBuZXdJZHMubGVuZ3RoID4gMCB8fCByZW1vdmVkSWRzLmxlbmd0aCA+IDBcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogUmV0dXJucyBhbGwgZW5hYmxlZCB2YWx1ZXMgdW5sZXNzIGFsbCByb3dzIGFyZSBkaXNhYmxlZC5cbiAgICovXG4gIGdldCByb3dTZWxlY3RvcnNWYWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdG9ycy5lbmFibGVkID8gdGhpcy5yb3dTZWxlY3RvcnMudmFsdWUgOiB7fVxuICB9XG5cbiAgdG9nZ2xlU29ydE9yZGVyV2l0aFNwYWNlKGV2ZW50OiBhbnksIGNvbHVtbjogVGFibGVDb2x1bW48VD4pIHtcbiAgICBpZiAoY29sdW1uLnNvcnRhYmxlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB0aGlzLnRvZ2dsZVNvcnRPcmRlcihjb2x1bW4pXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBTd2l0Y2hlcyBzb3J0aW5nIG9yZGVyIGJldHdlZW4gYXNjZW5kaW5nIGFuZCBkZXNjZW5kaW5nIG9yZGVyIGZvciBhIGNvbHVtbi5cbiAgICogQHBhcmFtIGNvbHVtbiB0aGUgY29sdW1uIHRvIHNvcnQgcm93cyBhZnRlci5cbiAgICovXG4gIHRvZ2dsZVNvcnRPcmRlcihjb2x1bW46IFRhYmxlQ29sdW1uPFQ+KSB7XG4gICAgLy8gY2hlY2sgaWYgdGhlIHRhYmxlIGlzIGFscmVhZHkgc29ydGVkIGJ5IGFub3RoZXIgY29sdW1uIHRoYW4gdGhlIG9uZSBwcm92aWRlZFxuICAgIGNvbnN0IGN1cnJlbnRseU9yZGVyZWRCeSA9IHRoaXMudGFibGVDb2x1bW5zPy5maW5kKFxuICAgICAgKGVsKSA9PiBlbCAhPT0gY29sdW1uICYmIGVsLm9yZGVyICE9PSB1bmRlZmluZWQsXG4gICAgKVxuICAgIGlmIChjdXJyZW50bHlPcmRlcmVkQnkpIGRlbGV0ZSBjdXJyZW50bHlPcmRlcmVkQnkub3JkZXJcbiAgICBjb2x1bW4ub3JkZXIgPSBjb2x1bW4ub3JkZXIgPT09ICdkZXNjJyA/ICdhc2MnIDogJ2Rlc2MnXG4gICAgdGhpcy5zb3J0SXRlbXNCeShjb2x1bW4pXG4gIH1cblxuICAvKiogSWYgc29ydGFibGUsIHJlb3JkZXJzIHRoZSB0YWJsZSBkYXRhIHVzaW5nIHRoZSBzcGVjaWZpZWQgY29sdW1uIGFzIG9yZGVyaW5nIGF0dHJpYnV0ZS4gKi9cbiAgc29ydEl0ZW1zQnkoY29sdW1uOiBUYWJsZUNvbHVtbjxUPik6IFRhYmxlUm93W10gfCB1bmRlZmluZWQge1xuICAgIGlmICghY29sdW1uLnNvcnRhYmxlKSByZXR1cm5cbiAgICAvLyBlbWl0IHJlLW9yZGVyIGV2ZW50XG4gICAgdGhpcy5uZ3ZPcmRlckJ5LmVtaXQoeyBwcm9wZXJ0eTogY29sdW1uLnByb3BlcnR5LCBvcmRlcjogY29sdW1uLm9yZGVyIH0pXG4gICAgLy8gaWYgbG9jYWwgc29ydCBpcyBhbGxvd2VkLCByZW9yZGVyIGRhdGFcbiAgICBpZiAoIXRoaXMuYWxsb3dMb2NhbFNvcnQgfHwgIXRoaXMudGFibGVEYXRhKSByZXR1cm5cbiAgICByZXR1cm4gdGhpcy50YWJsZURhdGEuc29ydChcbiAgICAgIGNvbHVtbi5vcmRlciA9PT0gJ2Rlc2MnXG4gICAgICAgID8gb3JkZXJCeURlc2NlbmRpbmcoY29sdW1uLnByb3BlcnR5KVxuICAgICAgICA6IG9yZGVyQnlBc2NlbmRpbmcoY29sdW1uLnByb3BlcnR5KSxcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEVtaXRzIHJvdyBkYXRhIGZvciB3aGF0IHJvdyB3YXMgY2xpY2tlZCBpZiBkZWZhdWx0RW1pdCBpcyBhbGxvd2VkLlxuICAgKi9cbiAgcHJvcGFnYXRlSXRlbUNsaWNrKGl0ZW06IGFueSwgcHJldmVudERlZmF1bHRFbWl0PzogYm9vbGVhbikge1xuICAgIGlmICghcHJldmVudERlZmF1bHRFbWl0KSB0aGlzLm5ndlJvd0NsaWNrLmVtaXQoaXRlbSlcbiAgICBpZiAodGhpcy5leHBhbmRhYmxlKSB0aGlzLnRvZ2dsZVJvd1RvRXhwYW5kKGl0ZW1bdGhpcy5yb3dJZF0pXG4gIH1cblxuICBnZXRBcmlhTGFiZWwoY29sdW1uOiBUYWJsZUNvbHVtbjxUPik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc29ydE9yZGVyID1cbiAgICAgIGNvbHVtbi5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgPyB0aGlzLmFyaWFMYWJlbHNPcmRlckJ5Py5kZXNjXG4gICAgICAgIDogdGhpcy5hcmlhTGFiZWxzT3JkZXJCeT8uYXNjXG4gICAgaWYgKCFzb3J0T3JkZXIpIHJldHVybiAvLyBubyBhcmlhIGxhYmVscyBkZWZpbmVkXG4gICAgcmV0dXJuIGNvbHVtbi5hcmlhTGFiZWxTb3J0YWJsZT8ucmVwbGFjZSgne3tzb3J0T3JkZXJ9fScsIHNvcnRPcmRlcilcbiAgfVxuXG4gIHByaXZhdGUgdG9nZ2xlUm93VG9FeHBhbmQoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJvdyA9IHRoaXMucm93U2VsZWN0b3JzLmdldChpZClcbiAgICByb3c/LnNldFZhbHVlKCFyb3cudmFsdWUpXG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjc29ydGFibGVUaFRlbXBsYXRlIGxldC1jb2x1bW4+XG4gIDxidXR0b24gY2xhc3M9XCJzZy10YWJsZS1zb3J0XCIgKnRyYW5zbG9jbz1cImxldCB0XCI+XG4gICAgPG5nLXRlbXBsYXRlICN0aEJ1dHRvblRlbXBsYXRlPlxuICAgICAge3sgdChjb2x1bW4ubGFiZWwgPz8gJycpIH19XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBjdXN0b21IZWFkZXJUZW1wbGF0ZXMuZ2V0KGNvbHVtbi5wcm9wZXJ0eSkgYXMgdGhUZW1wbGF0ZTtcbiAgICAgICAgZWxzZSB0aEJ1dHRvblRlbXBsYXRlXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRoVGVtcGxhdGUgfHwgbnVsbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGNvbHVtbiB9XCJcbiAgICAgID5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub3RTb3J0YWJsZVRoVGVtcGxhdGUgbGV0LWNvbHVtbj5cbiAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGhUZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyICp0cmFuc2xvY289XCJsZXQgdFwiPlxuICAgICAge3sgdChjb2x1bW4ubGFiZWwgPz8gJycpIH19XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIlxuICAgICAgY3VzdG9tSGVhZGVyVGVtcGxhdGVzLmdldChjb2x1bW4ucHJvcGVydHkpIGFzIHRoVGVtcGxhdGU7XG4gICAgICBlbHNlIGRlZmF1bHRUaFRlbXBsYXRlXG4gICAgXCJcbiAgPlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aFRlbXBsYXRlIHx8IG51bGw7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBjb2x1bW4gfVwiXG4gICAgPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPHRhYmxlIGNsYXNzPVwiZ2RzLXRhYmxlXCIgKnRyYW5zbG9jbz1cImxldCB0XCI+XG4gIDwhLS0gVGFibGUgaGVhZGVyIC0tPlxuICA8dGhlYWQ+XG4gICAgPHRyPlxuICAgICAgPCEtLSBDaGVja2JveCBjb2x1bW4gZm9yIGhlYWRlciAtLT5cbiAgICAgIDx0aCAqbmdJZj1cInNlbGVjdGFibGVcIiBjbGFzcz1cImNvbHVtbl9fY2hlY2tcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdkcy1maWVsZC1jaGVja2JveC13cmFwXCI+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImdyb3VwU2VsZWN0b3JcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxDaGVja2JveFRoXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cIidjYl9oZWFkZXJfXycgKyBpbml0SWRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJ0aG9va1wiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8bGFiZWwgW2F0dHIuZm9yXT1cIidjYl9oZWFkZXJfXycgKyBpbml0SWRcIj48L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGg+XG5cbiAgICAgIDwhLS0gT3RoZXIgY29sdW1ucyAtLT5cbiAgICAgIDx0aFxuICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlQ29sdW1uc1wiXG4gICAgICAgIFtjb2x1bW5UeXBlXT1cImNvbHVtbi52YWx1ZVR5cGVcIlxuICAgICAgICBbc29ydGFibGVdPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgW3NvcnRPcmRlcl09XCJjb2x1bW4ub3JkZXJcIlxuICAgICAgICBbdGhvb2tdPVwiJ2NvbHVtbi1oZWFkZXItJyArICEhY29sdW1uLnByb3BlcnR5XCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnRPcmRlcihjb2x1bW4pXCJcbiAgICAgICAgKGtleWRvd24uc3BhY2UpPVwidG9nZ2xlU29ydE9yZGVyV2l0aFNwYWNlKCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZ2V0QXJpYUxhYmVsKGNvbHVtbilcIlxuICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiY29sdW1uLm9yZGVyICsgJ2VuZGluZydcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnNvcnRhYmxlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgc29ydGFibGVUaFRlbXBsYXRlO1xuICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29sdW1uLCBjb2x1bW46IGNvbHVtbiB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLnNvcnRhYmxlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgbm90U29ydGFibGVUaFRlbXBsYXRlO1xuICAgICAgICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogY29sdW1uLCBjb2x1bW46IGNvbHVtbiB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L3RoPlxuICAgIDwvdHI+XG4gIDwvdGhlYWQ+XG5cbiAgPCEtLSBUYWJsZSBib2R5IC0tPlxuICA8dGJvZHkgW2Zvcm1Hcm91cF09XCJyb3dTZWxlY3RvcnNcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHRhYmxlRGF0YTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPHRyXG4gICAgICAgIFtjbGFzcy5yb3dfX2V4cGFuZF09XCJleHBhbmRhYmxlXCJcbiAgICAgICAgW2F0dHIuZGF0YS10aG9va109XCJpdGVtIHwgdHJUaG9vazogaSA6IHRyVGhvb2tGblwiXG4gICAgICAgIFthdHRyLmRhdGEtaGFzcm93c3Bhbl09XCJoYXNSb3dTcGFuKGl0ZW0pXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBDaGVja2JveCBjb2x1bW4gZm9yIHJvdyAtLT5cbiAgICAgICAgPHRkICpuZ0lmPVwic2VsZWN0YWJsZVwiIGNsYXNzPVwiY29sdW1uX19jaGVja1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZHMtZmllbGQtY2hlY2tib3gtd3JhcFwiPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICpuZ0lmPVwicm93U2VsZWN0b3JzLmdldChpdGVtW3Jvd0lkXSlcIlxuICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW1bcm93SWRdXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxDaGVja2JveFRyXCJcbiAgICAgICAgICAgICAgW2F0dHIuaWRdPVwiJ2NiX3Jvd19fJyArIGluaXRJZCArICdfJyArIGlcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRob29rXT1cIidyb3ctc2VsZWN0LScgKyBpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgW2F0dHIuZm9yXT1cIidjYl9yb3dfXycgKyBpbml0SWQgKyAnXycgKyBpXCI+PC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90ZD5cblxuICAgICAgICA8IS0tIE90aGVyIGNvbHVtbnMgLS0+XG4gICAgICAgIDx0ZFxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdGFibGVDb2x1bW5zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBbY29sdW1uVHlwZV09XCJjb2x1bW4udmFsdWVUeXBlXCJcbiAgICAgICAgICBbdmFsdWVdPVwiaXRlbVtjb2x1bW4ucHJvcGVydHldXCJcbiAgICAgICAgICAoY2xpY2spPVwicHJvcGFnYXRlSXRlbUNsaWNrKGl0ZW0sIGNvbHVtbi5wcmV2ZW50RGVmYXVsdENsaWNrRXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJleHBhbmRhYmxlICYmIGkgPT09IDA7IGVsc2Ugbm9uRXhwYW5kYWJsZVRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ2RzLWl0ZW0tZmllbGQtd3JhcFwiPlxuICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hldnJvbi1maWVsZFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJyb3dTZWxlY3RvcnMuZ2V0KGl0ZW1bcm93SWRdKS52YWx1ZVwiPlxuICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnN1Ykl0ZW1zLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNMjAgOUwxMiAxN0w0IDlcIlxuICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMi42XCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtW2NvbHVtbi5wcm9wZXJ0eV0gfX0gKHt7IGl0ZW0uc3ViSXRlbXMubGVuZ3RoIH19KVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI25vbkV4cGFuZGFibGVUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21Sb3dUZW1wbGF0ZXMuZ2V0KGNvbHVtbi5wcm9wZXJ0eSkgYXMgdGRUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0VGRUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZFRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRkVGVtcGxhdGU+XG4gICAgICAgICAgICAgIHt7IGl0ZW1bY29sdW1uLnByb3BlcnR5XSB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RkPlxuICAgICAgPC90cj5cblxuICAgICAgPCEtLSBFeHBhbmRlZCBTdWIgSXRlbXMgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXhwYW5kYWJsZSAmJiByb3dTZWxlY3RvcnMuZ2V0KGl0ZW1bcm93SWRdKS52YWx1ZVwiPlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHN1Ykl0ZW0gb2YgaXRlbVtzdWJJdGVtc1Byb3BdXCI+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRhYmxlQ29sdW1uc1wiXG4gICAgICAgICAgICBbY29sdW1uVHlwZV09XCJjb2x1bW4udmFsdWVUeXBlXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzdWJJdGVtW2NvbHVtbi5wcm9wZXJ0eV1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJnZHMtc3ViLWl0ZW0tZmllbGQtd3JhcFwiPlxuICAgICAgICAgICAgICB7eyBzdWJJdGVtW2NvbHVtbi5wcm9wZXJ0eV0gfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPCEtLSBDdXN0b20gYXBwZW5kZWQgcm93cyAtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcHBlbmRlZFJvd3NUZW1wbGF0ZVJlZiBhcyB0clRlbXBsYXRlXCI+XG4gICAgICAgIDwhLS0gQ2Fubm90IGluZmVyIHRyVGVtcGxhdGUgYXMgVGVtcGxhdGVSZWYgdGhlcmVmb3JlIG51bGwgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRyVGVtcGxhdGUgfHwgbnVsbDsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC90Ym9keT5cblxuICA8IS0tIFRhYmxlIGZvb3RlciAtLT5cbiAgPHRmb290ICpuZ0lmPVwiY3VzdG9tRm9vdGVyVGVtcGxhdGVSZWYgYXMgdHJUZW1wbGF0ZVwiPlxuICAgIDwhLS0gQ2Fubm90IGluZmVyIHRyVGVtcGxhdGUgYXMgVGVtcGxhdGVSZWYgdGhlcmVmb3JlIG51bGwgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRyVGVtcGxhdGUgfHwgbnVsbFwiPiA8L25nLWNvbnRhaW5lcj5cbiAgPC90Zm9vdD5cbjwvdGFibGU+XG4iXX0=
@@ -0,0 +1,15 @@
1
+ import { __decorate } from "tslib";
2
+ import { CommonModule } from '@angular/common';
3
+ import { NgModule } from '@angular/core';
4
+ import { AccountNumberPipe } from './account-number.pipe';
5
+ let NggvAccountNumberPipeModule = class NggvAccountNumberPipeModule {
6
+ };
7
+ NggvAccountNumberPipeModule = __decorate([
8
+ NgModule({
9
+ declarations: [AccountNumberPipe],
10
+ imports: [CommonModule],
11
+ exports: [AccountNumberPipe],
12
+ })
13
+ ], NggvAccountNumberPipeModule);
14
+ export { NggvAccountNumberPipeModule };
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1udW1iZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyL3NyYy92LWFuZ3VsYXIvYWNjb3VudC1udW1iZXIvYWNjb3VudC1udW1iZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQU9sRCxJQUFNLDJCQUEyQixHQUFqQyxNQUFNLDJCQUEyQjtDQUFHLENBQUE7QUFBOUIsMkJBQTJCO0lBTHZDLFFBQVEsQ0FBQztRQUNSLFlBQVksRUFBRSxDQUFDLGlCQUFpQixDQUFDO1FBQ2pDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztRQUN2QixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztLQUM3QixDQUFDO0dBQ1csMkJBQTJCLENBQUciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbmltcG9ydCB7IEFjY291bnROdW1iZXJQaXBlIH0gZnJvbSAnLi9hY2NvdW50LW51bWJlci5waXBlJ1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtBY2NvdW50TnVtYmVyUGlwZV0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBleHBvcnRzOiBbQWNjb3VudE51bWJlclBpcGVdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ2d2QWNjb3VudE51bWJlclBpcGVNb2R1bGUge31cbiJdfQ==
@@ -0,0 +1,55 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ const evaluateValueSchema = (value) => {
4
+ const countryCodePattern = /^[a-zA-Z]{2}/;
5
+ const hasCountryCode = countryCodePattern.test(value);
6
+ return hasCountryCode ? "iban" /* SchemaType.IBAN */ : "bban" /* SchemaType.BBAN */;
7
+ };
8
+ export const bbanPattern = /(\d{4})(\d{2})(\d{3})/;
9
+ export const ibanPattern = /[a-zA-Z0-9]{1,4}/g;
10
+ /**
11
+ * Formats account number according to bban or iban standard, and adds non-breakable whitespace (\u00A0) between number groups.
12
+ *
13
+ * Example:
14
+ * BBAN format: 'XXXX XX XXX <XXXX>'
15
+ * IBAN format: 'SEXX XXXX XXXX XXXX <XXXX>'
16
+ *
17
+ * @param value - account number value to format.
18
+ * @param schema - accepts either 'iban' or 'bban'. If undefined, schema will be evaluated to 'iban' if value starts with 2 letters.
19
+ * @returns - formatted value, or original value if schema could not be determined
20
+ */
21
+ export const formatAccountNumber = (value, schema) => {
22
+ // evalue value schema to 'iban' or 'bban'
23
+ if (!schema)
24
+ schema = evaluateValueSchema(value);
25
+ // if schema 'iban', return formatted value
26
+ if (schema === "bban" /* SchemaType.BBAN */)
27
+ return value.replace(bbanPattern, '$1\u00A0$2\u00A0$3\u00A0');
28
+ // if schema 'iban', remove all white-spaces and other separators from the value
29
+ const trimmedValue = value.replace(/\s|-/g, '');
30
+ if (schema === "iban" /* SchemaType.IBAN */)
31
+ return trimmedValue.replace(ibanPattern, (match, offset) => offset ? `\u00A0${match}` : match);
32
+ // return untouched value if unable to determine schema
33
+ return value;
34
+ };
35
+ /**
36
+ * Pipe for formatting account number according to bban or iban standard, and adds non-breakable whitespace (\u00A0) between number groups.
37
+ *
38
+ * BBAN format: 'XXXX XX XXX <XXXX>'
39
+ * IBAN format: 'SEXX XXXX XXXX XXXX <XXXX>'
40
+ */
41
+ export class AccountNumberPipe {
42
+ constructor() {
43
+ this.transform = (value, schema) => formatAccountNumber(value, schema);
44
+ }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountNumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
46
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: AccountNumberPipe, isStandalone: true, name: "accountNumber" }); }
47
+ }
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AccountNumberPipe, decorators: [{
49
+ type: Pipe,
50
+ args: [{
51
+ name: 'accountNumber',
52
+ standalone: true,
53
+ }]
54
+ }] });
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3VudC1udW1iZXIucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci9zcmMvdi1hbmd1bGFyL2FjY291bnQtbnVtYmVyL2FjY291bnQtbnVtYmVyLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUE7O0FBU25ELE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxLQUFhLEVBQXVCLEVBQUU7SUFDakUsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUE7SUFDekMsTUFBTSxjQUFjLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3JELE9BQU8sY0FBYyxDQUFDLENBQUMsOEJBQWlCLENBQUMsNkJBQWdCLENBQUE7QUFDM0QsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFBO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQTtBQUU5Qzs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FDakMsS0FBYSxFQUNiLE1BQTRCLEVBQ3BCLEVBQUU7SUFDViwwQ0FBMEM7SUFDMUMsSUFBSSxDQUFDLE1BQU07UUFBRSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFaEQsMkNBQTJDO0lBQzNDLElBQUksTUFBTSxpQ0FBb0I7UUFDNUIsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSwwQkFBMEIsQ0FBQyxDQUFBO0lBRS9ELGdGQUFnRjtJQUNoRixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUMvQyxJQUFJLE1BQU0saUNBQW9CO1FBQzVCLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FDekUsTUFBTSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQ2xDLENBQUE7SUFFSCx1REFBdUQ7SUFDdkQsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDLENBQUE7QUFFRDs7Ozs7R0FLRztBQUtILE1BQU0sT0FBTyxpQkFBaUI7SUFKOUI7UUFLRSxjQUFTLEdBQUcsQ0FBQyxLQUFhLEVBQUUsTUFBNEIsRUFBVSxFQUFFLENBQ2xFLG1CQUFtQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtLQUNyQzsrR0FIWSxpQkFBaUI7NkdBQWpCLGlCQUFpQjs7NEZBQWpCLGlCQUFpQjtrQkFKN0IsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsZUFBZTtvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5cbmV4cG9ydCBjb25zdCBlbnVtIFNjaGVtYVR5cGUge1xuICBJQkFOID0gJ2liYW4nLFxuICBCQkFOID0gJ2JiYW4nLFxufVxuXG5leHBvcnQgdHlwZSBBY2NvdW50TnVtYmVyU2NoZW1hID0gJ2liYW4nIHwgJ2JiYW4nXG5cbmNvbnN0IGV2YWx1YXRlVmFsdWVTY2hlbWEgPSAodmFsdWU6IHN0cmluZyk6IEFjY291bnROdW1iZXJTY2hlbWEgPT4ge1xuICBjb25zdCBjb3VudHJ5Q29kZVBhdHRlcm4gPSAvXlthLXpBLVpdezJ9L1xuICBjb25zdCBoYXNDb3VudHJ5Q29kZSA9IGNvdW50cnlDb2RlUGF0dGVybi50ZXN0KHZhbHVlKVxuICByZXR1cm4gaGFzQ291bnRyeUNvZGUgPyBTY2hlbWFUeXBlLklCQU4gOiBTY2hlbWFUeXBlLkJCQU5cbn1cblxuZXhwb3J0IGNvbnN0IGJiYW5QYXR0ZXJuID0gLyhcXGR7NH0pKFxcZHsyfSkoXFxkezN9KS9cbmV4cG9ydCBjb25zdCBpYmFuUGF0dGVybiA9IC9bYS16QS1aMC05XXsxLDR9L2dcblxuLyoqXG4gKiBGb3JtYXRzIGFjY291bnQgbnVtYmVyIGFjY29yZGluZyB0byBiYmFuIG9yIGliYW4gc3RhbmRhcmQsIGFuZCBhZGRzIG5vbi1icmVha2FibGUgd2hpdGVzcGFjZSAoXFx1MDBBMCkgYmV0d2VlbiBudW1iZXIgZ3JvdXBzLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBCQkFOIGZvcm1hdDogJ1hYWFggWFggWFhYIDxYWFhYPidcbiAqIElCQU4gZm9ybWF0OiAnU0VYWCBYWFhYIFhYWFggWFhYWCA8WFhYWD4nXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gYWNjb3VudCBudW1iZXIgdmFsdWUgdG8gZm9ybWF0LlxuICogQHBhcmFtIHNjaGVtYSAtIGFjY2VwdHMgZWl0aGVyICdpYmFuJyBvciAnYmJhbicuIElmIHVuZGVmaW5lZCwgc2NoZW1hIHdpbGwgYmUgZXZhbHVhdGVkIHRvICdpYmFuJyBpZiB2YWx1ZSBzdGFydHMgd2l0aCAyIGxldHRlcnMuXG4gKiBAcmV0dXJucyAtIGZvcm1hdHRlZCB2YWx1ZSwgb3Igb3JpZ2luYWwgdmFsdWUgaWYgc2NoZW1hIGNvdWxkIG5vdCBiZSBkZXRlcm1pbmVkXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRBY2NvdW50TnVtYmVyID0gKFxuICB2YWx1ZTogc3RyaW5nLFxuICBzY2hlbWE/OiBBY2NvdW50TnVtYmVyU2NoZW1hLFxuKTogc3RyaW5nID0+IHtcbiAgLy8gZXZhbHVlIHZhbHVlIHNjaGVtYSB0byAnaWJhbicgb3IgJ2JiYW4nXG4gIGlmICghc2NoZW1hKSBzY2hlbWEgPSBldmFsdWF0ZVZhbHVlU2NoZW1hKHZhbHVlKVxuXG4gIC8vIGlmIHNjaGVtYSAnaWJhbicsIHJldHVybiBmb3JtYXR0ZWQgdmFsdWVcbiAgaWYgKHNjaGVtYSA9PT0gU2NoZW1hVHlwZS5CQkFOKVxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGJiYW5QYXR0ZXJuLCAnJDFcXHUwMEEwJDJcXHUwMEEwJDNcXHUwMEEwJylcblxuICAvLyBpZiBzY2hlbWEgJ2liYW4nLCByZW1vdmUgYWxsIHdoaXRlLXNwYWNlcyBhbmQgb3RoZXIgc2VwYXJhdG9ycyBmcm9tIHRoZSB2YWx1ZVxuICBjb25zdCB0cmltbWVkVmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9cXHN8LS9nLCAnJylcbiAgaWYgKHNjaGVtYSA9PT0gU2NoZW1hVHlwZS5JQkFOKVxuICAgIHJldHVybiB0cmltbWVkVmFsdWUucmVwbGFjZShpYmFuUGF0dGVybiwgKG1hdGNoOiBzdHJpbmcsIG9mZnNldDogbnVtYmVyKSA9PlxuICAgICAgb2Zmc2V0ID8gYFxcdTAwQTAke21hdGNofWAgOiBtYXRjaCxcbiAgICApXG5cbiAgLy8gcmV0dXJuIHVudG91Y2hlZCB2YWx1ZSBpZiB1bmFibGUgdG8gZGV0ZXJtaW5lIHNjaGVtYVxuICByZXR1cm4gdmFsdWVcbn1cblxuLyoqXG4gKiBQaXBlIGZvciBmb3JtYXR0aW5nIGFjY291bnQgbnVtYmVyIGFjY29yZGluZyB0byBiYmFuIG9yIGliYW4gc3RhbmRhcmQsIGFuZCBhZGRzIG5vbi1icmVha2FibGUgd2hpdGVzcGFjZSAoXFx1MDBBMCkgYmV0d2VlbiBudW1iZXIgZ3JvdXBzLlxuICpcbiAqIEJCQU4gZm9ybWF0OiAnWFhYWCBYWCBYWFggPFhYWFg+J1xuICogSUJBTiBmb3JtYXQ6ICdTRVhYIFhYWFggWFhYWCBYWFhYIDxYWFhYPidcbiAqL1xuQFBpcGUoe1xuICBuYW1lOiAnYWNjb3VudE51bWJlcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIEFjY291bnROdW1iZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybSA9ICh2YWx1ZTogc3RyaW5nLCBzY2hlbWE/OiBBY2NvdW50TnVtYmVyU2NoZW1hKTogc3RyaW5nID0+XG4gICAgZm9ybWF0QWNjb3VudE51bWJlcih2YWx1ZSwgc2NoZW1hKVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export * from './account-number.pipe';
2
+ export * from './account-number.module';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9hY2NvdW50LW51bWJlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHVCQUF1QixDQUFBO0FBQ3JDLGNBQWMseUJBQXlCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FjY291bnQtbnVtYmVyLnBpcGUnXG5leHBvcnQgKiBmcm9tICcuL2FjY291bnQtbnVtYmVyLm1vZHVsZSdcbiJdfQ==
@@ -1,3 +1,4 @@
1
+ export * from './account-number';
1
2
  export * from './alert';
2
3
  export * from './base-control-value-accessor';
3
4
  export * from './breadcrumbs';
@@ -24,4 +25,4 @@ export * from './textarea';
24
25
  export * from './toast';
25
26
  export * from './tooltip';
26
27
  export * from './v-angular.module';
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQTtBQUN2QixjQUFjLCtCQUErQixDQUFBO0FBQzdDLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsVUFBVSxDQUFBO0FBQ3hCLGNBQWMsUUFBUSxDQUFBO0FBQ3RCLGNBQWMsdUJBQXVCLENBQUE7QUFDckMsY0FBYyxZQUFZLENBQUE7QUFDMUIsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxhQUFhLENBQUE7QUFDM0IsY0FBYyxZQUFZLENBQUE7QUFDMUIsY0FBYywwQkFBMEIsQ0FBQTtBQUN4QyxjQUFjLGlCQUFpQixDQUFBO0FBQy9CLGNBQWMsUUFBUSxDQUFBO0FBQ3RCLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsUUFBUSxDQUFBO0FBQ3RCLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsUUFBUSxDQUFBO0FBQ3RCLGNBQWMsWUFBWSxDQUFBO0FBQzFCLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsV0FBVyxDQUFBO0FBQ3pCLGNBQWMsb0JBQW9CLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FsZXJ0J1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InXG5leHBvcnQgKiBmcm9tICcuL2JyZWFkY3J1bWJzJ1xuZXhwb3J0ICogZnJvbSAnLi9idXR0b24nXG5leHBvcnQgKiBmcm9tICcuL2NhcmQnXG5leHBvcnQgKiBmcm9tICcuL2NoYXJhY3Rlci1jb3VudGRvd24nXG5leHBvcnQgKiBmcm9tICcuL2NoZWNrYm94J1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlcGlja2VyJ1xuZXhwb3J0ICogZnJvbSAnLi9kcmFnLWRyb3AnXG5leHBvcnQgKiBmcm9tICcuL2Ryb3Bkb3duJ1xuZXhwb3J0ICogZnJvbSAnLi9kcm9wZG93bi9kcm9wZG93bi1saXN0J1xuZXhwb3J0ICogZnJvbSAnLi9leHRlcm5hbC1saW5rJ1xuZXhwb3J0ICogZnJvbSAnLi9pMThuJ1xuZXhwb3J0ICogZnJvbSAnLi9pbmZvLWNpcmNsZSdcbmV4cG9ydCAqIGZyb20gJy4vaW5wdXQnXG5leHBvcnQgKiBmcm9tICcuL2lucHV0LW1hc2snXG5leHBvcnQgKiBmcm9tICcuL21vZGFsJ1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmF0aW9uJ1xuZXhwb3J0ICogZnJvbSAnLi9yYWRpbydcbmV4cG9ydCAqIGZyb20gJy4vc2x1ZydcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUnXG5leHBvcnQgKiBmcm9tICcuL3RhYnMnXG5leHBvcnQgKiBmcm9tICcuL3RleHRhcmVhJ1xuZXhwb3J0ICogZnJvbSAnLi90b2FzdCdcbmV4cG9ydCAqIGZyb20gJy4vdG9vbHRpcCdcbmV4cG9ydCAqIGZyb20gJy4vdi1hbmd1bGFyLm1vZHVsZSdcbiJdfQ==
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXIvc3JjL3YtYW5ndWxhci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFBO0FBQ2hDLGNBQWMsU0FBUyxDQUFBO0FBQ3ZCLGNBQWMsK0JBQStCLENBQUE7QUFDN0MsY0FBYyxlQUFlLENBQUE7QUFDN0IsY0FBYyxVQUFVLENBQUE7QUFDeEIsY0FBYyxRQUFRLENBQUE7QUFDdEIsY0FBYyx1QkFBdUIsQ0FBQTtBQUNyQyxjQUFjLFlBQVksQ0FBQTtBQUMxQixjQUFjLGNBQWMsQ0FBQTtBQUM1QixjQUFjLGFBQWEsQ0FBQTtBQUMzQixjQUFjLFlBQVksQ0FBQTtBQUMxQixjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxRQUFRLENBQUE7QUFDdEIsY0FBYyxlQUFlLENBQUE7QUFDN0IsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxRQUFRLENBQUE7QUFDdEIsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxRQUFRLENBQUE7QUFDdEIsY0FBYyxZQUFZLENBQUE7QUFDMUIsY0FBYyxTQUFTLENBQUE7QUFDdkIsY0FBYyxXQUFXLENBQUE7QUFDekIsY0FBYyxvQkFBb0IsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWNjb3VudC1udW1iZXInXG5leHBvcnQgKiBmcm9tICcuL2FsZXJ0J1xuZXhwb3J0ICogZnJvbSAnLi9iYXNlLWNvbnRyb2wtdmFsdWUtYWNjZXNzb3InXG5leHBvcnQgKiBmcm9tICcuL2JyZWFkY3J1bWJzJ1xuZXhwb3J0ICogZnJvbSAnLi9idXR0b24nXG5leHBvcnQgKiBmcm9tICcuL2NhcmQnXG5leHBvcnQgKiBmcm9tICcuL2NoYXJhY3Rlci1jb3VudGRvd24nXG5leHBvcnQgKiBmcm9tICcuL2NoZWNrYm94J1xuZXhwb3J0ICogZnJvbSAnLi9kYXRlcGlja2VyJ1xuZXhwb3J0ICogZnJvbSAnLi9kcmFnLWRyb3AnXG5leHBvcnQgKiBmcm9tICcuL2Ryb3Bkb3duJ1xuZXhwb3J0ICogZnJvbSAnLi9kcm9wZG93bi9kcm9wZG93bi1saXN0J1xuZXhwb3J0ICogZnJvbSAnLi9leHRlcm5hbC1saW5rJ1xuZXhwb3J0ICogZnJvbSAnLi9pMThuJ1xuZXhwb3J0ICogZnJvbSAnLi9pbmZvLWNpcmNsZSdcbmV4cG9ydCAqIGZyb20gJy4vaW5wdXQnXG5leHBvcnQgKiBmcm9tICcuL2lucHV0LW1hc2snXG5leHBvcnQgKiBmcm9tICcuL21vZGFsJ1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmF0aW9uJ1xuZXhwb3J0ICogZnJvbSAnLi9yYWRpbydcbmV4cG9ydCAqIGZyb20gJy4vc2x1ZydcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUnXG5leHBvcnQgKiBmcm9tICcuL3RhYnMnXG5leHBvcnQgKiBmcm9tICcuL3RleHRhcmVhJ1xuZXhwb3J0ICogZnJvbSAnLi90b2FzdCdcbmV4cG9ydCAqIGZyb20gJy4vdG9vbHRpcCdcbmV4cG9ydCAqIGZyb20gJy4vdi1hbmd1bGFyLm1vZHVsZSdcbiJdfQ==