@mediusinc/mng-commons 5.0.0-rc.0-c31d5206 → 5.0.0-rc.1

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 (1436) hide show
  1. package/README.md +1 -0
  2. package/core/README.md +8 -0
  3. package/core/action/action-data.model.d.ts +3 -0
  4. package/core/action/action-parameters.model.d.ts +17 -0
  5. package/core/components/pages/error/error.page.component.d.ts +8 -0
  6. package/core/components/pages/not-found/not-found.page.component.d.ts +8 -0
  7. package/core/data-list/data-list-params-helpers.d.ts +82 -0
  8. package/core/data-providers/base.data-provider.d.ts +32 -0
  9. package/core/data-providers/lookup.data-provider.d.ts +10 -0
  10. package/core/descriptors/action.descriptor.d.ts +12 -0
  11. package/core/descriptors/column.descriptor.d.ts +3 -0
  12. package/core/descriptors/editor.descriptor.d.ts +11 -0
  13. package/core/descriptors/enum.descriptor.d.ts +6 -0
  14. package/core/descriptors/filter.descriptor.d.ts +3 -0
  15. package/core/descriptors/lookup.descriptor.d.ts +12 -0
  16. package/core/descriptors/model.descriptor.d.ts +8 -0
  17. package/core/descriptors/table.descriptor.d.ts +9 -0
  18. package/core/descriptors/tableview.descriptor.d.ts +11 -0
  19. package/core/directives/component.directive.d.ts +20 -0
  20. package/core/directives/dialog-keydown-handler.directive.d.ts +12 -0
  21. package/core/directives/template.directive.d.ts +12 -0
  22. package/core/enum/enum-helpers.d.ts +49 -0
  23. package/core/enum/enum.model.d.ts +8 -0
  24. package/core/error/error-handler.d.ts +6 -0
  25. package/core/error/error-helpers.d.ts +114 -0
  26. package/core/error/error.model.d.ts +47 -0
  27. package/core/helpers/coercion.d.ts +9 -0
  28. package/core/helpers/date.d.ts +14 -0
  29. package/core/helpers/notification.d.ts +2 -0
  30. package/core/helpers/object.d.ts +27 -0
  31. package/core/helpers/route.d.ts +35 -0
  32. package/core/helpers/string.d.ts +7 -0
  33. package/core/helpers/templates.d.ts +3 -0
  34. package/core/helpers/type-helpers.d.ts +16 -0
  35. package/core/i18n/i18n-common.d.ts +6 -0
  36. package/core/i18n/i18n-error.d.ts +4 -0
  37. package/core/i18n/i18n-type.d.ts +20 -0
  38. package/core/index.d.ts +83 -0
  39. package/core/log/log-publisher-console.service.d.ts +4 -0
  40. package/core/log/log.model.d.ts +40 -0
  41. package/core/log/logger.service.d.ts +33 -0
  42. package/core/models/class-service.model.d.ts +7 -0
  43. package/core/models/getter.model.d.ts +2 -0
  44. package/core/models/i18n.model.d.ts +1 -0
  45. package/core/models/menu.model.d.ts +32 -0
  46. package/core/models/user.model.d.ts +8 -0
  47. package/core/pipes/boolean.pipe.d.ts +7 -0
  48. package/core/pipes/class-map.pipe.d.ts +7 -0
  49. package/core/pipes/enum.pipe.d.ts +8 -0
  50. package/core/pipes/enumerate-async.pipe.d.ts +9 -0
  51. package/core/pipes/enumerate.pipe.d.ts +16 -0
  52. package/core/pipes/getter.pipe.d.ts +8 -0
  53. package/core/pipes/i18n-property.pipe.d.ts +8 -0
  54. package/core/pipes/json-path.pipe.d.ts +13 -0
  55. package/core/pipes/parametrize.pipe.d.ts +12 -0
  56. package/core/pipes/template.pipe.d.ts +8 -0
  57. package/core/provide.d.ts +12 -0
  58. package/core/reflect/type-enum-metadata.d.ts +32 -0
  59. package/core/registry/registry.model.d.ts +8 -0
  60. package/core/registry/type-registry.d.ts +27 -0
  61. package/core/router/route-builder.d.ts +65 -0
  62. package/core/router/router.model.d.ts +13 -0
  63. package/core/router/routes-builder.d.ts +18 -0
  64. package/core/rxjs/map-data-list-result-operator.d.ts +9 -0
  65. package/core/security/permission-helpers.d.ts +3 -0
  66. package/core/security/permission.guard.d.ts +2 -0
  67. package/core/security/permission.service.d.ts +16 -0
  68. package/core/security/permissions.model.d.ts +55 -0
  69. package/core/services/commons-configuration.service.d.ts +69 -0
  70. package/core/services/commons-init.service.d.ts +30 -0
  71. package/core/services/commons-router.service.d.ts +37 -0
  72. package/core/services/commons.service.d.ts +66 -0
  73. package/core/services/local-storage-config.service.d.ts +11 -0
  74. package/core/services/providers/commons-init.provider.d.ts +4 -0
  75. package/core/services/tokens/browser-storage.token.d.ts +2 -0
  76. package/core/services/tokens/commons-init.token.d.ts +3 -0
  77. package/core/services/tokens/log-publisher.token.d.ts +3 -0
  78. package/core/services/tokens/module-config.token.d.ts +34 -0
  79. package/core/styles/style-constants.d.ts +10 -0
  80. package/core/styles/style.model.d.ts +17 -0
  81. package/dev-scripts/version-info.js +1 -1
  82. package/esm2022/core/action/action-data.model.mjs +2 -0
  83. package/esm2022/core/action/action-parameters.model.mjs +2 -0
  84. package/esm2022/core/components/notification/notification-wrapper.component.mjs +50 -0
  85. package/esm2022/core/components/pages/error/error.page.component.mjs +21 -0
  86. package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +21 -0
  87. package/esm2022/core/data-list/data-list-params-helpers.mjs +415 -0
  88. package/esm2022/core/data-list/data-list.model.mjs +2 -0
  89. package/esm2022/core/data-list/filter-match.model.mjs +105 -0
  90. package/esm2022/core/data-providers/base.data-provider.mjs +48 -0
  91. package/esm2022/core/data-providers/lookup.data-provider.mjs +2 -0
  92. package/esm2022/core/descriptors/action.descriptor.mjs +2 -0
  93. package/esm2022/core/descriptors/column.descriptor.mjs +2 -0
  94. package/esm2022/core/descriptors/editor.descriptor.mjs +2 -0
  95. package/esm2022/core/descriptors/enum.descriptor.mjs +2 -0
  96. package/esm2022/core/descriptors/filter.descriptor.mjs +2 -0
  97. package/esm2022/core/descriptors/lookup.descriptor.mjs +2 -0
  98. package/esm2022/core/descriptors/model.descriptor.mjs +2 -0
  99. package/esm2022/core/descriptors/table.descriptor.mjs +2 -0
  100. package/esm2022/core/descriptors/tableview.descriptor.mjs +2 -0
  101. package/esm2022/core/directives/component.directive.mjs +72 -0
  102. package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +49 -0
  103. package/esm2022/core/directives/template.directive.mjs +29 -0
  104. package/esm2022/core/enum/enum-helpers.mjs +81 -0
  105. package/esm2022/core/enum/enum.model.mjs +2 -0
  106. package/esm2022/core/error/error-handler.mjs +20 -0
  107. package/esm2022/core/error/error-helpers.mjs +247 -0
  108. package/esm2022/core/error/error.model.mjs +32 -0
  109. package/esm2022/core/helpers/coercion.mjs +52 -0
  110. package/esm2022/core/helpers/date.mjs +119 -0
  111. package/esm2022/core/helpers/notification.mjs +6 -0
  112. package/esm2022/core/helpers/object.mjs +145 -0
  113. package/esm2022/core/helpers/route.mjs +58 -0
  114. package/esm2022/core/helpers/string.mjs +57 -0
  115. package/esm2022/core/helpers/templates.mjs +4 -0
  116. package/esm2022/core/helpers/type-helpers.mjs +2 -0
  117. package/esm2022/core/i18n/i18n-common.mjs +24 -0
  118. package/esm2022/core/i18n/i18n-error.mjs +27 -0
  119. package/esm2022/core/i18n/i18n-type.mjs +79 -0
  120. package/esm2022/core/index.mjs +105 -0
  121. package/esm2022/core/log/log-publisher-console.service.mjs +40 -0
  122. package/esm2022/core/log/log.model.mjs +10 -0
  123. package/esm2022/core/log/logger.service.mjs +131 -0
  124. package/esm2022/core/mediusinc-mng-commons-core.mjs +5 -0
  125. package/esm2022/core/models/class-attribute.model.mjs +2 -0
  126. package/esm2022/core/models/class-service.model.mjs +2 -0
  127. package/esm2022/core/models/getter.model.mjs +2 -0
  128. package/esm2022/core/models/i18n.model.mjs +2 -0
  129. package/esm2022/core/models/menu.model.mjs +2 -0
  130. package/esm2022/core/models/user.model.mjs +2 -0
  131. package/esm2022/core/models/version.model.mjs +2 -0
  132. package/esm2022/core/pipes/boolean.pipe.mjs +28 -0
  133. package/esm2022/core/pipes/class-map.pipe.mjs +23 -0
  134. package/esm2022/core/pipes/enum.pipe.mjs +27 -0
  135. package/esm2022/core/pipes/enumerate-async.pipe.mjs +36 -0
  136. package/esm2022/core/pipes/enumerate.pipe.mjs +49 -0
  137. package/esm2022/core/pipes/getter.pipe.mjs +21 -0
  138. package/esm2022/core/pipes/i18n-property.pipe.mjs +19 -0
  139. package/esm2022/core/pipes/json-path.pipe.mjs +25 -0
  140. package/esm2022/core/pipes/parametrize.pipe.mjs +86 -0
  141. package/esm2022/core/pipes/template.pipe.mjs +25 -0
  142. package/esm2022/core/provide.mjs +78 -0
  143. package/esm2022/core/reflect/type-enum-decorator.mjs +12 -0
  144. package/esm2022/core/reflect/type-enum-metadata.mjs +62 -0
  145. package/esm2022/core/registry/registry.model.mjs +2 -0
  146. package/esm2022/core/registry/type-registry.mjs +106 -0
  147. package/esm2022/core/router/route-builder.mjs +320 -0
  148. package/esm2022/core/router/router.model.mjs +2 -0
  149. package/esm2022/core/router/routes-builder.mjs +54 -0
  150. package/esm2022/core/rxjs/map-data-list-result-operator.mjs +19 -0
  151. package/esm2022/core/security/permission-helpers.mjs +14 -0
  152. package/esm2022/core/security/permission.guard.mjs +15 -0
  153. package/esm2022/core/security/permission.service.mjs +49 -0
  154. package/esm2022/core/security/permissions.model.mjs +93 -0
  155. package/esm2022/core/services/commons-configuration.service.mjs +174 -0
  156. package/esm2022/core/services/commons-init.service.mjs +111 -0
  157. package/esm2022/core/services/commons-router.service.mjs +180 -0
  158. package/esm2022/core/services/commons.service.mjs +390 -0
  159. package/esm2022/core/services/local-storage-config.service.mjs +29 -0
  160. package/esm2022/core/services/providers/commons-init.provider.mjs +4 -0
  161. package/esm2022/core/services/tokens/browser-storage.token.mjs +3 -0
  162. package/esm2022/core/services/tokens/commons-init.token.mjs +3 -0
  163. package/esm2022/core/services/tokens/log-publisher.token.mjs +3 -0
  164. package/esm2022/core/services/tokens/module-config.token.mjs +3 -0
  165. package/esm2022/core/styles/style-constants.mjs +11 -0
  166. package/esm2022/core/styles/style.model.mjs +20 -0
  167. package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +185 -0
  168. package/esm2022/filter/descriptors/filter.descriptor.mjs +197 -0
  169. package/esm2022/filter/index.mjs +6 -0
  170. package/esm2022/filter/mediusinc-mng-commons-filter.mjs +5 -0
  171. package/esm2022/filter/models/filter.model.mjs +15 -0
  172. package/esm2022/form/api/data-providers/lookup.data-provider.mjs +45 -0
  173. package/esm2022/form/api/descriptors/action-button.descriptor.mjs +68 -0
  174. package/esm2022/form/api/descriptors/button-style.builder.mjs +174 -0
  175. package/esm2022/form/api/index.mjs +8 -0
  176. package/esm2022/form/api/mediusinc-mng-commons-form-api.mjs +5 -0
  177. package/esm2022/form/api/models/trim.model.mjs +2 -0
  178. package/esm2022/form/components/autocomplete/autocomplete.component.mjs +404 -0
  179. package/esm2022/form/components/date-range/date-range.component.mjs +110 -0
  180. package/esm2022/form/components/dropdown/dropdown.component.mjs +213 -0
  181. package/esm2022/form/directives/input-trim.directive.mjs +55 -0
  182. package/esm2022/form/index.mjs +7 -0
  183. package/esm2022/form/mediusinc-mng-commons-form.mjs +5 -0
  184. package/esm2022/index.mjs +2 -74
  185. package/esm2022/model/descriptors/enum.descriptor.mjs +31 -0
  186. package/esm2022/model/descriptors/model.descriptor.mjs +78 -0
  187. package/esm2022/model/descriptors/type.descriptor.mjs +21 -0
  188. package/esm2022/model/helpers/i18n.mjs +45 -0
  189. package/esm2022/model/helpers/model.mjs +71 -0
  190. package/esm2022/model/index.mjs +8 -0
  191. package/esm2022/model/mediusinc-mng-commons-model.mjs +5 -0
  192. package/esm2022/provide.mjs +6 -0
  193. package/esm2022/table/api/data-providers/table.data-provider.mjs +63 -0
  194. package/esm2022/table/api/descriptors/column.descriptor.mjs +359 -0
  195. package/esm2022/table/api/descriptors/sort.descriptor.mjs +45 -0
  196. package/esm2022/table/api/descriptors/table.descriptor.mjs +778 -0
  197. package/esm2022/table/api/helpers/class-attribute-converter.mjs +104 -0
  198. package/esm2022/table/api/index.mjs +16 -0
  199. package/esm2022/table/api/mediusinc-mng-commons-table-api.mjs +5 -0
  200. package/esm2022/table/api/models/class-table-attribute.model.mjs +2 -0
  201. package/esm2022/table/api/models/column-value.model.mjs +2 -0
  202. package/esm2022/table/api/models/column.model.mjs +21 -0
  203. package/esm2022/table/api/models/table-columns.model.mjs +2 -0
  204. package/esm2022/table/api/models/table-event.model.mjs +2 -0
  205. package/esm2022/table/api/models/table.model.mjs +22 -0
  206. package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +594 -0
  207. package/esm2022/table/components/column-value/column-value.component.mjs +86 -0
  208. package/esm2022/table/components/table/table.component.mjs +630 -0
  209. package/esm2022/table/helpers/notification.mjs +15 -0
  210. package/esm2022/table/helpers/table-layout-prefs.mjs +10 -0
  211. package/esm2022/table/index.mjs +13 -0
  212. package/esm2022/table/mediusinc-mng-commons-table.mjs +5 -0
  213. package/esm2022/table/models/column-preferences.model.mjs +2 -0
  214. package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +27 -0
  215. package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +25 -0
  216. package/esm2022/table/services/data-list.service.mjs +23 -0
  217. package/esm2022/tableview/action/components/action/action.component.mjs +323 -0
  218. package/esm2022/tableview/action/components/editor/action-editor.component.mjs +97 -0
  219. package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +398 -0
  220. package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +53 -0
  221. package/esm2022/tableview/action/components/route/action-route.component.mjs +152 -0
  222. package/esm2022/tableview/action/components/table/action-table.component.mjs +146 -0
  223. package/esm2022/tableview/action/guards/unsaved-changes.guard.mjs +4 -0
  224. package/esm2022/tableview/action/helpers/i18n.mjs +82 -0
  225. package/esm2022/tableview/action/helpers/notification.mjs +17 -0
  226. package/esm2022/tableview/action/helpers/styles.mjs +32 -0
  227. package/esm2022/tableview/action/models/action-editor-dialog-data.model.mjs +2 -0
  228. package/esm2022/tableview/action/models/can-component-deactivate.model.mjs +2 -0
  229. package/esm2022/tableview/action/models/execution/action-context.model.mjs +56 -0
  230. package/esm2022/tableview/action/models/execution/action-instance-state.model.mjs +32 -0
  231. package/esm2022/tableview/action/models/execution/action-instance.model.mjs +170 -0
  232. package/esm2022/tableview/action/services/action-error-mapper.service.mjs +20 -0
  233. package/esm2022/tableview/action/services/action-executor.service.mjs +767 -0
  234. package/esm2022/tableview/action/services/component-action-executor.service.mjs +19 -0
  235. package/esm2022/tableview/action/services/data-provider-executor.service.mjs +26 -0
  236. package/esm2022/tableview/action/services/navigation.service.mjs +52 -0
  237. package/esm2022/tableview/action/services/providers/provide-action-executor.mjs +9 -0
  238. package/esm2022/tableview/action/services/providers/provide-view-container.mjs +17 -0
  239. package/esm2022/tableview/action/services/root-action-executor.service.mjs +18 -0
  240. package/esm2022/tableview/action/services/tokens/action-editor.token.mjs +3 -0
  241. package/esm2022/tableview/action/services/view-container.service.mjs +56 -0
  242. package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +76 -0
  243. package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +264 -0
  244. package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +89 -0
  245. package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +385 -0
  246. package/esm2022/tableview/api/action/helpers/data-provider-executors.mjs +80 -0
  247. package/esm2022/tableview/api/action/models/action-component.model.mjs +2 -0
  248. package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +2 -0
  249. package/esm2022/tableview/api/action/models/action-editor.model.mjs +2 -0
  250. package/esm2022/tableview/api/action/models/action-error.model.mjs +14 -0
  251. package/esm2022/tableview/api/action/models/action.type.mjs +26 -0
  252. package/esm2022/tableview/api/action/models/execution/action-context-validation.model.mjs +2 -0
  253. package/esm2022/tableview/api/action/models/execution/action-context.model.mjs +2 -0
  254. package/esm2022/tableview/api/action/models/execution/action-execution-error.model.mjs +2 -0
  255. package/esm2022/tableview/api/action/models/execution/action-instance-state.model.mjs +32 -0
  256. package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +2 -0
  257. package/esm2022/tableview/api/action/models/execution/view-container.model.mjs +2 -0
  258. package/esm2022/tableview/api/action/models/tableview-action-default-categories.model.mjs +11 -0
  259. package/esm2022/tableview/api/action/services/data-provider-executor.service.mjs +28 -0
  260. package/esm2022/tableview/api/action/services/tokens/data-language-dropdown.token.mjs +3 -0
  261. package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +104 -0
  262. package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +626 -0
  263. package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +49 -0
  264. package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +288 -0
  265. package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +97 -0
  266. package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +213 -0
  267. package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +153 -0
  268. package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +25 -0
  269. package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +343 -0
  270. package/esm2022/tableview/api/editor/helpers/class-attribute-converter.mjs +85 -0
  271. package/esm2022/tableview/api/editor/helpers/field-validators.mjs +33 -0
  272. package/esm2022/tableview/api/editor/models/class-tableview-attribute.model.mjs +2 -0
  273. package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +2 -0
  274. package/esm2022/tableview/api/editor/models/editor.model.mjs +9 -0
  275. package/esm2022/tableview/api/editor/models/field-action-context.model.mjs +2 -0
  276. package/esm2022/tableview/api/editor/models/field.model.mjs +56 -0
  277. package/esm2022/tableview/api/editor/models/form-editor.event.mjs +27 -0
  278. package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +2 -0
  279. package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +69 -0
  280. package/esm2022/tableview/api/editor/models/formly-field.model.mjs +2 -0
  281. package/esm2022/tableview/api/editor/models/radio.model.mjs +2 -0
  282. package/esm2022/tableview/api/index.mjs +64 -0
  283. package/esm2022/tableview/api/mediusinc-mng-commons-tableview-api.mjs +5 -0
  284. package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +105 -0
  285. package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +672 -0
  286. package/esm2022/tableview/api/tableview/helpers/class-attribute-converter.mjs +34 -0
  287. package/esm2022/tableview/api/tableview/helpers/files-export.mjs +34 -0
  288. package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +24 -0
  289. package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +240 -0
  290. package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +162 -0
  291. package/esm2022/tableview/api/tableview/models/class-tableview-attribute.model.mjs +2 -0
  292. package/esm2022/tableview/api/tableview/models/tableview-input.model.mjs +2 -0
  293. package/esm2022/tableview/api/tableview/models/tableview-route.model.mjs +2 -0
  294. package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +285 -0
  295. package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +61 -0
  296. package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +54 -0
  297. package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +39 -0
  298. package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +49 -0
  299. package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +27 -0
  300. package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +220 -0
  301. package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +24 -0
  302. package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +215 -0
  303. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +217 -0
  304. package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +196 -0
  305. package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +18 -0
  306. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +33 -0
  307. package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +30 -0
  308. package/esm2022/tableview/editor/helpers/editor-formly.mjs +335 -0
  309. package/esm2022/tableview/editor/helpers/formly-config.mjs +260 -0
  310. package/esm2022/tableview/editor/helpers/notification.mjs +11 -0
  311. package/esm2022/tableview/editor/models/formly-config.model.mjs +2 -0
  312. package/esm2022/tableview/editor/services/formly-config.provider.mjs +31 -0
  313. package/esm2022/tableview/index.mjs +62 -0
  314. package/esm2022/tableview/mediusinc-mng-commons-tableview.mjs +5 -0
  315. package/esm2022/tableview/provide.mjs +62 -0
  316. package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +15 -0
  317. package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +75 -0
  318. package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +201 -0
  319. package/esm2022/tableview/tableview/services/tableview-feature-config.token.mjs +3 -0
  320. package/fesm2022/mediusinc-mng-commons-core.mjs +3882 -0
  321. package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -0
  322. package/fesm2022/mediusinc-mng-commons-filter.mjs +402 -0
  323. package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -0
  324. package/fesm2022/mediusinc-mng-commons-form-api.mjs +294 -0
  325. package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -0
  326. package/fesm2022/mediusinc-mng-commons-form.mjs +770 -0
  327. package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -0
  328. package/fesm2022/mediusinc-mng-commons-model.mjs +251 -0
  329. package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -0
  330. package/fesm2022/mediusinc-mng-commons-table-api.mjs +1391 -0
  331. package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -0
  332. package/fesm2022/mediusinc-mng-commons-table.mjs +1376 -0
  333. package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -0
  334. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +4372 -0
  335. package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -0
  336. package/fesm2022/mediusinc-mng-commons-tableview.mjs +4691 -0
  337. package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -0
  338. package/fesm2022/mediusinc-mng-commons.mjs +5 -18605
  339. package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
  340. package/filter/README.md +9 -0
  341. package/filter/descriptors/filter-lookup.descriptor.d.ts +67 -0
  342. package/filter/descriptors/filter.descriptor.d.ts +67 -0
  343. package/filter/index.d.ts +3 -0
  344. package/form/README.md +8 -0
  345. package/form/api/README.md +7 -0
  346. package/form/api/data-providers/lookup.data-provider.d.ts +19 -0
  347. package/form/api/descriptors/action-button.descriptor.d.ts +25 -0
  348. package/form/api/descriptors/button-style.builder.d.ts +68 -0
  349. package/form/api/index.d.ts +4 -0
  350. package/form/components/autocomplete/autocomplete.component.d.ts +82 -0
  351. package/form/components/date-range/date-range.component.d.ts +28 -0
  352. package/form/components/dropdown/dropdown.component.d.ts +55 -0
  353. package/form/directives/input-trim.directive.d.ts +14 -0
  354. package/form/index.d.ts +4 -0
  355. package/index.d.ts +1 -50
  356. package/model/README.md +7 -0
  357. package/model/descriptors/enum.descriptor.d.ts +14 -0
  358. package/model/descriptors/model.descriptor.d.ts +31 -0
  359. package/model/descriptors/type.descriptor.d.ts +10 -0
  360. package/model/helpers/i18n.d.ts +10 -0
  361. package/model/helpers/model.d.ts +5 -0
  362. package/model/index.d.ts +5 -0
  363. package/package.json +61 -25
  364. package/provide.d.ts +7 -0
  365. package/table/README.md +11 -0
  366. package/table/api/README.md +9 -0
  367. package/table/api/data-providers/table.data-provider.d.ts +38 -0
  368. package/table/api/descriptors/column.descriptor.d.ts +148 -0
  369. package/table/api/descriptors/table.descriptor.d.ts +281 -0
  370. package/table/api/helpers/class-attribute-converter.d.ts +22 -0
  371. package/table/api/index.d.ts +11 -0
  372. package/table/api/models/class-table-attribute.model.d.ts +8 -0
  373. package/table/api/models/column-value.model.d.ts +7 -0
  374. package/table/api/models/table-columns.model.d.ts +42 -0
  375. package/table/api/models/table-event.model.d.ts +17 -0
  376. package/table/api/models/table.model.d.ts +35 -0
  377. package/table/components/column-filter-full/column-filter-full.component.d.ts +100 -0
  378. package/table/components/column-value/column-value.component.d.ts +32 -0
  379. package/table/components/table/table.component.d.ts +114 -0
  380. package/table/helpers/notification.d.ts +4 -0
  381. package/table/helpers/table-layout-prefs.d.ts +7 -0
  382. package/table/index.d.ts +8 -0
  383. package/table/models/column-preferences.model.d.ts +12 -0
  384. package/table/pipes/locale-default-row-class.pipe.d.ts +10 -0
  385. package/table/pipes/table-column-filter-class.pipe.d.ts +8 -0
  386. package/table/services/data-list.service.d.ts +16 -0
  387. package/tableview/README.md +13 -0
  388. package/tableview/action/components/action/action.component.d.ts +73 -0
  389. package/tableview/action/components/editor/action-editor.component.d.ts +31 -0
  390. package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +76 -0
  391. package/tableview/action/components/localization/data-language-dropdown.component.d.ts +22 -0
  392. package/tableview/action/components/route/action-route.component.d.ts +31 -0
  393. package/tableview/action/components/table/action-table.component.d.ts +48 -0
  394. package/tableview/action/guards/unsaved-changes.guard.d.ts +3 -0
  395. package/tableview/action/helpers/i18n.d.ts +22 -0
  396. package/tableview/action/helpers/notification.d.ts +6 -0
  397. package/tableview/action/helpers/styles.d.ts +5 -0
  398. package/tableview/action/models/action-editor-dialog-data.model.d.ts +11 -0
  399. package/tableview/action/models/execution/action-context.model.d.ts +36 -0
  400. package/tableview/action/models/execution/action-instance-state.model.d.ts +30 -0
  401. package/tableview/action/models/execution/action-instance.model.d.ts +56 -0
  402. package/tableview/action/services/action-error-mapper.service.d.ts +18 -0
  403. package/tableview/action/services/action-executor.service.d.ts +175 -0
  404. package/tableview/action/services/component-action-executor.service.d.ts +9 -0
  405. package/tableview/action/services/data-provider-executor.service.d.ts +23 -0
  406. package/tableview/action/services/navigation.service.d.ts +15 -0
  407. package/tableview/action/services/root-action-executor.service.d.ts +9 -0
  408. package/tableview/action/services/tokens/action-editor.token.d.ts +2 -0
  409. package/tableview/action/services/view-container.service.d.ts +30 -0
  410. package/tableview/api/README.md +11 -0
  411. package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +36 -0
  412. package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +117 -0
  413. package/tableview/api/action/descriptors/action-link.descriptor.d.ts +34 -0
  414. package/tableview/api/action/descriptors/action.descriptor.d.ts +151 -0
  415. package/tableview/api/action/helpers/data-provider-executors.d.ts +18 -0
  416. package/tableview/api/action/models/action-component.model.d.ts +12 -0
  417. package/tableview/api/action/models/action-descriptor.types.d.ts +5 -0
  418. package/tableview/api/action/models/action-editor.model.d.ts +4 -0
  419. package/tableview/api/action/models/action-error.model.d.ts +14 -0
  420. package/tableview/api/action/models/action.type.d.ts +21 -0
  421. package/tableview/api/action/models/execution/action-context-validation.model.d.ts +11 -0
  422. package/tableview/api/action/models/execution/action-context.model.d.ts +24 -0
  423. package/tableview/api/action/models/execution/action-execution-error.model.d.ts +4 -0
  424. package/tableview/api/action/models/execution/action-instance-state.model.d.ts +30 -0
  425. package/tableview/api/action/models/execution/action-instance.model.d.ts +31 -0
  426. package/tableview/api/action/models/execution/view-container.model.d.ts +38 -0
  427. package/tableview/api/action/services/data-provider-executor.service.d.ts +38 -0
  428. package/tableview/api/action/services/tokens/data-language-dropdown.token.d.ts +2 -0
  429. package/tableview/api/editor/data-providers/editor.data-provider.d.ts +87 -0
  430. package/tableview/api/editor/descriptors/editor.descriptor.d.ts +366 -0
  431. package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +22 -0
  432. package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +120 -0
  433. package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +41 -0
  434. package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +80 -0
  435. package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +61 -0
  436. package/tableview/api/editor/descriptors/field-validation.descriptor.d.ts +19 -0
  437. package/tableview/api/editor/descriptors/field.descriptor.d.ts +168 -0
  438. package/tableview/api/editor/helpers/class-attribute-converter.d.ts +21 -0
  439. package/tableview/api/editor/helpers/field-validators.d.ts +3 -0
  440. package/tableview/api/editor/models/class-tableview-attribute.model.d.ts +7 -0
  441. package/tableview/api/editor/models/editor-fields.model.d.ts +34 -0
  442. package/tableview/api/editor/models/editor.model.d.ts +7 -0
  443. package/tableview/api/editor/models/field-action-context.model.d.ts +24 -0
  444. package/tableview/api/editor/models/field.model.d.ts +66 -0
  445. package/tableview/api/editor/models/form-editor.event.d.ts +55 -0
  446. package/tableview/api/editor/models/formly-custom-field.model.d.ts +27 -0
  447. package/tableview/api/editor/models/formly-field.model.d.ts +18 -0
  448. package/tableview/api/index.d.ts +50 -0
  449. package/tableview/api/tableview/data-providers/tableview.data-provider.d.ts +43 -0
  450. package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +296 -0
  451. package/tableview/api/tableview/helpers/class-attribute-converter.d.ts +8 -0
  452. package/tableview/api/tableview/helpers/files-export.d.ts +4 -0
  453. package/tableview/api/tableview/helpers/tableview-create.d.ts +16 -0
  454. package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +38 -0
  455. package/tableview/api/tableview/helpers/tableview-input-builder.d.ts +114 -0
  456. package/tableview/api/tableview/models/class-tableview-attribute.model.d.ts +3 -0
  457. package/tableview/api/tableview/models/tableview-input.model.d.ts +8 -0
  458. package/tableview/api/tableview/models/tableview-route.model.d.ts +20 -0
  459. package/tableview/editor/components/editor/form-editor.component.d.ts +50 -0
  460. package/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.d.ts +14 -0
  461. package/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +15 -0
  462. package/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.d.ts +11 -0
  463. package/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +14 -0
  464. package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +12 -0
  465. package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +37 -0
  466. package/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.d.ts +11 -0
  467. package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +43 -0
  468. package/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +23 -0
  469. package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +41 -0
  470. package/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +7 -0
  471. package/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +11 -0
  472. package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +9 -0
  473. package/tableview/editor/helpers/editor-formly.d.ts +10 -0
  474. package/tableview/editor/helpers/formly-config.d.ts +18 -0
  475. package/tableview/editor/helpers/notification.d.ts +4 -0
  476. package/tableview/editor/models/formly-config.model.d.ts +5 -0
  477. package/tableview/editor/services/formly-config.provider.d.ts +5 -0
  478. package/tableview/index.d.ts +48 -0
  479. package/tableview/provide.d.ts +8 -0
  480. package/tableview/tableview/components/route/tableview-route.component.d.ts +7 -0
  481. package/tableview/tableview/components/tableview/tableview.component.d.ts +26 -0
  482. package/tableview/tableview/router/tableview-route-builder.d.ts +42 -0
  483. package/tableview/tableview/services/tableview-feature-config.token.d.ts +18 -0
  484. package/assets/fonts/poppins-v20-latin-500.woff +0 -0
  485. package/assets/fonts/poppins-v20-latin-500.woff2 +0 -0
  486. package/assets/fonts/poppins-v20-latin-600.woff +0 -0
  487. package/assets/fonts/poppins-v20-latin-600.woff2 +0 -0
  488. package/assets/fonts/poppins-v20-latin-700.woff +0 -0
  489. package/assets/fonts/poppins-v20-latin-700.woff2 +0 -0
  490. package/assets/fonts/poppins-v20-latin-regular.woff +0 -0
  491. package/assets/fonts/poppins-v20-latin-regular.woff2 +0 -0
  492. package/assets/images/effect-ondark.png +0 -0
  493. package/assets/images/effect-ondark.svg +0 -38
  494. package/assets/images/effect-ondark@2x.png +0 -0
  495. package/assets/images/effect-onlight.png +0 -0
  496. package/assets/images/effect-onlight.svg +0 -38
  497. package/assets/images/effect-onlight@2x.png +0 -0
  498. package/assets/images/pages/exception-ondark.png +0 -0
  499. package/assets/images/pages/exception-onlight.png +0 -0
  500. package/assets/images/pages/login-ondark.png +0 -0
  501. package/assets/images/pages/login-onlight.png +0 -0
  502. package/data-api/README.md +0 -3
  503. package/data-api/class-dto/README.md +0 -3
  504. package/data-api/class-dto/helpers/tableview-crud-create.d.ts +0 -40
  505. package/data-api/class-dto/index.d.ts +0 -7
  506. package/data-api/class-dto/models/query-result.model.d.ts +0 -13
  507. package/data-api/class-dto/obsolete/README.md +0 -3
  508. package/data-api/class-dto/obsolete/helpers/query-param-convert.d.ts +0 -23
  509. package/data-api/class-dto/obsolete/helpers/tableview-crud-create.d.ts +0 -22
  510. package/data-api/class-dto/obsolete/index.d.ts +0 -14
  511. package/data-api/class-dto/obsolete/models/builders/query-param.builder.d.ts +0 -36
  512. package/data-api/class-dto/obsolete/models/filter-match-type.model.d.ts +0 -25
  513. package/data-api/class-dto/obsolete/models/filter-param.model.d.ts +0 -23
  514. package/data-api/class-dto/obsolete/models/query-mode.model.d.ts +0 -16
  515. package/data-api/class-dto/obsolete/models/query-param.model.d.ts +0 -31
  516. package/data-api/class-dto/obsolete/models/query-result.model.d.ts +0 -24
  517. package/data-api/class-dto/obsolete/provide.d.ts +0 -9
  518. package/data-api/class-dto/obsolete/services/api.abstract.service.d.ts +0 -36
  519. package/data-api/class-dto/obsolete/services/crud-api.abstract.service.d.ts +0 -37
  520. package/data-api/class-dto/obsolete/services/get-all-api.abstract.service.d.ts +0 -30
  521. package/data-api/class-dto/obsolete/tableview/tableview-crud.data-provider.d.ts +0 -28
  522. package/data-api/class-dto/obsolete/utils/query-param-map.util.d.ts +0 -22
  523. package/data-api/class-dto/serder/object-serializer.d.ts +0 -26
  524. package/data-api/class-dto/services/api.abstract.service.d.ts +0 -22
  525. package/data-api/class-dto/services/crud-api.abstract.service.d.ts +0 -25
  526. package/data-api/class-dto/services/get-all-api.abstract.service.d.ts +0 -14
  527. package/data-api/class-dto/tableview/tableview-crud.data-provider.d.ts +0 -17
  528. package/data-api/helpers/get-all-params.d.ts +0 -69
  529. package/data-api/helpers/tableview-get-all-params-create.d.ts +0 -14
  530. package/data-api/index.d.ts +0 -5
  531. package/data-api/models/request-params.model.d.ts +0 -61
  532. package/data-api/rxjs/map-to-data-list.operator.d.ts +0 -9
  533. package/data-api/types/extract-get-all-params.type.d.ts +0 -14
  534. package/esm2022/data-api/class-dto/helpers/tableview-crud-create.mjs +0 -40
  535. package/esm2022/data-api/class-dto/index.mjs +0 -13
  536. package/esm2022/data-api/class-dto/mediusinc-mng-commons-data-api-class-dto.mjs +0 -5
  537. package/esm2022/data-api/class-dto/models/query-result.model.mjs +0 -24
  538. package/esm2022/data-api/class-dto/obsolete/helpers/query-param-convert.mjs +0 -103
  539. package/esm2022/data-api/class-dto/obsolete/helpers/tableview-crud-create.mjs +0 -21
  540. package/esm2022/data-api/class-dto/obsolete/index.mjs +0 -21
  541. package/esm2022/data-api/class-dto/obsolete/mediusinc-mng-commons-data-api-class-dto-obsolete.mjs +0 -5
  542. package/esm2022/data-api/class-dto/obsolete/models/builders/query-param.builder.mjs +0 -83
  543. package/esm2022/data-api/class-dto/obsolete/models/filter-match-type.model.mjs +0 -27
  544. package/esm2022/data-api/class-dto/obsolete/models/filter-param.model.mjs +0 -33
  545. package/esm2022/data-api/class-dto/obsolete/models/query-mode.model.mjs +0 -18
  546. package/esm2022/data-api/class-dto/obsolete/models/query-param.model.mjs +0 -68
  547. package/esm2022/data-api/class-dto/obsolete/models/query-result.model.mjs +0 -24
  548. package/esm2022/data-api/class-dto/obsolete/provide.mjs +0 -40
  549. package/esm2022/data-api/class-dto/obsolete/services/api.abstract.service.mjs +0 -70
  550. package/esm2022/data-api/class-dto/obsolete/services/crud-api.abstract.service.mjs +0 -83
  551. package/esm2022/data-api/class-dto/obsolete/services/get-all-api.abstract.service.mjs +0 -38
  552. package/esm2022/data-api/class-dto/obsolete/tableview/tableview-crud.data-provider.mjs +0 -51
  553. package/esm2022/data-api/class-dto/obsolete/utils/query-param-map.util.mjs +0 -57
  554. package/esm2022/data-api/class-dto/serder/object-serializer.mjs +0 -184
  555. package/esm2022/data-api/class-dto/services/api.abstract.service.mjs +0 -55
  556. package/esm2022/data-api/class-dto/services/crud-api.abstract.service.mjs +0 -82
  557. package/esm2022/data-api/class-dto/services/get-all-api.abstract.service.mjs +0 -49
  558. package/esm2022/data-api/class-dto/tableview/tableview-crud.data-provider.mjs +0 -49
  559. package/esm2022/data-api/helpers/get-all-params.mjs +0 -180
  560. package/esm2022/data-api/helpers/tableview-get-all-params-create.mjs +0 -18
  561. package/esm2022/data-api/index.mjs +0 -10
  562. package/esm2022/data-api/mediusinc-mng-commons-data-api.mjs +0 -5
  563. package/esm2022/data-api/models/request-params.model.mjs +0 -2
  564. package/esm2022/data-api/rxjs/map-to-data-list.operator.mjs +0 -19
  565. package/esm2022/data-api/types/extract-get-all-params.type.mjs +0 -2
  566. package/esm2022/lib/components/action/action.component.mjs +0 -314
  567. package/esm2022/lib/components/action/editor/action-editor.component.mjs +0 -98
  568. package/esm2022/lib/components/action/editor/injector-context/action-editor-injector-context.component.mjs +0 -394
  569. package/esm2022/lib/components/action/index.mjs +0 -6
  570. package/esm2022/lib/components/action/localization/data-language-dropdown.component.mjs +0 -53
  571. package/esm2022/lib/components/action/models/action-component.model.mjs +0 -2
  572. package/esm2022/lib/components/action/models/action-execution.model.mjs +0 -323
  573. package/esm2022/lib/components/action/models/index.mjs +0 -4
  574. package/esm2022/lib/components/action/models/tableview-action-default-categories.model.mjs +0 -11
  575. package/esm2022/lib/components/action/route/action-route.component.mjs +0 -141
  576. package/esm2022/lib/components/action/table/action-table.component.mjs +0 -152
  577. package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +0 -408
  578. package/esm2022/lib/components/form/date-range/date-range.component.mjs +0 -110
  579. package/esm2022/lib/components/form/dropdown/dropdown.component.mjs +0 -210
  580. package/esm2022/lib/components/form/editor/form-editor.component.mjs +0 -281
  581. package/esm2022/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +0 -61
  582. package/esm2022/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +0 -54
  583. package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.mjs +0 -69
  584. package/esm2022/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.mjs +0 -39
  585. package/esm2022/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +0 -49
  586. package/esm2022/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +0 -27
  587. package/esm2022/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +0 -220
  588. package/esm2022/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +0 -24
  589. package/esm2022/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +0 -219
  590. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +0 -221
  591. package/esm2022/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +0 -212
  592. package/esm2022/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +0 -18
  593. package/esm2022/lib/components/form/formly/fields/index.mjs +0 -13
  594. package/esm2022/lib/components/form/formly/formly.config.mjs +0 -250
  595. package/esm2022/lib/components/form/formly/index.mjs +0 -2
  596. package/esm2022/lib/components/form/formly/models/formly-config.model.mjs +0 -2
  597. package/esm2022/lib/components/form/formly/models/formly-field.model.mjs +0 -2
  598. package/esm2022/lib/components/form/formly/models/index.mjs +0 -3
  599. package/esm2022/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +0 -33
  600. package/esm2022/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +0 -31
  601. package/esm2022/lib/components/form/formly/wrappers/index.mjs +0 -3
  602. package/esm2022/lib/components/form/index.mjs +0 -5
  603. package/esm2022/lib/components/form/models/field-action-context.model.mjs +0 -2
  604. package/esm2022/lib/components/form/models/form-editor.event.mjs +0 -49
  605. package/esm2022/lib/components/form/models/form-editor.interface.mjs +0 -2
  606. package/esm2022/lib/components/form/models/index.mjs +0 -4
  607. package/esm2022/lib/components/layout/breadcrumb.component.mjs +0 -34
  608. package/esm2022/lib/components/layout/footer.component.mjs +0 -19
  609. package/esm2022/lib/components/layout/index.mjs +0 -9
  610. package/esm2022/lib/components/layout/main-layout.component.mjs +0 -53
  611. package/esm2022/lib/components/layout/menu-item.component.mjs +0 -296
  612. package/esm2022/lib/components/layout/menu.component.mjs +0 -34
  613. package/esm2022/lib/components/layout/services/index.mjs +0 -2
  614. package/esm2022/lib/components/layout/services/main-layout.component.service.mjs +0 -196
  615. package/esm2022/lib/components/layout/topbar-user.component.mjs +0 -46
  616. package/esm2022/lib/components/layout/topbar.component.mjs +0 -66
  617. package/esm2022/lib/components/layout/version.component.mjs +0 -60
  618. package/esm2022/lib/components/layoutV2/breadcrumb.component.mjs +0 -30
  619. package/esm2022/lib/components/layoutV2/footer.component.mjs +0 -29
  620. package/esm2022/lib/components/layoutV2/index.mjs +0 -8
  621. package/esm2022/lib/components/layoutV2/main-layout.component.mjs +0 -95
  622. package/esm2022/lib/components/layoutV2/menu-item.component.mjs +0 -275
  623. package/esm2022/lib/components/layoutV2/menu.component.mjs +0 -39
  624. package/esm2022/lib/components/layoutV2/model/index.mjs +0 -3
  625. package/esm2022/lib/components/layoutV2/model/layout-state.model.mjs +0 -2
  626. package/esm2022/lib/components/layoutV2/model/menu.model.mjs +0 -2
  627. package/esm2022/lib/components/layoutV2/services/index.mjs +0 -3
  628. package/esm2022/lib/components/layoutV2/services/main-layout.component.service.mjs +0 -71
  629. package/esm2022/lib/components/layoutV2/services/menu.service.mjs +0 -122
  630. package/esm2022/lib/components/layoutV2/sidebar.component.mjs +0 -62
  631. package/esm2022/lib/components/layoutV2/topbar-user.component.mjs +0 -40
  632. package/esm2022/lib/components/layoutV2/topbar.component.mjs +0 -69
  633. package/esm2022/lib/components/layoutV2/version.component.mjs +0 -63
  634. package/esm2022/lib/components/notification/notification-wrapper.component.mjs +0 -50
  635. package/esm2022/lib/components/pages/error/error.page.component.mjs +0 -21
  636. package/esm2022/lib/components/pages/index.mjs +0 -3
  637. package/esm2022/lib/components/pages/not-found/not-found.page.component.mjs +0 -21
  638. package/esm2022/lib/components/table/column-filter-full/column-filter-full.component.mjs +0 -597
  639. package/esm2022/lib/components/table/column-value/column-value.component.mjs +0 -90
  640. package/esm2022/lib/components/table/models/table.event.mjs +0 -16
  641. package/esm2022/lib/components/table/models/table.interface.mjs +0 -2
  642. package/esm2022/lib/components/table/table-column-filter-class/table-column-filter-class.pipe.mjs +0 -25
  643. package/esm2022/lib/components/table/table.component.mjs +0 -643
  644. package/esm2022/lib/components/tableview/actions/tableview-default-actions.mjs +0 -215
  645. package/esm2022/lib/components/tableview/builders/tableview-builder.mjs +0 -162
  646. package/esm2022/lib/components/tableview/helpers/tableview-create.mjs +0 -24
  647. package/esm2022/lib/components/tableview/index.mjs +0 -7
  648. package/esm2022/lib/components/tableview/models/tableview.model.mjs +0 -2
  649. package/esm2022/lib/components/tableview/route/tableview-route.component.mjs +0 -15
  650. package/esm2022/lib/components/tableview/tableview.component.mjs +0 -82
  651. package/esm2022/lib/data-providers/base.data-provider.mjs +0 -48
  652. package/esm2022/lib/data-providers/editor.data-provider.mjs +0 -105
  653. package/esm2022/lib/data-providers/index.mjs +0 -6
  654. package/esm2022/lib/data-providers/lookup.data-provider.mjs +0 -45
  655. package/esm2022/lib/data-providers/table.data-provider.mjs +0 -64
  656. package/esm2022/lib/data-providers/tableview.data-provider.mjs +0 -105
  657. package/esm2022/lib/descriptors/action/action-button.descriptor.mjs +0 -68
  658. package/esm2022/lib/descriptors/action/action-confirmation.descriptor.mjs +0 -77
  659. package/esm2022/lib/descriptors/action/action-editor.descriptor.mjs +0 -266
  660. package/esm2022/lib/descriptors/action/action-link.descriptor.mjs +0 -89
  661. package/esm2022/lib/descriptors/action/action.descriptor.mjs +0 -383
  662. package/esm2022/lib/descriptors/action/index.mjs +0 -6
  663. package/esm2022/lib/descriptors/editor/editor.descriptor.mjs +0 -510
  664. package/esm2022/lib/descriptors/editor/field-action.descriptor.mjs +0 -50
  665. package/esm2022/lib/descriptors/editor/field-base.descriptor.mjs +0 -285
  666. package/esm2022/lib/descriptors/editor/field-group.descriptor.mjs +0 -97
  667. package/esm2022/lib/descriptors/editor/field-lookup.descriptor.mjs +0 -212
  668. package/esm2022/lib/descriptors/editor/field-many.descriptor.mjs +0 -153
  669. package/esm2022/lib/descriptors/editor/field-validation.descriptor.mjs +0 -25
  670. package/esm2022/lib/descriptors/editor/field.descriptor.mjs +0 -343
  671. package/esm2022/lib/descriptors/editor/index.mjs +0 -9
  672. package/esm2022/lib/descriptors/editor/internal/editor-fields.model.mjs +0 -2
  673. package/esm2022/lib/descriptors/editor/internal/editor.model.mjs +0 -2
  674. package/esm2022/lib/descriptors/filter/filter-lookup.descriptor.mjs +0 -186
  675. package/esm2022/lib/descriptors/filter/filter.descriptor.mjs +0 -198
  676. package/esm2022/lib/descriptors/filter/index.mjs +0 -3
  677. package/esm2022/lib/descriptors/interfaces/field-config.interface.mjs +0 -2
  678. package/esm2022/lib/descriptors/interfaces/index.mjs +0 -3
  679. package/esm2022/lib/descriptors/interfaces/lookup-descriptor.interface.mjs +0 -2
  680. package/esm2022/lib/descriptors/model/enum.descriptor.mjs +0 -31
  681. package/esm2022/lib/descriptors/model/index.mjs +0 -4
  682. package/esm2022/lib/descriptors/model/model.descriptor.mjs +0 -79
  683. package/esm2022/lib/descriptors/model/type.descriptor.mjs +0 -11
  684. package/esm2022/lib/descriptors/table/column.descriptor.mjs +0 -359
  685. package/esm2022/lib/descriptors/table/index.mjs +0 -4
  686. package/esm2022/lib/descriptors/table/internal/table-columns.model.mjs +0 -2
  687. package/esm2022/lib/descriptors/table/internal/table.model.mjs +0 -2
  688. package/esm2022/lib/descriptors/table/sort.descriptor.mjs +0 -45
  689. package/esm2022/lib/descriptors/table/table.descriptor.mjs +0 -751
  690. package/esm2022/lib/descriptors/tableview/index.mjs +0 -2
  691. package/esm2022/lib/descriptors/tableview/internal/tableview.model.mjs +0 -2
  692. package/esm2022/lib/descriptors/tableview/tableview.descriptor.mjs +0 -558
  693. package/esm2022/lib/descriptors/types/action.type.mjs +0 -26
  694. package/esm2022/lib/descriptors/types/column.type.mjs +0 -21
  695. package/esm2022/lib/descriptors/types/editor.type.mjs +0 -8
  696. package/esm2022/lib/descriptors/types/field.type.mjs +0 -56
  697. package/esm2022/lib/descriptors/types/filter.type.mjs +0 -15
  698. package/esm2022/lib/descriptors/types/index.mjs +0 -8
  699. package/esm2022/lib/descriptors/types/table.type.mjs +0 -22
  700. package/esm2022/lib/descriptors/types/trim.type.mjs +0 -2
  701. package/esm2022/lib/directives/component.directive.mjs +0 -66
  702. package/esm2022/lib/directives/dialog-keydown-handler.directive.mjs +0 -49
  703. package/esm2022/lib/directives/index.mjs +0 -5
  704. package/esm2022/lib/directives/input-trim.directive.mjs +0 -55
  705. package/esm2022/lib/directives/template.directive.mjs +0 -29
  706. package/esm2022/lib/error/error.handler.mjs +0 -20
  707. package/esm2022/lib/error/index.mjs +0 -2
  708. package/esm2022/lib/guards/index.mjs +0 -2
  709. package/esm2022/lib/guards/unsaved-changes.guard.mjs +0 -4
  710. package/esm2022/lib/helpers/coercion.mjs +0 -52
  711. package/esm2022/lib/helpers/data-provider-executors.mjs +0 -80
  712. package/esm2022/lib/models/action-editor.model.mjs +0 -2
  713. package/esm2022/lib/models/can-component-deactivate.model.mjs +0 -2
  714. package/esm2022/lib/models/class.model.mjs +0 -2
  715. package/esm2022/lib/models/column-value.model.mjs +0 -2
  716. package/esm2022/lib/models/common-init-event-enum.model.mjs +0 -11
  717. package/esm2022/lib/models/config.model.mjs +0 -2
  718. package/esm2022/lib/models/data-list.model.mjs +0 -2
  719. package/esm2022/lib/models/enum.model.mjs +0 -2
  720. package/esm2022/lib/models/error.model.mjs +0 -44
  721. package/esm2022/lib/models/filter-match.model.mjs +0 -105
  722. package/esm2022/lib/models/index.mjs +0 -20
  723. package/esm2022/lib/models/layout-config.model.mjs +0 -2
  724. package/esm2022/lib/models/log.model.mjs +0 -10
  725. package/esm2022/lib/models/menu.model.mjs +0 -2
  726. package/esm2022/lib/models/radio.model.mjs +0 -2
  727. package/esm2022/lib/models/tableview-attr.model.mjs +0 -2
  728. package/esm2022/lib/models/type-registry.model.mjs +0 -2
  729. package/esm2022/lib/models/user.model.mjs +0 -2
  730. package/esm2022/lib/models/version.model.mjs +0 -2
  731. package/esm2022/lib/models/view-container.model.mjs +0 -2
  732. package/esm2022/lib/pipes/boolean.pipe.mjs +0 -28
  733. package/esm2022/lib/pipes/class-map.pipe.mjs +0 -23
  734. package/esm2022/lib/pipes/enum.pipe.mjs +0 -26
  735. package/esm2022/lib/pipes/enumerate-async.pipe.mjs +0 -41
  736. package/esm2022/lib/pipes/enumerate.pipe.mjs +0 -58
  737. package/esm2022/lib/pipes/getter.pipe.mjs +0 -21
  738. package/esm2022/lib/pipes/i18n-property.pipe.mjs +0 -19
  739. package/esm2022/lib/pipes/index.mjs +0 -12
  740. package/esm2022/lib/pipes/json-path.pipe.mjs +0 -25
  741. package/esm2022/lib/pipes/locale-default-row-class.pipe.mjs +0 -27
  742. package/esm2022/lib/pipes/models/internal/enumrate-pipe-i18n.model.mjs +0 -2
  743. package/esm2022/lib/pipes/models/internal/index.mjs +0 -2
  744. package/esm2022/lib/pipes/parametrize.pipe.mjs +0 -86
  745. package/esm2022/lib/pipes/template.pipe.mjs +0 -26
  746. package/esm2022/lib/provide.mjs +0 -101
  747. package/esm2022/lib/registry/type.registry.mjs +0 -106
  748. package/esm2022/lib/router/index.mjs +0 -4
  749. package/esm2022/lib/router/models/index.mjs +0 -2
  750. package/esm2022/lib/router/models/router.model.mjs +0 -2
  751. package/esm2022/lib/router/route-builder.mjs +0 -347
  752. package/esm2022/lib/router/routes-builder.mjs +0 -69
  753. package/esm2022/lib/router/tableview-route-builder.mjs +0 -201
  754. package/esm2022/lib/security/authorization.guard.mjs +0 -15
  755. package/esm2022/lib/security/authorization.service.mjs +0 -51
  756. package/esm2022/lib/security/authorization.util.mjs +0 -16
  757. package/esm2022/lib/security/index.mjs +0 -4
  758. package/esm2022/lib/security/model/authorization.type.mjs +0 -8
  759. package/esm2022/lib/security/model/index.mjs +0 -4
  760. package/esm2022/lib/security/model/permission-service.interface.mjs +0 -2
  761. package/esm2022/lib/security/model/permissions.model.mjs +0 -87
  762. package/esm2022/lib/services/action/action-executor.service.mjs +0 -747
  763. package/esm2022/lib/services/action/component-action-executor.service.mjs +0 -19
  764. package/esm2022/lib/services/action/index.mjs +0 -5
  765. package/esm2022/lib/services/action/provide-action-executor.mjs +0 -9
  766. package/esm2022/lib/services/action/root-action-executor.service.mjs +0 -18
  767. package/esm2022/lib/services/action-error-mapper.service.mjs +0 -20
  768. package/esm2022/lib/services/commons-init.service.mjs +0 -100
  769. package/esm2022/lib/services/commons.service.mjs +0 -459
  770. package/esm2022/lib/services/configuration.service.mjs +0 -174
  771. package/esm2022/lib/services/data-provider-executor.service.mjs +0 -52
  772. package/esm2022/lib/services/index.mjs +0 -12
  773. package/esm2022/lib/services/internal/commons-init.provider.mjs +0 -4
  774. package/esm2022/lib/services/internal/index.mjs +0 -2
  775. package/esm2022/lib/services/log-publisher-console.service.mjs +0 -40
  776. package/esm2022/lib/services/logger.service.mjs +0 -130
  777. package/esm2022/lib/services/mng-localstorage-config.service.mjs +0 -30
  778. package/esm2022/lib/services/navigation.service.mjs +0 -55
  779. package/esm2022/lib/services/providers/formly-config.provider.mjs +0 -31
  780. package/esm2022/lib/services/providers/index.mjs +0 -2
  781. package/esm2022/lib/services/router.service.mjs +0 -183
  782. package/esm2022/lib/services/tokens/browser-storage.token.mjs +0 -6
  783. package/esm2022/lib/services/tokens/commons-init.token.mjs +0 -3
  784. package/esm2022/lib/services/tokens/default-setting.token.mjs +0 -3
  785. package/esm2022/lib/services/tokens/index.mjs +0 -6
  786. package/esm2022/lib/services/tokens/log-publisher.token.mjs +0 -3
  787. package/esm2022/lib/services/tokens/module-config.token.mjs +0 -3
  788. package/esm2022/lib/services/version.service.mjs +0 -49
  789. package/esm2022/lib/services/view/index.mjs +0 -3
  790. package/esm2022/lib/services/view/provide-view-container.mjs +0 -17
  791. package/esm2022/lib/services/view/view-container.service.mjs +0 -59
  792. package/esm2022/lib/styles/button-style.builder.mjs +0 -174
  793. package/esm2022/lib/styles/index.mjs +0 -3
  794. package/esm2022/lib/styles/models/index.mjs +0 -3
  795. package/esm2022/lib/styles/models/style-level.enum.mjs +0 -12
  796. package/esm2022/lib/styles/models/style-size.enum.mjs +0 -9
  797. package/esm2022/lib/styles/styles.util.mjs +0 -42
  798. package/esm2022/lib/types/action-descriptor.types.mjs +0 -2
  799. package/esm2022/lib/types/data-provider.types.mjs +0 -2
  800. package/esm2022/lib/types/getter.type.mjs +0 -2
  801. package/esm2022/lib/types/i18n.type.mjs +0 -2
  802. package/esm2022/lib/types/index.mjs +0 -8
  803. package/esm2022/lib/types/localstorage-config-value.type.mjs +0 -2
  804. package/esm2022/lib/types/type.decorator.mjs +0 -12
  805. package/esm2022/lib/types/type.model.mjs +0 -2
  806. package/esm2022/lib/utils/data-list-params.util.mjs +0 -416
  807. package/esm2022/lib/utils/date.util.mjs +0 -136
  808. package/esm2022/lib/utils/decorator-metadata.util.mjs +0 -61
  809. package/esm2022/lib/utils/editor-formly.util.mjs +0 -339
  810. package/esm2022/lib/utils/enum.util.mjs +0 -83
  811. package/esm2022/lib/utils/error.util.mjs +0 -247
  812. package/esm2022/lib/utils/export.util.mjs +0 -21
  813. package/esm2022/lib/utils/file.util.mjs +0 -18
  814. package/esm2022/lib/utils/i18n.util.mjs +0 -274
  815. package/esm2022/lib/utils/index.mjs +0 -14
  816. package/esm2022/lib/utils/model.util.mjs +0 -73
  817. package/esm2022/lib/utils/notification.util.mjs +0 -45
  818. package/esm2022/lib/utils/object.util.mjs +0 -135
  819. package/esm2022/lib/utils/route.util.mjs +0 -60
  820. package/esm2022/lib/utils/string.util.mjs +0 -59
  821. package/esm2022/lib/utils/tableview.util.mjs +0 -193
  822. package/esm2022/lib/validators/field.validator.mjs +0 -33
  823. package/esm2022/lib/validators/index.mjs +0 -2
  824. package/fesm2022/mediusinc-mng-commons-data-api-class-dto-obsolete.mjs +0 -698
  825. package/fesm2022/mediusinc-mng-commons-data-api-class-dto-obsolete.mjs.map +0 -1
  826. package/fesm2022/mediusinc-mng-commons-data-api-class-dto.mjs +0 -480
  827. package/fesm2022/mediusinc-mng-commons-data-api-class-dto.mjs.map +0 -1
  828. package/fesm2022/mediusinc-mng-commons-data-api.mjs +0 -224
  829. package/fesm2022/mediusinc-mng-commons-data-api.mjs.map +0 -1
  830. package/lib/components/action/action.component.d.ts +0 -76
  831. package/lib/components/action/editor/action-editor.component.d.ts +0 -33
  832. package/lib/components/action/editor/injector-context/action-editor-injector-context.component.d.ts +0 -80
  833. package/lib/components/action/index.d.ts +0 -5
  834. package/lib/components/action/localization/data-language-dropdown.component.d.ts +0 -24
  835. package/lib/components/action/models/action-component.model.d.ts +0 -13
  836. package/lib/components/action/models/action-execution.model.d.ts +0 -169
  837. package/lib/components/action/models/index.d.ts +0 -3
  838. package/lib/components/action/route/action-route.component.d.ts +0 -31
  839. package/lib/components/action/table/action-table.component.d.ts +0 -49
  840. package/lib/components/form/autocomplete/autocomplete.component.d.ts +0 -83
  841. package/lib/components/form/date-range/date-range.component.d.ts +0 -28
  842. package/lib/components/form/dropdown/dropdown.component.d.ts +0 -54
  843. package/lib/components/form/editor/form-editor.component.d.ts +0 -51
  844. package/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.d.ts +0 -16
  845. package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +0 -16
  846. package/lib/components/form/formly/fields/formly-field-custom/formly-custom-field-base.model.d.ts +0 -27
  847. package/lib/components/form/formly/fields/formly-field-custom/formly-field-custom.component.d.ts +0 -12
  848. package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +0 -15
  849. package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +0 -14
  850. package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +0 -39
  851. package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +0 -11
  852. package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +0 -45
  853. package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +0 -25
  854. package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +0 -42
  855. package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +0 -7
  856. package/lib/components/form/formly/fields/index.d.ts +0 -12
  857. package/lib/components/form/formly/formly.config.d.ts +0 -17
  858. package/lib/components/form/formly/index.d.ts +0 -1
  859. package/lib/components/form/formly/models/formly-config.model.d.ts +0 -11
  860. package/lib/components/form/formly/models/formly-field.model.d.ts +0 -17
  861. package/lib/components/form/formly/models/index.d.ts +0 -2
  862. package/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.d.ts +0 -11
  863. package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +0 -11
  864. package/lib/components/form/formly/wrappers/index.d.ts +0 -2
  865. package/lib/components/form/index.d.ts +0 -4
  866. package/lib/components/form/models/field-action-context.model.d.ts +0 -24
  867. package/lib/components/form/models/form-editor.event.d.ts +0 -58
  868. package/lib/components/form/models/index.d.ts +0 -3
  869. package/lib/components/layout/breadcrumb.component.d.ts +0 -13
  870. package/lib/components/layout/footer.component.d.ts +0 -9
  871. package/lib/components/layout/index.d.ts +0 -8
  872. package/lib/components/layout/main-layout.component.d.ts +0 -19
  873. package/lib/components/layout/menu-item.component.d.ts +0 -55
  874. package/lib/components/layout/menu.component.d.ts +0 -16
  875. package/lib/components/layout/services/index.d.ts +0 -1
  876. package/lib/components/layout/services/main-layout.component.service.d.ts +0 -65
  877. package/lib/components/layout/topbar-user.component.d.ts +0 -22
  878. package/lib/components/layout/topbar.component.d.ts +0 -26
  879. package/lib/components/layout/version.component.d.ts +0 -19
  880. package/lib/components/layoutV2/breadcrumb.component.d.ts +0 -10
  881. package/lib/components/layoutV2/footer.component.d.ts +0 -12
  882. package/lib/components/layoutV2/index.d.ts +0 -7
  883. package/lib/components/layoutV2/main-layout.component.d.ts +0 -24
  884. package/lib/components/layoutV2/menu-item.component.d.ts +0 -42
  885. package/lib/components/layoutV2/menu.component.d.ts +0 -14
  886. package/lib/components/layoutV2/model/index.d.ts +0 -2
  887. package/lib/components/layoutV2/model/layout-state.model.d.ts +0 -10
  888. package/lib/components/layoutV2/model/menu.model.d.ts +0 -4
  889. package/lib/components/layoutV2/services/index.d.ts +0 -2
  890. package/lib/components/layoutV2/services/main-layout.component.service.d.ts +0 -17
  891. package/lib/components/layoutV2/services/menu.service.d.ts +0 -22
  892. package/lib/components/layoutV2/sidebar.component.d.ts +0 -19
  893. package/lib/components/layoutV2/topbar-user.component.d.ts +0 -16
  894. package/lib/components/layoutV2/topbar.component.d.ts +0 -22
  895. package/lib/components/layoutV2/version.component.d.ts +0 -19
  896. package/lib/components/pages/error/error.page.component.d.ts +0 -8
  897. package/lib/components/pages/index.d.ts +0 -2
  898. package/lib/components/pages/not-found/not-found.page.component.d.ts +0 -8
  899. package/lib/components/table/column-filter-full/column-filter-full.component.d.ts +0 -101
  900. package/lib/components/table/column-value/column-value.component.d.ts +0 -35
  901. package/lib/components/table/models/table.event.d.ts +0 -17
  902. package/lib/components/table/models/table.interface.d.ts +0 -17
  903. package/lib/components/table/table-column-filter-class/table-column-filter-class.pipe.d.ts +0 -8
  904. package/lib/components/table/table.component.d.ts +0 -123
  905. package/lib/components/tableview/actions/tableview-default-actions.d.ts +0 -36
  906. package/lib/components/tableview/builders/tableview-builder.d.ts +0 -115
  907. package/lib/components/tableview/helpers/tableview-create.d.ts +0 -16
  908. package/lib/components/tableview/index.d.ts +0 -6
  909. package/lib/components/tableview/models/tableview.model.d.ts +0 -8
  910. package/lib/components/tableview/route/tableview-route.component.d.ts +0 -7
  911. package/lib/components/tableview/tableview.component.d.ts +0 -29
  912. package/lib/data-providers/base.data-provider.d.ts +0 -32
  913. package/lib/data-providers/editor.data-provider.d.ts +0 -88
  914. package/lib/data-providers/index.d.ts +0 -5
  915. package/lib/data-providers/lookup.data-provider.d.ts +0 -27
  916. package/lib/data-providers/table.data-provider.d.ts +0 -40
  917. package/lib/data-providers/tableview.data-provider.d.ts +0 -45
  918. package/lib/descriptors/action/action-button.descriptor.d.ts +0 -25
  919. package/lib/descriptors/action/action-confirmation.descriptor.d.ts +0 -36
  920. package/lib/descriptors/action/action-editor.descriptor.d.ts +0 -118
  921. package/lib/descriptors/action/action-link.descriptor.d.ts +0 -34
  922. package/lib/descriptors/action/action.descriptor.d.ts +0 -149
  923. package/lib/descriptors/action/index.d.ts +0 -5
  924. package/lib/descriptors/editor/editor.descriptor.d.ts +0 -270
  925. package/lib/descriptors/editor/field-action.descriptor.d.ts +0 -23
  926. package/lib/descriptors/editor/field-base.descriptor.d.ts +0 -122
  927. package/lib/descriptors/editor/field-group.descriptor.d.ts +0 -42
  928. package/lib/descriptors/editor/field-lookup.descriptor.d.ts +0 -83
  929. package/lib/descriptors/editor/field-many.descriptor.d.ts +0 -63
  930. package/lib/descriptors/editor/field-validation.descriptor.d.ts +0 -19
  931. package/lib/descriptors/editor/field.descriptor.d.ts +0 -167
  932. package/lib/descriptors/editor/index.d.ts +0 -8
  933. package/lib/descriptors/editor/internal/editor-fields.model.d.ts +0 -33
  934. package/lib/descriptors/editor/internal/editor.model.d.ts +0 -15
  935. package/lib/descriptors/filter/filter-lookup.descriptor.d.ts +0 -70
  936. package/lib/descriptors/filter/filter.descriptor.d.ts +0 -66
  937. package/lib/descriptors/filter/index.d.ts +0 -2
  938. package/lib/descriptors/interfaces/field-config.interface.d.ts +0 -9
  939. package/lib/descriptors/interfaces/index.d.ts +0 -2
  940. package/lib/descriptors/interfaces/lookup-descriptor.interface.d.ts +0 -12
  941. package/lib/descriptors/model/enum.descriptor.d.ts +0 -14
  942. package/lib/descriptors/model/index.d.ts +0 -3
  943. package/lib/descriptors/model/model.descriptor.d.ts +0 -31
  944. package/lib/descriptors/model/type.descriptor.d.ts +0 -5
  945. package/lib/descriptors/table/column.descriptor.d.ts +0 -148
  946. package/lib/descriptors/table/index.d.ts +0 -3
  947. package/lib/descriptors/table/internal/table-columns.model.d.ts +0 -42
  948. package/lib/descriptors/table/internal/table.model.d.ts +0 -12
  949. package/lib/descriptors/table/table.descriptor.d.ts +0 -272
  950. package/lib/descriptors/tableview/index.d.ts +0 -1
  951. package/lib/descriptors/tableview/internal/tableview.model.d.ts +0 -11
  952. package/lib/descriptors/tableview/tableview.descriptor.d.ts +0 -193
  953. package/lib/descriptors/types/action.type.d.ts +0 -21
  954. package/lib/descriptors/types/editor.type.d.ts +0 -6
  955. package/lib/descriptors/types/field.type.d.ts +0 -47
  956. package/lib/descriptors/types/index.d.ts +0 -7
  957. package/lib/descriptors/types/table.type.d.ts +0 -18
  958. package/lib/directives/component.directive.d.ts +0 -20
  959. package/lib/directives/dialog-keydown-handler.directive.d.ts +0 -12
  960. package/lib/directives/index.d.ts +0 -4
  961. package/lib/directives/input-trim.directive.d.ts +0 -14
  962. package/lib/directives/template.directive.d.ts +0 -12
  963. package/lib/error/error.handler.d.ts +0 -6
  964. package/lib/error/index.d.ts +0 -1
  965. package/lib/guards/index.d.ts +0 -1
  966. package/lib/guards/unsaved-changes.guard.d.ts +0 -3
  967. package/lib/helpers/coercion.d.ts +0 -9
  968. package/lib/helpers/data-provider-executors.d.ts +0 -19
  969. package/lib/models/action-editor.model.d.ts +0 -15
  970. package/lib/models/column-value.model.d.ts +0 -4
  971. package/lib/models/common-init-event-enum.model.d.ts +0 -9
  972. package/lib/models/config.model.d.ts +0 -53
  973. package/lib/models/enum.model.d.ts +0 -7
  974. package/lib/models/error.model.d.ts +0 -50
  975. package/lib/models/index.d.ts +0 -19
  976. package/lib/models/layout-config.model.d.ts +0 -34
  977. package/lib/models/log.model.d.ts +0 -40
  978. package/lib/models/menu.model.d.ts +0 -32
  979. package/lib/models/tableview-attr.model.d.ts +0 -10
  980. package/lib/models/type-registry.model.d.ts +0 -7
  981. package/lib/models/user.model.d.ts +0 -8
  982. package/lib/models/view-container.model.d.ts +0 -24
  983. package/lib/pipes/boolean.pipe.d.ts +0 -7
  984. package/lib/pipes/class-map.pipe.d.ts +0 -7
  985. package/lib/pipes/enum.pipe.d.ts +0 -8
  986. package/lib/pipes/enumerate-async.pipe.d.ts +0 -14
  987. package/lib/pipes/enumerate.pipe.d.ts +0 -21
  988. package/lib/pipes/getter.pipe.d.ts +0 -8
  989. package/lib/pipes/i18n-property.pipe.d.ts +0 -8
  990. package/lib/pipes/index.d.ts +0 -11
  991. package/lib/pipes/json-path.pipe.d.ts +0 -13
  992. package/lib/pipes/locale-default-row-class.pipe.d.ts +0 -10
  993. package/lib/pipes/models/internal/enumrate-pipe-i18n.model.d.ts +0 -5
  994. package/lib/pipes/models/internal/index.d.ts +0 -1
  995. package/lib/pipes/parametrize.pipe.d.ts +0 -13
  996. package/lib/pipes/template.pipe.d.ts +0 -10
  997. package/lib/provide.d.ts +0 -10
  998. package/lib/registry/type.registry.d.ts +0 -25
  999. package/lib/router/index.d.ts +0 -3
  1000. package/lib/router/models/index.d.ts +0 -1
  1001. package/lib/router/models/router.model.d.ts +0 -31
  1002. package/lib/router/route-builder.d.ts +0 -75
  1003. package/lib/router/routes-builder.d.ts +0 -28
  1004. package/lib/router/tableview-route-builder.d.ts +0 -44
  1005. package/lib/security/authorization.guard.d.ts +0 -2
  1006. package/lib/security/authorization.service.d.ts +0 -17
  1007. package/lib/security/authorization.util.d.ts +0 -5
  1008. package/lib/security/index.d.ts +0 -3
  1009. package/lib/security/model/authorization.type.d.ts +0 -6
  1010. package/lib/security/model/index.d.ts +0 -3
  1011. package/lib/security/model/permission-service.interface.d.ts +0 -6
  1012. package/lib/security/model/permissions.model.d.ts +0 -37
  1013. package/lib/services/action/action-executor.service.d.ts +0 -177
  1014. package/lib/services/action/component-action-executor.service.d.ts +0 -9
  1015. package/lib/services/action/index.d.ts +0 -4
  1016. package/lib/services/action/root-action-executor.service.d.ts +0 -9
  1017. package/lib/services/action-error-mapper.service.d.ts +0 -18
  1018. package/lib/services/commons-init.service.d.ts +0 -22
  1019. package/lib/services/commons.service.d.ts +0 -90
  1020. package/lib/services/configuration.service.d.ts +0 -68
  1021. package/lib/services/data-provider-executor.service.d.ts +0 -60
  1022. package/lib/services/index.d.ts +0 -11
  1023. package/lib/services/internal/commons-init.provider.d.ts +0 -4
  1024. package/lib/services/internal/index.d.ts +0 -1
  1025. package/lib/services/log-publisher-console.service.d.ts +0 -4
  1026. package/lib/services/logger.service.d.ts +0 -33
  1027. package/lib/services/mng-localstorage-config.service.d.ts +0 -11
  1028. package/lib/services/navigation.service.d.ts +0 -15
  1029. package/lib/services/providers/formly-config.provider.d.ts +0 -5
  1030. package/lib/services/providers/index.d.ts +0 -1
  1031. package/lib/services/router.service.d.ts +0 -37
  1032. package/lib/services/tokens/browser-storage.token.d.ts +0 -2
  1033. package/lib/services/tokens/commons-init.token.d.ts +0 -3
  1034. package/lib/services/tokens/default-setting.token.d.ts +0 -2
  1035. package/lib/services/tokens/index.d.ts +0 -5
  1036. package/lib/services/tokens/log-publisher.token.d.ts +0 -3
  1037. package/lib/services/tokens/module-config.token.d.ts +0 -3
  1038. package/lib/services/version.service.d.ts +0 -14
  1039. package/lib/services/view/index.d.ts +0 -2
  1040. package/lib/services/view/view-container.service.d.ts +0 -32
  1041. package/lib/styles/button-style.builder.d.ts +0 -68
  1042. package/lib/styles/index.d.ts +0 -2
  1043. package/lib/styles/models/index.d.ts +0 -2
  1044. package/lib/styles/models/style-level.enum.d.ts +0 -10
  1045. package/lib/styles/models/style-size.enum.d.ts +0 -7
  1046. package/lib/styles/styles.util.d.ts +0 -15
  1047. package/lib/types/action-descriptor.types.d.ts +0 -4
  1048. package/lib/types/data-provider.types.d.ts +0 -3
  1049. package/lib/types/getter.type.d.ts +0 -2
  1050. package/lib/types/i18n.type.d.ts +0 -1
  1051. package/lib/types/index.d.ts +0 -7
  1052. package/lib/types/localstorage-config-value.type.d.ts +0 -1
  1053. package/lib/types/type.model.d.ts +0 -31
  1054. package/lib/utils/data-list-params.util.d.ts +0 -84
  1055. package/lib/utils/date.util.d.ts +0 -20
  1056. package/lib/utils/decorator-metadata.util.d.ts +0 -33
  1057. package/lib/utils/editor-formly.util.d.ts +0 -13
  1058. package/lib/utils/enum.util.d.ts +0 -51
  1059. package/lib/utils/error.util.d.ts +0 -116
  1060. package/lib/utils/export.util.d.ts +0 -5
  1061. package/lib/utils/file.util.d.ts +0 -3
  1062. package/lib/utils/i18n.util.d.ts +0 -85
  1063. package/lib/utils/index.d.ts +0 -13
  1064. package/lib/utils/model.util.d.ts +0 -10
  1065. package/lib/utils/notification.util.d.ts +0 -13
  1066. package/lib/utils/object.util.d.ts +0 -30
  1067. package/lib/utils/route.util.d.ts +0 -37
  1068. package/lib/utils/string.util.d.ts +0 -9
  1069. package/lib/utils/tableview.util.d.ts +0 -53
  1070. package/lib/validators/field.validator.d.ts +0 -3
  1071. package/lib/validators/index.d.ts +0 -1
  1072. package/openapi/angular/README.mustache +0 -226
  1073. package/openapi/angular/api.module.mustache +0 -39
  1074. package/openapi/angular/api.service.mustache +0 -253
  1075. package/openapi/angular/apiInterface.mustache +0 -47
  1076. package/openapi/angular/apis.mustache +0 -12
  1077. package/openapi/angular/config.yaml +0 -23
  1078. package/openapi/angular/configuration.mustache +0 -128
  1079. package/openapi/angular/custom/base-api.service.mustache +0 -14
  1080. package/openapi/angular/custom/helpers.mustache +0 -71
  1081. package/openapi/angular/custom/modelSchema.mustache +0 -46
  1082. package/openapi/angular/custom/schema.mustache +0 -18
  1083. package/openapi/angular/encoder.mustache +0 -20
  1084. package/openapi/angular/git_push.sh.mustache +0 -57
  1085. package/openapi/angular/index.mustache +0 -0
  1086. package/openapi/angular/licenseInfo.mustache +0 -11
  1087. package/openapi/angular/model.mustache +0 -16
  1088. package/openapi/angular/modelAlias.mustache +0 -1
  1089. package/openapi/angular/modelEnum.mustache +0 -21
  1090. package/openapi/angular/modelGeneric.mustache +0 -14
  1091. package/openapi/angular/modelGenericAdditionalProperties.mustache +0 -5
  1092. package/openapi/angular/modelGenericEnums.mustache +0 -30
  1093. package/openapi/angular/modelOneOf.mustache +0 -14
  1094. package/openapi/angular/modelTaggedUnion.mustache +0 -21
  1095. package/openapi/angular/models.mustache +0 -5
  1096. package/openapi/angular/ng-package.mustache +0 -6
  1097. package/openapi/angular/package.mustache +0 -39
  1098. package/openapi/angular/param.mustache +0 -69
  1099. package/openapi/angular/tsconfig.mustache +0 -28
  1100. package/openapi/angular/variables.mustache +0 -9
  1101. package/openapi/node/model.mustache +0 -83
  1102. package/openapi/node/models.mustache +0 -6
  1103. package/scss/common/layout/_breadcrumb.scss +0 -99
  1104. package/scss/common/layout/_config.scss +0 -100
  1105. package/scss/common/layout/_dashboard.scss +0 -16
  1106. package/scss/common/layout/_exception.scss +0 -133
  1107. package/scss/common/layout/_footer.scss +0 -29
  1108. package/scss/common/layout/_help.scss +0 -156
  1109. package/scss/common/layout/_inlinemenu.scss +0 -68
  1110. package/scss/common/layout/_invoice.scss +0 -176
  1111. package/scss/common/layout/_landing.scss +0 -636
  1112. package/scss/common/layout/_layout_dark.scss +0 -23
  1113. package/scss/common/layout/_layout_light.scss +0 -23
  1114. package/scss/common/layout/_loader.scss +0 -17
  1115. package/scss/common/layout/_login.scss +0 -106
  1116. package/scss/common/layout/_main.scss +0 -45
  1117. package/scss/common/layout/_mixins.scss +0 -222
  1118. package/scss/common/layout/_rightmenu.scss +0 -130
  1119. package/scss/common/layout/_topbar.scss +0 -191
  1120. package/scss/common/layout/_typography.scss +0 -68
  1121. package/scss/common/layout/_utils.scss +0 -96
  1122. package/scss/common/layout/_widgets.scss +0 -392
  1123. package/scss/common/layout/menu/_menu.scss +0 -7
  1124. package/scss/common/layout/menu/_menu_common.scss +0 -183
  1125. package/scss/common/layout/menu/_menu_overlay.scss +0 -52
  1126. package/scss/common/layout/menu/_menu_sidebar.scss +0 -233
  1127. package/scss/common/layout/menu/_menu_slim.scss +0 -137
  1128. package/scss/common/layout/menu/_menu_static.scss +0 -70
  1129. package/scss/common/layout/menu/_menu_theme.scss +0 -364
  1130. package/scss/common/theme/_theme_dark.scss +0 -5
  1131. package/scss/common/theme/_theme_light.scss +0 -5
  1132. package/scss/common/theme/designer/_colors.scss +0 -17
  1133. package/scss/common/theme/designer/_common.scss +0 -41
  1134. package/scss/common/theme/designer/_components.scss +0 -102
  1135. package/scss/common/theme/designer/_mixins.scss +0 -203
  1136. package/scss/common/theme/designer/components/button/_button.scss +0 -572
  1137. package/scss/common/theme/designer/components/button/_speeddial.scss +0 -81
  1138. package/scss/common/theme/designer/components/button/_splitbutton.scss +0 -2
  1139. package/scss/common/theme/designer/components/data/_carousel.scss +0 -37
  1140. package/scss/common/theme/designer/components/data/_datatable.scss +0 -266
  1141. package/scss/common/theme/designer/components/data/_dataview.scss +0 -55
  1142. package/scss/common/theme/designer/components/data/_filter.scss +0 -137
  1143. package/scss/common/theme/designer/components/data/_fullcalendar.scss +0 -324
  1144. package/scss/common/theme/designer/components/data/_orderlist.scss +0 -91
  1145. package/scss/common/theme/designer/components/data/_organizationchart.scss +0 -50
  1146. package/scss/common/theme/designer/components/data/_paginator.scss +0 -83
  1147. package/scss/common/theme/designer/components/data/_picklist.scss +0 -91
  1148. package/scss/common/theme/designer/components/data/_timeline.scss +0 -35
  1149. package/scss/common/theme/designer/components/data/_tree.scss +0 -144
  1150. package/scss/common/theme/designer/components/data/_treetable.scss +0 -241
  1151. package/scss/common/theme/designer/components/data/_virtualscroller.scss +0 -28
  1152. package/scss/common/theme/designer/components/file/_fileupload.scss +0 -58
  1153. package/scss/common/theme/designer/components/input/_autocomplete.scss +0 -105
  1154. package/scss/common/theme/designer/components/input/_calendar.scss +0 -212
  1155. package/scss/common/theme/designer/components/input/_cascadeselect.scss +0 -98
  1156. package/scss/common/theme/designer/components/input/_checkbox.scss +0 -85
  1157. package/scss/common/theme/designer/components/input/_chips.scss +0 -43
  1158. package/scss/common/theme/designer/components/input/_colorpicker.scss +0 -19
  1159. package/scss/common/theme/designer/components/input/_dropdown.scss +0 -136
  1160. package/scss/common/theme/designer/components/input/_editor.scss +0 -122
  1161. package/scss/common/theme/designer/components/input/_inputgroup.scss +0 -69
  1162. package/scss/common/theme/designer/components/input/_inputmask.scss +0 -3
  1163. package/scss/common/theme/designer/components/input/_inputnumber.scss +0 -3
  1164. package/scss/common/theme/designer/components/input/_inputswitch.scss +0 -60
  1165. package/scss/common/theme/designer/components/input/_inputtext.scss +0 -97
  1166. package/scss/common/theme/designer/components/input/_listbox.scss +0 -82
  1167. package/scss/common/theme/designer/components/input/_multiselect.scss +0 -165
  1168. package/scss/common/theme/designer/components/input/_password.scss +0 -33
  1169. package/scss/common/theme/designer/components/input/_radiobutton.scss +0 -78
  1170. package/scss/common/theme/designer/components/input/_rating.scss +0 -48
  1171. package/scss/common/theme/designer/components/input/_selectbutton.scss +0 -50
  1172. package/scss/common/theme/designer/components/input/_slider.scss +0 -71
  1173. package/scss/common/theme/designer/components/input/_togglebutton.scss +0 -48
  1174. package/scss/common/theme/designer/components/input/_treeselect.scss +0 -91
  1175. package/scss/common/theme/designer/components/menu/_breadcrumb.scss +0 -42
  1176. package/scss/common/theme/designer/components/menu/_contextmenu.scss +0 -51
  1177. package/scss/common/theme/designer/components/menu/_dock.scss +0 -51
  1178. package/scss/common/theme/designer/components/menu/_megamenu.scss +0 -103
  1179. package/scss/common/theme/designer/components/menu/_menu.scss +0 -41
  1180. package/scss/common/theme/designer/components/menu/_menubar.scss +0 -180
  1181. package/scss/common/theme/designer/components/menu/_panelmenu.scss +0 -136
  1182. package/scss/common/theme/designer/components/menu/_slidemenu.scss +0 -56
  1183. package/scss/common/theme/designer/components/menu/_steps.scss +0 -56
  1184. package/scss/common/theme/designer/components/menu/_tabmenu.scss +0 -49
  1185. package/scss/common/theme/designer/components/menu/_tieredmenu.scss +0 -57
  1186. package/scss/common/theme/designer/components/messages/_inlinemessage.scss +0 -64
  1187. package/scss/common/theme/designer/components/messages/_message.scss +0 -102
  1188. package/scss/common/theme/designer/components/messages/_toast.scss +0 -94
  1189. package/scss/common/theme/designer/components/misc/_avatar.scss +0 -30
  1190. package/scss/common/theme/designer/components/misc/_badge.scss +0 -48
  1191. package/scss/common/theme/designer/components/misc/_blockui.scss +0 -3
  1192. package/scss/common/theme/designer/components/misc/_chip.scss +0 -38
  1193. package/scss/common/theme/designer/components/misc/_inplace.scss +0 -16
  1194. package/scss/common/theme/designer/components/misc/_progressbar.scss +0 -17
  1195. package/scss/common/theme/designer/components/misc/_scrolltop.scss +0 -20
  1196. package/scss/common/theme/designer/components/misc/_skeleton.scss +0 -8
  1197. package/scss/common/theme/designer/components/misc/_tag.scss +0 -35
  1198. package/scss/common/theme/designer/components/misc/_terminal.scss +0 -11
  1199. package/scss/common/theme/designer/components/multimedia/_galleria.scss +0 -141
  1200. package/scss/common/theme/designer/components/multimedia/_image.scss +0 -44
  1201. package/scss/common/theme/designer/components/overlay/_confirmpopup.scss +0 -65
  1202. package/scss/common/theme/designer/components/overlay/_dialog.scss +0 -63
  1203. package/scss/common/theme/designer/components/overlay/_overlaypanel.scss +0 -62
  1204. package/scss/common/theme/designer/components/overlay/_sidebar.scss +0 -27
  1205. package/scss/common/theme/designer/components/overlay/_tooltip.scss +0 -33
  1206. package/scss/common/theme/designer/components/panel/_accordion.scss +0 -119
  1207. package/scss/common/theme/designer/components/panel/_card.scss +0 -30
  1208. package/scss/common/theme/designer/components/panel/_divider.scss +0 -31
  1209. package/scss/common/theme/designer/components/panel/_fieldset.scss +0 -47
  1210. package/scss/common/theme/designer/components/panel/_panel.scss +0 -42
  1211. package/scss/common/theme/designer/components/panel/_scrollpanel.scss +0 -6
  1212. package/scss/common/theme/designer/components/panel/_splitter.scss +0 -19
  1213. package/scss/common/theme/designer/components/panel/_tabview.scss +0 -66
  1214. package/scss/common/theme/designer/components/panel/_toolbar.scss +0 -10
  1215. package/scss/common/theme/extensions/_button.scss +0 -111
  1216. package/scss/common/theme/extensions/_calendar.scss +0 -18
  1217. package/scss/common/theme/extensions/_card.scss +0 -6
  1218. package/scss/common/theme/extensions/_carousel.scss +0 -13
  1219. package/scss/common/theme/extensions/_checkbox.scss +0 -10
  1220. package/scss/common/theme/extensions/_contextmenu.scss +0 -16
  1221. package/scss/common/theme/extensions/_datatable.scss +0 -83
  1222. package/scss/common/theme/extensions/_dialog.scss +0 -14
  1223. package/scss/common/theme/extensions/_fieldset.scss +0 -6
  1224. package/scss/common/theme/extensions/_galleria.scss +0 -25
  1225. package/scss/common/theme/extensions/_megamenu.scss +0 -18
  1226. package/scss/common/theme/extensions/_menu.scss +0 -14
  1227. package/scss/common/theme/extensions/_menubar.scss +0 -14
  1228. package/scss/common/theme/extensions/_orderlist.scss +0 -37
  1229. package/scss/common/theme/extensions/_paginator.scss +0 -19
  1230. package/scss/common/theme/extensions/_panelmenu.scss +0 -20
  1231. package/scss/common/theme/extensions/_password.scss +0 -5
  1232. package/scss/common/theme/extensions/_picklist.scss +0 -37
  1233. package/scss/common/theme/extensions/_radiobutton.scss +0 -8
  1234. package/scss/common/theme/extensions/_sidebar.scss +0 -19
  1235. package/scss/common/theme/extensions/_slidemenu.scss +0 -10
  1236. package/scss/common/theme/extensions/_slider.scss +0 -6
  1237. package/scss/common/theme/extensions/_steps.scss +0 -50
  1238. package/scss/common/theme/extensions/_tieredmenu.scss +0 -14
  1239. package/scss/common/theme/extensions/_toast.scss +0 -6
  1240. package/scss/common/theme/extensions/_tree.scss +0 -35
  1241. package/scss/common/theme/extensions/_treetable.scss +0 -35
  1242. package/scss/common/theme/extensions/_vendor_extensions.scss +0 -27
  1243. package/scss/common/variables/layout/_common.scss +0 -12
  1244. package/scss/common/variables/layout/_layout_dark.scss +0 -70
  1245. package/scss/common/variables/layout/_layout_light.scss +0 -70
  1246. package/scss/common/variables/theme/_theme_dark.scss +0 -937
  1247. package/scss/common/variables/theme/_theme_light.scss +0 -936
  1248. package/scss/layout/default/_mng-variables-layout-dark.scss +0 -2
  1249. package/scss/layout/default/_mng-variables-layout-light.scss +0 -2
  1250. package/scss/layout/default/layout-dark.scss +0 -2
  1251. package/scss/layout/default/layout-light.scss +0 -2
  1252. package/scss/mng-commons-dark-v2.scss +0 -9
  1253. package/scss/mng-commons-dark.scss +0 -5
  1254. package/scss/mng-commons-light-v2.scss +0 -9
  1255. package/scss/mng-commons-light.scss +0 -8
  1256. package/scss/mng-overrides/_layout_action.scss +0 -10
  1257. package/scss/mng-overrides/_layout_dialog.scss +0 -91
  1258. package/scss/mng-overrides/_layout_forms.scss +0 -38
  1259. package/scss/mng-overrides/_layout_menu.scss +0 -10
  1260. package/scss/mng-overrides/_layout_radio.scss +0 -3
  1261. package/scss/mng-overrides/_layout_styles.scss +0 -35
  1262. package/scss/mng-overrides/_layout_topbar.scss +0 -21
  1263. package/scss/mng-overrides/_mixins.scss +0 -69
  1264. package/scss/mng-overrides/_theme_autocomplete.scss +0 -29
  1265. package/scss/mng-overrides/_theme_button.scss +0 -61
  1266. package/scss/mng-overrides/_theme_datatable.scss +0 -160
  1267. package/scss/mng-overrides/_theme_datepicker.scss +0 -21
  1268. package/scss/mng-overrides/_theme_dialog.scss +0 -108
  1269. package/scss/mng-overrides/_theme_dropdown.scss +0 -22
  1270. package/scss/mng-overrides/_theme_fileupload.scss +0 -24
  1271. package/scss/mng-overrides/_theme_forms.scss +0 -29
  1272. package/scss/mng-overrides/_theme_image.scss +0 -27
  1273. package/scss/mng-overrides/_theme_input.scss +0 -27
  1274. package/scss/mng-overrides/_theme_menu.scss +0 -5
  1275. package/scss/mng-overrides/_theme_multiselect.scss +0 -20
  1276. package/scss/mng-overrides/_theme_styles.scss +0 -17
  1277. package/scss/mng-overrides/_theme_tableview.scss +0 -79
  1278. package/scss/mng-overrides/_theme_tabview.scss +0 -11
  1279. package/scss/mng-overrides/_theme_toast.scss +0 -3
  1280. package/scss/mng-overrides/_theme_toolbar.scss +0 -5
  1281. package/scss/mng-overrides/_variables.scss +0 -15
  1282. package/scss/theme/default/_mng-variables-theme-dark.scss +0 -11
  1283. package/scss/theme/default/_mng-variables-theme-light.scss +0 -13
  1284. package/scss/theme/default/theme-dark.scss +0 -2
  1285. package/scss/theme/default/theme-light.scss +0 -2
  1286. package/scss/v2/layout/_animation.scss +0 -53
  1287. package/scss/v2/layout/_breadcrumb.scss +0 -97
  1288. package/scss/v2/layout/_config.scss +0 -42
  1289. package/scss/v2/layout/_content.scss +0 -3
  1290. package/scss/v2/layout/_fonts.scss +0 -32
  1291. package/scss/v2/layout/_layout_dark.scss +0 -12
  1292. package/scss/v2/layout/_layout_light.scss +0 -12
  1293. package/scss/v2/layout/_main.scss +0 -54
  1294. package/scss/v2/layout/_profile.scss +0 -10
  1295. package/scss/v2/layout/_responsive.scss +0 -131
  1296. package/scss/v2/layout/_sidebar_drawer.scss +0 -283
  1297. package/scss/v2/layout/_sidebar_horizontal.scss +0 -168
  1298. package/scss/v2/layout/_sidebar_reveal.scss +0 -201
  1299. package/scss/v2/layout/_sidebar_slim.scss +0 -157
  1300. package/scss/v2/layout/_sidebar_slim_plus.scss +0 -167
  1301. package/scss/v2/layout/_sidebar_vertical.scss +0 -176
  1302. package/scss/v2/layout/_topbar.scss +0 -174
  1303. package/scss/v2/layout/_typography.scss +0 -62
  1304. package/scss/v2/layout/_utils.scss +0 -33
  1305. package/scss/v2/layout/layout.scss +0 -24
  1306. package/scss/v2/layout/mng/_mng_layout_footer.scss +0 -39
  1307. package/scss/v2/layout/mng/_mng_layout_menu.scss +0 -10
  1308. package/scss/v2/layout/mng/_mng_layout_styles.scss +0 -3
  1309. package/scss/v2/layout/mng/_mng_layout_topbar.scss +0 -18
  1310. package/scss/v2/layout/preloading.scss +0 -84
  1311. package/scss/v2/theme/extensions/_fullcalendar.scss +0 -328
  1312. package/scss/v2/theme/theme-base/_colors.scss +0 -17
  1313. package/scss/v2/theme/theme-base/_common.scss +0 -76
  1314. package/scss/v2/theme/theme-base/_components.scss +0 -110
  1315. package/scss/v2/theme/theme-base/_mixins.scss +0 -337
  1316. package/scss/v2/theme/theme-base/components/button/_button.scss +0 -576
  1317. package/scss/v2/theme/theme-base/components/button/_speeddial.scss +0 -96
  1318. package/scss/v2/theme/theme-base/components/button/_splitbutton.scss +0 -348
  1319. package/scss/v2/theme/theme-base/components/data/_carousel.scss +0 -37
  1320. package/scss/v2/theme/theme-base/components/data/_datatable.scss +0 -338
  1321. package/scss/v2/theme/theme-base/components/data/_dataview.scss +0 -46
  1322. package/scss/v2/theme/theme-base/components/data/_filter.scss +0 -137
  1323. package/scss/v2/theme/theme-base/components/data/_orderlist.scss +0 -114
  1324. package/scss/v2/theme/theme-base/components/data/_organizationchart.scss +0 -50
  1325. package/scss/v2/theme/theme-base/components/data/_paginator.scss +0 -92
  1326. package/scss/v2/theme/theme-base/components/data/_picklist.scss +0 -114
  1327. package/scss/v2/theme/theme-base/components/data/_timeline.scss +0 -35
  1328. package/scss/v2/theme/theme-base/components/data/_tree.scss +0 -150
  1329. package/scss/v2/theme/theme-base/components/data/_treetable.scss +0 -255
  1330. package/scss/v2/theme/theme-base/components/data/_virtualscroller.scss +0 -28
  1331. package/scss/v2/theme/theme-base/components/file/_fileupload.scss +0 -64
  1332. package/scss/v2/theme/theme-base/components/input/_autocomplete.scss +0 -136
  1333. package/scss/v2/theme/theme-base/components/input/_calendar.scss +0 -267
  1334. package/scss/v2/theme/theme-base/components/input/_cascadeselect.scss +0 -135
  1335. package/scss/v2/theme/theme-base/components/input/_checkbox.scss +0 -94
  1336. package/scss/v2/theme/theme-base/components/input/_chips.scss +0 -65
  1337. package/scss/v2/theme/theme-base/components/input/_colorpicker.scss +0 -19
  1338. package/scss/v2/theme/theme-base/components/input/_dropdown.scss +0 -151
  1339. package/scss/v2/theme/theme-base/components/input/_editor.scss +0 -122
  1340. package/scss/v2/theme/theme-base/components/input/_inputgroup.scss +0 -74
  1341. package/scss/v2/theme/theme-base/components/input/_inputmask.scss +0 -16
  1342. package/scss/v2/theme/theme-base/components/input/_inputnumber.scss +0 -28
  1343. package/scss/v2/theme/theme-base/components/input/_inputswitch.scss +0 -60
  1344. package/scss/v2/theme/theme-base/components/input/_inputtext.scss +0 -100
  1345. package/scss/v2/theme/theme-base/components/input/_listbox.scss +0 -97
  1346. package/scss/v2/theme/theme-base/components/input/_multiselect.scss +0 -177
  1347. package/scss/v2/theme/theme-base/components/input/_password.scss +0 -52
  1348. package/scss/v2/theme/theme-base/components/input/_radiobutton.scss +0 -78
  1349. package/scss/v2/theme/theme-base/components/input/_rating.scss +0 -60
  1350. package/scss/v2/theme/theme-base/components/input/_selectbutton.scss +0 -50
  1351. package/scss/v2/theme/theme-base/components/input/_slider.scss +0 -71
  1352. package/scss/v2/theme/theme-base/components/input/_togglebutton.scss +0 -48
  1353. package/scss/v2/theme/theme-base/components/input/_treeselect.scss +0 -139
  1354. package/scss/v2/theme/theme-base/components/menu/_breadcrumb.scss +0 -42
  1355. package/scss/v2/theme/theme-base/components/menu/_contextmenu.scss +0 -39
  1356. package/scss/v2/theme/theme-base/components/menu/_dock.scss +0 -95
  1357. package/scss/v2/theme/theme-base/components/menu/_megamenu.scss +0 -55
  1358. package/scss/v2/theme/theme-base/components/menu/_menu.scss +0 -37
  1359. package/scss/v2/theme/theme-base/components/menu/_menubar.scss +0 -140
  1360. package/scss/v2/theme/theme-base/components/menu/_panelmenu.scss +0 -153
  1361. package/scss/v2/theme/theme-base/components/menu/_slidemenu.scss +0 -59
  1362. package/scss/v2/theme/theme-base/components/menu/_steps.scss +0 -56
  1363. package/scss/v2/theme/theme-base/components/menu/_tabmenu.scss +0 -73
  1364. package/scss/v2/theme/theme-base/components/menu/_tieredmenu.scss +0 -43
  1365. package/scss/v2/theme/theme-base/components/messages/_inlinemessage.scss +0 -69
  1366. package/scss/v2/theme/theme-base/components/messages/_message.scss +0 -107
  1367. package/scss/v2/theme/theme-base/components/messages/_toast.scss +0 -99
  1368. package/scss/v2/theme/theme-base/components/misc/_avatar.scss +0 -30
  1369. package/scss/v2/theme/theme-base/components/misc/_badge.scss +0 -48
  1370. package/scss/v2/theme/theme-base/components/misc/_blockui.scss +0 -0
  1371. package/scss/v2/theme/theme-base/components/misc/_chip.scss +0 -42
  1372. package/scss/v2/theme/theme-base/components/misc/_inplace.scss +0 -16
  1373. package/scss/v2/theme/theme-base/components/misc/_progressbar.scss +0 -17
  1374. package/scss/v2/theme/theme-base/components/misc/_scrolltop.scss +0 -25
  1375. package/scss/v2/theme/theme-base/components/misc/_skeleton.scss +0 -8
  1376. package/scss/v2/theme/theme-base/components/misc/_tag.scss +0 -40
  1377. package/scss/v2/theme/theme-base/components/misc/_terminal.scss +0 -12
  1378. package/scss/v2/theme/theme-base/components/multimedia/_galleria.scss +0 -155
  1379. package/scss/v2/theme/theme-base/components/multimedia/_image.scss +0 -49
  1380. package/scss/v2/theme/theme-base/components/overlay/_confirmpopup.scss +0 -70
  1381. package/scss/v2/theme/theme-base/components/overlay/_dialog.scss +0 -69
  1382. package/scss/v2/theme/theme-base/components/overlay/_overlaypanel.scss +0 -64
  1383. package/scss/v2/theme/theme-base/components/overlay/_sidebar.scss +0 -27
  1384. package/scss/v2/theme/theme-base/components/overlay/_tooltip.scss +0 -33
  1385. package/scss/v2/theme/theme-base/components/panel/_accordion.scss +0 -119
  1386. package/scss/v2/theme/theme-base/components/panel/_card.scss +0 -30
  1387. package/scss/v2/theme/theme-base/components/panel/_divider.scss +0 -31
  1388. package/scss/v2/theme/theme-base/components/panel/_fieldset.scss +0 -47
  1389. package/scss/v2/theme/theme-base/components/panel/_panel.scss +0 -63
  1390. package/scss/v2/theme/theme-base/components/panel/_scrollpanel.scss +0 -6
  1391. package/scss/v2/theme/theme-base/components/panel/_splitter.scss +0 -19
  1392. package/scss/v2/theme/theme-base/components/panel/_tabview.scss +0 -82
  1393. package/scss/v2/theme/theme-base/components/panel/_toolbar.scss +0 -11
  1394. package/scss/v2/theme/theme-base/mng/_mng_mixins.scss +0 -69
  1395. package/scss/v2/theme/theme-base/mng/_mng_theme_autocomplete.scss +0 -34
  1396. package/scss/v2/theme/theme-base/mng/_mng_theme_button.scss +0 -68
  1397. package/scss/v2/theme/theme-base/mng/_mng_theme_datatable.scss +0 -153
  1398. package/scss/v2/theme/theme-base/mng/_mng_theme_datepicker.scss +0 -21
  1399. package/scss/v2/theme/theme-base/mng/_mng_theme_dialog.scss +0 -206
  1400. package/scss/v2/theme/theme-base/mng/_mng_theme_dropdown.scss +0 -32
  1401. package/scss/v2/theme/theme-base/mng/_mng_theme_fileupload.scss +0 -24
  1402. package/scss/v2/theme/theme-base/mng/_mng_theme_forms.scss +0 -66
  1403. package/scss/v2/theme/theme-base/mng/_mng_theme_image.scss +0 -27
  1404. package/scss/v2/theme/theme-base/mng/_mng_theme_input.scss +0 -31
  1405. package/scss/v2/theme/theme-base/mng/_mng_theme_menu.scss +0 -5
  1406. package/scss/v2/theme/theme-base/mng/_mng_theme_multiselect.scss +0 -20
  1407. package/scss/v2/theme/theme-base/mng/_mng_theme_styles.scss +0 -17
  1408. package/scss/v2/theme/theme-base/mng/_mng_theme_tableview.scss +0 -97
  1409. package/scss/v2/theme/theme-base/mng/_mng_theme_tabview.scss +0 -11
  1410. package/scss/v2/theme/theme-base/mng/_mng_theme_toast.scss +0 -3
  1411. package/scss/v2/theme/theme-base/mng/_mng_theme_toolbar.scss +0 -5
  1412. package/scss/v2/theme/theme-base/mng/_mng_variables.scss +0 -15
  1413. package/scss/v2/theme/theme-dark/_extensions.scss +0 -100
  1414. package/scss/v2/theme/theme-dark/_variables.scss +0 -940
  1415. package/scss/v2/theme/theme-dark/blue/theme.scss +0 -14
  1416. package/scss/v2/theme/theme-light/_extensions.scss +0 -100
  1417. package/scss/v2/theme/theme-light/_variables.scss +0 -936
  1418. package/scss/v2/theme/theme-light/blue/theme.scss +0 -14
  1419. /package/{lib → core}/components/notification/notification-wrapper.component.d.ts +0 -0
  1420. /package/{lib/models → core/data-list}/data-list.model.d.ts +0 -0
  1421. /package/{lib/models → core/data-list}/filter-match.model.d.ts +0 -0
  1422. /package/{lib/models/class.model.d.ts → core/models/class-attribute.model.d.ts} +0 -0
  1423. /package/{lib → core}/models/version.model.d.ts +0 -0
  1424. /package/{lib/types/type.decorator.d.ts → core/reflect/type-enum-decorator.d.ts} +0 -0
  1425. /package/{lib/descriptors/types/filter.type.d.ts → filter/models/filter.model.d.ts} +0 -0
  1426. /package/{lib/descriptors/types/trim.type.d.ts → form/api/models/trim.model.d.ts} +0 -0
  1427. /package/{assets/i18n → i18n}/en.json +0 -0
  1428. /package/{assets/i18n → i18n}/sl.json +0 -0
  1429. /package/{lib/descriptors/table → table/api/descriptors}/sort.descriptor.d.ts +0 -0
  1430. /package/{lib/descriptors/types/column.type.d.ts → table/api/models/column.model.d.ts} +0 -0
  1431. /package/{lib → tableview/action}/models/can-component-deactivate.model.d.ts +0 -0
  1432. /package/{lib/services/action → tableview/action/services/providers}/provide-action-executor.d.ts +0 -0
  1433. /package/{lib/services/view → tableview/action/services/providers}/provide-view-container.d.ts +0 -0
  1434. /package/{lib/components → tableview/api}/action/models/tableview-action-default-categories.model.d.ts +0 -0
  1435. /package/{lib/components/form → tableview/api/editor}/models/form-editor.interface.d.ts +0 -0
  1436. /package/{lib → tableview/api/editor}/models/radio.model.d.ts +0 -0
@@ -1,747 +0,0 @@
1
- import { HttpErrorResponse } from '@angular/common/http';
2
- import { Injector, inject } from '@angular/core';
3
- import { Router } from '@angular/router';
4
- import { TranslateService } from '@ngx-translate/core';
5
- import { ConfirmationService, MessageService } from 'primeng/api';
6
- import { DialogService } from 'primeng/dynamicdialog';
7
- import { from, mergeMap, of, switchMap, take, timeout } from 'rxjs';
8
- import { catchError, filter, first, map, startWith } from 'rxjs/operators';
9
- import { ActionContext, ActionContextValidation, ActionInstance, ActionInstanceStateEnum, ActionParameters } from '../../components/action/models';
10
- import { ActionDeleteDescriptorInst, ActionEditorAddDescriptorInst, ActionEditorDescriptorInst, ActionEditorEditDescriptorInst } from '../../descriptors/action';
11
- import { ActionActivationTriggerEnum, ActionTypeEnum } from '../../descriptors/types';
12
- import { toObservable } from '../../helpers/coercion';
13
- import { MngActionError, MngHttpError, MngInternalError } from '../../models';
14
- import { MngParametrizePipe } from '../../pipes';
15
- import { StyleSizeEnum } from '../../styles/models';
16
- import { I18nUtils, NotificationUtil, StringUtil } from '../../utils';
17
- import { MngActionErrorMapperService } from '../action-error-mapper.service';
18
- import { MngCommonsService } from '../commons.service';
19
- import { DataProviderExecutor } from '../data-provider-executor.service';
20
- import { MngLoggerService } from '../logger.service';
21
- import { MngNavigationService } from '../navigation.service';
22
- import { ACTION_EDITOR_DIALOG_COMPONENT_SETTING } from '../tokens';
23
- import { ViewContainer } from '../view';
24
- export class MngActionExecutorService {
25
- constructor() {
26
- this.injector = inject(Injector);
27
- this.router = inject(Router);
28
- this.dialogService = inject(DialogService);
29
- this.translate = inject(TranslateService);
30
- this.mngCommons = inject(MngCommonsService);
31
- this.dataProviderExecutor = inject(DataProviderExecutor);
32
- this.navigationService = inject(MngNavigationService);
33
- this.errorMapper = inject(MngActionErrorMapperService);
34
- this.parametrize = inject(MngParametrizePipe);
35
- this.defaultEditorDialogComponent = inject(ACTION_EDITOR_DIALOG_COMPONENT_SETTING);
36
- this.messageService = inject(MessageService);
37
- this.confirmationService = inject(ConfirmationService);
38
- this.viewContainer = inject(ViewContainer, { optional: true });
39
- this.instancesBufferMax = 100;
40
- this.logger = inject(MngLoggerService).create('MngActionExecutorService');
41
- }
42
- /**
43
- * Prepares action context for usage in validation.
44
- * @param action Action descriptor.
45
- * @param parameters Action parameters.
46
- * @param dataProvider Data provider.
47
- */
48
- prepareActionContextValidation(action, parameters, dataProvider) {
49
- const ctxDataProvider = dataProvider ?? action.dataProvider ?? this.viewContainer?.getDataProvider();
50
- return new ActionContextValidation(action, parameters, this.dataProviderExecutor.getDataProviderService(this.injector, ctxDataProvider) ?? undefined, ctxDataProvider);
51
- }
52
- /**
53
- * Runs action context by submitting execution results/errors to context, watching over instance results/errors, displaying notifications,
54
- * running next/error action and triggering dismiss of action. Confirmation is also processed here.
55
- *
56
- * @param ctx Action context to run.
57
- */
58
- run(ctx) {
59
- const isMainRunFn = ctx.functionName === 'submit' || ctx.functionName === 'run';
60
- // if (ctx.instance.action.type === ActionTypeEnum.Direct && ctx.instance.action.hasRunConfirmation) {
61
- if (isMainRunFn && ctx.instance.action.hasRunConfirmation) {
62
- // only direct action can be configured with run confirmation
63
- // if editor, then run confirmation is mapped to submit action and ignored as editor run
64
- const confirmationDescriptor = ctx.instance.action.runConfirmationDialogDescriptor;
65
- const item = ctx.parameters.item;
66
- let confirmParams = {
67
- icon: confirmationDescriptor.icon,
68
- acceptVisible: true,
69
- acceptIcon: confirmationDescriptor.acceptButton.icon ?? undefined,
70
- acceptButtonStyleClass: confirmationDescriptor.acceptButton.styleClass.build(),
71
- rejectVisible: true,
72
- rejectIcon: confirmationDescriptor.rejectButton?.icon ?? undefined,
73
- rejectButtonStyleClass: confirmationDescriptor.rejectButton?.styleClass.build(),
74
- closeOnEscape: confirmationDescriptor.closeOnEscape
75
- };
76
- if (confirmationDescriptor.title !== null) {
77
- confirmParams.header =
78
- I18nUtils.Action.get(this.translate, ctx.instance.action, 'confirm.title', confirmationDescriptor.title, item, 'general.confirmation') ?? undefined;
79
- }
80
- if (confirmationDescriptor.message !== null) {
81
- confirmParams.message =
82
- I18nUtils.Action.get(this.translate, ctx.instance.action, 'confirm.message', confirmationDescriptor.message, StringUtil.escapeHtmlAny(item), 'general.confirmation') ?? undefined;
83
- }
84
- if (confirmationDescriptor.acceptButton.label !== null) {
85
- confirmParams.acceptLabel =
86
- I18nUtils.Action.get(this.translate, ctx.instance.action, 'confirm.accept', confirmationDescriptor.acceptButton.label, item, 'general.yes') ?? undefined;
87
- }
88
- if (confirmationDescriptor.acceptButton.icon !== null) {
89
- confirmParams.acceptIcon = confirmationDescriptor.acceptButton.icon;
90
- }
91
- if (confirmationDescriptor.rejectButton?.icon !== null) {
92
- confirmParams.rejectIcon = confirmationDescriptor.rejectButton?.icon;
93
- }
94
- if (confirmationDescriptor.rejectButton?.label !== null) {
95
- confirmParams.rejectLabel =
96
- I18nUtils.Action.get(this.translate, ctx.instance.action, 'confirm.reject', confirmationDescriptor.rejectButton?.label, item, 'general.no') ?? undefined;
97
- }
98
- if (confirmationDescriptor.rejectButton == null || (confirmationDescriptor.rejectButton.label === null && confirmationDescriptor.rejectButton.icon === null)) {
99
- confirmParams.rejectVisible = false;
100
- }
101
- confirmParams.accept = () => {
102
- ctx.instance.state = ActionInstanceStateEnum.RunConfirmationEndAccept;
103
- this.runWithoutConfirmation(ctx);
104
- };
105
- confirmParams.reject = () => {
106
- ctx.instance.state = ActionInstanceStateEnum.RunConfirmationEndReject;
107
- if (ctx.instance.action.type !== ActionTypeEnum.Editor) {
108
- // if not editor, the it can be closed
109
- this.finishAction(ctx.instance);
110
- }
111
- };
112
- if (confirmationDescriptor.runConfirmationConfigMapFn) {
113
- confirmParams = confirmationDescriptor.runConfirmationConfigMapFn(ctx, confirmParams);
114
- }
115
- ctx.confirmation = confirmParams;
116
- ctx.instance.state = ActionInstanceStateEnum.RunConfirmationStart;
117
- this.confirmationService.confirm(confirmParams);
118
- }
119
- else {
120
- this.runWithoutConfirmation(ctx);
121
- }
122
- }
123
- /**
124
- * Runs action context by submitting execution results/errors to context, watching over instance results/errors, displaying notifications,
125
- * running next/error action and triggering dismiss of action. Confirmation
126
- *
127
- * @param ctx Action context to run.
128
- *
129
- * @returns Action context for submit (=run) function.
130
- */
131
- runWithoutConfirmation(ctx) {
132
- const isMainRunFn = ctx.functionName === 'submit' || ctx.functionName === 'run';
133
- const isErrorCriticalRunFn = ctx.functionName === 'run';
134
- let actionEditor;
135
- let fnObs;
136
- switch (ctx.functionName) {
137
- case 'submit':
138
- actionEditor = ctx.instance.action;
139
- if (typeof actionEditor.submitFunction !== 'function') {
140
- if (actionEditor instanceof ActionEditorAddDescriptorInst) {
141
- fnObs = this.dataProviderExecutor.runCreateOrFail.bind(this.dataProviderExecutor);
142
- }
143
- else if (actionEditor instanceof ActionEditorEditDescriptorInst) {
144
- fnObs = this.dataProviderExecutor.runUpdateOrFail.bind(this.dataProviderExecutor);
145
- }
146
- else {
147
- // try to guess this one
148
- const defaultSubmit = of(ctx.parameters?.item ? ctx.parameters.item : undefined);
149
- fnObs = ctx => {
150
- if (ctx.parameters.itemId) {
151
- return this.dataProviderExecutor.runUpdate(ctx, defaultSubmit);
152
- }
153
- else {
154
- return this.dataProviderExecutor.runCreate(ctx, defaultSubmit);
155
- }
156
- };
157
- }
158
- }
159
- else {
160
- fnObs = actionEditor.submitFunction;
161
- }
162
- break;
163
- case 'fetch':
164
- actionEditor = ctx.instance.action;
165
- if (typeof actionEditor.fetchFunction !== 'function') {
166
- if (actionEditor instanceof ActionEditorEditDescriptorInst) {
167
- fnObs = this.dataProviderExecutor.runFetchOrFail.bind(this.dataProviderExecutor);
168
- }
169
- else {
170
- const defaultFetch = of(ctx.parameters?.item ? ctx.parameters.item : undefined);
171
- fnObs = ctx => {
172
- if (ctx.parameters.itemId || typeof ctx.parameters.item === 'object') {
173
- return this.dataProviderExecutor.runFetch(ctx, defaultFetch);
174
- }
175
- return defaultFetch;
176
- };
177
- }
178
- }
179
- else {
180
- fnObs = actionEditor.fetchFunction;
181
- }
182
- break;
183
- case 'run':
184
- default:
185
- if (!ctx.instance.action.hasRunFunction && ctx.instance.action instanceof ActionDeleteDescriptorInst) {
186
- fnObs = this.dataProviderExecutor.runDeleteOrFail.bind(this.dataProviderExecutor);
187
- }
188
- else {
189
- fnObs = ctx.instance.action.runFunction;
190
- }
191
- break;
192
- }
193
- const retObs = of(void 0).pipe(take(1), switchMap(() => {
194
- if (isMainRunFn) {
195
- // if main run function, also set loading to true
196
- ctx.instance.state = ActionInstanceStateEnum.RunStart;
197
- ctx.instance.isRunLoadingSubject.next(true);
198
- }
199
- else {
200
- ctx.instance.state = ActionInstanceStateEnum.FetchStart;
201
- }
202
- // start context execution to mark execution loading
203
- ctx.executionStart();
204
- return toObservable(fnObs(ctx));
205
- }), mergeMap(runResult => {
206
- // set next state depending on run
207
- ctx.instance.state = isMainRunFn ? ActionInstanceStateEnum.RunEnd : ActionInstanceStateEnum.FetchEnd;
208
- // set execution result
209
- ctx.executionNext(runResult, isMainRunFn);
210
- if (isMainRunFn) {
211
- // set instance final result on main run execution
212
- ctx.instance.result = runResult;
213
- ctx.instance.isRunLoadingSubject.next(false);
214
- // handle notification
215
- if (ctx.instance.action.hasRunNotificationSuccess) {
216
- ctx.notification = NotificationUtil.actionNotificationSuccess(this.translate, ctx.instance.action, ctx.functionName, this.messageService, ctx.instance.action.runNotificationSuccessTitle, ctx.instance.action.runNotificationSuccessMessage, {
217
- ...ctx.parameters?.item,
218
- ...runResult
219
- });
220
- }
221
- // handle possible after run action
222
- if (ctx.instance.action.afterRunAction) {
223
- // mark new state for next action start
224
- const afterRunAction = typeof ctx.instance.action.afterRunAction === 'function' ? ctx.instance.action.afterRunAction(ctx) : ctx.instance.action.afterRunAction;
225
- const nextActionInstance = this.activateAction(afterRunAction, new ActionParameters(ctx.parameters.itemId, runResult)
226
- .withActionData(ctx.parameters.actionData)
227
- .withRoute(ctx.parameters.route)
228
- .withSourceComponent(ctx.parameters.sourceComponent), undefined, ctx.instance, true);
229
- ctx.instance.nextActionInstance = nextActionInstance;
230
- ctx.instance.state = ActionInstanceStateEnum.NextActionStart;
231
- // finish current action when next action finishes
232
- return nextActionInstance.state$.pipe(startWith(nextActionInstance.state), // provide first state cause it might be finished already
233
- filter(state => state >= ActionInstanceStateEnum.FinishSuccessFinal), take(1), map(() => {
234
- ctx.instance.state = ActionInstanceStateEnum.NextActionEnd;
235
- return runResult;
236
- }));
237
- }
238
- }
239
- else {
240
- if (actionEditor.hasFetchNotificationSuccess) {
241
- NotificationUtil.actionNotificationSuccess(this.translate, actionEditor, 'fetch', this.messageService, actionEditor.fetchNotificationSuccessTitle, actionEditor.fetchNotificationSuccessMessage, ctx.parameters.item);
242
- }
243
- }
244
- return of(runResult);
245
- }), map(runResult => {
246
- if (isMainRunFn) {
247
- // deactivate action
248
- this.finishAction(ctx.instance);
249
- }
250
- return runResult;
251
- }), catchError(err => {
252
- // transform error to mng action error
253
- const actionError = this.toMngActionError(err, ctx);
254
- // set instance state to error
255
- ctx.instance.state = isMainRunFn ? ActionInstanceStateEnum.RunError : ActionInstanceStateEnum.FetchError;
256
- // mark execution error on context
257
- ctx.executionError(actionError);
258
- if (ctx.instance.action.hasRunNotificationError) {
259
- NotificationUtil.actionNotificationError(this.translate, ctx.instance.action, actionError, 'fetch', this.messageService, ctx.parameters.item);
260
- }
261
- let errorObs = of(void 0);
262
- if (isMainRunFn) {
263
- ctx.instance.error = err;
264
- ctx.instance.isRunLoadingSubject.next(false);
265
- // handle possible error action if run
266
- if (isMainRunFn && ctx.instance.action.onRunErrorAction) {
267
- const onRunErrorAction = typeof ctx.instance.action.onRunErrorAction === 'function' ? ctx.instance.action.onRunErrorAction(ctx) : ctx.instance.action.onRunErrorAction;
268
- // cannot start with trigger, because routing might be problematic (lousing previous results etc.)
269
- const errorActionInstance = this.activateAction(onRunErrorAction, new ActionParameters(ctx.parameters.itemId, ctx.parameters.item)
270
- .withActionData(ctx.parameters.actionData)
271
- .withRoute(ctx.parameters.route)
272
- .withSourceComponent(ctx.parameters.sourceComponent), undefined, undefined, true);
273
- ctx.instance.errorActionInstance = errorActionInstance;
274
- ctx.instance.state = ActionInstanceStateEnum.ErrorActionStart;
275
- errorObs = errorActionInstance.state$.pipe(startWith(errorActionInstance.state), // provide first state cause it might be finished already
276
- filter(state => state >= ActionInstanceStateEnum.FinishSuccessFinal), take(1), map(() => {
277
- ctx.instance.state = ActionInstanceStateEnum.ErrorActionEnd;
278
- return void 0;
279
- }));
280
- }
281
- }
282
- // list and map only to mark instance state as finished error state
283
- return errorObs.pipe(map(() => {
284
- // deactivate action only if critical (fetch on editor or run on button actions)
285
- if (isErrorCriticalRunFn) {
286
- this.finishAction(ctx.instance);
287
- }
288
- // rethrow error to propagate further
289
- throw actionError;
290
- }));
291
- }));
292
- ctx.runSubscription = retObs.subscribe({
293
- next: res => {
294
- this.logger.debug(`ActionContext ${ctx.contextLongName} execution next event`, res);
295
- },
296
- error: err => {
297
- if (err?.type !== 'MngActionError') {
298
- this.logger.error(`Non action error occurred`, err);
299
- }
300
- else {
301
- this.logger.debug(`Action context ${ctx.contextLongName} execution error event`, err);
302
- }
303
- }
304
- });
305
- return retObs;
306
- }
307
- /**
308
- * Prepares editor action's fetch function by creating new action context for action instance.
309
- *
310
- * @param action Action descriptor.
311
- * @param parameters Action parameters for context.
312
- * @param dataProvider Editor data provider for context.
313
- * @param instance Optional existing action instance (if non provided, new will be created).
314
- * @param previousActionInstance Optional previous action instance to link in next instance.
315
- *
316
- * @returns Action context for fetch function.
317
- */
318
- prepareContextForEditorFetch(action, parameters, dataProvider, instance, previousActionInstance) {
319
- instance = this.getOrCreateInstance(instance, action, parameters, ActionInstanceStateEnum.ActivationEnd);
320
- return this.prepareContextForEditor(instance, parameters, 'fetch', dataProvider, previousActionInstance);
321
- }
322
- /**
323
- * Runs editor action's submit (=main run) function by creating new action context for action instance.
324
- *
325
- * @param action Action descriptor.
326
- * @param parameters Action parameters for context.
327
- * @param dataProvider Editor data provider for context.
328
- * @param instance Optional existing action instance (if non provided, new will be created).
329
- * @param previousActionInstance Optional previous action instance to link in next instance.
330
- *
331
- * @returns Action context for submit (=run) function.
332
- */
333
- prepareContextForEditorSubmit(action, parameters, dataProvider, instance, previousActionInstance) {
334
- instance = this.getOrCreateInstance(instance, action, parameters, ActionInstanceStateEnum.ActivationEnd);
335
- return this.prepareContextForEditor(instance, parameters, 'submit', dataProvider, previousActionInstance);
336
- }
337
- /**
338
- * Prepares action exec context for action of type editor.
339
- *
340
- * @param instance Action instance.
341
- * @param parameters Action parameters for context.
342
- * @param functionName Action function name parameter.
343
- * @param dataProvider Optional data provider. If not provided data provider from either the action editor or view container will be used.
344
- * @param previousActionInstance Optional previous action instance to link in next instance.
345
- */
346
- prepareContextForEditor(instance, parameters, functionName, dataProvider, previousActionInstance) {
347
- if (instance.action.type !== ActionTypeEnum.Editor) {
348
- throw new MngInternalError(`Cannot create editor context for action ${instance.action.actionNameLong} of type ${instance.action.type}.`);
349
- }
350
- const editorAction = instance.action;
351
- let ctxDataProvider = dataProvider;
352
- if (!ctxDataProvider && editorAction.dataProvider) {
353
- ctxDataProvider = editorAction.dataProvider;
354
- }
355
- if (!ctxDataProvider) {
356
- const viewContainerDataProvider = this.viewContainer?.getDataProvider();
357
- if (viewContainerDataProvider) {
358
- ctxDataProvider = viewContainerDataProvider;
359
- }
360
- }
361
- const ctx = new ActionContext(this.injector, instance, parameters, functionName, this.dataProviderExecutor.getDataProviderService(this.injector, ctxDataProvider) ?? undefined, ctxDataProvider, this.viewContainer ?? undefined);
362
- ctx.previousActionInstance = previousActionInstance;
363
- instance.newContext(ctx);
364
- return ctx;
365
- }
366
- /**
367
- * Runs action's main run function by creating new action context for action instance.
368
- *
369
- * @param action Action descriptor.
370
- * @param parameters Action parameters for context run.
371
- * @param dataProvider Data provider for context run.
372
- * @param instance Optional existing action instance (if non provided, new will be created).
373
- * @param previousActionInstance Optional previous action instance to link in next instance.
374
- *
375
- * @returns Action context for run function.
376
- */
377
- prepareContext(action, parameters, dataProvider, instance, previousActionInstance) {
378
- instance = this.getOrCreateInstance(instance, action, parameters, ActionInstanceStateEnum.ActivationEnd);
379
- const ctxDataProvider = dataProvider ?? instance.action.dataProvider ?? this.viewContainer?.getDataProvider();
380
- const ctx = new ActionContext(this.injector, instance, parameters, 'run', this.dataProviderExecutor.getDataProviderService(this.injector, ctxDataProvider) ?? undefined, ctxDataProvider, this.viewContainer ?? undefined);
381
- ctx.previousActionInstance = previousActionInstance;
382
- instance.newContext(ctx);
383
- return ctx;
384
- }
385
- /**
386
- * Activates action (in case of dialog, dialog will be opened).
387
- *
388
- * @param action Action descriptor.
389
- * @param parameters Action parameters for activation of action instance.
390
- * @param instance Optional existing action instance (if non provided, new will be created).
391
- * @param previousActionInstance Optional previous action instance to link in next instance.
392
- * @param runContext Marks if context should be run.
393
- *
394
- * @returns Action instance - if non provided in parameters, the newly created will be returned.
395
- */
396
- activateAction(action, parameters, instance, previousActionInstance, runContext = false) {
397
- instance = this.getOrCreateInstance(instance, action, parameters, ActionInstanceStateEnum.ActivationStart);
398
- instance.state = ActionInstanceStateEnum.ActivationStart;
399
- instance.activationParameters = parameters;
400
- // start activation instance
401
- if (action.type === ActionTypeEnum.Editor) {
402
- let dialogComponent = this.defaultEditorDialogComponent;
403
- const dialogClassNames = ['mng-dialog'];
404
- if (action instanceof ActionEditorDescriptorInst) {
405
- dialogClassNames.push(action.dialogClassName ?? 'mng-action-editor-dialog');
406
- switch (action.dialogSize) {
407
- case StyleSizeEnum.ExtraSmall:
408
- dialogClassNames.push('mng-dialog-xs');
409
- break;
410
- case StyleSizeEnum.Small:
411
- dialogClassNames.push('mng-dialog-sm');
412
- break;
413
- case StyleSizeEnum.Large:
414
- dialogClassNames.push('mng-dialog-lg');
415
- break;
416
- case StyleSizeEnum.ExtraLarge:
417
- dialogClassNames.push('mng-dialog-xl');
418
- break;
419
- case StyleSizeEnum.Normal:
420
- default:
421
- break;
422
- }
423
- if (action.editorComponent) {
424
- dialogComponent = action.editorComponent;
425
- }
426
- }
427
- const dialogConfig = {
428
- data: {
429
- action: {
430
- descriptor: action,
431
- instance: instance,
432
- previousInstance: previousActionInstance
433
- },
434
- injector: this.injector
435
- },
436
- duplicate: true,
437
- styleClass: dialogClassNames.join(' ')
438
- };
439
- if (action.activationTrigger === ActionActivationTriggerEnum.OnRoute) {
440
- dialogConfig.closable = false;
441
- dialogConfig.closeOnEscape = false;
442
- }
443
- const dialogRef = this.dialogService.open(dialogComponent, dialogConfig);
444
- dialogRef.onClose.pipe(take(1)).subscribe(() => {
445
- // to close dialog on 'X' click or esc button
446
- this.finishAction(instance);
447
- });
448
- instance.activationDialogRef = dialogRef;
449
- return instance;
450
- }
451
- else {
452
- // directly execute action
453
- instance.state = ActionInstanceStateEnum.ActivationEnd;
454
- const context = this.prepareContext(action, parameters, undefined, instance, previousActionInstance);
455
- if (runContext) {
456
- this.run(context);
457
- }
458
- return context.instance;
459
- }
460
- }
461
- /**
462
- * To be called when action editor is initialized to correctly activate action.
463
- * @param action Action descriptor.
464
- * @param instance Action instance (if available).
465
- * @param componentRef Optional action editor component reference.
466
- */
467
- onActionEditorInit(action, instance, componentRef) {
468
- if (action.type !== ActionTypeEnum.Editor) {
469
- throw new Error(`Action ${action.actionName} is not of type editor, cannot be activated through "onActionEditorOnInit"`);
470
- }
471
- if (instance && action.activationTrigger === ActionActivationTriggerEnum.OnRoute) {
472
- const triggeredInstance = this.viewContainer?.getRouteTriggeredActionInstance();
473
- const activationInstance = this.viewContainer?.getRouteTriggeredActionInstance();
474
- if (triggeredInstance && triggeredInstance.instanceLongName !== instance.instanceLongName) {
475
- this.logger.debug(`WARNING: Found triggered parameters view container instance ${triggeredInstance.instanceLongName} and it does not match instance ${instance.instanceLongName} retrieved on editor init.`);
476
- }
477
- if (activationInstance && activationInstance.instanceLongName !== instance.instanceLongName) {
478
- this.logger.debug(`WARNING: Found triggered parameters view container instance ${activationInstance.instanceLongName} and it does not match instance ${instance.instanceLongName} retrieved on editor init.`);
479
- }
480
- }
481
- instance = this.getOrCreateInstance(instance, action, undefined, ActionInstanceStateEnum.ActivationStart);
482
- instance.state = ActionInstanceStateEnum.ActivationEnd;
483
- instance.activationEditorComponentRef = componentRef;
484
- return instance;
485
- }
486
- /**
487
- * To be called when action editor cmp is being destroyed to correctly finish action.
488
- * @param instance Action instance.
489
- */
490
- onActionDestroy(instance) {
491
- if (!instance) {
492
- return;
493
- }
494
- instance = this.getOrCreateInstance(instance);
495
- if (instance.action.activationTrigger !== ActionActivationTriggerEnum.OnClick) {
496
- return;
497
- }
498
- this.finishAction(instance, true);
499
- }
500
- /**
501
- * To be called when action editor cmp is being destroyed to correctly finish action.
502
- * @param instance Action instance.
503
- */
504
- onActionEditorDestroy(instance) {
505
- if (!instance) {
506
- return;
507
- }
508
- instance = this.getOrCreateInstance(instance);
509
- if (instance.action.type !== ActionTypeEnum.Editor) {
510
- throw new Error(`Action instance ${instance.instanceLongName} is not of type editor, cannot be deactivated through "onActionEditorOnDestroy"`);
511
- }
512
- if (instance.action.activationTrigger !== ActionActivationTriggerEnum.OnRoute) {
513
- this.finishAction(instance, true);
514
- }
515
- }
516
- /**
517
- * To be called when action route cmp is being destroyed to correctly finish action.
518
- * @param instance Action instance.
519
- */
520
- onActionRouteDestroy(instance) {
521
- if (!instance) {
522
- return;
523
- }
524
- instance = this.getOrCreateInstance(instance);
525
- if (instance.action.activationTrigger !== ActionActivationTriggerEnum.OnRoute) {
526
- throw new Error(`Action instance ${instance.instanceLongName} is not triggered on route, cannot be deactivated through "onActionRouteOnDestroy"`);
527
- }
528
- this.finishAction(instance, true);
529
- }
530
- /**
531
- * Deactivates action by choosing final state, closing dialog and completing all subjects in instance and contexts.
532
- *
533
- * @param instance Action instance.
534
- * @param onDestroy Marks if finish is called on component destroy lifecycle hook.
535
- */
536
- finishAction(instance, onDestroy = false) {
537
- instance = this.getOrCreateInstance(instance);
538
- if (instance.state >= ActionInstanceStateEnum.FinishSuccessFinal) {
539
- this.logger.trace(`ActionInstance ${instance.instanceLongName} already finished`);
540
- return;
541
- }
542
- let finalState;
543
- if (typeof instance.result !== 'undefined') {
544
- finalState = ActionInstanceStateEnum.FinishSuccessFinal;
545
- }
546
- else if (typeof instance.error !== 'undefined') {
547
- finalState = ActionInstanceStateEnum.FinishErrorFinal;
548
- }
549
- else if (onDestroy) {
550
- finalState = ActionInstanceStateEnum.FinishComponentDestroyFinal;
551
- }
552
- else {
553
- finalState = ActionInstanceStateEnum.FinishDismissedFinal;
554
- }
555
- if (instance.action.type === ActionTypeEnum.Editor) {
556
- const hasDialog = typeof instance.activationDialogRef !== 'undefined';
557
- const resubmitEnabled = instance.action.resubmitEnabled;
558
- if (finalState === ActionInstanceStateEnum.FinishSuccessFinal) {
559
- if ((hasDialog && resubmitEnabled === true) || (!hasDialog && resubmitEnabled !== false)) {
560
- finalState = ActionInstanceStateEnum.FinishSuccessReactivateFinal;
561
- }
562
- }
563
- if (hasDialog && finalState !== ActionInstanceStateEnum.FinishSuccessReactivateFinal) {
564
- // if state is finish and not called from dialog listener, close the dialog first which will retrigger this function, then finish it
565
- instance.activationDialogRef.close(instance.result);
566
- }
567
- }
568
- // unset instance in view container
569
- this.viewContainer?.unsetRouteTriggeredActionInstance();
570
- // set final state on instance
571
- instance.state = finalState;
572
- if (finalState === ActionInstanceStateEnum.FinishSuccessReactivateFinal) {
573
- // prepare reactivation instance
574
- const newInstanceStatus = instance.action.resubmitRefetch
575
- ? ActionInstanceStateEnum.ActivationEnd
576
- : ActionInstanceStateEnum.FetchEnd;
577
- // must skip initialization from view container, because it would only get old instance.
578
- // we need new instance before we can set new one on the view container.
579
- const newInstance = this.getOrCreateInstance(undefined, instance.action, undefined, newInstanceStatus, true);
580
- newInstance.previousInstance = instance;
581
- // copy some additional settings
582
- newInstance.activationDialogRef = instance.activationDialogRef;
583
- newInstance.triggerParameters = instance.triggerParameters;
584
- newInstance.activationParameters = instance.activationParameters;
585
- this.viewContainer?.setRouteTriggeredActionInstance(newInstance);
586
- instance.reactivationInstance = newInstance;
587
- }
588
- // finish related actions
589
- if (instance.nextActionInstance) {
590
- this.logger.debug(`Finishing instance ${instance.instanceLongName} related next action instance: ${instance.nextActionInstance.instanceLongName}`);
591
- this.finishAction(instance.nextActionInstance, onDestroy);
592
- }
593
- if (instance.errorActionInstance) {
594
- this.logger.debug(`Finishing instance ${instance.instanceLongName} related error action instance: ${instance.errorActionInstance.instanceLongName}`);
595
- this.finishAction(instance.errorActionInstance, onDestroy);
596
- }
597
- }
598
- /**
599
- * Triggers action with parameters.
600
- *
601
- * @param action Action descriptor.
602
- * @param parameters Action parameters for action execution to construct new route.
603
- * @param runContext Marks if context should be run.
604
- *
605
- * @returns Action instance - if non provided in parameters, the newly created will be returned.
606
- */
607
- triggerAction(action, parameters, runContext = false) {
608
- const instance = this.getOrCreateInstance(undefined, action, parameters);
609
- instance.triggerParameters = parameters;
610
- instance.state = ActionInstanceStateEnum.TriggerStart;
611
- if (action.activationTrigger === ActionActivationTriggerEnum.OnRoute) {
612
- const baseUrl = this.router.url.split('?')[0];
613
- const parsedUrl = this.router.parseUrl(this.router.url);
614
- let actionUrl = action.routeUrl ?? '';
615
- if (actionUrl.startsWith('/')) {
616
- actionUrl = actionUrl.substring(1);
617
- }
618
- const actionUrlSegments = this.parametrize.transform(actionUrl, parameters.itemId, parameters.item, parameters.actionData).split('/');
619
- // set instance in view container
620
- this.viewContainer?.setRouteTriggeredActionInstance(instance);
621
- from(this.router.navigate([baseUrl, ...actionUrlSegments], { relativeTo: parameters.route, queryParams: parsedUrl.queryParams }))
622
- .pipe(take(1))
623
- .subscribe(() => (instance.state = ActionInstanceStateEnum.TriggerEnd));
624
- return instance;
625
- }
626
- else {
627
- instance.state = ActionInstanceStateEnum.TriggerEnd;
628
- this.activateAction(action, parameters, instance);
629
- if (runContext) {
630
- const context = instance.context;
631
- if (context) {
632
- this.run(context);
633
- }
634
- }
635
- return instance;
636
- }
637
- }
638
- /**
639
- * Deactivates on route triggered action by trying to reroute back to location where action was triggered.
640
- * @param instance Action instance.
641
- */
642
- finishActionRouteUntrigger(instance) {
643
- if (instance.action.activationTrigger !== ActionActivationTriggerEnum.OnRoute) {
644
- return;
645
- }
646
- instance = this.getOrCreateInstance(instance);
647
- instance.state = ActionInstanceStateEnum.FinishRouteUntriggerStart;
648
- let url = this.navigationService.getCurrentLocationFromHistory() ?? this.navigationService.getCurrentLocationFromUrl();
649
- if (!url) {
650
- this.navigationService.back();
651
- }
652
- else {
653
- if (url.startsWith('/')) {
654
- url = url.substring(1);
655
- }
656
- const splitUrlQueryParam = url.split('?');
657
- const urlPathSegments = splitUrlQueryParam[0].split('#')[0].split('/');
658
- const queryParam = splitUrlQueryParam[1]?.split('#')[0];
659
- let actionUrl = instance.action?.routeUrl ?? '';
660
- if (actionUrl.startsWith('/')) {
661
- actionUrl = actionUrl.substring(1);
662
- }
663
- const actionUrlSegments = actionUrl.split('/');
664
- let redirectUrl = '/' + urlPathSegments.slice(0, urlPathSegments.length - actionUrlSegments.length).join('/');
665
- if (typeof queryParam !== 'undefined') {
666
- redirectUrl = `${redirectUrl}?${queryParam}`;
667
- }
668
- // No URL replaces, probably ok, to allow going back
669
- from(this.router.navigateByUrl(redirectUrl))
670
- .pipe(first(), timeout(1000))
671
- .subscribe({
672
- next: () => (instance.state = ActionInstanceStateEnum.FinishRouteUntriggerEndFinal),
673
- error: () => (instance.state = ActionInstanceStateEnum.FinishRouteUntriggerTimeoutFinal)
674
- });
675
- }
676
- }
677
- /**
678
- * Transform error of any type to mng error by using error mapper that could be provided by final project.
679
- * @param error error of any type.
680
- * @param context Action context.
681
- *
682
- * @returns mapped MngError.
683
- */
684
- toMngActionError(error, context) {
685
- let mngError;
686
- if (context) {
687
- const options = {
688
- cause: error,
689
- location: this.router.url
690
- };
691
- if (error instanceof HttpErrorResponse) {
692
- options.httpError = error;
693
- }
694
- mngError = new MngActionError(error?.message ?? 'Unknown error', context.contextLongName);
695
- }
696
- else if (error instanceof HttpErrorResponse) {
697
- // should not really happen (should always be wrapped in MngActionError), just in case
698
- mngError = new MngHttpError(`Http Error occurred in action`, error, {
699
- location: this.router.url
700
- });
701
- }
702
- else {
703
- // not from action, so unknown source of error
704
- mngError = new MngInternalError(error?.message ?? 'Unknown error', {
705
- name: error?.name ?? 'UnknownError',
706
- location: this.router.url,
707
- cause: error
708
- });
709
- }
710
- // just trace it, allow user to set if this is error or not
711
- this.logger.trace(mngError);
712
- return this.errorMapper.toMngError(error, mngError);
713
- }
714
- /**
715
- * Creates or gets existing action instance.
716
- * @param instance Action instance.
717
- * @param action Action descriptor.
718
- * @param parameters Action parameters.
719
- * @param instanceInitialStatus Action instance initial status.
720
- * @param skipInitializationFromViewContainer If initialization of instance from view container should be skipped.
721
- * @private
722
- */
723
- getOrCreateInstance(instance, action, parameters, instanceInitialStatus, skipInitializationFromViewContainer = false) {
724
- if (!skipInitializationFromViewContainer && !instance && action?.activationTrigger === ActionActivationTriggerEnum.OnRoute && parameters) {
725
- instance = this.viewContainer?.getRouteTriggeredActionInstance();
726
- }
727
- if (!instance) {
728
- if (!action) {
729
- throw new MngInternalError('Action descriptor is not provided, instance cannot be created.', { name: 'ActionExecutorServiceError' });
730
- }
731
- // create new instance if non provided
732
- instance = new ActionInstance(action, instanceInitialStatus);
733
- }
734
- if (this.mngCommons.actionsDebugInstances && !this.instances.some(i => i.instanceLongName === instance.instanceLongName)) {
735
- if (this.instances.length >= this.instancesBufferMax) {
736
- const lastInstance = this.instances.shift();
737
- if (lastInstance.state < ActionInstanceStateEnum.FinishSuccessFinal) {
738
- this.logger.debug(`ERROR: Not all instances are finished! Finishing instance ${instance.instanceLongName} with dismissal.`);
739
- lastInstance.forceFinish();
740
- }
741
- }
742
- this.instances.push(instance);
743
- }
744
- return instance;
745
- }
746
- }
747
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsTUFBTSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFlLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBYSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBQyxhQUFhLEVBQUUsdUJBQXVCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFFakosT0FBTyxFQUVILDBCQUEwQixFQUUxQiw2QkFBNkIsRUFDN0IsMEJBQTBCLEVBQzFCLDhCQUE4QixFQUNqQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBQywyQkFBMkIsRUFBRSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUE0RCxjQUFjLEVBQXlCLFlBQVksRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM5SixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRWxELE9BQU8sRUFBQyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ3BFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBQyxzQ0FBc0MsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNqRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRXRDLE1BQU0sT0FBZ0Isd0JBQXdCO0lBQTlDO1FBQ3VCLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDNUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckMsZUFBVSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3ZDLHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3BELHNCQUFpQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2pELGdCQUFXLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDbEQsZ0JBQVcsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN6QyxpQ0FBNEIsR0FBRyxNQUFNLENBQUMsc0NBQXNDLENBQUMsQ0FBQztRQUM5RSxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4Qyx3QkFBbUIsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNsRCxrQkFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUV4RCx1QkFBa0IsR0FBRyxHQUFHLENBQUM7UUFDbEMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBMDNCbkYsQ0FBQztJQXQzQkc7Ozs7O09BS0c7SUFDSSw4QkFBOEIsQ0FDakMsTUFBa0MsRUFDbEMsVUFBa0MsRUFDbEMsWUFBMkM7UUFFM0MsTUFBTSxlQUFlLEdBQUcsWUFBWSxJQUFJLE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUNyRyxPQUFPLElBQUksdUJBQXVCLENBQzlCLE1BQU0sRUFDTixVQUFVLEVBQ1YsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLElBQUksU0FBUyxFQUM3RixlQUFlLENBQ2xCLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxHQUFHLENBQTRCLEdBQWlDO1FBQ25FLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxZQUFZLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDO1FBRWhGLHNHQUFzRztRQUN0RyxJQUFJLFdBQVcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtZQUN2RCw2REFBNkQ7WUFDN0Qsd0ZBQXdGO1lBQ3hGLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsK0JBQXFFLENBQUM7WUFFekgsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDakMsSUFBSSxhQUFhLEdBQWlCO2dCQUM5QixJQUFJLEVBQUUsc0JBQXNCLENBQUMsSUFBSTtnQkFDakMsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLFNBQVM7Z0JBQ2pFLHNCQUFzQixFQUFFLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO2dCQUM5RSxhQUFhLEVBQUUsSUFBSTtnQkFDbkIsVUFBVSxFQUFFLHNCQUFzQixDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksU0FBUztnQkFDbEUsc0JBQXNCLEVBQUUsc0JBQXNCLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUU7Z0JBQy9FLGFBQWEsRUFBRSxzQkFBc0IsQ0FBQyxhQUFhO2FBQ3RELENBQUM7WUFFRixJQUFJLHNCQUFzQixDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZDLGFBQWEsQ0FBQyxNQUFNO29CQUNoQixTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixDQUFDLElBQUksU0FBUyxDQUFDO2FBQzNKO1lBRUQsSUFBSSxzQkFBc0IsQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO2dCQUN6QyxhQUFhLENBQUMsT0FBTztvQkFDakIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ2hCLElBQUksQ0FBQyxTQUFTLEVBQ2QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQ25CLGlCQUFpQixFQUNqQixzQkFBc0IsQ0FBQyxPQUFPLEVBQzlCLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQzlCLHNCQUFzQixDQUN6QixJQUFJLFNBQVMsQ0FBQzthQUN0QjtZQUVELElBQUksc0JBQXNCLENBQUMsWUFBWSxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQ3BELGFBQWEsQ0FBQyxXQUFXO29CQUNyQixTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxJQUFJLFNBQVMsQ0FBQzthQUNoSztZQUVELElBQUksc0JBQXNCLENBQUMsWUFBWSxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ25ELGFBQWEsQ0FBQyxVQUFVLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzthQUN2RTtZQUVELElBQUksc0JBQXNCLENBQUMsWUFBWSxFQUFFLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ3BELGFBQWEsQ0FBQyxVQUFVLEdBQUcsc0JBQXNCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQzthQUN4RTtZQUVELElBQUksc0JBQXNCLENBQUMsWUFBWSxFQUFFLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQ3JELGFBQWEsQ0FBQyxXQUFXO29CQUNyQixTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLFNBQVMsQ0FBQzthQUNoSztZQUVELElBQUksc0JBQXNCLENBQUMsWUFBWSxJQUFJLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxLQUFLLEtBQUssSUFBSSxJQUFJLHNCQUFzQixDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUU7Z0JBQzFKLGFBQWEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO2FBQ3ZDO1lBRUQsYUFBYSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7Z0JBQ3hCLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLHVCQUF1QixDQUFDLHdCQUF3QixDQUFDO2dCQUN0RSxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsQ0FBQyxDQUFDO1lBRUYsYUFBYSxDQUFDLE1BQU0sR0FBRyxHQUFHLEVBQUU7Z0JBQ3hCLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLHVCQUF1QixDQUFDLHdCQUF3QixDQUFDO2dCQUN0RSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFO29CQUNwRCxzQ0FBc0M7b0JBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUNuQztZQUNMLENBQUMsQ0FBQztZQUVGLElBQUksc0JBQXNCLENBQUMsMEJBQTBCLEVBQUU7Z0JBQ25ELGFBQWEsR0FBRyxzQkFBc0IsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7YUFDekY7WUFFRCxHQUFHLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQztZQUNqQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQztZQUVsRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ25EO2FBQU07WUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNLLHNCQUFzQixDQUE0QixHQUFpQztRQUN2RixNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsWUFBWSxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQztRQUNoRixNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxZQUFZLEtBQUssS0FBSyxDQUFDO1FBQ3hELElBQUksWUFBOEMsQ0FBQztRQUVuRCxJQUFJLEtBQXFDLENBQUM7UUFDMUMsUUFBUSxHQUFHLENBQUMsWUFBWSxFQUFFO1lBQ3RCLEtBQUssUUFBUTtnQkFDVCxZQUFZLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUEwQyxDQUFDO2dCQUN2RSxJQUFJLE9BQU8sWUFBWSxDQUFDLGNBQWMsS0FBSyxVQUFVLEVBQUU7b0JBQ25ELElBQUksWUFBWSxZQUFZLDZCQUE2QixFQUFFO3dCQUN2RCxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQ3JGO3lCQUFNLElBQUksWUFBWSxZQUFZLDhCQUE4QixFQUFFO3dCQUMvRCxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7cUJBQ3JGO3lCQUFNO3dCQUNILHdCQUF3Qjt3QkFDeEIsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7d0JBQ2pGLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRTs0QkFDVixJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO2dDQUN2QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDOzZCQUNsRTtpQ0FBTTtnQ0FDSCxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDOzZCQUNsRTt3QkFDTCxDQUFDLENBQUM7cUJBQ0w7aUJBQ0o7cUJBQU07b0JBQ0gsS0FBSyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUM7aUJBQ3ZDO2dCQUNELE1BQU07WUFDVixLQUFLLE9BQU87Z0JBQ1IsWUFBWSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBMEMsQ0FBQztnQkFDdkUsSUFBSSxPQUFPLFlBQVksQ0FBQyxhQUFhLEtBQUssVUFBVSxFQUFFO29CQUNsRCxJQUFJLFlBQVksWUFBWSw4QkFBOEIsRUFBRTt3QkFDeEQsS0FBSyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO3FCQUNwRjt5QkFBTTt3QkFDSCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDaEYsS0FBSyxHQUFHLEdBQUcsQ0FBQyxFQUFFOzRCQUNWLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0NBQ2xFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7NkJBQ2hFOzRCQUNELE9BQU8sWUFBWSxDQUFDO3dCQUN4QixDQUFDLENBQUM7cUJBQ0w7aUJBQ0o7cUJBQU07b0JBQ0gsS0FBSyxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUM7aUJBQ3RDO2dCQUNELE1BQU07WUFDVixLQUFLLEtBQUssQ0FBQztZQUNYO2dCQUNJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLFlBQVksMEJBQTBCLEVBQUU7b0JBQ2xHLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztpQkFDckY7cUJBQU07b0JBQ0gsS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztpQkFDM0M7Z0JBQ0QsTUFBTTtTQUNiO1FBRUQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNYLElBQUksV0FBVyxFQUFFO2dCQUNiLGlEQUFpRDtnQkFDakQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxDQUFDO2dCQUN0RCxHQUFHLENBQUMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUMvQztpQkFBTTtnQkFDSCxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7YUFDM0Q7WUFDRCxvREFBb0Q7WUFDcEQsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRXJCLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNqQixrQ0FBa0M7WUFDbEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQztZQUNyRyx1QkFBdUI7WUFDdkIsR0FBRyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFMUMsSUFBSSxXQUFXLEVBQUU7Z0JBQ2Isa0RBQWtEO2dCQUNsRCxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7Z0JBQ2hDLEdBQUcsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUU3QyxzQkFBc0I7Z0JBQ3RCLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMseUJBQXlCLEVBQUU7b0JBQy9DLEdBQUcsQ0FBQyxZQUFZLEdBQUcsZ0JBQWdCLENBQUMseUJBQXlCLENBQ3pELElBQUksQ0FBQyxTQUFTLEVBQ2QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQ25CLEdBQUcsQ0FBQyxZQUFZLEVBQ2hCLElBQUksQ0FBQyxjQUFjLEVBQ25CLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLDJCQUEyQixFQUMvQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyw2QkFBNkIsRUFDakQ7d0JBQ0ksR0FBRyxHQUFHLENBQUMsVUFBVSxFQUFFLElBQUk7d0JBQ3ZCLEdBQUcsU0FBUztxQkFDZixDQUNKLENBQUM7aUJBQ0w7Z0JBRUQsbUNBQW1DO2dCQUNuQyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRTtvQkFDcEMsdUNBQXVDO29CQUN2QyxNQUFNLGNBQWMsR0FDaEIsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztvQkFDNUksTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUMxQyxjQUFjLEVBQ2QsSUFBSSxnQkFBZ0IsQ0FBVSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7eUJBQzFELGNBQWMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQzt5QkFDekMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO3lCQUMvQixtQkFBbUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUN4RCxTQUFTLEVBQ1QsR0FBRyxDQUFDLFFBQTRDLEVBQ2hELElBQUksQ0FDUCxDQUFDO29CQUNGLEdBQUcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7b0JBRXJELEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLHVCQUF1QixDQUFDLGVBQWUsQ0FBQztvQkFFN0Qsa0RBQWtEO29CQUNsRCxPQUFPLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2pDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSx5REFBeUQ7b0JBQzlGLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxFQUNwRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRTt3QkFDTCxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxhQUFhLENBQUM7d0JBQzNELE9BQU8sU0FBUyxDQUFDO29CQUNyQixDQUFDLENBQUMsQ0FDTCxDQUFDO2lCQUNMO2FBQ0o7aUJBQU07Z0JBQ0gsSUFBSSxZQUFZLENBQUMsMkJBQTJCLEVBQUU7b0JBQzFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUN0QyxJQUFJLENBQUMsU0FBUyxFQUNkLFlBQVksRUFDWixPQUFPLEVBQ1AsSUFBSSxDQUFDLGNBQWMsRUFDbkIsWUFBWSxDQUFDLDZCQUE2QixFQUMxQyxZQUFZLENBQUMsK0JBQStCLEVBQzVDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUN0QixDQUFDO2lCQUNMO2FBQ0o7WUFFRCxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDWixJQUFJLFdBQVcsRUFBRTtnQkFDYixvQkFBb0I7Z0JBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ25DO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2Isc0NBQXNDO1lBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFFcEQsOEJBQThCO1lBQzlCLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUM7WUFDekcsa0NBQWtDO1lBQ2xDLEdBQUcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFaEMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsRUFBRTtnQkFDN0MsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqSjtZQUVELElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksV0FBVyxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQztnQkFDekIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRTdDLHNDQUFzQztnQkFDdEMsSUFBSSxXQUFXLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ3JELE1BQU0sZ0JBQWdCLEdBQ2xCLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2xKLGtHQUFrRztvQkFDbEcsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUMzQyxnQkFBZ0IsRUFDaEIsSUFBSSxnQkFBZ0IsQ0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQzt5QkFDakUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO3lCQUN6QyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7eUJBQy9CLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQ3hELFNBQVMsRUFDVCxTQUFTLEVBQ1QsSUFBSSxDQUNQLENBQUM7b0JBQ0YsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztvQkFFdkQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLENBQUMsZ0JBQWdCLENBQUM7b0JBRTlELFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUN0QyxTQUFTLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUseURBQXlEO29CQUMvRixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksdUJBQXVCLENBQUMsa0JBQWtCLENBQUMsRUFDcEUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLEdBQUcsQ0FBQyxHQUFHLEVBQUU7d0JBQ0wsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLENBQUMsY0FBYyxDQUFDO3dCQUM1RCxPQUFPLEtBQUssQ0FBQyxDQUFDO29CQUNsQixDQUFDLENBQUMsQ0FDTCxDQUFDO2lCQUNMO2FBQ0o7WUFFRCxtRUFBbUU7WUFDbkUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUNoQixHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNMLGdGQUFnRjtnQkFDaEYsSUFBSSxvQkFBb0IsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ25DO2dCQUNELHFDQUFxQztnQkFDckMsTUFBTSxXQUFXLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFFRixHQUFHLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDbkMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixHQUFHLENBQUMsZUFBZSx1QkFBdUIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN4RixDQUFDO1lBQ0QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUNULElBQUssR0FBNkIsRUFBRSxJQUFJLEtBQUssZ0JBQWdCLEVBQUU7b0JBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUN2RDtxQkFBTTtvQkFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLGVBQWUsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQ3pGO1lBQ0wsQ0FBQztTQUNKLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksNEJBQTRCLENBQy9CLE1BQXdDLEVBQ3hDLFVBQWtDLEVBQ2xDLFlBQTJDLEVBQzNDLFFBQXdDLEVBQ3hDLHNCQUF5RDtRQUV6RCxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pHLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksNkJBQTZCLENBQ2hDLE1BQXdDLEVBQ3hDLFVBQWtDLEVBQ2xDLFlBQTJDLEVBQzNDLFFBQXdDLEVBQ3hDLHNCQUF5RDtRQUV6RCxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pHLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQzlHLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLHVCQUF1QixDQUMzQixRQUF1QyxFQUN2QyxVQUFrQyxFQUNsQyxZQUFnQyxFQUNoQyxZQUE0QixFQUM1QixzQkFBaUQ7UUFFakQsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQ2hELE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQywyQ0FBMkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLFlBQVksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQzVJO1FBQ0QsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQTBDLENBQUM7UUFDekUsSUFBSSxlQUFlLEdBQUcsWUFBWSxDQUFDO1FBQ25DLElBQUksQ0FBQyxlQUFlLElBQUksWUFBWSxDQUFDLFlBQVksRUFBRTtZQUMvQyxlQUFlLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQztTQUMvQztRQUNELElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDbEIsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxDQUFDO1lBQ3hFLElBQUkseUJBQXlCLEVBQUU7Z0JBQzNCLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQzthQUMvQztTQUNKO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxhQUFhLENBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQ2IsUUFBUSxFQUNSLFVBQVUsRUFDVixZQUFZLEVBQ1osSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLElBQUksU0FBUyxFQUM3RixlQUFlLEVBQ2YsSUFBSSxDQUFDLGFBQWEsSUFBSSxTQUFTLENBQ2xDLENBQUM7UUFDRixHQUFHLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7UUFDcEQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ssY0FBYyxDQUNsQixNQUEyQyxFQUMzQyxVQUFrQyxFQUNsQyxZQUEyQyxFQUMzQyxRQUF3QyxFQUN4QyxzQkFBaUQ7UUFFakQsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBZ0IsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsdUJBQXVCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFeEgsTUFBTSxlQUFlLEdBQUcsWUFBWSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsZUFBZSxFQUFFLENBQUM7UUFDOUcsTUFBTSxHQUFHLEdBQUcsSUFBSSxhQUFhLENBQ3pCLElBQUksQ0FBQyxRQUFRLEVBQ2IsUUFBUSxFQUNSLFVBQVUsRUFDVixLQUFLLEVBQ0wsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLElBQUksU0FBUyxFQUM3RixlQUFlLEVBQ2YsSUFBSSxDQUFDLGFBQWEsSUFBSSxTQUFTLENBQ2xDLENBQUM7UUFDRixHQUFHLENBQUMsc0JBQXNCLEdBQUcsc0JBQXNCLENBQUM7UUFDcEQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV6QixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksY0FBYyxDQUNqQixNQUFrQyxFQUNsQyxVQUFrQyxFQUNsQyxRQUF3QyxFQUN4QyxzQkFBaUQsRUFDakQsVUFBVSxHQUFHLEtBQUs7UUFFbEIsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBZ0IsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDMUgsUUFBUSxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxlQUFlLENBQUM7UUFDekQsUUFBUSxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQztRQUMzQyw0QkFBNEI7UUFDNUIsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDdkMsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUFDO1lBQ3hELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4QyxJQUFJLE1BQU0sWUFBWSwwQkFBMEIsRUFBRTtnQkFDOUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksMEJBQTBCLENBQUMsQ0FBQztnQkFDNUUsUUFBUSxNQUFNLENBQUMsVUFBVSxFQUFFO29CQUN2QixLQUFLLGFBQWEsQ0FBQyxVQUFVO3dCQUN6QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7d0JBQ3ZDLE1BQU07b0JBQ1YsS0FBSyxhQUFhLENBQUMsS0FBSzt3QkFDcEIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO3dCQUN2QyxNQUFNO29CQUNWLEtBQUssYUFBYSxDQUFDLEtBQUs7d0JBQ3BCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDdkMsTUFBTTtvQkFDVixLQUFLLGFBQWEsQ0FBQyxVQUFVO3dCQUN6QixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7d0JBQ3ZDLE1BQU07b0JBQ1YsS0FBSyxhQUFhLENBQUMsTUFBTSxDQUFDO29CQUMxQjt3QkFDSSxNQUFNO2lCQUNiO2dCQUNELElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRTtvQkFDeEIsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7aUJBQzVDO2FBQ0o7WUFDRCxNQUFNLFlBQVksR0FBd0I7Z0JBQ3RDLElBQUksRUFBeUM7b0JBQ3pDLE1BQU0sRUFBRTt3QkFDSixVQUFVLEVBQUUsTUFBTTt3QkFDbEIsUUFBUSxFQUFFLFFBQVE7d0JBQ2xCLGdCQUFnQixFQUFFLHNCQUFzQjtxQkFDM0M7b0JBQ0QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2lCQUMxQjtnQkFDRCxTQUFTLEVBQUUsSUFBSTtnQkFDZixVQUFVLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUN6QyxDQUFDO1lBRUYsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEtBQUssMkJBQTJCLENBQUMsT0FBTyxFQUFFO2dCQUNsRSxZQUFZLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDOUIsWUFBWSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7YUFDdEM7WUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDekUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDM0MsNkNBQTZDO2dCQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVMsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsUUFBUSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztZQUN6QyxPQUFPLFFBQVEsQ0FBQztTQUNuQjthQUFNO1lBQ0gsMEJBQTBCO1lBQzFCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLENBQUMsYUFBYSxDQUFDO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQWdCLE1BQU0sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1lBRXBILElBQUksVUFBVSxFQUFFO2dCQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDckI7WUFFRCxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxrQkFBa0IsQ0FBTyxNQUErQixFQUFFLFFBQStCLEVBQUUsWUFBcUM7UUFDbkksSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLE1BQU0sQ0FBQyxVQUFVLDRFQUE0RSxDQUFDLENBQUM7U0FDNUg7UUFDRCxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEtBQUssMkJBQTJCLENBQUMsT0FBTyxFQUFFO1lBQzlFLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSwrQkFBK0IsRUFBRSxDQUFDO1lBQ2hGLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSwrQkFBK0IsRUFBRSxDQUFDO1lBQ2pGLElBQUksaUJBQWlCLElBQUksaUJBQWlCLENBQUMsZ0JBQWdCLEtBQUssUUFBUSxDQUFDLGdCQUFnQixFQUFFO2dCQUN2RixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FDYiwrREFBK0QsaUJBQWlCLENBQUMsZ0JBQWdCLG1DQUFtQyxRQUFRLENBQUMsZ0JBQWdCLDRCQUE0QixDQUM1TCxDQUFDO2FBQ0w7WUFDRCxJQUFJLGtCQUFrQixJQUFJLGtCQUFrQixDQUFDLGdCQUFnQixLQUFLLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDekYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQ2IsK0RBQStELGtCQUFrQixDQUFDLGdCQUFnQixtQ0FBbUMsUUFBUSxDQUFDLGdCQUFnQiw0QkFBNEIsQ0FDN0wsQ0FBQzthQUNMO1NBQ0o7UUFDRCxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzFHLFFBQVEsQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLENBQUMsYUFBYSxDQUFDO1FBQ3ZELFFBQVEsQ0FBQyw0QkFBNEIsR0FBRyxZQUFZLENBQUM7UUFFckQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBTyxRQUErQjtRQUN4RCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTztTQUNWO1FBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEtBQUssMkJBQTJCLENBQUMsT0FBTyxFQUFFO1lBQzNFLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7O09BR0c7SUFDSSxxQkFBcUIsQ0FBTyxRQUErQjtRQUM5RCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTztTQUNWO1FBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsUUFBUSxDQUFDLGdCQUFnQixpRkFBaUYsQ0FBQyxDQUFDO1NBQ2xKO1FBQ0QsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixLQUFLLDJCQUEyQixDQUFDLE9BQU8sRUFBRTtZQUMzRSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSSxvQkFBb0IsQ0FBTyxRQUErQjtRQUM3RCxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTztTQUNWO1FBQ0QsUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEtBQUssMkJBQTJCLENBQUMsT0FBTyxFQUFFO1lBQzNFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLFFBQVEsQ0FBQyxnQkFBZ0Isb0ZBQW9GLENBQUMsQ0FBQztTQUNySjtRQUNELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBNEIsUUFBdUMsRUFBRSxTQUFTLEdBQUcsS0FBSztRQUNyRyxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksUUFBUSxDQUFDLEtBQUssSUFBSSx1QkFBdUIsQ0FBQyxrQkFBa0IsRUFBRTtZQUM5RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsUUFBUSxDQUFDLGdCQUFnQixtQkFBbUIsQ0FBQyxDQUFDO1lBQ2xGLE9BQU87U0FDVjtRQUVELElBQUksVUFBbUMsQ0FBQztRQUN4QyxJQUFJLE9BQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7WUFDeEMsVUFBVSxHQUFHLHVCQUF1QixDQUFDLGtCQUFrQixDQUFDO1NBQzNEO2FBQU0sSUFBSSxPQUFPLFFBQVEsQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQzlDLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQztTQUN6RDthQUFNLElBQUksU0FBUyxFQUFFO1lBQ2xCLFVBQVUsR0FBRyx1QkFBdUIsQ0FBQywyQkFBMkIsQ0FBQztTQUNwRTthQUFNO1lBQ0gsVUFBVSxHQUFHLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO1NBQzdEO1FBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFO1lBQ2hELE1BQU0sU0FBUyxHQUFHLE9BQU8sUUFBUSxDQUFDLG1CQUFtQixLQUFLLFdBQVcsQ0FBQztZQUN0RSxNQUFNLGVBQWUsR0FBSSxRQUFRLENBQUMsTUFBMkMsQ0FBQyxlQUFlLENBQUM7WUFFOUYsSUFBSSxVQUFVLEtBQUssdUJBQXVCLENBQUMsa0JBQWtCLEVBQUU7Z0JBQzNELElBQUksQ0FBQyxTQUFTLElBQUksZUFBZSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksZUFBZSxLQUFLLEtBQUssQ0FBQyxFQUFFO29CQUN0RixVQUFVLEdBQUcsdUJBQXVCLENBQUMsNEJBQTRCLENBQUM7aUJBQ3JFO2FBQ0o7WUFFRCxJQUFJLFNBQVMsSUFBSSxVQUFVLEtBQUssdUJBQXVCLENBQUMsNEJBQTRCLEVBQUU7Z0JBQ2xGLG9JQUFvSTtnQkFDcEksUUFBUSxDQUFDLG1CQUFvQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDeEQ7U0FDSjtRQUVELG1DQUFtQztRQUNuQyxJQUFJLENBQUMsYUFBYSxFQUFFLGlDQUFpQyxFQUFFLENBQUM7UUFFeEQsOEJBQThCO1FBQzlCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDO1FBRTVCLElBQUksVUFBVSxLQUFLLHVCQUF1QixDQUFDLDRCQUE0QixFQUFFO1lBQ3JFLGdDQUFnQztZQUNoQyxNQUFNLGlCQUFpQixHQUFJLFFBQVEsQ0FBQyxNQUEyQyxDQUFDLGVBQWU7Z0JBQzNGLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhO2dCQUN2QyxDQUFDLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDO1lBQ3ZDLHdGQUF3RjtZQUN4Rix3RUFBd0U7WUFDeEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFnQixTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUgsV0FBVyxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztZQUN4QyxnQ0FBZ0M7WUFDaEMsV0FBVyxDQUFDLG1CQUFtQixHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztZQUMvRCxXQUFXLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1lBQzNELFdBQVcsQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLENBQUMsb0JBQW9CLENBQUM7WUFFakUsSUFBSSxDQUFDLGFBQWEsRUFBRSwrQkFBK0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqRSxRQUFRLENBQUMsb0JBQW9CLEdBQUcsV0FBVyxDQUFDO1NBQy9DO1FBRUQseUJBQXlCO1FBQ3pCLElBQUksUUFBUSxDQUFDLGtCQUFrQixFQUFFO1lBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixRQUFRLENBQUMsZ0JBQWdCLGtDQUFrQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1lBQ25KLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGtCQUFrQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQzdEO1FBQ0QsSUFBSSxRQUFRLENBQUMsbUJBQW1CLEVBQUU7WUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLFFBQVEsQ0FBQyxnQkFBZ0IsbUNBQW1DLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7WUFDckosSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDOUQ7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSSxhQUFhLENBQTRCLE1BQWtDLEVBQUUsVUFBa0MsRUFBRSxVQUFVLEdBQUcsS0FBSztRQUN0SSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQWdCLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEYsUUFBUSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQztRQUN4QyxRQUFRLENBQUMsS0FBSyxHQUFHLHVCQUF1QixDQUFDLFlBQVksQ0FBQztRQUN0RCxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSywyQkFBMkIsQ0FBQyxPQUFPLEVBQUU7WUFDbEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sU0FBUyxHQUFZLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakUsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDdEMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQixTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QztZQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRXRJLGlDQUFpQztZQUNqQyxJQUFJLENBQUMsYUFBYSxFQUFFLCtCQUErQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTlELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLGlCQUFpQixDQUFDLEVBQUUsRUFBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUM7aUJBQzFILElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ2IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBRTVFLE9BQU8sUUFBUSxDQUFDO1NBQ25CO2FBQU07WUFDSCxRQUFRLENBQUMsS0FBSyxHQUFHLHVCQUF1QixDQUFDLFVBQVUsQ0FBQztZQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFFbEQsSUFBSSxVQUFVLEVBQUU7Z0JBQ1osTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFDakMsSUFBSSxPQUFPLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDckI7YUFDSjtZQUVELE9BQU8sUUFBUSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNJLDBCQUEwQixDQUE0QixRQUF1QztRQUNoRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEtBQUssMkJBQTJCLENBQUMsT0FBTyxFQUFFO1lBQzNFLE9BQU87U0FDVjtRQUVELFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQWdCLFFBQVEsQ0FBQyxDQUFDO1FBRTdELFFBQVEsQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLENBQUMseUJBQXlCLENBQUM7UUFFbkUsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLDZCQUE2QixFQUFFLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDdkgsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNqQzthQUFNO1lBQ0gsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixHQUFHLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMxQjtZQUVELE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZFLE1BQU0sVUFBVSxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV4RCxJQUFJLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDaEQsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQixTQUFTLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0QztZQUNELE1BQU0saUJBQWlCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQyxJQUFJLFdBQVcsR0FBRyxHQUFHLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsZUFBZSxDQUFDLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDOUcsSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXLEVBQUU7Z0JBQ25DLFdBQVcsR0FBRyxHQUFHLFdBQVcsSUFBSSxVQUFVLEVBQUUsQ0FBQzthQUNoRDtZQUVELG9EQUFvRDtZQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzVCLFNBQVMsQ0FBQztnQkFDUCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLHVCQUF1QixDQUFDLDRCQUE0QixDQUFDO2dCQUNuRixLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLHVCQUF1QixDQUFDLGdDQUFnQyxDQUFDO2FBQzNGLENBQUMsQ0FBQztTQUNWO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGdCQUFnQixDQUFDLEtBQVcsRUFBRSxPQUFpQztRQUNsRSxJQUFJLFFBQW1CLENBQUM7UUFDeEIsSUFBSSxPQUFPLEVBQUU7WUFDVCxNQUFNLE9BQU8sR0FBMEI7Z0JBQ25DLEtBQUssRUFBRSxLQUFLO2dCQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUc7YUFDNUIsQ0FBQztZQUNGLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFO2dCQUNwQyxPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUM3QjtZQUVELFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxJQUFJLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDN0Y7YUFBTSxJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRTtZQUMzQyxzRkFBc0Y7WUFDdEYsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLCtCQUErQixFQUFFLEtBQUssRUFBRTtnQkFDaEUsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRzthQUM1QixDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsOENBQThDO1lBQzlDLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksZUFBZSxFQUFFO2dCQUMvRCxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxjQUFjO2dCQUNuQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO2dCQUN6QixLQUFLLEVBQUUsS0FBSzthQUNmLENBQUMsQ0FBQztTQUNOO1FBRUQsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNPLG1CQUFtQixDQUN6QixRQUFtRCxFQUNuRCxNQUE0QyxFQUM1QyxVQUFtQyxFQUNuQyxxQkFBK0MsRUFDL0MsbUNBQW1DLEdBQUcsS0FBSztRQUUzQyxJQUFJLENBQUMsbUNBQW1DLElBQUksQ0FBQyxRQUFRLElBQUksTUFBTSxFQUFFLGlCQUFpQixLQUFLLDJCQUEyQixDQUFDLE9BQU8sSUFBSSxVQUFVLEVBQUU7WUFDdEksUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsK0JBQStCLEVBQUUsQ0FBQztTQUNwRTtRQUNELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNULE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxnRUFBZ0UsRUFBRSxFQUFDLElBQUksRUFBRSw0QkFBNEIsRUFBQyxDQUFDLENBQUM7YUFDdEk7WUFDRCxzQ0FBc0M7WUFDdEMsUUFBUSxHQUFHLElBQUksY0FBYyxDQUFnQixNQUFNLEVBQUUscUJBQXFCLENBQUMsQ0FBQztTQUMvRTtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixLQUFLLFFBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQ3ZILElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUNsRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUU1QyxJQUFJLFlBQWEsQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLENBQUMsa0JBQWtCLEVBQUU7b0JBQ2xFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxRQUFRLENBQUMsZ0JBQWdCLGtCQUFrQixDQUFDLENBQUM7b0JBQzVILFlBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDL0I7YUFDSjtZQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3RvciwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyLCBVcmxUcmVlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDb25maXJtYXRpb24sIENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWd9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge09ic2VydmFibGUsIGZyb20sIG1lcmdlTWFwLCBvZiwgc3dpdGNoTWFwLCB0YWtlLCB0aW1lb3V0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmlsdGVyLCBmaXJzdCwgbWFwLCBzdGFydFdpdGh9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtBY3Rpb25Db250ZXh0LCBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbiwgQWN0aW9uSW5zdGFuY2UsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLCBBY3Rpb25QYXJhbWV0ZXJzfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtJRGF0YVByb3ZpZGVyfSBmcm9tICcuLi8uLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkNvbmZpcm1hdGlvbkRlc2NyaXB0b3IsXG4gICAgQWN0aW9uRGVsZXRlRGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uRGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3JJbnN0XG59IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge0FjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSwgQWN0aW9uVHlwZUVudW19IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7dG9PYnNlcnZhYmxlfSBmcm9tICcuLi8uLi9oZWxwZXJzL2NvZXJjaW9uJztcbmltcG9ydCB7QWN0aW9uRWRpdG9yRGlhbG9nRGF0YSwgSUFjdGlvbkVkaXRvckNvbXBvbmVudCwgSU1uZ0Vycm9yLCBNbmdBY3Rpb25FcnJvciwgTW5nQWN0aW9uRXJyb3JPcHRpb25zLCBNbmdIdHRwRXJyb3IsIE1uZ0ludGVybmFsRXJyb3J9IGZyb20gJy4uLy4uL21vZGVscyc7XG5pbXBvcnQge01uZ1BhcmFtZXRyaXplUGlwZX0gZnJvbSAnLi4vLi4vcGlwZXMnO1xuaW1wb3J0IHtTdHlsZVNpemVFbnVtfSBmcm9tICcuLi8uLi9zdHlsZXMvbW9kZWxzJztcbmltcG9ydCB7QWN0aW9uUnVuRm5UeXBlfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQge0kxOG5VdGlscywgTm90aWZpY2F0aW9uVXRpbCwgU3RyaW5nVXRpbH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdBY3Rpb25FcnJvck1hcHBlclNlcnZpY2V9IGZyb20gJy4uL2FjdGlvbi1lcnJvci1tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQge01uZ0NvbW1vbnNTZXJ2aWNlfSBmcm9tICcuLi9jb21tb25zLnNlcnZpY2UnO1xuaW1wb3J0IHtEYXRhUHJvdmlkZXJFeGVjdXRvcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlci1leGVjdXRvci5zZXJ2aWNlJztcbmltcG9ydCB7TW5nTG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7QUNUSU9OX0VESVRPUl9ESUFMT0dfQ09NUE9ORU5UX1NFVFRJTkd9IGZyb20gJy4uL3Rva2Vucyc7XG5pbXBvcnQge1ZpZXdDb250YWluZXJ9IGZyb20gJy4uL3ZpZXcnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtbmdDb21tb25zID0gaW5qZWN0KE1uZ0NvbW1vbnNTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YVByb3ZpZGVyRXhlY3V0b3IgPSBpbmplY3QoRGF0YVByb3ZpZGVyRXhlY3V0b3IpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBuYXZpZ2F0aW9uU2VydmljZSA9IGluamVjdChNbmdOYXZpZ2F0aW9uU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVycm9yTWFwcGVyID0gaW5qZWN0KE1uZ0FjdGlvbkVycm9yTWFwcGVyU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhcmFtZXRyaXplID0gaW5qZWN0KE1uZ1BhcmFtZXRyaXplUGlwZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQgPSBpbmplY3QoQUNUSU9OX0VESVRPUl9ESUFMT0dfQ09NUE9ORU5UX1NFVFRJTkcpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtZXNzYWdlU2VydmljZSA9IGluamVjdChNZXNzYWdlU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHZpZXdDb250YWluZXIgPSBpbmplY3QoVmlld0NvbnRhaW5lciwge29wdGlvbmFsOiB0cnVlfSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5zdGFuY2VzQnVmZmVyTWF4ID0gMTAwO1xuICAgIHByb3RlY3RlZCBsb2dnZXIgPSBpbmplY3QoTW5nTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UnKTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgaW5zdGFuY2VzKCk6IEFjdGlvbkluc3RhbmNlPGFueSwgYW55PltdO1xuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGNvbnRleHQgZm9yIHVzYWdlIGluIHZhbGlkYXRpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICovXG4gICAgcHVibGljIHByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPlxuICAgICk6IEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyID8/IGFjdGlvbi5kYXRhUHJvdmlkZXIgPz8gdGhpcy52aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLmdldERhdGFQcm92aWRlclNlcnZpY2UodGhpcy5pbmplY3RvciwgY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFjdGlvbiBjb250ZXh0IGJ5IHN1Ym1pdHRpbmcgZXhlY3V0aW9uIHJlc3VsdHMvZXJyb3JzIHRvIGNvbnRleHQsIHdhdGNoaW5nIG92ZXIgaW5zdGFuY2UgcmVzdWx0cy9lcnJvcnMsIGRpc3BsYXlpbmcgbm90aWZpY2F0aW9ucyxcbiAgICAgKiBydW5uaW5nIG5leHQvZXJyb3IgYWN0aW9uIGFuZCB0cmlnZ2VyaW5nIGRpc21pc3Mgb2YgYWN0aW9uLiBDb25maXJtYXRpb24gaXMgYWxzbyBwcm9jZXNzZWQgaGVyZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdHggQWN0aW9uIGNvbnRleHQgdG8gcnVuLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW48SXRlbSwgU2VydmljZSA9IHVuZGVmaW5lZD4oY3R4OiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KSB7XG4gICAgICAgIGNvbnN0IGlzTWFpblJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcgfHwgY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG5cbiAgICAgICAgLy8gaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0ICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgLy8gb25seSBkaXJlY3QgYWN0aW9uIGNhbiBiZSBjb25maWd1cmVkIHdpdGggcnVuIGNvbmZpcm1hdGlvblxuICAgICAgICAgICAgLy8gaWYgZWRpdG9yLCB0aGVuIHJ1biBjb25maXJtYXRpb24gaXMgbWFwcGVkIHRvIHN1Ym1pdCBhY3Rpb24gYW5kIGlnbm9yZWQgYXMgZWRpdG9yIHJ1blxuICAgICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uRGVzY3JpcHRvciA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciBhcyBBY3Rpb25Db25maXJtYXRpb25EZXNjcmlwdG9yPEl0ZW0+O1xuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LnBhcmFtZXRlcnMuaXRlbTtcbiAgICAgICAgICAgIGxldCBjb25maXJtUGFyYW1zOiBDb25maXJtYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgaWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5pY29uLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjZXB0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYWNjZXB0QnV0dG9uU3R5bGVDbGFzczogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uc3R5bGVDbGFzcy5idWlsZCgpLFxuICAgICAgICAgICAgICAgIHJlamVjdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVqZWN0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5zdHlsZUNsYXNzLmJ1aWxkKCksXG4gICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogY29uZmlybWF0aW9uRGVzY3JpcHRvci5jbG9zZU9uRXNjYXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci50aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaGVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXQodGhpcy50cmFuc2xhdGUsIGN0eC5pbnN0YW5jZS5hY3Rpb24sICdjb25maXJtLnRpdGxlJywgY29uZmlybWF0aW9uRGVzY3JpcHRvci50aXRsZSwgaXRlbSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5tZXNzYWdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlybS5tZXNzYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1V0aWwuZXNjYXBlSHRtbEFueShpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdnZW5lcmFsLmNvbmZpcm1hdGlvbidcbiAgICAgICAgICAgICAgICAgICAgKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgY3R4Lmluc3RhbmNlLmFjdGlvbiwgJ2NvbmZpcm0uYWNjZXB0JywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24ubGFiZWwsIGl0ZW0sICdnZW5lcmFsLnllcycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IuYWNjZXB0QnV0dG9uLmljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdEljb24gPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5pY29uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdEljb24gPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8uaWNvbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgY3R4Lmluc3RhbmNlLmFjdGlvbiwgJ2NvbmZpcm0ucmVqZWN0JywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/LmxhYmVsLCBpdGVtLCAnZ2VuZXJhbC5ubycpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uID09IG51bGwgfHwgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uLmxhYmVsID09PSBudWxsICYmIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uLmljb24gPT09IG51bGwpKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RWaXNpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvbkVuZEFjY2VwdDtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bldpdGhvdXRDb25maXJtYXRpb24oY3R4KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvbkVuZFJlamVjdDtcbiAgICAgICAgICAgICAgICBpZiAoY3R4Lmluc3RhbmNlLmFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IGVkaXRvciwgdGhlIGl0IGNhbiBiZSBjbG9zZWRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5ydW5Db25maXJtYXRpb25Db25maWdNYXBGbikge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMgPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJ1bkNvbmZpcm1hdGlvbkNvbmZpZ01hcEZuKGN0eCwgY29uZmlybVBhcmFtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN0eC5jb25maXJtYXRpb24gPSBjb25maXJtUGFyYW1zO1xuICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuQ29uZmlybWF0aW9uU3RhcnQ7XG5cbiAgICAgICAgICAgIHRoaXMuY29uZmlybWF0aW9uU2VydmljZS5jb25maXJtKGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ydW5XaXRob3V0Q29uZmlybWF0aW9uKGN0eCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFjdGlvbiBjb250ZXh0IGJ5IHN1Ym1pdHRpbmcgZXhlY3V0aW9uIHJlc3VsdHMvZXJyb3JzIHRvIGNvbnRleHQsIHdhdGNoaW5nIG92ZXIgaW5zdGFuY2UgcmVzdWx0cy9lcnJvcnMsIGRpc3BsYXlpbmcgbm90aWZpY2F0aW9ucyxcbiAgICAgKiBydW5uaW5nIG5leHQvZXJyb3IgYWN0aW9uIGFuZCB0cmlnZ2VyaW5nIGRpc21pc3Mgb2YgYWN0aW9uLiBDb25maXJtYXRpb25cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdHggQWN0aW9uIGNvbnRleHQgdG8gcnVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGNvbnRleHQgZm9yIHN1Ym1pdCAoPXJ1bikgZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBydW5XaXRob3V0Q29uZmlybWF0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGN0eDogQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPik6IE9ic2VydmFibGU8SXRlbSB8IG51bGwgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgaXNNYWluUnVuRm4gPSBjdHguZnVuY3Rpb25OYW1lID09PSAnc3VibWl0JyB8fCBjdHguZnVuY3Rpb25OYW1lID09PSAncnVuJztcbiAgICAgICAgY29uc3QgaXNFcnJvckNyaXRpY2FsUnVuRm4gPSBjdHguZnVuY3Rpb25OYW1lID09PSAncnVuJztcbiAgICAgICAgbGV0IGFjdGlvbkVkaXRvcjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT47XG5cbiAgICAgICAgbGV0IGZuT2JzOiBBY3Rpb25SdW5GblR5cGU8SXRlbSwgU2VydmljZT47XG4gICAgICAgIHN3aXRjaCAoY3R4LmZ1bmN0aW9uTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnc3VibWl0JzpcbiAgICAgICAgICAgICAgICBhY3Rpb25FZGl0b3IgPSBjdHguaW5zdGFuY2UuYWN0aW9uIGFzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uRWRpdG9yLnN1Ym1pdEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25FZGl0b3IgaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JBZGREZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1bkNyZWF0ZU9yRmFpbC5iaW5kKHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbkVkaXRvciBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1blVwZGF0ZU9yRmFpbC5iaW5kKHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ5IHRvIGd1ZXNzIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0U3VibWl0ID0gb2YoY3R4LnBhcmFtZXRlcnM/Lml0ZW0gPyBjdHgucGFyYW1ldGVycy5pdGVtIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnBhcmFtZXRlcnMuaXRlbUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1blVwZGF0ZShjdHgsIGRlZmF1bHRTdWJtaXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLnJ1bkNyZWF0ZShjdHgsIGRlZmF1bHRTdWJtaXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGFjdGlvbkVkaXRvci5zdWJtaXRGdW5jdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbkVkaXRvci5mZXRjaEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25FZGl0b3IgaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5GZXRjaE9yRmFpbC5iaW5kKHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdEZldGNoID0gb2YoY3R4LnBhcmFtZXRlcnM/Lml0ZW0gPyBjdHgucGFyYW1ldGVycy5pdGVtIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gY3R4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnBhcmFtZXRlcnMuaXRlbUlkIHx8IHR5cGVvZiBjdHgucGFyYW1ldGVycy5pdGVtID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5GZXRjaChjdHgsIGRlZmF1bHRGZXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0RmV0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSBhY3Rpb25FZGl0b3IuZmV0Y2hGdW5jdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdydW4nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoIWN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuRnVuY3Rpb24gJiYgY3R4Lmluc3RhbmNlLmFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3JJbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5EZWxldGVPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmV0T2JzID0gb2Yodm9pZCAwKS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIG1haW4gcnVuIGZ1bmN0aW9uLCBhbHNvIHNldCBsb2FkaW5nIHRvIHRydWVcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5pc1J1bkxvYWRpbmdTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hTdGFydDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3RhcnQgY29udGV4dCBleGVjdXRpb24gdG8gbWFyayBleGVjdXRpb24gbG9hZGluZ1xuICAgICAgICAgICAgICAgIGN0eC5leGVjdXRpb25TdGFydCgpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvT2JzZXJ2YWJsZShmbk9icyhjdHgpKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWVyZ2VNYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgbmV4dCBzdGF0ZSBkZXBlbmRpbmcgb24gcnVuXG4gICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gaXNNYWluUnVuRm4gPyBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FbmQgOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVuZDtcbiAgICAgICAgICAgICAgICAvLyBzZXQgZXhlY3V0aW9uIHJlc3VsdFxuICAgICAgICAgICAgICAgIGN0eC5leGVjdXRpb25OZXh0KHJ1blJlc3VsdCwgaXNNYWluUnVuRm4pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBmaW5hbCByZXN1bHQgb24gbWFpbiBydW4gZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5yZXN1bHQgPSBydW5SZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5pc1J1bkxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLnJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LnBhcmFtZXRlcnM/Lml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJ1blJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgcG9zc2libGUgYWZ0ZXIgcnVuIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4Lmluc3RhbmNlLmFjdGlvbi5hZnRlclJ1bkFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFyayBuZXcgc3RhdGUgZm9yIG5leHQgYWN0aW9uIHN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZnRlclJ1bkFjdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb24gPT09ICdmdW5jdGlvbicgPyBjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uKGN0eCkgOiBjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dEFjdGlvbkluc3RhbmNlID0gdGhpcy5hY3RpdmF0ZUFjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlclJ1bkFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uUGFyYW1ldGVyczx1bmtub3duPihjdHgucGFyYW1ldGVycy5pdGVtSWQsIHJ1blJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGN0eC5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoUm91dGUoY3R4LnBhcmFtZXRlcnMucm91dGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZSBhcyBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZSA9IG5leHRBY3Rpb25JbnN0YW5jZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggY3VycmVudCBhY3Rpb24gd2hlbiBuZXh0IGFjdGlvbiBmaW5pc2hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgobmV4dEFjdGlvbkluc3RhbmNlLnN0YXRlKSwgLy8gcHJvdmlkZSBmaXJzdCBzdGF0ZSBjYXVzZSBpdCBtaWdodCBiZSBmaW5pc2hlZCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkVkaXRvci5oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FZGl0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZldGNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkVkaXRvci5mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FZGl0b3IuZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycy5pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKHJ1blJlc3VsdCk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcChydW5SZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBkZWFjdGl2YXRlIGFjdGlvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihjdHguaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtIGVycm9yIHRvIG1uZyBhY3Rpb24gZXJyb3JcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9NbmdBY3Rpb25FcnJvcihlcnIsIGN0eCk7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2Ugc3RhdGUgdG8gZXJyb3JcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBpc01haW5SdW5GbiA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGV4ZWN1dGlvbiBlcnJvciBvbiBjb250ZXh0XG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvbkVycm9yKGFjdGlvbkVycm9yKTtcblxuICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uRXJyb3IodGhpcy50cmFuc2xhdGUsIGN0eC5pbnN0YW5jZS5hY3Rpb24sIGFjdGlvbkVycm9yLCAnZmV0Y2gnLCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLCBjdHgucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JPYnMgPSBvZih2b2lkIDApO1xuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5pc1J1bkxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBlcnJvciBhY3Rpb24gaWYgcnVuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9uUnVuRXJyb3JBY3Rpb24gPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24gPT09ICdmdW5jdGlvbicgPyBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24oY3R4KSA6IGN0eC5pbnN0YW5jZS5hY3Rpb24ub25SdW5FcnJvckFjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbm5vdCBzdGFydCB3aXRoIHRyaWdnZXIsIGJlY2F1c2Ugcm91dGluZyBtaWdodCBiZSBwcm9ibGVtYXRpYyAobG91c2luZyBwcmV2aW91cyByZXN1bHRzIGV0Yy4pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvckFjdGlvbkluc3RhbmNlID0gdGhpcy5hY3RpdmF0ZUFjdGlvbjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblJ1bkVycm9yQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+KGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCwgY3R4LnBhcmFtZXRlcnMuaXRlbSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGN0eC5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoUm91dGUoY3R4LnBhcmFtZXRlcnMucm91dGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UgPSBlcnJvckFjdGlvbkluc3RhbmNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5FcnJvckFjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck9icyA9IGVycm9yQWN0aW9uSW5zdGFuY2Uuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRXaXRoKGVycm9yQWN0aW9uSW5zdGFuY2Uuc3RhdGUpLCAvLyBwcm92aWRlIGZpcnN0IHN0YXRlIGNhdXNlIGl0IG1pZ2h0IGJlIGZpbmlzaGVkIGFscmVhZHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc3RhdGUgPT4gc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkVycm9yQWN0aW9uRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdm9pZCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gbGlzdCBhbmQgbWFwIG9ubHkgdG8gbWFyayBpbnN0YW5jZSBzdGF0ZSBhcyBmaW5pc2hlZCBlcnJvciBzdGF0ZVxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck9icy5waXBlKFxuICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVhY3RpdmF0ZSBhY3Rpb24gb25seSBpZiBjcml0aWNhbCAoZmV0Y2ggb24gZWRpdG9yIG9yIHJ1biBvbiBidXR0b24gYWN0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Vycm9yQ3JpdGljYWxSdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGN0eC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRocm93IGVycm9yIHRvIHByb3BhZ2F0ZSBmdXJ0aGVyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBhY3Rpb25FcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICBjdHgucnVuU3Vic2NyaXB0aW9uID0gcmV0T2JzLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBBY3Rpb25Db250ZXh0ICR7Y3R4LmNvbnRleHRMb25nTmFtZX0gZXhlY3V0aW9uIG5leHQgZXZlbnRgLCByZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoZXJyIGFzIElNbmdFcnJvciB8IHVuZGVmaW5lZCk/LnR5cGUgIT09ICdNbmdBY3Rpb25FcnJvcicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYE5vbiBhY3Rpb24gZXJyb3Igb2NjdXJyZWRgLCBlcnIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBBY3Rpb24gY29udGV4dCAke2N0eC5jb250ZXh0TG9uZ05hbWV9IGV4ZWN1dGlvbiBlcnJvciBldmVudGAsIGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmV0T2JzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIGVkaXRvciBhY3Rpb24ncyBmZXRjaCBmdW5jdGlvbiBieSBjcmVhdGluZyBuZXcgYWN0aW9uIGNvbnRleHQgZm9yIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBFZGl0b3IgZGF0YSBwcm92aWRlciBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBY3Rpb24gY29udGV4dCBmb3IgZmV0Y2ggZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIHByZXBhcmVDb250ZXh0Rm9yRWRpdG9yRmV0Y2g8SXRlbSwgU2VydmljZT4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT4sXG4gICAgICAgIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8SXRlbSwgU2VydmljZT4sXG4gICAgICAgIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4sXG4gICAgICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPlxuICAgICk6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShpbnN0YW5jZSwgYWN0aW9uLCBwYXJhbWV0ZXJzLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdmZXRjaCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uJ3Mgc3VibWl0ICg9bWFpbiBydW4pIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIEVkaXRvciBkYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQ29udGV4dEZvckVkaXRvclN1Ym1pdDxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlLCBhY3Rpb24sIHBhcmFtZXRlcnMsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQpO1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVwYXJlQ29udGV4dEZvckVkaXRvcihpbnN0YW5jZSwgcGFyYW1ldGVycywgJ3N1Ym1pdCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGV4ZWMgY29udGV4dCBmb3IgYWN0aW9uIG9mIHR5cGUgZWRpdG9yLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZnVuY3Rpb25OYW1lIEFjdGlvbiBmdW5jdGlvbiBuYW1lIHBhcmFtZXRlci5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIE9wdGlvbmFsIGRhdGEgcHJvdmlkZXIuIElmIG5vdCBwcm92aWRlZCBkYXRhIHByb3ZpZGVyIGZyb20gZWl0aGVyIHRoZSBhY3Rpb24gZWRpdG9yIG9yIHZpZXcgY29udGFpbmVyIHdpbGwgYmUgdXNlZC5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJlcGFyZUNvbnRleHRGb3JFZGl0b3I8SXRlbSwgU2VydmljZT4oXG4gICAgICAgIGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZnVuY3Rpb25OYW1lOiAnc3VibWl0JyB8ICdmZXRjaCcsXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXIsXG4gICAgICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNbmdJbnRlcm5hbEVycm9yKGBDYW5ub3QgY3JlYXRlIGVkaXRvciBjb250ZXh0IGZvciBhY3Rpb24gJHtpbnN0YW5jZS5hY3Rpb24uYWN0aW9uTmFtZUxvbmd9IG9mIHR5cGUgJHtpbnN0YW5jZS5hY3Rpb24udHlwZX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWRpdG9yQWN0aW9uID0gaW5zdGFuY2UuYWN0aW9uIGFzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+O1xuICAgICAgICBsZXQgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlciAmJiBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3R4RGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyID0gdGhpcy52aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGlmICh2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gdmlld0NvbnRhaW5lckRhdGFQcm92aWRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdHggPSBuZXcgQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICBmdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICB0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yLmdldERhdGFQcm92aWRlclNlcnZpY2UodGhpcy5pbmplY3RvciwgY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIsXG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPz8gdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgICAgIGN0eC5wcmV2aW91c0FjdGlvbkluc3RhbmNlID0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgaW5zdGFuY2UubmV3Q29udGV4dChjdHgpO1xuICAgICAgICByZXR1cm4gY3R4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgYWN0aW9uJ3MgbWFpbiBydW4gZnVuY3Rpb24gYnkgY3JlYXRpbmcgbmV3IGFjdGlvbiBjb250ZXh0IGZvciBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0IHJ1bi5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIgZm9yIGNvbnRleHQgcnVuLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBydW4gZnVuY3Rpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlQ29udGV4dDxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPGFueSwgYW55PlxuICAgICk6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPihpbnN0YW5jZSwgYWN0aW9uLCBwYXJhbWV0ZXJzLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kKTtcblxuICAgICAgICBjb25zdCBjdHhEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXIgPz8gaW5zdGFuY2UuYWN0aW9uLmRhdGFQcm92aWRlciA/PyB0aGlzLnZpZXdDb250YWluZXI/LmdldERhdGFQcm92aWRlcigpO1xuICAgICAgICBjb25zdCBjdHggPSBuZXcgQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICBpbnN0YW5jZSxcbiAgICAgICAgICAgIHBhcmFtZXRlcnMsXG4gICAgICAgICAgICAncnVuJyxcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IuZ2V0RGF0YVByb3ZpZGVyU2VydmljZSh0aGlzLmluamVjdG9yLCBjdHhEYXRhUHJvdmlkZXIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGN0eERhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgICAgY3R4LnByZXZpb3VzQWN0aW9uSW5zdGFuY2UgPSBwcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5uZXdDb250ZXh0KGN0eCk7XG5cbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBY3RpdmF0ZXMgYWN0aW9uIChpbiBjYXNlIG9mIGRpYWxvZywgZGlhbG9nIHdpbGwgYmUgb3BlbmVkKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGFjdGl2YXRpb24gb2YgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gcnVuQ29udGV4dCBNYXJrcyBpZiBjb250ZXh0IHNob3VsZCBiZSBydW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBY3Rpb24gaW5zdGFuY2UgLSBpZiBub24gcHJvdmlkZWQgaW4gcGFyYW1ldGVycywgdGhlIG5ld2x5IGNyZWF0ZWQgd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWN0aXZhdGVBY3Rpb248SXRlbSwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT4sXG4gICAgICAgIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sXG4gICAgICAgIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4sXG4gICAgICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxhbnksIGFueT4sXG4gICAgICAgIHJ1bkNvbnRleHQgPSBmYWxzZVxuICAgICk6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oaW5zdGFuY2UsIGFjdGlvbiwgcGFyYW1ldGVycywgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0KTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uU3RhcnQ7XG4gICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25QYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICAgICAgLy8gc3RhcnQgYWN0aXZhdGlvbiBpbnN0YW5jZVxuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgbGV0IGRpYWxvZ0NvbXBvbmVudCA9IHRoaXMuZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudDtcbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ0NsYXNzTmFtZXMgPSBbJ21uZy1kaWFsb2cnXTtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaChhY3Rpb24uZGlhbG9nQ2xhc3NOYW1lID8/ICdtbmctYWN0aW9uLWVkaXRvci1kaWFsb2cnKTtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbi5kaWFsb2dTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5FeHRyYVNtYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLXhzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLlNtYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLXNtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLkxhcmdlOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLWxnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLkV4dHJhTGFyZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goJ21uZy1kaWFsb2cteGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uTm9ybWFsOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24uZWRpdG9yQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NvbXBvbmVudCA9IGFjdGlvbi5lZGl0b3JDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGlhbG9nQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IDxBY3Rpb25FZGl0b3JEaWFsb2dEYXRhPEl0ZW0sIFNlcnZpY2U+PntcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlOiBwcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkdXBsaWNhdGU6IHRydWUsXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzczogZGlhbG9nQ2xhc3NOYW1lcy5qb2luKCcgJylcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmNsb3NhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmNsb3NlT25Fc2NhcGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oZGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xuICAgICAgICAgICAgZGlhbG9nUmVmLm9uQ2xvc2UucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRvIGNsb3NlIGRpYWxvZyBvbiAnWCcgY2xpY2sgb3IgZXNjIGJ1dHRvblxuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlISk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWYgPSBkaWFsb2dSZWY7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHQ8SXRlbSwgU2VydmljZT4oYWN0aW9uLCBwYXJhbWV0ZXJzLCB1bmRlZmluZWQsIGluc3RhbmNlLCBwcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcblxuICAgICAgICAgICAgaWYgKHJ1bkNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bihjb250ZXh0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSBjYWxsZWQgd2hlbiBhY3Rpb24gZWRpdG9yIGlzIGluaXRpYWxpemVkIHRvIGNvcnJlY3RseSBhY3RpdmF0ZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlIChpZiBhdmFpbGFibGUpLlxuICAgICAqIEBwYXJhbSBjb21wb25lbnRSZWYgT3B0aW9uYWwgYWN0aW9uIGVkaXRvciBjb21wb25lbnQgcmVmZXJlbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGlvbkVkaXRvckluaXQ8VCwgUz4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxUPiwgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPiwgY29tcG9uZW50UmVmPzogSUFjdGlvbkVkaXRvckNvbXBvbmVudCk6IEFjdGlvbkluc3RhbmNlPFQsIFM+IHtcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aW9uICR7YWN0aW9uLmFjdGlvbk5hbWV9IGlzIG5vdCBvZiB0eXBlIGVkaXRvciwgY2Fubm90IGJlIGFjdGl2YXRlZCB0aHJvdWdoIFwib25BY3Rpb25FZGl0b3JPbkluaXRcImApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0YW5jZSAmJiBhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyZWRJbnN0YW5jZSA9IHRoaXMudmlld0NvbnRhaW5lcj8uZ2V0Um91dGVUcmlnZ2VyZWRBY3Rpb25JbnN0YW5jZSgpO1xuICAgICAgICAgICAgY29uc3QgYWN0aXZhdGlvbkluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyPy5nZXRSb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlKCk7XG4gICAgICAgICAgICBpZiAodHJpZ2dlcmVkSW5zdGFuY2UgJiYgdHJpZ2dlcmVkSW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSAhPT0gaW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgICAgICAgICBgV0FSTklORzogRm91bmQgdHJpZ2dlcmVkIHBhcmFtZXRlcnMgdmlldyBjb250YWluZXIgaW5zdGFuY2UgJHt0cmlnZ2VyZWRJbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSBhbmQgaXQgZG9lcyBub3QgbWF0Y2ggaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSByZXRyaWV2ZWQgb24gZWRpdG9yIGluaXQuYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWN0aXZhdGlvbkluc3RhbmNlICYmIGFjdGl2YXRpb25JbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lICE9PSBpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXG4gICAgICAgICAgICAgICAgICAgIGBXQVJOSU5HOiBGb3VuZCB0cmlnZ2VyZWQgcGFyYW1ldGVycyB2aWV3IGNvbnRhaW5lciBpbnN0YW5jZSAke2FjdGl2YXRpb25JbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSBhbmQgaXQgZG9lcyBub3QgbWF0Y2ggaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSByZXRyaWV2ZWQgb24gZWRpdG9yIGluaXQuYFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGFjdGlvbiwgdW5kZWZpbmVkLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uU3RhcnQpO1xuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQ7XG4gICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25FZGl0b3JDb21wb25lbnRSZWYgPSBjb21wb25lbnRSZWY7XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIGJlIGNhbGxlZCB3aGVuIGFjdGlvbiBlZGl0b3IgY21wIGlzIGJlaW5nIGRlc3Ryb3llZCB0byBjb3JyZWN0bHkgZmluaXNoIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGlvbkRlc3Ryb3k8VCwgUz4oaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPik6IHZvaWQge1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25DbGljaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSBjYWxsZWQgd2hlbiBhY3Rpb24gZWRpdG9yIGNtcCBpcyBiZWluZyBkZXN0cm95ZWQgdG8gY29ycmVjdGx5IGZpbmlzaCBhY3Rpb24uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3Rpb25FZGl0b3JEZXN0cm95PFQsIFM+KGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aW9uIGluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gaXMgbm90IG9mIHR5cGUgZWRpdG9yLCBjYW5ub3QgYmUgZGVhY3RpdmF0ZWQgdGhyb3VnaCBcIm9uQWN0aW9uRWRpdG9yT25EZXN0cm95XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oaW5zdGFuY2UsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gYmUgY2FsbGVkIHdoZW4gYWN0aW9uIHJvdXRlIGNtcCBpcyBiZWluZyBkZXN0cm95ZWQgdG8gY29ycmVjdGx5IGZpbmlzaCBhY3Rpb24uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3Rpb25Sb3V0ZURlc3Ryb3k8VCwgUz4oaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPik6IHZvaWQge1xuICAgICAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSBpcyBub3QgdHJpZ2dlcmVkIG9uIHJvdXRlLCBjYW5ub3QgYmUgZGVhY3RpdmF0ZWQgdGhyb3VnaCBcIm9uQWN0aW9uUm91dGVPbkRlc3Ryb3lcImApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWFjdGl2YXRlcyBhY3Rpb24gYnkgY2hvb3NpbmcgZmluYWwgc3RhdGUsIGNsb3NpbmcgZGlhbG9nIGFuZCBjb21wbGV0aW5nIGFsbCBzdWJqZWN0cyBpbiBpbnN0YW5jZSBhbmQgY29udGV4dHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBvbkRlc3Ryb3kgTWFya3MgaWYgZmluaXNoIGlzIGNhbGxlZCBvbiBjb21wb25lbnQgZGVzdHJveSBsaWZlY3ljbGUgaG9vay5cbiAgICAgKi9cbiAgICBwdWJsaWMgZmluaXNoQWN0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiwgb25EZXN0cm95ID0gZmFsc2UpIHtcbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UpO1xuICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci50cmFjZShgQWN0aW9uSW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSBhbHJlYWR5IGZpbmlzaGVkYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmluYWxTdGF0ZTogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW07XG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UucmVzdWx0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbDtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuZXJyb3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3JGaW5hbDtcbiAgICAgICAgfSBlbHNlIGlmIChvbkRlc3Ryb3kpIHtcbiAgICAgICAgICAgIGZpbmFsU3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hDb21wb25lbnREZXN0cm95RmluYWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkRmluYWw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgY29uc3QgaGFzRGlhbG9nID0gdHlwZW9mIGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWYgIT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgY29uc3QgcmVzdWJtaXRFbmFibGVkID0gKGluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPikucmVzdWJtaXRFbmFibGVkO1xuXG4gICAgICAgICAgICBpZiAoZmluYWxTdGF0ZSA9PT0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKChoYXNEaWFsb2cgJiYgcmVzdWJtaXRFbmFibGVkID09PSB0cnVlKSB8fCAoIWhhc0RpYWxvZyAmJiByZXN1Ym1pdEVuYWJsZWQgIT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc1JlYWN0aXZhdGVGaW5hbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChoYXNEaWFsb2cgJiYgZmluYWxTdGF0ZSAhPT0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc1JlYWN0aXZhdGVGaW5hbCkge1xuICAgICAgICAgICAgICAgIC8vIGlmIHN0YXRlIGlzIGZpbmlzaCBhbmQgbm90IGNhbGxlZCBmcm9tIGRpYWxvZyBsaXN0ZW5lciwgY2xvc2UgdGhlIGRpYWxvZyBmaXJzdCB3aGljaCB3aWxsIHJldHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCB0aGVuIGZpbmlzaCBpdFxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWYhLmNsb3NlKGluc3RhbmNlLnJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB1bnNldCBpbnN0YW5jZSBpbiB2aWV3IGNvbnRhaW5lclxuICAgICAgICB0aGlzLnZpZXdDb250YWluZXI/LnVuc2V0Um91dGVUcmlnZ2VyZWRBY3Rpb25JbnN0YW5jZSgpO1xuXG4gICAgICAgIC8vIHNldCBmaW5hbCBzdGF0ZSBvbiBpbnN0YW5jZVxuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IGZpbmFsU3RhdGU7XG5cbiAgICAgICAgaWYgKGZpbmFsU3RhdGUgPT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwpIHtcbiAgICAgICAgICAgIC8vIHByZXBhcmUgcmVhY3RpdmF0aW9uIGluc3RhbmNlXG4gICAgICAgICAgICBjb25zdCBuZXdJbnN0YW5jZVN0YXR1cyA9IChpbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT4pLnJlc3VibWl0UmVmZXRjaFxuICAgICAgICAgICAgICAgID8gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZFxuICAgICAgICAgICAgICAgIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFbmQ7XG4gICAgICAgICAgICAvLyBtdXN0IHNraXAgaW5pdGlhbGl6YXRpb24gZnJvbSB2aWV3IGNvbnRhaW5lciwgYmVjYXVzZSBpdCB3b3VsZCBvbmx5IGdldCBvbGQgaW5zdGFuY2UuXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIG5ldyBpbnN0YW5jZSBiZWZvcmUgd2UgY2FuIHNldCBuZXcgb25lIG9uIHRoZSB2aWV3IGNvbnRhaW5lci5cbiAgICAgICAgICAgIGNvbnN0IG5ld0luc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KHVuZGVmaW5lZCwgaW5zdGFuY2UuYWN0aW9uLCB1bmRlZmluZWQsIG5ld0luc3RhbmNlU3RhdHVzLCB0cnVlKTtcbiAgICAgICAgICAgIG5ld0luc3RhbmNlLnByZXZpb3VzSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgIC8vIGNvcHkgc29tZSBhZGRpdGlvbmFsIHNldHRpbmdzXG4gICAgICAgICAgICBuZXdJbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmID0gaW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZjtcbiAgICAgICAgICAgIG5ld0luc3RhbmNlLnRyaWdnZXJQYXJhbWV0ZXJzID0gaW5zdGFuY2UudHJpZ2dlclBhcmFtZXRlcnM7XG4gICAgICAgICAgICBuZXdJbnN0YW5jZS5hY3RpdmF0aW9uUGFyYW1ldGVycyA9IGluc3RhbmNlLmFjdGl2YXRpb25QYXJhbWV0ZXJzO1xuXG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXI/LnNldFJvdXRlVHJpZ2dlcmVkQWN0aW9uSW5zdGFuY2UobmV3SW5zdGFuY2UpO1xuICAgICAgICAgICAgaW5zdGFuY2UucmVhY3RpdmF0aW9uSW5zdGFuY2UgPSBuZXdJbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGZpbmlzaCByZWxhdGVkIGFjdGlvbnNcbiAgICAgICAgaWYgKGluc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEZpbmlzaGluZyBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IHJlbGF0ZWQgbmV4dCBhY3Rpb24gaW5zdGFuY2U6ICR7aW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9YCk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZS5uZXh0QWN0aW9uSW5zdGFuY2UsIG9uRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSByZWxhdGVkIGVycm9yIGFjdGlvbiBpbnN0YW5jZTogJHtpbnN0YW5jZS5lcnJvckFjdGlvbkluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9YCk7XG4gICAgICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZS5lcnJvckFjdGlvbkluc3RhbmNlLCBvbkRlc3Ryb3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIHdpdGggcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGFjdGlvbiBleGVjdXRpb24gdG8gY29uc3RydWN0IG5ldyByb3V0ZS5cbiAgICAgKiBAcGFyYW0gcnVuQ29udGV4dCBNYXJrcyBpZiBjb250ZXh0IHNob3VsZCBiZSBydW4uXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBY3Rpb24gaW5zdGFuY2UgLSBpZiBub24gcHJvdmlkZWQgaW4gcGFyYW1ldGVycywgdGhlIG5ld2x5IGNyZWF0ZWQgd2lsbCBiZSByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlckFjdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+LCBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LCBydW5Db250ZXh0ID0gZmFsc2UpOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KHVuZGVmaW5lZCwgYWN0aW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgaW5zdGFuY2UudHJpZ2dlclBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlRyaWdnZXJTdGFydDtcbiAgICAgICAgaWYgKGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybDogVXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgICAgICBsZXQgYWN0aW9uVXJsID0gYWN0aW9uLnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25VcmxTZWdtZW50cyA9IHRoaXMucGFyYW1ldHJpemUudHJhbnNmb3JtKGFjdGlvblVybCwgcGFyYW1ldGVycy5pdGVtSWQsIHBhcmFtZXRlcnMuaXRlbSwgcGFyYW1ldGVycy5hY3Rpb25EYXRhKS5zcGxpdCgnLycpO1xuXG4gICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2UgaW4gdmlldyBjb250YWluZXJcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lcj8uc2V0Um91dGVUcmlnZ2VyZWRBY3Rpb25JbnN0YW5jZShpbnN0YW5jZSk7XG5cbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Jhc2VVcmwsIC4uLmFjdGlvblVybFNlZ21lbnRzXSwge3JlbGF0aXZlVG86IHBhcmFtZXRlcnMucm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlckVuZCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlRyaWdnZXJFbmQ7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlQWN0aW9uKGFjdGlvbiwgcGFyYW1ldGVycywgaW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocnVuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnVuKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgb24gcm91dGUgdHJpZ2dlcmVkIGFjdGlvbiBieSB0cnlpbmcgdG8gcmVyb3V0ZSBiYWNrIHRvIGxvY2F0aW9uIHdoZXJlIGFjdGlvbiB3YXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGZpbmlzaEFjdGlvblJvdXRlVW50cmlnZ2VyPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPikge1xuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oaW5zdGFuY2UpO1xuXG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJTdGFydDtcblxuICAgICAgICBsZXQgdXJsID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDdXJyZW50TG9jYXRpb25Gcm9tSGlzdG9yeSgpID8/IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExvY2F0aW9uRnJvbVVybCgpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VXJsUXVlcnlQYXJhbSA9IHVybC5zcGxpdCgnPycpO1xuICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gc3BsaXRVcmxRdWVyeVBhcmFtWzBdLnNwbGl0KCcjJylbMF0uc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW0gPSBzcGxpdFVybFF1ZXJ5UGFyYW1bMV0/LnNwbGl0KCcjJylbMF07XG5cbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBpbnN0YW5jZS5hY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGxldCByZWRpcmVjdFVybCA9ICcvJyArIHVybFBhdGhTZWdtZW50cy5zbGljZSgwLCB1cmxQYXRoU2VnbWVudHMubGVuZ3RoIC0gYWN0aW9uVXJsU2VnbWVudHMubGVuZ3RoKS5qb2luKCcvJyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5UGFyYW0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVcmwgPSBgJHtyZWRpcmVjdFVybH0/JHtxdWVyeVBhcmFtfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vIFVSTCByZXBsYWNlcywgcHJvYmFibHkgb2ssIHRvIGFsbG93IGdvaW5nIGJhY2tcbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZWRpcmVjdFVybCkpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSwgdGltZW91dCgxMDAwKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJFbmRGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiAoaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hSb3V0ZVVudHJpZ2dlclRpbWVvdXRGaW5hbClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBlcnJvciBvZiBhbnkgdHlwZSB0byBtbmcgZXJyb3IgYnkgdXNpbmcgZXJyb3IgbWFwcGVyIHRoYXQgY291bGQgYmUgcHJvdmlkZWQgYnkgZmluYWwgcHJvamVjdC5cbiAgICAgKiBAcGFyYW0gZXJyb3IgZXJyb3Igb2YgYW55IHR5cGUuXG4gICAgICogQHBhcmFtIGNvbnRleHQgQWN0aW9uIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBtYXBwZWQgTW5nRXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIHRvTW5nQWN0aW9uRXJyb3IoZXJyb3I/OiBhbnksIGNvbnRleHQ/OiBBY3Rpb25Db250ZXh0PGFueSwgYW55Pik6IElNbmdFcnJvciB7XG4gICAgICAgIGxldCBtbmdFcnJvcjogSU1uZ0Vycm9yO1xuICAgICAgICBpZiAoY29udGV4dCkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9uczogTW5nQWN0aW9uRXJyb3JPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgIGNhdXNlOiBlcnJvcixcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5yb3V0ZXIudXJsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmh0dHBFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtbmdFcnJvciA9IG5ldyBNbmdBY3Rpb25FcnJvcihlcnJvcj8ubWVzc2FnZSA/PyAnVW5rbm93biBlcnJvcicsIGNvbnRleHQuY29udGV4dExvbmdOYW1lKTtcbiAgICAgICAgfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICAvLyBzaG91bGQgbm90IHJlYWxseSBoYXBwZW4gKHNob3VsZCBhbHdheXMgYmUgd3JhcHBlZCBpbiBNbmdBY3Rpb25FcnJvciksIGp1c3QgaW4gY2FzZVxuICAgICAgICAgICAgbW5nRXJyb3IgPSBuZXcgTW5nSHR0cEVycm9yKGBIdHRwIEVycm9yIG9jY3VycmVkIGluIGFjdGlvbmAsIGVycm9yLCB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBub3QgZnJvbSBhY3Rpb24sIHNvIHVua25vd24gc291cmNlIG9mIGVycm9yXG4gICAgICAgICAgICBtbmdFcnJvciA9IG5ldyBNbmdJbnRlcm5hbEVycm9yKGVycm9yPy5tZXNzYWdlID8/ICdVbmtub3duIGVycm9yJywge1xuICAgICAgICAgICAgICAgIG5hbWU6IGVycm9yPy5uYW1lID8/ICdVbmtub3duRXJyb3InLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLnJvdXRlci51cmwsXG4gICAgICAgICAgICAgICAgY2F1c2U6IGVycm9yXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGp1c3QgdHJhY2UgaXQsIGFsbG93IHVzZXIgdG8gc2V0IGlmIHRoaXMgaXMgZXJyb3Igb3Igbm90XG4gICAgICAgIHRoaXMubG9nZ2VyLnRyYWNlKG1uZ0Vycm9yKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvck1hcHBlci50b01uZ0Vycm9yKGVycm9yLCBtbmdFcnJvcik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBvciBnZXRzIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMuXG4gICAgICogQHBhcmFtIGluc3RhbmNlSW5pdGlhbFN0YXR1cyBBY3Rpb24gaW5zdGFuY2UgaW5pdGlhbCBzdGF0dXMuXG4gICAgICogQHBhcmFtIHNraXBJbml0aWFsaXphdGlvbkZyb21WaWV3Q29udGFpbmVyIElmIGluaXRpYWxpemF0aW9uIG9mIGluc3RhbmNlIGZyb20gdmlldyBjb250YWluZXIgc2hvdWxkIGJlIHNraXBwZWQuXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0T3JDcmVhdGVJbnN0YW5jZTxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihcbiAgICAgICAgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+IHwgdW5kZWZpbmVkLFxuICAgICAgICBhY3Rpb24/OiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcGFyYW1ldGVycz86IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sXG4gICAgICAgIGluc3RhbmNlSW5pdGlhbFN0YXR1cz86IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLFxuICAgICAgICBza2lwSW5pdGlhbGl6YXRpb25Gcm9tVmlld0NvbnRhaW5lciA9IGZhbHNlXG4gICAgKTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpZiAoIXNraXBJbml0aWFsaXphdGlvbkZyb21WaWV3Q29udGFpbmVyICYmICFpbnN0YW5jZSAmJiBhY3Rpb24/LmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSAmJiBwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXMudmlld0NvbnRhaW5lcj8uZ2V0Um91dGVUcmlnZ2VyZWRBY3Rpb25JbnN0YW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE1uZ0ludGVybmFsRXJyb3IoJ0FjdGlvbiBkZXNjcmlwdG9yIGlzIG5vdCBwcm92aWRlZCwgaW5zdGFuY2UgY2Fubm90IGJlIGNyZWF0ZWQuJywge25hbWU6ICdBY3Rpb25FeGVjdXRvclNlcnZpY2VFcnJvcid9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgaW5zdGFuY2UgaWYgbm9uIHByb3ZpZGVkXG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPihhY3Rpb24sIGluc3RhbmNlSW5pdGlhbFN0YXR1cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tbmdDb21tb25zLmFjdGlvbnNEZWJ1Z0luc3RhbmNlcyAmJiAhdGhpcy5pbnN0YW5jZXMuc29tZShpID0+IGkuaW5zdGFuY2VMb25nTmFtZSA9PT0gaW5zdGFuY2UhLmluc3RhbmNlTG9uZ05hbWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZXMubGVuZ3RoID49IHRoaXMuaW5zdGFuY2VzQnVmZmVyTWF4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgIGlmIChsYXN0SW5zdGFuY2UhLnN0YXRlIDwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBFUlJPUjogTm90IGFsbCBpbnN0YW5jZXMgYXJlIGZpbmlzaGVkISBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSB3aXRoIGRpc21pc3NhbC5gKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEluc3RhbmNlIS5mb3JjZUZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxufVxuIl19