@magicx-eng/ai-autocomplete-angular 0.29.1 → 0.31.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
@@ -83,7 +83,7 @@ export class SearchComponent {
83
83
  handleSubmit(result: AutocompleteResult): void {
84
84
  console.log(result.query); // "Create a email"
85
85
  console.log(result.raw_query); // "Create a {{TASK_1}}"
86
- console.log(result.completed_params); // [{ placeholder: "{{TASK_1}}", type: "task", ... }]
86
+ console.log(result.completed_params); // [{ placeholder: "{{TASK_1}}", parameter: "task", ... }]
87
87
  }
88
88
  }
89
89
  ```
@@ -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
 
@@ -545,7 +559,7 @@ carry it too:
545
559
  <ai-autocomplete (resultChange)="report = $event.custom_fields ?? null"></ai-autocomplete>
546
560
 
547
561
  <p *ngIf="report">{{ report.items.total }} results</p>
548
- <!-- e.g. { param: "Color", value: "Chartreuse", op: "eq" } — the shopper asked
562
+ <!-- e.g. { parameter: "Color", value: "Chartreuse", op: "eq" } — the shopper asked
549
563
  for a colour no item carries, so the results ignore it. Say so. -->
550
564
  <p *ngIf="report?.dropped_filters?.length">
551
565
  No match for
@@ -556,7 +570,7 @@ carry it too:
556
570
  ```
557
571
 
558
572
  - `applied_filters` / `dropped_filters` — the constraints the server read out
559
- of the query as `{ param, value, op }` (`op` is one of `eq`, `ne`, `lt`,
573
+ of the query as `{ parameter, value, op }` (`op` is one of `eq`, `ne`, `lt`,
560
574
  `lte`, `gt`, `gte`), split into the ones the catalog answered and the ones it
561
575
  could not (a parameter it does not have, a bound that is not a number, a
562
576
  value no item carries). The items answer the applied set, so the dropped
@@ -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
 
@@ -869,9 +884,9 @@ The structured query as the SDK currently understands it. The same object is emi
869
884
  | `query` | `string` | Plain text as the user sees it, trimmed. |
870
885
  | `raw_query` | `string` | `query` with each completed param replaced by its placeholder token (e.g. `"Create a {{TASK_1}}"`). |
871
886
  | `completed_params` | `CompletedParam[]` | Filled parameter values in query order, followed by any the user skipped (see below). |
872
- | `identified_params` | `IdentifiedParam[]` | Parameters the server recognised in the user's own words, as `{ type, value }` — e.g. `{ type: "due_date", value: "Friday" }` when the user typed "by Friday" instead of picking a date. They are not tokenized in `raw_query`, and they are tentative: each response replaces the set, and an entry drops out as soon as its text is edited away. |
887
+ | `identified_params` | `IdentifiedParam[]` | Parameters the server recognised in the user's own words, as `{ parameter, text }` — e.g. `{ parameter: "due_date", text: "Friday" }` when the user typed "by Friday" instead of picking a date. They are not tokenized in `raw_query`, and they are tentative: each response replaces the set, and an entry drops out as soon as its text is edited away. |
873
888
  | `is_ready` | `boolean` | Whether the server considers the query complete enough to act on. |
874
- | `custom_fields?` | `CustomFieldsReport` | What catalog grounding did for the latest applied response, when it read a catalog at all — see [Product strip](#product-strip). `applied_filters` and `dropped_filters` list the query's constraints as `{ param, value, op }`; `items.total` is how many items the applied ones left standing and `items.matched` the ones the strip renders. Absent (no key) when the response carried no report. |
889
+ | `custom_fields?` | `CustomFieldsReport` | What catalog grounding did for the latest applied response, when it read a catalog at all — see [Product strip](#product-strip). `applied_filters` and `dropped_filters` list the query's constraints as `{ parameter, value, op }`; `items.total` is how many items the applied ones left standing and `items.matched` the ones the strip renders. Absent (no key) when the response carried no report. |
875
890
 
876
891
  #### Reading the query as it's built
877
892
 
@@ -907,12 +922,12 @@ What "every successful round-trip" means in practice:
907
922
  Pressing <kbd>→</kbd> at the end of the input dismisses the active pill. The dismissal is reported to the server — and included in `completed_params` here — as an entry with no placeholder and the sentinel text `"skipped"`:
908
923
 
909
924
  ```ts
910
- { placeholder: "", type: "goal", text: "skipped", kind: null }
925
+ { placeholder: "", parameter: "goal", text: "skipped", kind: null }
911
926
  ```
912
927
 
913
928
  Tier 2 consumers who build their own submit payload get the raw skips from the controller (`skippedParams$`, or `getState().skippedParams`) and can fold them in the same way with the exported `buildSubmitResult(text, completedParams, skippedParams, { identifiedParams, isReady })` — the last argument carries `identifiedParams$` / `isReady$` (or their `getState()` fields) so a hand-rolled submit reports the same `identified_params` and `is_ready` the SDK's own results do.
914
929
 
915
- > **Reading `skippedParams$` directly:** the array is append-only until `reset()`. The "drop a skip whose type got filled" rule is applied when the payload is built, not by pruning the array — so if the user skips `goal` and later fills one, the raw array still holds the `goal` entry. That's deliberate: the filter self-heals if they then delete that param's text, where pruning would discard the signal for good. `buildSubmitResult` applies the rule for you; to apply it elsewhere (say, a "you skipped X" badge), use the exported `withSkippedParams(completedParams, skippedParams)`.
930
+ > **Reading `skippedParams$` directly:** the array is append-only until `reset()`. The "drop a skip whose parameter got filled" rule is applied when the payload is built, not by pruning the array — so if the user skips `goal` and later fills one, the raw array still holds the `goal` entry. That's deliberate: the filter self-heals if they then delete that param's text, where pruning would discard the signal for good. `buildSubmitResult` applies the rule for you; to apply it elsewhere (say, a "you skipped X" badge), use the exported `withSkippedParams(completedParams, skippedParams)`.
916
931
 
917
932
  ---
918
933
 
@@ -1061,7 +1076,7 @@ Submits from Enter and from `<ai-autocomplete>`'s built-in button are recorded f
1061
1076
 
1062
1077
  ## Option Overrides
1063
1078
 
1064
- Supply the options for a parameter yourself instead of taking the server's. Each entry is keyed by the suggestion `type` and is a function of the phrase the user has typed for that parameter — return an array for a fixed or computed list, or a promise for one that lives behind a request (the dropdown shows its loading skeleton until it settles). Bind a component field, not an inline literal: the input is forwarded on reference change.
1079
+ Supply the options for a parameter yourself instead of taking the server's. Each entry is keyed by the suggestion `parameter` and is a function of the phrase the user has typed for that parameter — return an array for a fixed or computed list, or a promise for one that lives behind a request (the dropdown shows its loading skeleton until it settles). Bind a component field, not an inline literal: the input is forwarded on reference change.
1065
1080
 
1066
1081
  ```ts
1067
1082
  import type { OptionOverrides } from "@magicx-eng/ai-autocomplete-angular";
@@ -291,7 +291,9 @@ export class AIAutocompleteDropdownComponent {
291
291
  },
292
292
  showsFallbackSkeleton,
293
293
  products: dd.products,
294
- groupKey: activeSuggestion ? `${activeSuggestion.type} ${activeSuggestion.text}` : "",
294
+ groupKey: activeSuggestion
295
+ ? `${activeSuggestion.parameter} ${activeSuggestion.text}`
296
+ : "",
295
297
  footerKey,
296
298
  footerHint,
297
299
  optionsPosition: dd.optionsPosition,
@@ -381,4 +383,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
381
383
  type: ViewChild,
382
384
  args: ["scrollArrow", { static: false }]
383
385
  }] } });
384
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBS04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixhQUFhLEVBR2IsYUFBYSxFQUNiLGdCQUFnQixFQUloQixrQkFBa0IsR0FJbkIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBbUIsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVC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RSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRXBDLGNBQWM7c0JBRHJCLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIHR5cGUgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIE5nWm9uZSxcbiAgdHlwZSBPbkNoYW5nZXMsXG4gIHR5cGUgT25EZXN0cm95LFxuICB0eXBlIE9uSW5pdCxcbiAgdHlwZSBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBcHBlYXJhbmNlTW9kZSxcbiAgYXR0YWNoU2Nyb2xsQXJyb3csXG4gIGJ1aWxkQXR0cmlidXRpb25VcmwsXG4gIGNvbnRhaW5TY3JvbGwsXG4gIHR5cGUgRGF0ZU1vbnRoVmlldyxcbiAgdHlwZSBEYXRlU2VsZWN0aW9uLFxuICBnZXRGb290ZXJIaW50LFxuICBpc0NhbGVuZGFyRm9ybWF0LFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdEltYWdlRmFsbGJhY2ssXG4gIHR5cGUgUHJvZHVjdHNMYXlvdXQsXG4gIFNDUk9MTF9BUlJPV19MQUJFTCxcbiAgdHlwZSBTY3JvbGxBcnJvd0NvbnRyb2xsZXIsXG4gIHR5cGUgU3VnZ2VzdGlvbixcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgdHlwZSBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vY29udHJvbGxlci9haS1hdXRvY29tcGxldGUuY29udHJvbGxlclwiO1xuaW1wb3J0IHsgRGF0ZUdyaWRDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvZGF0ZS1ncmlkL2RhdGUtZ3JpZC5jb21wb25lbnRcIjtcbmltcG9ydCB7IENsdXN0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvbGF5b3V0L2NsdXN0ZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdGFja0NvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9sYXlvdXQvc3RhY2suY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQaWxsTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9waWxsLWxpc3QvcGlsbC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUHJvZHVjdFN0cmlwQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFN1Z2dlc3Rpb25HcmlkQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3N1Z2dlc3Rpb24tZ3JpZC9zdWdnZXN0aW9uLWdyaWQuY29tcG9uZW50XCI7XG5cbmludGVyZmFjZSBEcm9wZG93blZtIHtcbiAgcGlsbHM6IFN1Z2dlc3Rpb25bXTtcbiAgb3B0aW9uczogU3VnZ2VzdGlvbk9wdGlvbltdO1xuICBhY3RpdmVJbmRleDogbnVtYmVyO1xuICBpc0FjdGl2ZVBpbGxTZWxlY3RlZDogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAvKiogVGhlIGxvYWRpbmcgc2tlbGV0b24gaXMgZmFkaW5nIG91dCBiZWZvcmUgdGhlIHJlc3BvbnNlJ3Mgb3B0aW9ucyByZXBsYWNlIGl0LiAqL1xuICBza2VsZXRvbkV4aXRpbmc6IGJvb2xlYW47XG4gIHNob3dzUGlsbHM6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBwaWxsYmFyIGVuZHMgaW4gdGhlIHRyYWlsaW5nIFwic2tpcFwiIGJ1dHRvbi4gKi9cbiAgc2hvd3NTa2lwOiBib29sZWFuO1xuICAvKipcbiAgICogRGlzYWJsZWQgc3RhdGUgZm9yIHRoZSBza2lwIGJ1dHRvbjogbG9hZGluZywgb3IgdGhlIHBvc3Qtc2VsZWN0aW9uIHdpbmRvd1xuICAgKiB3aGVyZSBpc0xvYWRpbmcgaXMgc3VwcHJlc3NlZCBidXQgdGhlIGNvcmUncyBza2lwQWN0aXZlUGlsbCgpIG5vLW9wcy5cbiAgICovXG4gIHNraXBEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqIEFjdGl2ZSBwaWxsJ3MgbGFiZWwsIGZvciB0aGUgc2tpcCBidXR0b24ncyBhcmlhLWxhYmVsLiAqL1xuICBhY3RpdmVQaWxsTGFiZWw6IHN0cmluZztcbiAgc2hvd3NPcHRpb25zOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgYm9keSByZW5kZXJzIGluIHBsYWNlIG9mIHRoZSBvcHRpb25zIGdyaWQuICovXG4gIHNob3dzRGF0ZUdyaWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgbW9udGggdGhlIGNhbGVuZGFyIHNob3dzLiBOdWxsIHVubGVzcyBgc2hvd3NEYXRlR3JpZGAuICovXG4gIGRhdGVWaWV3OiBEYXRlTW9udGhWaWV3IHwgbnVsbDtcbiAgLyoqIFdoYXQgdGhlIGNhbGVuZGFyIHBhaW50cyBhcyBhbnN3ZXJlZCDigJQgc2VlIHRoZSBjb3JlJ3MgYGRhdGVTZWxlY3Rpb25Gb3JgLiAqL1xuICBkYXRlU2VsZWN0aW9uOiBEYXRlU2VsZWN0aW9uO1xuICBzaG93c0ZhbGxiYWNrU2tlbGV0b246IGJvb2xlYW47XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgLyoqIFByb2R1Y3QgY2FyZHMgZm9yIHRoZSBzdHJpcC4gRW1wdHkgdW5sZXNzIGBwcm9kdWN0c2AgaXMgY29uZmlndXJlZC4gKi9cbiAgcHJvZHVjdHM6IFByb2R1Y3RbXTtcbiAgLyoqIElkZW50aXR5IG9mIHRoZSBzdWdnZXN0aW9uIHRoZSBvcHRpb25zIGJlbG9uZyB0byDigJQgZHJpdmVzIHRoZSBncmlkJ3Mgc2Nyb2xsIHJlc2V0LiAqL1xuICBncm91cEtleTogc3RyaW5nO1xuICBmb290ZXJLZXk6IHN0cmluZztcbiAgZm9vdGVySGludDogc3RyaW5nO1xuICBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIjtcbiAgLyoqIFdoZXRoZXIgb3B0aW9uIHJvd3MgZHJhdyB0aGVpciBgaWNvbl9zdmdgIGJlZm9yZSB0aGUgdGV4dC4gKi9cbiAgc2hvd09wdGlvbkljb25zOiBib29sZWFuO1xuICAvKiogV2hldGhlciBvcHRpb24gcm93cyBkcmF3IHRoZWlyIGBpbWFnZV91cmxgIGFzIGEgdGh1bWJuYWlsIGJlZm9yZSB0aGUgdGV4dC4gKi9cbiAgc2hvd09wdGlvbkltYWdlczogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgb3B0aW9uIHJvd3Mgc2hvdyB0aGVpciBgaXRlbV9jb3VudGAgYXQgdGhlIHRyYWlsaW5nIGVkZ2UuICovXG4gIHNob3dPcHRpb25Db3VudHM6IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgY29udGVudC1iZWFyaW5nIGZpZWxkcyBvZiB0aGUgdmlldy1tb2RlbCAoZXZlcnl0aGluZyBidXQgYGlzVmlzaWJsZWApLiAqL1xudHlwZSBEcm9wZG93bkNvbnRlbnQgPSBPbWl0PERyb3Bkb3duVm0sIFwiaXNWaXNpYmxlXCI+O1xuXG4vKipcbiAqIFRpZXIgMiBkcm9wZG93biBjb21wb25lbnQg4oCUIHRoZSBBbmd1bGFyIGVxdWl2YWxlbnQgb2YgUmVhY3Qnc1xuICogYDxBSUF1dG9jb21wbGV0ZURyb3Bkb3duIC8+YC4gUmVuZGVycyB0aGUgcGlsbGJhciwgb3B0aW9ucyBncmlkLCBhbmRcbiAqIGxvYWRpbmcgc2tlbGV0b24gYmFzZWQgb24gdGhlIHN1cHBsaWVkIGNvbnRyb2xsZXIncyBgZHJvcGRvd24kYCBzbmFwc2hvdC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duIFtjb250cm9sbGVyXT1cImFjXCI+PC9haS1hdXRvY29tcGxldGUtZHJvcGRvd24+XG4gKiBgYGBcbiAqXG4gKiBBbGwgYWN0aW9ucyAocGlsbCBjbGljaywgb3B0aW9uIHNlbGVjdCwgb3B0aW9uIGhpZ2hsaWdodCkgYXJlIGZvcndhcmRlZCB0b1xuICogdGhlIGNvbnRyb2xsZXIuIENvbnN1bWVycyB3aG8gbmVlZCB0byBvYnNlcnZlIHRoZXNlIGV2ZW50cyBjYW4gc3Vic2NyaWJlXG4gKiB0byB0aGUgY29udHJvbGxlcidzIHBlci1maWVsZCBvYnNlcnZhYmxlcy5cbiAqXG4gKiBAcHVibGljXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhaS1hdXRvY29tcGxldGUtZHJvcGRvd25cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBQaWxsTGlzdENvbXBvbmVudCxcbiAgICBQcm9kdWN0U3RyaXBDb21wb25lbnQsXG4gICAgU3VnZ2VzdGlvbkdyaWRDb21wb25lbnQsXG4gICAgRGF0ZUdyaWRDb21wb25lbnQsXG4gICAgU3RhY2tDb21wb25lbnQsXG4gICAgQ2x1c3RlckNvbXBvbmVudCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sXCIsXG4gIC8vIFRoZSBzaGFyZWQgYXBwZWFyYW5jZSBsYXllciBjYXJyaWVzIHRoZSBkZXNpZ24gdG9rZW5zICsgYm94LXNpemluZyByZXNldCArXG4gIC8vIG9wdGlvbnNQb3NpdGlvbiByZXZlcnNhbCwgc28gYSBzdGFuZGFsb25lIGRyb3Bkb3duIChubyBUaWVyIDEgY29tcG9uZW50IG9uXG4gIC8vIHRoZSBwYWdlKSBpcyBmdWxseSBzdHlsZWQgb25jZSBgbW9kZWAgaXMgc2V0LlxuICBzdHlsZVVybHM6IFtcIi4uL3NoYXJlZC9hcHBlYXJhbmNlLmNzc1wiLCBcIi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95XG57XG4gIC8qKiBUaGUgY29udHJvbGxlciB0aGF0IG93bnMgdGhlIGF1dG9jb21wbGV0ZSBzdGF0ZS4gUmVxdWlyZWQuICovXG4gIEBJbnB1dCgpIGNvbnRyb2xsZXIhOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXI7XG4gIC8qKiBXaGV0aGVyIHRvIHJlbmRlciB0aGUgcGlsbGJhciBhYm92ZSB0aGUgb3B0aW9ucyBncmlkLiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93UGlsbHMgPSB0cnVlO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcGlsbGJhciBlbmRzIGluIGEgc21hbGwgXCJza2lwXCIgYnV0dG9uIHRoYXQgZGlzbWlzc2VzIHRoZVxuICAgKiBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgcHJlc3Npbmcg4oaSIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LiBJdCBzaXRzXG4gICAqIGF0IHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSBiYXI6IHZpc3VhbGx5IHRvcC1yaWdodCB3aGVuIHRoZSBkcm9wZG93blxuICAgKiBvcGVucyBiZWxvdyB0aGUgaW5wdXQsIGJvdHRvbS1yaWdodCB3aGVuIGBvcHRpb25zUG9zaXRpb25gIGlzIFwiYWJvdmVcIi5cbiAgICogRGVmYXVsdDogdHJ1ZS4gSGlkZGVuIGF1dG9tYXRpY2FsbHkgZHVyaW5nIHJlLWVkaXQgYW5kIHdoaWxlIHRoZSBmYWxsYmFja1xuICAgKiBza2VsZXRvbiByZW5kZXJzLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1NraXBCdXR0b24gPSB0cnVlO1xuICAvKipcbiAgICogV2hldGhlciBvcHRpb24gcm93cyBkcmF3IHRoZWlyIGBpY29uX3N2Z2AgYmVmb3JlIHRoZSB0ZXh0LiBEZWZhdWx0OiB0cnVlLlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG9wdGlvbiByb3dzIGFzIHRleHQgb25seS5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25JY29ucyA9IHRydWU7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9wdGlvbiByb3dzIGRyYXcgdGhlaXIgYGltYWdlX3VybGAgYXMgYSBzcXVhcmUgdGh1bWJuYWlsIGJlZm9yZVxuICAgKiB0aGUgdGV4dCwgaW4gcGxhY2Ugb2YgdGhlIGljb24uIERlZmF1bHQ6IHRydWUuIFNldCB0byBmYWxzZSB0byByZW5kZXJcbiAgICogb3B0aW9uIHJvd3Mgd2l0aG91dCBwaWN0dXJlcy5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25JbWFnZXMgPSB0cnVlO1xuICAvKipcbiAgICogV2hldGhlciBvcHRpb24gcm93cyBzaG93IHRoZWlyIGBpdGVtX2NvdW50YCBhcyBhIG11dGVkIGxhYmVsIGF0IHRoZVxuICAgKiB0cmFpbGluZyBlZGdlIChcIjEyIGl0ZW1zXCIpLiBEZWZhdWx0OiB0cnVlLiBTZXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgY291bnRzLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd09wdGlvbkNvdW50cyA9IHRydWU7XG4gIC8qKlxuICAgKiBIb3cgdGhlIHByb2R1Y3Qgc3RyaXAgbGF5cyBpdHMgY2FyZHMgb3V0OiBhIGhvcml6b250YWxseSBzY3JvbGxpbmcgcm93XG4gICAqICh0aGUgZGVmYXVsdCksIG9yIHRoZSBzYW1lIGNhcmRzIHN0YWNrZWQgYXMgZnVsbC13aWR0aCByb3dzLlxuICAgKi9cbiAgQElucHV0KCkgcHJvZHVjdHNMYXlvdXQ6IFByb2R1Y3RzTGF5b3V0ID0gXCJyb3dcIjtcbiAgLyoqIE1pc3NpbmcvZmFpbGVkIGltYWdlIGZhbGxiYWNrLiBTdHlsZSBpbml0aWFscyB3aXRoIGBbZGF0YS1haWEtcHJvZHVjdC1pbml0aWFsXWAuICovXG4gIEBJbnB1dCgpIHByb2R1Y3RJbWFnZUZhbGxiYWNrOiBQcm9kdWN0SW1hZ2VGYWxsYmFjayA9IFwiaW1hZ2VcIjtcbiAgLyoqIE9wdGlvbmFsIENTUyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBkcm9wZG93biByb290LiAqL1xuICBASW5wdXQoKSBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb2xvciBtb2RlIGZvciBhIHN0YW5kYWxvbmUgZHJvcGRvd24uIFdoZW4gc2V0LCB0aGUgZHJvcGRvd24gc2VsZi1zY29wZXMgdGhlXG4gICAqIGRlc2lnbiB0b2tlbnMgdG8gaXRzIG93biByb290IChhZGRzIGBtYWdpY3gtYWlhYCArIGBkYXRhLW1vZGVgKSwgc28gaXQgbmVlZHNcbiAgICogbm8gYC5tYWdpY3gtYWlhYCB3cmFwcGVyLiBgXCJhdXRvXCJgIGZvbGxvd3MgYHByZWZlcnMtY29sb3Itc2NoZW1lYC4gTGVhdmUgaXRcbiAgICogdW5zZXQgd2hlbiB0aGUgZHJvcGRvd24gc2l0cyBpbnNpZGUgYSBgLm1hZ2ljeC1haWFgIGFuY2VzdG9yIChlLmcuIFRpZXIgMSkuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlPzogQXBwZWFyYW5jZU1vZGU7XG5cbiAgLyoqIENvbmNyZXRlIHJlc29sdmVkIG1vZGUsIG9yIG51bGwgd2hlbiBgbW9kZWAgaXMgdW5zZXQgKGluaGVyaXQgZnJvbSBhbmNlc3RvcikuICovXG4gIHJlc29sdmVkTW9kZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtb2RlTXFsPzogTWVkaWFRdWVyeUxpc3Q7XG4gIHByaXZhdGUgbW9kZUxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWxlYXNlU2Nyb2xsPzogKCkgPT4gdm9pZDtcblxuICAvKiogUm9vdCBjbGFzcyBsaXN0IOKAlCBhZGRzIGBtYWdpY3gtYWlhYCBvbmx5IHdoZW4gc2VsZi1zY29waW5nIHZpYSBgbW9kZWAuICovXG4gIGdldCByb290Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBsZXQgY2xzID0gXCJtYWdpY3gtYWlhLWRyb3Bkb3duXCI7XG4gICAgaWYgKHRoaXMucmVzb2x2ZWRNb2RlKSBjbHMgKz0gXCIgbWFnaWN4LWFpYVwiO1xuICAgIGlmICh0aGlzLmNsYXNzTmFtZSkgY2xzICs9IGAgJHt0aGlzLmNsYXNzTmFtZX1gO1xuICAgIHJldHVybiBjbHM7XG4gIH1cblxuICAvKiogRmFsbGJhY2sgc2tlbGV0b24tYmFyIHdpZHRocyB1c2VkIHdoZW4gbG9hZGluZyB3aXRoIHplcm8gY2FjaGVkIG9wdGlvbnMuICovXG4gIHJlYWRvbmx5IGZhbGxiYWNrU2tlbGV0b25CYXJXaWR0aHMgPSBbMTU5LCAxMTksIDE2NF07XG5cbiAgLyoqIEFjY2Vzc2libGUgbmFtZSBvZiB0aGUgXCJtb3JlIGJlbG93XCIgc2Nyb2xsIGFycm93LiAqL1xuICByZWFkb25seSBzY3JvbGxBcnJvd0xhYmVsID0gU0NST0xMX0FSUk9XX0xBQkVMO1xuXG4gIC8vIFRoZSBkcm9wZG93biByb290IGFuZCB0aGUgYXJyb3cgYnV0dG9uIGxpdmUgdW5kZXIgdGhlIGAqbmdJZmAgb24gdm0kLCBzb1xuICAvLyB0aGV5IGNvbWUgYW5kIGdvIHdpdGggaXQg4oCUIGhlbmNlIG5vbi1zdGF0aWMgcXVlcmllcywgcmUtcmVhZCBldmVyeSBjaGVjay5cbiAgQFZpZXdDaGlsZChcImRyb3Bkb3duUm9vdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgcHJpdmF0ZSBkcm9wZG93blJvb3RSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChcInNjcm9sbEFycm93XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcml2YXRlIHNjcm9sbEFycm93UmVmPzogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIC8qKiBUaGUgZ3JpZCB0aGUgc2Nyb2xsLWFycm93IGNvbnRyb2xsZXIgaXMgY3VycmVudGx5IGJvdW5kIHRvLiAqL1xuICBwcml2YXRlIHNjcm9sbEFycm93QmluZGluZzogeyBncmlkOiBIVE1MRWxlbWVudDsgY29udHJvbGxlcjogU2Nyb2xsQXJyb3dDb250cm9sbGVyIH0gfCBudWxsID1cbiAgICBudWxsO1xuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dGlvbi9icmFuZGluZyBsaW5rIFVSTCBmb3IgdGhlIGZvb3Rlciwgd2l0aCBhIGB1dG1fc291cmNlYCBkZXJpdmVkXG4gICAqIGZyb20gdGhlIGVtYmVkZGluZyBwYWdlJ3MgaG9zdG5hbWUgKHNlZSB7QGxpbmsgYnVpbGRBdHRyaWJ1dGlvblVybH0pLlxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmRIcmVmID0gYnVpbGRBdHRyaWJ1dGlvblVybCgpO1xuXG4gIC8qKlxuICAgKiBWaWV3LW1vZGVsIGRlcml2ZWQgZnJvbSB0aGUgY29udHJvbGxlcidzIGBkcm9wZG93biRgLiBBZGRzIHRocmVlIGJvb2xlYW5zXG4gICAqIChgc2hvd3NQaWxsc2AsIGBzaG93c09wdGlvbnNgLCBgc2hvd3NGYWxsYmFja1NrZWxldG9uYCwgYGlzVmlzaWJsZWApIHRoYXRcbiAgICoga2VlcCB0ZW1wbGF0ZS1sZXZlbCBsb2dpYyB0byBhIHByb3BlcnR5IHJlYWQgcGVyIMKnMTkuNi5cbiAgICpcbiAgICogSW5pdGlhbGl6ZWQgb25jZSBpbiBgbmdPbkluaXRgIOKAlCBtdXN0IE5PVCBiZSBhIGdldHRlci4gQSBnZXR0ZXIgcmV0dXJucyBhXG4gICAqIGZyZXNoIGBPYnNlcnZhYmxlYCBpbnN0YW5jZSBvbiBldmVyeSBwcm9wZXJ0eSByZWFkOyB3aXRoIE9uUHVzaCArIGBhc3luY2BcbiAgICogcGlwZSB0aGF0IG1lYW5zIGVhY2ggY2hhbmdlLWRldGVjdGlvbiBjeWNsZSB1bnN1YnNjcmliZXMvcmVzdWJzY3JpYmVzLFxuICAgKiBjYXVzaW5nIHRoZSBgKm5nSWY9XCJ2bSQgfCBhc3luYyBhcyB2bVwiYCByb290IHRvIGJyaWVmbHkgcmVzb2x2ZSBgbnVsbGBcbiAgICogYW5kIGZsaWNrZXIgdGhlIGVudGlyZSBkcm9wZG93biBET00uXG4gICAqL1xuICB2bSQhOiBPYnNlcnZhYmxlPERyb3Bkb3duVm0+O1xuXG4gIC8vIEJyaWRnZSBmb3IgdGhlIEBJbnB1dCBgc2hvd1BpbGxzYCBpbnRvIHRoZSByZWFjdGl2ZSBwaXBlbGluZS4gV2l0aG91dCB0aGlzLFxuICAvLyBjaGFuZ2luZyB0aGUgaW5wdXQgYWZ0ZXIgaW5pdCB3b3VsZG4ndCB0cmlnZ2VyIGEgbmV3IHZtIGVtaXNzaW9uIHVudGlsIHRoZVxuICAvLyBuZXh0IGNvbnRyb2xsZXIuZHJvcGRvd24kIHRpY2sg4oCUIGFuZCB3ZSdkIGxvc2UgdGhlIHNob3dQaWxscyB1cGRhdGUgZW50aXJlbHlcbiAgLy8gaWYgdGhlIGNvbnRyb2xsZXIgaXMgaWRsZS4gVXBkYXRlZCBmcm9tIG5nT25DaGFuZ2VzIGJlbG93LlxuICBwcml2YXRlIHJlYWRvbmx5IHNob3dQaWxscyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAvLyBTYW1lIGJyaWRnZSwgZm9yIGBzaG93U2tpcEJ1dHRvbmAuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvd1NraXBCdXR0b24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgLy8gU2FtZSBicmlkZ2UsIGZvciBgc2hvd09wdGlvbkljb25zYC5cbiAgcHJpdmF0ZSByZWFkb25seSBzaG93T3B0aW9uSWNvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgLy8gU2FtZSBicmlkZ2UsIGZvciBgc2hvd09wdGlvbkltYWdlc2AgYW5kIGBzaG93T3B0aW9uQ291bnRzYC5cbiAgcHJpdmF0ZSByZWFkb25seSBzaG93T3B0aW9uSW1hZ2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvd09wdGlvbkNvdW50cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIC8vIExhc3QgY29udGVudCBlbWl0dGVkIHdoaWxlIHRoZSBkcm9wZG93biB3YXMgdmlzaWJsZS4gUmV1c2VkIGR1cmluZyB0aGVcbiAgLy8gY2xvc2UgZmFkZSBzbyB0aGUgcG9wdWxhdGVkIGRyb3Bkb3duIGZhZGVzIG91dCBhcyBvbmUg4oCUIHNlZSBpbml0Vm0uXG4gIHByaXZhdGUgbGFzdFZpc2libGVDb250ZW50OiBEcm9wZG93bkNvbnRlbnQgfCBudWxsID0gbnVsbDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZWVkIHRoZSBpbnB1dCBicmlkZ2VzIGZyb20gdGhlaXIgcmVzb2x2ZWQgdmFsdWVzIGF0IGluaXQgdGltZS5cbiAgICB0aGlzLnNob3dQaWxscyQubmV4dCh0aGlzLnNob3dQaWxscyk7XG4gICAgdGhpcy5zaG93U2tpcEJ1dHRvbiQubmV4dCh0aGlzLnNob3dTa2lwQnV0dG9uKTtcbiAgICB0aGlzLnNob3dPcHRpb25JY29ucyQubmV4dCh0aGlzLnNob3dPcHRpb25JY29ucyk7XG4gICAgdGhpcy5zaG93T3B0aW9uSW1hZ2VzJC5uZXh0KHRoaXMuc2hvd09wdGlvbkltYWdlcyk7XG4gICAgdGhpcy5zaG93T3B0aW9uQ291bnRzJC5uZXh0KHRoaXMuc2hvd09wdGlvbkNvdW50cyk7XG4gICAgdGhpcy5hcHBseU1vZGUoKTtcbiAgICB0aGlzLmluaXRWbSgpO1xuICAgIC8vIFdoZWVsL3RvdWNoIG92ZXIgdGhlIGRyb3Bkb3duIG5ldmVyIHNjcm9sbHMgdGhlIHBhZ2UgYmVoaW5kIGl0LiBPbiB0aGVcbiAgICAvLyBob3N0LCBzbyBpdCBzdXJ2aXZlcyB0aGUgKm5nSWYgcm9vdCBjb21pbmcgYW5kIGdvaW5nOyBvdXRzaWRlIHRoZSB6b25lLFxuICAgIC8vIHNvIGEgd2hlZWwgZ2VzdHVyZSBkb2Vzbid0IHJ1biBjaGFuZ2UgZGV0ZWN0aW9uIG9uIGV2ZXJ5IGV2ZW50LlxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLnJlbGVhc2VTY3JvbGwgPSBjb250YWluU2Nyb2xsKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1tcInNob3dQaWxsc1wiXSkge1xuICAgICAgdGhpcy5zaG93UGlsbHMkLm5leHQodGhpcy5zaG93UGlsbHMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInNob3dTa2lwQnV0dG9uXCJdKSB7XG4gICAgICB0aGlzLnNob3dTa2lwQnV0dG9uJC5uZXh0KHRoaXMuc2hvd1NraXBCdXR0b24pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInNob3dPcHRpb25JY29uc1wiXSkge1xuICAgICAgdGhpcy5zaG93T3B0aW9uSWNvbnMkLm5leHQodGhpcy5zaG93T3B0aW9uSWNvbnMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInNob3dPcHRpb25JbWFnZXNcIl0pIHtcbiAgICAgIHRoaXMuc2hvd09wdGlvbkltYWdlcyQubmV4dCh0aGlzLnNob3dPcHRpb25JbWFnZXMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInNob3dPcHRpb25Db3VudHNcIl0pIHtcbiAgICAgIHRoaXMuc2hvd09wdGlvbkNvdW50cyQubmV4dCh0aGlzLnNob3dPcHRpb25Db3VudHMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcIm1vZGVcIl0gJiYgIWNoYW5nZXNbXCJtb2RlXCJdLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmFwcGx5TW9kZSgpO1xuICAgIH1cbiAgICAvLyBSZS1iaW5kIHZtJCB3aGVuIHRoZSBjb250cm9sbGVyIEBJbnB1dCBpcyBzd2FwcGVkIChlLmcuIGEgbXVsdGktc3RlcCBmb3JtXG4gICAgLy8gdG9nZ2xpbmcgYmV0d2VlbiBjb250cm9sbGVycykuIFdpdGhvdXQgdGhpcywgdm0kIHN0YXlzIHN1YnNjcmliZWQgdG8gdGhlXG4gICAgLy8gcHJldmlvdXMgY29udHJvbGxlcidzIGRyb3Bkb3duJCDigJQgcmVuZGVyaW5nIHN0YWxlIG9wdGlvbnMsIG9yLCBpZiB0aGF0XG4gICAgLy8gY29udHJvbGxlciB3YXMgZGVzdHJveSgpLWVkLCByZWNlaXZpbmcgYSBjb21wbGV0aW9uIHRoYXQgY29sbGFwc2VzIHRoZVxuICAgIC8vIGRyb3Bkb3duIHBlcm1hbmVudGx5LiBTa2lwIHRoZSBmaXJzdCBjaGFuZ2U6IG5nT25DaGFuZ2VzIGZpcmVzIGJlZm9yZVxuICAgIC8vIG5nT25Jbml0LCB3aGljaCBvd25zIHRoZSBpbml0aWFsIGNyZWF0aW9uLlxuICAgIGlmIChjaGFuZ2VzW1wiY29udHJvbGxlclwiXSAmJiAhY2hhbmdlc1tcImNvbnRyb2xsZXJcIl0uZmlyc3RDaGFuZ2UgJiYgdGhpcy5jb250cm9sbGVyKSB7XG4gICAgICB0aGlzLmluaXRWbSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBLZWVwIHRoZSBjb3JlJ3MgXCJtb3JlIGJlbG93XCIgYXJyb3cgY29udHJvbGxlciBib3VuZCB0byB3aGljaGV2ZXIgb3B0aW9uc1xuICAgKiBncmlkIGlzIGN1cnJlbnRseSByZW5kZXJlZCDigJQgdGhlIEFuZ3VsYXIgYW5hbG9ndWUgb2YgUmVhY3Qnc1xuICAgKiB1c2VTY3JvbGxBcnJvdy4gVGhlIGNvbnRyb2xsZXIgb3ducyB0aGUgYmVoYXZpb3VyIChtZWFzdXJpbmcsIHZpc2liaWxpdHksXG4gICAqIHRoZSBwYWdlLXNjcm9sbCBvbiBjbGljayDigJQgc2VlIHRoZSBjb3JlJ3Mgc2Nyb2xsQXJyb3cudHMpOyB0aGlzIG9ubHkgaGFuZHNcbiAgICogaXQgdGhlIGxpdmUgZWxlbWVudHMgYWZ0ZXIgZWFjaCB2aWV3IGNoZWNrLCByZS1hdHRhY2hpbmcgd2hlbiB0aGUgZ3JpZFxuICAgKiBlbGVtZW50IGlzIHJlcGxhY2VkIGFuZCB0ZWFyaW5nIGRvd24gd2hlbiB0aGVyZSBpcyBubyBncmlkLlxuICAgKi9cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLmRyb3Bkb3duUm9vdFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLnNjcm9sbEFycm93UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGdyaWQgPSByb290Py5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIi5haWEtZ3JpZFtkYXRhLXNjcm9sbF1cIikgPz8gbnVsbDtcbiAgICBpZiAodGhpcy5zY3JvbGxBcnJvd0JpbmRpbmcgJiYgdGhpcy5zY3JvbGxBcnJvd0JpbmRpbmcuZ3JpZCAhPT0gZ3JpZCkge1xuICAgICAgdGhpcy5zY3JvbGxBcnJvd0JpbmRpbmcuY29udHJvbGxlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLnNjcm9sbEFycm93QmluZGluZyA9IG51bGw7XG4gICAgfVxuICAgIGlmICghcm9vdCB8fCAhYnV0dG9uIHx8ICFncmlkKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnNjcm9sbEFycm93QmluZGluZykge1xuICAgICAgdGhpcy5zY3JvbGxBcnJvd0JpbmRpbmcgPSB7XG4gICAgICAgIGdyaWQsXG4gICAgICAgIGNvbnRyb2xsZXI6IGF0dGFjaFNjcm9sbEFycm93KHsgZHJvcGRvd246IHJvb3QsIGdyaWQsIGJ1dHRvbiB9KSxcbiAgICAgIH07XG4gICAgICByZXR1cm47IC8vIGF0dGFjaCgpIHJ1bnMgdGhlIGZpcnN0IHVwZGF0ZSBpdHNlbGZcbiAgICB9XG4gICAgdGhpcy5zY3JvbGxBcnJvd0JpbmRpbmcuY29udHJvbGxlci51cGRhdGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudGVhcmRvd25Nb2RlTGlzdGVuZXIoKTtcbiAgICB0aGlzLnJlbGVhc2VTY3JvbGw/LigpO1xuICAgIHRoaXMuc2Nyb2xsQXJyb3dCaW5kaW5nPy5jb250cm9sbGVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNjcm9sbEFycm93QmluZGluZyA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYG1vZGVgIGlucHV0IGludG8gYHJlc29sdmVkTW9kZWAuIFVuc2V0IOKGkiBudWxsICh0aGUgZHJvcGRvd25cbiAgICogc3RheXMgY2xhc3MtbGVzcyBhbmQgaW5oZXJpdHMgZnJvbSBhIGAubWFnaWN4LWFpYWAgYW5jZXN0b3IpLiBgXCJhdXRvXCJgIHJlYWRzXG4gICAqIGBwcmVmZXJzLWNvbG9yLXNjaGVtZWAgYW5kIHRyYWNrcyBpdCBsaXZlIHZpYSBhIG1lZGlhLXF1ZXJ5IGxpc3RlbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy50ZWFyZG93bk1vZGVMaXN0ZW5lcigpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZXNvbHZlZE1vZGUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlID09PSBcImxpZ2h0XCIgfHwgdGhpcy5tb2RlID09PSBcImRhcmtcIikge1xuICAgICAgdGhpcy5yZXNvbHZlZE1vZGUgPSB0aGlzLm1vZGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFwiYXV0b1wiXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gXCJsaWdodFwiO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1vZGVNcWwgPSB3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIik7XG4gICAgdGhpcy5yZXNvbHZlZE1vZGUgPSB0aGlzLm1vZGVNcWwubWF0Y2hlcyA/IFwiZGFya1wiIDogXCJsaWdodFwiO1xuICAgIHRoaXMubW9kZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlZE1vZGUgPSB0aGlzLm1vZGVNcWw/Lm1hdGNoZXMgPyBcImRhcmtcIiA6IFwibGlnaHRcIjtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG4gICAgdGhpcy5tb2RlTXFsLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgdGhpcy5tb2RlTGlzdGVuZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZWFyZG93bk1vZGVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlTXFsICYmIHRoaXMubW9kZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLm1vZGVNcWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCB0aGlzLm1vZGVMaXN0ZW5lcik7XG4gICAgfVxuICAgIHRoaXMubW9kZU1xbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1vZGVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBCdWlsZCB0aGUgdmlldy1tb2RlbCBzdHJlYW0gZnJvbSB0aGUgY3VycmVudCBjb250cm9sbGVyICsgc2hvd1BpbGxzJC4gKi9cbiAgcHJpdmF0ZSBpbml0Vm0oKTogdm9pZCB7XG4gICAgdGhpcy52bSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY29udHJvbGxlci5kcm9wZG93biQsXG4gICAgICB0aGlzLnNob3dQaWxscyQsXG4gICAgICB0aGlzLnNob3dTa2lwQnV0dG9uJCxcbiAgICAgIHRoaXMuc2hvd09wdGlvbkljb25zJCxcbiAgICAgIHRoaXMuc2hvd09wdGlvbkltYWdlcyQsXG4gICAgICB0aGlzLnNob3dPcHRpb25Db3VudHMkLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbZGQsIHNob3dQaWxscywgc2hvd1NraXBCdXR0b24sIHNob3dPcHRpb25JY29ucywgc2hvd09wdGlvbkltYWdlcywgc2hvd09wdGlvbkNvdW50c10pID0+IHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVTdWdnZXN0aW9uID0gZGQuc3VnZ2VzdGlvbnNbMF07XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFjdGl2ZVN1Z2dlc3Rpb24/Lm9wdGlvbnMgPz8gW107XG4gICAgICAgICAgY29uc3Qgc2hvd3NQaWxscyA9IHNob3dQaWxscyAmJiAoZGQucGlsbHMubGVuZ3RoID4gMCB8fCBkZC5pc0xvYWRpbmcpO1xuICAgICAgICAgIC8vIFRoZSB0cmFpbGluZyBcInNraXBcIiBidXR0b24gb25seSBtYWtlcyBzZW5zZSBuZXh0IHRvIGEgcmVhbCxcbiAgICAgICAgICAvLyBza2lwcGFibGUgcGlsbCDigJQgbmV2ZXIgb24gdGhlIGZhbGxiYWNrIHNrZWxldG9uIGJhciwgYW5kIG5ldmVyXG4gICAgICAgICAgLy8gZHVyaW5nIHJlLWVkaXQgKHRoZSBiYXIgdGhlbiBzaG93cyBhbiBhbHJlYWR5IGFuc3dlcmVkIHBhcmFtKS5cbiAgICAgICAgICAvLyBEZWxpYmVyYXRlbHkgTk9UIGdhdGVkIG9uIHNob3dzUGlsbHM6IHdpdGggcGlsbHMgcmVuZGVyZWQgZWxzZXdoZXJlXG4gICAgICAgICAgLy8gKHBpbGxQbGFjZW1lbnQgXCJpbmxpbmVcIi9cImhpZGRlblwiKSB0aGUgYmFyIHJlbmRlcnMgYXMgYSBza2lwLW9ubHlcbiAgICAgICAgICAvLyByb3cgaG9sZGluZyBqdXN0IHRoZSBidXR0b24uIEhpZGRlbiB3aGlsZSB0aGUgaW5wdXQgaXMgZW1wdHkg4oCUIHRoZVxuICAgICAgICAgIC8vIGZvb3RlciBoaW50IGRvZXNuJ3QgYWR2ZXJ0aXNlIFwi4oaSIHRvIHNraXBcIiB1bnRpbCB0aGUgdXNlciBoYXMgdHlwZWQsXG4gICAgICAgICAgLy8gc28gdGhlIHByaXN0aW5lIHN0YXJ0aW5nIHN0YXRlIHN0YXlzIGZyZWUgb2YgdGhlIGFmZm9yZGFuY2UgdG9vLlxuICAgICAgICAgIGNvbnN0IHNob3dzU2tpcCA9XG4gICAgICAgICAgICBkZC5waWxscy5sZW5ndGggPiAwICYmIHNob3dTa2lwQnV0dG9uICYmICFkZC5pc0VkaXRpbmcgJiYgIWRkLmlzSW5wdXRFbXB0eTtcbiAgICAgICAgICAvLyBFeGFjdGx5IG9uZSBib2R5IHJlbmRlcnMuIGBvcHRpb25zYCBhYm92ZSBhbHJlYWR5IGhvbGRzIHRoZSB2aXNpYmxlXG4gICAgICAgICAgLy8gbW9udGgncyBjZWxscyB3aGVuIHRoaXMgaXMgYSBkYXRlIOKAlCB0aGUgY29yZSBzd2FwcGVkIHRoZW0gaW4gaXRzXG4gICAgICAgICAgLy8gZGVyaXZlIGxheWVyIOKAlCBzbyB0aGUgdHdvIGFyZSB0aGUgc2FtZSBsaXN0IGRyYXduIHR3byBkaWZmZXJlbnRcbiAgICAgICAgICAvLyB3YXlzLCBhbmQgbmV2ZXIgYm90aCBhdCBvbmNlICh0d28gZWxlbWVudHMgYW5zd2VyaW5nIHRvIHRoZSBzYW1lXG4gICAgICAgICAgLy8gb3B0aW9uIGlkIHdvdWxkIGJyZWFrIGtleWJvYXJkIGNvbW1pdCkuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBBIGNhbGVuZGFyIGlzIHdpdGhoZWxkIHdoaWxlIGEgcmVxdWVzdCBpcyBpbiBmbGlnaHQuIFRoZSBvcHRpb25zXG4gICAgICAgICAgLy8gZ3JpZCBkcmF3cyBpdHMgY2FjaGVkIG9wdGlvbnMgYXMgc2tlbGV0b24gcm93cyBmb3IgdGhhdCB3aW5kb3csIGJ1dFxuICAgICAgICAgIC8vIGEgbW9udGggb2YgZGF5IGNlbGxzIGhhcyBubyBza2VsZXRvbiBmb3JtIHdvcnRoIGRyYXdpbmcg4oCUIGFuZCBhIGxpdmVcbiAgICAgICAgICAvLyBjYWxlbmRhciBvdmVyIGEgbG9hZGluZyBwaWxsIGJhciBpbnZpdGVzIGFuIGFuc3dlciBhZ2FpbnN0XG4gICAgICAgICAgLy8gc3VnZ2VzdGlvbnMgdGhlIHJlc3BvbnNlIGlzIGFib3V0IHRvIHJlcGxhY2UuIFRoZSBmYWxsYmFjayBiYXJzXG4gICAgICAgICAgLy8gc3RhbmQgaW4gdW50aWwgaXQgbGFuZHMuXG4gICAgICAgICAgY29uc3QgaXNEYXRlID0gaXNDYWxlbmRhckZvcm1hdChkZC5mb3JtYXRUeXBlID8/IFwib3B0aW9uc1wiKSAmJiBkZC5kYXRlVmlldyAhPSBudWxsO1xuICAgICAgICAgIGNvbnN0IHNob3dzT3B0aW9ucyA9IG9wdGlvbnMubGVuZ3RoID4gMCAmJiAhaXNEYXRlO1xuICAgICAgICAgIGNvbnN0IHNob3dzRGF0ZUdyaWQgPSBvcHRpb25zLmxlbmd0aCA+IDAgJiYgaXNEYXRlICYmICFkZC5pc0xvYWRpbmc7XG4gICAgICAgICAgY29uc3Qgc2hvd3NGYWxsYmFja1NrZWxldG9uID0gZGQuaXNMb2FkaW5nICYmICFzaG93c09wdGlvbnMgJiYgIXNob3dzRGF0ZUdyaWQ7XG4gICAgICAgICAgLy8gRWl0aGVyIGhhbGYgaXMgZW5vdWdoIHRvIGtlZXAgdGhlIHBhbmVsIHVwOiBwcm9kdWN0cyByZW5kZXIgd2l0aCBub1xuICAgICAgICAgIC8vIHN1Z2dlc3Rpb25zLCBzdWdnZXN0aW9ucyByZW5kZXIgd2l0aCBubyBwcm9kdWN0cy5cbiAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPVxuICAgICAgICAgICAgZGQuaXNPcGVuICYmXG4gICAgICAgICAgICAoc2hvd3NPcHRpb25zIHx8IHNob3dzRGF0ZUdyaWQgfHwgc2hvd3NQaWxscyB8fCBkZC5pc0xvYWRpbmcgfHwgZGQucHJvZHVjdHMubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgICAvLyBXaGlsZSBjbG9zaW5nLCByZXVzZSB0aGUgbGFzdCB2aXNpYmxlIGNvbnRlbnQgc28gdGhlIHBvcHVsYXRlZFxuICAgICAgICAgIC8vIGRyb3Bkb3duIGZhZGVzIG91dCBhcyBvbmUuIE90aGVyd2lzZSB0aGUgcGlsbHMvb3B0aW9ucyB2YW5pc2ggdGhlXG4gICAgICAgICAgLy8gaW5zdGFudCB0aGUgc3RhdGUgZW1wdGllcyAoZS5nLiBza2lwcGluZyB0aGUgbGFzdCBwaWxsIHdpdGgg4oaSKSxcbiAgICAgICAgICAvLyBsZWF2aW5nIHRoZSBhbHdheXMtcHJlc2VudCBmb290ZXIgYWxvbmUgZm9yIGEgZmxhc2ggb2YgYSBmb290ZXItb25seVxuICAgICAgICAgIC8vIFwibm8gb3B0aW9uc1wiIGJveCBtaWQtZmFkZS4gT25seSBgaXNWaXNpYmxlYCB0cmFja3MgbGl2ZSBzdGF0ZSB0b1xuICAgICAgICAgIC8vIGRyaXZlIHRoZSBvcGFjaXR5IHRyYW5zaXRpb24uXG4gICAgICAgICAgaWYgKCFpc1Zpc2libGUgJiYgdGhpcy5sYXN0VmlzaWJsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMubGFzdFZpc2libGVDb250ZW50LCBpc1Zpc2libGU6IGZhbHNlIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgb3B0aW9uSGlnaGxpZ2h0ZWQgPVxuICAgICAgICAgICAgZGQuYWN0aXZlSW5kZXggPj0gMCAmJiBCb29sZWFuKG9wdGlvbnNbZGQuYWN0aXZlSW5kZXhdPy5pc190YXBwYWJsZSk7XG4gICAgICAgICAgY29uc3QgeyBrZXk6IGZvb3RlcktleSwgaGludDogZm9vdGVySGludCB9ID0gZ2V0Rm9vdGVySGludChcbiAgICAgICAgICAgIG9wdGlvbkhpZ2hsaWdodGVkLFxuICAgICAgICAgICAgZGQuaXNJbnB1dEVtcHR5LFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgY29udGVudDogRHJvcGRvd25Db250ZW50ID0ge1xuICAgICAgICAgICAgcGlsbHM6IGRkLnBpbGxzLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4OiBkZC5hY3RpdmVJbmRleCxcbiAgICAgICAgICAgIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBkZC5pc0FjdGl2ZVBpbGxTZWxlY3RlZCxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZGQuaXNMb2FkaW5nLFxuICAgICAgICAgICAgc2tlbGV0b25FeGl0aW5nOiBCb29sZWFuKGRkLnNrZWxldG9uRXhpdGluZyksXG4gICAgICAgICAgICBzaG93c1BpbGxzLFxuICAgICAgICAgICAgc2hvd3NTa2lwLFxuICAgICAgICAgICAgc2tpcERpc2FibGVkOiBkZC5pc0xvYWRpbmcgfHwgQm9vbGVhbihkZC5pblNlbGVjdGlvbkFuaW1hdGlvbiksXG4gICAgICAgICAgICBhY3RpdmVQaWxsTGFiZWw6IGRkLnBpbGxzWzBdPy50ZXh0ID8/IFwiXCIsXG4gICAgICAgICAgICBzaG93c09wdGlvbnMsXG4gICAgICAgICAgICBzaG93c0RhdGVHcmlkLFxuICAgICAgICAgICAgZGF0ZVZpZXc6IGRkLmRhdGVWaWV3ID8/IG51bGwsXG4gICAgICAgICAgICBkYXRlU2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXNvOiBkZC5zZWxlY3RlZERhdGVJc28gPz8gbnVsbCxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZTogZGQuc2VsZWN0ZWREYXRlUmFuZ2UgPz8gbnVsbCxcbiAgICAgICAgICAgICAgcmFuZ2VTdGFydDogZGQuZGF0ZVJhbmdlU3RhcnQgPz8gbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaG93c0ZhbGxiYWNrU2tlbGV0b24sXG4gICAgICAgICAgICBwcm9kdWN0czogZGQucHJvZHVjdHMsXG4gICAgICAgICAgICBncm91cEtleTogYWN0aXZlU3VnZ2VzdGlvbiA/IGAke2FjdGl2ZVN1Z2dlc3Rpb24udHlwZX0gJHthY3RpdmVTdWdnZXN0aW9uLnRleHR9YCA6IFwiXCIsXG4gICAgICAgICAgICBmb290ZXJLZXksXG4gICAgICAgICAgICBmb290ZXJIaW50LFxuICAgICAgICAgICAgb3B0aW9uc1Bvc2l0aW9uOiBkZC5vcHRpb25zUG9zaXRpb24sXG4gICAgICAgICAgICBzaG93T3B0aW9uSWNvbnMsXG4gICAgICAgICAgICBzaG93T3B0aW9uSW1hZ2VzLFxuICAgICAgICAgICAgc2hvd09wdGlvbkNvdW50cyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChpc1Zpc2libGUpIHRoaXMubGFzdFZpc2libGVDb250ZW50ID0gY29udGVudDtcbiAgICAgICAgICByZXR1cm4geyAuLi5jb250ZW50LCBpc1Zpc2libGUgfTtcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIHRyYWNrQnlXaWR0aCA9IChfOiBudW1iZXIsIHc6IG51bWJlcik6IG51bWJlciA9PiB3O1xuXG4gIG9uUGlsbENsaWNrKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0QWN0aXZlUGlsbChpbmRleCk7XG4gIH1cblxuICBvblNraXAoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNraXBBY3RpdmVQaWxsKCk7XG4gIH1cblxuICBvblNlbGVjdChvcHRpb246IFN1Z2dlc3Rpb25PcHRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2VsZWN0T3B0aW9uKG9wdGlvbik7XG4gIH1cblxuICBvblByZXZpb3VzTW9udGgoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNob3dQcmV2aW91c01vbnRoKCk7XG4gIH1cblxuICBvbk5leHRNb250aCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2hvd05leHRNb250aCgpO1xuICB9XG5cbiAgb25IaWdobGlnaHQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRBY3RpdmVEcm9wZG93bkluZGV4KGluZGV4KTtcbiAgfVxuXG4gIC8vIEEgaG92ZXIgaGlnaGxpZ2h0IGVuZHMgd2l0aCB0aGUgaG92ZXIg4oCUIHNlZSB0aGUgY29yZSdzIGBjbGVhckhpZ2hsaWdodGAuXG4gIG9uVW5oaWdobGlnaHQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5jbGVhckhpZ2hsaWdodChpbmRleCk7XG4gIH1cblxuICBvblByb2R1Y3RTZWxlY3QocHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZWxlY3RQcm9kdWN0KHByb2R1Y3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgY2FyZCB0YWtpbmcgZm9jdXMgYmx1cnMgdGhlIGVkaXRvciwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGNsb3NlIHRoZVxuICAgKiBwYW5lbCBvdXQgZnJvbSB1bmRlciB0aGUgY2FyZCB0aGUgdXNlciBqdXN0IHRhYmJlZCB0by5cbiAgICovXG4gIG9uUHJvZHVjdEZvY3VzQ2hhbmdlKGZvY3VzZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgfVxuXG4gIHByZXZlbnRCbHVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIC8vIFByZXZlbnQgdGhlIGVkaXRvciBmcm9tIGxvc2luZyBmb2N1cyB3aGVuIGludGVyYWN0aW5nIHdpdGggdGhlIGRyb3Bkb3duLlxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgKm5nSWY9XCJ2bSQgfCBhc3luYyBhcyB2bVwiXG4gICNkcm9wZG93blJvb3RcbiAgW2lkXT1cImNvbnRyb2xsZXIubGlzdGJveElkXCJcbiAgcm9sZT1cImxpc3Rib3hcIlxuICBkYXRhLWFpYS1kcm9wZG93bj1cIlwiXG4gIFthdHRyLmRhdGEtYWlhLWxvYWRpbmddPVwidm0uaXNMb2FkaW5nID8gJycgOiBudWxsXCJcbiAgW2F0dHIuZGF0YS1haWEtc2tlbGV0b24tZXhpdGluZ109XCJ2bS5za2VsZXRvbkV4aXRpbmcgPyAnJyA6IG51bGxcIlxuICBbYXR0ci5kYXRhLW1vZGVdPVwicmVzb2x2ZWRNb2RlXCJcbiAgW2F0dHIuZGF0YS1vcHRpb25zLXBvc2l0aW9uXT1cInZtLm9wdGlvbnNQb3NpdGlvblwiXG4gIFthdHRyLmRhdGEtYWlhLWhhcy1wcm9kdWN0c109XCJ2bS5wcm9kdWN0cy5sZW5ndGggPiAwID8gJycgOiBudWxsXCJcbiAgW2NsYXNzXT1cInJvb3RDbGFzc1wiXG4gIFtjbGFzcy5tYWdpY3gtYWlhLWRyb3Bkb3duLXZpc2libGVdPVwidm0uaXNWaXNpYmxlXCJcbiAgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbj5cbiAgPGFpYS1zdGFjayBzcGFjZT1cIjhweFwiPlxuICAgIDxhaWEtY2x1c3RlclxuICAgICAgKm5nSWY9XCJ2bS5zaG93c1BpbGxzIHx8IHZtLnNob3dzU2tpcFwiXG4gICAgICBjbGFzcz1cIm1hZ2ljeC1haWEtZHJvcGRvd24tcGlsbGJhclwiXG4gICAgICBkYXRhLWFpYS1waWxsYmFyPVwiXCJcbiAgICAgIFtub1dyYXBdPVwidHJ1ZVwiXG4gICAgPlxuICAgICAgPCEtLSBUaGUgc2Nyb2xsICsgcmlnaHQtZWRnZSBmYWRlIGxpdmUgb24gdGhpcyB3cmFwcGVyIChub3QgdGhlIGJhcikgc29cbiAgICAgICAgICAgdGhlIHNraXAgYnV0dG9uIHN0YXlzIG91dHNpZGUgdGhlIG1hc2tlZCByZWdpb24g4oCUIHBpbm5lZCBhbmQgZnVsbHlcbiAgICAgICAgICAgb3BhcXVlIHdoaWxlIG92ZXJmbG93aW5nIHBpbGxzIGZhZGUgdW5kZXIgaXQuIEFic2VudCBpbiBhIHNraXAtb25seVxuICAgICAgICAgICByb3cgKHBpbGxzIHJlbmRlcmVkIGVsc2V3aGVyZSB2aWEgcGlsbFBsYWNlbWVudCBpbmxpbmUvaGlkZGVuKS4gLS0+XG4gICAgICA8c3BhbiAqbmdJZj1cInZtLnNob3dzUGlsbHNcIiBjbGFzcz1cIm1hZ2ljeC1haWEtcGlsbC1zY3JvbGxcIiBkYXRhLWFpYS1waWxsLXNjcm9sbD1cIlwiPlxuICAgICAgICA8YWlhLXBpbGwtbGlzdFxuICAgICAgICAgIFtwaWxsc109XCJ2bS5waWxsc1wiXG4gICAgICAgICAgW2FjdGl2ZVBpbGxJbmRleF09XCIwXCJcbiAgICAgICAgICBbYWN0aXZlU2VsZWN0ZWRdPVwidm0uaXNBY3RpdmVQaWxsU2VsZWN0ZWRcIlxuICAgICAgICAgIFtyb3VuZGVkXT1cInRydWVcIlxuICAgICAgICAgIFtsb2FkaW5nXT1cInZtLmlzTG9hZGluZ1wiXG4gICAgICAgICAgKHNlbGVjdFBpbGwpPVwib25QaWxsQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgID48L2FpYS1waWxsLWxpc3Q+XG4gICAgICA8L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwidm0uc2hvd3NTa2lwXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICBjbGFzcz1cIm1hZ2ljeC1haWEtc2tpcFwiXG4gICAgICAgIGRhdGEtYWlhLXNraXA9XCJcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidm0uc2tpcERpc2FibGVkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ2bS5hY3RpdmVQaWxsTGFiZWwgPyAnU2tpcCAnICsgdm0uYWN0aXZlUGlsbExhYmVsIDogJ1NraXAnXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uU2tpcCgpXCJcbiAgICAgID5cbiAgICAgICAgc2tpcFxuICAgICAgPC9idXR0b24+XG4gICAgPC9haWEtY2x1c3Rlcj5cblxuICAgIDxhaWEtc3VnZ2VzdGlvbi1ncmlkXG4gICAgICAqbmdJZj1cInZtLnNob3dzT3B0aW9uc1wiXG4gICAgICBbb3B0aW9uc109XCJ2bS5vcHRpb25zXCJcbiAgICAgIFthY3RpdmVJbmRleF09XCJ2bS5hY3RpdmVJbmRleFwiXG4gICAgICBbbGlzdGJveElkXT1cImNvbnRyb2xsZXIubGlzdGJveElkXCJcbiAgICAgIFtsb2FkaW5nXT1cInZtLmlzTG9hZGluZ1wiXG4gICAgICBbZ3JvdXBLZXldPVwidm0uZ3JvdXBLZXlcIlxuICAgICAgW29wdGlvbnNQb3NpdGlvbl09XCJ2bS5vcHRpb25zUG9zaXRpb25cIlxuICAgICAgW3Nob3dJY29uc109XCJ2bS5zaG93T3B0aW9uSWNvbnNcIlxuICAgICAgW3Nob3dJbWFnZXNdPVwidm0uc2hvd09wdGlvbkltYWdlc1wiXG4gICAgICBbc2hvd0NvdW50c109XCJ2bS5zaG93T3B0aW9uQ291bnRzXCJcbiAgICAgIChzZWxlY3QpPVwib25TZWxlY3QoJGV2ZW50KVwiXG4gICAgICAoaGlnaGxpZ2h0KT1cIm9uSGlnaGxpZ2h0KCRldmVudClcIlxuICAgICAgKHVuaGlnaGxpZ2h0KT1cIm9uVW5oaWdobGlnaHQoJGV2ZW50KVwiXG4gICAgPjwvYWlhLXN1Z2dlc3Rpb24tZ3JpZD5cblxuICAgIDxhaWEtZGF0ZS1ncmlkXG4gICAgICAqbmdJZj1cInZtLnNob3dzRGF0ZUdyaWRcIlxuICAgICAgW29wdGlvbnNdPVwidm0ub3B0aW9uc1wiXG4gICAgICBbYWN0aXZlSW5kZXhdPVwidm0uYWN0aXZlSW5kZXhcIlxuICAgICAgW2xpc3Rib3hJZF09XCJjb250cm9sbGVyLmxpc3Rib3hJZFwiXG4gICAgICBbdmlld109XCJ2bS5kYXRlVmlld1wiXG4gICAgICBbc2VsZWN0aW9uXT1cInZtLmRhdGVTZWxlY3Rpb25cIlxuICAgICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIChoaWdobGlnaHQpPVwib25IaWdobGlnaHQoJGV2ZW50KVwiXG4gICAgICAodW5oaWdobGlnaHQpPVwib25VbmhpZ2hsaWdodCgkZXZlbnQpXCJcbiAgICAgIChwcmV2aW91c01vbnRoKT1cIm9uUHJldmlvdXNNb250aCgpXCJcbiAgICAgIChuZXh0TW9udGgpPVwib25OZXh0TW9udGgoKVwiXG4gICAgPjwvYWlhLWRhdGUtZ3JpZD5cblxuICAgIDxkaXZcbiAgICAgICpuZ0lmPVwidm0uc2hvd3NGYWxsYmFja1NrZWxldG9uXCJcbiAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kcm9wZG93bi1za2VsZXRvbi1iYXJzXCJcbiAgICAgIGRhdGEtYWlhLXNrZWxldG9uLWJhcnM9XCJcIlxuICAgID5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ0Zvcj1cImxldCB3IG9mIGZhbGxiYWNrU2tlbGV0b25CYXJXaWR0aHM7IHRyYWNrQnk6IHRyYWNrQnlXaWR0aFwiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kcm9wZG93bi1za2VsZXRvbi1iYXJcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwid1wiXG4gICAgICA+PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSAqbmdJZiwgbm90IGp1c3QgdGhlIHNlY3Rpb24ncyBvd24gZ3VhcmQgaW5zaWRlIHRoZSBjb21wb25lbnQ6IHRoZSBob3N0XG4gICAgICAgICBlbGVtZW50IGlzIGFuIGluLWZsb3cgY2hpbGQgb2YgLmFpYS1zdGFjayAoZGlzcGxheTpmbGV4OyBnYXA6OHB4KSwgc29cbiAgICAgICAgIGFuIGFsd2F5cy1pbnN0YW50aWF0ZWQgemVyby1oZWlnaHQgaG9zdCB3b3VsZCBhZGQgYSBTRUNPTkQgOHB4IGdhcFxuICAgICAgICAgYmV0d2VlbiB0aGUgZ3JpZCBhbmQgdGhlIGZvb3RlciDigJQgaW4gZXZlcnkgZHJvcGRvd24sIHByb2R1Y3RzIG9yIG5vdC5cbiAgICAgICAgIFRoZSBncmlkJ3MgLS1haWEtZ3JpZC1vdmVybGFwLWJvdHRvbSBpcyB0dW5lZCBmb3IgZXhhY3RseSBvbmUgZ2FwLCBzb1xuICAgICAgICAgdGhlIGZvb3RlciB3b3VsZCBsYW5kIDhweCBiZWxvdyB0aGUgYmFuZCBpdCBpcyBtZWFudCB0byBjb3Zlci4gLS0+XG4gICAgPGFpYS1wcm9kdWN0LXN0cmlwXG4gICAgICAqbmdJZj1cInZtLnByb2R1Y3RzLmxlbmd0aCA+IDBcIlxuICAgICAgW3Byb2R1Y3RzXT1cInZtLnByb2R1Y3RzXCJcbiAgICAgIFtsaXN0Ym94SWRdPVwiY29udHJvbGxlci5saXN0Ym94SWRcIlxuICAgICAgW2ZvY3VzYWJsZV09XCJ2bS5pc1Zpc2libGVcIlxuICAgICAgW2xheW91dF09XCJwcm9kdWN0c0xheW91dFwiXG4gICAgICBbaW1hZ2VGYWxsYmFja109XCJwcm9kdWN0SW1hZ2VGYWxsYmFja1wiXG4gICAgICAoc2VsZWN0KT1cIm9uUHJvZHVjdFNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIChmb2N1c0NoYW5nZSk9XCJvblByb2R1Y3RGb2N1c0NoYW5nZSgkZXZlbnQpXCJcbiAgICA+PC9haWEtcHJvZHVjdC1zdHJpcD5cblxuICAgIDxmb290ZXIgY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3RlclwiIGRhdGEtYWlhLWZvb3Rlcj1cIlwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLXJvd1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLWhpbnQtZ3JvdXBcIj5cbiAgICAgICAgICA8a2JkIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXIta2V5XCI+e3sgdm0uZm9vdGVyS2V5IH19PC9rYmQ+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1oaW50XCI+e3sgdm0uZm9vdGVySGludCB9fTwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8YVxuICAgICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItYnJhbmQtbGlua1wiXG4gICAgICAgICAgW2hyZWZdPVwiYnJhbmRIcmVmXCJcbiAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1icmFuZFwiPkFJPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItYmFkZ2VcIj5BdXRvY29tcGxldGU8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZm9vdGVyPlxuICA8L2FpYS1zdGFjaz5cbiAgPCEtLSBcIk1vcmUgYmVsb3dcIiBhcnJvdyDigJQgYW4gb3ZlcmxheSBvbiB0aGUgcGFuZWwsIG5vdCBhIHNlY3Rpb24gb2YgdGhlXG4gICAgICAgc3RhY2suIFNob3duL3Bvc2l0aW9uZWQgYnkgdGhlIGNvcmUncyBzY3JvbGwtYXJyb3cgY29udHJvbGxlciAoc2VlXG4gICAgICAgc3luY1Njcm9sbEFycm93KTsgbWFya3VwIG1pcnJvcnMgdmFuaWxsYSdzIGNyZWF0ZVNjcm9sbEFycm93QnV0dG9uLiAtLT5cbiAgPGJ1dHRvblxuICAgICNzY3JvbGxBcnJvd1xuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIGNsYXNzPVwibWFnaWN4LWFpYS1zY3JvbGwtYXJyb3dcIlxuICAgIGRhdGEtYWlhLXNjcm9sbC1hcnJvdz1cIlwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzY3JvbGxBcnJvd0xhYmVsXCJcbiAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICA+XG4gICAgPHN2Z1xuICAgICAgdmlld0JveD1cIjAgMCAxNiAxNlwiXG4gICAgICB3aWR0aD1cIjE4XCJcbiAgICAgIGhlaWdodD1cIjE4XCJcbiAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICBzdHJva2Utd2lkdGg9XCIxLjc1XCJcbiAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICA+XG4gICAgICA8cGF0aCBkPVwiTTQgNi41IDggMTAuNWw0LTRcIiAvPlxuICAgIDwvc3ZnPlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuIl19
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBS04sU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUwsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixhQUFhLEVBR2IsYUFBYSxFQUNiLGdCQUFnQixFQUloQixrQkFBa0IsR0FJbkIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBbUIsTUFBTSxNQUFNLENBQUM7QUFDdkUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUMxRixPQUFPLEVBQUUsdUJBQXVC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RUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBRXBDLGNBQWM7c0JBRHJCLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIHR5cGUgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIE5nWm9uZSxcbiAgdHlwZSBPbkNoYW5nZXMsXG4gIHR5cGUgT25EZXN0cm95LFxuICB0eXBlIE9uSW5pdCxcbiAgdHlwZSBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBcHBlYXJhbmNlTW9kZSxcbiAgYXR0YWNoU2Nyb2xsQXJyb3csXG4gIGJ1aWxkQXR0cmlidXRpb25VcmwsXG4gIGNvbnRhaW5TY3JvbGwsXG4gIHR5cGUgRGF0ZU1vbnRoVmlldyxcbiAgdHlwZSBEYXRlU2VsZWN0aW9uLFxuICBnZXRGb290ZXJIaW50LFxuICBpc0NhbGVuZGFyRm9ybWF0LFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdEltYWdlRmFsbGJhY2ssXG4gIHR5cGUgUHJvZHVjdHNMYXlvdXQsXG4gIFNDUk9MTF9BUlJPV19MQUJFTCxcbiAgdHlwZSBTY3JvbGxBcnJvd0NvbnRyb2xsZXIsXG4gIHR5cGUgU3VnZ2VzdGlvbixcbiAgdHlwZSBTdWdnZXN0aW9uT3B0aW9uLFxufSBmcm9tIFwiQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFcIjtcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgdHlwZSBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHR5cGUgeyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vY29udHJvbGxlci9haS1hdXRvY29tcGxldGUuY29udHJvbGxlclwiO1xuaW1wb3J0IHsgRGF0ZUdyaWRDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvZGF0ZS1ncmlkL2RhdGUtZ3JpZC5jb21wb25lbnRcIjtcbmltcG9ydCB7IENsdXN0ZXJDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvbGF5b3V0L2NsdXN0ZXIuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdGFja0NvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9sYXlvdXQvc3RhY2suY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQaWxsTGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9waWxsLWxpc3QvcGlsbC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgUHJvZHVjdFN0cmlwQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3Byb2R1Y3Qtc3RyaXAvcHJvZHVjdC1zdHJpcC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFN1Z2dlc3Rpb25HcmlkQ29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3N1Z2dlc3Rpb24tZ3JpZC9zdWdnZXN0aW9uLWdyaWQuY29tcG9uZW50XCI7XG5cbmludGVyZmFjZSBEcm9wZG93blZtIHtcbiAgcGlsbHM6IFN1Z2dlc3Rpb25bXTtcbiAgb3B0aW9uczogU3VnZ2VzdGlvbk9wdGlvbltdO1xuICBhY3RpdmVJbmRleDogbnVtYmVyO1xuICBpc0FjdGl2ZVBpbGxTZWxlY3RlZDogYm9vbGVhbjtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAvKiogVGhlIGxvYWRpbmcgc2tlbGV0b24gaXMgZmFkaW5nIG91dCBiZWZvcmUgdGhlIHJlc3BvbnNlJ3Mgb3B0aW9ucyByZXBsYWNlIGl0LiAqL1xuICBza2VsZXRvbkV4aXRpbmc6IGJvb2xlYW47XG4gIHNob3dzUGlsbHM6IGJvb2xlYW47XG4gIC8qKiBXaGV0aGVyIHRoZSBwaWxsYmFyIGVuZHMgaW4gdGhlIHRyYWlsaW5nIFwic2tpcFwiIGJ1dHRvbi4gKi9cbiAgc2hvd3NTa2lwOiBib29sZWFuO1xuICAvKipcbiAgICogRGlzYWJsZWQgc3RhdGUgZm9yIHRoZSBza2lwIGJ1dHRvbjogbG9hZGluZywgb3IgdGhlIHBvc3Qtc2VsZWN0aW9uIHdpbmRvd1xuICAgKiB3aGVyZSBpc0xvYWRpbmcgaXMgc3VwcHJlc3NlZCBidXQgdGhlIGNvcmUncyBza2lwQWN0aXZlUGlsbCgpIG5vLW9wcy5cbiAgICovXG4gIHNraXBEaXNhYmxlZDogYm9vbGVhbjtcbiAgLyoqIEFjdGl2ZSBwaWxsJ3MgbGFiZWwsIGZvciB0aGUgc2tpcCBidXR0b24ncyBhcmlhLWxhYmVsLiAqL1xuICBhY3RpdmVQaWxsTGFiZWw6IHN0cmluZztcbiAgc2hvd3NPcHRpb25zOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgYm9keSByZW5kZXJzIGluIHBsYWNlIG9mIHRoZSBvcHRpb25zIGdyaWQuICovXG4gIHNob3dzRGF0ZUdyaWQ6IGJvb2xlYW47XG4gIC8qKiBUaGUgbW9udGggdGhlIGNhbGVuZGFyIHNob3dzLiBOdWxsIHVubGVzcyBgc2hvd3NEYXRlR3JpZGAuICovXG4gIGRhdGVWaWV3OiBEYXRlTW9udGhWaWV3IHwgbnVsbDtcbiAgLyoqIFdoYXQgdGhlIGNhbGVuZGFyIHBhaW50cyBhcyBhbnN3ZXJlZCDigJQgc2VlIHRoZSBjb3JlJ3MgYGRhdGVTZWxlY3Rpb25Gb3JgLiAqL1xuICBkYXRlU2VsZWN0aW9uOiBEYXRlU2VsZWN0aW9uO1xuICBzaG93c0ZhbGxiYWNrU2tlbGV0b246IGJvb2xlYW47XG4gIGlzVmlzaWJsZTogYm9vbGVhbjtcbiAgLyoqIFByb2R1Y3QgY2FyZHMgZm9yIHRoZSBzdHJpcC4gRW1wdHkgdW5sZXNzIGBwcm9kdWN0c2AgaXMgY29uZmlndXJlZC4gKi9cbiAgcHJvZHVjdHM6IFByb2R1Y3RbXTtcbiAgLyoqIElkZW50aXR5IG9mIHRoZSBzdWdnZXN0aW9uIHRoZSBvcHRpb25zIGJlbG9uZyB0byDigJQgZHJpdmVzIHRoZSBncmlkJ3Mgc2Nyb2xsIHJlc2V0LiAqL1xuICBncm91cEtleTogc3RyaW5nO1xuICBmb290ZXJLZXk6IHN0cmluZztcbiAgZm9vdGVySGludDogc3RyaW5nO1xuICBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIjtcbiAgLyoqIFdoZXRoZXIgb3B0aW9uIHJvd3MgZHJhdyB0aGVpciBgaWNvbl9zdmdgIGJlZm9yZSB0aGUgdGV4dC4gKi9cbiAgc2hvd09wdGlvbkljb25zOiBib29sZWFuO1xuICAvKiogV2hldGhlciBvcHRpb24gcm93cyBkcmF3IHRoZWlyIGBpbWFnZV91cmxgIGFzIGEgdGh1bWJuYWlsIGJlZm9yZSB0aGUgdGV4dC4gKi9cbiAgc2hvd09wdGlvbkltYWdlczogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgb3B0aW9uIHJvd3Mgc2hvdyB0aGVpciBgaXRlbV9jb3VudGAgYXQgdGhlIHRyYWlsaW5nIGVkZ2UuICovXG4gIHNob3dPcHRpb25Db3VudHM6IGJvb2xlYW47XG59XG5cbi8qKiBUaGUgY29udGVudC1iZWFyaW5nIGZpZWxkcyBvZiB0aGUgdmlldy1tb2RlbCAoZXZlcnl0aGluZyBidXQgYGlzVmlzaWJsZWApLiAqL1xudHlwZSBEcm9wZG93bkNvbnRlbnQgPSBPbWl0PERyb3Bkb3duVm0sIFwiaXNWaXNpYmxlXCI+O1xuXG4vKipcbiAqIFRpZXIgMiBkcm9wZG93biBjb21wb25lbnQg4oCUIHRoZSBBbmd1bGFyIGVxdWl2YWxlbnQgb2YgUmVhY3Qnc1xuICogYDxBSUF1dG9jb21wbGV0ZURyb3Bkb3duIC8+YC4gUmVuZGVycyB0aGUgcGlsbGJhciwgb3B0aW9ucyBncmlkLCBhbmRcbiAqIGxvYWRpbmcgc2tlbGV0b24gYmFzZWQgb24gdGhlIHN1cHBsaWVkIGNvbnRyb2xsZXIncyBgZHJvcGRvd24kYCBzbmFwc2hvdC5cbiAqXG4gKiBgYGBodG1sXG4gKiA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duIFtjb250cm9sbGVyXT1cImFjXCI+PC9haS1hdXRvY29tcGxldGUtZHJvcGRvd24+XG4gKiBgYGBcbiAqXG4gKiBBbGwgYWN0aW9ucyAocGlsbCBjbGljaywgb3B0aW9uIHNlbGVjdCwgb3B0aW9uIGhpZ2hsaWdodCkgYXJlIGZvcndhcmRlZCB0b1xuICogdGhlIGNvbnRyb2xsZXIuIENvbnN1bWVycyB3aG8gbmVlZCB0byBvYnNlcnZlIHRoZXNlIGV2ZW50cyBjYW4gc3Vic2NyaWJlXG4gKiB0byB0aGUgY29udHJvbGxlcidzIHBlci1maWVsZCBvYnNlcnZhYmxlcy5cbiAqXG4gKiBAcHVibGljXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhaS1hdXRvY29tcGxldGUtZHJvcGRvd25cIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBQaWxsTGlzdENvbXBvbmVudCxcbiAgICBQcm9kdWN0U3RyaXBDb21wb25lbnQsXG4gICAgU3VnZ2VzdGlvbkdyaWRDb21wb25lbnQsXG4gICAgRGF0ZUdyaWRDb21wb25lbnQsXG4gICAgU3RhY2tDb21wb25lbnQsXG4gICAgQ2x1c3RlckNvbXBvbmVudCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sXCIsXG4gIC8vIFRoZSBzaGFyZWQgYXBwZWFyYW5jZSBsYXllciBjYXJyaWVzIHRoZSBkZXNpZ24gdG9rZW5zICsgYm94LXNpemluZyByZXNldCArXG4gIC8vIG9wdGlvbnNQb3NpdGlvbiByZXZlcnNhbCwgc28gYSBzdGFuZGFsb25lIGRyb3Bkb3duIChubyBUaWVyIDEgY29tcG9uZW50IG9uXG4gIC8vIHRoZSBwYWdlKSBpcyBmdWxseSBzdHlsZWQgb25jZSBgbW9kZWAgaXMgc2V0LlxuICBzdHlsZVVybHM6IFtcIi4uL3NoYXJlZC9hcHBlYXJhbmNlLmNzc1wiLCBcIi4vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudC5jc3NcIl0sXG59KVxuZXhwb3J0IGNsYXNzIEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95XG57XG4gIC8qKiBUaGUgY29udHJvbGxlciB0aGF0IG93bnMgdGhlIGF1dG9jb21wbGV0ZSBzdGF0ZS4gUmVxdWlyZWQuICovXG4gIEBJbnB1dCgpIGNvbnRyb2xsZXIhOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXI7XG4gIC8qKiBXaGV0aGVyIHRvIHJlbmRlciB0aGUgcGlsbGJhciBhYm92ZSB0aGUgb3B0aW9ucyBncmlkLiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBzaG93UGlsbHMgPSB0cnVlO1xuICAvKipcbiAgICogV2hldGhlciB0aGUgcGlsbGJhciBlbmRzIGluIGEgc21hbGwgXCJza2lwXCIgYnV0dG9uIHRoYXQgZGlzbWlzc2VzIHRoZVxuICAgKiBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgcHJlc3Npbmcg4oaSIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LiBJdCBzaXRzXG4gICAqIGF0IHRoZSB0cmFpbGluZyBlZGdlIG9mIHRoZSBiYXI6IHZpc3VhbGx5IHRvcC1yaWdodCB3aGVuIHRoZSBkcm9wZG93blxuICAgKiBvcGVucyBiZWxvdyB0aGUgaW5wdXQsIGJvdHRvbS1yaWdodCB3aGVuIGBvcHRpb25zUG9zaXRpb25gIGlzIFwiYWJvdmVcIi5cbiAgICogRGVmYXVsdDogdHJ1ZS4gSGlkZGVuIGF1dG9tYXRpY2FsbHkgZHVyaW5nIHJlLWVkaXQgYW5kIHdoaWxlIHRoZSBmYWxsYmFja1xuICAgKiBza2VsZXRvbiByZW5kZXJzLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1NraXBCdXR0b24gPSB0cnVlO1xuICAvKipcbiAgICogV2hldGhlciBvcHRpb24gcm93cyBkcmF3IHRoZWlyIGBpY29uX3N2Z2AgYmVmb3JlIHRoZSB0ZXh0LiBEZWZhdWx0OiB0cnVlLlxuICAgKiBTZXQgdG8gZmFsc2UgdG8gcmVuZGVyIG9wdGlvbiByb3dzIGFzIHRleHQgb25seS5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25JY29ucyA9IHRydWU7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9wdGlvbiByb3dzIGRyYXcgdGhlaXIgYGltYWdlX3VybGAgYXMgYSBzcXVhcmUgdGh1bWJuYWlsIGJlZm9yZVxuICAgKiB0aGUgdGV4dCwgaW4gcGxhY2Ugb2YgdGhlIGljb24uIERlZmF1bHQ6IHRydWUuIFNldCB0byBmYWxzZSB0byByZW5kZXJcbiAgICogb3B0aW9uIHJvd3Mgd2l0aG91dCBwaWN0dXJlcy5cbiAgICovXG4gIEBJbnB1dCgpIHNob3dPcHRpb25JbWFnZXMgPSB0cnVlO1xuICAvKipcbiAgICogV2hldGhlciBvcHRpb24gcm93cyBzaG93IHRoZWlyIGBpdGVtX2NvdW50YCBhcyBhIG11dGVkIGxhYmVsIGF0IHRoZVxuICAgKiB0cmFpbGluZyBlZGdlIChcIjEyIGl0ZW1zXCIpLiBEZWZhdWx0OiB0cnVlLiBTZXQgdG8gZmFsc2UgdG8gaGlkZSB0aGUgY291bnRzLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd09wdGlvbkNvdW50cyA9IHRydWU7XG4gIC8qKlxuICAgKiBIb3cgdGhlIHByb2R1Y3Qgc3RyaXAgbGF5cyBpdHMgY2FyZHMgb3V0OiBhIGhvcml6b250YWxseSBzY3JvbGxpbmcgcm93XG4gICAqICh0aGUgZGVmYXVsdCksIG9yIHRoZSBzYW1lIGNhcmRzIHN0YWNrZWQgYXMgZnVsbC13aWR0aCByb3dzLlxuICAgKi9cbiAgQElucHV0KCkgcHJvZHVjdHNMYXlvdXQ6IFByb2R1Y3RzTGF5b3V0ID0gXCJyb3dcIjtcbiAgLyoqIE1pc3NpbmcvZmFpbGVkIGltYWdlIGZhbGxiYWNrLiBTdHlsZSBpbml0aWFscyB3aXRoIGBbZGF0YS1haWEtcHJvZHVjdC1pbml0aWFsXWAuICovXG4gIEBJbnB1dCgpIHByb2R1Y3RJbWFnZUZhbGxiYWNrOiBQcm9kdWN0SW1hZ2VGYWxsYmFjayA9IFwiaW1hZ2VcIjtcbiAgLyoqIE9wdGlvbmFsIENTUyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBkcm9wZG93biByb290LiAqL1xuICBASW5wdXQoKSBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb2xvciBtb2RlIGZvciBhIHN0YW5kYWxvbmUgZHJvcGRvd24uIFdoZW4gc2V0LCB0aGUgZHJvcGRvd24gc2VsZi1zY29wZXMgdGhlXG4gICAqIGRlc2lnbiB0b2tlbnMgdG8gaXRzIG93biByb290IChhZGRzIGBtYWdpY3gtYWlhYCArIGBkYXRhLW1vZGVgKSwgc28gaXQgbmVlZHNcbiAgICogbm8gYC5tYWdpY3gtYWlhYCB3cmFwcGVyLiBgXCJhdXRvXCJgIGZvbGxvd3MgYHByZWZlcnMtY29sb3Itc2NoZW1lYC4gTGVhdmUgaXRcbiAgICogdW5zZXQgd2hlbiB0aGUgZHJvcGRvd24gc2l0cyBpbnNpZGUgYSBgLm1hZ2ljeC1haWFgIGFuY2VzdG9yIChlLmcuIFRpZXIgMSkuXG4gICAqL1xuICBASW5wdXQoKSBtb2RlPzogQXBwZWFyYW5jZU1vZGU7XG5cbiAgLyoqIENvbmNyZXRlIHJlc29sdmVkIG1vZGUsIG9yIG51bGwgd2hlbiBgbW9kZWAgaXMgdW5zZXQgKGluaGVyaXQgZnJvbSBhbmNlc3RvcikuICovXG4gIHJlc29sdmVkTW9kZTogXCJsaWdodFwiIHwgXCJkYXJrXCIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtb2RlTXFsPzogTWVkaWFRdWVyeUxpc3Q7XG4gIHByaXZhdGUgbW9kZUxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IGhvc3QgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWxlYXNlU2Nyb2xsPzogKCkgPT4gdm9pZDtcblxuICAvKiogUm9vdCBjbGFzcyBsaXN0IOKAlCBhZGRzIGBtYWdpY3gtYWlhYCBvbmx5IHdoZW4gc2VsZi1zY29waW5nIHZpYSBgbW9kZWAuICovXG4gIGdldCByb290Q2xhc3MoKTogc3RyaW5nIHtcbiAgICBsZXQgY2xzID0gXCJtYWdpY3gtYWlhLWRyb3Bkb3duXCI7XG4gICAgaWYgKHRoaXMucmVzb2x2ZWRNb2RlKSBjbHMgKz0gXCIgbWFnaWN4LWFpYVwiO1xuICAgIGlmICh0aGlzLmNsYXNzTmFtZSkgY2xzICs9IGAgJHt0aGlzLmNsYXNzTmFtZX1gO1xuICAgIHJldHVybiBjbHM7XG4gIH1cblxuICAvKiogRmFsbGJhY2sgc2tlbGV0b24tYmFyIHdpZHRocyB1c2VkIHdoZW4gbG9hZGluZyB3aXRoIHplcm8gY2FjaGVkIG9wdGlvbnMuICovXG4gIHJlYWRvbmx5IGZhbGxiYWNrU2tlbGV0b25CYXJXaWR0aHMgPSBbMTU5LCAxMTksIDE2NF07XG5cbiAgLyoqIEFjY2Vzc2libGUgbmFtZSBvZiB0aGUgXCJtb3JlIGJlbG93XCIgc2Nyb2xsIGFycm93LiAqL1xuICByZWFkb25seSBzY3JvbGxBcnJvd0xhYmVsID0gU0NST0xMX0FSUk9XX0xBQkVMO1xuXG4gIC8vIFRoZSBkcm9wZG93biByb290IGFuZCB0aGUgYXJyb3cgYnV0dG9uIGxpdmUgdW5kZXIgdGhlIGAqbmdJZmAgb24gdm0kLCBzb1xuICAvLyB0aGV5IGNvbWUgYW5kIGdvIHdpdGggaXQg4oCUIGhlbmNlIG5vbi1zdGF0aWMgcXVlcmllcywgcmUtcmVhZCBldmVyeSBjaGVjay5cbiAgQFZpZXdDaGlsZChcImRyb3Bkb3duUm9vdFwiLCB7IHN0YXRpYzogZmFsc2UgfSkgcHJpdmF0ZSBkcm9wZG93blJvb3RSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChcInNjcm9sbEFycm93XCIsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwcml2YXRlIHNjcm9sbEFycm93UmVmPzogRWxlbWVudFJlZjxIVE1MQnV0dG9uRWxlbWVudD47XG4gIC8qKiBUaGUgZ3JpZCB0aGUgc2Nyb2xsLWFycm93IGNvbnRyb2xsZXIgaXMgY3VycmVudGx5IGJvdW5kIHRvLiAqL1xuICBwcml2YXRlIHNjcm9sbEFycm93QmluZGluZzogeyBncmlkOiBIVE1MRWxlbWVudDsgY29udHJvbGxlcjogU2Nyb2xsQXJyb3dDb250cm9sbGVyIH0gfCBudWxsID1cbiAgICBudWxsO1xuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dGlvbi9icmFuZGluZyBsaW5rIFVSTCBmb3IgdGhlIGZvb3Rlciwgd2l0aCBhIGB1dG1fc291cmNlYCBkZXJpdmVkXG4gICAqIGZyb20gdGhlIGVtYmVkZGluZyBwYWdlJ3MgaG9zdG5hbWUgKHNlZSB7QGxpbmsgYnVpbGRBdHRyaWJ1dGlvblVybH0pLlxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmRIcmVmID0gYnVpbGRBdHRyaWJ1dGlvblVybCgpO1xuXG4gIC8qKlxuICAgKiBWaWV3LW1vZGVsIGRlcml2ZWQgZnJvbSB0aGUgY29udHJvbGxlcidzIGBkcm9wZG93biRgLiBBZGRzIHRocmVlIGJvb2xlYW5zXG4gICAqIChgc2hvd3NQaWxsc2AsIGBzaG93c09wdGlvbnNgLCBgc2hvd3NGYWxsYmFja1NrZWxldG9uYCwgYGlzVmlzaWJsZWApIHRoYXRcbiAgICoga2VlcCB0ZW1wbGF0ZS1sZXZlbCBsb2dpYyB0byBhIHByb3BlcnR5IHJlYWQgcGVyIMKnMTkuNi5cbiAgICpcbiAgICogSW5pdGlhbGl6ZWQgb25jZSBpbiBgbmdPbkluaXRgIOKAlCBtdXN0IE5PVCBiZSBhIGdldHRlci4gQSBnZXR0ZXIgcmV0dXJucyBhXG4gICAqIGZyZXNoIGBPYnNlcnZhYmxlYCBpbnN0YW5jZSBvbiBldmVyeSBwcm9wZXJ0eSByZWFkOyB3aXRoIE9uUHVzaCArIGBhc3luY2BcbiAgICogcGlwZSB0aGF0IG1lYW5zIGVhY2ggY2hhbmdlLWRldGVjdGlvbiBjeWNsZSB1bnN1YnNjcmliZXMvcmVzdWJzY3JpYmVzLFxuICAgKiBjYXVzaW5nIHRoZSBgKm5nSWY9XCJ2bSQgfCBhc3luYyBhcyB2bVwiYCByb290IHRvIGJyaWVmbHkgcmVzb2x2ZSBgbnVsbGBcbiAgICogYW5kIGZsaWNrZXIgdGhlIGVudGlyZSBkcm9wZG93biBET00uXG4gICAqL1xuICB2bSQhOiBPYnNlcnZhYmxlPERyb3Bkb3duVm0+O1xuXG4gIC8vIEJyaWRnZSBmb3IgdGhlIEBJbnB1dCBgc2hvd1BpbGxzYCBpbnRvIHRoZSByZWFjdGl2ZSBwaXBlbGluZS4gV2l0aG91dCB0aGlzLFxuICAvLyBjaGFuZ2luZyB0aGUgaW5wdXQgYWZ0ZXIgaW5pdCB3b3VsZG4ndCB0cmlnZ2VyIGEgbmV3IHZtIGVtaXNzaW9uIHVudGlsIHRoZVxuICAvLyBuZXh0IGNvbnRyb2xsZXIuZHJvcGRvd24kIHRpY2sg4oCUIGFuZCB3ZSdkIGxvc2UgdGhlIHNob3dQaWxscyB1cGRhdGUgZW50aXJlbHlcbiAgLy8gaWYgdGhlIGNvbnRyb2xsZXIgaXMgaWRsZS4gVXBkYXRlZCBmcm9tIG5nT25DaGFuZ2VzIGJlbG93LlxuICBwcml2YXRlIHJlYWRvbmx5IHNob3dQaWxscyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAvLyBTYW1lIGJyaWRnZSwgZm9yIGBzaG93U2tpcEJ1dHRvbmAuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvd1NraXBCdXR0b24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgLy8gU2FtZSBicmlkZ2UsIGZvciBgc2hvd09wdGlvbkljb25zYC5cbiAgcHJpdmF0ZSByZWFkb25seSBzaG93T3B0aW9uSWNvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgLy8gU2FtZSBicmlkZ2UsIGZvciBgc2hvd09wdGlvbkltYWdlc2AgYW5kIGBzaG93T3B0aW9uQ291bnRzYC5cbiAgcHJpdmF0ZSByZWFkb25seSBzaG93T3B0aW9uSW1hZ2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2hvd09wdGlvbkNvdW50cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuXG4gIC8vIExhc3QgY29udGVudCBlbWl0dGVkIHdoaWxlIHRoZSBkcm9wZG93biB3YXMgdmlzaWJsZS4gUmV1c2VkIGR1cmluZyB0aGVcbiAgLy8gY2xvc2UgZmFkZSBzbyB0aGUgcG9wdWxhdGVkIGRyb3Bkb3duIGZhZGVzIG91dCBhcyBvbmUg4oCUIHNlZSBpbml0Vm0uXG4gIHByaXZhdGUgbGFzdFZpc2libGVDb250ZW50OiBEcm9wZG93bkNvbnRlbnQgfCBudWxsID0gbnVsbDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZWVkIHRoZSBpbnB1dCBicmlkZ2VzIGZyb20gdGhlaXIgcmVzb2x2ZWQgdmFsdWVzIGF0IGluaXQgdGltZS5cbiAgICB0aGlzLnNob3dQaWxscyQubmV4dCh0aGlzLnNob3dQaWxscyk7XG4gICAgdGhpcy5zaG93U2tpcEJ1dHRvbiQubmV4dCh0aGlzLnNob3dTa2lwQnV0dG9uKTtcbiAgICB0aGlzLnNob3dPcHRpb25JY29ucyQubmV4dCh0aGlzLnNob3dPcHRpb25JY29ucyk7XG4gICAgdGhpcy5zaG93T3B0aW9uSW1hZ2VzJC5uZXh0KHRoaXMuc2hvd09wdGlvbkltYWdlcyk7XG4gICAgdGhpcy5zaG93T3B0aW9uQ291bnRzJC5uZXh0KHRoaXMuc2hvd09wdGlvbkNvdW50cyk7XG4gICAgdGhpcy5hcHBseU1vZGUoKTtcbiAgICB0aGlzLmluaXRWbSgpO1xuICAgIC8vIFdoZWVsL3RvdWNoIG92ZXIgdGhlIGRyb3Bkb3duIG5ldmVyIHNjcm9sbHMgdGhlIHBhZ2UgYmVoaW5kIGl0LiBPbiB0aGVcbiAgICAvLyBob3N0LCBzbyBpdCBzdXJ2aXZlcyB0aGUgKm5nSWYgcm9vdCBjb21pbmcgYW5kIGdvaW5nOyBvdXRzaWRlIHRoZSB6b25lLFxuICAgIC8vIHNvIGEgd2hlZWwgZ2VzdHVyZSBkb2Vzbid0IHJ1biBjaGFuZ2UgZGV0ZWN0aW9uIG9uIGV2ZXJ5IGV2ZW50LlxuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLnJlbGVhc2VTY3JvbGwgPSBjb250YWluU2Nyb2xsKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1tcInNob3dQaWxsc1wiXSkge1xuICAgICAgdGhpcy5zaG93UGlsbHMkLm5leHQodGhpcy5zaG93UGlsbHMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInNob3dTa2lwQnV0dG9uXCJdKSB7XG4gICAgICB0aGlzLnNob3dTa2lwQnV0dG9uJC5uZXh0KHRoaXMuc2hvd1NraXBCdXR0b24pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInNob3dPcHRpb25JY29uc1wiXSkge1xuICAgICAgdGhpcy5zaG93T3B0aW9uSWNvbnMkLm5leHQodGhpcy5zaG93T3B0aW9uSWNvbnMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInNob3dPcHRpb25JbWFnZXNcIl0pIHtcbiAgICAgIHRoaXMuc2hvd09wdGlvbkltYWdlcyQubmV4dCh0aGlzLnNob3dPcHRpb25JbWFnZXMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcInNob3dPcHRpb25Db3VudHNcIl0pIHtcbiAgICAgIHRoaXMuc2hvd09wdGlvbkNvdW50cyQubmV4dCh0aGlzLnNob3dPcHRpb25Db3VudHMpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcIm1vZGVcIl0gJiYgIWNoYW5nZXNbXCJtb2RlXCJdLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmFwcGx5TW9kZSgpO1xuICAgIH1cbiAgICAvLyBSZS1iaW5kIHZtJCB3aGVuIHRoZSBjb250cm9sbGVyIEBJbnB1dCBpcyBzd2FwcGVkIChlLmcuIGEgbXVsdGktc3RlcCBmb3JtXG4gICAgLy8gdG9nZ2xpbmcgYmV0d2VlbiBjb250cm9sbGVycykuIFdpdGhvdXQgdGhpcywgdm0kIHN0YXlzIHN1YnNjcmliZWQgdG8gdGhlXG4gICAgLy8gcHJldmlvdXMgY29udHJvbGxlcidzIGRyb3Bkb3duJCDigJQgcmVuZGVyaW5nIHN0YWxlIG9wdGlvbnMsIG9yLCBpZiB0aGF0XG4gICAgLy8gY29udHJvbGxlciB3YXMgZGVzdHJveSgpLWVkLCByZWNlaXZpbmcgYSBjb21wbGV0aW9uIHRoYXQgY29sbGFwc2VzIHRoZVxuICAgIC8vIGRyb3Bkb3duIHBlcm1hbmVudGx5LiBTa2lwIHRoZSBmaXJzdCBjaGFuZ2U6IG5nT25DaGFuZ2VzIGZpcmVzIGJlZm9yZVxuICAgIC8vIG5nT25Jbml0LCB3aGljaCBvd25zIHRoZSBpbml0aWFsIGNyZWF0aW9uLlxuICAgIGlmIChjaGFuZ2VzW1wiY29udHJvbGxlclwiXSAmJiAhY2hhbmdlc1tcImNvbnRyb2xsZXJcIl0uZmlyc3RDaGFuZ2UgJiYgdGhpcy5jb250cm9sbGVyKSB7XG4gICAgICB0aGlzLmluaXRWbSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBLZWVwIHRoZSBjb3JlJ3MgXCJtb3JlIGJlbG93XCIgYXJyb3cgY29udHJvbGxlciBib3VuZCB0byB3aGljaGV2ZXIgb3B0aW9uc1xuICAgKiBncmlkIGlzIGN1cnJlbnRseSByZW5kZXJlZCDigJQgdGhlIEFuZ3VsYXIgYW5hbG9ndWUgb2YgUmVhY3Qnc1xuICAgKiB1c2VTY3JvbGxBcnJvdy4gVGhlIGNvbnRyb2xsZXIgb3ducyB0aGUgYmVoYXZpb3VyIChtZWFzdXJpbmcsIHZpc2liaWxpdHksXG4gICAqIHRoZSBwYWdlLXNjcm9sbCBvbiBjbGljayDigJQgc2VlIHRoZSBjb3JlJ3Mgc2Nyb2xsQXJyb3cudHMpOyB0aGlzIG9ubHkgaGFuZHNcbiAgICogaXQgdGhlIGxpdmUgZWxlbWVudHMgYWZ0ZXIgZWFjaCB2aWV3IGNoZWNrLCByZS1hdHRhY2hpbmcgd2hlbiB0aGUgZ3JpZFxuICAgKiBlbGVtZW50IGlzIHJlcGxhY2VkIGFuZCB0ZWFyaW5nIGRvd24gd2hlbiB0aGVyZSBpcyBubyBncmlkLlxuICAgKi9cbiAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLmRyb3Bkb3duUm9vdFJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBidXR0b24gPSB0aGlzLnNjcm9sbEFycm93UmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGdyaWQgPSByb290Py5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihcIi5haWEtZ3JpZFtkYXRhLXNjcm9sbF1cIikgPz8gbnVsbDtcbiAgICBpZiAodGhpcy5zY3JvbGxBcnJvd0JpbmRpbmcgJiYgdGhpcy5zY3JvbGxBcnJvd0JpbmRpbmcuZ3JpZCAhPT0gZ3JpZCkge1xuICAgICAgdGhpcy5zY3JvbGxBcnJvd0JpbmRpbmcuY29udHJvbGxlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLnNjcm9sbEFycm93QmluZGluZyA9IG51bGw7XG4gICAgfVxuICAgIGlmICghcm9vdCB8fCAhYnV0dG9uIHx8ICFncmlkKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnNjcm9sbEFycm93QmluZGluZykge1xuICAgICAgdGhpcy5zY3JvbGxBcnJvd0JpbmRpbmcgPSB7XG4gICAgICAgIGdyaWQsXG4gICAgICAgIGNvbnRyb2xsZXI6IGF0dGFjaFNjcm9sbEFycm93KHsgZHJvcGRvd246IHJvb3QsIGdyaWQsIGJ1dHRvbiB9KSxcbiAgICAgIH07XG4gICAgICByZXR1cm47IC8vIGF0dGFjaCgpIHJ1bnMgdGhlIGZpcnN0IHVwZGF0ZSBpdHNlbGZcbiAgICB9XG4gICAgdGhpcy5zY3JvbGxBcnJvd0JpbmRpbmcuY29udHJvbGxlci51cGRhdGUoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudGVhcmRvd25Nb2RlTGlzdGVuZXIoKTtcbiAgICB0aGlzLnJlbGVhc2VTY3JvbGw/LigpO1xuICAgIHRoaXMuc2Nyb2xsQXJyb3dCaW5kaW5nPy5jb250cm9sbGVyLmRlc3Ryb3koKTtcbiAgICB0aGlzLnNjcm9sbEFycm93QmluZGluZyA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgYG1vZGVgIGlucHV0IGludG8gYHJlc29sdmVkTW9kZWAuIFVuc2V0IOKGkiBudWxsICh0aGUgZHJvcGRvd25cbiAgICogc3RheXMgY2xhc3MtbGVzcyBhbmQgaW5oZXJpdHMgZnJvbSBhIGAubWFnaWN4LWFpYWAgYW5jZXN0b3IpLiBgXCJhdXRvXCJgIHJlYWRzXG4gICAqIGBwcmVmZXJzLWNvbG9yLXNjaGVtZWAgYW5kIHRyYWNrcyBpdCBsaXZlIHZpYSBhIG1lZGlhLXF1ZXJ5IGxpc3RlbmVyLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy50ZWFyZG93bk1vZGVMaXN0ZW5lcigpO1xuICAgIGlmICh0aGlzLm1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5yZXNvbHZlZE1vZGUgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5tb2RlID09PSBcImxpZ2h0XCIgfHwgdGhpcy5tb2RlID09PSBcImRhcmtcIikge1xuICAgICAgdGhpcy5yZXNvbHZlZE1vZGUgPSB0aGlzLm1vZGU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFwiYXV0b1wiXG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHdpbmRvdy5tYXRjaE1lZGlhICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gXCJsaWdodFwiO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLm1vZGVNcWwgPSB3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIik7XG4gICAgdGhpcy5yZXNvbHZlZE1vZGUgPSB0aGlzLm1vZGVNcWwubWF0Y2hlcyA/IFwiZGFya1wiIDogXCJsaWdodFwiO1xuICAgIHRoaXMubW9kZUxpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlZE1vZGUgPSB0aGlzLm1vZGVNcWw/Lm1hdGNoZXMgPyBcImRhcmtcIiA6IFwibGlnaHRcIjtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH07XG4gICAgdGhpcy5tb2RlTXFsLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgdGhpcy5tb2RlTGlzdGVuZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSB0ZWFyZG93bk1vZGVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RlTXFsICYmIHRoaXMubW9kZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLm1vZGVNcWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCB0aGlzLm1vZGVMaXN0ZW5lcik7XG4gICAgfVxuICAgIHRoaXMubW9kZU1xbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1vZGVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBCdWlsZCB0aGUgdmlldy1tb2RlbCBzdHJlYW0gZnJvbSB0aGUgY3VycmVudCBjb250cm9sbGVyICsgc2hvd1BpbGxzJC4gKi9cbiAgcHJpdmF0ZSBpbml0Vm0oKTogdm9pZCB7XG4gICAgdGhpcy52bSQgPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuY29udHJvbGxlci5kcm9wZG93biQsXG4gICAgICB0aGlzLnNob3dQaWxscyQsXG4gICAgICB0aGlzLnNob3dTa2lwQnV0dG9uJCxcbiAgICAgIHRoaXMuc2hvd09wdGlvbkljb25zJCxcbiAgICAgIHRoaXMuc2hvd09wdGlvbkltYWdlcyQsXG4gICAgICB0aGlzLnNob3dPcHRpb25Db3VudHMkLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoXG4gICAgICAgIChbZGQsIHNob3dQaWxscywgc2hvd1NraXBCdXR0b24sIHNob3dPcHRpb25JY29ucywgc2hvd09wdGlvbkltYWdlcywgc2hvd09wdGlvbkNvdW50c10pID0+IHtcbiAgICAgICAgICBjb25zdCBhY3RpdmVTdWdnZXN0aW9uID0gZGQuc3VnZ2VzdGlvbnNbMF07XG4gICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFjdGl2ZVN1Z2dlc3Rpb24/Lm9wdGlvbnMgPz8gW107XG4gICAgICAgICAgY29uc3Qgc2hvd3NQaWxscyA9IHNob3dQaWxscyAmJiAoZGQucGlsbHMubGVuZ3RoID4gMCB8fCBkZC5pc0xvYWRpbmcpO1xuICAgICAgICAgIC8vIFRoZSB0cmFpbGluZyBcInNraXBcIiBidXR0b24gb25seSBtYWtlcyBzZW5zZSBuZXh0IHRvIGEgcmVhbCxcbiAgICAgICAgICAvLyBza2lwcGFibGUgcGlsbCDigJQgbmV2ZXIgb24gdGhlIGZhbGxiYWNrIHNrZWxldG9uIGJhciwgYW5kIG5ldmVyXG4gICAgICAgICAgLy8gZHVyaW5nIHJlLWVkaXQgKHRoZSBiYXIgdGhlbiBzaG93cyBhbiBhbHJlYWR5IGFuc3dlcmVkIHBhcmFtKS5cbiAgICAgICAgICAvLyBEZWxpYmVyYXRlbHkgTk9UIGdhdGVkIG9uIHNob3dzUGlsbHM6IHdpdGggcGlsbHMgcmVuZGVyZWQgZWxzZXdoZXJlXG4gICAgICAgICAgLy8gKHBpbGxQbGFjZW1lbnQgXCJpbmxpbmVcIi9cImhpZGRlblwiKSB0aGUgYmFyIHJlbmRlcnMgYXMgYSBza2lwLW9ubHlcbiAgICAgICAgICAvLyByb3cgaG9sZGluZyBqdXN0IHRoZSBidXR0b24uIEhpZGRlbiB3aGlsZSB0aGUgaW5wdXQgaXMgZW1wdHkg4oCUIHRoZVxuICAgICAgICAgIC8vIGZvb3RlciBoaW50IGRvZXNuJ3QgYWR2ZXJ0aXNlIFwi4oaSIHRvIHNraXBcIiB1bnRpbCB0aGUgdXNlciBoYXMgdHlwZWQsXG4gICAgICAgICAgLy8gc28gdGhlIHByaXN0aW5lIHN0YXJ0aW5nIHN0YXRlIHN0YXlzIGZyZWUgb2YgdGhlIGFmZm9yZGFuY2UgdG9vLlxuICAgICAgICAgIGNvbnN0IHNob3dzU2tpcCA9XG4gICAgICAgICAgICBkZC5waWxscy5sZW5ndGggPiAwICYmIHNob3dTa2lwQnV0dG9uICYmICFkZC5pc0VkaXRpbmcgJiYgIWRkLmlzSW5wdXRFbXB0eTtcbiAgICAgICAgICAvLyBFeGFjdGx5IG9uZSBib2R5IHJlbmRlcnMuIGBvcHRpb25zYCBhYm92ZSBhbHJlYWR5IGhvbGRzIHRoZSB2aXNpYmxlXG4gICAgICAgICAgLy8gbW9udGgncyBjZWxscyB3aGVuIHRoaXMgaXMgYSBkYXRlIOKAlCB0aGUgY29yZSBzd2FwcGVkIHRoZW0gaW4gaXRzXG4gICAgICAgICAgLy8gZGVyaXZlIGxheWVyIOKAlCBzbyB0aGUgdHdvIGFyZSB0aGUgc2FtZSBsaXN0IGRyYXduIHR3byBkaWZmZXJlbnRcbiAgICAgICAgICAvLyB3YXlzLCBhbmQgbmV2ZXIgYm90aCBhdCBvbmNlICh0d28gZWxlbWVudHMgYW5zd2VyaW5nIHRvIHRoZSBzYW1lXG4gICAgICAgICAgLy8gb3B0aW9uIGlkIHdvdWxkIGJyZWFrIGtleWJvYXJkIGNvbW1pdCkuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBBIGNhbGVuZGFyIGlzIHdpdGhoZWxkIHdoaWxlIGEgcmVxdWVzdCBpcyBpbiBmbGlnaHQuIFRoZSBvcHRpb25zXG4gICAgICAgICAgLy8gZ3JpZCBkcmF3cyBpdHMgY2FjaGVkIG9wdGlvbnMgYXMgc2tlbGV0b24gcm93cyBmb3IgdGhhdCB3aW5kb3csIGJ1dFxuICAgICAgICAgIC8vIGEgbW9udGggb2YgZGF5IGNlbGxzIGhhcyBubyBza2VsZXRvbiBmb3JtIHdvcnRoIGRyYXdpbmcg4oCUIGFuZCBhIGxpdmVcbiAgICAgICAgICAvLyBjYWxlbmRhciBvdmVyIGEgbG9hZGluZyBwaWxsIGJhciBpbnZpdGVzIGFuIGFuc3dlciBhZ2FpbnN0XG4gICAgICAgICAgLy8gc3VnZ2VzdGlvbnMgdGhlIHJlc3BvbnNlIGlzIGFib3V0IHRvIHJlcGxhY2UuIFRoZSBmYWxsYmFjayBiYXJzXG4gICAgICAgICAgLy8gc3RhbmQgaW4gdW50aWwgaXQgbGFuZHMuXG4gICAgICAgICAgY29uc3QgaXNEYXRlID0gaXNDYWxlbmRhckZvcm1hdChkZC5mb3JtYXRUeXBlID8/IFwib3B0aW9uc1wiKSAmJiBkZC5kYXRlVmlldyAhPSBudWxsO1xuICAgICAgICAgIGNvbnN0IHNob3dzT3B0aW9ucyA9IG9wdGlvbnMubGVuZ3RoID4gMCAmJiAhaXNEYXRlO1xuICAgICAgICAgIGNvbnN0IHNob3dzRGF0ZUdyaWQgPSBvcHRpb25zLmxlbmd0aCA+IDAgJiYgaXNEYXRlICYmICFkZC5pc0xvYWRpbmc7XG4gICAgICAgICAgY29uc3Qgc2hvd3NGYWxsYmFja1NrZWxldG9uID0gZGQuaXNMb2FkaW5nICYmICFzaG93c09wdGlvbnMgJiYgIXNob3dzRGF0ZUdyaWQ7XG4gICAgICAgICAgLy8gRWl0aGVyIGhhbGYgaXMgZW5vdWdoIHRvIGtlZXAgdGhlIHBhbmVsIHVwOiBwcm9kdWN0cyByZW5kZXIgd2l0aCBub1xuICAgICAgICAgIC8vIHN1Z2dlc3Rpb25zLCBzdWdnZXN0aW9ucyByZW5kZXIgd2l0aCBubyBwcm9kdWN0cy5cbiAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPVxuICAgICAgICAgICAgZGQuaXNPcGVuICYmXG4gICAgICAgICAgICAoc2hvd3NPcHRpb25zIHx8IHNob3dzRGF0ZUdyaWQgfHwgc2hvd3NQaWxscyB8fCBkZC5pc0xvYWRpbmcgfHwgZGQucHJvZHVjdHMubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgICAvLyBXaGlsZSBjbG9zaW5nLCByZXVzZSB0aGUgbGFzdCB2aXNpYmxlIGNvbnRlbnQgc28gdGhlIHBvcHVsYXRlZFxuICAgICAgICAgIC8vIGRyb3Bkb3duIGZhZGVzIG91dCBhcyBvbmUuIE90aGVyd2lzZSB0aGUgcGlsbHMvb3B0aW9ucyB2YW5pc2ggdGhlXG4gICAgICAgICAgLy8gaW5zdGFudCB0aGUgc3RhdGUgZW1wdGllcyAoZS5nLiBza2lwcGluZyB0aGUgbGFzdCBwaWxsIHdpdGgg4oaSKSxcbiAgICAgICAgICAvLyBsZWF2aW5nIHRoZSBhbHdheXMtcHJlc2VudCBmb290ZXIgYWxvbmUgZm9yIGEgZmxhc2ggb2YgYSBmb290ZXItb25seVxuICAgICAgICAgIC8vIFwibm8gb3B0aW9uc1wiIGJveCBtaWQtZmFkZS4gT25seSBgaXNWaXNpYmxlYCB0cmFja3MgbGl2ZSBzdGF0ZSB0b1xuICAgICAgICAgIC8vIGRyaXZlIHRoZSBvcGFjaXR5IHRyYW5zaXRpb24uXG4gICAgICAgICAgaWYgKCFpc1Zpc2libGUgJiYgdGhpcy5sYXN0VmlzaWJsZUNvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLnRoaXMubGFzdFZpc2libGVDb250ZW50LCBpc1Zpc2libGU6IGZhbHNlIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgb3B0aW9uSGlnaGxpZ2h0ZWQgPVxuICAgICAgICAgICAgZGQuYWN0aXZlSW5kZXggPj0gMCAmJiBCb29sZWFuKG9wdGlvbnNbZGQuYWN0aXZlSW5kZXhdPy5pc190YXBwYWJsZSk7XG4gICAgICAgICAgY29uc3QgeyBrZXk6IGZvb3RlcktleSwgaGludDogZm9vdGVySGludCB9ID0gZ2V0Rm9vdGVySGludChcbiAgICAgICAgICAgIG9wdGlvbkhpZ2hsaWdodGVkLFxuICAgICAgICAgICAgZGQuaXNJbnB1dEVtcHR5LFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgY29udGVudDogRHJvcGRvd25Db250ZW50ID0ge1xuICAgICAgICAgICAgcGlsbHM6IGRkLnBpbGxzLFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4OiBkZC5hY3RpdmVJbmRleCxcbiAgICAgICAgICAgIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBkZC5pc0FjdGl2ZVBpbGxTZWxlY3RlZCxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZGQuaXNMb2FkaW5nLFxuICAgICAgICAgICAgc2tlbGV0b25FeGl0aW5nOiBCb29sZWFuKGRkLnNrZWxldG9uRXhpdGluZyksXG4gICAgICAgICAgICBzaG93c1BpbGxzLFxuICAgICAgICAgICAgc2hvd3NTa2lwLFxuICAgICAgICAgICAgc2tpcERpc2FibGVkOiBkZC5pc0xvYWRpbmcgfHwgQm9vbGVhbihkZC5pblNlbGVjdGlvbkFuaW1hdGlvbiksXG4gICAgICAgICAgICBhY3RpdmVQaWxsTGFiZWw6IGRkLnBpbGxzWzBdPy50ZXh0ID8/IFwiXCIsXG4gICAgICAgICAgICBzaG93c09wdGlvbnMsXG4gICAgICAgICAgICBzaG93c0RhdGVHcmlkLFxuICAgICAgICAgICAgZGF0ZVZpZXc6IGRkLmRhdGVWaWV3ID8/IG51bGwsXG4gICAgICAgICAgICBkYXRlU2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgIHNlbGVjdGVkSXNvOiBkZC5zZWxlY3RlZERhdGVJc28gPz8gbnVsbCxcbiAgICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZTogZGQuc2VsZWN0ZWREYXRlUmFuZ2UgPz8gbnVsbCxcbiAgICAgICAgICAgICAgcmFuZ2VTdGFydDogZGQuZGF0ZVJhbmdlU3RhcnQgPz8gbnVsbCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzaG93c0ZhbGxiYWNrU2tlbGV0b24sXG4gICAgICAgICAgICBwcm9kdWN0czogZGQucHJvZHVjdHMsXG4gICAgICAgICAgICBncm91cEtleTogYWN0aXZlU3VnZ2VzdGlvblxuICAgICAgICAgICAgICA/IGAke2FjdGl2ZVN1Z2dlc3Rpb24ucGFyYW1ldGVyfSAke2FjdGl2ZVN1Z2dlc3Rpb24udGV4dH1gXG4gICAgICAgICAgICAgIDogXCJcIixcbiAgICAgICAgICAgIGZvb3RlcktleSxcbiAgICAgICAgICAgIGZvb3RlckhpbnQsXG4gICAgICAgICAgICBvcHRpb25zUG9zaXRpb246IGRkLm9wdGlvbnNQb3NpdGlvbixcbiAgICAgICAgICAgIHNob3dPcHRpb25JY29ucyxcbiAgICAgICAgICAgIHNob3dPcHRpb25JbWFnZXMsXG4gICAgICAgICAgICBzaG93T3B0aW9uQ291bnRzLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGlzVmlzaWJsZSkgdGhpcy5sYXN0VmlzaWJsZUNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICAgIHJldHVybiB7IC4uLmNvbnRlbnQsIGlzVmlzaWJsZSB9O1xuICAgICAgICB9LFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgdHJhY2tCeVdpZHRoID0gKF86IG51bWJlciwgdzogbnVtYmVyKTogbnVtYmVyID0+IHc7XG5cbiAgb25QaWxsQ2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIG9uU2tpcCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2tpcEFjdGl2ZVBpbGwoKTtcbiAgfVxuXG4gIG9uU2VsZWN0KG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIG9uUHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2hvd1ByZXZpb3VzTW9udGgoKTtcbiAgfVxuXG4gIG9uTmV4dE1vbnRoKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zaG93TmV4dE1vbnRoKCk7XG4gIH1cblxuICBvbkhpZ2hsaWdodChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgLy8gQSBob3ZlciBoaWdobGlnaHQgZW5kcyB3aXRoIHRoZSBob3ZlciDigJQgc2VlIHRoZSBjb3JlJ3MgYGNsZWFySGlnaGxpZ2h0YC5cbiAgb25VbmhpZ2hsaWdodChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLmNsZWFySGlnaGxpZ2h0KGluZGV4KTtcbiAgfVxuXG4gIG9uUHJvZHVjdFNlbGVjdChwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNlbGVjdFByb2R1Y3QocHJvZHVjdCk7XG4gIH1cblxuICAvKipcbiAgICogQSBjYXJkIHRha2luZyBmb2N1cyBibHVycyB0aGUgZWRpdG9yLCB3aGljaCB3b3VsZCBvdGhlcndpc2UgY2xvc2UgdGhlXG4gICAqIHBhbmVsIG91dCBmcm9tIHVuZGVyIHRoZSBjYXJkIHRoZSB1c2VyIGp1c3QgdGFiYmVkIHRvLlxuICAgKi9cbiAgb25Qcm9kdWN0Rm9jdXNDaGFuZ2UoZm9jdXNlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlci5zZXRGb2N1c2VkKGZvY3VzZWQpO1xuICB9XG5cbiAgcHJldmVudEJsdXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgLy8gUHJldmVudCB0aGUgZWRpdG9yIGZyb20gbG9zaW5nIGZvY3VzIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZHJvcGRvd24uXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxufVxuIiwiPGRpdlxuICAqbmdJZj1cInZtJCB8IGFzeW5jIGFzIHZtXCJcbiAgI2Ryb3Bkb3duUm9vdFxuICBbaWRdPVwiY29udHJvbGxlci5saXN0Ym94SWRcIlxuICByb2xlPVwibGlzdGJveFwiXG4gIGRhdGEtYWlhLWRyb3Bkb3duPVwiXCJcbiAgW2F0dHIuZGF0YS1haWEtbG9hZGluZ109XCJ2bS5pc0xvYWRpbmcgPyAnJyA6IG51bGxcIlxuICBbYXR0ci5kYXRhLWFpYS1za2VsZXRvbi1leGl0aW5nXT1cInZtLnNrZWxldG9uRXhpdGluZyA/ICcnIDogbnVsbFwiXG4gIFthdHRyLmRhdGEtbW9kZV09XCJyZXNvbHZlZE1vZGVcIlxuICBbYXR0ci5kYXRhLW9wdGlvbnMtcG9zaXRpb25dPVwidm0ub3B0aW9uc1Bvc2l0aW9uXCJcbiAgW2F0dHIuZGF0YS1haWEtaGFzLXByb2R1Y3RzXT1cInZtLnByb2R1Y3RzLmxlbmd0aCA+IDAgPyAnJyA6IG51bGxcIlxuICBbY2xhc3NdPVwicm9vdENsYXNzXCJcbiAgW2NsYXNzLm1hZ2ljeC1haWEtZHJvcGRvd24tdmlzaWJsZV09XCJ2bS5pc1Zpc2libGVcIlxuICAobW91c2Vkb3duKT1cInByZXZlbnRCbHVyKCRldmVudClcIlxuPlxuICA8YWlhLXN0YWNrIHNwYWNlPVwiOHB4XCI+XG4gICAgPGFpYS1jbHVzdGVyXG4gICAgICAqbmdJZj1cInZtLnNob3dzUGlsbHMgfHwgdm0uc2hvd3NTa2lwXCJcbiAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1kcm9wZG93bi1waWxsYmFyXCJcbiAgICAgIGRhdGEtYWlhLXBpbGxiYXI9XCJcIlxuICAgICAgW25vV3JhcF09XCJ0cnVlXCJcbiAgICA+XG4gICAgICA8IS0tIFRoZSBzY3JvbGwgKyByaWdodC1lZGdlIGZhZGUgbGl2ZSBvbiB0aGlzIHdyYXBwZXIgKG5vdCB0aGUgYmFyKSBzb1xuICAgICAgICAgICB0aGUgc2tpcCBidXR0b24gc3RheXMgb3V0c2lkZSB0aGUgbWFza2VkIHJlZ2lvbiDigJQgcGlubmVkIGFuZCBmdWxseVxuICAgICAgICAgICBvcGFxdWUgd2hpbGUgb3ZlcmZsb3dpbmcgcGlsbHMgZmFkZSB1bmRlciBpdC4gQWJzZW50IGluIGEgc2tpcC1vbmx5XG4gICAgICAgICAgIHJvdyAocGlsbHMgcmVuZGVyZWQgZWxzZXdoZXJlIHZpYSBwaWxsUGxhY2VtZW50IGlubGluZS9oaWRkZW4pLiAtLT5cbiAgICAgIDxzcGFuICpuZ0lmPVwidm0uc2hvd3NQaWxsc1wiIGNsYXNzPVwibWFnaWN4LWFpYS1waWxsLXNjcm9sbFwiIGRhdGEtYWlhLXBpbGwtc2Nyb2xsPVwiXCI+XG4gICAgICAgIDxhaWEtcGlsbC1saXN0XG4gICAgICAgICAgW3BpbGxzXT1cInZtLnBpbGxzXCJcbiAgICAgICAgICBbYWN0aXZlUGlsbEluZGV4XT1cIjBcIlxuICAgICAgICAgIFthY3RpdmVTZWxlY3RlZF09XCJ2bS5pc0FjdGl2ZVBpbGxTZWxlY3RlZFwiXG4gICAgICAgICAgW3JvdW5kZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgW2xvYWRpbmddPVwidm0uaXNMb2FkaW5nXCJcbiAgICAgICAgICAoc2VsZWN0UGlsbCk9XCJvblBpbGxDbGljaygkZXZlbnQpXCJcbiAgICAgICAgPjwvYWlhLXBpbGwtbGlzdD5cbiAgICAgIDwvc3Bhbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJ2bS5zaG93c1NraXBcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1za2lwXCJcbiAgICAgICAgZGF0YS1haWEtc2tpcD1cIlwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ2bS5za2lwRGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInZtLmFjdGl2ZVBpbGxMYWJlbCA/ICdTa2lwICcgKyB2bS5hY3RpdmVQaWxsTGFiZWwgOiAnU2tpcCdcIlxuICAgICAgICAoY2xpY2spPVwib25Ta2lwKClcIlxuICAgICAgPlxuICAgICAgICBza2lwXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2FpYS1jbHVzdGVyPlxuXG4gICAgPGFpYS1zdWdnZXN0aW9uLWdyaWRcbiAgICAgICpuZ0lmPVwidm0uc2hvd3NPcHRpb25zXCJcbiAgICAgIFtvcHRpb25zXT1cInZtLm9wdGlvbnNcIlxuICAgICAgW2FjdGl2ZUluZGV4XT1cInZtLmFjdGl2ZUluZGV4XCJcbiAgICAgIFtsaXN0Ym94SWRdPVwiY29udHJvbGxlci5saXN0Ym94SWRcIlxuICAgICAgW2xvYWRpbmddPVwidm0uaXNMb2FkaW5nXCJcbiAgICAgIFtncm91cEtleV09XCJ2bS5ncm91cEtleVwiXG4gICAgICBbb3B0aW9uc1Bvc2l0aW9uXT1cInZtLm9wdGlvbnNQb3NpdGlvblwiXG4gICAgICBbc2hvd0ljb25zXT1cInZtLnNob3dPcHRpb25JY29uc1wiXG4gICAgICBbc2hvd0ltYWdlc109XCJ2bS5zaG93T3B0aW9uSW1hZ2VzXCJcbiAgICAgIFtzaG93Q291bnRzXT1cInZtLnNob3dPcHRpb25Db3VudHNcIlxuICAgICAgKHNlbGVjdCk9XCJvblNlbGVjdCgkZXZlbnQpXCJcbiAgICAgIChoaWdobGlnaHQpPVwib25IaWdobGlnaHQoJGV2ZW50KVwiXG4gICAgICAodW5oaWdobGlnaHQpPVwib25VbmhpZ2hsaWdodCgkZXZlbnQpXCJcbiAgICA+PC9haWEtc3VnZ2VzdGlvbi1ncmlkPlxuXG4gICAgPGFpYS1kYXRlLWdyaWRcbiAgICAgICpuZ0lmPVwidm0uc2hvd3NEYXRlR3JpZFwiXG4gICAgICBbb3B0aW9uc109XCJ2bS5vcHRpb25zXCJcbiAgICAgIFthY3RpdmVJbmRleF09XCJ2bS5hY3RpdmVJbmRleFwiXG4gICAgICBbbGlzdGJveElkXT1cImNvbnRyb2xsZXIubGlzdGJveElkXCJcbiAgICAgIFt2aWV3XT1cInZtLmRhdGVWaWV3XCJcbiAgICAgIFtzZWxlY3Rpb25dPVwidm0uZGF0ZVNlbGVjdGlvblwiXG4gICAgICAoc2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxuICAgICAgKGhpZ2hsaWdodCk9XCJvbkhpZ2hsaWdodCgkZXZlbnQpXCJcbiAgICAgICh1bmhpZ2hsaWdodCk9XCJvblVuaGlnaGxpZ2h0KCRldmVudClcIlxuICAgICAgKHByZXZpb3VzTW9udGgpPVwib25QcmV2aW91c01vbnRoKClcIlxuICAgICAgKG5leHRNb250aCk9XCJvbk5leHRNb250aCgpXCJcbiAgICA+PC9haWEtZGF0ZS1ncmlkPlxuXG4gICAgPGRpdlxuICAgICAgKm5nSWY9XCJ2bS5zaG93c0ZhbGxiYWNrU2tlbGV0b25cIlxuICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRyb3Bkb3duLXNrZWxldG9uLWJhcnNcIlxuICAgICAgZGF0YS1haWEtc2tlbGV0b24tYmFycz1cIlwiXG4gICAgPlxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nRm9yPVwibGV0IHcgb2YgZmFsbGJhY2tTa2VsZXRvbkJhcldpZHRoczsgdHJhY2tCeTogdHJhY2tCeVdpZHRoXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWRyb3Bkb3duLXNrZWxldG9uLWJhclwiXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJ3XCJcbiAgICAgID48L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tICpuZ0lmLCBub3QganVzdCB0aGUgc2VjdGlvbidzIG93biBndWFyZCBpbnNpZGUgdGhlIGNvbXBvbmVudDogdGhlIGhvc3RcbiAgICAgICAgIGVsZW1lbnQgaXMgYW4gaW4tZmxvdyBjaGlsZCBvZiAuYWlhLXN0YWNrIChkaXNwbGF5OmZsZXg7IGdhcDo4cHgpLCBzb1xuICAgICAgICAgYW4gYWx3YXlzLWluc3RhbnRpYXRlZCB6ZXJvLWhlaWdodCBob3N0IHdvdWxkIGFkZCBhIFNFQ09ORCA4cHggZ2FwXG4gICAgICAgICBiZXR3ZWVuIHRoZSBncmlkIGFuZCB0aGUgZm9vdGVyIOKAlCBpbiBldmVyeSBkcm9wZG93biwgcHJvZHVjdHMgb3Igbm90LlxuICAgICAgICAgVGhlIGdyaWQncyAtLWFpYS1ncmlkLW92ZXJsYXAtYm90dG9tIGlzIHR1bmVkIGZvciBleGFjdGx5IG9uZSBnYXAsIHNvXG4gICAgICAgICB0aGUgZm9vdGVyIHdvdWxkIGxhbmQgOHB4IGJlbG93IHRoZSBiYW5kIGl0IGlzIG1lYW50IHRvIGNvdmVyLiAtLT5cbiAgICA8YWlhLXByb2R1Y3Qtc3RyaXBcbiAgICAgICpuZ0lmPVwidm0ucHJvZHVjdHMubGVuZ3RoID4gMFwiXG4gICAgICBbcHJvZHVjdHNdPVwidm0ucHJvZHVjdHNcIlxuICAgICAgW2xpc3Rib3hJZF09XCJjb250cm9sbGVyLmxpc3Rib3hJZFwiXG4gICAgICBbZm9jdXNhYmxlXT1cInZtLmlzVmlzaWJsZVwiXG4gICAgICBbbGF5b3V0XT1cInByb2R1Y3RzTGF5b3V0XCJcbiAgICAgIFtpbWFnZUZhbGxiYWNrXT1cInByb2R1Y3RJbWFnZUZhbGxiYWNrXCJcbiAgICAgIChzZWxlY3QpPVwib25Qcm9kdWN0U2VsZWN0KCRldmVudClcIlxuICAgICAgKGZvY3VzQ2hhbmdlKT1cIm9uUHJvZHVjdEZvY3VzQ2hhbmdlKCRldmVudClcIlxuICAgID48L2FpYS1wcm9kdWN0LXN0cmlwPlxuXG4gICAgPGZvb3RlciBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyXCIgZGF0YS1haWEtZm9vdGVyPVwiXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItcm93XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWFnaWN4LWFpYS1mb290ZXItaGludC1ncm91cFwiPlxuICAgICAgICAgIDxrYmQgY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1rZXlcIj57eyB2bS5mb290ZXJLZXkgfX08L2tiZD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLWhpbnRcIj57eyB2bS5mb290ZXJIaW50IH19PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxhXG4gICAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1icmFuZC1saW5rXCJcbiAgICAgICAgICBbaHJlZl09XCJicmFuZEhyZWZcIlxuICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hZ2ljeC1haWEtZm9vdGVyLWJyYW5kXCI+QUk8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWdpY3gtYWlhLWZvb3Rlci1iYWRnZVwiPkF1dG9jb21wbGV0ZTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgPC9kaXY+XG4gICAgPC9mb290ZXI+XG4gIDwvYWlhLXN0YWNrPlxuICA8IS0tIFwiTW9yZSBiZWxvd1wiIGFycm93IOKAlCBhbiBvdmVybGF5IG9uIHRoZSBwYW5lbCwgbm90IGEgc2VjdGlvbiBvZiB0aGVcbiAgICAgICBzdGFjay4gU2hvd24vcG9zaXRpb25lZCBieSB0aGUgY29yZSdzIHNjcm9sbC1hcnJvdyBjb250cm9sbGVyIChzZWVcbiAgICAgICBzeW5jU2Nyb2xsQXJyb3cpOyBtYXJrdXAgbWlycm9ycyB2YW5pbGxhJ3MgY3JlYXRlU2Nyb2xsQXJyb3dCdXR0b24uIC0tPlxuICA8YnV0dG9uXG4gICAgI3Njcm9sbEFycm93XG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGFiaW5kZXg9XCItMVwiXG4gICAgY2xhc3M9XCJtYWdpY3gtYWlhLXNjcm9sbC1hcnJvd1wiXG4gICAgZGF0YS1haWEtc2Nyb2xsLWFycm93PVwiXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNjcm9sbEFycm93TGFiZWxcIlxuICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gID5cbiAgICA8c3ZnXG4gICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcbiAgICAgIHdpZHRoPVwiMThcIlxuICAgICAgaGVpZ2h0PVwiMThcIlxuICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjEuNzVcIlxuICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIlxuICAgID5cbiAgICAgIDxwYXRoIGQ9XCJNNCA2LjUgOCAxMC41bDQtNFwiIC8+XG4gICAgPC9zdmc+XG4gIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
@@ -378,7 +378,7 @@ function computeDropdown(s, optionsPosition) {
378
378
  const activeSuggestion = s.actionableSuggestions[0];
379
379
  const dropdownPill = editingParam
380
380
  ? {
381
- type: editingParam.suggestionType,
381
+ parameter: editingParam.suggestionParameter,
382
382
  text: editingParam.suggestionPlaceholder,
383
383
  required: true,
384
384
  options: editingParam.options,
@@ -387,8 +387,8 @@ function computeDropdown(s, optionsPosition) {
387
387
  ? // Answering a span the user wrote themselves: the pill names the
388
388
  // parameter the server matched it to, so the calendar isn't unlabelled.
389
389
  {
390
- type: editingIdentified.type,
391
- text: identifiedParamLabel(editingIdentified.type),
390
+ parameter: editingIdentified.parameter,
391
+ text: identifiedParamLabel(editingIdentified.parameter),
392
392
  required: true,
393
393
  options: [],
394
394
  }
@@ -419,4 +419,4 @@ function computeDropdown(s, optionsPosition) {
419
419
  optionsPosition,
420
420
  };
421
421
  }
422
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLGNBQWMsSUFBSSxrQkFBa0IsRUFHcEMsZ0JBQWdCLEVBRWhCLG9CQUFvQixHQU1yQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBbUIsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQW1HbkM7OztPQUdHO0lBQ0gsWUFBWSxPQUF3QyxFQUFFO1FBcEd0RCw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLG1FQUFtRTtRQUNsRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBb0IsT0FBTyxDQUFDLENBQUM7UUFFNUUsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFnRzFCLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJEO2dCQUN6RCx3RUFBd0UsQ0FDM0UsQ0FBQztTQUNIO1FBRUQsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsR0FBRyxJQUFJO1lBQ1AsVUFBVSxFQUFFLFVBQVU7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYztZQUNyQyxpRUFBaUU7WUFDakUsb0VBQW9FO1lBQ3BFLDJD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QUFXO1FBQzFDLGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxhQUFhO1FBQzlDLGNBQWMsRUFBRSxhQUFhLENBQUMsVUFBVTtRQUN4QyxlQUFlO0tBQ2hCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgdHlwZSBBdXRvY29tcGxldGVSZXN1bHQsXG4gIHR5cGUgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgQUlBdXRvY29tcGxldGUgYXMgQ29yZUFJQXV0b2NvbXBsZXRlLFxuICB0eXBlIENvcmVTdGF0ZSxcbiAgdHlwZSBDdXN0b21GaWVsZHNSZXBvcnQsXG4gIGRhdGVTZWxlY3Rpb25Gb3IsXG4gIHR5cGUgSWRlbnRpZmllZFBhcmFtU3RhdGUsXG4gIGlkZW50aWZpZWRQYXJhbUxhYmVsLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgU2VnbWVudCxcbiAgdHlwZSBTa2lwcGVkUGFyYW1TdGF0ZSxcbiAgdHlwZSBTdWdnZXN0aW9uLFxuICB0eXBlIFN1Z2dlc3Rpb25PcHRpb24sXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBtYXAsIHR5cGUgT2JzZXJ2YWJsZSwgc2hhcmVSZXBsYXkgfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHR5cGUge1xuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zLFxuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSxcbiAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyVXBkYXRlLFxuICBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUsXG59IGZyb20gXCIuLi9zaGFyZWQvdHlwZXNcIjtcbmltcG9ydCB7IGRlcml2ZUZpZWxkIH0gZnJvbSBcIi4vb2JzZXJ2YWJsZXNcIjtcblxuLyoqXG4gKiBUaWVyIDIgbG9naWMgc3VyZmFjZSBmb3IgYEBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS1hbmd1bGFyYCDigJQgdGhlIEFuZ3VsYXJcbiAqIGVxdWl2YWxlbnQgb2YgUmVhY3QncyBgdXNlQUlBdXRvY29tcGxldGUoKWAgaG9vay4gV3JhcHMgYSBoZWFkbGVzc1xuICogYEBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhYCBjb3JlIGFuZCBleHBvc2VzIGl0cyBzdGF0ZSBhcyBSeEpTXG4gKiBvYnNlcnZhYmxlcyBwbHVzIHRoaW4gYWN0aW9uIG1ldGhvZHMuXG4gKlxuICogVGhlIGNvbnRyb2xsZXIgaXMgY29uc3VtZXItbWFuYWdlZCDigJQgdGhlIGNvbnN1bWVyIGNyZWF0ZXMgaXRcbiAqIHdpdGggYG5ld2AsIGhvbGRzIHRoZSByZWZlcmVuY2UsIGFuZCAqKm11c3QgY2FsbCBgZGVzdHJveSgpYCoqIGluIHRoZWlyXG4gKiBvd24gYG5nT25EZXN0cm95YC4gVGhlIFRpZXIgMSBgPGFpLWF1dG9jb21wbGV0ZT5gIGNvbXBvbmVudCBkb2VzIHRoaXNcbiAqIGF1dG9tYXRpY2FsbHk7IFRpZXIgMiBjb25zdW1lcnMgZG8gbm90IGdldCBhdXRvLWNsZWFudXAuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgQUlBdXRvY29tcGxldGVDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb3JlOiBDb3JlQUlBdXRvY29tcGxldGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmF3U3RhdGUkOiBCZWhhdmlvclN1YmplY3Q8Q29yZVN0YXRlPjtcbiAgLy8gb3B0aW9uc1Bvc2l0aW9uIGlzbid0IHBhcnQgb2YgQ29yZVN0YXRlIChpdCdzIGEgY29yZSBvcHRpb24pLCBzbyB0cmFjayBpdFxuICAvLyBoZXJlIGFuZCBmb2xkIGl0IGludG8gYGRyb3Bkb3duJGAgc28gdGhlIGRyb3Bkb3duIGNhbiByZWFkIHBsYWNlbWVudCBmcm9tXG4gIC8vIHRoZSBjb250cm9sbGVyIOKAlCBjb25maWd1cmVkIG9uY2UsIGtlcHQgaW4gc3luYyB0aHJvdWdoIHVwZGF0ZSgpLlxuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnNQb3NpdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFwiYWJvdmVcIiB8IFwiYmVsb3dcIj4oXCJiZWxvd1wiKTtcbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZUNvcmU6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgaXNEZXN0cm95ZWQgPSBmYWxzZTtcblxuICAvLyA9PT0gUGVyLWZpZWxkIG9ic2VydmFibGVzID09PVxuICAvLyBFYWNoIG9uZSBydW5zIHRocm91Z2ggZGVyaXZlRmllbGQsIHdoaWNoIGJha2VzIGluIGRpc3RpbmN0VW50aWxDaGFuZ2VkXG4gIC8vIGFuZCBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pIHBlciDCpzE5LjQuXG5cbiAgLyoqIFBsYWluLXRleHQgY29udGVudCBvZiB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSB0ZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAvKiogQ29tcGxldGVkIChib2xkKSBwYXJhbXMgY3VycmVudGx5IGluIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IGNvbXBsZXRlZFBhcmFtcyQ6IE9ic2VydmFibGU8Q29tcGxldGVkUGFyYW1TdGF0ZVtdPjtcbiAgLyoqXG4gICAqIFN1Z2dlc3Rpb25zIHRoZSB1c2VyIGRpc21pc3NlZCB3aXRoIHRoZSBza2lwIGtleSAo4oaSKS4gTm90aGluZyByZW5kZXJzXG4gICAqIHRoZW07IHRoZXkgZXhpc3Qgc28gYSBoYW5kLXJvbGxlZCBzdWJtaXQgY2FuIHBhc3MgdGhlbSB0b1xuICAgKiBgYnVpbGRTdWJtaXRSZXN1bHRgIGFuZCBjYXJyeSB0aGUgc2FtZSBgdGV4dDogXCJza2lwcGVkXCJgIGVudHJpZXMgdGhlXG4gICAqIFNESydzIG93biByZXF1ZXN0cyBkby5cbiAgICovXG4gIHJlYWRvbmx5IHNraXBwZWRQYXJhbXMkOiBPYnNlcnZhYmxlPFNraXBwZWRQYXJhbVN0YXRlW10+O1xuICAvKipcbiAgICogUGFyYW1zIHRoZSBzZXJ2ZXIgaWRlbnRpZmllZCBpbiB0aGUgdXNlcidzIG93biB3b3Jkcy4gQWxyZWFkeSByZW5kZXJlZFxuICAgKiB0aHJvdWdoIGBzZWdtZW50cyRgOyBleHBvc2VkIHNvIGEgaGFuZC1yb2xsZWQgc3VibWl0IGNhbiBwYXNzIHRoZW0gdG9cbiAgICogYGJ1aWxkU3VibWl0UmVzdWx0YCBhbmQgcmVwb3J0IHRoZSBzYW1lIGBpZGVudGlmaWVkX3BhcmFtc2AgdGhlIFNESydzXG4gICAqIG93biByZXN1bHRzIGNhcnJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgaWRlbnRpZmllZFBhcmFtcyQ6IE9ic2VydmFibGU8SWRlbnRpZmllZFBhcmFtU3RhdGVbXT47XG4gIC8qKiBBY3Rpb25hYmxlIHN1Z2dlc3Rpb24gcGlsbHMgKGZpcnN0IG9uZSBpcyB0aGUgYWN0aXZlIHBpbGwpLiAqL1xuICByZWFkb25seSBzdWdnZXN0aW9uUGlsbHMkOiBPYnNlcnZhYmxlPFN1Z2dlc3Rpb25bXT47XG4gIC8qKiBUZXh0ICsgY29tcGxldGVkLXBhcmFtIHNlZ21lbnRzIGZvciByZW5kZXJpbmcgdGhlIGVkaXRvciBib2R5LiAqL1xuICByZWFkb25seSBzZWdtZW50cyQ6IE9ic2VydmFibGU8U2VnbWVudFtdPjtcbiAgLyoqIElEIG9mIHRoZSBtb3N0LXJlY2VudGx5LXByb21vdGVkIHBhcmFtIChkcml2ZXMgc2hpbW1lciBhbmltYXRpb24pLiAqL1xuICByZWFkb25seSBuZXdQYXJhbUlkJDogT2JzZXJ2YWJsZTxzdHJpbmcgfCBudWxsPjtcbiAgLyoqIEFsbCBzdWdnZXN0aW9ucyBmcm9tIHRoZSBzZXJ2ZXIgKGluY2x1ZGluZyBub24tYWN0aW9uYWJsZSBvbmVzKS4gKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGlvbnMkOiBPYnNlcnZhYmxlPFN1Z2dlc3Rpb25bXT47XG4gIC8qKlxuICAgKiBXaGF0IHRoZSBwcm9kdWN0IHN0cmlwIHNob3dzOiB0aGUgaXRlbXMgdGhlIGxhdGVzdCBgL3N1Z2dlc3RgIHJlc3BvbnNlXG4gICAqIHJlcG9ydGVkIGFzIG1hdGNoaW5nIHRoZSBxdWVyeSwgb3Ig4oCUIHdpdGggYHByb2R1Y3RzYCBjb25maWd1cmVkIG9uIHRoZVxuICAgKiBjb250cm9sbGVyIOKAlCB0aGUgcmVzdWx0cyBvZiB0aGF0IGN1c3RvbSBzZWFyY2guXG4gICAqL1xuICByZWFkb25seSBwcm9kdWN0cyQ6IE9ic2VydmFibGU8UHJvZHVjdFtdPjtcbiAgLyoqXG4gICAqIFRoZSBjYXRhbG9nIGdyb3VuZGluZyByZXBvcnQgdGhlIGxhdGVzdCByZXNwb25zZSBjYXJyaWVkLCBvciBudWxsIHdoZW4gaXRcbiAgICogY2FycmllZCBub25lOiB3aGljaCBvZiB0aGUgcXVlcnkncyBjb25zdHJhaW50cyB0aGUgY2F0YWxvZyBhcHBsaWVkLCB3aGljaFxuICAgKiBpdCBkcm9wcGVkLCBhbmQgaG93IG1hbnkgaXRlbXMgKGFuZCB3aGljaCkgdGhlIGFwcGxpZWQgb25lcyBsZWZ0XG4gICAqIHN0YW5kaW5nLiBOdWxsIGlzIFwibm8gbmV3c1wiLCBub3QgYW4gZW1wdHkgY2F0YWxvZy5cbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbUZpZWxkcyQ6IE9ic2VydmFibGU8Q3VzdG9tRmllbGRzUmVwb3J0IHwgbnVsbD47XG4gIC8qKiBDdXJyZW50bHkgaGlnaGxpZ2h0ZWQgZHJvcGRvd24gb3B0aW9uIGluZGV4LiAtMSA9IG5vbmUuICovXG4gIHJlYWRvbmx5IGFjdGl2ZUluZGV4JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICAvKipcbiAgICogVUktdmlzaWJsZSBsb2FkaW5nIGZsYWcg4oCUIHN1cHByZXNzZWQgZHVyaW5nIHRoZSBwb3N0LXNlbGVjdCBwcmVzc1xuICAgKiBhbmltYXRpb24gYW5kIGR1cmluZyByZS1lZGl0IChjYWNoZWQgb3B0aW9ucyBzdGF5IHZpc2libGUgdGhlcmUpLiBVc2VcbiAgICogdGhpcyBpbnN0ZWFkIG9mIHRoZSByYXcgY29yZSBzdGF0ZSBmb3IgYW55IGxvYWRpbmctc2tlbGV0b24gYmluZGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9hZGluZyQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBTZXJ2ZXItcmVwb3J0ZWQgXCJxdWVyeSBpcyBjb21wbGV0ZVwiIGZsYWcuICovXG4gIHJlYWRvbmx5IGlzUmVhZHkkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogV2hldGhlciB0aGUgZWRpdG9yIGN1cnJlbnRseSBoYXMgZm9jdXMuICovXG4gIHJlYWRvbmx5IGlzRm9jdXNlZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoZSBkcm9wZG93biBzaG91bGQgY3VycmVudGx5IGJlIHZpc2libGUuICovXG4gIHJlYWRvbmx5IGlzRHJvcGRvd25PcGVuJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFjdGl2ZSAobGVhZGluZykgcGlsbCBzaG91bGQgcmVuZGVyIHNlbGVjdGVkIChmdWxsIG9wYWNpdHkpXG4gICAqIHJhdGhlciB0aGFuIHRoZSBkZS1lbXBoYXNpemVkIGBmaXJzdGAgdGllci4gQXV0byB0cmlnZ2VyIOKHkiB0cnVlIG9ubHkgd2hpbGVcbiAgICogYSBkcm9wZG93biBvcHRpb24gaXMgaGlnaGxpZ2h0ZWQ7IG1hbnVhbCDih5IgdHJ1ZSBvbmNlIHRoZSBwaWxsIGlzIHRhcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzQWN0aXZlUGlsbFNlbGVjdGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFNlcnZlci1zdWdnZXN0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgcGxhY2Vob2xkZXJUZXh0JDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAvKiogTGFzdCBmZXRjaCBlcnJvciwgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZXJyb3IkOiBPYnNlcnZhYmxlPEVycm9yIHwgbnVsbD47XG4gIC8qKiBQYXJhbSBjdXJyZW50bHkgYmVpbmcgcmUtZWRpdGVkLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlZGl0aW5nUGFyYW0kOiBPYnNlcnZhYmxlPENvbXBsZXRlZFBhcmFtU3RhdGUgfCBudWxsPjtcbiAgLyoqIFBsYWluLXRleHQgb2Zmc2V0IHdoZXJlIHRoZSBlZGl0IHJlZ2lvbiBzdGFydHMsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVkaXRpbmdBbmNob3IkOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+O1xuICAvKiogTGl2ZSBjYXJldCBvZmZzZXQgd2l0aGluIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IGNhcmV0T2Zmc2V0JDogT2JzZXJ2YWJsZTxudW1iZXIgfCBudWxsPjtcblxuICAvLyA9PT0gQ29tcG9zaXRlIG9ic2VydmFibGVzID09PVxuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCBvZiBldmVyeSBwdWJsaWMgZmllbGQgaW4gb25lIG9iamVjdC4gQ29udmVuaWVudCBmb3JcbiAgICogYCpuZ0lmPVwiY3RybC5zdGF0ZSQgfCBhc3luYyBhcyBzdGF0ZVwiYCB0ZW1wbGF0aW5nIOKAlCBhbGlhc2VzIGFsbCBmaWVsZHNcbiAgICogdW5kZXIgYSBzaW5nbGUgc3Vic2NyaXB0aW9uIGluc3RlYWQgb2YgbXVsdGlwbGUgYHwgYXN5bmNgIHBpcGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGUkOiBPYnNlcnZhYmxlPEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlPjtcblxuICAvKipcbiAgICogQ29tcG9zaXRlIHN0YXRlIGZvciB0aGUgZHJvcGRvd24gdmlldy4gVGllciAyIGNvbnN1bWVycyBzcHJlYWQgdGhpcyBpbnRvXG4gICAqIGA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPmA7IFRpZXIgMSB1c2VzIHRoZSBzYW1lIHNoYXBlIGludGVybmFsbHkuXG4gICAqL1xuICByZWFkb25seSBkcm9wZG93biQ6IE9ic2VydmFibGU8QUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlPjtcblxuICAvKipcbiAgICogVGhyb3dzIGlmIGludm9rZWQgb3V0c2lkZSBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIEZvciBTU1IgLyBBbmd1bGFyXG4gICAqIFVuaXZlcnNhbCwgZ2F0ZSBjb25zdHJ1Y3Rpb24gd2l0aCBgaXNQbGF0Zm9ybUJyb3dzZXJgLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0czogQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkFJQXV0b2NvbXBsZXRlQ29udHJvbGxlciByZXF1aXJlcyBhIGJyb3dzZXIgZW52aXJvbm1lbnQuIFwiICtcbiAgICAgICAgICBcIkZvciBTU1IgLyBBbmd1bGFyIFVuaXZlcnNhbCwgZ2F0ZSBjb25zdHJ1Y3Rpb24gd2l0aCBpc1BsYXRmb3JtQnJvd3Nlci5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSGVhZGxlc3MgbW9kZSBuZXZlciByZW5kZXJzIHRvIHRoZSBob3N0LCBzbyBhIHRocm93YXdheSBkaXYgaXMgZmluZSDigJRcbiAgICAvLyBpdCdzIHJlcXVpcmVkIGJ5IHRoZSBjb3JlJ3Mgc2lnbmF0dXJlIGZvciBzeW1tZXRyeSB3aXRoIGZ1bGwgbW9kZS5cbiAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgIHRoaXMuY29yZSA9IG5ldyBDb3JlQUlBdXRvY29tcGxldGUoaG9zdCwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHJlbmRlck1vZGU6IFwiaGVhZGxlc3NcIixcbiAgICAgIHNvdXJjZTogb3B0cy5zb3VyY2UgPz8gXCJoZWFkbGVzcy1zZGtcIixcbiAgICAgIC8vIEhlYWRsZXNzIG1vZGUgbmV2ZXIgcmVuZGVycyB0aGUgZHJvcGRvd24gRE9NLCBidXQgdGhlIGtleWJvYXJkXG4gICAgICAvLyBjb250cm9sbGVyIHN0aWxsIHJlYWRzIGBvcHRpb25zUG9zaXRpb25gIHRvIGRlY2lkZSB3aGljaCB2ZXJ0aWNhbFxuICAgICAgLy8gYXJyb3cgb3BlbnMgdGhlIGRyb3Bkb3duIGZyb20gdGhlIGlucHV0LlxuICAgICAgb3B0aW9uc1Bvc2l0aW9uOiBvcHRzLm9wdGlvbnNQb3NpdGlvbiA/PyBcImJlbG93XCIsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJhd1N0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29yZVN0YXRlPih0aGlzLmNvcmUuZ2V0U3RhdGUoKSk7XG4gICAgLy8gUHVzaCB0aGUgc3RvcmUncyAqY3VycmVudCogc3RhdGUsIG5vdCB0aGUgc25hcHNob3QgdGhlIGxpc3RlbmVyIHdhc1xuICAgIC8vIGhhbmRlZC4gVGhlIGNvcmUgbm90aWZpZXMgbGlzdGVuZXJzIHN5bmNocm9ub3VzbHksIGFuZCBzb21lIGFjdGlvbnNcbiAgICAvLyB0cmlnZ2VyIHJlZW50cmFudCBgc3RvcmUuc2V0YCBjYWxscyAoZS5nLiB0eXBpbmcgYSBub24tbWF0Y2hpbmcgY2hhclxuICAgIC8vIGR1cmluZyByZS1lZGl0IG1ha2VzIHRoZSBjb3JlIHN5bmNocm9ub3VzbHkgZXhpdCByZS1lZGl0IGFuZCBraWNrIG9mZiBhXG4gICAgLy8gZmV0Y2gpLlxuICAgIC8vXG4gICAgLy8gVGhlIGNvcmUncyBzdG9yZSB1c2VkIHRvIGRlbGl2ZXIgc3VjaCBhIG5lc3RlZCBzZXQgaW5saW5lIGFuZCB0aGVuXG4gICAgLy8gcmVzdW1lIHRoZSBvdXRlciBsaXN0ZW5lciBsb29wLCBzbyBhIGxpc3RlbmVyIGNvdWxkIGJlIGhhbmRlZCBhbiBvbGRlclxuICAgIC8vIHN0YXRlIChzdGlsbCBpbiByZS1lZGl0KSAqYWZ0ZXIqIGEgbmV3ZXIgb25lIChyZS1lZGl0IGV4aXRlZCkg4oCUIHdoaWNoXG4gICAgLy8gcmVzdXJyZWN0ZWQgYSBzdGFsZSBgZWRpdGluZ1BhcmFtYCBhbmQgcmV0cmlnZ2VyZWQgdGhlIGVkaXRvcidzIHJlLWVkaXRcbiAgICAvLyBjYXJldC1wYXJrLCB5YW5raW5nIHRoZSBjYXJldCBiYWNrIHRvIHdoZXJlIHJlLWVkaXRpbmcgc3RhcnRlZC4gVGhlXG4gICAgLy8gc3RvcmUgbm93IHF1ZXVlcyBub3RpZmljYXRpb25zIGFuZCBkcmFpbnMgdGhlbSBpbiBvcmRlciwgc28gdGhhdFxuICAgIC8vIG91dC1vZi1vcmRlciBkZWxpdmVyeSBjYW4gbm8gbG9uZ2VyIGhhcHBlbiBhdCB0aGUgc291cmNlLlxuICAgIC8vXG4gICAgLy8gUmVhZGluZyBgZ2V0U3RhdGUoKWAgYXQgZW1pc3Npb24gdGltZSBpcyBrZXB0IGFzIGJlbHQtYW5kLWJyYWNlczogaXRcbiAgICAvLyBjb3N0cyBub3RoaW5nIChkaXN0aW5jdFVudGlsQ2hhbmdlZCBkb3duc3RyZWFtIGRyb3BzIHRoZSBkdXBsaWNhdGVcbiAgICAvLyBlbWlzc2lvbnMpIGFuZCBrZWVwcyB0aGlzIGJyaWRnZSBjb3JyZWN0IGZvciBhbnkgZnV0dXJlIGNvbnN1bWVyIHRoYXRcbiAgICAvLyBlbWl0cyBtaWQtY2FzY2FkZS4gUmVhY3QgbmVlZHMgbmVpdGhlciwgc2luY2UgaXQgYmF0Y2hlcyByZW5kZXJzIGFuZFxuICAgIC8vIGdhdGVzIGl0cyBjYXJldCBlZmZlY3RzIG9uIGRlcGVuZGVuY2llcy5cbiAgICB0aGlzLnVuc3Vic2NyaWJlQ29yZSA9IHRoaXMuY29yZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzRGVzdHJveWVkKSB0aGlzLnJhd1N0YXRlJC5uZXh0KHRoaXMuY29yZS5nZXRTdGF0ZSgpKTtcbiAgICB9KTtcblxuICAgIC8vID09PSBQZXItZmllbGQgb2JzZXJ2YWJsZXMgPT09XG4gICAgLy8gQXJyYXktdmFsdWVkIGZpZWxkcyB1c2Ugc2hhbGxvdyBlcXVhbGl0eS4gVGhlIHZhbmlsbGEgc3RvcmUgc3ByZWFkcyBvblxuICAgIC8vIGV2ZXJ5IHdyaXRlIChgc3RvcmUuc2V0KHsgY29tcGxldGVkUGFyYW1zOiBbLi4uXSB9KWApLCBzbyByZWZlcmVuY2VcbiAgICAvLyBlcXVhbGl0eSB3b3VsZCByZS1maXJlIGRvd25zdHJlYW0gc3Vic2NyaWJlcnMgb24gZXZlcnkgc3RhdGUgdGljayBldmVuXG4gICAgLy8gd2hlbiB0aGUgYXJyYXkncyBjb250ZW50cyBhcmUgdW5jaGFuZ2VkLiBUaGUgb3RoZXIgZmllbGRzIGFyZVxuICAgIC8vIHByaW1pdGl2ZXMgb3Igc3RhYmxlIG9iamVjdCByZWZlcmVuY2VzLCBzbyBkZWZhdWx0IGlkZW50aXR5IGVxdWFsaXR5XG4gICAgLy8gd29ya3MgZmluZS5cbiAgICB0aGlzLnRleHQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnRleHQpO1xuICAgIHRoaXMuY29tcGxldGVkUGFyYW1zJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jb21wbGV0ZWRQYXJhbXMsIGFyckVxKTtcbiAgICB0aGlzLnNraXBwZWRQYXJhbXMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnNraXBwZWRQYXJhbXMsIGFyckVxKTtcbiAgICB0aGlzLmlkZW50aWZpZWRQYXJhbXMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlkZW50aWZpZWRQYXJhbXMsIGFyckVxKTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25QaWxscyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zLCBhcnJFcSk7XG4gICAgdGhpcy5zZWdtZW50cyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuc2VnbWVudHMsIGFyckVxKTtcbiAgICB0aGlzLm5ld1BhcmFtSWQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLm5ld1BhcmFtSWQpO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnN1Z2dlc3Rpb25zLCBhcnJFcSk7XG4gICAgdGhpcy5wcm9kdWN0cyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMucHJvZHVjdHMsIGFyckVxKTtcbiAgICB0aGlzLmN1c3RvbUZpZWxkcyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuY3VzdG9tRmllbGRzKTtcbiAgICB0aGlzLmFjdGl2ZUluZGV4JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5hY3RpdmVEcm9wZG93bkluZGV4KTtcbiAgICB0aGlzLmlzTG9hZGluZyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgY29tcHV0ZVVpTG9hZGluZyk7XG4gICAgdGhpcy5pc1JlYWR5JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc1JlYWR5KTtcbiAgICB0aGlzLmlzRm9jdXNlZCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNGb2N1c2VkKTtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc0Ryb3Bkb3duT3Blbik7XG4gICAgdGhpcy5pc0FjdGl2ZVBpbGxTZWxlY3RlZCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaXNBY3RpdmVQaWxsU2VsZWN0ZWQpO1xuICAgIHRoaXMucGxhY2Vob2xkZXJUZXh0JCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5wbGFjZWhvbGRlclRleHQpO1xuICAgIHRoaXMuZXJyb3IkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVycm9yKTtcbiAgICB0aGlzLmVkaXRpbmdQYXJhbSQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuZWRpdGluZ1BhcmFtKTtcbiAgICB0aGlzLmVkaXRpbmdBbmNob3IkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmVkaXRpbmdBbmNob3IpO1xuICAgIHRoaXMuY2FyZXRPZmZzZXQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmNhcmV0T2Zmc2V0KTtcblxuICAgIC8vID09PSBDb21wb3NpdGUgb2JzZXJ2YWJsZXMgPT09XG4gICAgLy8gUHJvamVjdCBkaXJlY3RseSBvZmYgYHJhd1N0YXRlJGAgd2l0aCBhIHNpbmdsZSBtYXAoKSBzbyBlYWNoIHN0b3JlXG4gICAgLy8gdGljayBwcm9kdWNlcyBleGFjdGx5IE9ORSBjb2hlcmVudCBzdGF0ZSQgZW1pc3Npb24uIFVzaW5nXG4gICAgLy8gYGNvbWJpbmVMYXRlc3RgIG92ZXIgdGhlIHBlci1maWVsZCBvYnNlcnZhYmxlcyBoZXJlIHdvdWxkIGZpcmUgb25lXG4gICAgLy8gZW1pc3Npb24gcGVyIGlubmVyLXNvdXJjZSB0aWNrICh1cCB0byBOIHBlciBzdG9yZSB1cGRhdGUpLCBhbmQgdGhlXG4gICAgLy8gZWRpdG9yLWhvc3QgZGlyZWN0aXZlJ3MgcG9zdC1wcm9tb3RlIHJlZm9jdXMgd291bGQgcnVuIGFnYWluc3QgYW5cbiAgICAvLyBpbnRlcm1lZGlhdGUgc3RhdGUgd2hlcmUgYG5ld1BhcmFtSWRgIHdhcyBzZXQgYnV0IGBzZWdtZW50c2AgL1xuICAgIC8vIGBjYXJldE9mZnNldGAgc3RpbGwgaGVsZCB0aGVpciBvbGQgdmFsdWVzIOKAlCBsZWF2aW5nIHRoZSBjYXJldCBzdHVja1xuICAgIC8vIGF0IHRoZSBwcmUtY2xpY2sgcG9zaXRpb24uXG4gICAgdGhpcy5zdGF0ZSQgPSB0aGlzLnJhd1N0YXRlJC5waXBlKFxuICAgICAgbWFwKGNvbXB1dGVTdGF0ZSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLm9wdGlvbnNQb3NpdGlvbiQubmV4dChvcHRzLm9wdGlvbnNQb3NpdGlvbiA/PyBcImJlbG93XCIpO1xuICAgIHRoaXMuZHJvcGRvd24kID0gY29tYmluZUxhdGVzdChbdGhpcy5yYXdTdGF0ZSQsIHRoaXMub3B0aW9uc1Bvc2l0aW9uJF0pLnBpcGUoXG4gICAgICBtYXAoKFtzLCBvcHRpb25zUG9zaXRpb25dKSA9PiBjb21wdXRlRHJvcGRvd24ocywgb3B0aW9uc1Bvc2l0aW9uKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICAvLyA9PT0gUmVhZC1vbmx5IGFjY2Vzc29ycyA9PT1cblxuICAvKiogU3RhYmxlIEFSSUEgbGlzdGJveCBJRCBmb3IgdGhlIGRyb3Bkb3duLiBQYXNzIHRvIGA8dGV4dGFyZWEgYXJpYS1jb250cm9scz1cIi4uLlwiPmAuICovXG4gIGdldCBsaXN0Ym94SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb3JlLmxpc3Rib3hJZDtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIGBkZXN0cm95KClgIGhhcyBiZWVuIGNhbGxlZC4gQWZ0ZXIgZGVzdHJ1Y3Rpb24gYWxsIGFjdGlvbiBtZXRob2RzIG5vLW9wLiAqL1xuICBnZXQgZGVzdHJveWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzRGVzdHJveWVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzIHNuYXBzaG90IG9mIHRoZSBjb250cm9sbGVyJ3MgY3VycmVudCBwdWJsaWMgc3RhdGUuIE1pcnJvcnNcbiAgICogdGhlIGxhdGVzdCBlbWlzc2lvbiBvZiBgc3RhdGUkYC4gVXNlZnVsIGluIGNhbGxiYWNrcyB3aGVyZSB5b3UgY2FuJ3RcbiAgICogYHN1YnNjcmliZWAgKGUuZy4gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXIpLlxuICAgKi9cbiAgZ2V0U3RhdGUoKTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUge1xuICAgIHJldHVybiBjb21wdXRlU3RhdGUodGhpcy5yYXdTdGF0ZSQudmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJ1Y3R1cmVkIHF1ZXJ5IGFzIHRoZSBTREsgdW5kZXJzdGFuZHMgaXQgcmlnaHQgbm93IOKAlCB0aGUgc2FtZVxuICAgKiBvYmplY3QgYG9uUmVzdWx0YCBkZWxpdmVycyBhZnRlciBlYWNoIHJlc3BvbnNlIGFuZCBgb25TdWJtaXRgIGRlbGl2ZXJzXG4gICAqIG9uIHN1Ym1pdC4gUmVhZCBpdCBvbiBkZW1hbmQgZnJvbSBhIHBsYWNlIHRoYXQgaGFzIG5vIGV2ZW50IGhhbmR5IChhXG4gICAqIGN1c3RvbSBzdWJtaXQgYnV0dG9uLCBhIFwic2F2ZSBkcmFmdFwiIGFjdGlvbikuXG4gICAqL1xuICBnZXRSZXN1bHQoKTogQXV0b2NvbXBsZXRlUmVzdWx0IHtcbiAgICByZXR1cm4gdGhpcy5jb3JlLmdldFJlc3VsdCgpO1xuICB9XG5cbiAgLy8gPT09IEFjdGlvbiBtZXRob2RzIChwYXNzLXRocm91Z2ggdG8gdGhlIGNvcmUpID09PVxuICAvL1xuICAvLyBFdmVyeSBhY3Rpb24gbWV0aG9kIGJlZ2lucyB3aXRoIGFuIGBpc0Rlc3Ryb3llZGAgZ3VhcmQgc28gdGhhdCBjYWxsZXJzXG4gIC8vIHdobyBob2xkIGEgc3RhbGUgcmVmZXJlbmNlIGFmdGVyIGBkZXN0cm95KClgIGRvbid0IGFjY2lkZW50YWxseSB0cmlnZ2VyXG4gIC8vIHdvcmsgb24gYSB0b3JuLWRvd24gY29yZS4gVGhlIHZhbmlsbGEgY29yZSBkb2VzIG5vdCBnYXRlIGl0cyBvd24gbWV0aG9kc1xuICAvLyBwb3N0LWRpc3Bvc2Ug4oCUIGByZXNldCgpYCwgYGhhbmRsZVRleHRDaGFuZ2UoKWAsIGFuZCBmcmllbmRzIHdvdWxkIHN0aWxsXG4gIC8vIHNjaGVkdWxlIGZldGNoZXMgb3IgZmlyZSBIVFRQIHJlcXVlc3RzIGFnYWluc3QgYW4gYWJvcnRlZCBjb250cm9sbGVyLFxuICAvLyBhbmQgdGhlIHJlc3BvbnNlcyB3b3VsZCBoYXZlIG5vd2hlcmUgdG8gc3VyZmFjZSAocmF3U3RhdGUkIGlzIGFscmVhZHlcbiAgLy8gY29tcGxldGUpLiBUaGUgZ3VhcmQgbWFrZXMgdGhlIEpTRG9jLXByb21pc2VkIFwibm8tb3Agc2lsZW50bHlcIlxuICAvLyBzZW1hbnRpY3MgYWN0dWFsbHkgdHJ1ZS5cblxuICAvKiogQ2xlYXIgYWxsIHN0YXRlLCByb3RhdGUgYHNlc3Npb25faWRgLCBhbmQgcmUtZmV0Y2guIENhbGwgYWZ0ZXIgc3VibWl0LiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgYSBzdWJtaXQgaW4gdGVsZW1ldHJ5LiBFbnRlciBpcyByZWNvcmRlZCBieSB0aGUgU0RLOyBjYWxsIHRoaXNcbiAgICogZnJvbSBhIHN1Ym1pdCBidXR0b24geW91IHJlbmRlciwgc28gZWFjaCBzdWJtaXQgaXMgY291bnRlZCBvbmNlLlxuICAgKi9cbiAgcmVjb3JkU3VibWl0KHJlc3VsdDogQXV0b2NvbXBsZXRlUmVzdWx0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUucmVjb3JkU3VibWl0KHJlc3VsdCk7XG4gIH1cblxuICAvKiogUGljayBhIGRyb3Bkb3duIG9wdGlvbiAob3IgcmVwbGFjZSB0aGUgcmUtZWRpdGVkIHBhcmFtIGlmIGluIHJlLWVkaXQgbW9kZSkuICovXG4gIHNlbGVjdE9wdGlvbihvcHRpb246IFN1Z2dlc3Rpb25PcHRpb24pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZWxlY3RPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbm5vdW5jZSBhIHByb2R1Y3Qgc2VsZWN0aW9uIOKAlCBmaXJlcyB0aGUgYG9uUHJvZHVjdFNlbGVjdGAgY2FsbGJhY2sgdGhlXG4gICAqIGNvbnRyb2xsZXIgd2FzIGNvbnN0cnVjdGVkIHdpdGguIGA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPmAgY2FsbHMgdGhpc1xuICAgKiBmb3IgeW91OyBjb25zdW1lcnMgcmVuZGVyaW5nIHRoZWlyIG93biBzdHJpcCBjYWxsIGl0IHRoZW1zZWx2ZXMuXG4gICAqXG4gICAqIEVtaXR0aW5nIGlzIHRoZSB3aG9sZSBiZWhhdmlvdXI6IHRoZSBTREsgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IG5hdmlnYXRlIHRvXG4gICAqIGBwcm9kdWN0LnVybGAsIGJlY2F1c2Ugb25seSB0aGUgaW50ZWdyYXRpb24ga25vd3Mgd2hldGhlciBhIHNlbGVjdGlvblxuICAgKiBtZWFucyBcIm9wZW4gdGhlIFBEUFwiLCBcImFkZCB0byBjYXJ0XCIsIG9yIFwiZmlsbCB0aGUgaW5wdXRcIi5cbiAgICovXG4gIHNlbGVjdFByb2R1Y3QocHJvZHVjdDogUHJvZHVjdCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNlbGVjdFByb2R1Y3QocHJvZHVjdCk7XG4gIH1cblxuICAvKiogUHJvbW90ZSB0aGUgcGlsbCBhdCBgaW5kZXhgIHRvIGFjdGl2ZSAoZnJvbnQgb2YgdGhlIGxpc3QpLiAqL1xuICBzZXRBY3RpdmVQaWxsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zZXRBY3RpdmVQaWxsKGluZGV4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTa2lwIHRoZSBhY3RpdmUgcGlsbCDigJQgc2FtZSBhY3Rpb24gYXMgcHJlc3Npbmcg4oaSIGF0IHRoZSBlbmQgb2YgdGhlIGlucHV0LlxuICAgKiBUaGUgZHJvcGRvd24ncyBza2lwIGJ1dHRvbiBjYWxscyB0aGlzOyBjb25zdW1lcnMgcmVuZGVyaW5nIHRoZWlyIG93biBza2lwXG4gICAqIGFmZm9yZGFuY2UgY2FsbCBpdCBkaXJlY3RseS4gVGhlIHNraXBwZWQgc3VnZ2VzdGlvbiBqb2lucyBgc2tpcHBlZFBhcmFtcyRgLlxuICAgKi9cbiAgc2tpcEFjdGl2ZVBpbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2tpcEFjdGl2ZVBpbGwoKTtcbiAgfVxuXG4gIC8qKiBEcm9wIHRoZSBsYXN0IGNvbXBsZXRlZCBwYXJhbSdzIFwiY29tcGxldGVkXCIgc3RhdHVzLiBUZXh0IHN0YXlzIGFzIHBsYWluIHRleHQuICovXG4gIHJlbW92ZUxhc3RQYXJhbSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5yZW1vdmVMYXN0UGFyYW0oKTtcbiAgfVxuXG4gIC8qKiBDbGVhciB0aGUgc2hpbW1lciBhbmltYXRpb24gc3RhdGUgZm9yIHRoZSBtb3N0LXJlY2VudGx5LWFkZGVkIHBhcmFtLiAqL1xuICBjbGVhck5ld1BhcmFtSWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuY2xlYXJOZXdQYXJhbUlkKCk7XG4gIH1cblxuICAvKiogQ29udHJvbGxlZC1tb2RlIHNldHRlciBmb3IgZWRpdG9yIHRleHQuICovXG4gIHNldFZhbHVlKHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldFZhbHVlKHRleHQpO1xuICB9XG5cbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBzZXR0ZXIgZm9yIGNvbXBsZXRlZCBwYXJhbXMuICovXG4gIHNldENvbXBsZXRlZFBhcmFtcyhwYXJhbXM6IENvbXBsZXRlZFBhcmFtU3RhdGVbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldENvbXBsZXRlZFBhcmFtcyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgcGxhaW4tdGV4dCBpbnB1dCBmcm9tIHRoZSBjb25zdW1lcidzIGA8dGV4dGFyZWE+YCB0byB0aGUgY29yZS4gKi9cbiAgaGFuZGxlVGV4dENoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlVGV4dENoYW5nZSh2YWx1ZSk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBrZXlib2FyZCBldmVudHMgZnJvbSB0aGUgY29uc3VtZXIncyBgPHRleHRhcmVhPmAgdG8gdGhlIGNvcmUuICovXG4gIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVLZXlEb3duKGV2ZW50KTtcbiAgfVxuXG4gIC8qKiBOb3RpZnkgdGhlIGNvcmUgb2YgZm9jdXMgc3RhdGUuICovXG4gIHNldEZvY3VzZWQoZm9jdXNlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEZvY3VzZWQoZm9jdXNlZCk7XG4gIH1cblxuICAvKiogRW50ZXIgcmUtZWRpdCBtb2RlIGZvciB0aGUgYm9sZCBwYXJhbSB3aXRoIHRoZSBnaXZlbiBpZC4gKi9cbiAgc3RhcnRFZGl0aW5nUGFyYW0ocGFyYW1JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc3RhcnRFZGl0aW5nUGFyYW0ocGFyYW1JZCk7XG4gIH1cblxuICAvKiogRXhpdCByZS1lZGl0IG1vZGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYm9sZCBwYXJhbS4gKi9cbiAgZXhpdEVkaXRNb2RlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmV4aXRFZGl0TW9kZSgpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgcG9zdC1pbnB1dCBjYXJldCBwb3NpdGlvbiAoZXh0ZW5kcyB0aGUgZWRpdCB0YWlsKS4gKi9cbiAgaGFuZGxlQ2FyZXRBZnRlcklucHV0KG9mZnNldDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUNhcmV0QWZ0ZXJJbnB1dChvZmZzZXQpO1xuICB9XG5cbiAgLyoqIEZvcndhcmQgc2VsZWN0aW9uLW9ubHkgY2FyZXQgbW92ZXMgKG1heSBleGl0IHJlLWVkaXQpLiAqL1xuICBoYW5kbGVDYXJldE1vdmUob2Zmc2V0OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlQ2FyZXRNb3ZlKG9mZnNldCk7XG4gIH1cblxuICAvKiogUmVwbGFjZSB0aGUgYm9sZCBwYXJhbSBiZWluZyByZS1lZGl0ZWQuIFJldHVybnMgdHJ1ZSB3aGVuIGFwcGxpZWQuICovXG4gIHJlcGxhY2VFZGl0aW5nUmFuZ2UocmVwbGFjZW1lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuY29yZS5yZXBsYWNlRWRpdGluZ1JhbmdlKHJlcGxhY2VtZW50KTtcbiAgfVxuXG4gIC8qKiBTZXQgdGhlIGhpZ2hsaWdodGVkIG9wdGlvbiBpbmRleCAodHlwaWNhbGx5IGRyaXZlbiBieSBob3ZlcikuICovXG4gIHNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEFjdGl2ZURyb3Bkb3duSW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBwb2ludGVyIGxlZnQgb3B0aW9uIGBpbmRleGA6IGNsZWFyIHRoZSBoaWdobGlnaHQgaWYgaXQgaXMgc3RpbGwgb24gaXQsXG4gICAqIHNvIEVudGVyIGFmdGVyd2FyZHMgc3VibWl0cyBpbnN0ZWFkIG9mIHBpY2tpbmcgYW4gb3B0aW9uIHRoZSBwb2ludGVyIGlzIG5vXG4gICAqIGxvbmdlciBvbi4gQSBoaWdobGlnaHQgdGhlIGtleWJvYXJkIGhhcyBzaW5jZSBtb3ZlZCBpcyBsZWZ0IGFsb25lLlxuICAgKi9cbiAgY2xlYXJIaWdobGlnaHQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmNsZWFySGlnaGxpZ2h0KGluZGV4KTtcbiAgfVxuXG4gIC8qKiBQYWdlIHRoZSBkYXRlcGlja2VyIGJhY2sgb25lIG1vbnRoLiBOby1vcCB1bmxlc3MgYSBkYXRlIHBpbGwgaXMgYWN0aXZlLiAqL1xuICBzaG93UHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zaG93UHJldmlvdXNNb250aCgpO1xuICB9XG5cbiAgLyoqIFBhZ2UgdGhlIGRhdGVwaWNrZXIgZm9yd2FyZCBvbmUgbW9udGguIE5vLW9wIHVubGVzcyBhIGRhdGUgcGlsbCBpcyBhY3RpdmUuICovXG4gIHNob3dOZXh0TW9udGgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2hvd05leHRNb250aCgpO1xuICB9XG5cbiAgLy8gPT09IExpZmVjeWNsZSA9PT1cblxuICAvKipcbiAgICogQXBwbHkgcnVudGltZSBjaGFuZ2VzIHRvIGEgc3Vic2V0IG9mIG9wdGlvbnMuIEV2ZW50IGNhbGxiYWNrc1xuICAgKiAoYG9uU3VibWl0YCwgYG9uUmVzdWx0YCwgYG9uRXJyb3JgLCBldGMuKSBjYW5ub3QgYmUgc3dhcHBlZCB0aGlzIHdheSDigJQgdGhleSBhcmVcbiAgICogcmVnaXN0ZXJlZCBvbmNlIGF0IGNvbnN0cnVjdGlvbiAobWF0Y2hlcyB0aGUgUmVhY3QgaG9vaydzIGRlc2lnbikuIEZvclxuICAgKiBkeW5hbWljIGV2ZW50IHJlYWN0aXZpdHksIHN1YnNjcmliZSB0byB0aGUgY29ycmVzcG9uZGluZyBvYnNlcnZhYmxlXG4gICAqIChlLmcuIGB0ZXh0JGAgaW5zdGVhZCBvZiBgb25DaGFuZ2VgKS5cbiAgICovXG4gIHVwZGF0ZShvcHRzOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJVcGRhdGUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS51cGRhdGUob3B0cyk7XG4gICAgaWYgKG9wdHMub3B0aW9uc1Bvc2l0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMub3B0aW9uc1Bvc2l0aW9uJC5uZXh0KG9wdHMub3B0aW9uc1Bvc2l0aW9uKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVsZWFzZSBhbGwgcmVzb3VyY2VzIOKAlCB1bnN1YnNjcmliZXMgZnJvbSB0aGUgY29yZSwgZGVzdHJveXMgdGhlIGNvcmUsXG4gICAqIGFuZCBjb21wbGV0ZXMgdGhlIGludGVybmFsIHN0YXRlIHN1YmplY3QuIFNhZmUgdG8gY2FsbCBtdWx0aXBsZSB0aW1lcy5cbiAgICogQWZ0ZXIgZGVzdHJ1Y3Rpb24sIGFjdGlvbiBtZXRob2RzIG5vLW9wIHNpbGVudGx5LlxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgIHRoaXMudW5zdWJzY3JpYmVDb3JlKCk7XG4gICAgdGhpcy5jb3JlLmRlc3Ryb3koKTtcbiAgICB0aGlzLnJhd1N0YXRlJC5jb21wbGV0ZSgpO1xuICB9XG59XG5cbi8vID09PT09IFB1cmUgaGVscGVycyDigJQgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBzdXJmYWNlID09PT09XG5cbi8qKlxuICogU2hhbGxvdyBhcnJheSBlcXVhbGl0eS4gVGhlIHZhbmlsbGEgc3RvcmUgcmVhc3NpZ25zIGFycmF5IGZpZWxkcyBvbiBldmVyeVxuICogd3JpdGUgKGBzdG9yZS5zZXQoeyBjb21wbGV0ZWRQYXJhbXM6IFsuLi5wcmV2LCB4XSB9KWApLCBzbyByZWZlcmVuY2VcbiAqIGVxdWFsaXR5IGFsb25lIHdvdWxkIHJlLWVtaXQgZG93bnN0cmVhbSBldmVuIHdoZW4gdGhlIGNvbnRlbnRzIGFyZVxuICogaWRlbnRpY2FsLiBVc2VkIGZvciBgY29tcGxldGVkUGFyYW1zJGAsIGBzdWdnZXN0aW9ucyRgLCBgc3VnZ2VzdGlvblBpbGxzJGAsXG4gKiBhbmQgYHNlZ21lbnRzJGAuXG4gKi9cbmZ1bmN0aW9uIGFyckVxPFQ+KGE6IHJlYWRvbmx5IFRbXSwgYjogcmVhZG9ubHkgVFtdKTogYm9vbGVhbiB7XG4gIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKiogVUktdmlzaWJsZSBsb2FkaW5nIOKAlCB0aGUgY29yZSdzIGBkcm9wZG93bkxvYWRpbmdgIChzZWUgaXRzIGRvY3MpLiAqL1xuZnVuY3Rpb24gY29tcHV0ZVVpTG9hZGluZyhzOiBDb3JlU3RhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIHMuZHJvcGRvd25Mb2FkaW5nO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3RhdGUoczogQ29yZVN0YXRlKTogQUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGUge1xuICByZXR1cm4ge1xuICAgIHRleHQ6IHMudGV4dCxcbiAgICBjb21wbGV0ZWRQYXJhbXM6IHMuY29tcGxldGVkUGFyYW1zLFxuICAgIHNraXBwZWRQYXJhbXM6IHMuc2tpcHBlZFBhcmFtcyxcbiAgICBpZGVudGlmaWVkUGFyYW1zOiBzLmlkZW50aWZpZWRQYXJhbXMsXG4gICAgc3VnZ2VzdGlvblBpbGxzOiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucyxcbiAgICBzZWdtZW50czogcy5zZWdtZW50cyxcbiAgICBuZXdQYXJhbUlkOiBzLm5ld1BhcmFtSWQsXG4gICAgc3VnZ2VzdGlvbnM6IHMuc3VnZ2VzdGlvbnMsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgY3VzdG9tRmllbGRzOiBzLmN1c3RvbUZpZWxkcyxcbiAgICBhY3RpdmVJbmRleDogcy5hY3RpdmVEcm9wZG93bkluZGV4LFxuICAgIGlzTG9hZGluZzogY29tcHV0ZVVpTG9hZGluZyhzKSxcbiAgICBpc1JlYWR5OiBzLmlzUmVhZHksXG4gICAgaXNGb2N1c2VkOiBzLmlzRm9jdXNlZCxcbiAgICBpc0Ryb3Bkb3duT3Blbjogcy5pc0Ryb3Bkb3duT3BlbixcbiAgICBwbGFjZWhvbGRlclRleHQ6IHMucGxhY2Vob2xkZXJUZXh0LFxuICAgIGVycm9yOiBzLmVycm9yLFxuICAgIGVkaXRpbmdQYXJhbTogcy5lZGl0aW5nUGFyYW0sXG4gICAgZWRpdGluZ0lkZW50aWZpZWQ6IHMuZWRpdGluZ0lkZW50aWZpZWQsXG4gICAgZWRpdGluZ0FuY2hvcjogcy5lZGl0aW5nQW5jaG9yLFxuICAgIGNhcmV0T2Zmc2V0OiBzLmNhcmV0T2Zmc2V0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRHJvcGRvd24oXG4gIHM6IENvcmVTdGF0ZSxcbiAgb3B0aW9uc1Bvc2l0aW9uOiBcImFib3ZlXCIgfCBcImJlbG93XCIsXG4pOiBBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGUge1xuICBjb25zdCBlZGl0aW5nUGFyYW0gPSBzLmVkaXRpbmdQYXJhbTtcbiAgY29uc3QgZWRpdGluZ0lkZW50aWZpZWQgPSBzLmVkaXRpbmdJZGVudGlmaWVkO1xuICBjb25zdCBkYXRlU2VsZWN0aW9uID0gZGF0ZVNlbGVjdGlvbkZvcihzKTtcbiAgY29uc3QgYWN0aXZlU3VnZ2VzdGlvbiA9IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zWzBdO1xuICBjb25zdCBkcm9wZG93blBpbGw6IFN1Z2dlc3Rpb24gfCBudWxsID0gZWRpdGluZ1BhcmFtXG4gICAgPyB7XG4gICAgICAgIHR5cGU6IGVkaXRpbmdQYXJhbS5zdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgdGV4dDogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25QbGFjZWhvbGRlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGVkaXRpbmdQYXJhbS5vcHRpb25zLFxuICAgICAgfVxuICAgIDogZWRpdGluZ0lkZW50aWZpZWRcbiAgICAgID8gLy8gQW5zd2VyaW5nIGEgc3BhbiB0aGUgdXNlciB3cm90ZSB0aGVtc2VsdmVzOiB0aGUgcGlsbCBuYW1lcyB0aGVcbiAgICAgICAgLy8gcGFyYW1ldGVyIHRoZSBzZXJ2ZXIgbWF0Y2hlZCBpdCB0bywgc28gdGhlIGNhbGVuZGFyIGlzbid0IHVubGFiZWxsZWQuXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBlZGl0aW5nSWRlbnRpZmllZC50eXBlLFxuICAgICAgICAgIHRleHQ6IGlkZW50aWZpZWRQYXJhbUxhYmVsKGVkaXRpbmdJZGVudGlmaWVkLnR5cGUpLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIGNvbnN0IGRyb3Bkb3duQWN0aXZlUGlsbCA9IHMuZHJvcGRvd25TdWdnZXN0aW9uID8/IGRyb3Bkb3duUGlsbCA/PyBhY3RpdmVTdWdnZXN0aW9uO1xuICBjb25zdCBkcm9wZG93blBpbGxzID0gZHJvcGRvd25QaWxsID8gW2Ryb3Bkb3duUGlsbF0gOiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucztcbiAgcmV0dXJuIHtcbiAgICBzdWdnZXN0aW9uczogZHJvcGRvd25BY3RpdmVQaWxsID8gW3sgLi4uZHJvcGRvd25BY3RpdmVQaWxsLCBvcHRpb25zOiBzLmRyb3Bkb3duT3B0aW9ucyB9XSA6IFtdLFxuICAgIGFjdGl2ZUluZGV4OiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgsXG4gICAgaXNPcGVuOiBzLmlzRHJvcGRvd25PcGVuLFxuICAgIHBpbGxzOiBkcm9wZG93blBpbGxzLFxuICAgIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBzLmlzQWN0aXZlUGlsbFNlbGVjdGVkLFxuICAgIGlzTG9hZGluZzogY29tcHV0ZVVpTG9hZGluZyhzKSxcbiAgICBza2VsZXRvbkV4aXRpbmc6IHMuc2tlbGV0b25FeGl0aW5nLFxuICAgIGlzSW5wdXRFbXB0eTogcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgaXNFZGl0aW5nOiBCb29sZWFuKGVkaXRpbmdQYXJhbSkgfHwgQm9vbGVhbihlZGl0aW5nSWRlbnRpZmllZCksXG4gICAgaW5TZWxlY3Rpb25BbmltYXRpb246IHMuaW5TZWxlY3Rpb25BbmltYXRpb24sXG4gICAgLy8gRGF0ZXBpY2tlci4gYHMuZmlsdGVyZWRPcHRpb25zYCBhYm92ZSBhbHJlYWR5IGNhcnJpZXMgdGhlIHZpc2libGVcbiAgICAvLyBtb250aCdzIGNlbGxzIHJhdGhlciB0aGFuIHRoZSBzdWdnZXN0aW9uJ3Mgb3duIG9wdGlvbnMgd2hlbiB0aGlzIGlzXG4gICAgLy8gXCJkYXRlXCIg4oCUIHRoZSBjb3JlIHN3YXBwZWQgdGhlbSBpbiBpdHMgZGVyaXZlIGxheWVyLCBzbyB0aGUgZHJvcGRvd24gb25seVxuICAgIC8vIGhhcyB0byBrbm93IHdoaWNoIGJvZHkgdG8gZHJhdy5cbiAgICBmb3JtYXRUeXBlOiBzLmFjdGl2ZUZvcm1hdFR5cGUsXG4gICAgZGF0ZVZpZXc6IHMuZGF0ZVZpZXcsXG4gICAgc2VsZWN0ZWREYXRlSXNvOiBkYXRlU2VsZWN0aW9uLnNlbGVjdGVkSXNvLFxuICAgIHNlbGVjdGVkRGF0ZVJhbmdlOiBkYXRlU2VsZWN0aW9uLnNlbGVjdGVkUmFuZ2UsXG4gICAgZGF0ZVJhbmdlU3RhcnQ6IGRhdGVTZWxlY3Rpb24ucmFuZ2VTdGFydCxcbiAgICBvcHRpb25zUG9zaXRpb24sXG4gIH07XG59XG4iXX0=
422
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLGNBQWMsSUFBSSxrQkFBa0IsRUFHcEMsZ0JBQWdCLEVBRWhCLG9CQUFvQixHQU1yQixNQUFNLHFDQUFxQyxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBbUIsV0FBVyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBT3pGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFPLHdCQUF3QjtJQW1HbkM7OztPQUdHO0lBQ0gsWUFBWSxPQUF3QyxFQUFFO1FBcEd0RCw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLG1FQUFtRTtRQUNsRCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBb0IsT0FBTyxDQUFDLENBQUM7UUFFNUUsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFnRzFCLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFO1lBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJEO2dCQUN6RCx3RUFBd0UsQ0FDM0UsQ0FBQztTQUNIO1FBRUQsd0VBQXdFO1FBQ3hFLHFFQUFxRTtRQUNyRSxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7WUFDdkMsR0FBRyxJQUFJO1lBQ1AsVUFBVSxFQUFFLFVBQVU7WUFDdEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLElBQUksY0FBYztZQUNyQyxpRUFBaUU7WUFDakUsb0VBQW9FO1lBQ3BFLDJD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LFdBQVc7UUFDMUMsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLGFBQWE7UUFDOUMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxVQUFVO1FBQ3hDLGVBQWU7S0FDaEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIEF1dG9jb21wbGV0ZVJlc3VsdCxcbiAgdHlwZSBDb21wbGV0ZWRQYXJhbVN0YXRlLFxuICBBSUF1dG9jb21wbGV0ZSBhcyBDb3JlQUlBdXRvY29tcGxldGUsXG4gIHR5cGUgQ29yZVN0YXRlLFxuICB0eXBlIEN1c3RvbUZpZWxkc1JlcG9ydCxcbiAgZGF0ZVNlbGVjdGlvbkZvcixcbiAgdHlwZSBJZGVudGlmaWVkUGFyYW1TdGF0ZSxcbiAgaWRlbnRpZmllZFBhcmFtTGFiZWwsXG4gIHR5cGUgUHJvZHVjdCxcbiAgdHlwZSBTZWdtZW50LFxuICB0eXBlIFNraXBwZWRQYXJhbVN0YXRlLFxuICB0eXBlIFN1Z2dlc3Rpb24sXG4gIHR5cGUgU3VnZ2VzdGlvbk9wdGlvbixcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgdHlwZSBPYnNlcnZhYmxlLCBzaGFyZVJlcGxheSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMsXG4gIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlLFxuICBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJVcGRhdGUsXG4gIEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZSxcbn0gZnJvbSBcIi4uL3NoYXJlZC90eXBlc1wiO1xuaW1wb3J0IHsgZGVyaXZlRmllbGQgfSBmcm9tIFwiLi9vYnNlcnZhYmxlc1wiO1xuXG4vKipcbiAqIFRpZXIgMiBsb2dpYyBzdXJmYWNlIGZvciBgQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLWFuZ3VsYXJgIOKAlCB0aGUgQW5ndWxhclxuICogZXF1aXZhbGVudCBvZiBSZWFjdCdzIGB1c2VBSUF1dG9jb21wbGV0ZSgpYCBob29rLiBXcmFwcyBhIGhlYWRsZXNzXG4gKiBgQG1hZ2ljeC1lbmcvYWktYXV0b2NvbXBsZXRlLXZhbmlsbGFgIGNvcmUgYW5kIGV4cG9zZXMgaXRzIHN0YXRlIGFzIFJ4SlNcbiAqIG9ic2VydmFibGVzIHBsdXMgdGhpbiBhY3Rpb24gbWV0aG9kcy5cbiAqXG4gKiBUaGUgY29udHJvbGxlciBpcyBjb25zdW1lci1tYW5hZ2VkIOKAlCB0aGUgY29uc3VtZXIgY3JlYXRlcyBpdFxuICogd2l0aCBgbmV3YCwgaG9sZHMgdGhlIHJlZmVyZW5jZSwgYW5kICoqbXVzdCBjYWxsIGBkZXN0cm95KClgKiogaW4gdGhlaXJcbiAqIG93biBgbmdPbkRlc3Ryb3lgLiBUaGUgVGllciAxIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50IGRvZXMgdGhpc1xuICogYXV0b21hdGljYWxseTsgVGllciAyIGNvbnN1bWVycyBkbyBub3QgZ2V0IGF1dG8tY2xlYW51cC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGNvcmU6IENvcmVBSUF1dG9jb21wbGV0ZTtcbiAgcHJpdmF0ZSByZWFkb25seSByYXdTdGF0ZSQ6IEJlaGF2aW9yU3ViamVjdDxDb3JlU3RhdGU+O1xuICAvLyBvcHRpb25zUG9zaXRpb24gaXNuJ3QgcGFydCBvZiBDb3JlU3RhdGUgKGl0J3MgYSBjb3JlIG9wdGlvbiksIHNvIHRyYWNrIGl0XG4gIC8vIGhlcmUgYW5kIGZvbGQgaXQgaW50byBgZHJvcGRvd24kYCBzbyB0aGUgZHJvcGRvd24gY2FuIHJlYWQgcGxhY2VtZW50IGZyb21cbiAgLy8gdGhlIGNvbnRyb2xsZXIg4oCUIGNvbmZpZ3VyZWQgb25jZSwga2VwdCBpbiBzeW5jIHRocm91Z2ggdXBkYXRlKCkuXG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uc1Bvc2l0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8XCJhYm92ZVwiIHwgXCJiZWxvd1wiPihcImJlbG93XCIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHVuc3Vic2NyaWJlQ29yZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuXG4gIC8vID09PSBQZXItZmllbGQgb2JzZXJ2YWJsZXMgPT09XG4gIC8vIEVhY2ggb25lIHJ1bnMgdGhyb3VnaCBkZXJpdmVGaWVsZCwgd2hpY2ggYmFrZXMgaW4gZGlzdGluY3RVbnRpbENoYW5nZWRcbiAgLy8gYW5kIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSkgcGVyIMKnMTkuNC5cblxuICAvKiogUGxhaW4tdGV4dCBjb250ZW50IG9mIHRoZSBlZGl0b3IuICovXG4gIHJlYWRvbmx5IHRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIC8qKiBDb21wbGV0ZWQgKGJvbGQpIHBhcmFtcyBjdXJyZW50bHkgaW4gdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgY29tcGxldGVkUGFyYW1zJDogT2JzZXJ2YWJsZTxDb21wbGV0ZWRQYXJhbVN0YXRlW10+O1xuICAvKipcbiAgICogU3VnZ2VzdGlvbnMgdGhlIHVzZXIgZGlzbWlzc2VkIHdpdGggdGhlIHNraXAga2V5ICjihpIpLiBOb3RoaW5nIHJlbmRlcnNcbiAgICogdGhlbTsgdGhleSBleGlzdCBzbyBhIGhhbmQtcm9sbGVkIHN1Ym1pdCBjYW4gcGFzcyB0aGVtIHRvXG4gICAqIGBidWlsZFN1Ym1pdFJlc3VsdGAgYW5kIGNhcnJ5IHRoZSBzYW1lIGB0ZXh0OiBcInNraXBwZWRcImAgZW50cmllcyB0aGVcbiAgICogU0RLJ3Mgb3duIHJlcXVlc3RzIGRvLlxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcHBlZFBhcmFtcyQ6IE9ic2VydmFibGU8U2tpcHBlZFBhcmFtU3RhdGVbXT47XG4gIC8qKlxuICAgKiBQYXJhbXMgdGhlIHNlcnZlciBpZGVudGlmaWVkIGluIHRoZSB1c2VyJ3Mgb3duIHdvcmRzLiBBbHJlYWR5IHJlbmRlcmVkXG4gICAqIHRocm91Z2ggYHNlZ21lbnRzJGA7IGV4cG9zZWQgc28gYSBoYW5kLXJvbGxlZCBzdWJtaXQgY2FuIHBhc3MgdGhlbSB0b1xuICAgKiBgYnVpbGRTdWJtaXRSZXN1bHRgIGFuZCByZXBvcnQgdGhlIHNhbWUgYGlkZW50aWZpZWRfcGFyYW1zYCB0aGUgU0RLJ3NcbiAgICogb3duIHJlc3VsdHMgY2FycnkuXG4gICAqL1xuICByZWFkb25seSBpZGVudGlmaWVkUGFyYW1zJDogT2JzZXJ2YWJsZTxJZGVudGlmaWVkUGFyYW1TdGF0ZVtdPjtcbiAgLyoqIEFjdGlvbmFibGUgc3VnZ2VzdGlvbiBwaWxscyAoZmlyc3Qgb25lIGlzIHRoZSBhY3RpdmUgcGlsbCkuICovXG4gIHJlYWRvbmx5IHN1Z2dlc3Rpb25QaWxscyQ6IE9ic2VydmFibGU8U3VnZ2VzdGlvbltdPjtcbiAgLyoqIFRleHQgKyBjb21wbGV0ZWQtcGFyYW0gc2VnbWVudHMgZm9yIHJlbmRlcmluZyB0aGUgZWRpdG9yIGJvZHkuICovXG4gIHJlYWRvbmx5IHNlZ21lbnRzJDogT2JzZXJ2YWJsZTxTZWdtZW50W10+O1xuICAvKiogSUQgb2YgdGhlIG1vc3QtcmVjZW50bHktcHJvbW90ZWQgcGFyYW0gKGRyaXZlcyBzaGltbWVyIGFuaW1hdGlvbikuICovXG4gIHJlYWRvbmx5IG5ld1BhcmFtSWQkOiBPYnNlcnZhYmxlPHN0cmluZyB8IG51bGw+O1xuICAvKiogQWxsIHN1Z2dlc3Rpb25zIGZyb20gdGhlIHNlcnZlciAoaW5jbHVkaW5nIG5vbi1hY3Rpb25hYmxlIG9uZXMpLiAqL1xuICByZWFkb25seSBzdWdnZXN0aW9ucyQ6IE9ic2VydmFibGU8U3VnZ2VzdGlvbltdPjtcbiAgLyoqXG4gICAqIFdoYXQgdGhlIHByb2R1Y3Qgc3RyaXAgc2hvd3M6IHRoZSBpdGVtcyB0aGUgbGF0ZXN0IGAvc3VnZ2VzdGAgcmVzcG9uc2VcbiAgICogcmVwb3J0ZWQgYXMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LCBvciDigJQgd2l0aCBgcHJvZHVjdHNgIGNvbmZpZ3VyZWQgb24gdGhlXG4gICAqIGNvbnRyb2xsZXIg4oCUIHRoZSByZXN1bHRzIG9mIHRoYXQgY3VzdG9tIHNlYXJjaC5cbiAgICovXG4gIHJlYWRvbmx5IHByb2R1Y3RzJDogT2JzZXJ2YWJsZTxQcm9kdWN0W10+O1xuICAvKipcbiAgICogVGhlIGNhdGFsb2cgZ3JvdW5kaW5nIHJlcG9ydCB0aGUgbGF0ZXN0IHJlc3BvbnNlIGNhcnJpZWQsIG9yIG51bGwgd2hlbiBpdFxuICAgKiBjYXJyaWVkIG5vbmU6IHdoaWNoIG9mIHRoZSBxdWVyeSdzIGNvbnN0cmFpbnRzIHRoZSBjYXRhbG9nIGFwcGxpZWQsIHdoaWNoXG4gICAqIGl0IGRyb3BwZWQsIGFuZCBob3cgbWFueSBpdGVtcyAoYW5kIHdoaWNoKSB0aGUgYXBwbGllZCBvbmVzIGxlZnRcbiAgICogc3RhbmRpbmcuIE51bGwgaXMgXCJubyBuZXdzXCIsIG5vdCBhbiBlbXB0eSBjYXRhbG9nLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tRmllbGRzJDogT2JzZXJ2YWJsZTxDdXN0b21GaWVsZHNSZXBvcnQgfCBudWxsPjtcbiAgLyoqIEN1cnJlbnRseSBoaWdobGlnaHRlZCBkcm9wZG93biBvcHRpb24gaW5kZXguIC0xID0gbm9uZS4gKi9cbiAgcmVhZG9ubHkgYWN0aXZlSW5kZXgkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gIC8qKlxuICAgKiBVSS12aXNpYmxlIGxvYWRpbmcgZmxhZyDigJQgc3VwcHJlc3NlZCBkdXJpbmcgdGhlIHBvc3Qtc2VsZWN0IHByZXNzXG4gICAqIGFuaW1hdGlvbiBhbmQgZHVyaW5nIHJlLWVkaXQgKGNhY2hlZCBvcHRpb25zIHN0YXkgdmlzaWJsZSB0aGVyZSkuIFVzZVxuICAgKiB0aGlzIGluc3RlYWQgb2YgdGhlIHJhdyBjb3JlIHN0YXRlIGZvciBhbnkgbG9hZGluZy1za2VsZXRvbiBiaW5kaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2FkaW5nJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFNlcnZlci1yZXBvcnRlZCBcInF1ZXJ5IGlzIGNvbXBsZXRlXCIgZmxhZy4gKi9cbiAgcmVhZG9ubHkgaXNSZWFkeSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIC8qKiBXaGV0aGVyIHRoZSBlZGl0b3IgY3VycmVudGx5IGhhcyBmb2N1cy4gKi9cbiAgcmVhZG9ubHkgaXNGb2N1c2VkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdGhlIGRyb3Bkb3duIHNob3VsZCBjdXJyZW50bHkgYmUgdmlzaWJsZS4gKi9cbiAgcmVhZG9ubHkgaXNEcm9wZG93bk9wZW4kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKipcbiAgICogV2hldGhlciB0aGUgYWN0aXZlIChsZWFkaW5nKSBwaWxsIHNob3VsZCByZW5kZXIgc2VsZWN0ZWQgKGZ1bGwgb3BhY2l0eSlcbiAgICogcmF0aGVyIHRoYW4gdGhlIGRlLWVtcGhhc2l6ZWQgYGZpcnN0YCB0aWVyLiBBdXRvIHRyaWdnZXIg4oeSIHRydWUgb25seSB3aGlsZVxuICAgKiBhIGRyb3Bkb3duIG9wdGlvbiBpcyBoaWdobGlnaHRlZDsgbWFudWFsIOKHkiB0cnVlIG9uY2UgdGhlIHBpbGwgaXMgdGFwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNBY3RpdmVQaWxsU2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICAvKiogU2VydmVyLXN1Z2dlc3RlZCBwbGFjZWhvbGRlciB0ZXh0IGZvciB0aGUgZWRpdG9yLiAqL1xuICByZWFkb25seSBwbGFjZWhvbGRlclRleHQkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIC8qKiBMYXN0IGZldGNoIGVycm9yLCBvciBudWxsLiAqL1xuICByZWFkb25seSBlcnJvciQ6IE9ic2VydmFibGU8RXJyb3IgfCBudWxsPjtcbiAgLyoqIFBhcmFtIGN1cnJlbnRseSBiZWluZyByZS1lZGl0ZWQsIG9yIG51bGwuICovXG4gIHJlYWRvbmx5IGVkaXRpbmdQYXJhbSQ6IE9ic2VydmFibGU8Q29tcGxldGVkUGFyYW1TdGF0ZSB8IG51bGw+O1xuICAvKiogUGxhaW4tdGV4dCBvZmZzZXQgd2hlcmUgdGhlIGVkaXQgcmVnaW9uIHN0YXJ0cywgb3IgbnVsbC4gKi9cbiAgcmVhZG9ubHkgZWRpdGluZ0FuY2hvciQ6IE9ic2VydmFibGU8bnVtYmVyIHwgbnVsbD47XG4gIC8qKiBMaXZlIGNhcmV0IG9mZnNldCB3aXRoaW4gdGhlIGVkaXRvci4gKi9cbiAgcmVhZG9ubHkgY2FyZXRPZmZzZXQkOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+O1xuXG4gIC8vID09PSBDb21wb3NpdGUgb2JzZXJ2YWJsZXMgPT09XG5cbiAgLyoqXG4gICAqIFNuYXBzaG90IG9mIGV2ZXJ5IHB1YmxpYyBmaWVsZCBpbiBvbmUgb2JqZWN0LiBDb252ZW5pZW50IGZvclxuICAgKiBgKm5nSWY9XCJjdHJsLnN0YXRlJCB8IGFzeW5jIGFzIHN0YXRlXCJgIHRlbXBsYXRpbmcg4oCUIGFsaWFzZXMgYWxsIGZpZWxkc1xuICAgKiB1bmRlciBhIHNpbmdsZSBzdWJzY3JpcHRpb24gaW5zdGVhZCBvZiBtdWx0aXBsZSBgfCBhc3luY2AgcGlwZXMuXG4gICAqL1xuICByZWFkb25seSBzdGF0ZSQ6IE9ic2VydmFibGU8QUlBdXRvY29tcGxldGVDb250cm9sbGVyU3RhdGU+O1xuXG4gIC8qKlxuICAgKiBDb21wb3NpdGUgc3RhdGUgZm9yIHRoZSBkcm9wZG93biB2aWV3LiBUaWVyIDIgY29uc3VtZXJzIHNwcmVhZCB0aGlzIGludG9cbiAgICogYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YDsgVGllciAxIHVzZXMgdGhlIHNhbWUgc2hhcGUgaW50ZXJuYWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGRyb3Bkb3duJDogT2JzZXJ2YWJsZTxBSUF1dG9jb21wbGV0ZURyb3Bkb3duU3RhdGU+O1xuXG4gIC8qKlxuICAgKiBUaHJvd3MgaWYgaW52b2tlZCBvdXRzaWRlIGEgYnJvd3NlciBlbnZpcm9ubWVudC4gRm9yIFNTUiAvIEFuZ3VsYXJcbiAgICogVW5pdmVyc2FsLCBnYXRlIGNvbnN0cnVjdGlvbiB3aXRoIGBpc1BsYXRmb3JtQnJvd3NlcmAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRzOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zID0ge30pIHtcbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQUlBdXRvY29tcGxldGVDb250cm9sbGVyIHJlcXVpcmVzIGEgYnJvd3NlciBlbnZpcm9ubWVudC4gXCIgK1xuICAgICAgICAgIFwiRm9yIFNTUiAvIEFuZ3VsYXIgVW5pdmVyc2FsLCBnYXRlIGNvbnN0cnVjdGlvbiB3aXRoIGlzUGxhdGZvcm1Ccm93c2VyLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBIZWFkbGVzcyBtb2RlIG5ldmVyIHJlbmRlcnMgdG8gdGhlIGhvc3QsIHNvIGEgdGhyb3dhd2F5IGRpdiBpcyBmaW5lIOKAlFxuICAgIC8vIGl0J3MgcmVxdWlyZWQgYnkgdGhlIGNvcmUncyBzaWduYXR1cmUgZm9yIHN5bW1ldHJ5IHdpdGggZnVsbCBtb2RlLlxuICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuXG4gICAgdGhpcy5jb3JlID0gbmV3IENvcmVBSUF1dG9jb21wbGV0ZShob3N0LCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgcmVuZGVyTW9kZTogXCJoZWFkbGVzc1wiLFxuICAgICAgc291cmNlOiBvcHRzLnNvdXJjZSA/PyBcImhlYWRsZXNzLXNka1wiLFxuICAgICAgLy8gSGVhZGxlc3MgbW9kZSBuZXZlciByZW5kZXJzIHRoZSBkcm9wZG93biBET00sIGJ1dCB0aGUga2V5Ym9hcmRcbiAgICAgIC8vIGNvbnRyb2xsZXIgc3RpbGwgcmVhZHMgYG9wdGlvbnNQb3NpdGlvbmAgdG8gZGVjaWRlIHdoaWNoIHZlcnRpY2FsXG4gICAgICAvLyBhcnJvdyBvcGVucyB0aGUgZHJvcGRvd24gZnJvbSB0aGUgaW5wdXQuXG4gICAgICBvcHRpb25zUG9zaXRpb246IG9wdHMub3B0aW9uc1Bvc2l0aW9uID8/IFwiYmVsb3dcIixcbiAgICB9KTtcblxuICAgIHRoaXMucmF3U3RhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb3JlU3RhdGU+KHRoaXMuY29yZS5nZXRTdGF0ZSgpKTtcbiAgICAvLyBQdXNoIHRoZSBzdG9yZSdzICpjdXJyZW50KiBzdGF0ZSwgbm90IHRoZSBzbmFwc2hvdCB0aGUgbGlzdGVuZXIgd2FzXG4gICAgLy8gaGFuZGVkLiBUaGUgY29yZSBub3RpZmllcyBsaXN0ZW5lcnMgc3luY2hyb25vdXNseSwgYW5kIHNvbWUgYWN0aW9uc1xuICAgIC8vIHRyaWdnZXIgcmVlbnRyYW50IGBzdG9yZS5zZXRgIGNhbGxzIChlLmcuIHR5cGluZyBhIG5vbi1tYXRjaGluZyBjaGFyXG4gICAgLy8gZHVyaW5nIHJlLWVkaXQgbWFrZXMgdGhlIGNvcmUgc3luY2hyb25vdXNseSBleGl0IHJlLWVkaXQgYW5kIGtpY2sgb2ZmIGFcbiAgICAvLyBmZXRjaCkuXG4gICAgLy9cbiAgICAvLyBUaGUgY29yZSdzIHN0b3JlIHVzZWQgdG8gZGVsaXZlciBzdWNoIGEgbmVzdGVkIHNldCBpbmxpbmUgYW5kIHRoZW5cbiAgICAvLyByZXN1bWUgdGhlIG91dGVyIGxpc3RlbmVyIGxvb3AsIHNvIGEgbGlzdGVuZXIgY291bGQgYmUgaGFuZGVkIGFuIG9sZGVyXG4gICAgLy8gc3RhdGUgKHN0aWxsIGluIHJlLWVkaXQpICphZnRlciogYSBuZXdlciBvbmUgKHJlLWVkaXQgZXhpdGVkKSDigJQgd2hpY2hcbiAgICAvLyByZXN1cnJlY3RlZCBhIHN0YWxlIGBlZGl0aW5nUGFyYW1gIGFuZCByZXRyaWdnZXJlZCB0aGUgZWRpdG9yJ3MgcmUtZWRpdFxuICAgIC8vIGNhcmV0LXBhcmssIHlhbmtpbmcgdGhlIGNhcmV0IGJhY2sgdG8gd2hlcmUgcmUtZWRpdGluZyBzdGFydGVkLiBUaGVcbiAgICAvLyBzdG9yZSBub3cgcXVldWVzIG5vdGlmaWNhdGlvbnMgYW5kIGRyYWlucyB0aGVtIGluIG9yZGVyLCBzbyB0aGF0XG4gICAgLy8gb3V0LW9mLW9yZGVyIGRlbGl2ZXJ5IGNhbiBubyBsb25nZXIgaGFwcGVuIGF0IHRoZSBzb3VyY2UuXG4gICAgLy9cbiAgICAvLyBSZWFkaW5nIGBnZXRTdGF0ZSgpYCBhdCBlbWlzc2lvbiB0aW1lIGlzIGtlcHQgYXMgYmVsdC1hbmQtYnJhY2VzOiBpdFxuICAgIC8vIGNvc3RzIG5vdGhpbmcgKGRpc3RpbmN0VW50aWxDaGFuZ2VkIGRvd25zdHJlYW0gZHJvcHMgdGhlIGR1cGxpY2F0ZVxuICAgIC8vIGVtaXNzaW9ucykgYW5kIGtlZXBzIHRoaXMgYnJpZGdlIGNvcnJlY3QgZm9yIGFueSBmdXR1cmUgY29uc3VtZXIgdGhhdFxuICAgIC8vIGVtaXRzIG1pZC1jYXNjYWRlLiBSZWFjdCBuZWVkcyBuZWl0aGVyLCBzaW5jZSBpdCBiYXRjaGVzIHJlbmRlcnMgYW5kXG4gICAgLy8gZ2F0ZXMgaXRzIGNhcmV0IGVmZmVjdHMgb24gZGVwZW5kZW5jaWVzLlxuICAgIHRoaXMudW5zdWJzY3JpYmVDb3JlID0gdGhpcy5jb3JlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNEZXN0cm95ZWQpIHRoaXMucmF3U3RhdGUkLm5leHQodGhpcy5jb3JlLmdldFN0YXRlKCkpO1xuICAgIH0pO1xuXG4gICAgLy8gPT09IFBlci1maWVsZCBvYnNlcnZhYmxlcyA9PT1cbiAgICAvLyBBcnJheS12YWx1ZWQgZmllbGRzIHVzZSBzaGFsbG93IGVxdWFsaXR5LiBUaGUgdmFuaWxsYSBzdG9yZSBzcHJlYWRzIG9uXG4gICAgLy8gZXZlcnkgd3JpdGUgKGBzdG9yZS5zZXQoeyBjb21wbGV0ZWRQYXJhbXM6IFsuLi5dIH0pYCksIHNvIHJlZmVyZW5jZVxuICAgIC8vIGVxdWFsaXR5IHdvdWxkIHJlLWZpcmUgZG93bnN0cmVhbSBzdWJzY3JpYmVycyBvbiBldmVyeSBzdGF0ZSB0aWNrIGV2ZW5cbiAgICAvLyB3aGVuIHRoZSBhcnJheSdzIGNvbnRlbnRzIGFyZSB1bmNoYW5nZWQuIFRoZSBvdGhlciBmaWVsZHMgYXJlXG4gICAgLy8gcHJpbWl0aXZlcyBvciBzdGFibGUgb2JqZWN0IHJlZmVyZW5jZXMsIHNvIGRlZmF1bHQgaWRlbnRpdHkgZXF1YWxpdHlcbiAgICAvLyB3b3JrcyBmaW5lLlxuICAgIHRoaXMudGV4dCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMudGV4dCk7XG4gICAgdGhpcy5jb21wbGV0ZWRQYXJhbXMkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmNvbXBsZXRlZFBhcmFtcywgYXJyRXEpO1xuICAgIHRoaXMuc2tpcHBlZFBhcmFtcyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuc2tpcHBlZFBhcmFtcywgYXJyRXEpO1xuICAgIHRoaXMuaWRlbnRpZmllZFBhcmFtcyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuaWRlbnRpZmllZFBhcmFtcywgYXJyRXEpO1xuICAgIHRoaXMuc3VnZ2VzdGlvblBpbGxzJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5hY3Rpb25hYmxlU3VnZ2VzdGlvbnMsIGFyckVxKTtcbiAgICB0aGlzLnNlZ21lbnRzJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5zZWdtZW50cywgYXJyRXEpO1xuICAgIHRoaXMubmV3UGFyYW1JZCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMubmV3UGFyYW1JZCk7XG4gICAgdGhpcy5zdWdnZXN0aW9ucyQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuc3VnZ2VzdGlvbnMsIGFyckVxKTtcbiAgICB0aGlzLnByb2R1Y3RzJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5wcm9kdWN0cywgYXJyRXEpO1xuICAgIHRoaXMuY3VzdG9tRmllbGRzJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5jdXN0b21GaWVsZHMpO1xuICAgIHRoaXMuYWN0aXZlSW5kZXgkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgpO1xuICAgIHRoaXMuaXNMb2FkaW5nJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCBjb21wdXRlVWlMb2FkaW5nKTtcbiAgICB0aGlzLmlzUmVhZHkkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzUmVhZHkpO1xuICAgIHRoaXMuaXNGb2N1c2VkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc0ZvY3VzZWQpO1xuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4kID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLmlzRHJvcGRvd25PcGVuKTtcbiAgICB0aGlzLmlzQWN0aXZlUGlsbFNlbGVjdGVkJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5pc0FjdGl2ZVBpbGxTZWxlY3RlZCk7XG4gICAgdGhpcy5wbGFjZWhvbGRlclRleHQkID0gZGVyaXZlRmllbGQodGhpcy5yYXdTdGF0ZSQsIChzKSA9PiBzLnBsYWNlaG9sZGVyVGV4dCk7XG4gICAgdGhpcy5lcnJvciQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuZXJyb3IpO1xuICAgIHRoaXMuZWRpdGluZ1BhcmFtJCA9IGRlcml2ZUZpZWxkKHRoaXMucmF3U3RhdGUkLCAocykgPT4gcy5lZGl0aW5nUGFyYW0pO1xuICAgIHRoaXMuZWRpdGluZ0FuY2hvciQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuZWRpdGluZ0FuY2hvcik7XG4gICAgdGhpcy5jYXJldE9mZnNldCQgPSBkZXJpdmVGaWVsZCh0aGlzLnJhd1N0YXRlJCwgKHMpID0+IHMuY2FyZXRPZmZzZXQpO1xuXG4gICAgLy8gPT09IENvbXBvc2l0ZSBvYnNlcnZhYmxlcyA9PT1cbiAgICAvLyBQcm9qZWN0IGRpcmVjdGx5IG9mZiBgcmF3U3RhdGUkYCB3aXRoIGEgc2luZ2xlIG1hcCgpIHNvIGVhY2ggc3RvcmVcbiAgICAvLyB0aWNrIHByb2R1Y2VzIGV4YWN0bHkgT05FIGNvaGVyZW50IHN0YXRlJCBlbWlzc2lvbi4gVXNpbmdcbiAgICAvLyBgY29tYmluZUxhdGVzdGAgb3ZlciB0aGUgcGVyLWZpZWxkIG9ic2VydmFibGVzIGhlcmUgd291bGQgZmlyZSBvbmVcbiAgICAvLyBlbWlzc2lvbiBwZXIgaW5uZXItc291cmNlIHRpY2sgKHVwIHRvIE4gcGVyIHN0b3JlIHVwZGF0ZSksIGFuZCB0aGVcbiAgICAvLyBlZGl0b3ItaG9zdCBkaXJlY3RpdmUncyBwb3N0LXByb21vdGUgcmVmb2N1cyB3b3VsZCBydW4gYWdhaW5zdCBhblxuICAgIC8vIGludGVybWVkaWF0ZSBzdGF0ZSB3aGVyZSBgbmV3UGFyYW1JZGAgd2FzIHNldCBidXQgYHNlZ21lbnRzYCAvXG4gICAgLy8gYGNhcmV0T2Zmc2V0YCBzdGlsbCBoZWxkIHRoZWlyIG9sZCB2YWx1ZXMg4oCUIGxlYXZpbmcgdGhlIGNhcmV0IHN0dWNrXG4gICAgLy8gYXQgdGhlIHByZS1jbGljayBwb3NpdGlvbi5cbiAgICB0aGlzLnN0YXRlJCA9IHRoaXMucmF3U3RhdGUkLnBpcGUoXG4gICAgICBtYXAoY29tcHV0ZVN0YXRlKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcblxuICAgIHRoaXMub3B0aW9uc1Bvc2l0aW9uJC5uZXh0KG9wdHMub3B0aW9uc1Bvc2l0aW9uID8/IFwiYmVsb3dcIik7XG4gICAgdGhpcy5kcm9wZG93biQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnJhd1N0YXRlJCwgdGhpcy5vcHRpb25zUG9zaXRpb24kXSkucGlwZShcbiAgICAgIG1hcCgoW3MsIG9wdGlvbnNQb3NpdGlvbl0pID0+IGNvbXB1dGVEcm9wZG93bihzLCBvcHRpb25zUG9zaXRpb24pKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8vID09PSBSZWFkLW9ubHkgYWNjZXNzb3JzID09PVxuXG4gIC8qKiBTdGFibGUgQVJJQSBsaXN0Ym94IElEIGZvciB0aGUgZHJvcGRvd24uIFBhc3MgdG8gYDx0ZXh0YXJlYSBhcmlhLWNvbnRyb2xzPVwiLi4uXCI+YC4gKi9cbiAgZ2V0IGxpc3Rib3hJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvcmUubGlzdGJveElkO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYGRlc3Ryb3koKWAgaGFzIGJlZW4gY2FsbGVkLiBBZnRlciBkZXN0cnVjdGlvbiBhbGwgYWN0aW9uIG1ldGhvZHMgbm8tb3AuICovXG4gIGdldCBkZXN0cm95ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNEZXN0cm95ZWQ7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25vdXMgc25hcHNob3Qgb2YgdGhlIGNvbnRyb2xsZXIncyBjdXJyZW50IHB1YmxpYyBzdGF0ZS4gTWlycm9yc1xuICAgKiB0aGUgbGF0ZXN0IGVtaXNzaW9uIG9mIGBzdGF0ZSRgLiBVc2VmdWwgaW4gY2FsbGJhY2tzIHdoZXJlIHlvdSBjYW4ndFxuICAgKiBgc3Vic2NyaWJlYCAoZS5nLiBpbnNpZGUgYW4gZXZlbnQgaGFuZGxlcikuXG4gICAqL1xuICBnZXRTdGF0ZSgpOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSB7XG4gICAgcmV0dXJuIGNvbXB1dGVTdGF0ZSh0aGlzLnJhd1N0YXRlJC52YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHN0cnVjdHVyZWQgcXVlcnkgYXMgdGhlIFNESyB1bmRlcnN0YW5kcyBpdCByaWdodCBub3cg4oCUIHRoZSBzYW1lXG4gICAqIG9iamVjdCBgb25SZXN1bHRgIGRlbGl2ZXJzIGFmdGVyIGVhY2ggcmVzcG9uc2UgYW5kIGBvblN1Ym1pdGAgZGVsaXZlcnNcbiAgICogb24gc3VibWl0LiBSZWFkIGl0IG9uIGRlbWFuZCBmcm9tIGEgcGxhY2UgdGhhdCBoYXMgbm8gZXZlbnQgaGFuZHkgKGFcbiAgICogY3VzdG9tIHN1Ym1pdCBidXR0b24sIGEgXCJzYXZlIGRyYWZ0XCIgYWN0aW9uKS5cbiAgICovXG4gIGdldFJlc3VsdCgpOiBBdXRvY29tcGxldGVSZXN1bHQge1xuICAgIHJldHVybiB0aGlzLmNvcmUuZ2V0UmVzdWx0KCk7XG4gIH1cblxuICAvLyA9PT0gQWN0aW9uIG1ldGhvZHMgKHBhc3MtdGhyb3VnaCB0byB0aGUgY29yZSkgPT09XG4gIC8vXG4gIC8vIEV2ZXJ5IGFjdGlvbiBtZXRob2QgYmVnaW5zIHdpdGggYW4gYGlzRGVzdHJveWVkYCBndWFyZCBzbyB0aGF0IGNhbGxlcnNcbiAgLy8gd2hvIGhvbGQgYSBzdGFsZSByZWZlcmVuY2UgYWZ0ZXIgYGRlc3Ryb3koKWAgZG9uJ3QgYWNjaWRlbnRhbGx5IHRyaWdnZXJcbiAgLy8gd29yayBvbiBhIHRvcm4tZG93biBjb3JlLiBUaGUgdmFuaWxsYSBjb3JlIGRvZXMgbm90IGdhdGUgaXRzIG93biBtZXRob2RzXG4gIC8vIHBvc3QtZGlzcG9zZSDigJQgYHJlc2V0KClgLCBgaGFuZGxlVGV4dENoYW5nZSgpYCwgYW5kIGZyaWVuZHMgd291bGQgc3RpbGxcbiAgLy8gc2NoZWR1bGUgZmV0Y2hlcyBvciBmaXJlIEhUVFAgcmVxdWVzdHMgYWdhaW5zdCBhbiBhYm9ydGVkIGNvbnRyb2xsZXIsXG4gIC8vIGFuZCB0aGUgcmVzcG9uc2VzIHdvdWxkIGhhdmUgbm93aGVyZSB0byBzdXJmYWNlIChyYXdTdGF0ZSQgaXMgYWxyZWFkeVxuICAvLyBjb21wbGV0ZSkuIFRoZSBndWFyZCBtYWtlcyB0aGUgSlNEb2MtcHJvbWlzZWQgXCJuby1vcCBzaWxlbnRseVwiXG4gIC8vIHNlbWFudGljcyBhY3R1YWxseSB0cnVlLlxuXG4gIC8qKiBDbGVhciBhbGwgc3RhdGUsIHJvdGF0ZSBgc2Vzc2lvbl9pZGAsIGFuZCByZS1mZXRjaC4gQ2FsbCBhZnRlciBzdWJtaXQuICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkcyBhIHN1Ym1pdCBpbiB0ZWxlbWV0cnkuIEVudGVyIGlzIHJlY29yZGVkIGJ5IHRoZSBTREs7IGNhbGwgdGhpc1xuICAgKiBmcm9tIGEgc3VibWl0IGJ1dHRvbiB5b3UgcmVuZGVyLCBzbyBlYWNoIHN1Ym1pdCBpcyBjb3VudGVkIG9uY2UuXG4gICAqL1xuICByZWNvcmRTdWJtaXQocmVzdWx0OiBBdXRvY29tcGxldGVSZXN1bHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5yZWNvcmRTdWJtaXQocmVzdWx0KTtcbiAgfVxuXG4gIC8qKiBQaWNrIGEgZHJvcGRvd24gb3B0aW9uIChvciByZXBsYWNlIHRoZSByZS1lZGl0ZWQgcGFyYW0gaWYgaW4gcmUtZWRpdCBtb2RlKS4gKi9cbiAgc2VsZWN0T3B0aW9uKG9wdGlvbjogU3VnZ2VzdGlvbk9wdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNlbGVjdE9wdGlvbihvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFubm91bmNlIGEgcHJvZHVjdCBzZWxlY3Rpb24g4oCUIGZpcmVzIHRoZSBgb25Qcm9kdWN0U2VsZWN0YCBjYWxsYmFjayB0aGVcbiAgICogY29udHJvbGxlciB3YXMgY29uc3RydWN0ZWQgd2l0aC4gYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YCBjYWxscyB0aGlzXG4gICAqIGZvciB5b3U7IGNvbnN1bWVycyByZW5kZXJpbmcgdGhlaXIgb3duIHN0cmlwIGNhbGwgaXQgdGhlbXNlbHZlcy5cbiAgICpcbiAgICogRW1pdHRpbmcgaXMgdGhlIHdob2xlIGJlaGF2aW91cjogdGhlIFNESyBkZWxpYmVyYXRlbHkgZG9lcyBub3QgbmF2aWdhdGUgdG9cbiAgICogYHByb2R1Y3QudXJsYCwgYmVjYXVzZSBvbmx5IHRoZSBpbnRlZ3JhdGlvbiBrbm93cyB3aGV0aGVyIGEgc2VsZWN0aW9uXG4gICAqIG1lYW5zIFwib3BlbiB0aGUgUERQXCIsIFwiYWRkIHRvIGNhcnRcIiwgb3IgXCJmaWxsIHRoZSBpbnB1dFwiLlxuICAgKi9cbiAgc2VsZWN0UHJvZHVjdChwcm9kdWN0OiBQcm9kdWN0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2VsZWN0UHJvZHVjdChwcm9kdWN0KTtcbiAgfVxuXG4gIC8qKiBQcm9tb3RlIHRoZSBwaWxsIGF0IGBpbmRleGAgdG8gYWN0aXZlIChmcm9udCBvZiB0aGUgbGlzdCkuICovXG4gIHNldEFjdGl2ZVBpbGwoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNldEFjdGl2ZVBpbGwoaW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNraXAgdGhlIGFjdGl2ZSBwaWxsIOKAlCBzYW1lIGFjdGlvbiBhcyBwcmVzc2luZyDihpIgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuXG4gICAqIFRoZSBkcm9wZG93bidzIHNraXAgYnV0dG9uIGNhbGxzIHRoaXM7IGNvbnN1bWVycyByZW5kZXJpbmcgdGhlaXIgb3duIHNraXBcbiAgICogYWZmb3JkYW5jZSBjYWxsIGl0IGRpcmVjdGx5LiBUaGUgc2tpcHBlZCBzdWdnZXN0aW9uIGpvaW5zIGBza2lwcGVkUGFyYW1zJGAuXG4gICAqL1xuICBza2lwQWN0aXZlUGlsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5za2lwQWN0aXZlUGlsbCgpO1xuICB9XG5cbiAgLyoqIERyb3AgdGhlIGxhc3QgY29tcGxldGVkIHBhcmFtJ3MgXCJjb21wbGV0ZWRcIiBzdGF0dXMuIFRleHQgc3RheXMgYXMgcGxhaW4gdGV4dC4gKi9cbiAgcmVtb3ZlTGFzdFBhcmFtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnJlbW92ZUxhc3RQYXJhbSgpO1xuICB9XG5cbiAgLyoqIENsZWFyIHRoZSBzaGltbWVyIGFuaW1hdGlvbiBzdGF0ZSBmb3IgdGhlIG1vc3QtcmVjZW50bHktYWRkZWQgcGFyYW0uICovXG4gIGNsZWFyTmV3UGFyYW1JZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5jbGVhck5ld1BhcmFtSWQoKTtcbiAgfVxuXG4gIC8qKiBDb250cm9sbGVkLW1vZGUgc2V0dGVyIGZvciBlZGl0b3IgdGV4dC4gKi9cbiAgc2V0VmFsdWUodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0VmFsdWUodGV4dCk7XG4gIH1cblxuICAvKiogQ29udHJvbGxlZC1tb2RlIHNldHRlciBmb3IgY29tcGxldGVkIHBhcmFtcy4gKi9cbiAgc2V0Q29tcGxldGVkUGFyYW1zKHBhcmFtczogQ29tcGxldGVkUGFyYW1TdGF0ZVtdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0Q29tcGxldGVkUGFyYW1zKHBhcmFtcyk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBwbGFpbi10ZXh0IGlucHV0IGZyb20gdGhlIGNvbnN1bWVyJ3MgYDx0ZXh0YXJlYT5gIHRvIHRoZSBjb3JlLiAqL1xuICBoYW5kbGVUZXh0Q2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVUZXh0Q2hhbmdlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBGb3J3YXJkIGtleWJvYXJkIGV2ZW50cyBmcm9tIHRoZSBjb25zdW1lcidzIGA8dGV4dGFyZWE+YCB0byB0aGUgY29yZS4gKi9cbiAgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLmhhbmRsZUtleURvd24oZXZlbnQpO1xuICB9XG5cbiAgLyoqIE5vdGlmeSB0aGUgY29yZSBvZiBmb2N1cyBzdGF0ZS4gKi9cbiAgc2V0Rm9jdXNlZChmb2N1c2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0Rm9jdXNlZChmb2N1c2VkKTtcbiAgfVxuXG4gIC8qKiBFbnRlciByZS1lZGl0IG1vZGUgZm9yIHRoZSBib2xkIHBhcmFtIHdpdGggdGhlIGdpdmVuIGlkLiAqL1xuICBzdGFydEVkaXRpbmdQYXJhbShwYXJhbUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zdGFydEVkaXRpbmdQYXJhbShwYXJhbUlkKTtcbiAgfVxuXG4gIC8qKiBFeGl0IHJlLWVkaXQgbW9kZSB3aXRob3V0IGNoYW5naW5nIHRoZSBib2xkIHBhcmFtLiAqL1xuICBleGl0RWRpdE1vZGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuZXhpdEVkaXRNb2RlKCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBwb3N0LWlucHV0IGNhcmV0IHBvc2l0aW9uIChleHRlbmRzIHRoZSBlZGl0IHRhaWwpLiAqL1xuICBoYW5kbGVDYXJldEFmdGVySW5wdXQob2Zmc2V0OiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuaGFuZGxlQ2FyZXRBZnRlcklucHV0KG9mZnNldCk7XG4gIH1cblxuICAvKiogRm9yd2FyZCBzZWxlY3Rpb24tb25seSBjYXJldCBtb3ZlcyAobWF5IGV4aXQgcmUtZWRpdCkuICovXG4gIGhhbmRsZUNhcmV0TW92ZShvZmZzZXQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5oYW5kbGVDYXJldE1vdmUob2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBSZXBsYWNlIHRoZSBib2xkIHBhcmFtIGJlaW5nIHJlLWVkaXRlZC4gUmV0dXJucyB0cnVlIHdoZW4gYXBwbGllZC4gKi9cbiAgcmVwbGFjZUVkaXRpbmdSYW5nZShyZXBsYWNlbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5jb3JlLnJlcGxhY2VFZGl0aW5nUmFuZ2UocmVwbGFjZW1lbnQpO1xuICB9XG5cbiAgLyoqIFNldCB0aGUgaGlnaGxpZ2h0ZWQgb3B0aW9uIGluZGV4ICh0eXBpY2FsbHkgZHJpdmVuIGJ5IGhvdmVyKS4gKi9cbiAgc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuc2V0QWN0aXZlRHJvcGRvd25JbmRleChpbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHBvaW50ZXIgbGVmdCBvcHRpb24gYGluZGV4YDogY2xlYXIgdGhlIGhpZ2hsaWdodCBpZiBpdCBpcyBzdGlsbCBvbiBpdCxcbiAgICogc28gRW50ZXIgYWZ0ZXJ3YXJkcyBzdWJtaXRzIGluc3RlYWQgb2YgcGlja2luZyBhbiBvcHRpb24gdGhlIHBvaW50ZXIgaXMgbm9cbiAgICogbG9uZ2VyIG9uLiBBIGhpZ2hsaWdodCB0aGUga2V5Ym9hcmQgaGFzIHNpbmNlIG1vdmVkIGlzIGxlZnQgYWxvbmUuXG4gICAqL1xuICBjbGVhckhpZ2hsaWdodChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNEZXN0cm95ZWQpIHJldHVybjtcbiAgICB0aGlzLmNvcmUuY2xlYXJIaWdobGlnaHQoaW5kZXgpO1xuICB9XG5cbiAgLyoqIFBhZ2UgdGhlIGRhdGVwaWNrZXIgYmFjayBvbmUgbW9udGguIE5vLW9wIHVubGVzcyBhIGRhdGUgcGlsbCBpcyBhY3RpdmUuICovXG4gIHNob3dQcmV2aW91c01vbnRoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnNob3dQcmV2aW91c01vbnRoKCk7XG4gIH1cblxuICAvKiogUGFnZSB0aGUgZGF0ZXBpY2tlciBmb3J3YXJkIG9uZSBtb250aC4gTm8tb3AgdW5sZXNzIGEgZGF0ZSBwaWxsIGlzIGFjdGl2ZS4gKi9cbiAgc2hvd05leHRNb250aCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkgcmV0dXJuO1xuICAgIHRoaXMuY29yZS5zaG93TmV4dE1vbnRoKCk7XG4gIH1cblxuICAvLyA9PT0gTGlmZWN5Y2xlID09PVxuXG4gIC8qKlxuICAgKiBBcHBseSBydW50aW1lIGNoYW5nZXMgdG8gYSBzdWJzZXQgb2Ygb3B0aW9ucy4gRXZlbnQgY2FsbGJhY2tzXG4gICAqIChgb25TdWJtaXRgLCBgb25SZXN1bHRgLCBgb25FcnJvcmAsIGV0Yy4pIGNhbm5vdCBiZSBzd2FwcGVkIHRoaXMgd2F5IOKAlCB0aGV5IGFyZVxuICAgKiByZWdpc3RlcmVkIG9uY2UgYXQgY29uc3RydWN0aW9uIChtYXRjaGVzIHRoZSBSZWFjdCBob29rJ3MgZGVzaWduKS4gRm9yXG4gICAqIGR5bmFtaWMgZXZlbnQgcmVhY3Rpdml0eSwgc3Vic2NyaWJlIHRvIHRoZSBjb3JyZXNwb25kaW5nIG9ic2VydmFibGVcbiAgICogKGUuZy4gYHRleHQkYCBpbnN0ZWFkIG9mIGBvbkNoYW5nZWApLlxuICAgKi9cbiAgdXBkYXRlKG9wdHM6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclVwZGF0ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5jb3JlLnVwZGF0ZShvcHRzKTtcbiAgICBpZiAob3B0cy5vcHRpb25zUG9zaXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5vcHRpb25zUG9zaXRpb24kLm5leHQob3B0cy5vcHRpb25zUG9zaXRpb24pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMg4oCUIHVuc3Vic2NyaWJlcyBmcm9tIHRoZSBjb3JlLCBkZXN0cm95cyB0aGUgY29yZSxcbiAgICogYW5kIGNvbXBsZXRlcyB0aGUgaW50ZXJuYWwgc3RhdGUgc3ViamVjdC4gU2FmZSB0byBjYWxsIG11bHRpcGxlIHRpbWVzLlxuICAgKiBBZnRlciBkZXN0cnVjdGlvbiwgYWN0aW9uIG1ldGhvZHMgbm8tb3Agc2lsZW50bHkuXG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSByZXR1cm47XG4gICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG4gICAgdGhpcy51bnN1YnNjcmliZUNvcmUoKTtcbiAgICB0aGlzLmNvcmUuZGVzdHJveSgpO1xuICAgIHRoaXMucmF3U3RhdGUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cblxuLy8gPT09PT0gUHVyZSBoZWxwZXJzIOKAlCBub3QgcGFydCBvZiB0aGUgcHVibGljIHN1cmZhY2UgPT09PT1cblxuLyoqXG4gKiBTaGFsbG93IGFycmF5IGVxdWFsaXR5LiBUaGUgdmFuaWxsYSBzdG9yZSByZWFzc2lnbnMgYXJyYXkgZmllbGRzIG9uIGV2ZXJ5XG4gKiB3cml0ZSAoYHN0b3JlLnNldCh7IGNvbXBsZXRlZFBhcmFtczogWy4uLnByZXYsIHhdIH0pYCksIHNvIHJlZmVyZW5jZVxuICogZXF1YWxpdHkgYWxvbmUgd291bGQgcmUtZW1pdCBkb3duc3RyZWFtIGV2ZW4gd2hlbiB0aGUgY29udGVudHMgYXJlXG4gKiBpZGVudGljYWwuIFVzZWQgZm9yIGBjb21wbGV0ZWRQYXJhbXMkYCwgYHN1Z2dlc3Rpb25zJGAsIGBzdWdnZXN0aW9uUGlsbHMkYCxcbiAqIGFuZCBgc2VnbWVudHMkYC5cbiAqL1xuZnVuY3Rpb24gYXJyRXE8VD4oYTogcmVhZG9ubHkgVFtdLCBiOiByZWFkb25seSBUW10pOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKiBVSS12aXNpYmxlIGxvYWRpbmcg4oCUIHRoZSBjb3JlJ3MgYGRyb3Bkb3duTG9hZGluZ2AgKHNlZSBpdHMgZG9jcykuICovXG5mdW5jdGlvbiBjb21wdXRlVWlMb2FkaW5nKHM6IENvcmVTdGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gcy5kcm9wZG93bkxvYWRpbmc7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdGF0ZShzOiBDb3JlU3RhdGUpOiBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSB7XG4gIHJldHVybiB7XG4gICAgdGV4dDogcy50ZXh0LFxuICAgIGNvbXBsZXRlZFBhcmFtczogcy5jb21wbGV0ZWRQYXJhbXMsXG4gICAgc2tpcHBlZFBhcmFtczogcy5za2lwcGVkUGFyYW1zLFxuICAgIGlkZW50aWZpZWRQYXJhbXM6IHMuaWRlbnRpZmllZFBhcmFtcyxcbiAgICBzdWdnZXN0aW9uUGlsbHM6IHMuYWN0aW9uYWJsZVN1Z2dlc3Rpb25zLFxuICAgIHNlZ21lbnRzOiBzLnNlZ21lbnRzLFxuICAgIG5ld1BhcmFtSWQ6IHMubmV3UGFyYW1JZCxcbiAgICBzdWdnZXN0aW9uczogcy5zdWdnZXN0aW9ucyxcbiAgICBwcm9kdWN0czogcy5wcm9kdWN0cyxcbiAgICBjdXN0b21GaWVsZHM6IHMuY3VzdG9tRmllbGRzLFxuICAgIGFjdGl2ZUluZGV4OiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgsXG4gICAgaXNMb2FkaW5nOiBjb21wdXRlVWlMb2FkaW5nKHMpLFxuICAgIGlzUmVhZHk6IHMuaXNSZWFkeSxcbiAgICBpc0ZvY3VzZWQ6IHMuaXNGb2N1c2VkLFxuICAgIGlzRHJvcGRvd25PcGVuOiBzLmlzRHJvcGRvd25PcGVuLFxuICAgIHBsYWNlaG9sZGVyVGV4dDogcy5wbGFjZWhvbGRlclRleHQsXG4gICAgZXJyb3I6IHMuZXJyb3IsXG4gICAgZWRpdGluZ1BhcmFtOiBzLmVkaXRpbmdQYXJhbSxcbiAgICBlZGl0aW5nSWRlbnRpZmllZDogcy5lZGl0aW5nSWRlbnRpZmllZCxcbiAgICBlZGl0aW5nQW5jaG9yOiBzLmVkaXRpbmdBbmNob3IsXG4gICAgY2FyZXRPZmZzZXQ6IHMuY2FyZXRPZmZzZXQsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVEcm9wZG93bihcbiAgczogQ29yZVN0YXRlLFxuICBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIixcbik6IEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZSB7XG4gIGNvbnN0IGVkaXRpbmdQYXJhbSA9IHMuZWRpdGluZ1BhcmFtO1xuICBjb25zdCBlZGl0aW5nSWRlbnRpZmllZCA9IHMuZWRpdGluZ0lkZW50aWZpZWQ7XG4gIGNvbnN0IGRhdGVTZWxlY3Rpb24gPSBkYXRlU2VsZWN0aW9uRm9yKHMpO1xuICBjb25zdCBhY3RpdmVTdWdnZXN0aW9uID0gcy5hY3Rpb25hYmxlU3VnZ2VzdGlvbnNbMF07XG4gIGNvbnN0IGRyb3Bkb3duUGlsbDogU3VnZ2VzdGlvbiB8IG51bGwgPSBlZGl0aW5nUGFyYW1cbiAgICA/IHtcbiAgICAgICAgcGFyYW1ldGVyOiBlZGl0aW5nUGFyYW0uc3VnZ2VzdGlvblBhcmFtZXRlcixcbiAgICAgICAgdGV4dDogZWRpdGluZ1BhcmFtLnN1Z2dlc3Rpb25QbGFjZWhvbGRlcixcbiAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgIG9wdGlvbnM6IGVkaXRpbmdQYXJhbS5vcHRpb25zLFxuICAgICAgfVxuICAgIDogZWRpdGluZ0lkZW50aWZpZWRcbiAgICAgID8gLy8gQW5zd2VyaW5nIGEgc3BhbiB0aGUgdXNlciB3cm90ZSB0aGVtc2VsdmVzOiB0aGUgcGlsbCBuYW1lcyB0aGVcbiAgICAgICAgLy8gcGFyYW1ldGVyIHRoZSBzZXJ2ZXIgbWF0Y2hlZCBpdCB0bywgc28gdGhlIGNhbGVuZGFyIGlzbid0IHVubGFiZWxsZWQuXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJhbWV0ZXI6IGVkaXRpbmdJZGVudGlmaWVkLnBhcmFtZXRlcixcbiAgICAgICAgICB0ZXh0OiBpZGVudGlmaWVkUGFyYW1MYWJlbChlZGl0aW5nSWRlbnRpZmllZC5wYXJhbWV0ZXIpLFxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgICB9XG4gICAgICA6IG51bGw7XG4gIGNvbnN0IGRyb3Bkb3duQWN0aXZlUGlsbCA9IHMuZHJvcGRvd25TdWdnZXN0aW9uID8/IGRyb3Bkb3duUGlsbCA/PyBhY3RpdmVTdWdnZXN0aW9uO1xuICBjb25zdCBkcm9wZG93blBpbGxzID0gZHJvcGRvd25QaWxsID8gW2Ryb3Bkb3duUGlsbF0gOiBzLmFjdGlvbmFibGVTdWdnZXN0aW9ucztcbiAgcmV0dXJuIHtcbiAgICBzdWdnZXN0aW9uczogZHJvcGRvd25BY3RpdmVQaWxsID8gW3sgLi4uZHJvcGRvd25BY3RpdmVQaWxsLCBvcHRpb25zOiBzLmRyb3Bkb3duT3B0aW9ucyB9XSA6IFtdLFxuICAgIGFjdGl2ZUluZGV4OiBzLmFjdGl2ZURyb3Bkb3duSW5kZXgsXG4gICAgaXNPcGVuOiBzLmlzRHJvcGRvd25PcGVuLFxuICAgIHBpbGxzOiBkcm9wZG93blBpbGxzLFxuICAgIGlzQWN0aXZlUGlsbFNlbGVjdGVkOiBzLmlzQWN0aXZlUGlsbFNlbGVjdGVkLFxuICAgIGlzTG9hZGluZzogY29tcHV0ZVVpTG9hZGluZyhzKSxcbiAgICBza2VsZXRvbkV4aXRpbmc6IHMuc2tlbGV0b25FeGl0aW5nLFxuICAgIGlzSW5wdXRFbXB0eTogcy50ZXh0LnRyaW0oKS5sZW5ndGggPT09IDAsXG4gICAgcHJvZHVjdHM6IHMucHJvZHVjdHMsXG4gICAgaXNFZGl0aW5nOiBCb29sZWFuKGVkaXRpbmdQYXJhbSkgfHwgQm9vbGVhbihlZGl0aW5nSWRlbnRpZmllZCksXG4gICAgaW5TZWxlY3Rpb25BbmltYXRpb246IHMuaW5TZWxlY3Rpb25BbmltYXRpb24sXG4gICAgLy8gRGF0ZXBpY2tlci4gYHMuZmlsdGVyZWRPcHRpb25zYCBhYm92ZSBhbHJlYWR5IGNhcnJpZXMgdGhlIHZpc2libGVcbiAgICAvLyBtb250aCdzIGNlbGxzIHJhdGhlciB0aGFuIHRoZSBzdWdnZXN0aW9uJ3Mgb3duIG9wdGlvbnMgd2hlbiB0aGlzIGlzXG4gICAgLy8gXCJkYXRlXCIg4oCUIHRoZSBjb3JlIHN3YXBwZWQgdGhlbSBpbiBpdHMgZGVyaXZlIGxheWVyLCBzbyB0aGUgZHJvcGRvd24gb25seVxuICAgIC8vIGhhcyB0byBrbm93IHdoaWNoIGJvZHkgdG8gZHJhdy5cbiAgICBmb3JtYXRUeXBlOiBzLmFjdGl2ZUZvcm1hdFR5cGUsXG4gICAgZGF0ZVZpZXc6IHMuZGF0ZVZpZXcsXG4gICAgc2VsZWN0ZWREYXRlSXNvOiBkYXRlU2VsZWN0aW9uLnNlbGVjdGVkSXNvLFxuICAgIHNlbGVjdGVkRGF0ZVJhbmdlOiBkYXRlU2VsZWN0aW9uLnNlbGVjdGVkUmFuZ2UsXG4gICAgZGF0ZVJhbmdlU3RhcnQ6IGRhdGVTZWxlY3Rpb24ucmFuZ2VTdGFydCxcbiAgICBvcHRpb25zUG9zaXRpb24sXG4gIH07XG59XG4iXX0=