@fundamental-ngx/platform 0.46.0-rc.2 → 0.46.0-rc.21

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.
Files changed (207) hide show
  1. package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +1 -1
  2. package/esm2022/approval-flow/approval-flow.component.mjs +3 -3
  3. package/esm2022/form/auto-complete/auto-complete.directive.mjs +4 -3
  4. package/esm2022/form/auto-complete/auto-complete.module.mjs +4 -6
  5. package/esm2022/form/checkbox/checkbox.module.mjs +5 -8
  6. package/esm2022/form/checkbox-group/checkbox-group.module.mjs +5 -7
  7. package/esm2022/form/combobox/combobox/combobox.component.mjs +36 -14
  8. package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +19 -4
  9. package/esm2022/form/combobox/combobox-mobile/combobox-mobile.module.mjs +4 -9
  10. package/esm2022/form/combobox/combobox.module.mjs +5 -51
  11. package/esm2022/form/combobox/commons/base-combobox.mjs +9 -1
  12. package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +3 -3
  13. package/esm2022/form/form-group/fdp-form.module.mjs +10 -42
  14. package/esm2022/form/form-group/form-field/form-field.component.mjs +47 -12
  15. package/esm2022/form/form-group/form-field-error/form-field-error-description.directive.mjs +4 -3
  16. package/esm2022/form/form-group/form-field-error/form-field-error-heading.directive.mjs +4 -3
  17. package/esm2022/form/form-group/form-field-error/form-field-error.directive.mjs +4 -3
  18. package/esm2022/form/form-group/form-field-extras/form-field-extras.component.mjs +3 -3
  19. package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +3 -3
  20. package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +8 -6
  21. package/esm2022/form/form-group/form-group.component.mjs +25 -10
  22. package/esm2022/form/form-group/pipes/field-group-row-value.pipe.mjs +6 -3
  23. package/esm2022/form/input/fdp-input.module.mjs +5 -11
  24. package/esm2022/form/input/input.component.mjs +5 -4
  25. package/esm2022/form/input-group/addon-body.component.mjs +6 -4
  26. package/esm2022/form/input-group/addon.component.mjs +4 -4
  27. package/esm2022/form/input-group/input-group.component.mjs +9 -10
  28. package/esm2022/form/input-group/input-group.module.mjs +5 -29
  29. package/esm2022/form/input-group/input.component.mjs +4 -3
  30. package/esm2022/form/input-message-group-with-template/input-message-group-with-template.component.mjs +5 -5
  31. package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +9 -1
  32. package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +44 -19
  33. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +24 -5
  34. package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.mjs +4 -10
  35. package/esm2022/form/multi-combobox/multi-combobox.module.mjs +5 -65
  36. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +11 -7
  37. package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.module.mjs +4 -9
  38. package/esm2022/form/multi-input/multi-input.component.mjs +39 -20
  39. package/esm2022/form/multi-input/multi-input.module.mjs +5 -51
  40. package/esm2022/form/platform-file-uploader/platform-file-uploader.component.mjs +6 -5
  41. package/esm2022/form/platform-file-uploader/platform-file-uploader.module.mjs +5 -11
  42. package/esm2022/form/radio-group/radio/radio.component.mjs +10 -9
  43. package/esm2022/form/radio-group/radio-group.component.mjs +6 -6
  44. package/esm2022/form/radio-group/radio-group.module.mjs +5 -32
  45. package/esm2022/form/select/option/option.component.mjs +6 -3
  46. package/esm2022/form/select/select/select.component.mjs +20 -11
  47. package/esm2022/form/select/select.module.mjs +5 -54
  48. package/esm2022/form/step-input/number/number-step-input.component.mjs +25 -14
  49. package/esm2022/form/step-input/step-input-control.directive.mjs +4 -3
  50. package/esm2022/form/step-input/step-input-decrement.directive.mjs +4 -3
  51. package/esm2022/form/step-input/step-input-increment.directive.mjs +4 -3
  52. package/esm2022/form/step-input/step-input.module.mjs +13 -35
  53. package/esm2022/form/switch/switch/switch.component.mjs +4 -3
  54. package/esm2022/form/switch/switch.module.mjs +5 -11
  55. package/esm2022/form/text-area/text-area.component.mjs +12 -11
  56. package/esm2022/form/text-area/text-area.module.mjs +5 -32
  57. package/esm2022/form/time-picker/time-picker.component.mjs +5 -5
  58. package/esm2022/form/time-picker/time-picker.module.mjs +5 -11
  59. package/esm2022/list/list.component.mjs +3 -3
  60. package/esm2022/search-field/search-field.component.mjs +3 -3
  61. package/esm2022/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +18 -9
  62. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +8 -5
  63. package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +18 -10
  64. package/esm2022/settings-generator/settings-generator-content/settings-generator-content.component.mjs +22 -10
  65. package/esm2022/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.mjs +5 -6
  66. package/esm2022/settings-generator/settings-generator.component.mjs +3 -3
  67. package/esm2022/settings-generator/settings-generator.module.mjs +12 -54
  68. package/esm2022/shared/form/base.input.mjs +43 -13
  69. package/esm2022/shared/form/form-field.mjs +1 -1
  70. package/esm2022/slider/slider.component.mjs +4 -4
  71. package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +3 -3
  72. package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +3 -3
  73. package/esm2022/split-menu-button/split-menu-button.component.mjs +3 -3
  74. package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +3 -3
  75. package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +1 -1
  76. package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +1 -1
  77. package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +2 -2
  78. package/esm2022/table/components/table-p13-dialog/table-p13-dialog.component.mjs +11 -11
  79. package/esm2022/table/components/table-row/table-row.component.mjs +3 -3
  80. package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +5 -5
  81. package/esm2022/table/components/table-toolbar/table-toolbar.mjs +1 -1
  82. package/esm2022/table/table.component.mjs +14 -5
  83. package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +3 -3
  84. package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +1 -1
  85. package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +3 -3
  86. package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +1 -1
  87. package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +41 -18
  88. package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +20 -8
  89. package/esm2022/wizard-generator/components/wizard-generator/wizard-generator.component.mjs +10 -8
  90. package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +5 -5
  91. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +12 -9
  92. package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.mjs +5 -5
  93. package/esm2022/wizard-generator/directives/wizard-generator-finish-button.directive.mjs +4 -3
  94. package/esm2022/wizard-generator/directives/wizard-generator-go-next-button.directive.mjs +4 -3
  95. package/esm2022/wizard-generator/directives/wizard-generator-review-button.directive.mjs +4 -3
  96. package/esm2022/wizard-generator/directives/wizard-generator-summary-step.directive.mjs +4 -3
  97. package/esm2022/wizard-generator/wizard-generator.module.mjs +13 -56
  98. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +3 -3
  99. package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
  100. package/fesm2022/fundamental-ngx-platform-form.mjs +541 -635
  101. package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
  102. package/fesm2022/fundamental-ngx-platform-list.mjs +2 -2
  103. package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
  104. package/fesm2022/fundamental-ngx-platform-search-field.mjs +2 -2
  105. package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
  106. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +69 -80
  107. package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
  108. package/fesm2022/fundamental-ngx-platform-shared.mjs +42 -12
  109. package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
  110. package/fesm2022/fundamental-ngx-platform-slider.mjs.map +1 -1
  111. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +4 -4
  112. package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
  113. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +2 -2
  114. package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
  115. package/fesm2022/fundamental-ngx-platform-table.mjs +423 -414
  116. package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
  117. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +2 -2
  118. package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +1 -1
  119. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +3 -3
  120. package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
  121. package/fesm2022/fundamental-ngx-platform-variant-management.mjs +1 -1
  122. package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
  123. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +226 -228
  124. package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
  125. package/form/auto-complete/auto-complete.directive.d.ts +1 -1
  126. package/form/auto-complete/auto-complete.module.d.ts +1 -2
  127. package/form/checkbox/checkbox.module.d.ts +2 -5
  128. package/form/checkbox-group/checkbox-group.module.d.ts +2 -4
  129. package/form/combobox/combobox/combobox.component.d.ts +1 -1
  130. package/form/combobox/combobox-mobile/combobox/combobox-mobile.component.d.ts +1 -1
  131. package/form/combobox/combobox-mobile/combobox-mobile.module.d.ts +1 -5
  132. package/form/combobox/combobox.module.d.ts +1 -12
  133. package/form/combobox/commons/base-combobox.d.ts +2 -0
  134. package/form/form-group/fdp-form.module.d.ts +1 -9
  135. package/form/form-group/form-field/form-field.component.d.ts +12 -3
  136. package/form/form-group/form-field-error/form-field-error-description.directive.d.ts +1 -1
  137. package/form/form-group/form-field-error/form-field-error-heading.directive.d.ts +1 -1
  138. package/form/form-group/form-field-error/form-field-error.directive.d.ts +1 -1
  139. package/form/form-group/form-field-extras/form-field-extras.component.d.ts +1 -1
  140. package/form/form-group/form-field-group/form-field-group.component.d.ts +1 -1
  141. package/form/form-group/form-group-header/form-group-header.component.d.ts +1 -1
  142. package/form/form-group/form-group.component.d.ts +1 -1
  143. package/form/form-group/pipes/field-group-row-value.pipe.d.ts +1 -1
  144. package/form/input/fdp-input.module.d.ts +1 -6
  145. package/form/input/input.component.d.ts +1 -1
  146. package/form/input-group/addon-body.component.d.ts +1 -1
  147. package/form/input-group/addon.component.d.ts +1 -1
  148. package/form/input-group/input-group.component.d.ts +1 -1
  149. package/form/input-group/input-group.module.d.ts +1 -5
  150. package/form/input-group/input.component.d.ts +1 -1
  151. package/form/input-message-group-with-template/input-message-group-with-template.component.d.ts +1 -1
  152. package/form/multi-combobox/commons/base-multi-combobox.d.ts +2 -0
  153. package/form/multi-combobox/multi-combobox/multi-combobox.component.d.ts +1 -1
  154. package/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.d.ts +1 -1
  155. package/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.d.ts +1 -6
  156. package/form/multi-combobox/multi-combobox.module.d.ts +1 -15
  157. package/form/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +1 -1
  158. package/form/multi-input/multi-input-mobile/multi-input-mobile.module.d.ts +1 -5
  159. package/form/multi-input/multi-input.component.d.ts +1 -1
  160. package/form/multi-input/multi-input.module.d.ts +1 -11
  161. package/form/platform-file-uploader/platform-file-uploader.component.d.ts +1 -1
  162. package/form/platform-file-uploader/platform-file-uploader.module.d.ts +1 -6
  163. package/form/radio-group/radio/radio.component.d.ts +1 -1
  164. package/form/radio-group/radio-group.component.d.ts +1 -1
  165. package/form/radio-group/radio-group.module.d.ts +1 -7
  166. package/form/select/option/option.component.d.ts +1 -1
  167. package/form/select/select/select.component.d.ts +3 -1
  168. package/form/select/select.module.d.ts +1 -12
  169. package/form/step-input/number/number-step-input.component.d.ts +1 -1
  170. package/form/step-input/step-input-control.directive.d.ts +1 -1
  171. package/form/step-input/step-input-decrement.directive.d.ts +1 -1
  172. package/form/step-input/step-input-increment.directive.d.ts +1 -1
  173. package/form/step-input/step-input.module.d.ts +1 -7
  174. package/form/switch/switch/switch.component.d.ts +1 -1
  175. package/form/switch/switch.module.d.ts +1 -6
  176. package/form/text-area/text-area.component.d.ts +1 -1
  177. package/form/text-area/text-area.module.d.ts +1 -7
  178. package/form/time-picker/time-picker.component.d.ts +1 -1
  179. package/form/time-picker/time-picker.module.d.ts +1 -6
  180. package/fundamental-ngx-platform-v0.46.0-rc.21.tgz +0 -0
  181. package/package.json +4 -4
  182. package/schematics/ng-add/index.js +1 -1
  183. package/settings-generator/controls/theme-selector-list/theme-selector-list.component.d.ts +2 -2
  184. package/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.d.ts +1 -1
  185. package/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.d.ts +1 -1
  186. package/settings-generator/settings-generator-content/settings-generator-content.component.d.ts +1 -1
  187. package/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.d.ts +1 -1
  188. package/settings-generator/settings-generator.component.d.ts +1 -1
  189. package/settings-generator/settings-generator.module.d.ts +9 -20
  190. package/shared/form/base.input.d.ts +42 -27
  191. package/shared/form/form-field.d.ts +22 -7
  192. package/table/components/table-p13-dialog/table-p13-dialog.component.d.ts +7 -7
  193. package/table/components/table-toolbar/table-toolbar.component.d.ts +3 -3
  194. package/table/components/table-toolbar/table-toolbar.d.ts +4 -1
  195. package/table/table.component.d.ts +9 -3
  196. package/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.d.ts +5 -4
  197. package/wizard-generator/components/wizard-body/wizard-body.component.d.ts +1 -1
  198. package/wizard-generator/components/wizard-generator/wizard-generator.component.d.ts +1 -1
  199. package/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.d.ts +1 -1
  200. package/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.d.ts +1 -1
  201. package/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.d.ts +1 -1
  202. package/wizard-generator/directives/wizard-generator-finish-button.directive.d.ts +1 -1
  203. package/wizard-generator/directives/wizard-generator-go-next-button.directive.d.ts +1 -1
  204. package/wizard-generator/directives/wizard-generator-review-button.directive.d.ts +1 -1
  205. package/wizard-generator/directives/wizard-generator-summary-step.directive.d.ts +1 -1
  206. package/wizard-generator/wizard-generator.module.d.ts +12 -24
  207. package/fundamental-ngx-platform-v0.46.0-rc.2.tgz +0 -0
@@ -3,12 +3,18 @@ import { takeUntil } from 'rxjs/operators';
3
3
  import { MOBILE_MODE_CONFIG, MobileModeBase, MobileModeControl } from '@fundamental-ngx/core/mobile-mode';
4
4
  import { DialogService } from '@fundamental-ngx/core/dialog';
5
5
  import { COMBOBOX_COMPONENT } from '../../combobox.interface';
6
+ import { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';
7
+ import { CdkScrollable } from '@angular/cdk/overlay';
8
+ import { BarModule } from '@fundamental-ngx/core/bar';
9
+ import { TemplateDirective } from '@fundamental-ngx/cdk/utils';
10
+ import { TitleComponent } from '@fundamental-ngx/core/title';
11
+ import { NgIf, NgTemplateOutlet } from '@angular/common';
12
+ import { DialogModule } from '@fundamental-ngx/core/dialog';
6
13
  import * as i0 from "@angular/core";
7
14
  import * as i1 from "@fundamental-ngx/core/dialog";
8
15
  import * as i2 from "@fundamental-ngx/core/bar";
9
16
  import * as i3 from "@fundamental-ngx/core/title";
10
17
  import * as i4 from "@fundamental-ngx/cdk/utils";
11
- import * as i5 from "@angular/common";
12
18
  export class ComboboxMobileComponent extends MobileModeBase {
13
19
  /** @hidden */
14
20
  constructor(elementRef, dialogService, comboboxComponent, mobileModes) {
@@ -75,11 +81,20 @@ export class ComboboxMobileComponent extends MobileModeBase {
75
81
  });
76
82
  }
77
83
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: ComboboxMobileComponent, deps: [{ token: i0.ElementRef }, { token: i1.DialogService }, { token: COMBOBOX_COMPONENT }, { token: MOBILE_MODE_CONFIG, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
78
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: ComboboxMobileComponent, selector: "fdp-combobox-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <h1 fd-title *ngIf=\"mobileConfig?.title\">{{ mobileConfig.title }}</h1>\n <button\n fd-dialog-close-button\n *ngIf=\"mobileConfig?.hasCloseButton\"\n [mobile]=\"true\"\n (click)=\"handleDismiss()\"\n ></button>\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-container *ngTemplateOutlet=\"childContent?.controlTemplate || null\"></ng-container>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"childContent?.listTemplate || null\"></ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n *ngIf=\"mobileConfig.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText!\"\n (click)=\"handleApprove()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig?.cancelButtonText\"\n [label]=\"mobileConfig.cancelButtonText!\"\n (click)=\"handleDismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i2.BarMiddleDirective, selector: "[fd-bar-middle]" }, { kind: "directive", type: i2.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i2.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title"] }, { kind: "component", type: i3.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i4.TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
84
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.0", type: ComboboxMobileComponent, isStandalone: true, selector: "fdp-combobox-mobile", viewQueries: [{ propertyName: "dialogTemplate", first: true, predicate: ["dialogTemplate"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <h1 fd-title *ngIf=\"mobileConfig?.title\">{{ mobileConfig.title }}</h1>\n <button\n fd-dialog-close-button\n *ngIf=\"mobileConfig?.hasCloseButton\"\n [mobile]=\"true\"\n (click)=\"handleDismiss()\"\n ></button>\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-container *ngTemplateOutlet=\"childContent?.controlTemplate || null\"></ng-container>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"childContent?.listTemplate || null\"></ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n *ngIf=\"mobileConfig.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText!\"\n (click)=\"handleApprove()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig?.cancelButtonText\"\n [label]=\"mobileConfig.cancelButtonText!\"\n (click)=\"handleDismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: DialogModule }, { kind: "component", type: i1.DialogComponent, selector: "fd-dialog", inputs: ["class", "dialogRef", "dialogConfig"] }, { kind: "component", type: i1.DialogBodyComponent, selector: "fd-dialog-body" }, { kind: "component", type: i1.DialogFooterComponent, selector: "fd-dialog-footer" }, { kind: "component", type: i1.DialogHeaderComponent, selector: "fd-dialog-header" }, { kind: "component", type: i1.DialogCloseButtonComponent, selector: "[fd-dialog-close-button]", inputs: ["mobile", "title"] }, { kind: "directive", type: i2.BarMiddleDirective, selector: "[fd-bar-middle]" }, { kind: "directive", type: i2.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i2.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i3.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "directive", type: i4.TemplateDirective, selector: "[fdkTemplate]", inputs: ["fdkTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: BarModule }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
79
85
  }
80
86
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: ComboboxMobileComponent, decorators: [{
81
87
  type: Component,
82
- args: [{ selector: 'fdp-combobox-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <h1 fd-title *ngIf=\"mobileConfig?.title\">{{ mobileConfig.title }}</h1>\n <button\n fd-dialog-close-button\n *ngIf=\"mobileConfig?.hasCloseButton\"\n [mobile]=\"true\"\n (click)=\"handleDismiss()\"\n ></button>\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-container *ngTemplateOutlet=\"childContent?.controlTemplate || null\"></ng-container>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"childContent?.listTemplate || null\"></ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n *ngIf=\"mobileConfig.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText!\"\n (click)=\"handleApprove()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig?.cancelButtonText\"\n [label]=\"mobileConfig.cancelButtonText!\"\n (click)=\"handleDismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n" }]
88
+ args: [{ selector: 'fdp-combobox-mobile', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, standalone: true, imports: [
89
+ DialogModule,
90
+ NgIf,
91
+ TitleComponent,
92
+ TemplateDirective,
93
+ BarModule,
94
+ NgTemplateOutlet,
95
+ CdkScrollable,
96
+ ScrollbarDirective
97
+ ], template: "<ng-template let-dialog let-dialogConfig=\"dialogConfig\" #dialogTemplate>\n <fd-dialog [dialogConfig]=\"dialogConfig\" [dialogRef]=\"dialog\">\n <fd-dialog-header>\n <h1 fd-title *ngIf=\"mobileConfig?.title\">{{ mobileConfig.title }}</h1>\n <button\n fd-dialog-close-button\n *ngIf=\"mobileConfig?.hasCloseButton\"\n [mobile]=\"true\"\n (click)=\"handleDismiss()\"\n ></button>\n <ng-template fdkTemplate=\"subheader\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <ng-container *ngTemplateOutlet=\"childContent?.controlTemplate || null\"></ng-container>\n </fd-bar-element>\n </div>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <ng-container *ngTemplateOutlet=\"childContent?.listTemplate || null\"></ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <fd-button-bar\n *ngIf=\"mobileConfig.approveButtonText\"\n fdType=\"emphasized\"\n [label]=\"mobileConfig.approveButtonText!\"\n (click)=\"handleApprove()\"\n >\n </fd-button-bar>\n <fd-button-bar\n *ngIf=\"mobileConfig?.cancelButtonText\"\n [label]=\"mobileConfig.cancelButtonText!\"\n (click)=\"handleDismiss()\"\n >\n </fd-button-bar>\n </fd-dialog-footer>\n </fd-dialog>\n</ng-template>\n" }]
83
98
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.DialogService }, { type: undefined, decorators: [{
84
99
  type: Inject,
85
100
  args: [COMBOBOX_COMPONENT]
@@ -92,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
92
107
  type: ViewChild,
93
108
  args: ['dialogTemplate']
94
109
  }] } });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL2NvbWJvYm94L2NvbWJvYm94LW1vYmlsZS9jb21ib2JveC9jb21ib2JveC1tb2JpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vY29tYm9ib3gvY29tYm9ib3gtbW9iaWxlL2NvbWJvYm94L2NvbWJvYm94LW1vYmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUdOLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUNILGtCQUFrQixFQUNsQixjQUFjLEVBRWQsaUJBQWlCLEVBQ3BCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBcUIsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQVNqRixNQUFNLE9BQU8sdUJBQXdCLFNBQVEsY0FBaUM7SUFpQjFFLGNBQWM7SUFDZCxZQUNJLFVBQXNCLEVBQ3RCLGFBQTRCLEVBQ0EsaUJBQW9DLEVBQ3hCLFdBQW9DO1FBRTVFLEtBQUssQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztRQXBCakc7Ozs7V0FJRztRQUNILGlCQUFZLEdBR1AsSUFBSSxDQUFDO0lBYVYsQ0FBQztJQUVELGNBQWM7SUFDZCxRQUFRO1FBQ0osSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxjQUFjO0lBQ2QsYUFBYTtRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxjQUFjO0lBQ2QsYUFBYTtRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsY0FBYztJQUNOLGFBQWEsQ0FBQyxJQUFhO1FBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNoQjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sNkJBQTZCO1FBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUVELGNBQWM7SUFDTixLQUFLO1FBQ1QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzNELE1BQU0sRUFBRSxJQUFJO1lBQ1osZUFBZSxFQUFFLElBQUk7WUFDckIsR0FBRyxJQUFJLENBQUMsWUFBWTtZQUNwQixzQkFBc0IsRUFBRSxLQUFLO1lBQzdCLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWE7U0FDNUMsQ0FBQyxDQUFDO1FBRUgsb0ZBQW9GO1FBQ3BGLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN4RSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1lBQ2hELEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNaLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO29CQUNwRCxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQ3hCO1lBQ0wsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBekZRLHVCQUF1Qix5RUFxQnBCLGtCQUFrQixhQUNOLGtCQUFrQjtrR0F0QmpDLHVCQUF1QixvTUM5QnBDLDZsREF3Q0E7OzJGRFZhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDSSxxQkFBcUIsbUJBRWQsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTs7MEJBdUJoQyxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCOzRDQXBCYixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIE1PQklMRV9NT0RFX0NPTkZJRyxcbiAgICBNb2JpbGVNb2RlQmFzZSxcbiAgICBNb2JpbGVNb2RlQ29uZmlnVG9rZW4sXG4gICAgTW9iaWxlTW9kZUNvbnRyb2xcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IENPTUJPQk9YX0NPTVBPTkVOVCwgQ29tYm9ib3hJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9jb21ib2JveC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmRwLWNvbWJvYm94LW1vYmlsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbWJvYm94LW1vYmlsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBDb21ib2JveE1vYmlsZUNvbXBvbmVudCBleHRlbmRzIE1vYmlsZU1vZGVCYXNlPENvbWJvYm94SW50ZXJmYWNlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2RpYWxvZ1RlbXBsYXRlJykgZGlhbG9nVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlblxuICAgICAqIEZvciBpbnRlcm5hbCB1c2FnZVxuICAgICAqIENvbnRyb2wgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSByZW5kZXJlZCBpbnNpZGUgZGlhbG9nLlxuICAgICAqIExpc3QgZWxlbWVudCwgd2hpY2ggd2lsbCBiZSByZW5kZXJlZCBpbnNpZGUgZGlhbG9nLlxuICAgICAqL1xuICAgIGNoaWxkQ29udGVudDogTnVsbGFibGU8e1xuICAgICAgICBsaXN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgICAgIGNvbnRyb2xUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICB9PiA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkQmFja3VwOiBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KENPTUJPQk9YX0NPTVBPTkVOVCkgY29tYm9ib3hDb21wb25lbnQ6IENvbWJvYm94SW50ZXJmYWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1PQklMRV9NT0RFX0NPTkZJRykgbW9iaWxlTW9kZXM6IE1vYmlsZU1vZGVDb25maWdUb2tlbltdXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGRpYWxvZ1NlcnZpY2UsIGNvbWJvYm94Q29tcG9uZW50LCBNb2JpbGVNb2RlQ29udHJvbC5DT01CT0JPWCwgbW9iaWxlTW9kZXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uTXVsdGlJbnB1dE9wZW5DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5vbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZURpc21pc3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmRpc21pc3MoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0Rpc21pc3ModGhpcy5fc2VsZWN0ZWRCYWNrdXApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlQXBwcm92ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50LmRpYWxvZ0FwcHJvdmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RvZ2dsZURpYWxvZyhvcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghb3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRCYWNrdXAgPSB0aGlzLl9jb21wb25lbnQuaW5wdXRUZXh0O1xuICAgICAgICBpZiAoIXRoaXMuX2RpYWxvZ1NlcnZpY2UuaGFzT3BlbkRpYWxvZ3MoKSkge1xuICAgICAgICAgICAgdGhpcy5fb3BlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Pbk11bHRpSW5wdXRPcGVuQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb21wb25lbnQub3BlbkNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChpc09wZW4pID0+IHRoaXMuX3RvZ2dsZURpYWxvZyhpc09wZW4pKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlhbG9nUmVmID0gdGhpcy5fZGlhbG9nU2VydmljZS5vcGVuKHRoaXMuZGlhbG9nVGVtcGxhdGUsIHtcbiAgICAgICAgICAgIG1vYmlsZTogdHJ1ZSxcbiAgICAgICAgICAgIGRpc2FibGVQYWRkaW5nczogdHJ1ZSxcbiAgICAgICAgICAgIC4uLnRoaXMuZGlhbG9nQ29uZmlnLFxuICAgICAgICAgICAgYmFja2Ryb3BDbGlja0Nsb3NlYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBIYXZlIHRvIGZpcmUgXCJkZXRlY3RDaGFuZ2VzXCIgdG8gZml4IFwiRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvclwiXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmFmdGVyTG9hZGVkLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50LmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVmU3ViID0gdGhpcy5kaWFsb2dSZWYuYWZ0ZXJDbG9zZWQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIGVycm9yOiAodHlwZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnZXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuZGlhbG9nRGlzbWlzcyh0aGlzLl9zZWxlY3RlZEJhY2t1cCk7XG4gICAgICAgICAgICAgICAgICAgIHJlZlN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIGxldC1kaWFsb2cgbGV0LWRpYWxvZ0NvbmZpZz1cImRpYWxvZ0NvbmZpZ1wiICNkaWFsb2dUZW1wbGF0ZT5cbiAgICA8ZmQtZGlhbG9nIFtkaWFsb2dDb25maWddPVwiZGlhbG9nQ29uZmlnXCIgW2RpYWxvZ1JlZl09XCJkaWFsb2dcIj5cbiAgICAgICAgPGZkLWRpYWxvZy1oZWFkZXI+XG4gICAgICAgICAgICA8aDEgZmQtdGl0bGUgKm5nSWY9XCJtb2JpbGVDb25maWc/LnRpdGxlXCI+e3sgbW9iaWxlQ29uZmlnLnRpdGxlIH19PC9oMT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBmZC1kaWFsb2ctY2xvc2UtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtb2JpbGVDb25maWc/Lmhhc0Nsb3NlQnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbbW9iaWxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVEaXNtaXNzKClcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZka1RlbXBsYXRlPVwic3ViaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbWlkZGxlPlxuICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQgW2Z1bGxXaWR0aF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hpbGRDb250ZW50Py5jb250cm9sVGVtcGxhdGUgfHwgbnVsbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L2ZkLWJhci1lbGVtZW50PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9mZC1kaWFsb2ctaGVhZGVyPlxuXG4gICAgICAgIDxmZC1kaWFsb2ctYm9keT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlsZENvbnRlbnQ/Lmxpc3RUZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZmQtZGlhbG9nLWJvZHk+XG5cbiAgICAgICAgPGZkLWRpYWxvZy1mb290ZXI+XG4gICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0XCJcbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJlbXBoYXNpemVkXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0IVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFwcHJvdmUoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2ZkLWJ1dHRvbi1iYXI+XG4gICAgICAgICAgICA8ZmQtYnV0dG9uLWJhclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibW9iaWxlQ29uZmlnPy5jYW5jZWxCdXR0b25UZXh0XCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwibW9iaWxlQ29uZmlnLmNhbmNlbEJ1dHRvblRleHQhXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRGlzbWlzcygpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgPC9mZC1kaWFsb2ctZm9vdGVyPlxuICAgIDwvZmQtZGlhbG9nPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL2NvbWJvYm94L2NvbWJvYm94LW1vYmlsZS9jb21ib2JveC9jb21ib2JveC1tb2JpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vY29tYm9ib3gvY29tYm9ib3gtbW9iaWxlL2NvbWJvYm94L2NvbWJvYm94LW1vYmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUdOLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUNILGtCQUFrQixFQUNsQixjQUFjLEVBRWQsaUJBQWlCLEVBQ3BCLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBcUIsTUFBTSwwQkFBMEIsQ0FBQztBQUVqRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsSUFBSSxFQUFFLGdC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cEIsa0JBQWtCLGFBQ04sa0JBQWtCO2tHQXRCakMsdUJBQXVCLHdOQ2hEcEMsNmxEQXdDQSwyQ0RGUSxZQUFZLHVwQ0FDWixJQUFJLDRGQUdKLFNBQVMsK0JBQ1QsZ0JBQWdCOzsyRkFLWCx1QkFBdUI7a0JBakJuQyxTQUFTOytCQUNJLHFCQUFxQixtQkFFZCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLElBQUk7d0JBQ0osY0FBYzt3QkFDZCxpQkFBaUI7d0JBQ2pCLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGtCQUFrQjtxQkFDckI7OzBCQXVCSSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsa0JBQWtCOzRDQXBCYixjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIE1PQklMRV9NT0RFX0NPTkZJRyxcbiAgICBNb2JpbGVNb2RlQmFzZSxcbiAgICBNb2JpbGVNb2RlQ29uZmlnVG9rZW4sXG4gICAgTW9iaWxlTW9kZUNvbnRyb2xcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IENPTUJPQk9YX0NPTVBPTkVOVCwgQ29tYm9ib3hJbnRlcmZhY2UgfSBmcm9tICcuLi8uLi9jb21ib2JveC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBTY3JvbGxiYXJEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2Nyb2xsYmFyJztcbmltcG9ydCB7IENka1Njcm9sbGFibGUgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBCYXJNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYmFyJztcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtY29tYm9ib3gtbW9iaWxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBEaWFsb2dNb2R1bGUsXG4gICAgICAgIE5nSWYsXG4gICAgICAgIFRpdGxlQ29tcG9uZW50LFxuICAgICAgICBUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgQmFyTW9kdWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBDZGtTY3JvbGxhYmxlLFxuICAgICAgICBTY3JvbGxiYXJEaXJlY3RpdmVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbWJvYm94TW9iaWxlQ29tcG9uZW50IGV4dGVuZHMgTW9iaWxlTW9kZUJhc2U8Q29tYm9ib3hJbnRlcmZhY2U+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZGlhbG9nVGVtcGxhdGUnKSBkaWFsb2dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogRm9yIGludGVybmFsIHVzYWdlXG4gICAgICogQ29udHJvbCBlbGVtZW50LCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBkaWFsb2cuXG4gICAgICogTGlzdCBlbGVtZW50LCB3aGljaCB3aWxsIGJlIHJlbmRlcmVkIGluc2lkZSBkaWFsb2cuXG4gICAgICovXG4gICAgY2hpbGRDb250ZW50OiBOdWxsYWJsZTx7XG4gICAgICAgIGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICAgICAgY29udHJvbFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIH0+ID0gbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRCYWNrdXA6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoQ09NQk9CT1hfQ09NUE9ORU5UKSBjb21ib2JveENvbXBvbmVudDogQ29tYm9ib3hJbnRlcmZhY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTU9CSUxFX01PREVfQ09ORklHKSBtb2JpbGVNb2RlczogTW9iaWxlTW9kZUNvbmZpZ1Rva2VuW11cbiAgICApIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgZGlhbG9nU2VydmljZSwgY29tYm9ib3hDb21wb25lbnQsIE1vYmlsZU1vZGVDb250cm9sLkNPTUJPQk9YLCBtb2JpbGVNb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuT25NdWx0aUlucHV0T3BlbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm9uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlRGlzbWlzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuZGlzbWlzcygpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuZGlhbG9nRGlzbWlzcyh0aGlzLl9zZWxlY3RlZEJhY2t1cCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVBcHByb3ZlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnQuZGlhbG9nQXBwcm92ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9nZ2xlRGlhbG9nKG9wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFvcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZWxlY3RlZEJhY2t1cCA9IHRoaXMuX2NvbXBvbmVudC5pbnB1dFRleHQ7XG4gICAgICAgIGlmICghdGhpcy5fZGlhbG9nU2VydmljZS5oYXNPcGVuRGlhbG9ncygpKSB7XG4gICAgICAgICAgICB0aGlzLl9vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uTXVsdGlJbnB1dE9wZW5DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbXBvbmVudC5vcGVuQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKS5zdWJzY3JpYmUoKGlzT3BlbikgPT4gdGhpcy5fdG9nZ2xlRGlhbG9nKGlzT3BlbikpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYgPSB0aGlzLl9kaWFsb2dTZXJ2aWNlLm9wZW4odGhpcy5kaWFsb2dUZW1wbGF0ZSwge1xuICAgICAgICAgICAgbW9iaWxlOiB0cnVlLFxuICAgICAgICAgICAgZGlzYWJsZVBhZGRpbmdzOiB0cnVlLFxuICAgICAgICAgICAgLi4udGhpcy5kaWFsb2dDb25maWcsXG4gICAgICAgICAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEhhdmUgdG8gZmlyZSBcImRldGVjdENoYW5nZXNcIiB0byBmaXggXCJFeHByZXNzaW9uQ2hhbmdlZEFmdGVySXRIYXNCZWVuQ2hlY2tlZEVycm9yXCJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuYWZ0ZXJMb2FkZWQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9jb21wb25lbnQuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZWZTdWIgPSB0aGlzLmRpYWxvZ1JlZi5hZnRlckNsb3NlZC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgZXJyb3I6ICh0eXBlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdlc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudC5kaWFsb2dEaXNtaXNzKHRoaXMuX3NlbGVjdGVkQmFja3VwKTtcbiAgICAgICAgICAgICAgICAgICAgcmVmU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgbGV0LWRpYWxvZyBsZXQtZGlhbG9nQ29uZmlnPVwiZGlhbG9nQ29uZmlnXCIgI2RpYWxvZ1RlbXBsYXRlPlxuICAgIDxmZC1kaWFsb2cgW2RpYWxvZ0NvbmZpZ109XCJkaWFsb2dDb25maWdcIiBbZGlhbG9nUmVmXT1cImRpYWxvZ1wiPlxuICAgICAgICA8ZmQtZGlhbG9nLWhlYWRlcj5cbiAgICAgICAgICAgIDxoMSBmZC10aXRsZSAqbmdJZj1cIm1vYmlsZUNvbmZpZz8udGl0bGVcIj57eyBtb2JpbGVDb25maWcudGl0bGUgfX08L2gxPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGZkLWRpYWxvZy1jbG9zZS1idXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cIm1vYmlsZUNvbmZpZz8uaGFzQ2xvc2VCdXR0b25cIlxuICAgICAgICAgICAgICAgIFttb2JpbGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZURpc21pc3MoKVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgZmRrVGVtcGxhdGU9XCJzdWJoZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1taWRkbGU+XG4gICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudCBbZnVsbFdpZHRoXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjaGlsZENvbnRlbnQ/LmNvbnRyb2xUZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2ZkLWRpYWxvZy1oZWFkZXI+XG5cbiAgICAgICAgPGZkLWRpYWxvZy1ib2R5PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNoaWxkQ29udGVudD8ubGlzdFRlbXBsYXRlIHx8IG51bGxcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9mZC1kaWFsb2ctYm9keT5cblxuICAgICAgICA8ZmQtZGlhbG9nLWZvb3Rlcj5cbiAgICAgICAgICAgIDxmZC1idXR0b24tYmFyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtb2JpbGVDb25maWcuYXBwcm92ZUJ1dHRvblRleHRcIlxuICAgICAgICAgICAgICAgIGZkVHlwZT1cImVtcGhhc2l6ZWRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJtb2JpbGVDb25maWcuYXBwcm92ZUJ1dHRvblRleHQhXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQXBwcm92ZSgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvZmQtYnV0dG9uLWJhcj5cbiAgICAgICAgICAgIDxmZC1idXR0b24tYmFyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJtb2JpbGVDb25maWc/LmNhbmNlbEJ1dHRvblRleHRcIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJtb2JpbGVDb25maWcuY2FuY2VsQnV0dG9uVGV4dCFcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVEaXNtaXNzKClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9mZC1idXR0b24tYmFyPlxuICAgICAgICA8L2ZkLWRpYWxvZy1mb290ZXI+XG4gICAgPC9mZC1kaWFsb2c+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -1,21 +1,16 @@
1
1
  import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { BarModule } from '@fundamental-ngx/core/bar';
4
- import { ButtonModule } from '@fundamental-ngx/core/button';
5
- import { DialogModule } from '@fundamental-ngx/core/dialog';
6
2
  import { ComboboxMobileComponent } from './combobox/combobox-mobile.component';
7
3
  import * as i0 from "@angular/core";
8
4
  export class PlatformComboboxMobileModule {
9
5
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxMobileModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
10
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxMobileModule, declarations: [ComboboxMobileComponent], imports: [BarModule, DialogModule, ButtonModule, CommonModule], exports: [ComboboxMobileComponent] }); }
11
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxMobileModule, imports: [BarModule, DialogModule, ButtonModule, CommonModule] }); }
6
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxMobileModule, imports: [ComboboxMobileComponent], exports: [ComboboxMobileComponent] }); }
7
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxMobileModule, imports: [ComboboxMobileComponent] }); }
12
8
  }
13
9
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxMobileModule, decorators: [{
14
10
  type: NgModule,
15
11
  args: [{
16
- declarations: [ComboboxMobileComponent],
17
- imports: [BarModule, DialogModule, ButtonModule, CommonModule],
12
+ imports: [ComboboxMobileComponent],
18
13
  exports: [ComboboxMobileComponent]
19
14
  }]
20
15
  }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtbW9iaWxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL2NvbWJvYm94L2NvbWJvYm94LW1vYmlsZS9jb21ib2JveC1tb2JpbGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOztBQU8vRSxNQUFNLE9BQU8sNEJBQTRCOzhHQUE1Qiw0QkFBNEI7K0dBQTVCLDRCQUE0QixpQkFKdEIsdUJBQXVCLGFBQzVCLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksYUFDbkQsdUJBQXVCOytHQUV4Qiw0QkFBNEIsWUFIM0IsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWTs7MkZBR3BELDRCQUE0QjtrQkFMeEMsUUFBUTttQkFBQztvQkFDTixZQUFZLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztvQkFDdkMsT0FBTyxFQUFFLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDO29CQUM5RCxPQUFPLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQztpQkFDckMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHsgQmFyTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Jhcic7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kaWFsb2cnO1xuaW1wb3J0IHsgQ29tYm9ib3hNb2JpbGVDb21wb25lbnQgfSBmcm9tICcuL2NvbWJvYm94L2NvbWJvYm94LW1vYmlsZS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGRlY2xhcmF0aW9uczogW0NvbWJvYm94TW9iaWxlQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbQmFyTW9kdWxlLCBEaWFsb2dNb2R1bGUsIEJ1dHRvbk1vZHVsZSwgQ29tbW9uTW9kdWxlXSxcbiAgICBleHBvcnRzOiBbQ29tYm9ib3hNb2JpbGVDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFBsYXRmb3JtQ29tYm9ib3hNb2JpbGVNb2R1bGUge31cbiJdfQ==
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gtbW9iaWxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL2NvbWJvYm94L2NvbWJvYm94LW1vYmlsZS9jb21ib2JveC1tb2JpbGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBTS9FLE1BQU0sT0FBTyw0QkFBNEI7OEdBQTVCLDRCQUE0QjsrR0FBNUIsNEJBQTRCLFlBSDNCLHVCQUF1QixhQUN2Qix1QkFBdUI7K0dBRXhCLDRCQUE0QixZQUgzQix1QkFBdUI7OzJGQUd4Qiw0QkFBNEI7a0JBSnhDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixDQUFDO2lCQUNyQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21ib2JveE1vYmlsZUNvbXBvbmVudCB9IGZyb20gJy4vY29tYm9ib3gvY29tYm9ib3gtbW9iaWxlLmNvbXBvbmVudCc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW0NvbWJvYm94TW9iaWxlQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbQ29tYm9ib3hNb2JpbGVDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIFBsYXRmb3JtQ29tYm9ib3hNb2JpbGVNb2R1bGUge31cbiJdfQ==
@@ -1,62 +1,16 @@
1
1
  import { NgModule } from '@angular/core';
2
- import { CommonModule } from '@angular/common';
3
- import { FormsModule } from '@angular/forms';
4
- import { ButtonModule } from '@fundamental-ngx/core/button';
5
- import { DynamicComponentService, TemplateModule } from '@fundamental-ngx/cdk/utils';
6
- import { InputGroupModule } from '@fundamental-ngx/core/input-group';
7
- import { ListModule } from '@fundamental-ngx/core/list';
8
- import { FormModule } from '@fundamental-ngx/core/form';
9
- import { ContentDensityModule } from '@fundamental-ngx/core/content-density';
10
- import { PopoverModule } from '@fundamental-ngx/core/popover';
11
- import { PipeModule } from '@fundamental-ngx/cdk/utils';
12
- import { I18nModule } from '@fundamental-ngx/i18n';
13
2
  import { ComboboxComponent } from './combobox/combobox.component';
14
- import { PlatformAutoCompleteModule } from '../auto-complete/auto-complete.module';
15
3
  import * as i0 from "@angular/core";
16
4
  export class PlatformComboboxModule {
17
5
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
18
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxModule, declarations: [ComboboxComponent], imports: [CommonModule,
19
- FormsModule,
20
- InputGroupModule,
21
- PipeModule,
22
- ListModule,
23
- ButtonModule,
24
- PopoverModule,
25
- PlatformAutoCompleteModule,
26
- FormModule,
27
- I18nModule,
28
- ContentDensityModule], exports: [ComboboxComponent, TemplateModule, ContentDensityModule] }); }
29
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxModule, providers: [DynamicComponentService], imports: [CommonModule,
30
- FormsModule,
31
- InputGroupModule,
32
- PipeModule,
33
- ListModule,
34
- ButtonModule,
35
- PopoverModule,
36
- PlatformAutoCompleteModule,
37
- FormModule,
38
- I18nModule,
39
- ContentDensityModule, TemplateModule, ContentDensityModule] }); }
6
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxModule, imports: [ComboboxComponent], exports: [ComboboxComponent] }); }
7
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxModule, imports: [ComboboxComponent] }); }
40
8
  }
41
9
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: PlatformComboboxModule, decorators: [{
42
10
  type: NgModule,
43
11
  args: [{
44
- declarations: [ComboboxComponent],
45
- imports: [
46
- CommonModule,
47
- FormsModule,
48
- InputGroupModule,
49
- PipeModule,
50
- ListModule,
51
- ButtonModule,
52
- PopoverModule,
53
- PlatformAutoCompleteModule,
54
- FormModule,
55
- I18nModule,
56
- ContentDensityModule
57
- ],
58
- providers: [DynamicComponentService],
59
- exports: [ComboboxComponent, TemplateModule, ContentDensityModule]
12
+ imports: [ComboboxComponent],
13
+ exports: [ComboboxComponent]
60
14
  }]
61
15
  }] });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vY29tYm9ib3gvY29tYm9ib3gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBb0JuRixNQUFNLE9BQU8sc0JBQXNCOzhHQUF0QixzQkFBc0I7K0dBQXRCLHNCQUFzQixpQkFqQmhCLGlCQUFpQixhQUU1QixZQUFZO1lBQ1osV0FBVztZQUNYLGdCQUFnQjtZQUNoQixVQUFVO1lBQ1YsVUFBVTtZQUNWLFlBQVk7WUFDWixhQUFhO1lBQ2IsMEJBQTBCO1lBQzFCLFVBQVU7WUFDVixVQUFVO1lBQ1Ysb0JBQW9CLGFBR2QsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLG9CQUFvQjsrR0FFeEQsc0JBQXNCLGFBSHBCLENBQUMsdUJBQXVCLENBQUMsWUFaaEMsWUFBWTtZQUNaLFdBQVc7WUFDWCxnQkFBZ0I7WUFDaEIsVUFBVTtZQUNWLFVBQVU7WUFDVixZQUFZO1lBQ1osYUFBYTtZQUNiLDBCQUEwQjtZQUMxQixVQUFVO1lBQ1YsVUFBVTtZQUNWLG9CQUFvQixFQUdLLGNBQWMsRUFBRSxvQkFBb0I7OzJGQUV4RCxzQkFBc0I7a0JBbEJsQyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLGlCQUFpQixDQUFDO29CQUNqQyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixXQUFXO3dCQUNYLGdCQUFnQjt3QkFDaEIsVUFBVTt3QkFDVixVQUFVO3dCQUNWLFlBQVk7d0JBQ1osYUFBYTt3QkFDYiwwQkFBMEI7d0JBQzFCLFVBQVU7d0JBQ1YsVUFBVTt3QkFDVixvQkFBb0I7cUJBQ3ZCO29CQUNELFNBQVMsRUFBRSxDQUFDLHVCQUF1QixDQUFDO29CQUNwQyxPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsb0JBQW9CLENBQUM7aUJBQ3JFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2J1dHRvbic7XG5pbXBvcnQgeyBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgVGVtcGxhdGVNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBJbnB1dEdyb3VwTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2lucHV0LWdyb3VwJztcbmltcG9ydCB7IExpc3RNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBGb3JtTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvY29udGVudC1kZW5zaXR5JztcbmltcG9ydCB7IFBvcG92ZXJNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5pbXBvcnQgeyBQaXBlTW9kdWxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgSTE4bk1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvaTE4bic7XG5cbmltcG9ydCB7IENvbWJvYm94Q29tcG9uZW50IH0gZnJvbSAnLi9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhdGZvcm1BdXRvQ29tcGxldGVNb2R1bGUgfSBmcm9tICcuLi9hdXRvLWNvbXBsZXRlL2F1dG8tY29tcGxldGUubW9kdWxlJztcblxuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtDb21ib2JveENvbXBvbmVudF0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBJbnB1dEdyb3VwTW9kdWxlLFxuICAgICAgICBQaXBlTW9kdWxlLFxuICAgICAgICBMaXN0TW9kdWxlLFxuICAgICAgICBCdXR0b25Nb2R1bGUsXG4gICAgICAgIFBvcG92ZXJNb2R1bGUsXG4gICAgICAgIFBsYXRmb3JtQXV0b0NvbXBsZXRlTW9kdWxlLFxuICAgICAgICBGb3JtTW9kdWxlLFxuICAgICAgICBJMThuTW9kdWxlLFxuICAgICAgICBDb250ZW50RGVuc2l0eU1vZHVsZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbRHluYW1pY0NvbXBvbmVudFNlcnZpY2VdLFxuICAgIGV4cG9ydHM6IFtDb21ib2JveENvbXBvbmVudCwgVGVtcGxhdGVNb2R1bGUsIENvbnRlbnREZW5zaXR5TW9kdWxlXVxufSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybUNvbWJvYm94TW9kdWxlIHt9XG4iXX0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3gubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vY29tYm9ib3gvY29tYm9ib3gubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBTWxFLE1BQU0sT0FBTyxzQkFBc0I7OEdBQXRCLHNCQUFzQjsrR0FBdEIsc0JBQXNCLFlBSHJCLGlCQUFpQixhQUNqQixpQkFBaUI7K0dBRWxCLHNCQUFzQixZQUhyQixpQkFBaUI7OzJGQUdsQixzQkFBc0I7a0JBSmxDLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7b0JBQzVCLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO2lCQUMvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IENvbWJvYm94Q29tcG9uZW50IH0gZnJvbSAnLi9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21ib2JveENvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0NvbWJvYm94Q29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybUNvbWJvYm94TW9kdWxlIHt9XG4iXX0=
@@ -197,9 +197,17 @@ export class BaseCombobox extends CollectionBaseInput {
197
197
  this.isOpen = isOpen;
198
198
  this.onTouched();
199
199
  this.openChange.next(isOpen);
200
+ this._onOpenChange(this.isOpen);
200
201
  this.cd.detectChanges();
201
202
  }
202
203
  /** @hidden */
204
+ _onOpenChange(isOpen) {
205
+ if (isOpen) {
206
+ this.formMessage._popover.close();
207
+ }
208
+ this.formMessage._popover.setIgnoreTriggers(isOpen);
209
+ }
210
+ /** @hidden */
203
211
  handleOptionItem(value) {
204
212
  if (value) {
205
213
  this.selectOptionItem(value);
@@ -633,4 +641,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImpor
633
641
  type: ContentChildren,
634
642
  args: [TemplateDirective]
635
643
  }] } });
636
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21ib2JveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL2NvbWJvYm94L2NvbW1vbnMvYmFzZS1jb21ib2JveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osUUFBUSxFQUVSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFDSCxHQUFHLEVBQ0gsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFdBQVcsRUFDWCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBd0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0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OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCOzRDQXpPakUsU0FBUztzQkFEUixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFTTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFVTixlQUFlO3NCQURkLEtBQUs7Z0JBUU4sZUFBZTtzQkFEZCxLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtGLFVBQVU7c0JBRGIsS0FBSztnQkFhRixLQUFLO3NCQURSLEtBQUs7Z0JBYUksZUFBZTtzQkFBeEIsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUlQLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxhQUFhO2dCQUt4QixlQUFlO3NCQURkLGVBQWU7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdCxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQUxULFxuICAgIEJBQ0tTUEFDRSxcbiAgICBDT05UUk9MLFxuICAgIERPV05fQVJST1csXG4gICAgRU5URVIsXG4gICAgRVNDQVBFLFxuICAgIExFRlRfQVJST1csXG4gICAgTlVNUEFEX0VJR0hULFxuICAgIE5VTVBBRF9GSVZFLFxuICAgIE5VTVBBRF9GT1VSLFxuICAgIE5VTVBBRF9OSU5FLFxuICAgIE5VTVBBRF9PTkUsXG4gICAgTlVNUEFEX1NFVkVOLFxuICAgIE5VTVBBRF9TSVgsXG4gICAgTlVNUEFEX1RIUkVFLFxuICAgIE5VTVBBRF9UV08sXG4gICAgTlVNUEFEX1pFUk8sXG4gICAgUklHSFRfQVJST1csXG4gICAgU0hJRlQsXG4gICAgVEFCLFxuICAgIFVQX0FSUk9XXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENvbnRlbnREZW5zaXR5LCBGb2N1c0VzY2FwZURpcmVjdGlvbiwgS2V5VXRpbCwgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7XG4gICAgQXJyYXlDb21ib0JveERhdGFTb3VyY2UsXG4gICAgY29lcmNlQXJyYXlTYWZlLFxuICAgIENvbGxlY3Rpb25CYXNlSW5wdXQsXG4gICAgQ29tYm9Cb3hEYXRhU291cmNlLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICBpc0RhdGFTb3VyY2UsXG4gICAgaXNGdW5jdGlvbixcbiAgICBpc0pzT2JqZWN0LFxuICAgIGlzT3B0aW9uSXRlbSxcbiAgICBpc1N0cmluZyxcbiAgICBNYXRjaGluZ0J5LFxuICAgIE1hdGNoaW5nU3RyYXRlZ3ksXG4gICAgT2JzZXJ2YWJsZUNvbWJvQm94RGF0YVNvdXJjZSxcbiAgICBPcHRpb25JdGVtLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IFBvcG92ZXJGaWxsTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBBdXRvQ29tcGxldGVFdmVudCB9IGZyb20gJy4uLy4uL2F1dG8tY29tcGxldGUvYXV0by1jb21wbGV0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29tYm9ib3hDb25maWcgfSBmcm9tICcuLi9jb21ib2JveC5jb25maWcnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuXG5leHBvcnQgdHlwZSBUZXh0QWxpZ25tZW50ID0gJ2xlZnQnIHwgJ3JpZ2h0JztcbmV4cG9ydCB0eXBlIEZkcENvbWJvQm94RGF0YVNvdXJjZTxUPiA9IENvbWJvQm94RGF0YVNvdXJjZTxUPiB8IE9ic2VydmFibGU8VFtdPiB8IFRbXTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbWJvYm94IGV4dGVuZHMgQ29sbGVjdGlvbkJhc2VJbnB1dCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIEBoaWRkZW4gTWV0aG9kIHRvIGVtaXQgY2hhbmdlIGV2ZW50ICovXG4gICAgYWJzdHJhY3QgZW1pdENoYW5nZUV2ZW50PEs+KHZhbHVlOiBLKTogdm9pZDtcblxuICAgIC8qKiBAaGlkZGVuIERlZmluZSBpcyB0aGlzIGl0ZW0gc2VsZWN0ZWQgKi9cbiAgICBhYnN0cmFjdCBpc1NlbGVjdGVkT3B0aW9uSXRlbShzZWxlY3RlZEl0ZW06IE9wdGlvbkl0ZW0pOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gRW1pdCBzZWxlY3QgT3B0aW9uSXRlbSAqL1xuICAgIGFic3RyYWN0IHNlbGVjdE9wdGlvbkl0ZW0oaXRlbTogT3B0aW9uSXRlbSk6IHZvaWQ7XG5cbiAgICAvKiogQGhpZGRlbiBEZWZpbmUgdmFsdWUgYXMgc2VsZWN0ZWQgKi9cbiAgICBhYnN0cmFjdCBzZXRBc1NlbGVjdGVkKGl0ZW06IE9wdGlvbkl0ZW1bXSk6IHZvaWQ7XG4gICAgLyoqIFByb3ZpZGVzIG1heGltdW0gaGVpZ2h0IGZvciB0aGUgb3B0aW9uUGFuZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodCA9ICcyNTBweCc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgYXV0b2NvbXBsZXRlIHNob3VsZCBiZSBlbmFibGVkOyBFbmFibGVkIGJ5IGRlZmF1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9Db21wbGV0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUb2RvOiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC4gWW91IGNhbiBlaXRoZXIgcGFzcyBsaXN0IG9mXG4gICAgICogaXRlbXMgb3IgdXNlIHRoaXMgZW50aXR5Q2xhc3MgYW5kIGludGVybmFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbG9va3VwIHRvIHNvbWUgcmVnaXN0cnlcbiAgICAgKiBhbmQgcmV0cmlldmUgdGhlIGJlc3QgbWF0Y2hpbmcgRGF0YVByb3ZpZGVyIHRoYXQgaXMgc2V0IG9uIGFwcGxpY2F0aW9uIGxldmVsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBlbnRpdHlDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTXVsdGkgSW5wdXQgTW9iaWxlIENvbmZpZ3VyYXRpb24sIGl0J3MgYXBwbGllZCBvbmx5LCB3aGVuIG1vYmlsZSBpcyBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVDb25maWc6IE1vYmlsZU1vZGVDb25maWc7XG5cbiAgICAvKiogVGVsbHMgdGhlIGNvbWJvIGlmIHdlIG5lZWQgdG8gZ3JvdXAgaXRlbXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGdyb3VwID0gZmFsc2U7XG5cbiAgICAvKiogQSBmaWVsZCBuYW1lIHRvIHVzZSB0byBncm91cCBkYXRhIGJ5IChzdXBwb3J0IGRvdHRlZCBub3RhdGlvbikgKi9cbiAgICBASW5wdXQoKVxuICAgIGdyb3VwS2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBmaWVsZCB0byBzaG93IGRhdGEgaW4gc2Vjb25kYXJ5IGNvbHVtbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Vjb25kYXJ5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqIFNob3cgdGhlIHNlY29uZCBjb2x1bW4gKEFwcGxpY2FibGUgZm9yIHR3byBjb2x1bW5zIGxheW91dCkgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dTZWNvbmRhcnlUZXh0ID0gZmFsc2U7XG5cbiAgICAvKiogSG9yaXpvbnRhbGx5IGFsaWduIHRleHQgaW5zaWRlIHRoZSBzZWNvbmQgY29sdW1uIChBcHBsaWNhYmxlIGZvciB0d28gY29sdW1ucyBsYXlvdXQpICovXG4gICAgQElucHV0KClcbiAgICBzZWNvbmRhcnlUZXh0QWxpZ25tZW50OiBUZXh0QWxpZ25tZW50O1xuXG4gICAgLyoqIFR1cm5zIG9uL29mZiBBZGp1c3RhYmxlIFdpZHRoIGZlYXR1cmUgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFByZXNldCBvcHRpb25zIGZvciB0aGUgU2VsZWN0IGJvZHkgd2lkdGgsIHdoYXRldmVyIGlzIGNob3NlbiwgdGhlIGJvZHkgaGFzIGEgNjAwcHggbGltaXQuXG4gICAgICogYGF0LWxlYXN0YCB3aWxsIGFwcGx5IGEgbWluaW11bSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC4gLSBEZWZhdWx0XG4gICAgICogYGVxdWFsYCB3aWxsIGFwcGx5IGEgd2lkdGggdG8gdGhlIGJvZHkgZXF1aXZhbGVudCB0byB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICogJ2ZpdC1jb250ZW50JyB3aWxsIGFwcGx5IHdpZHRoIG5lZWRlZCB0byBwcm9wZXJseSBkaXNwbGF5IGl0ZW1zIGluc2lkZSwgaW5kZXBlbmRlbnQgb2YgY29udHJvbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbGxDb250cm9sTW9kZTogUG9wb3ZlckZpbGxNb2RlID0gJ2F0LWxlYXN0JztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgQWRkT24gQnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGVcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBidXR0b25Gb2N1c2FibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0cmlnZ2VyIGV2ZW50cyB0aGF0IHdpbGwgb3Blbi9jbG9zZSB0aGUgb3B0aW9ucyBwb3BvdmVyLlxuICAgICAqIEFjY2VwdHMgYW55IFtIVE1MIERPTSBFdmVudHNdKGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvZG9tX29ial9ldmVudC5hc3ApLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdHJpZ2dlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tYm9ib3ggc2hvdWxkIGNsb3NlLCB3aGVuIGEgY2xpY2sgaXMgcGVyZm9ybWVkIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMuIFRydWUgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xvc2VPbk91dHNpZGVDbGljayA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGl0ZW0gb3B0aW9ucyBzaG91bGQgYmUgcmVuZGVyZWQgYXMgYnlsaW5lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnlsaW5lID0gZmFsc2U7XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRmRwQ29tYm9Cb3hEYXRhU291cmNlPGFueT4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YVNvdXJjZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBDb21ib0JveERhdGFTb3VyY2U8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBWYWx1ZSBvZiB0aGUgY29tYm9ib3ggKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBjb2VyY2VBcnJheVNhZmUodmFsdWUpO1xuICAgICAgICB0aGlzLnNldEFzU2VsZWN0ZWQodGhpcy5fY29udmVydFRvT3B0aW9uSXRlbXMoc2VsZWN0ZWRJdGVtcykpO1xuICAgICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIHN0YXJ0ZWQuICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgQE91dHB1dCgpIG9uRGF0YVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIGZpbmlzaGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZWNlaXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChMaXN0Q29tcG9uZW50KVxuICAgIGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tVGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gQ3VzdG9tIE9wdGlvbiBpdGVtIFRlbXBsYXRlICovXG4gICAgb3B0aW9uSXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gQ3VzdG9tIEdyb3VwIEhlYWRlciBpdGVtIFRlbXBsYXRlICovXG4gICAgZ3JvdXBJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiBDdXN0b20gU2Vjb25kYXJ5IGl0ZW0gVGVtcGxhdGUgKi9cbiAgICBzZWNvbmRhcnlJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiBDdXN0b20gU2VsZWN0ZWQgb3B0aW9uIGl0ZW0gVGVtcGxhdGUgKi9cbiAgICBzZWxlY3RlZEl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2VhcmNoSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5ID0gdGhpcy5jb21ib2JveENvbmZpZy5jb250ZW50RGVuc2l0eTtcblxuICAgIC8qKiBJbnB1dCB0ZXh0IG9mIHRoZSBpbnB1dC4gKi9cbiAgICBzZXQgaW5wdXRUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faW5wdXRUZXh0VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIGdldCBpbnB1dFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0VGV4dFZhbHVlIHx8ICcnO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21ib2JveCBpcyBvcGVuZWQuICovXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBhIGNvbWJvYm94IGNhbiBiZSBjbG9zZWQgKi9cbiAgICBnZXQgY2FuQ2xvc2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMubW9iaWxlICYmIHRoaXMubW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0IG9mIG1hdGNoZWQgc3VnZ2VzdGlvbnMgKi9cbiAgICBfc3VnZ2VzdGlvbnM6IE9wdGlvbkl0ZW1bXTtcblxuICAgIC8qKiBAaGlkZGVuIE1heCB3aWR0aCBvZiBsaXN0IGNvbnRhaW5lciAqL1xuICAgIG1heFdpZHRoPzogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gTWluIHdpZHRoIG9mIGxpc3QgY29udGFpbmVyICovXG4gICAgbWluV2lkdGg/OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiBOZWVkIGZvciBvcGVuaW5nIG1vYmlsZSB2ZXJzaW9uICovXG4gICAgb3BlbkNoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc0dyb3VwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwS2V5KTtcbiAgICB9XG5cbiAgICAvKiogSXMgc3VnZ2VzdGlvbnMgbGlzdCBlbXB0eSAqL1xuICAgIGdldCBpc1N1Z2dlc3Rpb25zTGlzdEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2ZsYXRTdWdnZXN0aW9uczogT3B0aW9uSXRlbVtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U6IEZkcENvbWJvQm94RGF0YVNvdXJjZTxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnB1dFRleHRWYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXRjaGluZ1N0cmF0ZWd5OiBNYXRjaGluZ1N0cmF0ZWd5ID0gdGhpcy5jb21ib2JveENvbmZpZy5tYXRjaGluZ1N0cmF0ZWd5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIC8qKiBLZXlzLCB0aGF0IHdvbid0IHRyaWdnZXIgdGhlIHBvcG92ZXIncyBvcGVuIHN0YXRlLCB3aGVuIGRpc3BhdGNoZWQgb24gc2VhcmNoIGlucHV0ICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbm9uT3BlbmluZ0tleXM6IG51bWJlcltdID0gW1xuICAgICAgICBFU0NBUEUsXG4gICAgICAgIEVOVEVSLFxuICAgICAgICBDT05UUk9MLFxuICAgICAgICBUQUIsXG4gICAgICAgIFNISUZULFxuICAgICAgICBVUF9BUlJPVyxcbiAgICAgICAgUklHSFRfQVJST1csXG4gICAgICAgIERPV05fQVJST1csXG4gICAgICAgIExFRlRfQVJST1csXG4gICAgICAgIEFMVFxuICAgIF07XG5cbiAgICAvKiogS2V5cywgdGhhdCBhcmUgbnVtYmVycyBmcm9tIG51bWJlciBrZXlwYWQgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9udW1iZXJQYWROdW1iZXJLZXlzOiBudW1iZXJbXSA9IFtcbiAgICAgICAgTlVNUEFEX1pFUk8sXG4gICAgICAgIE5VTVBBRF9PTkUsXG4gICAgICAgIE5VTVBBRF9UV08sXG4gICAgICAgIE5VTVBBRF9USFJFRSxcbiAgICAgICAgTlVNUEFEX0ZPVVIsXG4gICAgICAgIE5VTVBBRF9GSVZFLFxuICAgICAgICBOVU1QQURfU0lYLFxuICAgICAgICBOVU1QQURfU0VWRU4sXG4gICAgICAgIE5VTVBBRF9TRVZFTixcbiAgICAgICAgTlVNUEFEX0VJR0hULFxuICAgICAgICBOVU1QQURfTklORVxuICAgIF07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHJlYWRvbmx5IG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSByZWFkb25seSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHJlYWRvbmx5IG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSByZWFkb25seSBkaWFsb2dDb25maWc6IERpYWxvZ0NvbmZpZyxcbiAgICAgICAgcHJvdGVjdGVkIGNvbWJvYm94Q29uZmlnOiBDb21ib2JveENvbmZpZyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2QsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdFdpbmRvd1Jlc2l6ZSgpO1xuICAgICAgICB0aGlzLl9hc3NpZ25DdXN0b21UZW1wbGF0ZXMoKTtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICh0aGlzLmRhdGFTb3VyY2UgYXMgQ29tYm9Cb3hEYXRhU291cmNlPGFueT4pLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZHNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSXMgZW1wdHkgc2VhcmNoIGZpZWxkICovXG4gICAgZ2V0IGlzRW1wdHlWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRUZXh0LnRyaW0oKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLyoqIHdyaXRlIHZhbHVlIGZvciBDb250cm9sVmFsdWVBY2Nlc3NvciAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gY29lcmNlQXJyYXlTYWZlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRBc1NlbGVjdGVkKHRoaXMuX2NvbnZlcnRUb09wdGlvbkl0ZW1zKHNlbGVjdGVkSXRlbXMpKTtcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZWFyY2hUZXJtQ2hhbmdlZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRUZXh0ID09PSB0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0ZXh0O1xuXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbWFwLnNldCgncXVlcnknLCB0ZXh0KTtcbiAgICAgICAgbWFwLnNldCgnbGltaXQnLCAxMik7XG5cbiAgICAgICAgdGhpcy5kcy5tYXRjaChtYXApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNPcGVuQ2hhbmdlSGFuZGxlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gPT09IGlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc09wZW4gPSBpc09wZW47XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMub3BlbkNoYW5nZS5uZXh0KGlzT3Blbik7XG5cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVPcHRpb25JdGVtKHZhbHVlOiBPcHRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RPcHRpb25JdGVtKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGhhbmRsZVByZXNzRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHZhbHVlOiBPcHRpb25JdGVtKTogdm9pZCB7XG4gICAgICAgIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVOVEVSKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5oYW5kbGVPcHRpb25JdGVtKHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgQ2xpY2sgb24gQnV0dG9uXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uUHJpbWFyeUJ1dHRvbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICAvLyBpZiBpdCdzIG1vYmlsZSBtb2RlIGlnbm9yZSB0aGlzIGNsaWNrXG4gICAgICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoIXRoaXMuaXNPcGVuKTtcblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgY2xpY2sgb24gaW5wdXQgZ3JvdXAgaW4gbW9iaWxlIG1vZGVcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb3BlbkluTW9iaWxlTW9kZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgaXQncyBhbHJlYWR5IG9wZW5lZCBqdXN0IGlnbm9yZSB0aGlzIGNsaWNrXG4gICAgICAgIC8vIGlmIGl0J3Mgbm90IG1vYmlsZSBtb2RlIGp1c3QgaWdub3JlIHRoaXMgY2xpY2tcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuIHx8ICF0aGlzLm1vYmlsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gb3RoZXJ3aXNlIHNob3cgb3B0aW9uc1xuICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZSh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgS2V5ZG93biBvbiBJbnB1dFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbklucHV0S2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZSh0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNPcGVuICYmIHRoaXMubGlzdENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5zZXRJdGVtQWN0aXZlKDApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFVQX0FSUk9XKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgdGhpcy5fY2hvb3NlT3RoZXJJdGVtKC0xKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRVNDQVBFKSkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIGlmICghZXZlbnQuY3RybEtleSAmJiAhS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIHRoaXMuX25vbk9wZW5pbmdLZXlzKSkge1xuICAgICAgICAgICAgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgdGhpcy5fbnVtYmVyUGFkTnVtYmVyS2V5cykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZSh0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFjY2VwdGVkS2V5cyA9XG4gICAgICAgICAgICAgICAgIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBCQUNLU1BBQ0UpICYmXG4gICAgICAgICAgICAgICAgIUtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnYWxwaGFiZXRpY2FsJykgJiZcbiAgICAgICAgICAgICAgICAhS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdudW1lcmljJykgJiZcbiAgICAgICAgICAgICAgICAhS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIHRoaXMuX251bWJlclBhZE51bWJlcktleXMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5VmFsdWUgJiYgYWNjZXB0ZWRLZXlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Py5zZXRJdGVtQWN0aXZlKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBwYXNzZWQgdG8gbGlzdCBjb21wb25lbnQgKi9cbiAgICBoYW5kbGVMaXN0Rm9jdXNFc2NhcGUoZGlyZWN0aW9uOiBGb2N1c0VzY2FwZURpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkNvbXBsZXRlVGVybShldmVudDogQXV0b0NvbXBsZXRlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmZvcmNlQ2xvc2UpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQoZXZlbnQudGVybSk7XG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHRvZ2dsZVNlbGVjdGlvbkJ5SW5wdXRUZXh0KHRleHQgPSB0aGlzLmlucHV0VGV4dCk6IHZvaWQge1xuICAgICAgICBsZXQgb3B0aW9uSXRlbSA9IHRoaXMuX2dldFNlbGVjdEl0ZW1CeUlucHV0VmFsdWUodGV4dCk7XG4gICAgICAgIGlmICghb3B0aW9uSXRlbSkge1xuICAgICAgICAgICAgb3B0aW9uSXRlbSA9IHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGV4dCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGV4dFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0T3B0aW9uSXRlbShvcHRpb25JdGVtKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZShkaXNwbGF5VmFsdWU6IHN0cmluZyk6IE9wdGlvbkl0ZW0gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmZpbmQoKHZhbHVlKSA9PiB2YWx1ZS5sYWJlbCA9PT0gZGlzcGxheVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBnZXQgZHMoKTogQ29tYm9Cb3hEYXRhU291cmNlPGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlIGFzIENvbWJvQm94RGF0YVNvdXJjZTxhbnk+O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIE1hcCBncm91cGVkIHZhbHVlcyB0byBhcnJheS4gKi9cbiAgICBwcm90ZWN0ZWQgX2ZsYXRHcm91cHMoaXRlbXM6IE9wdGlvbkl0ZW1bXSk6IE9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKHJlc3VsdDogT3B0aW9uSXRlbVtdLCBpdGVtOiBPcHRpb25JdGVtKSA9PiByZXN1bHQuY29uY2F0KGl0ZW0uY2hpbGRyZW4gPz8gW10pLCBbXSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kaXNwbGF5Rm4gPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB0aGlzLmRpc3BsYXlWYWx1ZSh2YWx1ZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlY29uZGFyeUZuID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAoaXNPcHRpb25JdGVtKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNlY29uZGFyeVRleHQgPz8gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNKc09iamVjdCh2YWx1ZSkgJiYgdGhpcy5zZWNvbmRhcnlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5vYmplY3RHZXQodmFsdWUsIHRoaXMuc2Vjb25kYXJ5S2V5KTtcblxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oY3VycmVudEl0ZW0pID8gY3VycmVudEl0ZW0oKSA6IGN1cnJlbnRJdGVtO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWV0aG9kIHRoYXQgcGlja3Mgb3RoZXIgdmFsdWUgbW92ZWQgZnJvbSBjdXJyZW50IG9uZSBieSBvZmZzZXQsIGNhbGxlZCBvbmx5IHdoZW4gY29tYm9ib3ggaXMgY2xvc2VkXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2hvb3NlT3RoZXJJdGVtKG9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVZhbHVlID0gdGhpcy5fZ2V0U2VsZWN0SXRlbUJ5VmFsdWUodGhpcy5pbnB1dFRleHQpO1xuICAgICAgICBjb25zdCBpbmRleDogbnVtYmVyID0gdGhpcy5fc3VnZ2VzdGlvbnMuZmluZEluZGV4KCh2YWx1ZSkgPT4gdmFsdWUgPT09IGFjdGl2ZVZhbHVlKTtcblxuICAgICAgICBpZiAodGhpcy5fc3VnZ2VzdGlvbnNbaW5kZXggKyBvZmZzZXRdKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU9wdGlvbkl0ZW0odGhpcy5fc3VnZ2VzdGlvbnNbaW5kZXggKyBvZmZzZXRdKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0U2VsZWN0SXRlbUJ5VmFsdWUoZGlzcGxheVZhbHVlOiBzdHJpbmcpOiBPcHRpb25JdGVtIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1Z2dlc3Rpb25zLmZpbmQoKHZhbHVlKSA9PiB2YWx1ZS5sYWJlbCA9PT0gZGlzcGxheVZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgYXN5bmMgX2luaXRpYWxpemVEYXRhU291cmNlKGRzOiBGZHBDb21ib0JveERhdGFTb3VyY2U8YW55Pik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9zdWdnZXN0aW9ucyA9IFtdO1xuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgKHRoaXMuZGF0YVNvdXJjZSBhcyBDb21ib0JveERhdGFTb3VyY2U8YW55PikuY2xvc2UoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuX2RzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGluaXRpYWxpemluZyBkYXRhIHNvdXJjZSBpbiB0aGUgc2VwZXJhdGUgbWljcm90YXNrIHRvIGxldCBhbGwgY29uZmlnIG9wdGlvbnMgdG8gYmUgc2V0IGJlZm9yZSBpdFxuICAgICAgICAvLyBmb3IgZXhhbXBsZSwgXCJpc0dyb3VwXCIgaW5wdXQgaXMgbmVlZGVkIGZvciBpbml0aWFsaXphdGlvbiBsb2dpYyBhbmQgaXQgbWlnaHQgbm90IGJlIHNldCBhdCB0aGlzIHBvaW50XG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAvLyBDb252ZXJ0IHdoYXRldmVyIGNvbWVzIGluIGFzIERhdGFTb3VyY2Ugc28gd2UgY2FuIHdvcmsgd2l0aCBpdCBpZGVudGljYWxseVxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy5fb3BlbkRhdGFTdHJlYW0oZHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oZHM6IEZkcENvbWJvQm94RGF0YVNvdXJjZTxhbnk+KTogQ29tYm9Cb3hEYXRhU291cmNlPGFueT4ge1xuICAgICAgICBjb25zdCBpbml0RGF0YVNvdXJjZSA9IHRoaXMuX3RvRGF0YVN0cmVhbShkcyk7XG5cbiAgICAgICAgaWYgKGluaXREYXRhU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGlzIGlzIHNpbmdsZSBwb2ludCBvZiBkYXRhIGVudHJ5IHRvIHRoZSBjb21wb25lbnQuIFdlIGRvbnQgd2FudCB0byBzZXQgZGF0YSBvbiBkaWZmZXJlbnRcbiAgICAgICAgICogcGxhY2VzLiBJZiBhbnkgbmV3IGRhdGEgY29tZXMgaW4gZWl0aGVyIHlvdSBkbyBhIHNlYXJjaCBhbmQgeW91IHdhbnQgdG8gcGFzcyBpbml0aWFsIGRhdGFcbiAgICAgICAgICogaXRzIGhlcmUuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdCBkc1N1YiA9IGluaXREYXRhU291cmNlXG4gICAgICAgICAgICAub3BlbigpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWdnZXN0aW9ucyA9IHRoaXMuX2NvbnZlcnRUb09wdGlvbkl0ZW1zKGRhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZsYXRTdWdnZXN0aW9ucyA9IHRoaXMuaXNHcm91cCA/IHRoaXMuX2ZsYXRHcm91cHModGhpcy5fc3VnZ2VzdGlvbnMpIDogdGhpcy5fc3VnZ2VzdGlvbnM7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCdpbml0RGF0YVNvdXJjZS5vcGVuKCkuJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChkc1N1Yik7XG5cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKGluaXREYXRhU291cmNlLm9uRGF0YVJlcXVlc3RlZCgpLnN1YnNjcmliZSh0aGlzLm9uRGF0YVJlcXVlc3RlZCkpO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoaW5pdERhdGFTb3VyY2Uub25EYXRhUmVjZWl2ZWQoKS5zdWJzY3JpYmUodGhpcy5vbkRhdGFSZWNlaXZlZCkpO1xuXG4gICAgICAgIGluaXREYXRhU291cmNlLmRhdGFQcm92aWRlci5zZXRMb29rdXBLZXkodGhpcy5sb29rdXBLZXkpO1xuICAgICAgICBjb25zdCBtYXRjaGluZ0J5OiBNYXRjaGluZ0J5ID0ge1xuICAgICAgICAgICAgZmlyc3RCeTogdGhpcy5fZGlzcGxheUZuXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuc2Vjb25kYXJ5S2V5KSB7XG4gICAgICAgICAgICBtYXRjaGluZ0J5LnNlY29uZGFyeUJ5ID0gdGhpcy5fc2Vjb25kYXJ5Rm47XG4gICAgICAgIH1cblxuICAgICAgICBpbml0RGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0TWF0Y2hpbmdCeShtYXRjaGluZ0J5KTtcbiAgICAgICAgaW5pdERhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLnNldE1hdGNoaW5nU3RyYXRlZ3kodGhpcy5fbWF0Y2hpbmdTdHJhdGVneSk7XG5cbiAgICAgICAgLy8gaW5pdGlhbCBkYXRhIGZldGNoXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbWFwLnNldCgncXVlcnknLCAnKicpO1xuICAgICAgICBtYXAuc2V0KCdsaW1pdCcsIDEyKTtcbiAgICAgICAgaW5pdERhdGFTb3VyY2UubWF0Y2gobWFwKTtcblxuICAgICAgICByZXR1cm4gaW5pdERhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90b0RhdGFTdHJlYW0oc291cmNlOiBGZHBDb21ib0JveERhdGFTb3VyY2U8YW55Pik6IENvbWJvQm94RGF0YVNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKGlzRGF0YVNvdXJjZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlIGFzIENvbWJvQm94RGF0YVNvdXJjZTxhbnk+O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgICAgICAgLy8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB0byB3b3JrIG9uIHRvcCBvZiBhcnJheXNcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlDb21ib0JveERhdGFTb3VyY2U8YW55Pihzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGVDb21ib0JveERhdGFTb3VyY2U8YW55Pihzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRXaW5kb3dSZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2dldE9wdGlvbnNMaXN0V2lkdGgoKTtcblxuICAgICAgICBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9nZXRPcHRpb25zTGlzdFdpZHRoKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3B0aW9uc0xpc3RXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZ2FwID0gNTtcbiAgICAgICAgY29uc3QgeyBvZmZzZXRXaWR0aCwgY2xpZW50V2lkdGggfSA9IGRvY3VtZW50LmJvZHk7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGxlZnQgfSA9ICh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ZkLWlucHV0LWdyb3VwJykgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IG9mZnNldFdpZHRoIC0gY2xpZW50V2lkdGg7XG5cbiAgICAgICAgdGhpcy5tYXhXaWR0aCA9IHRoaXMuYXV0b1Jlc2l6ZSA/IHdpbmRvdy5pbm5lcldpZHRoIC0gc2Nyb2xsQmFyV2lkdGggLSBsZWZ0IC0gZ2FwIDogdGhpcy5taW5XaWR0aDtcbiAgICAgICAgdGhpcy5taW5XaWR0aCA9IHdpZHRoIC0gMjtcblxuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvcmlnaW5hbCBkYXRhIHRvIE9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0VG9PcHRpb25JdGVtcyhpdGVtczogYW55W10pOiBPcHRpb25JdGVtW10ge1xuICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbMF07XG5cbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVJc09wdGlvbkl0ZW0gPSBpc09wdGlvbkl0ZW0oaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzT3B0aW9uSXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zIGFzIE9wdGlvbkl0ZW1bXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlSXNPYmplY3QgPSBpc0pzT2JqZWN0KGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc09iamVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9PcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzU3RyaW5nID0gaXNTdHJpbmcoaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzU3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFByaW1pdGl2ZVRvT3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgZGF0YSB0byBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb09wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IE9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGlmICh0aGlzLmdyb3VwICYmIHRoaXMuZ3JvdXBLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvR3JvdXBPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93U2Vjb25kYXJ5VGV4dCAmJiB0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IG9iamVjdFtdIGRhdGEgdG8gR3JvdXAgT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRPYmplY3RzVG9Hcm91cE9wdGlvbkl0ZW1zPEs+KGl0ZW1zOiBLW10pOiBPcHRpb25JdGVtW10ge1xuICAgICAgICBjb25zdCBncm91cDogeyBba2V5OiBzdHJpbmddOiBLW10gfSA9IHt9O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGtleVZhbHVlID0gdGhpcy5ncm91cEtleSAmJiBpdGVtW3RoaXMuZ3JvdXBLZXldO1xuICAgICAgICAgICAgaWYgKCFrZXlWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWdyb3VwW2tleVZhbHVlXSkge1xuICAgICAgICAgICAgICAgIGdyb3VwW2tleVZhbHVlXSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBncm91cFtrZXlWYWx1ZV0ucHVzaChpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhncm91cCkubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEl0ZW06IE9wdGlvbkl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgICBpc0dyb3VwOiB0cnVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50R3JvdXAgPSBncm91cFtrZXldO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG93U2Vjb25kYXJ5VGV4dCAmJiB0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0uY2hpbGRyZW4gPSB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvU2Vjb25kYXJ5T3B0aW9uSXRlbXMoY3VycmVudEdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0SXRlbS5jaGlsZHJlbiA9IHRoaXMuX2NvbnZlcnRPYmplY3RzVG9EZWZhdWx0T3B0aW9uSXRlbXMoY3VycmVudEdyb3VwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gZGF0YSB0byBTZWNvbmRhcnkgT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtczxLPihpdGVtczogS1tdKTogT3B0aW9uSXRlbVtdIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0SXRlbXM6IE9wdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbXNbaV07XG4gICAgICAgICAgICBzZWxlY3RJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5kaXNwbGF5VmFsdWUodmFsdWUpLFxuICAgICAgICAgICAgICAgIHNlY29uZGFyeVRleHQ6IHRoaXMub2JqZWN0R2V0KHZhbHVlLCB0aGlzLnNlY29uZGFyeUtleSksXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgUHJpbWl0aXZlIGRhdGEoQm9vbGVhbiwgU3RyaW5nLCBOdW1iZXIpIHRvIE9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0UHJpbWl0aXZlVG9PcHRpb25JdGVtcyhpdGVtczogYW55W10pOiBPcHRpb25JdGVtW10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIHNlbGVjdEl0ZW1zLnB1c2goeyBsYWJlbDogdmFsdWUsIHZhbHVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gdG8gT3B0aW9uSXRlbXMgSW50ZXJmYWNlIChEZWZhdWx0KVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IE9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBPcHRpb25JdGVtW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGlzcGxheVZhbHVlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0SXRlbXM7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQXNzaWduIGN1c3RvbSB0ZW1wbGF0ZXMgKi9cbiAgICBwcml2YXRlIF9hc3NpZ25DdXN0b21UZW1wbGF0ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzLmZvckVhY2goKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlLmdldE5hbWUoKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ29wdGlvbkl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9uSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwSXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cEl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmRhcnlJdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlY29uZGFyeUl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzZWxlY3RlZEl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
644
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb21ib2JveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL2NvbWJvYm94L2NvbW1vbnMvYmFzZS1jb21ib2JveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixJQUFJLEVBQ0osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBQ0osUUFBUSxFQUVSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFDSCxHQUFHLEVBQ0gsU0FBUyxFQUNULE9BQU8sRUFDUCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxXQUFXLEVBQ1gsV0FBVyxFQUNYLFVBQVUsRUFDVixZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFdBQVcsRUFDWCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFjLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBd0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0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SWIsaUJBQWlCLDRFQUp2QixhQUFhOzsyRkE1SE4sWUFBWTtrQkFEakMsU0FBUzs7MEJBa1BELFFBQVE7OzBCQUFJLElBQUk7OzBCQUNoQixRQUFROzswQkFBSSxRQUFROzswQkFDcEIsUUFBUTs7MEJBQUksSUFBSTs7MEJBQ2hCLFFBQVE7OzBCQUVSLFFBQVE7OzBCQUFJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUFJLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BELFFBQVE7OzBCQUFJLFFBQVE7OzBCQUFJLElBQUk7OzBCQUFJLE1BQU07MkJBQUMscUJBQXFCOzRDQXpPakUsU0FBUztzQkFEUixLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFTTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFVTixlQUFlO3NCQURkLEtBQUs7Z0JBUU4sZUFBZTtzQkFEZCxLQUFLO2dCQVFOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtGLFVBQVU7c0JBRGIsS0FBSztnQkFhRixLQUFLO3NCQURSLEtBQUs7Z0JBYUksZUFBZTtzQkFBeEIsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUlQLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxhQUFhO2dCQUt4QixlQUFlO3NCQURkLGVBQWU7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdCxcbiAgICBJbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2VsZixcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gICAgQUxULFxuICAgIEJBQ0tTUEFDRSxcbiAgICBDT05UUk9MLFxuICAgIERPV05fQVJST1csXG4gICAgRU5URVIsXG4gICAgRVNDQVBFLFxuICAgIExFRlRfQVJST1csXG4gICAgTlVNUEFEX0VJR0hULFxuICAgIE5VTVBBRF9GSVZFLFxuICAgIE5VTVBBRF9GT1VSLFxuICAgIE5VTVBBRF9OSU5FLFxuICAgIE5VTVBBRF9PTkUsXG4gICAgTlVNUEFEX1NFVkVOLFxuICAgIE5VTVBBRF9TSVgsXG4gICAgTlVNUEFEX1RIUkVFLFxuICAgIE5VTVBBRF9UV08sXG4gICAgTlVNUEFEX1pFUk8sXG4gICAgUklHSFRfQVJST1csXG4gICAgU0hJRlQsXG4gICAgVEFCLFxuICAgIFVQX0FSUk9XXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IENvbnRlbnREZW5zaXR5LCBGb2N1c0VzY2FwZURpcmVjdGlvbiwgS2V5VXRpbCwgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7XG4gICAgQXJyYXlDb21ib0JveERhdGFTb3VyY2UsXG4gICAgY29lcmNlQXJyYXlTYWZlLFxuICAgIENvbGxlY3Rpb25CYXNlSW5wdXQsXG4gICAgQ29tYm9Cb3hEYXRhU291cmNlLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkQ29udHJvbCxcbiAgICBpc0RhdGFTb3VyY2UsXG4gICAgaXNGdW5jdGlvbixcbiAgICBpc0pzT2JqZWN0LFxuICAgIGlzT3B0aW9uSXRlbSxcbiAgICBpc1N0cmluZyxcbiAgICBNYXRjaGluZ0J5LFxuICAgIE1hdGNoaW5nU3RyYXRlZ3ksXG4gICAgT2JzZXJ2YWJsZUNvbWJvQm94RGF0YVNvdXJjZSxcbiAgICBPcHRpb25JdGVtLFxuICAgIFBsYXRmb3JtRm9ybUZpZWxkXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvcGxhdGZvcm0vc2hhcmVkJztcbmltcG9ydCB7IFBvcG92ZXJGaWxsTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBBdXRvQ29tcGxldGVFdmVudCB9IGZyb20gJy4uLy4uL2F1dG8tY29tcGxldGUvYXV0by1jb21wbGV0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29tYm9ib3hDb25maWcgfSBmcm9tICcuLi9jb21ib2JveC5jb25maWcnO1xuaW1wb3J0IHsgRkRfRk9STV9GSUVMRCwgRkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvZm9ybXMnO1xuXG5leHBvcnQgdHlwZSBUZXh0QWxpZ25tZW50ID0gJ2xlZnQnIHwgJ3JpZ2h0JztcbmV4cG9ydCB0eXBlIEZkcENvbWJvQm94RGF0YVNvdXJjZTxUPiA9IENvbWJvQm94RGF0YVNvdXJjZTxUPiB8IE9ic2VydmFibGU8VFtdPiB8IFRbXTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZUNvbWJvYm94IGV4dGVuZHMgQ29sbGVjdGlvbkJhc2VJbnB1dCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIEBoaWRkZW4gTWV0aG9kIHRvIGVtaXQgY2hhbmdlIGV2ZW50ICovXG4gICAgYWJzdHJhY3QgZW1pdENoYW5nZUV2ZW50PEs+KHZhbHVlOiBLKTogdm9pZDtcblxuICAgIC8qKiBAaGlkZGVuIERlZmluZSBpcyB0aGlzIGl0ZW0gc2VsZWN0ZWQgKi9cbiAgICBhYnN0cmFjdCBpc1NlbGVjdGVkT3B0aW9uSXRlbShzZWxlY3RlZEl0ZW06IE9wdGlvbkl0ZW0pOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gRW1pdCBzZWxlY3QgT3B0aW9uSXRlbSAqL1xuICAgIGFic3RyYWN0IHNlbGVjdE9wdGlvbkl0ZW0oaXRlbTogT3B0aW9uSXRlbSk6IHZvaWQ7XG5cbiAgICAvKiogQGhpZGRlbiBEZWZpbmUgdmFsdWUgYXMgc2VsZWN0ZWQgKi9cbiAgICBhYnN0cmFjdCBzZXRBc1NlbGVjdGVkKGl0ZW06IE9wdGlvbkl0ZW1bXSk6IHZvaWQ7XG4gICAgLyoqIFByb3ZpZGVzIG1heGltdW0gaGVpZ2h0IGZvciB0aGUgb3B0aW9uUGFuZWwgKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodCA9ICcyNTBweCc7XG5cbiAgICAvKiogV2hldGhlciB0aGUgYXV0b2NvbXBsZXRlIHNob3VsZCBiZSBlbmFibGVkOyBFbmFibGVkIGJ5IGRlZmF1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9Db21wbGV0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUb2RvOiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC4gWW91IGNhbiBlaXRoZXIgcGFzcyBsaXN0IG9mXG4gICAgICogaXRlbXMgb3IgdXNlIHRoaXMgZW50aXR5Q2xhc3MgYW5kIGludGVybmFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbG9va3VwIHRvIHNvbWUgcmVnaXN0cnlcbiAgICAgKiBhbmQgcmV0cmlldmUgdGhlIGJlc3QgbWF0Y2hpbmcgRGF0YVByb3ZpZGVyIHRoYXQgaXMgc2V0IG9uIGFwcGxpY2F0aW9uIGxldmVsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBlbnRpdHlDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGNvbWJvYm94IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogTXVsdGkgSW5wdXQgTW9iaWxlIENvbmZpZ3VyYXRpb24sIGl0J3MgYXBwbGllZCBvbmx5LCB3aGVuIG1vYmlsZSBpcyBlbmFibGVkICovXG4gICAgQElucHV0KClcbiAgICBtb2JpbGVDb25maWc6IE1vYmlsZU1vZGVDb25maWc7XG5cbiAgICAvKiogVGVsbHMgdGhlIGNvbWJvIGlmIHdlIG5lZWQgdG8gZ3JvdXAgaXRlbXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGdyb3VwID0gZmFsc2U7XG5cbiAgICAvKiogQSBmaWVsZCBuYW1lIHRvIHVzZSB0byBncm91cCBkYXRhIGJ5IChzdXBwb3J0IGRvdHRlZCBub3RhdGlvbikgKi9cbiAgICBASW5wdXQoKVxuICAgIGdyb3VwS2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBmaWVsZCB0byBzaG93IGRhdGEgaW4gc2Vjb25kYXJ5IGNvbHVtbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2Vjb25kYXJ5S2V5Pzogc3RyaW5nO1xuXG4gICAgLyoqIFNob3cgdGhlIHNlY29uZCBjb2x1bW4gKEFwcGxpY2FibGUgZm9yIHR3byBjb2x1bW5zIGxheW91dCkgKi9cbiAgICBASW5wdXQoKVxuICAgIHNob3dTZWNvbmRhcnlUZXh0ID0gZmFsc2U7XG5cbiAgICAvKiogSG9yaXpvbnRhbGx5IGFsaWduIHRleHQgaW5zaWRlIHRoZSBzZWNvbmQgY29sdW1uIChBcHBsaWNhYmxlIGZvciB0d28gY29sdW1ucyBsYXlvdXQpICovXG4gICAgQElucHV0KClcbiAgICBzZWNvbmRhcnlUZXh0QWxpZ25tZW50OiBUZXh0QWxpZ25tZW50O1xuXG4gICAgLyoqIFR1cm5zIG9uL29mZiBBZGp1c3RhYmxlIFdpZHRoIGZlYXR1cmUgKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9SZXNpemUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFByZXNldCBvcHRpb25zIGZvciB0aGUgU2VsZWN0IGJvZHkgd2lkdGgsIHdoYXRldmVyIGlzIGNob3NlbiwgdGhlIGJvZHkgaGFzIGEgNjAwcHggbGltaXQuXG4gICAgICogYGF0LWxlYXN0YCB3aWxsIGFwcGx5IGEgbWluaW11bSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC4gLSBEZWZhdWx0XG4gICAgICogYGVxdWFsYCB3aWxsIGFwcGx5IGEgd2lkdGggdG8gdGhlIGJvZHkgZXF1aXZhbGVudCB0byB0aGUgd2lkdGggb2YgdGhlIGNvbnRyb2wuXG4gICAgICogJ2ZpdC1jb250ZW50JyB3aWxsIGFwcGx5IHdpZHRoIG5lZWRlZCB0byBwcm9wZXJseSBkaXNwbGF5IGl0ZW1zIGluc2lkZSwgaW5kZXBlbmRlbnQgb2YgY29udHJvbC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpbGxDb250cm9sTW9kZTogUG9wb3ZlckZpbGxNb2RlID0gJ2F0LWxlYXN0JztcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgQWRkT24gQnV0dG9uIHNob3VsZCBiZSBmb2N1c2FibGVcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBidXR0b25Gb2N1c2FibGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0cmlnZ2VyIGV2ZW50cyB0aGF0IHdpbGwgb3Blbi9jbG9zZSB0aGUgb3B0aW9ucyBwb3BvdmVyLlxuICAgICAqIEFjY2VwdHMgYW55IFtIVE1MIERPTSBFdmVudHNdKGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvZG9tX29ial9ldmVudC5hc3ApLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdHJpZ2dlcnM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tYm9ib3ggc2hvdWxkIGNsb3NlLCB3aGVuIGEgY2xpY2sgaXMgcGVyZm9ybWVkIG91dHNpZGUgaXRzIGJvdW5kYXJpZXMuIFRydWUgYnkgZGVmYXVsdCAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xvc2VPbk91dHNpZGVDbGljayA9IHRydWU7XG5cbiAgICAvKiogV2hldGhlciBsaXN0IGl0ZW0gb3B0aW9ucyBzaG91bGQgYmUgcmVuZGVyZWQgYXMgYnlsaW5lLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnlsaW5lID0gZmFsc2U7XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRmRwQ29tYm9Cb3hEYXRhU291cmNlPGFueT4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YVNvdXJjZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZGF0YVNvdXJjZSgpOiBGZHBDb21ib0JveERhdGFTb3VyY2U8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBWYWx1ZSBvZiB0aGUgY29tYm9ib3ggKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBjb2VyY2VBcnJheVNhZmUodmFsdWUpO1xuICAgICAgICB0aGlzLnNldEFzU2VsZWN0ZWQodGhpcy5fY29udmVydFRvT3B0aW9uSXRlbXMoc2VsZWN0ZWRJdGVtcykpO1xuICAgICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICAgIHJldHVybiBzdXBlci5nZXRWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIHN0YXJ0ZWQuICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgQE91dHB1dCgpIG9uRGF0YVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gZGF0YSBsb2FkaW5nIGlzIGZpbmlzaGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZWNlaXZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChMaXN0Q29tcG9uZW50KVxuICAgIGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgY3VzdG9tVGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVEaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gQ3VzdG9tIE9wdGlvbiBpdGVtIFRlbXBsYXRlICovXG4gICAgb3B0aW9uSXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gQ3VzdG9tIEdyb3VwIEhlYWRlciBpdGVtIFRlbXBsYXRlICovXG4gICAgZ3JvdXBJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiBDdXN0b20gU2Vjb25kYXJ5IGl0ZW0gVGVtcGxhdGUgKi9cbiAgICBzZWNvbmRhcnlJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiBDdXN0b20gU2VsZWN0ZWQgb3B0aW9uIGl0ZW0gVGVtcGxhdGUgKi9cbiAgICBzZWxlY3RlZEl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgc2VhcmNoSW5wdXRFbGVtZW50OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5ID0gdGhpcy5jb21ib2JveENvbmZpZy5jb250ZW50RGVuc2l0eTtcblxuICAgIC8qKiBJbnB1dCB0ZXh0IG9mIHRoZSBpbnB1dC4gKi9cbiAgICBzZXQgaW5wdXRUZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5faW5wdXRUZXh0VmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIGdldCBpbnB1dFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0VGV4dFZhbHVlIHx8ICcnO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb21ib2JveCBpcyBvcGVuZWQuICovXG4gICAgaXNPcGVuID0gZmFsc2U7XG5cbiAgICAvKiogV2hldGhlciBhIGNvbWJvYm94IGNhbiBiZSBjbG9zZWQgKi9cbiAgICBnZXQgY2FuQ2xvc2UoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhKHRoaXMubW9iaWxlICYmIHRoaXMubW9iaWxlQ29uZmlnLmFwcHJvdmVCdXR0b25UZXh0KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0IG9mIG1hdGNoZWQgc3VnZ2VzdGlvbnMgKi9cbiAgICBfc3VnZ2VzdGlvbnM6IE9wdGlvbkl0ZW1bXTtcblxuICAgIC8qKiBAaGlkZGVuIE1heCB3aWR0aCBvZiBsaXN0IGNvbnRhaW5lciAqL1xuICAgIG1heFdpZHRoPzogbnVtYmVyO1xuXG4gICAgLyoqIEBoaWRkZW4gTWluIHdpZHRoIG9mIGxpc3QgY29udGFpbmVyICovXG4gICAgbWluV2lkdGg/OiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiBOZWVkIGZvciBvcGVuaW5nIG1vYmlsZSB2ZXJzaW9uICovXG4gICAgb3BlbkNoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc0dyb3VwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwS2V5KTtcbiAgICB9XG5cbiAgICAvKiogSXMgc3VnZ2VzdGlvbnMgbGlzdCBlbXB0eSAqL1xuICAgIGdldCBpc1N1Z2dlc3Rpb25zTGlzdEVtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3VnZ2VzdGlvbnMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2ZsYXRTdWdnZXN0aW9uczogT3B0aW9uSXRlbVtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2RhdGFTb3VyY2U6IEZkcENvbWJvQm94RGF0YVNvdXJjZTxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbnB1dFRleHRWYWx1ZTogc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tYXRjaGluZ1N0cmF0ZWd5OiBNYXRjaGluZ1N0cmF0ZWd5ID0gdGhpcy5jb21ib2JveENvbmZpZy5tYXRjaGluZ1N0cmF0ZWd5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIC8qKiBLZXlzLCB0aGF0IHdvbid0IHRyaWdnZXIgdGhlIHBvcG92ZXIncyBvcGVuIHN0YXRlLCB3aGVuIGRpc3BhdGNoZWQgb24gc2VhcmNoIGlucHV0ICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbm9uT3BlbmluZ0tleXM6IG51bWJlcltdID0gW1xuICAgICAgICBFU0NBUEUsXG4gICAgICAgIEVOVEVSLFxuICAgICAgICBDT05UUk9MLFxuICAgICAgICBUQUIsXG4gICAgICAgIFNISUZULFxuICAgICAgICBVUF9BUlJPVyxcbiAgICAgICAgUklHSFRfQVJST1csXG4gICAgICAgIERPV05fQVJST1csXG4gICAgICAgIExFRlRfQVJST1csXG4gICAgICAgIEFMVFxuICAgIF07XG5cbiAgICAvKiogS2V5cywgdGhhdCBhcmUgbnVtYmVycyBmcm9tIG51bWJlciBrZXlwYWQgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9udW1iZXJQYWROdW1iZXJLZXlzOiBudW1iZXJbXSA9IFtcbiAgICAgICAgTlVNUEFEX1pFUk8sXG4gICAgICAgIE5VTVBBRF9PTkUsXG4gICAgICAgIE5VTVBBRF9UV08sXG4gICAgICAgIE5VTVBBRF9USFJFRSxcbiAgICAgICAgTlVNUEFEX0ZPVVIsXG4gICAgICAgIE5VTVBBRF9GSVZFLFxuICAgICAgICBOVU1QQURfU0lYLFxuICAgICAgICBOVU1QQURfU0VWRU4sXG4gICAgICAgIE5VTVBBRF9TRVZFTixcbiAgICAgICAgTlVNUEFEX0VJR0hULFxuICAgICAgICBOVU1QQURfTklORVxuICAgIF07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVhZG9ubHkgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHJlYWRvbmx5IG5nQ29udHJvbDogTmdDb250cm9sLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSByZWFkb25seSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHJlYWRvbmx5IG5nRm9ybTogTmdGb3JtLFxuICAgICAgICBAT3B0aW9uYWwoKSByZWFkb25seSBkaWFsb2dDb25maWc6IERpYWxvZ0NvbmZpZyxcbiAgICAgICAgcHJvdGVjdGVkIGNvbWJvYm94Q29uZmlnOiBDb21ib2JveENvbmZpZyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2xcbiAgICApIHtcbiAgICAgICAgc3VwZXIoY2QsIGVsZW1lbnRSZWYsIG5nQ29udHJvbCwgY29udHJvbENvbnRhaW5lciwgbmdGb3JtLCBmb3JtRmllbGQsIGZvcm1Db250cm9sKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdFdpbmRvd1Jlc2l6ZSgpO1xuICAgICAgICB0aGlzLl9hc3NpZ25DdXN0b21UZW1wbGF0ZXMoKTtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICh0aGlzLmRhdGFTb3VyY2UgYXMgQ29tYm9Cb3hEYXRhU291cmNlPGFueT4pLmNsb3NlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fZHNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogSXMgZW1wdHkgc2VhcmNoIGZpZWxkICovXG4gICAgZ2V0IGlzRW1wdHlWYWx1ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRUZXh0LnRyaW0oKS5sZW5ndGggPT09IDA7XG4gICAgfVxuXG4gICAgLyoqIHdyaXRlIHZhbHVlIGZvciBDb250cm9sVmFsdWVBY2Nlc3NvciAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gY29lcmNlQXJyYXlTYWZlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRBc1NlbGVjdGVkKHRoaXMuX2NvbnZlcnRUb09wdGlvbkl0ZW1zKHNlbGVjdGVkSXRlbXMpKTtcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZWFyY2hUZXJtQ2hhbmdlZCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRUZXh0ID09PSB0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dFRleHQgPSB0ZXh0O1xuXG4gICAgICAgIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgbWFwLnNldCgncXVlcnknLCB0ZXh0KTtcbiAgICAgICAgbWFwLnNldCgnbGltaXQnLCAxMik7XG5cbiAgICAgICAgdGhpcy5kcy5tYXRjaChtYXApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaXNPcGVuQ2hhbmdlSGFuZGxlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gPT09IGlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc09wZW4gPSBpc09wZW47XG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIHRoaXMub3BlbkNoYW5nZS5uZXh0KGlzT3Blbik7XG4gICAgICAgIHRoaXMuX29uT3BlbkNoYW5nZSh0aGlzLmlzT3Blbik7XG5cbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcGVuQ2hhbmdlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1NZXNzYWdlLl9wb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtTWVzc2FnZS5fcG9wb3Zlci5zZXRJZ25vcmVUcmlnZ2Vycyhpc09wZW4pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgaGFuZGxlT3B0aW9uSXRlbSh2YWx1ZTogT3B0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0T3B0aW9uSXRlbSh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBoYW5kbGVQcmVzc0VudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50LCB2YWx1ZTogT3B0aW9uSXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAoIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFuZGxlT3B0aW9uSXRlbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIENsaWNrIG9uIEJ1dHRvblxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvblByaW1hcnlCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgLy8gaWYgaXQncyBtb2JpbGUgbW9kZSBpZ25vcmUgdGhpcyBjbGlja1xuICAgICAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlSGFuZGxlKCF0aGlzLmlzT3Blbik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGNsaWNrIG9uIGlucHV0IGdyb3VwIGluIG1vYmlsZSBtb2RlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9wZW5Jbk1vYmlsZU1vZGUoKTogdm9pZCB7XG4gICAgICAgIC8vIGlmIGl0J3MgYWxyZWFkeSBvcGVuZWQganVzdCBpZ25vcmUgdGhpcyBjbGlja1xuICAgICAgICAvLyBpZiBpdCdzIG5vdCBtb2JpbGUgbW9kZSBqdXN0IGlnbm9yZSB0aGlzIGNsaWNrXG4gICAgICAgIGlmICh0aGlzLmlzT3BlbiB8fCAhdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG90aGVyd2lzZSBzaG93IG9wdGlvbnNcbiAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIEtleWRvd24gb24gSW5wdXRcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25JbnB1dEtleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAoZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzT3BlbiAmJiB0aGlzLmxpc3RDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuc2V0SXRlbUFjdGl2ZSgwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hvb3NlT3RoZXJJdGVtKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBVUF9BUlJPVykpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgtMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIEVTQ0FQRSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZUhhbmRsZShmYWxzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWV2ZW50LmN0cmxLZXkgJiYgIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLl9ub25PcGVuaW5nS2V5cykpIHtcbiAgICAgICAgICAgIGlmICghS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIHRoaXMuX251bWJlclBhZE51bWJlcktleXMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhY2NlcHRlZEtleXMgPVxuICAgICAgICAgICAgICAgICFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgQkFDS1NQQUNFKSAmJlxuICAgICAgICAgICAgICAgICFLZXlVdGlsLmlzS2V5VHlwZShldmVudCwgJ2FscGhhYmV0aWNhbCcpICYmXG4gICAgICAgICAgICAgICAgIUtleVV0aWwuaXNLZXlUeXBlKGV2ZW50LCAnbnVtZXJpYycpICYmXG4gICAgICAgICAgICAgICAgIUtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCB0aGlzLl9udW1iZXJQYWROdW1iZXJLZXlzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eVZhbHVlICYmIGFjY2VwdGVkS2V5cykge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudD8uc2V0SXRlbUFjdGl2ZSgwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBNZXRob2QgcGFzc2VkIHRvIGxpc3QgY29tcG9uZW50ICovXG4gICAgaGFuZGxlTGlzdEZvY3VzRXNjYXBlKGRpcmVjdGlvbjogRm9jdXNFc2NhcGVEaXJlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3VwJykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Db21wbGV0ZVRlcm0oZXZlbnQ6IEF1dG9Db21wbGV0ZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5mb3JjZUNsb3NlKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGlvbkJ5SW5wdXRUZXh0KGV2ZW50LnRlcm0pO1xuICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2VIYW5kbGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICB0b2dnbGVTZWxlY3Rpb25CeUlucHV0VGV4dCh0ZXh0ID0gdGhpcy5pbnB1dFRleHQpOiB2b2lkIHtcbiAgICAgICAgbGV0IG9wdGlvbkl0ZW0gPSB0aGlzLl9nZXRTZWxlY3RJdGVtQnlJbnB1dFZhbHVlKHRleHQpO1xuICAgICAgICBpZiAoIW9wdGlvbkl0ZW0pIHtcbiAgICAgICAgICAgIG9wdGlvbkl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRleHQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRleHRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbkl0ZW0ob3B0aW9uSXRlbSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgX2dldFNlbGVjdEl0ZW1CeUlucHV0VmFsdWUoZGlzcGxheVZhbHVlOiBzdHJpbmcpOiBPcHRpb25JdGVtIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsYXRTdWdnZXN0aW9ucy5maW5kKCh2YWx1ZSkgPT4gdmFsdWUubGFiZWwgPT09IGRpc3BsYXlWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IGRzKCk6IENvbWJvQm94RGF0YVNvdXJjZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSBhcyBDb21ib0JveERhdGFTb3VyY2U8YW55PjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBNYXAgZ3JvdXBlZCB2YWx1ZXMgdG8gYXJyYXkuICovXG4gICAgcHJvdGVjdGVkIF9mbGF0R3JvdXBzKGl0ZW1zOiBPcHRpb25JdGVtW10pOiBPcHRpb25JdGVtW10ge1xuICAgICAgICByZXR1cm4gaXRlbXMucmVkdWNlKChyZXN1bHQ6IE9wdGlvbkl0ZW1bXSwgaXRlbTogT3B0aW9uSXRlbSkgPT4gcmVzdWx0LmNvbmNhdChpdGVtLmNoaWxkcmVuID8/IFtdKSwgW10pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGlzcGxheUZuID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4gdGhpcy5kaXNwbGF5VmFsdWUodmFsdWUpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWNvbmRhcnlGbiA9ICh2YWx1ZTogYW55KTogc3RyaW5nID0+IHtcbiAgICAgICAgaWYgKGlzT3B0aW9uSXRlbSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5zZWNvbmRhcnlUZXh0ID8/ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSnNPYmplY3QodmFsdWUpICYmIHRoaXMuc2Vjb25kYXJ5S2V5KSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50SXRlbSA9IHRoaXMub2JqZWN0R2V0KHZhbHVlLCB0aGlzLnNlY29uZGFyeUtleSk7XG5cbiAgICAgICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGN1cnJlbnRJdGVtKSA/IGN1cnJlbnRJdGVtKCkgOiBjdXJyZW50SXRlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0aGF0IHBpY2tzIG90aGVyIHZhbHVlIG1vdmVkIGZyb20gY3VycmVudCBvbmUgYnkgb2Zmc2V0LCBjYWxsZWQgb25seSB3aGVuIGNvbWJvYm94IGlzIGNsb3NlZFxuICAgICAqL1xuICAgIHByaXZhdGUgX2Nob29zZU90aGVySXRlbShvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3RpdmVWYWx1ZSA9IHRoaXMuX2dldFNlbGVjdEl0ZW1CeVZhbHVlKHRoaXMuaW5wdXRUZXh0KTtcbiAgICAgICAgY29uc3QgaW5kZXg6IG51bWJlciA9IHRoaXMuX3N1Z2dlc3Rpb25zLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBhY3RpdmVWYWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N1Z2dlc3Rpb25zW2luZGV4ICsgb2Zmc2V0XSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVPcHRpb25JdGVtKHRoaXMuX3N1Z2dlc3Rpb25zW2luZGV4ICsgb2Zmc2V0XSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldFNlbGVjdEl0ZW1CeVZhbHVlKGRpc3BsYXlWYWx1ZTogc3RyaW5nKTogT3B0aW9uSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWdnZXN0aW9ucy5maW5kKCh2YWx1ZSkgPT4gdmFsdWUubGFiZWwgPT09IGRpc3BsYXlWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGFzeW5jIF9pbml0aWFsaXplRGF0YVNvdXJjZShkczogRmRwQ29tYm9Cb3hEYXRhU291cmNlPGFueT4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSBbXTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICh0aGlzLmRhdGFTb3VyY2UgYXMgQ29tYm9Cb3hEYXRhU291cmNlPGFueT4pLmNsb3NlKCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpbml0aWFsaXppbmcgZGF0YSBzb3VyY2UgaW4gdGhlIHNlcGVyYXRlIG1pY3JvdGFzayB0byBsZXQgYWxsIGNvbmZpZyBvcHRpb25zIHRvIGJlIHNldCBiZWZvcmUgaXRcbiAgICAgICAgLy8gZm9yIGV4YW1wbGUsIFwiaXNHcm91cFwiIGlucHV0IGlzIG5lZWRlZCBmb3IgaW5pdGlhbGl6YXRpb24gbG9naWMgYW5kIGl0IG1pZ2h0IG5vdCBiZSBzZXQgYXQgdGhpcyBwb2ludFxuICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgLy8gQ29udmVydCB3aGF0ZXZlciBjb21lcyBpbiBhcyBEYXRhU291cmNlIHNvIHdlIGNhbiB3b3JrIHdpdGggaXQgaWRlbnRpY2FsbHlcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IHRoaXMuX29wZW5EYXRhU3RyZWFtKGRzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX29wZW5EYXRhU3RyZWFtKGRzOiBGZHBDb21ib0JveERhdGFTb3VyY2U8YW55Pik6IENvbWJvQm94RGF0YVNvdXJjZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW5pdERhdGFTb3VyY2UgPSB0aGlzLl90b0RhdGFTdHJlYW0oZHMpO1xuXG4gICAgICAgIGlmIChpbml0RGF0YVNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFtkYXRhU291cmNlXSBzb3VyY2UgZGlkIG5vdCBtYXRjaCBhbiBhcnJheSwgT2JzZXJ2YWJsZSwgb3IgRGF0YVNvdXJjZWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBpcyBzaW5nbGUgcG9pbnQgb2YgZGF0YSBlbnRyeSB0byB0aGUgY29tcG9uZW50LiBXZSBkb250IHdhbnQgdG8gc2V0IGRhdGEgb24gZGlmZmVyZW50XG4gICAgICAgICAqIHBsYWNlcy4gSWYgYW55IG5ldyBkYXRhIGNvbWVzIGluIGVpdGhlciB5b3UgZG8gYSBzZWFyY2ggYW5kIHlvdSB3YW50IHRvIHBhc3MgaW5pdGlhbCBkYXRhXG4gICAgICAgICAqIGl0cyBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgZHNTdWIgPSBpbml0RGF0YVNvdXJjZVxuICAgICAgICAgICAgLm9wZW4oKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB0aGlzLl9jb252ZXJ0VG9PcHRpb25JdGVtcyhkYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mbGF0U3VnZ2VzdGlvbnMgPSB0aGlzLmlzR3JvdXAgPyB0aGlzLl9mbGF0R3JvdXBzKHRoaXMuX3N1Z2dlc3Rpb25zKSA6IHRoaXMuX3N1Z2dlc3Rpb25zO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgnaW5pdERhdGFTb3VyY2Uub3BlbigpLicpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoZHNTdWIpO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChpbml0RGF0YVNvdXJjZS5vbkRhdGFSZXF1ZXN0ZWQoKS5zdWJzY3JpYmUodGhpcy5vbkRhdGFSZXF1ZXN0ZWQpKTtcbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKGluaXREYXRhU291cmNlLm9uRGF0YVJlY2VpdmVkKCkuc3Vic2NyaWJlKHRoaXMub25EYXRhUmVjZWl2ZWQpKTtcblxuICAgICAgICBpbml0RGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0TG9va3VwS2V5KHRoaXMubG9va3VwS2V5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdCeTogTWF0Y2hpbmdCeSA9IHtcbiAgICAgICAgICAgIGZpcnN0Qnk6IHRoaXMuX2Rpc3BsYXlGblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgbWF0Y2hpbmdCeS5zZWNvbmRhcnlCeSA9IHRoaXMuX3NlY29uZGFyeUZuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5pdERhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLnNldE1hdGNoaW5nQnkobWF0Y2hpbmdCeSk7XG4gICAgICAgIGluaXREYXRhU291cmNlLmRhdGFQcm92aWRlci5zZXRNYXRjaGluZ1N0cmF0ZWd5KHRoaXMuX21hdGNoaW5nU3RyYXRlZ3kpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIG1hcC5zZXQoJ3F1ZXJ5JywgJyonKTtcbiAgICAgICAgbWFwLnNldCgnbGltaXQnLCAxMik7XG4gICAgICAgIGluaXREYXRhU291cmNlLm1hdGNoKG1hcCk7XG5cbiAgICAgICAgcmV0dXJuIGluaXREYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKHNvdXJjZTogRmRwQ29tYm9Cb3hEYXRhU291cmNlPGFueT4pOiBDb21ib0JveERhdGFTb3VyY2U8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2Uoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSBhcyBDb21ib0JveERhdGFTb3VyY2U8YW55PjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIC8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdG8gd29yayBvbiB0b3Agb2YgYXJyYXlzXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFycmF5Q29tYm9Cb3hEYXRhU291cmNlPGFueT4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc09ic2VydmFibGUoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlQ29tYm9Cb3hEYXRhU291cmNlPGFueT4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0V2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9nZXRPcHRpb25zTGlzdFdpZHRoKCk7XG5cbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZ2V0T3B0aW9uc0xpc3RXaWR0aCgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE9wdGlvbnNMaXN0V2lkdGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGdhcCA9IDU7XG4gICAgICAgIGNvbnN0IHsgb2Zmc2V0V2lkdGgsIGNsaWVudFdpZHRoIH0gPSBkb2N1bWVudC5ib2R5O1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBsZWZ0IH0gPSAodGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdmZC1pbnB1dC1ncm91cCcpIGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsQmFyV2lkdGggPSBvZmZzZXRXaWR0aCAtIGNsaWVudFdpZHRoO1xuXG4gICAgICAgIHRoaXMubWF4V2lkdGggPSB0aGlzLmF1dG9SZXNpemUgPyB3aW5kb3cuaW5uZXJXaWR0aCAtIHNjcm9sbEJhcldpZHRoIC0gbGVmdCAtIGdhcCA6IHRoaXMubWluV2lkdGg7XG4gICAgICAgIHRoaXMubWluV2lkdGggPSB3aWR0aCAtIDI7XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb3JpZ2luYWwgZGF0YSB0byBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydFRvT3B0aW9uSXRlbXMoaXRlbXM6IGFueVtdKTogT3B0aW9uSXRlbVtdIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zWzBdO1xuXG4gICAgICAgIGNvbnN0IGVsZW1lbnRUeXBlSXNPcHRpb25JdGVtID0gaXNPcHRpb25JdGVtKGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc09wdGlvbkl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtcyBhcyBPcHRpb25JdGVtW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzT2JqZWN0ID0gaXNKc09iamVjdChpdGVtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlSXNPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvT3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVJc1N0cmluZyA9IGlzU3RyaW5nKGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc1N0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGRhdGEgdG8gT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRPYmplY3RzVG9PcHRpb25JdGVtcyhpdGVtczogYW55W10pOiBPcHRpb25JdGVtW10ge1xuICAgICAgICBpZiAodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb0dyb3VwT3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2hvd1NlY29uZGFyeVRleHQgJiYgdGhpcy5zZWNvbmRhcnlLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvU2Vjb25kYXJ5T3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9EZWZhdWx0T3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvYmplY3RbXSBkYXRhIHRvIEdyb3VwIE9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0T2JqZWN0c1RvR3JvdXBPcHRpb25JdGVtczxLPihpdGVtczogS1tdKTogT3B0aW9uSXRlbVtdIHtcbiAgICAgICAgY29uc3QgZ3JvdXA6IHsgW2tleTogc3RyaW5nXTogS1tdIH0gPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gaXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBrZXlWYWx1ZSA9IHRoaXMuZ3JvdXBLZXkgJiYgaXRlbVt0aGlzLmdyb3VwS2V5XTtcbiAgICAgICAgICAgIGlmICgha2V5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFncm91cFtrZXlWYWx1ZV0pIHtcbiAgICAgICAgICAgICAgICBncm91cFtrZXlWYWx1ZV0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ3JvdXBba2V5VmFsdWVdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZ3JvdXApLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RJdGVtOiBPcHRpb25JdGVtID0ge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgaXNHcm91cDogdHJ1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgY3VycmVudEdyb3VwID0gZ3JvdXBba2V5XTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1NlY29uZGFyeVRleHQgJiYgdGhpcy5zZWNvbmRhcnlLZXkpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RJdGVtLmNoaWxkcmVuID0gdGhpcy5fY29udmVydE9iamVjdHNUb1NlY29uZGFyeU9wdGlvbkl0ZW1zKGN1cnJlbnRHcm91cCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdEl0ZW0uY2hpbGRyZW4gPSB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvRGVmYXVsdE9wdGlvbkl0ZW1zKGN1cnJlbnRHcm91cCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RJdGVtO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IG9iamVjdFtdIGRhdGEgdG8gU2Vjb25kYXJ5IE9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0T2JqZWN0c1RvU2Vjb25kYXJ5T3B0aW9uSXRlbXM8Sz4oaXRlbXM6IEtbXSk6IE9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBPcHRpb25JdGVtW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGlzcGxheVZhbHVlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnlUZXh0OiB0aGlzLm9iamVjdEdldCh2YWx1ZSwgdGhpcy5zZWNvbmRhcnlLZXkpLFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RJdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IFByaW1pdGl2ZSBkYXRhKEJvb2xlYW4sIFN0cmluZywgTnVtYmVyKSB0byBPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydFByaW1pdGl2ZVRvT3B0aW9uSXRlbXMoaXRlbXM6IGFueVtdKTogT3B0aW9uSXRlbVtdIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0SXRlbXM6IE9wdGlvbkl0ZW1bXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaXRlbXNbaV07XG4gICAgICAgICAgICBzZWxlY3RJdGVtcy5wdXNoKHsgbGFiZWw6IHZhbHVlLCB2YWx1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RJdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IG9iamVjdFtdIHRvIE9wdGlvbkl0ZW1zIEludGVyZmFjZSAoRGVmYXVsdClcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhpdGVtczogYW55W10pOiBPcHRpb25JdGVtW10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIHNlbGVjdEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRpc3BsYXlWYWx1ZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEFzc2lnbiBjdXN0b20gdGVtcGxhdGVzICovXG4gICAgcHJpdmF0ZSBfYXNzaWduQ3VzdG9tVGVtcGxhdGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlcy5mb3JFYWNoKCh0ZW1wbGF0ZSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoICh0ZW1wbGF0ZS5nZXROYW1lKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdvcHRpb25JdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbkl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdncm91cEl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kYXJ5SXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0ZWRJdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=