@openmrs/ngx-formentry 3.0.1-pre.100

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 (351) hide show
  1. package/abstract-controls-extension/afe-control-type.d.ts +6 -0
  2. package/abstract-controls-extension/afe-form-array.d.ts +43 -0
  3. package/abstract-controls-extension/afe-form-control.d.ts +46 -0
  4. package/abstract-controls-extension/afe-form-group.d.ts +38 -0
  5. package/abstract-controls-extension/control-extensions.d.ts +4 -0
  6. package/abstract-controls-extension/index.d.ts +4 -0
  7. package/abstract-controls-extension/value-change.listener.d.ts +4 -0
  8. package/bundles/openmrs-ngx-formentry.umd.js +16098 -0
  9. package/bundles/openmrs-ngx-formentry.umd.js.map +1 -0
  10. package/change-tracking/control-relation.d.ts +12 -0
  11. package/change-tracking/control-relations.d.ts +12 -0
  12. package/components/afe-ng-select.component.d.ts +28 -0
  13. package/components/appointments-overview/appointments-overview.component.d.ts +17 -0
  14. package/components/check-box/checkbox.component.d.ts +19 -0
  15. package/components/check-box/checkbox.module.d.ts +9 -0
  16. package/components/custom-component-wrapper/custom-component-wrapper..module.d.ts +9 -0
  17. package/components/custom-component-wrapper/custom-component-wrapper.component.d.ts +12 -0
  18. package/components/custom-control-wrapper/custom-control-wrapper..module.d.ts +10 -0
  19. package/components/custom-control-wrapper/custom-control-wrapper.component.d.ts +28 -0
  20. package/components/date-time-picker/date-picker/date-picker.component.d.ts +45 -0
  21. package/components/date-time-picker/date-time-picker.component.d.ts +28 -0
  22. package/components/date-time-picker/date-time-picker.module.d.ts +13 -0
  23. package/components/date-time-picker/index.d.ts +8 -0
  24. package/components/date-time-picker/picker-modal/modal.component.d.ts +12 -0
  25. package/components/date-time-picker/pipes/moment.pipe.d.ts +11 -0
  26. package/components/date-time-picker/time-picker/time-picker.component.d.ts +32 -0
  27. package/components/file-upload/file-upload.component.d.ts +29 -0
  28. package/components/file-upload/file-upload.module.d.ts +12 -0
  29. package/components/file-upload/secure.pipe.d.ts +26 -0
  30. package/components/input/input.directive.d.ts +31 -0
  31. package/components/input/input.module.d.ts +11 -0
  32. package/components/input/label.component.d.ts +90 -0
  33. package/components/input/text-area.directive.d.ts +24 -0
  34. package/components/ngx-datetime-picker/ngx-datetime-picker.component.d.ts +21 -0
  35. package/components/ngx-datetime-picker/ngx-datetime-picker.module.d.ts +11 -0
  36. package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.d.ts +189 -0
  37. package/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.d.ts +15 -0
  38. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.d.ts +73 -0
  39. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.d.ts +5 -0
  40. package/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.d.ts +12 -0
  41. package/components/ngx-pick-datetime/lib/date-time/calendar-body.component.d.ts +76 -0
  42. package/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.d.ts +139 -0
  43. package/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.d.ts +108 -0
  44. package/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.d.ts +120 -0
  45. package/components/ngx-pick-datetime/lib/date-time/calendar.component.d.ts +137 -0
  46. package/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.d.ts +92 -0
  47. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.d.ts +121 -0
  48. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.d.ts +149 -0
  49. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.d.ts +51 -0
  50. package/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.d.ts +20 -0
  51. package/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.d.ts +8 -0
  52. package/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.d.ts +156 -0
  53. package/components/ngx-pick-datetime/lib/date-time/date-time.class.d.ts +89 -0
  54. package/components/ngx-pick-datetime/lib/date-time/date-time.module.d.ts +23 -0
  55. package/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.d.ts +10 -0
  56. package/components/ngx-pick-datetime/lib/date-time/timer-box.component.d.ts +35 -0
  57. package/components/ngx-pick-datetime/lib/date-time/timer.component.d.ts +128 -0
  58. package/components/ngx-pick-datetime/lib/dialog/dialog-config.class.d.ts +93 -0
  59. package/components/ngx-pick-datetime/lib/dialog/dialog-container.component.d.ts +58 -0
  60. package/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.d.ts +49 -0
  61. package/components/ngx-pick-datetime/lib/dialog/dialog.module.d.ts +11 -0
  62. package/components/ngx-pick-datetime/lib/dialog/dialog.service.d.ts +73 -0
  63. package/components/ngx-pick-datetime/lib/utils/index.d.ts +4 -0
  64. package/components/ngx-pick-datetime/lib/utils/object.utils.d.ts +11 -0
  65. package/components/ngx-remote-select/ngx-remote-select.component.d.ts +40 -0
  66. package/components/ngx-remote-select/ngx-remote-select.module.d.ts +10 -0
  67. package/components/ngx-tabset/components/ngx-tab-set.component.d.ts +19 -0
  68. package/components/ngx-tabset/components/tab.component.d.ts +13 -0
  69. package/components/ngx-tabset/directives/hover-class.directive.d.ts +11 -0
  70. package/components/ngx-tabset/modules/ngx-tabset.module.d.ts +19 -0
  71. package/components/number-input/number-input.component.d.ts +151 -0
  72. package/components/number-input/number-input.module.d.ts +9 -0
  73. package/components/radio-button/radio.component.d.ts +22 -0
  74. package/components/radio-button/radio.module.d.ts +9 -0
  75. package/components/select/optgroup.directive.d.ts +6 -0
  76. package/components/select/option.directive.d.ts +6 -0
  77. package/components/select/select.component.d.ts +115 -0
  78. package/components/select/select.module.d.ts +11 -0
  79. package/esm2015/abstract-controls-extension/afe-control-type.js +8 -0
  80. package/esm2015/abstract-controls-extension/afe-form-array.js +85 -0
  81. package/esm2015/abstract-controls-extension/afe-form-control.js +88 -0
  82. package/esm2015/abstract-controls-extension/afe-form-group.js +61 -0
  83. package/esm2015/abstract-controls-extension/control-extensions.js +5 -0
  84. package/esm2015/abstract-controls-extension/index.js +5 -0
  85. package/esm2015/abstract-controls-extension/value-change.listener.js +2 -0
  86. package/esm2015/change-tracking/control-relation.js +44 -0
  87. package/esm2015/change-tracking/control-relations.js +32 -0
  88. package/esm2015/components/afe-ng-select.component.js +101 -0
  89. package/esm2015/components/appointments-overview/appointments-overview.component.js +121 -0
  90. package/esm2015/components/check-box/checkbox.component.js +90 -0
  91. package/esm2015/components/check-box/checkbox.module.js +19 -0
  92. package/esm2015/components/custom-component-wrapper/custom-component-wrapper..module.js +21 -0
  93. package/esm2015/components/custom-component-wrapper/custom-component-wrapper.component.js +23 -0
  94. package/esm2015/components/custom-control-wrapper/custom-control-wrapper..module.js +22 -0
  95. package/esm2015/components/custom-control-wrapper/custom-control-wrapper.component.js +73 -0
  96. package/esm2015/components/date-time-picker/date-picker/date-picker.component.js +192 -0
  97. package/esm2015/components/date-time-picker/date-time-picker.component.js +119 -0
  98. package/esm2015/components/date-time-picker/date-time-picker.module.js +47 -0
  99. package/esm2015/components/date-time-picker/index.js +9 -0
  100. package/esm2015/components/date-time-picker/picker-modal/modal.component.js +31 -0
  101. package/esm2015/components/date-time-picker/pipes/moment.pipe.js +17 -0
  102. package/esm2015/components/date-time-picker/time-picker/time-picker.component.js +125 -0
  103. package/esm2015/components/file-upload/file-upload.component.js +122 -0
  104. package/esm2015/components/file-upload/file-upload.module.js +39 -0
  105. package/esm2015/components/file-upload/secure.pipe.js +101 -0
  106. package/esm2015/components/input/input.directive.js +78 -0
  107. package/esm2015/components/input/input.module.js +23 -0
  108. package/esm2015/components/input/label.component.js +263 -0
  109. package/esm2015/components/input/text-area.directive.js +54 -0
  110. package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.component.js +80 -0
  111. package/esm2015/components/ngx-datetime-picker/ngx-datetime-picker.module.js +38 -0
  112. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-adapter.class.js +114 -0
  113. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/date-time-format.class.js +7 -0
  114. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-adapter.class.js +347 -0
  115. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time-format.class.js +16 -0
  116. package/esm2015/components/ngx-pick-datetime/lib/date-time/adapter/native-date-time.module.js +39 -0
  117. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-body.component.js +149 -0
  118. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-month-view.component.js +445 -0
  119. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-multi-year-view.component.js +378 -0
  120. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar-year-view.component.js +373 -0
  121. package/esm2015/components/ngx-pick-datetime/lib/date-time/calendar.component.js +348 -0
  122. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-inline.component.js +265 -0
  123. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-container.component.js +399 -0
  124. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-input.directive.js +614 -0
  125. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-intl.service.js +62 -0
  126. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker-trigger.directive.js +70 -0
  127. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.animations.js +21 -0
  128. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time-picker.component.js +528 -0
  129. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.class.js +166 -0
  130. package/esm2015/components/ngx-pick-datetime/lib/date-time/date-time.module.js +83 -0
  131. package/esm2015/components/ngx-pick-datetime/lib/date-time/numberedFixLen.pipe.js +28 -0
  132. package/esm2015/components/ngx-pick-datetime/lib/date-time/timer-box.component.js +96 -0
  133. package/esm2015/components/ngx-pick-datetime/lib/date-time/timer.component.js +298 -0
  134. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-config.class.js +56 -0
  135. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-container.component.js +247 -0
  136. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog-ref.class.js +119 -0
  137. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.module.js +27 -0
  138. package/esm2015/components/ngx-pick-datetime/lib/dialog/dialog.service.js +233 -0
  139. package/esm2015/components/ngx-pick-datetime/lib/utils/index.js +5 -0
  140. package/esm2015/components/ngx-pick-datetime/lib/utils/object.utils.js +26 -0
  141. package/esm2015/components/ngx-remote-select/ngx-remote-select.component.js +135 -0
  142. package/esm2015/components/ngx-remote-select/ngx-remote-select.module.js +21 -0
  143. package/esm2015/components/ngx-tabset/components/ngx-tab-set.component.js +76 -0
  144. package/esm2015/components/ngx-tabset/components/tab.component.js +37 -0
  145. package/esm2015/components/ngx-tabset/directives/hover-class.directive.js +30 -0
  146. package/esm2015/components/ngx-tabset/modules/ngx-tabset.module.js +38 -0
  147. package/esm2015/components/number-input/number-input.component.js +233 -0
  148. package/esm2015/components/number-input/number-input.module.js +20 -0
  149. package/esm2015/components/radio-button/radio.component.js +87 -0
  150. package/esm2015/components/radio-button/radio.module.js +19 -0
  151. package/esm2015/components/select/optgroup.directive.js +19 -0
  152. package/esm2015/components/select/option.directive.js +19 -0
  153. package/esm2015/components/select/select.component.js +187 -0
  154. package/esm2015/components/select/select.module.js +23 -0
  155. package/esm2015/form-entry/control-alerts/alert-helpers.js +40 -0
  156. package/esm2015/form-entry/control-alerts/can-generate-alert.js +2 -0
  157. package/esm2015/form-entry/control-calculators/can-calculate.js +2 -0
  158. package/esm2015/form-entry/control-hiders-disablers/can-disable.js +2 -0
  159. package/esm2015/form-entry/control-hiders-disablers/can-hide.js +2 -0
  160. package/esm2015/form-entry/control-hiders-disablers/disabler-helper.js +32 -0
  161. package/esm2015/form-entry/control-hiders-disablers/hider-helpers.js +40 -0
  162. package/esm2015/form-entry/data-sources/data-sources.js +30 -0
  163. package/esm2015/form-entry/data-sources/dummy-data-source.js +104 -0
  164. package/esm2015/form-entry/directives/collapse-animations.js +11 -0
  165. package/esm2015/form-entry/directives/collapse.directive.js +172 -0
  166. package/esm2015/form-entry/directives/historical-value.directive.js +67 -0
  167. package/esm2015/form-entry/error-renderer/error-renderer.component.js +56 -0
  168. package/esm2015/form-entry/expression-runner/expression-runner.js +170 -0
  169. package/esm2015/form-entry/form-entry.module.js +187 -0
  170. package/esm2015/form-entry/form-factory/control-relations.factory.js +238 -0
  171. package/esm2015/form-entry/form-factory/form-control.service.js +119 -0
  172. package/esm2015/form-entry/form-factory/form-node.js +96 -0
  173. package/esm2015/form-entry/form-factory/form.factory.js +141 -0
  174. package/esm2015/form-entry/form-factory/form.js +189 -0
  175. package/esm2015/form-entry/form-factory/hiders-disablers.factory.js +67 -0
  176. package/esm2015/form-entry/form-factory/question.factory.js +942 -0
  177. package/esm2015/form-entry/form-factory/show-messages.factory.js +31 -0
  178. package/esm2015/form-entry/form-factory/validation.factory.js +147 -0
  179. package/esm2015/form-entry/form-renderer/form-renderer.component.js +268 -0
  180. package/esm2015/form-entry/helpers/historical-expression-helper-service.js +42 -0
  181. package/esm2015/form-entry/helpers/historical-field-helper-service.js +39 -0
  182. package/esm2015/form-entry/helpers/js-expression-helper.js +269 -0
  183. package/esm2015/form-entry/helpers/risk-dataset-table.js +247 -0
  184. package/esm2015/form-entry/pipes/time-ago.pipe.js +107 -0
  185. package/esm2015/form-entry/question-models/checkbox.model.js +11 -0
  186. package/esm2015/form-entry/question-models/conditional-validation.model.js +9 -0
  187. package/esm2015/form-entry/question-models/custom-control-question.model.js +10 -0
  188. package/esm2015/form-entry/question-models/date-question.js +12 -0
  189. package/esm2015/form-entry/question-models/date-validation.model.js +10 -0
  190. package/esm2015/form-entry/question-models/file-upload-question.js +13 -0
  191. package/esm2015/form-entry/question-models/group-question.js +12 -0
  192. package/esm2015/form-entry/question-models/interfaces/base-options.js +2 -0
  193. package/esm2015/form-entry/question-models/interfaces/checkbox-options.js +2 -0
  194. package/esm2015/form-entry/question-models/interfaces/data-source.js +2 -0
  195. package/esm2015/form-entry/question-models/interfaces/date-question-options.js +2 -0
  196. package/esm2015/form-entry/question-models/interfaces/file-upload-question-options.js +2 -0
  197. package/esm2015/form-entry/question-models/interfaces/group-question-options.js +2 -0
  198. package/esm2015/form-entry/question-models/interfaces/multi-select-options.js +2 -0
  199. package/esm2015/form-entry/question-models/interfaces/nested-questions.js +7 -0
  200. package/esm2015/form-entry/question-models/interfaces/radio-button-options.js +2 -0
  201. package/esm2015/form-entry/question-models/interfaces/repeating-question-options.js +2 -0
  202. package/esm2015/form-entry/question-models/interfaces/select-option.js +2 -0
  203. package/esm2015/form-entry/question-models/interfaces/select-question-options.js +2 -0
  204. package/esm2015/form-entry/question-models/interfaces/test-order-question-options.js +2 -0
  205. package/esm2015/form-entry/question-models/interfaces/text-area-question-options.js +2 -0
  206. package/esm2015/form-entry/question-models/interfaces/text-question-options.js +2 -0
  207. package/esm2015/form-entry/question-models/interfaces/ui-select-question-options.js +2 -0
  208. package/esm2015/form-entry/question-models/js-expression-validation.model.js +8 -0
  209. package/esm2015/form-entry/question-models/max-validation.model.js +9 -0
  210. package/esm2015/form-entry/question-models/min-validation.model.js +9 -0
  211. package/esm2015/form-entry/question-models/models.js +13 -0
  212. package/esm2015/form-entry/question-models/multi-select-question.js +11 -0
  213. package/esm2015/form-entry/question-models/pair.model.js +7 -0
  214. package/esm2015/form-entry/question-models/question-base.js +26 -0
  215. package/esm2015/form-entry/question-models/radio-button.model.js +12 -0
  216. package/esm2015/form-entry/question-models/rendering-type.js +9 -0
  217. package/esm2015/form-entry/question-models/repeating-question.js +11 -0
  218. package/esm2015/form-entry/question-models/select-option.js +7 -0
  219. package/esm2015/form-entry/question-models/select-question.js +12 -0
  220. package/esm2015/form-entry/question-models/test-order-question.js +15 -0
  221. package/esm2015/form-entry/question-models/text-area-input-question.js +13 -0
  222. package/esm2015/form-entry/question-models/text-input-question.js +10 -0
  223. package/esm2015/form-entry/question-models/ui-select-question.js +11 -0
  224. package/esm2015/form-entry/question-models/validation.model.js +7 -0
  225. package/esm2015/form-entry/services/debug-mode.service.js +24 -0
  226. package/esm2015/form-entry/services/form-errors.service.js +21 -0
  227. package/esm2015/form-entry/services/form-schema-compiler.service.js +248 -0
  228. package/esm2015/form-entry/services/historical-encounter-data.service.js +172 -0
  229. package/esm2015/form-entry/utils/messages.js +12 -0
  230. package/esm2015/form-entry/validators/conditional-answered.validator.js +46 -0
  231. package/esm2015/form-entry/validators/conditional-required.validator.js +40 -0
  232. package/esm2015/form-entry/validators/date.validator.js +18 -0
  233. package/esm2015/form-entry/validators/future-date-restriction.validator.js +21 -0
  234. package/esm2015/form-entry/validators/js-expression.validator.js +26 -0
  235. package/esm2015/form-entry/validators/max-date.validator.js +23 -0
  236. package/esm2015/form-entry/validators/max.validator.js +17 -0
  237. package/esm2015/form-entry/validators/min-date.validator.js +23 -0
  238. package/esm2015/form-entry/validators/min.validator.js +17 -0
  239. package/esm2015/form-entry/validators/required.validator.js +11 -0
  240. package/esm2015/form-entry/validators/validations.js +5 -0
  241. package/esm2015/form-entry/value-adapters/encounter.adapter.js +171 -0
  242. package/esm2015/form-entry/value-adapters/obs-adapter-helper.js +512 -0
  243. package/esm2015/form-entry/value-adapters/obs.adapter.js +542 -0
  244. package/esm2015/form-entry/value-adapters/order.adapter.js +186 -0
  245. package/esm2015/form-entry/value-adapters/person-attribute.adapter.js +88 -0
  246. package/esm2015/form-entry/value-adapters/value.adapter.js +2 -0
  247. package/esm2015/lib/index.js +58 -0
  248. package/esm2015/openmrs-ngx-formentry.js +5 -0
  249. package/esm2015/public_api.js +2 -0
  250. package/esm2015/shared.module.js +21 -0
  251. package/fesm2015/openmrs-ngx-formentry.js +14317 -0
  252. package/fesm2015/openmrs-ngx-formentry.js.map +1 -0
  253. package/form-entry/control-alerts/alert-helpers.d.ts +9 -0
  254. package/form-entry/control-alerts/can-generate-alert.d.ts +18 -0
  255. package/form-entry/control-calculators/can-calculate.d.ts +5 -0
  256. package/form-entry/control-hiders-disablers/can-disable.d.ts +19 -0
  257. package/form-entry/control-hiders-disablers/can-hide.d.ts +20 -0
  258. package/form-entry/control-hiders-disablers/disabler-helper.d.ts +7 -0
  259. package/form-entry/control-hiders-disablers/hider-helpers.d.ts +9 -0
  260. package/form-entry/data-sources/data-sources.d.ts +10 -0
  261. package/form-entry/data-sources/dummy-data-source.d.ts +18 -0
  262. package/form-entry/directives/collapse-animations.d.ts +4 -0
  263. package/form-entry/directives/collapse.directive.d.ts +45 -0
  264. package/form-entry/directives/historical-value.directive.d.ts +16 -0
  265. package/form-entry/error-renderer/error-renderer.component.d.ts +18 -0
  266. package/form-entry/expression-runner/expression-runner.d.ts +18 -0
  267. package/form-entry/form-entry.module.d.ts +30 -0
  268. package/form-entry/form-factory/control-relations.factory.d.ts +18 -0
  269. package/form-entry/form-factory/form-control.service.d.ts +25 -0
  270. package/form-entry/form-factory/form-node.d.ts +52 -0
  271. package/form-entry/form-factory/form.d.ts +28 -0
  272. package/form-entry/form-factory/form.factory.d.ts +27 -0
  273. package/form-entry/form-factory/hiders-disablers.factory.d.ts +20 -0
  274. package/form-entry/form-factory/question.factory.d.ts +62 -0
  275. package/form-entry/form-factory/show-messages.factory.d.ts +15 -0
  276. package/form-entry/form-factory/validation.factory.d.ts +25 -0
  277. package/form-entry/form-renderer/form-renderer.component.d.ts +63 -0
  278. package/form-entry/helpers/historical-expression-helper-service.d.ts +8 -0
  279. package/form-entry/helpers/historical-field-helper-service.d.ts +7 -0
  280. package/form-entry/helpers/js-expression-helper.d.ts +29 -0
  281. package/form-entry/helpers/risk-dataset-table.d.ts +1 -0
  282. package/form-entry/pipes/time-ago.pipe.d.ts +14 -0
  283. package/form-entry/question-models/checkbox.model.d.ts +9 -0
  284. package/form-entry/question-models/conditional-validation.model.d.ts +6 -0
  285. package/form-entry/question-models/custom-control-question.model.d.ts +6 -0
  286. package/form-entry/question-models/date-question.d.ts +7 -0
  287. package/form-entry/question-models/date-validation.model.d.ts +5 -0
  288. package/form-entry/question-models/file-upload-question.d.ts +8 -0
  289. package/form-entry/question-models/group-question.d.ts +8 -0
  290. package/form-entry/question-models/interfaces/base-options.d.ts +30 -0
  291. package/form-entry/question-models/interfaces/checkbox-options.d.ts +7 -0
  292. package/form-entry/question-models/interfaces/data-source.d.ts +10 -0
  293. package/form-entry/question-models/interfaces/date-question-options.d.ts +3 -0
  294. package/form-entry/question-models/interfaces/file-upload-question-options.d.ts +5 -0
  295. package/form-entry/question-models/interfaces/group-question-options.d.ts +5 -0
  296. package/form-entry/question-models/interfaces/multi-select-options.d.ts +4 -0
  297. package/form-entry/question-models/interfaces/nested-questions.d.ts +6 -0
  298. package/form-entry/question-models/interfaces/radio-button-options.d.ts +8 -0
  299. package/form-entry/question-models/interfaces/repeating-question-options.d.ts +7 -0
  300. package/form-entry/question-models/interfaces/select-option.d.ts +4 -0
  301. package/form-entry/question-models/interfaces/select-question-options.d.ts +9 -0
  302. package/form-entry/question-models/interfaces/test-order-question-options.d.ts +14 -0
  303. package/form-entry/question-models/interfaces/text-area-question-options.d.ts +5 -0
  304. package/form-entry/question-models/interfaces/text-question-options.d.ts +4 -0
  305. package/form-entry/question-models/interfaces/ui-select-question-options.d.ts +9 -0
  306. package/form-entry/question-models/js-expression-validation.model.d.ts +5 -0
  307. package/form-entry/question-models/max-validation.model.d.ts +5 -0
  308. package/form-entry/question-models/min-validation.model.d.ts +5 -0
  309. package/form-entry/question-models/models.d.ts +16 -0
  310. package/form-entry/question-models/multi-select-question.d.ts +9 -0
  311. package/form-entry/question-models/pair.model.d.ts +5 -0
  312. package/form-entry/question-models/question-base.d.ts +45 -0
  313. package/form-entry/question-models/radio-button.model.d.ts +7 -0
  314. package/form-entry/question-models/rendering-type.d.ts +7 -0
  315. package/form-entry/question-models/repeating-question.d.ts +7 -0
  316. package/form-entry/question-models/select-option.d.ts +6 -0
  317. package/form-entry/question-models/select-question.d.ts +10 -0
  318. package/form-entry/question-models/test-order-question.d.ts +13 -0
  319. package/form-entry/question-models/text-area-input-question.d.ts +7 -0
  320. package/form-entry/question-models/text-input-question.d.ts +6 -0
  321. package/form-entry/question-models/ui-select-question.d.ts +11 -0
  322. package/form-entry/question-models/validation.model.d.ts +5 -0
  323. package/form-entry/services/debug-mode.service.d.ts +8 -0
  324. package/form-entry/services/form-errors.service.d.ts +13 -0
  325. package/form-entry/services/form-schema-compiler.service.d.ts +23 -0
  326. package/form-entry/services/historical-encounter-data.service.d.ts +15 -0
  327. package/form-entry/utils/messages.d.ts +11 -0
  328. package/form-entry/validators/conditional-answered.validator.d.ts +8 -0
  329. package/form-entry/validators/conditional-required.validator.d.ts +8 -0
  330. package/form-entry/validators/date.validator.d.ts +7 -0
  331. package/form-entry/validators/future-date-restriction.validator.d.ts +7 -0
  332. package/form-entry/validators/js-expression.validator.d.ts +8 -0
  333. package/form-entry/validators/max-date.validator.d.ts +6 -0
  334. package/form-entry/validators/max.validator.d.ts +6 -0
  335. package/form-entry/validators/min-date.validator.d.ts +6 -0
  336. package/form-entry/validators/min.validator.d.ts +6 -0
  337. package/form-entry/validators/required.validator.d.ts +6 -0
  338. package/form-entry/validators/validations.d.ts +4 -0
  339. package/form-entry/value-adapters/encounter.adapter.d.ts +26 -0
  340. package/form-entry/value-adapters/obs-adapter-helper.d.ts +34 -0
  341. package/form-entry/value-adapters/obs.adapter.d.ts +38 -0
  342. package/form-entry/value-adapters/order.adapter.d.ts +20 -0
  343. package/form-entry/value-adapters/person-attribute.adapter.d.ts +15 -0
  344. package/form-entry/value-adapters/value.adapter.d.ts +5 -0
  345. package/lib/index.d.ts +58 -0
  346. package/openmrs-ngx-formentry.d.ts +5 -0
  347. package/package.json +34 -0
  348. package/public_api.d.ts +1 -0
  349. package/shared.module.d.ts +9 -0
  350. package/styles/ngx-formentry.css +374 -0
  351. package/styles/picker.min.css +770 -0
@@ -0,0 +1,31 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { ExpressionRunner } from '../expression-runner/expression-runner';
3
+ import { JsExpressionHelper } from '../helpers/js-expression-helper';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../expression-runner/expression-runner";
6
+ import * as i2 from "../helpers/js-expression-helper";
7
+ export class AlertsFactory {
8
+ constructor(expressionRunner, expressionHelper) {
9
+ this.expressionRunner = expressionRunner;
10
+ this.expressionHelper = expressionHelper;
11
+ }
12
+ getJsExpressionshowAlert(question, control, form) {
13
+ const runnable = this.expressionRunner.getRunnable(question.alert.alertWhenExpression, control, this.expressionHelper.helperFunctions, {}, form);
14
+ const showAlert = {
15
+ shown: false,
16
+ alertWhenExpression: question.alert.alertWhenExpression,
17
+ alertMessage: question.alert.message,
18
+ reEvaluateAlertExpression: () => {
19
+ const result = runnable.run();
20
+ showAlert.shown = result;
21
+ }
22
+ };
23
+ return showAlert;
24
+ }
25
+ }
26
+ AlertsFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AlertsFactory, deps: [{ token: i1.ExpressionRunner }, { token: i2.JsExpressionHelper }], target: i0.ɵɵFactoryTarget.Injectable });
27
+ AlertsFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AlertsFactory });
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: AlertsFactory, decorators: [{
29
+ type: Injectable
30
+ }], ctorParameters: function () { return [{ type: i1.ExpressionRunner }, { type: i2.JsExpressionHelper }]; } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hvdy1tZXNzYWdlcy5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvZm9ybS1lbnRyeS9mb3JtLWZhY3Rvcnkvc2hvdy1tZXNzYWdlcy5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUNMLGdCQUFnQixFQUVqQixNQUFNLHdDQUF3QyxDQUFDO0FBT2hELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBSXJFLE1BQU0sT0FBTyxhQUFhO0lBQ3hCLFlBQ1UsZ0JBQWtDLEVBQ2xDLGdCQUFvQztRQURwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBb0I7SUFDM0MsQ0FBQztJQUNKLHdCQUF3QixDQUN0QixRQUFzQixFQUN0QixPQUFxRCxFQUNyRCxJQUFXO1FBRVgsTUFBTSxRQUFRLEdBQWEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FDMUQsUUFBUSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsRUFDbEMsT0FBTyxFQUNQLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQ3JDLEVBQUUsRUFDRixJQUFJLENBQ0wsQ0FBQztRQUNGLE1BQU0sU0FBUyxHQUFVO1lBQ3ZCLEtBQUssRUFBRSxLQUFLO1lBQ1osbUJBQW1CLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxtQkFBbUI7WUFDdkQsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTztZQUNwQyx5QkFBeUIsRUFBRSxHQUFHLEVBQUU7Z0JBQzlCLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDOUIsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7WUFDM0IsQ0FBQztTQUNGLENBQUM7UUFDRixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzsyR0EzQlUsYUFBYTsrR0FBYixhQUFhOzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFsZXJ0IH0gZnJvbSAnLi4vY29udHJvbC1hbGVydHMvY2FuLWdlbmVyYXRlLWFsZXJ0JztcblxuaW1wb3J0IHtcbiAgRXhwcmVzc2lvblJ1bm5lcixcbiAgUnVubmFibGVcbn0gZnJvbSAnLi4vZXhwcmVzc2lvbi1ydW5uZXIvZXhwcmVzc2lvbi1ydW5uZXInO1xuaW1wb3J0IHtcbiAgQWZlRm9ybUNvbnRyb2wsXG4gIEFmZUZvcm1BcnJheSxcbiAgQWZlRm9ybUdyb3VwXG59IGZyb20gJy4uLy4uL2Fic3RyYWN0LWNvbnRyb2xzLWV4dGVuc2lvbic7XG5pbXBvcnQgeyBRdWVzdGlvbkJhc2UgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvcXVlc3Rpb24tYmFzZSc7XG5pbXBvcnQgeyBKc0V4cHJlc3Npb25IZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL2pzLWV4cHJlc3Npb24taGVscGVyJztcbmltcG9ydCB7IEZvcm0gfSBmcm9tICcuL2Zvcm0nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWxlcnRzRmFjdG9yeSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZXhwcmVzc2lvblJ1bm5lcjogRXhwcmVzc2lvblJ1bm5lcixcbiAgICBwcml2YXRlIGV4cHJlc3Npb25IZWxwZXI6IEpzRXhwcmVzc2lvbkhlbHBlclxuICApIHt9XG4gIGdldEpzRXhwcmVzc2lvbnNob3dBbGVydChcbiAgICBxdWVzdGlvbjogUXVlc3Rpb25CYXNlLFxuICAgIGNvbnRyb2w6IEFmZUZvcm1Db250cm9sIHwgQWZlRm9ybUFycmF5IHwgQWZlRm9ybUdyb3VwLFxuICAgIGZvcm0/OiBGb3JtXG4gICk6IEFsZXJ0IHtcbiAgICBjb25zdCBydW5uYWJsZTogUnVubmFibGUgPSB0aGlzLmV4cHJlc3Npb25SdW5uZXIuZ2V0UnVubmFibGUoXG4gICAgICBxdWVzdGlvbi5hbGVydC5hbGVydFdoZW5FeHByZXNzaW9uLFxuICAgICAgY29udHJvbCxcbiAgICAgIHRoaXMuZXhwcmVzc2lvbkhlbHBlci5oZWxwZXJGdW5jdGlvbnMsXG4gICAgICB7fSxcbiAgICAgIGZvcm1cbiAgICApO1xuICAgIGNvbnN0IHNob3dBbGVydDogQWxlcnQgPSB7XG4gICAgICBzaG93bjogZmFsc2UsXG4gICAgICBhbGVydFdoZW5FeHByZXNzaW9uOiBxdWVzdGlvbi5hbGVydC5hbGVydFdoZW5FeHByZXNzaW9uLFxuICAgICAgYWxlcnRNZXNzYWdlOiBxdWVzdGlvbi5hbGVydC5tZXNzYWdlLFxuICAgICAgcmVFdmFsdWF0ZUFsZXJ0RXhwcmVzc2lvbjogKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBydW5uYWJsZS5ydW4oKTtcbiAgICAgICAgc2hvd0FsZXJ0LnNob3duID0gcmVzdWx0O1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHNob3dBbGVydDtcbiAgfVxufVxuIl19
@@ -0,0 +1,147 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import * as _ from 'lodash';
4
+ import { ConditionalRequiredValidator } from '../validators/conditional-required.validator';
5
+ import { ConditionalAnsweredValidator } from '../validators/conditional-answered.validator';
6
+ import { RequiredValidator } from '../validators/required.validator';
7
+ import { DateValidator } from '../validators/date.validator';
8
+ import { MinValidator } from '../validators/min.validator';
9
+ import { MaxValidator } from '../validators/max.validator';
10
+ import { MinDateValidator } from '../validators/min-date.validator';
11
+ import { MaxDateValidator } from '../validators/max-date.validator';
12
+ import { FutureDateRestrictionValidator } from '../validators/future-date-restriction.validator';
13
+ import { JsExpressionValidator } from '../validators/js-expression.validator';
14
+ import { Messages } from '../utils/messages';
15
+ import * as i0 from "@angular/core";
16
+ export class ValidationFactory {
17
+ constructor() { }
18
+ getValidators(question, form) {
19
+ const list = [];
20
+ if (question.validators) {
21
+ _.forEach(question.validators, (validator) => {
22
+ switch (validator.type) {
23
+ case 'date':
24
+ list.push(this.dateValidator);
25
+ const allowFutureDates = validator
26
+ .allowFutureDates;
27
+ if (!allowFutureDates) {
28
+ list.push(this.futureDateRestrictionValidator);
29
+ }
30
+ break;
31
+ case 'js_expression':
32
+ list.push(this.jsExpressionValidator.validate(validator, form));
33
+ break;
34
+ case 'max':
35
+ list.push(this.getMaxValueValidator(validator.max));
36
+ break;
37
+ case 'min':
38
+ list.push(this.getMinValueValidator(validator.min));
39
+ break;
40
+ case 'conditionalRequired':
41
+ list.push(this.conditionalRequiredValidator.validate(validator));
42
+ break;
43
+ case 'conditionalAnswered':
44
+ list.push(this.conditionalAnsweredValidator.validate(validator));
45
+ break;
46
+ }
47
+ });
48
+ }
49
+ if (question.required &&
50
+ typeof question.required === 'string' &&
51
+ question.required === 'true') {
52
+ list.push(this.requiredValidator);
53
+ }
54
+ else {
55
+ // TODO - handle custom required validator
56
+ }
57
+ return list;
58
+ }
59
+ get conditionalRequiredValidator() {
60
+ return new ConditionalRequiredValidator();
61
+ }
62
+ get conditionalAnsweredValidator() {
63
+ return new ConditionalAnsweredValidator();
64
+ }
65
+ get requiredValidator() {
66
+ return new RequiredValidator().validate;
67
+ }
68
+ get dateValidator() {
69
+ return new DateValidator().validate;
70
+ }
71
+ get futureDateRestrictionValidator() {
72
+ return new FutureDateRestrictionValidator().validate;
73
+ }
74
+ get maxDateValidator() {
75
+ return new MaxDateValidator().validate;
76
+ }
77
+ get minDateValidator() {
78
+ return new MinDateValidator().validate;
79
+ }
80
+ get minLengthValidator() {
81
+ return Validators.minLength;
82
+ }
83
+ get maxLengthValidator() {
84
+ return Validators.maxLength;
85
+ }
86
+ getMinValueValidator(min) {
87
+ return new MinValidator().validate(min);
88
+ }
89
+ getMaxValueValidator(max) {
90
+ return new MaxValidator().validate(max);
91
+ }
92
+ get jsExpressionValidator() {
93
+ return new JsExpressionValidator();
94
+ }
95
+ errors(errors, question) {
96
+ const messages = [];
97
+ for (const property in errors) {
98
+ if (errors.hasOwnProperty(property)) {
99
+ switch (property) {
100
+ case 'required':
101
+ messages.push(Messages.REQUIRED_FIELD_MSG);
102
+ break;
103
+ case 'date':
104
+ messages.push(Messages.INVALID_DATE_MSG);
105
+ break;
106
+ case 'futureDateRestriction':
107
+ messages.push(Messages.FUTURE_DATE_RESTRICTION_MSG);
108
+ break;
109
+ case 'minlength':
110
+ messages.push(Messages.MIN_LENGTH_MSG.replace('{minLength}', errors.minlength.requiredLength));
111
+ break;
112
+ case 'maxlength':
113
+ messages.push(Messages.MIN_LENGTH_MSG.replace('{maxLength}', errors.maxlength.requiredLength));
114
+ break;
115
+ case 'maxdate':
116
+ messages.push(Messages.MAX_DATE_MSG.replace('{maxDate}', errors.maxdate.requiredDate));
117
+ break;
118
+ case 'mindate':
119
+ messages.push(Messages.MIN_DATE_MSG.replace('{minDate}', errors.mindate.requiredDate));
120
+ break;
121
+ case 'max':
122
+ messages.push(Messages.MAX_MSG.replace('{max}', errors.max.requiredValue));
123
+ break;
124
+ case 'min':
125
+ messages.push(Messages.MIN_MSG.replace('{min}', errors.min.requiredValue));
126
+ break;
127
+ case 'js_expression':
128
+ messages.push(errors['js_expression'].message);
129
+ break;
130
+ case 'conditional_required':
131
+ messages.push(errors['conditional_required'].message);
132
+ break;
133
+ case 'conditional_answered':
134
+ messages.push(errors['conditional_answered'].message);
135
+ break;
136
+ }
137
+ }
138
+ }
139
+ return messages;
140
+ }
141
+ }
142
+ ValidationFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ValidationFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
143
+ ValidationFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ValidationFactory });
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ValidationFactory, decorators: [{
145
+ type: Injectable
146
+ }], ctorParameters: function () { return []; } });
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm1lbnRyeS9zcmMvZm9ybS1lbnRyeS9mb3JtLWZhY3RvcnkvdmFsaWRhdGlvbi5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzVGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2pHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTlFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7QUFTN0MsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixnQkFBZSxDQUFDO0lBRWhCLGFBQWEsQ0FBQyxRQUFzQixFQUFFLElBQVU7UUFDOUMsTUFBTSxJQUFJLEdBQWUsRUFBRSxDQUFDO1FBRTVCLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUN2QixDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUEwQixFQUFFLEVBQUU7Z0JBQzVELFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRTtvQkFDdEIsS0FBSyxNQUFNO3dCQUNULElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUM5QixNQUFNLGdCQUFnQixHQUFrQyxTQUFVOzZCQUMvRCxnQkFBZ0IsQ0FBQzt3QkFFcEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFOzRCQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO3lCQUNoRDt3QkFDRCxNQUFNO29CQUNSLEtBQUssZUFBZTt3QkFDbEIsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUNKLFNBQVMsRUFDdEMsSUFBSSxDQUNMLENBQ0YsQ0FBQzt3QkFDRixNQUFNO29CQUNSLEtBQUssS0FBSzt3QkFDUixJQUFJLENBQUMsSUFBSSxDQUNQLElBQUksQ0FBQyxvQkFBb0IsQ0FBc0IsU0FBVSxDQUFDLEdBQUcsQ0FBQyxDQUMvRCxDQUFDO3dCQUNGLE1BQU07b0JBQ1IsS0FBSyxLQUFLO3dCQUNSLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxDQUFDLG9CQUFvQixDQUFzQixTQUFVLENBQUMsR0FBRyxDQUFDLENBQy9ELENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLHFCQUFxQjt3QkFDeEIsSUFBSSxDQUFDLElBQUksQ0FDUCxJQUFJLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUNaLFNBQVMsQ0FDdEMsQ0FDRixDQUFDO3dCQUNGLE1BQU07b0JBQ1IsS0FBSyxxQkFBcUI7d0JBQ3hCLElBQUksQ0FBQyxJQUFJLENBQ1AsSUFBSSxDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FDWixTQUFTLENBQ3RDLENBQ0YsQ0FBQzt3QkFDRixNQUFNO2lCQUNUO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQ0UsUUFBUSxDQUFDLFFBQVE7WUFDakIsT0FBTyxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVE7WUFDckMsUUFBUSxDQUFDLFFBQVEsS0FBSyxNQUFNLEVBQzVCO1lBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0wsMENBQTBDO1NBQzNDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSw0QkFBNEI7UUFDOUIsT0FBTyxJQUFJLDRCQUE0QixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksNEJBQTRCO1FBQzlCLE9BQU8sSUFBSSw0QkFBNEIsRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLGlCQUFpQjtRQUNuQixPQUFPLElBQUksaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQUksOEJBQThCO1FBQ2hDLE9BQU8sSUFBSSw4QkFBOEIsRUFBRSxDQUFDLFFBQVEsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDcEIsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQzlCLENBQUM7SUFFTSxvQkFBb0IsQ0FBQyxHQUFXO1FBQ3JDLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLG9CQUFvQixDQUFDLEdBQVc7UUFDckMsT0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsSUFBSSxxQkFBcUI7UUFDdkIsT0FBTyxJQUFJLHFCQUFxQixFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLE1BQU0sQ0FBQyxNQUFXLEVBQUUsUUFBc0I7UUFDL0MsTUFBTSxRQUFRLEdBQWtCLEVBQUUsQ0FBQztRQUVuQyxLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sRUFBRTtZQUM3QixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ25DLFFBQVEsUUFBUSxFQUFFO29CQUNoQixLQUFLLFVBQVU7d0JBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsQ0FBQzt3QkFDM0MsTUFBTTtvQkFDUixLQUFLLE1BQU07d0JBQ1QsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzt3QkFDekMsTUFBTTtvQkFDUixLQUFLLHVCQUF1Qjt3QkFDMUIsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsMkJBQTJCLENBQUMsQ0FBQzt3QkFDcEQsTUFBTTtvQkFDUixLQUFLLFdBQVc7d0JBQ2QsUUFBUSxDQUFDLElBQUksQ0FDWCxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDN0IsYUFBYSxFQUNiLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUNoQyxDQUNGLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLFdBQVc7d0JBQ2QsUUFBUSxDQUFDLElBQUksQ0FDWCxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDN0IsYUFBYSxFQUNiLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUNoQyxDQUNGLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLFNBQVM7d0JBQ1osUUFBUSxDQUFDLElBQUksQ0FDWCxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDM0IsV0FBVyxFQUNYLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUM1QixDQUNGLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLFNBQVM7d0JBQ1osUUFBUSxDQUFDLElBQUksQ0FDWCxRQUFRLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDM0IsV0FBVyxFQUNYLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUM1QixDQUNGLENBQUM7d0JBQ0YsTUFBTTtvQkFDUixLQUFLLEtBQUs7d0JBQ1IsUUFBUSxDQUFDLElBQUksQ0FDWCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FDNUQsQ0FBQzt3QkFDRixNQUFNO29CQUNSLEtBQUssS0FBSzt3QkFDUixRQUFRLENBQUMsSUFBSSxDQUNYLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUM1RCxDQUFDO3dCQUNGLE1BQU07b0JBQ1IsS0FBSyxlQUFlO3dCQUNsQixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDL0MsTUFBTTtvQkFDUixLQUFLLHNCQUFzQjt3QkFDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDdEQsTUFBTTtvQkFDUixLQUFLLHNCQUFzQjt3QkFDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDdEQsTUFBTTtpQkFDVDthQUNGO1NBQ0Y7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzsrR0ExTFUsaUJBQWlCO21IQUFqQixpQkFBaUI7NEZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IENvbmRpdGlvbmFsUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tICcuLi92YWxpZGF0b3JzL2NvbmRpdGlvbmFsLXJlcXVpcmVkLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBDb25kaXRpb25hbEFuc3dlcmVkVmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycy9jb25kaXRpb25hbC1hbnN3ZXJlZC52YWxpZGF0b3InO1xuaW1wb3J0IHsgUmVxdWlyZWRWYWxpZGF0b3IgfSBmcm9tICcuLi92YWxpZGF0b3JzL3JlcXVpcmVkLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBEYXRlVmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycy9kYXRlLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBNaW5WYWxpZGF0b3IgfSBmcm9tICcuLi92YWxpZGF0b3JzL21pbi52YWxpZGF0b3InO1xuaW1wb3J0IHsgTWF4VmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycy9tYXgudmFsaWRhdG9yJztcbmltcG9ydCB7IE1pbkRhdGVWYWxpZGF0b3IgfSBmcm9tICcuLi92YWxpZGF0b3JzL21pbi1kYXRlLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBNYXhEYXRlVmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycy9tYXgtZGF0ZS52YWxpZGF0b3InO1xuaW1wb3J0IHsgRnV0dXJlRGF0ZVJlc3RyaWN0aW9uVmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycy9mdXR1cmUtZGF0ZS1yZXN0cmljdGlvbi52YWxpZGF0b3InO1xuaW1wb3J0IHsgSnNFeHByZXNzaW9uVmFsaWRhdG9yIH0gZnJvbSAnLi4vdmFsaWRhdG9ycy9qcy1leHByZXNzaW9uLnZhbGlkYXRvcic7XG5pbXBvcnQgeyBRdWVzdGlvbkJhc2UgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvcXVlc3Rpb24tYmFzZSc7XG5pbXBvcnQgeyBNZXNzYWdlcyB9IGZyb20gJy4uL3V0aWxzL21lc3NhZ2VzJztcbmltcG9ydCB7IFZhbGlkYXRpb25Nb2RlbCB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy92YWxpZGF0aW9uLm1vZGVsJztcbmltcG9ydCB7IERhdGVWYWxpZGF0aW9uTW9kZWwgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvZGF0ZS12YWxpZGF0aW9uLm1vZGVsJztcbmltcG9ydCB7IE1heFZhbGlkYXRpb25Nb2RlbCB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy9tYXgtdmFsaWRhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBNaW5WYWxpZGF0aW9uTW9kZWwgfSBmcm9tICcuLi9xdWVzdGlvbi1tb2RlbHMvbWluLXZhbGlkYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgSnNFeHByZXNzaW9uVmFsaWRhdGlvbk1vZGVsIH0gZnJvbSAnLi4vcXVlc3Rpb24tbW9kZWxzL2pzLWV4cHJlc3Npb24tdmFsaWRhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBDb25kaXRpb25hbFZhbGlkYXRpb25Nb2RlbCB9IGZyb20gJy4uL3F1ZXN0aW9uLW1vZGVscy9jb25kaXRpb25hbC12YWxpZGF0aW9uLm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25GYWN0b3J5IHtcbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGdldFZhbGlkYXRvcnMocXVlc3Rpb246IFF1ZXN0aW9uQmFzZSwgZm9ybT86IGFueSkge1xuICAgIGNvbnN0IGxpc3Q6IEFycmF5PGFueT4gPSBbXTtcblxuICAgIGlmIChxdWVzdGlvbi52YWxpZGF0b3JzKSB7XG4gICAgICBfLmZvckVhY2gocXVlc3Rpb24udmFsaWRhdG9ycywgKHZhbGlkYXRvcjogVmFsaWRhdGlvbk1vZGVsKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodmFsaWRhdG9yLnR5cGUpIHtcbiAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgIGxpc3QucHVzaCh0aGlzLmRhdGVWYWxpZGF0b3IpO1xuICAgICAgICAgICAgY29uc3QgYWxsb3dGdXR1cmVEYXRlczogYm9vbGVhbiA9ICg8RGF0ZVZhbGlkYXRpb25Nb2RlbD52YWxpZGF0b3IpXG4gICAgICAgICAgICAgIC5hbGxvd0Z1dHVyZURhdGVzO1xuXG4gICAgICAgICAgICBpZiAoIWFsbG93RnV0dXJlRGF0ZXMpIHtcbiAgICAgICAgICAgICAgbGlzdC5wdXNoKHRoaXMuZnV0dXJlRGF0ZVJlc3RyaWN0aW9uVmFsaWRhdG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2pzX2V4cHJlc3Npb24nOlxuICAgICAgICAgICAgbGlzdC5wdXNoKFxuICAgICAgICAgICAgICB0aGlzLmpzRXhwcmVzc2lvblZhbGlkYXRvci52YWxpZGF0ZShcbiAgICAgICAgICAgICAgICA8SnNFeHByZXNzaW9uVmFsaWRhdGlvbk1vZGVsPnZhbGlkYXRvcixcbiAgICAgICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtYXgnOlxuICAgICAgICAgICAgbGlzdC5wdXNoKFxuICAgICAgICAgICAgICB0aGlzLmdldE1heFZhbHVlVmFsaWRhdG9yKCg8TWF4VmFsaWRhdGlvbk1vZGVsPnZhbGlkYXRvcikubWF4KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgICAgICBsaXN0LnB1c2goXG4gICAgICAgICAgICAgIHRoaXMuZ2V0TWluVmFsdWVWYWxpZGF0b3IoKDxNaW5WYWxpZGF0aW9uTW9kZWw+dmFsaWRhdG9yKS5taW4pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnY29uZGl0aW9uYWxSZXF1aXJlZCc6XG4gICAgICAgICAgICBsaXN0LnB1c2goXG4gICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxSZXF1aXJlZFZhbGlkYXRvci52YWxpZGF0ZShcbiAgICAgICAgICAgICAgICA8Q29uZGl0aW9uYWxWYWxpZGF0aW9uTW9kZWw+dmFsaWRhdG9yXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdjb25kaXRpb25hbEFuc3dlcmVkJzpcbiAgICAgICAgICAgIGxpc3QucHVzaChcbiAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbEFuc3dlcmVkVmFsaWRhdG9yLnZhbGlkYXRlKFxuICAgICAgICAgICAgICAgIDxDb25kaXRpb25hbFZhbGlkYXRpb25Nb2RlbD52YWxpZGF0b3JcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBxdWVzdGlvbi5yZXF1aXJlZCAmJlxuICAgICAgdHlwZW9mIHF1ZXN0aW9uLnJlcXVpcmVkID09PSAnc3RyaW5nJyAmJlxuICAgICAgcXVlc3Rpb24ucmVxdWlyZWQgPT09ICd0cnVlJ1xuICAgICkge1xuICAgICAgbGlzdC5wdXNoKHRoaXMucmVxdWlyZWRWYWxpZGF0b3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPIC0gaGFuZGxlIGN1c3RvbSByZXF1aXJlZCB2YWxpZGF0b3JcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIGdldCBjb25kaXRpb25hbFJlcXVpcmVkVmFsaWRhdG9yKCk6IENvbmRpdGlvbmFsUmVxdWlyZWRWYWxpZGF0b3Ige1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxSZXF1aXJlZFZhbGlkYXRvcigpO1xuICB9XG5cbiAgZ2V0IGNvbmRpdGlvbmFsQW5zd2VyZWRWYWxpZGF0b3IoKTogQ29uZGl0aW9uYWxBbnN3ZXJlZFZhbGlkYXRvciB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbEFuc3dlcmVkVmFsaWRhdG9yKCk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWRWYWxpZGF0b3IoKTogYW55IHtcbiAgICByZXR1cm4gbmV3IFJlcXVpcmVkVmFsaWRhdG9yKCkudmFsaWRhdGU7XG4gIH1cblxuICBnZXQgZGF0ZVZhbGlkYXRvcigpOiBhbnkge1xuICAgIHJldHVybiBuZXcgRGF0ZVZhbGlkYXRvcigpLnZhbGlkYXRlO1xuICB9XG5cbiAgZ2V0IGZ1dHVyZURhdGVSZXN0cmljdGlvblZhbGlkYXRvcigpOiBhbnkge1xuICAgIHJldHVybiBuZXcgRnV0dXJlRGF0ZVJlc3RyaWN0aW9uVmFsaWRhdG9yKCkudmFsaWRhdGU7XG4gIH1cblxuICBnZXQgbWF4RGF0ZVZhbGlkYXRvcigpOiBhbnkge1xuICAgIHJldHVybiBuZXcgTWF4RGF0ZVZhbGlkYXRvcigpLnZhbGlkYXRlO1xuICB9XG5cbiAgZ2V0IG1pbkRhdGVWYWxpZGF0b3IoKTogYW55IHtcbiAgICByZXR1cm4gbmV3IE1pbkRhdGVWYWxpZGF0b3IoKS52YWxpZGF0ZTtcbiAgfVxuXG4gIGdldCBtaW5MZW5ndGhWYWxpZGF0b3IoKTogYW55IHtcbiAgICByZXR1cm4gVmFsaWRhdG9ycy5taW5MZW5ndGg7XG4gIH1cblxuICBnZXQgbWF4TGVuZ3RoVmFsaWRhdG9yKCkge1xuICAgIHJldHVybiBWYWxpZGF0b3JzLm1heExlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRNaW5WYWx1ZVZhbGlkYXRvcihtaW46IG51bWJlcik6IGFueSB7XG4gICAgcmV0dXJuIG5ldyBNaW5WYWxpZGF0b3IoKS52YWxpZGF0ZShtaW4pO1xuICB9XG5cbiAgcHVibGljIGdldE1heFZhbHVlVmFsaWRhdG9yKG1heDogbnVtYmVyKTogYW55IHtcbiAgICByZXR1cm4gbmV3IE1heFZhbGlkYXRvcigpLnZhbGlkYXRlKG1heCk7XG4gIH1cblxuICBnZXQganNFeHByZXNzaW9uVmFsaWRhdG9yKCkge1xuICAgIHJldHVybiBuZXcgSnNFeHByZXNzaW9uVmFsaWRhdG9yKCk7XG4gIH1cblxuICBwdWJsaWMgZXJyb3JzKGVycm9yczogYW55LCBxdWVzdGlvbjogUXVlc3Rpb25CYXNlKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgbWVzc2FnZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gZXJyb3JzKSB7XG4gICAgICBpZiAoZXJyb3JzLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7XG4gICAgICAgICAgY2FzZSAncmVxdWlyZWQnOlxuICAgICAgICAgICAgbWVzc2FnZXMucHVzaChNZXNzYWdlcy5SRVFVSVJFRF9GSUVMRF9NU0cpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKE1lc3NhZ2VzLklOVkFMSURfREFURV9NU0cpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnZnV0dXJlRGF0ZVJlc3RyaWN0aW9uJzpcbiAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goTWVzc2FnZXMuRlVUVVJFX0RBVEVfUkVTVFJJQ1RJT05fTVNHKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21pbmxlbmd0aCc6XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgICBNZXNzYWdlcy5NSU5fTEVOR1RIX01TRy5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICd7bWluTGVuZ3RofScsXG4gICAgICAgICAgICAgICAgZXJyb3JzLm1pbmxlbmd0aC5yZXF1aXJlZExlbmd0aFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWF4bGVuZ3RoJzpcbiAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICAgIE1lc3NhZ2VzLk1JTl9MRU5HVEhfTVNHLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgJ3ttYXhMZW5ndGh9JyxcbiAgICAgICAgICAgICAgICBlcnJvcnMubWF4bGVuZ3RoLnJlcXVpcmVkTGVuZ3RoXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtYXhkYXRlJzpcbiAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICAgIE1lc3NhZ2VzLk1BWF9EQVRFX01TRy5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICd7bWF4RGF0ZX0nLFxuICAgICAgICAgICAgICAgIGVycm9ycy5tYXhkYXRlLnJlcXVpcmVkRGF0ZVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWluZGF0ZSc6XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgICBNZXNzYWdlcy5NSU5fREFURV9NU0cucmVwbGFjZShcbiAgICAgICAgICAgICAgICAne21pbkRhdGV9JyxcbiAgICAgICAgICAgICAgICBlcnJvcnMubWluZGF0ZS5yZXF1aXJlZERhdGVcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21heCc6XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgICBNZXNzYWdlcy5NQVhfTVNHLnJlcGxhY2UoJ3ttYXh9JywgZXJyb3JzLm1heC5yZXF1aXJlZFZhbHVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21pbic6XG4gICAgICAgICAgICBtZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgICBNZXNzYWdlcy5NSU5fTVNHLnJlcGxhY2UoJ3ttaW59JywgZXJyb3JzLm1pbi5yZXF1aXJlZFZhbHVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2pzX2V4cHJlc3Npb24nOlxuICAgICAgICAgICAgbWVzc2FnZXMucHVzaChlcnJvcnNbJ2pzX2V4cHJlc3Npb24nXS5tZXNzYWdlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2NvbmRpdGlvbmFsX3JlcXVpcmVkJzpcbiAgICAgICAgICAgIG1lc3NhZ2VzLnB1c2goZXJyb3JzWydjb25kaXRpb25hbF9yZXF1aXJlZCddLm1lc3NhZ2UpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnY29uZGl0aW9uYWxfYW5zd2VyZWQnOlxuICAgICAgICAgICAgbWVzc2FnZXMucHVzaChlcnJvcnNbJ2NvbmRpdGlvbmFsX2Fuc3dlcmVkJ10ubWVzc2FnZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXNzYWdlcztcbiAgfVxufVxuIl19