@nova-design-system/nova-angular-18 3.22.0 → 3.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -53,6 +53,12 @@ export class NvDatatable {
53
53
  this.columns = input([]);
54
54
  /** Row data */
55
55
  this.rows = input([]);
56
+ /**
57
+ * Data handling mode for sorting and filtering operations.
58
+ * - 'client': All operations handled in browser (default)
59
+ * - 'server': Operations trigger callbacks for server-side handling
60
+ */
61
+ this.mode = input('client');
56
62
  /** Optional pagination configuration */
57
63
  this.pagination = input(undefined);
58
64
  /** Optional sorting configuration */
@@ -81,7 +87,7 @@ export class NvDatatable {
81
87
  /** Intersection observer for infinite scroll */
82
88
  this.observer = null;
83
89
  /** Helper to check if using infinite scroll */
84
- this.isInfiniteScroll = computed(() => this.pagination()?.mode === 'infinite');
90
+ this.isInfiniteScroll = computed(() => this.pagination()?.infinite === true);
85
91
  /** Computed table columns with proper typing and filtering. */
86
92
  this.tableColumns = computed(() => {
87
93
  const templateMap = this.cellTemplateMap();
@@ -144,21 +150,24 @@ export class NvDatatable {
144
150
  this.tableInstance = createAngularTable(() => {
145
151
  const paginationConfig = this.pagination();
146
152
  const sortingConfig = this.sorting();
153
+ const componentMode = this.mode();
154
+ const isServerMode = componentMode === 'server';
155
+ const isInfinite = paginationConfig?.infinite === true;
147
156
  // Determine base table configuration with sorting
148
157
  const getBaseTableConfig = () => {
149
158
  const baseConfig = {
150
159
  data: this.rows(),
151
160
  columns: this.tableColumns(),
152
161
  getCoreRowModel: getCoreRowModel(),
153
- // Sorting configuration
162
+ // Sorting configuration - uses top-level mode
154
163
  ...(sortingConfig && {
155
164
  state: {
156
- sorting: sortingConfig.mode === 'server' && sortingConfig.sortState
165
+ sorting: isServerMode && sortingConfig.sortState
157
166
  ? sortingConfig.sortState
158
167
  : this.sortingState(),
159
168
  },
160
169
  onSortingChange: (updaterOrValue) => {
161
- const currentSort = sortingConfig.mode === 'server' && sortingConfig.sortState
170
+ const currentSort = isServerMode && sortingConfig.sortState
162
171
  ? sortingConfig.sortState
163
172
  : this.sortingState();
164
173
  const newSort = typeof updaterOrValue === 'function'
@@ -167,12 +176,11 @@ export class NvDatatable {
167
176
  // Always update internal state for reactivity
168
177
  this.sortingState.set(newSort);
169
178
  // For server-side sorting, also call the callback
170
- if (sortingConfig?.mode === 'server' &&
171
- sortingConfig.onSortingChange) {
179
+ if (isServerMode && sortingConfig.onSortingChange) {
172
180
  sortingConfig.onSortingChange(newSort);
173
181
  }
174
182
  },
175
- manualSorting: sortingConfig.mode === 'server',
183
+ manualSorting: isServerMode,
176
184
  enableSorting: true,
177
185
  enableMultiSort: sortingConfig.enableMultiSort ?? false,
178
186
  enableSortingRemoval: sortingConfig.enableSortingRemoval ?? true,
@@ -182,17 +190,22 @@ export class NvDatatable {
182
190
  isMultiSortEvent: sortingConfig.enableMultiSort
183
191
  ? () => true
184
192
  : undefined,
185
- getSortedRowModel: sortingConfig.mode === 'client' ? getSortedRowModel() : undefined,
193
+ getSortedRowModel: !isServerMode ? getSortedRowModel() : undefined,
186
194
  }),
187
195
  };
188
196
  return baseConfig;
189
197
  };
190
- if (!paginationConfig || paginationConfig.mode === 'infinite') {
191
- // No pagination or infinite scroll - simple config
198
+ // Infinite scroll mode (requires server mode)
199
+ if (isInfinite) {
200
+ // No pagination row model for infinite scroll - simple config
192
201
  return getBaseTableConfig();
193
202
  }
194
- else if (paginationConfig.mode === 'client') {
195
- // Client-side pagination
203
+ // No pagination configured
204
+ if (!paginationConfig) {
205
+ return getBaseTableConfig();
206
+ }
207
+ // Client-side pagination
208
+ if (!isServerMode) {
196
209
  return {
197
210
  ...getBaseTableConfig(),
198
211
  getPaginationRowModel: getPaginationRowModel(),
@@ -204,37 +217,35 @@ export class NvDatatable {
204
217
  },
205
218
  };
206
219
  }
207
- else {
208
- // Server-side pagination - manual pagination with reactive state
209
- const baseConfig = getBaseTableConfig();
210
- const pageSize = this.paginationState().pageSize;
211
- return {
212
- ...baseConfig,
213
- manualPagination: true,
214
- pageCount: paginationConfig.totalPageCount !== undefined
215
- ? paginationConfig.totalPageCount
216
- : paginationConfig.totalRowCount !== undefined
217
- ? Math.ceil(paginationConfig.totalRowCount / pageSize)
218
- : -1,
219
- state: {
220
- pagination: this.paginationState(),
221
- ...(baseConfig.state && { sorting: baseConfig.state.sorting }),
222
- },
223
- onPaginationChange: (updaterOrValue) => {
224
- const newState = typeof updaterOrValue === 'function'
225
- ? updaterOrValue(this.paginationState())
226
- : updaterOrValue;
227
- this.paginationState.set(newState);
228
- // Call user's callback for server-side pagination
229
- if (paginationConfig.onPaginationChange) {
230
- paginationConfig.onPaginationChange({
231
- pageIndex: newState.pageIndex,
232
- pageSize: newState.pageSize,
233
- });
234
- }
235
- },
236
- };
237
- }
220
+ // Server-side pagination - manual pagination with reactive state
221
+ const baseConfig = getBaseTableConfig();
222
+ const pageSize = this.paginationState().pageSize;
223
+ return {
224
+ ...baseConfig,
225
+ manualPagination: true,
226
+ pageCount: paginationConfig.totalPageCount !== undefined
227
+ ? paginationConfig.totalPageCount
228
+ : paginationConfig.totalRowCount !== undefined
229
+ ? Math.ceil(paginationConfig.totalRowCount / pageSize)
230
+ : -1,
231
+ state: {
232
+ pagination: this.paginationState(),
233
+ ...(baseConfig.state && { sorting: baseConfig.state.sorting }),
234
+ },
235
+ onPaginationChange: (updaterOrValue) => {
236
+ const newState = typeof updaterOrValue === 'function'
237
+ ? updaterOrValue(this.paginationState())
238
+ : updaterOrValue;
239
+ this.paginationState.set(newState);
240
+ // Call user's callback for server-side pagination
241
+ if (paginationConfig.onPaginationChange) {
242
+ paginationConfig.onPaginationChange({
243
+ pageIndex: newState.pageIndex,
244
+ pageSize: newState.pageSize,
245
+ });
246
+ }
247
+ },
248
+ };
238
249
  });
239
250
  /** Build pagination API for template */
240
251
  this.paginationAPI = computed(() => {
@@ -242,10 +253,13 @@ export class NvDatatable {
242
253
  if (!paginationConfig) {
243
254
  return null;
244
255
  }
256
+ const componentMode = this.mode();
257
+ const isServerMode = componentMode === 'server';
258
+ const isInfinite = paginationConfig.infinite === true;
245
259
  const table = this.table();
246
260
  const tablePaginationState = table.getState().pagination;
247
261
  const pageCount = table.getPageCount();
248
- const rowCount = paginationConfig.mode === 'server'
262
+ const rowCount = isServerMode
249
263
  ? paginationConfig.totalRowCount || this.rows().length
250
264
  : this.rows().length;
251
265
  return {
@@ -261,25 +275,31 @@ export class NvDatatable {
261
275
  setPageSize: (size) => table.setPageSize(size),
262
276
  canPreviousPage: table.getCanPreviousPage(),
263
277
  canNextPage: table.getCanNextPage(),
264
- isLoading: paginationConfig.mode === 'infinite'
265
- ? paginationConfig.isLoading
266
- : undefined,
267
- hasMore: paginationConfig.mode === 'infinite'
268
- ? paginationConfig.hasMore
269
- : undefined,
278
+ isLoading: isInfinite ? paginationConfig.isLoading : undefined,
279
+ hasMore: isInfinite ? paginationConfig.hasMore : undefined,
270
280
  };
271
281
  });
282
+ // Validate infinite scroll requires server mode
283
+ effect(() => {
284
+ const paginationConfig = this.pagination();
285
+ const componentMode = this.mode();
286
+ if (paginationConfig?.infinite === true && componentMode !== 'server') {
287
+ console.warn('[NvDatatable] pagination.infinite=true requires mode="server". ' +
288
+ 'Infinite scroll relies on server-side data loading.');
289
+ }
290
+ });
272
291
  // Set up intersection observer for infinite scroll
273
292
  effect(() => {
274
293
  const paginationConfig = this.pagination();
275
294
  const rows = this.rows(); // Track rows changes
295
+ const isInfinite = paginationConfig?.infinite === true;
276
296
  // Clean up existing observer
277
297
  if (this.observer) {
278
298
  this.observer.disconnect();
279
299
  this.observer = null;
280
300
  }
281
301
  // Only set up observer for infinite scroll mode
282
- if (paginationConfig?.mode !== 'infinite' || rows.length === 0) {
302
+ if (!isInfinite || rows.length === 0) {
283
303
  return;
284
304
  }
285
305
  // Use setTimeout to ensure DOM is updated
@@ -294,7 +314,6 @@ export class NvDatatable {
294
314
  this.observer = new IntersectionObserver((entries) => {
295
315
  const entry = entries[0];
296
316
  if (entry.isIntersecting &&
297
- paginationConfig.mode === 'infinite' &&
298
317
  paginationConfig.hasMore &&
299
318
  !paginationConfig.isLoading &&
300
319
  paginationConfig.onLoadMore) {
@@ -327,7 +346,7 @@ export class NvDatatable {
327
346
  }
328
347
  }
329
348
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NvDatatable, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
330
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: NvDatatable, isStandalone: true, selector: "nv-datatable", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: false, transformFunction: null }, sorting: { classPropertyName: "sorting", publicName: "sorting", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "paginationTemplate", first: true, predicate: ["paginationTemplate"], descendants: true, read: TemplateRef }, { propertyName: "cellTemplates", predicate: NvDatatableCellDirective }], viewQueries: [{ propertyName: "tableRows", first: true, predicate: ["tableRow"], descendants: true, isSignal: true }], ngImport: i0, template: `
349
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: NvDatatable, isStandalone: true, selector: "nv-datatable", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, rows: { classPropertyName: "rows", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, pagination: { classPropertyName: "pagination", publicName: "pagination", isSignal: true, isRequired: false, transformFunction: null }, sorting: { classPropertyName: "sorting", publicName: "sorting", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "paginationTemplate", first: true, predicate: ["paginationTemplate"], descendants: true, read: TemplateRef }, { propertyName: "cellTemplates", predicate: NvDatatableCellDirective }], viewQueries: [{ propertyName: "tableRows", first: true, predicate: ["tableRow"], descendants: true, isSignal: true }], ngImport: i0, template: `
331
350
  <nv-table>
332
351
  <table>
333
352
  <thead [attr.data-sticky-top]="stickyHeader() ? 'true' : null">
@@ -527,4 +546,4 @@ export function makeColumn() {
527
546
  };
528
547
  }
529
548
  export { flexRenderComponent as nvDatatableRenderComponent } from './datatable.utils';
530
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbnYtZGF0YXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsMENBQTBDO0FBQzFDLHdDQUF3QztBQUV4QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osZUFBZSxFQUVmLE1BQU0sRUFDTixNQUFNLEVBRU4sU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsd0JBQXdCLEdBRXpCLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsZ0hBQWdIO0FBQ2hILE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBT3BCLE1BQU0sbUJBQW1CLENBQUM7OztBQUUzQjs7O0dBR0c7QUFzRkgsTUFBTSxPQUFPLFdBQVc7SUFrUHRCLHdDQUF3QztJQUN4QyxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwwQkFBMEIsQ0FDeEIsS0FBMkMsRUFDM0MsTUFLQztRQUVELHlEQUF5RDtRQUN6RCxJQUFJLFNBQWtDLENBQUM7UUFFdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixTQUFTLEdBQUcsS0FBZ0MsQ0FBQztRQUMvQyxDQUFDO2FBQU0sSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqRSxT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c2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLWpzZG9jICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc2RvYy9yZXF1aXJlLXJldHVybnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtcGFyYW0gKi9cblxuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5wdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgUXVlcnlMaXN0LFxuICBlZmZlY3QsXG4gIHNpZ25hbCxcbiAgRWxlbWVudFJlZixcbiAgdmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIE52RGF0YXRhYmxlQ2VsbERpcmVjdGl2ZSxcbiAgdHlwZSBOdkRhdGF0YWJsZUNlbGxDb250ZXh0LFxufSBmcm9tICcuL252LWRhdGF0YWJsZS1jZWxsLmRpcmVjdGl2ZSc7XG5cbi8vIGxvY2FsIGNvcHkgb2YgQHRhbnN0YWNrL2FuZ3VsYXItdGFibGUgKHJlcXVpcmVkIGZvciBtdWx0aSBhbmd1bGFyIHZlcnNpb25zLCB0aGUgYnVpbHQgdmVyc2lvbiBpcyBub3Qgd29ya2luZylcbmltcG9ydCB7XG4gIGNyZWF0ZUFuZ3VsYXJUYWJsZSxcbiAgZ2V0Q29yZVJvd01vZGVsLFxuICBnZXRQYWdpbmF0aW9uUm93TW9kZWwsXG4gIGdldFNvcnRlZFJvd01vZGVsLFxuICBGbGV4UmVuZGVyRGlyZWN0aXZlLFxuICB0eXBlIEZsZXhSZW5kZXJDb21wb25lbnQsXG4gIHR5cGUgQ29sdW1uRGVmLFxuICB0eXBlIENlbGxDb250ZXh0LFxuICB0eXBlIFBhZ2luYXRpb25TdGF0ZSxcbiAgdHlwZSBTb3J0aW5nU3RhdGUsXG4gIHR5cGUgTm9JbmZlcixcbn0gZnJvbSAnLi9kYXRhdGFibGUudXRpbHMnO1xuXG4vKipcbiAqIEEgcG93ZXJmdWwsIGZsZXhpYmxlIGRhdGF0YWJsZSBjb21wb25lbnQgYnVpbHQgb24gVGFuU3RhY2sgVGFibGUuXG4gKiBTdXBwb3J0cyBjdXN0b20gY2VsbCByZW5kZXJpbmcsIGNvbHVtbiBjb25maWd1cmF0aW9uLCBwYWdpbmF0aW9uLCBhbmQgZnVsbCBUeXBlU2NyaXB0IHR5cGluZy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnYtZGF0YXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRmxleFJlbmRlckRpcmVjdGl2ZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bnYtdGFibGU+XG4gICAgICA8dGFibGU+XG4gICAgICAgIDx0aGVhZCBbYXR0ci5kYXRhLXN0aWNreS10b3BdPVwic3RpY2t5SGVhZGVyKCkgPyAndHJ1ZScgOiBudWxsXCI+XG4gICAgICAgICAgQGZvciAoaGVhZGVyR3JvdXAgb2YgdGFibGUoKS5nZXRIZWFkZXJHcm91cHMoKTsgdHJhY2sgaGVhZGVyR3JvdXAuaWQpXG4gICAgICAgICAge1xuICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgIEBmb3IgKGhlYWRlciBvZiBoZWFkZXJHcm91cC5oZWFkZXJzOyB0cmFjayBoZWFkZXIuaWQpIHtcbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGF0YXRhYmxlLWhlYWRlci0nICsgaGVhZGVyLmlkXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIlxuICAgICAgICAgICAgICAgIGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLnNpemVcbiAgICAgICAgICAgICAgICAgID8gaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuc2l6ZSArICdweCdcbiAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICBbYXR0ci5kYXRhLW5vLXJlc2l6ZV09XCJcbiAgICAgICAgICAgICAgICAhaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuZW5hYmxlUmVzaXppbmcgPyAndHJ1ZScgOiBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIEBpZiAoIWhlYWRlci5pc1BsYWNlaG9sZGVyKSB7IEBpZiAoaGVhZGVyLmNvbHVtbi5nZXRDYW5Tb3J0KCkpIHtcbiAgICAgICAgICAgICAgPG52LXRhYmxlaGVhZGVyXG4gICAgICAgICAgICAgICAgW3NvcnRhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzb3J0RGlyZWN0aW9uXT1cImhlYWRlci5jb2x1bW4uZ2V0SXNTb3J0ZWQoKSB8fCAnbm9uZSdcIlxuICAgICAgICAgICAgICAgIChzb3J0RGlyZWN0aW9uQ2hhbmdlZCk9XCJcbiAgICAgICAgICAgICAgICAgIGhhbmRsZVNvcnREaXJlY3Rpb25DaGFuZ2VkKCRldmVudCwgaGVhZGVyKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBoZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5oZWFkZXIgfX1cbiAgICAgICAgICAgICAgPC9udi10YWJsZWhlYWRlcj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIHt7IGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLmhlYWRlciB9fVxuICAgICAgICAgICAgICB9IH1cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGhlYWQ+XG5cbiAgICAgICAgPHRib2R5PlxuICAgICAgICAgIEBmb3IgKHJvdyBvZiB0YWJsZSgpLmdldFJvd01vZGVsKCkucm93czsgdHJhY2sgcm93LmlkOyBsZXQgaSA9ICRpbmRleClcbiAgICAgICAgICB7XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInZGF0YXRhYmxlLXJvdy0nICsgaVwiXG4gICAgICAgICAgICAjdGFibGVSb3dcbiAgICAgICAgICAgIFthdHRyLmRhdGEtaXMtbGFzdF09XCJcbiAgICAgICAgICAgICAgaXNJbmZpbml0ZVNjcm9sbCgpICYmIGkgPT09IHRhYmxlKCkuZ2V0Um93TW9kZWwoKS5yb3dzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICA/ICd0cnVlJ1xuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBAZm9yIChjZWxsIG9mIHJvdy5nZXRWaXNpYmxlQ2VsbHMoKTsgdHJhY2sgY2VsbC5pZCkge1xuICAgICAgICAgICAgPHRkIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkYXRhdGFibGUtY2VsbC0nICsgY2VsbC5jb2x1bW4uaWRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpmbGV4UmVuZGVyPVwiXG4gICAgICAgICAgICAgICAgICBjZWxsLmNvbHVtbi5jb2x1bW5EZWYuY2VsbDtcbiAgICAgICAgICAgICAgICAgIHByb3BzOiBjZWxsLmdldENvbnRleHQoKTtcbiAgICAgICAgICAgICAgICAgIGxldCBjZWxsQ29udGVudFxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjZWxsQ29udGVudCB9fVxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIDwvbnYtdGFibGU+XG5cbiAgICA8IS0tIFJlbmRlciBwYWdpbmF0aW9uIGlmIGNvbmZpZ3VyZWQgLS0+XG4gICAgQGlmIChwYWdpbmF0aW9uQVBJKCkpIHtcbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBwYWdpbmF0aW9uVGVtcGxhdGUgfHwgbnVsbDtcbiAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHBhZ2luYXRpb25BUEkoKSB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIE52RGF0YXRhYmxlPFQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLyoqIENvbHVtbiBkZWZpbml0aW9ucyAqL1xuICBjb2x1bW5zID0gaW5wdXQ8TnZEYXRhdGFibGVDb2x1bW48VD5bXT4oW10pO1xuICAvKiogUm93IGRhdGEgKi9cbiAgcm93cyA9IGlucHV0PFRbXT4oW10pO1xuICAvKiogT3B0aW9uYWwgcGFnaW5hdGlvbiBjb25maWd1cmF0aW9uICovXG4gIHBhZ2luYXRpb24gPSBpbnB1dDxOdkRhdGF0YWJsZVBhZ2luYXRpb25Db25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBPcHRpb25hbCBzb3J0aW5nIGNvbmZpZ3VyYXRpb24gKi9cbiAgc29ydGluZyA9IGlucHV0PE52RGF0YXRhYmxlU29ydGluZ0NvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIFNob3VsZCB0aGUgaGVhZGVyIHN0aWNrIHRvIHRoZSB0b3Agb2YgdGhlIHRhYmxlIHdoZW4gc2Nyb2xsaW5nPyAqL1xuICBzdGlja3lIZWFkZXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyoqIFRlbXBsYXRlIGZvciBjdXN0b20gcGFnaW5hdGlvbiBVSSAqL1xuICBAQ29udGVudENoaWxkKCdwYWdpbmF0aW9uVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHBhZ2luYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICAkaW1wbGljaXQ6IE52RGF0YXRhYmxlUmVuZGVyUGFnaW5hdGlvbkFQSTtcbiAgfT47XG5cbiAgLyoqIENlbGwgdGVtcGxhdGVzIHByb3ZpZGVkIHZpYSBudkRhdGF0YWJsZUNlbGwgZGlyZWN0aXZlICovXG4gIEBDb250ZW50Q2hpbGRyZW4oTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlKVxuICBjZWxsVGVtcGxhdGVzPzogUXVlcnlMaXN0PE52RGF0YXRhYmxlQ2VsbERpcmVjdGl2ZTxULCBUW2tleW9mIFRdPj47XG5cbiAgLyoqIFNpZ25hbCB0byB0cmFjayBjZWxsIHRlbXBsYXRlcyBhcnJheSAqL1xuICBwcml2YXRlIGNlbGxUZW1wbGF0ZXNTaWduYWwgPSBzaWduYWw8XG4gICAgTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlPFQsIFRba2V5b2YgVF0+W11cbiAgPihbXSk7XG5cbiAgLyoqIE1hcCBvZiBmaWVsZCBuYW1lcyB0byBjZWxsIHRlbXBsYXRlcyAqL1xuICBwcml2YXRlIGNlbGxUZW1wbGF0ZU1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgVGVtcGxhdGVSZWY8TnZEYXRhdGFibGVDZWxsQ29udGV4dDxULCBUW2tleW9mIFRdPj5cbiAgICA+KCk7XG4gICAgdGhpcy5jZWxsVGVtcGxhdGVzU2lnbmFsKCkuZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XG4gICAgICBtYXAuc2V0KGRpcmVjdGl2ZS5udkRhdGF0YWJsZUNlbGwsIGRpcmVjdGl2ZS50ZW1wbGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG1hcDtcbiAgfSk7XG5cbiAgLyoqIFBhZ2luYXRpb24gc3RhdGUgZm9yIHNlcnZlciBtb2RlICovXG4gIHByaXZhdGUgcGFnaW5hdGlvblN0YXRlID0gc2lnbmFsPFBhZ2luYXRpb25TdGF0ZT4oe1xuICAgIHBhZ2VJbmRleDogMCxcbiAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0aW9uKCk/LmluaXRpYWxQYWdlU2l6ZSB8fCAxMCxcbiAgfSk7XG5cbiAgLyoqIFNvcnRpbmcgc3RhdGUgZm9yIGNvbnRyb2xsZWQgc29ydGluZyAoc2VydmVyIG1vZGUpICovXG4gIHByaXZhdGUgc29ydGluZ1N0YXRlID0gc2lnbmFsPFNvcnRpbmdTdGF0ZT4odGhpcy5zb3J0aW5nKCk/LnNvcnRTdGF0ZSB8fCBbXSk7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0YWJsZSByb3dzIGZvciBpbmZpbml0ZSBzY3JvbGwgb2JzZXJ2ZXIgKi9cbiAgcHJpdmF0ZSB0YWJsZVJvd3MgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3RhYmxlUm93Jyk7XG5cbiAgLyoqIEludGVyc2VjdGlvbiBvYnNlcnZlciBmb3IgaW5maW5pdGUgc2Nyb2xsICovXG4gIHByaXZhdGUgb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEhlbHBlciB0byBjaGVjayBpZiB1c2luZyBpbmZpbml0ZSBzY3JvbGwgKi9cbiAgaXNJbmZpbml0ZVNjcm9sbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFnaW5hdGlvbigpPy5tb2RlID09PSAnaW5maW5pdGUnKTtcblxuICAvKiogQ29tcHV0ZWQgdGFibGUgY29sdW1ucyB3aXRoIHByb3BlciB0eXBpbmcgYW5kIGZpbHRlcmluZy4gKi9cbiAgdGFibGVDb2x1bW5zID0gY29tcHV0ZWQ8Q29sdW1uRGVmPFQsIFRba2V5b2YgVF0+W10+KCgpID0+IHtcbiAgICBjb25zdCB0ZW1wbGF0ZU1hcCA9IHRoaXMuY2VsbFRlbXBsYXRlTWFwKCk7XG5cbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zKClcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gIWNvbC5oaWRkZW4pXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgLy8gU2hhcmVkIGNlbGwgcmVuZGVyZXJcbiAgICAgICAgY29uc3QgY2VsbFJlbmRlcmVyID0gKGNvbnRleHQ6IENlbGxDb250ZXh0PFQsIFRba2V5b2YgVF0+KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gU3RyaW5nKGNvbC5maWVsZCk7XG4gICAgICAgICAgY29uc3QgY2VsbFRlbXBsYXRlID0gdGVtcGxhdGVNYXAuZ2V0KGZpZWxkTmFtZSk7XG5cbiAgICAgICAgICAvLyBQcmlvcml0eTogdGVtcGxhdGUgPiByZW5kZXJDZWxsID4gZGVmYXVsdFxuICAgICAgICAgIGlmIChjZWxsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIC8vIFJldHVybiBUZW1wbGF0ZVJlZiBkaXJlY3RseSAtIGdldFZhbHVlKCkgcmV0dXJucyBmb3JtYXR0ZWQgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiBjZWxsVGVtcGxhdGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIHJlbmRlckNlbGwgaWYgcHJvdmlkZWRcbiAgICAgICAgICBpZiAoY29sLnJlbmRlckNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2wucmVuZGVyQ2VsbChjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBEZWZhdWx0OiBqdXN0IHJldHVybiB0aGUgdmFsdWUgKGZvcm1hdHRlZCBpZiB2YWx1ZUZvcm1hdHRlciB3YXMgdXNlZClcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5nZXRWYWx1ZSgpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbkRlZjogQ29sdW1uRGVmPFQsIFRba2V5b2YgVF0+ID0ge1xuICAgICAgICAgIGFjY2Vzc29yS2V5OiBjb2wuZmllbGQsXG4gICAgICAgICAgYWNjZXNzb3JGbjogY29sLnZhbHVlRm9ybWF0dGVyXG4gICAgICAgICAgICA/IChyb3c6IFQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvd1tjb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wudmFsdWVGb3JtYXR0ZXIhKHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiByYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGhlYWRlcjogY29sLmhlYWRlck5hbWUgfHwgU3RyaW5nKGNvbC5maWVsZCksXG4gICAgICAgICAgc2l6ZTogY29sLndpZHRoLFxuICAgICAgICAgIGVuYWJsZVJlc2l6aW5nOiBjb2wucmVzaXphYmxlID8/IHRydWUsXG4gICAgICAgICAgLy8gU29ydGluZyBjb25maWd1cmF0aW9uXG4gICAgICAgICAgZW5hYmxlU29ydGluZzogdGhpcy5zb3J0aW5nKCkgPyBjb2wuc29ydGFibGUgPz8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgIGNlbGw6IGNlbGxSZW5kZXJlcixcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBBZGQgb3B0aW9uYWwgc29ydGluZyBwcm9wZXJ0aWVzIG9ubHkgaWYgZGVmaW5lZFxuICAgICAgICBpZiAoY29sLnNvcnRpbmdGbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAtIFRhblN0YWNrIHR5cGluZyBpcyBzdHJpY3QgYnV0IHRoaXMgd29ya3MgYXQgcnVudGltZVxuICAgICAgICAgIGNvbHVtbkRlZi5zb3J0aW5nRm4gPSBjb2wuc29ydGluZ0ZuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuc29ydERlc2NGaXJzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29sdW1uRGVmLnNvcnREZXNjRmlyc3QgPSBjb2wuc29ydERlc2NGaXJzdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLmludmVydFNvcnRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbHVtbkRlZi5pbnZlcnRTb3J0aW5nID0gY29sLmludmVydFNvcnRpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5zb3J0VW5kZWZpbmVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb2x1bW5EZWYuc29ydFVuZGVmaW5lZCA9IGNvbC5zb3J0VW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbkRlZjtcbiAgICAgIH0pO1xuICB9KTtcblxuICAvKiogVGFuU3RhY2sgdGFibGUgaW5zdGFuY2Ugd2l0aCBTaWduYWxzICovXG4gIHByaXZhdGUgdGFibGVJbnN0YW5jZSA9IGNyZWF0ZUFuZ3VsYXJUYWJsZSgoKSA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IHNvcnRpbmdDb25maWcgPSB0aGlzLnNvcnRpbmcoKTtcblxuICAgIC8vIERldGVybWluZSBiYXNlIHRhYmxlIGNvbmZpZ3VyYXRpb24gd2l0aCBzb3J0aW5nXG4gICAgY29uc3QgZ2V0QmFzZVRhYmxlQ29uZmlnID0gKCkgPT4ge1xuICAgICAgY29uc3QgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgZGF0YTogdGhpcy5yb3dzKCksXG4gICAgICAgIGNvbHVtbnM6IHRoaXMudGFibGVDb2x1bW5zKCksXG4gICAgICAgIGdldENvcmVSb3dNb2RlbDogZ2V0Q29yZVJvd01vZGVsKCksXG4gICAgICAgIC8vIFNvcnRpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAuLi4oc29ydGluZ0NvbmZpZyAmJiB7XG4gICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgIHNvcnRpbmc6XG4gICAgICAgICAgICAgIHNvcnRpbmdDb25maWcubW9kZSA9PT0gJ3NlcnZlcicgJiYgc29ydGluZ0NvbmZpZy5zb3J0U3RhdGVcbiAgICAgICAgICAgICAgICA/IHNvcnRpbmdDb25maWcuc29ydFN0YXRlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNvcnRpbmdTdGF0ZSgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Tb3J0aW5nQ2hhbmdlOiAoXG4gICAgICAgICAgICB1cGRhdGVyT3JWYWx1ZTpcbiAgICAgICAgICAgICAgfCBTb3J0aW5nU3RhdGVcbiAgICAgICAgICAgICAgfCAoKG9sZDogU29ydGluZ1N0YXRlKSA9PiBTb3J0aW5nU3RhdGUpLFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNvcnQgPVxuICAgICAgICAgICAgICBzb3J0aW5nQ29uZmlnLm1vZGUgPT09ICdzZXJ2ZXInICYmIHNvcnRpbmdDb25maWcuc29ydFN0YXRlXG4gICAgICAgICAgICAgICAgPyBzb3J0aW5nQ29uZmlnLnNvcnRTdGF0ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zb3J0aW5nU3RhdGUoKTtcblxuICAgICAgICAgICAgY29uc3QgbmV3U29ydCA9XG4gICAgICAgICAgICAgIHR5cGVvZiB1cGRhdGVyT3JWYWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgID8gdXBkYXRlck9yVmFsdWUoY3VycmVudFNvcnQpXG4gICAgICAgICAgICAgICAgOiB1cGRhdGVyT3JWYWx1ZTtcblxuICAgICAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBpbnRlcm5hbCBzdGF0ZSBmb3IgcmVhY3Rpdml0eVxuICAgICAgICAgICAgdGhpcy5zb3J0aW5nU3RhdGUuc2V0KG5ld1NvcnQpO1xuXG4gICAgICAgICAgICAvLyBGb3Igc2VydmVyLXNpZGUgc29ydGluZywgYWxzbyBjYWxsIHRoZSBjYWxsYmFja1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBzb3J0aW5nQ29uZmlnPy5tb2RlID09PSAnc2VydmVyJyAmJlxuICAgICAgICAgICAgICBzb3J0aW5nQ29uZmlnLm9uU29ydGluZ0NoYW5nZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHNvcnRpbmdDb25maWcub25Tb3J0aW5nQ2hhbmdlKG5ld1NvcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWFudWFsU29ydGluZzogc29ydGluZ0NvbmZpZy5tb2RlID09PSAnc2VydmVyJyxcbiAgICAgICAgICBlbmFibGVTb3J0aW5nOiB0cnVlLFxuICAgICAgICAgIGVuYWJsZU11bHRpU29ydDogc29ydGluZ0NvbmZpZy5lbmFibGVNdWx0aVNvcnQgPz8gZmFsc2UsXG4gICAgICAgICAgZW5hYmxlU29ydGluZ1JlbW92YWw6IHNvcnRpbmdDb25maWcuZW5hYmxlU29ydGluZ1JlbW92YWwgPz8gdHJ1ZSxcbiAgICAgICAgICBtYXhNdWx0aVNvcnRDb2xDb3VudDogc29ydGluZ0NvbmZpZy5tYXhNdWx0aVNvcnRDb2xDb3VudCxcbiAgICAgICAgICBzb3J0RGVzY0ZpcnN0OiBzb3J0aW5nQ29uZmlnLnNvcnREZXNjRmlyc3QgPz8gZmFsc2UsXG4gICAgICAgICAgLy8gV2hlbiBtdWx0aS1zb3J0IGlzIGVuYWJsZWQsIHRyZWF0IGFsbCBjbGlja3MgYXMgbXVsdGktc29ydCBldmVudHNcbiAgICAgICAgICBpc011bHRpU29ydEV2ZW50OiBzb3J0aW5nQ29uZmlnLmVuYWJsZU11bHRpU29ydFxuICAgICAgICAgICAgPyAoKSA9PiB0cnVlXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBnZXRTb3J0ZWRSb3dNb2RlbDpcbiAgICAgICAgICAgIHNvcnRpbmdDb25maWcubW9kZSA9PT0gJ2NsaWVudCcgPyBnZXRTb3J0ZWRSb3dNb2RlbCgpIDogdW5kZWZpbmVkLFxuICAgICAgICB9KSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBiYXNlQ29uZmlnO1xuICAgIH07XG5cbiAgICBpZiAoIXBhZ2luYXRpb25Db25maWcgfHwgcGFnaW5hdGlvbkNvbmZpZy5tb2RlID09PSAnaW5maW5pdGUnKSB7XG4gICAgICAvLyBObyBwYWdpbmF0aW9uIG9yIGluZmluaXRlIHNjcm9sbCAtIHNpbXBsZSBjb25maWdcbiAgICAgIHJldHVybiBnZXRCYXNlVGFibGVDb25maWcoKTtcbiAgICB9IGVsc2UgaWYgKHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIC8vIENsaWVudC1zaWRlIHBhZ2luYXRpb25cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmdldEJhc2VUYWJsZUNvbmZpZygpLFxuICAgICAgICBnZXRQYWdpbmF0aW9uUm93TW9kZWw6IGdldFBhZ2luYXRpb25Sb3dNb2RlbCgpLFxuICAgICAgICBpbml0aWFsU3RhdGU6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICBwYWdlU2l6ZTogcGFnaW5hdGlvbkNvbmZpZy5pbml0aWFsUGFnZVNpemUgfHwgMTAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlcnZlci1zaWRlIHBhZ2luYXRpb24gLSBtYW51YWwgcGFnaW5hdGlvbiB3aXRoIHJlYWN0aXZlIHN0YXRlXG4gICAgICBjb25zdCBiYXNlQ29uZmlnID0gZ2V0QmFzZVRhYmxlQ29uZmlnKCk7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvblN0YXRlKCkucGFnZVNpemU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5iYXNlQ29uZmlnLFxuICAgICAgICBtYW51YWxQYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgICBwYWdlQ291bnQ6XG4gICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy50b3RhbFBhZ2VDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcudG90YWxQYWdlQ291bnRcbiAgICAgICAgICAgIDogcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJvd0NvdW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCAvIHBhZ2VTaXplKVxuICAgICAgICAgICAgOiAtMSxcbiAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICBwYWdpbmF0aW9uOiB0aGlzLnBhZ2luYXRpb25TdGF0ZSgpLFxuICAgICAgICAgIC4uLihiYXNlQ29uZmlnLnN0YXRlICYmIHsgc29ydGluZzogYmFzZUNvbmZpZy5zdGF0ZS5zb3J0aW5nIH0pLFxuICAgICAgICB9LFxuICAgICAgICBvblBhZ2luYXRpb25DaGFuZ2U6IChcbiAgICAgICAgICB1cGRhdGVyT3JWYWx1ZTpcbiAgICAgICAgICAgIHwgUGFnaW5hdGlvblN0YXRlXG4gICAgICAgICAgICB8ICgob2xkOiBQYWdpbmF0aW9uU3RhdGUpID0+IFBhZ2luYXRpb25TdGF0ZSksXG4gICAgICAgICkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXRlID1cbiAgICAgICAgICAgIHR5cGVvZiB1cGRhdGVyT3JWYWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICA/IHVwZGF0ZXJPclZhbHVlKHRoaXMucGFnaW5hdGlvblN0YXRlKCkpXG4gICAgICAgICAgICAgIDogdXBkYXRlck9yVmFsdWU7XG5cbiAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TdGF0ZS5zZXQobmV3U3RhdGUpO1xuXG4gICAgICAgICAgLy8gQ2FsbCB1c2VyJ3MgY2FsbGJhY2sgZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb25cbiAgICAgICAgICBpZiAocGFnaW5hdGlvbkNvbmZpZy5vblBhZ2luYXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25QYWdpbmF0aW9uQ2hhbmdlKHtcbiAgICAgICAgICAgICAgcGFnZUluZGV4OiBuZXdTdGF0ZS5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgIHBhZ2VTaXplOiBuZXdTdGF0ZS5wYWdlU2l6ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICAvKiogUHVibGljIGdldHRlciBmb3IgdGFibGUgaW5zdGFuY2UuICovXG4gIHRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlSW5zdGFuY2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgc29ydCBkaXJlY3Rpb24gY2hhbmdlIGZyb20gdGFibGUgaGVhZGVyXG4gICAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50IFRoZSBzb3J0IGRpcmVjdGlvbiBjaGFuZ2UgZXZlbnQgb3IgZGlyZWN0aW9uIHN0cmluZ1xuICAgKiBAcGFyYW0ge29iamVjdH0gaGVhZGVyIFRoZSB0YWJsZSBoZWFkZXIgb2JqZWN0XG4gICAqL1xuICBoYW5kbGVTb3J0RGlyZWN0aW9uQ2hhbmdlZChcbiAgICBldmVudDogRXZlbnQgfCBDdXN0b21FdmVudDxzdHJpbmc+IHwgc3RyaW5nLFxuICAgIGhlYWRlcjoge1xuICAgICAgY29sdW1uOiB7XG4gICAgICAgIGNsZWFyU29ydGluZzogKCkgPT4gdm9pZDtcbiAgICAgICAgdG9nZ2xlU29ydGluZzogKGRlc2M/OiBib29sZWFuLCBtdWx0aT86IGJvb2xlYW4pID0+IHZvaWQ7XG4gICAgICB9O1xuICAgIH0sXG4gICkge1xuICAgIC8vIEV4dHJhY3QgZGlyZWN0aW9uIGZyb20gZXZlbnQgb3IgdXNlIGRpcmVjdGx5IGlmIHN0cmluZ1xuICAgIGxldCBkaXJlY3Rpb246ICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnO1xuXG4gICAgaWYgKHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRpcmVjdGlvbiA9IGV2ZW50IGFzICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnO1xuICAgIH0gZWxzZSBpZiAoJ2RldGFpbCcgaW4gZXZlbnQgJiYgdHlwZW9mIGV2ZW50LmRldGFpbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRpcmVjdGlvbiA9IGV2ZW50LmRldGFpbCBhcyAnYXNjJyB8ICdkZXNjJyB8ICdub25lJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmFsbGJhY2sgLSBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBoYW5kbGUgZ3JhY2VmdWxseVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnVW5leHBlY3RlZCBldmVudCB0eXBlIGluIGhhbmRsZVNvcnREaXJlY3Rpb25DaGFuZ2VkOicsXG4gICAgICAgIGV2ZW50LFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzb3J0aW5nQ29uZmlnID0gdGhpcy5zb3J0aW5nKCk7XG5cbiAgICAvLyBDaGVjayBpZiBtdWx0aS1zb3J0IGlzIGVuYWJsZWRcbiAgICBjb25zdCBpc011bHRpU29ydCA9IHNvcnRpbmdDb25maWc/LmVuYWJsZU11bHRpU29ydCA/PyBmYWxzZTtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdub25lJykge1xuICAgICAgLy8gQ2xlYXIgdGhpcyBjb2x1bW4ncyBzb3J0XG4gICAgICBoZWFkZXIuY29sdW1uLmNsZWFyU29ydGluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUb2dnbGUgc29ydCAtIFRhblN0YWNrIHdpbGwgaGFuZGxlIHRoZSBsb2dpYyBpbnRlcm5hbGx5XG4gICAgICBoZWFkZXIuY29sdW1uLnRvZ2dsZVNvcnRpbmcoZGlyZWN0aW9uID09PSAnZGVzYycsIGlzTXVsdGlTb3J0KTtcbiAgICB9XG4gIH1cblxuICAvKiogQnVpbGQgcGFnaW5hdGlvbiBBUEkgZm9yIHRlbXBsYXRlICovXG4gIHBhZ2luYXRpb25BUEkgPSBjb21wdXRlZDxOdkRhdGF0YWJsZVJlbmRlclBhZ2luYXRpb25BUEkgfCBudWxsPigoKSA9PiB7XG4gICAgY29uc3QgcGFnaW5hdGlvbkNvbmZpZyA9IHRoaXMucGFnaW5hdGlvbigpO1xuICAgIGlmICghcGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlKCk7XG4gICAgY29uc3QgdGFibGVQYWdpbmF0aW9uU3RhdGUgPSB0YWJsZS5nZXRTdGF0ZSgpLnBhZ2luYXRpb247XG4gICAgY29uc3QgcGFnZUNvdW50ID0gdGFibGUuZ2V0UGFnZUNvdW50KCk7XG4gICAgY29uc3Qgcm93Q291bnQgPVxuICAgICAgcGFnaW5hdGlvbkNvbmZpZy5tb2RlID09PSAnc2VydmVyJ1xuICAgICAgICA/IHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCB8fCB0aGlzLnJvd3MoKS5sZW5ndGhcbiAgICAgICAgOiB0aGlzLnJvd3MoKS5sZW5ndGg7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUluZGV4OiB0YWJsZVBhZ2luYXRpb25TdGF0ZS5wYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogdGFibGVQYWdpbmF0aW9uU3RhdGUucGFnZVNpemUsXG4gICAgICBwYWdlQ291bnQsXG4gICAgICByb3dDb3VudCxcbiAgICAgIGZpcnN0UGFnZTogKCkgPT4gdGFibGUuc2V0UGFnZUluZGV4KDApLFxuICAgICAgcHJldmlvdXNQYWdlOiAoKSA9PiB0YWJsZS5wcmV2aW91c1BhZ2UoKSxcbiAgICAgIG5leHRQYWdlOiAoKSA9PiB0YWJsZS5uZXh0UGFnZSgpLFxuICAgICAgbGFzdFBhZ2U6ICgpID0+IHRhYmxlLnNldFBhZ2VJbmRleChwYWdlQ291bnQgLSAxKSxcbiAgICAgIHNldFBhZ2VJbmRleDogKGluZGV4OiBudW1iZXIpID0+IHRhYmxlLnNldFBhZ2VJbmRleChpbmRleCksXG4gICAgICBzZXRQYWdlU2l6ZTogKHNpemU6IG51bWJlcikgPT4gdGFibGUuc2V0UGFnZVNpemUoc2l6ZSksXG4gICAgICBjYW5QcmV2aW91c1BhZ2U6IHRhYmxlLmdldENhblByZXZpb3VzUGFnZSgpLFxuICAgICAgY2FuTmV4dFBhZ2U6IHRhYmxlLmdldENhbk5leHRQYWdlKCksXG4gICAgICBpc0xvYWRpbmc6XG4gICAgICAgIHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2luZmluaXRlJ1xuICAgICAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy5pc0xvYWRpbmdcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGhhc01vcmU6XG4gICAgICAgIHBhZ2luYXRpb25Db25maWcubW9kZSA9PT0gJ2luZmluaXRlJ1xuICAgICAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy5oYXNNb3JlXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gU2V0IHVwIGludGVyc2VjdGlvbiBvYnNlcnZlciBmb3IgaW5maW5pdGUgc2Nyb2xsXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnJvd3MoKTsgLy8gVHJhY2sgcm93cyBjaGFuZ2VzXG5cbiAgICAgICAgLy8gQ2xlYW4gdXAgZXhpc3Rpbmcgb2JzZXJ2ZXJcbiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9ubHkgc2V0IHVwIG9ic2VydmVyIGZvciBpbmZpbml0ZSBzY3JvbGwgbW9kZVxuICAgICAgICBpZiAocGFnaW5hdGlvbkNvbmZpZz8ubW9kZSAhPT0gJ2luZmluaXRlJyB8fCByb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSBET00gaXMgdXBkYXRlZFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSBwYWdpbmF0aW9uQ29uZmlnLmxvYWRNb3JlVGhyZXNob2xkIHx8IDUwMDtcblxuICAgICAgICAgIC8vIEZpbmQgdGhlIGxhc3Qgcm93IGVsZW1lbnRcbiAgICAgICAgICBjb25zdCB0YWJsZVJvd0VsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICdbZGF0YS1pcy1sYXN0PVwidHJ1ZVwiXScsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBsYXN0Um93RWxlbWVudCA9IHRhYmxlUm93RWxlbWVudHNbdGFibGVSb3dFbGVtZW50cy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgIGlmICghbGFzdFJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZW50cnkuaXNJbnRlcnNlY3RpbmcgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm1vZGUgPT09ICdpbmZpbml0ZScgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLmhhc01vcmUgJiZcbiAgICAgICAgICAgICAgICAhcGFnaW5hdGlvbkNvbmZpZy5pc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uTG9hZE1vcmVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5vbkxvYWRNb3JlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJvb3RNYXJnaW46IGAke3RocmVzaG9sZH1weGAsXG4gICAgICAgICAgICAgIHJvb3Q6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUobGFzdFJvd0VsZW1lbnQpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTeW5jIGNlbGwgdGVtcGxhdGVzIFF1ZXJ5TGlzdCB0byBzaWduYWxcbiAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGVzKSB7XG4gICAgICB0aGlzLmNlbGxUZW1wbGF0ZXNTaWduYWwuc2V0KHRoaXMuY2VsbFRlbXBsYXRlcy50b0FycmF5KCkpO1xuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiB0aGUgUXVlcnlMaXN0XG4gICAgICB0aGlzLmNlbGxUZW1wbGF0ZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jZWxsVGVtcGxhdGVzU2lnbmFsLnNldCh0aGlzLmNlbGxUZW1wbGF0ZXMudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5vYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVVRJTFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cm9uZ2x5LXR5cGVkIGNvbHVtbiBmYWN0b3J5IGZvciBhIGdpdmVuIHJvdyB0eXBlLlxuICpcbiAqIEB0ZW1wbGF0ZSBSb3cgVGhlIHJvdyBkYXRhIHR5cGUgKGUuZy4sIGBQcm9kdWN0YClcbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgY29sdW1uIGRlZmluaXRpb24gYW5kIGluZmVyczpcbiAqIC0gYEtgIGFzIHRoZSBmaWVsZCBrZXkgKGBrZXlvZiBSb3dgKVxuICogLSBgRmAgYXMgdGhlIHJldHVybiB0eXBlIG9mIGB2YWx1ZUZvcm1hdHRlcmAgKGRlZmF1bHRzIHRvIGBSb3dbS11gKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gRGVmaW5lIHlvdXIgcm93IHR5cGVcbiAqIGludGVyZmFjZSBQcm9kdWN0IHtcbiAqICAgbmFtZTogc3RyaW5nO1xuICogICBwcmljZTogbnVtYmVyO1xuICogfVxuICpcbiAqIGNvbnN0IGNvbCA9IG1ha2VDb2x1bW48UHJvZHVjdD4oKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VDb2x1bW48Um93PigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlZmluZTxLIGV4dGVuZHMga2V5b2YgUm93LCBGID0gUm93W0tdPihcbiAgICBjb2w6IE52RGF0YXRhYmxlQ29sdW1uPFJvdywgSywgRj4sXG4gICkge1xuICAgIHJldHVybiBjb2wgYXMgdW5rbm93biBhcyBOdkRhdGF0YWJsZUNvbHVtbjxSb3c+O1xuICB9O1xufVxuXG5leHBvcnQgeyBmbGV4UmVuZGVyQ29tcG9uZW50IGFzIG52RGF0YXRhYmxlUmVuZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhdGFibGUudXRpbHMnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHR5cGUgeyBDZWxsQ29udGV4dCBhcyBOdkRhdGF0YWJsZUNlbGxDb250ZXh0IH07XG5cbi8qKiBDb2x1bW4gZGVmaW5pdGlvbiBmb3IgTnZEYXRhdGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIE52RGF0YXRhYmxlQ29sdW1uPFxuICBSb3csXG4gIEsgZXh0ZW5kcyBrZXlvZiBSb3cgPSBrZXlvZiBSb3csXG4gIEYgPSBSb3dbS10sXG4+IHtcbiAgLyoqIEZpZWxkIG5hbWUgZnJvbSByb3cgZGF0YSAqL1xuICBmaWVsZDogSztcbiAgLyoqIERpc3BsYXkgbmFtZSBmb3IgY29sdW1uIGhlYWRlciAqL1xuICBoZWFkZXJOYW1lPzogc3RyaW5nO1xuICAvKiogQ29sdW1uIHdpZHRoIGluIHBpeGVscyAqL1xuICB3aWR0aD86IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgY29sdW1uIGlzIHJlc2l6YWJsZSAqL1xuICByZXNpemFibGU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBjb2x1bW4gaXMgaGlkZGVuICovXG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhlIHJhdyB2YWx1ZSBiZWZvcmUgcmVuZGVyaW5nLiBSZWNlaXZlcyB0aGUgY2VsbCB2YWx1ZSBhbmQgZnVsbCByb3cgb2JqZWN0LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZm9ybWF0dGluZyBkYXRlcywgY29udmVydGluZyBhcnJheXMgdG8gc3RyaW5ncywgYWNjZXNzaW5nIG5lc3RlZCBvYmplY3RzLCBldGMuXG4gICAqIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBpcyB0aGVuIHBhc3NlZCB0byByZW5kZXJDZWxsIG9yIHRlbXBsYXRlcy5cbiAgICovXG4gIHZhbHVlRm9ybWF0dGVyPzogKHBhcmFtczogTnZUYWJsZVZhbHVlRm9ybWF0dGVyUGFyYW1zPFJvdywgUm93W0tdLCBLPikgPT4gRjtcbiAgLyoqXG4gICAqIEN1c3RvbSBjZWxsIHJlbmRlcmVyIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBlaXRoZXIgYSBzdHJpbmcgb3IgQW5ndWxhciBUZW1wbGF0ZVJlZi5cbiAgICogVXNlIGAkaW1wbGljaXRgIGluIHlvdXIgdGVtcGxhdGUgdG8gcmVjZWl2ZSB0aGUgQ2VsbENvbnRleHQuXG4gICAqIE5vdGU6IElmIHZhbHVlRm9ybWF0dGVyIGlzIHByb3ZpZGVkLCByZW5kZXJDZWxsIHJlY2VpdmVzIHRoZSBmb3JtYXR0ZWQgdmFsdWUuXG4gICAqL1xuICByZW5kZXJDZWxsPzogKGNvbnRleHQ6IENlbGxDb250ZXh0PFJvdywgRj4pID0+XG4gICAgfCBzdHJpbmdcbiAgICB8IEZsZXhSZW5kZXJDb21wb25lbnRcbiAgICB8IFRlbXBsYXRlUmVmPHtcbiAgICAgICAgJGltcGxpY2l0OiBDZWxsQ29udGV4dDxSb3csIEY+O1xuICAgICAgfT47XG4gIC8qKiBFbmFibGUvZGlzYWJsZSBzb3J0aW5nIGZvciB0aGlzIGNvbHVtbiAqL1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIC8qKiBDdXN0b20gc29ydGluZyBmdW5jdGlvbiBvciBidWlsdC1pbiBmdW5jdGlvbiBuYW1lICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHNvcnRpbmdGbj86ICgocm93QTogYW55LCByb3dCOiBhbnksIGNvbHVtbklkOiBzdHJpbmcpID0+IG51bWJlcikgfCBzdHJpbmc7XG4gIC8qKiBTdGFydCB3aXRoIGRlc2NlbmRpbmcgc29ydCBmb3IgdGhpcyBjb2x1bW4gKi9cbiAgc29ydERlc2NGaXJzdD86IGJvb2xlYW47XG4gIC8qKiBJbnZlcnQgdGhlIHNvcnQgb3JkZXIgKHVzZWZ1bCBmb3IgcmFua2luZ3MpICovXG4gIGludmVydFNvcnRpbmc/OiBib29sZWFuO1xuICAvKiogV2hlcmUgdG8gcGxhY2UgdW5kZWZpbmVkIHZhbHVlcyBpbiBzb3J0ICovXG4gIHNvcnRVbmRlZmluZWQ/OiAnZmlyc3QnIHwgJ2xhc3QnIHwgZmFsc2UgfCAtMSB8IDE7XG59XG5cbi8qKiBQYXJhbWV0ZXJzIGZvciBjdXN0b20gY2VsbCByZW5kZXJpbmcgZnVuY3Rpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIE52VGFibGVSZW5kZXJDZWxsUGFyYW1zPFJvdywgVmFsdWUsIEZpZWxkPiB7XG4gIC8qKiBDZWxsIHZhbHVlICovXG4gIHZhbHVlOiBWYWx1ZSB8IE5vSW5mZXI8VmFsdWU+O1xuICAvKiogUm93IGRhdGEgKi9cbiAgcm93OiBSb3c7XG4gIC8qKiBGaWVsZCBuYW1lICovXG4gIGZpZWxkOiBGaWVsZDtcbiAgLyoqIFJvdyBpbmRleCAqL1xuICByb3dJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHZhbHVlRm9ybWF0dGVyIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE52VGFibGVWYWx1ZUZvcm1hdHRlclBhcmFtczxSb3csIFZhbHVlLCBGaWVsZD4ge1xuICAvKiogQ2VsbCBvcmlnaW5hbCB2YWx1ZSAqL1xuICB2YWx1ZTogVmFsdWU7XG4gIC8qKiBSb3cgZGF0YSAqL1xuICByb3c6IFJvdztcbiAgLyoqIEZpZWxkIG5hbWUgKi9cbiAgZmllbGQ6IEZpZWxkO1xufVxuXG4vKipcbiAqIFBhZ2luYXRpb24gY29uZmlndXJhdGlvbiBmb3IgTnZEYXRhdGFibGUuXG4gKiBTdXBwb3J0cyB0aHJlZSBtb2RlczogY2xpZW50LXNpZGUsIHNlcnZlci1zaWRlIHdpdGggYnV0dG9ucywgYW5kIGluZmluaXRlIHNjcm9sbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVBhZ2luYXRpb25Db25maWcge1xuICAvKiogUGFnaW5hdGlvbiBtb2RlICovXG4gIG1vZGU6ICdjbGllbnQnIHwgJ3NlcnZlcicgfCAnaW5maW5pdGUnO1xuICAvKiogSW5pdGlhbCBwYWdlIHNpemUgKGRlZmF1bHQ6IDEwKSAqL1xuICBpbml0aWFsUGFnZVNpemU/OiBudW1iZXI7XG4gIC8qKiBBdmFpbGFibGUgcGFnZSBzaXplIG9wdGlvbnMgKGRlZmF1bHQ6IFsxMCwgMjAsIDUwLCAxMDBdKSAqL1xuICBwYWdlU2l6ZU9wdGlvbnM/OiBudW1iZXJbXTtcblxuICAvLyBTZXJ2ZXItc2lkZSAoYnV0dG9ucykgc3BlY2lmaWMgcHJvcGVydGllc1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHJvd3MgKGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKSAqL1xuICB0b3RhbFJvd0NvdW50PzogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHBhZ2VzIChmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbikgKi9cbiAgdG90YWxQYWdlQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBDYWxsYmFjayB3aGVuIHBhZ2luYXRpb24gc3RhdGUgY2hhbmdlcyAoZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24pICovXG4gIG9uUGFnaW5hdGlvbkNoYW5nZT86IChzdGF0ZToge1xuICAgIC8qKiBDdXJyZW50IHBhZ2UgaW5kZXggKi9cbiAgICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgICAvKiogQ3VycmVudCBwYWdlIHNpemUgKi9cbiAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICB9KSA9PiB2b2lkO1xuXG4gIC8vIEluZmluaXRlIHNjcm9sbCBzcGVjaWZpYyBwcm9wZXJ0aWVzXG4gIC8qKiBXaGV0aGVyIHRoZXJlIGFyZSBtb3JlIGl0ZW1zIHRvIGxvYWQgKGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBkYXRhIGlzIGN1cnJlbnRseSBsb2FkaW5nIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICAvKiogRGlzdGFuY2UgZnJvbSBib3R0b20gaW4gcGl4ZWxzIHRvIHRyaWdnZXIgbG9hZCAoZGVmYXVsdDogNTAwKSAqL1xuICBsb2FkTW9yZVRocmVzaG9sZD86IG51bWJlcjtcbiAgLyoqIENhbGxiYWNrIHRvIGxvYWQgbW9yZSBkYXRhIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBvbkxvYWRNb3JlPzogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBBUEkgZXhwb3NlZCB0byBwYWdpbmF0aW9uIHRlbXBsYXRlIGZvciBidWlsZGluZyBjdXN0b20gcGFnaW5hdGlvbiBVSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOdkRhdGF0YWJsZVJlbmRlclBhZ2luYXRpb25BUEkge1xuICAvKiogQ3VycmVudCBwYWdlIGluZGV4ICh6ZXJvLWJhc2VkKSAqL1xuICBwYWdlSW5kZXg6IG51bWJlcjtcbiAgLyoqIEN1cnJlbnQgcGFnZSBzaXplICovXG4gIHBhZ2VTaXplOiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2YgcGFnZXMgKi9cbiAgcGFnZUNvdW50OiBudW1iZXI7XG4gIC8qKiBUb3RhbCBudW1iZXIgb2Ygcm93cyAqL1xuICByb3dDb3VudDogbnVtYmVyO1xuICAvKiogTmF2aWdhdGUgdG8gZmlyc3QgcGFnZSAqL1xuICBmaXJzdFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBwcmV2aW91cyBwYWdlICovXG4gIHByZXZpb3VzUGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIG5leHQgcGFnZSAqL1xuICBuZXh0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIGxhc3QgcGFnZSAqL1xuICBsYXN0UGFnZTogKCkgPT4gdm9pZDtcbiAgLyoqIE5hdmlnYXRlIHRvIHNwZWNpZmljIHBhZ2UgYnkgaW5kZXggKi9cbiAgc2V0UGFnZUluZGV4OiAoaW5kZXg6IG51bWJlcikgPT4gdm9pZDtcbiAgLyoqIENoYW5nZSBwYWdlIHNpemUgKi9cbiAgc2V0UGFnZVNpemU6IChzaXplOiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHByZXZpb3VzIHBhZ2UgaXMgYXZhaWxhYmxlICovXG4gIGNhblByZXZpb3VzUGFnZTogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbmV4dCBwYWdlIGlzIGF2YWlsYWJsZSAqL1xuICBjYW5OZXh0UGFnZTogYm9vbGVhbjtcbiAgLyoqIExvYWRpbmcgc3RhdGUgKG9ubHkgZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgbW9yZSBpdGVtcyBhcmUgYXZhaWxhYmxlIChvbmx5IGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFNvcnRpbmcgY29uZmlndXJhdGlvbiBmb3IgTnZEYXRhdGFibGUuXG4gKiBTdXBwb3J0cyBib3RoIGNsaWVudC1zaWRlIGFuZCBzZXJ2ZXItc2lkZSBzb3J0aW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE52RGF0YXRhYmxlU29ydGluZ0NvbmZpZyB7XG4gIC8qKiBTb3J0aW5nIG1vZGUgKi9cbiAgbW9kZTogJ2NsaWVudCcgfCAnc2VydmVyJztcbiAgLyoqIEVuYWJsZSBtdWx0aS1jb2x1bW4gc29ydGluZyB3aXRoIFNoaWZ0K0NsaWNrICovXG4gIGVuYWJsZU11bHRpU29ydD86IGJvb2xlYW47XG4gIC8qKiBBbGxvdyBjeWNsaW5nIHRocm91Z2ggdG8gXCJubyBzb3J0XCIgc3RhdGUgKi9cbiAgZW5hYmxlU29ydGluZ1JlbW92YWw/OiBib29sZWFuO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgY29sdW1ucyBmb3IgbXVsdGktc29ydCAqL1xuICBtYXhNdWx0aVNvcnRDb2xDb3VudD86IG51bWJlcjtcbiAgLyoqIFN0YXJ0IHdpdGggZGVzY2VuZGluZyBzb3J0IGFzIGZpcnN0IHRvZ2dsZSBzdGF0ZSAqL1xuICBzb3J0RGVzY0ZpcnN0PzogYm9vbGVhbjtcbiAgLyoqIENvbnRyb2xsZWQgc29ydCBzdGF0ZSAoZm9yIHNlcnZlci1zaWRlIHNvcnRpbmcpICovXG4gIHNvcnRTdGF0ZT86IFNvcnRpbmdTdGF0ZTtcbiAgLyoqIENhbGxiYWNrIHdoZW4gc29ydGluZyBjaGFuZ2VzIChmb3Igc2VydmVyLXNpZGUgc29ydGluZykgKi9cbiAgb25Tb3J0aW5nQ2hhbmdlPzogKHNvcnRpbmc6IFNvcnRpbmdTdGF0ZSkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBTb3J0aW5nIHN0YXRlIHR5cGUgLSBhcnJheSBvZiBzb3J0IGRlc2NyaXB0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIE52RGF0YVRhYmxlU29ydGluZ1N0YXRlID0gU29ydGluZ1N0YXRlO1xuIl19
549
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnYtZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvbnYtZGF0YXRhYmxlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3Q0FBd0M7QUFDeEMsMENBQTBDO0FBQzFDLHdDQUF3QztBQUV4QyxPQUFPLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixLQUFLLEVBQ0wsV0FBVyxFQUNYLHNCQUFzQixFQUN0QixZQUFZLEVBQ1osZUFBZSxFQUVmLE1BQU0sRUFDTixNQUFNLEVBRU4sU0FBUyxHQUdWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsd0JBQXdCLEdBRXpCLE1BQU0sK0JBQStCLENBQUM7QUFFdkMsZ0hBQWdIO0FBQ2hILE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsbUJBQW1CLEdBT3BCLE1BQU0sbUJBQW1CLENBQUM7OztBQUUzQjs7O0dBR0c7QUFzRkgsTUFBTSxPQUFPLFdBQVc7SUErUHRCLHdDQUF3QztJQUN4QyxLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCwwQkFBMEIsQ0FDeEIsS0FBMkMsRUFDM0MsTUFLQztRQUVELHlEQUF5RDtRQUN6RCxJQUFJLFNBQWtDLENBQUM7UUFFdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixTQUFTLEdBQUcsS0FBZ0MsQ0FBQztRQUMvQyxDQUFDO2FBQU0sSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNqRSxT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b0JBQzVDLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThFVDtpQkFDRjt3REFxQkMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLG9CQUFvQixFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFPekQsYUFBYTtzQkFEWixlQUFlO3VCQUFDLHdCQUF3Qjs7QUF1WjNDLGdGQUFnRjtBQUVoRjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxVQUFVLFVBQVU7SUFDeEIsT0FBTyxTQUFTLE1BQU0sQ0FDcEIsR0FBaUM7UUFFakMsT0FBTyxHQUF3QyxDQUFDO0lBQ2xELENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxPQUFPLEVBQUUsbUJBQW1CLElBQUksMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtanNkb2MgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzZG9jL3JlcXVpcmUtcmV0dXJucyAqL1xuLyogZXNsaW50LWRpc2FibGUganNkb2MvcmVxdWlyZS1wYXJhbSAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBRdWVyeUxpc3QsXG4gIGVmZmVjdCxcbiAgc2lnbmFsLFxuICBFbGVtZW50UmVmLFxuICB2aWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlLFxuICB0eXBlIE52RGF0YXRhYmxlQ2VsbENvbnRleHQsXG59IGZyb20gJy4vbnYtZGF0YXRhYmxlLWNlbGwuZGlyZWN0aXZlJztcblxuLy8gbG9jYWwgY29weSBvZiBAdGFuc3RhY2svYW5ndWxhci10YWJsZSAocmVxdWlyZWQgZm9yIG11bHRpIGFuZ3VsYXIgdmVyc2lvbnMsIHRoZSBidWlsdCB2ZXJzaW9uIGlzIG5vdCB3b3JraW5nKVxuaW1wb3J0IHtcbiAgY3JlYXRlQW5ndWxhclRhYmxlLFxuICBnZXRDb3JlUm93TW9kZWwsXG4gIGdldFBhZ2luYXRpb25Sb3dNb2RlbCxcbiAgZ2V0U29ydGVkUm93TW9kZWwsXG4gIEZsZXhSZW5kZXJEaXJlY3RpdmUsXG4gIHR5cGUgRmxleFJlbmRlckNvbXBvbmVudCxcbiAgdHlwZSBDb2x1bW5EZWYsXG4gIHR5cGUgQ2VsbENvbnRleHQsXG4gIHR5cGUgUGFnaW5hdGlvblN0YXRlLFxuICB0eXBlIFNvcnRpbmdTdGF0ZSxcbiAgdHlwZSBOb0luZmVyLFxufSBmcm9tICcuL2RhdGF0YWJsZS51dGlscyc7XG5cbi8qKlxuICogQSBwb3dlcmZ1bCwgZmxleGlibGUgZGF0YXRhYmxlIGNvbXBvbmVudCBidWlsdCBvbiBUYW5TdGFjayBUYWJsZS5cbiAqIFN1cHBvcnRzIGN1c3RvbSBjZWxsIHJlbmRlcmluZywgY29sdW1uIGNvbmZpZ3VyYXRpb24sIHBhZ2luYXRpb24sIGFuZCBmdWxsIFR5cGVTY3JpcHQgdHlwaW5nLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdudi1kYXRhdGFibGUnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGbGV4UmVuZGVyRGlyZWN0aXZlXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxudi10YWJsZT5cbiAgICAgIDx0YWJsZT5cbiAgICAgICAgPHRoZWFkIFthdHRyLmRhdGEtc3RpY2t5LXRvcF09XCJzdGlja3lIZWFkZXIoKSA/ICd0cnVlJyA6IG51bGxcIj5cbiAgICAgICAgICBAZm9yIChoZWFkZXJHcm91cCBvZiB0YWJsZSgpLmdldEhlYWRlckdyb3VwcygpOyB0cmFjayBoZWFkZXJHcm91cC5pZClcbiAgICAgICAgICB7XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgQGZvciAoaGVhZGVyIG9mIGhlYWRlckdyb3VwLmhlYWRlcnM7IHRyYWNrIGhlYWRlci5pZCkge1xuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkYXRhdGFibGUtaGVhZGVyLScgKyBoZWFkZXIuaWRcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiXG4gICAgICAgICAgICAgICAgaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuc2l6ZVxuICAgICAgICAgICAgICAgICAgPyBoZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5zaXplICsgJ3B4J1xuICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIFthdHRyLmRhdGEtbm8tcmVzaXplXT1cIlxuICAgICAgICAgICAgICAgICFoZWFkZXIuY29sdW1uLmNvbHVtbkRlZi5lbmFibGVSZXNpemluZyA/ICd0cnVlJyA6IG51bGxcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgQGlmICghaGVhZGVyLmlzUGxhY2Vob2xkZXIpIHsgQGlmIChoZWFkZXIuY29sdW1uLmdldENhblNvcnQoKSkge1xuICAgICAgICAgICAgICA8bnYtdGFibGVoZWFkZXJcbiAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3NvcnREaXJlY3Rpb25dPVwiaGVhZGVyLmNvbHVtbi5nZXRJc1NvcnRlZCgpIHx8ICdub25lJ1wiXG4gICAgICAgICAgICAgICAgKHNvcnREaXJlY3Rpb25DaGFuZ2VkKT1cIlxuICAgICAgICAgICAgICAgICAgaGFuZGxlU29ydERpcmVjdGlvbkNoYW5nZWQoJGV2ZW50LCBoZWFkZXIpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGhlYWRlci5jb2x1bW4uY29sdW1uRGVmLmhlYWRlciB9fVxuICAgICAgICAgICAgICA8L252LXRhYmxlaGVhZGVyPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAge3sgaGVhZGVyLmNvbHVtbi5jb2x1bW5EZWYuaGVhZGVyIH19XG4gICAgICAgICAgICAgIH0gfVxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90aGVhZD5cblxuICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgQGZvciAocm93IG9mIHRhYmxlKCkuZ2V0Um93TW9kZWwoKS5yb3dzOyB0cmFjayByb3cuaWQ7IGxldCBpID0gJGluZGV4KVxuICAgICAgICAgIHtcbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIidkYXRhdGFibGUtcm93LScgKyBpXCJcbiAgICAgICAgICAgICN0YWJsZVJvd1xuICAgICAgICAgICAgW2F0dHIuZGF0YS1pcy1sYXN0XT1cIlxuICAgICAgICAgICAgICBpc0luZmluaXRlU2Nyb2xsKCkgJiYgaSA9PT0gdGFibGUoKS5nZXRSb3dNb2RlbCgpLnJvd3MubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgID8gJ3RydWUnXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBmb3IgKGNlbGwgb2Ygcm93LmdldFZpc2libGVDZWxscygpOyB0cmFjayBjZWxsLmlkKSB7XG4gICAgICAgICAgICA8dGQgW2F0dHIuZGF0YS10ZXN0aWRdPVwiJ2RhdGF0YWJsZS1jZWxsLScgKyBjZWxsLmNvbHVtbi5pZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKmZsZXhSZW5kZXI9XCJcbiAgICAgICAgICAgICAgICAgIGNlbGwuY29sdW1uLmNvbHVtbkRlZi5jZWxsO1xuICAgICAgICAgICAgICAgICAgcHJvcHM6IGNlbGwuZ2V0Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgICAgbGV0IGNlbGxDb250ZW50XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGNlbGxDb250ZW50IH19XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICAgIH1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgPC9udi10YWJsZT5cblxuICAgIDwhLS0gUmVuZGVyIHBhZ2luYXRpb24gaWYgY29uZmlndXJlZCAtLT5cbiAgICBAaWYgKHBhZ2luYXRpb25BUEkoKSkge1xuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHBhZ2luYXRpb25UZW1wbGF0ZSB8fCBudWxsO1xuICAgICAgICBjb250ZXh0OiB7ICRpbXBsaWNpdDogcGFnaW5hdGlvbkFQSSgpIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIH1cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTnZEYXRhdGFibGU8VD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvKiogQ29sdW1uIGRlZmluaXRpb25zICovXG4gIGNvbHVtbnMgPSBpbnB1dDxOdkRhdGF0YWJsZUNvbHVtbjxUPltdPihbXSk7XG4gIC8qKiBSb3cgZGF0YSAqL1xuICByb3dzID0gaW5wdXQ8VFtdPihbXSk7XG4gIC8qKlxuICAgKiBEYXRhIGhhbmRsaW5nIG1vZGUgZm9yIHNvcnRpbmcgYW5kIGZpbHRlcmluZyBvcGVyYXRpb25zLlxuICAgKiAtICdjbGllbnQnOiBBbGwgb3BlcmF0aW9ucyBoYW5kbGVkIGluIGJyb3dzZXIgKGRlZmF1bHQpXG4gICAqIC0gJ3NlcnZlcic6IE9wZXJhdGlvbnMgdHJpZ2dlciBjYWxsYmFja3MgZm9yIHNlcnZlci1zaWRlIGhhbmRsaW5nXG4gICAqL1xuICBtb2RlID0gaW5wdXQ8J2NsaWVudCcgfCAnc2VydmVyJz4oJ2NsaWVudCcpO1xuICAvKiogT3B0aW9uYWwgcGFnaW5hdGlvbiBjb25maWd1cmF0aW9uICovXG4gIHBhZ2luYXRpb24gPSBpbnB1dDxOdkRhdGF0YWJsZVBhZ2luYXRpb25Db25maWcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKiBPcHRpb25hbCBzb3J0aW5nIGNvbmZpZ3VyYXRpb24gKi9cbiAgc29ydGluZyA9IGlucHV0PE52RGF0YXRhYmxlU29ydGluZ0NvbmZpZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgLyoqIFNob3VsZCB0aGUgaGVhZGVyIHN0aWNrIHRvIHRoZSB0b3Agb2YgdGhlIHRhYmxlIHdoZW4gc2Nyb2xsaW5nPyAqL1xuICBzdGlja3lIZWFkZXIgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgLyoqIFRlbXBsYXRlIGZvciBjdXN0b20gcGFnaW5hdGlvbiBVSSAqL1xuICBAQ29udGVudENoaWxkKCdwYWdpbmF0aW9uVGVtcGxhdGUnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIHBhZ2luYXRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHtcbiAgICAkaW1wbGljaXQ6IE52RGF0YXRhYmxlUmVuZGVyUGFnaW5hdGlvbkFQSTtcbiAgfT47XG5cbiAgLyoqIENlbGwgdGVtcGxhdGVzIHByb3ZpZGVkIHZpYSBudkRhdGF0YWJsZUNlbGwgZGlyZWN0aXZlICovXG4gIEBDb250ZW50Q2hpbGRyZW4oTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlKVxuICBjZWxsVGVtcGxhdGVzPzogUXVlcnlMaXN0PE52RGF0YXRhYmxlQ2VsbERpcmVjdGl2ZTxULCBUW2tleW9mIFRdPj47XG5cbiAgLyoqIFNpZ25hbCB0byB0cmFjayBjZWxsIHRlbXBsYXRlcyBhcnJheSAqL1xuICBwcml2YXRlIGNlbGxUZW1wbGF0ZXNTaWduYWwgPSBzaWduYWw8XG4gICAgTnZEYXRhdGFibGVDZWxsRGlyZWN0aXZlPFQsIFRba2V5b2YgVF0+W11cbiAgPihbXSk7XG5cbiAgLyoqIE1hcCBvZiBmaWVsZCBuYW1lcyB0byBjZWxsIHRlbXBsYXRlcyAqL1xuICBwcml2YXRlIGNlbGxUZW1wbGF0ZU1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgVGVtcGxhdGVSZWY8TnZEYXRhdGFibGVDZWxsQ29udGV4dDxULCBUW2tleW9mIFRdPj5cbiAgICA+KCk7XG4gICAgdGhpcy5jZWxsVGVtcGxhdGVzU2lnbmFsKCkuZm9yRWFjaCgoZGlyZWN0aXZlKSA9PiB7XG4gICAgICBtYXAuc2V0KGRpcmVjdGl2ZS5udkRhdGF0YWJsZUNlbGwsIGRpcmVjdGl2ZS50ZW1wbGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG1hcDtcbiAgfSk7XG5cbiAgLyoqIFBhZ2luYXRpb24gc3RhdGUgZm9yIHNlcnZlciBtb2RlICovXG4gIHByaXZhdGUgcGFnaW5hdGlvblN0YXRlID0gc2lnbmFsPFBhZ2luYXRpb25TdGF0ZT4oe1xuICAgIHBhZ2VJbmRleDogMCxcbiAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0aW9uKCk/LmluaXRpYWxQYWdlU2l6ZSB8fCAxMCxcbiAgfSk7XG5cbiAgLyoqIFNvcnRpbmcgc3RhdGUgZm9yIGNvbnRyb2xsZWQgc29ydGluZyAoc2VydmVyIG1vZGUpICovXG4gIHByaXZhdGUgc29ydGluZ1N0YXRlID0gc2lnbmFsPFNvcnRpbmdTdGF0ZT4odGhpcy5zb3J0aW5nKCk/LnNvcnRTdGF0ZSB8fCBbXSk7XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0YWJsZSByb3dzIGZvciBpbmZpbml0ZSBzY3JvbGwgb2JzZXJ2ZXIgKi9cbiAgcHJpdmF0ZSB0YWJsZVJvd3MgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3RhYmxlUm93Jyk7XG5cbiAgLyoqIEludGVyc2VjdGlvbiBvYnNlcnZlciBmb3IgaW5maW5pdGUgc2Nyb2xsICovXG4gIHByaXZhdGUgb2JzZXJ2ZXI6IEludGVyc2VjdGlvbk9ic2VydmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEhlbHBlciB0byBjaGVjayBpZiB1c2luZyBpbmZpbml0ZSBzY3JvbGwgKi9cbiAgaXNJbmZpbml0ZVNjcm9sbCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFnaW5hdGlvbigpPy5pbmZpbml0ZSA9PT0gdHJ1ZSk7XG5cbiAgLyoqIENvbXB1dGVkIHRhYmxlIGNvbHVtbnMgd2l0aCBwcm9wZXIgdHlwaW5nIGFuZCBmaWx0ZXJpbmcuICovXG4gIHRhYmxlQ29sdW1ucyA9IGNvbXB1dGVkPENvbHVtbkRlZjxULCBUW2tleW9mIFRdPltdPigoKSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGVNYXAgPSB0aGlzLmNlbGxUZW1wbGF0ZU1hcCgpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29sdW1ucygpXG4gICAgICAuZmlsdGVyKChjb2wpID0+ICFjb2wuaGlkZGVuKVxuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIC8vIFNoYXJlZCBjZWxsIHJlbmRlcmVyXG4gICAgICAgIGNvbnN0IGNlbGxSZW5kZXJlciA9IChjb250ZXh0OiBDZWxsQ29udGV4dDxULCBUW2tleW9mIFRdPikgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IFN0cmluZyhjb2wuZmllbGQpO1xuICAgICAgICAgIGNvbnN0IGNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlTWFwLmdldChmaWVsZE5hbWUpO1xuXG4gICAgICAgICAgLy8gUHJpb3JpdHk6IHRlbXBsYXRlID4gcmVuZGVyQ2VsbCA+IGRlZmF1bHRcbiAgICAgICAgICBpZiAoY2VsbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAvLyBSZXR1cm4gVGVtcGxhdGVSZWYgZGlyZWN0bHkgLSBnZXRWYWx1ZSgpIHJldHVybnMgZm9ybWF0dGVkIHZhbHVlXG4gICAgICAgICAgICByZXR1cm4gY2VsbFRlbXBsYXRlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEZhbGwgYmFjayB0byByZW5kZXJDZWxsIGlmIHByb3ZpZGVkXG4gICAgICAgICAgaWYgKGNvbC5yZW5kZXJDZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sLnJlbmRlckNlbGwoY29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRGVmYXVsdDoganVzdCByZXR1cm4gdGhlIHZhbHVlIChmb3JtYXR0ZWQgaWYgdmFsdWVGb3JtYXR0ZXIgd2FzIHVzZWQpXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZ2V0VmFsdWUoKTtcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBjb2x1bW5EZWY6IENvbHVtbkRlZjxULCBUW2tleW9mIFRdPiA9IHtcbiAgICAgICAgICBhY2Nlc3NvcktleTogY29sLmZpZWxkLFxuICAgICAgICAgIGFjY2Vzc29yRm46IGNvbC52YWx1ZUZvcm1hdHRlclxuICAgICAgICAgICAgPyAocm93OiBUKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3dbY29sLmZpZWxkXTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29sLnZhbHVlRm9ybWF0dGVyISh7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogcmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBoZWFkZXI6IGNvbC5oZWFkZXJOYW1lIHx8IFN0cmluZyhjb2wuZmllbGQpLFxuICAgICAgICAgIHNpemU6IGNvbC53aWR0aCxcbiAgICAgICAgICBlbmFibGVSZXNpemluZzogY29sLnJlc2l6YWJsZSA/PyB0cnVlLFxuICAgICAgICAgIC8vIFNvcnRpbmcgY29uZmlndXJhdGlvblxuICAgICAgICAgIGVuYWJsZVNvcnRpbmc6IHRoaXMuc29ydGluZygpID8gY29sLnNvcnRhYmxlID8/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICBjZWxsOiBjZWxsUmVuZGVyZXIsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQWRkIG9wdGlvbmFsIHNvcnRpbmcgcHJvcGVydGllcyBvbmx5IGlmIGRlZmluZWRcbiAgICAgICAgaWYgKGNvbC5zb3J0aW5nRm4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBUYW5TdGFjayB0eXBpbmcgaXMgc3RyaWN0IGJ1dCB0aGlzIHdvcmtzIGF0IHJ1bnRpbWVcbiAgICAgICAgICBjb2x1bW5EZWYuc29ydGluZ0ZuID0gY29sLnNvcnRpbmdGbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sLnNvcnREZXNjRmlyc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNvbHVtbkRlZi5zb3J0RGVzY0ZpcnN0ID0gY29sLnNvcnREZXNjRmlyc3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5pbnZlcnRTb3J0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb2x1bW5EZWYuaW52ZXJ0U29ydGluZyA9IGNvbC5pbnZlcnRTb3J0aW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuc29ydFVuZGVmaW5lZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgY29sdW1uRGVmLnNvcnRVbmRlZmluZWQgPSBjb2wuc29ydFVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2x1bW5EZWY7XG4gICAgICB9KTtcbiAgfSk7XG5cbiAgLyoqIFRhblN0YWNrIHRhYmxlIGluc3RhbmNlIHdpdGggU2lnbmFscyAqL1xuICBwcml2YXRlIHRhYmxlSW5zdGFuY2UgPSBjcmVhdGVBbmd1bGFyVGFibGUoKCkgPT4ge1xuICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICBjb25zdCBzb3J0aW5nQ29uZmlnID0gdGhpcy5zb3J0aW5nKCk7XG4gICAgY29uc3QgY29tcG9uZW50TW9kZSA9IHRoaXMubW9kZSgpO1xuICAgIGNvbnN0IGlzU2VydmVyTW9kZSA9IGNvbXBvbmVudE1vZGUgPT09ICdzZXJ2ZXInO1xuICAgIGNvbnN0IGlzSW5maW5pdGUgPSBwYWdpbmF0aW9uQ29uZmlnPy5pbmZpbml0ZSA9PT0gdHJ1ZTtcblxuICAgIC8vIERldGVybWluZSBiYXNlIHRhYmxlIGNvbmZpZ3VyYXRpb24gd2l0aCBzb3J0aW5nXG4gICAgY29uc3QgZ2V0QmFzZVRhYmxlQ29uZmlnID0gKCkgPT4ge1xuICAgICAgY29uc3QgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgZGF0YTogdGhpcy5yb3dzKCksXG4gICAgICAgIGNvbHVtbnM6IHRoaXMudGFibGVDb2x1bW5zKCksXG4gICAgICAgIGdldENvcmVSb3dNb2RlbDogZ2V0Q29yZVJvd01vZGVsKCksXG4gICAgICAgIC8vIFNvcnRpbmcgY29uZmlndXJhdGlvbiAtIHVzZXMgdG9wLWxldmVsIG1vZGVcbiAgICAgICAgLi4uKHNvcnRpbmdDb25maWcgJiYge1xuICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICBzb3J0aW5nOlxuICAgICAgICAgICAgICBpc1NlcnZlck1vZGUgJiYgc29ydGluZ0NvbmZpZy5zb3J0U3RhdGVcbiAgICAgICAgICAgICAgICA/IHNvcnRpbmdDb25maWcuc29ydFN0YXRlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNvcnRpbmdTdGF0ZSgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Tb3J0aW5nQ2hhbmdlOiAoXG4gICAgICAgICAgICB1cGRhdGVyT3JWYWx1ZTpcbiAgICAgICAgICAgICAgfCBTb3J0aW5nU3RhdGVcbiAgICAgICAgICAgICAgfCAoKG9sZDogU29ydGluZ1N0YXRlKSA9PiBTb3J0aW5nU3RhdGUpLFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNvcnQgPVxuICAgICAgICAgICAgICBpc1NlcnZlck1vZGUgJiYgc29ydGluZ0NvbmZpZy5zb3J0U3RhdGVcbiAgICAgICAgICAgICAgICA/IHNvcnRpbmdDb25maWcuc29ydFN0YXRlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNvcnRpbmdTdGF0ZSgpO1xuXG4gICAgICAgICAgICBjb25zdCBuZXdTb3J0ID1cbiAgICAgICAgICAgICAgdHlwZW9mIHVwZGF0ZXJPclZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgPyB1cGRhdGVyT3JWYWx1ZShjdXJyZW50U29ydClcbiAgICAgICAgICAgICAgICA6IHVwZGF0ZXJPclZhbHVlO1xuXG4gICAgICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGludGVybmFsIHN0YXRlIGZvciByZWFjdGl2aXR5XG4gICAgICAgICAgICB0aGlzLnNvcnRpbmdTdGF0ZS5zZXQobmV3U29ydCk7XG5cbiAgICAgICAgICAgIC8vIEZvciBzZXJ2ZXItc2lkZSBzb3J0aW5nLCBhbHNvIGNhbGwgdGhlIGNhbGxiYWNrXG4gICAgICAgICAgICBpZiAoaXNTZXJ2ZXJNb2RlICYmIHNvcnRpbmdDb25maWcub25Tb3J0aW5nQ2hhbmdlKSB7XG4gICAgICAgICAgICAgIHNvcnRpbmdDb25maWcub25Tb3J0aW5nQ2hhbmdlKG5ld1NvcnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWFudWFsU29ydGluZzogaXNTZXJ2ZXJNb2RlLFxuICAgICAgICAgIGVuYWJsZVNvcnRpbmc6IHRydWUsXG4gICAgICAgICAgZW5hYmxlTXVsdGlTb3J0OiBzb3J0aW5nQ29uZmlnLmVuYWJsZU11bHRpU29ydCA/PyBmYWxzZSxcbiAgICAgICAgICBlbmFibGVTb3J0aW5nUmVtb3ZhbDogc29ydGluZ0NvbmZpZy5lbmFibGVTb3J0aW5nUmVtb3ZhbCA/PyB0cnVlLFxuICAgICAgICAgIG1heE11bHRpU29ydENvbENvdW50OiBzb3J0aW5nQ29uZmlnLm1heE11bHRpU29ydENvbENvdW50LFxuICAgICAgICAgIHNvcnREZXNjRmlyc3Q6IHNvcnRpbmdDb25maWcuc29ydERlc2NGaXJzdCA/PyBmYWxzZSxcbiAgICAgICAgICAvLyBXaGVuIG11bHRpLXNvcnQgaXMgZW5hYmxlZCwgdHJlYXQgYWxsIGNsaWNrcyBhcyBtdWx0aS1zb3J0IGV2ZW50c1xuICAgICAgICAgIGlzTXVsdGlTb3J0RXZlbnQ6IHNvcnRpbmdDb25maWcuZW5hYmxlTXVsdGlTb3J0XG4gICAgICAgICAgICA/ICgpID0+IHRydWVcbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGdldFNvcnRlZFJvd01vZGVsOiAhaXNTZXJ2ZXJNb2RlID8gZ2V0U29ydGVkUm93TW9kZWwoKSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSksXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYmFzZUNvbmZpZztcbiAgICB9O1xuXG4gICAgLy8gSW5maW5pdGUgc2Nyb2xsIG1vZGUgKHJlcXVpcmVzIHNlcnZlciBtb2RlKVxuICAgIGlmIChpc0luZmluaXRlKSB7XG4gICAgICAvLyBObyBwYWdpbmF0aW9uIHJvdyBtb2RlbCBmb3IgaW5maW5pdGUgc2Nyb2xsIC0gc2ltcGxlIGNvbmZpZ1xuICAgICAgcmV0dXJuIGdldEJhc2VUYWJsZUNvbmZpZygpO1xuICAgIH1cblxuICAgIC8vIE5vIHBhZ2luYXRpb24gY29uZmlndXJlZFxuICAgIGlmICghcGFnaW5hdGlvbkNvbmZpZykge1xuICAgICAgcmV0dXJuIGdldEJhc2VUYWJsZUNvbmZpZygpO1xuICAgIH1cblxuICAgIC8vIENsaWVudC1zaWRlIHBhZ2luYXRpb25cbiAgICBpZiAoIWlzU2VydmVyTW9kZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZ2V0QmFzZVRhYmxlQ29uZmlnKCksXG4gICAgICAgIGdldFBhZ2luYXRpb25Sb3dNb2RlbDogZ2V0UGFnaW5hdGlvblJvd01vZGVsKCksXG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgIHBhZ2VTaXplOiBwYWdpbmF0aW9uQ29uZmlnLmluaXRpYWxQYWdlU2l6ZSB8fCAxMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTZXJ2ZXItc2lkZSBwYWdpbmF0aW9uIC0gbWFudWFsIHBhZ2luYXRpb24gd2l0aCByZWFjdGl2ZSBzdGF0ZVxuICAgIGNvbnN0IGJhc2VDb25maWcgPSBnZXRCYXNlVGFibGVDb25maWcoKTtcbiAgICBjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnaW5hdGlvblN0YXRlKCkucGFnZVNpemU7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmJhc2VDb25maWcsXG4gICAgICBtYW51YWxQYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgcGFnZUNvdW50OlxuICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUGFnZUNvdW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHBhZ2luYXRpb25Db25maWcudG90YWxQYWdlQ291bnRcbiAgICAgICAgICA6IHBhZ2luYXRpb25Db25maWcudG90YWxSb3dDb3VudCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IE1hdGguY2VpbChwYWdpbmF0aW9uQ29uZmlnLnRvdGFsUm93Q291bnQgLyBwYWdlU2l6ZSlcbiAgICAgICAgICAgIDogLTEsXG4gICAgICBzdGF0ZToge1xuICAgICAgICBwYWdpbmF0aW9uOiB0aGlzLnBhZ2luYXRpb25TdGF0ZSgpLFxuICAgICAgICAuLi4oYmFzZUNvbmZpZy5zdGF0ZSAmJiB7IHNvcnRpbmc6IGJhc2VDb25maWcuc3RhdGUuc29ydGluZyB9KSxcbiAgICAgIH0sXG4gICAgICBvblBhZ2luYXRpb25DaGFuZ2U6IChcbiAgICAgICAgdXBkYXRlck9yVmFsdWU6XG4gICAgICAgICAgfCBQYWdpbmF0aW9uU3RhdGVcbiAgICAgICAgICB8ICgob2xkOiBQYWdpbmF0aW9uU3RhdGUpID0+IFBhZ2luYXRpb25TdGF0ZSksXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPVxuICAgICAgICAgIHR5cGVvZiB1cGRhdGVyT3JWYWx1ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyB1cGRhdGVyT3JWYWx1ZSh0aGlzLnBhZ2luYXRpb25TdGF0ZSgpKVxuICAgICAgICAgICAgOiB1cGRhdGVyT3JWYWx1ZTtcblxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TdGF0ZS5zZXQobmV3U3RhdGUpO1xuXG4gICAgICAgIC8vIENhbGwgdXNlcidzIGNhbGxiYWNrIGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uXG4gICAgICAgIGlmIChwYWdpbmF0aW9uQ29uZmlnLm9uUGFnaW5hdGlvbkNoYW5nZSkge1xuICAgICAgICAgIHBhZ2luYXRpb25Db25maWcub25QYWdpbmF0aW9uQ2hhbmdlKHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogbmV3U3RhdGUucGFnZUluZGV4LFxuICAgICAgICAgICAgcGFnZVNpemU6IG5ld1N0YXRlLnBhZ2VTaXplLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKiBQdWJsaWMgZ2V0dGVyIGZvciB0YWJsZSBpbnN0YW5jZS4gKi9cbiAgdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVJbnN0YW5jZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBzb3J0IGRpcmVjdGlvbiBjaGFuZ2UgZnJvbSB0YWJsZSBoZWFkZXJcbiAgICogQHBhcmFtIHtFdmVudH0gZXZlbnQgVGhlIHNvcnQgZGlyZWN0aW9uIGNoYW5nZSBldmVudCBvciBkaXJlY3Rpb24gc3RyaW5nXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBoZWFkZXIgVGhlIHRhYmxlIGhlYWRlciBvYmplY3RcbiAgICovXG4gIGhhbmRsZVNvcnREaXJlY3Rpb25DaGFuZ2VkKFxuICAgIGV2ZW50OiBFdmVudCB8IEN1c3RvbUV2ZW50PHN0cmluZz4gfCBzdHJpbmcsXG4gICAgaGVhZGVyOiB7XG4gICAgICBjb2x1bW46IHtcbiAgICAgICAgY2xlYXJTb3J0aW5nOiAoKSA9PiB2b2lkO1xuICAgICAgICB0b2dnbGVTb3J0aW5nOiAoZGVzYz86IGJvb2xlYW4sIG11bHRpPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgICAgIH07XG4gICAgfSxcbiAgKSB7XG4gICAgLy8gRXh0cmFjdCBkaXJlY3Rpb24gZnJvbSBldmVudCBvciB1c2UgZGlyZWN0bHkgaWYgc3RyaW5nXG4gICAgbGV0IGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCAnbm9uZSc7XG5cbiAgICBpZiAodHlwZW9mIGV2ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgZGlyZWN0aW9uID0gZXZlbnQgYXMgJ2FzYycgfCAnZGVzYycgfCAnbm9uZSc7XG4gICAgfSBlbHNlIGlmICgnZGV0YWlsJyBpbiBldmVudCAmJiB0eXBlb2YgZXZlbnQuZGV0YWlsID09PSAnc3RyaW5nJykge1xuICAgICAgZGlyZWN0aW9uID0gZXZlbnQuZGV0YWlsIGFzICdhc2MnIHwgJ2Rlc2MnIHwgJ25vbmUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGYWxsYmFjayAtIHNob3VsZG4ndCBoYXBwZW4gYnV0IGhhbmRsZSBncmFjZWZ1bGx5XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdVbmV4cGVjdGVkIGV2ZW50IHR5cGUgaW4gaGFuZGxlU29ydERpcmVjdGlvbkNoYW5nZWQ6JyxcbiAgICAgICAgZXZlbnQsXG4gICAgICApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNvcnRpbmdDb25maWcgPSB0aGlzLnNvcnRpbmcoKTtcblxuICAgIC8vIENoZWNrIGlmIG11bHRpLXNvcnQgaXMgZW5hYmxlZFxuICAgIGNvbnN0IGlzTXVsdGlTb3J0ID0gc29ydGluZ0NvbmZpZz8uZW5hYmxlTXVsdGlTb3J0ID8/IGZhbHNlO1xuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ25vbmUnKSB7XG4gICAgICAvLyBDbGVhciB0aGlzIGNvbHVtbidzIHNvcnRcbiAgICAgIGhlYWRlci5jb2x1bW4uY2xlYXJTb3J0aW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRvZ2dsZSBzb3J0IC0gVGFuU3RhY2sgd2lsbCBoYW5kbGUgdGhlIGxvZ2ljIGludGVybmFsbHlcbiAgICAgIGhlYWRlci5jb2x1bW4udG9nZ2xlU29ydGluZyhkaXJlY3Rpb24gPT09ICdkZXNjJywgaXNNdWx0aVNvcnQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBCdWlsZCBwYWdpbmF0aW9uIEFQSSBmb3IgdGVtcGxhdGUgKi9cbiAgcGFnaW5hdGlvbkFQSSA9IGNvbXB1dGVkPE52RGF0YXRhYmxlUmVuZGVyUGFnaW5hdGlvbkFQSSB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG4gICAgaWYgKCFwYWdpbmF0aW9uQ29uZmlnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wb25lbnRNb2RlID0gdGhpcy5tb2RlKCk7XG4gICAgY29uc3QgaXNTZXJ2ZXJNb2RlID0gY29tcG9uZW50TW9kZSA9PT0gJ3NlcnZlcic7XG4gICAgY29uc3QgaXNJbmZpbml0ZSA9IHBhZ2luYXRpb25Db25maWcuaW5maW5pdGUgPT09IHRydWU7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlKCk7XG4gICAgY29uc3QgdGFibGVQYWdpbmF0aW9uU3RhdGUgPSB0YWJsZS5nZXRTdGF0ZSgpLnBhZ2luYXRpb247XG4gICAgY29uc3QgcGFnZUNvdW50ID0gdGFibGUuZ2V0UGFnZUNvdW50KCk7XG4gICAgY29uc3Qgcm93Q291bnQgPSBpc1NlcnZlck1vZGVcbiAgICAgID8gcGFnaW5hdGlvbkNvbmZpZy50b3RhbFJvd0NvdW50IHx8IHRoaXMucm93cygpLmxlbmd0aFxuICAgICAgOiB0aGlzLnJvd3MoKS5sZW5ndGg7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFnZUluZGV4OiB0YWJsZVBhZ2luYXRpb25TdGF0ZS5wYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogdGFibGVQYWdpbmF0aW9uU3RhdGUucGFnZVNpemUsXG4gICAgICBwYWdlQ291bnQsXG4gICAgICByb3dDb3VudCxcbiAgICAgIGZpcnN0UGFnZTogKCkgPT4gdGFibGUuc2V0UGFnZUluZGV4KDApLFxuICAgICAgcHJldmlvdXNQYWdlOiAoKSA9PiB0YWJsZS5wcmV2aW91c1BhZ2UoKSxcbiAgICAgIG5leHRQYWdlOiAoKSA9PiB0YWJsZS5uZXh0UGFnZSgpLFxuICAgICAgbGFzdFBhZ2U6ICgpID0+IHRhYmxlLnNldFBhZ2VJbmRleChwYWdlQ291bnQgLSAxKSxcbiAgICAgIHNldFBhZ2VJbmRleDogKGluZGV4OiBudW1iZXIpID0+IHRhYmxlLnNldFBhZ2VJbmRleChpbmRleCksXG4gICAgICBzZXRQYWdlU2l6ZTogKHNpemU6IG51bWJlcikgPT4gdGFibGUuc2V0UGFnZVNpemUoc2l6ZSksXG4gICAgICBjYW5QcmV2aW91c1BhZ2U6IHRhYmxlLmdldENhblByZXZpb3VzUGFnZSgpLFxuICAgICAgY2FuTmV4dFBhZ2U6IHRhYmxlLmdldENhbk5leHRQYWdlKCksXG4gICAgICBpc0xvYWRpbmc6IGlzSW5maW5pdGUgPyBwYWdpbmF0aW9uQ29uZmlnLmlzTG9hZGluZyA6IHVuZGVmaW5lZCxcbiAgICAgIGhhc01vcmU6IGlzSW5maW5pdGUgPyBwYWdpbmF0aW9uQ29uZmlnLmhhc01vcmUgOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gVmFsaWRhdGUgaW5maW5pdGUgc2Nyb2xsIHJlcXVpcmVzIHNlcnZlciBtb2RlXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHBhZ2luYXRpb25Db25maWcgPSB0aGlzLnBhZ2luYXRpb24oKTtcbiAgICAgIGNvbnN0IGNvbXBvbmVudE1vZGUgPSB0aGlzLm1vZGUoKTtcblxuICAgICAgaWYgKHBhZ2luYXRpb25Db25maWc/LmluZmluaXRlID09PSB0cnVlICYmIGNvbXBvbmVudE1vZGUgIT09ICdzZXJ2ZXInKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnW052RGF0YXRhYmxlXSBwYWdpbmF0aW9uLmluZmluaXRlPXRydWUgcmVxdWlyZXMgbW9kZT1cInNlcnZlclwiLiAnICtcbiAgICAgICAgICAgICdJbmZpbml0ZSBzY3JvbGwgcmVsaWVzIG9uIHNlcnZlci1zaWRlIGRhdGEgbG9hZGluZy4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gU2V0IHVwIGludGVyc2VjdGlvbiBvYnNlcnZlciBmb3IgaW5maW5pdGUgc2Nyb2xsXG4gICAgZWZmZWN0KFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYWdpbmF0aW9uQ29uZmlnID0gdGhpcy5wYWdpbmF0aW9uKCk7XG4gICAgICAgIGNvbnN0IHJvd3MgPSB0aGlzLnJvd3MoKTsgLy8gVHJhY2sgcm93cyBjaGFuZ2VzXG4gICAgICAgIGNvbnN0IGlzSW5maW5pdGUgPSBwYWdpbmF0aW9uQ29uZmlnPy5pbmZpbml0ZSA9PT0gdHJ1ZTtcblxuICAgICAgICAvLyBDbGVhbiB1cCBleGlzdGluZyBvYnNlcnZlclxuICAgICAgICBpZiAodGhpcy5vYnNlcnZlcikge1xuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT25seSBzZXQgdXAgb2JzZXJ2ZXIgZm9yIGluZmluaXRlIHNjcm9sbCBtb2RlXG4gICAgICAgIGlmICghaXNJbmZpbml0ZSB8fCByb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSBET00gaXMgdXBkYXRlZFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSBwYWdpbmF0aW9uQ29uZmlnLmxvYWRNb3JlVGhyZXNob2xkIHx8IDUwMDtcblxuICAgICAgICAgIC8vIEZpbmQgdGhlIGxhc3Qgcm93IGVsZW1lbnRcbiAgICAgICAgICBjb25zdCB0YWJsZVJvd0VsZW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICdbZGF0YS1pcy1sYXN0PVwidHJ1ZVwiXScsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBsYXN0Um93RWxlbWVudCA9IHRhYmxlUm93RWxlbWVudHNbdGFibGVSb3dFbGVtZW50cy5sZW5ndGggLSAxXTtcblxuICAgICAgICAgIGlmICghbGFzdFJvd0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKFxuICAgICAgICAgICAgKGVudHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZW50cnkuaXNJbnRlcnNlY3RpbmcgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLmhhc01vcmUgJiZcbiAgICAgICAgICAgICAgICAhcGFnaW5hdGlvbkNvbmZpZy5pc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uQ29uZmlnLm9uTG9hZE1vcmVcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbkNvbmZpZy5vbkxvYWRNb3JlKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJvb3RNYXJnaW46IGAke3RocmVzaG9sZH1weGAsXG4gICAgICAgICAgICAgIHJvb3Q6IG51bGwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUobGFzdFJvd0VsZW1lbnQpO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTeW5jIGNlbGwgdGVtcGxhdGVzIFF1ZXJ5TGlzdCB0byBzaWduYWxcbiAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGVzKSB7XG4gICAgICB0aGlzLmNlbGxUZW1wbGF0ZXNTaWduYWwuc2V0KHRoaXMuY2VsbFRlbXBsYXRlcy50b0FycmF5KCkpO1xuXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gY2hhbmdlcyBpbiB0aGUgUXVlcnlMaXN0XG4gICAgICB0aGlzLmNlbGxUZW1wbGF0ZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jZWxsVGVtcGxhdGVzKSB7XG4gICAgICAgICAgdGhpcy5jZWxsVGVtcGxhdGVzU2lnbmFsLnNldCh0aGlzLmNlbGxUZW1wbGF0ZXMudG9BcnJheSgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgdGhpcy5vYnNlcnZlciA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogVVRJTFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cm9uZ2x5LXR5cGVkIGNvbHVtbiBmYWN0b3J5IGZvciBhIGdpdmVuIHJvdyB0eXBlLlxuICpcbiAqIEB0ZW1wbGF0ZSBSb3cgVGhlIHJvdyBkYXRhIHR5cGUgKGUuZy4sIGBQcm9kdWN0YClcbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IEEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgY29sdW1uIGRlZmluaXRpb24gYW5kIGluZmVyczpcbiAqIC0gYEtgIGFzIHRoZSBmaWVsZCBrZXkgKGBrZXlvZiBSb3dgKVxuICogLSBgRmAgYXMgdGhlIHJldHVybiB0eXBlIG9mIGB2YWx1ZUZvcm1hdHRlcmAgKGRlZmF1bHRzIHRvIGBSb3dbS11gKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogLy8gRGVmaW5lIHlvdXIgcm93IHR5cGVcbiAqIGludGVyZmFjZSBQcm9kdWN0IHtcbiAqICAgbmFtZTogc3RyaW5nO1xuICogICBwcmljZTogbnVtYmVyO1xuICogfVxuICpcbiAqIGNvbnN0IGNvbCA9IG1ha2VDb2x1bW48UHJvZHVjdD4oKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VDb2x1bW48Um93PigpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlZmluZTxLIGV4dGVuZHMga2V5b2YgUm93LCBGID0gUm93W0tdPihcbiAgICBjb2w6IE52RGF0YXRhYmxlQ29sdW1uPFJvdywgSywgRj4sXG4gICkge1xuICAgIHJldHVybiBjb2wgYXMgdW5rbm93biBhcyBOdkRhdGF0YWJsZUNvbHVtbjxSb3c+O1xuICB9O1xufVxuXG5leHBvcnQgeyBmbGV4UmVuZGVyQ29tcG9uZW50IGFzIG52RGF0YXRhYmxlUmVuZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRhdGFibGUudXRpbHMnO1xuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFRZUEVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuZXhwb3J0IHR5cGUgeyBDZWxsQ29udGV4dCBhcyBOdkRhdGF0YWJsZUNlbGxDb250ZXh0IH07XG5cbi8qKiBDb2x1bW4gZGVmaW5pdGlvbiBmb3IgTnZEYXRhdGFibGUuICovXG5leHBvcnQgaW50ZXJmYWNlIE52RGF0YXRhYmxlQ29sdW1uPFxuICBSb3csXG4gIEsgZXh0ZW5kcyBrZXlvZiBSb3cgPSBrZXlvZiBSb3csXG4gIEYgPSBSb3dbS10sXG4+IHtcbiAgLyoqIEZpZWxkIG5hbWUgZnJvbSByb3cgZGF0YSAqL1xuICBmaWVsZDogSztcbiAgLyoqIERpc3BsYXkgbmFtZSBmb3IgY29sdW1uIGhlYWRlciAqL1xuICBoZWFkZXJOYW1lPzogc3RyaW5nO1xuICAvKiogQ29sdW1uIHdpZHRoIGluIHBpeGVscyAqL1xuICB3aWR0aD86IG51bWJlcjtcbiAgLyoqIFdoZXRoZXIgY29sdW1uIGlzIHJlc2l6YWJsZSAqL1xuICByZXNpemFibGU/OiBib29sZWFuO1xuICAvKiogV2hldGhlciBjb2x1bW4gaXMgaGlkZGVuICovXG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gdGhlIHJhdyB2YWx1ZSBiZWZvcmUgcmVuZGVyaW5nLiBSZWNlaXZlcyB0aGUgY2VsbCB2YWx1ZSBhbmQgZnVsbCByb3cgb2JqZWN0LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZm9ybWF0dGluZyBkYXRlcywgY29udmVydGluZyBhcnJheXMgdG8gc3RyaW5ncywgYWNjZXNzaW5nIG5lc3RlZCBvYmplY3RzLCBldGMuXG4gICAqIFRoZSB0cmFuc2Zvcm1lZCB2YWx1ZSBpcyB0aGVuIHBhc3NlZCB0byByZW5kZXJDZWxsIG9yIHRlbXBsYXRlcy5cbiAgICovXG4gIHZhbHVlRm9ybWF0dGVyPzogKHBhcmFtczogTnZUYWJsZVZhbHVlRm9ybWF0dGVyUGFyYW1zPFJvdywgUm93W0tdLCBLPikgPT4gRjtcbiAgLyoqXG4gICAqIEN1c3RvbSBjZWxsIHJlbmRlcmVyIGZ1bmN0aW9uIHRoYXQgY2FuIHJldHVybiBlaXRoZXIgYSBzdHJpbmcgb3IgQW5ndWxhciBUZW1wbGF0ZVJlZi5cbiAgICogVXNlIGAkaW1wbGljaXRgIGluIHlvdXIgdGVtcGxhdGUgdG8gcmVjZWl2ZSB0aGUgQ2VsbENvbnRleHQuXG4gICAqIE5vdGU6IElmIHZhbHVlRm9ybWF0dGVyIGlzIHByb3ZpZGVkLCByZW5kZXJDZWxsIHJlY2VpdmVzIHRoZSBmb3JtYXR0ZWQgdmFsdWUuXG4gICAqL1xuICByZW5kZXJDZWxsPzogKGNvbnRleHQ6IENlbGxDb250ZXh0PFJvdywgRj4pID0+XG4gICAgfCBzdHJpbmdcbiAgICB8IEZsZXhSZW5kZXJDb21wb25lbnRcbiAgICB8IFRlbXBsYXRlUmVmPHtcbiAgICAgICAgJGltcGxpY2l0OiBDZWxsQ29udGV4dDxSb3csIEY+O1xuICAgICAgfT47XG4gIC8qKiBFbmFibGUvZGlzYWJsZSBzb3J0aW5nIGZvciB0aGlzIGNvbHVtbiAqL1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIC8qKiBDdXN0b20gc29ydGluZyBmdW5jdGlvbiBvciBidWlsdC1pbiBmdW5jdGlvbiBuYW1lICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHNvcnRpbmdGbj86ICgocm93QTogYW55LCByb3dCOiBhbnksIGNvbHVtbklkOiBzdHJpbmcpID0+IG51bWJlcikgfCBzdHJpbmc7XG4gIC8qKiBTdGFydCB3aXRoIGRlc2NlbmRpbmcgc29ydCBmb3IgdGhpcyBjb2x1bW4gKi9cbiAgc29ydERlc2NGaXJzdD86IGJvb2xlYW47XG4gIC8qKiBJbnZlcnQgdGhlIHNvcnQgb3JkZXIgKHVzZWZ1bCBmb3IgcmFua2luZ3MpICovXG4gIGludmVydFNvcnRpbmc/OiBib29sZWFuO1xuICAvKiogV2hlcmUgdG8gcGxhY2UgdW5kZWZpbmVkIHZhbHVlcyBpbiBzb3J0ICovXG4gIHNvcnRVbmRlZmluZWQ/OiAnZmlyc3QnIHwgJ2xhc3QnIHwgZmFsc2UgfCAtMSB8IDE7XG59XG5cbi8qKiBQYXJhbWV0ZXJzIGZvciBjdXN0b20gY2VsbCByZW5kZXJpbmcgZnVuY3Rpb24uICovXG5leHBvcnQgaW50ZXJmYWNlIE52VGFibGVSZW5kZXJDZWxsUGFyYW1zPFJvdywgVmFsdWUsIEZpZWxkPiB7XG4gIC8qKiBDZWxsIHZhbHVlICovXG4gIHZhbHVlOiBWYWx1ZSB8IE5vSW5mZXI8VmFsdWU+O1xuICAvKiogUm93IGRhdGEgKi9cbiAgcm93OiBSb3c7XG4gIC8qKiBGaWVsZCBuYW1lICovXG4gIGZpZWxkOiBGaWVsZDtcbiAgLyoqIFJvdyBpbmRleCAqL1xuICByb3dJbmRleDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHZhbHVlRm9ybWF0dGVyIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE52VGFibGVWYWx1ZUZvcm1hdHRlclBhcmFtczxSb3csIFZhbHVlLCBGaWVsZD4ge1xuICAvKiogQ2VsbCBvcmlnaW5hbCB2YWx1ZSAqL1xuICB2YWx1ZTogVmFsdWU7XG4gIC8qKiBSb3cgZGF0YSAqL1xuICByb3c6IFJvdztcbiAgLyoqIEZpZWxkIG5hbWUgKi9cbiAgZmllbGQ6IEZpZWxkO1xufVxuXG4vKipcbiAqIFBhZ2luYXRpb24gY29uZmlndXJhdGlvbiBmb3IgTnZEYXRhdGFibGUuXG4gKiBUaGUgcGFnaW5hdGlvbiBiZWhhdmlvciAoY2xpZW50IHZzIHNlcnZlcikgaXMgZGVyaXZlZCBmcm9tIHRoZSB0b3AtbGV2ZWwgYG1vZGVgIHByb3AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnZEYXRhdGFibGVQYWdpbmF0aW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIEVuYWJsZSBpbmZpbml0ZSBzY3JvbGwgbW9kZS5cbiAgICogV2hlbiB0cnVlLCByZXF1aXJlcyB0aGUgY29tcG9uZW50J3MgdG9wLWxldmVsIGBtb2RlYCB0byBiZSBzZXQgdG8gJ3NlcnZlcicuXG4gICAqIERhdGEgaXMgbG9hZGVkIGluY3JlbWVudGFsbHkgYXMgdGhlIHVzZXIgc2Nyb2xscy5cbiAgICovXG4gIGluZmluaXRlPzogYm9vbGVhbjtcbiAgLyoqIEluaXRpYWwgcGFnZSBzaXplIChkZWZhdWx0OiAxMCkgKi9cbiAgaW5pdGlhbFBhZ2VTaXplPzogbnVtYmVyO1xuICAvKiogQXZhaWxhYmxlIHBhZ2Ugc2l6ZSBvcHRpb25zIChkZWZhdWx0OiBbMTAsIDIwLCA1MCwgMTAwXSkgKi9cbiAgcGFnZVNpemVPcHRpb25zPzogbnVtYmVyW107XG5cbiAgLy8gU2VydmVyLXNpZGUgKGJ1dHRvbnMpIHNwZWNpZmljIHByb3BlcnRpZXNcbiAgLyoqIFRvdGFsIG51bWJlciBvZiByb3dzIChmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbikgKi9cbiAgdG90YWxSb3dDb3VudD86IG51bWJlcjtcbiAgLyoqIFRvdGFsIG51bWJlciBvZiBwYWdlcyAoZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24pICovXG4gIHRvdGFsUGFnZUNvdW50PzogbnVtYmVyO1xuICAvKiogQ2FsbGJhY2sgd2hlbiBwYWdpbmF0aW9uIHN0YXRlIGNoYW5nZXMgKGZvciBzZXJ2ZXItc2lkZSBwYWdpbmF0aW9uKSAqL1xuICBvblBhZ2luYXRpb25DaGFuZ2U/OiAoc3RhdGU6IHtcbiAgICAvKiogQ3VycmVudCBwYWdlIGluZGV4ICovXG4gICAgcGFnZUluZGV4OiBudW1iZXI7XG4gICAgLyoqIEN1cnJlbnQgcGFnZSBzaXplICovXG4gICAgcGFnZVNpemU6IG51bWJlcjtcbiAgfSkgPT4gdm9pZDtcblxuICAvLyBJbmZpbml0ZSBzY3JvbGwgc3BlY2lmaWMgcHJvcGVydGllcyAodXNlZCB3aGVuIGluZmluaXRlOiB0cnVlKVxuICAvKiogV2hldGhlciB0aGVyZSBhcmUgbW9yZSBpdGVtcyB0byBsb2FkIChmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgZGF0YSBpcyBjdXJyZW50bHkgbG9hZGluZyAoZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgLyoqIERpc3RhbmNlIGZyb20gYm90dG9tIGluIHBpeGVscyB0byB0cmlnZ2VyIGxvYWQgKGRlZmF1bHQ6IDUwMCkgKi9cbiAgbG9hZE1vcmVUaHJlc2hvbGQ/OiBudW1iZXI7XG4gIC8qKiBDYWxsYmFjayB0byBsb2FkIG1vcmUgZGF0YSAoZm9yIGluZmluaXRlIHNjcm9sbCkgKi9cbiAgb25Mb2FkTW9yZT86ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQVBJIGV4cG9zZWQgdG8gcGFnaW5hdGlvbiB0ZW1wbGF0ZSBmb3IgYnVpbGRpbmcgY3VzdG9tIHBhZ2luYXRpb24gVUkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnZEYXRhdGFibGVSZW5kZXJQYWdpbmF0aW9uQVBJIHtcbiAgLyoqIEN1cnJlbnQgcGFnZSBpbmRleCAoemVyby1iYXNlZCkgKi9cbiAgcGFnZUluZGV4OiBudW1iZXI7XG4gIC8qKiBDdXJyZW50IHBhZ2Ugc2l6ZSAqL1xuICBwYWdlU2l6ZTogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHBhZ2VzICovXG4gIHBhZ2VDb3VudDogbnVtYmVyO1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHJvd3MgKi9cbiAgcm93Q291bnQ6IG51bWJlcjtcbiAgLyoqIE5hdmlnYXRlIHRvIGZpcnN0IHBhZ2UgKi9cbiAgZmlyc3RQYWdlOiAoKSA9PiB2b2lkO1xuICAvKiogTmF2aWdhdGUgdG8gcHJldmlvdXMgcGFnZSAqL1xuICBwcmV2aW91c1BhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBuZXh0IHBhZ2UgKi9cbiAgbmV4dFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBsYXN0IHBhZ2UgKi9cbiAgbGFzdFBhZ2U6ICgpID0+IHZvaWQ7XG4gIC8qKiBOYXZpZ2F0ZSB0byBzcGVjaWZpYyBwYWdlIGJ5IGluZGV4ICovXG4gIHNldFBhZ2VJbmRleDogKGluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG4gIC8qKiBDaGFuZ2UgcGFnZSBzaXplICovXG4gIHNldFBhZ2VTaXplOiAoc2l6ZTogbnVtYmVyKSA9PiB2b2lkO1xuICAvKiogV2hldGhlciBwcmV2aW91cyBwYWdlIGlzIGF2YWlsYWJsZSAqL1xuICBjYW5QcmV2aW91c1BhZ2U6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIG5leHQgcGFnZSBpcyBhdmFpbGFibGUgKi9cbiAgY2FuTmV4dFBhZ2U6IGJvb2xlYW47XG4gIC8qKiBMb2FkaW5nIHN0YXRlIChvbmx5IGZvciBpbmZpbml0ZSBzY3JvbGwpICovXG4gIGlzTG9hZGluZz86IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIG1vcmUgaXRlbXMgYXJlIGF2YWlsYWJsZSAob25seSBmb3IgaW5maW5pdGUgc2Nyb2xsKSAqL1xuICBoYXNNb3JlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTb3J0aW5nIGNvbmZpZ3VyYXRpb24gZm9yIE52RGF0YXRhYmxlLlxuICogVGhlIHNvcnRpbmcgbW9kZSAoY2xpZW50IHZzIHNlcnZlcikgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb21wb25lbnQncyB0b3AtbGV2ZWwgYG1vZGVgIHByb3AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnZEYXRhdGFibGVTb3J0aW5nQ29uZmlnIHtcbiAgLyoqIEVuYWJsZSBtdWx0aS1jb2x1bW4gc29ydGluZyB3aXRoIFNoaWZ0K0NsaWNrICovXG4gIGVuYWJsZU11bHRpU29ydD86IGJvb2xlYW47XG4gIC8qKiBBbGxvdyBjeWNsaW5nIHRocm91Z2ggdG8gXCJubyBzb3J0XCIgc3RhdGUgKi9cbiAgZW5hYmxlU29ydGluZ1JlbW92YWw/OiBib29sZWFuO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgY29sdW1ucyBmb3IgbXVsdGktc29ydCAqL1xuICBtYXhNdWx0aVNvcnRDb2xDb3VudD86IG51bWJlcjtcbiAgLyoqIFN0YXJ0IHdpdGggZGVzY2VuZGluZyBzb3J0IGFzIGZpcnN0IHRvZ2dsZSBzdGF0ZSAqL1xuICBzb3J0RGVzY0ZpcnN0PzogYm9vbGVhbjtcbiAgLyoqIENvbnRyb2xsZWQgc29ydCBzdGF0ZSAoZm9yIHNlcnZlci1zaWRlIHNvcnRpbmcpICovXG4gIHNvcnRTdGF0ZT86IFNvcnRpbmdTdGF0ZTtcbiAgLyoqIENhbGxiYWNrIHdoZW4gc29ydGluZyBjaGFuZ2VzIChmb3Igc2VydmVyLXNpZGUgc29ydGluZykgKi9cbiAgb25Tb3J0aW5nQ2hhbmdlPzogKHNvcnRpbmc6IFNvcnRpbmdTdGF0ZSkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBTb3J0aW5nIHN0YXRlIHR5cGUgLSBhcnJheSBvZiBzb3J0IGRlc2NyaXB0b3JzXG4gKi9cbmV4cG9ydCB0eXBlIE52RGF0YVRhYmxlU29ydGluZ1N0YXRlID0gU29ydGluZ1N0YXRlO1xuIl19
@@ -20,7 +20,7 @@ export function provideNovaComponents() {
20
20
  }
21
21
  export class NovaComponentsModule {
22
22
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
23
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvSplit, i1.NvStack, i1.NvTable, i1.NvTableheader, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], imports: [NvDatatable], exports: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvSplit, i1.NvStack, i1.NvTable, i1.NvTableheader, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip, NvDatatable] }); }
23
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, declarations: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvDrawer, i1.NvDrawerfooter, i1.NvDrawerheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationBullet, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvSidebar, i1.NvSidebarcontent, i1.NvSidebardivider, i1.NvSidebarfooter, i1.NvSidebargroup, i1.NvSidebarheader, i1.NvSidebarlogo, i1.NvSidebarnavitem, i1.NvSidebarnavsubitem, i1.NvSplit, i1.NvStack, i1.NvTable, i1.NvTableheader, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip], imports: [NvDatatable], exports: [i1.NvAccordion, i1.NvAccordionItem, i1.NvAlert, i1.NvAvatar, i1.NvBadge, i1.NvBreadcrumb, i1.NvBreadcrumbs, i1.NvButton, i1.NvButtongroup, i1.NvCalendar, i1.NvCol, i1.NvDatagrid, i1.NvDatagridcolumn, i1.NvDialog, i1.NvDialogfooter, i1.NvDialogheader, i1.NvDrawer, i1.NvDrawerfooter, i1.NvDrawerheader, i1.NvFieldcheckbox, i1.NvFielddate, i1.NvFielddaterange, i1.NvFielddropdown, i1.NvFielddropdownitem, i1.NvFielddropdownitemcheck, i1.NvFieldmultiselect, i1.NvFieldnumber, i1.NvFieldpassword, i1.NvFieldradio, i1.NvFieldselect, i1.NvFieldslider, i1.NvFieldtext, i1.NvFieldtextarea, i1.NvFieldtime, i1.NvIcon, i1.NvIconbutton, i1.NvLoader, i1.NvMenu, i1.NvMenuitem, i1.NvNotification, i1.NvNotificationBullet, i1.NvNotificationcontainer, i1.NvPopover, i1.NvRow, i1.NvSidebar, i1.NvSidebarcontent, i1.NvSidebardivider, i1.NvSidebarfooter, i1.NvSidebargroup, i1.NvSidebarheader, i1.NvSidebarlogo, i1.NvSidebarnavitem, i1.NvSidebarnavsubitem, i1.NvSplit, i1.NvStack, i1.NvTable, i1.NvTableheader, i1.NvToggle, i1.NvTogglebutton, i1.NvTogglebuttongroup, i1.NvTooltip, NvDatatable] }); }
24
24
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, providers: [provideNovaComponents()], imports: [NvDatatable] }); }
25
25
  }
26
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsModule, decorators: [{
@@ -34,7 +34,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
34
34
  }] });
35
35
  export class NovaComponentsValueAccessorModule {
36
36
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsValueAccessorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
37
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsValueAccessorModule, declarations: [i2.NvAccordionValueAccessor, i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvFieldtimeValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvSplitValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor], exports: [i2.NvAccordionValueAccessor, i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvFieldtimeValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvSplitValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor] }); }
37
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsValueAccessorModule, declarations: [i2.NvAccordionValueAccessor, i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvDrawerValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvFieldtimeValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvSidebarValueAccessor, i2.NvSplitValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor], exports: [i2.NvAccordionValueAccessor, i2.NvAlertValueAccessor, i2.NvCalendarValueAccessor, i2.NvDatagridValueAccessor, i2.NvDialogValueAccessor, i2.NvDrawerValueAccessor, i2.NvFieldcheckboxValueAccessor, i2.NvFielddateValueAccessor, i2.NvFielddaterangeValueAccessor, i2.NvFielddropdownValueAccessor, i2.NvFieldmultiselectValueAccessor, i2.NvFieldnumberValueAccessor, i2.NvFieldpasswordValueAccessor, i2.NvFieldradioValueAccessor, i2.NvFieldselectValueAccessor, i2.NvFieldsliderValueAccessor, i2.NvFieldtextValueAccessor, i2.NvFieldtextareaValueAccessor, i2.NvFieldtimeValueAccessor, i2.NvNotificationValueAccessor, i2.NvPopoverValueAccessor, i2.NvSidebarValueAccessor, i2.NvSplitValueAccessor, i2.NvToggleValueAccessor, i2.NvTogglebuttongroupValueAccessor] }); }
38
38
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsValueAccessorModule }); }
39
39
  }
40
40
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NovaComponentsValueAccessorModule, decorators: [{
@@ -44,4 +44,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
44
44
  exports: [...VALUE_ACCESSORS],
45
45
  }]
46
46
  }] });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7O0FBRWhGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE9BQU87UUFDTCxPQUFPLEVBQUUsZUFBZTtRQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CO1FBQ3RDLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztBQUNKLENBQUM7QUFRRCxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7Z0hBQXBCLG9CQUFvQixxMEJBTHJCLFdBQVcsc3pCQUVJLFdBQVc7Z0hBR3pCLG9CQUFvQixhQUZwQixDQUFDLHFCQUFxQixFQUFFLENBQUMsWUFIMUIsV0FBVzs7NEZBS1Ysb0JBQW9CO2tCQU5oQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDdEIsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQztvQkFDckMsU0FBUyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztpQkFDckM7O0FBT0QsTUFBTSxPQUFPLGlDQUFpQzsrR0FBakMsaUNBQWlDO2dIQUFqQyxpQ0FBaUM7Z0hBQWpDLGlDQUFpQzs7NEZBQWpDLGlDQUFpQztrQkFKN0MsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBOZ01vZHVsZSwgdHlwZSBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVmaW5lQ3VzdG9tRWxlbWVudHMgfSBmcm9tICdAbm92YS1kZXNpZ24tc3lzdGVtL25vdmEtd2ViY29tcG9uZW50cy9sb2FkZXInO1xuXG5pbXBvcnQgeyBESVJFQ1RJVkVTIH0gZnJvbSAnLi9zdGVuY2lsLWdlbmVyYXRlZCc7XG5pbXBvcnQgeyBOdkRhdGF0YWJsZSB9IGZyb20gJy4vY29tcG9uZW50cy9pbmRleCc7XG5pbXBvcnQgeyBWQUxVRV9BQ0NFU1NPUlMgfSBmcm9tICcuL3N0ZW5jaWwtZ2VuZXJhdGVkL2NvbXBvbmVudC12YWx1ZS1hY2Nlc3NvcnMnO1xuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIE5vdmEgQ29tcG9uZW50c1xuICpcbiAqIEByZXR1cm5zIHtQcm92aWRlcn0gLSBUaGUgcHJvdmlkZXIgdG8gYmUgdXNlZCBmb3Igbm92YSBjb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTm92YUNvbXBvbmVudHMoKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBkZWZpbmVDdXN0b21FbGVtZW50cyxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW052RGF0YXRhYmxlXSxcbiAgZGVjbGFyYXRpb25zOiBbLi4uRElSRUNUSVZFU10sXG4gIGV4cG9ydHM6IFsuLi5ESVJFQ1RJVkVTLCBOdkRhdGF0YWJsZV0sXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVOb3ZhQ29tcG9uZW50cygpXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNNb2R1bGUge31cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbiAgZXhwb3J0czogWy4uLlZBTFVFX0FDQ0VTU09SU10sXG59KVxuZXhwb3J0IGNsYXNzIE5vdmFDb21wb25lbnRzVmFsdWVBY2Nlc3Nvck1vZHVsZSB7fVxuIl19
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YS1jb21wb25lbnRzLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25vdmEtY29tcG9uZW50cy9zcmMvbGliL25vdmEtY29tcG9uZW50cy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRXJGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtDQUErQyxDQUFDOzs7O0FBRWhGOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCO0lBQ25DLE9BQU87UUFDTCxPQUFPLEVBQUUsZUFBZTtRQUN4QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsb0JBQW9CO1FBQ3RDLEtBQUssRUFBRSxJQUFJO0tBQ1osQ0FBQztBQUNKLENBQUM7QUFRRCxNQUFNLE9BQU8sb0JBQW9COytHQUFwQixvQkFBb0I7Z0hBQXBCLG9CQUFvQixta0NBTHJCLFdBQVcsb2pDQUVJLFdBQVc7Z0hBR3pCLG9CQUFvQixhQUZwQixDQUFDLHFCQUFxQixFQUFFLENBQUMsWUFIMUIsV0FBVzs7NEZBS1Ysb0JBQW9CO2tCQU5oQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQztvQkFDdEIsWUFBWSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQztvQkFDckMsU0FBUyxFQUFFLENBQUMscUJBQXFCLEVBQUUsQ0FBQztpQkFDckM7O0FBT0QsTUFBTSxPQUFPLGlDQUFpQzsrR0FBakMsaUNBQWlDO2dIQUFqQyxpQ0FBaUM7Z0hBQWpDLGlDQUFpQzs7NEZBQWpDLGlDQUFpQztrQkFKN0MsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQztvQkFDbEMsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLENBQUM7aUJBQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0lOSVRJQUxJWkVSLCBOZ01vZHVsZSwgdHlwZSBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVmaW5lQ3VzdG9tRWxlbWVudHMgfSBmcm9tICdAbm92YS1kZXNpZ24tc3lzdGVtL25vdmEtd2ViY29tcG9uZW50cy9sb2FkZXInO1xuXG5pbXBvcnQgeyBESVJFQ1RJVkVTIH0gZnJvbSAnLi9zdGVuY2lsLWdlbmVyYXRlZCc7XG5pbXBvcnQgeyBOdkRhdGF0YWJsZSB9IGZyb20gJy4vY29tcG9uZW50cy9pbmRleCc7XG5pbXBvcnQgeyBWQUxVRV9BQ0NFU1NPUlMgfSBmcm9tICcuL3N0ZW5jaWwtZ2VuZXJhdGVkL2NvbXBvbmVudC12YWx1ZS1hY2Nlc3NvcnMnO1xuXG4vKipcbiAqIEluaXRpYWxpemUgdGhlIE5vdmEgQ29tcG9uZW50c1xuICpcbiAqIEByZXR1cm5zIHtQcm92aWRlcn0gLSBUaGUgcHJvdmlkZXIgdG8gYmUgdXNlZCBmb3Igbm92YSBjb21wb25lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTm92YUNvbXBvbmVudHMoKTogUHJvdmlkZXIge1xuICByZXR1cm4ge1xuICAgIHByb3ZpZGU6IEFQUF9JTklUSUFMSVpFUixcbiAgICB1c2VGYWN0b3J5OiAoKSA9PiBkZWZpbmVDdXN0b21FbGVtZW50cyxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfTtcbn1cblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW052RGF0YXRhYmxlXSxcbiAgZGVjbGFyYXRpb25zOiBbLi4uRElSRUNUSVZFU10sXG4gIGV4cG9ydHM6IFsuLi5ESVJFQ1RJVkVTLCBOdkRhdGF0YWJsZV0sXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVOb3ZhQ29tcG9uZW50cygpXSxcbn0pXG5leHBvcnQgY2xhc3MgTm92YUNvbXBvbmVudHNNb2R1bGUge31cblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbLi4uVkFMVUVfQUNDRVNTT1JTXSxcbiAgZXhwb3J0czogWy4uLlZBTFVFX0FDQ0VTU09SU10sXG59KVxuZXhwb3J0IGNsYXNzIE5vdmFDb21wb25lbnRzVmFsdWVBY2Nlc3Nvck1vZHVsZSB7fVxuIl19
@@ -82,6 +82,7 @@ export class NotificationServiceComponent {
82
82
  "
83
83
  #notificationEl
84
84
  [attr.data-id]="notification.id"
85
+ [uid]="notification.id"
85
86
  [heading]="notification.heading"
86
87
  [message]="notification.message"
87
88
  [dismissible]="notification.dismissible"
@@ -137,6 +138,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
137
138
  "
138
139
  #notificationEl
139
140
  [attr.data-id]="notification.id"
141
+ [uid]="notification.id"
140
142
  [heading]="notification.heading"
141
143
  [message]="notification.message"
142
144
  [dismissible]="notification.dismissible"
@@ -180,4 +182,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
180
182
  type: ViewChildren,
181
183
  args: ['notificationEl', { read: ElementRef }]
182
184
  }] } });
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92YS1jb21wb25lbnRzL3NyYy9saWIvcHJvdmlkZXJzL25vdGlmaWNhdGlvbi1zZXJ2aWNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxZQUFZLEVBQ1osVUFBVSxFQUVWLHNCQUFzQixHQUN2QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFLL0M7O0dBRUc7QUFzREgsTUFBTSxPQUFPLDRCQUE0QjtJQXdCdkMsWUFBb0IsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFiNUQ7O1dBRUc7UUFDSCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFVNEIsQ0FBQztJQUVoRTs7T0FFRztJQUNILFFBQVE7UUFDTiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBRTdELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUNuRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksRUFBRTtvQkFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsWUFBMEI7UUFDN0QsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFDLEtBQTJCLEVBQUUsRUFBVztRQUMxRCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQzsrR0FyRlUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsOE5BbUJDLFVBQVUsNkJBbkV4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDVCwyREFoRFMsWUFBWTs7NEZBa0RYLDRCQUE0QjtrQkFyRHhDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThDVDtpQkFDRjt3RkFLVSxRQUFRO3NCQUFoQixLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBV0UsZUFBZTtzQkFEdEIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBRdWVyeUxpc3QsXG4gIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuLy8gaW1wb3J0IHsgTm92YUNvbXBvbmVudHNNb2R1bGUgfSBmcm9tICcuLi9ub3ZhLWNvbXBvbmVudHMubW9kdWxlJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvblNlcnZpY2UsIHR5cGUgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi9ub3RpZmljYXRpb24uc2VydmljZSc7XG5cbi8qKlxuICogQW5ndWxhciBjb21wb25lbnQgdGhhdCByZW5kZXJzIHRoZSBub3RpZmljYXRpb24gY29udGFpbmVyIHdpdGggYWN0aXZlIG5vdGlmaWNhdGlvbnMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ252LW5vdGlmaWNhdGlvbi1zZXJ2aWNlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bnYtbm90aWZpY2F0aW9uY29udGFpbmVyXG4gICAgICBbcG9zaXRpb25dPVwicG9zaXRpb25cIlxuICAgICAgW2NsYXNzXT1cImNsYXNzTmFtZVwiXG4gICAgICBkYXRhLXRlc3RpZD1cIm5vdGlmaWNhdGlvbi1jb250YWluZXJcIlxuICAgID5cbiAgICAgIDxudi1ub3RpZmljYXRpb25cbiAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgbGV0IG5vdGlmaWNhdGlvbiBvZiBub3RpZmljYXRpb25zO1xuICAgICAgICAgIHRyYWNrQnk6IHRyYWNrQnlOb3RpZmljYXRpb25JZFxuICAgICAgICBcIlxuICAgICAgICAjbm90aWZpY2F0aW9uRWxcbiAgICAgICAgW2F0dHIuZGF0YS1pZF09XCJub3RpZmljYXRpb24uaWRcIlxuICAgICAgICBbaGVhZGluZ109XCJub3RpZmljYXRpb24uaGVhZGluZ1wiXG4gICAgICAgIFttZXNzYWdlXT1cIm5vdGlmaWNhdGlvbi5tZXNzYWdlXCJcbiAgICAgICAgW2Rpc21pc3NpYmxlXT1cIm5vdGlmaWNhdGlvbi5kaXNtaXNzaWJsZVwiXG4gICAgICAgIFtlbXBoYXNpc109XCJub3RpZmljYXRpb24uZW1waGFzaXNcIlxuICAgICAgICBbZmVlZGJhY2tdPVwibm90aWZpY2F0aW9uLmZlZWRiYWNrXCJcbiAgICAgICAgW2ljb25dPVwibm90aWZpY2F0aW9uLmljb25cIlxuICAgICAgICBbaW5pdGlhbGx5SGlkZGVuXT1cInRydWVcIlxuICAgICAgICAoaGlkZGVuQ2hhbmdlZCk9XCJoYW5kbGVIaWRkZW5DaGFuZ2VkKCRldmVudCwgbm90aWZpY2F0aW9uLmlkKVwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gQWN0aW9ucyBzbG90IGNvbnRlbnQgZm9yIHRoZSBjdXN0b20gZWxlbWVudCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHNsb3Q9XCJhY3Rpb25zXCJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTJcIlxuICAgICAgICAgICpuZ0lmPVwibm90aWZpY2F0aW9uLmFjdGlvbnM/Lmxlbmd0aCB8fCBub3RpZmljYXRpb24uYWN0aW9uU2xvdFwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIENvbmZpZy1kcml2ZW4gYWN0aW9ucyAtLT5cbiAgICAgICAgICA8bnYtYnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIG5vdGlmaWNhdGlvbi5hY3Rpb25zXCJcbiAgICAgICAgICAgIGVtcGhhc2lzPVwibG93XCJcbiAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiYWN0aW9uLm9uQ2xpY2soKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgYWN0aW9uLmxhYmVsIH19XG4gICAgICAgICAgPC9udi1idXR0b24+XG5cbiAgICAgICAgICA8IS0tIENvbXBvbmVudC1kcml2ZW4gYWN0aW9ucyAtLT5cbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cIm5vdGlmaWNhdGlvbi5hY3Rpb25TbG90XCJcbiAgICAgICAgICAgIFtuZ0NvbXBvbmVudE91dGxldF09XCJub3RpZmljYXRpb24uYWN0aW9uU2xvdFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbnYtbm90aWZpY2F0aW9uPlxuICAgIDwvbnYtbm90aWZpY2F0aW9uY29udGFpbmVyPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25TZXJ2aWNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhlIG5vdGlmaWNhdGlvbiBjb250YWluZXIgb24gdGhlIHNjcmVlbi5cbiAgICovXG4gIEBJbnB1dCgpIHBvc2l0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBuYW1lIGZvciB0aGUgbm90aWZpY2F0aW9uIGNvbnRhaW5lci5cbiAgICovXG4gIEBJbnB1dCgpIGNsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgYWN0aXZlIG5vdGlmaWNhdGlvbnMuXG4gICAqL1xuICBub3RpZmljYXRpb25zOiBOb3RpZmljYXRpb25bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2VzIHRvIHRoZSBub3RpZmljYXRpb24gZWxlbWVudHMuXG4gICAqL1xuICBAVmlld0NoaWxkcmVuKCdub3RpZmljYXRpb25FbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICBwcml2YXRlIG5vdGlmaWNhdGlvbkVscyE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPEhUTUxOdk5vdGlmaWNhdGlvbkVsZW1lbnQ+PjtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UpIHt9XG5cbiAgLyoqXG4gICAqIENvbXBvbmVudCBpbml0aWFsaXphdGlvbi5cbiAgICovXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFVzZSBzZXJ2aWNlIGNvbmZpZyBpZiBubyBpbnB1dCBwcm92aWRlZFxuICAgIHRoaXMucG9zaXRpb24gPz89IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jb25maWcucG9zaXRpb247XG4gICAgdGhpcy5jbGFzc05hbWUgPz89IHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jb25maWcuY2xhc3NOYW1lO1xuXG4gICAgLy8gU3Vic2NyaWJlIHRvIG5vdGlmaWNhdGlvbiBjaGFuZ2VzXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uubm90aWZpY2F0aW9ucyQuc3Vic2NyaWJlKFxuICAgICAgKGxpc3QpID0+ICh0aGlzLm5vdGlmaWNhdGlvbnMgPSBsaXN0KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplIG5vdGlmaWNhdGlvbiBlbGVtZW50cy9yZWZzIHdpdGggdGhlIHNlcnZpY2UuXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgY29uc3Qgc3luYyA9ICgpID0+IHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jbGVhclJlZnMoKTtcbiAgICAgIGZvciAoY29uc3QgZWxSZWYgb2YgdGhpcy5ub3RpZmljYXRpb25FbHMudG9BcnJheSgpKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWQnKTtcbiAgICAgICAgaWYgKGlkKSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UucmVnaXN0ZXJSZWYoaWQsIGVsKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHN5bmMoKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvbkVscy5jaGFuZ2VzLnN1YnNjcmliZShzeW5jKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgY2xlYW51cC5cbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5jbGVhclJlZnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFjayBmdW5jdGlvbiBmb3IgbmdGb3IgdG8gb3B0aW1pemUgcmVuZGVyaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtXG4gICAqIEBwYXJhbSB7Tm90aWZpY2F0aW9ufSBub3RpZmljYXRpb24gVGhlIG5vdGlmaWNhdGlvbiBpdGVtXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBub3RpZmljYXRpb24gSURcbiAgICovXG4gIHRyYWNrQnlOb3RpZmljYXRpb25JZChpbmRleDogbnVtYmVyLCBub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbikge1xuICAgIHJldHVybiBub3RpZmljYXRpb24uaWQ7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG5vdGlmaWNhdGlvbiBoaWRkZW4gc3RhdGUgY2hhbmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge0N1c3RvbUV2ZW50PGJvb2xlYW4+fSBldmVudCBUaGUgaGlkZGVuIGNoYW5nZWQgZXZlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFRoZSBub3RpZmljYXRpb24gSURcbiAgICovXG4gIGhhbmRsZUhpZGRlbkNoYW5nZWQoZXZlbnQ6IEN1c3RvbUV2ZW50PGJvb2xlYW4+LCBpZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChldmVudC5kZXRhaWwgJiYgaWQpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5yZW1vdmUoaWQpO1xuICAgIH1cbiAgfVxufVxuIl19
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLXNlcnZpY2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbm92YS1jb21wb25lbnRzL3NyYy9saWIvcHJvdmlkZXJzL25vdGlmaWNhdGlvbi1zZXJ2aWNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFHTCxZQUFZLEVBQ1osVUFBVSxFQUVWLHNCQUFzQixHQUN2QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFLL0M7O0dBRUc7QUF1REgsTUFBTSxPQUFPLDRCQUE0QjtJQXdCdkMsWUFBb0IsbUJBQXdDO1FBQXhDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFiNUQ7O1dBRUc7UUFDSCxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFVNEIsQ0FBQztJQUVoRTs7T0FFRztJQUNILFFBQVE7UUFDTiwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUMzRCxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBRTdELG9DQUFvQztRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUNuRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxDQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZTtRQUNiLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtZQUNoQixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDckMsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7Z0JBQy9CLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksRUFBRTtvQkFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxxQkFBcUIsQ0FBQyxLQUFhLEVBQUUsWUFBMEI7UUFDN0QsT0FBTyxZQUFZLENBQUMsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILG1CQUFtQixDQUFDLEtBQTJCLEVBQUUsRUFBVztRQUMxRCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQzsrR0FyRlUsNEJBQTRCO21HQUE1Qiw0QkFBNEIsOE5BbUJDLFVBQVUsNkJBcEV4Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQ1QsMkRBakRTLFlBQVk7OzRGQW1EWCw0QkFBNEI7a0JBdER4QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx5QkFBeUI7b0JBQ25DLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NUO2lCQUNGO3dGQUtVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFXRSxlQUFlO3NCQUR0QixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIFF1ZXJ5TGlzdCxcbiAgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG4vLyBpbXBvcnQgeyBOb3ZhQ29tcG9uZW50c01vZHVsZSB9IGZyb20gJy4uL25vdmEtY29tcG9uZW50cy5tb2R1bGUnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSwgdHlwZSBOb3RpZmljYXRpb24gfSBmcm9tICcuL25vdGlmaWNhdGlvbi5zZXJ2aWNlJztcblxuLyoqXG4gKiBBbmd1bGFyIGNvbXBvbmVudCB0aGF0IHJlbmRlcnMgdGhlIG5vdGlmaWNhdGlvbiBjb250YWluZXIgd2l0aCBhY3RpdmUgbm90aWZpY2F0aW9ucy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbnYtbm90aWZpY2F0aW9uLXNlcnZpY2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxudi1ub3RpZmljYXRpb25jb250YWluZXJcbiAgICAgIFtwb3NpdGlvbl09XCJwb3NpdGlvblwiXG4gICAgICBbY2xhc3NdPVwiY2xhc3NOYW1lXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwibm90aWZpY2F0aW9uLWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAgPG52LW5vdGlmaWNhdGlvblxuICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICBsZXQgbm90aWZpY2F0aW9uIG9mIG5vdGlmaWNhdGlvbnM7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeU5vdGlmaWNhdGlvbklkXG4gICAgICAgIFwiXG4gICAgICAgICNub3RpZmljYXRpb25FbFxuICAgICAgICBbYXR0ci5kYXRhLWlkXT1cIm5vdGlmaWNhdGlvbi5pZFwiXG4gICAgICAgIFt1aWRdPVwibm90aWZpY2F0aW9uLmlkXCJcbiAgICAgICAgW2hlYWRpbmddPVwibm90aWZpY2F0aW9uLmhlYWRpbmdcIlxuICAgICAgICBbbWVzc2FnZV09XCJub3RpZmljYXRpb24ubWVzc2FnZVwiXG4gICAgICAgIFtkaXNtaXNzaWJsZV09XCJub3RpZmljYXRpb24uZGlzbWlzc2libGVcIlxuICAgICAgICBbZW1waGFzaXNdPVwibm90aWZpY2F0aW9uLmVtcGhhc2lzXCJcbiAgICAgICAgW2ZlZWRiYWNrXT1cIm5vdGlmaWNhdGlvbi5mZWVkYmFja1wiXG4gICAgICAgIFtpY29uXT1cIm5vdGlmaWNhdGlvbi5pY29uXCJcbiAgICAgICAgW2luaXRpYWxseUhpZGRlbl09XCJ0cnVlXCJcbiAgICAgICAgKGhpZGRlbkNoYW5nZWQpPVwiaGFuZGxlSGlkZGVuQ2hhbmdlZCgkZXZlbnQsIG5vdGlmaWNhdGlvbi5pZClcIlxuICAgICAgPlxuICAgICAgICA8IS0tIEFjdGlvbnMgc2xvdCBjb250ZW50IGZvciB0aGUgY3VzdG9tIGVsZW1lbnQgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzbG90PVwiYWN0aW9uc1wiXG4gICAgICAgICAgY2xhc3M9XCJmbGV4IGdhcC0yXCJcbiAgICAgICAgICAqbmdJZj1cIm5vdGlmaWNhdGlvbi5hY3Rpb25zPy5sZW5ndGggfHwgbm90aWZpY2F0aW9uLmFjdGlvblNsb3RcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBDb25maWctZHJpdmVuIGFjdGlvbnMgLS0+XG4gICAgICAgICAgPG52LWJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBub3RpZmljYXRpb24uYWN0aW9uc1wiXG4gICAgICAgICAgICBlbXBoYXNpcz1cImxvd1wiXG4gICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFjdGlvbi5vbkNsaWNrKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGFjdGlvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvbnYtYnV0dG9uPlxuXG4gICAgICAgICAgPCEtLSBDb21wb25lbnQtZHJpdmVuIGFjdGlvbnMgLS0+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJub3RpZmljYXRpb24uYWN0aW9uU2xvdFwiXG4gICAgICAgICAgICBbbmdDb21wb25lbnRPdXRsZXRdPVwibm90aWZpY2F0aW9uLmFjdGlvblNsb3RcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L252LW5vdGlmaWNhdGlvbj5cbiAgICA8L252LW5vdGlmaWNhdGlvbmNvbnRhaW5lcj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgTm90aWZpY2F0aW9uU2VydmljZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIHRoZSBub3RpZmljYXRpb24gY29udGFpbmVyIG9uIHRoZSBzY3JlZW4uXG4gICAqL1xuICBASW5wdXQoKSBwb3NpdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBDU1MgY2xhc3MgbmFtZSBmb3IgdGhlIG5vdGlmaWNhdGlvbiBjb250YWluZXIuXG4gICAqL1xuICBASW5wdXQoKSBjbGFzc05hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFycmF5IG9mIGFjdGl2ZSBub3RpZmljYXRpb25zLlxuICAgKi9cbiAgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uW10gPSBbXTtcblxuICAvKipcbiAgICogUmVmZXJlbmNlcyB0byB0aGUgbm90aWZpY2F0aW9uIGVsZW1lbnRzLlxuICAgKi9cbiAgQFZpZXdDaGlsZHJlbignbm90aWZpY2F0aW9uRWwnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25FbHMhOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MTnZOb3RpZmljYXRpb25FbGVtZW50Pj47XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlKSB7fVxuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgaW5pdGlhbGl6YXRpb24uXG4gICAqL1xuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBVc2Ugc2VydmljZSBjb25maWcgaWYgbm8gaW5wdXQgcHJvdmlkZWRcbiAgICB0aGlzLnBvc2l0aW9uID8/PSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuY29uZmlnLnBvc2l0aW9uO1xuICAgIHRoaXMuY2xhc3NOYW1lID8/PSB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuY29uZmlnLmNsYXNzTmFtZTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBub3RpZmljYXRpb24gY2hhbmdlc1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLm5vdGlmaWNhdGlvbnMkLnN1YnNjcmliZShcbiAgICAgIChsaXN0KSA9PiAodGhpcy5ub3RpZmljYXRpb25zID0gbGlzdCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbml6ZSBub3RpZmljYXRpb24gZWxlbWVudHMvcmVmcyB3aXRoIHRoZSBzZXJ2aWNlLlxuICAgKi9cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGNvbnN0IHN5bmMgPSAoKSA9PiB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJSZWZzKCk7XG4gICAgICBmb3IgKGNvbnN0IGVsUmVmIG9mIHRoaXMubm90aWZpY2F0aW9uRWxzLnRvQXJyYXkoKSkge1xuICAgICAgICBjb25zdCBlbCA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlkID0gZWwuZ2V0QXR0cmlidXRlKCdkYXRhLWlkJyk7XG4gICAgICAgIGlmIChpZCkgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnJlZ2lzdGVyUmVmKGlkLCBlbCk7XG4gICAgICB9XG4gICAgfTtcbiAgICBzeW5jKCk7XG4gICAgdGhpcy5ub3RpZmljYXRpb25FbHMuY2hhbmdlcy5zdWJzY3JpYmUoc3luYyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcG9uZW50IGNsZWFudXAuXG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuY2xlYXJSZWZzKCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2sgZnVuY3Rpb24gZm9yIG5nRm9yIHRvIG9wdGltaXplIHJlbmRlcmluZy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSBpbmRleCBvZiB0aGUgaXRlbVxuICAgKiBAcGFyYW0ge05vdGlmaWNhdGlvbn0gbm90aWZpY2F0aW9uIFRoZSBub3RpZmljYXRpb24gaXRlbVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgbm90aWZpY2F0aW9uIElEXG4gICAqL1xuICB0cmFja0J5Tm90aWZpY2F0aW9uSWQoaW5kZXg6IG51bWJlciwgbm90aWZpY2F0aW9uOiBOb3RpZmljYXRpb24pIHtcbiAgICByZXR1cm4gbm90aWZpY2F0aW9uLmlkO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBub3RpZmljYXRpb24gaGlkZGVuIHN0YXRlIGNoYW5nZS5cbiAgICpcbiAgICogQHBhcmFtIHtDdXN0b21FdmVudDxib29sZWFuPn0gZXZlbnQgVGhlIGhpZGRlbiBjaGFuZ2VkIGV2ZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgbm90aWZpY2F0aW9uIElEXG4gICAqL1xuICBoYW5kbGVIaWRkZW5DaGFuZ2VkKGV2ZW50OiBDdXN0b21FdmVudDxib29sZWFuPiwgaWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuZGV0YWlsICYmIGlkKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UucmVtb3ZlKGlkKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==