@valtimo/components 11.3.2 → 12.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (467) hide show
  1. package/assets/css/carbon.scss +84 -110
  2. package/assets/css/color.scss +28 -0
  3. package/assets/css/compatibility.scss +732 -0
  4. package/assets/css/design-tokens.css +31 -31
  5. package/assets/css/ng-multiselect-dropdown.theme.scss +1 -1
  6. package/esm2022/lib/components/alert/alert.component.mjs +7 -8
  7. package/esm2022/lib/components/alert/alert.module.mjs +6 -6
  8. package/esm2022/lib/components/alert/alert.service.mjs +6 -6
  9. package/esm2022/lib/components/bpmn-js-diagram/bpmn-js-diagram.component.mjs +7 -7
  10. package/esm2022/lib/components/bpmn-js-diagram/bpmn-js-diagram.module.mjs +6 -6
  11. package/esm2022/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.mjs +36 -12
  12. package/esm2022/lib/components/breadcrumb-navigation/breadcrumb-navigation.module.mjs +6 -6
  13. package/esm2022/lib/components/breadcrumb-navigation/breadcrumb.service.mjs +16 -7
  14. package/esm2022/lib/components/button/button.component.mjs +6 -6
  15. package/esm2022/lib/components/button/button.module.mjs +6 -6
  16. package/esm2022/lib/components/camunda/form/camunda-form.components.mjs +7 -7
  17. package/esm2022/lib/components/camunda/form/camunda-form.module.mjs +6 -6
  18. package/esm2022/lib/components/camunda/form/custom/camunda-custom-form.component.mjs +7 -7
  19. package/esm2022/lib/components/camunda/form/custom/camunda-custom-form.module.mjs +6 -6
  20. package/esm2022/lib/components/camunda/form/generated/camunda-generated-form.component.mjs +7 -7
  21. package/esm2022/lib/components/camunda/form/generated/camunda-generated-form.module.mjs +6 -6
  22. package/esm2022/lib/components/camunda/form/generated/formfield/boolean/camunda-boolean-formfield.component.mjs +7 -7
  23. package/esm2022/lib/components/camunda/form/generated/formfield/camunda-formfield-generator.directive.mjs +6 -6
  24. package/esm2022/lib/components/camunda/form/generated/formfield/camunda-formfield.service.mjs +6 -6
  25. package/esm2022/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.mjs +13 -13
  26. package/esm2022/lib/components/camunda/form/generated/formfield/date/camunda-date-formfield.component.mjs +7 -7
  27. package/esm2022/lib/components/camunda/form/generated/formfield/enum/camunda-enum-formfield.component.mjs +7 -7
  28. package/esm2022/lib/components/camunda/form/generated/formfield/formfield.model.mjs +2 -2
  29. package/esm2022/lib/components/camunda/form/generated/formfield/long/camunda-long-formfield.component.mjs +7 -7
  30. package/esm2022/lib/components/camunda/form/generated/formfield/string/camunda-string-formfield.component.mjs +7 -7
  31. package/esm2022/lib/components/camunda/form/generated/formfield/textarea/camunda-textarea-formfield.component.mjs +7 -7
  32. package/esm2022/lib/components/camunda/form/generated/formfield/validation/camunda-formfield-validation.component.mjs +7 -7
  33. package/esm2022/lib/components/camunda/form/generated/formfield/validation/date.validators.mjs +2 -2
  34. package/esm2022/lib/components/carbon-list/CarbonListFilterPipe.directive.mjs +5 -5
  35. package/esm2022/lib/components/carbon-list/carbon-list.component.mjs +170 -37
  36. package/esm2022/lib/components/carbon-list/carbon-list.module.mjs +33 -10
  37. package/esm2022/lib/components/carbon-list/no-results/carbon-no-results.component.mjs +40 -8
  38. package/esm2022/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.mjs +165 -0
  39. package/esm2022/lib/components/carbon-list/services/index.mjs +17 -0
  40. package/esm2022/lib/components/carbon-list/tags-modal/tags-modal.component.mjs +33 -0
  41. package/esm2022/lib/components/card/card.component.mjs +7 -9
  42. package/esm2022/lib/components/card/card.module.mjs +6 -6
  43. package/esm2022/lib/components/confirmation-modal/confirmation-modal.component.mjs +41 -16
  44. package/esm2022/lib/components/confirmation-modal/confirmation-modal.module.mjs +6 -6
  45. package/esm2022/lib/components/data-list/data-list.component.mjs +7 -9
  46. package/esm2022/lib/components/data-list/data-list.module.mjs +6 -6
  47. package/esm2022/lib/components/date-picker/date-picker.component.mjs +15 -9
  48. package/esm2022/lib/components/date-picker/date-picker.module.mjs +6 -6
  49. package/esm2022/lib/components/dropzone/dropzone.component.mjs +8 -8
  50. package/esm2022/lib/components/dropzone/dropzone.module.mjs +6 -6
  51. package/esm2022/lib/components/editor/editor.component.mjs +59 -13
  52. package/esm2022/lib/components/editor/editor.module.mjs +8 -7
  53. package/esm2022/lib/components/editor/editor.service.mjs +35 -11
  54. package/esm2022/lib/components/expansion-panel/expansion-panel.component.mjs +6 -6
  55. package/esm2022/lib/components/expansion-panel/expansion-panel.module.mjs +6 -6
  56. package/esm2022/lib/components/field-auto-focus/field-auto-focus.directive.mjs +6 -6
  57. package/esm2022/lib/components/field-auto-focus/field-auto-focus.module.mjs +6 -6
  58. package/esm2022/lib/components/file-size/file-size.module.mjs +6 -6
  59. package/esm2022/lib/components/file-size/file-size.pipe.mjs +5 -5
  60. package/esm2022/lib/components/filter-sidebar/filter-sidebar.component.mjs +7 -7
  61. package/esm2022/lib/components/filter-sidebar/filter-sidebar.module.mjs +6 -6
  62. package/esm2022/lib/components/form/form.component.mjs +6 -6
  63. package/esm2022/lib/components/form/form.module.mjs +6 -6
  64. package/esm2022/lib/components/form-io/form-io-builder.component.mjs +10 -10
  65. package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user-edit-form.mjs +2 -2
  66. package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user.component.mjs +6 -6
  67. package/esm2022/lib/components/form-io/form-io-current-user/form-io-current-user.formio.mjs +3 -3
  68. package/esm2022/lib/components/form-io/form-io-iban/iban.component.mjs +4 -4
  69. package/esm2022/lib/components/form-io/form-io-iban/iban.formio.mjs +2 -2
  70. package/esm2022/lib/components/form-io/form-io-iban/iban.validators.mjs +1 -1
  71. package/esm2022/lib/components/form-io/form-io-resource-selector/form-io-resource-selector.formio.mjs +3 -3
  72. package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader-edit-form.mjs +2 -2
  73. package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader.component.mjs +7 -7
  74. package/esm2022/lib/components/form-io/form-io-uploader/form-io-uploader.formio.mjs +3 -3
  75. package/esm2022/lib/components/form-io/form-io.component.mjs +38 -29
  76. package/esm2022/lib/components/form-io/form-io.module.mjs +6 -15
  77. package/esm2022/lib/components/form-io/formio-config.mjs +2 -2
  78. package/esm2022/lib/components/form-io/services/form-io-dom.service.mjs +6 -6
  79. package/esm2022/lib/components/form-io/services/form-io-local-storage.service.mjs +4 -4
  80. package/esm2022/lib/components/form-io/services/form-io-state.service.mjs +5 -5
  81. package/esm2022/lib/components/input/input.component.mjs +15 -9
  82. package/esm2022/lib/components/input/input.module.mjs +6 -6
  83. package/esm2022/lib/components/input-label/input-label.component.mjs +10 -7
  84. package/esm2022/lib/components/input-label/input-label.module.mjs +6 -6
  85. package/esm2022/lib/components/left-sidebar/left-sidebar.component.mjs +6 -6
  86. package/esm2022/lib/components/left-sidebar/left-sidebar.module.mjs +6 -6
  87. package/esm2022/lib/components/list/ListFilterPipe.directive.mjs +5 -5
  88. package/esm2022/lib/components/list/list.component.mjs +7 -7
  89. package/esm2022/lib/components/list/list.module.mjs +25 -7
  90. package/esm2022/lib/components/menu/menu-item-text.component.mjs +6 -6
  91. package/esm2022/lib/components/menu/menu-routing.module.mjs +6 -6
  92. package/esm2022/lib/components/menu/menu.init.mjs +2 -2
  93. package/esm2022/lib/components/menu/menu.module.mjs +6 -6
  94. package/esm2022/lib/components/menu/menu.service.mjs +11 -9
  95. package/esm2022/lib/components/modal/modal.component.mjs +7 -7
  96. package/esm2022/lib/components/modal/modal.module.mjs +6 -6
  97. package/esm2022/lib/components/multi-input/carbon-multi-input.component.mjs +45 -10
  98. package/esm2022/lib/components/multi-input/carbon-multi-input.module.mjs +6 -6
  99. package/esm2022/lib/components/multi-input-form/multi-input-form.component.mjs +6 -6
  100. package/esm2022/lib/components/multi-input-form/multi-input-form.module.mjs +6 -6
  101. package/esm2022/lib/components/multiselect-dropdown/multiselect-dropdown.component.mjs +6 -6
  102. package/esm2022/lib/components/multiselect-dropdown/multiselect-dropdown.module.mjs +6 -6
  103. package/esm2022/lib/components/page/page-container/page-container.component.mjs +6 -6
  104. package/esm2022/lib/components/page/page-content/page-content.component.mjs +6 -6
  105. package/esm2022/lib/components/page/page-header/page-header.component.mjs +6 -6
  106. package/esm2022/lib/components/page/page-header-actions/page-header-actions.component.mjs +6 -6
  107. package/esm2022/lib/components/page/page-header-introduction/page-header-introduction.component.mjs +6 -6
  108. package/esm2022/lib/components/page/page.module.mjs +6 -6
  109. package/esm2022/lib/components/page-actions/page-actions.component.mjs +82 -0
  110. package/esm2022/lib/components/page-header/page-header.component.mjs +43 -13
  111. package/esm2022/lib/components/page-header/page-header.module.mjs +27 -7
  112. package/esm2022/lib/components/page-subtitle/page-subtitle.component.mjs +53 -0
  113. package/esm2022/lib/components/page-title/page-title.component.mjs +30 -21
  114. package/esm2022/lib/components/page-title/page-title.module.mjs +8 -8
  115. package/esm2022/lib/components/paragraph/paragraph.component.mjs +6 -6
  116. package/esm2022/lib/components/paragraph/paragraph.module.mjs +6 -6
  117. package/esm2022/lib/components/pending-changes/pending-changes.component.mjs +24 -7
  118. package/esm2022/lib/components/pending-changes/pending-changes.service.mjs +4 -4
  119. package/esm2022/lib/components/progress-bar/progress-bar.component.mjs +6 -6
  120. package/esm2022/lib/components/progress-bar/progress-bar.module.mjs +6 -6
  121. package/esm2022/lib/components/prompt/prompt.component.mjs +7 -7
  122. package/esm2022/lib/components/prompt/prompt.module.mjs +6 -6
  123. package/esm2022/lib/components/radio/radio.component.mjs +6 -6
  124. package/esm2022/lib/components/radio/radio.module.mjs +6 -6
  125. package/esm2022/lib/components/right-sidebar/right-sidebar.component.mjs +166 -60
  126. package/esm2022/lib/components/right-sidebar/right-sidebar.module.mjs +15 -12
  127. package/esm2022/lib/components/search-fields/search-fields.component.mjs +52 -32
  128. package/esm2022/lib/components/search-fields/search-fields.module.mjs +24 -9
  129. package/esm2022/lib/components/searchable-dropdown/searchable-dropdown.component.mjs +6 -6
  130. package/esm2022/lib/components/searchable-dropdown/searchable-dropdown.module.mjs +6 -6
  131. package/esm2022/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.mjs +9 -6
  132. package/esm2022/lib/components/searchable-dropdown-select/searchable-dropdown-select.module.mjs +6 -6
  133. package/esm2022/lib/components/select/select.component.mjs +12 -8
  134. package/esm2022/lib/components/select/select.module.mjs +6 -6
  135. package/esm2022/lib/components/spinner/spinner.component.mjs +6 -6
  136. package/esm2022/lib/components/spinner/spinner.module.mjs +6 -6
  137. package/esm2022/lib/components/status-selector/status-selector.component.mjs +86 -0
  138. package/esm2022/lib/components/stepper/stepper-container/stepper-container.component.mjs +7 -7
  139. package/esm2022/lib/components/stepper/stepper-content/stepper-content.component.mjs +7 -7
  140. package/esm2022/lib/components/stepper/stepper-footer/stepper-footer.component.mjs +6 -6
  141. package/esm2022/lib/components/stepper/stepper-footer-step/stepper-footer-step.component.mjs +8 -8
  142. package/esm2022/lib/components/stepper/stepper-header/stepper-header.component.mjs +7 -7
  143. package/esm2022/lib/components/stepper/stepper-step/stepper-step.component.mjs +7 -7
  144. package/esm2022/lib/components/stepper/stepper.module.mjs +9 -8
  145. package/esm2022/lib/components/table/table.component.mjs +7 -7
  146. package/esm2022/lib/components/table/table.module.mjs +6 -6
  147. package/esm2022/lib/components/timeline/timeline.component.mjs +6 -6
  148. package/esm2022/lib/components/timeline/timeline.module.mjs +8 -7
  149. package/esm2022/lib/components/title/title.component.mjs +6 -6
  150. package/esm2022/lib/components/title/title.module.mjs +6 -6
  151. package/esm2022/lib/components/tooltip-icon/tooltip-icon.component.mjs +6 -6
  152. package/esm2022/lib/components/tooltip-icon/tooltip-icon.module.mjs +6 -6
  153. package/esm2022/lib/components/topbar/topbar.component.mjs +70 -23
  154. package/esm2022/lib/components/topbar/topbar.module.mjs +6 -6
  155. package/esm2022/lib/components/uploader/uploader-drag-drop.directive.mjs +5 -5
  156. package/esm2022/lib/components/uploader/uploader.component.mjs +7 -8
  157. package/esm2022/lib/components/uploader/uploader.module.mjs +6 -6
  158. package/esm2022/lib/components/v-card/card.component.mjs +6 -6
  159. package/esm2022/lib/components/v-card/card.module.mjs +6 -6
  160. package/esm2022/lib/components/v-modal/modal.component.mjs +7 -7
  161. package/esm2022/lib/components/v-modal/modal.module.mjs +6 -6
  162. package/esm2022/lib/components/version/version.service.mjs +6 -6
  163. package/esm2022/lib/components/view-content/type-converters/booleanTypeConverter.mjs +13 -17
  164. package/esm2022/lib/components/view-content/type-converters/currencyTypeConverter.mjs +37 -0
  165. package/esm2022/lib/components/view-content/type-converters/dateTimeTypeConverter.mjs +31 -0
  166. package/esm2022/lib/components/view-content/type-converters/dateTypeConverter.mjs +6 -4
  167. package/esm2022/lib/components/view-content/type-converters/enumTypeConverter.mjs +3 -3
  168. package/esm2022/lib/components/view-content/type-converters/numberTypeConverter.mjs +37 -0
  169. package/esm2022/lib/components/view-content/type-converters/percentTypeConverter.mjs +37 -0
  170. package/esm2022/lib/components/view-content/type-converters/relatedFilesTypeConverter.mjs +2 -2
  171. package/esm2022/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.mjs +2 -2
  172. package/esm2022/lib/components/view-content/type-converters/stringTypeConverter.mjs +2 -2
  173. package/esm2022/lib/components/view-content/type-converters/type-converters.model.mjs +61 -18
  174. package/esm2022/lib/components/view-content/view-content.module.mjs +33 -0
  175. package/esm2022/lib/components/view-content/view-content.service.mjs +14 -25
  176. package/esm2022/lib/components/webcam/webcam.component.mjs +6 -6
  177. package/esm2022/lib/components/webcam/webcam.module.mjs +6 -6
  178. package/esm2022/lib/components/widget/widget.component.mjs +6 -6
  179. package/esm2022/lib/components/widget/widget.module.mjs +6 -6
  180. package/esm2022/lib/constants/carbon.constants.mjs +3 -2
  181. package/esm2022/lib/constants/index.mjs +3 -2
  182. package/esm2022/lib/constants/status.constants.mjs +18 -0
  183. package/esm2022/lib/constants/view-type-converter.constants.mjs +16 -1
  184. package/esm2022/lib/directives/command-click/command-click-directive.module.mjs +6 -6
  185. package/esm2022/lib/directives/command-click/command-click.directive.mjs +6 -6
  186. package/esm2022/lib/directives/digit-only/digit-only.directive.mjs +6 -6
  187. package/esm2022/lib/directives/fit-page/fit-page-directive.module.mjs +33 -0
  188. package/esm2022/lib/directives/fit-page/fit-page.directive.mjs +54 -0
  189. package/esm2022/lib/directives/render-in-page-header/render-in-page-header-directive.module.mjs +6 -6
  190. package/esm2022/lib/directives/render-in-page-header/render-in-page-header.directive.mjs +23 -10
  191. package/esm2022/lib/directives/render-page-header/render-page-header-directive.module.mjs +33 -0
  192. package/esm2022/lib/directives/render-page-header/render-page-header.directive.mjs +56 -0
  193. package/esm2022/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.mjs +33 -0
  194. package/esm2022/lib/directives/render-page-subtitle/render-page-subtitle.directive.mjs +57 -0
  195. package/esm2022/lib/directives/tooltip/tooltip.component.mjs +6 -6
  196. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +6 -6
  197. package/esm2022/lib/directives/tooltip/tooltip.module.mjs +6 -6
  198. package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal-directive.module.mjs +6 -6
  199. package/esm2022/lib/directives/valtimo-cds-modal/valtimo-cds-modal.directive.mjs +7 -7
  200. package/esm2022/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button-directive.module.mjs +6 -6
  201. package/esm2022/lib/directives/valtimo-cds-overflow-button/valtimo-cds-overflow-button.directive.mjs +7 -7
  202. package/esm2022/lib/guards/index.mjs +2 -2
  203. package/esm2022/lib/guards/pending-changes.guard.mjs +1 -1
  204. package/esm2022/lib/models/alert.model.mjs +2 -2
  205. package/esm2022/lib/models/button.model.mjs +2 -2
  206. package/esm2022/lib/models/carbon-list.model.mjs +5 -1
  207. package/esm2022/lib/models/carbon-pagination.model.mjs +2 -2
  208. package/esm2022/lib/models/carbon-tag.model.mjs +17 -0
  209. package/esm2022/lib/models/carbon-theme.model.mjs +24 -0
  210. package/esm2022/lib/models/choice-field.model.mjs +17 -0
  211. package/esm2022/lib/models/choicefield-value.model.mjs +17 -0
  212. package/esm2022/lib/models/documenten-api-metadata.model.mjs +2 -2
  213. package/esm2022/lib/models/editor.model.mjs +8 -3
  214. package/esm2022/lib/models/form-io.model.mjs +2 -2
  215. package/esm2022/lib/models/form.model.mjs +2 -2
  216. package/esm2022/lib/models/index.mjs +11 -4
  217. package/esm2022/lib/models/input.model.mjs +2 -2
  218. package/esm2022/lib/models/modal.model.mjs +2 -2
  219. package/esm2022/lib/models/multi-input.model.mjs +2 -2
  220. package/esm2022/lib/models/pagination.model.mjs +2 -2
  221. package/esm2022/lib/models/radio.model.mjs +2 -2
  222. package/esm2022/lib/models/right-sidebar.model.mjs +17 -0
  223. package/esm2022/lib/models/searchable-dropdown.model.mjs +2 -2
  224. package/esm2022/lib/models/select.model.mjs +2 -2
  225. package/esm2022/lib/models/sort.model.mjs +2 -2
  226. package/esm2022/lib/models/stepper.model.mjs +2 -2
  227. package/esm2022/lib/models/table.model.mjs +2 -2
  228. package/esm2022/lib/models/theme.model.mjs +28 -0
  229. package/esm2022/lib/models/timeline.model.mjs +2 -2
  230. package/esm2022/lib/models/title.model.mjs +2 -2
  231. package/esm2022/lib/models/topbar.model.mjs +17 -0
  232. package/esm2022/lib/models/version.model.mjs +2 -2
  233. package/esm2022/lib/modules/custom-formio-component/create-custom-component.mjs +162 -0
  234. package/esm2022/lib/modules/custom-formio-component/custom-tags.service.mjs +32 -0
  235. package/esm2022/lib/modules/custom-formio-component/elements.common.mjs +17 -0
  236. package/esm2022/lib/modules/custom-formio-component/index.mjs +20 -0
  237. package/esm2022/lib/modules/custom-formio-component/register-custom-component.mjs +38 -0
  238. package/esm2022/lib/modules/index.mjs +17 -0
  239. package/esm2022/lib/pipes/case-count.pipe.mjs +5 -5
  240. package/esm2022/lib/pipes/components-pipes.module.mjs +6 -6
  241. package/esm2022/lib/pipes/index.mjs +2 -2
  242. package/esm2022/lib/pipes/is-array.pipe.mjs +5 -5
  243. package/esm2022/lib/pipes/menu-item-translation.pipe.mjs +6 -6
  244. package/esm2022/lib/services/cds-theme.service.mjs +97 -0
  245. package/esm2022/lib/services/choice-field.service.mjs +70 -0
  246. package/esm2022/lib/services/index.mjs +22 -1
  247. package/esm2022/lib/services/key-generator.service.mjs +50 -0
  248. package/esm2022/lib/services/key-state.service.mjs +33 -0
  249. package/esm2022/lib/services/modal.service.mjs +6 -6
  250. package/esm2022/lib/services/page-header.service.mjs +83 -0
  251. package/esm2022/lib/services/page-subtitle.service.mjs +46 -0
  252. package/esm2022/lib/services/page-title.service.mjs +121 -0
  253. package/esm2022/lib/services/prompt.service.mjs +5 -5
  254. package/esm2022/lib/services/shell.service.mjs +6 -6
  255. package/esm2022/lib/services/stepper.service.mjs +5 -5
  256. package/esm2022/lib/services/user-interface.service.mjs +5 -5
  257. package/esm2022/lib/services/valtimo-modal.service.mjs +5 -5
  258. package/esm2022/public_api.mjs +17 -7
  259. package/fesm2022/valtimo-components.mjs +8915 -7379
  260. package/fesm2022/valtimo-components.mjs.map +1 -1
  261. package/lib/components/alert/alert.component.d.ts +2 -3
  262. package/lib/components/alert/alert.component.d.ts.map +1 -1
  263. package/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.d.ts +11 -2
  264. package/lib/components/breadcrumb-navigation/breadcrumb-navigation.component.d.ts.map +1 -1
  265. package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts +3 -0
  266. package/lib/components/breadcrumb-navigation/breadcrumb.service.d.ts.map +1 -1
  267. package/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts +3 -3
  268. package/lib/components/camunda/form/generated/formfield/choicefield/camunda-choicefield-formfield.component.d.ts.map +1 -1
  269. package/lib/components/carbon-list/carbon-list.component.d.ts +37 -9
  270. package/lib/components/carbon-list/carbon-list.component.d.ts.map +1 -1
  271. package/lib/components/carbon-list/carbon-list.module.d.ts +10 -7
  272. package/lib/components/carbon-list/carbon-list.module.d.ts.map +1 -1
  273. package/lib/components/carbon-list/no-results/carbon-no-results.component.d.ts +13 -3
  274. package/lib/components/carbon-list/no-results/carbon-no-results.component.d.ts.map +1 -1
  275. package/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.d.ts +40 -0
  276. package/lib/components/carbon-list/services/carbon-list-drag-and-drop.service.d.ts.map +1 -0
  277. package/lib/components/carbon-list/services/index.d.ts +2 -0
  278. package/lib/components/carbon-list/services/index.d.ts.map +1 -0
  279. package/lib/components/carbon-list/tags-modal/tags-modal.component.d.ts +14 -0
  280. package/lib/components/carbon-list/tags-modal/tags-modal.component.d.ts.map +1 -0
  281. package/lib/components/card/card.component.d.ts +1 -4
  282. package/lib/components/card/card.component.d.ts.map +1 -1
  283. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts +12 -4
  284. package/lib/components/confirmation-modal/confirmation-modal.component.d.ts.map +1 -1
  285. package/lib/components/data-list/data-list.component.d.ts +1 -4
  286. package/lib/components/data-list/data-list.component.d.ts.map +1 -1
  287. package/lib/components/date-picker/date-picker.component.d.ts +2 -1
  288. package/lib/components/date-picker/date-picker.component.d.ts.map +1 -1
  289. package/lib/components/editor/editor.component.d.ts +7 -2
  290. package/lib/components/editor/editor.component.d.ts.map +1 -1
  291. package/lib/components/editor/editor.module.d.ts +2 -1
  292. package/lib/components/editor/editor.module.d.ts.map +1 -1
  293. package/lib/components/editor/editor.service.d.ts +11 -2
  294. package/lib/components/editor/editor.service.d.ts.map +1 -1
  295. package/lib/components/form-io/form-io-builder.component.d.ts +1 -1
  296. package/lib/components/form-io/form-io-builder.component.d.ts.map +1 -1
  297. package/lib/components/form-io/form-io-current-user/form-io-current-user.component.d.ts +1 -1
  298. package/lib/components/form-io/form-io-current-user/form-io-current-user.component.d.ts.map +1 -1
  299. package/lib/components/form-io/form-io-iban/iban.component.d.ts +1 -1
  300. package/lib/components/form-io/form-io-iban/iban.component.d.ts.map +1 -1
  301. package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts +1 -1
  302. package/lib/components/form-io/form-io-uploader/form-io-uploader.component.d.ts.map +1 -1
  303. package/lib/components/form-io/form-io.component.d.ts +8 -5
  304. package/lib/components/form-io/form-io.component.d.ts.map +1 -1
  305. package/lib/components/form-io/form-io.module.d.ts +12 -14
  306. package/lib/components/form-io/form-io.module.d.ts.map +1 -1
  307. package/lib/components/input/input.component.d.ts +2 -1
  308. package/lib/components/input/input.component.d.ts.map +1 -1
  309. package/lib/components/input-label/input-label.component.d.ts +2 -1
  310. package/lib/components/input-label/input-label.component.d.ts.map +1 -1
  311. package/lib/components/left-sidebar/left-sidebar.component.d.ts.map +1 -1
  312. package/lib/components/list/list.module.d.ts +2 -1
  313. package/lib/components/list/list.module.d.ts.map +1 -1
  314. package/lib/components/multi-input/carbon-multi-input.component.d.ts +9 -3
  315. package/lib/components/multi-input/carbon-multi-input.component.d.ts.map +1 -1
  316. package/lib/components/page-actions/page-actions.component.d.ts +29 -0
  317. package/lib/components/page-actions/page-actions.component.d.ts.map +1 -0
  318. package/lib/components/page-header/page-header.component.d.ts +15 -4
  319. package/lib/components/page-header/page-header.component.d.ts.map +1 -1
  320. package/lib/components/page-header/page-header.module.d.ts +4 -1
  321. package/lib/components/page-header/page-header.module.d.ts.map +1 -1
  322. package/lib/components/page-subtitle/page-subtitle.component.d.ts +20 -0
  323. package/lib/components/page-subtitle/page-subtitle.component.d.ts.map +1 -0
  324. package/lib/components/page-title/page-title.component.d.ts +8 -9
  325. package/lib/components/page-title/page-title.component.d.ts.map +1 -1
  326. package/lib/components/page-title/page-title.module.d.ts +1 -1
  327. package/lib/components/pending-changes/pending-changes.component.d.ts +6 -1
  328. package/lib/components/pending-changes/pending-changes.component.d.ts.map +1 -1
  329. package/lib/components/right-sidebar/right-sidebar.component.d.ts +38 -18
  330. package/lib/components/right-sidebar/right-sidebar.component.d.ts.map +1 -1
  331. package/lib/components/right-sidebar/right-sidebar.module.d.ts +1 -1
  332. package/lib/components/right-sidebar/right-sidebar.module.d.ts.map +1 -1
  333. package/lib/components/search-fields/search-fields.component.d.ts +11 -8
  334. package/lib/components/search-fields/search-fields.component.d.ts.map +1 -1
  335. package/lib/components/search-fields/search-fields.module.d.ts +2 -2
  336. package/lib/components/search-fields/search-fields.module.d.ts.map +1 -1
  337. package/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.d.ts +2 -1
  338. package/lib/components/searchable-dropdown-select/searchable-dropdown-select.component.d.ts.map +1 -1
  339. package/lib/components/select/select.component.d.ts +3 -1
  340. package/lib/components/select/select.component.d.ts.map +1 -1
  341. package/lib/components/status-selector/status-selector.component.d.ts +24 -0
  342. package/lib/components/status-selector/status-selector.component.d.ts.map +1 -0
  343. package/lib/components/stepper/stepper.module.d.ts +2 -1
  344. package/lib/components/stepper/stepper.module.d.ts.map +1 -1
  345. package/lib/components/timeline/timeline.module.d.ts +2 -1
  346. package/lib/components/timeline/timeline.module.d.ts.map +1 -1
  347. package/lib/components/topbar/topbar.component.d.ts +17 -11
  348. package/lib/components/topbar/topbar.component.d.ts.map +1 -1
  349. package/lib/components/uploader/uploader.component.d.ts +3 -4
  350. package/lib/components/uploader/uploader.component.d.ts.map +1 -1
  351. package/lib/components/view-content/type-converters/booleanTypeConverter.d.ts +6 -0
  352. package/lib/components/view-content/type-converters/booleanTypeConverter.d.ts.map +1 -1
  353. package/lib/components/view-content/type-converters/currencyTypeConverter.d.ts +7 -0
  354. package/lib/components/view-content/type-converters/currencyTypeConverter.d.ts.map +1 -0
  355. package/lib/components/view-content/type-converters/dateTimeTypeConverter.d.ts +6 -0
  356. package/lib/components/view-content/type-converters/dateTimeTypeConverter.d.ts.map +1 -0
  357. package/lib/components/view-content/type-converters/dateTypeConverter.d.ts.map +1 -1
  358. package/lib/components/view-content/type-converters/enumTypeConverter.d.ts.map +1 -1
  359. package/lib/components/view-content/type-converters/numberTypeConverter.d.ts +7 -0
  360. package/lib/components/view-content/type-converters/numberTypeConverter.d.ts.map +1 -0
  361. package/lib/components/view-content/type-converters/percentTypeConverter.d.ts +7 -0
  362. package/lib/components/view-content/type-converters/percentTypeConverter.d.ts.map +1 -0
  363. package/lib/components/view-content/type-converters/relatedFilesTypeConverter.d.ts.map +1 -1
  364. package/lib/components/view-content/type-converters/stringReplaceUnderscoreTypeConverter.d.ts.map +1 -1
  365. package/lib/components/view-content/type-converters/stringTypeConverter.d.ts.map +1 -1
  366. package/lib/components/view-content/type-converters/type-converters.model.d.ts +13 -1
  367. package/lib/components/view-content/type-converters/type-converters.model.d.ts.map +1 -1
  368. package/lib/components/view-content/view-content.module.d.ts +8 -0
  369. package/lib/components/view-content/view-content.module.d.ts.map +1 -0
  370. package/lib/components/view-content/view-content.service.d.ts +1 -5
  371. package/lib/components/view-content/view-content.service.d.ts.map +1 -1
  372. package/lib/constants/carbon.constants.d.ts +1 -0
  373. package/lib/constants/carbon.constants.d.ts.map +1 -1
  374. package/lib/constants/index.d.ts +1 -0
  375. package/lib/constants/index.d.ts.map +1 -1
  376. package/lib/constants/status.constants.d.ts +3 -0
  377. package/lib/constants/status.constants.d.ts.map +1 -0
  378. package/lib/constants/view-type-converter.constants.d.ts.map +1 -1
  379. package/lib/directives/fit-page/fit-page-directive.module.d.ts +9 -0
  380. package/lib/directives/fit-page/fit-page-directive.module.d.ts.map +1 -0
  381. package/lib/directives/fit-page/fit-page.directive.d.ts +17 -0
  382. package/lib/directives/fit-page/fit-page.directive.d.ts.map +1 -0
  383. package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts +9 -4
  384. package/lib/directives/render-in-page-header/render-in-page-header.directive.d.ts.map +1 -1
  385. package/lib/directives/render-page-header/render-page-header-directive.module.d.ts +9 -0
  386. package/lib/directives/render-page-header/render-page-header-directive.module.d.ts.map +1 -0
  387. package/lib/directives/render-page-header/render-page-header.directive.d.ts +14 -0
  388. package/lib/directives/render-page-header/render-page-header.directive.d.ts.map +1 -0
  389. package/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.d.ts +9 -0
  390. package/lib/directives/render-page-subtitle/render-page-subtitle-directive.module.d.ts.map +1 -0
  391. package/lib/directives/render-page-subtitle/render-page-subtitle.directive.d.ts +15 -0
  392. package/lib/directives/render-page-subtitle/render-page-subtitle.directive.d.ts.map +1 -0
  393. package/lib/models/carbon-list.model.d.ts +22 -2
  394. package/lib/models/carbon-list.model.d.ts.map +1 -1
  395. package/lib/models/carbon-tag.model.d.ts +8 -0
  396. package/lib/models/carbon-tag.model.d.ts.map +1 -0
  397. package/lib/models/carbon-theme.model.d.ts +8 -0
  398. package/lib/models/carbon-theme.model.d.ts.map +1 -0
  399. package/lib/models/choice-field.model.d.ts +15 -0
  400. package/lib/models/choice-field.model.d.ts.map +1 -0
  401. package/lib/models/choicefield-value.model.d.ts +21 -0
  402. package/lib/models/choicefield-value.model.d.ts.map +1 -0
  403. package/lib/models/editor.model.d.ts +11 -4
  404. package/lib/models/editor.model.d.ts.map +1 -1
  405. package/lib/models/form-io.model.d.ts +1 -1
  406. package/lib/models/form-io.model.d.ts.map +1 -1
  407. package/lib/models/index.d.ts +9 -2
  408. package/lib/models/index.d.ts.map +1 -1
  409. package/lib/models/modal.model.d.ts +2 -1
  410. package/lib/models/modal.model.d.ts.map +1 -1
  411. package/lib/models/multi-input.model.d.ts +8 -4
  412. package/lib/models/multi-input.model.d.ts.map +1 -1
  413. package/lib/models/right-sidebar.model.d.ts +6 -0
  414. package/lib/models/right-sidebar.model.d.ts.map +1 -0
  415. package/lib/models/theme.model.d.ts +11 -0
  416. package/lib/models/theme.model.d.ts.map +1 -0
  417. package/lib/models/topbar.model.d.ts +6 -0
  418. package/lib/models/topbar.model.d.ts.map +1 -0
  419. package/lib/modules/custom-formio-component/create-custom-component.d.ts +239 -0
  420. package/lib/modules/custom-formio-component/create-custom-component.d.ts.map +1 -0
  421. package/lib/modules/custom-formio-component/custom-tags.service.d.ts +8 -0
  422. package/lib/modules/custom-formio-component/custom-tags.service.d.ts.map +1 -0
  423. package/lib/modules/custom-formio-component/elements.common.d.ts +31 -0
  424. package/lib/modules/custom-formio-component/elements.common.d.ts.map +1 -0
  425. package/lib/modules/custom-formio-component/index.d.ts +5 -0
  426. package/lib/modules/custom-formio-component/index.d.ts.map +1 -0
  427. package/lib/modules/custom-formio-component/register-custom-component.d.ts +7 -0
  428. package/lib/modules/custom-formio-component/register-custom-component.d.ts.map +1 -0
  429. package/lib/modules/index.d.ts +2 -0
  430. package/lib/modules/index.d.ts.map +1 -0
  431. package/lib/services/cds-theme.service.d.ts +20 -0
  432. package/lib/services/cds-theme.service.d.ts.map +1 -0
  433. package/lib/services/choice-field.service.d.ts +27 -0
  434. package/lib/services/choice-field.service.d.ts.map +1 -0
  435. package/lib/services/index.d.ts +6 -0
  436. package/lib/services/index.d.ts.map +1 -1
  437. package/lib/services/key-generator.service.d.ts +8 -0
  438. package/lib/services/key-generator.service.d.ts.map +1 -0
  439. package/lib/services/key-state.service.d.ts +12 -0
  440. package/lib/services/key-state.service.d.ts.map +1 -0
  441. package/lib/services/page-header.service.d.ts +30 -0
  442. package/lib/services/page-header.service.d.ts.map +1 -0
  443. package/lib/services/page-subtitle.service.d.ts +14 -0
  444. package/lib/services/page-subtitle.service.d.ts.map +1 -0
  445. package/lib/{components/page-title → services}/page-title.service.d.ts +3 -0
  446. package/lib/services/page-title.service.d.ts.map +1 -0
  447. package/package.json +24 -19
  448. package/public_api.d.ts +11 -5
  449. package/public_api.d.ts.map +1 -1
  450. package/assets/css/carbon-beagle-compatibility.scss +0 -188
  451. package/esm2022/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.mjs +0 -223
  452. package/esm2022/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.mjs +0 -74
  453. package/esm2022/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.mjs +0 -305
  454. package/esm2022/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.mjs +0 -147
  455. package/esm2022/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.mjs +0 -46
  456. package/esm2022/lib/components/page-title/page-title.service.mjs +0 -117
  457. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts +0 -76
  458. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.component.d.ts.map +0 -1
  459. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts +0 -18
  460. package/lib/components/documenten-api-metadata-modal/documenten-api-metadata-modal.module.d.ts.map +0 -1
  461. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.d.ts +0 -105
  462. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader-edit-form.d.ts.map +0 -1
  463. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.d.ts +0 -61
  464. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.component.d.ts.map +0 -1
  465. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.d.ts +0 -4
  466. package/lib/components/form-io/documenten-api-uploader/documenten-api-uploader.formio.d.ts.map +0 -1
  467. package/lib/components/page-title/page-title.service.d.ts.map +0 -1
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2015-2023 Ritense BV, the Netherlands.
2
+ * Copyright 2015-2024 Ritense BV, the Netherlands.
3
3
  *
4
4
  * Licensed under EUPL, Version 1.2 (the "License");
5
5
  * you may not use this file except in compliance with the License.
@@ -14,36 +14,37 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { Component, EventEmitter, Input, Output } from '@angular/core';
17
- import { BehaviorSubject, combineLatest, map, Subject, take } from 'rxjs';
17
+ import { BehaviorSubject, combineLatest, map, Subject, Subscription, take } from 'rxjs';
18
+ import { ChevronDown16, ChevronUp16 } from '@carbon/icons';
18
19
  import * as i0 from "@angular/core";
19
20
  import * as i1 from "@valtimo/document";
20
21
  import * as i2 from "@ngx-translate/core";
21
- import * as i3 from "@angular/common";
22
- import * as i4 from "../spinner/spinner.component";
23
- import * as i5 from "../widget/widget.component";
24
- import * as i6 from "../input/input.component";
25
- import * as i7 from "../form/form.component";
26
- import * as i8 from "../date-picker/date-picker.component";
27
- import * as i9 from "../input-label/input-label.component";
28
- import * as i10 from "../paragraph/paragraph.component";
29
- import * as i11 from "../select/select.component";
22
+ import * as i3 from "carbon-components-angular";
23
+ import * as i4 from "@angular/common";
24
+ import * as i5 from "../input/input.component";
25
+ import * as i6 from "../form/form.component";
26
+ import * as i7 from "../date-picker/date-picker.component";
27
+ import * as i8 from "../input-label/input-label.component";
28
+ import * as i9 from "../paragraph/paragraph.component";
29
+ import * as i10 from "../select/select.component";
30
30
  export class SearchFieldsComponent {
31
31
  set searchFields(fields) {
32
32
  this.searchFields$.next(fields);
33
33
  }
34
34
  set documentDefinitionName(documentDefinitionName) {
35
- this.documentDefinitionName$.pipe(take(1)).subscribe(currentDocumentDefinitionName => {
35
+ this._documentDefinitionName$.pipe(take(1)).subscribe(currentDocumentDefinitionName => {
36
36
  if (currentDocumentDefinitionName !== documentDefinitionName) {
37
- this.documentDefinitionName$.next(documentDefinitionName);
37
+ this._documentDefinitionName$.next(documentDefinitionName);
38
38
  }
39
39
  });
40
40
  }
41
- constructor(documentService, translateService) {
41
+ constructor(documentService, translateService, iconService) {
42
42
  this.documentService = documentService;
43
43
  this.translateService = translateService;
44
+ this.iconService = iconService;
44
45
  this.inputDisabled = false;
46
+ this.externalSearchField = false;
45
47
  this.doSearch = new EventEmitter();
46
- this.documentDefinitionName$ = new BehaviorSubject('');
47
48
  this.searchFields$ = new BehaviorSubject([]);
48
49
  this.values$ = new BehaviorSubject({});
49
50
  this.hasValidValues$ = this.values$.pipe(map(values => {
@@ -54,25 +55,32 @@ export class SearchFieldsComponent {
54
55
  }));
55
56
  this.expanded$ = new BehaviorSubject(false);
56
57
  this.clear$ = new Subject();
58
+ this._documentDefinitionName$ = new BehaviorSubject('');
59
+ this._subscriptions = new Subscription();
57
60
  this.BOOLEAN_POSITIVE = 'booleanPositive';
58
61
  this.BOOLEAN_NEGATIVE = 'booleanNegative';
59
- this.BOOLEANTYPES = [this.BOOLEAN_POSITIVE, this.BOOLEAN_NEGATIVE];
60
- this.booleanItems$ = this.translateService.stream('key').pipe(map(() => this.BOOLEANTYPES.map(type => ({
62
+ this._BOOLEAN_TYPES = [
63
+ this.BOOLEAN_POSITIVE,
64
+ this.BOOLEAN_NEGATIVE,
65
+ ];
66
+ this.booleanItems$ = this.translateService
67
+ .stream('key')
68
+ .pipe(map(() => this._BOOLEAN_TYPES.map(type => ({
61
69
  id: type,
62
70
  text: this.translateService.instant(`searchFields.${type}`),
63
71
  }))));
64
72
  this.dropdownSelectItemsMap = new Map();
73
+ this.iconService.registerAll([ChevronDown16, ChevronUp16]);
65
74
  }
66
75
  ngOnInit() {
67
76
  this.openDocumentDefinitionNameSubscription();
68
77
  this.openValuesSubjectSubscription();
78
+ this.openClearSubscription();
69
79
  this.openDropdownSubscription();
70
80
  this.setDefaultValues();
71
81
  }
72
82
  ngOnDestroy() {
73
- this.documentDefinitionNameSubscription?.unsubscribe();
74
- this.valuesSubjectSubscription?.unsubscribe();
75
- this.dropdownSubscription?.unsubscribe();
83
+ this._subscriptions.unsubscribe();
76
84
  }
77
85
  singleValueChange(searchFieldKey, value, isDateTime) {
78
86
  this.values$.pipe(take(1)).subscribe(values => {
@@ -147,24 +155,32 @@ export class SearchFieldsComponent {
147
155
  return value;
148
156
  }
149
157
  openDocumentDefinitionNameSubscription() {
150
- this.documentDefinitionNameSubscription = this.documentDefinitionName$.subscribe(() => {
158
+ this._subscriptions.add(this._documentDefinitionName$.subscribe(() => {
151
159
  this.collapse();
152
160
  this.clear();
153
- });
161
+ }));
154
162
  }
155
163
  openValuesSubjectSubscription() {
156
164
  if (this.setValuesSubject$) {
157
- this.valuesSubjectSubscription = this.setValuesSubject$.subscribe(values => {
165
+ this._subscriptions.add(this.setValuesSubject$.subscribe(values => {
158
166
  if (Object.keys(values || {}).length > 0) {
159
167
  this.values$.next(values);
160
168
  this.search();
161
169
  this.expand();
162
170
  }
163
- });
171
+ }));
172
+ }
173
+ }
174
+ openClearSubscription() {
175
+ if (this.clearValuesSubject$) {
176
+ this._subscriptions.add(this.clearValuesSubject$.subscribe(values => {
177
+ this.values$.next({});
178
+ this.search();
179
+ }));
164
180
  }
165
181
  }
166
182
  openDropdownSubscription() {
167
- this.dropdownSubscription = combineLatest([this.documentDefinitionName$, this.searchFields$])
183
+ this._subscriptions.add(combineLatest([this._documentDefinitionName$, this.searchFields$])
168
184
  .pipe(map(([documentDefinitionName, searchFields]) => searchFields
169
185
  ?.filter(searchField => searchField.dropdownDataProvider)
170
186
  .map(searchField => this.documentService
@@ -180,7 +196,7 @@ export class SearchFieldsComponent {
180
196
  this.dropdownSelectItemsMap[searchField.key] = [];
181
197
  }
182
198
  }))))
183
- .subscribe();
199
+ .subscribe());
184
200
  }
185
201
  collapse() {
186
202
  this.expanded$.next(false);
@@ -197,13 +213,13 @@ export class SearchFieldsComponent {
197
213
  this.expand();
198
214
  }
199
215
  }
200
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchFieldsComponent, deps: [{ token: i1.DocumentService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
201
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName", setValuesSubject$: "setValuesSubject$", defaultValues: "defaultValues", inputDisabled: "inputDisabled" }, outputs: { doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n [disabled]=\"inputDisabled\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields || inputDisabled\"\n type=\"button\"\n id=\"clear\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"\n loading || noSearchFields || (hasValidValues$ | async) === false || inputDisabled\n \"\n type=\"button\"\n id=\"search\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading || inputDisabled\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:flex-end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.SpinnerComponent, selector: "valtimo-spinner", inputs: ["useBootstrapSpinner", "name", "type", "size", "color", "bdColor", "fullScreen", "noMarginTop"] }, { kind: "component", type: i5.WidgetComponent, selector: "valtimo-widget", inputs: ["type", "name", "icon", "contrast", "divider", "title", "subtitle", "collapseAble", "collapse", "additionalClasses"] }, { kind: "component", type: i6.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder"], outputs: ["valueChange"] }, { kind: "component", type: i7.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i8.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime", "carbonTheme"], outputs: ["valueChange"] }, { kind: "component", type: i9.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "component", type: i10.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { kind: "component", type: i11.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme"], outputs: ["selectedChange"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
216
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: SearchFieldsComponent, deps: [{ token: i1.DocumentService }, { token: i2.TranslateService }, { token: i3.IconService }], target: i0.ɵɵFactoryTarget.Component }); }
217
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: SearchFieldsComponent, selector: "valtimo-search-fields", inputs: { loading: "loading", searchFields: "searchFields", documentDefinitionName: "documentDefinitionName", setValuesSubject$: "setValuesSubject$", clearValuesSubject$: "clearValuesSubject$", defaultValues: "defaultValues", inputDisabled: "inputDisabled", externalSearchField: "externalSearchField" }, outputs: { doSearch: "doSearch" }, ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"!loading\">\n <cds-accordion>\n <cds-accordion-item\n [title]=\"'searchFields.searchButtonText' | translate\"\n (selected)=\"toggleExpanded()\"\n [expanded]=\"expanded$ | async\"\n >\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </cds-accordion-item>\n </cds-accordion>\n</ng-container>\n\n<ng-template #loadingTemplate>\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <ng-container *ngIf=\"searchFields$ | async as searchFields\">\n <ng-container\n *ngIf=\"{\n noSearchFields: (!searchFields || searchFields.length === 0) && !externalSearchField\n } as vars\"\n >\n <div\n *ngIf=\"!vars.noSearchFields\"\n class=\"search-fields-container\"\n [ngClass]=\"{'search-fields-container--hidden': (expanded$ | async) === false}\"\n >\n <ng-content></ng-content>\n\n <ng-container *ngFor=\"let searchField of searchFields\">\n <div class=\"search-field-container\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n\n <div class=\"meta-container\" *ngIf=\"expanded$ | async\">\n <ng-container\n *ngTemplateOutlet=\"buttonsTemplate; context: {noSearchFields: vars.noSearchFields}\"\n ></ng-container>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"\n searchField.dataType === 'text' &&\n (searchField.fieldType === 'single-select-dropdown' ||\n searchField.fieldType === 'single_select_dropdown')\n \"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"\n searchField.dataType === 'text' &&\n (searchField.fieldType === 'multi-select-dropdown' ||\n searchField.fieldType === 'multi_select_dropdown')\n \"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n\n <div class=\"buttons-container\" *ngIf=\"!noSearchFields && {expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n *ngIf=\"obs.expanded\"\n cdsButton=\"tertiary\"\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields || inputDisabled\"\n type=\"button\"\n id=\"clear\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.expanded\"\n cdsButton=\"primary\"\n (click)=\"search()\"\n [disabled]=\"\n loading || noSearchFields || (hasValidValues$ | async) === false || inputDisabled\n \"\n type=\"button\"\n id=\"search\"\n >\n <svg cdsIcon=\"search\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"no-search-fields-message\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n", styles: ["::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;justify-content:flex-end}.right-buttons{display:flex;flex-direction:row;gap:16px}.search-fields-container{padding-bottom:16px;padding-top:16px;display:grid;gap:16px;grid-template-columns:repeat(3,1fr)}.search-fields-container--hidden{display:none}.meta-container{width:100%;padding-bottom:16px}.loading-container{display:flex;width:100%;justify-content:center}.no-search-fields-message{display:flex;width:100%;justify-content:center;margin-top:16px}.search-fields-tile{padding:0}::ng-deep .cds--accordion{background-color:var(--cds-layer)}::ng-deep .cds--accordion__item{border-inline-start:1px solid var(--cds-border-subtle);border-inline-end:1px solid var(--cds-border-subtle)}::ng-deep .cds--accordion__content{padding:0 16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i5.InputComponent, selector: "v-input", inputs: ["name", "type", "title", "titleTranslationKey", "defaultValue", "widthPx", "fullWidth", "margin", "smallMargin", "disabled", "step", "min", "maxLength", "tooltip", "required", "hideNumberSpinBox", "smallLabel", "rows", "clear$", "carbonTheme", "placeholder"], outputs: ["valueChange"] }, { kind: "component", type: i6.FormComponent, selector: "v-form", inputs: ["className"], outputs: ["valueChange"] }, { kind: "component", type: i7.DatePickerComponent, selector: "v-date-picker", inputs: ["name", "title", "titleTranslationKey", "widthPx", "fullWidth", "margin", "disabled", "tooltip", "required", "defaultDate", "defaultDateIsToday", "smallLabel", "clear$", "enableTime", "carbonTheme"], outputs: ["valueChange"] }, { kind: "component", type: i8.InputLabelComponent, selector: "v-input-label", inputs: ["name", "tooltip", "largeMargin", "small", "noMargin", "title", "titleTranslationKey", "required", "disabled", "carbonTheme"] }, { kind: "component", type: i9.ParagraphComponent, selector: "v-paragraph", inputs: ["center", "fullWidth", "margin", "italic", "loading"] }, { kind: "directive", type: i3.Button, selector: "[cdsButton], [ibmButton]", inputs: ["ibmButton", "cdsButton", "size", "skeleton", "iconOnly", "isExpressive"] }, { kind: "component", type: i10.SelectComponent, selector: "v-select", inputs: ["items", "defaultSelection", "defaultSelectionId", "defaultSelectionIds", "disabled", "dropUp", "multiple", "margin", "widthInPx", "notFoundText", "clearAllText", "clearText", "name", "title", "titleTranslationKey", "clearSelectionSubject$", "tooltip", "required", "loading", "loadingText", "placeholder", "smallMargin", "carbonTheme", "appendInline"], outputs: ["selectedChange"] }, { kind: "component", type: i3.Accordion, selector: "cds-accordion, ibm-accordion", inputs: ["align", "size", "skeleton"] }, { kind: "component", type: i3.AccordionItem, selector: "cds-accordion-item, ibm-accordion-item", inputs: ["title", "context", "id", "skeleton", "expanded", "disabled"], outputs: ["selected"] }, { kind: "directive", type: i3.IconDirective, selector: "[cdsIcon], [ibmIcon]", inputs: ["ibmIcon", "cdsIcon", "size", "title", "ariaLabel", "ariaLabelledBy", "ariaHidden", "isFocusable"] }, { kind: "component", type: i3.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] }); }
202
218
  }
203
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SearchFieldsComponent, decorators: [{
219
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: SearchFieldsComponent, decorators: [{
204
220
  type: Component,
205
- args: [{ selector: 'valtimo-search-fields', template: "<!--\n ~ Copyright 2015-2023 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div class=\"search fields\">\n <ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </ng-container>\n</div>\n\n<ng-template #loadingTemplate>\n <valtimo-spinner></valtimo-spinner>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <valtimo-widget>\n <div class=\"row\">\n <div class=\"col-12\">\n <ng-container *ngTemplateOutlet=\"buttonAccordion\"></ng-container>\n </div>\n </div>\n <div\n class=\"row p-3\"\n [ngClass]=\"{'row--hidden': (expanded$ | async) === false}\"\n *ngIf=\"searchFields$ | async as searchFields\"\n >\n <ng-container *ngFor=\"let searchField of searchFields; let i = index\">\n <div class=\"col-4\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n <div class=\"w-100\" *ngIf=\"(i + 1) % 3 === 0\"></div>\n </ng-container>\n <div class=\"col-12\">\n <ng-container\n *ngTemplateOutlet=\"\n buttonsTemplate;\n context: {noSearchFields: !searchFields || searchFields.length === 0}\n \"\n ></ng-container>\n </div>\n </div>\n </valtimo-widget>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n [disabled]=\"inputDisabled\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'multi-select-dropdown'\"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [widthInPx]=\"200\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields || inputDisabled\"\n type=\"button\"\n id=\"clear\"\n class=\"btn btn-space btn-secondary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n <button\n (click)=\"search()\"\n [disabled]=\"\n loading || noSearchFields || (hasValidValues$ | async) === false || inputDisabled\n \"\n type=\"button\"\n id=\"search\"\n class=\"btn btn-space btn-primary\"\n *ngIf=\"obs.expanded\"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"w-100 mb-3\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonAccordion>\n <div class=\"buttons-container\" *ngIf=\"{expanded: expanded$ | async} as obs\">\n <button\n [disabled]=\"loading || inputDisabled\"\n type=\"button\"\n class=\"accordion-button\"\n (click)=\"toggleExpanded()\"\n [ngClass]=\"\n obs.expanded ? 'mdi mdi-chevron-right accordion-button--active' : 'mdi mdi-chevron-down'\n \"\n >\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n</ng-template>\n", styles: ["/*!\n * Copyright 2015-2023 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */.w-100{height:15px}.w-100:last-child{display:none}::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;flex-direction:row;justify-content:flex-end}.right-buttons{display:flex;flex-direction:row}.right-buttons v-button:last-child{margin-left:8px}.row--hidden{display:none}.accordion-button{display:block;width:100%;padding:15px;border:none;outline:none;cursor:pointer;background:#f8f9f9;text-align:left;transition:background .2s;font-size:1.2rem;color:#404040}.accordion-button--active{background:#f1f1f1}\n"] }]
206
- }], ctorParameters: function () { return [{ type: i1.DocumentService }, { type: i2.TranslateService }]; }, propDecorators: { loading: [{
221
+ args: [{ selector: 'valtimo-search-fields', template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<ng-container *ngIf=\"loading\">\n <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\n</ng-container>\n<ng-container *ngIf=\"!loading\">\n <cds-accordion>\n <cds-accordion-item\n [title]=\"'searchFields.searchButtonText' | translate\"\n (selected)=\"toggleExpanded()\"\n [expanded]=\"expanded$ | async\"\n >\n <ng-container *ngTemplateOutlet=\"searchFieldsTemplate\"></ng-container>\n </cds-accordion-item>\n </cds-accordion>\n</ng-container>\n\n<ng-template #loadingTemplate>\n <div class=\"loading-container\"><cds-loading></cds-loading></div>\n</ng-template>\n\n<ng-template #searchFieldsTemplate>\n <ng-container *ngIf=\"searchFields$ | async as searchFields\">\n <ng-container\n *ngIf=\"{\n noSearchFields: (!searchFields || searchFields.length === 0) && !externalSearchField\n } as vars\"\n >\n <div\n *ngIf=\"!vars.noSearchFields\"\n class=\"search-fields-container\"\n [ngClass]=\"{'search-fields-container--hidden': (expanded$ | async) === false}\"\n >\n <ng-content></ng-content>\n\n <ng-container *ngFor=\"let searchField of searchFields\">\n <div class=\"search-field-container\">\n <ng-container\n *ngTemplateOutlet=\"searchFieldTemplate; context: {searchField: searchField}\"\n ></ng-container>\n </div>\n </ng-container>\n </div>\n\n <div class=\"meta-container\" *ngIf=\"expanded$ | async\">\n <ng-container\n *ngTemplateOutlet=\"buttonsTemplate; context: {noSearchFields: vars.noSearchFields}\"\n ></ng-container>\n </div>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #searchFieldTemplate let-searchField=\"searchField\">\n <ng-container\n *ngIf=\"{\n values: values$ | async,\n tooltipKey: 'searchFieldsTooltips.' + searchField.key,\n tooltip: 'searchFieldsTooltips.' + searchField.key | translate,\n searchField,\n title:\n searchField.title ||\n ('searchFields.' + searchField.key !== ('searchFields.' + searchField.key | translate)\n ? ('searchFields.' + searchField.key | translate)\n : searchField.key)\n } as vars\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateText;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumber;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDate;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateBoolean;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTime;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateNumberRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateTextRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateDateTimeRange;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateSingleSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n <ng-container\n *ngTemplateOutlet=\"\n searchFieldTemplateMultiSelectDropdown;\n context: {\n searchField: searchField,\n tooltipKey: vars.tooltipKey,\n tooltip: vars.tooltip,\n title: vars.title,\n values: vars.values\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateText\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumber\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-input\n *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'single'\"\n [name]=\"searchField.key\"\n [title]=\"title\"\n [fullWidth]=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDate\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event)\"\n [smallLabel]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateTextRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'text' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateNumberRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'number' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-input\n name=\"start\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-input\n name=\"end\"\n [fullWidth]=\"true\"\n type=\"number\"\n [hideNumberSpinBox]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultValue]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n >\n </v-input>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'date' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateBoolean\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'boolean'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"booleanItems$ | async as booleanItems\"\n [items]=\"booleanItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"getDefaultBooleanSelectionId(values, searchField.key)\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTime\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <v-date-picker\n *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'single'\"\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [name]=\"searchField.key\"\n fullWidth=\"true\"\n (valueChange)=\"singleValueChange(searchField.key, $event, true)\"\n [smallLabel]=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateDateTimeRange\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container *ngIf=\"searchField.dataType === 'datetime' && searchField.fieldType === 'range'\">\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-form\n (valueChange)=\"multipleValueChange(searchField.key, $event, true)\"\n className=\"multiple-search-fields\"\n >\n <v-date-picker\n name=\"start\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.start\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n <ng-container *ngTemplateOutlet=\"toText\"></ng-container>\n <v-date-picker\n name=\"end\"\n fullWidth=\"true\"\n [enableTime]=\"true\"\n [clear$]=\"clear$\"\n (keyup.enter)=\"search()\"\n [defaultDate]=\"values[searchField.key]?.end\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n ></v-date-picker>\n </v-form>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateSingleSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"\n searchField.dataType === 'text' &&\n (searchField.fieldType === 'single-select-dropdown' ||\n searchField.fieldType === 'single_select_dropdown')\n \"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [required]=\"false\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"singleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionId]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template\n #searchFieldTemplateMultiSelectDropdown\n let-searchField=\"searchField\"\n let-tooltip=\"tooltip\"\n let-tooltipKey=\"tooltipKey\"\n let-title=\"title\"\n let-values=\"values\"\n>\n <ng-container\n *ngIf=\"\n searchField.dataType === 'text' &&\n (searchField.fieldType === 'multi-select-dropdown' ||\n searchField.fieldType === 'multi_select_dropdown')\n \"\n >\n <v-input-label\n [title]=\"title\"\n [tooltip]=\"tooltip !== tooltipKey && tooltip\"\n [small]=\"true\"\n ></v-input-label>\n <v-select\n *ngIf=\"dropdownSelectItemsMap[searchField.key] as searchFieldSelectItems\"\n [items]=\"searchFieldSelectItems\"\n [margin]=\"false\"\n [multiple]=\"true\"\n [required]=\"false\"\n [name]=\"searchField.key\"\n [clearSelectionSubject$]=\"clear$\"\n (selectedChange)=\"multipleValueChange(searchField.key, $event)\"\n (keyup.enter)=\"search()\"\n [defaultSelectionIds]=\"values[searchField.key]\"\n [disabled]=\"inputDisabled\"\n [carbonTheme]=\"carbonTheme\"\n [appendInline]=\"false\"\n ></v-select>\n </ng-container>\n</ng-template>\n\n<ng-template #toText>\n <div class=\"to-text\">\n <v-paragraph>{{ 'searchFields.to' | translate }}</v-paragraph>\n </div>\n</ng-template>\n\n<ng-template #buttonsTemplate let-noSearchFields=\"noSearchFields\">\n <ng-container\n *ngTemplateOutlet=\"noSearchFieldsTemplate; context: {noSearchFields: noSearchFields}\"\n ></ng-container>\n\n <div class=\"buttons-container\" *ngIf=\"!noSearchFields && {expanded: expanded$ | async} as obs\">\n <div class=\"right-buttons\">\n <button\n *ngIf=\"obs.expanded\"\n cdsButton=\"tertiary\"\n (click)=\"clear()\"\n [disabled]=\"loading || noSearchFields || inputDisabled\"\n type=\"button\"\n id=\"clear\"\n >\n <svg cdsIcon=\"trash-can\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFields.clearButtonText' | translate }}\n </button>\n\n <button\n *ngIf=\"obs.expanded\"\n cdsButton=\"primary\"\n (click)=\"search()\"\n [disabled]=\"\n loading || noSearchFields || (hasValidValues$ | async) === false || inputDisabled\n \"\n type=\"button\"\n id=\"search\"\n >\n <svg cdsIcon=\"search\" size=\"16\" class=\"cds--btn__icon\"></svg>\n\n {{ 'searchFields.searchButtonText' | translate }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #noSearchFieldsTemplate let-noSearchFields=\"noSearchFields\">\n <div class=\"no-search-fields-message\" *ngIf=\"noSearchFields\">\n <v-paragraph [fullWidth]=\"true\" [center]=\"true\">{{\n 'searchFields.noneConfigured' | translate\n }}</v-paragraph>\n </div>\n</ng-template>\n", styles: ["::ng-deep .multiple-search-fields{display:flex!important;flex-direction:row!important;align-items:center}.to-text{margin-inline-start:8px;margin-inline-end:8px}.buttons-container{width:100%;display:flex;justify-content:flex-end}.right-buttons{display:flex;flex-direction:row;gap:16px}.search-fields-container{padding-bottom:16px;padding-top:16px;display:grid;gap:16px;grid-template-columns:repeat(3,1fr)}.search-fields-container--hidden{display:none}.meta-container{width:100%;padding-bottom:16px}.loading-container{display:flex;width:100%;justify-content:center}.no-search-fields-message{display:flex;width:100%;justify-content:center;margin-top:16px}.search-fields-tile{padding:0}::ng-deep .cds--accordion{background-color:var(--cds-layer)}::ng-deep .cds--accordion__item{border-inline-start:1px solid var(--cds-border-subtle);border-inline-end:1px solid var(--cds-border-subtle)}::ng-deep .cds--accordion__content{padding:0 16px}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
222
+ }], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.TranslateService }, { type: i3.IconService }], propDecorators: { loading: [{
207
223
  type: Input
208
224
  }], searchFields: [{
209
225
  type: Input
@@ -211,11 +227,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
211
227
  type: Input
212
228
  }], setValuesSubject$: [{
213
229
  type: Input
230
+ }], clearValuesSubject$: [{
231
+ type: Input
214
232
  }], defaultValues: [{
215
233
  type: Input
216
234
  }], inputDisabled: [{
217
235
  type: Input
236
+ }], externalSearchField: [{
237
+ type: Input
218
238
  }], doSearch: [{
219
239
  type: Output
220
240
  }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQWdCLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7OztBQVVsRyxNQUFNLE9BQU8scUJBQXFCO0lBRWhDLElBQWEsWUFBWSxDQUFDLE1BQTBCO1FBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFhLHNCQUFzQixDQUFDLHNCQUE4QjtRQUNoRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFO1lBQ25GLElBQUksNkJBQTZCLEtBQUssc0JBQXNCLEVBQUU7Z0JBQzVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQzthQUMzRDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQStDRCxZQUNtQixlQUFnQyxFQUNoQyxn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QUNOLENBQ0Y7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRU8sUUFBUTtRQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUNFLElBQUksQ0FBQyxhQUFhO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxRQUFRO1lBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQzFDO1lBQ0EsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUNmO0lBQ0gsQ0FBQzsrR0E5TlUscUJBQXFCO21HQUFyQixxQkFBcUIsd1RDNUJsQywycWxCQXFuQkE7OzRGRHpsQmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHVCQUF1QjtxSUFLeEIsT0FBTztzQkFBZixLQUFLO2dCQUNPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBR08sc0JBQXNCO3NCQUFsQyxLQUFLO2dCQU9HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0ksUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U2VhcmNoRmllbGQsIFNlYXJjaEZpZWxkQm9vbGVhbiwgU2VhcmNoRmllbGRWYWx1ZXN9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2V9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtTZWxlY3RJdGVtfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tc2VhcmNoLWZpZWxkcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZmllbGRzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTZWFyY2hGaWVsZHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHNldCBzZWFyY2hGaWVsZHMoZmllbGRzOiBBcnJheTxTZWFyY2hGaWVsZD4pIHtcbiAgICB0aGlzLnNlYXJjaEZpZWxkcyQubmV4dChmaWVsZHMpO1xuICB9XG4gIEBJbnB1dCgpIHNldCBkb2N1bWVudERlZmluaXRpb25OYW1lKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoY3VycmVudERvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4ge1xuICAgICAgaWYgKGN1cnJlbnREb2N1bWVudERlZmluaXRpb25OYW1lICE9PSBkb2N1bWVudERlZmluaXRpb25OYW1lKSB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnREZWZpbml0aW9uTmFtZSQubmV4dChkb2N1bWVudERlZmluaXRpb25OYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBASW5wdXQoKSBzZXRWYWx1ZXNTdWJqZWN0JDogT2JzZXJ2YWJsZTxTZWFyY2hGaWVsZFZhbHVlcz47XG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZXM6IFNlYXJjaEZpZWxkVmFsdWVzO1xuICBASW5wdXQoKSBpbnB1dERpc2FibGVkID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBkb1NlYXJjaDogRXZlbnRFbWl0dGVyPFNlYXJjaEZpZWxkVmFsdWVzPiA9IG5ldyBFdmVudEVtaXR0ZXI8U2VhcmNoRmllbGRWYWx1ZXM+KCk7XG5cbiAgcmVhZG9ubHkgZG9jdW1lbnREZWZpbml0aW9uTmFtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IHNlYXJjaEZpZWxkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PFNlYXJjaEZpZWxkPj4oW10pO1xuXG4gIHJlYWRvbmx5IHZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaEZpZWxkVmFsdWVzPih7fSk7XG5cbiAgcmVhZG9ubHkgaGFzVmFsaWRWYWx1ZXMkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy52YWx1ZXMkLnBpcGUoXG4gICAgbWFwKHZhbHVlcyA9PiB7XG4gICAgICBjb25zdCBoYXNWYWx1ZXMgPSAoT2JqZWN0LmtleXModmFsdWVzKSB8fCBbXSkubGVuZ3RoID4gMDtcbiAgICAgIGNvbnN0IHJhbmdlVmFsdWVzID1cbiAgICAgICAgKGhhc1ZhbHVlcyAmJiBPYmplY3QudmFsdWVzKHZhbHVlcyk/LmZpbHRlcih2YWx1ZSA9PiAodmFsdWUgYXMgYW55KS5zdGFydCkpIHx8IFtdO1xuICAgICAgY29uc3QgdmFsaWRSYW5nZVZhbHVlcyA9IHJhbmdlVmFsdWVzPy5maWx0ZXIoXG4gICAgICAgIHZhbHVlID0+ICh2YWx1ZSBhcyBhbnkpLnN0YXJ0IDwgKHZhbHVlIGFzIGFueSkuZW5kXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gISEoaGFzVmFsdWVzICYmIHJhbmdlVmFsdWVzLmxlbmd0aCA9PT0gdmFsaWRSYW5nZVZhbHVlcy5sZW5ndGgpO1xuICAgIH0pXG4gICk7XG5cbiAgcmVhZG9ubHkgZXhwYW5kZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHJlYWRvbmx5IGNsZWFyJCA9IG5ldyBTdWJqZWN0PG51bGw+KCk7XG5cbiAgcHJpdmF0ZSBkb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGRyb3Bkb3duU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHZhbHVlc1N1YmplY3RTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSByZWFkb25seSBCT09MRUFOX1BPU0lUSVZFOiBTZWFyY2hGaWVsZEJvb2xlYW4gPSAnYm9vbGVhblBvc2l0aXZlJztcbiAgcHJpdmF0ZSByZWFkb25seSBCT09MRUFOX05FR0FUSVZFOiBTZWFyY2hGaWVsZEJvb2xlYW4gPSAnYm9vbGVhbk5lZ2F0aXZlJztcblxuICByZWFkb25seSBCT09MRUFOVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkQm9vbGVhbj4gPSBbdGhpcy5CT09MRUFOX1BPU0lUSVZFLCB0aGlzLkJPT0xFQU5fTkVHQVRJVkVdO1xuICByZWFkb25seSBib29sZWFuSXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PFNlbGVjdEl0ZW0+PiA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5zdHJlYW0oJ2tleScpLnBpcGUoXG4gICAgbWFwKCgpID0+XG4gICAgICB0aGlzLkJPT0xFQU5UWVBFUy5tYXAodHlwZSA9PiAoe1xuICAgICAgICBpZDogdHlwZSxcbiAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkcy4ke3R5cGV9YCksXG4gICAgICB9KSlcbiAgICApXG4gICk7XG5cbiAgcmVhZG9ubHkgZHJvcGRvd25TZWxlY3RJdGVtc01hcDogTWFwPHN0cmluZywgQXJyYXk8U2VsZWN0SXRlbT4+ID0gbmV3IE1hcCgpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnRTZXJ2aWNlOiBEb2N1bWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9wZW5Eb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5vcGVuVmFsdWVzU3ViamVjdFN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMub3BlbkRyb3Bkb3duU3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5zZXREZWZhdWx0VmFsdWVzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy52YWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZHJvcGRvd25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZEtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBpc0RhdGVUaW1lPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgaWYgKHZhbHVlIHx8IE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHsuLi52YWx1ZXMsIFtzZWFyY2hGaWVsZEtleV06IHRoaXMuZ2V0U2luZ2xlVmFsdWUodmFsdWUsIGlzRGF0ZVRpbWUpfSk7XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHZhbHVlcykuaW5jbHVkZXMoc2VhcmNoRmllbGRLZXkpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlc0NvcHkgPSB7Li4udmFsdWVzfTtcbiAgICAgICAgZGVsZXRlIHZhbHVlc0NvcHlbc2VhcmNoRmllbGRLZXldO1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh2YWx1ZXNDb3B5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGRLZXk6IHN0cmluZywgdmFsdWU6IGFueSwgaXNEYXRlVGltZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlcyQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgIGlmICh2YWx1ZS5zdGFydCAmJiB2YWx1ZS5lbmQpIHtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQoe1xuICAgICAgICAgIC4uLnZhbHVlcyxcbiAgICAgICAgICBbc2VhcmNoRmllbGRLZXldOiB7XG4gICAgICAgICAgICBzdGFydDogdGhpcy5nZXRTaW5nbGVWYWx1ZSh2YWx1ZS5zdGFydCwgaXNEYXRlVGltZSksXG4gICAgICAgICAgICBlbmQ6IHRoaXMuZ2V0U2luZ2xlVmFsdWUodmFsdWUuZW5kLCBpc0RhdGVUaW1lKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh7XG4gICAgICAgICAgLi4udmFsdWVzLFxuICAgICAgICAgIFtzZWFyY2hGaWVsZEtleV06IHZhbHVlLm1hcCh2ID0+IHRoaXMuZ2V0U2luZ2xlVmFsdWUodiwgaXNEYXRlVGltZSkpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWVzW3NlYXJjaEZpZWxkS2V5XSkge1xuICAgICAgICBjb25zdCB2YWx1ZXNDb3B5ID0gey4uLnZhbHVlc307XG4gICAgICAgIGRlbGV0ZSB2YWx1ZXNDb3B5W3NlYXJjaEZpZWxkS2V5XTtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQodmFsdWVzQ29weSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVFeHBhbmRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZShleHBhbmRlZCA9PiB7XG4gICAgICB0aGlzLmV4cGFuZGVkJC5uZXh0KCFleHBhbmRlZCk7XG4gICAgfSk7XG4gIH1cblxuICBzZWFyY2goKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICB0aGlzLmRvU2VhcmNoLmVtaXQodmFsdWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIkLm5leHQobnVsbCk7XG4gICAgdGhpcy5kb1NlYXJjaC5lbWl0KHt9KTtcbiAgfVxuXG4gIGdldERlZmF1bHRCb29sZWFuU2VsZWN0aW9uSWQodmFsdWVzOiBTZWFyY2hGaWVsZFZhbHVlcywgc2VhcmNoRmllbGRLZXk6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IHNlYXJjaEZpZWxkVmFsdWUgPSB2YWx1ZXNbc2VhcmNoRmllbGRLZXldO1xuXG4gICAgaWYgKHNlYXJjaEZpZWxkVmFsdWUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLkJPT0xFQU5fUE9TSVRJVkU7XG4gICAgfSBlbHNlIGlmIChzZWFyY2hGaWVsZFZhbHVlID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHRoaXMuQk9PTEVBTl9ORUdBVElWRTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldFNpbmdsZVZhbHVlKHZhbHVlOiBhbnksIGlzRGF0ZVRpbWU/OiBib29sZWFuKTogYW55IHtcbiAgICBpZiAoaXNEYXRlVGltZSkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKS50b0lTT1N0cmluZygpO1xuICAgIH1cbiAgICBpZiAodmFsdWUgPT09IHRoaXMuQk9PTEVBTl9QT1NJVElWRSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5CT09MRUFOX05FR0FUSVZFKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRG9jdW1lbnREZWZpbml0aW9uTmFtZVN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24gPSB0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNvbGxhcHNlKCk7XG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5WYWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNldFZhbHVlc1N1YmplY3QkKSB7XG4gICAgICB0aGlzLnZhbHVlc1N1YmplY3RTdWJzY3JpcHRpb24gPSB0aGlzLnNldFZhbHVlc1N1YmplY3QkLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsdWVzIHx8IHt9KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQodmFsdWVzKTtcbiAgICAgICAgICB0aGlzLnNlYXJjaCgpO1xuICAgICAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRyb3Bkb3duU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuZHJvcGRvd25TdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmRvY3VtZW50RGVmaW5pdGlvbk5hbWUkLCB0aGlzLnNlYXJjaEZpZWxkcyRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChcbiAgICAgICAgICAoW2RvY3VtZW50RGVmaW5pdGlvbk5hbWUsIHNlYXJjaEZpZWxkc10pID0+XG4gICAgICAgICAgICBzZWFyY2hGaWVsZHNcbiAgICAgICAgICAgICAgPy5maWx0ZXIoc2VhcmNoRmllbGQgPT4gc2VhcmNoRmllbGQuZHJvcGRvd25EYXRhUHJvdmlkZXIpXG4gICAgICAgICAgICAgIC5tYXAoc2VhcmNoRmllbGQgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAgICAgICAgICAgLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoRmllbGQuZHJvcGRvd25EYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkLmtleVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZShkcm9wZG93bkRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZHJvcGRvd25EYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93blNlbGVjdEl0ZW1zTWFwW3NlYXJjaEZpZWxkLmtleV0gPSBPYmplY3Qua2V5cyhkcm9wZG93bkRhdGEpLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyb3Bkb3duRmllbGRLZXkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGRyb3Bkb3duRmllbGRLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGRyb3Bkb3duRGF0YVtkcm9wZG93bkZpZWxkS2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duU2VsZWN0SXRlbXNNYXBbc2VhcmNoRmllbGQua2V5XSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sbGFwc2UoKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbmRlZCQubmV4dChmYWxzZSk7XG4gIH1cblxuICBwcml2YXRlIGV4cGFuZCgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0VmFsdWVzKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlcyAmJlxuICAgICAgdHlwZW9mIHRoaXMuZGVmYXVsdFZhbHVlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZGVmYXVsdFZhbHVlcykubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy52YWx1ZXMkLm5leHQodGhpcy5kZWZhdWx0VmFsdWVzKTtcbiAgICAgIHRoaXMuc2VhcmNoKCk7XG4gICAgICB0aGlzLmV4cGFuZCgpO1xuICAgIH1cbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjMgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2IGNsYXNzPVwic2VhcmNoIGZpZWxkc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWFyY2hGaWVsZHNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdUZW1wbGF0ZT5cbiAgPHZhbHRpbW8tc3Bpbm5lcj48L3ZhbHRpbW8tc3Bpbm5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VhcmNoRmllbGRzVGVtcGxhdGU+XG4gIDx2YWx0aW1vLXdpZGdldD5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25BY2NvcmRpb25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm93IHAtM1wiXG4gICAgICBbbmdDbGFzc109XCJ7J3Jvdy0taGlkZGVuJzogKGV4cGFuZGVkJCB8IGFzeW5jKSA9PT0gZmFsc2V9XCJcbiAgICAgICpuZ0lmPVwic2VhcmNoRmllbGRzJCB8IGFzeW5jIGFzIHNlYXJjaEZpZWxkc1wiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VhcmNoRmllbGQgb2Ygc2VhcmNoRmllbGRzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VhcmNoRmllbGRUZW1wbGF0ZTsgY29udGV4dDoge3NlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZH1cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwiKGkgKyAxKSAlIDMgPT09IDBcIj48L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGJ1dHRvbnNUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNvbnRleHQ6IHtub1NlYXJjaEZpZWxkczogIXNlYXJjaEZpZWxkcyB8fCBzZWFyY2hGaWVsZHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3ZhbHRpbW8td2lkZ2V0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNzZWFyY2hGaWVsZFRlbXBsYXRlIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIntcbiAgICAgIHZhbHVlczogdmFsdWVzJCB8IGFzeW5jLFxuICAgICAgdG9vbHRpcEtleTogJ3NlYXJjaEZpZWxkc1Rvb2x0aXBzLicgKyBzZWFyY2hGaWVsZC5rZXksXG4gICAgICB0b29sdGlwOiAnc2VhcmNoRmllbGRzVG9vbHRpcHMuJyArIHNlYXJjaEZpZWxkLmtleSB8IHRyYW5zbGF0ZSxcbiAgICAgIHNlYXJjaEZpZWxkLFxuICAgICAgdGl0bGU6XG4gICAgICAgIHNlYXJjaEZpZWxkLnRpdGxlIHx8XG4gICAgICAgICgnc2VhcmNoRmllbGRzLicgKyBzZWFyY2hGaWVsZC5rZXkgIT09ICgnc2VhcmNoRmllbGRzLicgKyBzZWFyY2hGaWVsZC5rZXkgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgPyAoJ3NlYXJjaEZpZWxkcy4nICsgc2VhcmNoRmllbGQua2V5IHwgdHJhbnNsYXRlKVxuICAgICAgICAgIDogc2VhcmNoRmllbGQua2V5KVxuICAgIH0gYXMgdmFyc1wiXG4gID5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlVGV4dDtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZU51bWJlcjtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZURhdGU7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVCb29sZWFuO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVRpbWU7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXJSYW5nZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZVRleHRSYW5nZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVSYW5nZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZURhdGVUaW1lUmFuZ2U7XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVTaW5nbGVTZWxlY3REcm9wZG93bjtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZU11bHRpU2VsZWN0RHJvcGRvd247XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZVRleHRcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8di1pbnB1dFxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICd0ZXh0JyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgPlxuICA8L3YtaW5wdXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXJcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8di1pbnB1dFxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdudW1iZXInICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIFtoaWRlTnVtYmVyU3BpbkJveF09XCJ0cnVlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgIFtzbWFsbExhYmVsXT1cInRydWVcIlxuICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgPlxuICA8L3YtaW5wdXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtZGF0ZS1waWNrZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlJ1wiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgW3NtYWxsTGFiZWxdPVwidHJ1ZVwiXG4gICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gID48L3YtZGF0ZS1waWNrZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVUZXh0UmFuZ2VcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICd0ZXh0JyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1mb3JtXG4gICAgICAodmFsdWVDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgY2xhc3NOYW1lPVwibXVsdGlwbGUtc2VhcmNoLWZpZWxkc1wiXG4gICAgPlxuICAgICAgPHYtaW5wdXRcbiAgICAgICAgbmFtZT1cInN0YXJ0XCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5zdGFydFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVOdW1iZXJSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ251bWJlcicgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzTmFtZT1cIm11bHRpcGxlLXNlYXJjaC1maWVsZHNcIlxuICAgID5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJzdGFydFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICBbaGlkZU51bWJlclNwaW5Cb3hdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICA8L3YtaW5wdXQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9UZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8di1pbnB1dFxuICAgICAgICBuYW1lPVwiZW5kXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgIFtoaWRlTnVtYmVyU3BpbkJveF09XCJ0cnVlXCJcbiAgICAgICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5lbmRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgICA+XG4gICAgICA8L3YtaW5wdXQ+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAncmFuZ2UnXCI+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtZm9ybVxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIGNsYXNzTmFtZT1cIm11bHRpcGxlLXNlYXJjaC1maWVsZHNcIlxuICAgID5cbiAgICAgIDx2LWRhdGUtcGlja2VyXG4gICAgICAgIG5hbWU9XCJzdGFydFwiXG4gICAgICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uZW5kXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlucHV0RGlzYWJsZWRcIlxuICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVCb29sZWFuXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnYm9vbGVhbidcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1zZWxlY3RcbiAgICAgICpuZ0lmPVwiYm9vbGVhbkl0ZW1zJCB8IGFzeW5jIGFzIGJvb2xlYW5JdGVtc1wiXG4gICAgICBbaXRlbXNdPVwiYm9vbGVhbkl0ZW1zXCJcbiAgICAgIFttYXJnaW5dPVwiZmFsc2VcIlxuICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgICBbY2xlYXJTZWxlY3Rpb25TdWJqZWN0JF09XCJjbGVhciRcIlxuICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJnZXREZWZhdWx0Qm9vbGVhblNlbGVjdGlvbklkKHZhbHVlcywgc2VhcmNoRmllbGQua2V5KVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgPjwvdi1zZWxlY3Q+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVRpbWVcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8di1kYXRlLXBpY2tlclxuICAgICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdkYXRldGltZScgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlJ1wiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50LCB0cnVlKVwiXG4gICAgW3NtYWxsTGFiZWxdPVwidHJ1ZVwiXG4gICAgW2VuYWJsZVRpbWVdPVwidHJ1ZVwiXG4gICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gID48L3YtZGF0ZS1waWNrZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZVJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LWZvcm1cbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50LCB0cnVlKVwiXG4gICAgICBjbGFzc05hbWU9XCJtdWx0aXBsZS1zZWFyY2gtZmllbGRzXCJcbiAgICA+XG4gICAgICA8di1kYXRlLXBpY2tlclxuICAgICAgICBuYW1lPVwic3RhcnRcIlxuICAgICAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAgICAgW2VuYWJsZVRpbWVdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5zdGFydFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgICAgID48L3YtZGF0ZS1waWNrZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9UZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8di1kYXRlLXBpY2tlclxuICAgICAgICBuYW1lPVwiZW5kXCJcbiAgICAgICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgICAgIFtlbmFibGVUaW1lXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uZW5kXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlucHV0RGlzYWJsZWRcIlxuICAgICAgPjwvdi1kYXRlLXBpY2tlcj5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVTaW5nbGVTZWxlY3REcm9wZG93blxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlLXNlbGVjdC1kcm9wZG93bidcIlxuICA+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtc2VsZWN0XG4gICAgICAqbmdJZj1cImRyb3Bkb3duU2VsZWN0SXRlbXNNYXBbc2VhcmNoRmllbGQua2V5XSBhcyBzZWFyY2hGaWVsZFNlbGVjdEl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJzZWFyY2hGaWVsZFNlbGVjdEl0ZW1zXCJcbiAgICAgIFttYXJnaW5dPVwiZmFsc2VcIlxuICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgIFt3aWR0aEluUHhdPVwiMjAwXCJcbiAgICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgICBbY2xlYXJTZWxlY3Rpb25TdWJqZWN0JF09XCJjbGVhciRcIlxuICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgPjwvdi1zZWxlY3Q+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlTXVsdGlTZWxlY3REcm9wZG93blxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnbXVsdGktc2VsZWN0LWRyb3Bkb3duJ1wiXG4gID5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1zZWxlY3RcbiAgICAgICpuZ0lmPVwiZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldIGFzIHNlYXJjaEZpZWxkU2VsZWN0SXRlbXNcIlxuICAgICAgW2l0ZW1zXT1cInNlYXJjaEZpZWxkU2VsZWN0SXRlbXNcIlxuICAgICAgW21hcmdpbl09XCJmYWxzZVwiXG4gICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgW3dpZHRoSW5QeF09XCIyMDBcIlxuICAgICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICAgIFtjbGVhclNlbGVjdGlvblN1YmplY3QkXT1cImNsZWFyJFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgIFtkZWZhdWx0U2VsZWN0aW9uSWRzXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgICA+PC92LXNlbGVjdD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3RvVGV4dD5cbiAgPGRpdiBjbGFzcz1cInRvLXRleHRcIj5cbiAgICA8di1wYXJhZ3JhcGg+e3sgJ3NlYXJjaEZpZWxkcy50bycgfCB0cmFuc2xhdGUgfX08L3YtcGFyYWdyYXBoPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYnV0dG9uc1RlbXBsYXRlIGxldC1ub1NlYXJjaEZpZWxkcz1cIm5vU2VhcmNoRmllbGRzXCI+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdUZW1wbGF0ZU91dGxldD1cIm5vU2VhcmNoRmllbGRzVGVtcGxhdGU7IGNvbnRleHQ6IHtub1NlYXJjaEZpZWxkczogbm9TZWFyY2hGaWVsZHN9XCJcbiAgPjwvbmctY29udGFpbmVyPlxuICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIiAqbmdJZj1cIntleHBhbmRlZDogZXhwYW5kZWQkIHwgYXN5bmN9IGFzIG9ic1wiPlxuICAgIDxkaXYgY2xhc3M9XCJyaWdodC1idXR0b25zXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgbm9TZWFyY2hGaWVsZHMgfHwgaW5wdXREaXNhYmxlZFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpZD1cImNsZWFyXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNwYWNlIGJ0bi1zZWNvbmRhcnlcIlxuICAgICAgICAqbmdJZj1cIm9icy5leHBhbmRlZFwiXG4gICAgICA+XG4gICAgICAgIHt7ICdzZWFyY2hGaWVsZHMuY2xlYXJCdXR0b25UZXh0JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICBsb2FkaW5nIHx8IG5vU2VhcmNoRmllbGRzIHx8IChoYXNWYWxpZFZhbHVlcyQgfCBhc3luYykgPT09IGZhbHNlIHx8IGlucHV0RGlzYWJsZWRcbiAgICAgICAgXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwic2VhcmNoXCJcbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLXNwYWNlIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgKm5nSWY9XCJvYnMuZXhwYW5kZWRcIlxuICAgICAgPlxuICAgICAgICB7eyAnc2VhcmNoRmllbGRzLnNlYXJjaEJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vU2VhcmNoRmllbGRzVGVtcGxhdGUgbGV0LW5vU2VhcmNoRmllbGRzPVwibm9TZWFyY2hGaWVsZHNcIj5cbiAgPGRpdiBjbGFzcz1cInctMTAwIG1iLTNcIiAqbmdJZj1cIm5vU2VhcmNoRmllbGRzXCI+XG4gICAgPHYtcGFyYWdyYXBoIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIFtjZW50ZXJdPVwidHJ1ZVwiPnt7XG4gICAgICAnc2VhcmNoRmllbGRzLm5vbmVDb25maWd1cmVkJyB8IHRyYW5zbGF0ZVxuICAgIH19PC92LXBhcmFncmFwaD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbkFjY29yZGlvbj5cbiAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCIgKm5nSWY9XCJ7ZXhwYW5kZWQ6IGV4cGFuZGVkJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgICA8YnV0dG9uXG4gICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBpbnB1dERpc2FibGVkXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJhY2NvcmRpb24tYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVFeHBhbmRlZCgpXCJcbiAgICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICBvYnMuZXhwYW5kZWQgPyAnbWRpIG1kaS1jaGV2cm9uLXJpZ2h0IGFjY29yZGlvbi1idXR0b24tLWFjdGl2ZScgOiAnbWRpIG1kaS1jaGV2cm9uLWRvd24nXG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7ICdzZWFyY2hGaWVsZHMuc2VhcmNoQnV0dG9uVGV4dCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
241
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2NvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL3NlYXJjaC1maWVsZHMvc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXhGLE9BQU8sRUFBQyxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUtsRyxPQUFPLEVBQUMsYUFBYSxFQUFFLFdBQVcsRUFBQyxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxxQkFBcUI7SUFFaEMsSUFBb0IsWUFBWSxDQUFDLE1BQTBCO1FBQ3pELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxJQUFvQixzQkFBc0IsQ0FBQyxzQkFBOEI7UUFDdkUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsNkJBQTZCLENBQUMsRUFBRTtZQUNwRixJQUFJLDZCQUE2QixLQUFLLHNCQUFzQixFQUFFLENBQUM7Z0JBQzdELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMs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QUN0QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUMxQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDO0lBQ0gsQ0FBQzs4R0F2UFUscUJBQXFCO2tHQUFyQixxQkFBcUIsZ1pDOUJsQyxtMm1CQXdvQkE7OzJGRDFtQmEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLHVCQUF1Qjs2SUFLakIsT0FBTztzQkFBdEIsS0FBSztnQkFDYyxZQUFZO3NCQUEvQixLQUFLO2dCQUdjLHNCQUFzQjtzQkFBekMsS0FBSztnQkFPVSxpQkFBaUI7c0JBQWhDLEtBQUs7Z0JBQ1UsbUJBQW1CO3NCQUFsQyxLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFDVSxtQkFBbUI7c0JBQWxDLEtBQUs7Z0JBRVcsUUFBUTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDI0IFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U2VhcmNoRmllbGQsIFNlYXJjaEZpZWxkQm9vbGVhbiwgU2VhcmNoRmllbGRWYWx1ZXN9IGZyb20gJ0B2YWx0aW1vL2NvbmZpZyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2V9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtTZWxlY3RJdGVtfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0ljb25TZXJ2aWNlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7Q2hldnJvbkRvd24xNiwgQ2hldnJvblVwMTZ9IGZyb20gJ0BjYXJib24vaWNvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLXNlYXJjaC1maWVsZHMnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VhcmNoRmllbGRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZyE6IGJvb2xlYW47XG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgc2VhcmNoRmllbGRzKGZpZWxkczogQXJyYXk8U2VhcmNoRmllbGQ+KSB7XG4gICAgdGhpcy5zZWFyY2hGaWVsZHMkLm5leHQoZmllbGRzKTtcbiAgfVxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGRvY3VtZW50RGVmaW5pdGlvbk5hbWUoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoY3VycmVudERvY3VtZW50RGVmaW5pdGlvbk5hbWUgPT4ge1xuICAgICAgaWYgKGN1cnJlbnREb2N1bWVudERlZmluaXRpb25OYW1lICE9PSBkb2N1bWVudERlZmluaXRpb25OYW1lKSB7XG4gICAgICAgIHRoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkLm5leHQoZG9jdW1lbnREZWZpbml0aW9uTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIHNldFZhbHVlc1N1YmplY3QkITogT2JzZXJ2YWJsZTxTZWFyY2hGaWVsZFZhbHVlcz47XG4gIEBJbnB1dCgpIHB1YmxpYyBjbGVhclZhbHVlc1N1YmplY3QkITogT2JzZXJ2YWJsZTxudWxsPjtcbiAgQElucHV0KCkgcHVibGljIGRlZmF1bHRWYWx1ZXMhOiBTZWFyY2hGaWVsZFZhbHVlcztcbiAgQElucHV0KCkgcHVibGljIGlucHV0RGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGV4dGVybmFsU2VhcmNoRmllbGQgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcHVibGljIGRvU2VhcmNoOiBFdmVudEVtaXR0ZXI8U2VhcmNoRmllbGRWYWx1ZXM+ID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNlYXJjaEZpZWxkVmFsdWVzPigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBzZWFyY2hGaWVsZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxTZWFyY2hGaWVsZD4+KFtdKTtcbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaEZpZWxkVmFsdWVzPih7fSk7XG4gIHB1YmxpYyByZWFkb25seSBoYXNWYWxpZFZhbHVlcyQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLnZhbHVlcyQucGlwZShcbiAgICBtYXAodmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IGhhc1ZhbHVlcyA9IChPYmplY3Qua2V5cyh2YWx1ZXMpIHx8IFtdKS5sZW5ndGggPiAwO1xuICAgICAgY29uc3QgcmFuZ2VWYWx1ZXMgPVxuICAgICAgICAoaGFzVmFsdWVzICYmIE9iamVjdC52YWx1ZXModmFsdWVzKT8uZmlsdGVyKHZhbHVlID0+ICh2YWx1ZSBhcyBhbnkpLnN0YXJ0KSkgfHwgW107XG4gICAgICBjb25zdCB2YWxpZFJhbmdlVmFsdWVzID0gcmFuZ2VWYWx1ZXM/LmZpbHRlcihcbiAgICAgICAgdmFsdWUgPT4gKHZhbHVlIGFzIGFueSkuc3RhcnQgPCAodmFsdWUgYXMgYW55KS5lbmRcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiAhIShoYXNWYWx1ZXMgJiYgcmFuZ2VWYWx1ZXMubGVuZ3RoID09PSB2YWxpZFJhbmdlVmFsdWVzLmxlbmd0aCk7XG4gICAgfSlcbiAgKTtcbiAgcHVibGljIHJlYWRvbmx5IGV4cGFuZGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwdWJsaWMgcmVhZG9ubHkgY2xlYXIkID0gbmV3IFN1YmplY3Q8bnVsbD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudERlZmluaXRpb25OYW1lJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IEJPT0xFQU5fUE9TSVRJVkU6IFNlYXJjaEZpZWxkQm9vbGVhbiA9ICdib29sZWFuUG9zaXRpdmUnO1xuICBwcml2YXRlIHJlYWRvbmx5IEJPT0xFQU5fTkVHQVRJVkU6IFNlYXJjaEZpZWxkQm9vbGVhbiA9ICdib29sZWFuTmVnYXRpdmUnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX0JPT0xFQU5fVFlQRVM6IEFycmF5PFNlYXJjaEZpZWxkQm9vbGVhbj4gPSBbXG4gICAgdGhpcy5CT09MRUFOX1BPU0lUSVZFLFxuICAgIHRoaXMuQk9PTEVBTl9ORUdBVElWRSxcbiAgXTtcbiAgcHVibGljIHJlYWRvbmx5IGJvb2xlYW5JdGVtcyQ6IE9ic2VydmFibGU8QXJyYXk8U2VsZWN0SXRlbT4+ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlXG4gICAgLnN0cmVhbSgna2V5JylcbiAgICAucGlwZShcbiAgICAgIG1hcCgoKSA9PlxuICAgICAgICB0aGlzLl9CT09MRUFOX1RZUEVTLm1hcCh0eXBlID0+ICh7XG4gICAgICAgICAgaWQ6IHR5cGUsXG4gICAgICAgICAgdGV4dDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHNlYXJjaEZpZWxkcy4ke3R5cGV9YCksXG4gICAgICAgIH0pKVxuICAgICAgKVxuICAgICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGRyb3Bkb3duU2VsZWN0SXRlbXNNYXA6IE1hcDxzdHJpbmcsIEFycmF5PFNlbGVjdEl0ZW0+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGljb25TZXJ2aWNlOiBJY29uU2VydmljZVxuICApIHtcbiAgICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyQWxsKFtDaGV2cm9uRG93bjE2LCBDaGV2cm9uVXAxNl0pO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMub3BlbkRvY3VtZW50RGVmaW5pdGlvbk5hbWVTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5WYWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uKCk7XG4gICAgdGhpcy5vcGVuQ2xlYXJTdWJzY3JpcHRpb24oKTtcbiAgICB0aGlzLm9wZW5Ecm9wZG93blN1YnNjcmlwdGlvbigpO1xuICAgIHRoaXMuc2V0RGVmYXVsdFZhbHVlcygpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaW5nbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZEtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBpc0RhdGVUaW1lPzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudmFsdWVzJC5waXBlKHRha2UoMSkpLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgaWYgKHZhbHVlIHx8IE51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHsuLi52YWx1ZXMsIFtzZWFyY2hGaWVsZEtleV06IHRoaXMuZ2V0U2luZ2xlVmFsdWUodmFsdWUsIGlzRGF0ZVRpbWUpfSk7XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHZhbHVlcykuaW5jbHVkZXMoc2VhcmNoRmllbGRLZXkpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlc0NvcHkgPSB7Li4udmFsdWVzfTtcbiAgICAgICAgZGVsZXRlIHZhbHVlc0NvcHlbc2VhcmNoRmllbGRLZXldO1xuICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh2YWx1ZXNDb3B5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkS2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGlzRGF0ZVRpbWU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICBpZiAodmFsdWUuc3RhcnQgJiYgdmFsdWUuZW5kKSB7XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHtcbiAgICAgICAgICAuLi52YWx1ZXMsXG4gICAgICAgICAgW3NlYXJjaEZpZWxkS2V5XToge1xuICAgICAgICAgICAgc3RhcnQ6IHRoaXMuZ2V0U2luZ2xlVmFsdWUodmFsdWUuc3RhcnQsIGlzRGF0ZVRpbWUpLFxuICAgICAgICAgICAgZW5kOiB0aGlzLmdldFNpbmdsZVZhbHVlKHZhbHVlLmVuZCwgaXNEYXRlVGltZSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy52YWx1ZXMkLm5leHQoe1xuICAgICAgICAgIC4uLnZhbHVlcyxcbiAgICAgICAgICBbc2VhcmNoRmllbGRLZXldOiB2YWx1ZS5tYXAodiA9PiB0aGlzLmdldFNpbmdsZVZhbHVlKHYsIGlzRGF0ZVRpbWUpKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlc1tzZWFyY2hGaWVsZEtleV0pIHtcbiAgICAgICAgY29uc3QgdmFsdWVzQ29weSA9IHsuLi52YWx1ZXN9O1xuICAgICAgICBkZWxldGUgdmFsdWVzQ29weVtzZWFyY2hGaWVsZEtleV07XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHZhbHVlc0NvcHkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZUV4cGFuZGVkKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWQkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKGV4cGFuZGVkID0+IHtcbiAgICAgIHRoaXMuZXhwYW5kZWQkLm5leHQoIWV4cGFuZGVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2goKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZXMkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKHZhbHVlcyA9PiB7XG4gICAgICB0aGlzLmRvU2VhcmNoLmVtaXQodmFsdWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyJC5uZXh0KG51bGwpO1xuICAgIHRoaXMuZG9TZWFyY2guZW1pdCh7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RGVmYXVsdEJvb2xlYW5TZWxlY3Rpb25JZChcbiAgICB2YWx1ZXM6IFNlYXJjaEZpZWxkVmFsdWVzLFxuICAgIHNlYXJjaEZpZWxkS2V5OiBzdHJpbmdcbiAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3Qgc2VhcmNoRmllbGRWYWx1ZSA9IHZhbHVlc1tzZWFyY2hGaWVsZEtleV07XG5cbiAgICBpZiAoc2VhcmNoRmllbGRWYWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuQk9PTEVBTl9QT1NJVElWRTtcbiAgICB9IGVsc2UgaWYgKHNlYXJjaEZpZWxkVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5CT09MRUFOX05FR0FUSVZFO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2luZ2xlVmFsdWUodmFsdWU6IGFueSwgaXNEYXRlVGltZT86IGJvb2xlYW4pOiBhbnkge1xuICAgIGlmIChpc0RhdGVUaW1lKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gdGhpcy5CT09MRUFOX1BPU0lUSVZFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSB0aGlzLkJPT0xFQU5fTkVHQVRJVkUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIG9wZW5Eb2N1bWVudERlZmluaXRpb25OYW1lU3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5fZG9jdW1lbnREZWZpbml0aW9uTmFtZSQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZSgpO1xuICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5WYWx1ZXNTdWJqZWN0U3Vic2NyaXB0aW9uKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNldFZhbHVlc1N1YmplY3QkKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgdGhpcy5zZXRWYWx1ZXNTdWJqZWN0JC5zdWJzY3JpYmUodmFsdWVzID0+IHtcbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXModmFsdWVzIHx8IHt9KS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcyQubmV4dCh2YWx1ZXMpO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5DbGVhclN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbGVhclZhbHVlc1N1YmplY3QkKSB7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgdGhpcy5jbGVhclZhbHVlc1N1YmplY3QkLnN1YnNjcmliZSh2YWx1ZXMgPT4ge1xuICAgICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KHt9KTtcbiAgICAgICAgICB0aGlzLnNlYXJjaCgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG9wZW5Ecm9wZG93blN1YnNjcmlwdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIGNvbWJpbmVMYXRlc3QoW3RoaXMuX2RvY3VtZW50RGVmaW5pdGlvbk5hbWUkLCB0aGlzLnNlYXJjaEZpZWxkcyRdKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBtYXAoKFtkb2N1bWVudERlZmluaXRpb25OYW1lLCBzZWFyY2hGaWVsZHNdKSA9PlxuICAgICAgICAgICAgc2VhcmNoRmllbGRzXG4gICAgICAgICAgICAgID8uZmlsdGVyKHNlYXJjaEZpZWxkID0+IHNlYXJjaEZpZWxkLmRyb3Bkb3duRGF0YVByb3ZpZGVyKVxuICAgICAgICAgICAgICAubWFwKHNlYXJjaEZpZWxkID0+XG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgICAgICAgICAgICAgIC5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEZpZWxkLmRyb3Bkb3duRGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudERlZmluaXRpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hGaWVsZC5rZXlcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZHJvcGRvd25EYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRyb3Bkb3duRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25TZWxlY3RJdGVtc01hcFtzZWFyY2hGaWVsZC5rZXldID0gT2JqZWN0LmtleXMoZHJvcGRvd25EYXRhKS5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93bkZpZWxkS2V5ID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkcm9wZG93bkZpZWxkS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBkcm9wZG93bkRhdGFbZHJvcGRvd25GaWVsZEtleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93blNlbGVjdEl0ZW1zTWFwW3NlYXJjaEZpZWxkLmtleV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZSgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuZGVkJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhwYW5kKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5kZWQkLm5leHQodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldERlZmF1bHRWYWx1ZXMoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzICYmXG4gICAgICB0eXBlb2YgdGhpcy5kZWZhdWx0VmFsdWVzID09PSAnb2JqZWN0JyAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5kZWZhdWx0VmFsdWVzKS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLnZhbHVlcyQubmV4dCh0aGlzLmRlZmF1bHRWYWx1ZXMpO1xuICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIHRoaXMuZXhwYW5kKCk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJsb2FkaW5nXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nXCI+XG4gIDxjZHMtYWNjb3JkaW9uPlxuICAgIDxjZHMtYWNjb3JkaW9uLWl0ZW1cbiAgICAgIFt0aXRsZV09XCInc2VhcmNoRmllbGRzLnNlYXJjaEJ1dHRvblRleHQnIHwgdHJhbnNsYXRlXCJcbiAgICAgIChzZWxlY3RlZCk9XCJ0b2dnbGVFeHBhbmRlZCgpXCJcbiAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZCQgfCBhc3luY1wiXG4gICAgPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaEZpZWxkc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9jZHMtYWNjb3JkaW9uLWl0ZW0+XG4gIDwvY2RzLWFjY29yZGlvbj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2xvYWRpbmdUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctY29udGFpbmVyXCI+PGNkcy1sb2FkaW5nPjwvY2RzLWxvYWRpbmc+PC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlYXJjaEZpZWxkc1RlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGRzJCB8IGFzeW5jIGFzIHNlYXJjaEZpZWxkc1wiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwie1xuICAgICAgICBub1NlYXJjaEZpZWxkczogKCFzZWFyY2hGaWVsZHMgfHwgc2VhcmNoRmllbGRzLmxlbmd0aCA9PT0gMCkgJiYgIWV4dGVybmFsU2VhcmNoRmllbGRcbiAgICAgIH0gYXMgdmFyc1wiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIiF2YXJzLm5vU2VhcmNoRmllbGRzXCJcbiAgICAgICAgY2xhc3M9XCJzZWFyY2gtZmllbGRzLWNvbnRhaW5lclwiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsnc2VhcmNoLWZpZWxkcy1jb250YWluZXItLWhpZGRlbic6IChleHBhbmRlZCQgfCBhc3luYykgPT09IGZhbHNlfVwiXG4gICAgICA+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWFyY2hGaWVsZCBvZiBzZWFyY2hGaWVsZHNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWZpZWxkLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlYXJjaEZpZWxkVGVtcGxhdGU7IGNvbnRleHQ6IHtzZWFyY2hGaWVsZDogc2VhcmNoRmllbGR9XCJcbiAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm1ldGEtY29udGFpbmVyXCIgKm5nSWY9XCJleHBhbmRlZCQgfCBhc3luY1wiPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25zVGVtcGxhdGU7IGNvbnRleHQ6IHtub1NlYXJjaEZpZWxkczogdmFycy5ub1NlYXJjaEZpZWxkc31cIlxuICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3NlYXJjaEZpZWxkVGVtcGxhdGUgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIj5cbiAgPG5nLWNvbnRhaW5lclxuICAgICpuZ0lmPVwie1xuICAgICAgdmFsdWVzOiB2YWx1ZXMkIHwgYXN5bmMsXG4gICAgICB0b29sdGlwS2V5OiAnc2VhcmNoRmllbGRzVG9vbHRpcHMuJyArIHNlYXJjaEZpZWxkLmtleSxcbiAgICAgIHRvb2x0aXA6ICdzZWFyY2hGaWVsZHNUb29sdGlwcy4nICsgc2VhcmNoRmllbGQua2V5IHwgdHJhbnNsYXRlLFxuICAgICAgc2VhcmNoRmllbGQsXG4gICAgICB0aXRsZTpcbiAgICAgICAgc2VhcmNoRmllbGQudGl0bGUgfHxcbiAgICAgICAgKCdzZWFyY2hGaWVsZHMuJyArIHNlYXJjaEZpZWxkLmtleSAhPT0gKCdzZWFyY2hGaWVsZHMuJyArIHNlYXJjaEZpZWxkLmtleSB8IHRyYW5zbGF0ZSlcbiAgICAgICAgICA/ICgnc2VhcmNoRmllbGRzLicgKyBzZWFyY2hGaWVsZC5rZXkgfCB0cmFuc2xhdGUpXG4gICAgICAgICAgOiBzZWFyY2hGaWVsZC5rZXkpXG4gICAgfSBhcyB2YXJzXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVUZXh0O1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZUJvb2xlYW47XG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICBzZWFyY2hGaWVsZDogc2VhcmNoRmllbGQsXG4gICAgICAgICAgdG9vbHRpcEtleTogdmFycy50b29sdGlwS2V5LFxuICAgICAgICAgIHRvb2x0aXA6IHZhcnMudG9vbHRpcCxcbiAgICAgICAgICB0aXRsZTogdmFycy50aXRsZSxcbiAgICAgICAgICB2YWx1ZXM6IHZhcnMudmFsdWVzXG4gICAgICAgIH1cbiAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHNlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZU51bWJlclJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlVGV4dFJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVJhbmdlO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVRpbWVSYW5nZTtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgc2VhcmNoRmllbGRUZW1wbGF0ZVNpbmdsZVNlbGVjdERyb3Bkb3duO1xuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgc2VhcmNoRmllbGQ6IHNlYXJjaEZpZWxkLFxuICAgICAgICAgIHRvb2x0aXBLZXk6IHZhcnMudG9vbHRpcEtleSxcbiAgICAgICAgICB0b29sdGlwOiB2YXJzLnRvb2x0aXAsXG4gICAgICAgICAgdGl0bGU6IHZhcnMudGl0bGUsXG4gICAgICAgICAgdmFsdWVzOiB2YXJzLnZhbHVlc1xuICAgICAgICB9XG4gICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICBzZWFyY2hGaWVsZFRlbXBsYXRlTXVsdGlTZWxlY3REcm9wZG93bjtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHNlYXJjaEZpZWxkOiBzZWFyY2hGaWVsZCxcbiAgICAgICAgICB0b29sdGlwS2V5OiB2YXJzLnRvb2x0aXBLZXksXG4gICAgICAgICAgdG9vbHRpcDogdmFycy50b29sdGlwLFxuICAgICAgICAgIHRpdGxlOiB2YXJzLnRpdGxlLFxuICAgICAgICAgIHZhbHVlczogdmFycy52YWx1ZXNcbiAgICAgICAgfVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlVGV4dFxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDx2LWlucHV0XG4gICAgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ3RleHQnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3NpbmdsZSdcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgW3NtYWxsTGFiZWxdPVwidHJ1ZVwiXG4gICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XVwiXG4gICAgW2Rpc2FibGVkXT1cImlucHV0RGlzYWJsZWRcIlxuICAgIFtjYXJib25UaGVtZV09XCJjYXJib25UaGVtZVwiXG4gID5cbiAgPC92LWlucHV0PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlTnVtYmVyXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtaW5wdXRcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnbnVtYmVyJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbbmFtZV09XCJzZWFyY2hGaWVsZC5rZXlcIlxuICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICBbaGlkZU51bWJlclNwaW5Cb3hdPVwidHJ1ZVwiXG4gICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICBbc21hbGxMYWJlbF09XCJ0cnVlXCJcbiAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgW2NhcmJvblRoZW1lXT1cImNhcmJvblRoZW1lXCJcbiAgPlxuICA8L3YtaW5wdXQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPHYtZGF0ZS1waWNrZXJcbiAgICAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnc2luZ2xlJ1wiXG4gICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgKHZhbHVlQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgW3NtYWxsTGFiZWxdPVwidHJ1ZVwiXG4gICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldXCJcbiAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgW2NhcmJvblRoZW1lXT1cImNhcmJvblRoZW1lXCJcbiAgPjwvdi1kYXRlLXBpY2tlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZVRleHRSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ3RleHQnICYmIHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ3JhbmdlJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LWZvcm1cbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJtdWx0aXBsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICBjbGFzc05hbWU9XCJtdWx0aXBsZS1zZWFyY2gtZmllbGRzXCJcbiAgICA+XG4gICAgICA8di1pbnB1dFxuICAgICAgICBuYW1lPVwic3RhcnRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LnN0YXJ0XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlucHV0RGlzYWJsZWRcIlxuICAgICAgICBbY2FyYm9uVGhlbWVdPVwiY2FyYm9uVGhlbWVcIlxuICAgICAgPlxuICAgICAgPC92LWlucHV0PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtaW5wdXRcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uZW5kXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlucHV0RGlzYWJsZWRcIlxuICAgICAgICBbY2FyYm9uVGhlbWVdPVwiY2FyYm9uVGhlbWVcIlxuICAgICAgPlxuICAgICAgPC92LWlucHV0PlxuICAgIDwvdi1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZU51bWJlclJhbmdlXG4gIGxldC1zZWFyY2hGaWVsZD1cInNlYXJjaEZpZWxkXCJcbiAgbGV0LXRvb2x0aXA9XCJ0b29sdGlwXCJcbiAgbGV0LXRvb2x0aXBLZXk9XCJ0b29sdGlwS2V5XCJcbiAgbGV0LXRpdGxlPVwidGl0bGVcIlxuICBsZXQtdmFsdWVzPVwidmFsdWVzXCJcbj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAnbnVtYmVyJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1mb3JtXG4gICAgICAodmFsdWVDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgY2xhc3NOYW1lPVwibXVsdGlwbGUtc2VhcmNoLWZpZWxkc1wiXG4gICAgPlxuICAgICAgPHYtaW5wdXRcbiAgICAgICAgbmFtZT1cInN0YXJ0XCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgIFtoaWRlTnVtYmVyU3BpbkJveF09XCJ0cnVlXCJcbiAgICAgICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgICBbZGVmYXVsdFZhbHVlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5zdGFydFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgICAgICAgW2NhcmJvblRoZW1lXT1cImNhcmJvblRoZW1lXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b1RleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDx2LWlucHV0XG4gICAgICAgIG5hbWU9XCJlbmRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgW2hpZGVOdW1iZXJTcGluQm94XT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0VmFsdWVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgICAgICAgW2NhcmJvblRoZW1lXT1cImNhcmJvblRoZW1lXCJcbiAgICAgID5cbiAgICAgIDwvdi1pbnB1dD5cbiAgICA8L3YtZm9ybT5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlUmFuZ2VcbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1mb3JtXG4gICAgICAodmFsdWVDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudClcIlxuICAgICAgY2xhc3NOYW1lPVwibXVsdGlwbGUtc2VhcmNoLWZpZWxkc1wiXG4gICAgPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cInN0YXJ0XCJcbiAgICAgICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5zdGFydFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgICAgICAgW2NhcmJvblRoZW1lXT1cImNhcmJvblRoZW1lXCJcbiAgICAgID48L3YtZGF0ZS1waWNrZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9UZXh0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8di1kYXRlLXBpY2tlclxuICAgICAgICBuYW1lPVwiZW5kXCJcbiAgICAgICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgICAgIFtjbGVhciRdPVwiY2xlYXIkXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICAgICAgW2RlZmF1bHREYXRlXT1cInZhbHVlc1tzZWFyY2hGaWVsZC5rZXldPy5lbmRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgICAgIFtjYXJib25UaGVtZV09XCJjYXJib25UaGVtZVwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgIDwvdi1mb3JtPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjc2VhcmNoRmllbGRUZW1wbGF0ZUJvb2xlYW5cbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICdib29sZWFuJ1wiPlxuICAgIDx2LWlucHV0LWxhYmVsXG4gICAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgICAgW3Rvb2x0aXBdPVwidG9vbHRpcCAhPT0gdG9vbHRpcEtleSAmJiB0b29sdGlwXCJcbiAgICAgIFtzbWFsbF09XCJ0cnVlXCJcbiAgICA+PC92LWlucHV0LWxhYmVsPlxuICAgIDx2LXNlbGVjdFxuICAgICAgKm5nSWY9XCJib29sZWFuSXRlbXMkIHwgYXN5bmMgYXMgYm9vbGVhbkl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJib29sZWFuSXRlbXNcIlxuICAgICAgW21hcmdpbl09XCJmYWxzZVwiXG4gICAgICBbcmVxdWlyZWRdPVwiZmFsc2VcIlxuICAgICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICAgIFtjbGVhclNlbGVjdGlvblN1YmplY3QkXT1cImNsZWFyJFwiXG4gICAgICAoc2VsZWN0ZWRDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICBbZGVmYXVsdFNlbGVjdGlvbklkXT1cImdldERlZmF1bHRCb29sZWFuU2VsZWN0aW9uSWQodmFsdWVzLCBzZWFyY2hGaWVsZC5rZXkpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgICAgIFtjYXJib25UaGVtZV09XCJjYXJib25UaGVtZVwiXG4gICAgICBbYXBwZW5kSW5saW5lXT1cImZhbHNlXCJcbiAgICA+PC92LXNlbGVjdD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgI3NlYXJjaEZpZWxkVGVtcGxhdGVEYXRlVGltZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDx2LWRhdGUtcGlja2VyXG4gICAgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUnXCJcbiAgICBbdGl0bGVdPVwidGl0bGVcIlxuICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgW25hbWVdPVwic2VhcmNoRmllbGQua2V5XCJcbiAgICBmdWxsV2lkdGg9XCJ0cnVlXCJcbiAgICAodmFsdWVDaGFuZ2UpPVwic2luZ2xlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQsIHRydWUpXCJcbiAgICBbc21hbGxMYWJlbF09XCJ0cnVlXCJcbiAgICBbZW5hYmxlVGltZV09XCJ0cnVlXCJcbiAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgpXCJcbiAgICBbZGVmYXVsdERhdGVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV1cIlxuICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgICBbY2FyYm9uVGhlbWVdPVwiY2FyYm9uVGhlbWVcIlxuICA+PC92LWRhdGUtcGlja2VyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlRGF0ZVRpbWVSYW5nZVxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWFyY2hGaWVsZC5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJyAmJiBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdyYW5nZSdcIj5cbiAgICA8di1pbnB1dC1sYWJlbFxuICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgIFt0b29sdGlwXT1cInRvb2x0aXAgIT09IHRvb2x0aXBLZXkgJiYgdG9vbHRpcFwiXG4gICAgICBbc21hbGxdPVwidHJ1ZVwiXG4gICAgPjwvdi1pbnB1dC1sYWJlbD5cbiAgICA8di1mb3JtXG4gICAgICAodmFsdWVDaGFuZ2UpPVwibXVsdGlwbGVWYWx1ZUNoYW5nZShzZWFyY2hGaWVsZC5rZXksICRldmVudCwgdHJ1ZSlcIlxuICAgICAgY2xhc3NOYW1lPVwibXVsdGlwbGUtc2VhcmNoLWZpZWxkc1wiXG4gICAgPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cInN0YXJ0XCJcbiAgICAgICAgZnVsbFdpZHRoPVwidHJ1ZVwiXG4gICAgICAgIFtlbmFibGVUaW1lXT1cInRydWVcIlxuICAgICAgICBbY2xlYXIkXT1cImNsZWFyJFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICAgIFtkZWZhdWx0RGF0ZV09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XT8uc3RhcnRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgICAgIFtjYXJib25UaGVtZV09XCJjYXJib25UaGVtZVwiXG4gICAgICA+PC92LWRhdGUtcGlja2VyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvVGV4dFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPHYtZGF0ZS1waWNrZXJcbiAgICAgICAgbmFtZT1cImVuZFwiXG4gICAgICAgIGZ1bGxXaWR0aD1cInRydWVcIlxuICAgICAgICBbZW5hYmxlVGltZV09XCJ0cnVlXCJcbiAgICAgICAgW2NsZWFyJF09XCJjbGVhciRcIlxuICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgICBbZGVmYXVsdERhdGVdPVwidmFsdWVzW3NlYXJjaEZpZWxkLmtleV0/LmVuZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpbnB1dERpc2FibGVkXCJcbiAgICAgICAgW2NhcmJvblRoZW1lXT1cImNhcmJvblRoZW1lXCJcbiAgICAgID48L3YtZGF0ZS1waWNrZXI+XG4gICAgPC92LWZvcm0+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlU2luZ2xlU2VsZWN0RHJvcGRvd25cbiAgbGV0LXNlYXJjaEZpZWxkPVwic2VhcmNoRmllbGRcIlxuICBsZXQtdG9vbHRpcD1cInRvb2x0aXBcIlxuICBsZXQtdG9vbHRpcEtleT1cInRvb2x0aXBLZXlcIlxuICBsZXQtdGl0bGU9XCJ0aXRsZVwiXG4gIGxldC12YWx1ZXM9XCJ2YWx1ZXNcIlxuPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nSWY9XCJcbiAgICAgIHNlYXJjaEZpZWxkLmRhdGFUeXBlID09PSAndGV4dCcgJiZcbiAgICAgIChzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGUtc2VsZWN0LWRyb3Bkb3duJyB8fFxuICAgICAgICBzZWFyY2hGaWVsZC5maWVsZFR5cGUgPT09ICdzaW5nbGVfc2VsZWN0X2Ryb3Bkb3duJylcbiAgICBcIlxuICA+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtc2VsZWN0XG4gICAgICAqbmdJZj1cImRyb3Bkb3duU2VsZWN0SXRlbXNNYXBbc2VhcmNoRmllbGQua2V5XSBhcyBzZWFyY2hGaWVsZFNlbGVjdEl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJzZWFyY2hGaWVsZFNlbGVjdEl0ZW1zXCJcbiAgICAgIFttYXJnaW5dPVwiZmFsc2VcIlxuICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgICBbY2xlYXJTZWxlY3Rpb25TdWJqZWN0JF09XCJjbGVhciRcIlxuICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cInNpbmdsZVZhbHVlQ2hhbmdlKHNlYXJjaEZpZWxkLmtleSwgJGV2ZW50KVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKClcIlxuICAgICAgW2RlZmF1bHRTZWxlY3Rpb25JZF09XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgICBbY2FyYm9uVGhlbWVdPVwiY2FyYm9uVGhlbWVcIlxuICAgICAgW2FwcGVuZElubGluZV09XCJmYWxzZVwiXG4gICAgPjwvdi1zZWxlY3Q+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlXG4gICNzZWFyY2hGaWVsZFRlbXBsYXRlTXVsdGlTZWxlY3REcm9wZG93blxuICBsZXQtc2VhcmNoRmllbGQ9XCJzZWFyY2hGaWVsZFwiXG4gIGxldC10b29sdGlwPVwidG9vbHRpcFwiXG4gIGxldC10b29sdGlwS2V5PVwidG9vbHRpcEtleVwiXG4gIGxldC10aXRsZT1cInRpdGxlXCJcbiAgbGV0LXZhbHVlcz1cInZhbHVlc1wiXG4+XG4gIDxuZy1jb250YWluZXJcbiAgICAqbmdJZj1cIlxuICAgICAgc2VhcmNoRmllbGQuZGF0YVR5cGUgPT09ICd0ZXh0JyAmJlxuICAgICAgKHNlYXJjaEZpZWxkLmZpZWxkVHlwZSA9PT0gJ211bHRpLXNlbGVjdC1kcm9wZG93bicgfHxcbiAgICAgICAgc2VhcmNoRmllbGQuZmllbGRUeXBlID09PSAnbXVsdGlfc2VsZWN0X2Ryb3Bkb3duJylcbiAgICBcIlxuICA+XG4gICAgPHYtaW5wdXQtbGFiZWxcbiAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICBbdG9vbHRpcF09XCJ0b29sdGlwICE9PSB0b29sdGlwS2V5ICYmIHRvb2x0aXBcIlxuICAgICAgW3NtYWxsXT1cInRydWVcIlxuICAgID48L3YtaW5wdXQtbGFiZWw+XG4gICAgPHYtc2VsZWN0XG4gICAgICAqbmdJZj1cImRyb3Bkb3duU2VsZWN0SXRlbXNNYXBbc2VhcmNoRmllbGQua2V5XSBhcyBzZWFyY2hGaWVsZFNlbGVjdEl0ZW1zXCJcbiAgICAgIFtpdGVtc109XCJzZWFyY2hGaWVsZFNlbGVjdEl0ZW1zXCJcbiAgICAgIFttYXJnaW5dPVwiZmFsc2VcIlxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgW3JlcXVpcmVkXT1cImZhbHNlXCJcbiAgICAgIFtuYW1lXT1cInNlYXJjaEZpZWxkLmtleVwiXG4gICAgICBbY2xlYXJTZWxlY3Rpb25TdWJqZWN0JF09XCJjbGVhciRcIlxuICAgICAgKHNlbGVjdGVkQ2hhbmdlKT1cIm11bHRpcGxlVmFsdWVDaGFuZ2Uoc2VhcmNoRmllbGQua2V5LCAkZXZlbnQpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJzZWFyY2goKVwiXG4gICAgICBbZGVmYXVsdFNlbGVjdGlvbklkc109XCJ2YWx1ZXNbc2VhcmNoRmllbGQua2V5XVwiXG4gICAgICBbZGlzYWJsZWRdPVwiaW5wdXREaXNhYmxlZFwiXG4gICAgICBbY2FyYm9uVGhlbWVdPVwiY2FyYm9uVGhlbWVcIlxuICAgICAgW2FwcGVuZElubGluZV09XCJmYWxzZVwiXG4gICAgPjwvdi1zZWxlY3Q+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0b1RleHQ+XG4gIDxkaXYgY2xhc3M9XCJ0by10ZXh0XCI+XG4gICAgPHYtcGFyYWdyYXBoPnt7ICdzZWFyY2hGaWVsZHMudG8nIHwgdHJhbnNsYXRlIH19PC92LXBhcmFncmFwaD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2J1dHRvbnNUZW1wbGF0ZSBsZXQtbm9TZWFyY2hGaWVsZHM9XCJub1NlYXJjaEZpZWxkc1wiPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1NlYXJjaEZpZWxkc1RlbXBsYXRlOyBjb250ZXh0OiB7bm9TZWFyY2hGaWVsZHM6IG5vU2VhcmNoRmllbGRzfVwiXG4gID48L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIiAqbmdJZj1cIiFub1NlYXJjaEZpZWxkcyAmJiB7ZXhwYW5kZWQ6IGV4cGFuZGVkJCB8IGFzeW5jfSBhcyBvYnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicmlnaHQtYnV0dG9uc1wiPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9icy5leHBhbmRlZFwiXG4gICAgICAgIGNkc0J1dHRvbj1cInRlcnRpYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cImNsZWFyKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwibG9hZGluZyB8fCBub1NlYXJjaEZpZWxkcyB8fCBpbnB1dERpc2FibGVkXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwiY2xlYXJcIlxuICAgICAgPlxuICAgICAgICA8c3ZnIGNkc0ljb249XCJ0cmFzaC1jYW5cIiBzaXplPVwiMTZcIiBjbGFzcz1cImNkcy0tYnRuX19pY29uXCI+PC9zdmc+XG5cbiAgICAgICAge3sgJ3NlYXJjaEZpZWxkcy5jbGVhckJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cIm9icy5leHBhbmRlZFwiXG4gICAgICAgIGNkc0J1dHRvbj1cInByaW1hcnlcIlxuICAgICAgICAoY2xpY2spPVwic2VhcmNoKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgbG9hZGluZyB8fCBub1NlYXJjaEZpZWxkcyB8fCAoaGFzVmFsaWRWYWx1ZXMkIHwgYXN5bmMpID09PSBmYWxzZSB8fCBpbnB1dERpc2FibGVkXG4gICAgICAgIFwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpZD1cInNlYXJjaFwiXG4gICAgICA+XG4gICAgICAgIDxzdmcgY2RzSWNvbj1cInNlYXJjaFwiIHNpemU9XCIxNlwiIGNsYXNzPVwiY2RzLS1idG5fX2ljb25cIj48L3N2Zz5cblxuICAgICAgICB7eyAnc2VhcmNoRmllbGRzLnNlYXJjaEJ1dHRvblRleHQnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI25vU2VhcmNoRmllbGRzVGVtcGxhdGUgbGV0LW5vU2VhcmNoRmllbGRzPVwibm9TZWFyY2hGaWVsZHNcIj5cbiAgPGRpdiBjbGFzcz1cIm5vLXNlYXJjaC1maWVsZHMtbWVzc2FnZVwiICpuZ0lmPVwibm9TZWFyY2hGaWVsZHNcIj5cbiAgICA8di1wYXJhZ3JhcGggW2Z1bGxXaWR0aF09XCJ0cnVlXCIgW2NlbnRlcl09XCJ0cnVlXCI+e3tcbiAgICAgICdzZWFyY2hGaWVsZHMubm9uZUNvbmZpZ3VyZWQnIHwgdHJhbnNsYXRlXG4gICAgfX08L3YtcGFyYWdyYXBoPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=