@magicx-eng/ai-autocomplete-angular 0.10.0 → 0.11.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
@@ -295,6 +295,7 @@ Standalone-first apps don't need this — import the components/directive direct
295
295
  |---|---|---|---|
296
296
  | `apiConfig` | `APIConfig` | — | Runtime API configuration (see below). |
297
297
  | `additionalContext` | `Record<string, unknown>` | — | Optional user context. Include whatever you know about the user (a profile, preferences, workspace, anything) to personalize suggested parameters and options to them. |
298
+ | `generateStartingStateOptions` | `boolean` | `false` | When `true`, each time the query is empty, the initial suggestions are generated fresh — personalized to `additionalContext` when set — instead of the fixed defaults. The initial placeholder text itself is unchanged. |
298
299
  | `optionOverrides` | `Record<string, (query: string) => SuggestionOption[]>` | — | Override options per suggestion type. |
299
300
  | `maskCompletedText` | `boolean` | `false` | When `true`, omits completed params' literal text from API requests (for masking PII/sensitive values from the server). |
300
301
  | `columns` | `number` | `2` | Number of columns in the dropdown grid. |
@@ -518,7 +519,7 @@ ac.destroy();
518
519
 
519
520
  #### Constructor options
520
521
 
521
- Accepts the same shape as `<ai-autocomplete>`'s inputs (`apiConfig`, `additionalContext`, `optionOverrides`, `columns`, `dropdownTrigger`, `optionsPosition`, `closeDropdownOnBlur`, `showNonTappableOptions`, `products`), plus event callbacks (`onSubmit`, `onError`, `onChange`, `onParamsChange`, `onFocus`, `onBlur`, `onProductSelect`) and controlled-mode initial values (`value`, `completedParams`).
522
+ Accepts the same shape as `<ai-autocomplete>`'s inputs (`apiConfig`, `additionalContext`, `generateStartingStateOptions`, `optionOverrides`, `columns`, `dropdownTrigger`, `optionsPosition`, `closeDropdownOnBlur`, `showNonTappableOptions`, `products`), plus event callbacks (`onSubmit`, `onError`, `onChange`, `onParamsChange`, `onFocus`, `onBlur`, `onProductSelect`) and controlled-mode initial values (`value`, `completedParams`).
522
523
 
523
524
  #### State observables
524
525
 
@@ -74,6 +74,7 @@ export class AIAutocompleteComponent {
74
74
  this.controller = new AIAutocompleteController({
75
75
  apiConfig: this.apiConfig,
76
76
  additionalContext: this.additionalContext,
77
+ generateStartingStateOptions: this.generateStartingStateOptions,
77
78
  optionOverrides: this.optionOverrides,
78
79
  maskCompletedText: this.maskCompletedText,
79
80
  columns: this.columns,
@@ -156,6 +157,7 @@ export class AIAutocompleteComponent {
156
157
  // Reactive options
157
158
  if (changes["apiConfig"] ||
158
159
  changes["additionalContext"] ||
160
+ changes["generateStartingStateOptions"] ||
159
161
  changes["optionOverrides"] ||
160
162
  changes["dropdownTrigger"] ||
161
163
  changes["optionsPosition"] ||
@@ -165,6 +167,7 @@ export class AIAutocompleteComponent {
165
167
  this.controller.update({
166
168
  apiConfig: this.apiConfig,
167
169
  additionalContext: this.additionalContext,
170
+ generateStartingStateOptions: this.generateStartingStateOptions,
168
171
  optionOverrides: this.optionOverrides,
169
172
  dropdownTrigger: this.dropdownTrigger,
170
173
  optionsPosition: this.optionsPosition,
@@ -344,7 +347,7 @@ export class AIAutocompleteComponent {
344
347
  }
345
348
  }
346
349
  AIAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
347
- AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", optionOverrides: "optionOverrides", maskCompletedText: "maskCompletedText", columns: "columns", pillPlacement: "pillPlacement", mode: "mode", optionsPosition: "optionsPosition", animations: "animations", dropdownTrigger: "dropdownTrigger", closeDropdownOnBlur: "closeDropdownOnBlur", showNonTappableOptions: "showNonTappableOptions", showSkipButton: "showSkipButton", autoFocus: "autoFocus", value: "value", completedParams: "completedParams", products: "products", submitButton: "submitButton" }, outputs: { submitted: "submitted", errored: "errored", valueChange: "valueChange", completedParamsChange: "completedParamsChange", focused: "focused", blurred: "blurred", productSelect: "productSelect" }, providers: [
350
+ AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", generateStartingStateOptions: "generateStartingStateOptions", optionOverrides: "optionOverrides", maskCompletedText: "maskCompletedText", columns: "columns", pillPlacement: "pillPlacement", mode: "mode", optionsPosition: "optionsPosition", animations: "animations", dropdownTrigger: "dropdownTrigger", closeDropdownOnBlur: "closeDropdownOnBlur", showNonTappableOptions: "showNonTappableOptions", showSkipButton: "showSkipButton", autoFocus: "autoFocus", value: "value", completedParams: "completedParams", products: "products", submitButton: "submitButton" }, outputs: { submitted: "submitted", errored: "errored", valueChange: "valueChange", completedParamsChange: "completedParamsChange", focused: "focused", blurred: "blurred", productSelect: "productSelect" }, providers: [
348
351
  {
349
352
  provide: NG_VALUE_ACCESSOR,
350
353
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
@@ -372,6 +375,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
372
375
  type: Input
373
376
  }], additionalContext: [{
374
377
  type: Input
378
+ }], generateStartingStateOptions: [{
379
+ type: Input
375
380
  }], optionOverrides: [{
376
381
  type: Input
377
382
  }], maskCompletedText: [{
@@ -444,4 +449,4 @@ function resolveInitialMode(mode) {
444
449
  return "dark";
445
450
  return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
446
451
  }
447
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUlOLE1BQU0sRUFDTixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTZCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUlMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUlkLGVBQWUsR0FDaEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBRTFGOzs7Ozs7O0dBT0c7QUF3QkgsTUFBTSxPQUFPLHVCQUF1QjtJQXZCcEM7UUFxQ1csc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLHdEQUF3RDtRQUMvQyxr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QUFNO2dCQUNZLE9BQU87c0JBQXpCLE1BQU07Z0JBTVksYUFBYTtzQkFBL0IsTUFBTTtnQkFJbUMsWUFBWTtzQkFBckQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNBLFNBQVM7c0JBQWhELFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFDVixnQkFBZ0I7c0JBQTNDLFNBQVM7dUJBQUMsZUFBZTs7QUE4VTVCLFNBQVMsSUFBSTtJQUNYLG1DQUFtQztBQUNyQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLElBQW9CO0lBQzlDLElBQUksSUFBSSxLQUFLLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQztJQUNqQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUNqRCxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3RGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgdHlwZSBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgdHlwZSBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBpbmplY3QsXG4gIE5nWm9uZSxcbiAgdHlwZSBPbkNoYW5nZXMsXG4gIHR5cGUgT25EZXN0cm95LFxuICB0eXBlIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgdHlwZSBTaW1wbGVDaGFuZ2VzLFxuICB0eXBlIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgdHlwZSBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7XG4gIHR5cGUgQVBJQ29uZmlnLFxuICB0eXBlIEFwcGVhcmFuY2VNb2RlLFxuICB0eXBlIEF1dG9jb21wbGV0ZVJlc3VsdCxcbiAgYnVpbGRTdWJtaXRSZXN1bHQsXG4gIHR5cGUgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgZXh0cmFjdFBsYWluVGV4dCxcbiAgTW9kZUNvbnRyb2xsZXIsXG4gIHR5cGUgT3B0aW9uT3ZlcnJpZGVzLFxuICB0eXBlIFByb2R1Y3QsXG4gIHR5cGUgUHJvZHVjdHNDb25maWcsXG4gIHNldEN1cnNvck9mZnNldCxcbn0gZnJvbSBcIkBtYWdpY3gtZW5nL2FpLWF1dG9jb21wbGV0ZS12YW5pbGxhXCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FpLWF1dG9jb21wbGV0ZS1kcm9wZG93bi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24uY29tcG9uZW50XCI7XG5pbXBvcnQgeyBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vY29udHJvbGxlci9haS1hdXRvY29tcGxldGUuY29udHJvbGxlclwiO1xuaW1wb3J0IHsgQUlBdXRvY29tcGxldGVFZGl0b3JIb3N0RGlyZWN0aXZlIH0gZnJvbSBcIi4uL2ludGVybmFsL2VkaXRvci1ob3N0L2VkaXRvci1ob3N0LmRpcmVjdGl2ZVwiO1xuaW1wb3J0IHsgUGlsbExpc3RDb21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvcGlsbC1saXN0L3BpbGwtbGlzdC5jb21wb25lbnRcIjtcbmltcG9ydCB7IFN1Ym1pdEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gXCIuLi9pbnRlcm5hbC9zdWJtaXQtYnV0dG9uL3N1Ym1pdC1idXR0b24uY29tcG9uZW50XCI7XG5cbi8qKlxuICogVGllciAxIGNvbXBvbmVudCDigJQgYDxhaS1hdXRvY29tcGxldGU+YC4gVGhlIEFuZ3VsYXIgZXF1aXZhbGVudCBvZiBSZWFjdCdzXG4gKiBgPEFJQXV0b2NvbXBsZXRlIC8+YC4gT3ducyB0aGUgY29udGVudEVkaXRhYmxlIGVkaXRvciwgaW5saW5lIHBpbGxzLCBtb2RlXG4gKiBjb250cm9sbGVyLCBzdWJtaXQgYnV0dG9uIHNsb3QsIGFuZCBhbiBlbWJlZGRlZFxuICoge0BsaW5rIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcn0gdGhhdCBkcml2ZXMgdGhlIGRyb3Bkb3duLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcImFpLWF1dG9jb21wbGV0ZVwiLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFJQXV0b2NvbXBsZXRlRHJvcGRvd25Db21wb25lbnQsXG4gICAgQUlBdXRvY29tcGxldGVFZGl0b3JIb3N0RGlyZWN0aXZlLFxuICAgIFBpbGxMaXN0Q29tcG9uZW50LFxuICAgIFN1Ym1pdEJ1dHRvbkNvbXBvbmVudCxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sXCIsXG4gIHN0eWxlVXJsczogW1wiLi9haS1hdXRvY29tcGxldGUuY29tcG9uZW50LmNzc1wiXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBSUF1dG9jb21wbGV0ZUNvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBSUF1dG9jb21wbGV0ZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG57XG4gIC8vID09PSBJbnB1dHMgKG1pcnJvcnMgUmVhY3QncyBBSUF1dG9jb21wbGV0ZVByb3BzKSA9PT1cblxuICBASW5wdXQoKSBhcGlDb25maWc/OiBBUElDb25maWc7XG4gIC8qKlxuICAgKiBPcHRpb25hbCB1c2VyIGNvbnRleHQuIEluY2x1ZGUgd2hhdGV2ZXIgeW91IGtub3cgYWJvdXQgdGhlIHVzZXIg4oCUIGFcbiAgICogcHJvZmlsZSwgcHJlZmVyZW5jZXMsIHdvcmtzcGFjZSwgYW55dGhpbmcg4oCUIHRvIHBlcnNvbmFsaXplIHN1Z2dlc3RlZFxuICAgKiBwYXJhbWV0ZXJzIGFuZCBvcHRpb25zIHRvIHRoZW0uIEJpbmQgYSBzdGFibGUgcmVmZXJlbmNlOyB0aGUgc2FtZSBzd2FwXG4gICAqIHJ1bGUgdGhhdCBhcHBsaWVzIHRvIGBhcGlDb25maWdgIGFwcGxpZXMgaGVyZS5cbiAgICovXG4gIEBJbnB1dCgpIGFkZGl0aW9uYWxDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIEBJbnB1dCgpIG9wdGlvbk92ZXJyaWRlcz86IE9wdGlvbk92ZXJyaWRlcztcbiAgQElucHV0KCkgbWFza0NvbXBsZXRlZFRleHQgPSBmYWxzZTtcbiAgQElucHV0KCkgY29sdW1ucz86IG51bWJlcjtcbiAgLyoqIFdoZXJlIHVuZmlsbGVkIHBpbGxzIHJlbmRlci4gRGVmYXVsdDogXCJkcm9wZG93blwiLiAqL1xuICBASW5wdXQoKSBwaWxsUGxhY2VtZW50OiBcImlubGluZVwiIHwgXCJkcm9wZG93blwiIHwgXCJoaWRkZW5cIiA9IFwiZHJvcGRvd25cIjtcbiAgLyoqIENvbG9yIG1vZGUuIFwiYXV0b1wiIGZvbGxvd3MgcHJlZmVycy1jb2xvci1zY2hlbWUuIERlZmF1bHQ6IFwiYXV0b1wiLiAqL1xuICBASW5wdXQoKSBtb2RlOiBBcHBlYXJhbmNlTW9kZSA9IFwiYXV0b1wiO1xuICBASW5wdXQoKSBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIiA9IFwiYmVsb3dcIjtcbiAgQElucHV0KCkgYW5pbWF0aW9ucyA9IHRydWU7XG4gIEBJbnB1dCgpIGRyb3Bkb3duVHJpZ2dlcj86IFwiYXV0b1wiIHwgXCJtYW51YWxcIiB8IFwiaGlkZGVuXCI7XG4gIEBJbnB1dCgpIGNsb3NlRHJvcGRvd25PbkJsdXI/OiBib29sZWFuO1xuICBASW5wdXQoKSBzaG93Tm9uVGFwcGFibGVPcHRpb25zPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIHRoZSBkcm9wZG93bidzIHBpbGwgYmFyIGVuZHMgaW4gYSBzbWFsbCBcInNraXBcIiBidXR0b25cbiAgICogdGhhdCBkaXNtaXNzZXMgdGhlIGFjdGl2ZSBwaWxsIOKAlCBzYW1lIGFjdGlvbiBhcyBwcmVzc2luZyDihpIgYXQgdGhlIGVuZCBvZlxuICAgKiB0aGUgaW5wdXQuIFNldCB0byBmYWxzZSB0byBoaWRlIGl0LiBXaGVuIHBpbGxzIHJlbmRlciBlbHNld2hlcmVcbiAgICogKGBwaWxsUGxhY2VtZW50OiBcImlubGluZVwiYCAvIGBcImhpZGRlblwiYCkgdGhlIGJhciByZW5kZXJzIGFzIGEgc2tpcC1vbmx5XG4gICAqIHJvdyBob2xkaW5nIGp1c3QgdGhlIGJ1dHRvbi4gSGlkZGVuIHdoaWxlIHRoZSBpbnB1dCBpcyBlbXB0eSDigJQgaXQgYXBwZWFyc1xuICAgKiBhbG9uZ3NpZGUgdGhlIGZvb3RlcidzIFwi4oaSIHRvIHNraXBcIiBoaW50IG9uY2UgdGhlIHVzZXIgaGFzIHR5cGVkLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1NraXBCdXR0b24gPSB0cnVlO1xuICAvKiogRm9jdXMgdGhlIGVkaXRvciBvbiBtb3VudC4gRGVmYXVsdDogdHJ1ZS4gKi9cbiAgQElucHV0KCkgYXV0b0ZvY3VzID0gdHJ1ZTtcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSB0ZXh0IHZhbHVlLiAqL1xuICBASW5wdXQoKSB2YWx1ZT86IHN0cmluZztcbiAgLyoqIENvbnRyb2xsZWQtbW9kZSBjb21wbGV0ZWQgcGFyYW1zLiAqL1xuICBASW5wdXQoKSBjb21wbGV0ZWRQYXJhbXM/OiBDb21wbGV0ZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBPcHQtaW4gcHJvZHVjdCBzdHJpcC4gV2hlbiBzZXQsIHRoZSBkcm9wZG93biByZW5kZXJzIGEgaG9yaXpvbnRhbCByb3cgb2ZcbiAgICogcHJvZHVjdCBjYXJkcyBiZWxvdyB0aGUgb3B0aW9ucyBncmlkLCBmZWQgYnkgeW91ciBvd24gc2VhcmNoIGVuZHBvaW50IG9uXG4gICAqIHRoZSBTREsncyBleGlzdGluZyBmZXRjaCBjYWRlbmNlLiBPbWl0IGl0IGFuZCBub3RoaW5nIGFib3V0IHRoZSBkcm9wZG93blxuICAgKiBjaGFuZ2VzIOKAlCBubyByZXF1ZXN0LCBubyBtYXJrdXAsIG5vIGxheW91dCBzaGlmdC5cbiAgICpcbiAgICogQmluZCBhIHN0YWJsZSByZWZlcmVuY2UgKGEgY29tcG9uZW50IGZpZWxkLCBub3QgYW4gaW5saW5lIG9iamVjdCBsaXRlcmFsKTpcbiAgICogYSBuZXcgb2JqZWN0IG9uIGVhY2ggY2hhbmdlLWRldGVjdGlvbiBwYXNzIHJlYWRzIGFzIGEgc3dhcHBlZCBpbnRlZ3JhdGlvblxuICAgKiBhbmQgY2xlYXJzIHRoZSBjdXJyZW50IGNhcmRzIOKAlCB0aGUgc2FtZSBydWxlIHRoYXQgYWxyZWFkeSBhcHBsaWVzIHRvXG4gICAqIGBhcGlDb25maWdgIGFuZCBgb3B0aW9uT3ZlcnJpZGVzYC5cbiAgICovXG4gIEBJbnB1dCgpIHByb2R1Y3RzPzogUHJvZHVjdHNDb25maWc7XG4gIC8qKlxuICAgKiBDdXN0b20gc3VibWl0IGJ1dHRvbi4gUGFzcyBhIGA8bmctdGVtcGxhdGU+YCB0byByZXBsYWNlIHRoZSBkZWZhdWx0IGFycm93XG4gICAqIGJ1dHRvbi4gUGFzcyBgbnVsbGAgdG8gcmVuZGVyIG5vIGJ1dHRvbi4gRGVmYXVsdCAoYHVuZGVmaW5lZGApIHJlbmRlcnNcbiAgICogdGhlIGJ1aWx0LWluIGFycm93LlxuICAgKi9cbiAgQElucHV0KCkgc3VibWl0QnV0dG9uPzogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsO1xuXG4gIC8vID09PSBPdXRwdXRzID09PVxuXG4gIC8qKiBDYWxsZWQgb24gRW50ZXIgb3Igc3VibWl0LWJ1dHRvbiBjbGljay4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHN1Ym1pdHRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QXV0b2NvbXBsZXRlUmVzdWx0PigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgZXJyb3JlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXJyb3I+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgY29tcGxldGVkUGFyYW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb21wbGV0ZWRQYXJhbVN0YXRlW10+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBhY3RpdmF0ZXMgYSBwcm9kdWN0IGNhcmQuIFRoZSBTREsgZG9lcyBub3RcbiAgICogbmF2aWdhdGUg4oCUIHlvdSBkZWNpZGUgd2hhdCBhIHNlbGVjdGlvbiBtZWFucy4gTW9kaWZpZXIgLyBtaWRkbGUgY2xpY2tzIGFyZVxuICAgKiBsZWZ0IHRvIHRoZSBicm93c2VyIChjbWQtY2xpY2sgc3RpbGwgb3BlbnMgYSB0YWIpIGFuZCBkb24ndCBlbWl0LlxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IHByb2R1Y3RTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPFByb2R1Y3Q+KCk7XG5cbiAgLy8gPT09IFZpZXcgcmVmcyA9PT1cblxuICBAVmlld0NoaWxkKFwiY29udGFpbmVyXCIsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFwiZWRpdG9yXCIsIHsgc3RhdGljOiBmYWxzZSB9KSBlZGl0b3JSZWY/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChcInBpbGxDb250YWluZXJcIikgcGlsbENvbnRhaW5lclJlZj86IEVsZW1lbnRSZWY8SFRNTFNwYW5FbGVtZW50PjtcblxuICAvLyA9PT0gUHVibGljIHN0YXRlIGZvciB0aGUgdGVtcGxhdGUgPT09XG5cbiAgY29udHJvbGxlciE6IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcjtcbiAgLyoqXG4gICAqIENvbmNyZXRlIGxpZ2h0L2RhcmsgdmFsdWUgYm91bmQgdG8gYFthdHRyLmRhdGEtbW9kZV1gLiBTZWVkZWQgaW4gbmdPbkluaXRcbiAgICogc28gdGhlIGF0dHJpYnV0ZSBpcyBwcmVzZW50IGR1cmluZyBTU1IgKHdoZXJlIE1vZGVDb250cm9sbGVyLCBnYXRlZCBiZWhpbmRcbiAgICogaXNQbGF0Zm9ybUJyb3dzZXIgaW4gbmdBZnRlclZpZXdJbml0LCBuZXZlciBydW5zKS4gT24gdGhlIGJyb3dzZXIgdGhlXG4gICAqIE1vZGVDb250cm9sbGVyJ3MgcmVzb2x2ZSBjYWxsYmFjayBrZWVwcyB0aGlzIGluIHN5bmMg4oCUIHNvIGl0cyBydW50aW1lXG4gICAqIHByZWZlcnMtY29sb3Itc2NoZW1lIHVwZGF0ZXMgYW5kIHRoaXMgYmluZGluZyBhbHdheXMgYWdyZWUgKG5vIGNsb2JiZXIpLlxuICAgKi9cbiAgcmVzb2x2ZWRNb2RlOiBcImxpZ2h0XCIgfCBcImRhcmtcIiA9IFwiZGFya1wiO1xuXG4gIC8vID09PSBJbnRlcm5hbCA9PT1cblxuICBwcml2YXRlIG1vZGVDb250cm9sbGVyPzogTW9kZUNvbnRyb2xsZXI7XG4gIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI/OiBSZXNpemVPYnNlcnZlcjtcbiAgcHJpdmF0ZSBvbkNoYW5nZUZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgb25Ub3VjaGVkRm46ICgpID0+IHZvaWQgPSBub29wO1xuICAvLyBIb2xkcyBhIHZhbHVlIHdyaXR0ZW4gYnkgUmVhY3RpdmUgRm9ybXMgYmVmb3JlIG5nT25Jbml0IHJhbi4gUmVhY3RpdmVcbiAgLy8gRm9ybXMgY2FuIGNhbGwgd3JpdGVWYWx1ZSgpIGR1cmluZyBkeW5hbWljIGZvcm0gY29uc3RydWN0aW9uIChlLmcuIHdoZW5cbiAgLy8gYSBGb3JtQ29udHJvbCBhbHJlYWR5IGhvbGRzIGEgdmFsdWUgYXQgdGhlIG1vbWVudCB0aGUgZGlyZWN0aXZlIGlzXG4gIC8vIGNyZWF0ZWQpLiBXZSBzdGFzaCB0aGUgdmFsdWUgaGVyZSBhbmQgZmx1c2ggaXQgaW4gbmdPbkluaXQgKmFmdGVyKlxuICAvLyB0aGUgY29udHJvbGxlciBleGlzdHMg4oCUIG90aGVyd2lzZSB0aGUgZWRpdG9yIHJlbmRlcnMgZW1wdHkgZXZlbiB0aG91Z2hcbiAgLy8gdGhlIGZvcm0gaGFkIGEgdmFsdWUuIGB1bmRlZmluZWRgIG1lYW5zIFwibm8gcGVuZGluZyB3cml0ZVwiLlxuICBwcml2YXRlIHBlbmRpbmdXcml0ZVZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8gwqcxNi45OiBwcmVmZXIgYGluamVjdCgpYCBvdmVyIGNvbnN0cnVjdG9yLXBhcmFtZXRlciBESSBmb3IgY29tcG9uZW50cy5cbiAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgcHJpdmF0ZSByZWFkb25seSB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBTZWVkIGJlZm9yZSB0aGUgYnJvd3NlciBndWFyZCBzbyBTU1IgcmVuZGVycyBhIGNvbmNyZXRlIGRhdGEtbW9kZS5cbiAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVJbml0aWFsTW9kZSh0aGlzLm1vZGUpO1xuICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5jb250cm9sbGVyID0gbmV3IEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlcih7XG4gICAgICBhcGlDb25maWc6IHRoaXMuYXBpQ29uZmlnLFxuICAgICAgYWRkaXRpb25hbENvbnRleHQ6IHRoaXMuYWRkaXRpb25hbENvbnRleHQsXG4gICAgICBvcHRpb25PdmVycmlkZXM6IHRoaXMub3B0aW9uT3ZlcnJpZGVzLFxuICAgICAgbWFza0NvbXBsZXRlZFRleHQ6IHRoaXMubWFza0NvbXBsZXRlZFRleHQsXG4gICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMsXG4gICAgICBkcm9wZG93blRyaWdnZXI6IHRoaXMuZHJvcGRvd25UcmlnZ2VyLFxuICAgICAgb3B0aW9uc1Bvc2l0aW9uOiB0aGlzLm9wdGlvbnNQb3NpdGlvbixcbiAgICAgIGNsb3NlRHJvcGRvd25PbkJsdXI6IHRoaXMuY2xvc2VEcm9wZG93bk9uQmx1cixcbiAgICAgIHNob3dOb25UYXBwYWJsZU9wdGlvbnM6IHRoaXMuc2hvd05vblRhcHBhYmxlT3B0aW9ucyxcbiAgICAgIHNvdXJjZTogXCJmdWxsLXNka1wiLFxuICAgICAgcHJvZHVjdHM6IHRoaXMucHJvZHVjdHMsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGNvbXBsZXRlZFBhcmFtczogdGhpcy5jb21wbGV0ZWRQYXJhbXMsXG4gICAgICBvblN1Ym1pdDogKHJlc3VsdCkgPT4gdGhpcy5oYW5kbGVTdWJtaXQocmVzdWx0KSxcbiAgICAgIG9uRXJyb3I6IChlcnJvcikgPT4gdGhpcy5lcnJvcmVkLmVtaXQoZXJyb3IpLFxuICAgICAgb25DaGFuZ2U6ICh0ZXh0KSA9PiB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0ZXh0KTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZUZuKHRleHQpO1xuICAgICAgfSxcbiAgICAgIG9uUGFyYW1zQ2hhbmdlOiAocGFyYW1zKSA9PiB0aGlzLmNvbXBsZXRlZFBhcmFtc0NoYW5nZS5lbWl0KHBhcmFtcyksXG4gICAgICBvbkZvY3VzOiAoKSA9PiB0aGlzLmZvY3VzZWQuZW1pdCgpLFxuICAgICAgb25Qcm9kdWN0U2VsZWN0OiAocHJvZHVjdCkgPT4gdGhpcy5wcm9kdWN0U2VsZWN0LmVtaXQocHJvZHVjdCksXG4gICAgICBvbkJsdXI6ICgpID0+IHtcbiAgICAgICAgdGhpcy5ibHVycmVkLmVtaXQoKTtcbiAgICAgICAgdGhpcy5vblRvdWNoZWRGbigpO1xuICAgICAgfSxcbiAgICAgIHNldEN1cnNvcjogKG9mZnNldCkgPT4ge1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKCFlZGl0b3IpIHJldHVybjtcbiAgICAgICAgZWRpdG9yLmZvY3VzKCk7XG4gICAgICAgIHNldEN1cnNvck9mZnNldChlZGl0b3IsIG9mZnNldCk7XG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMucGVuZGluZ1dyaXRlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnNldFZhbHVlKHRoaXMucGVuZGluZ1dyaXRlVmFsdWUpO1xuICAgICAgdGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG4gICAgLy8gTW9kZUNvbnRyb2xsZXIgd3JpdGVzIGBkYXRhLW1vZGVgIHRvIHRoZSBlbGVtZW50IGl0J3MgZ2l2ZW4uIFRoZSBDU1NcbiAgICAvLyBzZWxlY3RvcnMgYXJlIHNjb3BlZCB0byBgLm1hZ2ljeC1haWFbZGF0YS1tb2RlPVwiLi4uXCJdYCDigJQgd2hpY2ggbGl2ZXMgb25cbiAgICAvLyB0aGUgaW5uZXIgYDxkaXYgY2xhc3M9XCJtYWdpY3gtYWlhIG1hZ2ljeC1haWEtY29udGFpbmVyXCIgI2NvbnRhaW5lcj5gLFxuICAgIC8vIE5PVCB0aGUgaG9zdCBgPGFpLWF1dG9jb21wbGV0ZT5gIGVsZW1lbnQuIFRoZSByZXNvbHZlIGNhbGxiYWNrIG1pcnJvcnNcbiAgICAvLyB0aGUgdmFsdWUgaW50byBgcmVzb2x2ZWRNb2RlYCBzbyB0aGUgYFthdHRyLmRhdGEtbW9kZV1gIGJpbmRpbmcgc3RheXMgaW5cbiAgICAvLyBsb2Nrc3RlcCB3aXRoIE1vZGVDb250cm9sbGVyIOKAlCB0aGUgYmluZGluZyBoYW5kbGVzIFNTUiwgTW9kZUNvbnRyb2xsZXJcbiAgICAvLyBoYW5kbGVzIHJ1bnRpbWUgcHJlZmVycy1jb2xvci1zY2hlbWUgc3dpdGNoZXMsIGFuZCBiZWNhdXNlIHRoZXkgYWx3YXlzXG4gICAgLy8gYWdyZWUgbmVpdGhlciBjbG9iYmVycyB0aGUgb3RoZXIuXG4gICAgdGhpcy5tb2RlQ29udHJvbGxlciA9IG5ldyBNb2RlQ29udHJvbGxlcihcbiAgICAgIHRoaXMuY29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLm1vZGUsXG4gICAgICAocmVzb2x2ZWQpID0+IHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZE1vZGUgPSByZXNvbHZlZDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBQaWxsLXdyYXAgZGV0ZWN0aW9uIOKAlCB3aGVuIHRoZSBwaWxsIGxpc3Qgd3JhcHMgYmVsb3cgdGhlIGVkaXRvcidzIGxhc3RcbiAgICAvLyBsaW5lLCBkcm9wIGl0cyA4cHggbGVmdCBtYXJnaW4gdmlhIGEgZGF0YSBhdHRyaWJ1dGUgdGhlIENTUyBrZXlzIG9mZi5cbiAgICAvLyBNaXJyb3JzIHRoZSBSZWFjdCBjb21wb25lbnQncyB1c2VMYXlvdXRFZmZlY3QuXG4gICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB0aGlzLm1lYXN1cmVQaWxsV3JhcCgpKTtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChlZGl0b3IpIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShlZGl0b3IpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1lYXN1cmVQaWxsV3JhcCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29udHJvbGxlcikgcmV0dXJuO1xuICAgIC8vIGBTaW1wbGVDaGFuZ2VzYCBpcyBgeyBba2V5OiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfWAsIHNvIHBlclxuICAgIC8vIGBub1Byb3BlcnR5QWNjZXNzRnJvbUluZGV4U2lnbmF0dXJlYCBlYWNoIGtleSBsb29rdXAgdXNlcyBicmFja2V0XG4gICAgLy8gbm90YXRpb24g4oCUIHRoaXMga2VlcHMgdGhlIHN0cmljdG5lc3MgY29udHJhY3QgdGhhdCB0aGUgcmVzdCBvZiB0aGVcbiAgICAvLyB3b3Jrc3BhY2UgZW5mb3JjZXMuXG4gICAgLy8gQ29udHJvbGxlZC1tb2RlIHByb3BhZ2F0aW9uXG4gICAgaWYgKGNoYW5nZXNbXCJ2YWx1ZVwiXSAmJiB0aGlzLnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY29udHJvbGxlci5zZXRWYWx1ZSh0aGlzLnZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbXCJjb21wbGV0ZWRQYXJhbXNcIl0gJiYgdGhpcy5jb21wbGV0ZWRQYXJhbXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnNldENvbXBsZXRlZFBhcmFtcyh0aGlzLmNvbXBsZXRlZFBhcmFtcyk7XG4gICAgfVxuICAgIC8vIFJlYWN0aXZlIG9wdGlvbnNcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzW1wiYXBpQ29uZmlnXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wiYWRkaXRpb25hbENvbnRleHRcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJvcHRpb25PdmVycmlkZXNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJkcm9wZG93blRyaWdnZXJcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJvcHRpb25zUG9zaXRpb25cIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJjbG9zZURyb3Bkb3duT25CbHVyXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wic2hvd05vblRhcHBhYmxlT3B0aW9uc1wiXSB8fFxuICAgICAgY2hhbmdlc1tcInByb2R1Y3RzXCJdXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIudXBkYXRlKHtcbiAgICAgICAgYXBpQ29uZmlnOiB0aGlzLmFwaUNvbmZpZyxcbiAgICAgICAgYWRkaXRpb25hbENvbnRleHQ6IHRoaXMuYWRkaXRpb25hbENvbnRleHQsXG4gICAgICAgIG9wdGlvbk92ZXJyaWRlczogdGhpcy5vcHRpb25PdmVycmlkZXMsXG4gICAgICAgIGRyb3Bkb3duVHJpZ2dlcjogdGhpcy5kcm9wZG93blRyaWdnZXIsXG4gICAgICAgIG9wdGlvbnNQb3NpdGlvbjogdGhpcy5vcHRpb25zUG9zaXRpb24sXG4gICAgICAgIGNsb3NlRHJvcGRvd25PbkJsdXI6IHRoaXMuY2xvc2VEcm9wZG93bk9uQmx1cixcbiAgICAgICAgc2hvd05vblRhcHBhYmxlT3B0aW9uczogdGhpcy5zaG93Tm9uVGFwcGFibGVPcHRpb25zLFxuICAgICAgICAvLyBTYW1lIHJlZmVyZW5jZSBvbiBhbiB1bnJlbGF0ZWQgY2hhbmdlIGlzIGEgbm8tb3AgaW4gdGhlIGNvcmU7IG9ubHkgYVxuICAgICAgICAvLyBnZW51aW5lbHkgc3dhcHBlZCAob3IgcmVtb3ZlZCkgaW50ZWdyYXRpb24gY2xlYXJzIHRoZSBzdHJpcC5cbiAgICAgICAgcHJvZHVjdHM6IHRoaXMucHJvZHVjdHMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbXCJtb2RlXCJdKSB7XG4gICAgICAvLyBLZWVwIHRoZSBiaW5kaW5nIGNvcnJlY3QgZXZlbiB3aGVuIE1vZGVDb250cm9sbGVyIGRvZXNuJ3QgZXhpc3QgeWV0XG4gICAgICAvLyAoU1NSIC8gcHJlLW5nQWZ0ZXJWaWV3SW5pdCkuIE9uIHRoZSBicm93c2VyLCBzZXRNb2RlIHRyaWdnZXJzIHRoZVxuICAgICAgLy8gcmVzb2x2ZSBjYWxsYmFjayB3aGljaCBzZXRzIHRoZSBzYW1lIHZhbHVlLlxuICAgICAgdGhpcy5yZXNvbHZlZE1vZGUgPSByZXNvbHZlSW5pdGlhbE1vZGUodGhpcy5tb2RlKTtcbiAgICAgIHRoaXMubW9kZUNvbnRyb2xsZXI/LnNldE1vZGUodGhpcy5tb2RlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5tb2RlQ29udHJvbGxlcj8uZGVzdHJveSgpO1xuICAgIHRoaXMuY29udHJvbGxlcj8uZGVzdHJveSgpO1xuICB9XG5cbiAgLy8gPT09IEltcGVyYXRpdmUgQVBJIChleHBvc2VkIG9uIHRoZSBjb21wb25lbnQgaW5zdGFuY2UgdmlhIEBWaWV3Q2hpbGQpID09PVxuXG4gIC8qKiBQcm9ncmFtbWF0aWNhbGx5IGZvY3VzIHRoZSBlZGl0b3IuICovXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICAvKiogUHJvZ3JhbW1hdGljYWxseSBibHVyIHRoZSBlZGl0b3IuICovXG4gIGJsdXIoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICB9XG5cbiAgLyoqIENsZWFyIGFsbCBzdGF0ZSwgcm90YXRlIHNlc3Npb24sIGFuZCByZS1mZXRjaC4gKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyPy5yZXNldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNraXAgdGhlIGFjdGl2ZSBwaWxsIOKAlCBzYW1lIGFjdGlvbiBhcyB0aGUgZHJvcGRvd24ncyBza2lwIGJ1dHRvbiAvIOKGki5cbiAgICogTGV0cyBhIGNvbnN1bWVyIHdobyBoaWRlcyB0aGUgYnVpbHQtaW4gYnV0dG9uIChgc2hvd1NraXBCdXR0b249ZmFsc2VgKVxuICAgKiBkcml2ZSBza2lwcGluZyBmcm9tIHRoZWlyIG93biBVSS5cbiAgICovXG4gIHNraXBBY3RpdmVQaWxsKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbGxlcj8uc2tpcEFjdGl2ZVBpbGwoKTtcbiAgfVxuXG4gIC8qKiBTd2l0Y2ggY29sb3IgbW9kZSBhdCBydW50aW1lLiAqL1xuICBzZXRNb2RlKG1vZGU6IEFwcGVhcmFuY2VNb2RlKTogdm9pZCB7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVJbml0aWFsTW9kZShtb2RlKTtcbiAgICB0aGlzLm1vZGVDb250cm9sbGVyPy5zZXRNb2RlKG1vZGUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gPT09IFRlbXBsYXRlIGhlbHBlcnMgPT09XG5cbiAgLyoqXG4gICAqICdkZWZhdWx0JyDihpIgcmVuZGVyIHRoZSBidWlsdC1pbiBhcnJvdyBidXR0b24uXG4gICAqICdjdXN0b20nICDihpIgcHJvamVjdCB0aGUgY29uc3VtZXItc3VwcGxpZWQgVGVtcGxhdGVSZWYuXG4gICAqICdoaWRkZW4nICDihpIgbm8gYnV0dG9uLlxuICAgKi9cbiAgZ2V0IHN1Ym1pdEJ1dHRvblN0YXRlKCk6IFwiZGVmYXVsdFwiIHwgXCJjdXN0b21cIiB8IFwiaGlkZGVuXCIge1xuICAgIGlmICh0aGlzLnN1Ym1pdEJ1dHRvbiA9PT0gbnVsbCkgcmV0dXJuIFwiaGlkZGVuXCI7XG4gICAgaWYgKHRoaXMuc3VibWl0QnV0dG9uID09PSB1bmRlZmluZWQpIHJldHVybiBcImRlZmF1bHRcIjtcbiAgICByZXR1cm4gXCJjdXN0b21cIjtcbiAgfVxuXG4gIC8qKiBOYXJyb3dlZCBhY2Nlc3NvciBmb3IgKm5nVGVtcGxhdGVPdXRsZXQg4oCUIG5ldmVyIHVuZGVmaW5lZC4gKi9cbiAgZ2V0IGN1c3RvbVN1Ym1pdFRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc3VibWl0QnV0dG9uID8/IG51bGw7XG4gIH1cblxuICBnZXQgc2hvd0lubGluZVBpbGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBpbGxQbGFjZW1lbnQgPT09IFwiaW5saW5lXCI7XG4gIH1cblxuICBnZXQgc2hvd0Ryb3Bkb3duUGlsbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGlsbFBsYWNlbWVudCA9PT0gXCJkcm9wZG93blwiO1xuICB9XG5cbiAgLyoqXG4gICAqIGB0cnVlYCB3aGVuIHRoZXJlJ3Mgc29tZXRoaW5nIHRvIHN1Ym1pdCDigJQgZHJpdmVuIGJ5IGN1cnJlbnQgc2VnbWVudHNcbiAgICogYW5kIGNvbXBsZXRlZCBwYXJhbXMuIFJlYWQgb2ZmIHRoZSBsaXZlIGVkaXRvciB2aWEgdGhlIGNvbnRyb2xsZXIgc3RhdGUuXG4gICAqL1xuICBjYW5TdWJtaXQoc3RhdGU6IHsgc2VnbWVudHM6IHsgbGVuZ3RoOiBudW1iZXIgfTsgY29tcGxldGVkUGFyYW1zOiB7IGxlbmd0aDogbnVtYmVyIH0gfSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zZWdtZW50cy5sZW5ndGggPiAwIHx8IHN0YXRlLmNvbXBsZXRlZFBhcmFtcy5sZW5ndGggPiAwO1xuICB9XG5cbiAgb25XcmFwcGVyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBDbGlja2luZyBhIHBpbGwgc2hvdWxkIGFjdGl2YXRlIGl0IHdpdGhvdXQgc3RlYWxpbmcgZm9jdXMgZWxzZXdoZXJlLlxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKHRhcmdldD8uY2xvc2VzdChcIltkYXRhLWFpYS1waWxsXVwiKSkgcmV0dXJuO1xuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIG9uU3VibWl0QnV0dG9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmhhbmRsZVN1Ym1pdEZyb21Vc2VyQWN0aW9uKCk7XG4gIH1cblxuICBvblN1Ym1pdFNsb3RDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaGFuZGxlU3VibWl0RnJvbVVzZXJBY3Rpb24oKTtcbiAgfVxuXG4gIG9uU2VsZWN0UGlsbChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyLnNldEFjdGl2ZVBpbGwoaW5kZXgpO1xuICB9XG5cbiAgLy8gPT09IENvbnRyb2xWYWx1ZUFjY2Vzc29yID09PVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBuZXh0ID0gdmFsdWUgPz8gXCJcIjtcbiAgICBpZiAoIXRoaXMuY29udHJvbGxlcikge1xuICAgICAgLy8gUmVhY3RpdmUgRm9ybXMgY2FuIGNhbGwgd3JpdGVWYWx1ZSgpIGJlZm9yZSBuZ09uSW5pdCBjcmVhdGVzIHRoZVxuICAgICAgLy8gY29udHJvbGxlciAoZHluYW1pYyBmb3JtIGNvbnN0cnVjdGlvbiwgb3IgYSBGb3JtQ29udHJvbCB0aGF0IGFscmVhZHlcbiAgICAgIC8vIGhhZCBhIHZhbHVlIGF0IGRpcmVjdGl2ZS1jcmVhdGlvbiB0aW1lKS4gQnVmZmVyIHRoZSB2YWx1ZTsgbmdPbkluaXRcbiAgICAgIC8vIGZsdXNoZXMgaXQgYXMgc29vbiBhcyB0aGUgY29udHJvbGxlciBleGlzdHMuXG4gICAgICB0aGlzLnBlbmRpbmdXcml0ZVZhbHVlID0gbmV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb250cm9sbGVyLnNldFZhbHVlKG5leHQpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlRm4gPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWRGbiA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShfZGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBUaGUgY29udGVudEVkaXRhYmxlIGhvc3QgZG9lc24ndCBoYXZlIGEgbmF0aXZlIGRpc2FibGVkIGF0dHJpYnV0ZS4gRm9yXG4gICAgLy8gdjAuMSB3ZSBhY2NlcHQgdGhlIGNhbGwgc28gQW5ndWxhcidzIGZvcm1zIGxheWVyIGRvZXNuJ3QgdGhyb3csIGJ1dFxuICAgIC8vIHRoZSBlZGl0b3Igc3RheXMgaW50ZXJhY3RpdmUuIEEgZnV0dXJlIGVuaGFuY2VtZW50IGNhbiB0b2dnbGVcbiAgICAvLyBjb250ZW50RWRpdGFibGUgKyBBUklBIGRpc2FibGVkIGhlcmUuXG4gIH1cblxuICAvLyA9PT0gU3VibWl0IGZsb3cgPT09XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgY29udHJvbGxlcidzIG9uU3VibWl0IGNhbGxiYWNrICh3aGljaCBmaXJlcyBmcm9tIHRoZVxuICAgKiBrZXlib2FyZCBjb250cm9sbGVyIG9uIEVudGVyKS4gUmVhZHMgdGhlIGxpdmUgZWRpdG9yIHRleHQg4oCUIHNhbWUgdHJpY2tcbiAgICogdGhlIFJlYWN0IGNvbXBvbmVudCB1c2VzIOKAlCBzbyB0aGUgZW1pdHRlZCBxdWVyeSByZWZsZWN0cyB3aGF0ZXZlcidzIGluXG4gICAqIHRoZSBET00gcmlnaHQgbm93LCBub3QgYSBwb3NzaWJseS1zdGFsZSBzdGF0ZSBzbmFwc2hvdC5cbiAgICovXG4gIHByaXZhdGUgaGFuZGxlU3VibWl0KF9yZXN1bHQ6IEF1dG9jb21wbGV0ZVJlc3VsdCk6IHZvaWQge1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghZWRpdG9yKSByZXR1cm47XG4gICAgY29uc3QgdGV4dCA9IGV4dHJhY3RQbGFpblRleHQoZWRpdG9yKTtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY29udHJvbGxlci5nZXRTdGF0ZSgpO1xuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuY29tcGxldGVkUGFyYW1zID8/IHN0YXRlLmNvbXBsZXRlZFBhcmFtcztcbiAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KGJ1aWxkU3VibWl0UmVzdWx0KHRleHQsIHBhcmFtcywgc3RhdGUuc2tpcHBlZFBhcmFtcykpO1xuICAgIHRoaXMuY29udHJvbGxlci5yZXNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY29udHJvbGxlci5nZXRTdGF0ZSgpO1xuICAgIGlmICghdGhpcy5jYW5TdWJtaXQoc3RhdGUpKSByZXR1cm47XG4gICAgLy8gU3ludGhlc2l6ZSB0aGUgcmVzdWx0IGZvciB0aGUgc3VibWl0LWJ1dHRvbiBjbGljayBwYXRoOyBzYW1lIHNoYXBlXG4gICAgLy8gdGhlIGNvbnRyb2xsZXIgd291bGQgZGVsaXZlciBmcm9tIGEga2V5Ym9hcmQgRW50ZXIsIHNvIGhhbmRsZVN1Ym1pdFxuICAgIC8vIGNhbiB0YWtlIGVpdGhlciBlbnRyeSBwb2ludC5cbiAgICB0aGlzLmhhbmRsZVN1Ym1pdCh7XG4gICAgICBxdWVyeTogc3RhdGUudGV4dC50cmltKCksXG4gICAgICByYXdfcXVlcnk6IFwiXCIsXG4gICAgICBjb21wbGV0ZWRfcGFyYW1zOiBbXSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgbWVhc3VyZVBpbGxXcmFwKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucGlsbENvbnRhaW5lclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhZWRpdG9yKSByZXR1cm47XG4gICAgY29uc3QgaW5uZXIgPSBjb250YWluZXIuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgIGlmICghaW5uZXIpIHJldHVybjtcbiAgICAvLyBXcmFwIGRldGVjdGlvbjogdGhlIHBpbGwgcm93J3MgdG9wIHZzIHRoZSBlZGl0b3IncyBib3R0b20uIFdoZW4gdGhlXG4gICAgLy8gcGlsbHMgc2l0IG9uIChvciBhYm92ZSkgdGhlIGVkaXRvcidzIGxhc3QgbGluZSB0aGV5J3JlIE5PVCB3cmFwcGVkIOKAlFxuICAgIC8vIGtlZXAgdGhlIDhweCBtYXJnaW4gc28gdGhleSBkb24ndCBidXR0IGFnYWluc3QgdHlwZWQgdGV4dCBvciB0aGVcbiAgICAvLyBwbGFjZWhvbGRlci4gVGhpcyBoYW5kbGVzIHRoZSBlbXB0eS1lZGl0b3IgKyBwbGFjZWhvbGRlciBjYXNlXG4gICAgLy8gbmF0dXJhbGx5OiB0aGUgcGxhY2Vob2xkZXIgc3RpbGwgb2NjdXBpZXMgdGhlIGVkaXRvcidzIGxpbmUgYm94LlxuICAgIGNvbnN0IGNSZWN0ID0gaW5uZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZVJlY3QgPSBlZGl0b3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgd3JhcHBlZCA9IGNSZWN0LnRvcCA+PSBlUmVjdC5ib3R0b20gLSAyO1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgaWYgKHdyYXBwZWQpIGNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWFpYS1waWxsLXdyYXBwZWRcIiwgXCJcIik7XG4gICAgICBlbHNlIGNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoXCJkYXRhLWFpYS1waWxsLXdyYXBwZWRcIik7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9vcCgpOiB2b2lkIHtcbiAgLy8gRGVmYXVsdCBuby1vcCBmb3IgQ1ZBIGNhbGxiYWNrcy5cbn1cblxuLyoqXG4gKiBSZXNvbHZlIGEgY29uY3JldGUgbGlnaHQvZGFyayB2YWx1ZSBmcm9tIHRoZSBjb25maWd1cmVkIG1vZGUuIFVzZWQgdG8gc2VlZFxuICogdGhlIGBkYXRhLW1vZGVgIGF0dHJpYnV0ZSBzeW5jaHJvbm91c2x5IChpbmNsdWRpbmcgZHVyaW5nIFNTUiwgd2hlcmVcbiAqIE1vZGVDb250cm9sbGVyIG5ldmVyIHJ1bnMpLiBPbiB0aGUgc2VydmVyIGB3aW5kb3dgIGlzIHVuZGVmaW5lZCDihpIgZGVmYXVsdHNcbiAqIHRvIFwiZGFya1wiIChtYXRjaGVzIHRoZSB2YW5pbGxhL1JlYWN0IGJlaGF2aW9yKS5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUluaXRpYWxNb2RlKG1vZGU6IEFwcGVhcmFuY2VNb2RlKTogXCJsaWdodFwiIHwgXCJkYXJrXCIge1xuICBpZiAobW9kZSAhPT0gXCJhdXRvXCIpIHJldHVybiBtb2RlO1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIFwiZGFya1wiO1xuICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoXCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspXCIpLm1hdGNoZXMgPyBcImRhcmtcIiA6IFwibGlnaHRcIjtcbn1cbiIsIjxkaXZcbiAgI2NvbnRhaW5lclxuICBjbGFzcz1cIm1hZ2ljeC1haWEgbWFnaWN4LWFpYS1jb250YWluZXJcIlxuICBbYXR0ci5kYXRhLXBpbGwtcGxhY2VtZW50XT1cInBpbGxQbGFjZW1lbnRcIlxuICBbYXR0ci5kYXRhLW9wdGlvbnMtcG9zaXRpb25dPVwib3B0aW9uc1Bvc2l0aW9uXCJcbiAgW2F0dHIuZGF0YS1hbmltYXRpb25zXT1cImFuaW1hdGlvbnMgPyAnb24nIDogJ29mZidcIlxuICBbYXR0ci5kYXRhLW1vZGVdPVwicmVzb2x2ZWRNb2RlXCJcbj5cbiAgPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93blxuICAgICpuZ0lmPVwiY29udHJvbGxlclwiXG4gICAgW2NvbnRyb2xsZXJdPVwiY29udHJvbGxlclwiXG4gICAgW3Nob3dQaWxsc109XCJzaG93RHJvcGRvd25QaWxsc1wiXG4gICAgW3Nob3dTa2lwQnV0dG9uXT1cInNob3dTa2lwQnV0dG9uXCJcbiAgPjwvYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duPlxuXG4gIDxkaXZcbiAgICBjbGFzcz1cIm1hZ2ljeC1haWEtaW5wdXQtd3JhcHBlclwiXG4gICAgKGNsaWNrKT1cIm9uV3JhcHBlckNsaWNrKCRldmVudClcIlxuICAgIChrZXl1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEtZWRpdG9yLWFyZWFcIiBkYXRhLWFpYS1lZGl0b3I9XCJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgI2VkaXRvclxuICAgICAgICAqbmdJZj1cImNvbnRyb2xsZXJcIlxuICAgICAgICBbYWlhRWRpdG9ySG9zdF09XCJjb250cm9sbGVyXCJcbiAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgICBjbGFzcz1cIm1hZ2ljeC1haWEtaW5wdXRcIlxuICAgICAgICBkYXRhLWFpYS1pbnB1dD1cIlwiXG4gICAgICA+PC9kaXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250cm9sbGVyICYmIHNob3dJbmxpbmVQaWxsc1wiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICNwaWxsQ29udGFpbmVyXG4gICAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLXBpbGwtbGlzdC1jb250YWluZXJcIlxuICAgICAgICAgIGRhdGEtYWlhLXBpbGwtbGlzdC1jb250YWluZXI9XCJcIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAoY29udHJvbGxlci5pc0xvYWRpbmckIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICAgICgoY29udHJvbGxlci5zdWdnZXN0aW9uUGlsbHMkIHwgYXN5bmMpPy5sZW5ndGggPz8gMCkgPiAwXG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhaWEtcGlsbC1saXN0XG4gICAgICAgICAgICBbcGlsbHNdPVwiKGNvbnRyb2xsZXIuc3VnZ2VzdGlvblBpbGxzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgICAgICAgICBbYWN0aXZlUGlsbEluZGV4XT1cIjBcIlxuICAgICAgICAgICAgW2FjdGl2ZVNlbGVjdGVkXT1cIihjb250cm9sbGVyLmlzQWN0aXZlUGlsbFNlbGVjdGVkJCB8IGFzeW5jKSA/PyBmYWxzZVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCIoY29udHJvbGxlci5pc0xvYWRpbmckIHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgICAgICAgIChzZWxlY3RQaWxsKT1cIm9uU2VsZWN0UGlsbCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9haWEtcGlsbC1saXN0PlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInN1Ym1pdEJ1dHRvblN0YXRlXCI+XG4gICAgICA8YWlhLXN1Ym1pdC1idXR0b25cbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidkZWZhdWx0J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAhKFxuICAgICAgICAgICAgY29udHJvbGxlciAmJlxuICAgICAgICAgICAgY2FuU3VibWl0KHtcbiAgICAgICAgICAgICAgc2VnbWVudHM6IChjb250cm9sbGVyLnNlZ21lbnRzJCB8IGFzeW5jKSA/PyBbXSxcbiAgICAgICAgICAgICAgY29tcGxldGVkUGFyYW1zOiAoY29udHJvbGxlci5jb21wbGV0ZWRQYXJhbXMkIHwgYXN5bmMpID8/IFtdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgXCJcbiAgICAgICAgKHN1Ym1pdCk9XCJvblN1Ym1pdEJ1dHRvbkNsaWNrKCRldmVudClcIlxuICAgICAgPjwvYWlhLXN1Ym1pdC1idXR0b24+XG5cbiAgICAgIDxzcGFuXG4gICAgICAgICpuZ1N3aXRjaENhc2U9XCInY3VzdG9tJ1wiXG4gICAgICAgIGRhdGEtYWlhLXN1Ym1pdD1cIlwiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1zdWJtaXQtc2xvdFwiXG4gICAgICAgIChjbGljayk9XCJvblN1Ym1pdFNsb3RDbGljaygkZXZlbnQpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVN1Ym1pdFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYWktYXV0b2NvbXBsZXRlL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2FpLWF1dG9jb21wbGV0ZS9haS1hdXRvY29tcGxldGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUlOLE1BQU0sRUFDTixXQUFXLEVBR1gsU0FBUyxFQUNULGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTZCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUUsT0FBTyxFQUlMLGlCQUFpQixFQUVqQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUlkLGVBQWUsR0FDaEIsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUNqSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNwRixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUNsRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7O0FBRTFGOzs7Ozs7O0dBT0c7QUF3QkgsTUFBTSxPQUFPLHVCQUF1QjtJQXZCcEM7UUE0Q1csc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRW5DLHdEQUF3RDtRQUMvQyxr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QkFBcEIsS0FBSztnQkFLYSxTQUFTO3NCQUEzQixNQUFNO2dCQUNZLE9BQU87c0JBQXpCLE1BQU07Z0JBQ1ksV0FBVztzQkFBN0IsTUFBTTtnQkFDWSxxQkFBcUI7c0JBQXZDLE1BQU07Z0JBQ1ksT0FBTztzQkFBekIsTUFBTTtnQkFDWSxPQUFPO3NCQUF6QixNQUFNO2dCQU1ZLGFBQWE7c0JBQS9CLE1BQU07Z0JBSW1DLFlBQVk7c0JBQXJELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDQSxTQUFTO3NCQUFoRCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBQ1YsZ0JBQWdCO3NCQUEzQyxTQUFTO3VCQUFDLGVBQWU7O0FBaVY1QixTQUFTLElBQUk7SUFDWCxtQ0FBbUM7QUFDckMsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxJQUFvQjtJQUM5QyxJQUFJLElBQUksS0FBSyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDakMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDakQsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUN0RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gIHR5cGUgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIHR5cGUgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgaW5qZWN0LFxuICBOZ1pvbmUsXG4gIHR5cGUgT25DaGFuZ2VzLFxuICB0eXBlIE9uRGVzdHJveSxcbiAgdHlwZSBPbkluaXQsXG4gIE91dHB1dCxcbiAgUExBVEZPUk1fSUQsXG4gIHR5cGUgU2ltcGxlQ2hhbmdlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IHR5cGUgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQge1xuICB0eXBlIEFQSUNvbmZpZyxcbiAgdHlwZSBBcHBlYXJhbmNlTW9kZSxcbiAgdHlwZSBBdXRvY29tcGxldGVSZXN1bHQsXG4gIGJ1aWxkU3VibWl0UmVzdWx0LFxuICB0eXBlIENvbXBsZXRlZFBhcmFtU3RhdGUsXG4gIGV4dHJhY3RQbGFpblRleHQsXG4gIE1vZGVDb250cm9sbGVyLFxuICB0eXBlIE9wdGlvbk92ZXJyaWRlcyxcbiAgdHlwZSBQcm9kdWN0LFxuICB0eXBlIFByb2R1Y3RzQ29uZmlnLFxuICBzZXRDdXJzb3JPZmZzZXQsXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuaW1wb3J0IHsgQUlBdXRvY29tcGxldGVEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gXCIuLi9haS1hdXRvY29tcGxldGUtZHJvcGRvd24vYWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyIH0gZnJvbSBcIi4uL2NvbnRyb2xsZXIvYWktYXV0b2NvbXBsZXRlLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IEFJQXV0b2NvbXBsZXRlRWRpdG9ySG9zdERpcmVjdGl2ZSB9IGZyb20gXCIuLi9pbnRlcm5hbC9lZGl0b3ItaG9zdC9lZGl0b3ItaG9zdC5kaXJlY3RpdmVcIjtcbmltcG9ydCB7IFBpbGxMaXN0Q29tcG9uZW50IH0gZnJvbSBcIi4uL2ludGVybmFsL3BpbGwtbGlzdC9waWxsLWxpc3QuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBTdWJtaXRCdXR0b25Db21wb25lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWwvc3VibWl0LWJ1dHRvbi9zdWJtaXQtYnV0dG9uLmNvbXBvbmVudFwiO1xuXG4vKipcbiAqIFRpZXIgMSBjb21wb25lbnQg4oCUIGA8YWktYXV0b2NvbXBsZXRlPmAuIFRoZSBBbmd1bGFyIGVxdWl2YWxlbnQgb2YgUmVhY3Qnc1xuICogYDxBSUF1dG9jb21wbGV0ZSAvPmAuIE93bnMgdGhlIGNvbnRlbnRFZGl0YWJsZSBlZGl0b3IsIGlubGluZSBwaWxscywgbW9kZVxuICogY29udHJvbGxlciwgc3VibWl0IGJ1dHRvbiBzbG90LCBhbmQgYW4gZW1iZWRkZWRcbiAqIHtAbGluayBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJ9IHRoYXQgZHJpdmVzIHRoZSBkcm9wZG93bi5cbiAqXG4gKiBAcHVibGljXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhaS1hdXRvY29tcGxldGVcIixcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBBSUF1dG9jb21wbGV0ZURyb3Bkb3duQ29tcG9uZW50LFxuICAgIEFJQXV0b2NvbXBsZXRlRWRpdG9ySG9zdERpcmVjdGl2ZSxcbiAgICBQaWxsTGlzdENvbXBvbmVudCxcbiAgICBTdWJtaXRCdXR0b25Db21wb25lbnQsXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICB0ZW1wbGF0ZVVybDogXCIuL2FpLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vYWktYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5jc3NcIl0sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQUlBdXRvY29tcGxldGVDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQUlBdXRvY29tcGxldGVDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3Nvclxue1xuICAvLyA9PT0gSW5wdXRzIChtaXJyb3JzIFJlYWN0J3MgQUlBdXRvY29tcGxldGVQcm9wcykgPT09XG5cbiAgQElucHV0KCkgYXBpQ29uZmlnPzogQVBJQ29uZmlnO1xuICAvKipcbiAgICogT3B0aW9uYWwgdXNlciBjb250ZXh0LiBJbmNsdWRlIHdoYXRldmVyIHlvdSBrbm93IGFib3V0IHRoZSB1c2VyIOKAlCBhXG4gICAqIHByb2ZpbGUsIHByZWZlcmVuY2VzLCB3b3Jrc3BhY2UsIGFueXRoaW5nIOKAlCB0byBwZXJzb25hbGl6ZSBzdWdnZXN0ZWRcbiAgICogcGFyYW1ldGVycyBhbmQgb3B0aW9ucyB0byB0aGVtLiBCaW5kIGEgc3RhYmxlIHJlZmVyZW5jZTsgdGhlIHNhbWUgc3dhcFxuICAgKiBydWxlIHRoYXQgYXBwbGllcyB0byBgYXBpQ29uZmlnYCBhcHBsaWVzIGhlcmUuXG4gICAqL1xuICBASW5wdXQoKSBhZGRpdGlvbmFsQ29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogV2hlbiB0cnVlLCBlYWNoIHRpbWUgdGhlIHF1ZXJ5IGlzIGVtcHR5LCB0aGUgaW5pdGlhbCBzdWdnZXN0aW9ucyBhcmVcbiAgICogZ2VuZXJhdGVkIGZyZXNoIOKAlCBwZXJzb25hbGl6ZWQgdG8gYGFkZGl0aW9uYWxDb250ZXh0YCB3aGVuIHNldCDigJRcbiAgICogaW5zdGVhZCBvZiB0aGUgZml4ZWQgZGVmYXVsdHMuIFRoZSBpbml0aWFsIHBsYWNlaG9sZGVyIHRleHQgaXRzZWxmIGlzXG4gICAqIHVuY2hhbmdlZC4gRGVmYXVsdDogZmFsc2UuXG4gICAqL1xuICBASW5wdXQoKSBnZW5lcmF0ZVN0YXJ0aW5nU3RhdGVPcHRpb25zPzogYm9vbGVhbjtcbiAgQElucHV0KCkgb3B0aW9uT3ZlcnJpZGVzPzogT3B0aW9uT3ZlcnJpZGVzO1xuICBASW5wdXQoKSBtYXNrQ29tcGxldGVkVGV4dCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5zPzogbnVtYmVyO1xuICAvKiogV2hlcmUgdW5maWxsZWQgcGlsbHMgcmVuZGVyLiBEZWZhdWx0OiBcImRyb3Bkb3duXCIuICovXG4gIEBJbnB1dCgpIHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImhpZGRlblwiID0gXCJkcm9wZG93blwiO1xuICAvKiogQ29sb3IgbW9kZS4gXCJhdXRvXCIgZm9sbG93cyBwcmVmZXJzLWNvbG9yLXNjaGVtZS4gRGVmYXVsdDogXCJhdXRvXCIuICovXG4gIEBJbnB1dCgpIG1vZGU6IEFwcGVhcmFuY2VNb2RlID0gXCJhdXRvXCI7XG4gIEBJbnB1dCgpIG9wdGlvbnNQb3NpdGlvbjogXCJhYm92ZVwiIHwgXCJiZWxvd1wiID0gXCJiZWxvd1wiO1xuICBASW5wdXQoKSBhbmltYXRpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgZHJvcGRvd25UcmlnZ2VyPzogXCJhdXRvXCIgfCBcIm1hbnVhbFwiIHwgXCJoaWRkZW5cIjtcbiAgQElucHV0KCkgY2xvc2VEcm9wZG93bk9uQmx1cj86IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNob3dOb25UYXBwYWJsZU9wdGlvbnM/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGRyb3Bkb3duJ3MgcGlsbCBiYXIgZW5kcyBpbiBhIHNtYWxsIFwic2tpcFwiIGJ1dHRvblxuICAgKiB0aGF0IGRpc21pc3NlcyB0aGUgYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHByZXNzaW5nIOKGkiBhdCB0aGUgZW5kIG9mXG4gICAqIHRoZSBpbnB1dC4gU2V0IHRvIGZhbHNlIHRvIGhpZGUgaXQuIFdoZW4gcGlsbHMgcmVuZGVyIGVsc2V3aGVyZVxuICAgKiAoYHBpbGxQbGFjZW1lbnQ6IFwiaW5saW5lXCJgIC8gYFwiaGlkZGVuXCJgKSB0aGUgYmFyIHJlbmRlcnMgYXMgYSBza2lwLW9ubHlcbiAgICogcm93IGhvbGRpbmcganVzdCB0aGUgYnV0dG9uLiBIaWRkZW4gd2hpbGUgdGhlIGlucHV0IGlzIGVtcHR5IOKAlCBpdCBhcHBlYXJzXG4gICAqIGFsb25nc2lkZSB0aGUgZm9vdGVyJ3MgXCLihpIgdG8gc2tpcFwiIGhpbnQgb25jZSB0aGUgdXNlciBoYXMgdHlwZWQuXG4gICAqL1xuICBASW5wdXQoKSBzaG93U2tpcEJ1dHRvbiA9IHRydWU7XG4gIC8qKiBGb2N1cyB0aGUgZWRpdG9yIG9uIG1vdW50LiBEZWZhdWx0OiB0cnVlLiAqL1xuICBASW5wdXQoKSBhdXRvRm9jdXMgPSB0cnVlO1xuICAvKiogQ29udHJvbGxlZC1tb2RlIHRleHQgdmFsdWUuICovXG4gIEBJbnB1dCgpIHZhbHVlPzogc3RyaW5nO1xuICAvKiogQ29udHJvbGxlZC1tb2RlIGNvbXBsZXRlZCBwYXJhbXMuICovXG4gIEBJbnB1dCgpIGNvbXBsZXRlZFBhcmFtcz86IENvbXBsZXRlZFBhcmFtU3RhdGVbXTtcbiAgLyoqXG4gICAqIE9wdC1pbiBwcm9kdWN0IHN0cmlwLiBXaGVuIHNldCwgdGhlIGRyb3Bkb3duIHJlbmRlcnMgYSBob3Jpem9udGFsIHJvdyBvZlxuICAgKiBwcm9kdWN0IGNhcmRzIGJlbG93IHRoZSBvcHRpb25zIGdyaWQsIGZlZCBieSB5b3VyIG93biBzZWFyY2ggZW5kcG9pbnQgb25cbiAgICogdGhlIFNESydzIGV4aXN0aW5nIGZldGNoIGNhZGVuY2UuIE9taXQgaXQgYW5kIG5vdGhpbmcgYWJvdXQgdGhlIGRyb3Bkb3duXG4gICAqIGNoYW5nZXMg4oCUIG5vIHJlcXVlc3QsIG5vIG1hcmt1cCwgbm8gbGF5b3V0IHNoaWZ0LlxuICAgKlxuICAgKiBCaW5kIGEgc3RhYmxlIHJlZmVyZW5jZSAoYSBjb21wb25lbnQgZmllbGQsIG5vdCBhbiBpbmxpbmUgb2JqZWN0IGxpdGVyYWwpOlxuICAgKiBhIG5ldyBvYmplY3Qgb24gZWFjaCBjaGFuZ2UtZGV0ZWN0aW9uIHBhc3MgcmVhZHMgYXMgYSBzd2FwcGVkIGludGVncmF0aW9uXG4gICAqIGFuZCBjbGVhcnMgdGhlIGN1cnJlbnQgY2FyZHMg4oCUIHRoZSBzYW1lIHJ1bGUgdGhhdCBhbHJlYWR5IGFwcGxpZXMgdG9cbiAgICogYGFwaUNvbmZpZ2AgYW5kIGBvcHRpb25PdmVycmlkZXNgLlxuICAgKi9cbiAgQElucHV0KCkgcHJvZHVjdHM/OiBQcm9kdWN0c0NvbmZpZztcbiAgLyoqXG4gICAqIEN1c3RvbSBzdWJtaXQgYnV0dG9uLiBQYXNzIGEgYDxuZy10ZW1wbGF0ZT5gIHRvIHJlcGxhY2UgdGhlIGRlZmF1bHQgYXJyb3dcbiAgICogYnV0dG9uLiBQYXNzIGBudWxsYCB0byByZW5kZXIgbm8gYnV0dG9uLiBEZWZhdWx0IChgdW5kZWZpbmVkYCkgcmVuZGVyc1xuICAgKiB0aGUgYnVpbHQtaW4gYXJyb3cuXG4gICAqL1xuICBASW5wdXQoKSBzdWJtaXRCdXR0b24/OiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGw7XG5cbiAgLy8gPT09IE91dHB1dHMgPT09XG5cbiAgLyoqIENhbGxlZCBvbiBFbnRlciBvciBzdWJtaXQtYnV0dG9uIGNsaWNrLiAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc3VibWl0dGVkID0gbmV3IEV2ZW50RW1pdHRlcjxBdXRvY29tcGxldGVSZXN1bHQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBlcnJvcmVkID0gbmV3IEV2ZW50RW1pdHRlcjxFcnJvcj4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBjb21wbGV0ZWRQYXJhbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbXBsZXRlZFBhcmFtU3RhdGVbXT4oKTtcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZWFkb25seSBibHVycmVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGFjdGl2YXRlcyBhIHByb2R1Y3QgY2FyZC4gVGhlIFNESyBkb2VzIG5vdFxuICAgKiBuYXZpZ2F0ZSDigJQgeW91IGRlY2lkZSB3aGF0IGEgc2VsZWN0aW9uIG1lYW5zLiBNb2RpZmllciAvIG1pZGRsZSBjbGlja3MgYXJlXG4gICAqIGxlZnQgdG8gdGhlIGJyb3dzZXIgKGNtZC1jbGljayBzdGlsbCBvcGVucyBhIHRhYikgYW5kIGRvbid0IGVtaXQuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgcHJvZHVjdFNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvZHVjdD4oKTtcblxuICAvLyA9PT0gVmlldyByZWZzID09PVxuXG4gIEBWaWV3Q2hpbGQoXCJjb250YWluZXJcIiwgeyBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoXCJlZGl0b3JcIiwgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRvclJlZj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKFwicGlsbENvbnRhaW5lclwiKSBwaWxsQ29udGFpbmVyUmVmPzogRWxlbWVudFJlZjxIVE1MU3BhbkVsZW1lbnQ+O1xuXG4gIC8vID09PSBQdWJsaWMgc3RhdGUgZm9yIHRoZSB0ZW1wbGF0ZSA9PT1cblxuICBjb250cm9sbGVyITogQUlBdXRvY29tcGxldGVDb250cm9sbGVyO1xuICAvKipcbiAgICogQ29uY3JldGUgbGlnaHQvZGFyayB2YWx1ZSBib3VuZCB0byBgW2F0dHIuZGF0YS1tb2RlXWAuIFNlZWRlZCBpbiBuZ09uSW5pdFxuICAgKiBzbyB0aGUgYXR0cmlidXRlIGlzIHByZXNlbnQgZHVyaW5nIFNTUiAod2hlcmUgTW9kZUNvbnRyb2xsZXIsIGdhdGVkIGJlaGluZFxuICAgKiBpc1BsYXRmb3JtQnJvd3NlciBpbiBuZ0FmdGVyVmlld0luaXQsIG5ldmVyIHJ1bnMpLiBPbiB0aGUgYnJvd3NlciB0aGVcbiAgICogTW9kZUNvbnRyb2xsZXIncyByZXNvbHZlIGNhbGxiYWNrIGtlZXBzIHRoaXMgaW4gc3luYyDigJQgc28gaXRzIHJ1bnRpbWVcbiAgICogcHJlZmVycy1jb2xvci1zY2hlbWUgdXBkYXRlcyBhbmQgdGhpcyBiaW5kaW5nIGFsd2F5cyBhZ3JlZSAobm8gY2xvYmJlcikuXG4gICAqL1xuICByZXNvbHZlZE1vZGU6IFwibGlnaHRcIiB8IFwiZGFya1wiID0gXCJkYXJrXCI7XG5cbiAgLy8gPT09IEludGVybmFsID09PVxuXG4gIHByaXZhdGUgbW9kZUNvbnRyb2xsZXI/OiBNb2RlQ29udHJvbGxlcjtcbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcj86IFJlc2l6ZU9ic2VydmVyO1xuICBwcml2YXRlIG9uQ2hhbmdlRm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBvblRvdWNoZWRGbjogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIC8vIEhvbGRzIGEgdmFsdWUgd3JpdHRlbiBieSBSZWFjdGl2ZSBGb3JtcyBiZWZvcmUgbmdPbkluaXQgcmFuLiBSZWFjdGl2ZVxuICAvLyBGb3JtcyBjYW4gY2FsbCB3cml0ZVZhbHVlKCkgZHVyaW5nIGR5bmFtaWMgZm9ybSBjb25zdHJ1Y3Rpb24gKGUuZy4gd2hlblxuICAvLyBhIEZvcm1Db250cm9sIGFscmVhZHkgaG9sZHMgYSB2YWx1ZSBhdCB0aGUgbW9tZW50IHRoZSBkaXJlY3RpdmUgaXNcbiAgLy8gY3JlYXRlZCkuIFdlIHN0YXNoIHRoZSB2YWx1ZSBoZXJlIGFuZCBmbHVzaCBpdCBpbiBuZ09uSW5pdCAqYWZ0ZXIqXG4gIC8vIHRoZSBjb250cm9sbGVyIGV4aXN0cyDigJQgb3RoZXJ3aXNlIHRoZSBlZGl0b3IgcmVuZGVycyBlbXB0eSBldmVuIHRob3VnaFxuICAvLyB0aGUgZm9ybSBoYWQgYSB2YWx1ZS4gYHVuZGVmaW5lZGAgbWVhbnMgXCJubyBwZW5kaW5nIHdyaXRlXCIuXG4gIHByaXZhdGUgcGVuZGluZ1dyaXRlVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvLyDCpzE2Ljk6IHByZWZlciBgaW5qZWN0KClgIG92ZXIgY29uc3RydWN0b3ItcGFyYW1ldGVyIERJIGZvciBjb21wb25lbnRzLlxuICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFNlZWQgYmVmb3JlIHRoZSBicm93c2VyIGd1YXJkIHNvIFNTUiByZW5kZXJzIGEgY29uY3JldGUgZGF0YS1tb2RlLlxuICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZUluaXRpYWxNb2RlKHRoaXMubW9kZSk7XG4gICAgaWYgKCFpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSByZXR1cm47XG5cbiAgICB0aGlzLmNvbnRyb2xsZXIgPSBuZXcgQUlBdXRvY29tcGxldGVDb250cm9sbGVyKHtcbiAgICAgIGFwaUNvbmZpZzogdGhpcy5hcGlDb25maWcsXG4gICAgICBhZGRpdGlvbmFsQ29udGV4dDogdGhpcy5hZGRpdGlvbmFsQ29udGV4dCxcbiAgICAgIGdlbmVyYXRlU3RhcnRpbmdTdGF0ZU9wdGlvbnM6IHRoaXMuZ2VuZXJhdGVTdGFydGluZ1N0YXRlT3B0aW9ucyxcbiAgICAgIG9wdGlvbk92ZXJyaWRlczogdGhpcy5vcHRpb25PdmVycmlkZXMsXG4gICAgICBtYXNrQ29tcGxldGVkVGV4dDogdGhpcy5tYXNrQ29tcGxldGVkVGV4dCxcbiAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgIGRyb3Bkb3duVHJpZ2dlcjogdGhpcy5kcm9wZG93blRyaWdnZXIsXG4gICAgICBvcHRpb25zUG9zaXRpb246IHRoaXMub3B0aW9uc1Bvc2l0aW9uLFxuICAgICAgY2xvc2VEcm9wZG93bk9uQmx1cjogdGhpcy5jbG9zZURyb3Bkb3duT25CbHVyLFxuICAgICAgc2hvd05vblRhcHBhYmxlT3B0aW9uczogdGhpcy5zaG93Tm9uVGFwcGFibGVPcHRpb25zLFxuICAgICAgc291cmNlOiBcImZ1bGwtc2RrXCIsXG4gICAgICBwcm9kdWN0czogdGhpcy5wcm9kdWN0cyxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgY29tcGxldGVkUGFyYW1zOiB0aGlzLmNvbXBsZXRlZFBhcmFtcyxcbiAgICAgIG9uU3VibWl0OiAocmVzdWx0KSA9PiB0aGlzLmhhbmRsZVN1Ym1pdChyZXN1bHQpLFxuICAgICAgb25FcnJvcjogKGVycm9yKSA9PiB0aGlzLmVycm9yZWQuZW1pdChlcnJvciksXG4gICAgICBvbkNoYW5nZTogKHRleHQpID0+IHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRleHQpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlRm4odGV4dCk7XG4gICAgICB9LFxuICAgICAgb25QYXJhbXNDaGFuZ2U6IChwYXJhbXMpID0+IHRoaXMuY29tcGxldGVkUGFyYW1zQ2hhbmdlLmVtaXQocGFyYW1zKSxcbiAgICAgIG9uRm9jdXM6ICgpID0+IHRoaXMuZm9jdXNlZC5lbWl0KCksXG4gICAgICBvblByb2R1Y3RTZWxlY3Q6IChwcm9kdWN0KSA9PiB0aGlzLnByb2R1Y3RTZWxlY3QuZW1pdChwcm9kdWN0KSxcbiAgICAgIG9uQmx1cjogKCkgPT4ge1xuICAgICAgICB0aGlzLmJsdXJyZWQuZW1pdCgpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZEZuKCk7XG4gICAgICB9LFxuICAgICAgc2V0Q3Vyc29yOiAob2Zmc2V0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xuICAgICAgICBlZGl0b3IuZm9jdXMoKTtcbiAgICAgICAgc2V0Q3Vyc29yT2Zmc2V0KGVkaXRvciwgb2Zmc2V0KTtcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUodGhpcy5wZW5kaW5nV3JpdGVWYWx1ZSk7XG4gICAgICB0aGlzLnBlbmRpbmdXcml0ZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICAvLyBNb2RlQ29udHJvbGxlciB3cml0ZXMgYGRhdGEtbW9kZWAgdG8gdGhlIGVsZW1lbnQgaXQncyBnaXZlbi4gVGhlIENTU1xuICAgIC8vIHNlbGVjdG9ycyBhcmUgc2NvcGVkIHRvIGAubWFnaWN4LWFpYVtkYXRhLW1vZGU9XCIuLi5cIl1gIOKAlCB3aGljaCBsaXZlcyBvblxuICAgIC8vIHRoZSBpbm5lciBgPGRpdiBjbGFzcz1cIm1hZ2ljeC1haWEgbWFnaWN4LWFpYS1jb250YWluZXJcIiAjY29udGFpbmVyPmAsXG4gICAgLy8gTk9UIHRoZSBob3N0IGA8YWktYXV0b2NvbXBsZXRlPmAgZWxlbWVudC4gVGhlIHJlc29sdmUgY2FsbGJhY2sgbWlycm9yc1xuICAgIC8vIHRoZSB2YWx1ZSBpbnRvIGByZXNvbHZlZE1vZGVgIHNvIHRoZSBgW2F0dHIuZGF0YS1tb2RlXWAgYmluZGluZyBzdGF5cyBpblxuICAgIC8vIGxvY2tzdGVwIHdpdGggTW9kZUNvbnRyb2xsZXIg4oCUIHRoZSBiaW5kaW5nIGhhbmRsZXMgU1NSLCBNb2RlQ29udHJvbGxlclxuICAgIC8vIGhhbmRsZXMgcnVudGltZSBwcmVmZXJzLWNvbG9yLXNjaGVtZSBzd2l0Y2hlcywgYW5kIGJlY2F1c2UgdGhleSBhbHdheXNcbiAgICAvLyBhZ3JlZSBuZWl0aGVyIGNsb2JiZXJzIHRoZSBvdGhlci5cbiAgICB0aGlzLm1vZGVDb250cm9sbGVyID0gbmV3IE1vZGVDb250cm9sbGVyKFxuICAgICAgdGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgIHRoaXMubW9kZSxcbiAgICAgIChyZXNvbHZlZCkgPT4ge1xuICAgICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIFBpbGwtd3JhcCBkZXRlY3Rpb24g4oCUIHdoZW4gdGhlIHBpbGwgbGlzdCB3cmFwcyBiZWxvdyB0aGUgZWRpdG9yJ3MgbGFzdFxuICAgIC8vIGxpbmUsIGRyb3AgaXRzIDhweCBsZWZ0IG1hcmdpbiB2aWEgYSBkYXRhIGF0dHJpYnV0ZSB0aGUgQ1NTIGtleXMgb2ZmLlxuICAgIC8vIE1pcnJvcnMgdGhlIFJlYWN0IGNvbXBvbmVudCdzIHVzZUxheW91dEVmZmVjdC5cbiAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHRoaXMubWVhc3VyZVBpbGxXcmFwKCkpO1xuICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGVkaXRvcikgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGVkaXRvcik7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubWVhc3VyZVBpbGxXcmFwKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb250cm9sbGVyKSByZXR1cm47XG4gICAgLy8gYFNpbXBsZUNoYW5nZXNgIGlzIGB7IFtrZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9YCwgc28gcGVyXG4gICAgLy8gYG5vUHJvcGVydHlBY2Nlc3NGcm9tSW5kZXhTaWduYXR1cmVgIGVhY2gga2V5IGxvb2t1cCB1c2VzIGJyYWNrZXRcbiAgICAvLyBub3RhdGlvbiDigJQgdGhpcyBrZWVwcyB0aGUgc3RyaWN0bmVzcyBjb250cmFjdCB0aGF0IHRoZSByZXN0IG9mIHRoZVxuICAgIC8vIHdvcmtzcGFjZSBlbmZvcmNlcy5cbiAgICAvLyBDb250cm9sbGVkLW1vZGUgcHJvcGFnYXRpb25cbiAgICBpZiAoY2hhbmdlc1tcInZhbHVlXCJdICYmIHRoaXMudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jb250cm9sbGVyLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcImNvbXBsZXRlZFBhcmFtc1wiXSAmJiB0aGlzLmNvbXBsZXRlZFBhcmFtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0Q29tcGxldGVkUGFyYW1zKHRoaXMuY29tcGxldGVkUGFyYW1zKTtcbiAgICB9XG4gICAgLy8gUmVhY3RpdmUgb3B0aW9uc1xuICAgIGlmIChcbiAgICAgIGNoYW5nZXNbXCJhcGlDb25maWdcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJhZGRpdGlvbmFsQ29udGV4dFwiXSB8fFxuICAgICAgY2hhbmdlc1tcImdlbmVyYXRlU3RhcnRpbmdTdGF0ZU9wdGlvbnNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJvcHRpb25PdmVycmlkZXNcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJkcm9wZG93blRyaWdnZXJcIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJvcHRpb25zUG9zaXRpb25cIl0gfHxcbiAgICAgIGNoYW5nZXNbXCJjbG9zZURyb3Bkb3duT25CbHVyXCJdIHx8XG4gICAgICBjaGFuZ2VzW1wic2hvd05vblRhcHBhYmxlT3B0aW9uc1wiXSB8fFxuICAgICAgY2hhbmdlc1tcInByb2R1Y3RzXCJdXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRyb2xsZXIudXBkYXRlKHtcbiAgICAgICAgYXBpQ29uZmlnOiB0aGlzLmFwaUNvbmZpZyxcbiAgICAgICAgYWRkaXRpb25hbENvbnRleHQ6IHRoaXMuYWRkaXRpb25hbENvbnRleHQsXG4gICAgICAgIGdlbmVyYXRlU3RhcnRpbmdTdGF0ZU9wdGlvbnM6IHRoaXMuZ2VuZXJhdGVTdGFydGluZ1N0YXRlT3B0aW9ucyxcbiAgICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB0aGlzLm9wdGlvbk92ZXJyaWRlcyxcbiAgICAgICAgZHJvcGRvd25UcmlnZ2VyOiB0aGlzLmRyb3Bkb3duVHJpZ2dlcixcbiAgICAgICAgb3B0aW9uc1Bvc2l0aW9uOiB0aGlzLm9wdGlvbnNQb3NpdGlvbixcbiAgICAgICAgY2xvc2VEcm9wZG93bk9uQmx1cjogdGhpcy5jbG9zZURyb3Bkb3duT25CbHVyLFxuICAgICAgICBzaG93Tm9uVGFwcGFibGVPcHRpb25zOiB0aGlzLnNob3dOb25UYXBwYWJsZU9wdGlvbnMsXG4gICAgICAgIC8vIFNhbWUgcmVmZXJlbmNlIG9uIGFuIHVucmVsYXRlZCBjaGFuZ2UgaXMgYSBuby1vcCBpbiB0aGUgY29yZTsgb25seSBhXG4gICAgICAgIC8vIGdlbnVpbmVseSBzd2FwcGVkIChvciByZW1vdmVkKSBpbnRlZ3JhdGlvbiBjbGVhcnMgdGhlIHN0cmlwLlxuICAgICAgICBwcm9kdWN0czogdGhpcy5wcm9kdWN0cyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1tcIm1vZGVcIl0pIHtcbiAgICAgIC8vIEtlZXAgdGhlIGJpbmRpbmcgY29ycmVjdCBldmVuIHdoZW4gTW9kZUNvbnRyb2xsZXIgZG9lc24ndCBleGlzdCB5ZXRcbiAgICAgIC8vIChTU1IgLyBwcmUtbmdBZnRlclZpZXdJbml0KS4gT24gdGhlIGJyb3dzZXIsIHNldE1vZGUgdHJpZ2dlcnMgdGhlXG4gICAgICAvLyByZXNvbHZlIGNhbGxiYWNrIHdoaWNoIHNldHMgdGhlIHNhbWUgdmFsdWUuXG4gICAgICB0aGlzLnJlc29sdmVkTW9kZSA9IHJlc29sdmVJbml0aWFsTW9kZSh0aGlzLm1vZGUpO1xuICAgICAgdGhpcy5tb2RlQ29udHJvbGxlcj8uc2V0TW9kZSh0aGlzLm1vZGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgICB0aGlzLm1vZGVDb250cm9sbGVyPy5kZXN0cm95KCk7XG4gICAgdGhpcy5jb250cm9sbGVyPy5kZXN0cm95KCk7XG4gIH1cblxuICAvLyA9PT0gSW1wZXJhdGl2ZSBBUEkgKGV4cG9zZWQgb24gdGhlIGNvbXBvbmVudCBpbnN0YW5jZSB2aWEgQFZpZXdDaGlsZCkgPT09XG5cbiAgLyoqIFByb2dyYW1tYXRpY2FsbHkgZm9jdXMgdGhlIGVkaXRvci4gKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIC8qKiBQcm9ncmFtbWF0aWNhbGx5IGJsdXIgdGhlIGVkaXRvci4gKi9cbiAgYmx1cigpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRvclJlZj8ubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gIH1cblxuICAvKiogQ2xlYXIgYWxsIHN0YXRlLCByb3RhdGUgc2Vzc2lvbiwgYW5kIHJlLWZldGNoLiAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXI/LnJlc2V0KCk7XG4gIH1cblxuICAvKipcbiAgICogU2tpcCB0aGUgYWN0aXZlIHBpbGwg4oCUIHNhbWUgYWN0aW9uIGFzIHRoZSBkcm9wZG93bidzIHNraXAgYnV0dG9uIC8g4oaSLlxuICAgKiBMZXRzIGEgY29uc3VtZXIgd2hvIGhpZGVzIHRoZSBidWlsdC1pbiBidXR0b24gKGBzaG93U2tpcEJ1dHRvbj1mYWxzZWApXG4gICAqIGRyaXZlIHNraXBwaW5nIGZyb20gdGhlaXIgb3duIFVJLlxuICAgKi9cbiAgc2tpcEFjdGl2ZVBpbGwoKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sbGVyPy5za2lwQWN0aXZlUGlsbCgpO1xuICB9XG5cbiAgLyoqIFN3aXRjaCBjb2xvciBtb2RlIGF0IHJ1bnRpbWUuICovXG4gIHNldE1vZGUobW9kZTogQXBwZWFyYW5jZU1vZGUpOiB2b2lkIHtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHRoaXMucmVzb2x2ZWRNb2RlID0gcmVzb2x2ZUluaXRpYWxNb2RlKG1vZGUpO1xuICAgIHRoaXMubW9kZUNvbnRyb2xsZXI/LnNldE1vZGUobW9kZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyA9PT0gVGVtcGxhdGUgaGVscGVycyA9PT1cblxuICAvKipcbiAgICogJ2RlZmF1bHQnIOKGkiByZW5kZXIgdGhlIGJ1aWx0LWluIGFycm93IGJ1dHRvbi5cbiAgICogJ2N1c3RvbScgIOKGkiBwcm9qZWN0IHRoZSBjb25zdW1lci1zdXBwbGllZCBUZW1wbGF0ZVJlZi5cbiAgICogJ2hpZGRlbicgIOKGkiBubyBidXR0b24uXG4gICAqL1xuICBnZXQgc3VibWl0QnV0dG9uU3RhdGUoKTogXCJkZWZhdWx0XCIgfCBcImN1c3RvbVwiIHwgXCJoaWRkZW5cIiB7XG4gICAgaWYgKHRoaXMuc3VibWl0QnV0dG9uID09PSBudWxsKSByZXR1cm4gXCJoaWRkZW5cIjtcbiAgICBpZiAodGhpcy5zdWJtaXRCdXR0b24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIFwiZGVmYXVsdFwiO1xuICAgIHJldHVybiBcImN1c3RvbVwiO1xuICB9XG5cbiAgLyoqIE5hcnJvd2VkIGFjY2Vzc29yIGZvciAqbmdUZW1wbGF0ZU91dGxldCDigJQgbmV2ZXIgdW5kZWZpbmVkLiAqL1xuICBnZXQgY3VzdG9tU3VibWl0VGVtcGxhdGUoKTogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zdWJtaXRCdXR0b24gPz8gbnVsbDtcbiAgfVxuXG4gIGdldCBzaG93SW5saW5lUGlsbHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGlsbFBsYWNlbWVudCA9PT0gXCJpbmxpbmVcIjtcbiAgfVxuXG4gIGdldCBzaG93RHJvcGRvd25QaWxscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5waWxsUGxhY2VtZW50ID09PSBcImRyb3Bkb3duXCI7XG4gIH1cblxuICAvKipcbiAgICogYHRydWVgIHdoZW4gdGhlcmUncyBzb21ldGhpbmcgdG8gc3VibWl0IOKAlCBkcml2ZW4gYnkgY3VycmVudCBzZWdtZW50c1xuICAgKiBhbmQgY29tcGxldGVkIHBhcmFtcy4gUmVhZCBvZmYgdGhlIGxpdmUgZWRpdG9yIHZpYSB0aGUgY29udHJvbGxlciBzdGF0ZS5cbiAgICovXG4gIGNhblN1Ym1pdChzdGF0ZTogeyBzZWdtZW50czogeyBsZW5ndGg6IG51bWJlciB9OyBjb21wbGV0ZWRQYXJhbXM6IHsgbGVuZ3RoOiBudW1iZXIgfSB9KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLnNlZ21lbnRzLmxlbmd0aCA+IDAgfHwgc3RhdGUuY29tcGxldGVkUGFyYW1zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBvbldyYXBwZXJDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIC8vIENsaWNraW5nIGEgcGlsbCBzaG91bGQgYWN0aXZhdGUgaXQgd2l0aG91dCBzdGVhbGluZyBmb2N1cyBlbHNld2hlcmUuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAodGFyZ2V0Py5jbG9zZXN0KFwiW2RhdGEtYWlhLXBpbGxdXCIpKSByZXR1cm47XG4gICAgdGhpcy5mb2N1cygpO1xuICB9XG5cbiAgb25TdWJtaXRCdXR0b25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuaGFuZGxlU3VibWl0RnJvbVVzZXJBY3Rpb24oKTtcbiAgfVxuXG4gIG9uU3VibWl0U2xvdENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5oYW5kbGVTdWJtaXRGcm9tVXNlckFjdGlvbigpO1xuICB9XG5cbiAgb25TZWxlY3RQaWxsKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0QWN0aXZlUGlsbChpbmRleCk7XG4gIH1cblxuICAvLyA9PT0gQ29udHJvbFZhbHVlQWNjZXNzb3IgPT09XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB2YWx1ZSA/PyBcIlwiO1xuICAgIGlmICghdGhpcy5jb250cm9sbGVyKSB7XG4gICAgICAvLyBSZWFjdGl2ZSBGb3JtcyBjYW4gY2FsbCB3cml0ZVZhbHVlKCkgYmVmb3JlIG5nT25Jbml0IGNyZWF0ZXMgdGhlXG4gICAgICAvLyBjb250cm9sbGVyIChkeW5hbWljIGZvcm0gY29uc3RydWN0aW9uLCBvciBhIEZvcm1Db250cm9sIHRoYXQgYWxyZWFkeVxuICAgICAgLy8gaGFkIGEgdmFsdWUgYXQgZGlyZWN0aXZlLWNyZWF0aW9uIHRpbWUpLiBCdWZmZXIgdGhlIHZhbHVlOyBuZ09uSW5pdFxuICAgICAgLy8gZmx1c2hlcyBpdCBhcyBzb29uIGFzIHRoZSBjb250cm9sbGVyIGV4aXN0cy5cbiAgICAgIHRoaXMucGVuZGluZ1dyaXRlVmFsdWUgPSBuZXh0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbnRyb2xsZXIuc2V0VmFsdWUobmV4dCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2VGbiA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZEZuID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKF9kaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIC8vIFRoZSBjb250ZW50RWRpdGFibGUgaG9zdCBkb2Vzbid0IGhhdmUgYSBuYXRpdmUgZGlzYWJsZWQgYXR0cmlidXRlLiBGb3JcbiAgICAvLyB2MC4xIHdlIGFjY2VwdCB0aGUgY2FsbCBzbyBBbmd1bGFyJ3MgZm9ybXMgbGF5ZXIgZG9lc24ndCB0aHJvdywgYnV0XG4gICAgLy8gdGhlIGVkaXRvciBzdGF5cyBpbnRlcmFjdGl2ZS4gQSBmdXR1cmUgZW5oYW5jZW1lbnQgY2FuIHRvZ2dsZVxuICAgIC8vIGNvbnRlbnRFZGl0YWJsZSArIEFSSUEgZGlzYWJsZWQgaGVyZS5cbiAgfVxuXG4gIC8vID09PSBTdWJtaXQgZmxvdyA9PT1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSBjb250cm9sbGVyJ3Mgb25TdWJtaXQgY2FsbGJhY2sgKHdoaWNoIGZpcmVzIGZyb20gdGhlXG4gICAqIGtleWJvYXJkIGNvbnRyb2xsZXIgb24gRW50ZXIpLiBSZWFkcyB0aGUgbGl2ZSBlZGl0b3IgdGV4dCDigJQgc2FtZSB0cmlja1xuICAgKiB0aGUgUmVhY3QgY29tcG9uZW50IHVzZXMg4oCUIHNvIHRoZSBlbWl0dGVkIHF1ZXJ5IHJlZmxlY3RzIHdoYXRldmVyJ3MgaW5cbiAgICogdGhlIERPTSByaWdodCBub3csIG5vdCBhIHBvc3NpYmx5LXN0YWxlIHN0YXRlIHNuYXBzaG90LlxuICAgKi9cbiAgcHJpdmF0ZSBoYW5kbGVTdWJtaXQoX3Jlc3VsdDogQXV0b2NvbXBsZXRlUmVzdWx0KTogdm9pZCB7XG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3JSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCB0ZXh0ID0gZXh0cmFjdFBsYWluVGV4dChlZGl0b3IpO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5jb21wbGV0ZWRQYXJhbXMgPz8gc3RhdGUuY29tcGxldGVkUGFyYW1zO1xuICAgIHRoaXMuc3VibWl0dGVkLmVtaXQoYnVpbGRTdWJtaXRSZXN1bHQodGV4dCwgcGFyYW1zLCBzdGF0ZS5za2lwcGVkUGFyYW1zKSk7XG4gICAgdGhpcy5jb250cm9sbGVyLnJlc2V0KCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVN1Ym1pdEZyb21Vc2VyQWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5jb250cm9sbGVyLmdldFN0YXRlKCk7XG4gICAgaWYgKCF0aGlzLmNhblN1Ym1pdChzdGF0ZSkpIHJldHVybjtcbiAgICAvLyBTeW50aGVzaXplIHRoZSByZXN1bHQgZm9yIHRoZSBzdWJtaXQtYnV0dG9uIGNsaWNrIHBhdGg7IHNhbWUgc2hhcGVcbiAgICAvLyB0aGUgY29udHJvbGxlciB3b3VsZCBkZWxpdmVyIGZyb20gYSBrZXlib2FyZCBFbnRlciwgc28gaGFuZGxlU3VibWl0XG4gICAgLy8gY2FuIHRha2UgZWl0aGVyIGVudHJ5IHBvaW50LlxuICAgIHRoaXMuaGFuZGxlU3VibWl0KHtcbiAgICAgIHF1ZXJ5OiBzdGF0ZS50ZXh0LnRyaW0oKSxcbiAgICAgIHJhd19xdWVyeTogXCJcIixcbiAgICAgIGNvbXBsZXRlZF9wYXJhbXM6IFtdLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtZWFzdXJlUGlsbFdyYXAoKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5waWxsQ29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yUmVmPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghY29udGFpbmVyIHx8ICFlZGl0b3IpIHJldHVybjtcbiAgICBjb25zdCBpbm5lciA9IGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgaWYgKCFpbm5lcikgcmV0dXJuO1xuICAgIC8vIFdyYXAgZGV0ZWN0aW9uOiB0aGUgcGlsbCByb3cncyB0b3AgdnMgdGhlIGVkaXRvcidzIGJvdHRvbS4gV2hlbiB0aGVcbiAgICAvLyBwaWxscyBzaXQgb24gKG9yIGFib3ZlKSB0aGUgZWRpdG9yJ3MgbGFzdCBsaW5lIHRoZXkncmUgTk9UIHdyYXBwZWQg4oCUXG4gICAgLy8ga2VlcCB0aGUgOHB4IG1hcmdpbiBzbyB0aGV5IGRvbid0IGJ1dHQgYWdhaW5zdCB0eXBlZCB0ZXh0IG9yIHRoZVxuICAgIC8vIHBsYWNlaG9sZGVyLiBUaGlzIGhhbmRsZXMgdGhlIGVtcHR5LWVkaXRvciArIHBsYWNlaG9sZGVyIGNhc2VcbiAgICAvLyBuYXR1cmFsbHk6IHRoZSBwbGFjZWhvbGRlciBzdGlsbCBvY2N1cGllcyB0aGUgZWRpdG9yJ3MgbGluZSBib3guXG4gICAgY29uc3QgY1JlY3QgPSBpbm5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBlUmVjdCA9IGVkaXRvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB3cmFwcGVkID0gY1JlY3QudG9wID49IGVSZWN0LmJvdHRvbSAtIDI7XG4gICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICBpZiAod3JhcHBlZCkgY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImRhdGEtYWlhLXBpbGwtd3JhcHBlZFwiLCBcIlwiKTtcbiAgICAgIGVsc2UgY29udGFpbmVyLnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtYWlhLXBpbGwtd3JhcHBlZFwiKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBub29wKCk6IHZvaWQge1xuICAvLyBEZWZhdWx0IG5vLW9wIGZvciBDVkEgY2FsbGJhY2tzLlxufVxuXG4vKipcbiAqIFJlc29sdmUgYSBjb25jcmV0ZSBsaWdodC9kYXJrIHZhbHVlIGZyb20gdGhlIGNvbmZpZ3VyZWQgbW9kZS4gVXNlZCB0byBzZWVkXG4gKiB0aGUgYGRhdGEtbW9kZWAgYXR0cmlidXRlIHN5bmNocm9ub3VzbHkgKGluY2x1ZGluZyBkdXJpbmcgU1NSLCB3aGVyZVxuICogTW9kZUNvbnRyb2xsZXIgbmV2ZXIgcnVucykuIE9uIHRoZSBzZXJ2ZXIgYHdpbmRvd2AgaXMgdW5kZWZpbmVkIOKGkiBkZWZhdWx0c1xuICogdG8gXCJkYXJrXCIgKG1hdGNoZXMgdGhlIHZhbmlsbGEvUmVhY3QgYmVoYXZpb3IpLlxuICovXG5mdW5jdGlvbiByZXNvbHZlSW5pdGlhbE1vZGUobW9kZTogQXBwZWFyYW5jZU1vZGUpOiBcImxpZ2h0XCIgfCBcImRhcmtcIiB7XG4gIGlmIChtb2RlICE9PSBcImF1dG9cIikgcmV0dXJuIG1vZGU7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gXCJkYXJrXCI7XG4gIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIikubWF0Y2hlcyA/IFwiZGFya1wiIDogXCJsaWdodFwiO1xufVxuIiwiPGRpdlxuICAjY29udGFpbmVyXG4gIGNsYXNzPVwibWFnaWN4LWFpYSBtYWdpY3gtYWlhLWNvbnRhaW5lclwiXG4gIFthdHRyLmRhdGEtcGlsbC1wbGFjZW1lbnRdPVwicGlsbFBsYWNlbWVudFwiXG4gIFthdHRyLmRhdGEtb3B0aW9ucy1wb3NpdGlvbl09XCJvcHRpb25zUG9zaXRpb25cIlxuICBbYXR0ci5kYXRhLWFuaW1hdGlvbnNdPVwiYW5pbWF0aW9ucyA/ICdvbicgOiAnb2ZmJ1wiXG4gIFthdHRyLmRhdGEtbW9kZV09XCJyZXNvbHZlZE1vZGVcIlxuPlxuICA8YWktYXV0b2NvbXBsZXRlLWRyb3Bkb3duXG4gICAgKm5nSWY9XCJjb250cm9sbGVyXCJcbiAgICBbY29udHJvbGxlcl09XCJjb250cm9sbGVyXCJcbiAgICBbc2hvd1BpbGxzXT1cInNob3dEcm9wZG93blBpbGxzXCJcbiAgICBbc2hvd1NraXBCdXR0b25dPVwic2hvd1NraXBCdXR0b25cIlxuICA+PC9haS1hdXRvY29tcGxldGUtZHJvcGRvd24+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwibWFnaWN4LWFpYS1pbnB1dC13cmFwcGVyXCJcbiAgICAoY2xpY2spPVwib25XcmFwcGVyQ2xpY2soJGV2ZW50KVwiXG4gICAgKGtleXVwKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwibWFnaWN4LWFpYS1lZGl0b3ItYXJlYVwiIGRhdGEtYWlhLWVkaXRvcj1cIlwiPlxuICAgICAgPGRpdlxuICAgICAgICAjZWRpdG9yXG4gICAgICAgICpuZ0lmPVwiY29udHJvbGxlclwiXG4gICAgICAgIFthaWFFZGl0b3JIb3N0XT1cImNvbnRyb2xsZXJcIlxuICAgICAgICBbYXV0b0ZvY3VzXT1cImF1dG9Gb2N1c1wiXG4gICAgICAgIGNsYXNzPVwibWFnaWN4LWFpYS1pbnB1dFwiXG4gICAgICAgIGRhdGEtYWlhLWlucHV0PVwiXCJcbiAgICAgID48L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRyb2xsZXIgJiYgc2hvd0lubGluZVBpbGxzXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgI3BpbGxDb250YWluZXJcbiAgICAgICAgICBjbGFzcz1cIm1hZ2ljeC1haWEtcGlsbC1saXN0LWNvbnRhaW5lclwiXG4gICAgICAgICAgZGF0YS1haWEtcGlsbC1saXN0LWNvbnRhaW5lcj1cIlwiXG4gICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIChjb250cm9sbGVyLmlzTG9hZGluZyQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgKChjb250cm9sbGVyLnN1Z2dlc3Rpb25QaWxscyQgfCBhc3luYyk/Lmxlbmd0aCA/PyAwKSA+IDBcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGFpYS1waWxsLWxpc3RcbiAgICAgICAgICAgIFtwaWxsc109XCIoY29udHJvbGxlci5zdWdnZXN0aW9uUGlsbHMkIHwgYXN5bmMpID8/IFtdXCJcbiAgICAgICAgICAgIFthY3RpdmVQaWxsSW5kZXhdPVwiMFwiXG4gICAgICAgICAgICBbYWN0aXZlU2VsZWN0ZWRdPVwiKGNvbnRyb2xsZXIuaXNBY3RpdmVQaWxsU2VsZWN0ZWQkIHwgYXN5bmMpID8/IGZhbHNlXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cIihjb250cm9sbGVyLmlzTG9hZGluZyQgfCBhc3luYykgPz8gZmFsc2VcIlxuICAgICAgICAgICAgKHNlbGVjdFBpbGwpPVwib25TZWxlY3RQaWxsKCRldmVudClcIlxuICAgICAgICAgID48L2FpYS1waWxsLWxpc3Q+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwic3VibWl0QnV0dG9uU3RhdGVcIj5cbiAgICAgIDxhaWEtc3VibWl0LWJ1dHRvblxuICAgICAgICAqbmdTd2l0Y2hDYXNlPVwiJ2RlZmF1bHQnXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICEoXG4gICAgICAgICAgICBjb250cm9sbGVyICYmXG4gICAgICAgICAgICBjYW5TdWJtaXQoe1xuICAgICAgICAgICAgICBzZWdtZW50czogKGNvbnRyb2xsZXIuc2VnbWVudHMkIHwgYXN5bmMpID8/IFtdLFxuICAgICAgICAgICAgICBjb21wbGV0ZWRQYXJhbXM6IChjb250cm9sbGVyLmNvbXBsZXRlZFBhcmFtcyQgfCBhc3luYykgPz8gW11cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICBcIlxuICAgICAgICAoc3VibWl0KT1cIm9uU3VibWl0QnV0dG9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9haWEtc3VibWl0LWJ1dHRvbj5cblxuICAgICAgPHNwYW5cbiAgICAgICAgKm5nU3dpdGNoQ2FzZT1cIidjdXN0b20nXCJcbiAgICAgICAgZGF0YS1haWEtc3VibWl0PVwiXCJcbiAgICAgICAgY2xhc3M9XCJtYWdpY3gtYWlhLXN1Ym1pdC1zbG90XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0U2xvdENsaWNrKCRldmVudClcIlxuICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tU3VibWl0VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NoYXJlZC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBBUElDb25maWcsXG4gIEF1dG9jb21wbGV0ZVJlc3VsdCxcbiAgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgT3B0aW9uT3ZlcnJpZGVzLFxuICBQcm9kdWN0LFxuICBQcm9kdWN0c0NvbmZpZyxcbiAgU2VnbWVudCxcbiAgU2tpcHBlZFBhcmFtU3RhdGUsXG4gIFN1Z2dlc3Rpb24sXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuXG4vKipcbiAqIENvbnN0cnVjdGlvbi10aW1lIG9wdGlvbnMgZm9yIHtAbGluayBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJ9LlxuICpcbiAqIE1pcnJvcnMgdGhlIHByb3BzIHRoZSBSZWFjdCBgdXNlQUlBdXRvY29tcGxldGUoKWAgaG9vayBhY2NlcHRzLCBtaW51cyB0aGVcbiAqIGZpZWxkcyB0aGF0IG9ubHkgbWFrZSBzZW5zZSBmb3IgYSBSZWFjdCBjb21wb25lbnQgc2hlbGwgKGBjb2x1bW5zYCBpcyBoZXJlO1xuICogYGF1dG9Gb2N1c2AsIGBjbGFzc05hbWVgLCBgcGlsbFBsYWNlbWVudGAsIGV0Yy4gbGl2ZSBvbiB0aGUgVGllciAxXG4gKiBgPGFpLWF1dG9jb21wbGV0ZT5gIGNvbXBvbmVudCkuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMge1xuICAvKiogUnVudGltZSBBUEkgY29uZmlndXJhdGlvbiAoYXBpS2V5LCBlbmRwb2ludCwgZXRjLikuICovXG4gIGFwaUNvbmZpZz86IEFQSUNvbmZpZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXIgY29udGV4dC4gSW5jbHVkZSB3aGF0ZXZlciB5b3Uga25vdyBhYm91dCB0aGUgdXNlciDigJQgYVxuICAgKiBwcm9maWxlLCBwcmVmZXJlbmNlcywgd29ya3NwYWNlLCBhbnl0aGluZyDigJQgdG8gcGVyc29uYWxpemUgc3VnZ2VzdGVkXG4gICAqIHBhcmFtZXRlcnMgYW5kIG9wdGlvbnMgdG8gdGhlbS5cbiAgICovXG4gIGFkZGl0aW9uYWxDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBQZXItc3VnZ2VzdGlvbi10eXBlIGNsaWVudC1zaWRlIG9wdGlvbiBvdmVycmlkZXMuICovXG4gIG9wdGlvbk92ZXJyaWRlcz86IE9wdGlvbk92ZXJyaWRlcztcbiAgLyoqIFdoZW4gdHJ1ZSwgY29tcGxldGVkIHBhcmFtcycgbGl0ZXJhbCB0ZXh0IGlzIG9taXR0ZWQgZnJvbSBBUEkgcmVxdWVzdHMuICovXG4gIG1hc2tDb21wbGV0ZWRUZXh0PzogYm9vbGVhbjtcbiAgLyoqIE51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBkcm9wZG93biBncmlkLiBEZWZhdWx0OiAyLiAqL1xuICBjb2x1bW5zPzogbnVtYmVyO1xuICAvKipcbiAgICogV2hlcmUgdGhlIGRyb3Bkb3duIG9wZW5zIHJlbGF0aXZlIHRvIHRoZSBpbnB1dC4gRGVmYXVsdDogXCJiZWxvd1wiLlxuICAgKlxuICAgKiBSZWFkIGJ5IHRoZSBrZXlib2FyZCBjb250cm9sbGVyIHRvIGRlY2lkZSB3aGljaCB2ZXJ0aWNhbC1hcnJvdyBrZXkgb3BlbnNcbiAgICogdGhlIGRyb3Bkb3duIGZyb20gdGhlIGlucHV0IOKAlCBBcnJvd0Rvd24gd2hlbiB0aGUgZHJvcGRvd24gaXMgYmVsb3csXG4gICAqIEFycm93VXAgd2hlbiBpdCdzIGFib3ZlLlxuICAgKi9cbiAgb3B0aW9uc1Bvc2l0aW9uPzogXCJhYm92ZVwiIHwgXCJiZWxvd1wiO1xuICAvKipcbiAgICogV2hlbiB0aGUgZHJvcGRvd24gYXBwZWFycy4gXCJhdXRvXCIgKGRlZmF1bHQpIHNob3dzIHdoZW4gb3B0aW9ucyBhcmVcbiAgICogYXZhaWxhYmxlOyBcIm1hbnVhbFwiIHNob3dzIG9ubHkgb24gcGlsbCB0YXA7IFwiaGlkZGVuXCIgbmV2ZXIgc2hvd3MuXG4gICAqL1xuICBkcm9wZG93blRyaWdnZXI/OiBcImF1dG9cIiB8IFwibWFudWFsXCIgfCBcImhpZGRlblwiO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGRyb3Bkb3duIGNsb3NlcyBpZiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuICovXG4gIGNsb3NlRHJvcGRvd25PbkJsdXI/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlIChkZWZhdWx0KSwgbm9uLXRhcHBhYmxlIG9wdGlvbnMgcmVuZGVyIGFsb25nc2lkZSB0YXBwYWJsZSBvbmVzLiAqL1xuICBzaG93Tm9uVGFwcGFibGVPcHRpb25zPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRlbGVtZXRyeSBzdXJmYWNlIGlkZW50aWZpZXIuIFNldCBhdXRvbWF0aWNhbGx5IHRvIFwiZnVsbC1zZGtcIiBieSB0aGVcbiAgICogVGllciAxIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50LiBEZWZhdWx0cyB0byBcImhlYWRsZXNzLXNka1wiLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHNvdXJjZT86IFwiZnVsbC1zZGtcIiB8IFwiaGVhZGxlc3Mtc2RrXCI7XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBzdWJtaXRzIChFbnRlciBrZXkgb3IgYHN1Ym1pdCgpYCBhY3Rpb24pLiAqL1xuICBvblN1Ym1pdD86IChyZXN1bHQ6IEF1dG9jb21wbGV0ZVJlc3VsdCkgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIGEgZmV0Y2ggZmFpbHMuICovXG4gIG9uRXJyb3I/OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIGVkaXRvciB0ZXh0IGNoYW5nZXMgKGNvbnRyb2xsZWQtbW9kZSBzaWduYWwpLiAqL1xuICBvbkNoYW5nZT86ICh0ZXh0OiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiBjb21wbGV0ZWQgcGFyYW1zIGNoYW5nZSAoY29udHJvbGxlZC1tb2RlIHNpZ25hbCkuICovXG4gIG9uUGFyYW1zQ2hhbmdlPzogKHBhcmFtczogQ29tcGxldGVkUGFyYW1TdGF0ZVtdKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIGlucHV0IGdhaW5zIGZvY3VzLiAqL1xuICBvbkZvY3VzPzogKCkgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBpbnB1dCBsb3NlcyBmb2N1cy4gKi9cbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgLyoqXG4gICAqIE9wdC1pbiBwcm9kdWN0IHN0cmlwLiBXaGVuIHNldCwgdGhlIGRyb3Bkb3duIHJlbmRlcnMgYSBob3Jpem9udGFsIHJvdyBvZlxuICAgKiBwcm9kdWN0IGNhcmRzIGJlbG93IHRoZSBvcHRpb25zIGdyaWQsIGZlZCBieSB0aGUgaW50ZWdyYXRpb24ncyBvd24gc2VhcmNoXG4gICAqIGVuZHBvaW50IG9uIHRoZSBTREsncyBleGlzdGluZyBmZXRjaCBjYWRlbmNlLiBPbWl0IGl0IGFuZCBub3RoaW5nIGFib3V0XG4gICAqIHRoZSBkcm9wZG93biBjaGFuZ2VzIOKAlCBubyByZXF1ZXN0LCBubyBtYXJrdXAsIG5vIGxheW91dCBzaGlmdC5cbiAgICovXG4gIHByb2R1Y3RzPzogUHJvZHVjdHNDb25maWc7XG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBhY3RpdmF0ZXMgYSBwcm9kdWN0IGNhcmQuIFRoZSBTREsgZG9lcyBub3QgbmF2aWdhdGUg4oCUXG4gICAqIHRoZSBpbnRlZ3JhdGlvbiBkZWNpZGVzIHdoYXQgYSBzZWxlY3Rpb24gbWVhbnMuIE1vZGlmaWVyIC8gbWlkZGxlIGNsaWNrc1xuICAgKiBhcmUgbGVmdCB0byB0aGUgYnJvd3NlciAoY21kLWNsaWNrIHN0aWxsIG9wZW5zIGEgdGFiKSBhbmQgZG9uJ3QgZmlyZSB0aGlzLlxuICAgKi9cbiAgb25Qcm9kdWN0U2VsZWN0PzogKHByb2R1Y3Q6IFByb2R1Y3QpID0+IHZvaWQ7XG4gIC8qKiBJbml0aWFsIGNvbnRyb2xsZWQgdGV4dCB2YWx1ZS4gKi9cbiAgdmFsdWU/OiBzdHJpbmc7XG4gIC8qKiBJbml0aWFsIGNvbnRyb2xsZWQgY29tcGxldGVkIHBhcmFtcy4gKi9cbiAgY29tcGxldGVkUGFyYW1zPzogQ29tcGxldGVkUGFyYW1TdGF0ZVtdO1xuICAvKipcbiAgICogQ2FyZXQtc2V0IGNhbGxiYWNrLiBJbnZva2VkIGJ5IHRoZSBjb3JlIHdoZW4gcmUtZWRpdCAvIEJhY2tzcGFjZSBmbG93c1xuICAgKiBuZWVkIHRoZSBlZGl0b3IgY2FyZXQgcGFya2VkIGF0IGEgc3BlY2lmaWMgcGxhaW4tdGV4dCBvZmZzZXQuIFRoZSBUaWVyIDFcbiAgICogYDxhaS1hdXRvY29tcGxldGU+YCBjb21wb25lbnQgd2lyZXMgdGhpcyBmcm9tIGl0cyBlZGl0b3IgaG9zdDsgaGVhZGxlc3NcbiAgICogY29uc3VtZXJzIGNhbiBsZWF2ZSBpdCB1bnNldC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBzZXRDdXJzb3I/OiAob2Zmc2V0OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogU3Vic2V0IG9mIHtAbGluayBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJPcHRpb25zfSB0aGF0IGNhbiBiZSBjaGFuZ2VkIGFmdGVyXG4gKiBjb25zdHJ1Y3Rpb24uIEV4Y2x1ZGVzIGV2ZW50IGNhbGxiYWNrcyAodGhvc2UgYXJlIHJlZ2lzdGVyZWQgb25jZSBhdFxuICogY29uc3RydWN0aW9uIOKAlCBzZWUgdmFuaWxsYSBgQ29yZVVwZGF0ZU9wdGlvbnNgKS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclVwZGF0ZSA9IFBhcnRpYWw8XG4gIE9taXQ8XG4gICAgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9ucyxcbiAgICB8IFwib25TdWJtaXRcIlxuICAgIHwgXCJvbkVycm9yXCJcbiAgICB8IFwib25DaGFuZ2VcIlxuICAgIHwgXCJvblBhcmFtc0NoYW5nZVwiXG4gICAgfCBcIm9uRm9jdXNcIlxuICAgIHwgXCJvbkJsdXJcIlxuICAgIHwgXCJvblByb2R1Y3RTZWxlY3RcIlxuICAgIHwgXCJzZXRDdXJzb3JcIlxuICA+XG4+O1xuXG4vKipcbiAqIFNuYXBzaG90IG9mIHRoZSBjb250cm9sbGVyJ3MgcmVhY3RpdmUgc3RhdGUuIEVhY2ggZmllbGQgaXMgYWxzbyBleHBvc2VkIGFzXG4gKiBhIHN0YW5kLWFsb25lIG9ic2VydmFibGUgb24gdGhlIGNvbnRyb2xsZXIgKGUuZy4gYGNvbnRyb2xsZXIudGV4dCRgKS5cbiAqXG4gKiBgc3VnZ2VzdGlvblBpbGxzYCBtaXJyb3JzIFJlYWN0J3MgYHN1Z2dlc3Rpb25QaWxsc2Ag4oCUIHRoZSBhY3Rpb25hYmxlXG4gKiBzdWJzZXQgb2YgYHN1Z2dlc3Rpb25zYCByZWFkeSBmb3IgcGlsbCByZW5kZXJpbmcuIGBpc0xvYWRpbmdgIGlzIHRoZVxuICogVUktdmlzaWJsZSBsb2FkaW5nIGZsYWcgKHN1cHByZXNzZWQgZHVyaW5nIHRoZSBwb3N0LXNlbGVjdCBzdHJlYWtcbiAqIGFuaW1hdGlvbiBhbmQgZHVyaW5nIHJlLWVkaXQsIHdoZXJlIGNhY2hlZCBvcHRpb25zIHN0YXkgdmlzaWJsZSkuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlclN0YXRlIHtcbiAgdGV4dDogc3RyaW5nO1xuICBjb21wbGV0ZWRQYXJhbXM6IENvbXBsZXRlZFBhcmFtU3RhdGVbXTtcbiAgLyoqXG4gICAqIFN1Z2dlc3Rpb25zIHRoZSB1c2VyIGRpc21pc3NlZCB3aXRoIHRoZSBza2lwIGtleSAo4oaSKS4gTm90aGluZyByZW5kZXJzXG4gICAqIHRoZW0g4oCUIHBhc3MgdGhlbSB0byBgYnVpbGRTdWJtaXRSZXN1bHRgIHNvIGEgaGFuZC1yb2xsZWQgc3VibWl0IGNhcnJpZXNcbiAgICogdGhlIHNhbWUgYHRleHQ6IFwic2tpcHBlZFwiYCBlbnRyaWVzIHRoZSBTREsncyBvd24gcmVxdWVzdHMgZG8uXG4gICAqL1xuICBza2lwcGVkUGFyYW1zOiBTa2lwcGVkUGFyYW1TdGF0ZVtdO1xuICBzdWdnZXN0aW9uUGlsbHM6IFN1Z2dlc3Rpb25bXTtcbiAgc2VnbWVudHM6IFNlZ21lbnRbXTtcbiAgbmV3UGFyYW1JZDogc3RyaW5nIHwgbnVsbDtcbiAgc3VnZ2VzdGlvbnM6IFN1Z2dlc3Rpb25bXTtcbiAgLyoqXG4gICAqIFJlc3VsdHMgb2YgdGhlIGxhdGVzdCBwcm9kdWN0IHNlYXJjaC4gQWx3YXlzIGVtcHR5IHVubGVzcyBgcHJvZHVjdHNgIGlzXG4gICAqIGNvbmZpZ3VyZWQuIEFscmVhZHkgZm9sZGVkIGludG8gdGhlIGRyb3Bkb3duIHNuYXBzaG90IOKAlCByZWFkIGl0IGhlcmUgb25seVxuICAgKiB3aGVuIHJlbmRlcmluZyB5b3VyIG93biBzdHJpcC5cbiAgICovXG4gIHByb2R1Y3RzOiBQcm9kdWN0W107XG4gIGFjdGl2ZUluZGV4OiBudW1iZXI7XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgaXNSZWFkeTogYm9vbGVhbjtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBpc0Ryb3Bkb3duT3BlbjogYm9vbGVhbjtcbiAgcGxhY2Vob2xkZXJUZXh0OiBzdHJpbmc7XG4gIGVycm9yOiBFcnJvciB8IG51bGw7XG4gIGVkaXRpbmdQYXJhbTogQ29tcGxldGVkUGFyYW1TdGF0ZSB8IG51bGw7XG4gIGVkaXRpbmdBbmNob3I6IG51bWJlciB8IG51bGw7XG4gIGNhcmV0T2Zmc2V0OiBudW1iZXIgfCBudWxsO1xufVxuXG4vKipcbiAqIENvbXBvc2l0ZSBzdGF0ZSBzaGFwZSBmb3IgdGhlIGRyb3Bkb3duIHZpZXcgbGF5ZXIuIFRpZXIgMiBjb25zdW1lcnMgYmluZFxuICogdGhlIGRyb3Bkb3duIGNvbXBvbmVudCB0byB0aGlzIHNuYXBzaG90OyBUaWVyIDEgdXNlcyB0aGUgc2FtZSBzaGFwZVxuICogaW50ZXJuYWxseS5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQUlBdXRvY29tcGxldGVEcm9wZG93blN0YXRlIHtcbiAgLyoqIEFjdGl2ZSBzdWdnZXN0aW9uICsgZmlsdGVyZWQgb3B0aW9ucyB0byByZW5kZXIgaW4gdGhlIGdyaWQuICovXG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW107XG4gIC8qKiBDdXJyZW50bHkgaGlnaGxpZ2h0ZWQgb3B0aW9uIGluZGV4LiAtMSB3aGVuIG5vbmUuICovXG4gIGFjdGl2ZUluZGV4OiBudW1iZXI7XG4gIC8qKiBXaGV0aGVyIHRoZSBkcm9wZG93biBzaG91bGQgYmUgdmlzaWJsZS4gKi9cbiAgaXNPcGVuOiBib29sZWFuO1xuICAvKiogUGlsbHMgdG8gcmVuZGVyIGluIHRoZSBkcm9wZG93bidzIHBpbGxiYXIgKHJlLWVkaXQgcGlsbCBvciBhbGwgc3VnZ2VzdGlvbiBwaWxscykuICovXG4gIHBpbGxzOiBTdWdnZXN0aW9uW107XG4gIC8qKiBXaGV0aGVyIHRoZSBhY3RpdmUgcGlsbCByZW5kZXJzIHNlbGVjdGVkIChmdWxsIG9wYWNpdHkpIHZzLiB0aGUgYGZpcnN0YCB0aWVyLiAqL1xuICBpc0FjdGl2ZVBpbGxTZWxlY3RlZDogYm9vbGVhbjtcbiAgLyoqIFRydWUgd2hlbiB0aGUgZHJvcGRvd24gc2hvdWxkIHJlbmRlciBpdHMgbG9hZGluZyBza2VsZXRvbi4gKi9cbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICAvKiogV2hldGhlciB0aGUgaW5wdXQgaGFzIG5vIHR5cGVkIHRleHQg4oCUIHRoZSBzb2xlIHN0YXRlIHRoYXQgc3VyZmFjZXMgXCJ0YWIgdG8gc2VsZWN0XCIgaW4gdGhlIGZvb3RlciBoaW50LiAqL1xuICBpc0lucHV0RW1wdHk6IGJvb2xlYW47XG4gIC8qKiBQcm9kdWN0IGNhcmRzIHRvIHJlbmRlciBiZWxvdyB0aGUgb3B0aW9ucyBncmlkLiBFbXB0eSAodGhlIGRlZmF1bHQpIHJlbmRlcnMgbm8gc3RyaXAuICovXG4gIHByb2R1Y3RzOiBQcm9kdWN0W107XG4gIC8qKlxuICAgKiBUcnVlIHdoaWxlIGEgY29tcGxldGVkIHBhcmFtIGlzIGJlaW5nIHJlLWVkaXRlZC4gVGhlIHBpbGxiYXIgdGhlbiBzaG93c1xuICAgKiB0aGUgcGFyYW0gYmVpbmcgcmUtZWRpdGVkIOKAlCBub3Qgc2tpcHBhYmxlIOKAlCBzbyB0aGUgc2tpcCBidXR0b24gaGlkZXMuXG4gICAqIE9wdGlvbmFsICh1bmRlZmluZWQg4oeSIG5vdCBlZGl0aW5nKSBzbyBleGlzdGluZyBjb25zdW1lciBjb2RlIGNvbnN0cnVjdGluZ1xuICAgKiB0aGlzIHN0YXRlIOKAlCB0ZXN0IGZpeHR1cmVzLCBmYWtlIGNvbnRyb2xsZXJzIOKAlCBrZWVwcyBjb21waWxpbmcgYWNyb3NzIHRoZVxuICAgKiBtaW5vciBidW1wIHRoYXQgaW50cm9kdWNlZCBpdC5cbiAgICovXG4gIGlzRWRpdGluZz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIGZvciB0aGUgfjUwMG1zIHdpbmRvdyBhZnRlciBhbiBvcHRpb24gaXMgc2VsZWN0ZWQsIHdoaWxlIHRoZSBhbnN3ZXJlZFxuICAgKiBzdWdnZXN0aW9uIGFuaW1hdGVzIG91dC4gYGlzTG9hZGluZ2AgaXMgZGVsaWJlcmF0ZWx5IHN1cHByZXNzZWQgaW4gdGhhdFxuICAgKiB3aW5kb3csIGJ1dCB0aGUgY29yZSdzIGBza2lwQWN0aXZlUGlsbCgpYCBuby1vcHMgaW4gaXQg4oCUIHRoZSBza2lwIGJ1dHRvblxuICAgKiByZW5kZXJzIGRpc2FibGVkIG9mZiB0aGlzIGZsYWcgaW5zdGVhZCBvZiBzd2FsbG93aW5nIGNsaWNrcyBzaWxlbnRseS5cbiAgICogT3B0aW9uYWwgKHVuZGVmaW5lZCDih5IgZmFsc2UpIGZvciB0aGUgc2FtZSBjb21waWxlLWNvbXBhdCByZWFzb24gYXNcbiAgICogYGlzRWRpdGluZ2AuXG4gICAqL1xuICBpblNlbGVjdGlvbkFuaW1hdGlvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgZHJvcGRvd24gb3BlbnMgcmVsYXRpdmUgdG8gdGhlIGlucHV0IOKAlCBtaXJyb3JzIHRoZSBjb250cm9sbGVyJ3NcbiAgICogYG9wdGlvbnNQb3NpdGlvbmAgb3B0aW9uLiBgPGFpLWF1dG9jb21wbGV0ZS1kcm9wZG93bj5gIHJlYWRzIGl0IGZyb20gaGVyZSwgc29cbiAgICogcGxhY2VtZW50IGlzIGNvbmZpZ3VyZWQgb25jZSBvbiB0aGUgY29udHJvbGxlciAobm8gc2VwYXJhdGUgaW5wdXQgdG8gc3luYykuXG4gICAqL1xuICBvcHRpb25zUG9zaXRpb246IFwiYWJvdmVcIiB8IFwiYmVsb3dcIjtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NoYXJlZC90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBBUElDb25maWcsXG4gIEF1dG9jb21wbGV0ZVJlc3VsdCxcbiAgQ29tcGxldGVkUGFyYW1TdGF0ZSxcbiAgT3B0aW9uT3ZlcnJpZGVzLFxuICBQcm9kdWN0LFxuICBQcm9kdWN0c0NvbmZpZyxcbiAgU2VnbWVudCxcbiAgU2tpcHBlZFBhcmFtU3RhdGUsXG4gIFN1Z2dlc3Rpb24sXG59IGZyb20gXCJAbWFnaWN4LWVuZy9haS1hdXRvY29tcGxldGUtdmFuaWxsYVwiO1xuXG4vKipcbiAqIENvbnN0cnVjdGlvbi10aW1lIG9wdGlvbnMgZm9yIHtAbGluayBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJ9LlxuICpcbiAqIE1pcnJvcnMgdGhlIHByb3BzIHRoZSBSZWFjdCBgdXNlQUlBdXRvY29tcGxldGUoKWAgaG9vayBhY2NlcHRzLCBtaW51cyB0aGVcbiAqIGZpZWxkcyB0aGF0IG9ubHkgbWFrZSBzZW5zZSBmb3IgYSBSZWFjdCBjb21wb25lbnQgc2hlbGwgKGBjb2x1bW5zYCBpcyBoZXJlO1xuICogYGF1dG9Gb2N1c2AsIGBjbGFzc05hbWVgLCBgcGlsbFBsYWNlbWVudGAsIGV0Yy4gbGl2ZSBvbiB0aGUgVGllciAxXG4gKiBgPGFpLWF1dG9jb21wbGV0ZT5gIGNvbXBvbmVudCkuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMge1xuICAvKiogUnVudGltZSBBUEkgY29uZmlndXJhdGlvbiAoYXBpS2V5LCBlbmRwb2ludCwgZXRjLikuICovXG4gIGFwaUNvbmZpZz86IEFQSUNvbmZpZztcbiAgLyoqXG4gICAqIE9wdGlvbmFsIHVzZXIgY29udGV4dC4gSW5jbHVkZSB3aGF0ZXZlciB5b3Uga25vdyBhYm91dCB0aGUgdXNlciDigJQgYVxuICAgKiBwcm9maWxlLCBwcmVmZXJlbmNlcywgd29ya3NwYWNlLCBhbnl0aGluZyDigJQgdG8gcGVyc29uYWxpemUgc3VnZ2VzdGVkXG4gICAqIHBhcmFtZXRlcnMgYW5kIG9wdGlvbnMgdG8gdGhlbS5cbiAgICovXG4gIGFkZGl0aW9uYWxDb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIGVhY2ggdGltZSB0aGUgcXVlcnkgaXMgZW1wdHksIHRoZSBpbml0aWFsIHN1Z2dlc3Rpb25zIGFyZVxuICAgKiBnZW5lcmF0ZWQgZnJlc2gg4oCUIHBlcnNvbmFsaXplZCB0byBgYWRkaXRpb25hbENvbnRleHRgIHdoZW4gc2V0IOKAlFxuICAgKiBpbnN0ZWFkIG9mIHRoZSBmaXhlZCBkZWZhdWx0cy4gVGhlIGluaXRpYWwgcGxhY2Vob2xkZXIgdGV4dCBpdHNlbGYgaXNcbiAgICogdW5jaGFuZ2VkLiBEZWZhdWx0OiBmYWxzZS5cbiAgICovXG4gIGdlbmVyYXRlU3RhcnRpbmdTdGF0ZU9wdGlvbnM/OiBib29sZWFuO1xuICAvKiogUGVyLXN1Z2dlc3Rpb24tdHlwZSBjbGllbnQtc2lkZSBvcHRpb24gb3ZlcnJpZGVzLiAqL1xuICBvcHRpb25PdmVycmlkZXM/OiBPcHRpb25PdmVycmlkZXM7XG4gIC8qKiBXaGVuIHRydWUsIGNvbXBsZXRlZCBwYXJhbXMnIGxpdGVyYWwgdGV4dCBpcyBvbWl0dGVkIGZyb20gQVBJIHJlcXVlc3RzLiAqL1xuICBtYXNrQ29tcGxldGVkVGV4dD86IGJvb2xlYW47XG4gIC8qKiBOdW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgZHJvcGRvd24gZ3JpZC4gRGVmYXVsdDogMi4gKi9cbiAgY29sdW1ucz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBkcm9wZG93biBvcGVucyByZWxhdGl2ZSB0byB0aGUgaW5wdXQuIERlZmF1bHQ6IFwiYmVsb3dcIi5cbiAgICpcbiAgICogUmVhZCBieSB0aGUga2V5Ym9hcmQgY29udHJvbGxlciB0byBkZWNpZGUgd2hpY2ggdmVydGljYWwtYXJyb3cga2V5IG9wZW5zXG4gICAqIHRoZSBkcm9wZG93biBmcm9tIHRoZSBpbnB1dCDigJQgQXJyb3dEb3duIHdoZW4gdGhlIGRyb3Bkb3duIGlzIGJlbG93LFxuICAgKiBBcnJvd1VwIHdoZW4gaXQncyBhYm92ZS5cbiAgICovXG4gIG9wdGlvbnNQb3NpdGlvbj86IFwiYWJvdmVcIiB8IFwiYmVsb3dcIjtcbiAgLyoqXG4gICAqIFdoZW4gdGhlIGRyb3Bkb3duIGFwcGVhcnMuIFwiYXV0b1wiIChkZWZhdWx0KSBzaG93cyB3aGVuIG9wdGlvbnMgYXJlXG4gICAqIGF2YWlsYWJsZTsgXCJtYW51YWxcIiBzaG93cyBvbmx5IG9uIHBpbGwgdGFwOyBcImhpZGRlblwiIG5ldmVyIHNob3dzLlxuICAgKi9cbiAgZHJvcGRvd25UcmlnZ2VyPzogXCJhdXRvXCIgfCBcIm1hbnVhbFwiIHwgXCJoaWRkZW5cIjtcbiAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIHRoZSBkcm9wZG93biBjbG9zZXMgaWYgdGhlIGlucHV0IGxvc2VzIGZvY3VzLiAqL1xuICBjbG9zZURyb3Bkb3duT25CbHVyPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIG5vbi10YXBwYWJsZSBvcHRpb25zIHJlbmRlciBhbG9uZ3NpZGUgdGFwcGFibGUgb25lcy4gKi9cbiAgc2hvd05vblRhcHBhYmxlT3B0aW9ucz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUZWxlbWV0cnkgc3VyZmFjZSBpZGVudGlmaWVyLiBTZXQgYXV0b21hdGljYWxseSB0byBcImZ1bGwtc2RrXCIgYnkgdGhlXG4gICAqIFRpZXIgMSBgPGFpLWF1dG9jb21wbGV0ZT5gIGNvbXBvbmVudC4gRGVmYXVsdHMgdG8gXCJoZWFkbGVzcy1zZGtcIi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBzb3VyY2U/OiBcImZ1bGwtc2RrXCIgfCBcImhlYWRsZXNzLXNka1wiO1xuICAvKiogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgc3VibWl0cyAoRW50ZXIga2V5IG9yIGBzdWJtaXQoKWAgYWN0aW9uKS4gKi9cbiAgb25TdWJtaXQ/OiAocmVzdWx0OiBBdXRvY29tcGxldGVSZXN1bHQpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiBhIGZldGNoIGZhaWxzLiAqL1xuICBvbkVycm9yPzogKGVycm9yOiBFcnJvcikgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBlZGl0b3IgdGV4dCBjaGFuZ2VzIChjb250cm9sbGVkLW1vZGUgc2lnbmFsKS4gKi9cbiAgb25DaGFuZ2U/OiAodGV4dDogc3RyaW5nKSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gY29tcGxldGVkIHBhcmFtcyBjaGFuZ2UgKGNvbnRyb2xsZWQtbW9kZSBzaWduYWwpLiAqL1xuICBvblBhcmFtc0NoYW5nZT86IChwYXJhbXM6IENvbXBsZXRlZFBhcmFtU3RhdGVbXSkgPT4gdm9pZDtcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSBpbnB1dCBnYWlucyBmb2N1cy4gKi9cbiAgb25Gb2N1cz86ICgpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgd2hlbiB0aGUgaW5wdXQgbG9zZXMgZm9jdXMuICovXG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBPcHQtaW4gcHJvZHVjdCBzdHJpcC4gV2hlbiBzZXQsIHRoZSBkcm9wZG93biByZW5kZXJzIGEgaG9yaXpvbnRhbCByb3cgb2ZcbiAgICogcHJvZHVjdCBjYXJkcyBiZWxvdyB0aGUgb3B0aW9ucyBncmlkLCBmZWQgYnkgdGhlIGludGVncmF0aW9uJ3Mgb3duIHNlYXJjaFxuICAgKiBlbmRwb2ludCBvbiB0aGUgU0RLJ3MgZXhpc3RpbmcgZmV0Y2ggY2FkZW5jZS4gT21pdCBpdCBhbmQgbm90aGluZyBhYm91dFxuICAgKiB0aGUgZHJvcGRvd24gY2hhbmdlcyDigJQgbm8gcmVxdWVzdCwgbm8gbWFya3VwLCBubyBsYXlvdXQgc2hpZnQuXG4gICAqL1xuICBwcm9kdWN0cz86IFByb2R1Y3RzQ29uZmlnO1xuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gdGhlIHVzZXIgYWN0aXZhdGVzIGEgcHJvZHVjdCBjYXJkLiBUaGUgU0RLIGRvZXMgbm90IG5hdmlnYXRlIOKAlFxuICAgKiB0aGUgaW50ZWdyYXRpb24gZGVjaWRlcyB3aGF0IGEgc2VsZWN0aW9uIG1lYW5zLiBNb2RpZmllciAvIG1pZGRsZSBjbGlja3NcbiAgICogYXJlIGxlZnQgdG8gdGhlIGJyb3dzZXIgKGNtZC1jbGljayBzdGlsbCBvcGVucyBhIHRhYikgYW5kIGRvbid0IGZpcmUgdGhpcy5cbiAgICovXG4gIG9uUHJvZHVjdFNlbGVjdD86IChwcm9kdWN0OiBQcm9kdWN0KSA9PiB2b2lkO1xuICAvKiogSW5pdGlhbCBjb250cm9sbGVkIHRleHQgdmFsdWUuICovXG4gIHZhbHVlPzogc3RyaW5nO1xuICAvKiogSW5pdGlhbCBjb250cm9sbGVkIGNvbXBsZXRlZCBwYXJhbXMuICovXG4gIGNvbXBsZXRlZFBhcmFtcz86IENvbXBsZXRlZFBhcmFtU3RhdGVbXTtcbiAgLyoqXG4gICAqIENhcmV0LXNldCBjYWxsYmFjay4gSW52b2tlZCBieSB0aGUgY29yZSB3aGVuIHJlLWVkaXQgLyBCYWNrc3BhY2UgZmxvd3NcbiAgICogbmVlZCB0aGUgZWRpdG9yIGNhcmV0IHBhcmtlZCBhdCBhIHNwZWNpZmljIHBsYWluLXRleHQgb2Zmc2V0LiBUaGUgVGllciAxXG4gICAqIGA8YWktYXV0b2NvbXBsZXRlPmAgY29tcG9uZW50IHdpcmVzIHRoaXMgZnJvbSBpdHMgZWRpdG9yIGhvc3Q7IGhlYWRsZXNzXG4gICAqIGNvbnN1bWVycyBjYW4gbGVhdmUgaXQgdW5zZXQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgc2V0Q3Vyc29yPzogKG9mZnNldDogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFN1YnNldCBvZiB7QGxpbmsgQUlBdXRvY29tcGxldGVDb250cm9sbGVyT3B0aW9uc30gdGhhdCBjYW4gYmUgY2hhbmdlZCBhZnRlclxuICogY29uc3RydWN0aW9uLiBFeGNsdWRlcyBldmVudCBjYWxsYmFja3MgKHRob3NlIGFyZSByZWdpc3RlcmVkIG9uY2UgYXRcbiAqIGNvbnN0cnVjdGlvbiDigJQgc2VlIHZhbmlsbGEgYENvcmVVcGRhdGVPcHRpb25zYCkuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJVcGRhdGUgPSBQYXJ0aWFsPFxuICBPbWl0PFxuICAgIEFJQXV0b2NvbXBsZXRlQ29udHJvbGxlck9wdGlvbnMsXG4gICAgfCBcIm9uU3VibWl0XCJcbiAgICB8IFwib25FcnJvclwiXG4gICAgfCBcIm9uQ2hhbmdlXCJcbiAgICB8IFwib25QYXJhbXNDaGFuZ2VcIlxuICAgIHwgXCJvbkZvY3VzXCJcbiAgICB8IFwib25CbHVyXCJcbiAgICB8IFwib25Qcm9kdWN0U2VsZWN0XCJcbiAgICB8IFwic2V0Q3Vyc29yXCJcbiAgPlxuPjtcblxuLyoqXG4gKiBTbmFwc2hvdCBvZiB0aGUgY29udHJvbGxlcidzIHJlYWN0aXZlIHN0YXRlLiBFYWNoIGZpZWxkIGlzIGFsc28gZXhwb3NlZCBhc1xuICogYSBzdGFuZC1hbG9uZSBvYnNlcnZhYmxlIG9uIHRoZSBjb250cm9sbGVyIChlLmcuIGBjb250cm9sbGVyLnRleHQkYCkuXG4gKlxuICogYHN1Z2dlc3Rpb25QaWxsc2AgbWlycm9ycyBSZWFjdCdzIGBzdWdnZXN0aW9uUGlsbHNgIOKAlCB0aGUgYWN0aW9uYWJsZVxuICogc3Vic2V0IG9mIGBzdWdnZXN0aW9uc2AgcmVhZHkgZm9yIHBpbGwgcmVuZGVyaW5nLiBgaXNMb2FkaW5nYCBpcyB0aGVcbiAqIFVJLXZpc2libGUgbG9hZGluZyBmbGFnIChzdXBwcmVzc2VkIGR1cmluZyB0aGUgcG9zdC1zZWxlY3Qgc3RyZWFrXG4gKiBhbmltYXRpb24gYW5kIGR1cmluZyByZS1lZGl0LCB3aGVyZSBjYWNoZWQgb3B0aW9ucyBzdGF5IHZpc2libGUpLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBSUF1dG9jb21wbGV0ZUNvbnRyb2xsZXJTdGF0ZSB7XG4gIHRleHQ6IHN0cmluZztcbiAgY29tcGxldGVkUGFyYW1zOiBDb21wbGV0ZWRQYXJhbVN0YXRlW107XG4gIC8qKlxuICAgKiBTdWdnZXN0aW9ucyB0aGUgdXNlciBkaXNtaXNzZWQgd2l0aCB0aGUgc2tpcCBrZXkgKOKGkikuIE5vdGhpbmcgcmVuZGVyc1xuICAgKiB0aGVtIOKAlCBwYXNzIHRoZW0gdG8gYGJ1aWxkU3VibWl0UmVzdWx0YCBzbyBhIGhhbmQtcm9sbGVkIHN1Ym1pdCBjYXJyaWVzXG4gICAqIHRoZSBzYW1lIGB0ZXh0OiBcInNraXBwZWRcImAgZW50cmllcyB0aGUgU0RLJ3Mgb3duIHJlcXVlc3RzIGRvLlxuICAgKi9cbiAgc2tpcHBlZFBhcmFtczogU2tpcHBlZFBhcmFtU3RhdGVbXTtcbiAgc3VnZ2VzdGlvblBpbGxzOiBTdWdnZXN0aW9uW107XG4gIHNlZ21lbnRzOiBTZWdtZW50W107XG4gIG5ld1BhcmFtSWQ6IHN0cmluZyB8IG51bGw7XG4gIHN1Z2dlc3Rpb25zOiBTdWdnZXN0aW9uW107XG4gIC8qKlxuICAgKiBSZXN1bHRzIG9mIHRoZSBsYXRlc3QgcHJvZHVjdCBzZWFyY2guIEFsd2F5cyBlbXB0eSB1bmxlc3MgYHByb2R1Y3RzYCBpc1xuICAgKiBjb25maWd1cmVkLiBBbHJlYWR5IGZvbGRlZCBpbnRvIHRoZSBkcm9wZG93biBzbmFwc2hvdCDigJQgcmVhZCBpdCBoZXJlIG9ubHlcbiAgICogd2hlbiByZW5kZXJpbmcgeW91ciBvd24gc3RyaXAuXG4gICAqL1xuICBwcm9kdWN0czogUHJvZHVjdFtdO1xuICBhY3RpdmVJbmRleDogbnVtYmVyO1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIGlzUmVhZHk6IGJvb2xlYW47XG4gIGlzRm9jdXNlZDogYm9vbGVhbjtcbiAgaXNEcm9wZG93bk9wZW46IGJvb2xlYW47XG4gIHBsYWNlaG9sZGVyVGV4dDogc3RyaW5nO1xuICBlcnJvcjogRXJyb3IgfCBudWxsO1xuICBlZGl0aW5nUGFyYW06IENvbXBsZXRlZFBhcmFtU3RhdGUgfCBudWxsO1xuICBlZGl0aW5nQW5jaG9yOiBudW1iZXIgfCBudWxsO1xuICBjYXJldE9mZnNldDogbnVtYmVyIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBDb21wb3NpdGUgc3RhdGUgc2hhcGUgZm9yIHRoZSBkcm9wZG93biB2aWV3IGxheWVyLiBUaWVyIDIgY29uc3VtZXJzIGJpbmRcbiAqIHRoZSBkcm9wZG93biBjb21wb25lbnQgdG8gdGhpcyBzbmFwc2hvdDsgVGllciAxIHVzZXMgdGhlIHNhbWUgc2hhcGVcbiAqIGludGVybmFsbHkuXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFJQXV0b2NvbXBsZXRlRHJvcGRvd25TdGF0ZSB7XG4gIC8qKiBBY3RpdmUgc3VnZ2VzdGlvbiArIGZpbHRlcmVkIG9wdGlvbnMgdG8gcmVuZGVyIGluIHRoZSBncmlkLiAqL1xuICBzdWdnZXN0aW9uczogU3VnZ2VzdGlvbltdO1xuICAvKiogQ3VycmVudGx5IGhpZ2hsaWdodGVkIG9wdGlvbiBpbmRleC4gLTEgd2hlbiBub25lLiAqL1xuICBhY3RpdmVJbmRleDogbnVtYmVyO1xuICAvKiogV2hldGhlciB0aGUgZHJvcGRvd24gc2hvdWxkIGJlIHZpc2libGUuICovXG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgLyoqIFBpbGxzIHRvIHJlbmRlciBpbiB0aGUgZHJvcGRvd24ncyBwaWxsYmFyIChyZS1lZGl0IHBpbGwgb3IgYWxsIHN1Z2dlc3Rpb24gcGlsbHMpLiAqL1xuICBwaWxsczogU3VnZ2VzdGlvbltdO1xuICAvKiogV2hldGhlciB0aGUgYWN0aXZlIHBpbGwgcmVuZGVycyBzZWxlY3RlZCAoZnVsbCBvcGFjaXR5KSB2cy4gdGhlIGBmaXJzdGAgdGllci4gKi9cbiAgaXNBY3RpdmVQaWxsU2VsZWN0ZWQ6IGJvb2xlYW47XG4gIC8qKiBUcnVlIHdoZW4gdGhlIGRyb3Bkb3duIHNob3VsZCByZW5kZXIgaXRzIGxvYWRpbmcgc2tlbGV0b24uICovXG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgLyoqIFdoZXRoZXIgdGhlIGlucHV0IGhhcyBubyB0eXBlZCB0ZXh0IOKAlCB0aGUgc29sZSBzdGF0ZSB0aGF0IHN1cmZhY2VzIFwidGFiIHRvIHNlbGVjdFwiIGluIHRoZSBmb290ZXIgaGludC4gKi9cbiAgaXNJbnB1dEVtcHR5OiBib29sZWFuO1xuICAvKiogUHJvZHVjdCBjYXJkcyB0byByZW5kZXIgYmVsb3cgdGhlIG9wdGlvbnMgZ3JpZC4gRW1wdHkgKHRoZSBkZWZhdWx0KSByZW5kZXJzIG5vIHN0cmlwLiAqL1xuICBwcm9kdWN0czogUHJvZHVjdFtdO1xuICAvKipcbiAgICogVHJ1ZSB3aGlsZSBhIGNvbXBsZXRlZCBwYXJhbSBpcyBiZWluZyByZS1lZGl0ZWQuIFRoZSBwaWxsYmFyIHRoZW4gc2hvd3NcbiAgICogdGhlIHBhcmFtIGJlaW5nIHJlLWVkaXRlZCDigJQgbm90IHNraXBwYWJsZSDigJQgc28gdGhlIHNraXAgYnV0dG9uIGhpZGVzLlxuICAgKiBPcHRpb25hbCAodW5kZWZpbmVkIOKHkiBub3QgZWRpdGluZykgc28gZXhpc3RpbmcgY29uc3VtZXIgY29kZSBjb25zdHJ1Y3RpbmdcbiAgICogdGhpcyBzdGF0ZSDigJQgdGVzdCBmaXh0dXJlcywgZmFrZSBjb250cm9sbGVycyDigJQga2VlcHMgY29tcGlsaW5nIGFjcm9zcyB0aGVcbiAgICogbWlub3IgYnVtcCB0aGF0IGludHJvZHVjZWQgaXQuXG4gICAqL1xuICBpc0VkaXRpbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogVHJ1ZSBmb3IgdGhlIH41MDBtcyB3aW5kb3cgYWZ0ZXIgYW4gb3B0aW9uIGlzIHNlbGVjdGVkLCB3aGlsZSB0aGUgYW5zd2VyZWRcbiAgICogc3VnZ2VzdGlvbiBhbmltYXRlcyBvdXQuIGBpc0xvYWRpbmdgIGlzIGRlbGliZXJhdGVseSBzdXBwcmVzc2VkIGluIHRoYXRcbiAgICogd2luZG93LCBidXQgdGhlIGNvcmUncyBgc2tpcEFjdGl2ZVBpbGwoKWAgbm8tb3BzIGluIGl0IOKAlCB0aGUgc2tpcCBidXR0b25cbiAgICogcmVuZGVycyBkaXNhYmxlZCBvZmYgdGhpcyBmbGFnIGluc3RlYWQgb2Ygc3dhbGxvd2luZyBjbGlja3Mgc2lsZW50bHkuXG4gICAqIE9wdGlvbmFsICh1bmRlZmluZWQg4oeSIGZhbHNlKSBmb3IgdGhlIHNhbWUgY29tcGlsZS1jb21wYXQgcmVhc29uIGFzXG4gICAqIGBpc0VkaXRpbmdgLlxuICAgKi9cbiAgaW5TZWxlY3Rpb25BbmltYXRpb24/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hlcmUgdGhlIGRyb3Bkb3duIG9wZW5zIHJlbGF0aXZlIHRvIHRoZSBpbnB1dCDigJQgbWlycm9ycyB0aGUgY29udHJvbGxlcidzXG4gICAqIGBvcHRpb25zUG9zaXRpb25gIG9wdGlvbi4gYDxhaS1hdXRvY29tcGxldGUtZHJvcGRvd24+YCByZWFkcyBpdCBmcm9tIGhlcmUsIHNvXG4gICAqIHBsYWNlbWVudCBpcyBjb25maWd1cmVkIG9uY2Ugb24gdGhlIGNvbnRyb2xsZXIgKG5vIHNlcGFyYXRlIGlucHV0IHRvIHN5bmMpLlxuICAgKi9cbiAgb3B0aW9uc1Bvc2l0aW9uOiBcImFib3ZlXCIgfCBcImJlbG93XCI7XG59XG4iXX0=
@@ -1427,6 +1427,7 @@ class AIAutocompleteComponent {
1427
1427
  this.controller = new AIAutocompleteController({
1428
1428
  apiConfig: this.apiConfig,
1429
1429
  additionalContext: this.additionalContext,
1430
+ generateStartingStateOptions: this.generateStartingStateOptions,
1430
1431
  optionOverrides: this.optionOverrides,
1431
1432
  maskCompletedText: this.maskCompletedText,
1432
1433
  columns: this.columns,
@@ -1512,6 +1513,7 @@ class AIAutocompleteComponent {
1512
1513
  // Reactive options
1513
1514
  if (changes["apiConfig"] ||
1514
1515
  changes["additionalContext"] ||
1516
+ changes["generateStartingStateOptions"] ||
1515
1517
  changes["optionOverrides"] ||
1516
1518
  changes["dropdownTrigger"] ||
1517
1519
  changes["optionsPosition"] ||
@@ -1521,6 +1523,7 @@ class AIAutocompleteComponent {
1521
1523
  this.controller.update({
1522
1524
  apiConfig: this.apiConfig,
1523
1525
  additionalContext: this.additionalContext,
1526
+ generateStartingStateOptions: this.generateStartingStateOptions,
1524
1527
  optionOverrides: this.optionOverrides,
1525
1528
  dropdownTrigger: this.dropdownTrigger,
1526
1529
  optionsPosition: this.optionsPosition,
@@ -1709,7 +1712,7 @@ class AIAutocompleteComponent {
1709
1712
  }
1710
1713
  }
1711
1714
  AIAutocompleteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AIAutocompleteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1712
- AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", optionOverrides: "optionOverrides", maskCompletedText: "maskCompletedText", columns: "columns", pillPlacement: "pillPlacement", mode: "mode", optionsPosition: "optionsPosition", animations: "animations", dropdownTrigger: "dropdownTrigger", closeDropdownOnBlur: "closeDropdownOnBlur", showNonTappableOptions: "showNonTappableOptions", showSkipButton: "showSkipButton", autoFocus: "autoFocus", value: "value", completedParams: "completedParams", products: "products", submitButton: "submitButton" }, outputs: { submitted: "submitted", errored: "errored", valueChange: "valueChange", completedParamsChange: "completedParamsChange", focused: "focused", blurred: "blurred", productSelect: "productSelect" }, providers: [
1715
+ AIAutocompleteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AIAutocompleteComponent, isStandalone: true, selector: "ai-autocomplete", inputs: { apiConfig: "apiConfig", additionalContext: "additionalContext", generateStartingStateOptions: "generateStartingStateOptions", optionOverrides: "optionOverrides", maskCompletedText: "maskCompletedText", columns: "columns", pillPlacement: "pillPlacement", mode: "mode", optionsPosition: "optionsPosition", animations: "animations", dropdownTrigger: "dropdownTrigger", closeDropdownOnBlur: "closeDropdownOnBlur", showNonTappableOptions: "showNonTappableOptions", showSkipButton: "showSkipButton", autoFocus: "autoFocus", value: "value", completedParams: "completedParams", products: "products", submitButton: "submitButton" }, outputs: { submitted: "submitted", errored: "errored", valueChange: "valueChange", completedParamsChange: "completedParamsChange", focused: "focused", blurred: "blurred", productSelect: "productSelect" }, providers: [
1713
1716
  {
1714
1717
  provide: NG_VALUE_ACCESSOR,
1715
1718
  // eslint-disable-next-line @typescript-eslint/no-use-before-define
@@ -1737,6 +1740,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1737
1740
  type: Input
1738
1741
  }], additionalContext: [{
1739
1742
  type: Input
1743
+ }], generateStartingStateOptions: [{
1744
+ type: Input
1740
1745
  }], optionOverrides: [{
1741
1746
  type: Input
1742
1747
  }], maskCompletedText: [{