@magicx-eng/ai-autocomplete-angular 0.29.0 → 0.30.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.
package/README.md CHANGED
@@ -473,7 +473,10 @@ Each server item becomes a `Product` with `id` (the item's stable id), `title`,
473
473
  currency is yours to add), `vendor`, `imageUrl`, and a `url`: the item's own
474
474
  `item_url` when the uploaded catalog named one (absolute or root-relative;
475
475
  anything else is ignored), else a **relative** `/products/{handle}` — the right
476
- link for a Shopify widget running on the storefront itself. An item with
476
+ link for a Shopify widget running on the storefront itself — opened on the
477
+ variant the query chose (`?variant=…`, e.g. the blue one for "blue shoes") when
478
+ there is one, whose price and image the card then shows. `available` is carried
479
+ over when the server reports it. An item with
477
480
  neither gets no `url`: its card is still activatable and still emits
478
481
  `(productSelect)`, it just has nothing for cmd-click to open. `productFromMatchedItem` / `productsFromCustomFields` are
479
482
  exported for a hand-rolled strip that wants the same mapping.
@@ -500,6 +503,17 @@ empty or whitespace-only title shows `?`. The fallback works in both row and
500
503
  list layouts. Initial tiles are decorative (`aria-hidden="true"`); the card's
501
504
  visible title supplies its text.
502
505
 
506
+ **Sold out.** A product with `available: false` shows a "Sold out" badge over
507
+ the top-left of its image (in the list layout, a smaller banner across the
508
+ bottom of the thumbnail) and its image is desaturated; the card stays
509
+ selectable and keeps its link. Absent or `true` shows no
510
+ badge, so leave `available` out when you don't know. The badge is part of the
511
+ card's text, so screen readers announce it. Theme it with
512
+ `--aia-product-badge-bg`, `--aia-product-badge-color`,
513
+ `--aia-product-badge-font-size` and `--aia-product-badge-inset`, and the list
514
+ banner with `--aia-product-badge-list-bg`, `--aia-product-badge-list-color` and
515
+ `--aia-product-badge-list-font-size`.
516
+
503
517
  Bind `productImageFallback` on `<ai-autocomplete>` in Tier 1 or directly
504
518
  on `<ai-autocomplete-dropdown>` in Tier 2:
505
519
 
@@ -625,7 +639,7 @@ export class SearchComponent {
625
639
  }
626
640
  ```
627
641
 
628
- `Product` is exactly six fields; only `id` and `title` are required:
642
+ `Product` is exactly seven fields; only `id` and `title` are required:
629
643
 
630
644
  ```ts
631
645
  type Product = {
@@ -635,6 +649,7 @@ type Product = {
635
649
  imageUrl?: string | null;
636
650
  price?: string;
637
651
  vendor?: string;
652
+ available?: boolean; // false shows a "Sold out" badge
638
653
  };
639
654
  ```
640
655
 
@@ -1,5 +1,5 @@
1
1
  import { Directive, ElementRef, Input, inject, NgZone, Renderer2, } from "@angular/core";
2
- import { extractPlainText, getCursorOffset, plainTextLength, renderEditableContent, setCursorOffset, } from "@magicx-eng/ai-autocomplete-vanilla";
2
+ import { chipIdFromTap, extractPlainText, getCursorOffset, keepCaretOnChip, plainTextLength, renderEditableContent, setCursorOffset, } from "@magicx-eng/ai-autocomplete-vanilla";
3
3
  import { Subject, takeUntil } from "rxjs";
4
4
  import * as i0 from "@angular/core";
5
5
  /**
@@ -113,6 +113,23 @@ export class AIAutocompleteEditorHostDirective {
113
113
  }
114
114
  }
115
115
  // === Host event handlers ===
116
+ /**
117
+ * A tap on a chip opens *that* chip. Touch browsers place the caret where
118
+ * they see fit (iOS snaps it to a word boundary, and the focusing tap often
119
+ * parks it at the end of the text — inside the last chip when the input ends
120
+ * with one), so the selectionchange path can miss the tapped chip or open
121
+ * the wrong one. The click target is the element actually hit and overrides
122
+ * it; `keepCaretOnChip` then pulls a stray caret onto the tapped chip so the
123
+ * next selectionchange doesn't close or redirect what the tap opened.
124
+ */
125
+ onClick(event) {
126
+ const el = this.el.nativeElement;
127
+ const id = chipIdFromTap(el, event.target);
128
+ if (!id)
129
+ return;
130
+ this.controller.startEditingParam(id);
131
+ keepCaretOnChip(el, id);
132
+ }
116
133
  onCompositionStart() {
117
134
  this.composing = true;
118
135
  }
@@ -260,7 +277,7 @@ export class AIAutocompleteEditorHostDirective {
260
277
  }
261
278
  }
262
279
  AIAutocompleteEditorHostDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteEditorHostDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
263
- AIAutocompleteEditorHostDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteEditorHostDirective, isStandalone: true, selector: "[aiaEditorHost]", inputs: { controller: ["aiaEditorHost", "controller"], autoFocus: "autoFocus", showChipIcons: "showChipIcons", showChipImages: "showChipImages" }, host: { attributes: { "role": "combobox", "aria-autocomplete": "list", "aria-haspopup": "listbox", "spellcheck": "true", "enterkeyhint": "send", "tabindex": "0" }, listeners: { "input": "onInput()", "keydown": "onKeyDown($event)", "compositionstart": "onCompositionStart()", "compositionend": "onCompositionEnd()", "paste": "onPaste($event)", "focus": "onFocus()", "blur": "onBlur()" } }, usesOnChanges: true, ngImport: i0 });
280
+ AIAutocompleteEditorHostDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteEditorHostDirective, isStandalone: true, selector: "[aiaEditorHost]", inputs: { controller: ["aiaEditorHost", "controller"], autoFocus: "autoFocus", showChipIcons: "showChipIcons", showChipImages: "showChipImages" }, host: { attributes: { "role": "combobox", "aria-autocomplete": "list", "aria-haspopup": "listbox", "spellcheck": "true", "enterkeyhint": "send", "tabindex": "0" }, listeners: { "input": "onInput()", "keydown": "onKeyDown($event)", "compositionstart": "onCompositionStart()", "compositionend": "onCompositionEnd()", "paste": "onPaste($event)", "click": "onClick($event)", "focus": "onFocus()", "blur": "onBlur()" } }, usesOnChanges: true, ngImport: i0 });
264
281
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteEditorHostDirective, decorators: [{
265
282
  type: Directive,
266
283
  args: [{
@@ -278,6 +295,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
278
295
  "(compositionstart)": "onCompositionStart()",
279
296
  "(compositionend)": "onCompositionEnd()",
280
297
  "(paste)": "onPaste($event)",
298
+ "(click)": "onClick($event)",
281
299
  "(focus)": "onFocus()",
282
300
  "(blur)": "onBlur()",
283
301
  },
@@ -292,4 +310,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
292
310
  }], showChipImages: [{
293
311
  type: Input
294
312
  }] } });
295
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWhvc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbnRlcm5hbC9lZGl0b3ItaG9zdC9lZGl0b3ItaG9zdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBSU4sU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLGVBQWUsRUFDZixxQkFBcUIsRUFDckIsZUFBZSxHQUNoQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUkxQzs7O0dBR0c7QUFDSCxJQUFJLGtCQUF1QyxDQUFDO0FBQzVDLFNBQVMscUJBQXFCO0lBQzVCLElBQUksa0JBQWtCLEtBQUssU0FBUztRQUFFLE9BQU8sa0JBQWtCLENBQUM7SUFDaEUsSUFBSSxPQUFPLFFBQVEsS0FBSyxXQUFXO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDbEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDeEQsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLGVBQWUsS0FBSyxnQkFBZ0IsQ0FBQztJQUNoRSxPQUFPLGtCQUFrQixDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQW9CSCxNQUFNLE9BQU8saUNBQWlDO0lBbkI5QztRQXFCVyxjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQzFCLDZGQUE2RjtRQUNwRixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUM5QixzSEFBc0g7UUFDN0csbUJBQWMsR0FBRyxJQUFJ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YSxJQUFJLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxFQUFFO2dCQUNoRixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztnQkFDL0IsZUFBZSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDMUM7aUJBQU0sSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7YUFDekI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OytIQXBQVSxpQ0FBaUM7bUhBQWpDLGlDQUFpQzs0RkFBakMsaUNBQWlDO2tCQW5CN0MsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsSUFBSSxFQUFFO3dCQUNKLElBQUksRUFBRSxVQUFVO3dCQUNoQixtQkFBbUIsRUFBRSxNQUFNO3dCQUMzQixlQUFlLEVBQUUsU0FBUzt3QkFDMUIsVUFBVSxFQUFFLE1BQU07d0JBQ2xCLFlBQVksRUFBRSxNQUFNO3dCQUNwQixRQUFRLEVBQUUsR0FBRzt3QkFDYixTQUFTLEVBQUUsV0FBVzt3QkFDdEIsV0FBVyxFQUFFLG1CQUFtQjt3QkFDaEMsb0JBQW9CLEVBQUUsc0JBQXNCO3dCQUM1QyxrQkFBa0IsRUFBRSxvQkFBb0I7d0JBQ3hDLFNBQVMsRUFBRSxpQkFBaUI7d0JBQzVCLFNBQVMsRUFBRSxXQUFXO3dCQUN0QixRQUFRLEVBQUUsVUFBVTtxQkFDckI7aUJBQ0Y7OEJBRXlCLFVBQVU7c0JBQWpDLEtBQUs7dUJBQUMsZUFBZTtnQkFDYixTQUFTO3NCQUFqQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIGluamVjdCxcbiAgTmdab25lLFxuICB0eXBlIE9uQ2hhbmdlcyxcbiAgdHlwZSBPbkRlc3Ryb3ksXG4gIHR5cGUgT25Jbml0LFxuICBSZW5kZXJlcjIsXG4gIHR5cGUgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGV4dHJhY3RQbGFpblRleHQsXG4gIGdldEN1cnNvck9mZnNldCxcbiAgcGxhaW5UZXh0TGVuZ3RoLFxuICByZW5kZXJFZGl0YWJsZUNvbnRlbnQsXG4gIHNldEN1cnNvck9mZnNldCxcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHR5cGUgeyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vLi4vY29udHJvbGxlci9haS1hdXRvY29tcGxldGUuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgeyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSB9IGZyb20gXCIuLi8uLi9zaGFyZWQvdHlwZXNcIjtcblxuLyoqXG4gKiBNb2R1bGUtbGV2ZWwgY2FjaGUgZm9yIHRoZSBvbmUtdGltZSBwbGFpbnRleHQtb25seSBmZWF0dXJlIGRldGVjdGlvbi5cbiAqIE1pcnJvcnMgYHN1cHBvcnRzUGxhaW50ZXh0T25seWAgaW4gdXNlQ29udGVudEVkaXRhYmxlRWRpdG9yLnRzLlxuICovXG5sZXQgcGxhaW50ZXh0T25seUNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gc3VwcG9ydHNQbGFpbnRleHRPbmx5KCk6IGJvb2xlYW4ge1xuICBpZiAocGxhaW50ZXh0T25seUNhY2hlICE9PSB1bmRlZmluZWQpIHJldHVybiBwbGFpbnRleHRPbmx5Q2FjaGU7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvYmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICBwcm9iZS5zZXRBdHRyaWJ1dGUoXCJjb250ZW50ZWRpdGFibGVcIiwgXCJwbGFpbnRleHQtb25seVwiKTtcbiAgcGxhaW50ZXh0T25seUNhY2hlID0gcHJvYmUuY29udGVudEVkaXRhYmxlID09PSBcInBsYWludGV4dC1vbmx5XCI7XG4gIHJldHVybiBwbGFpbnRleHRPbmx5Q2FjaGU7XG59XG5cbi8qKlxuICogSW50ZXJuYWwgZGlyZWN0aXZlIHRoYXQgb3ducyBldmVyeSBjb25jZXJuIHNwZWNpZmljIHRvIHJ1bm5pbmcgdGhlXG4gKiBhdXRvY29tcGxldGUgb24gdG9wIG9mIGEgY29udGVudEVkaXRhYmxlIGhvc3Q6IGNvbXBvc2l0aW9uIHN0YXRlLCBjYXJldFxuICogdHJhY2tpbmcsIHNlbGVjdGlvbmNoYW5nZSBoYW5kbGluZywgYGJlZm9yZWlucHV0YCBpbnRlcmNlcHRpb24sIHBhc3RlXG4gKiBzYW5pdGl6YXRpb24sIHBsYWludGV4dC1vbmx5IGZlYXR1cmUgZGV0ZWN0aW9uLCBzZWdtZW50IHJlbmRlcmluZyxcbiAqIHBvc3QtcHJvbW90ZSByZWZvY3VzLCBhbmQgcmUtZWRpdCBjYXJldCBwYXJrLlxuICpcbiAqIE1pcnJvcnMgYHBhY2thZ2VzL3JlYWN0L3NyYy9ob29rcy91c2VDb250ZW50RWRpdGFibGVFZGl0b3IudHNgIG9uZS1mb3Itb25lLlxuICogVXNlZCBvbmx5IGJ5IHRoZSBUaWVyIDEgYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQg4oCUIG5ldmVyIGV4cG9ydGVkLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6IFwiW2FpYUVkaXRvckhvc3RdXCIsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGhvc3Q6IHtcbiAgICByb2xlOiBcImNvbWJvYm94XCIsXG4gICAgXCJhcmlhLWF1dG9jb21wbGV0ZVwiOiBcImxpc3RcIixcbiAgICBcImFyaWEtaGFzcG9wdXBcIjogXCJsaXN0Ym94XCIsXG4gICAgc3BlbGxjaGVjazogXCJ0cnVlXCIsXG4gICAgZW50ZXJrZXloaW50OiBcInNlbmRcIixcbiAgICB0YWJpbmRleDogXCIwXCIsXG4gICAgXCIoaW5wdXQpXCI6IFwib25JbnB1dCgpXCIsXG4gICAgXCIoa2V5ZG93bilcIjogXCJvbktleURvd24oJGV2ZW50KVwiLFxuICAgIFwiKGNvbXBvc2l0aW9uc3RhcnQpXCI6IFwib25Db21wb3NpdGlvblN0YXJ0KClcIixcbiAgICBcIihjb21wb3NpdGlvbmVuZClcIjogXCJvbkNvbXBvc2l0aW9uRW5kKClcIixcbiAgICBcIihwYXN0ZSlcIjogXCJvblBhc3RlKCRldmVudClcIixcbiAgICBcIihmb2N1cylcIjogXCJvbkZvY3VzKClcIixcbiAgICBcIihibHVyKVwiOiBcIm9uQmx1cigpXCIsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlRWRpdG9ySG9zdERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBASW5wdXQoXCJhaWFFZGl0b3JIb3N0XCIpIGNvbnRyb2xsZXIhOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXI7XG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IHRydWU7XG4gIC8qKiBXaGV0aGVyIGNvbXBsZXRlZCBjaGlwcyBkcmF3IHRoZSBpY29uIG9mIHRoZSBvcHRpb24gdGhhdCBhbnN3ZXJlZCB0aGVtLiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93Q2hpcEljb25zID0gdHJ1ZTtcbiAgLyoqIFdoZXRoZXIgY29tcGxldGVkIGNoaXBzIGRyYXcgdGhlIHBpY3R1cmUgb2YgdGhlIG9wdGlvbiB0aGF0IGFuc3dlcmVkIHRoZW0sIGluIHBsYWNlIG9mIHRoZSBpY29uLiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93Q2hpcEltYWdlcyA9IHRydWU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBlbCA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgY29tcG9zaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdElucHV0QXQgPSAwO1xuICBwcml2YXRlIGxhc3RTZWVuUGFyYW1JZCA9IFwiXCI7XG4gIC8vIFRoZSBsYXN0IHN0YXRlIHJlbmRlcmVkLCBzbyBhIHRvZ2dsZSBvZiBgc2hvd0NoaXBJY29uc2AgY2FuIHJlLXJlbmRlclxuICAvLyB0aGUgZWRpdG9yIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlIGNvbnRyb2xsZXIncyBuZXh0IHN0YXRlIHRpY2suXG4gIHByaXZhdGUgbGFzdFN0YXRlOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGxhc3RFZGl0aW5nSWQgPSBcIlwiO1xuICAvKipcbiAgICogSWQgb2Ygd2hpY2hldmVyIGNoaXAgdGhlIGRyb3Bkb3duIGlzIGN1cnJlbnRseSBvcGVuIG9uIOKAlCBhIGNvbXBsZXRlZCBwYXJhbVxuICAgKiBiZWluZyByZS1lZGl0ZWQsIG9yIGEgc3BhbiB0aGUgc2VydmVyIGlkZW50aWZpZWQgYXMgYSBkYXRlLiBFaXRoZXIga2luZFxuICAgKiBjb3VudHMsIG90aGVyd2lzZSBldmVyeSBjYXJldCB0aWNrIGluc2lkZSBhbiBvcGVuIGRhdGUgc3BhbiB3b3VsZCByZS1lbnRlclxuICAgKiB0aGUgcGljayBpdCBpcyBhbHJlYWR5IGluLlxuICAgKi9cbiAgcHJpdmF0ZSBlZGl0aW5nUGFyYW1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBkb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBiZWZvcmVJbnB1dExpc3RlbmVyPzogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udHJvbGxlcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiW2FpYUVkaXRvckhvc3RdIHJlcXVpcmVzIGEgY29udHJvbGxlclwiKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBjZU1vZGUgPSBzdXBwb3J0c1BsYWludGV4dE9ubHkoKSA/IFwicGxhaW50ZXh0LW9ubHlcIiA6IFwidHJ1ZVwiO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCBcImNvbnRlbnRlZGl0YWJsZVwiLCBjZU1vZGUpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCBcImFyaWEtY29udHJvbHNcIiwgdGhpcy5jb250cm9sbGVyLmxpc3Rib3hJZCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZWwsIFwic3VwcHJlc3MtY29udGVudC1lZGl0YWJsZS13YXJuaW5nXCIsIFwidHJ1ZVwiKTtcblxuICAgIC8vIEF1dG8tZm9jdXMgb24gbW91bnQuIElmIHRoZSBlZGl0b3IgYWxyZWFkeSBoYXMgZm9jdXMgKGUuZy4gZnJvbSBhXG4gICAgLy8gY2xpY2sgdGhhdCBmaXJlZCBiZWZvcmUgb3VyIGxpZmVjeWNsZSByYW4pLCBub3RpZnkgdGhlIGNvbnRyb2xsZXJcbiAgICAvLyBpbnN0ZWFkIG9mIHN0ZWFsaW5nIGZvY3VzLlxuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XG4gICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlbCkge1xuICAgICAgICAgIHRoaXMuY29udHJvbGxlci5zZXRGb2N1c2VkKHRydWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVsLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYmluZERvY3VtZW50U2VsZWN0aW9uTGlzdGVuZXIoKTtcbiAgICB0aGlzLmJpbmRCZWZvcmVJbnB1dExpc3RlbmVyKCk7XG4gICAgdGhpcy5iaW5kU3RhdGVTdWJzY3JpcHRpb24oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBjb25zdCB0b2dnbGVkID0gKGNoYW5nZXNbXCJzaG93Q2hpcEljb25zXCJdID8/IGNoYW5nZXNbXCJzaG93Q2hpcEltYWdlc1wiXSkgIT09IHVuZGVmaW5lZDtcbiAgICBjb25zdCBmaXJzdCA9IGNoYW5nZXNbXCJzaG93Q2hpcEljb25zXCJdPy5maXJzdENoYW5nZSA/PyBjaGFuZ2VzW1wic2hvd0NoaXBJbWFnZXNcIl0/LmZpcnN0Q2hhbmdlO1xuICAgIGlmICh0b2dnbGVkICYmICFmaXJzdCAmJiB0aGlzLmxhc3RTdGF0ZSkge1xuICAgICAgdGhpcy5yZW5kZXJFZGl0b3IodGhpcy5sYXN0U3RhdGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyRWRpdG9yKHN0YXRlOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSk6IHZvaWQge1xuICAgIHJlbmRlckVkaXRhYmxlQ29udGVudCh7XG4gICAgICBpbnB1dDogdGhpcy5lbC5uYXRpdmVFbGVtZW50LFxuICAgICAgc2VnbWVudHM6IHN0YXRlLnNlZ21lbnRzLFxuICAgICAgbmV3UGFyYW1JZDogc3RhdGUubmV3UGFyYW1JZCxcbiAgICAgIGVkaXRpbmdQYXJhbUlkOiBzdGF0ZS5lZGl0aW5nUGFyYW0/LmlkID8/IG51bGwsXG4gICAgICBwbGFjZWhvbGRlclRleHQ6IHN0YXRlLnBsYWNlaG9sZGVyVGV4dCxcbiAgICAgIGlzRm9jdXNlZDogc3RhdGUuaXNGb2N1c2VkLFxuICAgICAgc2hvd0NoaXBJY29uczogdGhpcy5zaG93Q2hpcEljb25zLFxuICAgICAgc2hvd0NoaXBJbWFnZXM6IHRoaXMuc2hvd0NoaXBJbWFnZXMsXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRTZWxlY3Rpb25MaXN0ZW5lciAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzZWxlY3Rpb25jaGFuZ2VcIiwgdGhpcy5kb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYmVmb3JlSW5wdXRMaXN0ZW5lcikge1xuICAgICAgdGhpcy5lbC5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJiZWZvcmVpbnB1dFwiLCB0aGlzLmJlZm9yZUlucHV0TGlzdGVuZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PSBIb3N0IGV2ZW50IGhhbmRsZXJzID09PVxuXG4gIG9uQ29tcG9zaXRpb25TdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvc2luZyA9IHRydWU7XG4gIH1cblxuICBvbkNvbXBvc2l0aW9uRW5kKCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maXJlSW5wdXQoKTtcbiAgfVxuXG4gIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5sYXN0SW5wdXRBdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHRoaXMuZmlyZUlucHV0KCk7XG4gICAgdGhpcy5jb250cm9sbGVyLmhhbmRsZUNhcmV0QWZ0ZXJJbnB1dChnZXRDdXJzb3JPZmZzZXQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuaGFuZGxlS2V5RG93bihldmVudCk7XG4gIH1cblxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGV4dCA9IChldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKFwidGV4dC9wbGFpblwiKSA/PyBcIlwiKS5yZXBsYWNlKC9cXHI/XFxuL2csIFwiIFwiKTtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBjb25zdCBkb2MgPSBlbC5vd25lckRvY3VtZW50ID8/IGRvY3VtZW50O1xuICAgIGNvbnN0IHNlbCA9IGRvYy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCBzZWwucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKCFlbC5jb250YWlucyhyYW5nZS5zdGFydENvbnRhaW5lcikpIHJldHVybjtcbiAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShub2RlKTtcbiAgICByYW5nZS5zZXRTdGFydEFmdGVyKG5vZGUpO1xuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgIHRoaXMuZmlyZUlucHV0KCk7XG4gIH1cblxuICBvbkZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRGb2N1c2VkKHRydWUpO1xuICB9XG5cbiAgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuXG4gIC8vID09PSBJbnRlcm5hbCBoZWxwZXJzID09PVxuXG4gIHByaXZhdGUgZmlyZUlucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbXBvc2luZykgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHJhdyA9IGV4dHJhY3RQbGFpblRleHQoZWwpO1xuICAgIGNvbnN0IHNob3VsZENhcGl0YWxpemUgPSByYXcubGVuZ3RoID4gMCAmJiByYXdbMF0gIT09IHJhd1swXS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IG5leHQgPSBzaG91bGRDYXBpdGFsaXplID8gcmF3WzBdLnRvVXBwZXJDYXNlKCkgKyByYXcuc2xpY2UoMSkgOiByYXc7XG4gICAgdGhpcy5jb250cm9sbGVyLmhhbmRsZVRleHRDaGFuZ2UobmV4dCk7XG4gIH1cblxuICBwcml2YXRlIGJpbmREb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAvLyBzZWxlY3Rpb25jaGFuZ2UgZmlyZXMgb24gZXZlcnkga2V5c3Ryb2tlIGFuZCBjYXJldCBtb3ZlIOKAlCBydW4gb3V0c2lkZVxuICAgIC8vIEFuZ3VsYXIncyB6b25lICjCpzE2LjEpIGFuZCByZS1lbnRlciBvbmx5IHdoZW4gd2UgYWN0dWFsbHkgbmVlZCB0b1xuICAgIC8vIG5vdGlmeSB0aGUgY29udHJvbGxlciBvZiBhIG1lYW5pbmdmdWwgY2hhbmdlLlxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBzZWwgPSBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKCFzZWwgfHwgc2VsLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcbiAgICAgICAgaWYgKCFzZWwuYW5jaG9yTm9kZSB8fCAhZWwuY29udGFpbnMoc2VsLmFuY2hvck5vZGUpKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IHNlbC5hbmNob3JOb2RlO1xuICAgICAgICBjb25zdCBzdGFydEVsID1cbiAgICAgICAgICBhbmNob3Iubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFID8gKGFuY2hvciBhcyBFbGVtZW50KSA6IGFuY2hvci5wYXJlbnRFbGVtZW50O1xuICAgICAgICAvLyBPbmx5IGEgQ09MTEFQU0VEIHNlbGVjdGlvbiBtZWFucyBcInRoZSBjYXJldCBsYW5kZWQgaW4gYSBjaGlwXCIuIEFcbiAgICAgICAgLy8gcmFuZ2Ugc2VsZWN0aW9uIChDbWQrQSwgc2hpZnQtYXJyb3csIGRyYWcpIGFuY2hvcnMgYXQgaXRzIHN0YXJ0LFxuICAgICAgICAvLyB3aGljaCBsYW5kcyBpbnNpZGUgdGhlIGZpcnN0IGA8c3Ryb25nPmAgd2hlbmV2ZXIgdGhlIGlucHV0IGJlZ2luc1xuICAgICAgICAvLyB3aXRoIGEgY2hpcCDigJQgc3RhcnRpbmcgcmUtZWRpdCB0aGVyZSBwYXJrcyB0aGUgY2FyZXQgb24gdGhhdCBjaGlwXG4gICAgICAgIC8vIGFuZCBkZXN0cm95cyB0aGUgdXNlcidzIHNlbGVjdGlvbi5cbiAgICAgICAgY29uc3Qgc3Ryb25nID0gc2VsLmlzQ29sbGFwc2VkXG4gICAgICAgICAgPyAvLyBCb3RoIGNoaXAga2luZHMgcmVwb3J0IGhlcmUuIFRoZSBjb3JlIGRlY2lkZXMgd2hhdCBhIHRhcCBtZWFucyDigJQgYVxuICAgICAgICAgICAgLy8gY29tcGxldGVkIHBhcmFtIHJlLW9wZW5zIGl0cyBvcHRpb25zLCBhbiBpZGVudGlmaWVkIGRhdGUgb3BlbnMgdGhlXG4gICAgICAgICAgICAvLyBjYWxlbmRhciwgYW55dGhpbmcgZWxzZSBpcyBpbmVydC5cbiAgICAgICAgICAgIHN0YXJ0RWw/LmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KFwic3Ryb25nW2RhdGEtcGFyYW0taWRdXCIpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICAvLyBgRE9NU3RyaW5nTWFwYCBpcyBhbiBpbmRleCBzaWduYXR1cmU7IGJyYWNrZXQgbm90YXRpb24gaXMgcmVxdWlyZWRcbiAgICAgICAgLy8gYnkgYG5vUHJvcGVydHlBY2Nlc3NGcm9tSW5kZXhTaWduYXR1cmVgLlxuICAgICAgICBjb25zdCBlbmNsb3NpbmcgPSBzdHJvbmc/LmRhdGFzZXRbXCJwYXJhbUlkXCJdID8/IG51bGw7XG4gICAgICAgIGlmIChlbmNsb3NpbmcgJiYgZW5jbG9zaW5nICE9PSB0aGlzLmVkaXRpbmdQYXJhbUlkKSB7XG4gICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmNvbnRyb2xsZXIuc3RhcnRFZGl0aW5nUGFyYW0oZW5jbG9zaW5nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMubGFzdElucHV0QXQgPCA1MCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY29udHJvbGxlci5oYW5kbGVDYXJldE1vdmUoZ2V0Q3Vyc29yT2Zmc2V0KGVsKSkpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb25MaXN0ZW5lciA9IGhhbmRsZXI7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kQmVmb3JlSW5wdXRMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAvLyBOYXRpdmUgYmVmb3JlaW5wdXQg4oCUIFJlYWN0J3Mgc3ludGhldGljIG9uQmVmb3JlSW5wdXQgaXMgd2lyZWQgdG8gdGhlXG4gICAgLy8gbGVnYWN5IHRleHRJbnB1dCBldmVudCBhbmQgZG9lc24ndCBmaXJlIHJlbGlhYmx5IGZvciBkZWxldGUqIHR5cGVzLlxuICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpbnB1dEV2ZW50ID0gZXZlbnQgYXMgSW5wdXRFdmVudDtcbiAgICAgIGNvbnN0IHQgPSBpbnB1dEV2ZW50LmlucHV0VHlwZTtcbiAgICAgIGlmICh0ID09PSBcImluc2VydFBhcmFncmFwaFwiIHx8IHQgPT09IFwiaW5zZXJ0TGluZUJyZWFrXCIgfHwgdCA9PT0gXCJpbnNlcnRGcm9tRHJvcFwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0LnN0YXJ0c1dpdGgoXCJpbnNlcnRcIikgfHwgdC5zdGFydHNXaXRoKFwiZGVsZXRlXCIpKSB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gdC5zdGFydHNXaXRoKFwiZGVsZXRlXCIpID8gXCJcIiA6IChpbnB1dEV2ZW50LmRhdGEgPz8gXCJcIik7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXIucmVwbGFjZUVkaXRpbmdSYW5nZShyZXBsYWNlbWVudCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmJlZm9yZUlucHV0TGlzdGVuZXIgPSBoYW5kbGVyO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmVpbnB1dFwiLCBoYW5kbGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgYmluZFN0YXRlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuY29udHJvbGxlci5zdGF0ZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgIHRoaXMuZWRpdGluZ1BhcmFtSWQgPSBzdGF0ZS5lZGl0aW5nUGFyYW0/LmlkID8/IHN0YXRlLmVkaXRpbmdJZGVudGlmaWVkPy5pZCA/PyBudWxsO1xuXG4gICAgICB0aGlzLmxhc3RTdGF0ZSA9IHN0YXRlO1xuICAgICAgdGhpcy5yZW5kZXJFZGl0b3Ioc3RhdGUpO1xuXG4gICAgICAvLyBQb3N0LXByb21vdGUgcmVmb2N1cyArIGNhcmV0LWFmdGVyLWJvbGQgcGxhY2VtZW50IChtaXJyb3JzIFJlYWN0J3NcbiAgICAgIC8vIHVzZUxheW91dEVmZmVjdCBvbiBuZXdQYXJhbUlkKS5cbiAgICAgIGNvbnN0IGN1cnJlbnRQYXJhbUlkID0gc3RhdGUubmV3UGFyYW1JZCA/PyBcIlwiO1xuICAgICAgaWYgKGN1cnJlbnRQYXJhbUlkICYmIGN1cnJlbnRQYXJhbUlkICE9PSB0aGlzLmxhc3RTZWVuUGFyYW1JZCkge1xuICAgICAgICB0aGlzLmxhc3RTZWVuUGFyYW1JZCA9IGN1cnJlbnRQYXJhbUlkO1xuICAgICAgICBlbC5mb2N1cygpO1xuICAgICAgICBjb25zdCBkZXNpcmVkID0gc3RhdGUuY2FyZXRPZmZzZXQgPz8gcGxhaW5UZXh0TGVuZ3RoKGVsKTtcbiAgICAgICAgc2V0Q3Vyc29yT2Zmc2V0KGVsLCBkZXNpcmVkKTtcbiAgICAgIH0gZWxzZSBpZiAoIWN1cnJlbnRQYXJhbUlkKSB7XG4gICAgICAgIHRoaXMubGFzdFNlZW5QYXJhbUlkID0gXCJcIjtcbiAgICAgIH1cblxuICAgICAgLy8gUmUtZWRpdCBjYXJldCBwYXJrIChtaXJyb3JzIFJlYWN0J3MgdXNlTGF5b3V0RWZmZWN0IG9uIGVkaXRpbmdQYXJhbSkuXG4gICAgICBjb25zdCBlZGl0aW5nSWQgPSBzdGF0ZS5lZGl0aW5nUGFyYW0/LmlkID8/IFwiXCI7XG4gICAgICBpZiAoZWRpdGluZ0lkICYmIGVkaXRpbmdJZCAhPT0gdGhpcy5sYXN0RWRpdGluZ0lkICYmIHN0YXRlLmVkaXRpbmdBbmNob3IgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxhc3RFZGl0aW5nSWQgPSBlZGl0aW5nSWQ7XG4gICAgICAgIHNldEN1cnNvck9mZnNldChlbCwgc3RhdGUuZWRpdGluZ0FuY2hvcik7XG4gICAgICB9IGVsc2UgaWYgKCFlZGl0aW5nSWQpIHtcbiAgICAgICAgdGhpcy5sYXN0RWRpdGluZ0lkID0gXCJcIjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLWhvc3QuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9pbnRlcm5hbC9lZGl0b3ItaG9zdC9lZGl0b3ItaG9zdC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBSU4sU0FBUyxHQUVWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixlQUFlLEVBQ2YsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixlQUFlLEdBQ2hCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSTFDOzs7R0FHRztBQUNILElBQUksa0JBQXVDLENBQUM7QUFDNUMsU0FBUyxxQkFBcUI7SUFDNUIsSUFBSSxrQkFBa0IsS0FBSyxTQUFTO1FBQUUsT0FBTyxrQkFBa0IsQ0FBQztJQUNoRSxJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVc7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNsRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RCxrQkFBa0IsR0FBRyxLQUFLLENBQUMsZUFBZSxLQUFLLGdCQUFnQixDQUFDO0lBQ2hFLE9BQU8sa0JBQWtCLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBcUJILE1BQU0sT0FBTyxpQ0FBaUM7SUFwQjlDO1FBc0JXLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDMUIsNkZBQTZGO1FBQ3BGLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzlCLHNIQUFzSDtRQUM3RyxtQkFBYyxHQUFHLElBQUksQ0FBQztRQUVkLE9BQUUsR0FBRyxNQUFNLENBQTZCLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELGFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUV4QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzdCLHdFQUF3RTtRQUN4RSxtRUFBbUU7UUFDM0QsY0FBUyxHQUF5QyxJQUFJLENBQUM7UUFDdkQsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDM0I7Ozs7O1dBS0c7UUFDSyxtQkFBYyxHQUFrQixJQUFJLENBQUM7S0E0TzlDO0lBdk9DLFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7U0FDMUQ7UUFFRCxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTVFLG9FQUFvRTtRQUNwRSxvRUFBb0U7UUFDcEUsNkJBQTZCO1FBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixjQUFjLENBQUMsR0FBRyxFQUFFO2dCQUNsQixJQUFJLE9BQU8sUUFBUSxLQUFLLFdBQVc7b0JBQUUsT0FBTztnQkFDNUMsSUFBSSxRQUFRLENBQUMsYUFBYSxLQUFLLEVBQUUsRUFBRTtvQkFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2xDO3FCQUFNO29CQUNMLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDWjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDO1FBQ3RGLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxXQUFXLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsV0FBVyxDQUFDO1FBQzlGLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQW9DO1FBQ3ZELHFCQUFxQixDQUFDO1lBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWE7WUFDNUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1lBQ3hCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtZQUM1QixjQUFjLEVBQUUsS0FBSyxDQUFDLFlBQVksRUFBRSxFQUFFLElBQUksSUFBSTtZQUM5QyxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7WUFDdEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMseUJBQXlCLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQ3JFLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQztTQUNqRjtRQUNELElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzVCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUNwRjtJQUNILENBQUM7SUFFRCw4QkFBOEI7SUFFOUI7Ozs7Ozs7O09BUUc7SUFDSCxPQUFPLENBQUMsS0FBaUI7UUFDdkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDakMsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEMsZUFBZSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBb0I7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFxQjtRQUMzQixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDakMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUNsQixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsYUFBYSxJQUFJLFFBQVEsQ0FBQztRQUN6QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUFFLE9BQU87UUFDL0MsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsMkJBQTJCO0lBRW5CLFNBQVM7UUFDZixJQUFJLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUMzQixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQztRQUNqQyxNQUFNLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxNQUFNLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDM0UsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDMUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU8sNkJBQTZCO1FBQ25DLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVztZQUFFLE9BQU87UUFDNUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDakMsd0VBQXdFO1FBQ3hFLG9FQUFvRTtRQUNwRSxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsTUFBTSxPQUFPLEdBQUcsR0FBUyxFQUFFO2dCQUN6QixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsS0FBSyxDQUFDO29CQUFFLE9BQU87Z0JBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO29CQUFFLE9BQU87Z0JBQzVELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7Z0JBQzlCLE1BQU0sT0FBTyxHQUNYLE1BQU0sQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUUsTUFBa0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztnQkFDckYsbUVBQW1FO2dCQUNuRSxtRUFBbUU7Z0JBQ25FLG9FQUFvRTtnQkFDcEUsb0VBQW9FO2dCQUNwRSxxQ0FBcUM7Z0JBQ3JDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxXQUFXO29CQUM1QixDQUFDLENBQUMscUVBQXFFO3dCQUNyRSxxRUFBcUU7d0JBQ3JFLG9DQUFvQzt3QkFDcEMsT0FBTyxFQUFFLE9BQU8sQ0FBYyx1QkFBdUIsQ0FBQztvQkFDeEQsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDVCxxRUFBcUU7Z0JBQ3JFLDJDQUEyQztnQkFDM0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUM7Z0JBQ3JELElBQUksU0FBUyxJQUFJLFNBQVMsS0FBSyxJQUFJLENBQUMsY0FBYyxFQUFFO29CQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLE9BQU87aUJBQ1I7Z0JBQ0QsSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFO29CQUFFLE9BQU87Z0JBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUUsQ0FBQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLHlCQUF5QixHQUFHLE9BQU8sQ0FBQztZQUN6QyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQ2pDLHVFQUF1RTtRQUN2RSxzRUFBc0U7UUFDdEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxLQUFZLEVBQVEsRUFBRTtZQUNyQyxNQUFNLFVBQVUsR0FBRyxLQUFtQixDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDL0IsSUFBSSxDQUFDLEtBQUssaUJBQWlCLElBQUksQ0FBQyxLQUFLLGlCQUFpQixJQUFJLENBQUMsS0FBSyxnQkFBZ0IsRUFBRTtnQkFDaEYsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixPQUFPO2FBQ1I7WUFDRCxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDcEQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzFFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDcEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2lCQUN4QjthQUNGO1FBQ0gsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQztRQUNuQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN4RSxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDO1lBRXBGLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekIscUVBQXFFO1lBQ3JFLGtDQUFrQztZQUNsQyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztZQUM5QyxJQUFJLGNBQWMsSUFBSSxjQUFjLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDN0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7Z0JBQ3RDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekQsZUFBZSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUM5QjtpQkFBTSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUMxQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQzthQUMzQjtZQUVELHdFQUF3RTtZQUN4RSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDL0MsSUFBSSxTQUFTLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLEVBQUU7Z0JBQ2hGLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO2dCQUMvQixlQUFlLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUMxQztpQkFBTSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQzthQUN6QjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7K0hBclFVLGlDQUFpQzttSEFBakMsaUNBQWlDOzRGQUFqQyxpQ0FBaUM7a0JBcEI3QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0osSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLG1CQUFtQixFQUFFLE1BQU07d0JBQzNCLGVBQWUsRUFBRSxTQUFTO3dCQUMxQixVQUFVLEVBQUUsTUFBTTt3QkFDbEIsWUFBWSxFQUFFLE1BQU07d0JBQ3BCLFFBQVEsRUFBRSxHQUFHO3dCQUNiLFNBQVMsRUFBRSxXQUFXO3dCQUN0QixXQUFXLEVBQUUsbUJBQW1CO3dCQUNoQyxvQkFBb0IsRUFBRSxzQkFBc0I7d0JBQzVDLGtCQUFrQixFQUFFLG9CQUFvQjt3QkFDeEMsU0FBUyxFQUFFLGlCQUFpQjt3QkFDNUIsU0FBUyxFQUFFLGlCQUFpQjt3QkFDNUIsU0FBUyxFQUFFLFdBQVc7d0JBQ3RCLFFBQVEsRUFBRSxVQUFVO3FCQUNyQjtpQkFDRjs4QkFFeUIsVUFBVTtzQkFBakMsS0FBSzt1QkFBQyxlQUFlO2dCQUNiLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsYUFBYTtzQkFBckIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgaW5qZWN0LFxuICBOZ1pvbmUsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICB0eXBlIE9uRGVzdHJveSxcbiAgdHlwZSBPbkluaXQsXG4gIFJlbmRlcmVyMixcbiAgdHlwZSBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgY2hpcElkRnJvbVRhcCxcbiAgZXh0cmFjdFBsYWluVGV4dCxcbiAgZ2V0Q3Vyc29yT2Zmc2V0LFxuICBrZWVwQ2FyZXRPbkNoaXAsXG4gIHBsYWluVGV4dExlbmd0aCxcbiAgcmVuZGVyRWRpdGFibGVDb250ZW50LFxuICBzZXRDdXJzb3JPZmZzZXQsXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB0eXBlIHsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyIH0gZnJvbSBcIi4uLy4uL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL3R5cGVzXCI7XG5cbi8qKlxuICogTW9kdWxlLWxldmVsIGNhY2hlIGZvciB0aGUgb25lLXRpbWUgcGxhaW50ZXh0LW9ubHkgZmVhdHVyZSBkZXRlY3Rpb24uXG4gKiBNaXJyb3JzIGBzdXBwb3J0c1BsYWludGV4dE9ubHlgIGluIHVzZUNvbnRlbnRFZGl0YWJsZUVkaXRvci50cy5cbiAqL1xubGV0IHBsYWludGV4dE9ubHlDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbmZ1bmN0aW9uIHN1cHBvcnRzUGxhaW50ZXh0T25seSgpOiBib29sZWFuIHtcbiAgaWYgKHBsYWludGV4dE9ubHlDYWNoZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcGxhaW50ZXh0T25seUNhY2hlO1xuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb2JlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgcHJvYmUuc2V0QXR0cmlidXRlKFwiY29udGVudGVkaXRhYmxlXCIsIFwicGxhaW50ZXh0LW9ubHlcIik7XG4gIHBsYWludGV4dE9ubHlDYWNoZSA9IHByb2JlLmNvbnRlbnRFZGl0YWJsZSA9PT0gXCJwbGFpbnRleHQtb25seVwiO1xuICByZXR1cm4gcGxhaW50ZXh0T25seUNhY2hlO1xufVxuXG4vKipcbiAqIEludGVybmFsIGRpcmVjdGl2ZSB0aGF0IG93bnMgZXZlcnkgY29uY2VybiBzcGVjaWZpYyB0byBydW5uaW5nIHRoZVxuICogYXV0b2NvbXBsZXRlIG9uIHRvcCBvZiBhIGNvbnRlbnRFZGl0YWJsZSBob3N0OiBjb21wb3NpdGlvbiBzdGF0ZSwgY2FyZXRcbiAqIHRyYWNraW5nLCBzZWxlY3Rpb25jaGFuZ2UgaGFuZGxpbmcsIGBiZWZvcmVpbnB1dGAgaW50ZXJjZXB0aW9uLCBwYXN0ZVxuICogc2FuaXRpemF0aW9uLCBwbGFpbnRleHQtb25seSBmZWF0dXJlIGRldGVjdGlvbiwgc2VnbWVudCByZW5kZXJpbmcsXG4gKiBwb3N0LXByb21vdGUgcmVmb2N1cywgYW5kIHJlLWVkaXQgY2FyZXQgcGFyay5cbiAqXG4gKiBNaXJyb3JzIGBwYWNrYWdlcy9yZWFjdC9zcmMvaG9va3MvdXNlQ29udGVudEVkaXRhYmxlRWRpdG9yLnRzYCBvbmUtZm9yLW9uZS5cbiAqIFVzZWQgb25seSBieSB0aGUgVGllciAxIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50IOKAlCBuZXZlciBleHBvcnRlZC5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBcIlthaWFFZGl0b3JIb3N0XVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBob3N0OiB7XG4gICAgcm9sZTogXCJjb21ib2JveFwiLFxuICAgIFwiYXJpYS1hdXRvY29tcGxldGVcIjogXCJsaXN0XCIsXG4gICAgXCJhcmlhLWhhc3BvcHVwXCI6IFwibGlzdGJveFwiLFxuICAgIHNwZWxsY2hlY2s6IFwidHJ1ZVwiLFxuICAgIGVudGVya2V5aGludDogXCJzZW5kXCIsXG4gICAgdGFiaW5kZXg6IFwiMFwiLFxuICAgIFwiKGlucHV0KVwiOiBcIm9uSW5wdXQoKVwiLFxuICAgIFwiKGtleWRvd24pXCI6IFwib25LZXlEb3duKCRldmVudClcIixcbiAgICBcIihjb21wb3NpdGlvbnN0YXJ0KVwiOiBcIm9uQ29tcG9zaXRpb25TdGFydCgpXCIsXG4gICAgXCIoY29tcG9zaXRpb25lbmQpXCI6IFwib25Db21wb3NpdGlvbkVuZCgpXCIsXG4gICAgXCIocGFzdGUpXCI6IFwib25QYXN0ZSgkZXZlbnQpXCIsXG4gICAgXCIoY2xpY2spXCI6IFwib25DbGljaygkZXZlbnQpXCIsXG4gICAgXCIoZm9jdXMpXCI6IFwib25Gb2N1cygpXCIsXG4gICAgXCIoYmx1cilcIjogXCJvbkJsdXIoKVwiLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBBSUF1dG9jb21wbGV0ZUVkaXRvckhvc3REaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KFwiYWlhRWRpdG9ySG9zdFwiKSBjb250cm9sbGVyITogQUlBdXRvY29tcGxldGVDb250cm9sbGVyO1xuICBASW5wdXQoKSBhdXRvRm9jdXMgPSB0cnVlO1xuICAvKiogV2hldGhlciBjb21wbGV0ZWQgY2hpcHMgZHJhdyB0aGUgaWNvbiBvZiB0aGUgb3B0aW9uIHRoYXQgYW5zd2VyZWQgdGhlbS4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgc2hvd0NoaXBJY29ucyA9IHRydWU7XG4gIC8qKiBXaGV0aGVyIGNvbXBsZXRlZCBjaGlwcyBkcmF3IHRoZSBwaWN0dXJlIG9mIHRoZSBvcHRpb24gdGhhdCBhbnN3ZXJlZCB0aGVtLCBpbiBwbGFjZSBvZiB0aGUgaWNvbi4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgc2hvd0NoaXBJbWFnZXMgPSB0cnVlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZWwgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIGNvbXBvc2luZyA9IGZhbHNlO1xuICBwcml2YXRlIGxhc3RJbnB1dEF0ID0gMDtcbiAgcHJpdmF0ZSBsYXN0U2VlblBhcmFtSWQgPSBcIlwiO1xuICAvLyBUaGUgbGFzdCBzdGF0ZSByZW5kZXJlZCwgc28gYSB0b2dnbGUgb2YgYHNob3dDaGlwSWNvbnNgIGNhbiByZS1yZW5kZXJcbiAgLy8gdGhlIGVkaXRvciB3aXRob3V0IHdhaXRpbmcgZm9yIHRoZSBjb250cm9sbGVyJ3MgbmV4dCBzdGF0ZSB0aWNrLlxuICBwcml2YXRlIGxhc3RTdGF0ZTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0RWRpdGluZ0lkID0gXCJcIjtcbiAgLyoqXG4gICAqIElkIG9mIHdoaWNoZXZlciBjaGlwIHRoZSBkcm9wZG93biBpcyBjdXJyZW50bHkgb3BlbiBvbiDigJQgYSBjb21wbGV0ZWQgcGFyYW1cbiAgICogYmVpbmcgcmUtZWRpdGVkLCBvciBhIHNwYW4gdGhlIHNlcnZlciBpZGVudGlmaWVkIGFzIGEgZGF0ZS4gRWl0aGVyIGtpbmRcbiAgICogY291bnRzLCBvdGhlcndpc2UgZXZlcnkgY2FyZXQgdGljayBpbnNpZGUgYW4gb3BlbiBkYXRlIHNwYW4gd291bGQgcmUtZW50ZXJcbiAgICogdGhlIHBpY2sgaXQgaXMgYWxyZWFkeSBpbi5cbiAgICovXG4gIHByaXZhdGUgZWRpdGluZ1BhcmFtSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgZG9jdW1lbnRTZWxlY3Rpb25MaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgYmVmb3JlSW5wdXRMaXN0ZW5lcj86IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmNvbnRyb2xsZXIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlthaWFFZGl0b3JIb3N0XSByZXF1aXJlcyBhIGNvbnRyb2xsZXJcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgY2VNb2RlID0gc3VwcG9ydHNQbGFpbnRleHRPbmx5KCkgPyBcInBsYWludGV4dC1vbmx5XCIgOiBcInRydWVcIjtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbCwgXCJjb250ZW50ZWRpdGFibGVcIiwgY2VNb2RlKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbCwgXCJhcmlhLWNvbnRyb2xzXCIsIHRoaXMuY29udHJvbGxlci5saXN0Ym94SWQpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCBcInN1cHByZXNzLWNvbnRlbnQtZWRpdGFibGUtd2FybmluZ1wiLCBcInRydWVcIik7XG5cbiAgICAvLyBBdXRvLWZvY3VzIG9uIG1vdW50LiBJZiB0aGUgZWRpdG9yIGFscmVhZHkgaGFzIGZvY3VzIChlLmcuIGZyb20gYVxuICAgIC8vIGNsaWNrIHRoYXQgZmlyZWQgYmVmb3JlIG91ciBsaWZlY3ljbGUgcmFuKSwgbm90aWZ5IHRoZSBjb250cm9sbGVyXG4gICAgLy8gaW5zdGVhZCBvZiBzdGVhbGluZyBmb2N1cy5cbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xuICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZWwpIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmJpbmREb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyKCk7XG4gICAgdGhpcy5iaW5kQmVmb3JlSW5wdXRMaXN0ZW5lcigpO1xuICAgIHRoaXMuYmluZFN0YXRlU3Vic2NyaXB0aW9uKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgY29uc3QgdG9nZ2xlZCA9IChjaGFuZ2VzW1wic2hvd0NoaXBJY29uc1wiXSA/PyBjaGFuZ2VzW1wic2hvd0NoaXBJbWFnZXNcIl0pICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgZmlyc3QgPSBjaGFuZ2VzW1wic2hvd0NoaXBJY29uc1wiXT8uZmlyc3RDaGFuZ2UgPz8gY2hhbmdlc1tcInNob3dDaGlwSW1hZ2VzXCJdPy5maXJzdENoYW5nZTtcbiAgICBpZiAodG9nZ2xlZCAmJiAhZmlyc3QgJiYgdGhpcy5sYXN0U3RhdGUpIHtcbiAgICAgIHRoaXMucmVuZGVyRWRpdG9yKHRoaXMubGFzdFN0YXRlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlckVkaXRvcihzdGF0ZTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUpOiB2b2lkIHtcbiAgICByZW5kZXJFZGl0YWJsZUNvbnRlbnQoe1xuICAgICAgaW5wdXQ6IHRoaXMuZWwubmF0aXZlRWxlbWVudCxcbiAgICAgIHNlZ21lbnRzOiBzdGF0ZS5zZWdtZW50cyxcbiAgICAgIG5ld1BhcmFtSWQ6IHN0YXRlLm5ld1BhcmFtSWQsXG4gICAgICBlZGl0aW5nUGFyYW1JZDogc3RhdGUuZWRpdGluZ1BhcmFtPy5pZCA/PyBudWxsLFxuICAgICAgcGxhY2Vob2xkZXJUZXh0OiBzdGF0ZS5wbGFjZWhvbGRlclRleHQsXG4gICAgICBpc0ZvY3VzZWQ6IHN0YXRlLmlzRm9jdXNlZCxcbiAgICAgIHNob3dDaGlwSWNvbnM6IHRoaXMuc2hvd0NoaXBJY29ucyxcbiAgICAgIHNob3dDaGlwSW1hZ2VzOiB0aGlzLnNob3dDaGlwSW1hZ2VzLFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIGlmICh0aGlzLmRvY3VtZW50U2VsZWN0aW9uTGlzdGVuZXIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb25MaXN0ZW5lcik7XG4gICAgfVxuICAgIGlmICh0aGlzLmJlZm9yZUlucHV0TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmVmb3JlaW5wdXRcIiwgdGhpcy5iZWZvcmVJbnB1dExpc3RlbmVyKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT0gSG9zdCBldmVudCBoYW5kbGVycyA9PT1cblxuICAvKipcbiAgICogQSB0YXAgb24gYSBjaGlwIG9wZW5zICp0aGF0KiBjaGlwLiBUb3VjaCBicm93c2VycyBwbGFjZSB0aGUgY2FyZXQgd2hlcmVcbiAgICogdGhleSBzZWUgZml0IChpT1Mgc25hcHMgaXQgdG8gYSB3b3JkIGJvdW5kYXJ5LCBhbmQgdGhlIGZvY3VzaW5nIHRhcCBvZnRlblxuICAgKiBwYXJrcyBpdCBhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0IOKAlCBpbnNpZGUgdGhlIGxhc3QgY2hpcCB3aGVuIHRoZSBpbnB1dCBlbmRzXG4gICAqIHdpdGggb25lKSwgc28gdGhlIHNlbGVjdGlvbmNoYW5nZSBwYXRoIGNhbiBtaXNzIHRoZSB0YXBwZWQgY2hpcCBvciBvcGVuXG4gICAqIHRoZSB3cm9uZyBvbmUuIFRoZSBjbGljayB0YXJnZXQgaXMgdGhlIGVsZW1lbnQgYWN0dWFsbHkgaGl0IGFuZCBvdmVycmlkZXNcbiAgICogaXQ7IGBrZWVwQ2FyZXRPbkNoaXBgIHRoZW4gcHVsbHMgYSBzdHJheSBjYXJldCBvbnRvIHRoZSB0YXBwZWQgY2hpcCBzbyB0aGVcbiAgICogbmV4dCBzZWxlY3Rpb25jaGFuZ2UgZG9lc24ndCBjbG9zZSBvciByZWRpcmVjdCB3aGF0IHRoZSB0YXAgb3BlbmVkLlxuICAgKi9cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGlkID0gY2hpcElkRnJvbVRhcChlbCwgZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoIWlkKSByZXR1cm47XG4gICAgdGhpcy5jb250cm9sbGVyLnN0YXJ0RWRpdGluZ1BhcmFtKGlkKTtcbiAgICBrZWVwQ2FyZXRPbkNoaXAoZWwsIGlkKTtcbiAgfVxuXG4gIG9uQ29tcG9zaXRpb25TdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvc2luZyA9IHRydWU7XG4gIH1cblxuICBvbkNvbXBvc2l0aW9uRW5kKCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maXJlSW5wdXQoKTtcbiAgfVxuXG4gIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgdGhpcy5sYXN0SW5wdXRBdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgIHRoaXMuZmlyZUlucHV0KCk7XG4gICAgdGhpcy5jb250cm9sbGVyLmhhbmRsZUNhcmV0QWZ0ZXJJbnB1dChnZXRDdXJzb3JPZmZzZXQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuaGFuZGxlS2V5RG93bihldmVudCk7XG4gIH1cblxuICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZWwgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGV4dCA9IChldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKFwidGV4dC9wbGFpblwiKSA/PyBcIlwiKS5yZXBsYWNlKC9cXHI/XFxuL2csIFwiIFwiKTtcbiAgICBpZiAoIXRleHQpIHJldHVybjtcbiAgICBjb25zdCBkb2MgPSBlbC5vd25lckRvY3VtZW50ID8/IGRvY3VtZW50O1xuICAgIGNvbnN0IHNlbCA9IGRvYy5nZXRTZWxlY3Rpb24oKTtcbiAgICBpZiAoIXNlbCB8fCBzZWwucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xuICAgIGNvbnN0IHJhbmdlID0gc2VsLmdldFJhbmdlQXQoMCk7XG4gICAgaWYgKCFlbC5jb250YWlucyhyYW5nZS5zdGFydENvbnRhaW5lcikpIHJldHVybjtcbiAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xuICAgIGNvbnN0IG5vZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShub2RlKTtcbiAgICByYW5nZS5zZXRTdGFydEFmdGVyKG5vZGUpO1xuICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTtcbiAgICBzZWwuYWRkUmFuZ2UocmFuZ2UpO1xuICAgIHRoaXMuZmlyZUlucHV0KCk7XG4gIH1cblxuICBvbkZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRGb2N1c2VkKHRydWUpO1xuICB9XG5cbiAgb25CbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuXG4gIC8vID09PSBJbnRlcm5hbCBoZWxwZXJzID09PVxuXG4gIHByaXZhdGUgZmlyZUlucHV0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNvbXBvc2luZykgcmV0dXJuO1xuICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHJhdyA9IGV4dHJhY3RQbGFpblRleHQoZWwpO1xuICAgIGNvbnN0IHNob3VsZENhcGl0YWxpemUgPSByYXcubGVuZ3RoID4gMCAmJiByYXdbMF0gIT09IHJhd1swXS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IG5leHQgPSBzaG91bGRDYXBpdGFsaXplID8gcmF3WzBdLnRvVXBwZXJDYXNlKCkgKyByYXcuc2xpY2UoMSkgOiByYXc7XG4gICAgdGhpcy5jb250cm9sbGVyLmhhbmRsZVRleHRDaGFuZ2UobmV4dCk7XG4gIH1cblxuICBwcml2YXRlIGJpbmREb2N1bWVudFNlbGVjdGlvbkxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybjtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAvLyBzZWxlY3Rpb25jaGFuZ2UgZmlyZXMgb24gZXZlcnkga2V5c3Ryb2tlIGFuZCBjYXJldCBtb3ZlIOKAlCBydW4gb3V0c2lkZVxuICAgIC8vIEFuZ3VsYXIncyB6b25lICjCpzE2LjEpIGFuZCByZS1lbnRlciBvbmx5IHdoZW4gd2UgYWN0dWFsbHkgbmVlZCB0b1xuICAgIC8vIG5vdGlmeSB0aGUgY29udHJvbGxlciBvZiBhIG1lYW5pbmdmdWwgY2hhbmdlLlxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBzZWwgPSBkb2N1bWVudC5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKCFzZWwgfHwgc2VsLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcbiAgICAgICAgaWYgKCFzZWwuYW5jaG9yTm9kZSB8fCAhZWwuY29udGFpbnMoc2VsLmFuY2hvck5vZGUpKSByZXR1cm47XG4gICAgICAgIGNvbnN0IGFuY2hvciA9IHNlbC5hbmNob3JOb2RlO1xuICAgICAgICBjb25zdCBzdGFydEVsID1cbiAgICAgICAgICBhbmNob3Iubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFID8gKGFuY2hvciBhcyBFbGVtZW50KSA6IGFuY2hvci5wYXJlbnRFbGVtZW50O1xuICAgICAgICAvLyBPbmx5IGEgQ09MTEFQU0VEIHNlbGVjdGlvbiBtZWFucyBcInRoZSBjYXJldCBsYW5kZWQgaW4gYSBjaGlwXCIuIEFcbiAgICAgICAgLy8gcmFuZ2Ugc2VsZWN0aW9uIChDbWQrQSwgc2hpZnQtYXJyb3csIGRyYWcpIGFuY2hvcnMgYXQgaXRzIHN0YXJ0LFxuICAgICAgICAvLyB3aGljaCBsYW5kcyBpbnNpZGUgdGhlIGZpcnN0IGA8c3Ryb25nPmAgd2hlbmV2ZXIgdGhlIGlucHV0IGJlZ2luc1xuICAgICAgICAvLyB3aXRoIGEgY2hpcCDigJQgc3RhcnRpbmcgcmUtZWRpdCB0aGVyZSBwYXJrcyB0aGUgY2FyZXQgb24gdGhhdCBjaGlwXG4gICAgICAgIC8vIGFuZCBkZXN0cm95cyB0aGUgdXNlcidzIHNlbGVjdGlvbi5cbiAgICAgICAgY29uc3Qgc3Ryb25nID0gc2VsLmlzQ29sbGFwc2VkXG4gICAgICAgICAgPyAvLyBCb3RoIGNoaXAga2luZHMgcmVwb3J0IGhlcmUuIFRoZSBjb3JlIGRlY2lkZXMgd2hhdCBhIHRhcCBtZWFucyDigJQgYVxuICAgICAgICAgICAgLy8gY29tcGxldGVkIHBhcmFtIHJlLW9wZW5zIGl0cyBvcHRpb25zLCBhbiBpZGVudGlmaWVkIGRhdGUgb3BlbnMgdGhlXG4gICAgICAgICAgICAvLyBjYWxlbmRhciwgYW55dGhpbmcgZWxzZSBpcyBpbmVydC5cbiAgICAgICAgICAgIHN0YXJ0RWw/LmNsb3Nlc3Q8SFRNTEVsZW1lbnQ+KFwic3Ryb25nW2RhdGEtcGFyYW0taWRdXCIpXG4gICAgICAgICAgOiBudWxsO1xuICAgICAgICAvLyBgRE9NU3RyaW5nTWFwYCBpcyBhbiBpbmRleCBzaWduYXR1cmU7IGJyYWNrZXQgbm90YXRpb24gaXMgcmVxdWlyZWRcbiAgICAgICAgLy8gYnkgYG5vUHJvcGVydHlBY2Nlc3NGcm9tSW5kZXhTaWduYXR1cmVgLlxuICAgICAgICBjb25zdCBlbmNsb3NpbmcgPSBzdHJvbmc/LmRhdGFzZXRbXCJwYXJhbUlkXCJdID8/IG51bGw7XG4gICAgICAgIGlmIChlbmNsb3NpbmcgJiYgZW5jbG9zaW5nICE9PSB0aGlzLmVkaXRpbmdQYXJhbUlkKSB7XG4gICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmNvbnRyb2xsZXIuc3RhcnRFZGl0aW5nUGFyYW0oZW5jbG9zaW5nKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMubGFzdElucHV0QXQgPCA1MCkgcmV0dXJuO1xuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY29udHJvbGxlci5oYW5kbGVDYXJldE1vdmUoZ2V0Q3Vyc29yT2Zmc2V0KGVsKSkpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuZG9jdW1lbnRTZWxlY3Rpb25MaXN0ZW5lciA9IGhhbmRsZXI7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwic2VsZWN0aW9uY2hhbmdlXCIsIGhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBiaW5kQmVmb3JlSW5wdXRMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBjb25zdCBlbCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAvLyBOYXRpdmUgYmVmb3JlaW5wdXQg4oCUIFJlYWN0J3Mgc3ludGhldGljIG9uQmVmb3JlSW5wdXQgaXMgd2lyZWQgdG8gdGhlXG4gICAgLy8gbGVnYWN5IHRleHRJbnB1dCBldmVudCBhbmQgZG9lc24ndCBmaXJlIHJlbGlhYmx5IGZvciBkZWxldGUqIHR5cGVzLlxuICAgIGNvbnN0IGhhbmRsZXIgPSAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBpbnB1dEV2ZW50ID0gZXZlbnQgYXMgSW5wdXRFdmVudDtcbiAgICAgIGNvbnN0IHQgPSBpbnB1dEV2ZW50LmlucHV0VHlwZTtcbiAgICAgIGlmICh0ID09PSBcImluc2VydFBhcmFncmFwaFwiIHx8IHQgPT09IFwiaW5zZXJ0TGluZUJyZWFrXCIgfHwgdCA9PT0gXCJpbnNlcnRGcm9tRHJvcFwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0LnN0YXJ0c1dpdGgoXCJpbnNlcnRcIikgfHwgdC5zdGFydHNXaXRoKFwiZGVsZXRlXCIpKSB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gdC5zdGFydHNXaXRoKFwiZGVsZXRlXCIpID8gXCJcIiA6IChpbnB1dEV2ZW50LmRhdGEgPz8gXCJcIik7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXIucmVwbGFjZUVkaXRpbmdSYW5nZShyZXBsYWNlbWVudCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmJlZm9yZUlucHV0TGlzdGVuZXIgPSBoYW5kbGVyO1xuICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmVpbnB1dFwiLCBoYW5kbGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgYmluZFN0YXRlU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgIHRoaXMuY29udHJvbGxlci5zdGF0ZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoc3RhdGUpID0+IHtcbiAgICAgIHRoaXMuZWRpdGluZ1BhcmFtSWQgPSBzdGF0ZS5lZGl0aW5nUGFyYW0/LmlkID8/IHN0YXRlLmVkaXRpbmdJZGVudGlmaWVkPy5pZCA/PyBudWxsO1xuXG4gICAgICB0aGlzLmxhc3RTdGF0ZSA9IHN0YXRlO1xuICAgICAgdGhpcy5yZW5kZXJFZGl0b3Ioc3RhdGUpO1xuXG4gICAgICAvLyBQb3N0LXByb21vdGUgcmVmb2N1cyArIGNhcmV0LWFmdGVyLWJvbGQgcGxhY2VtZW50IChtaXJyb3JzIFJlYWN0J3NcbiAgICAgIC8vIHVzZUxheW91dEVmZmVjdCBvbiBuZXdQYXJhbUlkKS5cbiAgICAgIGNvbnN0IGN1cnJlbnRQYXJhbUlkID0gc3RhdGUubmV3UGFyYW1JZCA/PyBcIlwiO1xuICAgICAgaWYgKGN1cnJlbnRQYXJhbUlkICYmIGN1cnJlbnRQYXJhbUlkICE9PSB0aGlzLmxhc3RTZWVuUGFyYW1JZCkge1xuICAgICAgICB0aGlzLmxhc3RTZWVuUGFyYW1JZCA9IGN1cnJlbnRQYXJhbUlkO1xuICAgICAgICBlbC5mb2N1cygpO1xuICAgICAgICBjb25zdCBkZXNpcmVkID0gc3RhdGUuY2FyZXRPZmZzZXQgPz8gcGxhaW5UZXh0TGVuZ3RoKGVsKTtcbiAgICAgICAgc2V0Q3Vyc29yT2Zmc2V0KGVsLCBkZXNpcmVkKTtcbiAgICAgIH0gZWxzZSBpZiAoIWN1cnJlbnRQYXJhbUlkKSB7XG4gICAgICAgIHRoaXMubGFzdFNlZW5QYXJhbUlkID0gXCJcIjtcbiAgICAgIH1cblxuICAgICAgLy8gUmUtZWRpdCBjYXJldCBwYXJrIChtaXJyb3JzIFJlYWN0J3MgdXNlTGF5b3V0RWZmZWN0IG9uIGVkaXRpbmdQYXJhbSkuXG4gICAgICBjb25zdCBlZGl0aW5nSWQgPSBzdGF0ZS5lZGl0aW5nUGFyYW0/LmlkID8/IFwiXCI7XG4gICAgICBpZiAoZWRpdGluZ0lkICYmIGVkaXRpbmdJZCAhPT0gdGhpcy5sYXN0RWRpdGluZ0lkICYmIHN0YXRlLmVkaXRpbmdBbmNob3IgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxhc3RFZGl0aW5nSWQgPSBlZGl0aW5nSWQ7XG4gICAgICAgIHNldEN1cnNvck9mZnNldChlbCwgc3RhdGUuZWRpdGluZ0FuY2hvcik7XG4gICAgICB9IGVsc2UgaWYgKCFlZGl0aW5nSWQpIHtcbiAgICAgICAgdGhpcy5sYXN0RWRpdGluZ0lkID0gXCJcIjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -59,6 +59,7 @@ export class ProductStripComponent {
59
59
  product.imageUrl ?? "",
60
60
  product.price ?? "",
61
61
  product.vendor ?? "",
62
+ product.available === false ? "sold-out" : "",
62
63
  ].join("\0");
63
64
  }
64
65
  ngOnChanges() {
@@ -123,10 +124,10 @@ export class ProductStripComponent {
123
124
  }
124
125
  }
125
126
  ProductStripComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProductStripComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
126
- ProductStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProductStripComponent, isStandalone: true, selector: "aia-product-strip", inputs: { products: "products", listboxId: "listboxId", focusable: "focusable", layout: "layout", imageFallback: "imageFallback" }, outputs: { select: "select", focusChange: "focusChange" }, viewQueries: [{ propertyName: "row", first: true, predicate: ["row"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">Products</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-image{display:block;width:100%;height:100%;object-fit:cover}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
127
+ ProductStripComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ProductStripComponent, isStandalone: true, selector: "aia-product-strip", inputs: { products: "products", listboxId: "listboxId", focusable: "focusable", layout: "layout", imageFallback: "imageFallback" }, outputs: { select: "select", focusChange: "focusChange" }, viewQueries: [{ propertyName: "row", first: true, predicate: ["row"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">Products</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">Sold out</span>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-image{display:block;width:100%;height:100%;object-fit:cover}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
127
128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ProductStripComponent, decorators: [{
128
129
  type: Component,
129
- args: [{ selector: "aia-product-strip", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">Products</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-image{display:block;width:100%;height:100%;object-fit:cover}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}\n"] }]
130
+ args: [{ selector: "aia-product-strip", standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<!-- `group` is the one role a listbox accepts around a set of options, so the\n strip stays inside the listbox without breaking its content model. -->\n<section\n *ngIf=\"products.length > 0\"\n class=\"aia-products\"\n data-aia-products=\"\"\n [attr.data-aia-products-layout]=\"layout\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n>\n <!-- data-aia-products-label: the scroll arrow centres itself on this row. -->\n <div class=\"aia-products-label\" [id]=\"labelId\" data-aia-products-label=\"\">Products</div>\n\n <!-- #row: the component binds wheel-to-sideways scrolling on it. -->\n <div #row class=\"aia-products-row\" data-aia-products-row=\"\">\n <!-- A real <a href> rather than a <div>: it keeps the browser's own link\n affordances \u2014 cmd/ctrl-click for a new tab, middle-click, right-click \u2192\n \"copy link address\". role=\"option\" overrides how assistive tech\n announces it, which is correct inside a listbox; the deliberate trade\n is that AT no longer calls it a link. An attribute binding, so a\n product without a url gets no href at all rather than \"null\". -->\n <a\n *ngFor=\"let product of products; let i = index; trackBy: trackByProduct\"\n [id]=\"cardId(i)\"\n class=\"aia-product\"\n data-aia-product=\"\"\n [attr.data-aia-product-sold-out]=\"product.available === false ? '' : null\"\n role=\"option\"\n [attr.aria-selected]=\"false\"\n [attr.href]=\"product.url ?? null\"\n [attr.tabindex]=\"focusable ? 0 : -1\"\n (click)=\"onClick($event, product)\"\n (keydown)=\"onKeyDown($event, product)\"\n (focus)=\"onCardFocus()\"\n (blur)=\"onCardBlur($event)\"\n >\n <span\n class=\"aia-product-media\"\n aria-hidden=\"true\"\n [attr.data-aia-product-placeholder]=\"!imageSource(product) && imageFallback === 'image' ? '' : null\"\n [attr.data-aia-product-initial]=\"!imageSource(product) && imageFallback === 'initial' ? '' : null\"\n >\n <!-- alt=\"\" on purpose: the title is already the card's accessible\n name, and repeating it would have a screen reader read it twice. -->\n <img\n *ngIf=\"imageSource(product) as src\"\n class=\"aia-product-image\"\n [src]=\"src\"\n (error)=\"onImageError(product)\"\n alt=\"\"\n loading=\"lazy\"\n decoding=\"async\"\n />\n <ng-container *ngIf=\"!imageSource(product) && imageFallback === 'initial'\">{{ initial(product.title) }}</ng-container>\n </span>\n\n <!-- Every field but the title is optional, so absent ones render no\n element at all \u2014 the column gap can't leave a hole for a box that\n isn't there. -->\n <span class=\"aia-product-body\">\n <span *ngIf=\"product.vendor\" class=\"aia-product-vendor\">{{ product.vendor }}</span>\n <span class=\"aia-product-title\">{{ product.title }}</span>\n <span *ngIf=\"product.price\" class=\"aia-product-price\">{{ product.price }}</span>\n <!-- In the text column rather than the aria-hidden media tile, so the\n card's accessible name says it; the stylesheet lifts it over the\n image. -->\n <span *ngIf=\"product.available === false\" class=\"aia-product-badge\">Sold out</span>\n </span>\n </a>\n </div>\n</section>\n", styles: [".aia-products{display:flex;flex-direction:column;gap:6px;padding:0 10px;min-width:0}.aia-products-label{font-family:inherit;font-size:var(--aia-products-label-font-size, 11px);font-weight:500;line-height:18px;letter-spacing:.02em;color:var( --aia-products-label-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) )}.aia-products-row{display:flex;gap:var(--aia-product-gap, 8px);min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:2px;margin-inline:-6px;scrollbar-width:none;-ms-overflow-style:none}.aia-products-row::-webkit-scrollbar{display:none}.aia-product{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;width:var(--aia-product-card-width, 116px);padding:6px;border-radius:10px;background:var(--aia-product-bg, transparent);color:var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb));text-decoration:none;cursor:pointer;transition:background-color .15s ease;position:relative}.aia-product:hover{background:var(--aia-product-bg-active, var(--aia-option-bg, transparent))}.aia-product:focus-visible{outline:2px solid var(--aia-product-focus-ring, var(--aia-option-color-selected, currentColor));outline-offset:-2px}.aia-product-media{display:block;position:relative;width:100%;aspect-ratio:1 / 1;border-radius:8px;overflow:hidden;background:var(--aia-product-media-bg, var(--aia-skeleton-bg, rgba(189, 189, 189, .25)))}.aia-product-image{display:block;width:100%;height:100%;object-fit:cover}.aia-product-media:where([data-aia-product-initial]){display:flex;align-items:center;justify-content:center;color:var(--aia-product-title-color, var(--aia-option-color-selected, currentColor));font-size:24px;font-weight:600;line-height:1}.aia-product-media[data-aia-product-placeholder]:after{content:\"\";position:absolute;inset:22%;background:var( --aia-product-placeholder-image, url(\"data:image/svg+xml,%3Csvg viewBox='0 -0.5 32 32' fill-rule='evenodd' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform='matrix(1,0,0,1,-384,-144)'%3E%3Cg transform='matrix(0.875,0,0,0.875,90.25,19.125)'%3E%3Cpath d='M340.924,147.74C341.224,146.789 342.107,146.143 343.104,146.143C347.705,146.143 360.491,146.143 364.985,146.143C365.965,146.143 366.836,146.768 367.15,147.697C368.119,150.386 370,155.73 370,157C370,159.208 368.208,161 366,161C363.792,161 362,159.208 362,157C362,159.208 360.208,161 358,161C355.792,161 354,159.208 354,157C354,159.208 352.208,161 350,161C347.792,161 346,159.208 346,157C346,159.208 344.208,161 342,161C340.53,161 339.244,160.205 338.549,159.022C338.057,158.185 337.944,157.179 338.236,156.254C338.787,154.507 340.172,150.121 340.924,147.74Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1.32454,48,-56.1457)'%3E%3Cpath d='M341.026,160.675C341.026,160.675 341.01,168.196 341.003,171.488C341.002,171.889 341.213,172.273 341.588,172.557C341.963,172.841 342.472,173 343.003,173C347.188,173 356.817,173 361,173C361.53,173 362.039,172.841 362.414,172.558C362.789,172.275 363,171.891 363,171.49C363,168.2 363,160.675 363,160.675' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1,0,0,1,48,0)'%3E%3Cpath d='M355,168C355,166.895 354.105,166 353,166C352.356,166 351.644,166 351,166C349.895,166 349,166.895 349,168C349,170.069 349,173 349,173L355,173L355,168Z' fill='%2390e0ef'%3E%3C/path%3E%3C/g%3E%3Cg transform='matrix(1.11111,0,0,1.11111,-47.2678,-87.5361)'%3E%3Ccircle cx='411.5' cy='213.5' r='4.5' fill='%2390e0ef'%3E%3C/circle%3E%3C/g%3E%3Cpath d='M405.529,146C406.628,144.773 408.225,144 410,144C413.311,144 416,146.689 416,150C416,151.549 415.412,152.962 414.446,154.027C414.775,155.15 415,156.076 415,156.5C415,158.459 413.746,160.127 411.998,160.744L411.998,171C411.998,171.796 411.682,172.559 411.119,173.121C410.557,173.684 409.794,174 408.998,174L391.002,174C390.205,174 389.441,173.683 388.879,173.119C388.316,172.555 388,171.79 388.002,170.994L388.024,160.752C387.007,160.399 386.155,159.691 385.618,158.776L385.618,158.776C385.044,157.799 384.912,156.626 385.253,155.546L387.605,148.097C387.999,146.849 389.157,146 390.466,146L405.529,146ZM409.998,160.972C408.79,160.838 407.726,160.225 407,159.327C406.175,160.347 404.913,161 403.5,161C402.087,161 400.825,160.347 400,159.327C399.175,160.347 397.913,161 396.5,161C395.087,161 393.825,160.347 393,159.327C392.278,160.219 391.222,160.831 390.023,160.97L390.002,170.998C390.002,171.263 390.107,171.518 390.294,171.706C390.482,171.894 390.736,172 391.002,172L396,172L396,168C396,166.343 397.343,165 399,165L401,165C402.657,165 404,166.343 404,168L404,172L408.998,172C409.263,172 409.517,171.895 409.705,171.707C409.893,171.52 409.998,171.265 409.998,171L409.998,160.972ZM402,172L398,172L398,168C398,167.448 398.448,167 399,167C399,167 401,167 401,167C401.552,167 402,167.448 402,168L402,172ZM404.342,148L390.466,148C390.03,148 389.644,148.283 389.512,148.699L387.16,156.148C386.99,156.688 387.056,157.275 387.342,157.763C387.777,158.503 388.581,159 389.5,159C390.88,159 392,157.88 392,156.5C392,155.003 394,155.003 394,156.5C394,157.88 395.12,159 396.5,159C397.88,159 399,157.88 399,156.5C399,155.004 401,155.004 401,156.5C401,157.88 402.12,159 403.5,159C404.88,159 406,157.88 406,156.5C406,154.986 408,154.986 408,156.5C408,157.88 409.12,159 410.5,159C411.88,159 413,157.88 413,156.5C413,156.259 412.917,155.843 412.779,155.318C411.948,155.753 411.003,156 410,156C406.689,156 404,153.311 404,150C404,149.299 404.12,148.626 404.342,148ZM410,146C412.208,146 414,147.792 414,150C414,152.208 412.208,154 410,154C407.792,154 406,152.208 406,150C406,147.792 407.792,146 410,146ZM407.543,151.207L408.546,152.21C408.733,152.397 408.988,152.503 409.253,152.503C409.519,152.503 409.773,152.397 409.961,152.209L412.458,149.706C412.848,149.316 412.847,148.682 412.456,148.292C412.066,147.902 411.432,147.903 411.042,148.294L409.252,150.088C409.252,150.088 408.957,149.793 408.957,149.793C408.567,149.403 407.933,149.403 407.543,149.793C407.153,150.183 407.153,150.817 407.543,151.207Z' fill='%231990a7'%3E%3C/path%3E%3C/g%3E%3C/svg%3E\") ) center / contain no-repeat}.aia-product-body{display:flex;flex-direction:column;gap:2px;min-width:0}.aia-product-vendor{font-family:inherit;font-size:var(--aia-product-vendor-font-size, 10px);line-height:14px;color:var( --aia-product-vendor-color, var(--aia-option-color, var(--aia-color-text-muted, #c1c4cb)) );opacity:.8;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.aia-product-title{font-family:inherit;font-size:var(--aia-product-title-font-size, 12px);font-weight:400;line-height:16px;color:var( --aia-product-title-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) );display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.aia-product-price{font-family:inherit;font-size:var(--aia-product-price-font-size, 11px);font-weight:500;line-height:15px;color:var( --aia-product-price-color, var(--aia-option-color-selected, var(--aia-color-text-default, #fff)) )}.aia-product-badge{position:absolute;top:var(--aia-product-badge-inset, 12px);left:var(--aia-product-badge-inset, 12px);padding:3px 6px;border-radius:4px;background:var(--aia-product-badge-bg, rgba(255, 255, 255, .94));color:var(--aia-product-badge-color, #1f2328);box-shadow:0 0 0 1px #00000014,0 1px 2px #0000002e;font-family:inherit;font-size:var(--aia-product-badge-font-size, 9px);font-weight:600;line-height:1;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;pointer-events:none}.aia-product[data-aia-product-sold-out] .aia-product-image{filter:grayscale(.55)}.aia-products[data-aia-products-layout=list] .aia-products-row{flex-direction:column;gap:var(--aia-product-list-gap, 2px);max-height:var(--aia-product-list-max-height, 320px);overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain}.aia-products[data-aia-products-layout=list] .aia-product{flex-direction:row;align-items:center;gap:10px;width:auto;padding:6px 8px}.aia-products[data-aia-products-layout=list] .aia-product-media{flex:0 0 auto;width:var(--aia-product-list-media-size, 44px);height:var(--aia-product-list-media-size, 44px)}.aia-products[data-aia-products-layout=list] .aia-product-body{flex:1 1 auto}.aia-products[data-aia-products-layout=list] .aia-product-badge{top:calc(50% + var(--aia-product-list-media-size, 44px) / 2);left:8px;width:var(--aia-product-list-media-size, 44px);transform:translateY(-100%);padding:2px 0;border-radius:0 0 8px 8px;background:var(--aia-product-badge-list-bg, rgba(17, 17, 17, .72));color:var(--aia-product-badge-list-color, #fff);box-shadow:none;font-size:var(--aia-product-badge-list-font-size, 7px);letter-spacing:.02em;text-align:center}\n"] }]
130
131
  }], propDecorators: { products: [{
131
132
  type: Input
132
133
  }], listboxId: [{
@@ -145,4 +146,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
145
146
  type: ViewChild,
146
147
  args: ["row"]
147
148
  }] } });
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zdHJpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wscUJBQXFCLEVBSXJCLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDOzs7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFVSCxNQUFNLE9BQU8scUJBQXFCO0lBVGxDO1FBVVcsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUNsQywyREFBMkQ7UUFDbEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUN4Qjs7OztXQUlHO1FBQ00sY0FBUyxHQUFHLElBQUksQ0FBQztRQUMxQiw4RkFBOEY7UUFDckYsV0FBTSxHQUFtQixLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBeUIsT0FBTyxDQUFDO1FBQzlDLFlBQU8sR0FBRyxjQUFjLENBQUM7UUFDakIsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQW1CdkMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDeEQ7Ozs7O1dBS0c7UUFDZ0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXJELGdCQUFXLEdBQXdCLElBQUksQ0FBQztRQTBCaEQ7OztXQUdHO1FBQ0gsbUJBQWMsR0FBRyxD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Q0FBQyxHQUFHLEtBQUssR0FBRztZQUFFLE9BQU87UUFDdkQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsYUFBbUMsQ0FBQztRQUN2RCxJQUFJLElBQUksRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQUM7WUFBRSxPQUFPO1FBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7O21IQTNHVSxxQkFBcUI7dUdBQXJCLHFCQUFxQiw2WENsRGxDLG1nR0FrRUEsZzhPRHRCWSxZQUFZOzRGQU1YLHFCQUFxQjtrQkFUakMsU0FBUzsrQkFDRSxtQkFBbUIsY0FDakIsSUFBSSxXQUNQLENBQUMsWUFBWSxDQUFDLG1CQUNOLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7OEJBSzVCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFNRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQXFCYSxNQUFNO3NCQUF4QixNQUFNO2dCQU9ZLFdBQVc7c0JBQTdCLE1BQU07Z0JBVUgsR0FBRztzQkFETixTQUFTO3VCQUFDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICB0eXBlIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICB0eXBlIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgYXR0YWNoUHJvZHVjdFJvd1doZWVsLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdEltYWdlRmFsbGJhY2ssXG4gIHR5cGUgUHJvZHVjdHNMYXlvdXQsXG4gIHByb2R1Y3RJbml0aWFsLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcblxuLyoqXG4gKiBJbnRlcm5hbCBwcm9kdWN0IHN0cmlwIHJlbmRlcmVkIGJlbG93IHRoZSBkcm9wZG93bidzIG9wdGlvbnMgZ3JpZC4gTWlycm9yc1xuICogYHBhY2thZ2VzL3JlYWN0L3NyYy9jb21wb25lbnRzL1Byb2R1Y3RTdHJpcC50c3hgIGFuZCB0aGUgdmFuaWxsYSBjb3JlJ3NcbiAqIGByZW5kZXJQcm9kdWN0U3RyaXBgLCBzbyBhbGwgdGhyZWUgcGFja2FnZXMgZW1pdCB0aGUgc2FtZSBzdHJ1Y3R1cmUgYW5kXG4gKiB0aGVtZSBpZGVudGljYWxseS5cbiAqXG4gKiBUd28gbGF5b3V0IG5vdGVzIGNhcnJpZWQgb3ZlciBmcm9tIHRoZSB2YW5pbGxhIGltcGxlbWVudGF0aW9uOlxuICpcbiAqIC0gVGhlIGRyb3Bkb3duIHBhaW50cyBhIGJhY2tncm91bmQgYnV0IG5ldmVyIHNldHMgYGNvbG9yYCwgc28gYW55dGhpbmcgaGVyZVxuICogICByZWx5aW5nIG9uIGBjb2xvcjogaW5oZXJpdGAgd291bGQgcGljayB1cCB0aGUgKmhvc3QgcGFnZSdzKiB0ZXh0IGNvbG91ciDigJRcbiAqICAgYmxhY2sgdGV4dCBvbiBhIGRhcmsgcGFuZWwuIEV2ZXJ5IHRleHQgbm9kZSByZXNvbHZlcyBpdHMgY29sb3VyIHRocm91Z2hcbiAqICAgdGhlIHNhbWUgYC0tYWlhLW9wdGlvbi0qYCBjaGFpbiB0aGUgb3B0aW9ucyB1c2UuXG4gKiAtIFRoZSBvcHRpb25zIGdyaWQgY2FycmllcyBhIG5lZ2F0aXZlIGJvdHRvbSBtYXJnaW4gc28gdGhlIGZvb3RlciByaWRlcyB1cFxuICogICBvdmVyIGl0cyByZXNlcnZlZCBiYW5kLCBhbmQgd2hhdGV2ZXIgZm9sbG93cyB0aGUgZ3JpZCBpbmhlcml0cyB0aGF0IHB1bGwuXG4gKiAgIFRoZSBkcm9wZG93biByb290IGlzIG1hcmtlZCBgZGF0YS1haWEtaGFzLXByb2R1Y3RzYCBhbmQgdGhlIGFwcGVhcmFuY2VcbiAqICAgbGF5ZXIgemVyb2VzIHRoZSBiYW5kIGF0IGl0cyBzb3VyY2UgcmF0aGVyIHRoYW4gdGhlIHN0cmlwIGNhbmNlbGxpbmcgaXRcbiAqICAgZnJvbSBoZXJlLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiYWlhLXByb2R1Y3Qtc3RyaXBcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogXCIuL3Byb2R1Y3Qtc3RyaXAuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmxzOiBbXCIuL3Byb2R1Y3Qtc3RyaXAuY29tcG9uZW50LmNzc1wiXSxcbn0pXG5leHBvcnQgY2xhc3MgUHJvZHVjdFN0cmlwQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwcm9kdWN0czogUHJvZHVjdFtdID0gW107XG4gIC8qKiBTY29wZXMgdGhlIHNlY3Rpb24gbGFiZWwncyBpZCB0byB0aGUgb3duaW5nIGxpc3Rib3guICovXG4gIEBJbnB1dCgpIGxpc3Rib3hJZCA9IFwiXCI7XG4gIC8qKlxuICAgKiBGYWxzZSB3aGlsZSB0aGUgcGFuZWwgaXMgZmFkaW5nIG91dC4gVGhlIGNsb3NlZCBkcm9wZG93biBrZWVwcyByZW5kZXJpbmdcbiAgICogaXRzIGxhc3QgY29udGVudCBmb3IgdGhlIGZhZGUsIGFuZCBmb2N1c2FibGUgY2FyZHMgaW5zaWRlIGl0IHdvdWxkIHN0aWxsXG4gICAqIGFuc3dlciBUYWIuXG4gICAqL1xuICBASW5wdXQoKSBmb2N1c2FibGUgPSB0cnVlO1xuICAvKiogSG93IHRoZSBjYXJkcyBsYXkgb3V0IOKAlCBhIHNjcm9sbGluZyByb3csIG9yIHN0YWNrZWQgYXMgZnVsbC13aWR0aCByb3dzLiBEZWZhdWx0OiBcInJvd1wiLiAqL1xuICBASW5wdXQoKSBsYXlvdXQ6IFByb2R1Y3RzTGF5b3V0ID0gXCJyb3dcIjtcbiAgQElucHV0KCkgaW1hZ2VGYWxsYmFjazogUHJvZHVjdEltYWdlRmFsbGJhY2sgPSBcImltYWdlXCI7XG4gIHJlYWRvbmx5IGluaXRpYWwgPSBwcm9kdWN0SW5pdGlhbDtcbiAgcHJpdmF0ZSByZWFkb25seSBmYWlsZWRJbWFnZXMgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIG5nT25DaGFuZ2VzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNvdXJjZXMgPSBuZXcgTWFwKHRoaXMucHJvZHVjdHMubWFwKChwcm9kdWN0KSA9PiBbcHJvZHVjdC5pZCwgcHJvZHVjdC5pbWFnZVVybD8udHJpbSgpXSkpO1xuICAgIGZvciAoY29uc3QgW2lkLCBzcmNdIG9mIHRoaXMuZmFpbGVkSW1hZ2VzKSB7XG4gICAgICBpZiAoc291cmNlcy5nZXQoaWQpICE9PSBzcmMpIHRoaXMuZmFpbGVkSW1hZ2VzLmRlbGV0ZShpZCk7XG4gICAgfVxuICB9XG5cbiAgaW1hZ2VTb3VyY2UocHJvZHVjdDogUHJvZHVjdCk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHNyYyA9IHByb2R1Y3QuaW1hZ2VVcmw/LnRyaW0oKTtcbiAgICByZXR1cm4gc3JjICYmIHRoaXMuZmFpbGVkSW1hZ2VzLmdldChwcm9kdWN0LmlkKSAhPT0gc3JjID8gc3JjIDogbnVsbDtcbiAgfVxuXG4gIG9uSW1hZ2VFcnJvcihwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgY29uc3Qgc3JjID0gcHJvZHVjdC5pbWFnZVVybD8udHJpbSgpO1xuICAgIGlmIChzcmMpIHRoaXMuZmFpbGVkSW1hZ2VzLnNldChwcm9kdWN0LmlkLCBzcmMpO1xuICB9XG5cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvZHVjdD4oKTtcbiAgLyoqXG4gICAqIEZvY3VzIG1vdmVkIGludG8gLyBvdXQgb2YgdGhlIHN0cmlwLiBUaGUgcGFuZWwgY2xvc2VzIG9uIGJsdXIgYnkgZGVmYXVsdFxuICAgKiBhbmQgdGhlIGVkaXRvciBibHVycyB0aGUgbW9tZW50IGEgY2FyZCB0YWtlcyBmb2N1cywgc28gdGhlIGRyb3Bkb3duXG4gICAqIHJlcG9ydHMgZm9jdXMgYXMgc3RpbGwtaW5zaWRlIHJhdGhlciB0aGFuIHNodXR0aW5nIG91dCBmcm9tIHVuZGVyIHRoZSBjYXJkXG4gICAqIHRoZSB1c2VyIGp1c3QgdGFiYmVkIHRvLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGZvY3VzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgZGV0YWNoV2hlZWw6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBBIG1vdXNlIHdoZWVsIG92ZXIgdGhlIHJvdyBzY3JvbGxzIGl0IHNpZGV3YXlzLiBUaGUgcm93IHNpdHMgaW5zaWRlIHRoZVxuICAgKiBzZWN0aW9uJ3MgYCpuZ0lmYCwgc28gdGhlIHF1ZXJ5IGZpcmVzIHdpdGggdGhlIGVsZW1lbnQgYXMgcHJvZHVjdHMgYXJyaXZlXG4gICAqIGFuZCB3aXRoIGB1bmRlZmluZWRgIGFzIHRoZXkgZ287IHRoZSBiaW5kaW5nIGZvbGxvd3MgaXQgZWl0aGVyIHdheS5cbiAgICovXG4gIEBWaWV3Q2hpbGQoXCJyb3dcIilcbiAgc2V0IHJvdyhyZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5kZXRhY2hXaGVlbD8uKCk7XG4gICAgdGhpcy5kZXRhY2hXaGVlbCA9IHJlZiA/IGF0dGFjaFByb2R1Y3RSb3dXaGVlbChyZWYubmF0aXZlRWxlbWVudCkgOiBudWxsO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXRhY2hXaGVlbD8uKCk7XG4gICAgdGhpcy5kZXRhY2hXaGVlbCA9IG51bGw7XG4gIH1cblxuICBnZXQgbGFiZWxJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmxpc3Rib3hJZH0tcHJvZHVjdHMtbGFiZWxgO1xuICB9XG5cbiAgY2FyZElkKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmxpc3Rib3hJZH0tcHJvZHVjdC0ke2luZGV4fWA7XG4gIH1cblxuICAvKipcbiAgICogSWRlbnRpdHkgKmFuZCogY29udGVudDogYSBzYW1lLWlkIHJlc3VsdCB3aG9zZSBmaWVsZHMgY2hhbmdlZCBtdXN0XG4gICAqIHJlLXJlbmRlciByYXRoZXIgdGhhbiByZXVzZSB0aGUgcHJldmlvdXMgY2FyZCdzIGJpbmRpbmdzLlxuICAgKi9cbiAgdHJhY2tCeVByb2R1Y3QgPSAoXzogbnVtYmVyLCBwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nID0+XG4gICAgW1xuICAgICAgcHJvZHVjdC5pZCxcbiAgICAgIHByb2R1Y3QudGl0bGUsXG4gICAgICBwcm9kdWN0LnVybCA/PyBcIlwiLFxuICAgICAgcHJvZHVjdC5pbWFnZVVybCA/PyBcIlwiLFxuICAgICAgcHJvZHVjdC5wcmljZSA/PyBcIlwiLFxuICAgICAgcHJvZHVjdC52ZW5kb3IgPz8gXCJcIixcbiAgICBdLmpvaW4oXCJcXDBcIik7XG5cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCwgcHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIC8vIExldCB0aGUgYnJvd3NlciBrZWVwIHRoZSBjbGlja3MgdGhhdCBtZWFuIFwib3BlbiB0aGlzIHNvbWV3aGVyZSBlbHNlXCIg4oCUXG4gICAgLy8gaW50ZXJjZXB0aW5nIHRoZW0gd291bGQgZGVmZWF0IHRoZSBwb2ludCBvZiByZW5kZXJpbmcgYW4gPGE+LiBUaG9zZSBhcmVcbiAgICAvLyBuYXZpZ2F0aW9ucyB0aGUgdXNlciBhc2tlZCBmb3IgZXhwbGljaXRseSwgc28gdGhleSBkb24ndCBlbWl0LlxuICAgIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2VsZWN0LmVtaXQocHJvZHVjdCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBcIkVudGVyXCIgJiYgZXZlbnQua2V5ICE9PSBcIiBcIikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZWxlY3QuZW1pdChwcm9kdWN0KTtcbiAgfVxuXG4gIG9uQ2FyZEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9uQ2FyZEJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKG5leHQ/LmNsb3Nlc3QoXCJbZGF0YS1haWEtZHJvcGRvd25dXCIpKSByZXR1cm47XG4gICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxufVxuIiwiPCEtLSBgZ3JvdXBgIGlzIHRoZSBvbmUgcm9sZSBhIGxpc3Rib3ggYWNjZXB0cyBhcm91bmQgYSBzZXQgb2Ygb3B0aW9ucywgc28gdGhlXG4gICAgIHN0cmlwIHN0YXlzIGluc2lkZSB0aGUgbGlzdGJveCB3aXRob3V0IGJyZWFraW5nIGl0cyBjb250ZW50IG1vZGVsLiAtLT5cbjxzZWN0aW9uXG4gICpuZ0lmPVwicHJvZHVjdHMubGVuZ3RoID4gMFwiXG4gIGNsYXNzPVwiYWlhLXByb2R1Y3RzXCJcbiAgZGF0YS1haWEtcHJvZHVjdHM9XCJcIlxuICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0cy1sYXlvdXRdPVwibGF5b3V0XCJcbiAgcm9sZT1cImdyb3VwXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuPlxuICA8IS0tIGRhdGEtYWlhLXByb2R1Y3RzLWxhYmVsOiB0aGUgc2Nyb2xsIGFycm93IGNlbnRyZXMgaXRzZWxmIG9uIHRoaXMgcm93LiAtLT5cbiAgPGRpdiBjbGFzcz1cImFpYS1wcm9kdWN0cy1sYWJlbFwiIFtpZF09XCJsYWJlbElkXCIgZGF0YS1haWEtcHJvZHVjdHMtbGFiZWw9XCJcIj5Qcm9kdWN0czwvZGl2PlxuXG4gIDwhLS0gI3JvdzogdGhlIGNvbXBvbmVudCBiaW5kcyB3aGVlbC10by1zaWRld2F5cyBzY3JvbGxpbmcgb24gaXQuIC0tPlxuICA8ZGl2ICNyb3cgY2xhc3M9XCJhaWEtcHJvZHVjdHMtcm93XCIgZGF0YS1haWEtcHJvZHVjdHMtcm93PVwiXCI+XG4gICAgPCEtLSBBIHJlYWwgPGEgaHJlZj4gcmF0aGVyIHRoYW4gYSA8ZGl2PjogaXQga2VlcHMgdGhlIGJyb3dzZXIncyBvd24gbGlua1xuICAgICAgICAgYWZmb3JkYW5jZXMg4oCUIGNtZC9jdHJsLWNsaWNrIGZvciBhIG5ldyB0YWIsIG1pZGRsZS1jbGljaywgcmlnaHQtY2xpY2sg4oaSXG4gICAgICAgICBcImNvcHkgbGluayBhZGRyZXNzXCIuIHJvbGU9XCJvcHRpb25cIiBvdmVycmlkZXMgaG93IGFzc2lzdGl2ZSB0ZWNoXG4gICAgICAgICBhbm5vdW5jZXMgaXQsIHdoaWNoIGlzIGNvcnJlY3QgaW5zaWRlIGEgbGlzdGJveDsgdGhlIGRlbGliZXJhdGUgdHJhZGVcbiAgICAgICAgIGlzIHRoYXQgQVQgbm8gbG9uZ2VyIGNhbGxzIGl0IGEgbGluay4gQW4gYXR0cmlidXRlIGJpbmRpbmcsIHNvIGFcbiAgICAgICAgIHByb2R1Y3Qgd2l0aG91dCBhIHVybCBnZXRzIG5vIGhyZWYgYXQgYWxsIHJhdGhlciB0aGFuIFwibnVsbFwiLiAtLT5cbiAgICA8YVxuICAgICAgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgcHJvZHVjdHM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlQcm9kdWN0XCJcbiAgICAgIFtpZF09XCJjYXJkSWQoaSlcIlxuICAgICAgY2xhc3M9XCJhaWEtcHJvZHVjdFwiXG4gICAgICBkYXRhLWFpYS1wcm9kdWN0PVwiXCJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJmYWxzZVwiXG4gICAgICBbYXR0ci5ocmVmXT1cInByb2R1Y3QudXJsID8/IG51bGxcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZm9jdXNhYmxlID8gMCA6IC0xXCJcbiAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgKGZvY3VzKT1cIm9uQ2FyZEZvY3VzKClcIlxuICAgICAgKGJsdXIpPVwib25DYXJkQmx1cigkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImFpYS1wcm9kdWN0LW1lZGlhXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1wbGFjZWhvbGRlcl09XCIhaW1hZ2VTb3VyY2UocHJvZHVjdCkgJiYgaW1hZ2VGYWxsYmFjayA9PT0gJ2ltYWdlJyA/ICcnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLXByb2R1Y3QtaW5pdGlhbF09XCIhaW1hZ2VTb3VyY2UocHJvZHVjdCkgJiYgaW1hZ2VGYWxsYmFjayA9PT0gJ2luaXRpYWwnID8gJycgOiBudWxsXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBhbHQ9XCJcIiBvbiBwdXJwb3NlOiB0aGUgdGl0bGUgaXMgYWxyZWFkeSB0aGUgY2FyZCdzIGFjY2Vzc2libGVcbiAgICAgICAgICAgICBuYW1lLCBhbmQgcmVwZWF0aW5nIGl0IHdvdWxkIGhhdmUgYSBzY3JlZW4gcmVhZGVyIHJlYWQgaXQgdHdpY2UuIC0tPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJpbWFnZVNvdXJjZShwcm9kdWN0KSBhcyBzcmNcIlxuICAgICAgICAgIGNsYXNzPVwiYWlhLXByb2R1Y3QtaW1hZ2VcIlxuICAgICAgICAgIFtzcmNdPVwic3JjXCJcbiAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKHByb2R1Y3QpXCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBkZWNvZGluZz1cImFzeW5jXCJcbiAgICAgICAgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbWFnZVNvdXJjZShwcm9kdWN0KSAmJiBpbWFnZUZhbGxiYWNrID09PSAnaW5pdGlhbCdcIj57eyBpbml0aWFsKHByb2R1Y3QudGl0bGUpIH19PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gRXZlcnkgZmllbGQgYnV0IHRoZSB0aXRsZSBpcyBvcHRpb25hbCwgc28gYWJzZW50IG9uZXMgcmVuZGVyIG5vXG4gICAgICAgICAgIGVsZW1lbnQgYXQgYWxsIOKAlCB0aGUgY29sdW1uIGdhcCBjYW4ndCBsZWF2ZSBhIGhvbGUgZm9yIGEgYm94IHRoYXRcbiAgICAgICAgICAgaXNuJ3QgdGhlcmUuIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhaWEtcHJvZHVjdC1ib2R5XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC52ZW5kb3JcIiBjbGFzcz1cImFpYS1wcm9kdWN0LXZlbmRvclwiPnt7IHByb2R1Y3QudmVuZG9yIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImFpYS1wcm9kdWN0LXRpdGxlXCI+e3sgcHJvZHVjdC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LnByaWNlXCIgY2xhc3M9XCJhaWEtcHJvZHVjdC1wcmljZVwiPnt7IHByb2R1Y3QucHJpY2UgfX08L3NwYW4+XG4gICAgICA8L3NwYW4+XG4gICAgPC9hPlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1zdHJpcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wscUJBQXFCLEVBSXJCLGNBQWMsR0FDZixNQUFNLHFDQUFxQyxDQUFDOzs7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFVSCxNQUFNLE9BQU8scUJBQXFCO0lBVGxDO1FBVVcsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUNsQywyREFBMkQ7UUFDbEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUN4Qjs7OztXQUlHO1FBQ00sY0FBUyxHQUFHLElBQUksQ0FBQztRQUMxQiw4RkFBOEY7UUFDckYsV0FBTSxHQUFtQixLQUFLLENBQUM7UUFDL0Isa0JBQWEsR0FBeUIsT0FBTyxDQUFDO1FBQzlDLFlBQU8sR0FBRyxjQUFjLENBQUM7UUFDakIsaUJBQVksR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQW1CdkMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDeEQ7Ozs7O1dBS0c7UUFDZ0IsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRXJELGdCQUFXLEdBQXdCLElBQUksQ0FBQztRQTBCaEQ7OztXQUdHO1FBQ0gsbUJBQWMsR0FBRyxD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QVMsQ0FBQyxLQUFvQixFQUFFLE9BQWdCO1FBQzlDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxPQUFPLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHO1lBQUUsT0FBTztRQUN2RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWlCO1FBQzFCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxhQUFtQyxDQUFDO1FBQ3ZELElBQUksSUFBSSxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztZQUFFLE9BQU87UUFDakQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzs7bUhBNUdVLHFCQUFxQjt1R0FBckIscUJBQXFCLDZYQ2xEbEMsZzNHQXVFQSxrL1FEM0JZLFlBQVk7NEZBTVgscUJBQXFCO2tCQVRqQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1AsQ0FBQyxZQUFZLENBQUMsbUJBQ04sdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs4QkFLNUIsUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQU1HLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBcUJhLE1BQU07c0JBQXhCLE1BQU07Z0JBT1ksV0FBVztzQkFBN0IsTUFBTTtnQkFVSCxHQUFHO3NCQUROLFNBQVM7dUJBQUMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIHR5cGUgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgdHlwZSBPbkNoYW5nZXMsXG4gIHR5cGUgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBhdHRhY2hQcm9kdWN0Um93V2hlZWwsXG4gIHR5cGUgUHJvZHVjdCxcbiAgdHlwZSBQcm9kdWN0SW1hZ2VGYWxsYmFjayxcbiAgdHlwZSBQcm9kdWN0c0xheW91dCxcbiAgcHJvZHVjdEluaXRpYWwsXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuXG4vKipcbiAqIEludGVybmFsIHByb2R1Y3Qgc3RyaXAgcmVuZGVyZWQgYmVsb3cgdGhlIGRyb3Bkb3duJ3Mgb3B0aW9ucyBncmlkLiBNaXJyb3JzXG4gKiBgcGFja2FnZXMvcmVhY3Qvc3JjL2NvbXBvbmVudHMvUHJvZHVjdFN0cmlwLnRzeGAgYW5kIHRoZSB2YW5pbGxhIGNvcmUnc1xuICogYHJlbmRlclByb2R1Y3RTdHJpcGAsIHNvIGFsbCB0aHJlZSBwYWNrYWdlcyBlbWl0IHRoZSBzYW1lIHN0cnVjdHVyZSBhbmRcbiAqIHRoZW1lIGlkZW50aWNhbGx5LlxuICpcbiAqIFR3byBsYXlvdXQgbm90ZXMgY2FycmllZCBvdmVyIGZyb20gdGhlIHZhbmlsbGEgaW1wbGVtZW50YXRpb246XG4gKlxuICogLSBUaGUgZHJvcGRvd24gcGFpbnRzIGEgYmFja2dyb3VuZCBidXQgbmV2ZXIgc2V0cyBgY29sb3JgLCBzbyBhbnl0aGluZyBoZXJlXG4gKiAgIHJlbHlpbmcgb24gYGNvbG9yOiBpbmhlcml0YCB3b3VsZCBwaWNrIHVwIHRoZSAqaG9zdCBwYWdlJ3MqIHRleHQgY29sb3VyIOKAlFxuICogICBibGFjayB0ZXh0IG9uIGEgZGFyayBwYW5lbC4gRXZlcnkgdGV4dCBub2RlIHJlc29sdmVzIGl0cyBjb2xvdXIgdGhyb3VnaFxuICogICB0aGUgc2FtZSBgLS1haWEtb3B0aW9uLSpgIGNoYWluIHRoZSBvcHRpb25zIHVzZS5cbiAqIC0gVGhlIG9wdGlvbnMgZ3JpZCBjYXJyaWVzIGEgbmVnYXRpdmUgYm90dG9tIG1hcmdpbiBzbyB0aGUgZm9vdGVyIHJpZGVzIHVwXG4gKiAgIG92ZXIgaXRzIHJlc2VydmVkIGJhbmQsIGFuZCB3aGF0ZXZlciBmb2xsb3dzIHRoZSBncmlkIGluaGVyaXRzIHRoYXQgcHVsbC5cbiAqICAgVGhlIGRyb3Bkb3duIHJvb3QgaXMgbWFya2VkIGBkYXRhLWFpYS1oYXMtcHJvZHVjdHNgIGFuZCB0aGUgYXBwZWFyYW5jZVxuICogICBsYXllciB6ZXJvZXMgdGhlIGJhbmQgYXQgaXRzIHNvdXJjZSByYXRoZXIgdGhhbiB0aGUgc3RyaXAgY2FuY2VsbGluZyBpdFxuICogICBmcm9tIGhlcmUuXG4gKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhaWEtcHJvZHVjdC1zdHJpcFwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vcHJvZHVjdC1zdHJpcC5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0U3RyaXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHByb2R1Y3RzOiBQcm9kdWN0W10gPSBbXTtcbiAgLyoqIFNjb3BlcyB0aGUgc2VjdGlvbiBsYWJlbCdzIGlkIHRvIHRoZSBvd25pbmcgbGlzdGJveC4gKi9cbiAgQElucHV0KCkgbGlzdGJveElkID0gXCJcIjtcbiAgLyoqXG4gICAqIEZhbHNlIHdoaWxlIHRoZSBwYW5lbCBpcyBmYWRpbmcgb3V0LiBUaGUgY2xvc2VkIGRyb3Bkb3duIGtlZXBzIHJlbmRlcmluZ1xuICAgKiBpdHMgbGFzdCBjb250ZW50IGZvciB0aGUgZmFkZSwgYW5kIGZvY3VzYWJsZSBjYXJkcyBpbnNpZGUgaXQgd291bGQgc3RpbGxcbiAgICogYW5zd2VyIFRhYi5cbiAgICovXG4gIEBJbnB1dCgpIGZvY3VzYWJsZSA9IHRydWU7XG4gIC8qKiBIb3cgdGhlIGNhcmRzIGxheSBvdXQg4oCUIGEgc2Nyb2xsaW5nIHJvdywgb3Igc3RhY2tlZCBhcyBmdWxsLXdpZHRoIHJvd3MuIERlZmF1bHQ6IFwicm93XCIuICovXG4gIEBJbnB1dCgpIGxheW91dDogUHJvZHVjdHNMYXlvdXQgPSBcInJvd1wiO1xuICBASW5wdXQoKSBpbWFnZUZhbGxiYWNrOiBQcm9kdWN0SW1hZ2VGYWxsYmFjayA9IFwiaW1hZ2VcIjtcbiAgcmVhZG9ubHkgaW5pdGlhbCA9IHByb2R1Y3RJbml0aWFsO1xuICBwcml2YXRlIHJlYWRvbmx5IGZhaWxlZEltYWdlcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgc291cmNlcyA9IG5ldyBNYXAodGhpcy5wcm9kdWN0cy5tYXAoKHByb2R1Y3QpID0+IFtwcm9kdWN0LmlkLCBwcm9kdWN0LmltYWdlVXJsPy50cmltKCldKSk7XG4gICAgZm9yIChjb25zdCBbaWQsIHNyY10gb2YgdGhpcy5mYWlsZWRJbWFnZXMpIHtcbiAgICAgIGlmIChzb3VyY2VzLmdldChpZCkgIT09IHNyYykgdGhpcy5mYWlsZWRJbWFnZXMuZGVsZXRlKGlkKTtcbiAgICB9XG4gIH1cblxuICBpbWFnZVNvdXJjZShwcm9kdWN0OiBQcm9kdWN0KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3Qgc3JjID0gcHJvZHVjdC5pbWFnZVVybD8udHJpbSgpO1xuICAgIHJldHVybiBzcmMgJiYgdGhpcy5mYWlsZWRJbWFnZXMuZ2V0KHByb2R1Y3QuaWQpICE9PSBzcmMgPyBzcmMgOiBudWxsO1xuICB9XG5cbiAgb25JbWFnZUVycm9yKHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBzcmMgPSBwcm9kdWN0LmltYWdlVXJsPy50cmltKCk7XG4gICAgaWYgKHNyYykgdGhpcy5mYWlsZWRJbWFnZXMuc2V0KHByb2R1Y3QuaWQsIHNyYyk7XG4gIH1cblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9kdWN0PigpO1xuICAvKipcbiAgICogRm9jdXMgbW92ZWQgaW50byAvIG91dCBvZiB0aGUgc3RyaXAuIFRoZSBwYW5lbCBjbG9zZXMgb24gYmx1ciBieSBkZWZhdWx0XG4gICAqIGFuZCB0aGUgZWRpdG9yIGJsdXJzIHRoZSBtb21lbnQgYSBjYXJkIHRha2VzIGZvY3VzLCBzbyB0aGUgZHJvcGRvd25cbiAgICogcmVwb3J0cyBmb2N1cyBhcyBzdGlsbC1pbnNpZGUgcmF0aGVyIHRoYW4gc2h1dHRpbmcgb3V0IGZyb20gdW5kZXIgdGhlIGNhcmRcbiAgICogdGhlIHVzZXIganVzdCB0YWJiZWQgdG8uXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZm9jdXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBkZXRhY2hXaGVlbDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEEgbW91c2Ugd2hlZWwgb3ZlciB0aGUgcm93IHNjcm9sbHMgaXQgc2lkZXdheXMuIFRoZSByb3cgc2l0cyBpbnNpZGUgdGhlXG4gICAqIHNlY3Rpb24ncyBgKm5nSWZgLCBzbyB0aGUgcXVlcnkgZmlyZXMgd2l0aCB0aGUgZWxlbWVudCBhcyBwcm9kdWN0cyBhcnJpdmVcbiAgICogYW5kIHdpdGggYHVuZGVmaW5lZGAgYXMgdGhleSBnbzsgdGhlIGJpbmRpbmcgZm9sbG93cyBpdCBlaXRoZXIgd2F5LlxuICAgKi9cbiAgQFZpZXdDaGlsZChcInJvd1wiKVxuICBzZXQgcm93KHJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmRldGFjaFdoZWVsPy4oKTtcbiAgICB0aGlzLmRldGFjaFdoZWVsID0gcmVmID8gYXR0YWNoUHJvZHVjdFJvd1doZWVsKHJlZi5uYXRpdmVFbGVtZW50KSA6IG51bGw7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRldGFjaFdoZWVsPy4oKTtcbiAgICB0aGlzLmRldGFjaFdoZWVsID0gbnVsbDtcbiAgfVxuXG4gIGdldCBsYWJlbElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubGlzdGJveElkfS1wcm9kdWN0cy1sYWJlbGA7XG4gIH1cblxuICBjYXJkSWQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMubGlzdGJveElkfS1wcm9kdWN0LSR7aW5kZXh9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGl0eSAqYW5kKiBjb250ZW50OiBhIHNhbWUtaWQgcmVzdWx0IHdob3NlIGZpZWxkcyBjaGFuZ2VkIG11c3RcbiAgICogcmUtcmVuZGVyIHJhdGhlciB0aGFuIHJldXNlIHRoZSBwcmV2aW91cyBjYXJkJ3MgYmluZGluZ3MuXG4gICAqL1xuICB0cmFja0J5UHJvZHVjdCA9IChfOiBudW1iZXIsIHByb2R1Y3Q6IFByb2R1Y3QpOiBzdHJpbmcgPT5cbiAgICBbXG4gICAgICBwcm9kdWN0LmlkLFxuICAgICAgcHJvZHVjdC50aXRsZSxcbiAgICAgIHByb2R1Y3QudXJsID8/IFwiXCIsXG4gICAgICBwcm9kdWN0LmltYWdlVXJsID8/IFwiXCIsXG4gICAgICBwcm9kdWN0LnByaWNlID8/IFwiXCIsXG4gICAgICBwcm9kdWN0LnZlbmRvciA/PyBcIlwiLFxuICAgICAgcHJvZHVjdC5hdmFpbGFibGUgPT09IGZhbHNlID8gXCJzb2xkLW91dFwiIDogXCJcIixcbiAgICBdLmpvaW4oXCJcXDBcIik7XG5cbiAgb25DbGljayhldmVudDogTW91c2VFdmVudCwgcHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIC8vIExldCB0aGUgYnJvd3NlciBrZWVwIHRoZSBjbGlja3MgdGhhdCBtZWFuIFwib3BlbiB0aGlzIHNvbWV3aGVyZSBlbHNlXCIg4oCUXG4gICAgLy8gaW50ZXJjZXB0aW5nIHRoZW0gd291bGQgZGVmZWF0IHRoZSBwb2ludCBvZiByZW5kZXJpbmcgYW4gPGE+LiBUaG9zZSBhcmVcbiAgICAvLyBuYXZpZ2F0aW9ucyB0aGUgdXNlciBhc2tlZCBmb3IgZXhwbGljaXRseSwgc28gdGhleSBkb24ndCBlbWl0LlxuICAgIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuc2VsZWN0LmVtaXQocHJvZHVjdCk7XG4gIH1cblxuICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHByb2R1Y3Q6IFByb2R1Y3QpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBcIkVudGVyXCIgJiYgZXZlbnQua2V5ICE9PSBcIiBcIikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5zZWxlY3QuZW1pdChwcm9kdWN0KTtcbiAgfVxuXG4gIG9uQ2FyZEZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG9uQ2FyZEJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKG5leHQ/LmNsb3Nlc3QoXCJbZGF0YS1haWEtZHJvcGRvd25dXCIpKSByZXR1cm47XG4gICAgdGhpcy5mb2N1c0NoYW5nZS5lbWl0KGZhbHNlKTtcbiAgfVxufVxuIiwiPCEtLSBgZ3JvdXBgIGlzIHRoZSBvbmUgcm9sZSBhIGxpc3Rib3ggYWNjZXB0cyBhcm91bmQgYSBzZXQgb2Ygb3B0aW9ucywgc28gdGhlXG4gICAgIHN0cmlwIHN0YXlzIGluc2lkZSB0aGUgbGlzdGJveCB3aXRob3V0IGJyZWFraW5nIGl0cyBjb250ZW50IG1vZGVsLiAtLT5cbjxzZWN0aW9uXG4gICpuZ0lmPVwicHJvZHVjdHMubGVuZ3RoID4gMFwiXG4gIGNsYXNzPVwiYWlhLXByb2R1Y3RzXCJcbiAgZGF0YS1haWEtcHJvZHVjdHM9XCJcIlxuICBbYXR0ci5kYXRhLWFpYS1wcm9kdWN0cy1sYXlvdXRdPVwibGF5b3V0XCJcbiAgcm9sZT1cImdyb3VwXCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImxhYmVsSWRcIlxuPlxuICA8IS0tIGRhdGEtYWlhLXByb2R1Y3RzLWxhYmVsOiB0aGUgc2Nyb2xsIGFycm93IGNlbnRyZXMgaXRzZWxmIG9uIHRoaXMgcm93LiAtLT5cbiAgPGRpdiBjbGFzcz1cImFpYS1wcm9kdWN0cy1sYWJlbFwiIFtpZF09XCJsYWJlbElkXCIgZGF0YS1haWEtcHJvZHVjdHMtbGFiZWw9XCJcIj5Qcm9kdWN0czwvZGl2PlxuXG4gIDwhLS0gI3JvdzogdGhlIGNvbXBvbmVudCBiaW5kcyB3aGVlbC10by1zaWRld2F5cyBzY3JvbGxpbmcgb24gaXQuIC0tPlxuICA8ZGl2ICNyb3cgY2xhc3M9XCJhaWEtcHJvZHVjdHMtcm93XCIgZGF0YS1haWEtcHJvZHVjdHMtcm93PVwiXCI+XG4gICAgPCEtLSBBIHJlYWwgPGEgaHJlZj4gcmF0aGVyIHRoYW4gYSA8ZGl2PjogaXQga2VlcHMgdGhlIGJyb3dzZXIncyBvd24gbGlua1xuICAgICAgICAgYWZmb3JkYW5jZXMg4oCUIGNtZC9jdHJsLWNsaWNrIGZvciBhIG5ldyB0YWIsIG1pZGRsZS1jbGljaywgcmlnaHQtY2xpY2sg4oaSXG4gICAgICAgICBcImNvcHkgbGluayBhZGRyZXNzXCIuIHJvbGU9XCJvcHRpb25cIiBvdmVycmlkZXMgaG93IGFzc2lzdGl2ZSB0ZWNoXG4gICAgICAgICBhbm5vdW5jZXMgaXQsIHdoaWNoIGlzIGNvcnJlY3QgaW5zaWRlIGEgbGlzdGJveDsgdGhlIGRlbGliZXJhdGUgdHJhZGVcbiAgICAgICAgIGlzIHRoYXQgQVQgbm8gbG9uZ2VyIGNhbGxzIGl0IGEgbGluay4gQW4gYXR0cmlidXRlIGJpbmRpbmcsIHNvIGFcbiAgICAgICAgIHByb2R1Y3Qgd2l0aG91dCBhIHVybCBnZXRzIG5vIGhyZWYgYXQgYWxsIHJhdGhlciB0aGFuIFwibnVsbFwiLiAtLT5cbiAgICA8YVxuICAgICAgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2YgcHJvZHVjdHM7IGxldCBpID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlQcm9kdWN0XCJcbiAgICAgIFtpZF09XCJjYXJkSWQoaSlcIlxuICAgICAgY2xhc3M9XCJhaWEtcHJvZHVjdFwiXG4gICAgICBkYXRhLWFpYS1wcm9kdWN0PVwiXCJcbiAgICAgIFthdHRyLmRhdGEtYWlhLXByb2R1Y3Qtc29sZC1vdXRdPVwicHJvZHVjdC5hdmFpbGFibGUgPT09IGZhbHNlID8gJycgOiBudWxsXCJcbiAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJmYWxzZVwiXG4gICAgICBbYXR0ci5ocmVmXT1cInByb2R1Y3QudXJsID8/IG51bGxcIlxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZm9jdXNhYmxlID8gMCA6IC0xXCJcbiAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudCwgcHJvZHVjdClcIlxuICAgICAgKGZvY3VzKT1cIm9uQ2FyZEZvY3VzKClcIlxuICAgICAgKGJsdXIpPVwib25DYXJkQmx1cigkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzcz1cImFpYS1wcm9kdWN0LW1lZGlhXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgW2F0dHIuZGF0YS1haWEtcHJvZHVjdC1wbGFjZWhvbGRlcl09XCIhaW1hZ2VTb3VyY2UocHJvZHVjdCkgJiYgaW1hZ2VGYWxsYmFjayA9PT0gJ2ltYWdlJyA/ICcnIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmRhdGEtYWlhLXByb2R1Y3QtaW5pdGlhbF09XCIhaW1hZ2VTb3VyY2UocHJvZHVjdCkgJiYgaW1hZ2VGYWxsYmFjayA9PT0gJ2luaXRpYWwnID8gJycgOiBudWxsXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBhbHQ9XCJcIiBvbiBwdXJwb3NlOiB0aGUgdGl0bGUgaXMgYWxyZWFkeSB0aGUgY2FyZCdzIGFjY2Vzc2libGVcbiAgICAgICAgICAgICBuYW1lLCBhbmQgcmVwZWF0aW5nIGl0IHdvdWxkIGhhdmUgYSBzY3JlZW4gcmVhZGVyIHJlYWQgaXQgdHdpY2UuIC0tPlxuICAgICAgICA8aW1nXG4gICAgICAgICAgKm5nSWY9XCJpbWFnZVNvdXJjZShwcm9kdWN0KSBhcyBzcmNcIlxuICAgICAgICAgIGNsYXNzPVwiYWlhLXByb2R1Y3QtaW1hZ2VcIlxuICAgICAgICAgIFtzcmNdPVwic3JjXCJcbiAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKHByb2R1Y3QpXCJcbiAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgIGxvYWRpbmc9XCJsYXp5XCJcbiAgICAgICAgICBkZWNvZGluZz1cImFzeW5jXCJcbiAgICAgICAgLz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbWFnZVNvdXJjZShwcm9kdWN0KSAmJiBpbWFnZUZhbGxiYWNrID09PSAnaW5pdGlhbCdcIj57eyBpbml0aWFsKHByb2R1Y3QudGl0bGUpIH19PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDwhLS0gRXZlcnkgZmllbGQgYnV0IHRoZSB0aXRsZSBpcyBvcHRpb25hbCwgc28gYWJzZW50IG9uZXMgcmVuZGVyIG5vXG4gICAgICAgICAgIGVsZW1lbnQgYXQgYWxsIOKAlCB0aGUgY29sdW1uIGdhcCBjYW4ndCBsZWF2ZSBhIGhvbGUgZm9yIGEgYm94IHRoYXRcbiAgICAgICAgICAgaXNuJ3QgdGhlcmUuIC0tPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhaWEtcHJvZHVjdC1ib2R5XCI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicHJvZHVjdC52ZW5kb3JcIiBjbGFzcz1cImFpYS1wcm9kdWN0LXZlbmRvclwiPnt7IHByb2R1Y3QudmVuZG9yIH19PC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImFpYS1wcm9kdWN0LXRpdGxlXCI+e3sgcHJvZHVjdC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJwcm9kdWN0LnByaWNlXCIgY2xhc3M9XCJhaWEtcHJvZHVjdC1wcmljZVwiPnt7IHByb2R1Y3QucHJpY2UgfX08L3NwYW4+XG4gICAgICAgIDwhLS0gSW4gdGhlIHRleHQgY29sdW1uIHJhdGhlciB0aGFuIHRoZSBhcmlhLWhpZGRlbiBtZWRpYSB0aWxlLCBzbyB0aGVcbiAgICAgICAgICAgICBjYXJkJ3MgYWNjZXNzaWJsZSBuYW1lIHNheXMgaXQ7IHRoZSBzdHlsZXNoZWV0IGxpZnRzIGl0IG92ZXIgdGhlXG4gICAgICAgICAgICAgaW1hZ2UuIC0tPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInByb2R1Y3QuYXZhaWxhYmxlID09PSBmYWxzZVwiIGNsYXNzPVwiYWlhLXByb2R1Y3QtYmFkZ2VcIj5Tb2xkIG91dDwvc3Bhbj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2E+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19