@netgrif/components-core 6.0.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 (2010) hide show
  1. package/LICENSE +132 -0
  2. package/README.md +105 -0
  3. package/bundles/netgrif-components-core.umd.js +32298 -0
  4. package/bundles/netgrif-components-core.umd.js.map +1 -0
  5. package/bundles/netgrif-components-core.umd.min.js +17 -0
  6. package/bundles/netgrif-components-core.umd.min.js.map +1 -0
  7. package/commons/angular-cli-devkit-core-strings.d.ts +93 -0
  8. package/commons/import-to-add.d.ts +5 -0
  9. package/commons/schema.d.ts +277 -0
  10. package/commons/view-class-info.d.ts +22 -0
  11. package/esm2015/assets/i18n/de.json +419 -0
  12. package/esm2015/assets/i18n/en.json +419 -0
  13. package/esm2015/assets/i18n/sk.json +419 -0
  14. package/esm2015/commons/angular-cli-devkit-core-strings.js +157 -0
  15. package/esm2015/commons/import-to-add.js +7 -0
  16. package/esm2015/commons/schema.js +7 -0
  17. package/esm2015/commons/view-class-info.js +52 -0
  18. package/esm2015/lib/admin/public-api.js +9 -0
  19. package/esm2015/lib/admin/role-assignment/abstract-role-assignment.js +77 -0
  20. package/esm2015/lib/admin/role-assignment/services/ProcessList.js +155 -0
  21. package/esm2015/lib/admin/role-assignment/services/role-assignment.service.js +40 -0
  22. package/esm2015/lib/admin/user-invite/abstract-user-invite.component.js +77 -0
  23. package/esm2015/lib/admin/user-invite/services/organization-list.service.js +63 -0
  24. package/esm2015/lib/admin/user-invite/services/user-invite.service.js +31 -0
  25. package/esm2015/lib/allowed-nets/public-api.js +4 -0
  26. package/esm2015/lib/allowed-nets/services/allowed-nets.service.js +74 -0
  27. package/esm2015/lib/allowed-nets/services/base-allowed-nets.service.js +54 -0
  28. package/esm2015/lib/allowed-nets/services/factory/allowed-nets-service-factory.js +129 -0
  29. package/esm2015/lib/authentication/anonymous/anonymous.service.js +63 -0
  30. package/esm2015/lib/authentication/authentication.factory.js +16 -0
  31. package/esm2015/lib/authentication/authentication.module.js +32 -0
  32. package/esm2015/lib/authentication/components/abstract-authentication-overlay.js +50 -0
  33. package/esm2015/lib/authentication/models/credentials.js +2 -0
  34. package/esm2015/lib/authentication/models/public-api.js +5 -0
  35. package/esm2015/lib/authentication/models/transformer.js +2 -0
  36. package/esm2015/lib/authentication/models/user.transformer.js +19 -0
  37. package/esm2015/lib/authentication/public-api.js +14 -0
  38. package/esm2015/lib/authentication/services/anonymous-authentication-interceptor.js +44 -0
  39. package/esm2015/lib/authentication/services/authentication/authentication.service.js +71 -0
  40. package/esm2015/lib/authentication/services/authentication-interceptor.js +52 -0
  41. package/esm2015/lib/authentication/services/authentication-method.service.js +5 -0
  42. package/esm2015/lib/authentication/services/guard/authentication-guard.service.js +39 -0
  43. package/esm2015/lib/authentication/services/methods/basic-authentication/basic-authentication.service.js +48 -0
  44. package/esm2015/lib/authentication/services/methods/null-authentication/null-authentication.service.js +19 -0
  45. package/esm2015/lib/authentication/services/public-api.js +7 -0
  46. package/esm2015/lib/authentication/session/null-storage.js +15 -0
  47. package/esm2015/lib/authentication/session/public-api.js +3 -0
  48. package/esm2015/lib/authentication/session/services/session.service.js +156 -0
  49. package/esm2015/lib/authentication/sign-up/models/user-invitation-request.js +2 -0
  50. package/esm2015/lib/authentication/sign-up/models/user-registration-request.js +2 -0
  51. package/esm2015/lib/authentication/sign-up/public-api.js +8 -0
  52. package/esm2015/lib/authentication/sign-up/services/sign-up.service.js +105 -0
  53. package/esm2015/lib/authentication/sign-up/sign-up.module.js +13 -0
  54. package/esm2015/lib/authorization/authority/authority-guard.service.js +50 -0
  55. package/esm2015/lib/authorization/group/group-guard.service.js +67 -0
  56. package/esm2015/lib/authorization/permission/permission.service.js +116 -0
  57. package/esm2015/lib/authorization/public-api.js +10 -0
  58. package/esm2015/lib/authorization/role/role-guard.service.js +105 -0
  59. package/esm2015/lib/changed-fields/public-api.js +2 -0
  60. package/esm2015/lib/changed-fields/services/changed-fields.service.js +32 -0
  61. package/esm2015/lib/configuration/configuration.service.js +190 -0
  62. package/esm2015/lib/configuration/public-api.js +3 -0
  63. package/esm2015/lib/covalent/covalent.module.js +22 -0
  64. package/esm2015/lib/currency/currency.module.js +23 -0
  65. package/esm2015/lib/dashboard/cards/count-card/abstract-count-card.js +39 -0
  66. package/esm2015/lib/dashboard/cards/custom-card/abstract-custom-card.js +47 -0
  67. package/esm2015/lib/dashboard/cards/iframe-card/abstract-iframe-card.js +14 -0
  68. package/esm2015/lib/dashboard/cards/model/card-grid-element.js +2 -0
  69. package/esm2015/lib/dashboard/cards/model/count-card.js +2 -0
  70. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/aggregation-query.js +2 -0
  71. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/aggregation-result.js +2 -0
  72. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/custom-card.js +2 -0
  73. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/dashboard-event-content.js +2 -0
  74. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/dashboard-multi-data.js +7 -0
  75. package/esm2015/lib/dashboard/cards/model/custom-dashboard-model/dashboard-single-data.js +7 -0
  76. package/esm2015/lib/dashboard/cards/model/dashboard-card-types.js +13 -0
  77. package/esm2015/lib/dashboard/cards/model/dashboard-card.js +2 -0
  78. package/esm2015/lib/dashboard/cards/model/graph-card.js +2 -0
  79. package/esm2015/lib/dashboard/cards/model/iframe-card.js +2 -0
  80. package/esm2015/lib/dashboard/dashboard-content/abstract-dashboard-content.js +19 -0
  81. package/esm2015/lib/dashboard/dashboard-content/dashboard-params.js +2 -0
  82. package/esm2015/lib/dashboard/public-api.js +20 -0
  83. package/esm2015/lib/data-fields/boolean-field/abstract-boolean-field.component.js +40 -0
  84. package/esm2015/lib/data-fields/boolean-field/models/boolean-field.js +24 -0
  85. package/esm2015/lib/data-fields/button-field/abstract-button-field.component.js +62 -0
  86. package/esm2015/lib/data-fields/button-field/models/button-field.js +27 -0
  87. package/esm2015/lib/data-fields/data-field-template/abstract-data-field-template.component.js +101 -0
  88. package/esm2015/lib/data-fields/data-field-template/models/wrapped-boolean.js +6 -0
  89. package/esm2015/lib/data-fields/data-fields.module.js +35 -0
  90. package/esm2015/lib/data-fields/date-field/abstract-date-field.component.js +21 -0
  91. package/esm2015/lib/data-fields/date-field/models/custom-date-adapter.js +11 -0
  92. package/esm2015/lib/data-fields/date-field/models/date-field.js +10 -0
  93. package/esm2015/lib/data-fields/date-time-field/abstract-date-time-field.component.js +21 -0
  94. package/esm2015/lib/data-fields/date-time-field/models/date-time-field.js +10 -0
  95. package/esm2015/lib/data-fields/enumeration-field/abstract-enumeration-field.component.js +17 -0
  96. package/esm2015/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.js +43 -0
  97. package/esm2015/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.js +53 -0
  98. package/esm2015/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.js +37 -0
  99. package/esm2015/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.js +11 -0
  100. package/esm2015/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.js +11 -0
  101. package/esm2015/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.js +40 -0
  102. package/esm2015/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.js +44 -0
  103. package/esm2015/lib/data-fields/enumeration-field/models/enumeration-field.js +59 -0
  104. package/esm2015/lib/data-fields/file-field/abstract-file-field.component.js +390 -0
  105. package/esm2015/lib/data-fields/file-field/abstract-preview-dialog/preview-dialog-data.js +2 -0
  106. package/esm2015/lib/data-fields/file-field/models/file-field-value.js +2 -0
  107. package/esm2015/lib/data-fields/file-field/models/file-field.js +106 -0
  108. package/esm2015/lib/data-fields/file-list-field/abstract-file-list-field.component.js +261 -0
  109. package/esm2015/lib/data-fields/file-list-field/models/file-list-field-value.js +2 -0
  110. package/esm2015/lib/data-fields/file-list-field/models/file-list-field.js +83 -0
  111. package/esm2015/lib/data-fields/filter-field/abstract-filter-field-content.component.js +29 -0
  112. package/esm2015/lib/data-fields/filter-field/abstract-filter-field.component.js +28 -0
  113. package/esm2015/lib/data-fields/filter-field/models/filter-field-injection-token.js +7 -0
  114. package/esm2015/lib/data-fields/filter-field/models/filter-field.js +15 -0
  115. package/esm2015/lib/data-fields/i18n-field/abstract-i18n-field.component.js +19 -0
  116. package/esm2015/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.js +26 -0
  117. package/esm2015/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.js +40 -0
  118. package/esm2015/lib/data-fields/i18n-field/models/i18n-field-value.js +2 -0
  119. package/esm2015/lib/data-fields/i18n-field/models/i18n-field.js +10 -0
  120. package/esm2015/lib/data-fields/models/abstract-data-field-component.js +39 -0
  121. package/esm2015/lib/data-fields/models/abstract-data-field.js +391 -0
  122. package/esm2015/lib/data-fields/models/behavior.js +2 -0
  123. package/esm2015/lib/data-fields/models/boolean-label-enabled-token.js +3 -0
  124. package/esm2015/lib/data-fields/models/changed-fields.js +2 -0
  125. package/esm2015/lib/data-fields/models/component.js +2 -0
  126. package/esm2015/lib/data-fields/models/format-filter.js +2 -0
  127. package/esm2015/lib/data-fields/models/icon.js +6 -0
  128. package/esm2015/lib/data-fields/models/invalid-data-policy-token.js +11 -0
  129. package/esm2015/lib/data-fields/models/layout.js +2 -0
  130. package/esm2015/lib/data-fields/models/material-appearance.js +14 -0
  131. package/esm2015/lib/data-fields/models/properties.js +2 -0
  132. package/esm2015/lib/data-fields/models/template-appearance.js +15 -0
  133. package/esm2015/lib/data-fields/models/validation.js +2 -0
  134. package/esm2015/lib/data-fields/multichoice-field/abstract-multichoice-field.component.js +17 -0
  135. package/esm2015/lib/data-fields/multichoice-field/models/multichoice-field.js +41 -0
  136. package/esm2015/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.js +9 -0
  137. package/esm2015/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.js +9 -0
  138. package/esm2015/lib/data-fields/number-field/abstract-number-errors.component.js +45 -0
  139. package/esm2015/lib/data-fields/number-field/abstract-number-field.component.js +18 -0
  140. package/esm2015/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.js +48 -0
  141. package/esm2015/lib/data-fields/number-field/models/number-field.js +131 -0
  142. package/esm2015/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.js +7 -0
  143. package/esm2015/lib/data-fields/public-api.js +73 -0
  144. package/esm2015/lib/data-fields/task-ref-field/model/task-ref-field.js +7 -0
  145. package/esm2015/lib/data-fields/text-field/abstract-text-errors.component.js +35 -0
  146. package/esm2015/lib/data-fields/text-field/abstract-text-field.component.js +15 -0
  147. package/esm2015/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.js +39 -0
  148. package/esm2015/lib/data-fields/text-field/models/text-area-field.js +13 -0
  149. package/esm2015/lib/data-fields/text-field/models/text-field.js +85 -0
  150. package/esm2015/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.js +17 -0
  151. package/esm2015/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.js +30 -0
  152. package/esm2015/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.js +17 -0
  153. package/esm2015/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.js +40 -0
  154. package/esm2015/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.js +45 -0
  155. package/esm2015/lib/data-fields/time-instance-abstract-field/models/abstract-time-instance-field.js +105 -0
  156. package/esm2015/lib/data-fields/user-field/abstract-user-field.component.js +59 -0
  157. package/esm2015/lib/data-fields/user-field/models/user-field.js +14 -0
  158. package/esm2015/lib/data-fields/user-field/models/user-value.js +36 -0
  159. package/esm2015/lib/dialog/components/alert-dialog/alert-dialog.component.js +38 -0
  160. package/esm2015/lib/dialog/components/alert-dialog/alert-dialog.module.js +28 -0
  161. package/esm2015/lib/dialog/components/confirm-dialog/confirm-dialog.component.js +52 -0
  162. package/esm2015/lib/dialog/components/confirm-dialog/confirm-dialog.module.js +28 -0
  163. package/esm2015/lib/dialog/components/prompt-dialog/prompt-dialog.component.js +42 -0
  164. package/esm2015/lib/dialog/components/prompt-dialog/prompt-dialog.module.js +30 -0
  165. package/esm2015/lib/dialog/dialog.module.js +29 -0
  166. package/esm2015/lib/dialog/models/DialogData.js +2 -0
  167. package/esm2015/lib/dialog/models/DialogResult.js +2 -0
  168. package/esm2015/lib/dialog/models/abstract-dialog.js +21 -0
  169. package/esm2015/lib/dialog/public-api.js +9 -0
  170. package/esm2015/lib/dialog/services/dialog.service.js +82 -0
  171. package/esm2015/lib/event/model/event-constants.js +8 -0
  172. package/esm2015/lib/event/model/event-outcomes/case-outcomes/case-event-outcome.js +2 -0
  173. package/esm2015/lib/event/model/event-outcomes/case-outcomes/create-case-event-outcome.js +2 -0
  174. package/esm2015/lib/event/model/event-outcomes/case-outcomes/delete-case-event-outcome.js +2 -0
  175. package/esm2015/lib/event/model/event-outcomes/data-outcomes/get-data-event-outcome.js +2 -0
  176. package/esm2015/lib/event/model/event-outcomes/data-outcomes/get-data-groups-event-outcome.js +2 -0
  177. package/esm2015/lib/event/model/event-outcomes/data-outcomes/get-data-localised-event-outcome.js +2 -0
  178. package/esm2015/lib/event/model/event-outcomes/data-outcomes/set-data-event-outcome.js +2 -0
  179. package/esm2015/lib/event/model/event-outcomes/petrinet-outcomes/petri-net-event-outcome.js +2 -0
  180. package/esm2015/lib/event/model/event-outcomes/task-outcomes/assign-task-event-outcome.js +2 -0
  181. package/esm2015/lib/event/model/event-outcomes/task-outcomes/cancel-task-event-outcome.js +2 -0
  182. package/esm2015/lib/event/model/event-outcomes/task-outcomes/delegate-task-event-outcome.js +2 -0
  183. package/esm2015/lib/event/model/event-outcomes/task-outcomes/finish-task-event-outcome.js +2 -0
  184. package/esm2015/lib/event/model/event-outcomes/task-outcomes/task-event-outcome.js +2 -0
  185. package/esm2015/lib/event/public-api.js +19 -0
  186. package/esm2015/lib/event/services/event.service.js +57 -0
  187. package/esm2015/lib/event/services/interfaces/changed-fields-map.js +2 -0
  188. package/esm2015/lib/event-queue/model/queued-event.js +31 -0
  189. package/esm2015/lib/event-queue/public-api.js +5 -0
  190. package/esm2015/lib/event-queue/services/event-queue.service.js +63 -0
  191. package/esm2015/lib/filter/filter.repository.js +141 -0
  192. package/esm2015/lib/filter/models/case-search-request-body.js +2 -0
  193. package/esm2015/lib/filter/models/filter-type.js +11 -0
  194. package/esm2015/lib/filter/models/filter.js +56 -0
  195. package/esm2015/lib/filter/models/filters-filter-injection-token.js +9 -0
  196. package/esm2015/lib/filter/models/merge-operator.js +11 -0
  197. package/esm2015/lib/filter/models/merged-filter-params.js +2 -0
  198. package/esm2015/lib/filter/models/merged-filter.js +111 -0
  199. package/esm2015/lib/filter/models/simple-filter.js +91 -0
  200. package/esm2015/lib/filter/models/task-search-request-body.js +2 -0
  201. package/esm2015/lib/filter/models/user-filter-constants.js +39 -0
  202. package/esm2015/lib/filter/public-api.js +18 -0
  203. package/esm2015/lib/filter/user-filters.service.js +337 -0
  204. package/esm2015/lib/forms/email-submission/abstract-email-submission-form.component.js +31 -0
  205. package/esm2015/lib/forms/forgotten-password/abstract-forgotten-password.component.js +32 -0
  206. package/esm2015/lib/forms/has-form.js +2 -0
  207. package/esm2015/lib/forms/login/abstract-login-form.component.js +58 -0
  208. package/esm2015/lib/forms/models/abstract-registration.component.js +94 -0
  209. package/esm2015/lib/forms/models/password.validator.js +21 -0
  210. package/esm2015/lib/forms/public-api.js +7 -0
  211. package/esm2015/lib/forms/registration/abstract-registration-form.component.js +37 -0
  212. package/esm2015/lib/groups/public-api.js +3 -0
  213. package/esm2015/lib/groups/services/active-group.service.js +88 -0
  214. package/esm2015/lib/groups/services/next-group.service.js +104 -0
  215. package/esm2015/lib/header/abstract-header-service.js +394 -0
  216. package/esm2015/lib/header/abstract-header.component.js +159 -0
  217. package/esm2015/lib/header/case-header/case-header.service.js +81 -0
  218. package/esm2015/lib/header/case-header/case-menta-enum.js +9 -0
  219. package/esm2015/lib/header/header-modes/abstract-header-mode.component.js +12 -0
  220. package/esm2015/lib/header/header-modes/edit-mode/abstract-edit-mode.component.js +73 -0
  221. package/esm2015/lib/header/header-modes/loading-mode/abstract-loading-mode.component.js +13 -0
  222. package/esm2015/lib/header/header-modes/search-mode/abstract-search-mode.component.js +86 -0
  223. package/esm2015/lib/header/header-modes/sort-mode/abstract-sort-mode.component.js +15 -0
  224. package/esm2015/lib/header/header-state.js +43 -0
  225. package/esm2015/lib/header/models/default-headers-token.js +3 -0
  226. package/esm2015/lib/header/models/fields-group.js +2 -0
  227. package/esm2015/lib/header/models/header-column.js +22 -0
  228. package/esm2015/lib/header/models/header-mode.js +7 -0
  229. package/esm2015/lib/header/models/header-type.js +7 -0
  230. package/esm2015/lib/header/models/public-api.js +12 -0
  231. package/esm2015/lib/header/models/user-changes/column-header-change.js +2 -0
  232. package/esm2015/lib/header/models/user-changes/edit-change-description.js +2 -0
  233. package/esm2015/lib/header/models/user-changes/header-change-description.js +2 -0
  234. package/esm2015/lib/header/models/user-changes/header-change-type.js +20 -0
  235. package/esm2015/lib/header/models/user-changes/header-change.js +2 -0
  236. package/esm2015/lib/header/models/user-changes/mode-change-description.js +2 -0
  237. package/esm2015/lib/header/models/user-changes/search-change-description.js +2 -0
  238. package/esm2015/lib/header/models/user-changes/sort-change-description.js +2 -0
  239. package/esm2015/lib/header/public-api.js +21 -0
  240. package/esm2015/lib/header/services/overflow.service.js +94 -0
  241. package/esm2015/lib/header/task-header/task-header.service.js +66 -0
  242. package/esm2015/lib/header/task-header/task-meta-enum.js +11 -0
  243. package/esm2015/lib/header/workflow-header/workflow-header.service.js +48 -0
  244. package/esm2015/lib/header/workflow-header/workflow-meta-enum.js +10 -0
  245. package/esm2015/lib/legal/legal-notice/abstract-legal-notice.component.js +16 -0
  246. package/esm2015/lib/legal/public-api.js +2 -0
  247. package/esm2015/lib/logger/models/log-entry.js +61 -0
  248. package/esm2015/lib/logger/public-api.js +10 -0
  249. package/esm2015/lib/logger/publishers/console-log-publisher.js +32 -0
  250. package/esm2015/lib/logger/publishers/local-storage-log-publisher.js +40 -0
  251. package/esm2015/lib/logger/publishers/log-publisher.js +12 -0
  252. package/esm2015/lib/logger/services/log-level.js +10 -0
  253. package/esm2015/lib/logger/services/log-publisher.service.js +59 -0
  254. package/esm2015/lib/logger/services/logger.service.js +77 -0
  255. package/esm2015/lib/material/material.module.js +108 -0
  256. package/esm2015/lib/moment/public-api.js +2 -0
  257. package/esm2015/lib/moment/time-formats.js +26 -0
  258. package/esm2015/lib/navigation/group-navigation-component-resolver/abstract-group-navigation-component-resolver.component.js +36 -0
  259. package/esm2015/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.js +34 -0
  260. package/esm2015/lib/navigation/group-navigation-component-resolver/group-navigation-view-id-segment-factory.js +5 -0
  261. package/esm2015/lib/navigation/model/filter-case-injection-token.js +6 -0
  262. package/esm2015/lib/navigation/model/group-navigation-component-resolver-component-injection-token.js +6 -0
  263. package/esm2015/lib/navigation/model/group-navigation-constants.js +59 -0
  264. package/esm2015/lib/navigation/model/group-navigation-item-label.js +2 -0
  265. package/esm2015/lib/navigation/navigation-drawer/abstract-navigation-drawer.component.js +131 -0
  266. package/esm2015/lib/navigation/navigation-drawer/abstract-navigation-resizable-drawer.component.js +14 -0
  267. package/esm2015/lib/navigation/navigation-rail/abstract-navigation-rail.component.js +32 -0
  268. package/esm2015/lib/navigation/navigation-tree/abstract-navigation-tree.component.js +371 -0
  269. package/esm2015/lib/navigation/public-api.js +19 -0
  270. package/esm2015/lib/navigation/quick-panel/components/abstract-quick-panel.component.js +25 -0
  271. package/esm2015/lib/navigation/quick-panel/components/internal-link/abstract-internal-link.component.js +12 -0
  272. package/esm2015/lib/navigation/quick-panel/components/language-selector/abstract-language-selector.component.js +52 -0
  273. package/esm2015/lib/navigation/quick-panel/components/logout-shortcut/abstract-logout-shortcut.component.js +21 -0
  274. package/esm2015/lib/navigation/quick-panel/components/paper-view.service.js +38 -0
  275. package/esm2015/lib/navigation/quick-panel/public-api.js +8 -0
  276. package/esm2015/lib/navigation/utility/filter-extraction.service.js +87 -0
  277. package/esm2015/lib/navigation/utility/navigation-item-task-utility-methods.js +78 -0
  278. package/esm2015/lib/panel/abstract/featured-value.js +2 -0
  279. package/esm2015/lib/panel/abstract/panel-with-header-binding.js +47 -0
  280. package/esm2015/lib/panel/abstract/panel-with-immediate-data.js +62 -0
  281. package/esm2015/lib/panel/abstract/tabbed-virtual-scroll.component.js +28 -0
  282. package/esm2015/lib/panel/abstract-panel.component.js +44 -0
  283. package/esm2015/lib/panel/case-panel/abstract-case-panel.component.js +88 -0
  284. package/esm2015/lib/panel/immediate/abstract-immediate-filter-text-content.component.js +38 -0
  285. package/esm2015/lib/panel/immediate/abstract-immediate-filter-text.component.js +21 -0
  286. package/esm2015/lib/panel/immediate/model/filter-text-injection-token.js +6 -0
  287. package/esm2015/lib/panel/public-api.js +15 -0
  288. package/esm2015/lib/panel/task-panel/abstract-task-panel.component.js +281 -0
  289. package/esm2015/lib/panel/task-panel/models/disable-functions.js +3 -0
  290. package/esm2015/lib/panel/task-panel-list/abstract-task-list.component.js +89 -0
  291. package/esm2015/lib/panel/task-panel-list/task-panel-data/task-panel-data.js +2 -0
  292. package/esm2015/lib/panel/workflow-panel/abstract-workflow-panel.component.js +103 -0
  293. package/esm2015/lib/process/net.js +101 -0
  294. package/esm2015/lib/process/netRole.js +2 -0
  295. package/esm2015/lib/process/permissions.js +12 -0
  296. package/esm2015/lib/process/petri-net-reference-with-permissions.js +2 -0
  297. package/esm2015/lib/process/process.service.js +301 -0
  298. package/esm2015/lib/process/public-api.js +8 -0
  299. package/esm2015/lib/process/public-process.service.js +29 -0
  300. package/esm2015/lib/process/rolesAndPermissions.js +2 -0
  301. package/esm2015/lib/process/transaction.js +2 -0
  302. package/esm2015/lib/process/transition.js +2 -0
  303. package/esm2015/lib/public/factories/get-net-and-create-case.js +22 -0
  304. package/esm2015/lib/public/factories/public-factory-resolver.js +13 -0
  305. package/esm2015/lib/public/factories/public-search-factory.js +17 -0
  306. package/esm2015/lib/public/public-api.js +5 -0
  307. package/esm2015/lib/public/services/public-url-resolver.service.js +20 -0
  308. package/esm2015/lib/resources/abstract-endpoint/abstract-resource.service.js +79 -0
  309. package/esm2015/lib/resources/abstract-endpoint/count-service.js +2 -0
  310. package/esm2015/lib/resources/engine-endpoint/case-resource.service.js +133 -0
  311. package/esm2015/lib/resources/engine-endpoint/dashboard-resource.service.js +33 -0
  312. package/esm2015/lib/resources/engine-endpoint/petri-net-resource.service.js +161 -0
  313. package/esm2015/lib/resources/engine-endpoint/public/public-case-resource.service.js +46 -0
  314. package/esm2015/lib/resources/engine-endpoint/public/public-petri-net-resource.service.js +108 -0
  315. package/esm2015/lib/resources/engine-endpoint/public/public-task-resource.service.js +224 -0
  316. package/esm2015/lib/resources/engine-endpoint/task-resource.service.js +306 -0
  317. package/esm2015/lib/resources/engine-endpoint/user-resource.service.js +191 -0
  318. package/esm2015/lib/resources/interface/assigned-user-policy.js +2 -0
  319. package/esm2015/lib/resources/interface/author.js +2 -0
  320. package/esm2015/lib/resources/interface/authority.js +2 -0
  321. package/esm2015/lib/resources/interface/case-get-request-body.js +2 -0
  322. package/esm2015/lib/resources/interface/case.js +2 -0
  323. package/esm2015/lib/resources/interface/changed-field-container.js +2 -0
  324. package/esm2015/lib/resources/interface/count.js +2 -0
  325. package/esm2015/lib/resources/interface/create-case-request-body.js +2 -0
  326. package/esm2015/lib/resources/interface/data-group-layout.js +59 -0
  327. package/esm2015/lib/resources/interface/data-groups.js +19 -0
  328. package/esm2015/lib/resources/interface/event-outcome.js +2 -0
  329. package/esm2015/lib/resources/interface/field-alignment.js +10 -0
  330. package/esm2015/lib/resources/interface/fields.js +2 -0
  331. package/esm2015/lib/resources/interface/file-resource.js +2 -0
  332. package/esm2015/lib/resources/interface/group.js +2 -0
  333. package/esm2015/lib/resources/interface/immediate-data.js +2 -0
  334. package/esm2015/lib/resources/interface/link.js +2 -0
  335. package/esm2015/lib/resources/interface/message-resource.js +2 -0
  336. package/esm2015/lib/resources/interface/page.js +2 -0
  337. package/esm2015/lib/resources/interface/pagination.js +2 -0
  338. package/esm2015/lib/resources/interface/petri-net-object-id.js +2 -0
  339. package/esm2015/lib/resources/interface/petri-net-reference.js +2 -0
  340. package/esm2015/lib/resources/interface/petri-net-request-body.js +2 -0
  341. package/esm2015/lib/resources/interface/petri-net.js +2 -0
  342. package/esm2015/lib/resources/interface/preferences.js +2 -0
  343. package/esm2015/lib/resources/interface/process-role.js +2 -0
  344. package/esm2015/lib/resources/interface/response-data.js +2 -0
  345. package/esm2015/lib/resources/interface/task-layout.js +2 -0
  346. package/esm2015/lib/resources/interface/task-reference.js +2 -0
  347. package/esm2015/lib/resources/interface/task-set-data-request-body.js +2 -0
  348. package/esm2015/lib/resources/interface/task.js +2 -0
  349. package/esm2015/lib/resources/interface/user-process-role.js +2 -0
  350. package/esm2015/lib/resources/interface/user-resource-small.js +2 -0
  351. package/esm2015/lib/resources/interface/user-resource.js +2 -0
  352. package/esm2015/lib/resources/public-api.js +46 -0
  353. package/esm2015/lib/resources/resource-provider.service.js +168 -0
  354. package/esm2015/lib/resources/types/nae-date-type.js +5 -0
  355. package/esm2015/lib/routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service.js +36 -0
  356. package/esm2015/lib/routing/public-api.js +7 -0
  357. package/esm2015/lib/routing/redirect-service/redirect.service.js +103 -0
  358. package/esm2015/lib/routing/routing-builder/routing-builder.service.js +190 -0
  359. package/esm2015/lib/routing/view-service/model/view-entry.js +2 -0
  360. package/esm2015/lib/routing/view-service/view.service.js +35 -0
  361. package/esm2015/lib/search/advanced-search-component/abstract-advanced-search.component.js +49 -0
  362. package/esm2015/lib/search/advanced-search-component-initialization-service/advanced-search-component-initialization.service.js +34 -0
  363. package/esm2015/lib/search/category-factory/category-factory.js +94 -0
  364. package/esm2015/lib/search/category-factory/category-resolver.service.js +149 -0
  365. package/esm2015/lib/search/category-factory/category-serialisation-pair.js +2 -0
  366. package/esm2015/lib/search/category-factory/default-categories-factories.js +67 -0
  367. package/esm2015/lib/search/category-factory/default-search-categories.module.js +50 -0
  368. package/esm2015/lib/search/category-factory/optional-dependencies.js +2 -0
  369. package/esm2015/lib/search/category-factory/search-categories-injection-token.js +24 -0
  370. package/esm2015/lib/search/fulltext-search-component/abstract-fulltext-search.component.js +17 -0
  371. package/esm2015/lib/search/header-search-service/header-search.service.js +226 -0
  372. package/esm2015/lib/search/models/base-filter-injection-token.js +6 -0
  373. package/esm2015/lib/search/models/base-filter.js +2 -0
  374. package/esm2015/lib/search/models/boolean-operator.js +10 -0
  375. package/esm2015/lib/search/models/category/autocomplete-category.js +129 -0
  376. package/esm2015/lib/search/models/category/autocomplete-options.js +2 -0
  377. package/esm2015/lib/search/models/category/case/case-author.js +21 -0
  378. package/esm2015/lib/search/models/category/case/case-creation-date-time.js +43 -0
  379. package/esm2015/lib/search/models/category/case/case-creation-date.js +43 -0
  380. package/esm2015/lib/search/models/category/case/case-dataset.js +397 -0
  381. package/esm2015/lib/search/models/category/case/case-net-attribute-autocomplete-category.js +23 -0
  382. package/esm2015/lib/search/models/category/case/case-process.js +73 -0
  383. package/esm2015/lib/search/models/category/case/case-role.js +24 -0
  384. package/esm2015/lib/search/models/category/case/case-search.enum.js +15 -0
  385. package/esm2015/lib/search/models/category/case/case-simple-dataset.js +135 -0
  386. package/esm2015/lib/search/models/category/case/case-string-id.js +27 -0
  387. package/esm2015/lib/search/models/category/case/case-task.js +24 -0
  388. package/esm2015/lib/search/models/category/case/case-title.js +29 -0
  389. package/esm2015/lib/search/models/category/case/case-visual-id.js +23 -0
  390. package/esm2015/lib/search/models/category/categories.js +24 -0
  391. package/esm2015/lib/search/models/category/category.js +524 -0
  392. package/esm2015/lib/search/models/category/name-id-pair.js +2 -0
  393. package/esm2015/lib/search/models/category/net-attribute-autocomplete-category.js +59 -0
  394. package/esm2015/lib/search/models/category/net-attribute-pair.js +2 -0
  395. package/esm2015/lib/search/models/category/no-configuration-autocomplete-category.js +36 -0
  396. package/esm2015/lib/search/models/category/no-configuration-category.js +39 -0
  397. package/esm2015/lib/search/models/category/no-configuration-user-autocomplete-category.js +28 -0
  398. package/esm2015/lib/search/models/category/search-autocomplete-option.js +2 -0
  399. package/esm2015/lib/search/models/category/search-input-type.js +14 -0
  400. package/esm2015/lib/search/models/category/task/task-assignee.js +21 -0
  401. package/esm2015/lib/search/models/category/task/task-net-attribute-autocomplete-category.js +23 -0
  402. package/esm2015/lib/search/models/category/task/task-process.js +50 -0
  403. package/esm2015/lib/search/models/category/task/task-role.js +23 -0
  404. package/esm2015/lib/search/models/category/task/task-task.js +23 -0
  405. package/esm2015/lib/search/models/category/user-autocomplete.js +59 -0
  406. package/esm2015/lib/search/models/component-configuration/search-component-configuration-injection-token.js +8 -0
  407. package/esm2015/lib/search/models/component-configuration/search-component-configuration.js +2 -0
  408. package/esm2015/lib/search/models/component-configuration/search-mode.js +9 -0
  409. package/esm2015/lib/search/models/configuration-input.js +52 -0
  410. package/esm2015/lib/search/models/datafield-map-key.js +69 -0
  411. package/esm2015/lib/search/models/escape-result.js +2 -0
  412. package/esm2015/lib/search/models/operator/equals-date-time.js +26 -0
  413. package/esm2015/lib/search/models/operator/equals-date.js +26 -0
  414. package/esm2015/lib/search/models/operator/equals.js +21 -0
  415. package/esm2015/lib/search/models/operator/in-range-date-time.js +43 -0
  416. package/esm2015/lib/search/models/operator/in-range-date.js +42 -0
  417. package/esm2015/lib/search/models/operator/in-range.js +22 -0
  418. package/esm2015/lib/search/models/operator/is-null.js +69 -0
  419. package/esm2015/lib/search/models/operator/less-than-date-time.js +27 -0
  420. package/esm2015/lib/search/models/operator/less-than-date.js +27 -0
  421. package/esm2015/lib/search/models/operator/less-than-equal-date-time.js +27 -0
  422. package/esm2015/lib/search/models/operator/less-than-equal-date.js +26 -0
  423. package/esm2015/lib/search/models/operator/less-than-equal.js +17 -0
  424. package/esm2015/lib/search/models/operator/less-than.js +17 -0
  425. package/esm2015/lib/search/models/operator/like.js +29 -0
  426. package/esm2015/lib/search/models/operator/more-than-date-time.js +29 -0
  427. package/esm2015/lib/search/models/operator/more-than-date.js +29 -0
  428. package/esm2015/lib/search/models/operator/more-than-equal-date-time.js +27 -0
  429. package/esm2015/lib/search/models/operator/more-than-equal-date.js +27 -0
  430. package/esm2015/lib/search/models/operator/more-than-equal.js +17 -0
  431. package/esm2015/lib/search/models/operator/more-than.js +17 -0
  432. package/esm2015/lib/search/models/operator/not-equals-date-time.js +24 -0
  433. package/esm2015/lib/search/models/operator/not-equals-date.js +27 -0
  434. package/esm2015/lib/search/models/operator/not-equals.js +30 -0
  435. package/esm2015/lib/search/models/operator/operator.js +124 -0
  436. package/esm2015/lib/search/models/operator/operators.js +31 -0
  437. package/esm2015/lib/search/models/operator/substring.js +27 -0
  438. package/esm2015/lib/search/models/operator-template-part-type.js +15 -0
  439. package/esm2015/lib/search/models/operator-template-part.js +31 -0
  440. package/esm2015/lib/search/models/persistance/filter-metadata-allowed-nets.js +2 -0
  441. package/esm2015/lib/search/models/persistance/filter-metadata.js +2 -0
  442. package/esm2015/lib/search/models/persistance/filter-text-segment.js +2 -0
  443. package/esm2015/lib/search/models/persistance/generator-metadata.js +2 -0
  444. package/esm2015/lib/search/models/persistance/saved-filter-metadata.js +2 -0
  445. package/esm2015/lib/search/models/predicate/clause-predicate.js +78 -0
  446. package/esm2015/lib/search/models/predicate/editable-clause-predicate-with-generators.js +47 -0
  447. package/esm2015/lib/search/models/predicate/editable-clause-predicate.js +116 -0
  448. package/esm2015/lib/search/models/predicate/editable-elementary-predicate.js +20 -0
  449. package/esm2015/lib/search/models/predicate/editable-predicate-with-generator.js +37 -0
  450. package/esm2015/lib/search/models/predicate/editable-predicate.js +22 -0
  451. package/esm2015/lib/search/models/predicate/elementary-predicate.js +14 -0
  452. package/esm2015/lib/search/models/predicate/predicate-with-generator.js +95 -0
  453. package/esm2015/lib/search/models/predicate/predicate.js +90 -0
  454. package/esm2015/lib/search/models/predicate-removal-event.js +2 -0
  455. package/esm2015/lib/search/models/query/query.js +72 -0
  456. package/esm2015/lib/search/models/search-index.js +76 -0
  457. package/esm2015/lib/search/models/wrap-result.js +2 -0
  458. package/esm2015/lib/search/operator-service/operator-resolver.service.js +109 -0
  459. package/esm2015/lib/search/operator-service/operator.service.js +39 -0
  460. package/esm2015/lib/search/public-api.js +107 -0
  461. package/esm2015/lib/search/search-clause-component/abstract-search-clause.component.js +52 -0
  462. package/esm2015/lib/search/search-component/abstract-search.component.js +171 -0
  463. package/esm2015/lib/search/search-configuration-input-component/abstract-search-configuration-input.component.js +75 -0
  464. package/esm2015/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +36 -0
  465. package/esm2015/lib/search/search-operand-input-component/abstract-search-operand-input.component.js +97 -0
  466. package/esm2015/lib/search/search-predicate-component/abstract-search-predicate.component.js +144 -0
  467. package/esm2015/lib/search/search-service/search.service.js +306 -0
  468. package/esm2015/lib/side-menu/content-components/filter-selector/abstract-filter-selector.component.js +163 -0
  469. package/esm2015/lib/side-menu/content-components/filter-selector/filter-selector-list-item/abstract-filter-selector-list-item.component.js +22 -0
  470. package/esm2015/lib/side-menu/content-components/filter-selector/model/filter-selector-injection-data.js +2 -0
  471. package/esm2015/lib/side-menu/content-components/filter-selector/model/filtered-array.js +32 -0
  472. package/esm2015/lib/side-menu/content-components/import-net/abstract-import-net.component.js +123 -0
  473. package/esm2015/lib/side-menu/content-components/injection-tokens.js +8 -0
  474. package/esm2015/lib/side-menu/content-components/load-filter/abstract-load-filter.component.js +42 -0
  475. package/esm2015/lib/side-menu/content-components/load-filter/model/load-filter-injection-data.js +2 -0
  476. package/esm2015/lib/side-menu/content-components/new-case/abstract-new-case.component.js +230 -0
  477. package/esm2015/lib/side-menu/content-components/new-case/model/new-case-injection-data.js +2 -0
  478. package/esm2015/lib/side-menu/content-components/option-selector/abstract-option-selector.component.js +28 -0
  479. package/esm2015/lib/side-menu/content-components/option-selector/model/option-selector-injection-data.js +2 -0
  480. package/esm2015/lib/side-menu/content-components/public-api.js +20 -0
  481. package/esm2015/lib/side-menu/content-components/save-filter/abstract-save-filter.component.js +38 -0
  482. package/esm2015/lib/side-menu/content-components/save-filter/model/save-filter-injection-data.js +2 -0
  483. package/esm2015/lib/side-menu/content-components/user-assign/abstract-user-assign.component.js +60 -0
  484. package/esm2015/lib/side-menu/content-components/user-assign/model/user-list-injected-data.js +2 -0
  485. package/esm2015/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.js +102 -0
  486. package/esm2015/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.js +13 -0
  487. package/esm2015/lib/side-menu/models/portal-wrapper.js +13 -0
  488. package/esm2015/lib/side-menu/models/side-menu-control.js +36 -0
  489. package/esm2015/lib/side-menu/models/side-menu-event.js +2 -0
  490. package/esm2015/lib/side-menu/models/side-menu-injection-data.js +2 -0
  491. package/esm2015/lib/side-menu/models/side-menu-ref.js +16 -0
  492. package/esm2015/lib/side-menu/models/side-menu-size.js +7 -0
  493. package/esm2015/lib/side-menu/net-version-visible-injection-token.js +4 -0
  494. package/esm2015/lib/side-menu/public-api.js +15 -0
  495. package/esm2015/lib/side-menu/services/side-menu.service.js +86 -0
  496. package/esm2015/lib/side-menu/side-menu-container/abstract-side-menu-container.component.js +34 -0
  497. package/esm2015/lib/side-menu/side-menu-injection-token.js +3 -0
  498. package/esm2015/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.js +26 -0
  499. package/esm2015/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.js +26 -0
  500. package/esm2015/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.js +26 -0
  501. package/esm2015/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.js +26 -0
  502. package/esm2015/lib/snack-bar/models/abstract-snack-bar.js +18 -0
  503. package/esm2015/lib/snack-bar/models/injection-token-snackbar.js +4 -0
  504. package/esm2015/lib/snack-bar/models/snack-bar-enums.js +12 -0
  505. package/esm2015/lib/snack-bar/models/snack-bar-injection-data.js +2 -0
  506. package/esm2015/lib/snack-bar/public-api.js +15 -0
  507. package/esm2015/lib/snack-bar/services/snack-bar.service.js +92 -0
  508. package/esm2015/lib/snack-bar/snack-bar.module.js +33 -0
  509. package/esm2015/lib/tabs/classes/opened-tab.js +48 -0
  510. package/esm2015/lib/tabs/classes/tab-view.js +262 -0
  511. package/esm2015/lib/tabs/interfaces.js +2 -0
  512. package/esm2015/lib/tabs/public-api.js +6 -0
  513. package/esm2015/lib/tabs/tab-creation-detector/abstract-tab-creation-detector.component.js +17 -0
  514. package/esm2015/lib/tabs/tab-data-injection-token/tab-data-injection-token.js +8 -0
  515. package/esm2015/lib/tabs/tab-view/abstract-tab-view.component.js +67 -0
  516. package/esm2015/lib/task/interfaces/task-operations.js +2 -0
  517. package/esm2015/lib/task/models/null-task-operations.js +26 -0
  518. package/esm2015/lib/task/models/subject-task-operations.js +58 -0
  519. package/esm2015/lib/task/models/task-operations-injection-token.js +3 -0
  520. package/esm2015/lib/task/models/task-set-data-request-context.js +2 -0
  521. package/esm2015/lib/task/public-api.js +19 -0
  522. package/esm2015/lib/task/services/assign-policy.service.js +175 -0
  523. package/esm2015/lib/task/services/assign-task.service.js +191 -0
  524. package/esm2015/lib/task/services/cancel-task.service.js +189 -0
  525. package/esm2015/lib/task/services/data-focus-policy.service.js +36 -0
  526. package/esm2015/lib/task/services/delegate-task.service.js +185 -0
  527. package/esm2015/lib/task/services/finish-policy.service.js +79 -0
  528. package/esm2015/lib/task/services/finish-task.service.js +207 -0
  529. package/esm2015/lib/task/services/selected-case.service.js +38 -0
  530. package/esm2015/lib/task/services/task-data.service.js +538 -0
  531. package/esm2015/lib/task/services/task-handling-service.js +57 -0
  532. package/esm2015/lib/task/services/task-request-state.service.js +113 -0
  533. package/esm2015/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.js +39 -0
  534. package/esm2015/lib/task-content/model/async-rendering-configuration-injection-token.js +8 -0
  535. package/esm2015/lib/task-content/model/async-rendering-configuration.js +2 -0
  536. package/esm2015/lib/task-content/model/datafield-grid-layout-element.js +2 -0
  537. package/esm2015/lib/task-content/model/field-type-resource.js +23 -0
  538. package/esm2015/lib/task-content/model/policy.js +31 -0
  539. package/esm2015/lib/task-content/model/resource-interface.js +2 -0
  540. package/esm2015/lib/task-content/model/split-data-group.js +2 -0
  541. package/esm2015/lib/task-content/model/subgrid.js +235 -0
  542. package/esm2015/lib/task-content/model/task-content-element-type.js +19 -0
  543. package/esm2015/lib/task-content/model/task-event-notification.js +15 -0
  544. package/esm2015/lib/task-content/model/task-event.js +10 -0
  545. package/esm2015/lib/task-content/public-api.js +21 -0
  546. package/esm2015/lib/task-content/services/field-converter.service.js +348 -0
  547. package/esm2015/lib/task-content/services/single-task-content.service.js +72 -0
  548. package/esm2015/lib/task-content/services/task-content.service.js +266 -0
  549. package/esm2015/lib/task-content/services/task-event.service.js +45 -0
  550. package/esm2015/lib/task-content/services/unlimited-task-content.service.js +64 -0
  551. package/esm2015/lib/task-content/task-content/abstract-task-content.component.js +656 -0
  552. package/esm2015/lib/toolbar/abstract-toolbar.component.js +22 -0
  553. package/esm2015/lib/toolbar/public-api.js +2 -0
  554. package/esm2015/lib/translate/language.service.js +85 -0
  555. package/esm2015/lib/translate/public-api.js +3 -0
  556. package/esm2015/lib/translate/translate-interceptor.js +23 -0
  557. package/esm2015/lib/translate/translate-lib.module.js +38 -0
  558. package/esm2015/lib/user/components/user-card/abstract-user-card.component.js +44 -0
  559. package/esm2015/lib/user/models/iuser.js +2 -0
  560. package/esm2015/lib/user/models/public-api.js +6 -0
  561. package/esm2015/lib/user/models/user.js +37 -0
  562. package/esm2015/lib/user/models/view-id-injection-tokens.js +4 -0
  563. package/esm2015/lib/user/profile/abstract-profile.component.js +29 -0
  564. package/esm2015/lib/user/public-api.js +12 -0
  565. package/esm2015/lib/user/services/user-comparator.service.js +26 -0
  566. package/esm2015/lib/user/services/user-list.service.js +186 -0
  567. package/esm2015/lib/user/services/user-preference.service.js +152 -0
  568. package/esm2015/lib/user/services/user.service.js +203 -0
  569. package/esm2015/lib/user/services/view-id.service.js +30 -0
  570. package/esm2015/lib/utility/array-to-observable.js +10 -0
  571. package/esm2015/lib/utility/call-chain/after-action.js +12 -0
  572. package/esm2015/lib/utility/call-chain/call-chain.service.js +34 -0
  573. package/esm2015/lib/utility/clear-time-information.js +11 -0
  574. package/esm2015/lib/utility/destroy-subscription.js +10 -0
  575. package/esm2015/lib/utility/get-field.js +48 -0
  576. package/esm2015/lib/utility/get-immediate-data.js +9 -0
  577. package/esm2015/lib/utility/grid-layout/grid-layout-helper.js +76 -0
  578. package/esm2015/lib/utility/grid-layout/model/grid-element-with-item.js +2 -0
  579. package/esm2015/lib/utility/grid-layout/model/grid-element.js +2 -0
  580. package/esm2015/lib/utility/grid-layout/model/grid-filler.js +50 -0
  581. package/esm2015/lib/utility/incrementing-counter.js +21 -0
  582. package/esm2015/lib/utility/loading-emitter.js +19 -0
  583. package/esm2015/lib/utility/loading-with-filter-emitter.js +30 -0
  584. package/esm2015/lib/utility/navigation-item-task-filter-factory.js +11 -0
  585. package/esm2015/lib/utility/navigation-item-task-search-categories-factory.js +35 -0
  586. package/esm2015/lib/utility/of-void.js +12 -0
  587. package/esm2015/lib/utility/pagination/load-all-pages.js +46 -0
  588. package/esm2015/lib/utility/pagination/page-has-content.js +8 -0
  589. package/esm2015/lib/utility/process-message-response.js +17 -0
  590. package/esm2015/lib/utility/public-api.js +47 -0
  591. package/esm2015/lib/utility/refresh-tree.js +9 -0
  592. package/esm2015/lib/utility/result-with-after-actions.js +27 -0
  593. package/esm2015/lib/utility/service/case-list-font-color.service.js +45 -0
  594. package/esm2015/lib/utility/service/spinner-overlay.service.js +48 -0
  595. package/esm2015/lib/utility/stop-propagation.js +5 -0
  596. package/esm2015/lib/utility/tests/mocks/mock-authentication-method-service.js +12 -0
  597. package/esm2015/lib/utility/tests/mocks/mock-authentication.service.js +18 -0
  598. package/esm2015/lib/utility/tests/mocks/mock-endpoint.js +44 -0
  599. package/esm2015/lib/utility/tests/mocks/mock-sign-up.service.js +29 -0
  600. package/esm2015/lib/utility/tests/mocks/mock-user-autocomplete-value.js +14 -0
  601. package/esm2015/lib/utility/tests/mocks/mock-user-preference.service.js +42 -0
  602. package/esm2015/lib/utility/tests/mocks/mock-user-resource.service.js +48 -0
  603. package/esm2015/lib/utility/tests/search-category-mock-dependencies.js +19 -0
  604. package/esm2015/lib/utility/tests/test-config.js +424 -0
  605. package/esm2015/lib/utility/tests/test-factory-methods.js +21 -0
  606. package/esm2015/lib/utility/tests/test-mock-dependencies.module.js +31 -0
  607. package/esm2015/lib/utility/tests/test-view-service.js +24 -0
  608. package/esm2015/lib/utility/tests/utility/configure-category.js +14 -0
  609. package/esm2015/lib/utility/tests/utility/create-mock-case-outcome.js +16 -0
  610. package/esm2015/lib/utility/tests/utility/create-mock-case.js +36 -0
  611. package/esm2015/lib/utility/tests/utility/create-mock-datagroup.js +35 -0
  612. package/esm2015/lib/utility/tests/utility/create-mock-field.js +41 -0
  613. package/esm2015/lib/utility/tests/utility/create-mock-get-data-outcome.js +15 -0
  614. package/esm2015/lib/utility/tests/utility/create-mock-immediate-data.js +15 -0
  615. package/esm2015/lib/utility/tests/utility/create-mock-net.js +27 -0
  616. package/esm2015/lib/utility/tests/utility/create-mock-page.js +23 -0
  617. package/esm2015/lib/utility/tests/utility/create-mock-petri-net-outcome.js +14 -0
  618. package/esm2015/lib/utility/tests/utility/create-mock-set-data-outcome.js +19 -0
  619. package/esm2015/lib/utility/tests/utility/create-mock-task-outcome.js +18 -0
  620. package/esm2015/lib/utility/tests/utility/create-mock-task.js +34 -0
  621. package/esm2015/lib/view/abstract/page-load-request-context.js +25 -0
  622. package/esm2015/lib/view/abstract/sortable-view.js +62 -0
  623. package/esm2015/lib/view/abstract/view-with-headers.js +20 -0
  624. package/esm2015/lib/view/case-view/abstract-case-view.js +40 -0
  625. package/esm2015/lib/view/case-view/components/case-list/abstract-case-list.component.js +82 -0
  626. package/esm2015/lib/view/case-view/models/case-page-load-request-result.js +2 -0
  627. package/esm2015/lib/view/case-view/models/case-view-params.js +2 -0
  628. package/esm2015/lib/view/case-view/models/new-case-configuration-injection-token.js +7 -0
  629. package/esm2015/lib/view/case-view/models/new-case-configuration.js +2 -0
  630. package/esm2015/lib/view/case-view/service/case-view-service.js +273 -0
  631. package/esm2015/lib/view/case-view/tabbed-case-view.js +66 -0
  632. package/esm2015/lib/view/public-api.js +42 -0
  633. package/esm2015/lib/view/task-view/abstract-task-view.js +13 -0
  634. package/esm2015/lib/view/task-view/models/injected-tabbed-task-view-data.js +2 -0
  635. package/esm2015/lib/view/task-view/models/injection-token-task-endpoint.js +6 -0
  636. package/esm2015/lib/view/task-view/models/task-endpoint.js +9 -0
  637. package/esm2015/lib/view/task-view/models/task-page-load-request-result.js +2 -0
  638. package/esm2015/lib/view/task-view/models/task-view-configuration-injection-token.js +20 -0
  639. package/esm2015/lib/view/task-view/models/task-view-configuration.js +2 -0
  640. package/esm2015/lib/view/task-view/models/task-view-params.js +2 -0
  641. package/esm2015/lib/view/task-view/service/task-view.service.js +292 -0
  642. package/esm2015/lib/view/task-view/tabbed-task-view.js +22 -0
  643. package/esm2015/lib/view/tree-case-view/model/tree-petriflow-identifiers.js +43 -0
  644. package/esm2015/lib/view/tree-case-view/tree-case-view.service.js +17 -0
  645. package/esm2015/lib/view/tree-case-view/tree-component/abstract-tree.component.js +141 -0
  646. package/esm2015/lib/view/tree-case-view/tree-component/add-child-node/abstract-add-child-node.component.js +14 -0
  647. package/esm2015/lib/view/tree-case-view/tree-component/case-tree.service.js +843 -0
  648. package/esm2015/lib/view/tree-case-view/tree-component/model/case-tree-node.js +104 -0
  649. package/esm2015/lib/view/tree-case-view/tree-component/model/case-tree-path.js +2 -0
  650. package/esm2015/lib/view/tree-case-view/tree-component/model/expansion-tree.js +2 -0
  651. package/esm2015/lib/view/tree-case-view/tree-component/remove-node/abstract-remove-node.component.js +14 -0
  652. package/esm2015/lib/view/tree-case-view/tree-task-content/abstract-tree-task-content.component.js +55 -0
  653. package/esm2015/lib/view/tree-case-view/tree-task-content/tree-task-content.service.js +288 -0
  654. package/esm2015/lib/view/workflow-view/abstract-workflow-view.component.js +68 -0
  655. package/esm2015/lib/view/workflow-view/models/injection-token-workflow-service.js +10 -0
  656. package/esm2015/lib/view/workflow-view/workflow-view.service.js +211 -0
  657. package/esm2015/netgrif-components-core.js +20 -0
  658. package/esm2015/public-api.js +45 -0
  659. package/esm5/assets/i18n/de.json +419 -0
  660. package/esm5/assets/i18n/en.json +419 -0
  661. package/esm5/assets/i18n/sk.json +419 -0
  662. package/esm5/commons/angular-cli-devkit-core-strings.js +157 -0
  663. package/esm5/commons/import-to-add.js +9 -0
  664. package/esm5/commons/schema.js +7 -0
  665. package/esm5/commons/view-class-info.js +57 -0
  666. package/esm5/lib/admin/public-api.js +9 -0
  667. package/esm5/lib/admin/role-assignment/abstract-role-assignment.js +84 -0
  668. package/esm5/lib/admin/role-assignment/services/ProcessList.js +179 -0
  669. package/esm5/lib/admin/role-assignment/services/role-assignment.service.js +50 -0
  670. package/esm5/lib/admin/user-invite/abstract-user-invite.component.js +84 -0
  671. package/esm5/lib/admin/user-invite/services/organization-list.service.js +82 -0
  672. package/esm5/lib/admin/user-invite/services/user-invite.service.js +37 -0
  673. package/esm5/lib/allowed-nets/public-api.js +4 -0
  674. package/esm5/lib/allowed-nets/services/allowed-nets.service.js +94 -0
  675. package/esm5/lib/allowed-nets/services/base-allowed-nets.service.js +65 -0
  676. package/esm5/lib/allowed-nets/services/factory/allowed-nets-service-factory.js +132 -0
  677. package/esm5/lib/authentication/anonymous/anonymous.service.js +73 -0
  678. package/esm5/lib/authentication/authentication.factory.js +16 -0
  679. package/esm5/lib/authentication/authentication.module.js +36 -0
  680. package/esm5/lib/authentication/components/abstract-authentication-overlay.js +53 -0
  681. package/esm5/lib/authentication/models/credentials.js +2 -0
  682. package/esm5/lib/authentication/models/public-api.js +5 -0
  683. package/esm5/lib/authentication/models/transformer.js +2 -0
  684. package/esm5/lib/authentication/models/user.transformer.js +23 -0
  685. package/esm5/lib/authentication/public-api.js +14 -0
  686. package/esm5/lib/authentication/services/anonymous-authentication-interceptor.js +47 -0
  687. package/esm5/lib/authentication/services/authentication/authentication.service.js +84 -0
  688. package/esm5/lib/authentication/services/authentication-interceptor.js +55 -0
  689. package/esm5/lib/authentication/services/authentication-method.service.js +7 -0
  690. package/esm5/lib/authentication/services/guard/authentication-guard.service.js +41 -0
  691. package/esm5/lib/authentication/services/methods/basic-authentication/basic-authentication.service.js +54 -0
  692. package/esm5/lib/authentication/services/methods/null-authentication/null-authentication.service.js +23 -0
  693. package/esm5/lib/authentication/services/public-api.js +7 -0
  694. package/esm5/lib/authentication/session/null-storage.js +19 -0
  695. package/esm5/lib/authentication/session/public-api.js +3 -0
  696. package/esm5/lib/authentication/session/services/session.service.js +193 -0
  697. package/esm5/lib/authentication/sign-up/models/user-invitation-request.js +2 -0
  698. package/esm5/lib/authentication/sign-up/models/user-registration-request.js +2 -0
  699. package/esm5/lib/authentication/sign-up/public-api.js +8 -0
  700. package/esm5/lib/authentication/sign-up/services/sign-up.service.js +107 -0
  701. package/esm5/lib/authentication/sign-up/sign-up.module.js +17 -0
  702. package/esm5/lib/authorization/authority/authority-guard.service.js +52 -0
  703. package/esm5/lib/authorization/group/group-guard.service.js +69 -0
  704. package/esm5/lib/authorization/permission/permission.service.js +126 -0
  705. package/esm5/lib/authorization/public-api.js +10 -0
  706. package/esm5/lib/authorization/role/role-guard.service.js +108 -0
  707. package/esm5/lib/changed-fields/public-api.js +2 -0
  708. package/esm5/lib/changed-fields/services/changed-fields.service.js +38 -0
  709. package/esm5/lib/configuration/configuration.service.js +208 -0
  710. package/esm5/lib/configuration/public-api.js +3 -0
  711. package/esm5/lib/covalent/covalent.module.js +26 -0
  712. package/esm5/lib/currency/currency.module.js +25 -0
  713. package/esm5/lib/dashboard/cards/count-card/abstract-count-card.js +42 -0
  714. package/esm5/lib/dashboard/cards/custom-card/abstract-custom-card.js +50 -0
  715. package/esm5/lib/dashboard/cards/iframe-card/abstract-iframe-card.js +16 -0
  716. package/esm5/lib/dashboard/cards/model/card-grid-element.js +2 -0
  717. package/esm5/lib/dashboard/cards/model/count-card.js +2 -0
  718. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/aggregation-query.js +2 -0
  719. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/aggregation-result.js +2 -0
  720. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/custom-card.js +2 -0
  721. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/dashboard-event-content.js +2 -0
  722. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/dashboard-multi-data.js +9 -0
  723. package/esm5/lib/dashboard/cards/model/custom-dashboard-model/dashboard-single-data.js +9 -0
  724. package/esm5/lib/dashboard/cards/model/dashboard-card-types.js +13 -0
  725. package/esm5/lib/dashboard/cards/model/dashboard-card.js +2 -0
  726. package/esm5/lib/dashboard/cards/model/graph-card.js +2 -0
  727. package/esm5/lib/dashboard/cards/model/iframe-card.js +2 -0
  728. package/esm5/lib/dashboard/dashboard-content/abstract-dashboard-content.js +21 -0
  729. package/esm5/lib/dashboard/dashboard-content/dashboard-params.js +2 -0
  730. package/esm5/lib/dashboard/public-api.js +20 -0
  731. package/esm5/lib/data-fields/boolean-field/abstract-boolean-field.component.js +45 -0
  732. package/esm5/lib/data-fields/boolean-field/models/boolean-field.js +29 -0
  733. package/esm5/lib/data-fields/button-field/abstract-button-field.component.js +68 -0
  734. package/esm5/lib/data-fields/button-field/models/button-field.js +37 -0
  735. package/esm5/lib/data-fields/data-field-template/abstract-data-field-template.component.js +111 -0
  736. package/esm5/lib/data-fields/data-field-template/models/wrapped-boolean.js +10 -0
  737. package/esm5/lib/data-fields/data-fields.module.js +39 -0
  738. package/esm5/lib/data-fields/date-field/abstract-date-field.component.js +26 -0
  739. package/esm5/lib/data-fields/date-field/models/custom-date-adapter.js +18 -0
  740. package/esm5/lib/data-fields/date-field/models/date-field.js +14 -0
  741. package/esm5/lib/data-fields/date-time-field/abstract-date-time-field.component.js +26 -0
  742. package/esm5/lib/data-fields/date-time-field/models/date-time-field.js +14 -0
  743. package/esm5/lib/data-fields/enumeration-field/abstract-enumeration-field.component.js +22 -0
  744. package/esm5/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.js +47 -0
  745. package/esm5/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.js +57 -0
  746. package/esm5/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.js +39 -0
  747. package/esm5/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.js +15 -0
  748. package/esm5/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.js +15 -0
  749. package/esm5/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.js +43 -0
  750. package/esm5/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.js +63 -0
  751. package/esm5/lib/data-fields/enumeration-field/models/enumeration-field.js +79 -0
  752. package/esm5/lib/data-fields/file-field/abstract-file-field.component.js +405 -0
  753. package/esm5/lib/data-fields/file-field/abstract-preview-dialog/preview-dialog-data.js +2 -0
  754. package/esm5/lib/data-fields/file-field/models/file-field-value.js +2 -0
  755. package/esm5/lib/data-fields/file-field/models/file-field.js +128 -0
  756. package/esm5/lib/data-fields/file-list-field/abstract-file-list-field.component.js +278 -0
  757. package/esm5/lib/data-fields/file-list-field/models/file-list-field-value.js +2 -0
  758. package/esm5/lib/data-fields/file-list-field/models/file-list-field.js +105 -0
  759. package/esm5/lib/data-fields/filter-field/abstract-filter-field-content.component.js +36 -0
  760. package/esm5/lib/data-fields/filter-field/abstract-filter-field.component.js +33 -0
  761. package/esm5/lib/data-fields/filter-field/models/filter-field-injection-token.js +7 -0
  762. package/esm5/lib/data-fields/filter-field/models/filter-field.js +28 -0
  763. package/esm5/lib/data-fields/i18n-field/abstract-i18n-field.component.js +23 -0
  764. package/esm5/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.js +30 -0
  765. package/esm5/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.js +42 -0
  766. package/esm5/lib/data-fields/i18n-field/models/i18n-field-value.js +2 -0
  767. package/esm5/lib/data-fields/i18n-field/models/i18n-field.js +16 -0
  768. package/esm5/lib/data-fields/models/abstract-data-field-component.js +45 -0
  769. package/esm5/lib/data-fields/models/abstract-data-field.js +501 -0
  770. package/esm5/lib/data-fields/models/behavior.js +2 -0
  771. package/esm5/lib/data-fields/models/boolean-label-enabled-token.js +3 -0
  772. package/esm5/lib/data-fields/models/changed-fields.js +2 -0
  773. package/esm5/lib/data-fields/models/component.js +2 -0
  774. package/esm5/lib/data-fields/models/format-filter.js +2 -0
  775. package/esm5/lib/data-fields/models/icon.js +6 -0
  776. package/esm5/lib/data-fields/models/invalid-data-policy-token.js +11 -0
  777. package/esm5/lib/data-fields/models/layout.js +2 -0
  778. package/esm5/lib/data-fields/models/material-appearance.js +14 -0
  779. package/esm5/lib/data-fields/models/properties.js +2 -0
  780. package/esm5/lib/data-fields/models/template-appearance.js +15 -0
  781. package/esm5/lib/data-fields/models/validation.js +2 -0
  782. package/esm5/lib/data-fields/multichoice-field/abstract-multichoice-field.component.js +22 -0
  783. package/esm5/lib/data-fields/multichoice-field/models/multichoice-field.js +60 -0
  784. package/esm5/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.js +13 -0
  785. package/esm5/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.js +13 -0
  786. package/esm5/lib/data-fields/number-field/abstract-number-errors.component.js +49 -0
  787. package/esm5/lib/data-fields/number-field/abstract-number-field.component.js +23 -0
  788. package/esm5/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.js +54 -0
  789. package/esm5/lib/data-fields/number-field/models/number-field.js +137 -0
  790. package/esm5/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.js +11 -0
  791. package/esm5/lib/data-fields/public-api.js +73 -0
  792. package/esm5/lib/data-fields/task-ref-field/model/task-ref-field.js +11 -0
  793. package/esm5/lib/data-fields/text-field/abstract-text-errors.component.js +37 -0
  794. package/esm5/lib/data-fields/text-field/abstract-text-field.component.js +19 -0
  795. package/esm5/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.js +45 -0
  796. package/esm5/lib/data-fields/text-field/models/text-area-field.js +19 -0
  797. package/esm5/lib/data-fields/text-field/models/text-field.js +96 -0
  798. package/esm5/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.js +22 -0
  799. package/esm5/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.js +35 -0
  800. package/esm5/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.js +22 -0
  801. package/esm5/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.js +46 -0
  802. package/esm5/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.js +52 -0
  803. package/esm5/lib/data-fields/time-instance-abstract-field/models/abstract-time-instance-field.js +110 -0
  804. package/esm5/lib/data-fields/user-field/abstract-user-field.component.js +65 -0
  805. package/esm5/lib/data-fields/user-field/models/user-field.js +23 -0
  806. package/esm5/lib/data-fields/user-field/models/user-value.js +58 -0
  807. package/esm5/lib/dialog/components/alert-dialog/alert-dialog.component.js +43 -0
  808. package/esm5/lib/dialog/components/alert-dialog/alert-dialog.module.js +32 -0
  809. package/esm5/lib/dialog/components/confirm-dialog/confirm-dialog.component.js +57 -0
  810. package/esm5/lib/dialog/components/confirm-dialog/confirm-dialog.module.js +32 -0
  811. package/esm5/lib/dialog/components/prompt-dialog/prompt-dialog.component.js +47 -0
  812. package/esm5/lib/dialog/components/prompt-dialog/prompt-dialog.module.js +34 -0
  813. package/esm5/lib/dialog/dialog.module.js +33 -0
  814. package/esm5/lib/dialog/models/DialogData.js +2 -0
  815. package/esm5/lib/dialog/models/DialogResult.js +2 -0
  816. package/esm5/lib/dialog/models/abstract-dialog.js +23 -0
  817. package/esm5/lib/dialog/public-api.js +9 -0
  818. package/esm5/lib/dialog/services/dialog.service.js +84 -0
  819. package/esm5/lib/event/model/event-constants.js +8 -0
  820. package/esm5/lib/event/model/event-outcomes/case-outcomes/case-event-outcome.js +2 -0
  821. package/esm5/lib/event/model/event-outcomes/case-outcomes/create-case-event-outcome.js +2 -0
  822. package/esm5/lib/event/model/event-outcomes/case-outcomes/delete-case-event-outcome.js +2 -0
  823. package/esm5/lib/event/model/event-outcomes/data-outcomes/get-data-event-outcome.js +2 -0
  824. package/esm5/lib/event/model/event-outcomes/data-outcomes/get-data-groups-event-outcome.js +2 -0
  825. package/esm5/lib/event/model/event-outcomes/data-outcomes/get-data-localised-event-outcome.js +2 -0
  826. package/esm5/lib/event/model/event-outcomes/data-outcomes/set-data-event-outcome.js +2 -0
  827. package/esm5/lib/event/model/event-outcomes/petrinet-outcomes/petri-net-event-outcome.js +2 -0
  828. package/esm5/lib/event/model/event-outcomes/task-outcomes/assign-task-event-outcome.js +2 -0
  829. package/esm5/lib/event/model/event-outcomes/task-outcomes/cancel-task-event-outcome.js +2 -0
  830. package/esm5/lib/event/model/event-outcomes/task-outcomes/delegate-task-event-outcome.js +2 -0
  831. package/esm5/lib/event/model/event-outcomes/task-outcomes/finish-task-event-outcome.js +2 -0
  832. package/esm5/lib/event/model/event-outcomes/task-outcomes/task-event-outcome.js +2 -0
  833. package/esm5/lib/event/public-api.js +19 -0
  834. package/esm5/lib/event/services/event.service.js +60 -0
  835. package/esm5/lib/event/services/interfaces/changed-fields-map.js +2 -0
  836. package/esm5/lib/event-queue/model/queued-event.js +34 -0
  837. package/esm5/lib/event-queue/public-api.js +5 -0
  838. package/esm5/lib/event-queue/services/event-queue.service.js +66 -0
  839. package/esm5/lib/filter/filter.repository.js +145 -0
  840. package/esm5/lib/filter/models/case-search-request-body.js +2 -0
  841. package/esm5/lib/filter/models/filter-type.js +11 -0
  842. package/esm5/lib/filter/models/filter.js +71 -0
  843. package/esm5/lib/filter/models/filters-filter-injection-token.js +9 -0
  844. package/esm5/lib/filter/models/merge-operator.js +11 -0
  845. package/esm5/lib/filter/models/merged-filter-params.js +2 -0
  846. package/esm5/lib/filter/models/merged-filter.js +120 -0
  847. package/esm5/lib/filter/models/simple-filter.js +96 -0
  848. package/esm5/lib/filter/models/task-search-request-body.js +2 -0
  849. package/esm5/lib/filter/models/user-filter-constants.js +39 -0
  850. package/esm5/lib/filter/public-api.js +18 -0
  851. package/esm5/lib/filter/user-filters.service.js +357 -0
  852. package/esm5/lib/forms/email-submission/abstract-email-submission-form.component.js +33 -0
  853. package/esm5/lib/forms/forgotten-password/abstract-forgotten-password.component.js +37 -0
  854. package/esm5/lib/forms/has-form.js +2 -0
  855. package/esm5/lib/forms/login/abstract-login-form.component.js +61 -0
  856. package/esm5/lib/forms/models/abstract-registration.component.js +106 -0
  857. package/esm5/lib/forms/models/password.validator.js +21 -0
  858. package/esm5/lib/forms/public-api.js +7 -0
  859. package/esm5/lib/forms/registration/abstract-registration-form.component.js +42 -0
  860. package/esm5/lib/groups/public-api.js +3 -0
  861. package/esm5/lib/groups/services/active-group.service.js +107 -0
  862. package/esm5/lib/groups/services/next-group.service.js +135 -0
  863. package/esm5/lib/header/abstract-header-service.js +485 -0
  864. package/esm5/lib/header/abstract-header.component.js +171 -0
  865. package/esm5/lib/header/case-header/case-header.service.js +86 -0
  866. package/esm5/lib/header/case-header/case-menta-enum.js +9 -0
  867. package/esm5/lib/header/header-modes/abstract-header-mode.component.js +14 -0
  868. package/esm5/lib/header/header-modes/edit-mode/abstract-edit-mode.component.js +81 -0
  869. package/esm5/lib/header/header-modes/loading-mode/abstract-loading-mode.component.js +17 -0
  870. package/esm5/lib/header/header-modes/search-mode/abstract-search-mode.component.js +94 -0
  871. package/esm5/lib/header/header-modes/sort-mode/abstract-sort-mode.component.js +19 -0
  872. package/esm5/lib/header/header-state.js +53 -0
  873. package/esm5/lib/header/models/default-headers-token.js +3 -0
  874. package/esm5/lib/header/models/fields-group.js +2 -0
  875. package/esm5/lib/header/models/header-column.js +29 -0
  876. package/esm5/lib/header/models/header-mode.js +7 -0
  877. package/esm5/lib/header/models/header-type.js +7 -0
  878. package/esm5/lib/header/models/public-api.js +12 -0
  879. package/esm5/lib/header/models/user-changes/column-header-change.js +2 -0
  880. package/esm5/lib/header/models/user-changes/edit-change-description.js +2 -0
  881. package/esm5/lib/header/models/user-changes/header-change-description.js +2 -0
  882. package/esm5/lib/header/models/user-changes/header-change-type.js +20 -0
  883. package/esm5/lib/header/models/user-changes/header-change.js +2 -0
  884. package/esm5/lib/header/models/user-changes/mode-change-description.js +2 -0
  885. package/esm5/lib/header/models/user-changes/search-change-description.js +2 -0
  886. package/esm5/lib/header/models/user-changes/sort-change-description.js +2 -0
  887. package/esm5/lib/header/public-api.js +21 -0
  888. package/esm5/lib/header/services/overflow.service.js +112 -0
  889. package/esm5/lib/header/task-header/task-header.service.js +71 -0
  890. package/esm5/lib/header/task-header/task-meta-enum.js +11 -0
  891. package/esm5/lib/header/workflow-header/workflow-header.service.js +53 -0
  892. package/esm5/lib/header/workflow-header/workflow-meta-enum.js +10 -0
  893. package/esm5/lib/legal/legal-notice/abstract-legal-notice.component.js +26 -0
  894. package/esm5/lib/legal/public-api.js +2 -0
  895. package/esm5/lib/logger/models/log-entry.js +68 -0
  896. package/esm5/lib/logger/public-api.js +10 -0
  897. package/esm5/lib/logger/publishers/console-log-publisher.js +36 -0
  898. package/esm5/lib/logger/publishers/local-storage-log-publisher.js +45 -0
  899. package/esm5/lib/logger/publishers/log-publisher.js +15 -0
  900. package/esm5/lib/logger/services/log-level.js +10 -0
  901. package/esm5/lib/logger/services/log-publisher.service.js +66 -0
  902. package/esm5/lib/logger/services/logger.service.js +107 -0
  903. package/esm5/lib/material/material.module.js +112 -0
  904. package/esm5/lib/moment/public-api.js +2 -0
  905. package/esm5/lib/moment/time-formats.js +26 -0
  906. package/esm5/lib/navigation/group-navigation-component-resolver/abstract-group-navigation-component-resolver.component.js +40 -0
  907. package/esm5/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.js +37 -0
  908. package/esm5/lib/navigation/group-navigation-component-resolver/group-navigation-view-id-segment-factory.js +5 -0
  909. package/esm5/lib/navigation/model/filter-case-injection-token.js +6 -0
  910. package/esm5/lib/navigation/model/group-navigation-component-resolver-component-injection-token.js +6 -0
  911. package/esm5/lib/navigation/model/group-navigation-constants.js +59 -0
  912. package/esm5/lib/navigation/model/group-navigation-item-label.js +2 -0
  913. package/esm5/lib/navigation/navigation-drawer/abstract-navigation-drawer.component.js +142 -0
  914. package/esm5/lib/navigation/navigation-drawer/abstract-navigation-resizable-drawer.component.js +17 -0
  915. package/esm5/lib/navigation/navigation-rail/abstract-navigation-rail.component.js +38 -0
  916. package/esm5/lib/navigation/navigation-tree/abstract-navigation-tree.component.js +415 -0
  917. package/esm5/lib/navigation/public-api.js +19 -0
  918. package/esm5/lib/navigation/quick-panel/components/abstract-quick-panel.component.js +30 -0
  919. package/esm5/lib/navigation/quick-panel/components/internal-link/abstract-internal-link.component.js +14 -0
  920. package/esm5/lib/navigation/quick-panel/components/language-selector/abstract-language-selector.component.js +59 -0
  921. package/esm5/lib/navigation/quick-panel/components/logout-shortcut/abstract-logout-shortcut.component.js +24 -0
  922. package/esm5/lib/navigation/quick-panel/components/paper-view.service.js +44 -0
  923. package/esm5/lib/navigation/quick-panel/public-api.js +8 -0
  924. package/esm5/lib/navigation/utility/filter-extraction.service.js +89 -0
  925. package/esm5/lib/navigation/utility/navigation-item-task-utility-methods.js +78 -0
  926. package/esm5/lib/panel/abstract/featured-value.js +2 -0
  927. package/esm5/lib/panel/abstract/panel-with-header-binding.js +50 -0
  928. package/esm5/lib/panel/abstract/panel-with-immediate-data.js +67 -0
  929. package/esm5/lib/panel/abstract/tabbed-virtual-scroll.component.js +35 -0
  930. package/esm5/lib/panel/abstract-panel.component.js +46 -0
  931. package/esm5/lib/panel/case-panel/abstract-case-panel.component.js +94 -0
  932. package/esm5/lib/panel/immediate/abstract-immediate-filter-text-content.component.js +45 -0
  933. package/esm5/lib/panel/immediate/abstract-immediate-filter-text.component.js +23 -0
  934. package/esm5/lib/panel/immediate/model/filter-text-injection-token.js +6 -0
  935. package/esm5/lib/panel/public-api.js +15 -0
  936. package/esm5/lib/panel/task-panel/abstract-task-panel.component.js +302 -0
  937. package/esm5/lib/panel/task-panel/models/disable-functions.js +3 -0
  938. package/esm5/lib/panel/task-panel-list/abstract-task-list.component.js +99 -0
  939. package/esm5/lib/panel/task-panel-list/task-panel-data/task-panel-data.js +2 -0
  940. package/esm5/lib/panel/workflow-panel/abstract-workflow-panel.component.js +109 -0
  941. package/esm5/lib/process/net.js +155 -0
  942. package/esm5/lib/process/netRole.js +2 -0
  943. package/esm5/lib/process/permissions.js +12 -0
  944. package/esm5/lib/process/petri-net-reference-with-permissions.js +2 -0
  945. package/esm5/lib/process/process.service.js +325 -0
  946. package/esm5/lib/process/public-api.js +8 -0
  947. package/esm5/lib/process/public-process.service.js +34 -0
  948. package/esm5/lib/process/rolesAndPermissions.js +2 -0
  949. package/esm5/lib/process/transaction.js +2 -0
  950. package/esm5/lib/process/transition.js +2 -0
  951. package/esm5/lib/public/factories/get-net-and-create-case.js +22 -0
  952. package/esm5/lib/public/factories/public-factory-resolver.js +13 -0
  953. package/esm5/lib/public/factories/public-search-factory.js +17 -0
  954. package/esm5/lib/public/public-api.js +5 -0
  955. package/esm5/lib/public/services/public-url-resolver.service.js +26 -0
  956. package/esm5/lib/resources/abstract-endpoint/abstract-resource.service.js +85 -0
  957. package/esm5/lib/resources/abstract-endpoint/count-service.js +2 -0
  958. package/esm5/lib/resources/engine-endpoint/case-resource.service.js +149 -0
  959. package/esm5/lib/resources/engine-endpoint/dashboard-resource.service.js +37 -0
  960. package/esm5/lib/resources/engine-endpoint/petri-net-resource.service.js +174 -0
  961. package/esm5/lib/resources/engine-endpoint/public/public-case-resource.service.js +52 -0
  962. package/esm5/lib/resources/engine-endpoint/public/public-petri-net-resource.service.js +120 -0
  963. package/esm5/lib/resources/engine-endpoint/public/public-task-resource.service.js +238 -0
  964. package/esm5/lib/resources/engine-endpoint/task-resource.service.js +327 -0
  965. package/esm5/lib/resources/engine-endpoint/user-resource.service.js +210 -0
  966. package/esm5/lib/resources/interface/assigned-user-policy.js +2 -0
  967. package/esm5/lib/resources/interface/author.js +2 -0
  968. package/esm5/lib/resources/interface/authority.js +2 -0
  969. package/esm5/lib/resources/interface/case-get-request-body.js +2 -0
  970. package/esm5/lib/resources/interface/case.js +2 -0
  971. package/esm5/lib/resources/interface/changed-field-container.js +2 -0
  972. package/esm5/lib/resources/interface/count.js +2 -0
  973. package/esm5/lib/resources/interface/create-case-request-body.js +2 -0
  974. package/esm5/lib/resources/interface/data-group-layout.js +59 -0
  975. package/esm5/lib/resources/interface/data-groups.js +19 -0
  976. package/esm5/lib/resources/interface/event-outcome.js +2 -0
  977. package/esm5/lib/resources/interface/field-alignment.js +10 -0
  978. package/esm5/lib/resources/interface/fields.js +2 -0
  979. package/esm5/lib/resources/interface/file-resource.js +2 -0
  980. package/esm5/lib/resources/interface/group.js +2 -0
  981. package/esm5/lib/resources/interface/immediate-data.js +2 -0
  982. package/esm5/lib/resources/interface/link.js +2 -0
  983. package/esm5/lib/resources/interface/message-resource.js +2 -0
  984. package/esm5/lib/resources/interface/page.js +2 -0
  985. package/esm5/lib/resources/interface/pagination.js +2 -0
  986. package/esm5/lib/resources/interface/petri-net-object-id.js +2 -0
  987. package/esm5/lib/resources/interface/petri-net-reference.js +2 -0
  988. package/esm5/lib/resources/interface/petri-net-request-body.js +2 -0
  989. package/esm5/lib/resources/interface/petri-net.js +2 -0
  990. package/esm5/lib/resources/interface/preferences.js +2 -0
  991. package/esm5/lib/resources/interface/process-role.js +2 -0
  992. package/esm5/lib/resources/interface/response-data.js +2 -0
  993. package/esm5/lib/resources/interface/task-layout.js +2 -0
  994. package/esm5/lib/resources/interface/task-reference.js +2 -0
  995. package/esm5/lib/resources/interface/task-set-data-request-body.js +2 -0
  996. package/esm5/lib/resources/interface/task.js +2 -0
  997. package/esm5/lib/resources/interface/user-process-role.js +2 -0
  998. package/esm5/lib/resources/interface/user-resource-small.js +2 -0
  999. package/esm5/lib/resources/interface/user-resource.js +2 -0
  1000. package/esm5/lib/resources/public-api.js +46 -0
  1001. package/esm5/lib/resources/resource-provider.service.js +174 -0
  1002. package/esm5/lib/resources/types/nae-date-type.js +5 -0
  1003. package/esm5/lib/routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service.js +42 -0
  1004. package/esm5/lib/routing/public-api.js +7 -0
  1005. package/esm5/lib/routing/redirect-service/redirect.service.js +130 -0
  1006. package/esm5/lib/routing/routing-builder/routing-builder.service.js +207 -0
  1007. package/esm5/lib/routing/view-service/model/view-entry.js +2 -0
  1008. package/esm5/lib/routing/view-service/view.service.js +38 -0
  1009. package/esm5/lib/search/advanced-search-component/abstract-advanced-search.component.js +64 -0
  1010. package/esm5/lib/search/advanced-search-component-initialization-service/advanced-search-component-initialization.service.js +40 -0
  1011. package/esm5/lib/search/category-factory/category-factory.js +96 -0
  1012. package/esm5/lib/search/category-factory/category-resolver.service.js +152 -0
  1013. package/esm5/lib/search/category-factory/category-serialisation-pair.js +2 -0
  1014. package/esm5/lib/search/category-factory/default-categories-factories.js +67 -0
  1015. package/esm5/lib/search/category-factory/default-search-categories.module.js +54 -0
  1016. package/esm5/lib/search/category-factory/optional-dependencies.js +2 -0
  1017. package/esm5/lib/search/category-factory/search-categories-injection-token.js +24 -0
  1018. package/esm5/lib/search/fulltext-search-component/abstract-fulltext-search.component.js +20 -0
  1019. package/esm5/lib/search/header-search-service/header-search.service.js +250 -0
  1020. package/esm5/lib/search/models/base-filter-injection-token.js +6 -0
  1021. package/esm5/lib/search/models/base-filter.js +2 -0
  1022. package/esm5/lib/search/models/boolean-operator.js +10 -0
  1023. package/esm5/lib/search/models/category/autocomplete-category.js +155 -0
  1024. package/esm5/lib/search/models/category/autocomplete-options.js +2 -0
  1025. package/esm5/lib/search/models/category/case/case-author.js +29 -0
  1026. package/esm5/lib/search/models/category/case/case-creation-date-time.js +51 -0
  1027. package/esm5/lib/search/models/category/case/case-creation-date.js +51 -0
  1028. package/esm5/lib/search/models/category/case/case-dataset.js +444 -0
  1029. package/esm5/lib/search/models/category/case/case-net-attribute-autocomplete-category.js +28 -0
  1030. package/esm5/lib/search/models/category/case/case-process.js +84 -0
  1031. package/esm5/lib/search/models/category/case/case-role.js +32 -0
  1032. package/esm5/lib/search/models/category/case/case-search.enum.js +15 -0
  1033. package/esm5/lib/search/models/category/case/case-simple-dataset.js +153 -0
  1034. package/esm5/lib/search/models/category/case/case-string-id.js +35 -0
  1035. package/esm5/lib/search/models/category/case/case-task.js +32 -0
  1036. package/esm5/lib/search/models/category/case/case-title.js +37 -0
  1037. package/esm5/lib/search/models/category/case/case-visual-id.js +31 -0
  1038. package/esm5/lib/search/models/category/categories.js +24 -0
  1039. package/esm5/lib/search/models/category/category.js +585 -0
  1040. package/esm5/lib/search/models/category/name-id-pair.js +2 -0
  1041. package/esm5/lib/search/models/category/net-attribute-autocomplete-category.js +66 -0
  1042. package/esm5/lib/search/models/category/net-attribute-pair.js +2 -0
  1043. package/esm5/lib/search/models/category/no-configuration-autocomplete-category.js +48 -0
  1044. package/esm5/lib/search/models/category/no-configuration-category.js +51 -0
  1045. package/esm5/lib/search/models/category/no-configuration-user-autocomplete-category.js +33 -0
  1046. package/esm5/lib/search/models/category/search-autocomplete-option.js +2 -0
  1047. package/esm5/lib/search/models/category/search-input-type.js +14 -0
  1048. package/esm5/lib/search/models/category/task/task-assignee.js +29 -0
  1049. package/esm5/lib/search/models/category/task/task-net-attribute-autocomplete-category.js +28 -0
  1050. package/esm5/lib/search/models/category/task/task-process.js +61 -0
  1051. package/esm5/lib/search/models/category/task/task-role.js +31 -0
  1052. package/esm5/lib/search/models/category/task/task-task.js +31 -0
  1053. package/esm5/lib/search/models/category/user-autocomplete.js +64 -0
  1054. package/esm5/lib/search/models/component-configuration/search-component-configuration-injection-token.js +8 -0
  1055. package/esm5/lib/search/models/component-configuration/search-component-configuration.js +2 -0
  1056. package/esm5/lib/search/models/component-configuration/search-mode.js +9 -0
  1057. package/esm5/lib/search/models/configuration-input.js +71 -0
  1058. package/esm5/lib/search/models/datafield-map-key.js +91 -0
  1059. package/esm5/lib/search/models/escape-result.js +2 -0
  1060. package/esm5/lib/search/models/operator/equals-date-time.js +31 -0
  1061. package/esm5/lib/search/models/operator/equals-date.js +31 -0
  1062. package/esm5/lib/search/models/operator/equals.js +25 -0
  1063. package/esm5/lib/search/models/operator/in-range-date-time.js +47 -0
  1064. package/esm5/lib/search/models/operator/in-range-date.js +46 -0
  1065. package/esm5/lib/search/models/operator/in-range.js +26 -0
  1066. package/esm5/lib/search/models/operator/is-null.js +75 -0
  1067. package/esm5/lib/search/models/operator/less-than-date-time.js +32 -0
  1068. package/esm5/lib/search/models/operator/less-than-date.js +32 -0
  1069. package/esm5/lib/search/models/operator/less-than-equal-date-time.js +32 -0
  1070. package/esm5/lib/search/models/operator/less-than-equal-date.js +31 -0
  1071. package/esm5/lib/search/models/operator/less-than-equal.js +21 -0
  1072. package/esm5/lib/search/models/operator/less-than.js +21 -0
  1073. package/esm5/lib/search/models/operator/like.js +33 -0
  1074. package/esm5/lib/search/models/operator/more-than-date-time.js +34 -0
  1075. package/esm5/lib/search/models/operator/more-than-date.js +34 -0
  1076. package/esm5/lib/search/models/operator/more-than-equal-date-time.js +32 -0
  1077. package/esm5/lib/search/models/operator/more-than-equal-date.js +32 -0
  1078. package/esm5/lib/search/models/operator/more-than-equal.js +21 -0
  1079. package/esm5/lib/search/models/operator/more-than.js +21 -0
  1080. package/esm5/lib/search/models/operator/not-equals-date-time.js +29 -0
  1081. package/esm5/lib/search/models/operator/not-equals-date.js +32 -0
  1082. package/esm5/lib/search/models/operator/not-equals.js +35 -0
  1083. package/esm5/lib/search/models/operator/operator.js +134 -0
  1084. package/esm5/lib/search/models/operator/operators.js +31 -0
  1085. package/esm5/lib/search/models/operator/substring.js +31 -0
  1086. package/esm5/lib/search/models/operator-template-part-type.js +15 -0
  1087. package/esm5/lib/search/models/operator-template-part.js +42 -0
  1088. package/esm5/lib/search/models/persistance/filter-metadata-allowed-nets.js +2 -0
  1089. package/esm5/lib/search/models/persistance/filter-metadata.js +2 -0
  1090. package/esm5/lib/search/models/persistance/filter-text-segment.js +2 -0
  1091. package/esm5/lib/search/models/persistance/generator-metadata.js +2 -0
  1092. package/esm5/lib/search/models/persistance/saved-filter-metadata.js +2 -0
  1093. package/esm5/lib/search/models/predicate/clause-predicate.js +95 -0
  1094. package/esm5/lib/search/models/predicate/editable-clause-predicate-with-generators.js +79 -0
  1095. package/esm5/lib/search/models/predicate/editable-clause-predicate.js +146 -0
  1096. package/esm5/lib/search/models/predicate/editable-elementary-predicate.js +30 -0
  1097. package/esm5/lib/search/models/predicate/editable-predicate-with-generator.js +47 -0
  1098. package/esm5/lib/search/models/predicate/editable-predicate.js +32 -0
  1099. package/esm5/lib/search/models/predicate/elementary-predicate.js +24 -0
  1100. package/esm5/lib/search/models/predicate/predicate-with-generator.js +114 -0
  1101. package/esm5/lib/search/models/predicate/predicate.js +110 -0
  1102. package/esm5/lib/search/models/predicate-removal-event.js +2 -0
  1103. package/esm5/lib/search/models/query/query.js +83 -0
  1104. package/esm5/lib/search/models/search-index.js +76 -0
  1105. package/esm5/lib/search/models/wrap-result.js +2 -0
  1106. package/esm5/lib/search/operator-service/operator-resolver.service.js +113 -0
  1107. package/esm5/lib/search/operator-service/operator.service.js +41 -0
  1108. package/esm5/lib/search/public-api.js +107 -0
  1109. package/esm5/lib/search/search-clause-component/abstract-search-clause.component.js +67 -0
  1110. package/esm5/lib/search/search-component/abstract-search.component.js +201 -0
  1111. package/esm5/lib/search/search-configuration-input-component/abstract-search-configuration-input.component.js +82 -0
  1112. package/esm5/lib/search/search-keyword-resolver-service/search-index-resolver.service.js +40 -0
  1113. package/esm5/lib/search/search-operand-input-component/abstract-search-operand-input.component.js +113 -0
  1114. package/esm5/lib/search/search-predicate-component/abstract-search-predicate.component.js +162 -0
  1115. package/esm5/lib/search/search-service/search.service.js +405 -0
  1116. package/esm5/lib/side-menu/content-components/filter-selector/abstract-filter-selector.component.js +166 -0
  1117. package/esm5/lib/side-menu/content-components/filter-selector/filter-selector-list-item/abstract-filter-selector-list-item.component.js +26 -0
  1118. package/esm5/lib/side-menu/content-components/filter-selector/model/filter-selector-injection-data.js +2 -0
  1119. package/esm5/lib/side-menu/content-components/filter-selector/model/filtered-array.js +37 -0
  1120. package/esm5/lib/side-menu/content-components/import-net/abstract-import-net.component.js +152 -0
  1121. package/esm5/lib/side-menu/content-components/injection-tokens.js +8 -0
  1122. package/esm5/lib/side-menu/content-components/load-filter/abstract-load-filter.component.js +47 -0
  1123. package/esm5/lib/side-menu/content-components/load-filter/model/load-filter-injection-data.js +2 -0
  1124. package/esm5/lib/side-menu/content-components/new-case/abstract-new-case.component.js +264 -0
  1125. package/esm5/lib/side-menu/content-components/new-case/model/new-case-injection-data.js +2 -0
  1126. package/esm5/lib/side-menu/content-components/option-selector/abstract-option-selector.component.js +31 -0
  1127. package/esm5/lib/side-menu/content-components/option-selector/model/option-selector-injection-data.js +2 -0
  1128. package/esm5/lib/side-menu/content-components/public-api.js +20 -0
  1129. package/esm5/lib/side-menu/content-components/save-filter/abstract-save-filter.component.js +43 -0
  1130. package/esm5/lib/side-menu/content-components/save-filter/model/save-filter-injection-data.js +2 -0
  1131. package/esm5/lib/side-menu/content-components/user-assign/abstract-user-assign.component.js +74 -0
  1132. package/esm5/lib/side-menu/content-components/user-assign/model/user-list-injected-data.js +2 -0
  1133. package/esm5/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.js +113 -0
  1134. package/esm5/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.js +15 -0
  1135. package/esm5/lib/side-menu/models/portal-wrapper.js +23 -0
  1136. package/esm5/lib/side-menu/models/side-menu-control.js +47 -0
  1137. package/esm5/lib/side-menu/models/side-menu-event.js +2 -0
  1138. package/esm5/lib/side-menu/models/side-menu-injection-data.js +2 -0
  1139. package/esm5/lib/side-menu/models/side-menu-ref.js +26 -0
  1140. package/esm5/lib/side-menu/models/side-menu-size.js +7 -0
  1141. package/esm5/lib/side-menu/net-version-visible-injection-token.js +4 -0
  1142. package/esm5/lib/side-menu/public-api.js +15 -0
  1143. package/esm5/lib/side-menu/services/side-menu.service.js +90 -0
  1144. package/esm5/lib/side-menu/side-menu-container/abstract-side-menu-container.component.js +36 -0
  1145. package/esm5/lib/side-menu/side-menu-injection-token.js +3 -0
  1146. package/esm5/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.js +31 -0
  1147. package/esm5/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.js +31 -0
  1148. package/esm5/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.js +31 -0
  1149. package/esm5/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.js +31 -0
  1150. package/esm5/lib/snack-bar/models/abstract-snack-bar.js +20 -0
  1151. package/esm5/lib/snack-bar/models/injection-token-snackbar.js +4 -0
  1152. package/esm5/lib/snack-bar/models/snack-bar-enums.js +12 -0
  1153. package/esm5/lib/snack-bar/models/snack-bar-injection-data.js +2 -0
  1154. package/esm5/lib/snack-bar/public-api.js +15 -0
  1155. package/esm5/lib/snack-bar/services/snack-bar.service.js +105 -0
  1156. package/esm5/lib/snack-bar/snack-bar.module.js +37 -0
  1157. package/esm5/lib/tabs/classes/opened-tab.js +50 -0
  1158. package/esm5/lib/tabs/classes/tab-view.js +283 -0
  1159. package/esm5/lib/tabs/interfaces.js +2 -0
  1160. package/esm5/lib/tabs/public-api.js +6 -0
  1161. package/esm5/lib/tabs/tab-creation-detector/abstract-tab-creation-detector.component.js +21 -0
  1162. package/esm5/lib/tabs/tab-data-injection-token/tab-data-injection-token.js +8 -0
  1163. package/esm5/lib/tabs/tab-view/abstract-tab-view.component.js +71 -0
  1164. package/esm5/lib/task/interfaces/task-operations.js +2 -0
  1165. package/esm5/lib/task/models/null-task-operations.js +30 -0
  1166. package/esm5/lib/task/models/subject-task-operations.js +76 -0
  1167. package/esm5/lib/task/models/task-operations-injection-token.js +3 -0
  1168. package/esm5/lib/task/models/task-set-data-request-context.js +2 -0
  1169. package/esm5/lib/task/public-api.js +19 -0
  1170. package/esm5/lib/task/services/assign-policy.service.js +189 -0
  1171. package/esm5/lib/task/services/assign-task.service.js +200 -0
  1172. package/esm5/lib/task/services/cancel-task.service.js +198 -0
  1173. package/esm5/lib/task/services/data-focus-policy.service.js +40 -0
  1174. package/esm5/lib/task/services/delegate-task.service.js +196 -0
  1175. package/esm5/lib/task/services/finish-policy.service.js +85 -0
  1176. package/esm5/lib/task/services/finish-task.service.js +215 -0
  1177. package/esm5/lib/task/services/selected-case.service.js +48 -0
  1178. package/esm5/lib/task/services/task-data.service.js +597 -0
  1179. package/esm5/lib/task/services/task-handling-service.js +68 -0
  1180. package/esm5/lib/task/services/task-request-state.service.js +118 -0
  1181. package/esm5/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.js +41 -0
  1182. package/esm5/lib/task-content/model/async-rendering-configuration-injection-token.js +8 -0
  1183. package/esm5/lib/task-content/model/async-rendering-configuration.js +2 -0
  1184. package/esm5/lib/task-content/model/datafield-grid-layout-element.js +2 -0
  1185. package/esm5/lib/task-content/model/field-type-resource.js +23 -0
  1186. package/esm5/lib/task-content/model/policy.js +31 -0
  1187. package/esm5/lib/task-content/model/resource-interface.js +2 -0
  1188. package/esm5/lib/task-content/model/split-data-group.js +2 -0
  1189. package/esm5/lib/task-content/model/subgrid.js +247 -0
  1190. package/esm5/lib/task-content/model/task-content-element-type.js +19 -0
  1191. package/esm5/lib/task-content/model/task-event-notification.js +15 -0
  1192. package/esm5/lib/task-content/model/task-event.js +10 -0
  1193. package/esm5/lib/task-content/public-api.js +21 -0
  1194. package/esm5/lib/task-content/services/field-converter.service.js +350 -0
  1195. package/esm5/lib/task-content/services/single-task-content.service.js +85 -0
  1196. package/esm5/lib/task-content/services/task-content.service.js +314 -0
  1197. package/esm5/lib/task-content/services/task-event.service.js +54 -0
  1198. package/esm5/lib/task-content/services/unlimited-task-content.service.js +77 -0
  1199. package/esm5/lib/task-content/task-content/abstract-task-content.component.js +687 -0
  1200. package/esm5/lib/toolbar/abstract-toolbar.component.js +24 -0
  1201. package/esm5/lib/toolbar/public-api.js +2 -0
  1202. package/esm5/lib/translate/language.service.js +89 -0
  1203. package/esm5/lib/translate/public-api.js +3 -0
  1204. package/esm5/lib/translate/translate-interceptor.js +25 -0
  1205. package/esm5/lib/translate/translate-lib.module.js +42 -0
  1206. package/esm5/lib/user/components/user-card/abstract-user-card.component.js +58 -0
  1207. package/esm5/lib/user/models/iuser.js +2 -0
  1208. package/esm5/lib/user/models/public-api.js +6 -0
  1209. package/esm5/lib/user/models/user.js +51 -0
  1210. package/esm5/lib/user/models/view-id-injection-tokens.js +4 -0
  1211. package/esm5/lib/user/profile/abstract-profile.component.js +40 -0
  1212. package/esm5/lib/user/public-api.js +12 -0
  1213. package/esm5/lib/user/services/user-comparator.service.js +28 -0
  1214. package/esm5/lib/user/services/user-list.service.js +220 -0
  1215. package/esm5/lib/user/services/user-preference.service.js +164 -0
  1216. package/esm5/lib/user/services/user.service.js +224 -0
  1217. package/esm5/lib/user/services/view-id.service.js +36 -0
  1218. package/esm5/lib/utility/array-to-observable.js +10 -0
  1219. package/esm5/lib/utility/call-chain/after-action.js +19 -0
  1220. package/esm5/lib/utility/call-chain/call-chain.service.js +36 -0
  1221. package/esm5/lib/utility/clear-time-information.js +11 -0
  1222. package/esm5/lib/utility/destroy-subscription.js +10 -0
  1223. package/esm5/lib/utility/get-field.js +48 -0
  1224. package/esm5/lib/utility/get-immediate-data.js +9 -0
  1225. package/esm5/lib/utility/grid-layout/grid-layout-helper.js +105 -0
  1226. package/esm5/lib/utility/grid-layout/model/grid-element-with-item.js +2 -0
  1227. package/esm5/lib/utility/grid-layout/model/grid-element.js +2 -0
  1228. package/esm5/lib/utility/grid-layout/model/grid-filler.js +52 -0
  1229. package/esm5/lib/utility/incrementing-counter.js +23 -0
  1230. package/esm5/lib/utility/loading-emitter.js +28 -0
  1231. package/esm5/lib/utility/loading-with-filter-emitter.js +41 -0
  1232. package/esm5/lib/utility/navigation-item-task-filter-factory.js +11 -0
  1233. package/esm5/lib/utility/navigation-item-task-search-categories-factory.js +35 -0
  1234. package/esm5/lib/utility/of-void.js +12 -0
  1235. package/esm5/lib/utility/pagination/load-all-pages.js +47 -0
  1236. package/esm5/lib/utility/pagination/page-has-content.js +8 -0
  1237. package/esm5/lib/utility/process-message-response.js +17 -0
  1238. package/esm5/lib/utility/public-api.js +47 -0
  1239. package/esm5/lib/utility/refresh-tree.js +9 -0
  1240. package/esm5/lib/utility/result-with-after-actions.js +34 -0
  1241. package/esm5/lib/utility/service/case-list-font-color.service.js +47 -0
  1242. package/esm5/lib/utility/service/spinner-overlay.service.js +51 -0
  1243. package/esm5/lib/utility/stop-propagation.js +5 -0
  1244. package/esm5/lib/utility/tests/mocks/mock-authentication-method-service.js +19 -0
  1245. package/esm5/lib/utility/tests/mocks/mock-authentication.service.js +33 -0
  1246. package/esm5/lib/utility/tests/mocks/mock-endpoint.js +46 -0
  1247. package/esm5/lib/utility/tests/mocks/mock-sign-up.service.js +31 -0
  1248. package/esm5/lib/utility/tests/mocks/mock-user-autocomplete-value.js +15 -0
  1249. package/esm5/lib/utility/tests/mocks/mock-user-preference.service.js +53 -0
  1250. package/esm5/lib/utility/tests/mocks/mock-user-resource.service.js +52 -0
  1251. package/esm5/lib/utility/tests/search-category-mock-dependencies.js +21 -0
  1252. package/esm5/lib/utility/tests/test-config.js +428 -0
  1253. package/esm5/lib/utility/tests/test-factory-methods.js +21 -0
  1254. package/esm5/lib/utility/tests/test-mock-dependencies.module.js +35 -0
  1255. package/esm5/lib/utility/tests/test-view-service.js +28 -0
  1256. package/esm5/lib/utility/tests/utility/configure-category.js +14 -0
  1257. package/esm5/lib/utility/tests/utility/create-mock-case-outcome.js +19 -0
  1258. package/esm5/lib/utility/tests/utility/create-mock-case.js +40 -0
  1259. package/esm5/lib/utility/tests/utility/create-mock-datagroup.js +39 -0
  1260. package/esm5/lib/utility/tests/utility/create-mock-field.js +47 -0
  1261. package/esm5/lib/utility/tests/utility/create-mock-get-data-outcome.js +20 -0
  1262. package/esm5/lib/utility/tests/utility/create-mock-immediate-data.js +17 -0
  1263. package/esm5/lib/utility/tests/utility/create-mock-net.js +34 -0
  1264. package/esm5/lib/utility/tests/utility/create-mock-page.js +24 -0
  1265. package/esm5/lib/utility/tests/utility/create-mock-petri-net-outcome.js +16 -0
  1266. package/esm5/lib/utility/tests/utility/create-mock-set-data-outcome.js +24 -0
  1267. package/esm5/lib/utility/tests/utility/create-mock-task-outcome.js +22 -0
  1268. package/esm5/lib/utility/tests/utility/create-mock-task.js +38 -0
  1269. package/esm5/lib/view/abstract/page-load-request-context.js +34 -0
  1270. package/esm5/lib/view/abstract/sortable-view.js +65 -0
  1271. package/esm5/lib/view/abstract/view-with-headers.js +27 -0
  1272. package/esm5/lib/view/case-view/abstract-case-view.js +47 -0
  1273. package/esm5/lib/view/case-view/components/case-list/abstract-case-list.component.js +92 -0
  1274. package/esm5/lib/view/case-view/models/case-page-load-request-result.js +2 -0
  1275. package/esm5/lib/view/case-view/models/case-view-params.js +2 -0
  1276. package/esm5/lib/view/case-view/models/new-case-configuration-injection-token.js +7 -0
  1277. package/esm5/lib/view/case-view/models/new-case-configuration.js +2 -0
  1278. package/esm5/lib/view/case-view/service/case-view-service.js +300 -0
  1279. package/esm5/lib/view/case-view/tabbed-case-view.js +75 -0
  1280. package/esm5/lib/view/public-api.js +42 -0
  1281. package/esm5/lib/view/task-view/abstract-task-view.js +18 -0
  1282. package/esm5/lib/view/task-view/models/injected-tabbed-task-view-data.js +2 -0
  1283. package/esm5/lib/view/task-view/models/injection-token-task-endpoint.js +6 -0
  1284. package/esm5/lib/view/task-view/models/task-endpoint.js +9 -0
  1285. package/esm5/lib/view/task-view/models/task-page-load-request-result.js +2 -0
  1286. package/esm5/lib/view/task-view/models/task-view-configuration-injection-token.js +20 -0
  1287. package/esm5/lib/view/task-view/models/task-view-configuration.js +2 -0
  1288. package/esm5/lib/view/task-view/models/task-view-params.js +2 -0
  1289. package/esm5/lib/view/task-view/service/task-view.service.js +333 -0
  1290. package/esm5/lib/view/task-view/tabbed-task-view.js +27 -0
  1291. package/esm5/lib/view/tree-case-view/model/tree-petriflow-identifiers.js +43 -0
  1292. package/esm5/lib/view/tree-case-view/tree-case-view.service.js +19 -0
  1293. package/esm5/lib/view/tree-case-view/tree-component/abstract-tree.component.js +165 -0
  1294. package/esm5/lib/view/tree-case-view/tree-component/add-child-node/abstract-add-child-node.component.js +16 -0
  1295. package/esm5/lib/view/tree-case-view/tree-component/case-tree.service.js +899 -0
  1296. package/esm5/lib/view/tree-case-view/tree-component/model/case-tree-node.js +106 -0
  1297. package/esm5/lib/view/tree-case-view/tree-component/model/case-tree-path.js +2 -0
  1298. package/esm5/lib/view/tree-case-view/tree-component/model/expansion-tree.js +2 -0
  1299. package/esm5/lib/view/tree-case-view/tree-component/remove-node/abstract-remove-node.component.js +16 -0
  1300. package/esm5/lib/view/tree-case-view/tree-task-content/abstract-tree-task-content.component.js +66 -0
  1301. package/esm5/lib/view/tree-case-view/tree-task-content/tree-task-content.service.js +308 -0
  1302. package/esm5/lib/view/workflow-view/abstract-workflow-view.component.js +74 -0
  1303. package/esm5/lib/view/workflow-view/models/injection-token-workflow-service.js +10 -0
  1304. package/esm5/lib/view/workflow-view/workflow-view.service.js +232 -0
  1305. package/esm5/netgrif-components-core.js +20 -0
  1306. package/esm5/public-api.js +45 -0
  1307. package/fesm2015/netgrif-components-core.js +28627 -0
  1308. package/fesm2015/netgrif-components-core.js.map +1 -0
  1309. package/fesm5/netgrif-components-core.js +31716 -0
  1310. package/fesm5/netgrif-components-core.js.map +1 -0
  1311. package/lib/admin/public-api.d.ts +6 -0
  1312. package/lib/admin/role-assignment/abstract-role-assignment.d.ts +31 -0
  1313. package/lib/admin/role-assignment/services/ProcessList.d.ts +43 -0
  1314. package/lib/admin/role-assignment/services/role-assignment.service.d.ts +16 -0
  1315. package/lib/admin/user-invite/abstract-user-invite.component.d.ts +30 -0
  1316. package/lib/admin/user-invite/services/organization-list.service.d.ts +16 -0
  1317. package/lib/admin/user-invite/services/user-invite.service.d.ts +9 -0
  1318. package/lib/allowed-nets/public-api.d.ts +3 -0
  1319. package/lib/allowed-nets/services/allowed-nets.service.d.ts +45 -0
  1320. package/lib/allowed-nets/services/base-allowed-nets.service.d.ts +27 -0
  1321. package/lib/allowed-nets/services/factory/allowed-nets-service-factory.d.ts +59 -0
  1322. package/lib/authentication/anonymous/anonymous.service.d.ts +18 -0
  1323. package/lib/authentication/authentication.factory.d.ts +5 -0
  1324. package/lib/authentication/authentication.module.d.ts +2 -0
  1325. package/lib/authentication/components/abstract-authentication-overlay.d.ts +21 -0
  1326. package/lib/authentication/models/credentials.d.ts +4 -0
  1327. package/lib/authentication/models/public-api.d.ts +3 -0
  1328. package/lib/authentication/models/transformer.d.ts +3 -0
  1329. package/lib/authentication/models/user.transformer.d.ts +8 -0
  1330. package/lib/authentication/public-api.d.ts +8 -0
  1331. package/lib/authentication/services/anonymous-authentication-interceptor.d.ts +8 -0
  1332. package/lib/authentication/services/authentication/authentication.service.d.ts +23 -0
  1333. package/lib/authentication/services/authentication-interceptor.d.ts +12 -0
  1334. package/lib/authentication/services/authentication-method.service.d.ts +8 -0
  1335. package/lib/authentication/services/guard/authentication-guard.service.d.ts +11 -0
  1336. package/lib/authentication/services/methods/basic-authentication/basic-authentication.service.d.ts +13 -0
  1337. package/lib/authentication/services/methods/null-authentication/null-authentication.service.d.ts +9 -0
  1338. package/lib/authentication/services/public-api.d.ts +5 -0
  1339. package/lib/authentication/session/null-storage.d.ts +9 -0
  1340. package/lib/authentication/session/public-api.d.ts +1 -0
  1341. package/lib/authentication/session/services/session.service.d.ts +35 -0
  1342. package/lib/authentication/sign-up/models/user-invitation-request.d.ts +5 -0
  1343. package/lib/authentication/sign-up/models/user-registration-request.d.ts +6 -0
  1344. package/lib/authentication/sign-up/public-api.d.ts +4 -0
  1345. package/lib/authentication/sign-up/services/sign-up.service.d.ts +29 -0
  1346. package/lib/authentication/sign-up/sign-up.module.d.ts +2 -0
  1347. package/lib/authorization/authority/authority-guard.service.d.ts +16 -0
  1348. package/lib/authorization/group/group-guard.service.d.ts +19 -0
  1349. package/lib/authorization/permission/permission.service.d.ts +22 -0
  1350. package/lib/authorization/public-api.d.ts +4 -0
  1351. package/lib/authorization/role/role-guard.service.d.ts +29 -0
  1352. package/lib/changed-fields/public-api.d.ts +1 -0
  1353. package/lib/changed-fields/services/changed-fields.service.d.ts +12 -0
  1354. package/lib/configuration/configuration.service.d.ts +69 -0
  1355. package/lib/configuration/public-api.d.ts +1 -0
  1356. package/lib/covalent/covalent.module.d.ts +2 -0
  1357. package/lib/currency/currency.module.d.ts +3 -0
  1358. package/lib/dashboard/cards/count-card/abstract-count-card.d.ts +19 -0
  1359. package/lib/dashboard/cards/custom-card/abstract-custom-card.d.ts +39 -0
  1360. package/lib/dashboard/cards/iframe-card/abstract-iframe-card.d.ts +10 -0
  1361. package/lib/dashboard/cards/model/card-grid-element.d.ts +4 -0
  1362. package/lib/dashboard/cards/model/count-card.d.ts +11 -0
  1363. package/lib/dashboard/cards/model/custom-dashboard-model/aggregation-query.d.ts +9 -0
  1364. package/lib/dashboard/cards/model/custom-dashboard-model/aggregation-result.d.ts +18 -0
  1365. package/lib/dashboard/cards/model/custom-dashboard-model/custom-card.d.ts +14 -0
  1366. package/lib/dashboard/cards/model/custom-dashboard-model/dashboard-event-content.d.ts +5 -0
  1367. package/lib/dashboard/cards/model/custom-dashboard-model/dashboard-multi-data.d.ts +6 -0
  1368. package/lib/dashboard/cards/model/custom-dashboard-model/dashboard-single-data.d.ts +5 -0
  1369. package/lib/dashboard/cards/model/dashboard-card-types.d.ts +11 -0
  1370. package/lib/dashboard/cards/model/dashboard-card.d.ts +7 -0
  1371. package/lib/dashboard/cards/model/graph-card.d.ts +5 -0
  1372. package/lib/dashboard/cards/model/iframe-card.d.ts +6 -0
  1373. package/lib/dashboard/dashboard-content/abstract-dashboard-content.d.ts +15 -0
  1374. package/lib/dashboard/dashboard-content/dashboard-params.d.ts +8 -0
  1375. package/lib/dashboard/public-api.d.ts +16 -0
  1376. package/lib/data-fields/boolean-field/abstract-boolean-field.component.d.ts +11 -0
  1377. package/lib/data-fields/boolean-field/models/boolean-field.d.ts +15 -0
  1378. package/lib/data-fields/button-field/abstract-button-field.component.d.ts +25 -0
  1379. package/lib/data-fields/button-field/models/button-field.d.ts +22 -0
  1380. package/lib/data-fields/data-field-template/abstract-data-field-template.component.d.ts +65 -0
  1381. package/lib/data-fields/data-field-template/models/wrapped-boolean.d.ts +6 -0
  1382. package/lib/data-fields/data-fields.module.d.ts +2 -0
  1383. package/lib/data-fields/date-field/abstract-date-field.component.d.ts +9 -0
  1384. package/lib/data-fields/date-field/models/custom-date-adapter.d.ts +4 -0
  1385. package/lib/data-fields/date-field/models/date-field.d.ts +10 -0
  1386. package/lib/data-fields/date-time-field/abstract-date-time-field.component.d.ts +9 -0
  1387. package/lib/data-fields/date-time-field/models/date-time-field.d.ts +10 -0
  1388. package/lib/data-fields/enumeration-field/abstract-enumeration-field.component.d.ts +6 -0
  1389. package/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.d.ts +21 -0
  1390. package/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.d.ts +26 -0
  1391. package/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.d.ts +17 -0
  1392. package/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.d.ts +10 -0
  1393. package/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.d.ts +10 -0
  1394. package/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.d.ts +18 -0
  1395. package/lib/data-fields/enumeration-field/models/dynamic-enumeration-field.d.ts +25 -0
  1396. package/lib/data-fields/enumeration-field/models/enumeration-field.d.ts +35 -0
  1397. package/lib/data-fields/file-field/abstract-file-field.component.d.ts +147 -0
  1398. package/lib/data-fields/file-field/abstract-preview-dialog/preview-dialog-data.d.ts +9 -0
  1399. package/lib/data-fields/file-field/models/file-field-value.d.ts +4 -0
  1400. package/lib/data-fields/file-field/models/file-field.d.ts +73 -0
  1401. package/lib/data-fields/file-list-field/abstract-file-list-field.component.d.ts +73 -0
  1402. package/lib/data-fields/file-list-field/models/file-list-field-value.d.ts +4 -0
  1403. package/lib/data-fields/file-list-field/models/file-list-field.d.ts +41 -0
  1404. package/lib/data-fields/filter-field/abstract-filter-field-content.component.d.ts +12 -0
  1405. package/lib/data-fields/filter-field/abstract-filter-field.component.d.ts +14 -0
  1406. package/lib/data-fields/filter-field/models/filter-field-injection-token.d.ts +7 -0
  1407. package/lib/data-fields/filter-field/models/filter-field.d.ts +13 -0
  1408. package/lib/data-fields/i18n-field/abstract-i18n-field.component.d.ts +7 -0
  1409. package/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.d.ts +13 -0
  1410. package/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.d.ts +18 -0
  1411. package/lib/data-fields/i18n-field/models/i18n-field-value.d.ts +5 -0
  1412. package/lib/data-fields/i18n-field/models/i18n-field.d.ts +9 -0
  1413. package/lib/data-fields/models/abstract-data-field-component.d.ts +32 -0
  1414. package/lib/data-fields/models/abstract-data-field.d.ts +220 -0
  1415. package/lib/data-fields/models/behavior.d.ts +40 -0
  1416. package/lib/data-fields/models/boolean-label-enabled-token.d.ts +2 -0
  1417. package/lib/data-fields/models/changed-fields.d.ts +44 -0
  1418. package/lib/data-fields/models/component.d.ts +7 -0
  1419. package/lib/data-fields/models/format-filter.d.ts +5 -0
  1420. package/lib/data-fields/models/icon.d.ts +9 -0
  1421. package/lib/data-fields/models/invalid-data-policy-token.d.ts +10 -0
  1422. package/lib/data-fields/models/layout.d.ts +22 -0
  1423. package/lib/data-fields/models/material-appearance.d.ts +12 -0
  1424. package/lib/data-fields/models/properties.d.ts +3 -0
  1425. package/lib/data-fields/models/template-appearance.d.ts +13 -0
  1426. package/lib/data-fields/models/validation.d.ts +15 -0
  1427. package/lib/data-fields/multichoice-field/abstract-multichoice-field.component.d.ts +6 -0
  1428. package/lib/data-fields/multichoice-field/models/multichoice-field.d.ts +26 -0
  1429. package/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.d.ts +10 -0
  1430. package/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.d.ts +8 -0
  1431. package/lib/data-fields/number-field/abstract-number-errors.component.d.ts +13 -0
  1432. package/lib/data-fields/number-field/abstract-number-field.component.d.ts +8 -0
  1433. package/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.d.ts +15 -0
  1434. package/lib/data-fields/number-field/models/number-field.d.ts +36 -0
  1435. package/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.d.ts +5 -0
  1436. package/lib/data-fields/public-api.d.ts +67 -0
  1437. package/lib/data-fields/task-ref-field/model/task-ref-field.d.ts +8 -0
  1438. package/lib/data-fields/text-field/abstract-text-errors.component.d.ts +10 -0
  1439. package/lib/data-fields/text-field/abstract-text-field.component.d.ts +6 -0
  1440. package/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.d.ts +39 -0
  1441. package/lib/data-fields/text-field/models/text-area-field.d.ts +12 -0
  1442. package/lib/data-fields/text-field/models/text-field.d.ts +36 -0
  1443. package/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.d.ts +13 -0
  1444. package/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.d.ts +16 -0
  1445. package/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.d.ts +13 -0
  1446. package/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.d.ts +22 -0
  1447. package/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.d.ts +9 -0
  1448. package/lib/data-fields/time-instance-abstract-field/models/abstract-time-instance-field.d.ts +41 -0
  1449. package/lib/data-fields/user-field/abstract-user-field.component.d.ts +36 -0
  1450. package/lib/data-fields/user-field/models/user-field.d.ts +13 -0
  1451. package/lib/data-fields/user-field/models/user-value.d.ts +24 -0
  1452. package/lib/dialog/components/alert-dialog/alert-dialog.component.d.ts +19 -0
  1453. package/lib/dialog/components/alert-dialog/alert-dialog.module.d.ts +2 -0
  1454. package/lib/dialog/components/confirm-dialog/confirm-dialog.component.d.ts +24 -0
  1455. package/lib/dialog/components/confirm-dialog/confirm-dialog.module.d.ts +2 -0
  1456. package/lib/dialog/components/prompt-dialog/prompt-dialog.component.d.ts +23 -0
  1457. package/lib/dialog/components/prompt-dialog/prompt-dialog.module.d.ts +2 -0
  1458. package/lib/dialog/dialog.module.d.ts +2 -0
  1459. package/lib/dialog/models/DialogData.d.ts +8 -0
  1460. package/lib/dialog/models/DialogResult.d.ts +5 -0
  1461. package/lib/dialog/models/abstract-dialog.d.ts +18 -0
  1462. package/lib/dialog/public-api.d.ts +5 -0
  1463. package/lib/dialog/services/dialog.service.d.ts +43 -0
  1464. package/lib/event/model/event-constants.d.ts +6 -0
  1465. package/lib/event/model/event-outcomes/case-outcomes/case-event-outcome.d.ts +5 -0
  1466. package/lib/event/model/event-outcomes/case-outcomes/create-case-event-outcome.d.ts +3 -0
  1467. package/lib/event/model/event-outcomes/case-outcomes/delete-case-event-outcome.d.ts +3 -0
  1468. package/lib/event/model/event-outcomes/data-outcomes/get-data-event-outcome.d.ts +5 -0
  1469. package/lib/event/model/event-outcomes/data-outcomes/get-data-groups-event-outcome.d.ts +5 -0
  1470. package/lib/event/model/event-outcomes/data-outcomes/get-data-localised-event-outcome.d.ts +5 -0
  1471. package/lib/event/model/event-outcomes/data-outcomes/set-data-event-outcome.d.ts +5 -0
  1472. package/lib/event/model/event-outcomes/petrinet-outcomes/petri-net-event-outcome.d.ts +5 -0
  1473. package/lib/event/model/event-outcomes/task-outcomes/assign-task-event-outcome.d.ts +3 -0
  1474. package/lib/event/model/event-outcomes/task-outcomes/cancel-task-event-outcome.d.ts +3 -0
  1475. package/lib/event/model/event-outcomes/task-outcomes/delegate-task-event-outcome.d.ts +3 -0
  1476. package/lib/event/model/event-outcomes/task-outcomes/finish-task-event-outcome.d.ts +3 -0
  1477. package/lib/event/model/event-outcomes/task-outcomes/task-event-outcome.d.ts +5 -0
  1478. package/lib/event/public-api.d.ts +15 -0
  1479. package/lib/event/services/event.service.d.ts +7 -0
  1480. package/lib/event/services/interfaces/changed-fields-map.d.ts +6 -0
  1481. package/lib/event-queue/model/queued-event.d.ts +21 -0
  1482. package/lib/event-queue/public-api.d.ts +2 -0
  1483. package/lib/event-queue/services/event-queue.service.d.ts +21 -0
  1484. package/lib/filter/filter.repository.d.ts +59 -0
  1485. package/lib/filter/models/case-search-request-body.d.ts +88 -0
  1486. package/lib/filter/models/filter-type.d.ts +9 -0
  1487. package/lib/filter/models/filter.d.ts +68 -0
  1488. package/lib/filter/models/filters-filter-injection-token.d.ts +9 -0
  1489. package/lib/filter/models/merge-operator.d.ts +9 -0
  1490. package/lib/filter/models/merged-filter-params.d.ts +13 -0
  1491. package/lib/filter/models/merged-filter.d.ts +75 -0
  1492. package/lib/filter/models/simple-filter.d.ts +74 -0
  1493. package/lib/filter/models/task-search-request-body.d.ts +83 -0
  1494. package/lib/filter/models/user-filter-constants.d.ts +37 -0
  1495. package/lib/filter/public-api.d.ts +12 -0
  1496. package/lib/filter/user-filters.service.d.ts +116 -0
  1497. package/lib/forms/email-submission/abstract-email-submission-form.component.d.ts +13 -0
  1498. package/lib/forms/forgotten-password/abstract-forgotten-password.component.d.ts +16 -0
  1499. package/lib/forms/has-form.d.ts +10 -0
  1500. package/lib/forms/login/abstract-login-form.component.d.ts +24 -0
  1501. package/lib/forms/models/abstract-registration.component.d.ts +42 -0
  1502. package/lib/forms/models/password.validator.d.ts +7 -0
  1503. package/lib/forms/public-api.d.ts +6 -0
  1504. package/lib/forms/registration/abstract-registration-form.component.d.ts +19 -0
  1505. package/lib/groups/public-api.d.ts +2 -0
  1506. package/lib/groups/services/active-group.service.d.ts +49 -0
  1507. package/lib/groups/services/next-group.service.d.ts +52 -0
  1508. package/lib/header/abstract-header-service.d.ts +133 -0
  1509. package/lib/header/abstract-header.component.d.ts +52 -0
  1510. package/lib/header/case-header/case-header.service.d.ts +21 -0
  1511. package/lib/header/case-header/case-menta-enum.d.ts +7 -0
  1512. package/lib/header/header-modes/abstract-header-mode.component.d.ts +5 -0
  1513. package/lib/header/header-modes/edit-mode/abstract-edit-mode.component.d.ts +28 -0
  1514. package/lib/header/header-modes/loading-mode/abstract-loading-mode.component.d.ts +8 -0
  1515. package/lib/header/header-modes/search-mode/abstract-search-mode.component.d.ts +48 -0
  1516. package/lib/header/header-modes/sort-mode/abstract-sort-mode.component.d.ts +8 -0
  1517. package/lib/header/header-state.d.ts +28 -0
  1518. package/lib/header/models/default-headers-token.d.ts +2 -0
  1519. package/lib/header/models/fields-group.d.ts +9 -0
  1520. package/lib/header/models/header-column.d.ts +17 -0
  1521. package/lib/header/models/header-mode.d.ts +5 -0
  1522. package/lib/header/models/header-type.d.ts +5 -0
  1523. package/lib/header/models/public-api.d.ts +11 -0
  1524. package/lib/header/models/user-changes/column-header-change.d.ts +6 -0
  1525. package/lib/header/models/user-changes/edit-change-description.d.ts +7 -0
  1526. package/lib/header/models/user-changes/header-change-description.d.ts +5 -0
  1527. package/lib/header/models/user-changes/header-change-type.d.ts +18 -0
  1528. package/lib/header/models/user-changes/header-change.d.ts +17 -0
  1529. package/lib/header/models/user-changes/mode-change-description.d.ts +5 -0
  1530. package/lib/header/models/user-changes/search-change-description.d.ts +13 -0
  1531. package/lib/header/models/user-changes/sort-change-description.d.ts +13 -0
  1532. package/lib/header/public-api.d.ts +14 -0
  1533. package/lib/header/services/overflow.service.d.ts +28 -0
  1534. package/lib/header/task-header/task-header.service.d.ts +18 -0
  1535. package/lib/header/task-header/task-meta-enum.d.ts +9 -0
  1536. package/lib/header/workflow-header/workflow-header.service.d.ts +14 -0
  1537. package/lib/header/workflow-header/workflow-meta-enum.d.ts +8 -0
  1538. package/lib/legal/legal-notice/abstract-legal-notice.component.d.ts +13 -0
  1539. package/lib/legal/public-api.d.ts +1 -0
  1540. package/lib/logger/models/log-entry.d.ts +38 -0
  1541. package/lib/logger/public-api.d.ts +7 -0
  1542. package/lib/logger/publishers/console-log-publisher.d.ts +8 -0
  1543. package/lib/logger/publishers/local-storage-log-publisher.d.ts +9 -0
  1544. package/lib/logger/publishers/log-publisher.d.ts +8 -0
  1545. package/lib/logger/services/log-level.d.ts +8 -0
  1546. package/lib/logger/services/log-publisher.service.d.ts +22 -0
  1547. package/lib/logger/services/logger.service.d.ts +25 -0
  1548. package/lib/material/material.module.d.ts +2 -0
  1549. package/lib/moment/public-api.d.ts +1 -0
  1550. package/lib/moment/time-formats.d.ts +24 -0
  1551. package/lib/navigation/group-navigation-component-resolver/abstract-group-navigation-component-resolver.component.d.ts +21 -0
  1552. package/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.d.ts +14 -0
  1553. package/lib/navigation/group-navigation-component-resolver/group-navigation-view-id-segment-factory.d.ts +2 -0
  1554. package/lib/navigation/model/filter-case-injection-token.d.ts +6 -0
  1555. package/lib/navigation/model/group-navigation-component-resolver-component-injection-token.d.ts +6 -0
  1556. package/lib/navigation/model/group-navigation-constants.d.ts +57 -0
  1557. package/lib/navigation/model/group-navigation-item-label.d.ts +4 -0
  1558. package/lib/navigation/navigation-drawer/abstract-navigation-drawer.component.d.ts +49 -0
  1559. package/lib/navigation/navigation-drawer/abstract-navigation-resizable-drawer.component.d.ts +8 -0
  1560. package/lib/navigation/navigation-rail/abstract-navigation-rail.component.d.ts +14 -0
  1561. package/lib/navigation/navigation-tree/abstract-navigation-tree.component.d.ts +131 -0
  1562. package/lib/navigation/public-api.d.ts +13 -0
  1563. package/lib/navigation/quick-panel/components/abstract-quick-panel.component.d.ts +15 -0
  1564. package/lib/navigation/quick-panel/components/internal-link/abstract-internal-link.component.d.ts +7 -0
  1565. package/lib/navigation/quick-panel/components/language-selector/abstract-language-selector.component.d.ts +24 -0
  1566. package/lib/navigation/quick-panel/components/logout-shortcut/abstract-logout-shortcut.component.d.ts +14 -0
  1567. package/lib/navigation/quick-panel/components/paper-view.service.d.ts +6 -0
  1568. package/lib/navigation/quick-panel/public-api.d.ts +5 -0
  1569. package/lib/navigation/utility/filter-extraction.service.d.ts +18 -0
  1570. package/lib/navigation/utility/navigation-item-task-utility-methods.d.ts +33 -0
  1571. package/lib/panel/abstract/featured-value.d.ts +13 -0
  1572. package/lib/panel/abstract/panel-with-header-binding.d.ts +23 -0
  1573. package/lib/panel/abstract/panel-with-immediate-data.d.ts +18 -0
  1574. package/lib/panel/abstract/tabbed-virtual-scroll.component.d.ts +10 -0
  1575. package/lib/panel/abstract-panel.component.d.ts +23 -0
  1576. package/lib/panel/case-panel/abstract-case-panel.component.d.ts +41 -0
  1577. package/lib/panel/immediate/abstract-immediate-filter-text-content.component.d.ts +16 -0
  1578. package/lib/panel/immediate/abstract-immediate-filter-text.component.d.ts +14 -0
  1579. package/lib/panel/immediate/model/filter-text-injection-token.d.ts +10 -0
  1580. package/lib/panel/public-api.d.ts +12 -0
  1581. package/lib/panel/task-panel/abstract-task-panel.component.d.ts +109 -0
  1582. package/lib/panel/task-panel/models/disable-functions.d.ts +10 -0
  1583. package/lib/panel/task-panel-list/abstract-task-list.component.d.ts +46 -0
  1584. package/lib/panel/task-panel-list/task-panel-data/task-panel-data.d.ts +8 -0
  1585. package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +57 -0
  1586. package/lib/process/net.d.ts +95 -0
  1587. package/lib/process/netRole.d.ts +4 -0
  1588. package/lib/process/permissions.d.ts +30 -0
  1589. package/lib/process/petri-net-reference-with-permissions.d.ts +7 -0
  1590. package/lib/process/process.service.d.ts +94 -0
  1591. package/lib/process/public-api.d.ts +7 -0
  1592. package/lib/process/public-process.service.d.ts +8 -0
  1593. package/lib/process/rolesAndPermissions.d.ts +6 -0
  1594. package/lib/process/transaction.d.ts +5 -0
  1595. package/lib/process/transition.d.ts +7 -0
  1596. package/lib/public/factories/get-net-and-create-case.d.ts +6 -0
  1597. package/lib/public/factories/public-factory-resolver.d.ts +6 -0
  1598. package/lib/public/factories/public-search-factory.d.ts +9 -0
  1599. package/lib/public/public-api.d.ts +4 -0
  1600. package/lib/public/services/public-url-resolver.service.d.ts +6 -0
  1601. package/lib/resources/abstract-endpoint/abstract-resource.service.d.ts +38 -0
  1602. package/lib/resources/abstract-endpoint/count-service.d.ts +6 -0
  1603. package/lib/resources/engine-endpoint/case-resource.service.d.ts +86 -0
  1604. package/lib/resources/engine-endpoint/dashboard-resource.service.d.ts +10 -0
  1605. package/lib/resources/engine-endpoint/petri-net-resource.service.d.ts +105 -0
  1606. package/lib/resources/engine-endpoint/public/public-case-resource.service.d.ts +20 -0
  1607. package/lib/resources/engine-endpoint/public/public-petri-net-resource.service.d.ts +72 -0
  1608. package/lib/resources/engine-endpoint/public/public-task-resource.service.d.ts +95 -0
  1609. package/lib/resources/engine-endpoint/task-resource.service.d.ts +134 -0
  1610. package/lib/resources/engine-endpoint/user-resource.service.d.ts +133 -0
  1611. package/lib/resources/interface/assigned-user-policy.d.ts +4 -0
  1612. package/lib/resources/interface/author.d.ts +15 -0
  1613. package/lib/resources/interface/authority.d.ts +13 -0
  1614. package/lib/resources/interface/case-get-request-body.d.ts +79 -0
  1615. package/lib/resources/interface/case.d.ts +124 -0
  1616. package/lib/resources/interface/changed-field-container.d.ts +4 -0
  1617. package/lib/resources/interface/count.d.ts +15 -0
  1618. package/lib/resources/interface/create-case-request-body.d.ts +11 -0
  1619. package/lib/resources/interface/data-group-layout.d.ts +62 -0
  1620. package/lib/resources/interface/data-groups.d.ts +60 -0
  1621. package/lib/resources/interface/event-outcome.d.ts +10 -0
  1622. package/lib/resources/interface/field-alignment.d.ts +8 -0
  1623. package/lib/resources/interface/fields.d.ts +218 -0
  1624. package/lib/resources/interface/file-resource.d.ts +22 -0
  1625. package/lib/resources/interface/group.d.ts +18 -0
  1626. package/lib/resources/interface/immediate-data.d.ts +44 -0
  1627. package/lib/resources/interface/link.d.ts +18 -0
  1628. package/lib/resources/interface/message-resource.d.ts +24 -0
  1629. package/lib/resources/interface/page.d.ts +14 -0
  1630. package/lib/resources/interface/pagination.d.ts +21 -0
  1631. package/lib/resources/interface/petri-net-object-id.d.ts +12 -0
  1632. package/lib/resources/interface/petri-net-reference.d.ts +46 -0
  1633. package/lib/resources/interface/petri-net-request-body.d.ts +14 -0
  1634. package/lib/resources/interface/petri-net.d.ts +10 -0
  1635. package/lib/resources/interface/preferences.d.ts +16 -0
  1636. package/lib/resources/interface/process-role.d.ts +9 -0
  1637. package/lib/resources/interface/response-data.d.ts +19 -0
  1638. package/lib/resources/interface/task-layout.d.ts +11 -0
  1639. package/lib/resources/interface/task-reference.d.ts +17 -0
  1640. package/lib/resources/interface/task-set-data-request-body.d.ts +35 -0
  1641. package/lib/resources/interface/task.d.ts +72 -0
  1642. package/lib/resources/interface/user-process-role.d.ts +13 -0
  1643. package/lib/resources/interface/user-resource-small.d.ts +11 -0
  1644. package/lib/resources/interface/user-resource.d.ts +16 -0
  1645. package/lib/resources/public-api.d.ts +42 -0
  1646. package/lib/resources/resource-provider.service.d.ts +53 -0
  1647. package/lib/resources/types/nae-date-type.d.ts +7 -0
  1648. package/lib/routing/dynamic-navigation-route-provider/dynamic-navigation-route-provider.service.d.ts +12 -0
  1649. package/lib/routing/public-api.d.ts +5 -0
  1650. package/lib/routing/redirect-service/redirect.service.d.ts +22 -0
  1651. package/lib/routing/routing-builder/routing-builder.service.d.ts +23 -0
  1652. package/lib/routing/view-service/model/view-entry.d.ts +14 -0
  1653. package/lib/routing/view-service/view.service.d.ts +29 -0
  1654. package/lib/search/advanced-search-component/abstract-advanced-search.component.d.ts +25 -0
  1655. package/lib/search/advanced-search-component-initialization-service/advanced-search-component-initialization.service.d.ts +22 -0
  1656. package/lib/search/category-factory/category-factory.d.ts +55 -0
  1657. package/lib/search/category-factory/category-resolver.service.d.ts +48 -0
  1658. package/lib/search/category-factory/category-serialisation-pair.d.ts +10 -0
  1659. package/lib/search/category-factory/default-categories-factories.d.ts +32 -0
  1660. package/lib/search/category-factory/default-search-categories.module.d.ts +2 -0
  1661. package/lib/search/category-factory/optional-dependencies.d.ts +22 -0
  1662. package/lib/search/category-factory/search-categories-injection-token.d.ts +24 -0
  1663. package/lib/search/fulltext-search-component/abstract-fulltext-search.component.d.ts +7 -0
  1664. package/lib/search/header-search-service/header-search.service.d.ts +112 -0
  1665. package/lib/search/models/base-filter-injection-token.d.ts +6 -0
  1666. package/lib/search/models/base-filter.d.ts +18 -0
  1667. package/lib/search/models/boolean-operator.d.ts +7 -0
  1668. package/lib/search/models/category/autocomplete-category.d.ts +94 -0
  1669. package/lib/search/models/category/autocomplete-options.d.ts +17 -0
  1670. package/lib/search/models/category/case/case-author.d.ts +12 -0
  1671. package/lib/search/models/category/case/case-creation-date-time.d.ts +16 -0
  1672. package/lib/search/models/category/case/case-creation-date.d.ts +16 -0
  1673. package/lib/search/models/category/case/case-dataset.d.ts +94 -0
  1674. package/lib/search/models/category/case/case-net-attribute-autocomplete-category.d.ts +18 -0
  1675. package/lib/search/models/category/case/case-process.d.ts +27 -0
  1676. package/lib/search/models/category/case/case-role.d.ts +15 -0
  1677. package/lib/search/models/category/case/case-search.enum.d.ts +13 -0
  1678. package/lib/search/models/category/case/case-simple-dataset.d.ts +58 -0
  1679. package/lib/search/models/category/case/case-string-id.d.ts +11 -0
  1680. package/lib/search/models/category/case/case-task.d.ts +15 -0
  1681. package/lib/search/models/category/case/case-title.d.ts +11 -0
  1682. package/lib/search/models/category/case/case-visual-id.d.ts +11 -0
  1683. package/lib/search/models/category/categories.d.ts +20 -0
  1684. package/lib/search/models/category/category.d.ts +363 -0
  1685. package/lib/search/models/category/name-id-pair.d.ts +13 -0
  1686. package/lib/search/models/category/net-attribute-autocomplete-category.d.ts +55 -0
  1687. package/lib/search/models/category/net-attribute-pair.d.ts +17 -0
  1688. package/lib/search/models/category/no-configuration-autocomplete-category.d.ts +28 -0
  1689. package/lib/search/models/category/no-configuration-category.d.ts +30 -0
  1690. package/lib/search/models/category/no-configuration-user-autocomplete-category.d.ts +20 -0
  1691. package/lib/search/models/category/search-autocomplete-option.d.ts +21 -0
  1692. package/lib/search/models/category/search-input-type.d.ts +12 -0
  1693. package/lib/search/models/category/task/task-assignee.d.ts +12 -0
  1694. package/lib/search/models/category/task/task-net-attribute-autocomplete-category.d.ts +18 -0
  1695. package/lib/search/models/category/task/task-process.d.ts +19 -0
  1696. package/lib/search/models/category/task/task-role.d.ts +15 -0
  1697. package/lib/search/models/category/task/task-task.d.ts +15 -0
  1698. package/lib/search/models/category/user-autocomplete.d.ts +28 -0
  1699. package/lib/search/models/component-configuration/search-component-configuration-injection-token.d.ts +8 -0
  1700. package/lib/search/models/component-configuration/search-component-configuration.d.ts +21 -0
  1701. package/lib/search/models/component-configuration/search-mode.d.ts +7 -0
  1702. package/lib/search/models/configuration-input.d.ts +38 -0
  1703. package/lib/search/models/datafield-map-key.d.ts +28 -0
  1704. package/lib/search/models/escape-result.d.ts +13 -0
  1705. package/lib/search/models/operator/equals-date-time.d.ts +19 -0
  1706. package/lib/search/models/operator/equals-date.d.ts +19 -0
  1707. package/lib/search/models/operator/equals.d.ts +13 -0
  1708. package/lib/search/models/operator/in-range-date-time.d.ts +24 -0
  1709. package/lib/search/models/operator/in-range-date.d.ts +24 -0
  1710. package/lib/search/models/operator/in-range.d.ts +12 -0
  1711. package/lib/search/models/operator/is-null.d.ts +51 -0
  1712. package/lib/search/models/operator/less-than-date-time.d.ts +16 -0
  1713. package/lib/search/models/operator/less-than-date.d.ts +16 -0
  1714. package/lib/search/models/operator/less-than-equal-date-time.d.ts +16 -0
  1715. package/lib/search/models/operator/less-than-equal-date.d.ts +16 -0
  1716. package/lib/search/models/operator/less-than-equal.d.ts +10 -0
  1717. package/lib/search/models/operator/less-than.d.ts +10 -0
  1718. package/lib/search/models/operator/like.d.ts +18 -0
  1719. package/lib/search/models/operator/more-than-date-time.d.ts +16 -0
  1720. package/lib/search/models/operator/more-than-date.d.ts +16 -0
  1721. package/lib/search/models/operator/more-than-equal-date-time.d.ts +16 -0
  1722. package/lib/search/models/operator/more-than-equal-date.d.ts +16 -0
  1723. package/lib/search/models/operator/more-than-equal.d.ts +10 -0
  1724. package/lib/search/models/operator/more-than.d.ts +10 -0
  1725. package/lib/search/models/operator/not-equals-date-time.d.ts +13 -0
  1726. package/lib/search/models/operator/not-equals-date.d.ts +16 -0
  1727. package/lib/search/models/operator/not-equals.d.ts +18 -0
  1728. package/lib/search/models/operator/operator.d.ts +98 -0
  1729. package/lib/search/models/operator/operators.d.ts +29 -0
  1730. package/lib/search/models/operator/substring.d.ts +13 -0
  1731. package/lib/search/models/operator-template-part-type.d.ts +13 -0
  1732. package/lib/search/models/operator-template-part.d.ts +26 -0
  1733. package/lib/search/models/persistance/filter-metadata-allowed-nets.d.ts +14 -0
  1734. package/lib/search/models/persistance/filter-metadata.d.ts +29 -0
  1735. package/lib/search/models/persistance/filter-text-segment.d.ts +19 -0
  1736. package/lib/search/models/persistance/generator-metadata.d.ts +44 -0
  1737. package/lib/search/models/persistance/saved-filter-metadata.d.ts +26 -0
  1738. package/lib/search/models/predicate/clause-predicate.d.ts +56 -0
  1739. package/lib/search/models/predicate/editable-clause-predicate-with-generators.d.ts +24 -0
  1740. package/lib/search/models/predicate/editable-clause-predicate.d.ts +67 -0
  1741. package/lib/search/models/predicate/editable-elementary-predicate.d.ts +13 -0
  1742. package/lib/search/models/predicate/editable-predicate-with-generator.d.ts +28 -0
  1743. package/lib/search/models/predicate/editable-predicate.d.ts +14 -0
  1744. package/lib/search/models/predicate/elementary-predicate.d.ts +10 -0
  1745. package/lib/search/models/predicate/predicate-with-generator.d.ts +45 -0
  1746. package/lib/search/models/predicate/predicate.d.ts +52 -0
  1747. package/lib/search/models/predicate-removal-event.d.ts +13 -0
  1748. package/lib/search/models/query/query.d.ts +44 -0
  1749. package/lib/search/models/search-index.d.ts +74 -0
  1750. package/lib/search/models/wrap-result.d.ts +13 -0
  1751. package/lib/search/operator-service/operator-resolver.service.d.ts +23 -0
  1752. package/lib/search/operator-service/operator.service.d.ts +16 -0
  1753. package/lib/search/public-api.d.ts +98 -0
  1754. package/lib/search/search-clause-component/abstract-search-clause.component.d.ts +28 -0
  1755. package/lib/search/search-component/abstract-search.component.d.ts +86 -0
  1756. package/lib/search/search-configuration-input-component/abstract-search-configuration-input.component.d.ts +42 -0
  1757. package/lib/search/search-keyword-resolver-service/search-index-resolver.service.d.ts +25 -0
  1758. package/lib/search/search-operand-input-component/abstract-search-operand-input.component.d.ts +38 -0
  1759. package/lib/search/search-predicate-component/abstract-search-predicate.component.d.ts +64 -0
  1760. package/lib/search/search-service/search.service.d.ts +182 -0
  1761. package/lib/side-menu/content-components/filter-selector/abstract-filter-selector.component.d.ts +105 -0
  1762. package/lib/side-menu/content-components/filter-selector/filter-selector-list-item/abstract-filter-selector-list-item.component.d.ts +20 -0
  1763. package/lib/side-menu/content-components/filter-selector/model/filter-selector-injection-data.d.ts +20 -0
  1764. package/lib/side-menu/content-components/filter-selector/model/filtered-array.d.ts +25 -0
  1765. package/lib/side-menu/content-components/import-net/abstract-import-net.component.d.ts +50 -0
  1766. package/lib/side-menu/content-components/injection-tokens.d.ts +8 -0
  1767. package/lib/side-menu/content-components/load-filter/abstract-load-filter.component.d.ts +13 -0
  1768. package/lib/side-menu/content-components/load-filter/model/load-filter-injection-data.d.ts +8 -0
  1769. package/lib/side-menu/content-components/new-case/abstract-new-case.component.d.ts +62 -0
  1770. package/lib/side-menu/content-components/new-case/model/new-case-injection-data.d.ts +13 -0
  1771. package/lib/side-menu/content-components/option-selector/abstract-option-selector.component.d.ts +14 -0
  1772. package/lib/side-menu/content-components/option-selector/model/option-selector-injection-data.d.ts +24 -0
  1773. package/lib/side-menu/content-components/public-api.d.ts +17 -0
  1774. package/lib/side-menu/content-components/save-filter/abstract-save-filter.component.d.ts +15 -0
  1775. package/lib/side-menu/content-components/save-filter/model/save-filter-injection-data.d.ts +4 -0
  1776. package/lib/side-menu/content-components/user-assign/abstract-user-assign.component.d.ts +46 -0
  1777. package/lib/side-menu/content-components/user-assign/model/user-list-injected-data.d.ts +11 -0
  1778. package/lib/side-menu/content-components/user-assign/user-assign-list/abstract-user-assign-list.component.d.ts +83 -0
  1779. package/lib/side-menu/content-components/user-assign/user-assign-list/user-assign-item/abstract-user-assign-item.component.d.ts +16 -0
  1780. package/lib/side-menu/models/portal-wrapper.d.ts +9 -0
  1781. package/lib/side-menu/models/side-menu-control.d.ts +15 -0
  1782. package/lib/side-menu/models/side-menu-event.d.ts +6 -0
  1783. package/lib/side-menu/models/side-menu-injection-data.d.ts +3 -0
  1784. package/lib/side-menu/models/side-menu-ref.d.ts +8 -0
  1785. package/lib/side-menu/models/side-menu-size.d.ts +5 -0
  1786. package/lib/side-menu/net-version-visible-injection-token.d.ts +3 -0
  1787. package/lib/side-menu/public-api.d.ts +10 -0
  1788. package/lib/side-menu/services/side-menu.service.d.ts +35 -0
  1789. package/lib/side-menu/side-menu-container/abstract-side-menu-container.component.d.ts +16 -0
  1790. package/lib/side-menu/side-menu-injection-token.d.ts +3 -0
  1791. package/lib/snack-bar/components/error-snack-bar/error-snack-bar.component.d.ts +8 -0
  1792. package/lib/snack-bar/components/generic-snack-bar/generic-snack-bar.component.d.ts +8 -0
  1793. package/lib/snack-bar/components/success-snack-bar/success-snack-bar.component.d.ts +8 -0
  1794. package/lib/snack-bar/components/warning-snack-bar/warning-snack-bar.component.d.ts +8 -0
  1795. package/lib/snack-bar/models/abstract-snack-bar.d.ts +10 -0
  1796. package/lib/snack-bar/models/injection-token-snackbar.d.ts +4 -0
  1797. package/lib/snack-bar/models/snack-bar-enums.d.ts +9 -0
  1798. package/lib/snack-bar/models/snack-bar-injection-data.d.ts +5 -0
  1799. package/lib/snack-bar/public-api.d.ts +10 -0
  1800. package/lib/snack-bar/services/snack-bar.service.d.ts +18 -0
  1801. package/lib/snack-bar/snack-bar.module.d.ts +2 -0
  1802. package/lib/tabs/classes/opened-tab.d.ts +67 -0
  1803. package/lib/tabs/classes/tab-view.d.ts +123 -0
  1804. package/lib/tabs/interfaces.d.ts +135 -0
  1805. package/lib/tabs/public-api.d.ts +5 -0
  1806. package/lib/tabs/tab-creation-detector/abstract-tab-creation-detector.component.d.ts +18 -0
  1807. package/lib/tabs/tab-data-injection-token/tab-data-injection-token.d.ts +8 -0
  1808. package/lib/tabs/tab-view/abstract-tab-view.component.d.ts +38 -0
  1809. package/lib/task/interfaces/task-operations.d.ts +35 -0
  1810. package/lib/task/models/null-task-operations.d.ts +22 -0
  1811. package/lib/task/models/subject-task-operations.d.ts +37 -0
  1812. package/lib/task/models/task-operations-injection-token.d.ts +3 -0
  1813. package/lib/task/models/task-set-data-request-context.d.ts +11 -0
  1814. package/lib/task/public-api.d.ts +15 -0
  1815. package/lib/task/services/assign-policy.service.d.ts +81 -0
  1816. package/lib/task/services/assign-task.service.d.ts +78 -0
  1817. package/lib/task/services/cancel-task.service.d.ts +79 -0
  1818. package/lib/task/services/data-focus-policy.service.d.ts +16 -0
  1819. package/lib/task/services/delegate-task.service.d.ts +70 -0
  1820. package/lib/task/services/finish-policy.service.d.ts +38 -0
  1821. package/lib/task/services/finish-task.service.d.ts +76 -0
  1822. package/lib/task/services/selected-case.service.d.ts +35 -0
  1823. package/lib/task/services/task-data.service.d.ts +177 -0
  1824. package/lib/task/services/task-handling-service.d.ts +41 -0
  1825. package/lib/task/services/task-request-state.service.d.ts +64 -0
  1826. package/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.d.ts +22 -0
  1827. package/lib/task-content/model/async-rendering-configuration-injection-token.d.ts +8 -0
  1828. package/lib/task-content/model/async-rendering-configuration.d.ts +22 -0
  1829. package/lib/task-content/model/datafield-grid-layout-element.d.ts +9 -0
  1830. package/lib/task-content/model/field-type-resource.d.ts +21 -0
  1831. package/lib/task-content/model/policy.d.ts +27 -0
  1832. package/lib/task-content/model/resource-interface.d.ts +37 -0
  1833. package/lib/task-content/model/split-data-group.d.ts +7 -0
  1834. package/lib/task-content/model/subgrid.d.ts +145 -0
  1835. package/lib/task-content/model/task-content-element-type.d.ts +19 -0
  1836. package/lib/task-content/model/task-event-notification.d.ts +32 -0
  1837. package/lib/task-content/model/task-event.d.ts +8 -0
  1838. package/lib/task-content/public-api.d.ts +17 -0
  1839. package/lib/task-content/services/field-converter.service.d.ts +58 -0
  1840. package/lib/task-content/services/single-task-content.service.d.ts +42 -0
  1841. package/lib/task-content/services/task-content.service.d.ts +125 -0
  1842. package/lib/task-content/services/task-event.service.d.ts +28 -0
  1843. package/lib/task-content/services/unlimited-task-content.service.d.ts +42 -0
  1844. package/lib/task-content/task-content/abstract-task-content.component.d.ts +263 -0
  1845. package/lib/toolbar/abstract-toolbar.component.d.ts +15 -0
  1846. package/lib/toolbar/public-api.d.ts +1 -0
  1847. package/lib/translate/language.service.d.ts +20 -0
  1848. package/lib/translate/public-api.d.ts +2 -0
  1849. package/lib/translate/translate-interceptor.d.ts +8 -0
  1850. package/lib/translate/translate-lib.module.d.ts +5 -0
  1851. package/lib/user/components/user-card/abstract-user-card.component.d.ts +22 -0
  1852. package/lib/user/models/iuser.d.ts +19 -0
  1853. package/lib/user/models/public-api.d.ts +3 -0
  1854. package/lib/user/models/user.d.ts +29 -0
  1855. package/lib/user/models/view-id-injection-tokens.d.ts +3 -0
  1856. package/lib/user/profile/abstract-profile.component.d.ts +14 -0
  1857. package/lib/user/public-api.d.ts +8 -0
  1858. package/lib/user/services/user-comparator.service.d.ts +7 -0
  1859. package/lib/user/services/user-list.service.d.ts +111 -0
  1860. package/lib/user/services/user-preference.service.d.ts +37 -0
  1861. package/lib/user/services/user.service.d.ts +65 -0
  1862. package/lib/user/services/view-id.service.d.ts +7 -0
  1863. package/lib/utility/array-to-observable.d.ts +6 -0
  1864. package/lib/utility/call-chain/after-action.d.ts +8 -0
  1865. package/lib/utility/call-chain/call-chain.service.d.ts +16 -0
  1866. package/lib/utility/clear-time-information.d.ts +6 -0
  1867. package/lib/utility/destroy-subscription.d.ts +6 -0
  1868. package/lib/utility/get-field.d.ts +34 -0
  1869. package/lib/utility/get-immediate-data.d.ts +8 -0
  1870. package/lib/utility/grid-layout/grid-layout-helper.d.ts +10 -0
  1871. package/lib/utility/grid-layout/model/grid-element-with-item.d.ts +4 -0
  1872. package/lib/utility/grid-layout/model/grid-element.d.ts +12 -0
  1873. package/lib/utility/grid-layout/model/grid-filler.d.ts +10 -0
  1874. package/lib/utility/incrementing-counter.d.ts +14 -0
  1875. package/lib/utility/loading-emitter.d.ts +8 -0
  1876. package/lib/utility/loading-with-filter-emitter.d.ts +12 -0
  1877. package/lib/utility/navigation-item-task-filter-factory.d.ts +9 -0
  1878. package/lib/utility/navigation-item-task-search-categories-factory.d.ts +15 -0
  1879. package/lib/utility/of-void.d.ts +6 -0
  1880. package/lib/utility/pagination/load-all-pages.d.ts +13 -0
  1881. package/lib/utility/pagination/page-has-content.d.ts +6 -0
  1882. package/lib/utility/process-message-response.d.ts +10 -0
  1883. package/lib/utility/public-api.d.ts +45 -0
  1884. package/lib/utility/refresh-tree.d.ts +5 -0
  1885. package/lib/utility/result-with-after-actions.d.ts +21 -0
  1886. package/lib/utility/service/case-list-font-color.service.d.ts +15 -0
  1887. package/lib/utility/service/spinner-overlay.service.d.ts +13 -0
  1888. package/lib/utility/stop-propagation.d.ts +1 -0
  1889. package/lib/utility/tests/mocks/mock-authentication-method-service.d.ts +8 -0
  1890. package/lib/utility/tests/mocks/mock-authentication.service.d.ts +10 -0
  1891. package/lib/utility/tests/mocks/mock-endpoint.d.ts +25 -0
  1892. package/lib/utility/tests/mocks/mock-sign-up.service.d.ts +20 -0
  1893. package/lib/utility/tests/mocks/mock-user-autocomplete-value.d.ts +7 -0
  1894. package/lib/utility/tests/mocks/mock-user-preference.service.d.ts +15 -0
  1895. package/lib/utility/tests/mocks/mock-user-resource.service.d.ts +17 -0
  1896. package/lib/utility/tests/search-category-mock-dependencies.d.ts +6 -0
  1897. package/lib/utility/tests/test-config.d.ts +4 -0
  1898. package/lib/utility/tests/test-factory-methods.d.ts +7 -0
  1899. package/lib/utility/tests/test-mock-dependencies.module.d.ts +12 -0
  1900. package/lib/utility/tests/test-view-service.d.ts +7 -0
  1901. package/lib/utility/tests/utility/configure-category.d.ts +13 -0
  1902. package/lib/utility/tests/utility/create-mock-case-outcome.d.ts +10 -0
  1903. package/lib/utility/tests/utility/create-mock-case.d.ts +8 -0
  1904. package/lib/utility/tests/utility/create-mock-datagroup.d.ts +18 -0
  1905. package/lib/utility/tests/utility/create-mock-field.d.ts +19 -0
  1906. package/lib/utility/tests/utility/create-mock-get-data-outcome.d.ts +7 -0
  1907. package/lib/utility/tests/utility/create-mock-immediate-data.d.ts +8 -0
  1908. package/lib/utility/tests/utility/create-mock-net.d.ts +17 -0
  1909. package/lib/utility/tests/utility/create-mock-page.d.ts +7 -0
  1910. package/lib/utility/tests/utility/create-mock-petri-net-outcome.d.ts +9 -0
  1911. package/lib/utility/tests/utility/create-mock-set-data-outcome.d.ts +12 -0
  1912. package/lib/utility/tests/utility/create-mock-task-outcome.d.ts +11 -0
  1913. package/lib/utility/tests/utility/create-mock-task.d.ts +8 -0
  1914. package/lib/view/abstract/page-load-request-context.d.ts +40 -0
  1915. package/lib/view/abstract/sortable-view.d.ts +19 -0
  1916. package/lib/view/abstract/view-with-headers.d.ts +13 -0
  1917. package/lib/view/case-view/abstract-case-view.d.ts +25 -0
  1918. package/lib/view/case-view/components/case-list/abstract-case-list.component.d.ts +35 -0
  1919. package/lib/view/case-view/models/case-page-load-request-result.d.ts +14 -0
  1920. package/lib/view/case-view/models/case-view-params.d.ts +3 -0
  1921. package/lib/view/case-view/models/new-case-configuration-injection-token.d.ts +7 -0
  1922. package/lib/view/case-view/models/new-case-configuration.d.ts +9 -0
  1923. package/lib/view/case-view/service/case-view-service.d.ts +73 -0
  1924. package/lib/view/case-view/tabbed-case-view.d.ts +26 -0
  1925. package/lib/view/public-api.d.ts +35 -0
  1926. package/lib/view/task-view/abstract-task-view.d.ts +12 -0
  1927. package/lib/view/task-view/models/injected-tabbed-task-view-data.d.ts +12 -0
  1928. package/lib/view/task-view/models/injection-token-task-endpoint.d.ts +6 -0
  1929. package/lib/view/task-view/models/task-endpoint.d.ts +7 -0
  1930. package/lib/view/task-view/models/task-page-load-request-result.d.ts +14 -0
  1931. package/lib/view/task-view/models/task-view-configuration-injection-token.d.ts +13 -0
  1932. package/lib/view/task-view/models/task-view-configuration.d.ts +19 -0
  1933. package/lib/view/task-view/models/task-view-params.d.ts +3 -0
  1934. package/lib/view/task-view/service/task-view.service.d.ts +68 -0
  1935. package/lib/view/task-view/tabbed-task-view.d.ts +11 -0
  1936. package/lib/view/tree-case-view/model/tree-petriflow-identifiers.d.ts +41 -0
  1937. package/lib/view/tree-case-view/tree-case-view.service.d.ts +9 -0
  1938. package/lib/view/tree-case-view/tree-component/abstract-tree.component.d.ts +99 -0
  1939. package/lib/view/tree-case-view/tree-component/add-child-node/abstract-add-child-node.component.d.ts +8 -0
  1940. package/lib/view/tree-case-view/tree-component/case-tree.service.d.ts +300 -0
  1941. package/lib/view/tree-case-view/tree-component/model/case-tree-node.d.ts +57 -0
  1942. package/lib/view/tree-case-view/tree-component/model/case-tree-path.d.ts +8 -0
  1943. package/lib/view/tree-case-view/tree-component/model/expansion-tree.d.ts +6 -0
  1944. package/lib/view/tree-case-view/tree-component/remove-node/abstract-remove-node.component.d.ts +8 -0
  1945. package/lib/view/tree-case-view/tree-task-content/abstract-tree-task-content.component.d.ts +32 -0
  1946. package/lib/view/tree-case-view/tree-task-content/tree-task-content.service.d.ts +112 -0
  1947. package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +30 -0
  1948. package/lib/view/workflow-view/models/injection-token-workflow-service.d.ts +10 -0
  1949. package/lib/view/workflow-view/workflow-view.service.d.ts +52 -0
  1950. package/netgrif-components-core.d.ts +25 -0
  1951. package/netgrif-components-core.metadata.json +1 -0
  1952. package/package.json +79 -0
  1953. package/public-api.d.ts +39 -0
  1954. package/schematics/_commons/angular-cli-devkit-core-strings.d.ts +93 -0
  1955. package/schematics/_commons/angular-cli-devkit-core-strings.js +167 -0
  1956. package/schematics/_commons/angular-cli-devkit-core-strings.js.map +1 -0
  1957. package/schematics/_commons/import-to-add.d.ts +5 -0
  1958. package/schematics/_commons/import-to-add.js +11 -0
  1959. package/schematics/_commons/import-to-add.js.map +1 -0
  1960. package/schematics/_commons/view-class-info.d.ts +22 -0
  1961. package/schematics/_commons/view-class-info.js +58 -0
  1962. package/schematics/_commons/view-class-info.js.map +1 -0
  1963. package/schematics/_utility/models/file-data.d.ts +6 -0
  1964. package/schematics/_utility/models/file-data.js +3 -0
  1965. package/schematics/_utility/models/file-data.js.map +1 -0
  1966. package/schematics/_utility/models/file-system-node.d.ts +6 -0
  1967. package/schematics/_utility/models/file-system-node.js +12 -0
  1968. package/schematics/_utility/models/file-system-node.js.map +1 -0
  1969. package/schematics/_utility/models/project-info.d.ts +13 -0
  1970. package/schematics/_utility/models/project-info.js +20 -0
  1971. package/schematics/_utility/models/project-info.js.map +1 -0
  1972. package/schematics/_utility/modified-library-functions.d.ts +24 -0
  1973. package/schematics/_utility/modified-library-functions.js +150 -0
  1974. package/schematics/_utility/modified-library-functions.js.map +1 -0
  1975. package/schematics/_utility/utility-functions.d.ts +60 -0
  1976. package/schematics/_utility/utility-functions.js +221 -0
  1977. package/schematics/_utility/utility-functions.js.map +1 -0
  1978. package/schematics/add/add/index.d.ts +2 -0
  1979. package/schematics/add/add/index.js +27 -0
  1980. package/schematics/add/add/index.js.map +1 -0
  1981. package/schematics/add/create-nae-files/files/app-routing.module.ts.template +13 -0
  1982. package/schematics/add/create-nae-files/index.d.ts +2 -0
  1983. package/schematics/add/create-nae-files/index.js +154 -0
  1984. package/schematics/add/create-nae-files/index.js.map +1 -0
  1985. package/schematics/add/create-nae-files/schema.json +7 -0
  1986. package/schematics/collection.json +30 -0
  1987. package/schematics/configuration-service/files/__project@dasherize__-configuration.service.ts.template +13 -0
  1988. package/schematics/configuration-service/schema.json +7 -0
  1989. package/schematics/configuration-service/schematic-create-configuration-service.d.ts +2 -0
  1990. package/schematics/configuration-service/schematic-create-configuration-service.js +41 -0
  1991. package/schematics/configuration-service/schematic-create-configuration-service.js.map +1 -0
  1992. package/schematics/migrations/4.1/migration-4.1.d.ts +5 -0
  1993. package/schematics/migrations/4.1/migration-4.1.js +37 -0
  1994. package/schematics/migrations/4.1/migration-4.1.js.map +1 -0
  1995. package/schematics/migrations.json +10 -0
  1996. package/schematics/view/_utility/view-service-functions.d.ts +9 -0
  1997. package/schematics/view/_utility/view-service-functions.js +59 -0
  1998. package/schematics/view/_utility/view-service-functions.js.map +1 -0
  1999. package/schematics/view/_utility/view-utility-functions.d.ts +7 -0
  2000. package/schematics/view/_utility/view-utility-functions.js +53 -0
  2001. package/schematics/view/_utility/view-utility-functions.js.map +1 -0
  2002. package/schematics/view-service/files/__project@dasherize__-view.service.ts.template +14 -0
  2003. package/schematics/view-service/schema.json +7 -0
  2004. package/schematics/view-service/schematic-create-view-service.d.ts +2 -0
  2005. package/schematics/view-service/schematic-create-view-service.js +25 -0
  2006. package/schematics/view-service/schematic-create-view-service.js.map +1 -0
  2007. package/src/assets/i18n/de.json +419 -0
  2008. package/src/assets/i18n/en.json +419 -0
  2009. package/src/assets/i18n/sk.json +419 -0
  2010. package/src/schema/nae-schema.json +770 -0
@@ -0,0 +1,899 @@
1
+ import { __read, __spread } from "tslib";
2
+ import { Inject, Injectable, Optional } from '@angular/core';
3
+ import { HttpParams } from '@angular/common/http';
4
+ import { CaseResourceService } from '../../../resources/engine-endpoint/case-resource.service';
5
+ import { CaseTreeNode } from './model/case-tree-node';
6
+ import { TreeCaseViewService } from '../tree-case-view.service';
7
+ import { TaskResourceService } from '../../../resources/engine-endpoint/task-resource.service';
8
+ import { LoggerService } from '../../../logger/services/logger.service';
9
+ import { ProcessService } from '../../../process/process.service';
10
+ import { SideMenuService } from '../../../side-menu/services/side-menu.service';
11
+ import { SideMenuSize } from '../../../side-menu/models/side-menu-size';
12
+ import { forkJoin, of, ReplaySubject, throwError } from 'rxjs';
13
+ import { TreePetriflowIdentifiers } from '../model/tree-petriflow-identifiers';
14
+ import { tap } from 'rxjs/operators';
15
+ import { TranslateService } from '@ngx-translate/core';
16
+ import { hasContent } from '../../../utility/pagination/page-has-content';
17
+ import { NestedTreeControl } from '@angular/cdk/tree';
18
+ import { MatTreeNestedDataSource } from '@angular/material/tree';
19
+ import { ofVoid } from '../../../utility/of-void';
20
+ import { getImmediateData } from '../../../utility/get-immediate-data';
21
+ import { NAE_OPTION_SELECTOR_COMPONENT } from '../../../side-menu/content-components/injection-tokens';
22
+ import { SimpleFilter } from '../../../filter/models/simple-filter';
23
+ import { ResultWithAfterActions } from '../../../utility/result-with-after-actions';
24
+ import { refreshTree } from '../../../utility/refresh-tree';
25
+ var CaseTreeService = /** @class */ (function () {
26
+ function CaseTreeService(_caseResourceService, _treeCaseViewService, _taskResourceService, _logger, _processService, _sideMenuService, _translateService, _optionSelectorComponent) {
27
+ var _this = this;
28
+ this._caseResourceService = _caseResourceService;
29
+ this._treeCaseViewService = _treeCaseViewService;
30
+ this._taskResourceService = _taskResourceService;
31
+ this._logger = _logger;
32
+ this._processService = _processService;
33
+ this._sideMenuService = _sideMenuService;
34
+ this._translateService = _translateService;
35
+ this._optionSelectorComponent = _optionSelectorComponent;
36
+ /**
37
+ * Weather the tree is eager loaded or not.
38
+ *
39
+ * Defaults to `false`.
40
+ *
41
+ * It is not recommended to eager load large trees as each node sends a separate backend request to load its data.
42
+ */
43
+ this._isEagerLoaded = false;
44
+ this._treeDataSource = new MatTreeNestedDataSource();
45
+ this._treeControl = new NestedTreeControl(function (node) { return node.children; });
46
+ _treeCaseViewService.reloadCase$.asObservable().subscribe(function () {
47
+ _this.reloadCurrentCase();
48
+ });
49
+ this._treeRootLoaded$ = new ReplaySubject(1);
50
+ }
51
+ CaseTreeService.prototype.ngOnDestroy = function () {
52
+ this._treeRootLoaded$.complete();
53
+ };
54
+ Object.defineProperty(CaseTreeService.prototype, "rootFilter", {
55
+ set: function (filter) {
56
+ this._rootNodesFilter = filter;
57
+ this.dataSource.data = [];
58
+ this.loadTreeRoot();
59
+ },
60
+ enumerable: false,
61
+ configurable: true
62
+ });
63
+ Object.defineProperty(CaseTreeService.prototype, "dataSource", {
64
+ get: function () {
65
+ return this._treeDataSource;
66
+ },
67
+ enumerable: false,
68
+ configurable: true
69
+ });
70
+ Object.defineProperty(CaseTreeService.prototype, "treeControl", {
71
+ get: function () {
72
+ return this._treeControl;
73
+ },
74
+ enumerable: false,
75
+ configurable: true
76
+ });
77
+ Object.defineProperty(CaseTreeService.prototype, "currentNode", {
78
+ get: function () {
79
+ return this._currentNode;
80
+ },
81
+ enumerable: false,
82
+ configurable: true
83
+ });
84
+ Object.defineProperty(CaseTreeService.prototype, "treeRootLoaded$", {
85
+ /**
86
+ * Emits a value whenever a new root node Filter is set.
87
+ *
88
+ * `true` is emitted if the root node was successfully loaded. `false` otherwise.
89
+ *
90
+ * On subscription emits the last emitted value (if any) to the subscriber.
91
+ */
92
+ get: function () {
93
+ return this._treeRootLoaded$.asObservable();
94
+ },
95
+ enumerable: false,
96
+ configurable: true
97
+ });
98
+ Object.defineProperty(CaseTreeService.prototype, "_currentCase", {
99
+ get: function () {
100
+ return this._currentNode ? this._currentNode.case : undefined;
101
+ },
102
+ enumerable: false,
103
+ configurable: true
104
+ });
105
+ Object.defineProperty(CaseTreeService.prototype, "rootNodeLoading$", {
106
+ /**
107
+ * @returns an `Observable` of the {@link LoadingEmitter} representing the loading state of the root node.
108
+ * Returns `undefined` if the tree has not yet been initialized.
109
+ *
110
+ * Wait for an emission on the [treeRootLoaded$]{@link CaseTreeService#treeRootLoaded$} stream before getting this Observable.
111
+ *
112
+ * The first value emitted by the Observable is `false`, when the tree finishes initializing.
113
+ */
114
+ get: function () {
115
+ return !!this._rootNode ? this._rootNode.loadingChildren.asObservable() : undefined;
116
+ },
117
+ enumerable: false,
118
+ configurable: true
119
+ });
120
+ Object.defineProperty(CaseTreeService.prototype, "rootNodeAddingChild$", {
121
+ /**
122
+ * @returns an `Observable` of the {@link LoadingEmitter} representing whether the root node is currently
123
+ * in the process of adding a new child node or not.
124
+ * Returns `undefined` if the tree has not yet been initialized.
125
+ *
126
+ * Wait for an emission on the [treeRootLoaded$]{@link CaseTreeService#treeRootLoaded$} stream before getting this Observable.
127
+ *
128
+ * The first value emitted by the Observable is `false`, when the tree finishes initializing.
129
+ */
130
+ get: function () {
131
+ return !!this._rootNode ? this._rootNode.addingNode.asObservable() : undefined;
132
+ },
133
+ enumerable: false,
134
+ configurable: true
135
+ });
136
+ Object.defineProperty(CaseTreeService.prototype, "isEagerLoaded", {
137
+ /**
138
+ * Weather the tree is eager loaded or not.
139
+ *
140
+ * Defaults to `false`.
141
+ *
142
+ * It is not recommended to eager load large trees as each node sends a separate backend request to load its data.
143
+ */
144
+ get: function () {
145
+ return this._isEagerLoaded;
146
+ },
147
+ /**
148
+ * Weather the tree is eager loaded or not.
149
+ *
150
+ * Defaults to `false`.
151
+ *
152
+ * It is not recommended to eager load large trees as each node sends a separate backend request to load its data.
153
+ *
154
+ * @param eager the new setting for eager loading
155
+ */
156
+ set: function (eager) {
157
+ this._isEagerLoaded = eager;
158
+ },
159
+ enumerable: false,
160
+ configurable: true
161
+ });
162
+ /**
163
+ * Loads and populates the topmost level of the tree.
164
+ *
165
+ * The displayed cases are determined by this object's [rootFilter]{@link CaseTreeService#rootFilter}.
166
+ *
167
+ * Cases are loaded one page at a time and the tree is refreshed after each page.
168
+ * [finishedLoadingFirstLevel$]{@link CaseTreeService#treeRootLoaded$}
169
+ * will emit `true` once the last page loads successfully.
170
+ * `false` will be emitted if any of the requests fail.
171
+ */
172
+ CaseTreeService.prototype.loadTreeRoot = function () {
173
+ var _this = this;
174
+ if (this._rootNodesFilter) {
175
+ this._caseResourceService.searchCases(this._rootNodesFilter).subscribe(function (page) {
176
+ if (hasContent(page)) {
177
+ _this._rootNode = new CaseTreeNode(page.content[0], undefined);
178
+ if (page.content.length !== 1) {
179
+ _this._logger.warn('Filter for tree root returned more than one case. Using the first value as tree root...');
180
+ }
181
+ _this._treeRootLoaded$.next(true);
182
+ }
183
+ else {
184
+ _this._logger.error('Tree root cannot be generated from the provided filter', page);
185
+ }
186
+ }, function (error) {
187
+ _this._logger.error('Root node of the case tree could not be loaded', error);
188
+ _this._treeRootLoaded$.next(false);
189
+ });
190
+ }
191
+ };
192
+ /**
193
+ * Adds the loaded tree root to the display based on the setting.
194
+ * @param showRoot whether the root of the tree should be displayed in the tree or not.
195
+ * If the root is not displayed it's children will be displayed on the first level.
196
+ * @returns an Observable that emits when the tree finishes initialization.
197
+ */
198
+ CaseTreeService.prototype.initializeTree = function (showRoot) {
199
+ var _this = this;
200
+ if (!this._rootNode) {
201
+ this._logger.error('Set a Filter before initializing the case tree');
202
+ return throwError(new Error('Set a Filter before initializing the case tree'));
203
+ }
204
+ this._showRoot = showRoot;
205
+ if (showRoot) {
206
+ this.dataSource.data = [this._rootNode];
207
+ }
208
+ else {
209
+ this.dataSource.data = this._rootNode.children;
210
+ }
211
+ var ret;
212
+ if (!showRoot || this._isEagerLoaded) {
213
+ var result_1 = new ReplaySubject(1);
214
+ ret = result_1.asObservable();
215
+ this.expandNode(this._rootNode).subscribe(function () {
216
+ _this.refreshTree();
217
+ result_1.next();
218
+ result_1.complete();
219
+ });
220
+ }
221
+ else {
222
+ this.refreshTree();
223
+ ret = ofVoid();
224
+ }
225
+ return ret;
226
+ };
227
+ /**
228
+ * Notifies the parent TreeCaseView that a case was clicked in the tree and it's Task should be displayed
229
+ */
230
+ CaseTreeService.prototype.changeActiveNode = function (node) {
231
+ this._currentNode = node;
232
+ this._treeCaseViewService.loadTask$.next(node ? node.case : undefined);
233
+ };
234
+ /**
235
+ * Toggles the expansion state of a node
236
+ * @param node the {@link CaseTreeNode} who's content should be toggled
237
+ */
238
+ CaseTreeService.prototype.toggleNode = function (node) {
239
+ if (this._treeControl.isExpanded(node)) {
240
+ this._treeControl.collapse(node);
241
+ }
242
+ else {
243
+ this.expandNode(node);
244
+ }
245
+ };
246
+ /**
247
+ * Expands the target node in the tree and reloads it's children if they are marked as dirty
248
+ * @param node the {@link CaseTreeNode} that should be expanded
249
+ * @returns emits `true` if the node is expanded and `false` if not. If the expansion causes more node expansions
250
+ * (e.g. eager loaded tree) then, the Observable emits after all the subtree expansions complete.
251
+ */
252
+ CaseTreeService.prototype.expandNode = function (node) {
253
+ var _this = this;
254
+ this._logger.debug('Requesting expansion of tree node', node.toLoggableForm());
255
+ if (node.loadingChildren.isActive) {
256
+ this._logger.debug('Node requested for expansion is loading. Expansion canceled.');
257
+ return of(false);
258
+ }
259
+ if (!node.dirtyChildren) {
260
+ this._logger.debug('Node requested for expansion has clean children. Simple expansion.');
261
+ this.treeControl.expand(node);
262
+ return of(true);
263
+ }
264
+ var ret = new ReplaySubject(1);
265
+ this.updateNodeChildren(node).subscribe(function () {
266
+ _this._logger.debug('Node requested for expansion with dirty children had its children reloaded.');
267
+ if (node.children.length > 0) {
268
+ _this._logger.debug('Node expanded.', node.toLoggableForm());
269
+ _this.treeControl.expand(node);
270
+ if (_this._isEagerLoaded) {
271
+ _this._logger.debug("Eager loading children of tree node with case id '" + node.case.stringId + "'");
272
+ var innerObservables = node.children.map(function (childNode) { return _this.expandNode(childNode); });
273
+ // forkJoin doesn't emit with 0 input observables
274
+ innerObservables.push(of(true));
275
+ forkJoin(innerObservables).subscribe(function () {
276
+ ret.next(true);
277
+ ret.complete();
278
+ });
279
+ }
280
+ else {
281
+ ret.next(true);
282
+ ret.complete();
283
+ }
284
+ }
285
+ else {
286
+ ret.next(false);
287
+ ret.complete();
288
+ }
289
+ });
290
+ return ret.asObservable();
291
+ };
292
+ /**
293
+ * Checks whether dirty children need to be reloaded and reloads them if needed.
294
+ * @param node the {@link CaseTreeNode} who's children are updated
295
+ * @returns emits when loading finishes
296
+ */
297
+ CaseTreeService.prototype.updateNodeChildren = function (node) {
298
+ var _this = this;
299
+ node.loadingChildren.on();
300
+ var childrenCaseRef = getImmediateData(node.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
301
+ if (!childrenCaseRef || childrenCaseRef.value.length === 0) {
302
+ node.children = [];
303
+ this.refreshTree();
304
+ node.dirtyChildren = false;
305
+ node.loadingChildren.off();
306
+ return ofVoid();
307
+ }
308
+ if (node.children.length === childrenCaseRef.value.length) {
309
+ var existingChildren_1 = new Set();
310
+ node.children.forEach(function (childNode) { return existingChildren_1.add(childNode.case.stringId); });
311
+ if (childrenCaseRef.value.every(function (caseId) { return existingChildren_1.has(caseId); })) {
312
+ node.dirtyChildren = false;
313
+ node.loadingChildren.off();
314
+ return ofVoid();
315
+ }
316
+ }
317
+ return this.updatePageOfChildren(node, 0).pipe(tap(function () {
318
+ _this.refreshTree();
319
+ node.dirtyChildren = false;
320
+ node.loadingChildren.off();
321
+ }));
322
+ };
323
+ /**
324
+ * Loads every page of children from the given number and updates the existing children.
325
+ *
326
+ * Missing nodes are removed. Existing nodes are marked as dirty. New nodes are added.
327
+ *
328
+ * Nodes are returned in their insertion order.
329
+ * @param node the {@link CaseTreeNode} who's children are updated
330
+ * @param pageNumber the number of the first page that should be loaded. All following pages are loaded as well
331
+ * @returns next is emitted when loading of all pages completes (regardless of the outcome)
332
+ */
333
+ CaseTreeService.prototype.updatePageOfChildren = function (node, pageNumber) {
334
+ var _this = this;
335
+ var requestBody = this.createChildRequestBody(node);
336
+ if (!requestBody) {
337
+ this._logger.error('Cannot create filter to find children of the given node', node.case);
338
+ return throwError(new Error('Cannot create filter to find children of the given node'));
339
+ }
340
+ var done = new ReplaySubject(1);
341
+ var params = new HttpParams();
342
+ params = params.set('page', "" + pageNumber).set('sort', 'creationDate,asc');
343
+ this._caseResourceService.getCases(requestBody, params).subscribe(function (page) {
344
+ if (!hasContent(page)) {
345
+ _this._logger.error('Child cases invalid page content', page);
346
+ done.next();
347
+ done.complete();
348
+ return;
349
+ }
350
+ _this.updateCurrentChildrenWithNewPage(node, page);
351
+ if (pageNumber + 1 < page.pagination.totalPages) {
352
+ _this.updatePageOfChildren(node, pageNumber + 1).subscribe(function () {
353
+ done.next();
354
+ done.complete();
355
+ });
356
+ }
357
+ else {
358
+ done.next();
359
+ done.complete();
360
+ }
361
+ }, function (error) {
362
+ _this._logger.error('Child cases could not be loaded', error);
363
+ done.next();
364
+ done.complete();
365
+ });
366
+ return done.asObservable();
367
+ };
368
+ /**
369
+ * Updates the children of the given {@link CaseTreeNode} with [Cases]{@link Case} from the provided {@link Page}.
370
+ * @param node the {@link CaseTreeNode} who's children are updated
371
+ * @param page the {@link Page} that contains the updated children
372
+ */
373
+ CaseTreeService.prototype.updateCurrentChildrenWithNewPage = function (node, page) {
374
+ var _this = this;
375
+ page.content.forEach(function (newCase, index) {
376
+ var position = page.pagination.size * page.pagination.number + index;
377
+ while (position < node.children.length && node.children[position].case.stringId !== newCase.stringId) {
378
+ node.children.splice(position, 1);
379
+ }
380
+ if (node.children.length === position) {
381
+ node.children.push(new CaseTreeNode(newCase, node));
382
+ }
383
+ else {
384
+ node.children[position].case = newCase;
385
+ node.dirtyChildren = true;
386
+ _this.treeControl.collapseDescendants(node.children[position]);
387
+ }
388
+ });
389
+ };
390
+ /**
391
+ * @param node the {@link CaseTreeNode} who's children the {@link Filter} should return
392
+ * @returns a request body that finds all child cases of the given `node`.
393
+ * Returns `undefined` if the provided `node` doesn't contain enough information to create the request body.
394
+ */
395
+ CaseTreeService.prototype.createChildRequestBody = function (node) {
396
+ var childCaseRef = getImmediateData(node.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
397
+ if (!childCaseRef) {
398
+ return undefined;
399
+ }
400
+ return { stringId: childCaseRef.value };
401
+ };
402
+ /**
403
+ * Adds a child to the root node.
404
+ *
405
+ * Useful if you are using the layout where the root node is hidden.
406
+ * @returns emits `true` if the child was successfully added, `false` if not
407
+ */
408
+ CaseTreeService.prototype.addRootChildNode = function () {
409
+ var _this = this;
410
+ var ret = new ReplaySubject(1);
411
+ this.addChildNode(this._rootNode).subscribe(function (added) {
412
+ if (added) {
413
+ if (!_this._showRoot && _this._treeDataSource.data.length === 0) {
414
+ _this._treeDataSource.data = _this._rootNode.children;
415
+ _this.refreshTree();
416
+ }
417
+ }
418
+ ret.next(added);
419
+ ret.complete();
420
+ });
421
+ return ret;
422
+ };
423
+ /**
424
+ * Adds a new child node to the given node based on the properties of the node's case
425
+ * @returns emits `true` if the child was successfully added, `false` if not
426
+ */
427
+ CaseTreeService.prototype.addChildNode = function (clickedNode) {
428
+ var _this = this;
429
+ clickedNode.addingNode.on();
430
+ var caseRefField = getImmediateData(clickedNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
431
+ if (caseRefField.allowedNets.length === 0) {
432
+ this._logger.error("Case " + clickedNode.case.stringId + " can add new tree nodes but has no allowed nets");
433
+ clickedNode.addingNode.off();
434
+ return of(false);
435
+ }
436
+ var ret = new ReplaySubject(1);
437
+ if (caseRefField.allowedNets.length === 1) {
438
+ this.createAndAddChildCase(caseRefField.allowedNets[0], clickedNode, ret);
439
+ }
440
+ else {
441
+ this._processService.getNets(caseRefField.allowedNets).subscribe(function (nets) {
442
+ var sideMeuRef = _this._sideMenuService.open(_this._optionSelectorComponent, SideMenuSize.MEDIUM, {
443
+ title: clickedNode.case.title,
444
+ options: nets.map(function (net) { return ({ text: net.title, value: net.identifier }); })
445
+ });
446
+ var sideMenuSubscription;
447
+ sideMenuSubscription = sideMeuRef.onClose.subscribe(function (event) {
448
+ if (!!event.data) {
449
+ _this.createAndAddChildCase(event.data.value, clickedNode, ret);
450
+ sideMenuSubscription.unsubscribe();
451
+ }
452
+ else {
453
+ clickedNode.addingNode.off();
454
+ ret.next(false);
455
+ ret.complete();
456
+ }
457
+ });
458
+ });
459
+ }
460
+ return ret.asObservable();
461
+ };
462
+ /**
463
+ * Creates a new case and adds it to the children of the specified node
464
+ * @param processIdentifier identifier of the process that should be created
465
+ * @param clickedNode the node that is the parent of the new case
466
+ * @param operationResult the result of the operation will be emitted into this stream when the operation completes
467
+ */
468
+ CaseTreeService.prototype.createAndAddChildCase = function (processIdentifier, clickedNode, operationResult) {
469
+ var _this = this;
470
+ this._processService.getNet(processIdentifier).subscribe(function (net) {
471
+ var childTitleImmediate = getImmediateData(clickedNode.case, TreePetriflowIdentifiers.CHILD_NODE_TITLE);
472
+ var childTitle = _this._translateService.instant('caseTree.newNodeDefaultName');
473
+ if (!!childTitleImmediate) {
474
+ childTitle = childTitleImmediate.value;
475
+ }
476
+ else if (!!net.defaultCaseName) {
477
+ childTitle = net.defaultCaseName;
478
+ }
479
+ _this._caseResourceService.createCase({
480
+ title: childTitle,
481
+ netId: net.stringId
482
+ }).subscribe(function (outcomeResource) {
483
+ var caseRefField = getImmediateData(clickedNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
484
+ var setCaseRefValue = __spread(caseRefField.value, [outcomeResource.outcome.aCase.stringId]);
485
+ _this.performCaseRefCall(clickedNode.case.stringId, setCaseRefValue).subscribe(function (valueChange) { return _this.updateTreeAfterChildAdd(clickedNode, valueChange ? valueChange : setCaseRefValue, operationResult); });
486
+ });
487
+ });
488
+ };
489
+ /**
490
+ * Updates the tree after adding a new child
491
+ * @param clickedNode the parent node
492
+ * @param newCaseRefValue the new value of the parent node's case ref
493
+ * @param operationResult the result of the operation will be emitted into this stream when the operation completes
494
+ */
495
+ CaseTreeService.prototype.updateTreeAfterChildAdd = function (clickedNode, newCaseRefValue, operationResult) {
496
+ var _this = this;
497
+ this.updateNodeChildrenFromChangedFields(clickedNode, newCaseRefValue).subscribe(function (result) {
498
+ clickedNode.addingNode.off();
499
+ _this.expandNode(clickedNode).subscribe(function (expandSuccess) {
500
+ if (expandSuccess) {
501
+ _this.changeActiveNode(clickedNode.children[clickedNode.children.length - 1]);
502
+ result.executeAfterActions();
503
+ }
504
+ operationResult.next(true);
505
+ operationResult.complete();
506
+ });
507
+ });
508
+ };
509
+ /**
510
+ * removes the provided non-root node if the underlying case allows it.
511
+ *
512
+ * The underlying case is removed from the case ref of it's parent element with the help from the `remove`
513
+ * operation provided by case ref itself.
514
+ * @param node the node that should be removed from the tree
515
+ */
516
+ CaseTreeService.prototype.removeNode = function (node) {
517
+ var _this = this;
518
+ if (!node.parent) {
519
+ this._logger.error('Case tree doesn\'t support removal of the root node, as it has no parent case ref.');
520
+ return;
521
+ }
522
+ node.removingNode.on();
523
+ var caseRefImmediate = getImmediateData(node.parent.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
524
+ var setCaseRefValue = caseRefImmediate.value.filter(function (id) { return id !== node.case.stringId; });
525
+ this.performCaseRefCall(node.parent.case.stringId, setCaseRefValue).subscribe(function (caseRefChange) {
526
+ var newCaseRefValue = caseRefChange ? caseRefChange : setCaseRefValue;
527
+ _this.deleteRemovedNodes(node.parent, newCaseRefValue);
528
+ _this.updateNodeChildrenFromChangedFields(node.parent, newCaseRefValue);
529
+ node.removingNode.off();
530
+ });
531
+ this.deselectNodeIfDescendantOf(node);
532
+ };
533
+ /**
534
+ * Expands all nodes in the tree dictated by the argument.
535
+ *
536
+ * @param path nodes that should be expanded along with their path from the root node
537
+ */
538
+ CaseTreeService.prototype.expandPath = function (path) {
539
+ if (this.dataSource.data.length === 0) {
540
+ return;
541
+ }
542
+ var rootNode = this.dataSource.data[0];
543
+ while (rootNode.parent !== undefined) {
544
+ rootNode = rootNode.parent;
545
+ }
546
+ this.expandLevel([rootNode], this.convertPathToExpansionTree(path));
547
+ };
548
+ /**
549
+ * Transforms a {@Link CaseTreePath} object into an {@link ExpansionTree} object.
550
+ * The result has all the common paths merged into single branches of the resulting tree structure.
551
+ *
552
+ * @param paths nodes that should be expanded along with their path from the root node
553
+ * @returns an {@link ExpansionTree} equivalent to the provided {@link CaseTreePath}
554
+ */
555
+ CaseTreeService.prototype.convertPathToExpansionTree = function (paths) {
556
+ var result = {};
557
+ Object.values(paths).forEach(function (path) {
558
+ var currentNode = result;
559
+ path.forEach(function (nodeId) {
560
+ if (currentNode[nodeId] === undefined) {
561
+ currentNode[nodeId] = {};
562
+ }
563
+ currentNode = currentNode[nodeId];
564
+ });
565
+ });
566
+ return result;
567
+ };
568
+ /**
569
+ * Recursively expands all nodes from the provided array of nodes, that appear in the top level of the {@link ExpansionTree} object.
570
+ *
571
+ * @param levelNodes nodes from which the expansion should start
572
+ * @param targets a tree structure representing the nodes that are to be expanded recursively.
573
+ * The top level nodes are expanded first, from the provided `levelNodes`.
574
+ */
575
+ CaseTreeService.prototype.expandLevel = function (levelNodes, targets) {
576
+ var _this = this;
577
+ var desiredIds = new Set(Object.keys(targets));
578
+ if (desiredIds.size === 0) {
579
+ return;
580
+ }
581
+ levelNodes.forEach(function (n) {
582
+ var node = n;
583
+ if (!desiredIds.has(node.case.stringId)) {
584
+ return; // continue
585
+ }
586
+ _this.expandNode(node).subscribe(function (success) {
587
+ if (!success) {
588
+ _this._logger.debug('Could not expand tree node with ID: ' + node.case.stringId);
589
+ return;
590
+ }
591
+ _this.expandLevel(node.children, targets[node.case.stringId]);
592
+ });
593
+ });
594
+ };
595
+ /**
596
+ * Deletes the subtrees rooted at the nodes that are present in the parent node's child case ref values,
597
+ * but are no longer present in the new value
598
+ * @param parentNode an inner node of the tree that had some of it's children removed
599
+ * @param newCaseRefValue the new value of the parent node's case ref
600
+ */
601
+ CaseTreeService.prototype.deleteRemovedNodes = function (parentNode, newCaseRefValue) {
602
+ var _this = this;
603
+ var removedChildren = new Set();
604
+ getImmediateData(parentNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF).value.forEach(function (id) { return removedChildren.add(id); });
605
+ newCaseRefValue.forEach(function (id) { return removedChildren.delete(id); });
606
+ removedChildren.forEach(function (removedId) { return _this._caseResourceService.deleteCase(removedId, true)
607
+ .subscribe(function (responseMessage) {
608
+ if (responseMessage.error) {
609
+ _this._logger.error('Removal of child case unsuccessful', responseMessage.error);
610
+ }
611
+ }); });
612
+ };
613
+ /**
614
+ * Deselects the currently selected node if it is a descendant of the provided node
615
+ * @param node the node who's descendants should be deselected
616
+ */
617
+ CaseTreeService.prototype.deselectNodeIfDescendantOf = function (node) {
618
+ var bubblingNode = this.currentNode;
619
+ while (bubblingNode && bubblingNode !== this._rootNode) {
620
+ if (bubblingNode === node) {
621
+ this.changeActiveNode(undefined);
622
+ break;
623
+ }
624
+ bubblingNode = bubblingNode.parent;
625
+ }
626
+ };
627
+ /**
628
+ * Performs a backend call on the given case, and sets the value of the case ref field in the transition defined by
629
+ * [CASE_REF_TRANSITION]{@link TreePetriflowIdentifiers#CASE_REF_TRANSITION}.
630
+ * @param caseId string ID of the case that should have it's tree case ref set
631
+ * @param newCaseRefValue the new value of the case ref field
632
+ */
633
+ CaseTreeService.prototype.performCaseRefCall = function (caseId, newCaseRefValue) {
634
+ var _this = this;
635
+ var result$ = new ReplaySubject(1);
636
+ this._taskResourceService.getTasks(SimpleFilter.fromTaskQuery({
637
+ case: { id: caseId },
638
+ transitionId: TreePetriflowIdentifiers.CASE_REF_TRANSITION
639
+ })).subscribe(function (page) {
640
+ if (!hasContent(page)) {
641
+ _this._logger.error('Case ref accessor task doesn\'t exist!');
642
+ result$.complete();
643
+ return;
644
+ }
645
+ var task = page.content[0];
646
+ _this._taskResourceService.assignTask(task.stringId).subscribe(function (assignResponse) {
647
+ if (!assignResponse.success) {
648
+ _this._logger.error('Case ref accessor task could not be assigned', assignResponse.error);
649
+ }
650
+ var body = {};
651
+ body[TreePetriflowIdentifiers.CHILDREN_CASE_REF] = {
652
+ type: 'caseRef',
653
+ value: newCaseRefValue
654
+ };
655
+ _this._taskResourceService.setData(task.stringId, body).subscribe(function (outcomeResource) {
656
+ var changedFields = outcomeResource.outcome.changedFields.changedFields;
657
+ var caseRefChanges = changedFields[TreePetriflowIdentifiers.CHILDREN_CASE_REF];
658
+ result$.next(caseRefChanges ? caseRefChanges.value : undefined);
659
+ result$.complete();
660
+ _this._taskResourceService.finishTask(task.stringId).subscribe(function (finishResponse) {
661
+ if (finishResponse.success) {
662
+ _this._logger.debug('Case ref accessor task finished', finishResponse.success);
663
+ }
664
+ else {
665
+ _this._logger.error('Case ref accessor task finish failed', finishResponse.error);
666
+ }
667
+ });
668
+ }, function (error) {
669
+ _this._logger.error('Could not set data to tree case ref', error);
670
+ result$.complete();
671
+ });
672
+ }, function (error) {
673
+ _this._logger.error('Case ref accessor task could not be assigned', error);
674
+ result$.complete();
675
+ });
676
+ }, function (error) {
677
+ _this._logger.error('Case ref accessor task could not be found', error);
678
+ result$.complete();
679
+ });
680
+ return result$.asObservable();
681
+ };
682
+ /**
683
+ * Performs an update after adding or removing a node from the tree.
684
+ *
685
+ * If only one node was added adds it into the tree
686
+ *
687
+ * If only one node was removed removes it from the tree
688
+ *
689
+ * Otherwise collapses the affected node and marks it's children as dirty
690
+ *
691
+ * @param affectedNode node that had it's children changed
692
+ * @param newCaseRefValue new value of the caseRef field returned by backend
693
+ * @returns an `Observable` that emits an object with the [result]{@link ResultWithAfterActions#result} attribute set to `true` if
694
+ * the update completes successfully and `false` otherwise.
695
+ */
696
+ CaseTreeService.prototype.updateNodeChildrenFromChangedFields = function (affectedNode, newCaseRefValue) {
697
+ var caseRefField = getImmediateData(affectedNode.case, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
698
+ var newChildren = new Set();
699
+ newCaseRefValue.forEach(function (id) { return newChildren.add(id); });
700
+ var numberOfMissingChildren = 0;
701
+ for (var i = 0; i < caseRefField.value.length && numberOfMissingChildren < 2; i++) {
702
+ if (!newChildren.has(caseRefField.value[i])) {
703
+ numberOfMissingChildren++;
704
+ }
705
+ }
706
+ var exactlyOneChildAdded = caseRefField.value.length + 1 === newCaseRefValue.length
707
+ && caseRefField.value.every(function (it) { return newChildren.has(it); });
708
+ var exactlyOneChildRemoved = caseRefField.value.length - 1 === newCaseRefValue.length
709
+ && numberOfMissingChildren === 1;
710
+ if (!exactlyOneChildAdded && !exactlyOneChildRemoved) {
711
+ caseRefField.value = newCaseRefValue;
712
+ this._treeControl.collapseDescendants(affectedNode);
713
+ affectedNode.dirtyChildren = true;
714
+ return of(new ResultWithAfterActions(true));
715
+ }
716
+ if (exactlyOneChildAdded) {
717
+ return this.processChildNodeAdd(affectedNode, caseRefField, newCaseRefValue);
718
+ }
719
+ else {
720
+ return this.processChildNodeRemove(affectedNode, caseRefField, newChildren);
721
+ }
722
+ };
723
+ /**
724
+ * Adds a new child node to the `affectedNode` by adding the last Case from the `newCaseRefValue`
725
+ * @param affectedNode the node in the tree that had a child added - the parent node
726
+ * @param caseRefField the case ref field of the affected node
727
+ * @param newCaseRefValue the new value of the case ref field in the node
728
+ * @returns an `Observable` that emits `true` if a node was successfully added, `false` otherwise.
729
+ */
730
+ CaseTreeService.prototype.processChildNodeAdd = function (affectedNode, caseRefField, newCaseRefValue) {
731
+ var _this = this;
732
+ var result$ = new ReplaySubject(1);
733
+ caseRefField.value = newCaseRefValue;
734
+ this._caseResourceService.getOneCase(newCaseRefValue[newCaseRefValue.length - 1]).subscribe(function (childCase) {
735
+ if (childCase) {
736
+ _this._logger.debug('Pushing child node to tree', { childCase: childCase, affectedNode: affectedNode.toLoggableForm() });
737
+ var childNode_1 = _this.pushChildToTree(affectedNode, childCase);
738
+ result$.next(new ResultWithAfterActions(true, [function () {
739
+ if (_this._isEagerLoaded) {
740
+ _this._logger.debug('Eagerly expanding a newly added node.', childNode_1.toLoggableForm());
741
+ _this.expandNode(childNode_1);
742
+ }
743
+ }]));
744
+ }
745
+ else {
746
+ _this._logger.error('New child case was not found, illegal state', childCase);
747
+ result$.next(new ResultWithAfterActions(false));
748
+ }
749
+ result$.complete();
750
+ }, function (error) {
751
+ _this._logger.error('New child node case could not be found', error);
752
+ result$.next(new ResultWithAfterActions(false));
753
+ result$.complete();
754
+ });
755
+ return result$.asObservable();
756
+ };
757
+ /**
758
+ * Adds a new child node to the target parent node.
759
+ * @param parentNode the nodes whose child should be added
760
+ * @param childCase the child case
761
+ * @returns the newly added node
762
+ */
763
+ CaseTreeService.prototype.pushChildToTree = function (parentNode, childCase) {
764
+ var childNode = new CaseTreeNode(childCase, parentNode);
765
+ parentNode.children.push(childNode);
766
+ this.refreshTree();
767
+ return childNode;
768
+ };
769
+ /**
770
+ * Removes the deleted node from the children of the `affectedNode`
771
+ * @param affectedNode the node in the tree that had it's child removed
772
+ * @param caseRefField the case ref field of the affected node
773
+ * @param newCaseRefValues the new value of the case ref field in the node
774
+ * @returns an `Observable` that emits `true` when the remove operation completes.
775
+ */
776
+ CaseTreeService.prototype.processChildNodeRemove = function (affectedNode, caseRefField, newCaseRefValues) {
777
+ var index = caseRefField.value.findIndex(function (it) { return !newCaseRefValues.has(it); });
778
+ caseRefField.value.splice(index, 1);
779
+ affectedNode.children.splice(index, 1);
780
+ this.refreshTree();
781
+ return of(new ResultWithAfterActions(true));
782
+ };
783
+ /**
784
+ * @ignore
785
+ * Forces a rerender of the tree content
786
+ */
787
+ CaseTreeService.prototype.refreshTree = function () {
788
+ refreshTree(this._treeDataSource);
789
+ };
790
+ /**
791
+ * Reloads the currently selected case node. The {@link Case} object held in the {@link CaseTreeNode} instance is not replaced,
792
+ * but the new Case is `Object.assign`-ed into it. This means that the reference to the Case instance is unchanged but references
793
+ * to all it's non-primitive attributes are changed.
794
+ *
795
+ * If a reload of the current node is initiated before the previous one completed, the new one is ignored.
796
+ *
797
+ * If the currently selected case changed before a response from backend was received the response is ignored.
798
+ *
799
+ * Note that the parent node, nor the child nodes are reloaded.
800
+ */
801
+ CaseTreeService.prototype.reloadCurrentCase = function () {
802
+ var _this = this;
803
+ if (!this._currentNode) {
804
+ this._logger.debug('No Tree Case Node selected, nothing to reload');
805
+ return;
806
+ }
807
+ if (this._reloadedCaseId && this._currentNode.case.stringId !== this._reloadedCaseId) {
808
+ this._logger.debug('Reload of the current case already in progress');
809
+ return;
810
+ }
811
+ this._reloadedCaseId = this._currentNode.case.stringId;
812
+ this._caseResourceService.getOneCase(this._currentCase.stringId).subscribe(function (reloadedCurrentCase) {
813
+ if (!reloadedCurrentCase) {
814
+ _this._logger.error('Current Case Tree Node could not be reloaded. Invalid server response', reloadedCurrentCase);
815
+ return;
816
+ }
817
+ if (_this._currentNode && reloadedCurrentCase.stringId === _this._currentNode.case.stringId) {
818
+ _this._reloadedCaseId = undefined;
819
+ var change = _this.determineCaseUpdate(_this._currentCase, reloadedCurrentCase);
820
+ Object.assign(_this._currentCase, reloadedCurrentCase);
821
+ _this._treeCaseViewService.loadTask$.next(_this._currentCase);
822
+ if (change.visibleTreePropertiesChanged) {
823
+ _this.refreshTree();
824
+ }
825
+ if (change.childrenChanged) {
826
+ _this._currentNode.dirtyChildren = true;
827
+ _this.expandNode(_this._currentNode);
828
+ }
829
+ _this._logger.debug('Current Case Tree Node reloaded');
830
+ }
831
+ else {
832
+ _this._logger.debug('Discarding case reload response, since the current node has changed before its case was received');
833
+ }
834
+ }, function (error) {
835
+ _this._logger.error('Current Case Tree Node reload request failed', error);
836
+ });
837
+ };
838
+ /**
839
+ * Determines if anny of the case attributes that are visible on the tree changed.
840
+ * @param oldCase the previous version of the Case object, that is currently displayed on the tree
841
+ * @param newCase the new version of the Case object, that should replace the old one
842
+ */
843
+ CaseTreeService.prototype.determineCaseUpdate = function (oldCase, newCase) {
844
+ var visibleAttributes = [
845
+ TreePetriflowIdentifiers.CAN_ADD_CHILDREN,
846
+ TreePetriflowIdentifiers.CAN_REMOVE_NODE,
847
+ TreePetriflowIdentifiers.BEFORE_TEXT_ICON,
848
+ TreePetriflowIdentifiers.TREE_ADD_ICON
849
+ ];
850
+ var result = {
851
+ visibleTreePropertiesChanged: true,
852
+ childrenChanged: false
853
+ };
854
+ var oldChildCaseRef = getImmediateData(oldCase, TreePetriflowIdentifiers.CHILDREN_CASE_REF);
855
+ if (oldChildCaseRef !== undefined) {
856
+ var oldChildren = new Set(oldChildCaseRef.value);
857
+ var newChildren_1 = new Set(getImmediateData(newCase, TreePetriflowIdentifiers.CHILDREN_CASE_REF).value);
858
+ result.childrenChanged = oldChildren.size !== newChildren_1.size;
859
+ if (!result.childrenChanged) {
860
+ result.childrenChanged = Array.from(oldChildren).some(function (childId) { return !newChildren_1.has(childId); });
861
+ }
862
+ // short-circuit
863
+ if (result.childrenChanged) {
864
+ return result;
865
+ }
866
+ }
867
+ result.visibleTreePropertiesChanged = visibleAttributes.some(function (attribute) {
868
+ return getImmediateData(oldCase, attribute)
869
+ && getImmediateData(oldCase, attribute).value !== getImmediateData(newCase, attribute).value;
870
+ });
871
+ return result;
872
+ };
873
+ CaseTreeService.ctorParameters = function () { return [
874
+ { type: CaseResourceService },
875
+ { type: TreeCaseViewService },
876
+ { type: TaskResourceService },
877
+ { type: LoggerService },
878
+ { type: ProcessService },
879
+ { type: SideMenuService },
880
+ { type: TranslateService },
881
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_OPTION_SELECTOR_COMPONENT,] }] }
882
+ ]; };
883
+ CaseTreeService.decorators = [
884
+ { type: Injectable }
885
+ ];
886
+ CaseTreeService.ctorParameters = function () { return [
887
+ { type: CaseResourceService },
888
+ { type: TreeCaseViewService },
889
+ { type: TaskResourceService },
890
+ { type: LoggerService },
891
+ { type: ProcessService },
892
+ { type: SideMenuService },
893
+ { type: TranslateService },
894
+ { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [NAE_OPTION_SELECTOR_COMPONENT,] }] }
895
+ ]; };
896
+ return CaseTreeService;
897
+ }());
898
+ export { CaseTreeService };
899
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS10cmVlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUvIiwic291cmNlcyI6WyJsaWIvdmlldy90cmVlLWNhc2Utdmlldy90cmVlLWNvbXBvbmVudC9jYXNlLXRyZWUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztBQUM3RixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDcEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDN0YsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHlDQUF5QyxDQUFDO0FBR3RFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDOUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBDQUEwQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxRQUFRLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBeUIsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWhHLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDeEUsT0FBTyxF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QUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsS0FBSyxLQUFLLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckcsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOztnQkEzMUIyQyxtQkFBbUI7Z0JBQ25CLG1CQUFtQjtnQkFDbkIsbUJBQW1CO2dCQUNoQyxhQUFhO2dCQUNMLGNBQWM7Z0JBQ2IsZUFBZTtnQkFDZCxnQkFBZ0I7Z0RBQzVDLFFBQVEsWUFBSSxNQUFNLFNBQUMsNkJBQTZCOzs7Z0JBOUJoRSxVQUFVOzs7Z0JBN0NILG1CQUFtQjtnQkFFbkIsbUJBQW1CO2dCQUNuQixtQkFBbUI7Z0JBQ25CLGFBQWE7Z0JBR2IsY0FBYztnQkFDZCxlQUFlO2dCQU1mLGdCQUFnQjtnREE2RFAsUUFBUSxZQUFJLE1BQU0sU0FBQyw2QkFBNkI7O0lBcTFCakUsc0JBQUM7Q0FBQSxBQW4zQkQsSUFtM0JDO1NBbDNCWSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJ9IGZyb20gJy4uLy4uLy4uL2ZpbHRlci9tb2RlbHMvZmlsdGVyJztcbmltcG9ydCB7SHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtDYXNlUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L2Nhc2UtcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0Nhc2VUcmVlTm9kZX0gZnJvbSAnLi9tb2RlbC9jYXNlLXRyZWUtbm9kZSc7XG5pbXBvcnQge1RyZWVDYXNlVmlld1NlcnZpY2V9IGZyb20gJy4uL3RyZWUtY2FzZS12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrUmVzb3VyY2VTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvZW5naW5lLWVuZHBvaW50L3Rhc2stcmVzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge0ltbWVkaWF0ZURhdGF9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvaW1tZWRpYXRlLWRhdGEnO1xuaW1wb3J0IHtDYXNlfSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UnO1xuaW1wb3J0IHtQcm9jZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vcHJvY2Vzcy9wcm9jZXNzLnNlcnZpY2UnO1xuaW1wb3J0IHtTaWRlTWVudVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL3NpZGUtbWVudS9zZXJ2aWNlcy9zaWRlLW1lbnUuc2VydmljZSc7XG5pbXBvcnQge1NpZGVNZW51U2l6ZX0gZnJvbSAnLi4vLi4vLi4vc2lkZS1tZW51L21vZGVscy9zaWRlLW1lbnUtc2l6ZSc7XG5pbXBvcnQge2ZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7UGFnZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9wYWdlJztcbmltcG9ydCB7VHJlZVBldHJpZmxvd0lkZW50aWZpZXJzfSBmcm9tICcuLi9tb2RlbC90cmVlLXBldHJpZmxvdy1pZGVudGlmaWVycyc7XG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7aGFzQ29udGVudH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9wYWdpbmF0aW9uL3BhZ2UtaGFzLWNvbnRlbnQnO1xuaW1wb3J0IHtOZXN0ZWRUcmVlQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHtNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge29mVm9pZH0gZnJvbSAnLi4vLi4vLi4vdXRpbGl0eS9vZi12b2lkJztcbmltcG9ydCB7Q2FzZUdldFJlcXVlc3RCb2R5fSBmcm9tICcuLi8uLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2Nhc2UtZ2V0LXJlcXVlc3QtYm9keSc7XG5pbXBvcnQge2dldEltbWVkaWF0ZURhdGF9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvZ2V0LWltbWVkaWF0ZS1kYXRhJztcbmltcG9ydCB7TkFFX09QVElPTl9TRUxFQ1RPUl9DT01QT05FTlR9IGZyb20gJy4uLy4uLy4uL3NpZGUtbWVudS9jb250ZW50LWNvbXBvbmVudHMvaW5qZWN0aW9uLXRva2Vucyc7XG5pbXBvcnQge1NpbXBsZUZpbHRlcn0gZnJvbSAnLi4vLi4vLi4vZmlsdGVyL21vZGVscy9zaW1wbGUtZmlsdGVyJztcbmltcG9ydCB7Q2FzZVRyZWVQYXRofSBmcm9tICcuL21vZGVsL2Nhc2UtdHJlZS1wYXRoJztcbmltcG9ydCB7RXhwYW5zaW9uVHJlZX0gZnJvbSAnLi9tb2RlbC9leHBhbnNpb24tdHJlZSc7XG5pbXBvcnQge1Jlc3VsdFdpdGhBZnRlckFjdGlvbnN9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvcmVzdWx0LXdpdGgtYWZ0ZXItYWN0aW9ucyc7XG5pbXBvcnQge0V2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZX0gZnJvbSAnLi4vLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9tZXNzYWdlLXJlc291cmNlJztcbmltcG9ydCB7U2V0RGF0YUV2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvZGF0YS1vdXRjb21lcy9zZXQtZGF0YS1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7Q3JlYXRlQ2FzZUV2ZW50T3V0Y29tZX0gZnJvbSAnLi4vLi4vLi4vZXZlbnQvbW9kZWwvZXZlbnQtb3V0Y29tZXMvY2FzZS1vdXRjb21lcy9jcmVhdGUtY2FzZS1ldmVudC1vdXRjb21lJztcbmltcG9ydCB7cmVmcmVzaFRyZWV9IGZyb20gJy4uLy4uLy4uL3V0aWxpdHkvcmVmcmVzaC10cmVlJztcblxuLyoqXG4gKiBBbiBpbnRlcm5hbCBoZWxwZXIgb2JqZWN0LCB0aGF0IGlzIHVzZWQgdG8gcmV0dXJuIHR3byB2YWx1ZXMgZnJvbSBhIGZ1bmN0aW9uLlxuICovXG5pbnRlcmZhY2UgQ2FzZVVwZGF0ZVJlc3VsdCB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgYXR0cmlidXRlcyB0aGF0IGFyZSB2aXNpYmxlIG9uIHRoZSB0cmVlIGNoYW5nZWRcbiAgICAgKi9cbiAgICB2aXNpYmxlVHJlZVByb3BlcnRpZXNDaGFuZ2VkOiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIG5vZGVzIGNoaWxkcmVuIGNoYW5nZWRcbiAgICAgKi9cbiAgICBjaGlsZHJlbkNoYW5nZWQ6IGJvb2xlYW47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXNlVHJlZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gICAgcHJvdGVjdGVkIF9jdXJyZW50Tm9kZTogQ2FzZVRyZWVOb2RlO1xuICAgIHByaXZhdGUgX3Jvb3ROb2Rlc0ZpbHRlcjogRmlsdGVyO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVEYXRhU291cmNlOiBNYXRUcmVlTmVzdGVkRGF0YVNvdXJjZTxDYXNlVHJlZU5vZGU+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyZWVDb250cm9sOiBOZXN0ZWRUcmVlQ29udHJvbDxDYXNlVHJlZU5vZGU+O1xuICAgIHByaXZhdGUgX3RyZWVSb290TG9hZGVkJDogUmVwbGF5U3ViamVjdDxib29sZWFuPjtcbiAgICBwcml2YXRlIF9yb290Tm9kZTogQ2FzZVRyZWVOb2RlO1xuICAgIHByaXZhdGUgX3Nob3dSb290OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdlYXRoZXIgdGhlIHRyZWUgaXMgZWFnZXIgbG9hZGVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gZWFnZXIgbG9hZCBsYXJnZSB0cmVlcyBhcyBlYWNoIG5vZGUgc2VuZHMgYSBzZXBhcmF0ZSBiYWNrZW5kIHJlcXVlc3QgdG8gbG9hZCBpdHMgZGF0YS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc0VhZ2VyTG9hZGVkID0gZmFsc2U7XG4gICAgLyoqXG4gICAgICogc3RyaW5nIGlkIG9mIHRoZSBjYXNlLCB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyByZWxvYWRlZCwgYHVuZGVmaW5lZGAgaWYgbm8gY2FzZSBpcyBjdXJyZW50bHkgYmVpbmcgcmVsb2FkZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZWxvYWRlZENhc2VJZDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jYXNlUmVzb3VyY2VTZXJ2aWNlOiBDYXNlUmVzb3VyY2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfdHJlZUNhc2VWaWV3U2VydmljZTogVHJlZUNhc2VWaWV3U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3Rhc2tSZXNvdXJjZVNlcnZpY2U6IFRhc2tSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9wcm9jZXNzU2VydmljZTogUHJvY2Vzc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9zaWRlTWVudVNlcnZpY2U6IFNpZGVNZW51U2VydmljZSxcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChOQUVfT1BUSU9OX1NFTEVDVE9SX0NPTVBPTkVOVCkgcHJvdGVjdGVkIF9vcHRpb25TZWxlY3RvckNvbXBvbmVudDogYW55KSB7XG4gICAgICAgIHRoaXMuX3RyZWVEYXRhU291cmNlID0gbmV3IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPENhc2VUcmVlTm9kZT4oKTtcbiAgICAgICAgdGhpcy5fdHJlZUNvbnRyb2wgPSBuZXcgTmVzdGVkVHJlZUNvbnRyb2w8Q2FzZVRyZWVOb2RlPihub2RlID0+IG5vZGUuY2hpbGRyZW4pO1xuICAgICAgICBfdHJlZUNhc2VWaWV3U2VydmljZS5yZWxvYWRDYXNlJC5hc09ic2VydmFibGUoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWxvYWRDdXJyZW50Q2FzZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdHJlZVJvb3RMb2FkZWQkID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyZWVSb290TG9hZGVkJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgcm9vdEZpbHRlcihmaWx0ZXI6IEZpbHRlcikge1xuICAgICAgICB0aGlzLl9yb290Tm9kZXNGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gW107XG4gICAgICAgIHRoaXMubG9hZFRyZWVSb290KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IE1hdFRyZWVOZXN0ZWREYXRhU291cmNlPENhc2VUcmVlTm9kZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJlZURhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0cmVlQ29udHJvbCgpOiBOZXN0ZWRUcmVlQ29udHJvbDxDYXNlVHJlZU5vZGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyZWVDb250cm9sO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgY3VycmVudE5vZGUoKTogQ2FzZVRyZWVOb2RlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnROb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVtaXRzIGEgdmFsdWUgd2hlbmV2ZXIgYSBuZXcgcm9vdCBub2RlIEZpbHRlciBpcyBzZXQuXG4gICAgICpcbiAgICAgKiBgdHJ1ZWAgaXMgZW1pdHRlZCBpZiB0aGUgcm9vdCBub2RlIHdhcyBzdWNjZXNzZnVsbHkgbG9hZGVkLiBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICAgKlxuICAgICAqIE9uIHN1YnNjcmlwdGlvbiBlbWl0cyB0aGUgbGFzdCBlbWl0dGVkIHZhbHVlIChpZiBhbnkpIHRvIHRoZSBzdWJzY3JpYmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdHJlZVJvb3RMb2FkZWQkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJlZVJvb3RMb2FkZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgX2N1cnJlbnRDYXNlKCk6IENhc2UgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudE5vZGUgPyB0aGlzLl9jdXJyZW50Tm9kZS5jYXNlIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIGFuIGBPYnNlcnZhYmxlYCBvZiB0aGUge0BsaW5rIExvYWRpbmdFbWl0dGVyfSByZXByZXNlbnRpbmcgdGhlIGxvYWRpbmcgc3RhdGUgb2YgdGhlIHJvb3Qgbm9kZS5cbiAgICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSB0cmVlIGhhcyBub3QgeWV0IGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAgICpcbiAgICAgKiBXYWl0IGZvciBhbiBlbWlzc2lvbiBvbiB0aGUgW3RyZWVSb290TG9hZGVkJF17QGxpbmsgQ2FzZVRyZWVTZXJ2aWNlI3RyZWVSb290TG9hZGVkJH0gc3RyZWFtIGJlZm9yZSBnZXR0aW5nIHRoaXMgT2JzZXJ2YWJsZS5cbiAgICAgKlxuICAgICAqIFRoZSBmaXJzdCB2YWx1ZSBlbWl0dGVkIGJ5IHRoZSBPYnNlcnZhYmxlIGlzIGBmYWxzZWAsIHdoZW4gdGhlIHRyZWUgZmluaXNoZXMgaW5pdGlhbGl6aW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcm9vdE5vZGVMb2FkaW5nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fcm9vdE5vZGUgPyB0aGlzLl9yb290Tm9kZS5sb2FkaW5nQ2hpbGRyZW4uYXNPYnNlcnZhYmxlKCkgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgYW4gYE9ic2VydmFibGVgIG9mIHRoZSB7QGxpbmsgTG9hZGluZ0VtaXR0ZXJ9IHJlcHJlc2VudGluZyB3aGV0aGVyIHRoZSByb290IG5vZGUgaXMgY3VycmVudGx5XG4gICAgICogaW4gdGhlIHByb2Nlc3Mgb2YgYWRkaW5nIGEgbmV3IGNoaWxkIG5vZGUgb3Igbm90LlxuICAgICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIHRyZWUgaGFzIG5vdCB5ZXQgYmVlbiBpbml0aWFsaXplZC5cbiAgICAgKlxuICAgICAqIFdhaXQgZm9yIGFuIGVtaXNzaW9uIG9uIHRoZSBbdHJlZVJvb3RMb2FkZWQkXXtAbGluayBDYXNlVHJlZVNlcnZpY2UjdHJlZVJvb3RMb2FkZWQkfSBzdHJlYW0gYmVmb3JlIGdldHRpbmcgdGhpcyBPYnNlcnZhYmxlLlxuICAgICAqXG4gICAgICogVGhlIGZpcnN0IHZhbHVlIGVtaXR0ZWQgYnkgdGhlIE9ic2VydmFibGUgaXMgYGZhbHNlYCwgd2hlbiB0aGUgdHJlZSBmaW5pc2hlcyBpbml0aWFsaXppbmcuXG4gICAgICovXG4gICAgcHVibGljIGdldCByb290Tm9kZUFkZGluZ0NoaWxkJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fcm9vdE5vZGUgPyB0aGlzLl9yb290Tm9kZS5hZGRpbmdOb2RlLmFzT2JzZXJ2YWJsZSgpIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdlYXRoZXIgdGhlIHRyZWUgaXMgZWFnZXIgbG9hZGVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gZWFnZXIgbG9hZCBsYXJnZSB0cmVlcyBhcyBlYWNoIG5vZGUgc2VuZHMgYSBzZXBhcmF0ZSBiYWNrZW5kIHJlcXVlc3QgdG8gbG9hZCBpdHMgZGF0YS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGlzRWFnZXJMb2FkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0VhZ2VyTG9hZGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdlYXRoZXIgdGhlIHRyZWUgaXMgZWFnZXIgbG9hZGVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICpcbiAgICAgKiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gZWFnZXIgbG9hZCBsYXJnZSB0cmVlcyBhcyBlYWNoIG5vZGUgc2VuZHMgYSBzZXBhcmF0ZSBiYWNrZW5kIHJlcXVlc3QgdG8gbG9hZCBpdHMgZGF0YS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlYWdlciB0aGUgbmV3IHNldHRpbmcgZm9yIGVhZ2VyIGxvYWRpbmdcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGlzRWFnZXJMb2FkZWQoZWFnZXI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5faXNFYWdlckxvYWRlZCA9IGVhZ2VyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIGFuZCBwb3B1bGF0ZXMgdGhlIHRvcG1vc3QgbGV2ZWwgb2YgdGhlIHRyZWUuXG4gICAgICpcbiAgICAgKiBUaGUgZGlzcGxheWVkIGNhc2VzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoaXMgb2JqZWN0J3MgW3Jvb3RGaWx0ZXJde0BsaW5rIENhc2VUcmVlU2VydmljZSNyb290RmlsdGVyfS5cbiAgICAgKlxuICAgICAqIENhc2VzIGFyZSBsb2FkZWQgb25lIHBhZ2UgYXQgYSB0aW1lIGFuZCB0aGUgdHJlZSBpcyByZWZyZXNoZWQgYWZ0ZXIgZWFjaCBwYWdlLlxuICAgICAqIFtmaW5pc2hlZExvYWRpbmdGaXJzdExldmVsJF17QGxpbmsgQ2FzZVRyZWVTZXJ2aWNlI3RyZWVSb290TG9hZGVkJH1cbiAgICAgKiB3aWxsIGVtaXQgYHRydWVgIG9uY2UgdGhlIGxhc3QgcGFnZSBsb2FkcyBzdWNjZXNzZnVsbHkuXG4gICAgICogYGZhbHNlYCB3aWxsIGJlIGVtaXR0ZWQgaWYgYW55IG9mIHRoZSByZXF1ZXN0cyBmYWlsLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBsb2FkVHJlZVJvb3QoKSB7XG4gICAgICAgIGlmICh0aGlzLl9yb290Tm9kZXNGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2Nhc2VSZXNvdXJjZVNlcnZpY2Uuc2VhcmNoQ2FzZXModGhpcy5fcm9vdE5vZGVzRmlsdGVyKS5zdWJzY3JpYmUocGFnZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NvbnRlbnQocGFnZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm9vdE5vZGUgPSBuZXcgQ2FzZVRyZWVOb2RlKHBhZ2UuY29udGVudFswXSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2UuY29udGVudC5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdGaWx0ZXIgZm9yIHRyZWUgcm9vdCByZXR1cm5lZCBtb3JlIHRoYW4gb25lIGNhc2UuIFVzaW5nIHRoZSBmaXJzdCB2YWx1ZSBhcyB0cmVlIHJvb3QuLi4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmVlUm9vdExvYWRlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1RyZWUgcm9vdCBjYW5ub3QgYmUgZ2VuZXJhdGVkIGZyb20gdGhlIHByb3ZpZGVkIGZpbHRlcicsIHBhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1Jvb3Qgbm9kZSBvZiB0aGUgY2FzZSB0cmVlIGNvdWxkIG5vdCBiZSBsb2FkZWQnLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJlZVJvb3RMb2FkZWQkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBsb2FkZWQgdHJlZSByb290IHRvIHRoZSBkaXNwbGF5IGJhc2VkIG9uIHRoZSBzZXR0aW5nLlxuICAgICAqIEBwYXJhbSBzaG93Um9vdCB3aGV0aGVyIHRoZSByb290IG9mIHRoZSB0cmVlIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gdGhlIHRyZWUgb3Igbm90LlxuICAgICAqIElmIHRoZSByb290IGlzIG5vdCBkaXNwbGF5ZWQgaXQncyBjaGlsZHJlbiB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgZmlyc3QgbGV2ZWwuXG4gICAgICogQHJldHVybnMgYW4gT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW4gdGhlIHRyZWUgZmluaXNoZXMgaW5pdGlhbGl6YXRpb24uXG4gICAgICovXG4gICAgcHVibGljIGluaXRpYWxpemVUcmVlKHNob3dSb290OiBib29sZWFuKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGlmICghdGhpcy5fcm9vdE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignU2V0IGEgRmlsdGVyIGJlZm9yZSBpbml0aWFsaXppbmcgdGhlIGNhc2UgdHJlZScpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCdTZXQgYSBGaWx0ZXIgYmVmb3JlIGluaXRpYWxpemluZyB0aGUgY2FzZSB0cmVlJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2hvd1Jvb3QgPSBzaG93Um9vdDtcblxuICAgICAgICBpZiAoc2hvd1Jvb3QpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gW3RoaXMuX3Jvb3ROb2RlXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5fcm9vdE5vZGUuY2hpbGRyZW47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmV0OiBPYnNlcnZhYmxlPHZvaWQ+O1xuICAgICAgICBpZiAoIXNob3dSb290IHx8IHRoaXMuX2lzRWFnZXJMb2FkZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuICAgICAgICAgICAgcmV0ID0gcmVzdWx0LmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmROb2RlKHRoaXMuX3Jvb3ROb2RlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRyZWUoKTtcbiAgICAgICAgICAgICAgICByZXN1bHQubmV4dCgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUcmVlKCk7XG4gICAgICAgICAgICByZXQgPSBvZlZvaWQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5vdGlmaWVzIHRoZSBwYXJlbnQgVHJlZUNhc2VWaWV3IHRoYXQgYSBjYXNlIHdhcyBjbGlja2VkIGluIHRoZSB0cmVlIGFuZCBpdCdzIFRhc2sgc2hvdWxkIGJlIGRpc3BsYXllZFxuICAgICAqL1xuICAgIHB1YmxpYyBjaGFuZ2VBY3RpdmVOb2RlKG5vZGU6IENhc2VUcmVlTm9kZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jdXJyZW50Tm9kZSA9IG5vZGU7XG4gICAgICAgIHRoaXMuX3RyZWVDYXNlVmlld1NlcnZpY2UubG9hZFRhc2skLm5leHQobm9kZSA/IG5vZGUuY2FzZSA6IHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgZXhwYW5zaW9uIHN0YXRlIG9mIGEgbm9kZVxuICAgICAqIEBwYXJhbSBub2RlIHRoZSB7QGxpbmsgQ2FzZVRyZWVOb2RlfSB3aG8ncyBjb250ZW50IHNob3VsZCBiZSB0b2dnbGVkXG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZU5vZGUobm9kZTogQ2FzZVRyZWVOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl90cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLl90cmVlQ29udHJvbC5jb2xsYXBzZShub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kTm9kZShub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgdGhlIHRhcmdldCBub2RlIGluIHRoZSB0cmVlIGFuZCByZWxvYWRzIGl0J3MgY2hpbGRyZW4gaWYgdGhleSBhcmUgbWFya2VkIGFzIGRpcnR5XG4gICAgICogQHBhcmFtIG5vZGUgdGhlIHtAbGluayBDYXNlVHJlZU5vZGV9IHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkXG4gICAgICogQHJldHVybnMgZW1pdHMgYHRydWVgIGlmIHRoZSBub2RlIGlzIGV4cGFuZGVkIGFuZCBgZmFsc2VgIGlmIG5vdC4gSWYgdGhlIGV4cGFuc2lvbiBjYXVzZXMgbW9yZSBub2RlIGV4cGFuc2lvbnNcbiAgICAgKiAoZS5nLiBlYWdlciBsb2FkZWQgdHJlZSkgdGhlbiwgdGhlIE9ic2VydmFibGUgZW1pdHMgYWZ0ZXIgYWxsIHRoZSBzdWJ0cmVlIGV4cGFuc2lvbnMgY29tcGxldGUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGV4cGFuZE5vZGUobm9kZTogQ2FzZVRyZWVOb2RlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnUmVxdWVzdGluZyBleHBhbnNpb24gb2YgdHJlZSBub2RlJywgbm9kZS50b0xvZ2dhYmxlRm9ybSgpKTtcblxuICAgICAgICBpZiAobm9kZS5sb2FkaW5nQ2hpbGRyZW4uaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnTm9kZSByZXF1ZXN0ZWQgZm9yIGV4cGFuc2lvbiBpcyBsb2FkaW5nLiBFeHBhbnNpb24gY2FuY2VsZWQuJyk7XG4gICAgICAgICAgICByZXR1cm4gb2YoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFub2RlLmRpcnR5Q2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnTm9kZSByZXF1ZXN0ZWQgZm9yIGV4cGFuc2lvbiBoYXMgY2xlYW4gY2hpbGRyZW4uIFNpbXBsZSBleHBhbnNpb24uJyk7XG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcbiAgICAgICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgICAgICB0aGlzLnVwZGF0ZU5vZGVDaGlsZHJlbihub2RlKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdOb2RlIHJlcXVlc3RlZCBmb3IgZXhwYW5zaW9uIHdpdGggZGlydHkgY2hpbGRyZW4gaGFkIGl0cyBjaGlsZHJlbiByZWxvYWRlZC4nKTtcbiAgICAgICAgICAgIGlmIChub2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ05vZGUgZXhwYW5kZWQuJywgbm9kZS50b0xvZ2dhYmxlRm9ybSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChub2RlKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNFYWdlckxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoYEVhZ2VyIGxvYWRpbmcgY2hpbGRyZW4gb2YgdHJlZSBub2RlIHdpdGggY2FzZSBpZCAnJHtub2RlLmNhc2Uuc3RyaW5nSWR9J2ApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbm5lck9ic2VydmFibGVzID0gbm9kZS5jaGlsZHJlbi5tYXAoY2hpbGROb2RlID0+IHRoaXMuZXhwYW5kTm9kZShjaGlsZE5vZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9ya0pvaW4gZG9lc24ndCBlbWl0IHdpdGggMCBpbnB1dCBvYnNlcnZhYmxlc1xuICAgICAgICAgICAgICAgICAgICBpbm5lck9ic2VydmFibGVzLnB1c2gob2YodHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICBmb3JrSm9pbihpbm5lck9ic2VydmFibGVzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXQuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0Lm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0Lm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJldC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3Mgd2hldGhlciBkaXJ0eSBjaGlsZHJlbiBuZWVkIHRvIGJlIHJlbG9hZGVkIGFuZCByZWxvYWRzIHRoZW0gaWYgbmVlZGVkLlxuICAgICAqIEBwYXJhbSBub2RlIHRoZSB7QGxpbmsgQ2FzZVRyZWVOb2RlfSB3aG8ncyBjaGlsZHJlbiBhcmUgdXBkYXRlZFxuICAgICAqIEByZXR1cm5zIGVtaXRzIHdoZW4gbG9hZGluZyBmaW5pc2hlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVOb2RlQ2hpbGRyZW4obm9kZTogQ2FzZVRyZWVOb2RlKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIG5vZGUubG9hZGluZ0NoaWxkcmVuLm9uKCk7XG5cbiAgICAgICAgY29uc3QgY2hpbGRyZW5DYXNlUmVmID0gZ2V0SW1tZWRpYXRlRGF0YShub2RlLmNhc2UsIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DSElMRFJFTl9DQVNFX1JFRik7XG4gICAgICAgIGlmICghY2hpbGRyZW5DYXNlUmVmIHx8IGNoaWxkcmVuQ2FzZVJlZi52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFRyZWUoKTtcbiAgICAgICAgICAgIG5vZGUuZGlydHlDaGlsZHJlbiA9IGZhbHNlO1xuICAgICAgICAgICAgbm9kZS5sb2FkaW5nQ2hpbGRyZW4ub2ZmKCk7XG4gICAgICAgICAgICByZXR1cm4gb2ZWb2lkKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IGNoaWxkcmVuQ2FzZVJlZi52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQ2hpbGRyZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4uZm9yRWFjaChjaGlsZE5vZGUgPT4gZXhpc3RpbmdDaGlsZHJlbi5hZGQoY2hpbGROb2RlLmNhc2Uuc3RyaW5nSWQpKTtcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbkNhc2VSZWYudmFsdWUuZXZlcnkoY2FzZUlkID0+IGV4aXN0aW5nQ2hpbGRyZW4uaGFzKGNhc2VJZCkpKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5kaXJ0eUNoaWxkcmVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbm9kZS5sb2FkaW5nQ2hpbGRyZW4ub2ZmKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mVm9pZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlUGFnZU9mQ2hpbGRyZW4obm9kZSwgMCkucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRyZWUoKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5kaXJ0eUNoaWxkcmVuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUubG9hZGluZ0NoaWxkcmVuLm9mZigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyBldmVyeSBwYWdlIG9mIGNoaWxkcmVuIGZyb20gdGhlIGdpdmVuIG51bWJlciBhbmQgdXBkYXRlcyB0aGUgZXhpc3RpbmcgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBNaXNzaW5nIG5vZGVzIGFyZSByZW1vdmVkLiBFeGlzdGluZyBub2RlcyBhcmUgbWFya2VkIGFzIGRpcnR5LiBOZXcgbm9kZXMgYXJlIGFkZGVkLlxuICAgICAqXG4gICAgICogTm9kZXMgYXJlIHJldHVybmVkIGluIHRoZWlyIGluc2VydGlvbiBvcmRlci5cbiAgICAgKiBAcGFyYW0gbm9kZSB0aGUge0BsaW5rIENhc2VUcmVlTm9kZX0gd2hvJ3MgY2hpbGRyZW4gYXJlIHVwZGF0ZWRcbiAgICAgKiBAcGFyYW0gcGFnZU51bWJlciB0aGUgbnVtYmVyIG9mIHRoZSBmaXJzdCBwYWdlIHRoYXQgc2hvdWxkIGJlIGxvYWRlZC4gQWxsIGZvbGxvd2luZyBwYWdlcyBhcmUgbG9hZGVkIGFzIHdlbGxcbiAgICAgKiBAcmV0dXJucyBuZXh0IGlzIGVtaXR0ZWQgd2hlbiBsb2FkaW5nIG9mIGFsbCBwYWdlcyBjb21wbGV0ZXMgKHJlZ2FyZGxlc3Mgb2YgdGhlIG91dGNvbWUpXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZVBhZ2VPZkNoaWxkcmVuKG5vZGU6IENhc2VUcmVlTm9kZSwgcGFnZU51bWJlcjogbnVtYmVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RCb2R5ID0gdGhpcy5jcmVhdGVDaGlsZFJlcXVlc3RCb2R5KG5vZGUpO1xuICAgICAgICBpZiAoIXJlcXVlc3RCb2R5KSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhbm5vdCBjcmVhdGUgZmlsdGVyIHRvIGZpbmQgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIG5vZGUnLCBub2RlLmNhc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGZpbHRlciB0byBmaW5kIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBub2RlJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZG9uZSA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xuXG4gICAgICAgIGxldCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdwYWdlJywgYCR7cGFnZU51bWJlcn1gKS5zZXQoJ3NvcnQnLCAnY3JlYXRpb25EYXRlLGFzYycpO1xuICAgICAgICB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLmdldENhc2VzKHJlcXVlc3RCb2R5LCBwYXJhbXMpLnN1YnNjcmliZShwYWdlID0+IHtcbiAgICAgICAgICAgIGlmICghaGFzQ29udGVudChwYWdlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2hpbGQgY2FzZXMgaW52YWxpZCBwYWdlIGNvbnRlbnQnLCBwYWdlKTtcbiAgICAgICAgICAgICAgICBkb25lLm5leHQoKTtcbiAgICAgICAgICAgICAgICBkb25lLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRDaGlsZHJlbldpdGhOZXdQYWdlKG5vZGUsIHBhZ2UpO1xuXG4gICAgICAgICAgICBpZiAocGFnZU51bWJlciArIDEgPCBwYWdlLnBhZ2luYXRpb24udG90YWxQYWdlcykge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFnZU9mQ2hpbGRyZW4obm9kZSwgcGFnZU51bWJlciArIDEpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBkb25lLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRvbmUubmV4dCgpO1xuICAgICAgICAgICAgICAgIGRvbmUuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NoaWxkIGNhc2VzIGNvdWxkIG5vdCBiZSBsb2FkZWQnLCBlcnJvcik7XG4gICAgICAgICAgICBkb25lLm5leHQoKTtcbiAgICAgICAgICAgIGRvbmUuY29tcGxldGUoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGRvbmUuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIHtAbGluayBDYXNlVHJlZU5vZGV9IHdpdGggW0Nhc2VzXXtAbGluayBDYXNlfSBmcm9tIHRoZSBwcm92aWRlZCB7QGxpbmsgUGFnZX0uXG4gICAgICogQHBhcmFtIG5vZGUgdGhlIHtAbGluayBDYXNlVHJlZU5vZGV9IHdobydzIGNoaWxkcmVuIGFyZSB1cGRhdGVkXG4gICAgICogQHBhcmFtIHBhZ2UgdGhlIHtAbGluayBQYWdlfSB0aGF0IGNvbnRhaW5zIHRoZSB1cGRhdGVkIGNoaWxkcmVuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHVwZGF0ZUN1cnJlbnRDaGlsZHJlbldpdGhOZXdQYWdlKG5vZGU6IENhc2VUcmVlTm9kZSwgcGFnZTogUGFnZTxDYXNlPik6IHZvaWQge1xuICAgICAgICBwYWdlLmNvbnRlbnQuZm9yRWFjaCgobmV3Q2FzZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcGFnZS5wYWdpbmF0aW9uLnNpemUgKiBwYWdlLnBhZ2luYXRpb24ubnVtYmVyICsgaW5kZXg7XG4gICAgICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBub2RlLmNoaWxkcmVuLmxlbmd0aCAmJiBub2RlLmNoaWxkcmVuW3Bvc2l0aW9uXS5jYXNlLnN0cmluZ0lkICE9PSBuZXdDYXNlLnN0cmluZ0lkKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbi5zcGxpY2UocG9zaXRpb24sIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09PSBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4ucHVzaChuZXcgQ2FzZVRyZWVOb2RlKG5ld0Nhc2UsIG5vZGUpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZS5jaGlsZHJlbltwb3NpdGlvbl0uY2FzZSA9IG5ld0Nhc2U7XG4gICAgICAgICAgICAgICAgbm9kZS5kaXJ0eUNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmNvbGxhcHNlRGVzY2VuZGFudHMobm9kZS5jaGlsZHJlbltwb3NpdGlvbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gbm9kZSB0aGUge0BsaW5rIENhc2VUcmVlTm9kZX0gd2hvJ3MgY2hpbGRyZW4gdGhlIHtAbGluayBGaWx0ZXJ9IHNob3VsZCByZXR1cm5cbiAgICAgKiBAcmV0dXJucyBhIHJlcXVlc3QgYm9keSB0aGF0IGZpbmRzIGFsbCBjaGlsZCBjYXNlcyBvZiB0aGUgZ2l2ZW4gYG5vZGVgLlxuICAgICAqIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIHByb3ZpZGVkIGBub2RlYCBkb2Vzbid0IGNvbnRhaW4gZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNyZWF0ZSB0aGUgcmVxdWVzdCBib2R5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVDaGlsZFJlcXVlc3RCb2R5KG5vZGU6IENhc2VUcmVlTm9kZSk6IENhc2VHZXRSZXF1ZXN0Qm9keSB7XG4gICAgICAgIGNvbnN0IGNoaWxkQ2FzZVJlZiA9IGdldEltbWVkaWF0ZURhdGEobm9kZS5jYXNlLCBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpO1xuICAgICAgICBpZiAoIWNoaWxkQ2FzZVJlZikge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7c3RyaW5nSWQ6IChjaGlsZENhc2VSZWYudmFsdWUgYXMgQXJyYXk8c3RyaW5nPil9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBjaGlsZCB0byB0aGUgcm9vdCBub2RlLlxuICAgICAqXG4gICAgICogVXNlZnVsIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGxheW91dCB3aGVyZSB0aGUgcm9vdCBub2RlIGlzIGhpZGRlbi5cbiAgICAgKiBAcmV0dXJucyBlbWl0cyBgdHJ1ZWAgaWYgdGhlIGNoaWxkIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsIGBmYWxzZWAgaWYgbm90XG4gICAgICovXG4gICAgcHVibGljIGFkZFJvb3RDaGlsZE5vZGUoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHJldCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgICAgICB0aGlzLmFkZENoaWxkTm9kZSh0aGlzLl9yb290Tm9kZSkuc3Vic2NyaWJlKGFkZGVkID0+IHtcbiAgICAgICAgICAgIGlmIChhZGRlZCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc2hvd1Jvb3QgJiYgdGhpcy5fdHJlZURhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJlZURhdGFTb3VyY2UuZGF0YSA9IHRoaXMuX3Jvb3ROb2RlLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hUcmVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0Lm5leHQoYWRkZWQpO1xuICAgICAgICAgICAgcmV0LmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgY2hpbGQgbm9kZSB0byB0aGUgZ2l2ZW4gbm9kZSBiYXNlZCBvbiB0aGUgcHJvcGVydGllcyBvZiB0aGUgbm9kZSdzIGNhc2VcbiAgICAgKiBAcmV0dXJucyBlbWl0cyBgdHJ1ZWAgaWYgdGhlIGNoaWxkIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsIGBmYWxzZWAgaWYgbm90XG4gICAgICovXG4gICAgcHVibGljIGFkZENoaWxkTm9kZShjbGlja2VkTm9kZTogQ2FzZVRyZWVOb2RlKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIGNsaWNrZWROb2RlLmFkZGluZ05vZGUub24oKTtcbiAgICAgICAgY29uc3QgY2FzZVJlZkZpZWxkID0gZ2V0SW1tZWRpYXRlRGF0YShjbGlja2VkTm9kZS5jYXNlLCBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpO1xuXG4gICAgICAgIGlmIChjYXNlUmVmRmllbGQuYWxsb3dlZE5ldHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoYENhc2UgJHtjbGlja2VkTm9kZS5jYXNlLnN0cmluZ0lkfSBjYW4gYWRkIG5ldyB0cmVlIG5vZGVzIGJ1dCBoYXMgbm8gYWxsb3dlZCBuZXRzYCk7XG4gICAgICAgICAgICBjbGlja2VkTm9kZS5hZGRpbmdOb2RlLm9mZigpO1xuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuXG4gICAgICAgIGlmIChjYXNlUmVmRmllbGQuYWxsb3dlZE5ldHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUFuZEFkZENoaWxkQ2FzZShjYXNlUmVmRmllbGQuYWxsb3dlZE5ldHNbMF0sIGNsaWNrZWROb2RlLCByZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1NlcnZpY2UuZ2V0TmV0cyhjYXNlUmVmRmllbGQuYWxsb3dlZE5ldHMpLnN1YnNjcmliZShuZXRzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRlTWV1UmVmID0gdGhpcy5fc2lkZU1lbnVTZXJ2aWNlLm9wZW4odGhpcy5fb3B0aW9uU2VsZWN0b3JDb21wb25lbnQsIFNpZGVNZW51U2l6ZS5NRURJVU0sIHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGNsaWNrZWROb2RlLmNhc2UudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IG5ldHMubWFwKG5ldCA9PiAoe3RleHQ6IG5ldC50aXRsZSwgdmFsdWU6IG5ldC5pZGVudGlmaWVyfSkpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgbGV0IHNpZGVNZW51U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgc2lkZU1lbnVTdWJzY3JpcHRpb24gPSBzaWRlTWV1UmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhZXZlbnQuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVBbmRBZGRDaGlsZENhc2UoZXZlbnQuZGF0YS52YWx1ZSwgY2xpY2tlZE5vZGUsIHJldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaWRlTWVudVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2tlZE5vZGUuYWRkaW5nTm9kZS5vZmYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5uZXh0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmV0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgY2FzZSBhbmQgYWRkcyBpdCB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIHNwZWNpZmllZCBub2RlXG4gICAgICogQHBhcmFtIHByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIgb2YgdGhlIHByb2Nlc3MgdGhhdCBzaG91bGQgYmUgY3JlYXRlZFxuICAgICAqIEBwYXJhbSBjbGlja2VkTm9kZSB0aGUgbm9kZSB0aGF0IGlzIHRoZSBwYXJlbnQgb2YgdGhlIG5ldyBjYXNlXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblJlc3VsdCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gd2lsbCBiZSBlbWl0dGVkIGludG8gdGhpcyBzdHJlYW0gd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBjcmVhdGVBbmRBZGRDaGlsZENhc2UocHJvY2Vzc0lkZW50aWZpZXI6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrZWROb2RlOiBDYXNlVHJlZU5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25SZXN1bHQ6IFN1YmplY3Q8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc1NlcnZpY2UuZ2V0TmV0KHByb2Nlc3NJZGVudGlmaWVyKS5zdWJzY3JpYmUobmV0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkVGl0bGVJbW1lZGlhdGUgPSBnZXRJbW1lZGlhdGVEYXRhKGNsaWNrZWROb2RlLmNhc2UsIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DSElMRF9OT0RFX1RJVExFKTtcbiAgICAgICAgICAgIGxldCBjaGlsZFRpdGxlID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdjYXNlVHJlZS5uZXdOb2RlRGVmYXVsdE5hbWUnKTtcbiAgICAgICAgICAgIGlmICghIWNoaWxkVGl0bGVJbW1lZGlhdGUpIHtcbiAgICAgICAgICAgICAgICBjaGlsZFRpdGxlID0gY2hpbGRUaXRsZUltbWVkaWF0ZS52YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoISFuZXQuZGVmYXVsdENhc2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRUaXRsZSA9IG5ldC5kZWZhdWx0Q2FzZU5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLmNyZWF0ZUNhc2Uoe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBjaGlsZFRpdGxlLFxuICAgICAgICAgICAgICAgIG5ldElkOiBuZXQuc3RyaW5nSWRcbiAgICAgICAgICAgIH0pLnN1YnNjcmliZSgob3V0Y29tZVJlc291cmNlOiBFdmVudE91dGNvbWVNZXNzYWdlUmVzb3VyY2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXNlUmVmRmllbGQgPSBnZXRJbW1lZGlhdGVEYXRhKGNsaWNrZWROb2RlLmNhc2UsIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DSElMRFJFTl9DQVNFX1JFRik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0Q2FzZVJlZlZhbHVlID0gWy4uLmNhc2VSZWZGaWVsZC52YWx1ZSwgKG91dGNvbWVSZXNvdXJjZS5vdXRjb21lIGFzIENyZWF0ZUNhc2VFdmVudE91dGNvbWUpLmFDYXNlLnN0cmluZ0lkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1DYXNlUmVmQ2FsbChjbGlja2VkTm9kZS5jYXNlLnN0cmluZ0lkLCBzZXRDYXNlUmVmVmFsdWUpLnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVDaGFuZ2UgPT4gdGhpcy51cGRhdGVUcmVlQWZ0ZXJDaGlsZEFkZChjbGlja2VkTm9kZSwgdmFsdWVDaGFuZ2UgPyB2YWx1ZUNoYW5nZSA6IHNldENhc2VSZWZWYWx1ZSwgb3BlcmF0aW9uUmVzdWx0KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgdHJlZSBhZnRlciBhZGRpbmcgYSBuZXcgY2hpbGRcbiAgICAgKiBAcGFyYW0gY2xpY2tlZE5vZGUgdGhlIHBhcmVudCBub2RlXG4gICAgICogQHBhcmFtIG5ld0Nhc2VSZWZWYWx1ZSB0aGUgbmV3IHZhbHVlIG9mIHRoZSBwYXJlbnQgbm9kZSdzIGNhc2UgcmVmXG4gICAgICogQHBhcmFtIG9wZXJhdGlvblJlc3VsdCB0aGUgcmVzdWx0IG9mIHRoZSBvcGVyYXRpb24gd2lsbCBiZSBlbWl0dGVkIGludG8gdGhpcyBzdHJlYW0gd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCB1cGRhdGVUcmVlQWZ0ZXJDaGlsZEFkZChjbGlja2VkTm9kZTogQ2FzZVRyZWVOb2RlLCBuZXdDYXNlUmVmVmFsdWU6IEFycmF5PHN0cmluZz4sIG9wZXJhdGlvblJlc3VsdDogU3ViamVjdDxib29sZWFuPik6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZU5vZGVDaGlsZHJlbkZyb21DaGFuZ2VkRmllbGRzKGNsaWNrZWROb2RlLCBuZXdDYXNlUmVmVmFsdWUpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgICAgICAgY2xpY2tlZE5vZGUuYWRkaW5nTm9kZS5vZmYoKTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kTm9kZShjbGlja2VkTm9kZSkuc3Vic2NyaWJlKGV4cGFuZFN1Y2Nlc3MgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChleHBhbmRTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQWN0aXZlTm9kZShjbGlja2VkTm9kZS5jaGlsZHJlbltjbGlja2VkTm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5leGVjdXRlQWZ0ZXJBY3Rpb25zKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvblJlc3VsdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJlbW92ZXMgdGhlIHByb3ZpZGVkIG5vbi1yb290IG5vZGUgaWYgdGhlIHVuZGVybHlpbmcgY2FzZSBhbGxvd3MgaXQuXG4gICAgICpcbiAgICAgKiBUaGUgdW5kZXJseWluZyBjYXNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgY2FzZSByZWYgb2YgaXQncyBwYXJlbnQgZWxlbWVudCB3aXRoIHRoZSBoZWxwIGZyb20gdGhlIGByZW1vdmVgXG4gICAgICogb3BlcmF0aW9uIHByb3ZpZGVkIGJ5IGNhc2UgcmVmIGl0c2VsZi5cbiAgICAgKiBAcGFyYW0gbm9kZSB0aGUgbm9kZSB0aGF0IHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlIHRyZWVcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVtb3ZlTm9kZShub2RlOiBDYXNlVHJlZU5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFub2RlLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDYXNlIHRyZWUgZG9lc25cXCd0IHN1cHBvcnQgcmVtb3ZhbCBvZiB0aGUgcm9vdCBub2RlLCBhcyBpdCBoYXMgbm8gcGFyZW50IGNhc2UgcmVmLicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZS5yZW1vdmluZ05vZGUub24oKTtcbiAgICAgICAgY29uc3QgY2FzZVJlZkltbWVkaWF0ZSA9IGdldEltbWVkaWF0ZURhdGEobm9kZS5wYXJlbnQuY2FzZSwgVHJlZVBldHJpZmxvd0lkZW50aWZpZXJzLkNISUxEUkVOX0NBU0VfUkVGKTtcbiAgICAgICAgY29uc3Qgc2V0Q2FzZVJlZlZhbHVlID0gKGNhc2VSZWZJbW1lZGlhdGUudmFsdWUgYXMgQXJyYXk8c3RyaW5nPikuZmlsdGVyKGlkID0+IGlkICE9PSBub2RlLmNhc2Uuc3RyaW5nSWQpO1xuICAgICAgICB0aGlzLnBlcmZvcm1DYXNlUmVmQ2FsbChub2RlLnBhcmVudC5jYXNlLnN0cmluZ0lkLCBzZXRDYXNlUmVmVmFsdWUpLnN1YnNjcmliZShjYXNlUmVmQ2hhbmdlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0Nhc2VSZWZWYWx1ZSA9IGNhc2VSZWZDaGFuZ2UgPyBjYXNlUmVmQ2hhbmdlIDogc2V0Q2FzZVJlZlZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kZWxldGVSZW1vdmVkTm9kZXMobm9kZS5wYXJlbnQsIG5ld0Nhc2VSZWZWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGVDaGlsZHJlbkZyb21DaGFuZ2VkRmllbGRzKG5vZGUucGFyZW50LCBuZXdDYXNlUmVmVmFsdWUpO1xuXG4gICAgICAgICAgICBub2RlLnJlbW92aW5nTm9kZS5vZmYoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5kZXNlbGVjdE5vZGVJZkRlc2NlbmRhbnRPZihub2RlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHBhbmRzIGFsbCBub2RlcyBpbiB0aGUgdHJlZSBkaWN0YXRlZCBieSB0aGUgYXJndW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcGF0aCBub2RlcyB0aGF0IHNob3VsZCBiZSBleHBhbmRlZCBhbG9uZyB3aXRoIHRoZWlyIHBhdGggZnJvbSB0aGUgcm9vdCBub2RlXG4gICAgICovXG4gICAgcHVibGljIGV4cGFuZFBhdGgocGF0aDogQ2FzZVRyZWVQYXRoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm9vdE5vZGUgPSB0aGlzLmRhdGFTb3VyY2UuZGF0YVswXTtcbiAgICAgICAgd2hpbGUgKHJvb3ROb2RlLnBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByb290Tm9kZSA9IHJvb3ROb2RlLnBhcmVudDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmV4cGFuZExldmVsKFtyb290Tm9kZV0sIHRoaXMuY29udmVydFBhdGhUb0V4cGFuc2lvblRyZWUocGF0aCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgYSB7QExpbmsgQ2FzZVRyZWVQYXRofSBvYmplY3QgaW50byBhbiB7QGxpbmsgRXhwYW5zaW9uVHJlZX0gb2JqZWN0LlxuICAgICAqIFRoZSByZXN1bHQgaGFzIGFsbCB0aGUgY29tbW9uIHBhdGhzIG1lcmdlZCBpbnRvIHNpbmdsZSBicmFuY2hlcyBvZiB0aGUgcmVzdWx0aW5nIHRyZWUgc3RydWN0dXJlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHBhdGhzIG5vZGVzIHRoYXQgc2hvdWxkIGJlIGV4cGFuZGVkIGFsb25nIHdpdGggdGhlaXIgcGF0aCBmcm9tIHRoZSByb290IG5vZGVcbiAgICAgKiBAcmV0dXJucyBhbiB7QGxpbmsgRXhwYW5zaW9uVHJlZX0gZXF1aXZhbGVudCB0byB0aGUgcHJvdmlkZWQge0BsaW5rIENhc2VUcmVlUGF0aH1cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29udmVydFBhdGhUb0V4cGFuc2lvblRyZWUocGF0aHM6IENhc2VUcmVlUGF0aCk6IEV4cGFuc2lvblRyZWUge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhwYXRocykuZm9yRWFjaChwYXRoID0+IHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50Tm9kZSA9IHJlc3VsdDtcbiAgICAgICAgICAgIHBhdGguZm9yRWFjaChub2RlSWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZVtub2RlSWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGVbbm9kZUlkXSA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlW25vZGVJZF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVjdXJzaXZlbHkgZXhwYW5kcyBhbGwgbm9kZXMgZnJvbSB0aGUgcHJvdmlkZWQgYXJyYXkgb2Ygbm9kZXMsIHRoYXQgYXBwZWFyIGluIHRoZSB0b3AgbGV2ZWwgb2YgdGhlIHtAbGluayBFeHBhbnNpb25UcmVlfSBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbGV2ZWxOb2RlcyBub2RlcyBmcm9tIHdoaWNoIHRoZSBleHBhbnNpb24gc2hvdWxkIHN0YXJ0XG4gICAgICogQHBhcmFtIHRhcmdldHMgYSB0cmVlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgdGhlIG5vZGVzIHRoYXQgYXJlIHRvIGJlIGV4cGFuZGVkIHJlY3Vyc2l2ZWx5LlxuICAgICAqIFRoZSB0b3AgbGV2ZWwgbm9kZXMgYXJlIGV4cGFuZGVkIGZpcnN0LCBmcm9tIHRoZSBwcm92aWRlZCBgbGV2ZWxOb2Rlc2AuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGV4cGFuZExldmVsKGxldmVsTm9kZXM6IEFycmF5PENhc2VUcmVlTm9kZT4sIHRhcmdldHM6IEV4cGFuc2lvblRyZWUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGVzaXJlZElkcyA9IG5ldyBTZXQoT2JqZWN0LmtleXModGFyZ2V0cykpO1xuICAgICAgICBpZiAoZGVzaXJlZElkcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXZlbE5vZGVzLmZvckVhY2gobiA9PiB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbjtcbiAgICAgICAgICAgIGlmICghZGVzaXJlZElkcy5oYXMobm9kZS5jYXNlLnN0cmluZ0lkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjsgLy8gY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZXhwYW5kTm9kZShub2RlKS5zdWJzY3JpYmUoc3VjY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnQ291bGQgbm90IGV4cGFuZCB0cmVlIG5vZGUgd2l0aCBJRDogJyArIG5vZGUuY2FzZS5zdHJpbmdJZCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRMZXZlbChub2RlLmNoaWxkcmVuLCB0YXJnZXRzW25vZGUuY2FzZS5zdHJpbmdJZF0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgdGhlIHN1YnRyZWVzIHJvb3RlZCBhdCB0aGUgbm9kZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgcGFyZW50IG5vZGUncyBjaGlsZCBjYXNlIHJlZiB2YWx1ZXMsXG4gICAgICogYnV0IGFyZSBubyBsb25nZXIgcHJlc2VudCBpbiB0aGUgbmV3IHZhbHVlXG4gICAgICogQHBhcmFtIHBhcmVudE5vZGUgYW4gaW5uZXIgbm9kZSBvZiB0aGUgdHJlZSB0aGF0IGhhZCBzb21lIG9mIGl0J3MgY2hpbGRyZW4gcmVtb3ZlZFxuICAgICAqIEBwYXJhbSBuZXdDYXNlUmVmVmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgcGFyZW50IG5vZGUncyBjYXNlIHJlZlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWxldGVSZW1vdmVkTm9kZXMocGFyZW50Tm9kZTogQ2FzZVRyZWVOb2RlLCBuZXdDYXNlUmVmVmFsdWU6IEFycmF5PHN0cmluZz4pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlZENoaWxkcmVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgICAgIGdldEltbWVkaWF0ZURhdGEocGFyZW50Tm9kZS5jYXNlLCBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpLnZhbHVlLmZvckVhY2goaWQgPT4gcmVtb3ZlZENoaWxkcmVuLmFkZChpZCkpO1xuICAgICAgICBuZXdDYXNlUmVmVmFsdWUuZm9yRWFjaChpZCA9PiByZW1vdmVkQ2hpbGRyZW4uZGVsZXRlKGlkKSk7XG4gICAgICAgIHJlbW92ZWRDaGlsZHJlbi5mb3JFYWNoKHJlbW92ZWRJZCA9PiB0aGlzLl9jYXNlUmVzb3VyY2VTZXJ2aWNlLmRlbGV0ZUNhc2UocmVtb3ZlZElkLCB0cnVlKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZU1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdSZW1vdmFsIG9mIGNoaWxkIGNhc2UgdW5zdWNjZXNzZnVsJywgcmVzcG9uc2VNZXNzYWdlLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzZWxlY3RzIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbm9kZSBpZiBpdCBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIHByb3ZpZGVkIG5vZGVcbiAgICAgKiBAcGFyYW0gbm9kZSB0aGUgbm9kZSB3aG8ncyBkZXNjZW5kYW50cyBzaG91bGQgYmUgZGVzZWxlY3RlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZXNlbGVjdE5vZGVJZkRlc2NlbmRhbnRPZihub2RlOiBDYXNlVHJlZU5vZGUpOiB2b2lkIHtcbiAgICAgICAgbGV0IGJ1YmJsaW5nTm9kZSA9IHRoaXMuY3VycmVudE5vZGU7XG4gICAgICAgIHdoaWxlIChidWJibGluZ05vZGUgJiYgYnViYmxpbmdOb2RlICE9PSB0aGlzLl9yb290Tm9kZSkge1xuICAgICAgICAgICAgaWYgKGJ1YmJsaW5nTm9kZSA9PT0gbm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQWN0aXZlTm9kZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnViYmxpbmdOb2RlID0gYnViYmxpbmdOb2RlLnBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm1zIGEgYmFja2VuZCBjYWxsIG9uIHRoZSBnaXZlbiBjYXNlLCBhbmQgc2V0cyB0aGUgdmFsdWUgb2YgdGhlIGNhc2UgcmVmIGZpZWxkIGluIHRoZSB0cmFuc2l0aW9uIGRlZmluZWQgYnlcbiAgICAgKiBbQ0FTRV9SRUZfVFJBTlNJVElPTl17QGxpbmsgVHJlZVBldHJpZmxvd0lkZW50aWZpZXJzI0NBU0VfUkVGX1RSQU5TSVRJT059LlxuICAgICAqIEBwYXJhbSBjYXNlSWQgc3RyaW5nIElEIG9mIHRoZSBjYXNlIHRoYXQgc2hvdWxkIGhhdmUgaXQncyB0cmVlIGNhc2UgcmVmIHNldFxuICAgICAqIEBwYXJhbSBuZXdDYXNlUmVmVmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgY2FzZSByZWYgZmllbGRcbiAgICAgKi9cbiAgICBwcml2YXRlIHBlcmZvcm1DYXNlUmVmQ2FsbChjYXNlSWQ6IHN0cmluZywgbmV3Q2FzZVJlZlZhbHVlOiBBcnJheTxzdHJpbmc+KTogT2JzZXJ2YWJsZTxBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCQgPSBuZXcgUmVwbGF5U3ViamVjdDxBcnJheTxzdHJpbmc+PigxKTtcblxuICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmdldFRhc2tzKFNpbXBsZUZpbHRlci5mcm9tVGFza1F1ZXJ5KHtcbiAgICAgICAgICAgIGNhc2U6IHtpZDogY2FzZUlkfSxcbiAgICAgICAgICAgIHRyYW5zaXRpb25JZDogVHJlZVBldHJpZmxvd0lkZW50aWZpZXJzLkNBU0VfUkVGX1RSQU5TSVRJT05cbiAgICAgICAgfSkpLnN1YnNjcmliZShwYWdlID0+IHtcbiAgICAgICAgICAgIGlmICghaGFzQ29udGVudChwYWdlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2FzZSByZWYgYWNjZXNzb3IgdGFzayBkb2VzblxcJ3QgZXhpc3QhJyk7XG4gICAgICAgICAgICAgICAgcmVzdWx0JC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGFzayA9IHBhZ2UuY29udGVudFswXTtcblxuICAgICAgICAgICAgdGhpcy5fdGFza1Jlc291cmNlU2VydmljZS5hc3NpZ25UYXNrKHRhc2suc3RyaW5nSWQpLnN1YnNjcmliZShhc3NpZ25SZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFhc3NpZ25SZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2FzZSByZWYgYWNjZXNzb3IgdGFzayBjb3VsZCBub3QgYmUgYXNzaWduZWQnLCBhc3NpZ25SZXNwb25zZS5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHt9O1xuICAgICAgICAgICAgICAgIGJvZHlbVHJlZVBldHJpZmxvd0lkZW50aWZpZXJzLkNISUxEUkVOX0NBU0VfUkVGXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Nhc2VSZWYnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbmV3Q2FzZVJlZlZhbHVlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLnNldERhdGEodGFzay5zdHJpbmdJZCwgYm9keSkuc3Vic2NyaWJlKChvdXRjb21lUmVzb3VyY2U6IEV2ZW50T3V0Y29tZU1lc3NhZ2VSZXNvdXJjZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzID0gKG91dGNvbWVSZXNvdXJjZS5vdXRjb21lIGFzIFNldERhdGFFdmVudE91dGNvbWUpLmNoYW5nZWRGaWVsZHMuY2hhbmdlZEZpZWxkcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FzZVJlZkNoYW5nZXMgPSBjaGFuZ2VkRmllbGRzW1RyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DSElMRFJFTl9DQVNFX1JFRl07XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCQubmV4dChjYXNlUmVmQ2hhbmdlcyA/IGNhc2VSZWZDaGFuZ2VzLnZhbHVlIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0JC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl90YXNrUmVzb3VyY2VTZXJ2aWNlLmZpbmlzaFRhc2sodGFzay5zdHJpbmdJZCkuc3Vic2NyaWJlKGZpbmlzaFJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5pc2hSZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdDYXNlIHJlZiBhY2Nlc3NvciB0YXNrIGZpbmlzaGVkJywgZmluaXNoUmVzcG9uc2Uuc3VjY2Vzcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2FzZSByZWYgYWNjZXNzb3IgdGFzayBmaW5pc2ggZmFpbGVkJywgZmluaXNoUmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ291bGQgbm90IHNldCBkYXRhIHRvIHRyZWUgY2FzZSByZWYnLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCQuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhc2UgcmVmIGFjY2Vzc29yIHRhc2sgY291bGQgbm90IGJlIGFzc2lnbmVkJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCQuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0Nhc2UgcmVmIGFjY2Vzc29yIHRhc2sgY291bGQgbm90IGJlIGZvdW5kJywgZXJyb3IpO1xuICAgICAgICAgICAgcmVzdWx0JC5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGVyZm9ybXMgYW4gdXBkYXRlIGFmdGVyIGFkZGluZyBvciByZW1vdmluZyBhIG5vZGUgZnJvbSB0aGUgdHJlZS5cbiAgICAgKlxuICAgICAqIElmIG9ubHkgb25lIG5vZGUgd2FzIGFkZGVkIGFkZHMgaXQgaW50byB0aGUgdHJlZVxuICAgICAqXG4gICAgICogSWYgb25seSBvbmUgbm9kZSB3YXMgcmVtb3ZlZCByZW1vdmVzIGl0IGZyb20gdGhlIHRyZWVcbiAgICAgKlxuICAgICAqIE90aGVyd2lzZSBjb2xsYXBzZXMgdGhlIGFmZmVjdGVkIG5vZGUgYW5kIG1hcmtzIGl0J3MgY2hpbGRyZW4gYXMgZGlydHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSBhZmZlY3RlZE5vZGUgbm9kZSB0aGF0IGhhZCBpdCdzIGNoaWxkcmVuIGNoYW5nZWRcbiAgICAgKiBAcGFyYW0gbmV3Q2FzZVJlZlZhbHVlIG5ldyB2YWx1ZSBvZiB0aGUgY2FzZVJlZiBmaWVsZCByZXR1cm5lZCBieSBiYWNrZW5kXG4gICAgICogQHJldHVybnMgYW4gYE9ic2VydmFibGVgIHRoYXQgZW1pdHMgYW4gb2JqZWN0IHdpdGggdGhlIFtyZXN1bHRde0BsaW5rIFJlc3VsdFdpdGhBZnRlckFjdGlvbnMjcmVzdWx0fSBhdHRyaWJ1dGUgc2V0IHRvIGB0cnVlYCBpZlxuICAgICAqIHRoZSB1cGRhdGUgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVOb2RlQ2hpbGRyZW5Gcm9tQ2hhbmdlZEZpZWxkcyhhZmZlY3RlZE5vZGU6IENhc2VUcmVlTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2VSZWZWYWx1ZTogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8UmVzdWx0V2l0aEFmdGVyQWN0aW9uczxib29sZWFuPj4ge1xuICAgICAgICBjb25zdCBjYXNlUmVmRmllbGQgPSBnZXRJbW1lZGlhdGVEYXRhKGFmZmVjdGVkTm9kZS5jYXNlLCBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpO1xuICAgICAgICBjb25zdCBuZXdDaGlsZHJlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBuZXdDYXNlUmVmVmFsdWUuZm9yRWFjaChpZCA9PiBuZXdDaGlsZHJlbi5hZGQoaWQpKTtcblxuICAgICAgICBsZXQgbnVtYmVyT2ZNaXNzaW5nQ2hpbGRyZW4gPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhc2VSZWZGaWVsZC52YWx1ZS5sZW5ndGggJiYgbnVtYmVyT2ZNaXNzaW5nQ2hpbGRyZW4gPCAyOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghbmV3Q2hpbGRyZW4uaGFzKGNhc2VSZWZGaWVsZC52YWx1ZVtpXSkpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJPZk1pc3NpbmdDaGlsZHJlbisrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZXhhY3RseU9uZUNoaWxkQWRkZWQgPSBjYXNlUmVmRmllbGQudmFsdWUubGVuZ3RoICsgMSA9PT0gbmV3Q2FzZVJlZlZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgJiYgY2FzZVJlZkZpZWxkLnZhbHVlLmV2ZXJ5KGl0ID0+IG5ld0NoaWxkcmVuLmhhcyhpdCkpO1xuXG4gICAgICAgIGNvbnN0IGV4YWN0bHlPbmVDaGlsZFJlbW92ZWQgPSBjYXNlUmVmRmllbGQudmFsdWUubGVuZ3RoIC0gMSA9PT0gbmV3Q2FzZVJlZlZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgJiYgbnVtYmVyT2ZNaXNzaW5nQ2hpbGRyZW4gPT09IDE7XG5cbiAgICAgICAgaWYgKCFleGFjdGx5T25lQ2hpbGRBZGRlZCAmJiAhZXhhY3RseU9uZUNoaWxkUmVtb3ZlZCkge1xuICAgICAgICAgICAgY2FzZVJlZkZpZWxkLnZhbHVlID0gbmV3Q2FzZVJlZlZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fdHJlZUNvbnRyb2wuY29sbGFwc2VEZXNjZW5kYW50cyhhZmZlY3RlZE5vZGUpO1xuICAgICAgICAgICAgYWZmZWN0ZWROb2RlLmRpcnR5Q2hpbGRyZW4gPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIG9mKG5ldyBSZXN1bHRXaXRoQWZ0ZXJBY3Rpb25zKHRydWUpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGFjdGx5T25lQ2hpbGRBZGRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0NoaWxkTm9kZUFkZChhZmZlY3RlZE5vZGUsIGNhc2VSZWZGaWVsZCwgbmV3Q2FzZVJlZlZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NDaGlsZE5vZGVSZW1vdmUoYWZmZWN0ZWROb2RlLCBjYXNlUmVmRmllbGQsIG5ld0NoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgY2hpbGQgbm9kZSB0byB0aGUgYGFmZmVjdGVkTm9kZWAgYnkgYWRkaW5nIHRoZSBsYXN0IENhc2UgZnJvbSB0aGUgYG5ld0Nhc2VSZWZWYWx1ZWBcbiAgICAgKiBAcGFyYW0gYWZmZWN0ZWROb2RlIHRoZSBub2RlIGluIHRoZSB0cmVlIHRoYXQgaGFkIGEgY2hpbGQgYWRkZWQgLSB0aGUgcGFyZW50IG5vZGVcbiAgICAgKiBAcGFyYW0gY2FzZVJlZkZpZWxkIHRoZSBjYXNlIHJlZiBmaWVsZCBvZiB0aGUgYWZmZWN0ZWQgbm9kZVxuICAgICAqIEBwYXJhbSBuZXdDYXNlUmVmVmFsdWUgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgY2FzZSByZWYgZmllbGQgaW4gdGhlIG5vZGVcbiAgICAgKiBAcmV0dXJucyBhbiBgT2JzZXJ2YWJsZWAgdGhhdCBlbWl0cyBgdHJ1ZWAgaWYgYSBub2RlIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcm9jZXNzQ2hpbGROb2RlQWRkKGFmZmVjdGVkTm9kZTogQ2FzZVRyZWVOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2VSZWZGaWVsZDogSW1tZWRpYXRlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDYXNlUmVmVmFsdWU6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPFJlc3VsdFdpdGhBZnRlckFjdGlvbnM8Ym9vbGVhbj4+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0JCA9IG5ldyBSZXBsYXlTdWJqZWN0PFJlc3VsdFdpdGhBZnRlckFjdGlvbnM8Ym9vbGVhbj4+KDEpO1xuXG4gICAgICAgIGNhc2VSZWZGaWVsZC52YWx1ZSA9IG5ld0Nhc2VSZWZWYWx1ZTtcbiAgICAgICAgdGhpcy5fY2FzZVJlc291cmNlU2VydmljZS5nZXRPbmVDYXNlKG5ld0Nhc2VSZWZWYWx1ZVtuZXdDYXNlUmVmVmFsdWUubGVuZ3RoIC0gMV0pLnN1YnNjcmliZShjaGlsZENhc2UgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaWxkQ2FzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnUHVzaGluZyBjaGlsZCBub2RlIHRvIHRyZWUnLCB7Y2hpbGRDYXNlLCBhZmZlY3RlZE5vZGU6IGFmZmVjdGVkTm9kZS50b0xvZ2dhYmxlRm9ybSgpfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gdGhpcy5wdXNoQ2hpbGRUb1RyZWUoYWZmZWN0ZWROb2RlLCBjaGlsZENhc2UpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCQubmV4dChuZXcgUmVzdWx0V2l0aEFmdGVyQWN0aW9ucyh0cnVlLCBbKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNFYWdlckxvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKCdFYWdlcmx5IGV4cGFuZGluZyBhIG5ld2x5IGFkZGVkIG5vZGUuJywgY2hpbGROb2RlLnRvTG9nZ2FibGVGb3JtKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBhbmROb2RlKGNoaWxkTm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ05ldyBjaGlsZCBjYXNlIHdhcyBub3QgZm91bmQsIGlsbGVnYWwgc3RhdGUnLCBjaGlsZENhc2UpO1xuICAgICAgICAgICAgICAgIHJlc3VsdCQubmV4dChuZXcgUmVzdWx0V2l0aEFmdGVyQWN0aW9ucyhmYWxzZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0JC5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ05ldyBjaGlsZCBub2RlIGNhc2UgY291bGQgbm90IGJlIGZvdW5kJywgZXJyb3IpO1xuICAgICAgICAgICAgcmVzdWx0JC5uZXh0KG5ldyBSZXN1bHRXaXRoQWZ0ZXJBY3Rpb25zKGZhbHNlKSk7XG4gICAgICAgICAgICByZXN1bHQkLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBuZXcgY2hpbGQgbm9kZSB0byB0aGUgdGFyZ2V0IHBhcmVudCBub2RlLlxuICAgICAqIEBwYXJhbSBwYXJlbnROb2RlIHRoZSBub2RlcyB3aG9zZSBjaGlsZCBzaG91bGQgYmUgYWRkZWRcbiAgICAgKiBAcGFyYW0gY2hpbGRDYXNlIHRoZSBjaGlsZCBjYXNlXG4gICAgICogQHJldHVybnMgdGhlIG5ld2x5IGFkZGVkIG5vZGVcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcHVzaENoaWxkVG9UcmVlKHBhcmVudE5vZGU6IENhc2VUcmVlTm9kZSwgY2hpbGRDYXNlOiBDYXNlKTogQ2FzZVRyZWVOb2RlIHtcbiAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IENhc2VUcmVlTm9kZShjaGlsZENhc2UsIHBhcmVudE5vZGUpO1xuICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnB1c2goY2hpbGROb2RlKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoVHJlZSgpO1xuICAgICAgICByZXR1cm4gY2hpbGROb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIGRlbGV0ZWQgbm9kZSBmcm9tIHRoZSBjaGlsZHJlbiBvZiB0aGUgYGFmZmVjdGVkTm9kZWBcbiAgICAgKiBAcGFyYW0gYWZmZWN0ZWROb2RlIHRoZSBub2RlIGluIHRoZSB0cmVlIHRoYXQgaGFkIGl0J3MgY2hpbGQgcmVtb3ZlZFxuICAgICAqIEBwYXJhbSBjYXNlUmVmRmllbGQgdGhlIGNhc2UgcmVmIGZpZWxkIG9mIHRoZSBhZmZlY3RlZCBub2RlXG4gICAgICogQHBhcmFtIG5ld0Nhc2VSZWZWYWx1ZXMgdGhlIG5ldyB2YWx1ZSBvZiB0aGUgY2FzZSByZWYgZmllbGQgaW4gdGhlIG5vZGVcbiAgICAgKiBAcmV0dXJucyBhbiBgT2JzZXJ2YWJsZWAgdGhhdCBlbWl0cyBgdHJ1ZWAgd2hlbiB0aGUgcmVtb3ZlIG9wZXJhdGlvbiBjb21wbGV0ZXMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHByb2Nlc3NDaGlsZE5vZGVSZW1vdmUoYWZmZWN0ZWROb2RlOiBDYXNlVHJlZU5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZVJlZkZpZWxkOiBJbW1lZGlhdGVEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0Nhc2VSZWZWYWx1ZXM6IFNldDxzdHJpbmc+KTogT2JzZXJ2YWJsZTxSZXN1bHRXaXRoQWZ0ZXJBY3Rpb25zPGJvb2xlYW4+PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2FzZVJlZkZpZWxkLnZhbHVlLmZpbmRJbmRleChpdCA9PiAhbmV3Q2FzZVJlZlZhbHVlcy5oYXMoaXQpKTtcbiAgICAgICAgY2FzZVJlZkZpZWxkLnZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIGFmZmVjdGVkTm9kZS5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLnJlZnJlc2hUcmVlKCk7XG4gICAgICAgIHJldHVybiBvZihuZXcgUmVzdWx0V2l0aEFmdGVyQWN0aW9ucyh0cnVlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGlnbm9yZVxuICAgICAqIEZvcmNlcyBhIHJlcmVuZGVyIG9mIHRoZSB0cmVlIGNvbnRlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlZnJlc2hUcmVlKCk6IHZvaWQge1xuICAgICAgICByZWZyZXNoVHJlZSh0aGlzLl90cmVlRGF0YVNvdXJjZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVsb2FkcyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNhc2Ugbm9kZS4gVGhlIHtAbGluayBDYXNlfSBvYmplY3QgaGVsZCBpbiB0aGUge0BsaW5rIENhc2VUcmVlTm9kZX0gaW5zdGFuY2UgaXMgbm90IHJlcGxhY2VkLFxuICAgICAqIGJ1dCB0aGUgbmV3IENhc2UgaXMgYE9iamVjdC5hc3NpZ25gLWVkIGludG8gaXQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgcmVmZXJlbmNlIHRvIHRoZSBDYXNlIGluc3RhbmNlIGlzIHVuY2hhbmdlZCBidXQgcmVmZXJlbmNlc1xuICAgICAqIHRvIGFsbCBpdCdzIG5vbi1wcmltaXRpdmUgYXR0cmlidXRlcyBhcmUgY2hhbmdlZC5cbiAgICAgKlxuICAgICAqIElmIGEgcmVsb2FkIG9mIHRoZSBjdXJyZW50IG5vZGUgaXMgaW5pdGlhdGVkIGJlZm9yZSB0aGUgcHJldmlvdXMgb25lIGNvbXBsZXRlZCwgdGhlIG5ldyBvbmUgaXMgaWdub3JlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY2FzZSBjaGFuZ2VkIGJlZm9yZSBhIHJlc3BvbnNlIGZyb20gYmFja2VuZCB3YXMgcmVjZWl2ZWQgdGhlIHJlc3BvbnNlIGlzIGlnbm9yZWQuXG4gICAgICpcbiAgICAgKiBOb3RlIHRoYXQgdGhlIHBhcmVudCBub2RlLCBub3IgdGhlIGNoaWxkIG5vZGVzIGFyZSByZWxvYWRlZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVsb2FkQ3VycmVudENhc2UoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5fY3VycmVudE5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnTm8gVHJlZSBDYXNlIE5vZGUgc2VsZWN0ZWQsIG5vdGhpbmcgdG8gcmVsb2FkJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3JlbG9hZGVkQ2FzZUlkICYmIHRoaXMuX2N1cnJlbnROb2RlLmNhc2Uuc3RyaW5nSWQgIT09IHRoaXMuX3JlbG9hZGVkQ2FzZUlkKSB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ1JlbG9hZCBvZiB0aGUgY3VycmVudCBjYXNlIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZWxvYWRlZENhc2VJZCA9IHRoaXMuX2N1cnJlbnROb2RlLmNhc2Uuc3RyaW5nSWQ7XG4gICAgICAgIHRoaXMuX2Nhc2VSZXNvdXJjZVNlcnZpY2UuZ2V0T25lQ2FzZSh0aGlzLl9jdXJyZW50Q2FzZS5zdHJpbmdJZCkuc3Vic2NyaWJlKHJlbG9hZGVkQ3VycmVudENhc2UgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZWxvYWRlZEN1cnJlbnRDYXNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDdXJyZW50IENhc2UgVHJlZSBOb2RlIGNvdWxkIG5vdCBiZSByZWxvYWRlZC4gSW52YWxpZCBzZXJ2ZXIgcmVzcG9uc2UnLCByZWxvYWRlZEN1cnJlbnRDYXNlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fY3VycmVudE5vZGUgJiYgcmVsb2FkZWRDdXJyZW50Q2FzZS5zdHJpbmdJZCA9PT0gdGhpcy5fY3VycmVudE5vZGUuY2FzZS5zdHJpbmdJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbG9hZGVkQ2FzZUlkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYW5nZSA9IHRoaXMuZGV0ZXJtaW5lQ2FzZVVwZGF0ZSh0aGlzLl9jdXJyZW50Q2FzZSwgcmVsb2FkZWRDdXJyZW50Q2FzZSk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jdXJyZW50Q2FzZSwgcmVsb2FkZWRDdXJyZW50Q2FzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJlZUNhc2VWaWV3U2VydmljZS5sb2FkVGFzayQubmV4dCh0aGlzLl9jdXJyZW50Q2FzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZS52aXNpYmxlVHJlZVByb3BlcnRpZXNDaGFuZ2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaFRyZWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZS5jaGlsZHJlbkNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudE5vZGUuZGlydHlDaGlsZHJlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kTm9kZSh0aGlzLl9jdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnQ3VycmVudCBDYXNlIFRyZWUgTm9kZSByZWxvYWRlZCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0Rpc2NhcmRpbmcgY2FzZSByZWxvYWQgcmVzcG9uc2UsIHNpbmNlIHRoZSBjdXJyZW50IG5vZGUgaGFzIGNoYW5nZWQgYmVmb3JlIGl0cyBjYXNlIHdhcyByZWNlaXZlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0N1cnJlbnQgQ2FzZSBUcmVlIE5vZGUgcmVsb2FkIHJlcXVlc3QgZmFpbGVkJywgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIGlmIGFubnkgb2YgdGhlIGNhc2UgYXR0cmlidXRlcyB0aGF0IGFyZSB2aXNpYmxlIG9uIHRoZSB0cmVlIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIG9sZENhc2UgdGhlIHByZXZpb3VzIHZlcnNpb24gb2YgdGhlIENhc2Ugb2JqZWN0LCB0aGF0IGlzIGN1cnJlbnRseSBkaXNwbGF5ZWQgb24gdGhlIHRyZWVcbiAgICAgKiBAcGFyYW0gbmV3Q2FzZSB0aGUgbmV3IHZlcnNpb24gb2YgdGhlIENhc2Ugb2JqZWN0LCB0aGF0IHNob3VsZCByZXBsYWNlIHRoZSBvbGQgb25lXG4gICAgICovXG4gICAgcHJpdmF0ZSBkZXRlcm1pbmVDYXNlVXBkYXRlKG9sZENhc2U6IENhc2UsIG5ld0Nhc2U6IENhc2UpOiBDYXNlVXBkYXRlUmVzdWx0IHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUF0dHJpYnV0ZXMgPSBbXG4gICAgICAgICAgICBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0FOX0FERF9DSElMRFJFTixcbiAgICAgICAgICAgIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DQU5fUkVNT1ZFX05PREUsXG4gICAgICAgICAgICBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQkVGT1JFX1RFWFRfSUNPTixcbiAgICAgICAgICAgIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5UUkVFX0FERF9JQ09OXG4gICAgICAgIF07XG5cbiAgICAgICAgY29uc3QgcmVzdWx0OiBDYXNlVXBkYXRlUmVzdWx0ID0ge1xuICAgICAgICAgICAgdmlzaWJsZVRyZWVQcm9wZXJ0aWVzQ2hhbmdlZDogdHJ1ZSwgLy8gZm9yIHNob3J0LWNpcmN1aXRpbmcgdGhlIGV2YWx1YXRpb24sIGlmIG5vZGVzIGNoaWxkcmVuIGNoYW5nZWRcbiAgICAgICAgICAgIGNoaWxkcmVuQ2hhbmdlZDogZmFsc2VcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBvbGRDaGlsZENhc2VSZWYgPSBnZXRJbW1lZGlhdGVEYXRhKG9sZENhc2UsIFRyZWVQZXRyaWZsb3dJZGVudGlmaWVycy5DSElMRFJFTl9DQVNFX1JFRik7XG4gICAgICAgIGlmIChvbGRDaGlsZENhc2VSZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3Qgb2xkQ2hpbGRyZW4gPSBuZXcgU2V0KG9sZENoaWxkQ2FzZVJlZi52YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBuZXdDaGlsZHJlbiA9IG5ldyBTZXQoZ2V0SW1tZWRpYXRlRGF0YShuZXdDYXNlLCBUcmVlUGV0cmlmbG93SWRlbnRpZmllcnMuQ0hJTERSRU5fQ0FTRV9SRUYpLnZhbHVlKTtcblxuICAgICAgICAgICAgcmVzdWx0LmNoaWxkcmVuQ2hhbmdlZCA9IG9sZENoaWxkcmVuLnNpemUgIT09IG5ld0NoaWxkcmVuLnNpemU7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5jaGlsZHJlbkNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQuY2hpbGRyZW5DaGFuZ2VkID0gQXJyYXkuZnJvbShvbGRDaGlsZHJlbikuc29tZShjaGlsZElkID0+ICFuZXdDaGlsZHJlbi5oYXMoY2hpbGRJZCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBzaG9ydC1jaXJjdWl0XG4gICAgICAgICAgICBpZiAocmVzdWx0LmNoaWxkcmVuQ2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQudmlzaWJsZVRyZWVQcm9wZXJ0aWVzQ2hhbmdlZCA9IHZpc2libGVBdHRyaWJ1dGVzLnNvbWUoYXR0cmlidXRlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRJbW1lZGlhdGVEYXRhKG9sZENhc2UsIGF0dHJpYnV0ZSlcbiAgICAgICAgICAgICAgICAmJiBnZXRJbW1lZGlhdGVEYXRhKG9sZENhc2UsIGF0dHJpYnV0ZSkudmFsdWUgIT09IGdldEltbWVkaWF0ZURhdGEobmV3Q2FzZSwgYXR0cmlidXRlKS52YWx1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59XG4iXX0=