ngx-sp-infra 0.1.63 → 0.1.65

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.
@@ -178,9 +178,10 @@ export class ComboboxComponent {
178
178
  ngOnInit() {
179
179
  /* istanbul ignore else */
180
180
  if (typeof this.options !== 'undefined' && Array.isArray(this.options)) {
181
- this.availableItems = [
182
- ...this.options.sort(this.config.customComparator),
183
- ];
181
+ if (!this.config.isNotSort)
182
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
183
+ else
184
+ this.availableItems = [...this.options];
184
185
  this.initDropdownValuesAndOptions();
185
186
  }
186
187
  }
@@ -237,7 +238,10 @@ export class ComboboxComponent {
237
238
  }
238
239
  reset() {
239
240
  this.selectedItems = [];
240
- this.availableItems = [...this.options.sort(this.config.customComparator)];
241
+ if (!this.config.isNotSort)
242
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
243
+ else
244
+ this.availableItems = [...this.options];
241
245
  this.initDropdownValuesAndOptions();
242
246
  }
243
247
  /**
@@ -261,9 +265,10 @@ export class ComboboxComponent {
261
265
  this.options = this.options || [];
262
266
  /* istanbul ignore else */
263
267
  if (changes['options']) {
264
- this.availableItems = [
265
- ...this.options.sort(this.config.customComparator),
266
- ];
268
+ if (!this.config.isNotSort)
269
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
270
+ else
271
+ this.availableItems = [...this.options];
267
272
  }
268
273
  /* istanbul ignore else */
269
274
  if (changes['value']) {
@@ -271,9 +276,10 @@ export class ComboboxComponent {
271
276
  if (JSON.stringify(changes['value'].currentValue) === JSON.stringify([]) ||
272
277
  changes['value'].currentValue === '' ||
273
278
  changes['value'].currentValue === null) {
274
- this.availableItems = [
275
- ...this.options.sort(this.config.customComparator),
276
- ];
279
+ if (!this.config.isNotSort)
280
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
281
+ else
282
+ this.availableItems = [...this.options];
277
283
  }
278
284
  }
279
285
  this.initDropdownValuesAndOptions();
@@ -294,7 +300,10 @@ export class ComboboxComponent {
294
300
  /* istanbul ignore else */
295
301
  if (!this.availableItems.includes(item)) {
296
302
  this.availableItems.push(item);
297
- sortedItems = this.availableItems.sort(this.config.customComparator);
303
+ if (!this.config.isNotSort)
304
+ sortedItems = this.availableItems.sort(this.config.customComparator);
305
+ else
306
+ sortedItems = this.availableItems;
298
307
  }
299
308
  this.selectedItems = [...this.selectedItems];
300
309
  this.availableItems = [...sortedItems];
@@ -302,6 +311,12 @@ export class ComboboxComponent {
302
311
  if (!Array.isArray(this.value)) {
303
312
  this.value = [];
304
313
  }
314
+ if (this.config.defaultSort) {
315
+ const set1 = new Set(this.selectedItems);
316
+ this.selectedItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set1.has(e));
317
+ const set2 = new Set(this.availableItems);
318
+ this.availableItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set2.has(e));
319
+ }
305
320
  this.valueChanged();
306
321
  this.resetArrowKeyActiveElement();
307
322
  }
@@ -333,8 +348,16 @@ export class ComboboxComponent {
333
348
  }
334
349
  this.selectedItems = [...this.selectedItems];
335
350
  this.availableItems = [...this.availableItems];
336
- this.selectedItems.sort(this.config.customComparator);
337
- this.availableItems.sort(this.config.customComparator);
351
+ if (!this.config.isNotSort) {
352
+ this.selectedItems.sort(this.config.customComparator);
353
+ this.availableItems.sort(this.config.customComparator);
354
+ }
355
+ if (this.config.defaultSort) {
356
+ const set1 = new Set(this.selectedItems);
357
+ this.selectedItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set1.has(e));
358
+ const set2 = new Set(this.availableItems);
359
+ this.availableItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set2.has(e));
360
+ }
338
361
  // this.searchText = null;
339
362
  this.valueChanged();
340
363
  this.resetArrowKeyActiveElement();
@@ -543,4 +566,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
543
566
  type: HostListener,
544
567
  args: ['keydown', ['$event']]
545
568
  }] } });
546
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixTQUFTLEVBQVUsS0FBSyxFQUN4QixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFHWixZQUFZLEVBS1osVUFBVSxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQWV0RCxNQUFNLE9BQU8saUJBQWlCO0lBZ0c3QixJQUFJLEtBQUs7UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFHLEdBQUc7UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFFLEdBQUcsQ0FBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsWUFDUyxLQUF3QixFQUN6QixXQUF1QjtRQUR0QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQXRHL0I7O1dBRUc7UUFDYSxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBRWxDOztXQUVHO1FBQ2EsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUVqQzs7V0FFRztRQUNhLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFPakM7O1dBRUc7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Z0JBS1MsSUFBSTtzQkFBbEMsWUFBWTt1QkFBRSxNQUFNO2dCQUlXLEtBQUs7c0JBQXBDLFlBQVk7dUJBQUUsT0FBTztnQkFXZixxQkFBcUI7c0JBRDNCLFlBQVk7dUJBQUUsZ0JBQWdCO2dCQWtCeEIsd0JBQXdCO3NCQUQ5QixZQUFZO3VCQUFFLGtCQUFrQjtnQkFjMUIsbUJBQW1CO3NCQUR6QixZQUFZO3VCQUFFLFNBQVMsRUFBRSxDQUFFLFFBQVEsQ0FBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCxcblx0RXZlbnRFbWl0dGVyLFxuXHRPdXRwdXQsXG5cdEhvc3RMaXN0ZW5lcixcblx0T25DaGFuZ2VzLFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRWaWV3Q2hpbGRyZW4sXG5cdEVsZW1lbnRSZWYsXG5cdFF1ZXJ5TGlzdCxcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Q2hhbmdlRGV0ZWN0b3JSZWYsXG5cdGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlckJ5UGlwZSB9IGZyb20gJy4vcGlwZXMvZmlsdGVyLWJ5LnBpcGUnO1xuXG5cbkBDb21wb25lbnQoIHtcblx0c2VsZWN0b3I6ICdhcHAtY29tYm9ib3gnLFxuXHR0ZW1wbGF0ZVVybDogJy4vY29tYm9ib3guY29tcG9uZW50Lmh0bWwnLFxuXHRzdHlsZVVybHM6IFsgJy4vY29tYm9ib3guY29tcG9uZW50LnNjc3MnIF0sXG5cdHByb3ZpZGVyczogW1xuXHRcdHtcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoICgpID0+IENvbWJvYm94Q29tcG9uZW50ICksXG5cdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHR9LFxuXHRdXG59IClcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblxuXHQvKiogdmFsdWUgb2YgdGhlIGRyb3Bkb3duICovXG5cdEBJbnB1dCgpIHB1YmxpYyBfdmFsdWU6IGFueTtcblxuXHQvKipcblx0ICogR2V0IHRoZSByZXF1aXJlZCBpbnB1dHNcblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBhbnkgPSBbXTtcblxuXHQvKipcblx0ICogY29uZmlndXJhdGlvbiBvcHRpb25zXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBhbnkgPSB7fTtcblxuXHQvKipcblx0ICogV2hldGhlciBtdWx0aXBsZSBzZWxlY3Rpb24gb3Igc2luZ2xlIHNlbGVjdGlvbiBhbGxvd2VkXG5cdCAqL1xuXHRASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVmFsdWVcblx0ICovXG5cdEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcblxuXHQvKipcblx0ICogY2hhbmdlIGV2ZW50IHdoZW4gdmFsdWUgY2hhbmdlcyB0byBwcm92aWRlIHVzZXIgdG8gaGFuZGxlIHRoaW5ncyBpbiBjaGFuZ2UgZXZlbnRcblx0ICovXG5cdEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuXHQvKipcblx0ICogVGhlIHNlYXJjaCB0ZXh0IGNoYW5nZSBldmVudCBlbWl0dGVyIGVtaXR0ZWQgd2hlbiB1c2VyIHR5cGUgaW4gdGhlIHNlYXJjaCBpbnB1dFxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBzZWFyY2hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG5cdC8qKlxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gZHJvcGRvd24gaXMgb3Blbi5cblx0ICovXG5cdEBPdXRwdXQoKSBwdWJsaWMgb3BlbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkcm9wZG93biBpcyBvcGVuLlxuXHQgKi9cblx0QE91dHB1dCgpIHB1YmxpYyBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cblx0LyoqXG5cdCAqIFRvb2dsZSB0aGUgZHJvcGRvd24gbGlzdFxuXHQgKi9cblx0cHVibGljIHRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEF2YWlsYWJsZSBpdGVtcyBmb3Igc2VsZWN0aW9uXG5cdCAqL1xuXHRwdWJsaWMgYXZhaWxhYmxlSXRlbXM6IGFueSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBTZWxlY3RlZCBJdGVtc1xuXHQgKi9cblx0cHVibGljIHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBTZWxlY3Rpb24gdGV4dCB0byBiZSBEaXNwbGF5ZWRcblx0ICovXG5cdHB1YmxpYyBzZWxlY3RlZERpc3BsYXlUZXh0ID0gJy0nO1xuXG5cdC8qKlxuXHQgKiBTZWFyY2ggdGV4dFxuXHQgKi9cblx0cHVibGljIHNlYXJjaFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogdmFyaWFibGUgdG8gdHJhY2sgaWYgY2xpY2tlZCBpbnNpZGUgb3Igb3V0c2lkZSBvZiBjb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBjbGlja2VkSW5zaWRlID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIHZhcmlhYmxlIHRvIHRyYWNrIGtleXByZXNzIGV2ZW50IGluc2lkZSBhbmQgb3V0c2lkIG9mIGNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGluc2lkZUtleVByZXNzID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIHZhcmlhYmxlIHRvIHRyYWNrIHRoZSBmb2N1c2VkIGl0ZW0gd2hlbnVzZXIgdXNlcyBhcnJvdyBrZXlzIHRvIHNlbGVjdCBpdGVtXG5cdCAqL1xuXHRwdWJsaWMgZm9jdXNlZEl0ZW1JbmRleDogbnVtYmVyIHwgbnVsbDtcblxuXHQvKipcblx0ICogZWxlbWVudCB0byBzaG93IG5vdCBmb3VuZCB0ZXh0IHdoZW4gbm90IGl0bWVzIG1hdGNoIHRoZSBzZWFyY2hcblx0ICovXG5cblx0cHVibGljIHNob3dOb3RGb3VuZCA9IGZhbHNlO1xuXHQvKipcblx0ICogSG9sZCB0aGUgcmVmZXJlbmNlIHRvIGF2YWlsYWJsZSBpdGVtcyBpbiB0aGUgbGlzdCB0byBmb2N1cyBvbiB0aGUgaXRlbSB3aGVuIHNjcm9sbGluZ1xuXHQgKi9cblx0QFZpZXdDaGlsZHJlbiggJ2F2YWlsYWJsZU9wdGlvbicgKVxuXHRwdWJsaWMgYXZhaWxhYmxlT3B0aW9uczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG5cdGdldCB2YWx1ZSAoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZhbHVlO1xuXHR9XG5cdHNldCB2YWx1ZSAoIHZhbCApIHtcblx0XHR0aGlzLl92YWx1ZSA9IHZhbDtcblx0XHR0aGlzLm9uQ2hhbmdlKCB2YWwgKTtcblx0XHR0aGlzLm9uVG91Y2hlZCgpO1xuXHR9XG5cblx0Y29uc3RydWN0b3IgKFxuXHRcdHByaXZhdGUgY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLFxuXHRcdHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxuXHQpIHtcblx0XHR0aGlzLm11bHRpcGxlID0gZmFsc2U7XG5cdH1cblxuXHRwdWJsaWMgb25DaGFuZ2U6IGFueSA9ICgpID0+IHtcblx0XHQvLyBlbXB0eVxuXHR9XG5cdHB1YmxpYyBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHtcblx0XHQvLyBlbXB0eVxuXHR9XG5cblx0LyoqXG5cdCAqIGNsaWNrIGxpc3RlbmVyIGZvciBob3N0IGluc2lkZSB0aGlzIGNvbXBvbmVudCBpLmVcblx0ICogaWYgbWFueSBpbnN0YW5jZXMgYXJlIHRoZXJlLCB0aGlzIGRldGVjdHMgaWYgY2xpY2tlZCBpbnNpZGVcblx0ICogdGhpcyBpbnN0YW5jZVxuXHQgKi9cblx0QEhvc3RMaXN0ZW5lciggJ2NsaWNrJyApXG5cdHB1YmxpYyBjbGlja0luc2lkZUNvbXBvbmVudCAoKSB7XG5cdFx0dGhpcy5jbGlja2VkSW5zaWRlID0gdHJ1ZTtcblx0fVxuXG5cdEBIb3N0TGlzdGVuZXIoICdibHVyJyApIHB1YmxpYyBibHVyICgpIHtcblx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cdH1cblxuXHRASG9zdExpc3RlbmVyKCAnZm9jdXMnICkgcHVibGljIGZvY3VzICgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIXRoaXMuZGlzYWJsZWQgKVxuXHRcdHtcblx0XHRcdHRoaXMudG9nZ2xlU2VsZWN0RHJvcGRvd24oKTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqIGNsaWNrIGhhbmRsZXIgb24gZG9jdW1uZW50IHRvIGhpZGUgdGhlIG9wZW4gZHJvcGRvd24gaWYgY2xpY2tlZCBvdXRzaWRlXG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCAnZG9jdW1lbnQ6Y2xpY2snIClcblx0cHVibGljIGNsaWNrT3V0c2lkZUNvbXBvbmVudCAoKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICF0aGlzLmNsaWNrZWRJbnNpZGUgKVxuXHRcdHtcblx0XHRcdHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcblx0XHRcdHRoaXMucmVzZXRBcnJvd0tleUFjdGl2ZUVsZW1lbnQoKTtcblx0XHRcdC8vIGNsZWFyIHNlYXJoIG9uIGNsb3NlXG5cdFx0XHR0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7XG5cdFx0XHR0aGlzLmNsb3NlLmVtaXQoKTtcblx0XHR9XG5cdFx0dGhpcy5jbGlja2VkSW5zaWRlID0gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogY2xpY2sgaGFuZGxlciBvbiBkb2N1bW5lbnQgdG8gaGlkZSB0aGUgb3BlbiBkcm9wZG93biBpZiBjbGlja2VkIG91dHNpZGVcblx0ICovXG5cdEBIb3N0TGlzdGVuZXIoICdkb2N1bWVudDprZXlkb3duJyApXG5cdHB1YmxpYyBLZXlQcmVzc091dHNpZGVDb21wb25lbnQgKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAhdGhpcy5pbnNpZGVLZXlQcmVzcyApXG5cdFx0e1xuXHRcdFx0dGhpcy50b2dnbGVEcm9wZG93biA9IGZhbHNlO1xuXHRcdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHRcdH1cblx0XHR0aGlzLmluc2lkZUtleVByZXNzID0gZmFsc2U7XG5cdH1cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgZm9yIGtleSB1cCBhbmQgZG93biBldmVudCBhbmQgZW50ZXIgcHJlc3MgZm9yIHNlbGVjdGluZyBlbGVtZW50XG5cdCAqL1xuXHRASG9zdExpc3RlbmVyKCAna2V5ZG93bicsIFsgJyRldmVudCcgXSApXG5cdHB1YmxpYyBoYW5kbGVLZXlib2FyZEV2ZW50ICggJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0dGhpcy5pbnNpZGVLZXlQcmVzcyA9IHRydWU7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICRldmVudC5rZXlDb2RlID09PSAyNyB8fCB0aGlzLmRpc2FibGVkIClcblx0XHR7XG5cdFx0XHR0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cdFx0XHR0aGlzLmluc2lkZUtleVByZXNzID0gZmFsc2U7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGNvbnN0IGF2YU9wdHMgPSB0aGlzLmF2YWlsYWJsZU9wdGlvbnMudG9BcnJheSgpO1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCAkZXZlbnQua2V5Q29kZSAhPT0gOSAmJiBhdmFPcHRzLmxlbmd0aCA9PT0gMCAmJiAhdGhpcy50b2dnbGVEcm9wZG93biApXG5cdFx0e1xuXHRcdFx0dGhpcy50b2dnbGVEcm9wZG93biA9IHRydWU7XG5cdFx0fVxuXHRcdC8vIEFycm93IERvd25cblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggJGV2ZW50LmtleUNvZGUgPT09IDQwICYmIGF2YU9wdHMubGVuZ3RoID4gMCApXG5cdFx0e1xuXHRcdFx0dGhpcy5vbkFycm93S2V5RG93bigpO1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICggdGhpcy5mb2N1c2VkSXRlbUluZGV4ISA+PSBhdmFPcHRzLmxlbmd0aCApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IDA7XG5cdFx0XHR9XG5cdFx0XHRhdmFPcHRzWyB0aGlzLmZvY3VzZWRJdGVtSW5kZXghIF0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHRcdC8vIEFycm93IFVwXG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICRldmVudC5rZXlDb2RlID09PSAzOCAmJiBhdmFPcHRzLmxlbmd0aCApXG5cdFx0e1xuXHRcdFx0dGhpcy5vbkFycm93S2V5VXAoKTtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCEgPj0gYXZhT3B0cy5sZW5ndGggKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSBhdmFPcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR9XG5cdFx0XHRhdmFPcHRzWyB0aGlzLmZvY3VzZWRJdGVtSW5kZXghIF0ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdFx0JGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHRcdC8vIEVudGVyXG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICRldmVudC5rZXlDb2RlID09PSAxMyAmJiB0aGlzLmZvY3VzZWRJdGVtSW5kZXggIT09IG51bGwgKVxuXHRcdHtcblx0XHRcdGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBuZXcgRmlsdGVyQnlQaXBlKCkudHJhbnNmb3JtKFxuXHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuXHRcdFx0XHR0aGlzLnNlYXJjaFRleHQhLFxuXHRcdFx0XHR0aGlzLmNvbmZpZy5zZWFyY2hPbktleVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuc2VsZWN0SXRlbShcblx0XHRcdFx0ZmlsdGVyZWRJdGVtc1sgdGhpcy5mb2N1c2VkSXRlbUluZGV4IF0sXG5cdFx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMuaW5kZXhPZiggZmlsdGVyZWRJdGVtc1sgdGhpcy5mb2N1c2VkSXRlbUluZGV4IF0gKVxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJGV2ZW50LmtleVxuXHRcdFxuXHR9XG5cblx0LyoqXG5cdCAqIENvbXBvbmVudCBvbkluaXRcblx0ICovXG5cdHB1YmxpYyBuZ09uSW5pdCAoKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkoIHRoaXMub3B0aW9ucyApIClcblx0XHR7XG5cdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gW1xuXHRcdFx0XHQuLi50aGlzLm9wdGlvbnMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApLFxuXHRcdFx0XTtcblx0XHRcdHRoaXMuaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBhZnRlciB2aWV3IGluaXQgdG8gc3Vic2NyaWJlIHRvIGF2YWlsYWJsZSBvcHRpb24gY2hhbmdlc1xuXHQgKi9cblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCAoKSB7XG5cdFx0dGhpcy5hdmFpbGFibGVPcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKCB0aGlzLnNldE5vdEZvdW5kU3RhdGUuYmluZCggdGhpcyApICk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZSAoIGZuOiBhbnkgKSB7XG5cdFx0dGhpcy5vbkNoYW5nZSA9IGZuO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkICggZm46IGFueSApIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0cHVibGljIHNldERpc2FibGVkU3RhdGUgKCBpc0Rpc2FibGVkOiBib29sZWFuICkge1xuXHRcdHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuXHR9XG5cblx0cHVibGljIHdyaXRlVmFsdWUgKCB2YWx1ZTogYW55LCBpbnRlcm5hbD86IGJvb2xlYW4gKSB7XG5cdFx0aWYgKCB2YWx1ZSApXG5cdFx0e1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApIClcblx0XHRcdHtcblx0XHRcdFx0aWYgKCB0aGlzLm11bHRpcGxlIClcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0XHRcdFx0fSBlbHNlIGlmICggdmFsdWUubGVuZ3RoID4gMCApXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsdWVbIDAgXTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcblx0XHRcdH1cblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDAgKVxuXHRcdFx0e1xuXHRcdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XG5cdFx0XHRcdH0gZWxzZVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5pbml0RHJvcGRvd25WYWx1ZXNBbmRPcHRpb25zKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlXG5cdFx0e1xuXHRcdFx0dGhpcy52YWx1ZSA9IFtdO1xuXHRcdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRcdGlmICggIWludGVybmFsIClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5yZXNldCgpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIWludGVybmFsIClcblx0XHR7XG5cdFx0XHR0aGlzLnJlc2V0KCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHJlc2V0ICgpIHtcblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcblx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWyAuLi50aGlzLm9wdGlvbnMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApIF07XG5cdFx0dGhpcy5pbml0RHJvcGRvd25WYWx1ZXNBbmRPcHRpb25zKCk7XG5cdH1cblx0LyoqXG5cdCAqIGZ1bmN0aW9uIHNldHMgd2hldGhlciB0byBzaG93IGl0ZW1zIG5vdCBmb3VuZCB0ZXh0IG9yIG5vdFxuXHQgKi9cblx0cHVibGljIHNldE5vdEZvdW5kU3RhdGUgKCkge1xuXHRcdGlmICggdGhpcy5hdmFpbGFibGVPcHRpb25zLmxlbmd0aCA9PT0gMCApXG5cdFx0e1xuXHRcdFx0dGhpcy5zaG93Tm90Rm91bmQgPSB0cnVlO1xuXHRcdH0gZWxzZVxuXHRcdHtcblx0XHRcdHRoaXMuc2hvd05vdEZvdW5kID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMuY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHR9XG5cdC8qKlxuXHQgKiBDb21wb25lbnQgb25jaGFnZSBpLmUgd2hlbiBhbnkgb2YgdGhlIGlucHV0IHByb3BlcnRpZXMgY2hhbmdlXG5cdCAqL1xuXHRwdWJsaWMgbmdPbkNoYW5nZXMgKCBjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzICkge1xuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXHRcdC8vIHRoaXMuc2VhcmNoVGV4dCA9IG51bGw7XG5cdFx0dGhpcy5vcHRpb25zID0gdGhpcy5vcHRpb25zIHx8IFtdO1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCBjaGFuZ2VzWyAnb3B0aW9ucycgXSApXG5cdFx0e1xuXHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcyA9IFtcblx0XHRcdFx0Li4udGhpcy5vcHRpb25zLnNvcnQoIHRoaXMuY29uZmlnLmN1c3RvbUNvbXBhcmF0b3IgKSxcblx0XHRcdF07XG5cdFx0fVxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCBjaGFuZ2VzWyAndmFsdWUnIF0gKVxuXHRcdHtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoXG5cdFx0XHRcdEpTT04uc3RyaW5naWZ5KCBjaGFuZ2VzWyAndmFsdWUnIF0uY3VycmVudFZhbHVlICkgPT09IEpTT04uc3RyaW5naWZ5KCBbXSApIHx8XG5cdFx0XHRcdGNoYW5nZXNbICd2YWx1ZScgXS5jdXJyZW50VmFsdWUgPT09ICcnIHx8XG5cdFx0XHRcdGNoYW5nZXNbICd2YWx1ZScgXS5jdXJyZW50VmFsdWUgPT09IG51bGxcblx0XHRcdClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcyA9IFtcblx0XHRcdFx0XHQuLi50aGlzLm9wdGlvbnMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApLFxuXHRcdFx0XHRdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZXNlbGN0IGEgc2VsZWN0ZWQgaXRlbXNcblx0ICogQHBhcmFtIGl0ZW06ICBpdGVtIHRvIGJlIGRlc2VsZWN0ZWRcblx0ICogQHBhcmFtIGluZGV4OiAgaW5kZXggb2YgdGhlIGl0ZW1cblx0ICovXG5cdHB1YmxpYyBkZXNlbGVjdEl0ZW0gKCBpdGVtOiBhbnksIGluZGV4OiBudW1iZXIgKSB7XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goICggZWxlbWVudDogYW55LCBpOiBudW1iZXIgKSA9PiB7XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKCBpdGVtID09PSBlbGVtZW50IClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRsZXQgc29ydGVkSXRlbXMgPSBbIC4uLnRoaXMuYXZhaWxhYmxlSXRlbXMgXTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggIXRoaXMuYXZhaWxhYmxlSXRlbXMuaW5jbHVkZXMoIGl0ZW0gKSApXG5cdFx0e1xuXHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5wdXNoKCBpdGVtICk7XG5cdFx0XHRzb3J0ZWRJdGVtcyA9IHRoaXMuYXZhaWxhYmxlSXRlbXMuc29ydCggdGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvciApO1xuXHRcdH1cblx0XHR0aGlzLnNlbGVjdGVkSXRlbXMgPSBbIC4uLnRoaXMuc2VsZWN0ZWRJdGVtcyBdO1xuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbIC4uLnNvcnRlZEl0ZW1zIF07XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICFBcnJheS5pc0FycmF5KCB0aGlzLnZhbHVlICkgKVxuXHRcdHtcblx0XHRcdHRoaXMudmFsdWUgPSBbXTtcblx0XHR9XG5cdFx0dGhpcy52YWx1ZUNoYW5nZWQoKTtcblx0XHR0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogU2VsZWN0IGFuIGl0ZW1cblx0ICogQHBhcmFtIGl0ZW06ICBpdGVtIHRvIGJlIHNlbGVjdGVkXG5cdCAqIEBwYXJhbSBpbmRleDogIGluZGV4IG9mIHRoZSBpdGVtXG5cdCAqL1xuXHRwdWJsaWMgc2VsZWN0SXRlbSAoIGl0ZW06IHN0cmluZywgaW5kZXg/OiBudW1iZXIgKSB7XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoICF0aGlzLm11bHRpcGxlIClcblx0XHR7XG5cdFx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdFx0aWYgKCB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCApXG5cdFx0XHR7XG5cdFx0XHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMucHVzaCggdGhpcy5zZWxlY3RlZEl0ZW1zWyAwIF0gKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXHRcdFx0dGhpcy50b2dnbGVEcm9wZG93biA9IGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMuYXZhaWxhYmxlSXRlbXMuZm9yRWFjaCggKCBlbGVtZW50OiBhbnksIGk6IG51bWJlciApID0+IHtcblx0XHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0XHRpZiAoIGl0ZW0gPT09IGVsZW1lbnQgKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCggaXRlbSApO1xuXHRcdFx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLmNvbmZpZy5jbGVhck9uU2VsZWN0aW9uIClcblx0XHR7XG5cdFx0XHR0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gWyAuLi50aGlzLnNlbGVjdGVkSXRlbXMgXTtcblx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWyAuLi50aGlzLmF2YWlsYWJsZUl0ZW1zIF07XG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLnNvcnQoIHRoaXMuY29uZmlnLmN1c3RvbUNvbXBhcmF0b3IgKTtcblx0XHR0aGlzLmF2YWlsYWJsZUl0ZW1zLnNvcnQoIHRoaXMuY29uZmlnLmN1c3RvbUNvbXBhcmF0b3IgKTtcblx0XHQvLyB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuXHRcdHRoaXMudmFsdWVDaGFuZ2VkKCk7XG5cdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdoZW4gc2VsZWN0ZWQgaXRlbXMgY2hhbmdlcyB0cmlnZ2VyIHRoZSBjaGFhbmdlIGJhY2sgdG8gcGFyZW50XG5cdCAqL1xuXHRwdWJsaWMgdmFsdWVDaGFuZ2VkICgpIHtcblx0XHR0aGlzLndyaXRlVmFsdWUoIHRoaXMuc2VsZWN0ZWRJdGVtcywgdHJ1ZSApO1xuXHRcdC8vIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcblx0XHR0aGlzLmNoYW5nZS5lbWl0KCB7IHZhbHVlOiB0aGlzLnZhbHVlIH0gKTtcblx0XHR0aGlzLnNldFNlbGVjdGVkRGlzcGxheVRleHQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUb2dnbGUgdGhlIGRyb3Bkb3dubGlzdCBvbi9vZmZcblx0ICovXG5cdHB1YmxpYyB0b2dnbGVTZWxlY3REcm9wZG93biAoKSB7XG5cdFx0dGhpcy50b2dnbGVEcm9wZG93biA9ICF0aGlzLnRvZ2dsZURyb3Bkb3duO1xuXHRcdGlmICggdGhpcy50b2dnbGVEcm9wZG93biApXG5cdFx0e1xuXHRcdFx0dGhpcy5vcGVuLmVtaXQoKTtcblx0XHR9IGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7XG5cdFx0XHR0aGlzLmNsb3NlLmVtaXQoKTtcblx0XHR9XG5cdFx0dGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBjaGFuZ2UgaGFuZGxlciBmb3Igc2VhcmNoIHRleHRcblx0ICovXG5cdHB1YmxpYyBzZWFyY2hUZXh0Q2hhbmdlZCAoKSB7XG5cdFx0dGhpcy5zZWFyY2hDaGFuZ2UuZW1pdCggdGhpcy5zZWFyY2hUZXh0ICk7XG5cdH1cblxuXHRwdWJsaWMgY2hhbmdlU2VhcmNoVGV4dCAoICRldmVudDogYW55ICkge1xuXHRcdCRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBpbml0aWFsaXplIHRoZSBjb25maWcgYW5kIG90aGVyIHByb3BlcnRpZXNcblx0ICovXG5cdHByaXZhdGUgaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucyAoKSB7XG5cdFx0Y29uc3QgY29uZmlnOiBhbnkgPSB7XG5cdFx0XHRkaXNwbGF5S2V5OiAnZGVzY3JpcHRpb24nLFxuXHRcdFx0aGVpZ2h0OiAnYXV0bycsXG5cdFx0XHRzZWFyY2g6IGZhbHNlLFxuXHRcdFx0cGxhY2Vob2xkZXI6ICctJyxcblx0XHRcdHNlYXJjaFBsYWNlaG9sZGVyOiAnUGVzcXVpc2FyICcsXG5cdFx0XHRsaW1pdFRvOiAwLFxuXHRcdFx0Y3VzdG9tQ29tcGFyYXRvcjogdW5kZWZpbmVkLFxuXHRcdFx0bm9SZXN1bHRzRm91bmQ6ICdOYWRhIGVuY29udHJhZG8hJyxcblx0XHRcdG1vcmVUZXh0OiAnU2VsZWNpb25hZG9zJyxcblx0XHRcdHNlYXJjaE9uS2V5OiBudWxsLFxuXHRcdFx0Y2xlYXJPblNlbGVjdGlvbjogZmFsc2UsXG5cdFx0XHRpbnB1dERpcmVjdGlvbjogJ2x0cicsXG5cdFx0fTtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggdGhpcy5jb25maWcgPT09ICd1bmRlZmluZWQnIHx8IE9iamVjdC5rZXlzKCB0aGlzLmNvbmZpZyApLmxlbmd0aCA9PT0gMCApXG5cdFx0e1xuXHRcdFx0dGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZyB9O1xuXHRcdH1cblx0XHRmb3IgKCBjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoIGNvbmZpZyApIClcblx0XHR7XG5cdFx0XHR0aGlzLmNvbmZpZ1sga2V5IF0gPSB0aGlzLmNvbmZpZ1sga2V5IF0gPyB0aGlzLmNvbmZpZ1sga2V5IF0gOiBjb25maWdbIGtleSBdO1xuXHRcdH1cblx0XHR0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcgfTtcblx0XHQvLyBBZGRpbmcgcGxhY2Vob2xkZXIgaW4gY29uZmlnIGFzIGRlZmF1bHQgcGFyYW1cblx0XHR0aGlzLnNlbGVjdGVkRGlzcGxheVRleHQgPSB0aGlzLmNvbmZpZ1sgJ3BsYWNlaG9sZGVyJyBdO1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLnZhbHVlICE9PSAnJyAmJiB0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgKVxuXHRcdHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdGhpcy52YWx1ZSApIClcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy52YWx1ZTtcblx0XHRcdH0gZWxzZSBpZiAoIHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgIT09IG51bGwgKVxuXHRcdFx0e1xuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXNbIDAgXSA9IHRoaXMudmFsdWU7XG5cdFx0XHR9IGVsc2Vcblx0XHRcdHtcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG5cdFx0XHRcdHRoaXMudmFsdWUgPSBbXTtcblx0XHRcdH1cblxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goICggaXRlbTogYW55ICkgPT4ge1xuXHRcdFx0XHRjb25zdCBpbmQgPSB0aGlzLmF2YWlsYWJsZUl0ZW1zLmZpbmRJbmRleChcblx0XHRcdFx0XHQoIGFJdGVtOiBhbnkgKSA9PiBKU09OLnN0cmluZ2lmeSggaXRlbSApID09PSBKU09OLnN0cmluZ2lmeSggYUl0ZW0gKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRpZiAoIGluZCAhPT0gLTEgKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGhpcy5hdmFpbGFibGVJdGVtcy5zcGxpY2UoIGluZCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXHRcdHRoaXMuc2V0U2VsZWN0ZWREaXNwbGF5VGV4dCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIHNldCB0aGUgdGV4dCB0byBiZSBkaXNwbGF5ZWRcblx0ICovXG5cdHByaXZhdGUgc2V0U2VsZWN0ZWREaXNwbGF5VGV4dCAoKSB7XG5cdFx0bGV0IHRleHQ6IHN0cmluZyA9IHRoaXMuc2VsZWN0ZWRJdGVtc1sgMCBdO1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0eXBlb2YgdGhpcy5zZWxlY3RlZEl0ZW1zWyAwIF0gPT09ICdvYmplY3QnIClcblx0XHR7XG5cdFx0XHR0ZXh0ID0gdGhpcy5jb25maWcuZGlzcGxheUZuXG5cdFx0XHRcdD8gdGhpcy5jb25maWcuZGlzcGxheUZuKCB0aGlzLnNlbGVjdGVkSXRlbXNbIDAgXSApXG5cdFx0XHRcdDogdGhpcy5zZWxlY3RlZEl0ZW1zWyAwIF1bIHRoaXMuY29uZmlnLmRpc3BsYXlLZXkgXTtcblx0XHR9XG5cdFx0aWYgKCB0aGlzLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwIClcblx0XHR7XG5cdFx0XHR0aGlzLnNlbGVjdGVkRGlzcGxheVRleHQgPVxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAxXG5cdFx0XHRcdFx0PyB0ZXh0XG5cdFx0XHRcdFx0OiB0ZXh0ICtcblx0XHRcdFx0XHRgICsgJHsgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDEgfSAkeyB0aGlzLmNvbmZpZy5tb3JlVGV4dCB9YDtcblx0XHR9IGVsc2Vcblx0XHR7XG5cdFx0XHR0aGlzLnNlbGVjdGVkRGlzcGxheVRleHQgPVxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwID8gdGhpcy5jb25maWcucGxhY2Vob2xkZXIgOiB0ZXh0O1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIGZvciBhcnJvdyBrZXkgdXAgZXZlbnQgdGhhdHMgZm9jdXNlcyBvbiBhIGl0ZW1cblx0ICovXG5cdHByaXZhdGUgb25BcnJvd0tleVVwICgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggdGhpcy5mb2N1c2VkSXRlbUluZGV4ID09PSAwIClcblx0XHR7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSB0aGlzLmF2YWlsYWJsZUl0ZW1zLmxlbmd0aCAtIDE7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLm9uQXJyb3dLZXkoKSApXG5cdFx0e1xuXHRcdFx0dGhpcy5mb2N1c2VkSXRlbUluZGV4ITtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciBmb3IgYXJyb3cga2V5IGRvd24gZXZlbnQgdGhhdHMgZm9jdXNlcyBvbiBhIGl0ZW1cblx0ICovXG5cdHByaXZhdGUgb25BcnJvd0tleURvd24gKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG5cdFx0aWYgKCB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPT09IHRoaXMuYXZhaWxhYmxlSXRlbXMubGVuZ3RoIC0gMSApXG5cdFx0e1xuXHRcdFx0dGhpcy5mb2N1c2VkSXRlbUluZGV4ID0gMDtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0LyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cblx0XHRpZiAoIHRoaXMub25BcnJvd0tleSgpIClcblx0XHR7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXghKys7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBvbkFycm93S2V5ICgpIHtcblx0XHQvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuXHRcdGlmICggdGhpcy5mb2N1c2VkSXRlbUluZGV4ID09PSBudWxsIClcblx0XHR7XG5cdFx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSAwO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiB3aWxsIHJlc2V0IHRoZSBlbGVtZW50IHRoYXQgaXMgbWFya2VkIGFjdGl2ZSB1c2luZyBhcnJvdyBrZXlzXG5cdCAqL1xuXHRwcml2YXRlIHJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50ICgpIHtcblx0XHR0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSBudWxsO1xuXHR9XG59XG4iLCI8ZGl2IGNsYXNzPVwibmd4LWRyb3Bkb3duLWNvbnRhaW5lclwiIHRhYmluZGV4PVwiMFwiPlxuICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJuZ3gtZHJvcGRvd24tYnV0dG9uXCIgW25nQ2xhc3NdPVwieyAnbmd4LWRpc2FibGVkJzogZGlzYWJsZWQgfVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdERyb3Bkb3duKClcIj5cbiAgICA8c3BhbiBjbGFzcz1cImRpc3BsYXktdGV4dFwiPnt7IHNlbGVjdGVkRGlzcGxheVRleHQgfX0gPC9zcGFuPlxuICAgIDxhcHAtc3ZnLXN0b3JhZ2Ugc3ZnTmFtZT1cImNoZXZyb24tZG93blwiIHN2Z0NvbG9yPVwiIzM0M0E0MFwiIHN2Z1NpemU9XCJzbWFsbFwiLz5cbiAgPC9idXR0b24+XG4gIDxkaXYgY2xhc3M9XCJuZ3gtZHJvcGRvd24tbGlzdC1jb250YWluZXIgc2Nyb2xsLXlcIiAqbmdJZj1cInRvZ2dsZURyb3Bkb3duXCIgW3N0eWxlLm1heEhlaWdodF09XCJjb25maWcuaGVpZ2h0XCI+XG4gICAgPGRpdiBjbGFzcz1cInNlYXJjaC1jb250YWluZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCIgKm5nSWY9XCJjb25maWcuc2VhcmNoXCI+XG4gICAgICA8aW5wdXQgKGNoYW5nZSk9XCJjaGFuZ2VTZWFyY2hUZXh0KCRldmVudClcIiBbc3R5bGUuZGlyZWN0aW9uXT1cImNvbmZpZy5pbnB1dERpcmVjdGlvblwiIG5hbWU9XCJzZWFyY2gtdGV4dFwiXG4gICAgICAgIChpbnB1dCk9XCJzZWFyY2hUZXh0Q2hhbmdlZCgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgdGFiaW5kZXg9XCItMVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIC8+XG4gICAgICA8bGFiZWwgW25nQ2xhc3NdPVwieyBhY3RpdmU6IHNlYXJjaFRleHQgfVwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5zZGljb24tc2VhcmNoXCI+PC9zcGFuPlxuICAgICAgICB7eyBjb25maWcuc2VhcmNoUGxhY2Vob2xkZXIgfX08L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDx1bCBjbGFzcz1cInNlbGVjdGVkLWl0ZW1zXCI+XG4gICAgICA8bGkgY2xhc3M9XCJkLWZsZXggZmxleC1yb3dcIiB0YWJpbmRleD1cIi0xXCIgKm5nRm9yPVwibGV0IHNlbGVjdGVkIG9mIHNlbGVjdGVkSXRlbXM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RJdGVtKHNlbGVjdGVkLCBpKVwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrIG5zZGljb24tY2xvc2UgbWUtMlwiIGNoZWNrZWQ9XCJ0cnVlXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tdG9wOiAycHg7XCI+e3tcbiAgICAgICAgICBjb25maWcuZGlzcGxheUZuXG4gICAgICAgICAgPyBjb25maWcuZGlzcGxheUZuKHNlbGVjdGVkKVxuICAgICAgICAgIDogc2VsZWN0ZWRbY29uZmlnLmRpc3BsYXlLZXldIHx8IHNlbGVjdGVkXG4gICAgICAgICAgfX08L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cbiAgICA8aHIgKm5nSWY9XCJzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgJiYgYXZhaWxhYmxlSXRlbXMubGVuZ3RoID4gMFwiIC8+XG4gICAgPHVsIGNsYXNzPVwiYXZhaWxhYmxlLWl0ZW1zXCI+XG4gICAgICA8bGkgY2xhc3M9XCJkLWZsZXggZmxleC1yb3dcIiAjYXZhaWxhYmxlT3B0aW9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGF2YWlsYWJsZUl0ZW1zIHwgZmlsdGVyQnk6IHNlYXJjaFRleHQ6IGNvbmZpZy5zZWFyY2hPbktleVxuXHRcdFx0fCBsaW1pdFRvOiBjb25maWcubGltaXRUbzsgbGV0IGkgPSBpbmRleFwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogZm9jdXNlZEl0ZW1JbmRleCA9PSBpICYmICFpdGVtLmRpc2FibGVkLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9XCJcbiAgICAgICAgKGNsaWNrKT1cInNlbGVjdEl0ZW0oaXRlbSwgaSlcIj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjayBuc2RpY29uLWNsb3NlIG1lLTJcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDJweDtcIj5cbiAgICAgICAgICB7eyBjb25maWcuZGlzcGxheUZuID8gY29uZmlnLmRpc3BsYXlGbihpdGVtKSA6IGl0ZW1bY29uZmlnLmRpc3BsYXlLZXldIHx8IGl0ZW0gfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2xpPlxuICAgICAgPGxpICpuZ0lmPVwic2hvd05vdEZvdW5kXCI+e3sgY29uZmlnLm5vUmVzdWx0c0ZvdW5kIH19PC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
569
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvd2lkZ2V0cy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi93aWRnZXRzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQVUsS0FBSyxFQUN4QixZQUFZLEVBQ1osTUFBTSxFQUNOLFlBQVksRUFHWixZQUFZLEVBS1osVUFBVSxFQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7OztBQWV0RCxNQUFNLE9BQU8saUJBQWlCO0lBZ0c1QixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEdBQUc7UUFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsWUFDVSxLQUF3QixFQUN6QixXQUF1QjtRQUR0QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN6QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQXRHaEM7O1dBRUc7UUFDYSxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBRWxDOztXQUVHO1FBQ2EsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUVqQzs7V0FFRztRQUNhLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFPakM7O1dBRUc7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QUFyQixLQUFLO2dCQUtVLFFBQVE7c0JBQXZCLEtBQUs7Z0JBS1UsUUFBUTtzQkFBdkIsS0FBSztnQkFLVyxNQUFNO3NCQUF0QixNQUFNO2dCQUtVLFlBQVk7c0JBQTVCLE1BQU07Z0JBS1UsSUFBSTtzQkFBcEIsTUFBTTtnQkFLVSxLQUFLO3NCQUFyQixNQUFNO2dCQW1EQSxnQkFBZ0I7c0JBRHRCLFlBQVk7dUJBQUMsaUJBQWlCO2dCQWdDeEIsb0JBQW9CO3NCQUQxQixZQUFZO3VCQUFDLE9BQU87Z0JBS1EsSUFBSTtzQkFBaEMsWUFBWTt1QkFBQyxNQUFNO2dCQUlVLEtBQUs7c0JBQWxDLFlBQVk7dUJBQUMsT0FBTztnQkFVZCxxQkFBcUI7c0JBRDNCLFlBQVk7dUJBQUMsZ0JBQWdCO2dCQWlCdkIsd0JBQXdCO3NCQUQ5QixZQUFZO3VCQUFDLGtCQUFrQjtnQkFhekIsbUJBQW1CO3NCQUR6QixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIFF1ZXJ5TGlzdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEZpbHRlckJ5UGlwZSB9IGZyb20gJy4vcGlwZXMvZmlsdGVyLWJ5LnBpcGUnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jb21ib2JveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb21ib2JveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbWJvYm94LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29tYm9ib3hDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblxuICAvKiogdmFsdWUgb2YgdGhlIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIHB1YmxpYyBfdmFsdWU6IGFueTtcblxuICAvKipcbiAgICogR2V0IHRoZSByZXF1aXJlZCBpbnB1dHNcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBvcHRpb25zOiBhbnkgPSBbXTtcblxuICAvKipcbiAgICogY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgY29uZmlnOiBhbnkgPSB7fTtcblxuICAvKipcbiAgICogV2hldGhlciBtdWx0aXBsZSBzZWxlY3Rpb24gb3Igc2luZ2xlIHNlbGVjdGlvbiBhbGxvd2VkXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAvKipcbiAgICogVmFsdWVcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogY2hhbmdlIGV2ZW50IHdoZW4gdmFsdWUgY2hhbmdlcyB0byBwcm92aWRlIHVzZXIgdG8gaGFuZGxlIHRoaW5ncyBpbiBjaGFuZ2UgZXZlbnRcbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogVGhlIHNlYXJjaCB0ZXh0IGNoYW5nZSBldmVudCBlbWl0dGVyIGVtaXR0ZWQgd2hlbiB1c2VyIHR5cGUgaW4gdGhlIHNlYXJjaCBpbnB1dFxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBzZWFyY2hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gZHJvcGRvd24gaXMgb3Blbi5cbiAgICovXG4gIEBPdXRwdXQoKSBwdWJsaWMgb3BlbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiBkcm9wZG93biBpcyBvcGVuLlxuICAgKi9cbiAgQE91dHB1dCgpIHB1YmxpYyBjbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIFRvb2dsZSB0aGUgZHJvcGRvd24gbGlzdFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEF2YWlsYWJsZSBpdGVtcyBmb3Igc2VsZWN0aW9uXG4gICAqL1xuICBwdWJsaWMgYXZhaWxhYmxlSXRlbXM6IGFueSA9IFtdO1xuXG4gIC8qKlxuICAgKiBTZWxlY3RlZCBJdGVtc1xuICAgKi9cbiAgcHVibGljIHNlbGVjdGVkSXRlbXM6IGFueSA9IFtdO1xuXG4gIC8qKlxuICAgKiBTZWxlY3Rpb24gdGV4dCB0byBiZSBEaXNwbGF5ZWRcbiAgICovXG4gIHB1YmxpYyBzZWxlY3RlZERpc3BsYXlUZXh0ID0gJy0nO1xuXG4gIC8qKlxuICAgKiBTZWFyY2ggdGV4dFxuICAgKi9cbiAgcHVibGljIHNlYXJjaFRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogdmFyaWFibGUgdG8gdHJhY2sgaWYgY2xpY2tlZCBpbnNpZGUgb3Igb3V0c2lkZSBvZiBjb21wb25lbnRcbiAgICovXG4gIHB1YmxpYyBjbGlja2VkSW5zaWRlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIHZhcmlhYmxlIHRvIHRyYWNrIGtleXByZXNzIGV2ZW50IGluc2lkZSBhbmQgb3V0c2lkIG9mIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIGluc2lkZUtleVByZXNzID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIHZhcmlhYmxlIHRvIHRyYWNrIHRoZSBmb2N1c2VkIGl0ZW0gd2hlbnVzZXIgdXNlcyBhcnJvdyBrZXlzIHRvIHNlbGVjdCBpdGVtXG4gICAqL1xuICBwdWJsaWMgZm9jdXNlZEl0ZW1JbmRleDogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogZWxlbWVudCB0byBzaG93IG5vdCBmb3VuZCB0ZXh0IHdoZW4gbm90IGl0bWVzIG1hdGNoIHRoZSBzZWFyY2hcbiAgICovXG5cbiAgcHVibGljIHNob3dOb3RGb3VuZCA9IGZhbHNlO1xuICAvKipcbiAgICogSG9sZCB0aGUgcmVmZXJlbmNlIHRvIGF2YWlsYWJsZSBpdGVtcyBpbiB0aGUgbGlzdCB0byBmb2N1cyBvbiB0aGUgaXRlbSB3aGVuIHNjcm9sbGluZ1xuICAgKi9cbiAgQFZpZXdDaGlsZHJlbignYXZhaWxhYmxlT3B0aW9uJylcbiAgcHVibGljIGF2YWlsYWJsZU9wdGlvbnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHNldCB2YWx1ZSh2YWwpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbDtcbiAgICB0aGlzLm9uQ2hhbmdlKHZhbCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHtcbiAgICB0aGlzLm11bHRpcGxlID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb25DaGFuZ2U6IGFueSA9ICgpID0+IHtcbiAgICAvLyBlbXB0eVxuICB9XG4gIHB1YmxpYyBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHtcbiAgICAvLyBlbXB0eVxuICB9XG5cbiAgLyoqXG4gICAqIGNsaWNrIGxpc3RlbmVyIGZvciBob3N0IGluc2lkZSB0aGlzIGNvbXBvbmVudCBpLmVcbiAgICogaWYgbWFueSBpbnN0YW5jZXMgYXJlIHRoZXJlLCB0aGlzIGRldGVjdHMgaWYgY2xpY2tlZCBpbnNpZGVcbiAgICogdGhpcyBpbnN0YW5jZVxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBwdWJsaWMgY2xpY2tJbnNpZGVDb21wb25lbnQoKSB7XG4gICAgdGhpcy5jbGlja2VkSW5zaWRlID0gdHJ1ZTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2JsdXInKSBwdWJsaWMgYmx1cigpIHtcbiAgICB0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdmb2N1cycpIHB1YmxpYyBmb2N1cygpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy50b2dnbGVTZWxlY3REcm9wZG93bigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogY2xpY2sgaGFuZGxlciBvbiBkb2N1bW5lbnQgdG8gaGlkZSB0aGUgb3BlbiBkcm9wZG93biBpZiBjbGlja2VkIG91dHNpZGVcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJylcbiAgcHVibGljIGNsaWNrT3V0c2lkZUNvbXBvbmVudCgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy5jbGlja2VkSW5zaWRlKSB7XG4gICAgICB0aGlzLnRvZ2dsZURyb3Bkb3duID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG4gICAgICAvLyBjbGVhciBzZWFyaCBvbiBjbG9zZVxuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jbG9zZS5lbWl0KCk7XG4gICAgfVxuICAgIHRoaXMuY2xpY2tlZEluc2lkZSA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIGNsaWNrIGhhbmRsZXIgb24gZG9jdW1uZW50IHRvIGhpZGUgdGhlIG9wZW4gZHJvcGRvd24gaWYgY2xpY2tlZCBvdXRzaWRlXG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJylcbiAgcHVibGljIEtleVByZXNzT3V0c2lkZUNvbXBvbmVudCgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghdGhpcy5pbnNpZGVLZXlQcmVzcykge1xuICAgICAgdGhpcy50b2dnbGVEcm9wZG93biA9IGZhbHNlO1xuICAgICAgdGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuICAgIH1cbiAgICB0aGlzLmluc2lkZUtleVByZXNzID0gZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIGtleSB1cCBhbmQgZG93biBldmVudCBhbmQgZW50ZXIgcHJlc3MgZm9yIHNlbGVjdGluZyBlbGVtZW50XG4gICAqL1xuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgcHVibGljIGhhbmRsZUtleWJvYXJkRXZlbnQoJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgdGhpcy5pbnNpZGVLZXlQcmVzcyA9IHRydWU7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoJGV2ZW50LmtleUNvZGUgPT09IDI3IHx8IHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5zaWRlS2V5UHJlc3MgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXZhT3B0cyA9IHRoaXMuYXZhaWxhYmxlT3B0aW9ucy50b0FycmF5KCk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoJGV2ZW50LmtleUNvZGUgIT09IDkgJiYgYXZhT3B0cy5sZW5ndGggPT09IDAgJiYgIXRoaXMudG9nZ2xlRHJvcGRvd24pIHtcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24gPSB0cnVlO1xuICAgIH1cbiAgICAvLyBBcnJvdyBEb3duXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoJGV2ZW50LmtleUNvZGUgPT09IDQwICYmIGF2YU9wdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5vbkFycm93S2V5RG93bigpO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmICh0aGlzLmZvY3VzZWRJdGVtSW5kZXghID49IGF2YU9wdHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IDA7XG4gICAgICB9XG4gICAgICBhdmFPcHRzW3RoaXMuZm9jdXNlZEl0ZW1JbmRleCFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvLyBBcnJvdyBVcFxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCRldmVudC5rZXlDb2RlID09PSAzOCAmJiBhdmFPcHRzLmxlbmd0aCkge1xuICAgICAgdGhpcy5vbkFycm93S2V5VXAoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5mb2N1c2VkSXRlbUluZGV4ISA+PSBhdmFPcHRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSBhdmFPcHRzLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICBhdmFPcHRzW3RoaXMuZm9jdXNlZEl0ZW1JbmRleCFdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvLyBFbnRlclxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCRldmVudC5rZXlDb2RlID09PSAxMyAmJiB0aGlzLmZvY3VzZWRJdGVtSW5kZXggIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBuZXcgRmlsdGVyQnlQaXBlKCkudHJhbnNmb3JtKFxuICAgICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLFxuICAgICAgICB0aGlzLnNlYXJjaFRleHQhLFxuICAgICAgICB0aGlzLmNvbmZpZy5zZWFyY2hPbktleVxuICAgICAgKTtcbiAgICAgIHRoaXMuc2VsZWN0SXRlbShcbiAgICAgICAgZmlsdGVyZWRJdGVtc1t0aGlzLmZvY3VzZWRJdGVtSW5kZXhdLFxuICAgICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLmluZGV4T2YoZmlsdGVyZWRJdGVtc1t0aGlzLmZvY3VzZWRJdGVtSW5kZXhdKVxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gJGV2ZW50LmtleVxuXG4gIH1cblxuICAvKipcbiAgICogQ29tcG9uZW50IG9uSW5pdFxuICAgKi9cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgIT09ICd1bmRlZmluZWQnICYmIEFycmF5LmlzQXJyYXkodGhpcy5vcHRpb25zKSkge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZy5pc05vdFNvcnQpIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbLi4udGhpcy5vcHRpb25zLnNvcnQodGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvcildO1xuICAgICAgZWxzZSB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnRoaXMub3B0aW9uc107XG4gICAgICB0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogYWZ0ZXIgdmlldyBpbml0IHRvIHN1YnNjcmliZSB0byBhdmFpbGFibGUgb3B0aW9uIGNoYW5nZXNcbiAgICovXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5hdmFpbGFibGVPcHRpb25zLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuc2V0Tm90Rm91bmRTdGF0ZS5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gIH1cblxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55LCBpbnRlcm5hbD86IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzTm90U29ydCkgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKV07XG4gICAgZWxzZSB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnRoaXMub3B0aW9uc11cbiAgICB0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcbiAgfVxuICAvKipcbiAgICogZnVuY3Rpb24gc2V0cyB3aGV0aGVyIHRvIHNob3cgaXRlbXMgbm90IGZvdW5kIHRleHQgb3Igbm90XG4gICAqL1xuICBwdWJsaWMgc2V0Tm90Rm91bmRTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5hdmFpbGFibGVPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zaG93Tm90Rm91bmQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3dOb3RGb3VuZCA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkcmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICAvKipcbiAgICogQ29tcG9uZW50IG9uY2hhZ2UgaS5lIHdoZW4gYW55IG9mIHRoZSBpbnB1dCBwcm9wZXJ0aWVzIGNoYW5nZVxuICAgKi9cbiAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAvLyB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucyB8fCBbXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChjaGFuZ2VzWydvcHRpb25zJ10pIHtcbiAgICAgIGlmICghdGhpcy5jb25maWcuaXNOb3RTb3J0KSB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnRoaXMub3B0aW9ucy5zb3J0KHRoaXMuY29uZmlnLmN1c3RvbUNvbXBhcmF0b3IpXTtcbiAgICAgIGVsc2UgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICAgIH1cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKFxuICAgICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KFtdKSB8fFxuICAgICAgICBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSA9PT0gJycgfHxcbiAgICAgICAgY2hhbmdlc1sndmFsdWUnXS5jdXJyZW50VmFsdWUgPT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnLmlzTm90U29ydCkgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKV07XG4gICAgICAgIGVsc2UgdGhpcy5hdmFpbGFibGVJdGVtcyA9IFsuLi50aGlzLm9wdGlvbnNdO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmluaXREcm9wZG93blZhbHVlc0FuZE9wdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlbGN0IGEgc2VsZWN0ZWQgaXRlbXNcbiAgICogQHBhcmFtIGl0ZW06ICBpdGVtIHRvIGJlIGRlc2VsZWN0ZWRcbiAgICogQHBhcmFtIGluZGV4OiAgaW5kZXggb2YgdGhlIGl0ZW1cbiAgICovXG4gIHB1YmxpYyBkZXNlbGVjdEl0ZW0oaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0ZW0gPT09IGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNwbGljZShpLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBsZXQgc29ydGVkSXRlbXMgPSBbLi4udGhpcy5hdmFpbGFibGVJdGVtc107XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIXRoaXMuYXZhaWxhYmxlSXRlbXMuaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMucHVzaChpdGVtKTtcbiAgICAgIGlmICghdGhpcy5jb25maWcuaXNOb3RTb3J0KSBzb3J0ZWRJdGVtcyA9IHRoaXMuYXZhaWxhYmxlSXRlbXMuc29ydCh0aGlzLmNvbmZpZy5jdXN0b21Db21wYXJhdG9yKTtcbiAgICAgIGVsc2Ugc29ydGVkSXRlbXMgPSB0aGlzLmF2YWlsYWJsZUl0ZW1zO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5zZWxlY3RlZEl0ZW1zXTtcbiAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zID0gWy4uLnNvcnRlZEl0ZW1zXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZy5kZWZhdWx0U29ydCkge1xuICAgICAgY29uc3Qgc2V0MTogU2V0PHN0cmluZz4gPSBuZXcgU2V0KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSAodGhpcy5jb25maWcuZGVmYXVsdFNvcnQgYXMgW251bWJlciwgc3RyaW5nXVtdKS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKGUgPT4gZVsxXSkuZmlsdGVyKGUgPT4gc2V0MS5oYXMoZSkpXG5cbiAgICAgIGNvbnN0IHNldDI6IFNldDxzdHJpbmc+ID0gbmV3IFNldCh0aGlzLmF2YWlsYWJsZUl0ZW1zKTtcbiAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSAodGhpcy5jb25maWcuZGVmYXVsdFNvcnQgYXMgW251bWJlciwgc3RyaW5nXVtdKS5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSkubWFwKGUgPT4gZVsxXSkuZmlsdGVyKGUgPT4gc2V0Mi5oYXMoZSkpXG4gICAgfVxuXG4gICAgdGhpcy52YWx1ZUNoYW5nZWQoKTtcbiAgICB0aGlzLnJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCk7XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0IGFuIGl0ZW1cbiAgICogQHBhcmFtIGl0ZW06ICBpdGVtIHRvIGJlIHNlbGVjdGVkXG4gICAqIEBwYXJhbSBpbmRleDogIGluZGV4IG9mIHRoZSBpdGVtXG4gICAqL1xuICBwdWJsaWMgc2VsZWN0SXRlbShpdGVtOiBzdHJpbmcsIGluZGV4PzogbnVtYmVyKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcy5wdXNoKHRoaXMuc2VsZWN0ZWRJdGVtc1swXSk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0ZW0gPT09IGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5jb25maWcuY2xlYXJPblNlbGVjdGlvbikge1xuICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLnNlbGVjdGVkSXRlbXNdO1xuICAgIHRoaXMuYXZhaWxhYmxlSXRlbXMgPSBbLi4udGhpcy5hdmFpbGFibGVJdGVtc107XG5cbiAgICBpZiAoIXRoaXMuY29uZmlnLmlzTm90U29ydCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnNvcnQodGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvcik7XG4gICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLnNvcnQodGhpcy5jb25maWcuY3VzdG9tQ29tcGFyYXRvcik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnLmRlZmF1bHRTb3J0KSB7XG4gICAgICBjb25zdCBzZXQxOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9ICh0aGlzLmNvbmZpZy5kZWZhdWx0U29ydCBhcyBbbnVtYmVyLCBzdHJpbmddW10pLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKS5tYXAoZSA9PiBlWzFdKS5maWx0ZXIoZSA9PiBzZXQxLmhhcyhlKSlcblxuICAgICAgY29uc3Qgc2V0MjogU2V0PHN0cmluZz4gPSBuZXcgU2V0KHRoaXMuYXZhaWxhYmxlSXRlbXMpO1xuICAgICAgdGhpcy5hdmFpbGFibGVJdGVtcyA9ICh0aGlzLmNvbmZpZy5kZWZhdWx0U29ydCBhcyBbbnVtYmVyLCBzdHJpbmddW10pLnNvcnQoKGEsIGIpID0+IGFbMF0gLSBiWzBdKS5tYXAoZSA9PiBlWzFdKS5maWx0ZXIoZSA9PiBzZXQyLmhhcyhlKSlcbiAgICB9XG5cbiAgICAvLyB0aGlzLnNlYXJjaFRleHQgPSBudWxsO1xuICAgIHRoaXMudmFsdWVDaGFuZ2VkKCk7XG4gICAgdGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gc2VsZWN0ZWQgaXRlbXMgY2hhbmdlcyB0cmlnZ2VyIHRoZSBjaGFhbmdlIGJhY2sgdG8gcGFyZW50XG4gICAqL1xuICBwdWJsaWMgdmFsdWVDaGFuZ2VkKCkge1xuICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbXMsIHRydWUpO1xuICAgIC8vIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB0aGlzLmNoYW5nZS5lbWl0KHsgdmFsdWU6IHRoaXMudmFsdWUgfSk7XG4gICAgdGhpcy5zZXRTZWxlY3RlZERpc3BsYXlUZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoZSBkcm9wZG93bmxpc3Qgb24vb2ZmXG4gICAqL1xuICBwdWJsaWMgdG9nZ2xlU2VsZWN0RHJvcGRvd24oKSB7XG4gICAgdGhpcy50b2dnbGVEcm9wZG93biA9ICF0aGlzLnRvZ2dsZURyb3Bkb3duO1xuICAgIGlmICh0aGlzLnRvZ2dsZURyb3Bkb3duKSB7XG4gICAgICB0aGlzLm9wZW4uZW1pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgICB9XG4gICAgdGhpcy5yZXNldEFycm93S2V5QWN0aXZlRWxlbWVudCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFuZ2UgaGFuZGxlciBmb3Igc2VhcmNoIHRleHRcbiAgICovXG4gIHB1YmxpYyBzZWFyY2hUZXh0Q2hhbmdlZCgpIHtcbiAgICB0aGlzLnNlYXJjaENoYW5nZS5lbWl0KHRoaXMuc2VhcmNoVGV4dCk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2VhcmNoVGV4dCgkZXZlbnQ6IGFueSkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBpbml0aWFsaXplIHRoZSBjb25maWcgYW5kIG90aGVyIHByb3BlcnRpZXNcbiAgICovXG4gIHByaXZhdGUgaW5pdERyb3Bkb3duVmFsdWVzQW5kT3B0aW9ucygpIHtcbiAgICBjb25zdCBjb25maWc6IGFueSA9IHtcbiAgICAgIGRpc3BsYXlLZXk6ICdkZXNjcmlwdGlvbicsXG4gICAgICBoZWlnaHQ6ICdhdXRvJyxcbiAgICAgIHNlYXJjaDogZmFsc2UsXG4gICAgICBwbGFjZWhvbGRlcjogJy0nLFxuICAgICAgc2VhcmNoUGxhY2Vob2xkZXI6ICdQZXNxdWlzYXIgJyxcbiAgICAgIGxpbWl0VG86IDAsXG4gICAgICBjdXN0b21Db21wYXJhdG9yOiB1bmRlZmluZWQsXG4gICAgICBub1Jlc3VsdHNGb3VuZDogJ05hZGEgZW5jb250cmFkbyEnLFxuICAgICAgbW9yZVRleHQ6ICdTZWxlY2lvbmFkb3MnLFxuICAgICAgc2VhcmNoT25LZXk6IG51bGwsXG4gICAgICBjbGVhck9uU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIGlucHV0RGlyZWN0aW9uOiAnbHRyJyxcbiAgICB9O1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuY29uZmlnID09PSAndW5kZWZpbmVkJyB8fCBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZykubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmNvbmZpZyA9IHsgLi4uY29uZmlnIH07XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGNvbmZpZykpIHtcbiAgICAgIHRoaXMuY29uZmlnW2tleV0gPSB0aGlzLmNvbmZpZ1trZXldID8gdGhpcy5jb25maWdba2V5XSA6IGNvbmZpZ1trZXldO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZyA9IHsgLi4udGhpcy5jb25maWcgfTtcbiAgICAvLyBBZGRpbmcgcGxhY2Vob2xkZXIgaW4gY29uZmlnIGFzIGRlZmF1bHQgcGFyYW1cbiAgICB0aGlzLnNlbGVjdGVkRGlzcGxheVRleHQgPSB0aGlzLmNvbmZpZ1sncGxhY2Vob2xkZXInXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSAnJyAmJiB0eXBlb2YgdGhpcy52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMudmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zWzBdID0gdGhpcy52YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLnZhbHVlID0gW107XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaW5kID0gdGhpcy5hdmFpbGFibGVJdGVtcy5maW5kSW5kZXgoXG4gICAgICAgICAgKGFJdGVtOiBhbnkpID0+IEpTT04uc3RyaW5naWZ5KGl0ZW0pID09PSBKU09OLnN0cmluZ2lmeShhSXRlbSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGluZCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLmF2YWlsYWJsZUl0ZW1zLnNwbGljZShpbmQsIDEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZXRTZWxlY3RlZERpc3BsYXlUZXh0KCk7XG4gIH1cblxuICAvKipcbiAgICogc2V0IHRoZSB0ZXh0IHRvIGJlIGRpc3BsYXllZFxuICAgKi9cbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZERpc3BsYXlUZXh0KCkge1xuICAgIGxldCB0ZXh0OiBzdHJpbmcgPSB0aGlzLnNlbGVjdGVkSXRlbXNbMF07XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodHlwZW9mIHRoaXMuc2VsZWN0ZWRJdGVtc1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRleHQgPSB0aGlzLmNvbmZpZy5kaXNwbGF5Rm5cbiAgICAgICAgPyB0aGlzLmNvbmZpZy5kaXNwbGF5Rm4odGhpcy5zZWxlY3RlZEl0ZW1zWzBdKVxuICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJdGVtc1swXVt0aGlzLmNvbmZpZy5kaXNwbGF5S2V5XTtcbiAgICB9XG4gICAgaWYgKHRoaXMubXVsdGlwbGUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDFcbiAgICAgICAgICA/IHRleHRcbiAgICAgICAgICA6IHRleHQgK1xuICAgICAgICAgIGAgKyAke3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxfSAke3RoaXMuY29uZmlnLm1vcmVUZXh0fWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWREaXNwbGF5VGV4dCA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT09IDAgPyB0aGlzLmNvbmZpZy5wbGFjZWhvbGRlciA6IHRleHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2ZW50IGhhbmRsZXIgZm9yIGFycm93IGtleSB1cCBldmVudCB0aGF0cyBmb2N1c2VzIG9uIGEgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBvbkFycm93S2V5VXAoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5mb2N1c2VkSXRlbUluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSB0aGlzLmF2YWlsYWJsZUl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMub25BcnJvd0tleSgpKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJdGVtSW5kZXghO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVudCBoYW5kbGVyIGZvciBhcnJvdyBrZXkgZG93biBldmVudCB0aGF0cyBmb2N1c2VzIG9uIGEgaXRlbVxuICAgKi9cbiAgcHJpdmF0ZSBvbkFycm93S2V5RG93bigpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmZvY3VzZWRJdGVtSW5kZXggPT09IHRoaXMuYXZhaWxhYmxlSXRlbXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5mb2N1c2VkSXRlbUluZGV4ID0gMDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5vbkFycm93S2V5KCkpIHtcbiAgICAgIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCErKztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9uQXJyb3dLZXkoKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5mb2N1c2VkSXRlbUluZGV4ID09PSBudWxsKSB7XG4gICAgICB0aGlzLmZvY3VzZWRJdGVtSW5kZXggPSAwO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiB3aWxsIHJlc2V0IHRoZSBlbGVtZW50IHRoYXQgaXMgbWFya2VkIGFjdGl2ZSB1c2luZyBhcnJvdyBrZXlzXG4gICAqL1xuICBwcml2YXRlIHJlc2V0QXJyb3dLZXlBY3RpdmVFbGVtZW50KCkge1xuICAgIHRoaXMuZm9jdXNlZEl0ZW1JbmRleCA9IG51bGw7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJuZ3gtZHJvcGRvd24tY29udGFpbmVyXCIgdGFiaW5kZXg9XCIwXCI+XG4gIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBjbGFzcz1cIm5neC1kcm9wZG93bi1idXR0b25cIiBbbmdDbGFzc109XCJ7ICduZ3gtZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiAoY2xpY2spPVwidG9nZ2xlU2VsZWN0RHJvcGRvd24oKVwiPlxuICAgIDxzcGFuIGNsYXNzPVwiZGlzcGxheS10ZXh0XCI+e3sgc2VsZWN0ZWREaXNwbGF5VGV4dCB9fSA8L3NwYW4+XG4gICAgPGFwcC1zdmctc3RvcmFnZSBzdmdOYW1lPVwiY2hldnJvbi1kb3duXCIgc3ZnQ29sb3I9XCIjMzQzQTQwXCIgc3ZnU2l6ZT1cInNtYWxsXCIvPlxuICA8L2J1dHRvbj5cbiAgPGRpdiBjbGFzcz1cIm5neC1kcm9wZG93bi1saXN0LWNvbnRhaW5lciBzY3JvbGwteVwiICpuZ0lmPVwidG9nZ2xlRHJvcGRvd25cIiBbc3R5bGUubWF4SGVpZ2h0XT1cImNvbmZpZy5oZWlnaHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWNvbnRhaW5lciBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIiAqbmdJZj1cImNvbmZpZy5zZWFyY2hcIj5cbiAgICAgIDxpbnB1dCAoY2hhbmdlKT1cImNoYW5nZVNlYXJjaFRleHQoJGV2ZW50KVwiIFtzdHlsZS5kaXJlY3Rpb25dPVwiY29uZmlnLmlucHV0RGlyZWN0aW9uXCIgbmFtZT1cInNlYXJjaC10ZXh0XCJcbiAgICAgICAgKGlucHV0KT1cInNlYXJjaFRleHRDaGFuZ2VkKClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiB0YWJpbmRleD1cIi0xXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgLz5cbiAgICAgIDxsYWJlbCBbbmdDbGFzc109XCJ7IGFjdGl2ZTogc2VhcmNoVGV4dCB9XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibnNkaWNvbi1zZWFyY2hcIj48L3NwYW4+XG4gICAgICAgIHt7IGNvbmZpZy5zZWFyY2hQbGFjZWhvbGRlciB9fTwvbGFiZWw+XG4gICAgPC9kaXY+XG4gICAgPHVsIGNsYXNzPVwic2VsZWN0ZWQtaXRlbXNcIj5cbiAgICAgIDxsaSBjbGFzcz1cImQtZmxleCBmbGV4LXJvd1wiIHRhYmluZGV4PVwiLTFcIiAqbmdGb3I9XCJsZXQgc2VsZWN0ZWQgb2Ygc2VsZWN0ZWRJdGVtczsgbGV0IGkgPSBpbmRleFwiXG4gICAgICAgIChjbGljayk9XCJkZXNlbGVjdEl0ZW0oc2VsZWN0ZWQsIGkpXCI+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2sgbnNkaWNvbi1jbG9zZSBtZS0yXCIgY2hlY2tlZD1cInRydWVcIj5cbiAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi10b3A6IDJweDtcIj57e1xuICAgICAgICAgIGNvbmZpZy5kaXNwbGF5Rm5cbiAgICAgICAgICA/IGNvbmZpZy5kaXNwbGF5Rm4oc2VsZWN0ZWQpXG4gICAgICAgICAgOiBzZWxlY3RlZFtjb25maWcuZGlzcGxheUtleV0gfHwgc2VsZWN0ZWRcbiAgICAgICAgICB9fTwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICAgIDxociAqbmdJZj1cInNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCAmJiBhdmFpbGFibGVJdGVtcy5sZW5ndGggPiAwXCIgLz5cbiAgICA8dWwgY2xhc3M9XCJhdmFpbGFibGUtaXRlbXNcIj5cbiAgICAgIDxsaSBjbGFzcz1cImQtZmxleCBmbGV4LXJvd1wiICNhdmFpbGFibGVPcHRpb24gKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXZhaWxhYmxlSXRlbXMgfCBmaWx0ZXJCeTogc2VhcmNoVGV4dDogY29uZmlnLnNlYXJjaE9uS2V5XG5cdFx0XHR8IGxpbWl0VG86IGNvbmZpZy5saW1pdFRvOyBsZXQgaSA9IGluZGV4XCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBmb2N1c2VkSXRlbUluZGV4ID09IGkgJiYgIWl0ZW0uZGlzYWJsZWQsIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIH1cIlxuICAgICAgICAoY2xpY2spPVwic2VsZWN0SXRlbShpdGVtLCBpKVwiPlxuICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrIG5zZGljb24tY2xvc2UgbWUtMlwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLXRvcDogMnB4O1wiPlxuICAgICAgICAgIHt7IGNvbmZpZy5kaXNwbGF5Rm4gPyBjb25maWcuZGlzcGxheUZuKGl0ZW0pIDogaXRlbVtjb25maWcuZGlzcGxheUtleV0gfHwgaXRlbSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgKm5nSWY9XCJzaG93Tm90Rm91bmRcIj57eyBjb25maWcubm9SZXN1bHRzRm91bmQgfX08L2xpPlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -600,9 +600,10 @@ class ComboboxComponent {
600
600
  ngOnInit() {
601
601
  /* istanbul ignore else */
602
602
  if (typeof this.options !== 'undefined' && Array.isArray(this.options)) {
603
- this.availableItems = [
604
- ...this.options.sort(this.config.customComparator),
605
- ];
603
+ if (!this.config.isNotSort)
604
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
605
+ else
606
+ this.availableItems = [...this.options];
606
607
  this.initDropdownValuesAndOptions();
607
608
  }
608
609
  }
@@ -659,7 +660,10 @@ class ComboboxComponent {
659
660
  }
660
661
  reset() {
661
662
  this.selectedItems = [];
662
- this.availableItems = [...this.options.sort(this.config.customComparator)];
663
+ if (!this.config.isNotSort)
664
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
665
+ else
666
+ this.availableItems = [...this.options];
663
667
  this.initDropdownValuesAndOptions();
664
668
  }
665
669
  /**
@@ -683,9 +687,10 @@ class ComboboxComponent {
683
687
  this.options = this.options || [];
684
688
  /* istanbul ignore else */
685
689
  if (changes['options']) {
686
- this.availableItems = [
687
- ...this.options.sort(this.config.customComparator),
688
- ];
690
+ if (!this.config.isNotSort)
691
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
692
+ else
693
+ this.availableItems = [...this.options];
689
694
  }
690
695
  /* istanbul ignore else */
691
696
  if (changes['value']) {
@@ -693,9 +698,10 @@ class ComboboxComponent {
693
698
  if (JSON.stringify(changes['value'].currentValue) === JSON.stringify([]) ||
694
699
  changes['value'].currentValue === '' ||
695
700
  changes['value'].currentValue === null) {
696
- this.availableItems = [
697
- ...this.options.sort(this.config.customComparator),
698
- ];
701
+ if (!this.config.isNotSort)
702
+ this.availableItems = [...this.options.sort(this.config.customComparator)];
703
+ else
704
+ this.availableItems = [...this.options];
699
705
  }
700
706
  }
701
707
  this.initDropdownValuesAndOptions();
@@ -716,7 +722,10 @@ class ComboboxComponent {
716
722
  /* istanbul ignore else */
717
723
  if (!this.availableItems.includes(item)) {
718
724
  this.availableItems.push(item);
719
- sortedItems = this.availableItems.sort(this.config.customComparator);
725
+ if (!this.config.isNotSort)
726
+ sortedItems = this.availableItems.sort(this.config.customComparator);
727
+ else
728
+ sortedItems = this.availableItems;
720
729
  }
721
730
  this.selectedItems = [...this.selectedItems];
722
731
  this.availableItems = [...sortedItems];
@@ -724,6 +733,12 @@ class ComboboxComponent {
724
733
  if (!Array.isArray(this.value)) {
725
734
  this.value = [];
726
735
  }
736
+ if (this.config.defaultSort) {
737
+ const set1 = new Set(this.selectedItems);
738
+ this.selectedItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set1.has(e));
739
+ const set2 = new Set(this.availableItems);
740
+ this.availableItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set2.has(e));
741
+ }
727
742
  this.valueChanged();
728
743
  this.resetArrowKeyActiveElement();
729
744
  }
@@ -755,8 +770,16 @@ class ComboboxComponent {
755
770
  }
756
771
  this.selectedItems = [...this.selectedItems];
757
772
  this.availableItems = [...this.availableItems];
758
- this.selectedItems.sort(this.config.customComparator);
759
- this.availableItems.sort(this.config.customComparator);
773
+ if (!this.config.isNotSort) {
774
+ this.selectedItems.sort(this.config.customComparator);
775
+ this.availableItems.sort(this.config.customComparator);
776
+ }
777
+ if (this.config.defaultSort) {
778
+ const set1 = new Set(this.selectedItems);
779
+ this.selectedItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set1.has(e));
780
+ const set2 = new Set(this.availableItems);
781
+ this.availableItems = this.config.defaultSort.sort((a, b) => a[0] - b[0]).map(e => e[1]).filter(e => set2.has(e));
782
+ }
760
783
  // this.searchText = null;
761
784
  this.valueChanged();
762
785
  this.resetArrowKeyActiveElement();