@netgrif/components-core 6.3.2 → 6.4.0-beta.10

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 (331) hide show
  1. package/esm2020/assets/i18n/de.json +15 -2
  2. package/esm2020/assets/i18n/en.json +15 -2
  3. package/esm2020/assets/i18n/sk.json +15 -2
  4. package/esm2020/lib/actions/front-action.module.mjs +28 -0
  5. package/esm2020/lib/actions/model/front-action-definition.mjs +2 -0
  6. package/esm2020/lib/actions/model/router-action-definitions.mjs +8 -0
  7. package/esm2020/lib/actions/model/task-action-definitions.mjs +16 -0
  8. package/esm2020/lib/actions/public-api.mjs +6 -0
  9. package/esm2020/lib/actions/services/front-action.service.mjs +27 -0
  10. package/esm2020/lib/data-fields/base-component/abstract-base-data-field.component.mjs +51 -0
  11. package/esm2020/lib/data-fields/boolean-field/abstract-boolean-field.component.mjs +7 -26
  12. package/esm2020/lib/data-fields/boolean-field/boolean-default-field/abstract-boolean-default-field.component.mjs +46 -0
  13. package/esm2020/lib/data-fields/boolean-field/models/boolean-field.mjs +9 -1
  14. package/esm2020/lib/data-fields/button-field/abstract-button-field.component.mjs +7 -39
  15. package/esm2020/lib/data-fields/button-field/button-default-field/abstract-button-default-field.component.mjs +58 -0
  16. package/esm2020/lib/data-fields/button-field/models/button-field.mjs +5 -1
  17. package/esm2020/lib/data-fields/case-ref-field/case-ref-default/case-ref-default.component.mjs +75 -0
  18. package/esm2020/lib/data-fields/case-ref-field/model/case-ref-field.mjs +11 -0
  19. package/esm2020/lib/data-fields/case-ref-field/model/case-ref-injection-tokens.mjs +5 -0
  20. package/esm2020/lib/data-fields/data-field-template/abstract-data-field-template.component.mjs +51 -6
  21. package/esm2020/lib/data-fields/data-fields.module.mjs +1 -1
  22. package/esm2020/lib/data-fields/date-field/abstract-date-field.component.mjs +10 -21
  23. package/esm2020/lib/data-fields/date-field/date-default-field/abstract-date-default-field.component.mjs +29 -0
  24. package/esm2020/lib/data-fields/date-field/models/date-field.mjs +5 -1
  25. package/esm2020/lib/data-fields/date-time-field/abstract-date-time-field.component.mjs +10 -21
  26. package/esm2020/lib/data-fields/date-time-field/date-time-default-field/abstract-date-time-default-field.component.mjs +29 -0
  27. package/esm2020/lib/data-fields/date-time-field/models/date-time-field.mjs +5 -1
  28. package/esm2020/lib/data-fields/enumeration-field/abstract-enumeration-field.component.mjs +4 -1
  29. package/esm2020/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.mjs +23 -20
  30. package/esm2020/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.mjs +20 -21
  31. package/esm2020/lib/data-fields/enumeration-field/enumeration-caseref-field/abstract-enumeration-caseref-field.component.mjs +71 -0
  32. package/esm2020/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.mjs +26 -19
  33. package/esm2020/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.mjs +16 -12
  34. package/esm2020/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.mjs +16 -12
  35. package/esm2020/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.mjs +26 -21
  36. package/esm2020/lib/data-fields/enumeration-field/models/enumeration-field.mjs +21 -1
  37. package/esm2020/lib/data-fields/file-field/abstract-file-field.component.mjs +11 -420
  38. package/esm2020/lib/data-fields/file-field/file-default-field/abstract-file-default-field.component.mjs +456 -0
  39. package/esm2020/lib/data-fields/file-field/models/file-field-constants.mjs +5 -0
  40. package/esm2020/lib/data-fields/file-field/models/file-field.mjs +6 -1
  41. package/esm2020/lib/data-fields/file-list-field/abstract-file-list-field.component.mjs +11 -278
  42. package/esm2020/lib/data-fields/file-list-field/file-list-default-field/abstract-file-list-default-field.component.mjs +304 -0
  43. package/esm2020/lib/data-fields/file-list-field/models/file-list-field.mjs +6 -1
  44. package/esm2020/lib/data-fields/filter-field/abstract-filter-field-tab-view-content.component.mjs +4 -4
  45. package/esm2020/lib/data-fields/filter-field/abstract-filter-field-tab-view.component.mjs +4 -4
  46. package/esm2020/lib/data-fields/filter-field/abstract-filter-field.component.mjs +8 -20
  47. package/esm2020/lib/data-fields/filter-field/filter-default-field/abstract-filter-default-field.component.mjs +38 -0
  48. package/esm2020/lib/data-fields/filter-field/models/filter-field.mjs +5 -1
  49. package/esm2020/lib/data-fields/i18n-field/abstract-i18n-errors.component.mjs +18 -16
  50. package/esm2020/lib/data-fields/i18n-field/abstract-i18n-field.component.mjs +4 -1
  51. package/esm2020/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.mjs +24 -20
  52. package/esm2020/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.mjs +35 -32
  53. package/esm2020/lib/data-fields/i18n-field/models/i18n-field.mjs +6 -2
  54. package/esm2020/lib/data-fields/models/abstract-data-field-component.mjs +4 -1
  55. package/esm2020/lib/data-fields/models/abstract-data-field.mjs +14 -2
  56. package/esm2020/lib/data-fields/models/changed-fields.mjs +1 -1
  57. package/esm2020/lib/data-fields/models/component.mjs +22 -2
  58. package/esm2020/lib/data-fields/models/data-field-portal-data-injection-token.mjs +3 -0
  59. package/esm2020/lib/data-fields/models/update-strategy.mjs +7 -0
  60. package/esm2020/lib/data-fields/multichoice-field/abstract-multichoice-field.component.mjs +4 -1
  61. package/esm2020/lib/data-fields/multichoice-field/models/multichoice-field.mjs +17 -1
  62. package/esm2020/lib/data-fields/multichoice-field/multichoice-autocomplete-field/abstract-multichoice-autocomplete-field-component.component.mjs +30 -30
  63. package/esm2020/lib/data-fields/multichoice-field/multichoice-caseref-field/abstract-multichoice-caseref-field.component.mjs +67 -0
  64. package/esm2020/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.mjs +16 -12
  65. package/esm2020/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.mjs +16 -12
  66. package/esm2020/lib/data-fields/number-field/abstract-number-errors.component.mjs +17 -15
  67. package/esm2020/lib/data-fields/number-field/abstract-number-field.component.mjs +4 -1
  68. package/esm2020/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.mjs +21 -15
  69. package/esm2020/lib/data-fields/number-field/models/number-field.mjs +5 -1
  70. package/esm2020/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.mjs +12 -6
  71. package/esm2020/lib/data-fields/public-api.mjs +21 -2
  72. package/esm2020/lib/data-fields/string-collection-field/models/string-collection-field.mjs +11 -0
  73. package/esm2020/lib/data-fields/string-collection-field/string-collection-default-field/abstract-string-collection-default-field.component.mjs +60 -0
  74. package/esm2020/lib/data-fields/task-ref-field/abstract-task-ref-field.component.mjs +10 -116
  75. package/esm2020/lib/data-fields/task-ref-field/model/task-ref-field.mjs +5 -1
  76. package/esm2020/lib/data-fields/task-ref-field/task-ref-dashboard-field/abstract-task-ref-dashboard-field.component.mjs +130 -0
  77. package/esm2020/lib/data-fields/task-ref-field/task-ref-list-field/abstract-task-ref-list-field.component.mjs +54 -0
  78. package/esm2020/lib/data-fields/text-field/abstract-dashboard-text-field.component.mjs +14 -14
  79. package/esm2020/lib/data-fields/text-field/abstract-text-errors.component.mjs +23 -3
  80. package/esm2020/lib/data-fields/text-field/dashboard-bar-chart-text-field/abstract-dashboard-bar-chart-text-field.component.mjs +12 -6
  81. package/esm2020/lib/data-fields/text-field/dashboard-iframe-text-field/abstract-dashboard-iframe-text-field.component.mjs +12 -6
  82. package/esm2020/lib/data-fields/text-field/dashboard-line-chart-text-field/abstract-dashboard-line-chart-text-field.component.mjs +12 -6
  83. package/esm2020/lib/data-fields/text-field/dashboard-pie-chart-text-field/abstract-dashboard-pie-chart-text-field.component.mjs +12 -6
  84. package/esm2020/lib/data-fields/text-field/dashboard-portal-text-field/abstract-dashboard-portal-text-field.component.mjs +12 -6
  85. package/esm2020/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.mjs +16 -16
  86. package/esm2020/lib/data-fields/text-field/models/text-field.mjs +8 -4
  87. package/esm2020/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.mjs +14 -14
  88. package/esm2020/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.mjs +14 -14
  89. package/esm2020/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.mjs +14 -14
  90. package/esm2020/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.mjs +17 -17
  91. package/esm2020/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.mjs +13 -38
  92. package/esm2020/lib/data-fields/time-instance-abstract-field/models/abstract-time-instance-field.mjs +5 -5
  93. package/esm2020/lib/data-fields/user-field/abstract-user-field.component.mjs +7 -42
  94. package/esm2020/lib/data-fields/user-field/models/user-field.mjs +5 -1
  95. package/esm2020/lib/data-fields/user-field/user-default-field/abstract-user-default-field.component.mjs +70 -0
  96. package/esm2020/lib/data-fields/user-list-field/abstract-user-list-field.component.mjs +7 -45
  97. package/esm2020/lib/data-fields/user-list-field/models/user-list-field.mjs +5 -1
  98. package/esm2020/lib/data-fields/user-list-field/user-list-default-field/abstract-user-list-default-field.component.mjs +60 -0
  99. package/esm2020/lib/dialog/injection-tokens.mjs +10 -0
  100. package/esm2020/lib/dialog/public-api.mjs +2 -1
  101. package/esm2020/lib/event/model/event-constants.mjs +5 -1
  102. package/esm2020/lib/event/services/event.service.mjs +23 -1
  103. package/esm2020/lib/filter/models/case-search-request-body.mjs +1 -1
  104. package/esm2020/lib/filter/models/task-search-request-body.mjs +1 -1
  105. package/esm2020/lib/filter/user-filters.service.mjs +22 -15
  106. package/esm2020/lib/header/abstract-header.component.mjs +28 -7
  107. package/esm2020/lib/header/header-modes/abstract-header-mode.component.mjs +10 -2
  108. package/esm2020/lib/impersonation/services/impersonation-user-select.service.mjs +24 -17
  109. package/esm2020/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.mjs +1 -10
  110. package/esm2020/lib/navigation/model/group-navigation-constants.mjs +120 -35
  111. package/esm2020/lib/navigation/model/navigation-configs.mjs +16 -0
  112. package/esm2020/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.mjs +239 -127
  113. package/esm2020/lib/navigation/navigation-tree/abstract-navigation-tree.component.mjs +3 -126
  114. package/esm2020/lib/navigation/public-api.mjs +2 -1
  115. package/esm2020/lib/navigation/service/uri.service.mjs +24 -3
  116. package/esm2020/lib/navigation/utility/filter-extraction.service.mjs +34 -10
  117. package/esm2020/lib/navigation/utility/navigation-item-task-utility-methods.mjs +38 -4
  118. package/esm2020/lib/panel/case-panel/abstract-case-panel.component.mjs +9 -2
  119. package/esm2020/lib/panel/task-panel/abstract-task-panel.component.mjs +33 -4
  120. package/esm2020/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.mjs +18 -2
  121. package/esm2020/lib/panel/task-panel-list/task-panel-list-pagination/abstract-task-list-pagination.component.mjs +5 -3
  122. package/esm2020/lib/panel/task-panel-single/abstract-single-task.component.mjs +11 -5
  123. package/esm2020/lib/panel/workflow-panel/abstract-workflow-panel.component.mjs +6 -2
  124. package/esm2020/lib/public/factories/public-search-factory.mjs +15 -4
  125. package/esm2020/lib/registry/component-registry.service.mjs +38 -0
  126. package/esm2020/lib/registry/front-action-registry.service.mjs +34 -0
  127. package/esm2020/lib/registry/public-api.mjs +3 -0
  128. package/esm2020/lib/resources/interface/case-get-request-body.mjs +1 -1
  129. package/esm2020/lib/resources/interface/event-outcome.mjs +1 -1
  130. package/esm2020/lib/routing/routing-builder/routing-builder.service.mjs +7 -5
  131. package/esm2020/lib/search/fulltext-search-component/abstract-fulltext-search.component.mjs +14 -4
  132. package/esm2020/lib/search/search-component/abstract-search.component.mjs +5 -3
  133. package/esm2020/lib/side-menu/content-components/import-net/abstract-import-net.component.mjs +10 -7
  134. package/esm2020/lib/side-menu/content-components/injection-tokens.mjs +2 -1
  135. package/esm2020/lib/side-menu/content-components/new-case/abstract-new-case.component.mjs +1 -6
  136. package/esm2020/lib/side-menu/content-components/new-case/model/new-case-injection-data.mjs +1 -1
  137. package/esm2020/lib/side-menu/content-components/public-api.mjs +3 -1
  138. package/esm2020/lib/side-menu/content-components/task-view/model/task-view-injection-data.mjs +2 -0
  139. package/esm2020/lib/side-menu/models/side-menu-control.mjs +2 -10
  140. package/esm2020/lib/tabs/classes/tab-view.mjs +3 -2
  141. package/esm2020/lib/task/services/task-data.service.mjs +30 -28
  142. package/esm2020/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.mjs +24 -5
  143. package/esm2020/lib/task-content/model/field-type-resource.mjs +3 -1
  144. package/esm2020/lib/task-content/services/field-converter.service.mjs +14 -2
  145. package/esm2020/lib/task-content/services/single-task-content.service.mjs +4 -4
  146. package/esm2020/lib/task-content/services/task-content.service.mjs +25 -22
  147. package/esm2020/lib/task-content/services/unlimited-task-content.service.mjs +4 -4
  148. package/esm2020/lib/task-content/task-content/abstract-task-content.component.mjs +20 -7
  149. package/esm2020/lib/utility/navigation-item-default-headers-factory.mjs +27 -0
  150. package/esm2020/lib/utility/public-api.mjs +2 -1
  151. package/esm2020/lib/view/abstract/netgrif-paginator-intl.mjs +36 -0
  152. package/esm2020/lib/view/case-view/components/case-list-paginator/abstract-case-list-paginator.component.mjs +8 -4
  153. package/esm2020/lib/view/case-view/components/default-case-list/abstract-default-case-list.component.mjs +18 -5
  154. package/esm2020/lib/view/case-view/service/case-view-service.mjs +28 -20
  155. package/esm2020/lib/view/case-view/tabbed-case-view.mjs +1 -1
  156. package/esm2020/lib/view/public-api.mjs +2 -1
  157. package/esm2020/lib/view/task-view/abstract-single-task-view.component.mjs +18 -34
  158. package/esm2020/lib/view/workflow-view/abstract-workflow-view.component.mjs +20 -11
  159. package/esm2020/lib/view/workflow-view/workflow-view.service.mjs +2 -2
  160. package/esm2020/public-api.mjs +3 -2
  161. package/fesm2015/netgrif-components-core.mjs +4583 -3179
  162. package/fesm2015/netgrif-components-core.mjs.map +1 -1
  163. package/fesm2020/netgrif-components-core.mjs +4278 -2981
  164. package/fesm2020/netgrif-components-core.mjs.map +1 -1
  165. package/lib/actions/front-action.module.d.ts +9 -0
  166. package/lib/actions/model/front-action-definition.d.ts +5 -0
  167. package/lib/actions/model/router-action-definitions.d.ts +2 -0
  168. package/lib/actions/model/task-action-definitions.d.ts +3 -0
  169. package/lib/actions/public-api.d.ts +5 -0
  170. package/lib/actions/services/front-action.service.d.ts +15 -0
  171. package/lib/data-fields/base-component/abstract-base-data-field.component.d.ts +18 -0
  172. package/lib/data-fields/boolean-field/abstract-boolean-field.component.d.ts +5 -7
  173. package/lib/data-fields/boolean-field/boolean-default-field/abstract-boolean-default-field.component.d.ts +14 -0
  174. package/lib/data-fields/boolean-field/models/boolean-field.d.ts +3 -0
  175. package/lib/data-fields/button-field/abstract-button-field.component.d.ts +5 -16
  176. package/lib/data-fields/button-field/button-default-field/abstract-button-default-field.component.d.ts +23 -0
  177. package/lib/data-fields/button-field/models/button-field.d.ts +1 -0
  178. package/lib/data-fields/case-ref-field/case-ref-default/case-ref-default.component.d.ts +19 -0
  179. package/lib/data-fields/case-ref-field/model/case-ref-field.d.ts +9 -0
  180. package/lib/data-fields/case-ref-field/model/case-ref-injection-tokens.d.ts +5 -0
  181. package/lib/data-fields/data-field-template/abstract-data-field-template.component.d.ts +22 -3
  182. package/lib/data-fields/date-field/abstract-date-field.component.d.ts +7 -12
  183. package/lib/data-fields/date-field/date-default-field/abstract-date-default-field.component.d.ts +12 -0
  184. package/lib/data-fields/date-field/models/date-field.d.ts +1 -0
  185. package/lib/data-fields/date-time-field/abstract-date-time-field.component.d.ts +7 -12
  186. package/lib/data-fields/date-time-field/date-time-default-field/abstract-date-time-default-field.component.d.ts +12 -0
  187. package/lib/data-fields/date-time-field/models/date-time-field.d.ts +1 -0
  188. package/lib/data-fields/enumeration-field/abstract-enumeration-field.component.d.ts +3 -0
  189. package/lib/data-fields/enumeration-field/enumeration-autocomplete-dynamic-field/abstract-enumeration-autocomplete-dynamic-field.component.d.ts +8 -10
  190. package/lib/data-fields/enumeration-field/enumeration-autocomplete-select-field/abstract-enumeration-autocomplete-select-field.component.d.ts +6 -10
  191. package/lib/data-fields/enumeration-field/enumeration-caseref-field/abstract-enumeration-caseref-field.component.d.ts +19 -0
  192. package/lib/data-fields/enumeration-field/enumeration-icon-field/abstract-enumeration-icon-field.component.d.ts +9 -9
  193. package/lib/data-fields/enumeration-field/enumeration-list-field/abstract-enumeration-list-field.component.d.ts +6 -8
  194. package/lib/data-fields/enumeration-field/enumeration-select-field/abstract-enumeration-select-field.component.d.ts +6 -8
  195. package/lib/data-fields/enumeration-field/enumeration-stepper-field/abstract-enumeration-stepper-field.component.d.ts +8 -9
  196. package/lib/data-fields/enumeration-field/models/enumeration-field.d.ts +8 -1
  197. package/lib/data-fields/file-field/abstract-file-field.component.d.ts +9 -147
  198. package/lib/data-fields/file-field/file-default-field/abstract-file-default-field.component.d.ts +151 -0
  199. package/lib/data-fields/file-field/models/file-field-constants.d.ts +4 -0
  200. package/lib/data-fields/file-field/models/file-field.d.ts +1 -0
  201. package/lib/data-fields/file-list-field/abstract-file-list-field.component.d.ts +8 -71
  202. package/lib/data-fields/file-list-field/file-list-default-field/abstract-file-list-default-field.component.d.ts +76 -0
  203. package/lib/data-fields/file-list-field/models/file-list-field.d.ts +1 -0
  204. package/lib/data-fields/filter-field/abstract-filter-field-tab-view-content.component.d.ts +3 -3
  205. package/lib/data-fields/filter-field/abstract-filter-field-tab-view.component.d.ts +3 -3
  206. package/lib/data-fields/filter-field/abstract-filter-field.component.d.ts +6 -11
  207. package/lib/data-fields/filter-field/filter-default-field/abstract-filter-default-field.component.d.ts +18 -0
  208. package/lib/data-fields/filter-field/models/filter-field.d.ts +1 -0
  209. package/lib/data-fields/i18n-field/abstract-i18n-errors.component.d.ts +6 -9
  210. package/lib/data-fields/i18n-field/abstract-i18n-field.component.d.ts +3 -0
  211. package/lib/data-fields/i18n-field/i18n-divider-field/abstract-i18n-divider-field.component.d.ts +6 -8
  212. package/lib/data-fields/i18n-field/i18n-text-field/abstract-i18n-text-field.component.d.ts +5 -8
  213. package/lib/data-fields/i18n-field/models/i18n-field.d.ts +1 -0
  214. package/lib/data-fields/models/abstract-data-field-component.d.ts +1 -0
  215. package/lib/data-fields/models/abstract-data-field.d.ts +9 -0
  216. package/lib/data-fields/models/changed-fields.d.ts +7 -6
  217. package/lib/data-fields/models/component.d.ts +20 -0
  218. package/lib/data-fields/models/data-field-portal-data-injection-token.d.ts +13 -0
  219. package/lib/data-fields/models/update-strategy.d.ts +6 -0
  220. package/lib/data-fields/multichoice-field/abstract-multichoice-field.component.d.ts +3 -0
  221. package/lib/data-fields/multichoice-field/models/multichoice-field.d.ts +7 -0
  222. package/lib/data-fields/multichoice-field/multichoice-autocomplete-field/abstract-multichoice-autocomplete-field-component.component.d.ts +6 -9
  223. package/lib/data-fields/multichoice-field/multichoice-caseref-field/abstract-multichoice-caseref-field.component.d.ts +16 -0
  224. package/lib/data-fields/multichoice-field/multichoice-list-field/abstract-multichoice-list-field.component.d.ts +6 -7
  225. package/lib/data-fields/multichoice-field/multichoice-select-field/abstract-multichoice-select-field.component.d.ts +6 -8
  226. package/lib/data-fields/number-field/abstract-number-errors.component.d.ts +6 -9
  227. package/lib/data-fields/number-field/abstract-number-field.component.d.ts +3 -0
  228. package/lib/data-fields/number-field/currency-number-field/abstract-currency-number-field.component.d.ts +4 -2
  229. package/lib/data-fields/number-field/models/number-field.d.ts +1 -0
  230. package/lib/data-fields/number-field/number-default-field/abstract-default-number-field.component.d.ts +4 -2
  231. package/lib/data-fields/public-api.d.ts +20 -1
  232. package/lib/data-fields/string-collection-field/models/string-collection-field.d.ts +9 -0
  233. package/lib/data-fields/string-collection-field/string-collection-default-field/abstract-string-collection-default-field.component.d.ts +18 -0
  234. package/lib/data-fields/task-ref-field/abstract-task-ref-field.component.d.ts +6 -13
  235. package/lib/data-fields/task-ref-field/model/task-ref-field.d.ts +1 -0
  236. package/lib/data-fields/task-ref-field/task-ref-dashboard-field/abstract-task-ref-dashboard-field.component.d.ts +20 -0
  237. package/lib/data-fields/task-ref-field/task-ref-list-field/abstract-task-ref-list-field.component.d.ts +16 -0
  238. package/lib/data-fields/text-field/abstract-dashboard-text-field.component.d.ts +7 -10
  239. package/lib/data-fields/text-field/abstract-text-errors.component.d.ts +7 -2
  240. package/lib/data-fields/text-field/dashboard-bar-chart-text-field/abstract-dashboard-bar-chart-text-field.component.d.ts +4 -2
  241. package/lib/data-fields/text-field/dashboard-iframe-text-field/abstract-dashboard-iframe-text-field.component.d.ts +4 -2
  242. package/lib/data-fields/text-field/dashboard-line-chart-text-field/abstract-dashboard-line-chart-text-field.component.d.ts +4 -2
  243. package/lib/data-fields/text-field/dashboard-pie-chart-text-field/abstract-dashboard-pie-chart-text-field.component.d.ts +4 -2
  244. package/lib/data-fields/text-field/dashboard-portal-text-field/abstract-dashboard-portal-text-field.component.d.ts +4 -2
  245. package/lib/data-fields/text-field/html-textarea-field/abstract-html-textarea-field.component.d.ts +5 -9
  246. package/lib/data-fields/text-field/models/text-field.d.ts +3 -2
  247. package/lib/data-fields/text-field/password-text-field/abstract-password-text-field.component.d.ts +5 -9
  248. package/lib/data-fields/text-field/rich-textarea-field/abstract-rich-textarea-field.component.d.ts +5 -9
  249. package/lib/data-fields/text-field/simple-text-field/abstract-simple-text-field.component.d.ts +5 -9
  250. package/lib/data-fields/text-field/textarea-field/abstract-textarea-field.component.d.ts +6 -9
  251. package/lib/data-fields/time-instance-abstract-field/abstract-time-instance-field.component.d.ts +6 -15
  252. package/lib/data-fields/user-field/abstract-user-field.component.d.ts +5 -28
  253. package/lib/data-fields/user-field/models/user-field.d.ts +1 -0
  254. package/lib/data-fields/user-field/user-default-field/abstract-user-default-field.component.d.ts +34 -0
  255. package/lib/data-fields/user-list-field/abstract-user-list-field.component.d.ts +5 -25
  256. package/lib/data-fields/user-list-field/models/user-list-field.d.ts +1 -0
  257. package/lib/data-fields/user-list-field/user-list-default-field/abstract-user-list-default-field.component.d.ts +24 -0
  258. package/lib/dialog/injection-tokens.d.ts +10 -0
  259. package/lib/dialog/public-api.d.ts +1 -0
  260. package/lib/event/model/event-constants.d.ts +5 -1
  261. package/lib/event/services/event.service.d.ts +3 -0
  262. package/lib/filter/models/case-search-request-body.d.ts +3 -0
  263. package/lib/filter/models/task-search-request-body.d.ts +9 -0
  264. package/lib/filter/user-filters.service.d.ts +4 -2
  265. package/lib/header/abstract-header.component.d.ts +10 -2
  266. package/lib/header/header-modes/abstract-header-mode.component.d.ts +6 -1
  267. package/lib/impersonation/services/impersonation-user-select.service.d.ts +3 -3
  268. package/lib/navigation/group-navigation-component-resolver/group-navigation-component-resolver.service.d.ts +0 -1
  269. package/lib/navigation/model/group-navigation-constants.d.ts +119 -34
  270. package/lib/navigation/model/navigation-configs.d.ts +25 -0
  271. package/lib/navigation/navigation-double-drawer/abstract-navigation-double-drawer.d.ts +42 -39
  272. package/lib/navigation/navigation-tree/abstract-navigation-tree.component.d.ts +2 -27
  273. package/lib/navigation/public-api.d.ts +1 -0
  274. package/lib/navigation/service/uri.service.d.ts +6 -0
  275. package/lib/navigation/utility/filter-extraction.service.d.ts +9 -2
  276. package/lib/navigation/utility/navigation-item-task-utility-methods.d.ts +16 -1
  277. package/lib/panel/case-panel/abstract-case-panel.component.d.ts +5 -1
  278. package/lib/panel/task-panel/abstract-task-panel.component.d.ts +9 -3
  279. package/lib/panel/task-panel-list/default-task-panel-list/abstract-default-task-list.component.d.ts +5 -2
  280. package/lib/panel/task-panel-list/task-panel-list-pagination/abstract-task-list-pagination.component.d.ts +2 -1
  281. package/lib/panel/task-panel-single/abstract-single-task.component.d.ts +5 -3
  282. package/lib/panel/workflow-panel/abstract-workflow-panel.component.d.ts +3 -1
  283. package/lib/public/factories/public-search-factory.d.ts +3 -0
  284. package/lib/{data-fields/text-field/dashboard-portal-text-field/dashboard-portal-component-registry.service.d.ts → registry/component-registry.service.d.ts} +6 -5
  285. package/lib/registry/front-action-registry.service.d.ts +13 -0
  286. package/lib/registry/public-api.d.ts +2 -0
  287. package/lib/resources/interface/case-get-request-body.d.ts +3 -0
  288. package/lib/resources/interface/event-outcome.d.ts +5 -0
  289. package/lib/routing/routing-builder/routing-builder.service.d.ts +2 -0
  290. package/lib/search/fulltext-search-component/abstract-fulltext-search.component.d.ts +2 -1
  291. package/lib/search/search-component/abstract-search.component.d.ts +2 -1
  292. package/lib/side-menu/content-components/import-net/abstract-import-net.component.d.ts +3 -1
  293. package/lib/side-menu/content-components/injection-tokens.d.ts +1 -0
  294. package/lib/side-menu/content-components/new-case/model/new-case-injection-data.d.ts +2 -1
  295. package/lib/side-menu/content-components/public-api.d.ts +2 -0
  296. package/lib/side-menu/content-components/task-view/model/task-view-injection-data.d.ts +4 -0
  297. package/lib/side-menu/models/side-menu-control.d.ts +0 -2
  298. package/lib/task/services/task-data.service.d.ts +10 -8
  299. package/lib/task-content/field-component-resolver/abstract-field-component-resolver.component.d.ts +7 -3
  300. package/lib/task-content/model/field-type-resource.d.ts +3 -1
  301. package/lib/task-content/services/single-task-content.service.d.ts +2 -2
  302. package/lib/task-content/services/task-content.service.d.ts +20 -23
  303. package/lib/task-content/services/unlimited-task-content.service.d.ts +2 -2
  304. package/lib/task-content/task-content/abstract-task-content.component.d.ts +5 -1
  305. package/lib/utility/navigation-item-default-headers-factory.d.ts +3 -0
  306. package/lib/utility/public-api.d.ts +1 -0
  307. package/lib/view/abstract/netgrif-paginator-intl.d.ts +19 -0
  308. package/lib/view/case-view/components/case-list-paginator/abstract-case-list-paginator.component.d.ts +3 -1
  309. package/lib/view/case-view/components/default-case-list/abstract-default-case-list.component.d.ts +4 -2
  310. package/lib/view/case-view/service/case-view-service.d.ts +5 -5
  311. package/lib/view/public-api.d.ts +1 -0
  312. package/lib/view/task-view/abstract-single-task-view.component.d.ts +9 -7
  313. package/lib/view/workflow-view/abstract-workflow-view.component.d.ts +3 -3
  314. package/package.json +1 -1
  315. package/public-api.d.ts +2 -1
  316. package/src/assets/i18n/de.json +15 -2
  317. package/src/assets/i18n/en.json +15 -2
  318. package/src/assets/i18n/sk.json +15 -2
  319. package/esm2020/lib/data-fields/text-field/dashboard-portal-text-field/dashboard-portal-component-registry.service.mjs +0 -35
  320. package/esm2020/lib/providers/base-filter/base-filter-factory.provider.mjs +0 -24
  321. package/esm2020/lib/providers/case-resource/case-resource-service.provider.mjs +0 -28
  322. package/esm2020/lib/providers/petrinet-resource/petrinet-resource-service.provider.mjs +0 -28
  323. package/esm2020/lib/providers/process-service/process-service.provider.mjs +0 -30
  324. package/esm2020/lib/providers/public-api.mjs +0 -6
  325. package/esm2020/lib/providers/task-resource/task-resource-service.provider.mjs +0 -32
  326. package/lib/providers/base-filter/base-filter-factory.provider.d.ts +0 -14
  327. package/lib/providers/case-resource/case-resource-service.provider.d.ts +0 -14
  328. package/lib/providers/petrinet-resource/petrinet-resource-service.provider.d.ts +0 -14
  329. package/lib/providers/process-service/process-service.provider.d.ts +0 -15
  330. package/lib/providers/public-api.d.ts +0 -5
  331. package/lib/providers/task-resource/task-resource-service.provider.d.ts +0 -16
@@ -277,7 +277,7 @@ export class AbstractTaskContentComponent {
277
277
  const result = [];
278
278
  for (let i = 0; i < dataGroups.length; i++) {
279
279
  const group = dataGroups[i];
280
- if (!group.fields.some(f => this.isTaskRef(f))) {
280
+ if (!group.fields.some(f => this.isTaskRef(f) && this.shouldResolveTaskRefData(f))) {
281
281
  result.push(group);
282
282
  continue;
283
283
  }
@@ -285,9 +285,9 @@ export class AbstractTaskContentComponent {
285
285
  if (split.startGroup !== undefined) {
286
286
  result.push(split.startGroup);
287
287
  }
288
- if (split.taskRef.component?.name === TaskRefComponents.DASHBOARD) {
289
- result.push(this.createDashboardTaskRefDataGroup(group, split.taskRef));
290
- containsDashboard = true;
288
+ if (!!split.taskRef.component?.name) {
289
+ result.push(this.createComponentTaskRefDataGroup(group, split.taskRef));
290
+ containsDashboard = split.taskRef.component.name === TaskRefComponents.DASHBOARD;
291
291
  }
292
292
  if (split.taskRef.value.length === 0 || split.endGroup === undefined) {
293
293
  if (split.endGroup !== undefined) {
@@ -402,14 +402,15 @@ export class AbstractTaskContentComponent {
402
402
  * The information about nesting and parent task/case are preserved from the passed original data group.
403
403
  * @param originalDataGroup source of the information about parent task/case
404
404
  * @param taskRef the task ref that will be added to the new data group
405
+ * @param title optional title for taskref
405
406
  * @protected
406
407
  */
407
- createDashboardTaskRefDataGroup(originalDataGroup, taskRef) {
408
+ createComponentTaskRefDataGroup(originalDataGroup, taskRef, title) {
408
409
  return {
409
410
  fields: [taskRef],
410
411
  alignment: undefined,
411
412
  stretch: false,
412
- title: undefined,
413
+ title: title,
413
414
  parentTaskId: originalDataGroup.parentTaskId,
414
415
  parentTransitionId: originalDataGroup.parentTransitionId,
415
416
  parentCaseId: originalDataGroup.parentCaseId,
@@ -778,6 +779,18 @@ export class AbstractTaskContentComponent {
778
779
  return element.item.stringId + '-' + this.taskContentService.$shouldCreateCounter.getValue();
779
780
  }
780
781
  }
782
+ shouldResolveTaskRefData(dataRef) {
783
+ if (!!dataRef.component) {
784
+ return this.hasRequiredComponentProperty(dataRef.component, "resolve_data", "true");
785
+ }
786
+ return true;
787
+ }
788
+ hasRequiredComponentProperty(component, propertyName, propertyValue) {
789
+ return component != null
790
+ && component.properties != null
791
+ && !!component.properties[propertyName]
792
+ && component.properties[propertyName] === propertyValue;
793
+ }
781
794
  }
782
795
  AbstractTaskContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: AbstractTaskContentComponent, deps: [{ token: i1.FieldConverterService }, { token: i2.TaskContentService }, { token: i3.PaperViewService }, { token: i4.LoggerService }, { token: i5.TaskEventService, optional: true }, { token: NAE_ASYNC_RENDERING_CONFIGURATION, optional: true }], target: i0.ɵɵFactoryTarget.Component });
783
796
  AbstractTaskContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: AbstractTaskContentComponent, selector: "ncc-abstract-task-content", inputs: { noDataText: "noDataText", noDataIcon: "noDataIcon", displayNoDataIcon: "displayNoDataIcon" }, outputs: { taskEvent: "taskEvent" }, ngImport: i0, template: '', isInline: true });
@@ -803,4 +816,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
803
816
  }], taskEvent: [{
804
817
  type: Output
805
818
  }] } });
806
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFzay1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvdGFzay1jb250ZW50L3Rhc2stY29udGVudC9hYnN0cmFjdC10YXNrLWNvbnRlbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVFsRyxPQUFPLEVBQVksa0JBQWtCLEVBQTZCLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRW5FLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBRXRCLG1CQUFtQixFQUN0QixNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBRXpHLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHFFQUFxRSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1REFBdUQsQ0FBQztBQUNuRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUU3RixPQUFPLEVBQUMsT0FBTyxFQUFD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LE9BQW1DO1FBQzFFLFFBQVEsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNsQixLQUFLLGVBQWUsQ0FBQyxLQUFLO2dCQUN0QixPQUFPLE9BQU8sQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5RixLQUFLLGVBQWUsQ0FBQyxNQUFNO2dCQUN2QixPQUFPLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoRyxLQUFLLGVBQWUsQ0FBQyxnQkFBZ0I7Z0JBQ2pDLE9BQU8sT0FBTyxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3pGO2dCQUNJLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNwRztJQUNMLENBQUM7OzBIQTMzQmlCLDRCQUE0QixzTUE0RUosaUNBQWlDOzhHQTVFekQsNEJBQTRCLDhNQUZwQyxFQUFFOzRGQUVNLDRCQUE0QjtrQkFKakQsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7MEJBNEUwQixRQUFROzswQkFDUixRQUFROzswQkFBSSxNQUFNOzJCQUFDLGlDQUFpQzs0Q0E1Q2xFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBSUksU0FBUztzQkFBbEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT3B0aW9uYWwsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RhdGFmaWVsZEdyaWRMYXlvdXRFbGVtZW50fSBmcm9tICcuLi9tb2RlbC9kYXRhZmllbGQtZ3JpZC1sYXlvdXQtZWxlbWVudCc7XG5pbXBvcnQge0ZpZWxkQ29udmVydGVyU2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvZmllbGQtY29udmVydGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtUYXNrQ29udGVudFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3Rhc2stY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7UGFwZXJWaWV3U2VydmljZX0gZnJvbSAnLi4vLi4vbmF2aWdhdGlvbi9xdWljay1wYW5lbC9jb21wb25lbnRzL3BhcGVyLXZpZXcuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tFdmVudE5vdGlmaWNhdGlvbn0gZnJvbSAnLi4vbW9kZWwvdGFzay1ldmVudC1ub3RpZmljYXRpb24nO1xuaW1wb3J0IHtUYXNrRXZlbnRTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy90YXNrLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtEYXRhR3JvdXAsIERhdGFHcm91cEFsaWdubWVudCwgUGFyZW50RGF0YUdyb3VwSW5mb3JtYXRpb259IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvZGF0YS1ncm91cHMnO1xuaW1wb3J0IHtUYXNrRWxlbWVudFR5cGV9IGZyb20gJy4uL21vZGVsL3Rhc2stY29udGVudC1lbGVtZW50LXR5cGUnO1xuaW1wb3J0IHtEYXRhRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL21vZGVscy9hYnN0cmFjdC1kYXRhLWZpZWxkJztcbmltcG9ydCB7XG4gICAgRGF0YUdyb3VwQ29tcGFjdCxcbiAgICBEYXRhR3JvdXBIaWRlRW1wdHlSb3dzLFxuICAgIERhdGFHcm91cExheW91dCxcbiAgICBEYXRhR3JvdXBMYXlvdXRUeXBlXG59IGZyb20gJy4uLy4uL3Jlc291cmNlcy9pbnRlcmZhY2UvZGF0YS1ncm91cC1sYXlvdXQnO1xuaW1wb3J0IHtGaWVsZEFsaWdubWVudH0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9maWVsZC1hbGlnbm1lbnQnO1xuaW1wb3J0IHtGaWVsZFR5cGVSZXNvdXJjZX0gZnJvbSAnLi4vbW9kZWwvZmllbGQtdHlwZS1yZXNvdXJjZSc7XG5pbXBvcnQge0xvYWRpbmdFbWl0dGVyfSBmcm9tICcuLi8uLi91dGlsaXR5L2xvYWRpbmctZW1pdHRlcic7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge05BRV9BU1lOQ19SRU5ERVJJTkdfQ09ORklHVVJBVElPTn0gZnJvbSAnLi4vbW9kZWwvYXN5bmMtcmVuZGVyaW5nLWNvbmZpZ3VyYXRpb24taW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB7QXN5bmNSZW5kZXJpbmdDb25maWd1cmF0aW9ufSBmcm9tICcuLi9tb2RlbC9hc3luYy1yZW5kZXJpbmctY29uZmlndXJhdGlvbic7XG5pbXBvcnQge1Rhc2tSZWZEYXNoYm9hcmRDb25zdGFudHN9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3Rhc2stcmVmLWZpZWxkL21vZGVsL3Rhc2stcmVmLWRhc2hib2FyZC1jb25zdGFudHMnO1xuaW1wb3J0IHtUYXNrUmVmRmllbGR9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3Rhc2stcmVmLWZpZWxkL21vZGVsL3Rhc2stcmVmLWZpZWxkJztcbmltcG9ydCB7VGFza1JlZkNvbXBvbmVudHN9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3Rhc2stcmVmLWZpZWxkL21vZGVsL3Rhc2stcmVmLWNvbXBvbmVudHMnO1xuaW1wb3J0IHtTcGxpdERhdGFHcm91cH0gZnJvbSAnLi4vbW9kZWwvc3BsaXQtZGF0YS1ncm91cCc7XG5pbXBvcnQge1N1YmdyaWR9IGZyb20gJy4uL21vZGVsL3N1YmdyaWQnO1xuaW1wb3J0IHtJbmNyZW1lbnRpbmdDb3VudGVyfSBmcm9tICcuLi8uLi91dGlsaXR5L2luY3JlbWVudGluZy1jb3VudGVyJztcbmltcG9ydCB7UHJlcHJvY2Vzc2VkRGF0YUdyb3Vwc30gZnJvbSAnLi4vbW9kZWwvcHJlcHJvY2Vzc2VkLWRhdGEtZ3JvdXBzJztcbmltcG9ydCB7VGFza1JlZkRhc2hib2FyZFRpbGV9IGZyb20gJy4uLy4uL2RhdGEtZmllbGRzL3Rhc2stcmVmLWZpZWxkL21vZGVsL3Rhc2stcmVmLWRhc2hib2FyZC10aWxlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduY2MtYWJzdHJhY3QtdGFzay1jb250ZW50JyxcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUYXNrQ29udGVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcmVhZG9ubHkgREVGQVVMVF9MQVlPVVRfVFlQRSA9IERhdGFHcm91cExheW91dFR5cGUuTEVHQUNZO1xuICAgIHJlYWRvbmx5IERFRkFVTFRfRklFTERfQUxJR05NRU5UID0gRmllbGRBbGlnbm1lbnQuQ0VOVEVSO1xuICAgIHJlYWRvbmx5IERFRkFVTFRfQVNZTkNfUkVOREVSSU5HX0NPTkZJR1VSQVRJT046IEFzeW5jUmVuZGVyaW5nQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgICAgYmF0Y2hTaXplOiA0LFxuICAgICAgICBiYXRjaERlbGF5OiAyMDAsXG4gICAgICAgIG51bWJlck9mUGxhY2Vob2xkZXJzOiA0LFxuICAgICAgICBlbmFibGVBc3luY1JlbmRlcmluZ0Zvck5ld0ZpZWxkczogdHJ1ZSxcbiAgICAgICAgZW5hYmxlQXN5bmNSZW5kZXJpbmdPblRhc2tFeHBhbmQ6IHRydWVcbiAgICB9O1xuICAgIHJlYWRvbmx5IERFRkFVTFRfQ09NUEFDVF9ESVJFQ1RJT04gPSBEYXRhR3JvdXBDb21wYWN0Lk5PTkU7XG4gICAgcmVhZG9ubHkgREVGQVVMVF9ISURFX0VNUFRZX1JPV1MgPSBEYXRhR3JvdXBIaWRlRW1wdHlSb3dzLkFMTDtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIGRhdGEgaXMgYmVpbmcgbG9hZGVkIGZyb20gYmFja2VuZCwgb3IgaWYgaXQgaXMgYmVpbmcgcHJvY2Vzc2VkLlxuICAgICAqL1xuICAgIGxvYWRpbmckOiBMb2FkaW5nRW1pdHRlcjtcbiAgICAvKipcbiAgICAgKiBFbWl0cyBgdHJ1ZWAgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGRhdGEgZmllbGQsIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZC4gRW1pdHMgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaGFzRGF0YVRvRGlzcGxheSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICAvKipcbiAgICAgKiBFeGlzdHMgdG8gYWxsb3cgcmVmZXJlbmNlcyB0byB0aGUgZW51bSBpbiB0aGUgSFRNTFxuICAgICAqL1xuICAgIHB1YmxpYyBmaWVsZFR5cGVSZXNvdXJjZSA9IEZpZWxkVHlwZVJlc291cmNlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIHRyYW5zbGF0ZSB0ZXh0IHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCB3aGVuIHRoZSB0YXNrIGNvbnRhaW5zIG5vIGRhdGEuXG4gICAgICpcbiAgICAgKiBJZiBhIGZhbHN5IHZhbHVlIGlzIHByb3ZpZGVkIHRoZSBkZWZhdWx0IHRleHQgaXMgZGlzcGxheWVkXG4gICAgICovXG4gICAgQElucHV0KCkgbm9EYXRhVGV4dDogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFRoZSBpY29uIHRoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCB3aGVuIHRoZSB0YXNrIGNvbnRhaW5zIG5vIGRhdGEuXG4gICAgICpcbiAgICAgKiBJZiBhIGZhbHN5IHZhbHVlIGlzIHByb3ZpZGVkIHRoZSBkZWZhdWx0IGljb24gaXMgZGlzcGxheWVkXG4gICAgICovXG4gICAgQElucHV0KCkgbm9EYXRhSWNvbjogc3RyaW5nO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgYW4gaWNvbiBzaG91bGQgYmUgZGlzcGxheWVkIHdoZW4gdGhlIG5vIGRhdGEgbWVzc2FnZSBpcyBzaG93bi5cbiAgICAgKlxuICAgICAqIEFuIGljb24gaXMgZGlzcGxheWVkIGJ5IGRlZmF1bHRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkaXNwbGF5Tm9EYXRhSWNvbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogRW1pdHMgbm90aWZpY2F0aW9ucyBhYm91dCB0YXNrIGV2ZW50c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSB0YXNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxUYXNrRXZlbnROb3RpZmljYXRpb24+O1xuICAgIC8qKlxuICAgICAqIFRoZSBkYXRhIGZpZWxkcyB0aGF0IGFyZSBjdXJyZW50bHkgZGlzcGxheWVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF9kYXRhU291cmNlJDogQmVoYXZpb3JTdWJqZWN0PEFycmF5PFN1YmdyaWQ+PjtcbiAgICBwcm90ZWN0ZWQgX3N1YlRhc2tDb250ZW50OiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIF9zdWJUYXNrRXZlbnQ6IFN1YnNjcmlwdGlvbjtcbiAgICBwcm90ZWN0ZWQgX2FzeW5jUmVuZGVyaW5nQ29uZmlnOiBBc3luY1JlbmRlcmluZ0NvbmZpZ3VyYXRpb247XG4gICAgcHJvdGVjdGVkIF9hc3luY1JlbmRlclRpbWVvdXQ6IG51bWJlcjtcblxuICAgIHByb3RlY3RlZCBfZGVmYXVsdEFsaWdubWVudDogRmllbGRBbGlnbm1lbnQ7XG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0Q29tcGFjdERpcmVjdGlvbjogRGF0YUdyb3VwQ29tcGFjdDtcbiAgICBwcm90ZWN0ZWQgX2RlZmF1bHRIaWRlRW1wdHlSb3dzOiBEYXRhR3JvdXBIaWRlRW1wdHlSb3dzO1xuICAgIHByb3RlY3RlZCBfZGVmYXVsdE51bWJlck9mQ29sczogbnVtYmVyO1xuXG4gICAgcHJvdGVjdGVkIF9zdWJncmlkSWRDb3VudGVyOiBJbmNyZW1lbnRpbmdDb3VudGVyO1xuICAgIHByb3RlY3RlZCBfZXhpc3RpbmdTdWJncmlkSWRzOiBTZXQ8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHJvdyBoZWlnaHQgb2Ygb25lIHJvdyBpbiB0YXNrIGNvbnRlbnRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcm93SGVpZ2h0ID0gMTA1O1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfZmllbGRDb252ZXJ0ZXI6IEZpZWxkQ29udmVydGVyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHRhc2tDb250ZW50U2VydmljZTogVGFza0NvbnRlbnRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgX3BhcGVyVmlldzogUGFwZXJWaWV3U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9sb2dnZXI6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfdGFza0V2ZW50U2VydmljZTogVGFza0V2ZW50U2VydmljZSA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTkFFX0FTWU5DX1JFTkRFUklOR19DT05GSUdVUkFUSU9OKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN5bmNSZW5kZXJpbmdDb25maWd1cmF0aW9uOiBBc3luY1JlbmRlcmluZ0NvbmZpZ3VyYXRpb24gPSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2FzeW5jUmVuZGVyaW5nQ29uZmlnID0gey4uLnRoaXMuREVGQVVMVF9BU1lOQ19SRU5ERVJJTkdfQ09ORklHVVJBVElPTn07XG4gICAgICAgIGlmIChhc3luY1JlbmRlcmluZ0NvbmZpZ3VyYXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fYXN5bmNSZW5kZXJpbmdDb25maWcsIGFzeW5jUmVuZGVyaW5nQ29uZmlndXJhdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvYWRpbmckID0gbmV3IExvYWRpbmdFbWl0dGVyKHRydWUpO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8U3ViZ3JpZD4+KFtdKTtcbiAgICAgICAgdGhpcy5oYXNEYXRhVG9EaXNwbGF5JCA9IHRoaXMuX2RhdGFTb3VyY2UkLnBpcGUobWFwKGRhdGEgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoICE9PSAwO1xuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fc3ViVGFza0NvbnRlbnQgPSB0aGlzLnRhc2tDb250ZW50U2VydmljZS4kc2hvdWxkQ3JlYXRlLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZURlZmF1bHRMYXlvdXRDb25maWd1cmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlTGF5b3V0RGF0YShkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJDb250ZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmckLm9mZigpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuX3Rhc2tFdmVudFNlcnZpY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudGFza0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxUYXNrRXZlbnROb3RpZmljYXRpb24+KCk7XG4gICAgICAgICAgICB0aGlzLl9zdWJUYXNrRXZlbnQgPSBfdGFza0V2ZW50U2VydmljZS50YXNrRXZlbnROb3RpZmljYXRpb25zJC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGFza0V2ZW50LmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9zdWJUYXNrQ29udGVudC51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy50YXNrRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMudGFza0V2ZW50LmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3N1YlRhc2tFdmVudCkge1xuICAgICAgICAgICAgdGhpcy5fc3ViVGFza0V2ZW50LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2FzeW5jUmVuZGVyVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX2FzeW5jUmVuZGVyVGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhc2tJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFzay5zdHJpbmdJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogQXJyYXk8U3ViZ3JpZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSQuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgYXMgc3BlY2lmaWVkIGJ5IHRoZSB0YXNrcyBsYXlvdXQgcHJvcGVydHksIG9yIDQgaWYgbm8gdmFsdWUgaXMgc3BlY2lmaWVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXROdW1iZXJPZkZvcm1Db2x1bW5zKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFza1xuICAgICAgICAgICAgfHwgIXRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2subGF5b3V0XG4gICAgICAgICAgICB8fCB0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrLmxheW91dC5jb2xzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiA0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2subGF5b3V0LmNvbHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNQYXBlclZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXBlclZpZXcucGFwZXJWaWV3O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSBpdGVtIGFuIG9iamVjdCBjb250YWluaW5nIGdyaWQgZWxlbWVudCBpbmZvcm1hdGlvblxuICAgICAqIEByZXR1cm5zIHRoZSBBbmd1bGFyIGZsZXggbGF5b3V0cyBhbGlnbm1lbnQgcHJvcGVydHkgZm9yIGluZGl2aWR1YWwgZGF0YSBmaWVsZHMgYmFzZWQgb25cbiAgICAgKiB0aGUgbGF5b3V0IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIGJ5IHRoZSBwcm9jZXNzXG4gICAgICovXG4gICAgcHVibGljIGdldEl0ZW1BbGlnbm1lbnQoaXRlbTogRGF0YWZpZWxkR3JpZExheW91dEVsZW1lbnQpOiBzdHJpbmcge1xuICAgICAgICBpZiAoaXRlbS5hbGlnbm1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmFsaWdubWVudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpZWxkQWxpZ25tZW50ID0gaXRlbS5pdGVtPy5sb2NhbExheW91dD8uYWxpZ25tZW50ID8/IHRoaXMuX2RlZmF1bHRBbGlnbm1lbnQ7XG5cbiAgICAgICAgbGV0IGFsaWdubWVudDtcbiAgICAgICAgc3dpdGNoIChmaWVsZEFsaWdubWVudCkge1xuICAgICAgICAgICAgY2FzZSBGaWVsZEFsaWdubWVudC5UT1A6XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50ID0gJ3N0YXJ0JztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRmllbGRBbGlnbm1lbnQuQ0VOVEVSOlxuICAgICAgICAgICAgICAgIGFsaWdubWVudCA9ICdjZW50ZXInO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGaWVsZEFsaWdubWVudC5CT1RUT006XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50ID0gJ2VuZCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtLmFsaWdubWVudCA9ICdzcGFjZS1iZXR3ZWVuICcgKyBhbGlnbm1lbnQ7XG4gICAgICAgIHJldHVybiBpdGVtLmFsaWdubWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyBjb21wb25lbnQgaGVpZ2h0IGlmIHRoZSByb3dzIGF0dHJpYnV0ZSBvZiB0YXNrIGxheW91dCBpcyBzZXQuXG4gICAgICovXG4gICAgcHVibGljIHJlc29sdmVDb250ZW50SGVpZ2h0Q3NzKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbGluZ05lZWRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFzay5sYXlvdXQucm93cyAqIHRoaXMucm93SGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAnMTAwJSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWNpZGVzIHdoZXRoZXIgdGhlcmUgaXMgYSBmaXhlZCBudW1iZXIgb2Ygcm93cyBhbmQgaXQgbmVlZC1zIHNjcm9sbGluZ1xuICAgICAqL1xuICAgIHB1YmxpYyBzY3JvbGxpbmdOZWVkZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrXG4gICAgICAgICAgICAmJiAhIXRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2subGF5b3V0XG4gICAgICAgICAgICAmJiAhIXRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2subGF5b3V0LnJvd3NcbiAgICAgICAgICAgICYmIHRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2subGF5b3V0LnJvd3MgPiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEByZXR1cm5zIHRoZSBkZWZhdWx0IGFsaWdubWVudCBmb3IgdGhlIGRpc3BsYXllZCB0YXNrIHRoYXQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZmllbGRzIGluZGl2aWR1YWwgcHJvcGVydHkuXG4gICAgICogSWYgdGUgdGFzayBzcGVjaWZpZXMgbm8gZGVmYXVsdCB2YWx1ZSB0aGUgW2dsb2JhbCBkZWZhdWx0XXtAbGluayBBYnN0cmFjdFRhc2tDb250ZW50Q29tcG9uZW50I0RFRkFVTFRfRklFTERfQUxJR05NRU5UfVxuICAgICAqIHZhbHVlIGlzIHJldHVybmVkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBjb21wdXRlRGVmYXVsdExheW91dENvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRBbGlnbm1lbnQgPSB0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrPy5sYXlvdXQ/LmZpZWxkQWxpZ25tZW50ID8/IHRoaXMuREVGQVVMVF9GSUVMRF9BTElHTk1FTlQ7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRDb21wYWN0RGlyZWN0aW9uID0gdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFzaz8ubGF5b3V0Py5jb21wYWN0RGlyZWN0aW9uID8/IHRoaXMuREVGQVVMVF9DT01QQUNUX0RJUkVDVElPTjtcbiAgICAgICAgdGhpcy5fZGVmYXVsdEhpZGVFbXB0eVJvd3MgPSB0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrPy5sYXlvdXQ/LmhpZGVFbXB0eVJvd3MgPz8gdGhpcy5ERUZBVUxUX0hJREVfRU1QVFlfUk9XUztcbiAgICAgICAgdGhpcy5fZGVmYXVsdE51bWJlck9mQ29scyA9IHRoaXMuZ2V0TnVtYmVyT2ZGb3JtQ29sdW1ucygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVzIHRoZSBsYXlvdXQgZGF0YSBmb3IgdGhlIHRhc2tzIGdyaWQgbGF5b3V0IGFuZCBzZXRzIHRoZSByZXN1bHQgdG8gdGhlIHB1YmxpYyBwcm9wZXJ0aWVzXG4gICAgICogb2YgdGhpcyBjbGFzcyB0aGF0IGFyZSB0aGVuIGJvdW5kIHRvIEhUTUwuXG4gICAgICogQHBhcmFtIGRhdGFHcm91cHMgdGhlIGRhdGEgZ3JvdXBzIHRoYXQgc2hvdWxkIGJlIGxhaWQgb3V0XG4gICAgICovXG4gICAgcHVibGljIGNvbXB1dGVMYXlvdXREYXRhKGRhdGFHcm91cHM6IEFycmF5PERhdGFHcm91cD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckNvbnRlbnQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3N1YmdyaWRJZENvdW50ZXIgPSBuZXcgSW5jcmVtZW50aW5nQ291bnRlcigpO1xuICAgICAgICB0aGlzLl9leGlzdGluZ1N1YmdyaWRJZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgU3ViZ3JpZD4oKTtcblxuICAgICAgICBkYXRhR3JvdXBzID0gdGhpcy5wcmVwcm9jZXNzRGF0YUdyb3VwcyhkYXRhR3JvdXBzKTtcblxuICAgICAgICBjb25zdCBkZWZhdWx0TGF5b3V0ID0gdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFzay5sYXlvdXQgJiYgdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFzay5sYXlvdXQudHlwZVxuICAgICAgICAgICAgPyB0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrLmxheW91dC50eXBlXG4gICAgICAgICAgICA6IHRoaXMuREVGQVVMVF9MQVlPVVRfVFlQRTtcblxuICAgICAgICBkYXRhR3JvdXBzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICAgICAgaWYgKCFncm91cC5sYXlvdXQpIHtcbiAgICAgICAgICAgICAgICBncm91cC5sYXlvdXQgPSB7cm93czogdW5kZWZpbmVkLCBjb2xzOiB1bmRlZmluZWQsIHR5cGU6IGRlZmF1bHRMYXlvdXR9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFncm91cC5sYXlvdXQudHlwZSkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmxheW91dC50eXBlID0gZGVmYXVsdExheW91dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgc3ViZ3JpZCA9IG5ldyBTdWJncmlkKFxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU3ViZ3JpZElkKGdyb3VwKSxcbiAgICAgICAgICAgICAgICBncm91cC5sYXlvdXQuY29scyA/PyB0aGlzLl9kZWZhdWx0TnVtYmVyT2ZDb2xzLFxuICAgICAgICAgICAgICAgIHRoaXMuX2FzeW5jUmVuZGVyaW5nQ29uZmlnXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoZ3JvdXAudGl0bGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gc3ViZ3JpZC5hZGRUaXRsZShncm91cCk7XG4gICAgICAgICAgICAgICAgc3ViZ3JpZC5hZGRSb3codGhpcy5uZXdHcmlkUm93KHN1YmdyaWQuY29scywgdGl0bGUuZ3JpZEFyZWFJZCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKGdyb3VwLmxheW91dC50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhR3JvdXBMYXlvdXRUeXBlLkdSSUQ6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUdyaWRMYXlvdXQoZ3JvdXAsIHN1YmdyaWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFHcm91cExheW91dFR5cGUuRkxPVzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wdXRlRmxvd0xheW91dChncm91cCwgc3ViZ3JpZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YUdyb3VwTGF5b3V0VHlwZS5MRUdBQ1k6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUxlZ2FjeUxheW91dChncm91cCwgc3ViZ3JpZCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB0YXNrIGxheW91dCB0eXBlICcke3RoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2subGF5b3V0LnR5cGV9J2ApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdWJncmlkLmZpbmFsaXplKCk7XG4gICAgICAgICAgICByZXN1bHQuc2V0KHN1YmdyaWQuc3ViZ3JpZElkLCBzdWJncmlkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJGaWVsZHMocmVzdWx0KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcmVuZGVyRmllbGRzKHN1YmdyaWRzOiBNYXA8c3RyaW5nLCBTdWJncmlkPikge1xuICAgICAgICBjb25zdCBzdWJncmlkc0FycmF5ID0gQXJyYXkuZnJvbShzdWJncmlkcy52YWx1ZXMoKSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLl9hc3luY1JlbmRlcmluZ0NvbmZpZy5lbmFibGVBc3luY1JlbmRlcmluZ0Zvck5ld0ZpZWxkc1xuICAgICAgICAgICAgJiYgISh0aGlzLl9hc3luY1JlbmRlcmluZ0NvbmZpZy5lbmFibGVBc3luY1JlbmRlcmluZ09uVGFza0V4cGFuZCAmJiB0aGlzLnRhc2tDb250ZW50U2VydmljZS5pc0V4cGFuZGluZykpIHtcbiAgICAgICAgICAgIHN1YmdyaWRzQXJyYXkuZm9yRWFjaChzdWJncmlkID0+IHtcbiAgICAgICAgICAgICAgICBzdWJncmlkLmRpc3BsYXlBbGxGaWVsZHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb250ZW50KHN1YmdyaWRzQXJyYXkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEodGhpcy50YXNrQ29udGVudFNlcnZpY2UuaXNFeHBhbmRpbmcgJiYgdGhpcy5fYXN5bmNSZW5kZXJpbmdDb25maWcuZW5hYmxlQXN5bmNSZW5kZXJpbmdPblRhc2tFeHBhbmQpKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlJC52YWx1ZS5mb3JFYWNoKG9sZFN1YmdyaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdWJncmlkcy5oYXMob2xkU3ViZ3JpZC5zdWJncmlkSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YmdyaWRzLmdldChvbGRTdWJncmlkLnN1YmdyaWRJZCkuZGV0ZXJtaW5lS2VwdEZpZWxkcyhvbGRTdWJncmlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyQ29udGVudChzdWJncmlkc0FycmF5KTtcbiAgICAgICAgdGhpcy5zcHJlYWRGaWVsZFJlbmRlcmluZ092ZXJUaW1lKHN1YmdyaWRzQXJyYXkpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzcHJlYWRGaWVsZFJlbmRlcmluZ092ZXJUaW1lKHN1YmdyaWRzOiBBcnJheTxTdWJncmlkPiwgaXRlcmF0aW9uID0gMCkge1xuICAgICAgICB0aGlzLl9hc3luY1JlbmRlclRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChpdGVyYXRpb24gPCBzdWJncmlkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX2FzeW5jUmVuZGVyVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJncmlkc1tpdGVyYXRpb25dLnJlbmRlckNvbnRlbnRPdmVyVGltZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3ByZWFkRmllbGRSZW5kZXJpbmdPdmVyVGltZShzdWJncmlkcywgaXRlcmF0aW9uICsgMSk7XG4gICAgICAgICAgICAgICAgfSwgaXRlcmF0aW9uID09PSAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvbmVzIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIGdyb3VwcyB0byBwcmV2ZW50IHVuaW50ZW50aW9uYWwgbWVtb3J5IGFjY2Vzc2VzIHRvIHNvdXJjZSBkYXRhLlxuICAgICAqIFJlYXJyYW5nZXMgdGhlIGRhdGEgZ3JvdXBzIHRvIGFjY29tbW9kYXRlIHRhc2tyZWZzLiBGaWx0ZXJzIG91dCBoaWRkZW4gYW5kIGZvcmJpZGRlbiBmaWVsZHMuXG4gICAgICogUG9wdWxhdGVzIGRhc2hib2FyZCB0YXNrIHJlZiBmaWVsZHMgd2l0aCBkYXNoYm9hcmQgdGlsZSBkYXRhLlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXBzXG4gICAgICogQHJldHVybnMgdGhlIHByZXByb2Nlc3NlZCBkYXRhIGdyb3Vwc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcmVwcm9jZXNzRGF0YUdyb3VwcyhkYXRhR3JvdXBzOiBBcnJheTxEYXRhR3JvdXA+KTogQXJyYXk8RGF0YUdyb3VwPiB7XG4gICAgICAgIGNvbnN0IHJlYXJyYW5nZVJlc3VsdCA9IHRoaXMucmVhcnJhbmdlRGF0YUdyb3VwcyhkYXRhR3JvdXBzKTtcbiAgICAgICAgbGV0IHVuZmlsdGVyZWREYXRhR3JvdXBzID0gcmVhcnJhbmdlUmVzdWx0LmRhdGFHcm91cHM7XG5cbiAgICAgICAgaWYgKHJlYXJyYW5nZVJlc3VsdC5jb250YWluc0Rhc2hib2FyZFRhc2tSZWYpIHtcbiAgICAgICAgICAgIHVuZmlsdGVyZWREYXRhR3JvdXBzID0gdGhpcy5wcmVwcm9jZXNzRGFzaGJvYXJkVGFza1JlZihyZWFycmFuZ2VSZXN1bHQuZGF0YUdyb3VwcywgZGF0YUdyb3Vwcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZUFuZEZpbHRlckhpZGRlbih1bmZpbHRlcmVkRGF0YUdyb3Vwcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xvbmVzIHRoZSBjb250ZW50IG9mIHRoZSBkYXRhIGdyb3VwcyB0byBwcmV2ZW50IHVuaW50ZW50aW9uYWwgbWVtb3J5IGFjY2Vzc2VzIHRvIHNvdXJjZSBkYXRhLlxuICAgICAqIFJlYXJyYW5nZXMgdGhlIGRhdGEgZ3JvdXBzIHRvIGFjY29tbW9kYXRlIHRhc2tyZWZzLlxuICAgICAqIERldGVybWluZXMgaWYgdGhlIGRhdGEgZ3JvdXBzIGNvbnRhaW4gYSBkYXNoYm9hcmQgdGFzayByZWYgZmllbGQuXG4gICAgICogQHBhcmFtIGRhdGFHcm91cHNcbiAgICAgKiBAcmV0dXJucyB0aGUgcHJlcHJvY2Vzc2VkIGRhdGEgZ3JvdXBzIHdpdGggbWV0YWRhdGFcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhcnJhbmdlRGF0YUdyb3VwcyhkYXRhR3JvdXBzOiBBcnJheTxEYXRhR3JvdXA+KTogUHJlcHJvY2Vzc2VkRGF0YUdyb3VwcyB7XG4gICAgICAgIGRhdGFHcm91cHMgPSB0aGlzLmNsb25lRGF0YUdyb3VwcyhkYXRhR3JvdXBzKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTG9jYWxGaWVsZExheW91dChkYXRhR3JvdXBzKTtcblxuICAgICAgICBsZXQgY29udGFpbnNEYXNoYm9hcmQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YUdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBkYXRhR3JvdXBzW2ldO1xuICAgICAgICAgICAgaWYgKCFncm91cC5maWVsZHMuc29tZShmID0+IHRoaXMuaXNUYXNrUmVmKGYpKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gdGhpcy5zcGxpdERhdGFHcm91cE9uVGFza1JlZihncm91cCk7XG4gICAgICAgICAgICBpZiAoc3BsaXQuc3RhcnRHcm91cCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goc3BsaXQuc3RhcnRHcm91cCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzcGxpdC50YXNrUmVmLmNvbXBvbmVudD8ubmFtZSA9PT0gVGFza1JlZkNvbXBvbmVudHMuREFTSEJPQVJEKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy5jcmVhdGVEYXNoYm9hcmRUYXNrUmVmRGF0YUdyb3VwKGdyb3VwLCBzcGxpdC50YXNrUmVmKSk7XG4gICAgICAgICAgICAgICAgY29udGFpbnNEYXNoYm9hcmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3BsaXQudGFza1JlZi52YWx1ZS5sZW5ndGggPT09IDAgfHwgc3BsaXQuZW5kR3JvdXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdC5lbmRHcm91cCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFHcm91cHMuc3BsaWNlKGkgKyAxLCAwLCBzcGxpdC5lbmRHcm91cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaXJlY3RDaGlsZCA9IGRhdGFHcm91cHNbaSArIDFdOyAvLyB0aGUgZGF0YSBncm91cCB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MgSVMgQUxXQVlTIGEgZGlyZWN0IGNoaWxkXG4gICAgICAgICAgICBsZXQgZmlyc3ROb25EZXNjZW5kYW50SW5kZXggPSBpICsgMjtcbiAgICAgICAgICAgIGZvciAoOyBmaXJzdE5vbkRlc2NlbmRhbnRJbmRleCA8IGRhdGFHcm91cHMubGVuZ3RoOyBmaXJzdE5vbkRlc2NlbmRhbnRJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEdyb3VwID0gZGF0YUdyb3Vwc1tmaXJzdE5vbkRlc2NlbmRhbnRJbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKG5leHRHcm91cC5uZXN0aW5nTGV2ZWwgPT09IHVuZGVmaW5lZCB8fCBuZXh0R3JvdXAubmVzdGluZ0xldmVsIDwgZGlyZWN0Q2hpbGQubmVzdGluZ0xldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZCBvZiB0aGUgYmxvY2sgb2YgbmVzdGVkIGRhdGEgZ3JvdXBzXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV4dEdyb3VwLm5lc3RpbmdMZXZlbCA9PT0gZGlyZWN0Q2hpbGQubmVzdGluZ0xldmVsXG4gICAgICAgICAgICAgICAgICAgICYmIChuZXh0R3JvdXAucGFyZW50VGFza1JlZklkICE9PSBzcGxpdC50YXNrUmVmLnN0cmluZ0lkXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAhc3BsaXQudGFza1JlZi52YWx1ZS5zb21lKHJlZmZlZFRhc2tJZCA9PiByZWZmZWRUYXNrSWQgPT09IG5leHRHcm91cC5wYXJlbnRUYXNrSWQpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGFHcm91cHMuc3BsaWNlKGZpcnN0Tm9uRGVzY2VuZGFudEluZGV4LCAwLCBzcGxpdC5lbmRHcm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YUdyb3VwczogcmVzdWx0LFxuICAgICAgICAgICAgY29udGFpbnNEYXNoYm9hcmRUYXNrUmVmOiBjb250YWluc0Rhc2hib2FyZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkdXBsaWNhdGUgb2YgdGhlIHByb3ZpZGVkIGRhdGEgZ3JvdXAgYXJyYXkuXG4gICAgICpcbiAgICAgKiBPbmx5IHRoZSBkYXRhIGdyb3VwcyBhcmUgY2xvbmVkLCB0aGUgZmllbGRzIGFyZSBvbmx5IGNvcGllZCBhcyByZWZlcmVuY2VzLlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXBzIHRoZSBkYXRhIGdyb3VwcyB0aGF0IHNob3VsZCBiZSBjbG9uZWRcbiAgICAgKiBAcmV0dXJucyB0aGUgZHVwbGljYXRlZCBkYXRhIGdyb3Vwc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBjbG9uZURhdGFHcm91cHMoZGF0YUdyb3VwczogQXJyYXk8RGF0YUdyb3VwPik6IEFycmF5PERhdGFHcm91cD4ge1xuICAgICAgICByZXR1cm4gZGF0YUdyb3Vwcy5tYXAoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgZyA9IHsuLi5ncm91cH07XG4gICAgICAgICAgICBnLmZpZWxkcyA9IGcuZmllbGRzLm1hcChmaWVsZCA9PiBmaWVsZCk7XG4gICAgICAgICAgICByZXR1cm4gZztcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXNzZXMgb3ZlciBhbGwgdGhlIGZpZWxkcyBpbiB0aGUgcHJvdmlkZWQgZGF0YSBncm91cHMgYW5kIGlmIHRoZXkgYXJlIHZpc2libGUsIGluaXRpYWxpemVzIHRoZWlyIGxvY2FsIGxheW91dCBhdHRyaWJ1dGUuXG4gICAgICogQHBhcmFtIGRhdGFHcm91cHMgdGhlIGNvbnRhaW5lcnMgb2YgdGhlIGZpZWxkcyB0aGF0IHNob3VsZCBoYXZlIHRoZWlyIGxvY2FsIGxheW91dCBpbml0aWFsaXplZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0aWFsaXplTG9jYWxGaWVsZExheW91dChkYXRhR3JvdXBzOiBBcnJheTxEYXRhR3JvdXA+KTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgZyBvZiBkYXRhR3JvdXBzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZy5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmLnJlc2V0TG9jYWxMYXlvdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkdXBsaWNhdGUgb2YgdGhlIHByb3ZpZGVkIGRhdGEgZ3JvdXAgYXJyYXkgYW5kIGZpbHRlcnMgYXdheSBhbnkgZmllbGRzIGFuZCBkYXRhIGdyb3VwcyB0aGF0IGFyZSBtYXJrZWQgYXMgaGlkZGVuLlxuICAgICAqIEJlY2F1c2Ugb2YgdGhlIGR1cGxpY2F0aW9uIHRoZSBmaWx0ZXJpbmcgZG9lc24ndCBhZmZlY3QgdGhlIG9yaWdpbmFsIGluc3RhbmNlcyBhbmQgdGhleSByZW1haW4gdW5jaGFuZ2VkLlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXBzIHRoZSBkYXRhIGdyb3VwcyB0aGF0IHNob3VsZCBiZSBmaWx0ZXJlZFxuICAgICAqIEByZXR1cm5zIHRoZSBmaWx0ZXJlZCBkdXBsaWNhdGVkIGRhdGEgZ3JvdXBzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNsb25lQW5kRmlsdGVySGlkZGVuKGRhdGFHcm91cHM6IEFycmF5PERhdGFHcm91cD4pOiBBcnJheTxEYXRhR3JvdXA+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YUdyb3Vwcy5tYXAoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgZyA9IHsuLi5ncm91cH07XG4gICAgICAgICAgICBnLmZpZWxkcyA9IGcuZmllbGRzLmZpbHRlcihmaWVsZCA9PiAhZmllbGQuYmVoYXZpb3IuaGlkZGVuICYmICFmaWVsZC5iZWhhdmlvci5mb3JiaWRkZW4pLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucmVzZXRMb2NhbExheW91dCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQuZmlsdGVyKGdyb3VwID0+IGdyb3VwLmZpZWxkcy5sZW5ndGggPiAwKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNUYXNrUmVmKGZpZWxkOiBEYXRhRmllbGQ8dW5rbm93bj4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkIGluc3RhbmNlb2YgVGFza1JlZkZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNvcnRzIHRoZSBpbnB1dCBkYXRhIGdyb3VwIGJhc2VkIG9uIHRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGZpZWxkcyBhbmQgc3BsaXRzIGl0IGludG8gcGFydHMgb24gdGhlIGZpcnN0IHRhc2sgcmVmLlxuICAgICAqIElmIHNvbWUgZmllbGRzIGFwcGVhciBiZWZvcmUgdGhlIGZpcnN0IHRhc2sgcmVmIHRoZXkgYXJlIGV4dHJhY3RlZCBpbnRvIGEgbmV3IFtzdGFydEdyb3VwXXtAbGluayBTcGxpdERhdGFHcm91cCNzdGFydEdyb3VwfS5cbiAgICAgKiBJZiBzb21lIGZpZWxkcyBhcHBlYXIgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgcmVmIHRoZXkgYXJlIGV4dHJhY3RlZCBpbnRvIGEgbmV3IFtlbmRHcm91cF17QGxpbmsgU3BsaXREYXRhR3JvdXAjZW5kR3JvdXB9LlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXBcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNwbGl0RGF0YUdyb3VwT25UYXNrUmVmKGRhdGFHcm91cDogRGF0YUdyb3VwKTogU3BsaXREYXRhR3JvdXAge1xuICAgICAgICBkYXRhR3JvdXAuZmllbGRzLnNvcnQoKGEsIGIpID0+IGEubG9jYWxMYXlvdXQueSAtIGIubG9jYWxMYXlvdXQueSk7XG4gICAgICAgIGNvbnN0IHRhc2tSZWZQb3NpdGlvbiA9IGRhdGFHcm91cC5maWVsZHMuZmluZEluZGV4KGYgPT4gdGhpcy5pc1Rhc2tSZWYoZikpO1xuICAgICAgICBjb25zdCByZXN1bHQ6IFNwbGl0RGF0YUdyb3VwID0ge1xuICAgICAgICAgICAgdGFza1JlZjogZGF0YUdyb3VwLmZpZWxkc1t0YXNrUmVmUG9zaXRpb25dIGFzIFRhc2tSZWZGaWVsZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0YXNrUmVmUG9zaXRpb24gIT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydEdyb3VwID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhR3JvdXAudGl0bGUsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBkYXRhR3JvdXAuYWxpZ25tZW50LFxuICAgICAgICAgICAgICAgIGxheW91dDogZGF0YUdyb3VwLmxheW91dCxcbiAgICAgICAgICAgICAgICBzdHJldGNoOiBkYXRhR3JvdXAuc3RyZXRjaCxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IGRhdGFHcm91cC5maWVsZHMuc2xpY2UoMCwgdGFza1JlZlBvc2l0aW9uKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFza1JlZlBvc2l0aW9uICE9PSBkYXRhR3JvdXAuZmllbGRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmRHcm91cCA9IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZGF0YUdyb3VwLmFsaWdubWVudCxcbiAgICAgICAgICAgICAgICBsYXlvdXQ6IGRhdGFHcm91cC5sYXlvdXQsXG4gICAgICAgICAgICAgICAgc3RyZXRjaDogZGF0YUdyb3VwLnN0cmV0Y2gsXG4gICAgICAgICAgICAgICAgZmllbGRzOiBkYXRhR3JvdXAuZmllbGRzLnNsaWNlKHRhc2tSZWZQb3NpdGlvbiArIDEpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmRHcm91cC5maWVsZHMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgICAgICBmLmxvY2FsTGF5b3V0LnkgPSBmLmxvY2FsTGF5b3V0LnkgLSByZXN1bHQudGFza1JlZi5sb2NhbExheW91dC55IC0gMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGRhdGEgZ3JvdXAgdGhhdCBjb250YWlucyBvbmx5IHRoZSBwYXNzZWQgdGFzayByZWYuXG4gICAgICogVGhlIGluZm9ybWF0aW9uIGFib3V0IG5lc3RpbmcgYW5kIHBhcmVudCB0YXNrL2Nhc2UgYXJlIHByZXNlcnZlZCBmcm9tIHRoZSBwYXNzZWQgb3JpZ2luYWwgZGF0YSBncm91cC5cbiAgICAgKiBAcGFyYW0gb3JpZ2luYWxEYXRhR3JvdXAgc291cmNlIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBwYXJlbnQgdGFzay9jYXNlXG4gICAgICogQHBhcmFtIHRhc2tSZWYgdGhlIHRhc2sgcmVmIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgbmV3IGRhdGEgZ3JvdXBcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZURhc2hib2FyZFRhc2tSZWZEYXRhR3JvdXAob3JpZ2luYWxEYXRhR3JvdXA6IERhdGFHcm91cCwgdGFza1JlZjogVGFza1JlZkZpZWxkKTogRGF0YUdyb3VwIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpZWxkczogW3Rhc2tSZWZdLFxuICAgICAgICAgICAgYWxpZ25tZW50OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHJldGNoOiBmYWxzZSxcbiAgICAgICAgICAgIHRpdGxlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBwYXJlbnRUYXNrSWQ6IG9yaWdpbmFsRGF0YUdyb3VwLnBhcmVudFRhc2tJZCxcbiAgICAgICAgICAgIHBhcmVudFRyYW5zaXRpb25JZDogb3JpZ2luYWxEYXRhR3JvdXAucGFyZW50VHJhbnNpdGlvbklkLFxuICAgICAgICAgICAgcGFyZW50Q2FzZUlkOiBvcmlnaW5hbERhdGFHcm91cC5wYXJlbnRDYXNlSWQsXG4gICAgICAgICAgICBwYXJlbnRUYXNrUmVmSWQ6IG9yaWdpbmFsRGF0YUdyb3VwLnBhcmVudFRhc2tSZWZJZCxcbiAgICAgICAgICAgIG5lc3RpbmdMZXZlbDogb3JpZ2luYWxEYXRhR3JvdXAubmVzdGluZ0xldmVsLFxuICAgICAgICAgICAgbGF5b3V0OiBvcmlnaW5hbERhdGFHcm91cC5sYXlvdXRcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElkZW50aWZpZXMgZGF0YSBncm91cHMgdGhhdCByZXByZXNlbnQgZGFzaGJvYXJkIHRpbGVzLFxuICAgICAqIHJlbW92ZXMgdGhlbSBmcm9tIHRoZSBkYXRhIGdyb3VwIGFycmF5IGFuZCBwYXNzZXMgdGhlbSBvbnRvIHRoZSB0YXNrIHJlZiBmaWVsZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gcHJlcHJvY2Vzc2VkRGF0YUdyb3Vwc1xuICAgICAqIEBwYXJhbSByYXdEYXRhR3JvdXBzXG4gICAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgZGF0YSBncm91cCBvYmplY3RzIHRoYXQgZG9lcyBub3QgY29udGFpbiBkYXNoYm9hcmQgdGlsZXMgcmVmZXJlbmNlZCBieSB0aGUgZGFzaGJvYXJkIHRhc2sgcmVmXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcmVwcm9jZXNzRGFzaGJvYXJkVGFza1JlZihwcmVwcm9jZXNzZWREYXRhR3JvdXBzOiBBcnJheTxEYXRhR3JvdXA+LCByYXdEYXRhR3JvdXBzOiBBcnJheTxEYXRhR3JvdXA+KTogQXJyYXk8RGF0YUdyb3VwPiB7XG4gICAgICAgIC8vIFRPRE8gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGRhc2hib2FyZCB0YXNrIHJlZiBpbiBhIHRhc2tcbiAgICAgICAgbGV0IGRhc2hib2FyZFRhc2tSZWZGaWVsZDogVGFza1JlZkZpZWxkO1xuICAgICAgICBsZXQgZGFzaGJvYXJkUGFyZW50SW5mb3JtYXRpb246IFBhcmVudERhdGFHcm91cEluZm9ybWF0aW9uO1xuICAgICAgICBmb3IgKGNvbnN0IGRnIG9mIHByZXByb2Nlc3NlZERhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZGcuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNUYXNrUmVmKGZpZWxkKSAmJiBmaWVsZC5jb21wb25lbnQ/Lm5hbWUgPT09IFRhc2tSZWZDb21wb25lbnRzLkRBU0hCT0FSRCkge1xuICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRUYXNrUmVmRmllbGQgPSBmaWVsZCBhcyBUYXNrUmVmRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50VGFza0lkOiBkZy5wYXJlbnRUYXNrSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRUcmFuc2l0aW9uSWQ6IGRnLnBhcmVudFRyYW5zaXRpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENhc2VJZDogZGcucGFyZW50Q2FzZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50VGFza1JlZklkOiBkZy5wYXJlbnRUYXNrUmVmSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXN0aW5nTGV2ZWw6IGRnLm5lc3RpbmdMZXZlbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXNoYm9hcmRUYXNrUmVmRmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkYXNoYm9hcmRUYXNrUmVmRmllbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdwcmVwcm9jZXNzRGFzaGJvYXJkVGFza1JlZiBtZXRob2Qgd2FzIGNhbGxlZCBvbiB0YXNrIGNvbnRlbnQgd2l0aG91dCBkYXNoYm9hcmQgdGFzayByZWZzIScpO1xuICAgICAgICAgICAgcmV0dXJuIHByZXByb2Nlc3NlZERhdGFHcm91cHM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBUYXNrUmVmRGFzaGJvYXJkVGlsZT4oKTtcblxuICAgICAgICAvLyBUT0RPIHJlc29sdmUgdHJhbnNpdGl2ZSB0aWxlIGNvbnRlbnRcbiAgICAgICAgY29uc3Qgbm9uRGFzaGJvYXJkRGF0YUdyb3VwcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRnIG9mIHByZXByb2Nlc3NlZERhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIGlmIChkZy5wYXJlbnRUYXNrUmVmSWQgIT09IGRhc2hib2FyZFRhc2tSZWZGaWVsZC5zdHJpbmdJZCkge1xuICAgICAgICAgICAgICAgIG5vbkRhc2hib2FyZERhdGFHcm91cHMucHVzaChkZyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGlsZXMuaGFzKGRnLnBhcmVudFRhc2tJZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGlsZXMuZ2V0KGRnLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICAgICAgdGlsZS5kYXRhR3JvdXBzLnB1c2goZGcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aWxlcy5zZXQoZGcucGFyZW50VGFza0lkLCB7ZGF0YUdyb3VwczogW2RnXX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCByZGcgb2YgcmF3RGF0YUdyb3Vwcykge1xuICAgICAgICAgICAgaWYgKHJkZy5wYXJlbnRUYXNrSWQgPT09IGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uLnBhcmVudFRhc2tJZFxuICAgICAgICAgICAgICAgICYmIHJkZy5wYXJlbnRUcmFuc2l0aW9uSWQgPT09IGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uLnBhcmVudFRyYW5zaXRpb25JZFxuICAgICAgICAgICAgICAgICYmIHJkZy5wYXJlbnRDYXNlSWQgPT09IGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uLnBhcmVudENhc2VJZFxuICAgICAgICAgICAgICAgICYmIHJkZy5wYXJlbnRUYXNrUmVmSWQgPT09IGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uLnBhcmVudFRhc2tSZWZJZFxuICAgICAgICAgICAgICAgICYmIHJkZy5uZXN0aW5nTGV2ZWwgPT09IGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uLm5lc3RpbmdMZXZlbCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZWQgb2YgcmRnLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZWQuc3RyaW5nSWQgPT09IFRhc2tSZWZEYXNoYm9hcmRDb25zdGFudHMuREFTSEJPQVJEX0NPTFMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZFRhc2tSZWZGaWVsZC5kYXNoYm9hcmRDb2xzID0gZmlsZWQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZWQuc3RyaW5nSWQgPT09IFRhc2tSZWZEYXNoYm9hcmRDb25zdGFudHMuREFTSEJPQVJEX1JPV1MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZFRhc2tSZWZGaWVsZC5kYXNoYm9hcmRSb3dzID0gZmlsZWQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXNoYm9hcmRUYXNrUmVmRmllbGQuZGFzaGJvYXJkVGlsZXMgPSBBcnJheS5mcm9tKHRpbGVzLnZhbHVlcygpKTtcbiAgICAgICAgcmV0dXJuIG5vbkRhc2hib2FyZERhdGFHcm91cHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIGxheW91dCBkYXRhIGZvciBhIHNpbmdsZSBkYXRhIGdyb3VwIHdpdGggZ3JpZCBsYXlvdXQuIFRoZSByZXN1bHRpbmcgbGF5b3V0IGlzIHNhdmVkIGludG8gdGhlIGlucHV0IG9iamVjdHMuXG4gICAgICogQHBhcmFtIGRhdGFHcm91cCB0aGUgZGF0YSBncm91cCB0aGF0IHNob3VsZCBiZSBsYWlkIG91dCBpbnRvIGEgZ3JpZFxuICAgICAqIEBwYXJhbSBzdWJncmlkIHRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgY29udGV4dCBvZiB0aGUgY29tcHV0ZWQgbGF5b3V0aW5nIHVuaXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29tcHV0ZUdyaWRMYXlvdXQoZGF0YUdyb3VwOiBEYXRhR3JvdXAsIHN1YmdyaWQ6IFN1YmdyaWQpIHtcbiAgICAgICAgY29uc3QgbG9jYWxHcmlkOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IFtdO1xuICAgICAgICBkYXRhR3JvdXAuZmllbGRzID0gWy4uLmRhdGFHcm91cC5maWVsZHNdLnNvcnQoKGYxICwgZjIpID0+IGYxLmxheW91dC55ID09PSBmMi5sYXlvdXQueSA/IGYxLmxheW91dC54IC0gZjIubGF5b3V0LnggOiBmMS5sYXlvdXQueSAtIGYyLmxheW91dC55KVxuICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZvckVhY2goZGF0YUZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmICghZGF0YUZpZWxkLmxvY2FsTGF5b3V0XG4gICAgICAgICAgICAgICAgfHwgZGF0YUZpZWxkLmxvY2FsTGF5b3V0LnggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHx8IGRhdGFGaWVsZC5sb2NhbExheW91dC55ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB8fCAhZGF0YUZpZWxkLmxvY2FsTGF5b3V0LnJvd3NcbiAgICAgICAgICAgICAgICB8fCAhZGF0YUZpZWxkLmxvY2FsTGF5b3V0LmNvbHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBZb3UgY2Fubm90IHVzZSAnZ3JpZCcgbGF5b3V0IHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgbGF5b3V0IG9mIHRoZSBkYXRhIGZpZWxkcyAoZmllbGQgSUQ6ICR7ZGF0YUZpZWxkLnN0cmluZ0lkfSlgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKGxvY2FsR3JpZC5sZW5ndGggPCBkYXRhRmllbGQubG9jYWxMYXlvdXQueSArIGRhdGFGaWVsZC5sb2NhbExheW91dC5yb3dzKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxHcmlkLnB1c2godGhpcy5uZXdHcmlkUm93KHN1YmdyaWQuY29scykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWVsZEVsZW1lbnQgPSBzdWJncmlkLmFkZEZpZWxkKGRhdGFGaWVsZCwgdGhpcy5fZmllbGRDb252ZXJ0ZXIucmVzb2x2ZVR5cGUoZGF0YUZpZWxkKSk7XG4gICAgICAgICAgICB0aGlzLm9jY3VweVNwYWNlKGxvY2FsR3JpZCwgZGF0YUZpZWxkLmxvY2FsTGF5b3V0LnksIGRhdGFGaWVsZC5sb2NhbExheW91dC54LFxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZC5sb2NhbExheW91dC5jb2xzLCBmaWVsZEVsZW1lbnQuZ3JpZEFyZWFJZCwgZGF0YUZpZWxkLmxvY2FsTGF5b3V0LnJvd3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbGxhcHNlR3JpZEVtcHR5U3BhY2UobG9jYWxHcmlkLCBkYXRhR3JvdXAubGF5b3V0LCBzdWJncmlkKTtcblxuICAgICAgICBsb2NhbEdyaWQuZm9yRWFjaChsb2NhbEdyaWRSb3cgPT4gc3ViZ3JpZC5hZGRSb3cobG9jYWxHcmlkUm93KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgZW1wdHkgcm93IHJlbW92YWwgYW5kIGZpZWxkIGNvbXBhY3RpbmcgcnVsZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGxheW91dCBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGlucHV0IGdyaWQgaXMgbW9kaWZpZWQgaW4gcGxhY2UuXG4gICAgICogQHBhcmFtIGdyaWQgdGhlIHN0YXRlIG9mIHRoZSBncmlkIHRoYXQgc2hvdWxkIGJlIG1vZGlmaWVkXG4gICAgICogQHBhcmFtIGxheW91dCBjb25maWd1cmF0aW9uIG9mIHRoZSBhcHBsaWVkIGNvbXBhY3RpbmcgcnVsZXNcbiAgICAgKiBAcGFyYW0gc3ViZ3JpZCB0aGUgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGNvbnRleHQgb2YgdGhlIGNvbXB1dGVkIGxheW91dGluZyB1bml0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvbGxhcHNlR3JpZEVtcHR5U3BhY2UoZ3JpZDogQXJyYXk8QXJyYXk8c3RyaW5nPj4sIGxheW91dDogRGF0YUdyb3VwTGF5b3V0LCBzdWJncmlkOiBTdWJncmlkKSB7XG4gICAgICAgIGNvbnN0IGhpZGVSb3dzID0gbGF5b3V0LmhpZGVFbXB0eVJvd3MgPz8gdGhpcy5fZGVmYXVsdEhpZGVFbXB0eVJvd3M7XG5cbiAgICAgICAgaWYgKGhpZGVSb3dzID09PSBEYXRhR3JvdXBIaWRlRW1wdHlSb3dzLkFMTCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eVJvd3MoZ3JpZCk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGxheW91dC5jb21wYWN0RGlyZWN0aW9uID8/IHRoaXMuX2RlZmF1bHRDb21wYWN0RGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIERhdGFHcm91cENvbXBhY3QuVVA6XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wYWN0RmllbGRzVXAoZ3JpZCwgaGlkZVJvd3MsIHN1YmdyaWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYW55IGVsZW1lbnQgYXMgZmFyIFVQIGFzIGl0IGNhbiBnby4gRWxlbWVudHMgdGhhdCB3ZXJlIG9yaWdpbmFsbHkgZGVjbGFyZWQgaW4gdGhlIHNhbWUgcm93IG1pZ2h0IGVuZCB1cCBpbiBkaWZmZXJlbnQgcm93cy5cbiAgICAgKiBSZXN1bHRpbmcgdHJhaWxpbmcgZW1wdHkgcm93cyBhcmUgcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIFRoZSBpbnB1dCBncmlkIGlzIG1vZGlmaWVkIGluIHBsYWNlLlxuICAgICAqIEBwYXJhbSBncmlkIHRoZSBzdGF0ZSBvZiB0aGUgZ3JpZCB0aGF0IHNob3VsZCBiZSBtb2RpZmllZFxuICAgICAqIEBwYXJhbSBoaWRlUm93cyBjb25maWd1cmF0aW9uIGZvciBlbXB0eSByb3cgcmVtb3ZhbCBkdXJpbmcgdGhlIGNvbXBhY3RpbmcgcHJvY2Vzc1xuICAgICAqIEBwYXJhbSBzdWJncmlkIHRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgY29udGV4dCBvZiB0aGUgY29tcHV0ZWQgbGF5b3V0aW5nIHVuaXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29tcGFjdEZpZWxkc1VwKGdyaWQ6IEFycmF5PEFycmF5PHN0cmluZz4+LCBoaWRlUm93czogRGF0YUdyb3VwSGlkZUVtcHR5Um93cywgc3ViZ3JpZDogU3ViZ3JpZCkge1xuICAgICAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgZ3JpZC5sZW5ndGg7IHJvd0luZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IGdyaWRbcm93SW5kZXhdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgcm93Lmxlbmd0aDsgY29sdW1uSW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uSW5kZXhdICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgZm91bmRFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IGZvdW5kRWxlbWVudFJvd0luZGV4ID0gcm93SW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIGZvciAoOyBmb3VuZEVsZW1lbnRSb3dJbmRleCA8IGdyaWQubGVuZ3RoOyBmb3VuZEVsZW1lbnRSb3dJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncmlkW2ZvdW5kRWxlbWVudFJvd0luZGV4XVtjb2x1bW5JbmRleF0gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEVsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbkluZGV4ID4gMCAmJiBncmlkW2ZvdW5kRWxlbWVudFJvd0luZGV4XVtjb2x1bW5JbmRleCAtIDFdID09PSBncmlkW2ZvdW5kRWxlbWVudFJvd0luZGV4XVtjb2x1bW5JbmRleF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudERpbWVuc2lvbnMgPSB0aGlzLmdldEVsZW1lbnREaW1lbnNpb25zKGdyaWQsIGNvbHVtbkluZGV4LCBmb3VuZEVsZW1lbnRSb3dJbmRleCwgc3ViZ3JpZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FyZWFFbXB0eShncmlkLCBjb2x1bW5JbmRleCwgcm93SW5kZXgsIGVsZW1lbnREaW1lbnNpb25zLndpZHRoLCBmb3VuZEVsZW1lbnRSb3dJbmRleCAtIHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZ3JpZFtmb3VuZEVsZW1lbnRSb3dJbmRleF1bY29sdW1uSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9jY3VweVNwYWNlKGdyaWQsIGZvdW5kRWxlbWVudFJvd0luZGV4LCBjb2x1bW5JbmRleCwgZWxlbWVudERpbWVuc2lvbnMud2lkdGgsICcnLCBlbGVtZW50RGltZW5zaW9ucy5oZWlnaHQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vY2N1cHlTcGFjZShncmlkLCByb3dJbmRleCwgY29sdW1uSW5kZXgsIGVsZW1lbnREaW1lbnNpb25zLndpZHRoLCBlbGVtZW50LCBlbGVtZW50RGltZW5zaW9ucy5oZWlnaHQsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaGlkZVJvd3MgIT09IERhdGFHcm91cEhpZGVFbXB0eVJvd3MuTk9ORSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugb25seSBjaGVjayB0aGUgcm93cyBwb3RlbnRpYWxseSBjbGVhcmVkIGJ5IG1vdmluZyB0aGUgZ3JpZCBlbGVtZW50IHVwXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5Um93cyhncmlkLCBmb3VuZEVsZW1lbnRSb3dJbmRleCwgZm91bmRFbGVtZW50Um93SW5kZXggKyBlbGVtZW50RGltZW5zaW9ucy5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyByb3dzIGZyb20gdGhlIGdyaWQgdGhhdCBvbmx5IGNvbnRhaW4gZW1wdHkgZWxlbWVudHMgKGFyZSBlbXB0eSkuIFRoZSBncmlkIGlzIG1vZGlmaWVkIGluIHBsYWNlLlxuICAgICAqIEBwYXJhbSBncmlkIHRoZSBncmlkIHRoYXQgc2hvdWxkIGhhdmUgaXQncyBlbXB0eSByb3dzIHJlbW92ZWRcbiAgICAgKiBAcGFyYW0gZmlyc3RSb3cgdGhlIDAgYmFzZWQgaW5kZXggb2YgdGhlIGZpcnN0IHJvdyB0aGF0IHNob3VsZCBiZSBjaGVja2VkLiBVc2UgMCB0byBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdyaWQuXG4gICAgICpcbiAgICAgKiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdGhlIGdyaWQgd2lsbCBiZSBjaGVja2VkIGZyb20gdGhlIGZpcnN0IHJvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsYXN0Um93IHRoZSAwIGJhc2VkIGluZGV4IG9mIHRoZSByb3cgd2hlcmUgdGhlIGNoZWNraW5nIHNob3VsZCBlbmQuIFRoZSByb3cgd2l0aCB0aGlzIGluZGV4IGlzIG5vdCBjaGVja2VkLlxuICAgICAqXG4gICAgICogSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgdGhlIGVudGlyZSBncmlkIGZyb20gdGhlIGBmaXJzdFJvd2Agd2lsbCBiZSBjaGVja2VkLlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSB0aGF0IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGBmaXJzdFJvd2AgaXMgcHJvdmlkZWQgbm8gY2hlY2tzIHdpbGwgYmUgcHJlZm9ybWVkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW1vdmVFbXB0eVJvd3MoZ3JpZDogQXJyYXk8QXJyYXk8c3RyaW5nPj4sIGZpcnN0Um93ID0gMCwgbGFzdFJvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgICBsZXQgaSA9IGZpcnN0Um93O1xuICAgICAgICB3aGlsZSAoaSA8IGdyaWQubGVuZ3RoICYmIGkgPCBsYXN0Um93KSB7XG4gICAgICAgICAgICBpZiAoZ3JpZFtpXS5ldmVyeShlbGVtZW50ID0+IGVsZW1lbnQgPT09ICcnKSkge1xuICAgICAgICAgICAgICAgIGdyaWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBlbGVtZW50IGluIHRoZSBncmlkIHdpdGggaXRzIHRvcC1sZWZ0IGNvcm5lciBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uXG4gICAgICogQHBhcmFtIGdyaWQgdGhlIGdyaWQgb2YgZWxlbWVudHNcbiAgICAgKiBAcGFyYW0geCB0aGUgWCBjb29yZGluYXRlIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRzIHRvcC1sZWZ0IGNvcm5lclxuICAgICAqIEBwYXJhbSB5IHRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGRlc2lyZWQgZWxlbWVudHMgdG9wLWxlZnQgY29ybmVyXG4gICAgICogQHBhcmFtIHN1YmdyaWQgdGhlIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBjb250ZXh0IG9mIHRoZSBjb21wdXRlZCBsYXlvdXRpbmcgdW5pdFxuICAgICAqIEByZXR1cm5zIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzcGVjaWZpZWQgZWxlbWVudFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRFbGVtZW50RGltZW5zaW9ucyhncmlkOiBBcnJheTxBcnJheTxzdHJpbmc+PiwgeDogbnVtYmVyLCB5OiBudW1iZXIsIHN1YmdyaWQ6IFN1YmdyaWQpOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZ3JpZFt5XVt4XTtcbiAgICAgICAgbGV0IHdpZHRoID0gMTtcbiAgICAgICAgd2hpbGUgKHggKyB3aWR0aCA8IHN1YmdyaWQuY29scyAmJiBncmlkW3ldW3ggKyB3aWR0aF0gPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHdpZHRoKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGhlaWdodCA9IDE7XG4gICAgICAgIHdoaWxlICh5ICsgaGVpZ2h0IDwgZ3JpZC5sZW5ndGggJiYgZ3JpZFt5ICsgaGVpZ2h0XVt4XSA9PT0gZWxlbWVudCkge1xuICAgICAgICAgICAgaGVpZ2h0Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt3aWR0aCwgaGVpZ2h0fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBhcmVhIGluIHRoZSBncmlkIGNvbnRhaW5zIG5vIGVsZW1lbnRzLCBvciBub3RcbiAgICAgKiBAcGFyYW0gZ3JpZCB0aGUgZ3JpZCBvZiBlbGVtZW50c1xuICAgICAqIEBwYXJhbSB4IHRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHRlc3RlZCBhcmVhcyB0b3AtbGVmdCBjb3JuZXJcbiAgICAgKiBAcGFyYW0geSB0aGUgWSBjb29yZGluYXRlIG9mIHRoZSB0ZXN0ZWQgYXJlYXMgdG9wLWxlZnQgY29ybmVyXG4gICAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCBvZiB0aGUgdGVzdGVkIGFyZWFcbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHRoZSBoZWlnaHQgb2YgdGhlIHRlc3RlZCBhcmVhXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzQXJlYUVtcHR5KGdyaWQ6IEFycmF5PEFycmF5PHN0cmluZz4+LCB4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHk7IGkgPCB5ICsgaGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSB4OyBqIDwgeCArIHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZFtpXVtqXSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbGF5b3V0IGRhdGEgZm9yIGEgc2luZ2xlIGRhdGEgZ3JvdXAgd2l0aCBmbG93IGxheW91dC4gVGhlIHJlc3VsdGluZyBsYXlvdXQgaXMgc2F2ZWQgaW50byB0aGUgaW5wdXQgb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0gZGF0YUdyb3VwIHRoZSBkYXRhIGdyb3VwIHRoYXQgc2hvdWxkIGJlIGxhaWQgb3V0IGludG8gYSBncmlkIHVzaW5nIHRoZSBmbG93IGFsZ29yaXRobVxuICAgICAqIEBwYXJhbSBzdWJncmlkIHRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgY29udGV4dCBvZiB0aGUgY29tcHV0ZWQgbGF5b3V0aW5nIHVuaXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29tcHV0ZUZsb3dMYXlvdXQoZGF0YUdyb3VwOiBEYXRhR3JvdXAsIHN1YmdyaWQ6IFN1YmdyaWQpIHtcbiAgICAgICAgdGhpcy5mbG93RmllbGRzKGRhdGFHcm91cCwgc3ViZ3JpZCwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIGxheW91dCBkYXRhIGZvciBhIHNpbmdsZSBkYXRhIGdyb3VwIHdpdGggbGVnYWN5IGxheW91dC4gVGhlIHJlc3VsdGluZyBsYXlvdXQgaXMgc2F2ZWQgaW50byB0aGUgaW5wdXQgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBsZWdhY3kgbGF5b3V0IGZvcmNlcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdG8gYmUgNCBhbmQgbG9ncyBhIHdhcm5pbmcgaWYgdGhpcyB3YXMgbm90IHRoZSBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXAgdGhlIGRhdGEgZ3JvdXAgdGhhdCBzaG91bGQgYmUgbGFpZCBvdXQgaW50byBhIGdyaWQgdXNpbmcgdGhlIGxlZ2FjeSBhbGdvcml0aG0gdXNlZCBpbiBOQUUgdmVyc2lvbnMgPCA0LjAuMFxuICAgICAqIEBwYXJhbSBzdWJncmlkIHRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgY29udGV4dCBvZiB0aGUgY29tcHV0ZWQgbGF5b3V0aW5nIHVuaXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29tcHV0ZUxlZ2FjeUxheW91dChkYXRhR3JvdXA6IERhdGFHcm91cCwgc3ViZ3JpZDogU3ViZ3JpZCkge1xuICAgICAgICBpZiAoc3ViZ3JpZC5jb2xzICE9PSA0KSB7XG4gICAgICAgICAgICBzdWJncmlkLmNvbHMgPSA0O1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oYFRhc2sgd2l0aCBpZCAnJHt0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrLnN0cmluZ0lkfScgaGFzIGEgZGF0YSBncm91cCB3aXRoIGxlZ2FjeSBsYXlvdXQgd2l0aCBhIGBcbiAgICAgICAgICAgICAgICArIGBub24tZGVmYXVsdCBudW1iZXIgb2YgY29sdW1ucy4gSWYgeW91IHdhbnQgdG8gdXNlIGEgbGF5b3V0IHdpdGggZGlmZmVyZW50IG51bWJlciBvZiBjb2x1bW5zIHRoYW4gMiB1c2UgYSBkaWZmZXJlbnQgYFxuICAgICAgICAgICAgICAgICsgYGxheW91dCB0eXBlIGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZsb3dGaWVsZHMoZGF0YUdyb3VwLCBzdWJncmlkLCAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMYXlzIG91dCB0aGUgZmllbGRzIGZyb20gbGVmdCB0byByaWdodCwgZnJvbSB0b3AgdG8gYm90dG9tLiBJZiB0aGUgd2lkdGggaXMgZ3JlYXRlciB0aGFuIDEgYW5kIHRoZSBibG9jayBvZiBmbG93ZWQgZmllbGRzIGRvZXNuJ3QgZml0XG4gICAgICogbmVhdGx5IGludG8gdGhlIGNvbHVtbnMgKGlmIHRoZSB3aWR0aCBvZiBhIHNpbmdsZSBmaWVsZCBpcyBub3QgYSBkaXZpc29yIG9mIGNvbHVtbiBjb3VudCksIHRoZW4gdGhlIGVudGlyZSBibG9jayBvZiBmaWVsZHMgaXNcbiAgICAgKiBsZWZ0IGFsaWduZWQuIFRoZSBsYXN0IHJvdyBvZiBmaWVsZHMgaXMgYWxpZ25lZCB0byB0aGUgbGVmdCwgY2VudGVyIG9yIHJpZ2h0IGJhc2VkIG9uIHRoZSBkYXRhIGdyb3VwcyBwcm9wZXJ0eS5cbiAgICAgKiBJZiB0aGUgbGFzdCByb3cgY2Fubm90IGJlIGFsaWduZWQgdG8gdGhlIGV4YWN0IGNlbnRlciBpdCBpcyBvZmZzZXQgb25lIGdyaWQgdGlsZSB0byB0aGUgbGVmdC5cbiAgICAgKiBAcGFyYW0gZGF0YUdyb3VwIHRoZSBkYXRhIGdyb3VwIHRoYXQgc2hvdWxkIGJlIGxhaWQgb3V0IGludG8gYSBncmlkXG4gICAgICogQHBhcmFtIHN1YmdyaWQgdGhlIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBjb250ZXh0IG9mIHRoZSBjb21wdXRlZCBsYXlvdXRpbmcgdW5pdFxuICAgICAqIEBwYXJhbSBmaWVsZFdpZHRoIHRoZSBudW1iZXIgb2YgZ3JpZCB0aWxlcywgdGhhdCBzaG91bGQgYmUgb2NjdXBpZWQgYnkgZWFjaCBmaWVsZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmbG93RmllbGRzKGRhdGFHcm91cDogRGF0YUdyb3VwLCBzdWJncmlkOiBTdWJncmlkLCBmaWVsZFdpZHRoOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZmllbGRzUGVyUm93ID0gTWF0aC5mbG9vcihzdWJncmlkLmNvbHMgLyBmaWVsZFdpZHRoKTtcbiAgICAgICAgY29uc3QgbWF4WFBvc2l0aW9uID0gZmllbGRXaWR0aCAqIChmaWVsZHNQZXJSb3cgLSAxKTtcblxuICAgICAgICBsZXQgeFBvc2l0aW9uID0gMDtcbiAgICAgICAgY29uc3QgbG9jYWxHcmlkOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IFtdO1xuICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZvckVhY2goKGRhdGFGaWVsZCwgZGF0YUZpZWxkQ291bnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRWxlbWVudCA9IHN1YmdyaWQuYWRkRmllbGQoZGF0YUZpZWxkLCB0aGlzLl9maWVsZENvbnZlcnRlci5yZXNvbHZlVHlwZShkYXRhRmllbGQpKTtcbiAgICAgICAgICAgIGlmIChkYXRhR3JvdXAuc3RyZXRjaCkge1xuICAgICAgICAgICAgICAgIHN1YmdyaWQuYWRkUm93KHRoaXMubmV3R3JpZFJvdyhzdWJncmlkLmNvbHMsIGZpZWxkRWxlbWVudC5ncmlkQXJlYUlkKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWxzZVxuICAgICAgICAgICAgaWYgKHhQb3NpdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsR3JpZC5wdXNoKHRoaXMubmV3R3JpZFJvdyhzdWJncmlkLmNvbHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh4UG9zaXRpb24gPT09IDAgJiYgdGhpcy5pc0xhc3RSb3coZGF0YUZpZWxkQ291bnQsIGRhdGFHcm91cCwgZmllbGRzUGVyUm93KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkc0luTGFzdFJvdyA9IGRhdGFHcm91cC5maWVsZHMubGVuZ3RoICUgZmllbGRzUGVyUm93O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1dpZHRoID0gbWF4WFBvc2l0aW9uICsgZmllbGRXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YUdyb3VwLmFsaWdubWVudCA9PT0gRGF0YUdyb3VwQWxpZ25tZW50LkVORCkge1xuICAgICAgICAgICAgICAgICAgICB4UG9zaXRpb24gPSByb3dXaWR0aCAtIGZpZWxkV2lkdGggKiBmaWVsZHNJbkxhc3RSb3c7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhR3JvdXAuYWxpZ25tZW50ID09PSBEYXRhR3JvdXBBbGlnbm1lbnQuQ0VOVEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIHhQb3NpdGlvbiA9IE1hdGguZmxvb3IoKHJvd1dpZHRoIC0gZmllbGRzSW5MYXN0Um93ICogZmllbGRXaWR0aCkgLyAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9jY3VweVNwYWNlKGxvY2FsR3JpZCwgbG9jYWxHcmlkLmxlbmd0aCAtIDEsIHhQb3NpdGlvbiwgZmllbGRXaWR0aCwgZmllbGRFbGVtZW50LmdyaWRBcmVhSWQpO1xuXG4gICAgICAgICAgICB4UG9zaXRpb24gKz0gZmllbGRXaWR0aDtcbiAgICAgICAgICAgIGlmICh4UG9zaXRpb24gPiBtYXhYUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB4UG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9jYWxHcmlkLmZvckVhY2gocm93ID0+IHN1YmdyaWQuYWRkUm93KHJvdykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB3aWR0aCB3aWR0aCBvZiB0aGUgcm93XG4gICAgICogQHBhcmFtIGNvbnRlbnQgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZmlsbCBhbGwgZWxlbWVudHMgaW4gdGhlIHJvd1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBuZXdHcmlkUm93KHdpZHRoOiBudW1iZXIsIGNvbnRlbnQgPSAnJyk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gQXJyYXkod2lkdGgpLmZpbGwoY29udGVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsbHMgdGhlIHNwZWNpZmllZCByZWN0YW5ndWxhciBhcmVhIHdpdGggdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgcHJvdmlkZWQgZ3JpZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBzcGVjaWZpZWQgYXJlYSBjb250YWlucyB2YWx1ZXMgb3RoZXIgdGhhbiB0aGUgZW1wdHkgc3RyaW5nIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgICAqIEBwYXJhbSBncmlkIHRoZSBncmlkIHRoYXQgc2hvdWxkIGJlIG1vZGlmaWVkXG4gICAgICogQHBhcmFtIHkgdGhlIDAgYmFzZWQgcm93IGluZGV4IG9mIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGZpbGxlZCBhcmVhXG4gICAgICogQHBhcmFtIHggdGhlIDAgYmFzZWQgY29sdW1uIGluZGV4IG9mIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGZpbGxlZCBhcmVhXG4gICAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCBvZiB0aGUgZmlsbGVkIGFyZWFcbiAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRoYXQgaXMgc2V0IGludG8gZXZlcnkgY2VsbCBvZiB0aGUgZ3JpZCBpbnNpZGUgdGhlIHNwZWNpZmllZCBhcmVhXG4gICAgICogQHBhcmFtIGhlaWdodCB0aGUgaGVpZ2h0IG9mIHRoZSBmaWxsZWQgYXJlYVxuICAgICAqIEBwYXJhbSBjaGVja09jY3VwYW50cyB3aGV0aGVyIHRoZSBmaWxsZWQgYXJlYSBzaG91bGQgYmUgY2hlY2tlZCBmb3Igb3RoZXIgZWxlbWVudHMuXG4gICAgICogSWYgYSBjaGVjayBpcyBwZXJmb3JtZWQgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24gaWYgZWxlbWVudHMgYXJlIGZvdW5kLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvY2N1cHlTcGFjZShncmlkOiBBcnJheTxBcnJheTxzdHJpbmc+PiwgeTogbnVtYmVyLCB4OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcsIGhlaWdodCA9IDEsIGNoZWNrT2NjdXBhbnRzID0gdHJ1ZSkge1xuICAgICAgICBmb3IgKGxldCBqID0geTsgaiA8IHkgKyBoZWlnaHQ7IGorKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHg7IGkgPCB4ICsgd2lkdGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja09jY3VwYW50cyAmJiBncmlkW2pdW2ldICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwbGFjZSBlbGVtZW50ICR7dmFsdWV9IGludG8gdGhlIGdyaWQgbGF5b3V0LCBiZWNhdXNlIGl0J3Mgc3BhY2UgKHg6ICR7aX0sIHk6ICR7an0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgIGlzIGFscmVhZHkgb2NjdXBpZWQgYnkgYW5vdGhlciBlbGVtZW50ICgke2dyaWRbal1baV19KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncmlkW2pdW2ldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBjaGVja2VkIGVsZW1lbnQgd2l0aGluIGl0cyBkYXRhIGdyb3VwXG4gICAgICogQHBhcmFtIGRhdGFHcm91cCB0aGUgY2hlY2tlZCBkYXRhIGdyb3VwXG4gICAgICogQHBhcmFtIGZpZWxkc1BlclJvdyB0aGUgbnVtYmVyIG9mIGZpZWxkcyB0aGF0IGlzIHJlcXVpcmVkIHRvIGZpbGwgYW4gZW50aXJlIHJvd1xuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGZpZWxkIGF0IHRoZSBnaXZlbiBpbmRleCBpcyB3aXRoaW4gdGhlIGxhc3Qgcm93IG9mIGVsZW1lbnRzIG9mIHRoZSBwcm92aWRlZCBkYXRhIGdyb3VwLlxuICAgICAqIE5vdGUgdGhhdCBpZiB0aGUgbGFzdCByb3cgY29udGFpbnMgZW5vdWdoIGVsZW1lbnRzIHRvIGJlIGNvbXBsZXRlbHkgZmlsbGVkIHRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNMYXN0Um93KGluZGV4OiBudW1iZXIsIGRhdGFHcm91cDogRGF0YUdyb3VwLCBmaWVsZHNQZXJSb3c6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaW5kZXggKyBmaWVsZHNQZXJSb3cgPj0gZGF0YUdyb3VwLmZpZWxkcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveXMgdGhlIHByZXZpb3VzIGNvbnRlbnQgYW5kIHB1c2hlcyB0aGUgbmV3IGNvbnRlbnQgaW50byB0aGUgc3RyZWFtXG4gICAgICogQHBhcmFtIGNvbnRlbnQgdGhlIG5ldyBjb250ZW50XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoY29udGVudDogQXJyYXk8U3ViZ3JpZD4gPSBbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlJC52YWx1ZS5mb3JFYWNoKHN1YmdyaWQgPT4gc3ViZ3JpZC5kZXN0cm95KCkpO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlJC5uZXh0KGNvbnRlbnQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVTdWJncmlkSWQoZGF0YUdyb3VwOiBEYXRhR3JvdXApOiBzdHJpbmcge1xuICAgICAgICBsZXQgaWRCYXNlOiBzdHJpbmc7XG4gICAgICAgIGlmIChkYXRhR3JvdXAucGFyZW50VGFza0lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlkQmFzZSA9IFtkYXRhR3JvdXAucGFyZW50VGFza0lkLCBkYXRhR3JvdXAucGFyZW50VGFza1JlZklkLCBkYXRhR3JvdXAubmVzdGluZ0xldmVsXS5qb2luKCcjJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZEJhc2UgPSAncm9vdCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlkID0gaWRCYXNlO1xuICAgICAgICB3aGlsZSAodGhpcy5fZXhpc3RpbmdTdWJncmlkSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgIGlkID0gaWRCYXNlICsgdGhpcy5fc3ViZ3JpZElkQ291bnRlci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXhpc3RpbmdTdWJncmlkSWRzLmFkZChpZCk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2tCeVN1YmdyaWRGbiA9IChpbmRleDogbnVtYmVyLCBzdWJncmlkOiBTdWJncmlkKSA9PiBzdWJncmlkLnN1YmdyaWRJZDtcblxuICAgIHB1YmxpYyB0cmFja0J5Rm4gPSAoaW5kZXg6IG51bWJlciwgZWxlbWVudDogRGF0YWZpZWxkR3JpZExheW91dEVsZW1lbnQpID0+IHRoaXMudHJhY2tCeURhdGFmaWVsZHMoaW5kZXgsIGVsZW1lbnQpO1xuXG4gICAgcHJvdGVjdGVkIHRyYWNrQnlEYXRhZmllbGRzKGluZGV4OiBudW1iZXIsIGVsZW1lbnQ6IERhdGFmaWVsZEdyaWRMYXlvdXRFbGVtZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRhc2tFbGVtZW50VHlwZS5CTEFOSzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5ncmlkQXJlYUlkICsgJy0nICsgdGhpcy50YXNrQ29udGVudFNlcnZpY2UuJHNob3VsZENyZWF0ZUNvdW50ZXIuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGNhc2UgVGFza0VsZW1lbnRUeXBlLkxPQURFUjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5ncmlkQXJlYUlkICsgJy1MLScgKyB0aGlzLnRhc2tDb250ZW50U2VydmljZS4kc2hvdWxkQ3JlYXRlQ291bnRlci5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgY2FzZSBUYXNrRWxlbWVudFR5cGUuREFUQV9HUk9VUF9USVRMRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC50aXRsZSArICctJyArIHRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGVDb3VudGVyLmdldFZhbHVlKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lml0ZW0uc3RyaW5nSWQgKyAnLScgKyB0aGlzLnRhc2tDb250ZW50U2VydmljZS4kc2hvdWxkQ3JlYXRlQ291bnRlci5nZXRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
819
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFzay1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvdGFzay1jb250ZW50L3Rhc2stY29udGVudC9hYnN0cmFjdC10YXNrLWNvbnRlbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVFsRyxPQUFPLEVBQVksa0JBQWtCLEVBQTZCLE1BQU0sdUNBQXVDLENBQUM7QUFDaEgsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRW5FLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsc0JBQXNCLEVBRXRCLG1CQUFtQixFQUN0QixNQUFNLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUN6RSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGVBQWUsRUFBMkIsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ25DLE9BQU8sRUFBQyxpQ0FBaUMsRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBRXpHLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHFFQUFxRSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx1REFBdUQsQ0FBQztBQUNuRixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUU3RixPQUFPLEVBQUMsT0FBTyxFQUFD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UyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7ZUFDcEMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxhQUFhLENBQUM7SUFDNUQsQ0FBQzs7MEhBMTRCaUIsNEJBQTRCLHNNQTRFSixpQ0FBaUM7OEdBNUV6RCw0QkFBNEIsOE1BRnBDLEVBQUU7NEZBRU0sNEJBQTRCO2tCQUpqRCxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLFFBQVEsRUFBRSxFQUFFO2lCQUNmOzswQkE0RTBCLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUNBQWlDOzRDQTVDbEUsVUFBVTtzQkFBbEIsS0FBSztnQkFNRyxVQUFVO3NCQUFsQixLQUFLO2dCQU1HLGlCQUFpQjtzQkFBekIsS0FBSztnQkFJSSxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPcHRpb25hbCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7RGF0YWZpZWxkR3JpZExheW91dEVsZW1lbnR9IGZyb20gJy4uL21vZGVsL2RhdGFmaWVsZC1ncmlkLWxheW91dC1lbGVtZW50JztcbmltcG9ydCB7RmllbGRDb252ZXJ0ZXJTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlcy9maWVsZC1jb252ZXJ0ZXIuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tDb250ZW50U2VydmljZX0gZnJvbSAnLi4vc2VydmljZXMvdGFzay1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtQYXBlclZpZXdTZXJ2aWNlfSBmcm9tICcuLi8uLi9uYXZpZ2F0aW9uL3F1aWNrLXBhbmVsL2NvbXBvbmVudHMvcGFwZXItdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7TG9nZ2VyU2VydmljZX0gZnJvbSAnLi4vLi4vbG9nZ2VyL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7VGFza0V2ZW50Tm90aWZpY2F0aW9ufSBmcm9tICcuLi9tb2RlbC90YXNrLWV2ZW50LW5vdGlmaWNhdGlvbic7XG5pbXBvcnQge1Rhc2tFdmVudFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2VzL3Rhc2stZXZlbnQuc2VydmljZSc7XG5pbXBvcnQge0RhdGFHcm91cCwgRGF0YUdyb3VwQWxpZ25tZW50LCBQYXJlbnREYXRhR3JvdXBJbmZvcm1hdGlvbn0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9kYXRhLWdyb3Vwcyc7XG5pbXBvcnQge1Rhc2tFbGVtZW50VHlwZX0gZnJvbSAnLi4vbW9kZWwvdGFzay1jb250ZW50LWVsZW1lbnQtdHlwZSc7XG5pbXBvcnQge0RhdGFGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2Fic3RyYWN0LWRhdGEtZmllbGQnO1xuaW1wb3J0IHtcbiAgICBEYXRhR3JvdXBDb21wYWN0LFxuICAgIERhdGFHcm91cEhpZGVFbXB0eVJvd3MsXG4gICAgRGF0YUdyb3VwTGF5b3V0LFxuICAgIERhdGFHcm91cExheW91dFR5cGVcbn0gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9kYXRhLWdyb3VwLWxheW91dCc7XG5pbXBvcnQge0ZpZWxkQWxpZ25tZW50fSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvaW50ZXJmYWNlL2ZpZWxkLWFsaWdubWVudCc7XG5pbXBvcnQge0ZpZWxkVHlwZVJlc291cmNlfSBmcm9tICcuLi9tb2RlbC9maWVsZC10eXBlLXJlc291cmNlJztcbmltcG9ydCB7TG9hZGluZ0VtaXR0ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvbG9hZGluZy1lbWl0dGVyJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TkFFX0FTWU5DX1JFTkRFUklOR19DT05GSUdVUkFUSU9OfSBmcm9tICcuLi9tb2RlbC9hc3luYy1yZW5kZXJpbmctY29uZmlndXJhdGlvbi1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtBc3luY1JlbmRlcmluZ0NvbmZpZ3VyYXRpb259IGZyb20gJy4uL21vZGVsL2FzeW5jLXJlbmRlcmluZy1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7VGFza1JlZkRhc2hib2FyZENvbnN0YW50c30gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdGFzay1yZWYtZmllbGQvbW9kZWwvdGFzay1yZWYtZGFzaGJvYXJkLWNvbnN0YW50cyc7XG5pbXBvcnQge1Rhc2tSZWZGaWVsZH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdGFzay1yZWYtZmllbGQvbW9kZWwvdGFzay1yZWYtZmllbGQnO1xuaW1wb3J0IHtUYXNrUmVmQ29tcG9uZW50c30gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdGFzay1yZWYtZmllbGQvbW9kZWwvdGFzay1yZWYtY29tcG9uZW50cyc7XG5pbXBvcnQge1NwbGl0RGF0YUdyb3VwfSBmcm9tICcuLi9tb2RlbC9zcGxpdC1kYXRhLWdyb3VwJztcbmltcG9ydCB7U3ViZ3JpZH0gZnJvbSAnLi4vbW9kZWwvc3ViZ3JpZCc7XG5pbXBvcnQge0luY3JlbWVudGluZ0NvdW50ZXJ9IGZyb20gJy4uLy4uL3V0aWxpdHkvaW5jcmVtZW50aW5nLWNvdW50ZXInO1xuaW1wb3J0IHtQcmVwcm9jZXNzZWREYXRhR3JvdXBzfSBmcm9tICcuLi9tb2RlbC9wcmVwcm9jZXNzZWQtZGF0YS1ncm91cHMnO1xuaW1wb3J0IHtUYXNrUmVmRGFzaGJvYXJkVGlsZX0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvdGFzay1yZWYtZmllbGQvbW9kZWwvdGFzay1yZWYtZGFzaGJvYXJkLXRpbGUnO1xuaW1wb3J0IHtDb21wb25lbnQgYXMgRGF0YVJlZkNvbXBvbmVudH0gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2NvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LXRhc2stY29udGVudCcsXG4gICAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGFza0NvbnRlbnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHJlYWRvbmx5IERFRkFVTFRfTEFZT1VUX1RZUEUgPSBEYXRhR3JvdXBMYXlvdXRUeXBlLkxFR0FDWTtcbiAgICByZWFkb25seSBERUZBVUxUX0ZJRUxEX0FMSUdOTUVOVCA9IEZpZWxkQWxpZ25tZW50LkNFTlRFUjtcbiAgICByZWFkb25seSBERUZBVUxUX0FTWU5DX1JFTkRFUklOR19DT05GSUdVUkFUSU9OOiBBc3luY1JlbmRlcmluZ0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAgIGJhdGNoU2l6ZTogNCxcbiAgICAgICAgYmF0Y2hEZWxheTogMjAwLFxuICAgICAgICBudW1iZXJPZlBsYWNlaG9sZGVyczogNCxcbiAgICAgICAgZW5hYmxlQXN5bmNSZW5kZXJpbmdGb3JOZXdGaWVsZHM6IHRydWUsXG4gICAgICAgIGVuYWJsZUFzeW5jUmVuZGVyaW5nT25UYXNrRXhwYW5kOiB0cnVlXG4gICAgfTtcbiAgICByZWFkb25seSBERUZBVUxUX0NPTVBBQ1RfRElSRUNUSU9OID0gRGF0YUdyb3VwQ29tcGFjdC5OT05FO1xuICAgIHJlYWRvbmx5IERFRkFVTFRfSElERV9FTVBUWV9ST1dTID0gRGF0YUdyb3VwSGlkZUVtcHR5Um93cy5BTEw7XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciBkYXRhIGlzIGJlaW5nIGxvYWRlZCBmcm9tIGJhY2tlbmQsIG9yIGlmIGl0IGlzIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAgKi9cbiAgICBsb2FkaW5nJDogTG9hZGluZ0VtaXR0ZXI7XG4gICAgLyoqXG4gICAgICogRW1pdHMgYHRydWVgIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkYXRhIGZpZWxkLCB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQuIEVtaXRzIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGhhc0RhdGFUb0Rpc3BsYXkkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgLyoqXG4gICAgICogRXhpc3RzIHRvIGFsbG93IHJlZmVyZW5jZXMgdG8gdGhlIGVudW0gaW4gdGhlIEhUTUxcbiAgICAgKi9cbiAgICBwdWJsaWMgZmllbGRUeXBlUmVzb3VyY2UgPSBGaWVsZFR5cGVSZXNvdXJjZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSB0cmFuc2xhdGUgdGV4dCB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgd2hlbiB0aGUgdGFzayBjb250YWlucyBubyBkYXRhLlxuICAgICAqXG4gICAgICogSWYgYSBmYWxzeSB2YWx1ZSBpcyBwcm92aWRlZCB0aGUgZGVmYXVsdCB0ZXh0IGlzIGRpc3BsYXllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIG5vRGF0YVRleHQ6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBUaGUgaWNvbiB0aGF0IHNob3VsZCBiZSBkaXNwbGF5ZWQgd2hlbiB0aGUgdGFzayBjb250YWlucyBubyBkYXRhLlxuICAgICAqXG4gICAgICogSWYgYSBmYWxzeSB2YWx1ZSBpcyBwcm92aWRlZCB0aGUgZGVmYXVsdCBpY29uIGlzIGRpc3BsYXllZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIG5vRGF0YUljb246IHN0cmluZztcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGFuIGljb24gc2hvdWxkIGJlIGRpc3BsYXllZCB3aGVuIHRoZSBubyBkYXRhIG1lc3NhZ2UgaXMgc2hvd24uXG4gICAgICpcbiAgICAgKiBBbiBpY29uIGlzIGRpc3BsYXllZCBieSBkZWZhdWx0XG4gICAgICovXG4gICAgQElucHV0KCkgZGlzcGxheU5vRGF0YUljb24gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIEVtaXRzIG5vdGlmaWNhdGlvbnMgYWJvdXQgdGFzayBldmVudHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgdGFza0V2ZW50OiBFdmVudEVtaXR0ZXI8VGFza0V2ZW50Tm90aWZpY2F0aW9uPjtcbiAgICAvKipcbiAgICAgKiBUaGUgZGF0YSBmaWVsZHMgdGhhdCBhcmUgY3VycmVudGx5IGRpc3BsYXllZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZSQ6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxTdWJncmlkPj47XG4gICAgcHJvdGVjdGVkIF9zdWJUYXNrQ29udGVudDogU3Vic2NyaXB0aW9uO1xuICAgIHByb3RlY3RlZCBfc3ViVGFza0V2ZW50OiBTdWJzY3JpcHRpb247XG4gICAgcHJvdGVjdGVkIF9hc3luY1JlbmRlcmluZ0NvbmZpZzogQXN5bmNSZW5kZXJpbmdDb25maWd1cmF0aW9uO1xuICAgIHByb3RlY3RlZCBfYXN5bmNSZW5kZXJUaW1lb3V0OiBudW1iZXI7XG5cbiAgICBwcm90ZWN0ZWQgX2RlZmF1bHRBbGlnbm1lbnQ6IEZpZWxkQWxpZ25tZW50O1xuICAgIHByb3RlY3RlZCBfZGVmYXVsdENvbXBhY3REaXJlY3Rpb246IERhdGFHcm91cENvbXBhY3Q7XG4gICAgcHJvdGVjdGVkIF9kZWZhdWx0SGlkZUVtcHR5Um93czogRGF0YUdyb3VwSGlkZUVtcHR5Um93cztcbiAgICBwcm90ZWN0ZWQgX2RlZmF1bHROdW1iZXJPZkNvbHM6IG51bWJlcjtcblxuICAgIHByb3RlY3RlZCBfc3ViZ3JpZElkQ291bnRlcjogSW5jcmVtZW50aW5nQ291bnRlcjtcbiAgICBwcm90ZWN0ZWQgX2V4aXN0aW5nU3ViZ3JpZElkczogU2V0PHN0cmluZz47XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSByb3cgaGVpZ2h0IG9mIG9uZSByb3cgaW4gdGFzayBjb250ZW50XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJvd0hlaWdodCA9IDEwNTtcblxuICAgIHByb3RlY3RlZCBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2ZpZWxkQ29udmVydGVyOiBGaWVsZENvbnZlcnRlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB0YXNrQ29udGVudFNlcnZpY2U6IFRhc2tDb250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9wYXBlclZpZXc6IFBhcGVyVmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBfbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgX3Rhc2tFdmVudFNlcnZpY2U6IFRhc2tFdmVudFNlcnZpY2UgPSBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE5BRV9BU1lOQ19SRU5ERVJJTkdfQ09ORklHVVJBVElPTilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jUmVuZGVyaW5nQ29uZmlndXJhdGlvbjogQXN5bmNSZW5kZXJpbmdDb25maWd1cmF0aW9uID0gbnVsbCkge1xuICAgICAgICB0aGlzLl9hc3luY1JlbmRlcmluZ0NvbmZpZyA9IHsuLi50aGlzLkRFRkFVTFRfQVNZTkNfUkVOREVSSU5HX0NPTkZJR1VSQVRJT059O1xuICAgICAgICBpZiAoYXN5bmNSZW5kZXJpbmdDb25maWd1cmF0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX2FzeW5jUmVuZGVyaW5nQ29uZmlnLCBhc3luY1JlbmRlcmluZ0NvbmZpZ3VyYXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5sb2FkaW5nJCA9IG5ldyBMb2FkaW5nRW1pdHRlcih0cnVlKTtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFycmF5PFN1YmdyaWQ+PihbXSk7XG4gICAgICAgIHRoaXMuaGFzRGF0YVRvRGlzcGxheSQgPSB0aGlzLl9kYXRhU291cmNlJC5waXBlKG1hcChkYXRhID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuX3N1YlRhc2tDb250ZW50ID0gdGhpcy50YXNrQ29udGVudFNlcnZpY2UuJHNob3VsZENyZWF0ZS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVEZWZhdWx0TGF5b3V0Q29uZmlndXJhdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUxheW91dERhdGEoZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyQ29udGVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nJC5vZmYoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLl90YXNrRXZlbnRTZXJ2aWNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnRhc2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8VGFza0V2ZW50Tm90aWZpY2F0aW9uPigpO1xuICAgICAgICAgICAgdGhpcy5fc3ViVGFza0V2ZW50ID0gX3Rhc2tFdmVudFNlcnZpY2UudGFza0V2ZW50Tm90aWZpY2F0aW9ucyQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhc2tFdmVudC5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZyQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fc3ViVGFza0NvbnRlbnQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMudGFza0V2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnRhc2tFdmVudC5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9zdWJUYXNrRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YlRhc2tFdmVudC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9hc3luY1JlbmRlclRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl9hc3luY1JlbmRlclRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0YXNrSWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2suc3RyaW5nSWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IEFycmF5PFN1YmdyaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHJldHVybnMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGFzIHNwZWNpZmllZCBieSB0aGUgdGFza3MgbGF5b3V0IHByb3BlcnR5LCBvciA0IGlmIG5vIHZhbHVlIGlzIHNwZWNpZmllZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0TnVtYmVyT2ZGb3JtQ29sdW1ucygpOiBudW1iZXIge1xuICAgICAgICBpZiAoIXRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2tcbiAgICAgICAgICAgIHx8ICF0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrLmxheW91dFxuICAgICAgICAgICAgfHwgdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFzay5sYXlvdXQuY29scyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrLmxheW91dC5jb2xzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzUGFwZXJWaWV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFwZXJWaWV3LnBhcGVyVmlldztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaXRlbSBhbiBvYmplY3QgY29udGFpbmluZyBncmlkIGVsZW1lbnQgaW5mb3JtYXRpb25cbiAgICAgKiBAcmV0dXJucyB0aGUgQW5ndWxhciBmbGV4IGxheW91dHMgYWxpZ25tZW50IHByb3BlcnR5IGZvciBpbmRpdmlkdWFsIGRhdGEgZmllbGRzIGJhc2VkIG9uXG4gICAgICogdGhlIGxheW91dCBjb25maWd1cmF0aW9uIHNwZWNpZmllZCBieSB0aGUgcHJvY2Vzc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXRJdGVtQWxpZ25tZW50KGl0ZW06IERhdGFmaWVsZEdyaWRMYXlvdXRFbGVtZW50KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGl0ZW0uYWxpZ25tZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5hbGlnbm1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWVsZEFsaWdubWVudCA9IGl0ZW0uaXRlbT8ubG9jYWxMYXlvdXQ/LmFsaWdubWVudCA/PyB0aGlzLl9kZWZhdWx0QWxpZ25tZW50O1xuXG4gICAgICAgIGxldCBhbGlnbm1lbnQ7XG4gICAgICAgIHN3aXRjaCAoZmllbGRBbGlnbm1lbnQpIHtcbiAgICAgICAgICAgIGNhc2UgRmllbGRBbGlnbm1lbnQuVE9QOlxuICAgICAgICAgICAgICAgIGFsaWdubWVudCA9ICdzdGFydCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZpZWxkQWxpZ25tZW50LkNFTlRFUjpcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQgPSAnY2VudGVyJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRmllbGRBbGlnbm1lbnQuQk9UVE9NOlxuICAgICAgICAgICAgICAgIGFsaWdubWVudCA9ICdlbmQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbS5hbGlnbm1lbnQgPSAnc3BhY2UtYmV0d2VlbiAnICsgYWxpZ25tZW50O1xuICAgICAgICByZXR1cm4gaXRlbS5hbGlnbm1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgY29tcG9uZW50IGhlaWdodCBpZiB0aGUgcm93cyBhdHRyaWJ1dGUgb2YgdGFzayBsYXlvdXQgaXMgc2V0LlxuICAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlQ29udGVudEhlaWdodENzcygpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxpbmdOZWVkZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2subGF5b3V0LnJvd3MgKiB0aGlzLnJvd0hlaWdodCArICdweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJzEwMCUnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVjaWRlcyB3aGV0aGVyIHRoZXJlIGlzIGEgZml4ZWQgbnVtYmVyIG9mIHJvd3MgYW5kIGl0IG5lZWQtcyBzY3JvbGxpbmdcbiAgICAgKi9cbiAgICBwdWJsaWMgc2Nyb2xsaW5nTmVlZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFza1xuICAgICAgICAgICAgJiYgISF0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrLmxheW91dFxuICAgICAgICAgICAgJiYgISF0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrLmxheW91dC5yb3dzXG4gICAgICAgICAgICAmJiB0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrLmxheW91dC5yb3dzID4gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyB0aGUgZGVmYXVsdCBhbGlnbm1lbnQgZm9yIHRoZSBkaXNwbGF5ZWQgdGFzayB0aGF0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGZpZWxkcyBpbmRpdmlkdWFsIHByb3BlcnR5LlxuICAgICAqIElmIHRlIHRhc2sgc3BlY2lmaWVzIG5vIGRlZmF1bHQgdmFsdWUgdGhlIFtnbG9iYWwgZGVmYXVsdF17QGxpbmsgQWJzdHJhY3RUYXNrQ29udGVudENvbXBvbmVudCNERUZBVUxUX0ZJRUxEX0FMSUdOTUVOVH1cbiAgICAgKiB2YWx1ZSBpcyByZXR1cm5lZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29tcHV0ZURlZmF1bHRMYXlvdXRDb25maWd1cmF0aW9uKCkge1xuICAgICAgICB0aGlzLl9kZWZhdWx0QWxpZ25tZW50ID0gdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFzaz8ubGF5b3V0Py5maWVsZEFsaWdubWVudCA/PyB0aGlzLkRFRkFVTFRfRklFTERfQUxJR05NRU5UO1xuICAgICAgICB0aGlzLl9kZWZhdWx0Q29tcGFjdERpcmVjdGlvbiA9IHRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2s/LmxheW91dD8uY29tcGFjdERpcmVjdGlvbiA/PyB0aGlzLkRFRkFVTFRfQ09NUEFDVF9ESVJFQ1RJT047XG4gICAgICAgIHRoaXMuX2RlZmF1bHRIaWRlRW1wdHlSb3dzID0gdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFzaz8ubGF5b3V0Py5oaWRlRW1wdHlSb3dzID8/IHRoaXMuREVGQVVMVF9ISURFX0VNUFRZX1JPV1M7XG4gICAgICAgIHRoaXMuX2RlZmF1bHROdW1iZXJPZkNvbHMgPSB0aGlzLmdldE51bWJlck9mRm9ybUNvbHVtbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbGF5b3V0IGRhdGEgZm9yIHRoZSB0YXNrcyBncmlkIGxheW91dCBhbmQgc2V0cyB0aGUgcmVzdWx0IHRvIHRoZSBwdWJsaWMgcHJvcGVydGllc1xuICAgICAqIG9mIHRoaXMgY2xhc3MgdGhhdCBhcmUgdGhlbiBib3VuZCB0byBIVE1MLlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXBzIHRoZSBkYXRhIGdyb3VwcyB0aGF0IHNob3VsZCBiZSBsYWlkIG91dFxuICAgICAqL1xuICAgIHB1YmxpYyBjb21wdXRlTGF5b3V0RGF0YShkYXRhR3JvdXBzOiBBcnJheTxEYXRhR3JvdXA+KSB7XG4gICAgICAgIGlmICghdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFzaykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb250ZW50KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zdWJncmlkSWRDb3VudGVyID0gbmV3IEluY3JlbWVudGluZ0NvdW50ZXIoKTtcbiAgICAgICAgdGhpcy5fZXhpc3RpbmdTdWJncmlkSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxzdHJpbmcsIFN1YmdyaWQ+KCk7XG5cbiAgICAgICAgZGF0YUdyb3VwcyA9IHRoaXMucHJlcHJvY2Vzc0RhdGFHcm91cHMoZGF0YUdyb3Vwcyk7XG5cbiAgICAgICAgY29uc3QgZGVmYXVsdExheW91dCA9IHRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2subGF5b3V0ICYmIHRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLnRhc2subGF5b3V0LnR5cGVcbiAgICAgICAgICAgID8gdGhpcy50YXNrQ29udGVudFNlcnZpY2UudGFzay5sYXlvdXQudHlwZVxuICAgICAgICAgICAgOiB0aGlzLkRFRkFVTFRfTEFZT1VUX1RZUEU7XG5cbiAgICAgICAgZGF0YUdyb3Vwcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGlmICghZ3JvdXAubGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgZ3JvdXAubGF5b3V0ID0ge3Jvd3M6IHVuZGVmaW5lZCwgY29sczogdW5kZWZpbmVkLCB0eXBlOiBkZWZhdWx0TGF5b3V0fTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZ3JvdXAubGF5b3V0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICBncm91cC5sYXlvdXQudHlwZSA9IGRlZmF1bHRMYXlvdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHN1YmdyaWQgPSBuZXcgU3ViZ3JpZChcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVN1YmdyaWRJZChncm91cCksXG4gICAgICAgICAgICAgICAgZ3JvdXAubGF5b3V0LmNvbHMgPz8gdGhpcy5fZGVmYXVsdE51bWJlck9mQ29scyxcbiAgICAgICAgICAgICAgICB0aGlzLl9hc3luY1JlbmRlcmluZ0NvbmZpZ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGdyb3VwLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aXRsZSA9IHN1YmdyaWQuYWRkVGl0bGUoZ3JvdXApO1xuICAgICAgICAgICAgICAgIHN1YmdyaWQuYWRkUm93KHRoaXMubmV3R3JpZFJvdyhzdWJncmlkLmNvbHMsIHRpdGxlLmdyaWRBcmVhSWQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoIChncm91cC5sYXlvdXQudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YUdyb3VwTGF5b3V0VHlwZS5HUklEOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVHcmlkTGF5b3V0KGdyb3VwLCBzdWJncmlkKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhR3JvdXBMYXlvdXRUeXBlLkZMT1c6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcHV0ZUZsb3dMYXlvdXQoZ3JvdXAsIHN1YmdyaWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFHcm91cExheW91dFR5cGUuTEVHQUNZOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXB1dGVMZWdhY3lMYXlvdXQoZ3JvdXAsIHN1YmdyaWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdGFzayBsYXlvdXQgdHlwZSAnJHt0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrLmxheW91dC50eXBlfSdgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3ViZ3JpZC5maW5hbGl6ZSgpO1xuICAgICAgICAgICAgcmVzdWx0LnNldChzdWJncmlkLnN1YmdyaWRJZCwgc3ViZ3JpZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucmVuZGVyRmllbGRzKHJlc3VsdCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlckZpZWxkcyhzdWJncmlkczogTWFwPHN0cmluZywgU3ViZ3JpZD4pIHtcbiAgICAgICAgY29uc3Qgc3ViZ3JpZHNBcnJheSA9IEFycmF5LmZyb20oc3ViZ3JpZHMudmFsdWVzKCkpO1xuXG4gICAgICAgIGlmICghdGhpcy5fYXN5bmNSZW5kZXJpbmdDb25maWcuZW5hYmxlQXN5bmNSZW5kZXJpbmdGb3JOZXdGaWVsZHNcbiAgICAgICAgICAgICYmICEodGhpcy5fYXN5bmNSZW5kZXJpbmdDb25maWcuZW5hYmxlQXN5bmNSZW5kZXJpbmdPblRhc2tFeHBhbmQgJiYgdGhpcy50YXNrQ29udGVudFNlcnZpY2UuaXNFeHBhbmRpbmcpKSB7XG4gICAgICAgICAgICBzdWJncmlkc0FycmF5LmZvckVhY2goc3ViZ3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgc3ViZ3JpZC5kaXNwbGF5QWxsRmllbGRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29udGVudChzdWJncmlkc0FycmF5KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKHRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLmlzRXhwYW5kaW5nICYmIHRoaXMuX2FzeW5jUmVuZGVyaW5nQ29uZmlnLmVuYWJsZUFzeW5jUmVuZGVyaW5nT25UYXNrRXhwYW5kKSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSQudmFsdWUuZm9yRWFjaChvbGRTdWJncmlkID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3ViZ3JpZHMuaGFzKG9sZFN1YmdyaWQuc3ViZ3JpZElkKSkge1xuICAgICAgICAgICAgICAgICAgICBzdWJncmlkcy5nZXQob2xkU3ViZ3JpZC5zdWJncmlkSWQpLmRldGVybWluZUtlcHRGaWVsZHMob2xkU3ViZ3JpZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlckNvbnRlbnQoc3ViZ3JpZHNBcnJheSk7XG4gICAgICAgIHRoaXMuc3ByZWFkRmllbGRSZW5kZXJpbmdPdmVyVGltZShzdWJncmlkc0FycmF5KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc3ByZWFkRmllbGRSZW5kZXJpbmdPdmVyVGltZShzdWJncmlkczogQXJyYXk8U3ViZ3JpZD4sIGl0ZXJhdGlvbiA9IDApIHtcbiAgICAgICAgdGhpcy5fYXN5bmNSZW5kZXJUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaXRlcmF0aW9uIDwgc3ViZ3JpZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLl9hc3luY1JlbmRlclRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3ViZ3JpZHNbaXRlcmF0aW9uXS5yZW5kZXJDb250ZW50T3ZlclRpbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNwcmVhZEZpZWxkUmVuZGVyaW5nT3ZlclRpbWUoc3ViZ3JpZHMsIGl0ZXJhdGlvbiArIDEpO1xuICAgICAgICAgICAgICAgIH0sIGl0ZXJhdGlvbiA9PT0gMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb25lcyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSBncm91cHMgdG8gcHJldmVudCB1bmludGVudGlvbmFsIG1lbW9yeSBhY2Nlc3NlcyB0byBzb3VyY2UgZGF0YS5cbiAgICAgKiBSZWFycmFuZ2VzIHRoZSBkYXRhIGdyb3VwcyB0byBhY2NvbW1vZGF0ZSB0YXNrcmVmcy4gRmlsdGVycyBvdXQgaGlkZGVuIGFuZCBmb3JiaWRkZW4gZmllbGRzLlxuICAgICAqIFBvcHVsYXRlcyBkYXNoYm9hcmQgdGFzayByZWYgZmllbGRzIHdpdGggZGFzaGJvYXJkIHRpbGUgZGF0YS5cbiAgICAgKiBAcGFyYW0gZGF0YUdyb3Vwc1xuICAgICAqIEByZXR1cm5zIHRoZSBwcmVwcm9jZXNzZWQgZGF0YSBncm91cHNcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcHJlcHJvY2Vzc0RhdGFHcm91cHMoZGF0YUdyb3VwczogQXJyYXk8RGF0YUdyb3VwPik6IEFycmF5PERhdGFHcm91cD4ge1xuICAgICAgICBjb25zdCByZWFycmFuZ2VSZXN1bHQgPSB0aGlzLnJlYXJyYW5nZURhdGFHcm91cHMoZGF0YUdyb3Vwcyk7XG4gICAgICAgIGxldCB1bmZpbHRlcmVkRGF0YUdyb3VwcyA9IHJlYXJyYW5nZVJlc3VsdC5kYXRhR3JvdXBzO1xuXG4gICAgICAgIGlmIChyZWFycmFuZ2VSZXN1bHQuY29udGFpbnNEYXNoYm9hcmRUYXNrUmVmKSB7XG4gICAgICAgICAgICB1bmZpbHRlcmVkRGF0YUdyb3VwcyA9IHRoaXMucHJlcHJvY2Vzc0Rhc2hib2FyZFRhc2tSZWYocmVhcnJhbmdlUmVzdWx0LmRhdGFHcm91cHMsIGRhdGFHcm91cHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmVBbmRGaWx0ZXJIaWRkZW4odW5maWx0ZXJlZERhdGFHcm91cHMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb25lcyB0aGUgY29udGVudCBvZiB0aGUgZGF0YSBncm91cHMgdG8gcHJldmVudCB1bmludGVudGlvbmFsIG1lbW9yeSBhY2Nlc3NlcyB0byBzb3VyY2UgZGF0YS5cbiAgICAgKiBSZWFycmFuZ2VzIHRoZSBkYXRhIGdyb3VwcyB0byBhY2NvbW1vZGF0ZSB0YXNrcmVmcy5cbiAgICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBkYXRhIGdyb3VwcyBjb250YWluIGEgZGFzaGJvYXJkIHRhc2sgcmVmIGZpZWxkLlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXBzXG4gICAgICogQHJldHVybnMgdGhlIHByZXByb2Nlc3NlZCBkYXRhIGdyb3VwcyB3aXRoIG1ldGFkYXRhXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYXJyYW5nZURhdGFHcm91cHMoZGF0YUdyb3VwczogQXJyYXk8RGF0YUdyb3VwPik6IFByZXByb2Nlc3NlZERhdGFHcm91cHMge1xuICAgICAgICBkYXRhR3JvdXBzID0gdGhpcy5jbG9uZURhdGFHcm91cHMoZGF0YUdyb3Vwcyk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUxvY2FsRmllbGRMYXlvdXQoZGF0YUdyb3Vwcyk7XG5cbiAgICAgICAgbGV0IGNvbnRhaW5zRGFzaGJvYXJkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFHcm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gZGF0YUdyb3Vwc1tpXTtcbiAgICAgICAgICAgIGlmICghZ3JvdXAuZmllbGRzLnNvbWUoZiA9PiB0aGlzLmlzVGFza1JlZihmKSAmJiB0aGlzLnNob3VsZFJlc29sdmVUYXNrUmVmRGF0YShmKSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChncm91cCk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzcGxpdCA9IHRoaXMuc3BsaXREYXRhR3JvdXBPblRhc2tSZWYoZ3JvdXApO1xuICAgICAgICAgICAgaWYgKHNwbGl0LnN0YXJ0R3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHNwbGl0LnN0YXJ0R3JvdXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoISFzcGxpdC50YXNrUmVmLmNvbXBvbmVudD8ubmFtZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMuY3JlYXRlQ29tcG9uZW50VGFza1JlZkRhdGFHcm91cChncm91cCwgc3BsaXQudGFza1JlZikpO1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zRGFzaGJvYXJkID0gc3BsaXQudGFza1JlZi5jb21wb25lbnQubmFtZSA9PT0gVGFza1JlZkNvbXBvbmVudHMuREFTSEJPQVJEO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3BsaXQudGFza1JlZi52YWx1ZS5sZW5ndGggPT09IDAgfHwgc3BsaXQuZW5kR3JvdXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdC5lbmRHcm91cCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFHcm91cHMuc3BsaWNlKGkgKyAxLCAwLCBzcGxpdC5lbmRHcm91cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaXJlY3RDaGlsZCA9IGRhdGFHcm91cHNbaSArIDFdOyAvLyB0aGUgZGF0YSBncm91cCB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MgSVMgQUxXQVlTIGEgZGlyZWN0IGNoaWxkXG4gICAgICAgICAgICBsZXQgZmlyc3ROb25EZXNjZW5kYW50SW5kZXggPSBpICsgMjtcbiAgICAgICAgICAgIGZvciAoOyBmaXJzdE5vbkRlc2NlbmRhbnRJbmRleCA8IGRhdGFHcm91cHMubGVuZ3RoOyBmaXJzdE5vbkRlc2NlbmRhbnRJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEdyb3VwID0gZGF0YUdyb3Vwc1tmaXJzdE5vbkRlc2NlbmRhbnRJbmRleF07XG4gICAgICAgICAgICAgICAgaWYgKG5leHRHcm91cC5uZXN0aW5nTGV2ZWwgPT09IHVuZGVmaW5lZCB8fCBuZXh0R3JvdXAubmVzdGluZ0xldmVsIDwgZGlyZWN0Q2hpbGQubmVzdGluZ0xldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVuZCBvZiB0aGUgYmxvY2sgb2YgbmVzdGVkIGRhdGEgZ3JvdXBzXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobmV4dEdyb3VwLm5lc3RpbmdMZXZlbCA9PT0gZGlyZWN0Q2hpbGQubmVzdGluZ0xldmVsXG4gICAgICAgICAgICAgICAgICAgICYmIChuZXh0R3JvdXAucGFyZW50VGFza1JlZklkICE9PSBzcGxpdC50YXNrUmVmLnN0cmluZ0lkXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCAhc3BsaXQudGFza1JlZi52YWx1ZS5zb21lKHJlZmZlZFRhc2tJZCA9PiByZWZmZWRUYXNrSWQgPT09IG5leHRHcm91cC5wYXJlbnRUYXNrSWQpKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGFHcm91cHMuc3BsaWNlKGZpcnN0Tm9uRGVzY2VuZGFudEluZGV4LCAwLCBzcGxpdC5lbmRHcm91cCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YUdyb3VwczogcmVzdWx0LFxuICAgICAgICAgICAgY29udGFpbnNEYXNoYm9hcmRUYXNrUmVmOiBjb250YWluc0Rhc2hib2FyZFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkdXBsaWNhdGUgb2YgdGhlIHByb3ZpZGVkIGRhdGEgZ3JvdXAgYXJyYXkuXG4gICAgICpcbiAgICAgKiBPbmx5IHRoZSBkYXRhIGdyb3VwcyBhcmUgY2xvbmVkLCB0aGUgZmllbGRzIGFyZSBvbmx5IGNvcGllZCBhcyByZWZlcmVuY2VzLlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXBzIHRoZSBkYXRhIGdyb3VwcyB0aGF0IHNob3VsZCBiZSBjbG9uZWRcbiAgICAgKiBAcmV0dXJucyB0aGUgZHVwbGljYXRlZCBkYXRhIGdyb3Vwc1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBjbG9uZURhdGFHcm91cHMoZGF0YUdyb3VwczogQXJyYXk8RGF0YUdyb3VwPik6IEFycmF5PERhdGFHcm91cD4ge1xuICAgICAgICByZXR1cm4gZGF0YUdyb3Vwcy5tYXAoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgZyA9IHsuLi5ncm91cH07XG4gICAgICAgICAgICBnLmZpZWxkcyA9IGcuZmllbGRzLm1hcChmaWVsZCA9PiBmaWVsZCk7XG4gICAgICAgICAgICByZXR1cm4gZztcbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXNzZXMgb3ZlciBhbGwgdGhlIGZpZWxkcyBpbiB0aGUgcHJvdmlkZWQgZGF0YSBncm91cHMgYW5kIGlmIHRoZXkgYXJlIHZpc2libGUsIGluaXRpYWxpemVzIHRoZWlyIGxvY2FsIGxheW91dCBhdHRyaWJ1dGUuXG4gICAgICogQHBhcmFtIGRhdGFHcm91cHMgdGhlIGNvbnRhaW5lcnMgb2YgdGhlIGZpZWxkcyB0aGF0IHNob3VsZCBoYXZlIHRoZWlyIGxvY2FsIGxheW91dCBpbml0aWFsaXplZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpbml0aWFsaXplTG9jYWxGaWVsZExheW91dChkYXRhR3JvdXBzOiBBcnJheTxEYXRhR3JvdXA+KTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgZyBvZiBkYXRhR3JvdXBzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGYgb2YgZy5maWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmLnJlc2V0TG9jYWxMYXlvdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBkdXBsaWNhdGUgb2YgdGhlIHByb3ZpZGVkIGRhdGEgZ3JvdXAgYXJyYXkgYW5kIGZpbHRlcnMgYXdheSBhbnkgZmllbGRzIGFuZCBkYXRhIGdyb3VwcyB0aGF0IGFyZSBtYXJrZWQgYXMgaGlkZGVuLlxuICAgICAqIEJlY2F1c2Ugb2YgdGhlIGR1cGxpY2F0aW9uIHRoZSBmaWx0ZXJpbmcgZG9lc24ndCBhZmZlY3QgdGhlIG9yaWdpbmFsIGluc3RhbmNlcyBhbmQgdGhleSByZW1haW4gdW5jaGFuZ2VkLlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXBzIHRoZSBkYXRhIGdyb3VwcyB0aGF0IHNob3VsZCBiZSBmaWx0ZXJlZFxuICAgICAqIEByZXR1cm5zIHRoZSBmaWx0ZXJlZCBkdXBsaWNhdGVkIGRhdGEgZ3JvdXBzXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNsb25lQW5kRmlsdGVySGlkZGVuKGRhdGFHcm91cHM6IEFycmF5PERhdGFHcm91cD4pOiBBcnJheTxEYXRhR3JvdXA+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YUdyb3Vwcy5tYXAoZ3JvdXAgPT4ge1xuICAgICAgICAgICAgY29uc3QgZyA9IHsuLi5ncm91cH07XG4gICAgICAgICAgICBnLmZpZWxkcyA9IGcuZmllbGRzLmZpbHRlcihmaWVsZCA9PiAhZmllbGQuYmVoYXZpb3IuaGlkZGVuICYmICFmaWVsZC5iZWhhdmlvci5mb3JiaWRkZW4pLm1hcChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGQucmVzZXRMb2NhbExheW91dCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWVsZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQuZmlsdGVyKGdyb3VwID0+IGdyb3VwLmZpZWxkcy5sZW5ndGggPiAwKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNUYXNrUmVmKGZpZWxkOiBEYXRhRmllbGQ8dW5rbm93bj4pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpZWxkIGluc3RhbmNlb2YgVGFza1JlZkZpZWxkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNvcnRzIHRoZSBpbnB1dCBkYXRhIGdyb3VwIGJhc2VkIG9uIHRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGZpZWxkcyBhbmQgc3BsaXRzIGl0IGludG8gcGFydHMgb24gdGhlIGZpcnN0IHRhc2sgcmVmLlxuICAgICAqIElmIHNvbWUgZmllbGRzIGFwcGVhciBiZWZvcmUgdGhlIGZpcnN0IHRhc2sgcmVmIHRoZXkgYXJlIGV4dHJhY3RlZCBpbnRvIGEgbmV3IFtzdGFydEdyb3VwXXtAbGluayBTcGxpdERhdGFHcm91cCNzdGFydEdyb3VwfS5cbiAgICAgKiBJZiBzb21lIGZpZWxkcyBhcHBlYXIgYWZ0ZXIgdGhlIGZpcnN0IHRhc2sgcmVmIHRoZXkgYXJlIGV4dHJhY3RlZCBpbnRvIGEgbmV3IFtlbmRHcm91cF17QGxpbmsgU3BsaXREYXRhR3JvdXAjZW5kR3JvdXB9LlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXBcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNwbGl0RGF0YUdyb3VwT25UYXNrUmVmKGRhdGFHcm91cDogRGF0YUdyb3VwKTogU3BsaXREYXRhR3JvdXAge1xuICAgICAgICBkYXRhR3JvdXAuZmllbGRzLnNvcnQoKGEsIGIpID0+IGEubG9jYWxMYXlvdXQueSAtIGIubG9jYWxMYXlvdXQueSk7XG4gICAgICAgIGNvbnN0IHRhc2tSZWZQb3NpdGlvbiA9IGRhdGFHcm91cC5maWVsZHMuZmluZEluZGV4KGYgPT4gdGhpcy5pc1Rhc2tSZWYoZikpO1xuICAgICAgICBjb25zdCByZXN1bHQ6IFNwbGl0RGF0YUdyb3VwID0ge1xuICAgICAgICAgICAgdGFza1JlZjogZGF0YUdyb3VwLmZpZWxkc1t0YXNrUmVmUG9zaXRpb25dIGFzIFRhc2tSZWZGaWVsZFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0YXNrUmVmUG9zaXRpb24gIT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5zdGFydEdyb3VwID0ge1xuICAgICAgICAgICAgICAgIHRpdGxlOiBkYXRhR3JvdXAudGl0bGUsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBkYXRhR3JvdXAuYWxpZ25tZW50LFxuICAgICAgICAgICAgICAgIGxheW91dDogZGF0YUdyb3VwLmxheW91dCxcbiAgICAgICAgICAgICAgICBzdHJldGNoOiBkYXRhR3JvdXAuc3RyZXRjaCxcbiAgICAgICAgICAgICAgICBmaWVsZHM6IGRhdGFHcm91cC5maWVsZHMuc2xpY2UoMCwgdGFza1JlZlBvc2l0aW9uKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFza1JlZlBvc2l0aW9uICE9PSBkYXRhR3JvdXAuZmllbGRzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJlc3VsdC5lbmRHcm91cCA9IHtcbiAgICAgICAgICAgICAgICB0aXRsZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZGF0YUdyb3VwLmFsaWdubWVudCxcbiAgICAgICAgICAgICAgICBsYXlvdXQ6IGRhdGFHcm91cC5sYXlvdXQsXG4gICAgICAgICAgICAgICAgc3RyZXRjaDogZGF0YUdyb3VwLnN0cmV0Y2gsXG4gICAgICAgICAgICAgICAgZmllbGRzOiBkYXRhR3JvdXAuZmllbGRzLnNsaWNlKHRhc2tSZWZQb3NpdGlvbiArIDEpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlc3VsdC5lbmRHcm91cC5maWVsZHMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgICAgICBmLmxvY2FsTGF5b3V0LnkgPSBmLmxvY2FsTGF5b3V0LnkgLSByZXN1bHQudGFza1JlZi5sb2NhbExheW91dC55IC0gMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IGRhdGEgZ3JvdXAgdGhhdCBjb250YWlucyBvbmx5IHRoZSBwYXNzZWQgdGFzayByZWYuXG4gICAgICogVGhlIGluZm9ybWF0aW9uIGFib3V0IG5lc3RpbmcgYW5kIHBhcmVudCB0YXNrL2Nhc2UgYXJlIHByZXNlcnZlZCBmcm9tIHRoZSBwYXNzZWQgb3JpZ2luYWwgZGF0YSBncm91cC5cbiAgICAgKiBAcGFyYW0gb3JpZ2luYWxEYXRhR3JvdXAgc291cmNlIG9mIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBwYXJlbnQgdGFzay9jYXNlXG4gICAgICogQHBhcmFtIHRhc2tSZWYgdGhlIHRhc2sgcmVmIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgbmV3IGRhdGEgZ3JvdXBcbiAgICAgKiBAcGFyYW0gdGl0bGUgb3B0aW9uYWwgdGl0bGUgZm9yIHRhc2tyZWZcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNyZWF0ZUNvbXBvbmVudFRhc2tSZWZEYXRhR3JvdXAob3JpZ2luYWxEYXRhR3JvdXA6IERhdGFHcm91cCwgdGFza1JlZjogVGFza1JlZkZpZWxkLCB0aXRsZT86IHN0cmluZyk6IERhdGFHcm91cCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWVsZHM6IFt0YXNrUmVmXSxcbiAgICAgICAgICAgIGFsaWdubWVudDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3RyZXRjaDogZmFsc2UsXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICBwYXJlbnRUYXNrSWQ6IG9yaWdpbmFsRGF0YUdyb3VwLnBhcmVudFRhc2tJZCxcbiAgICAgICAgICAgIHBhcmVudFRyYW5zaXRpb25JZDogb3JpZ2luYWxEYXRhR3JvdXAucGFyZW50VHJhbnNpdGlvbklkLFxuICAgICAgICAgICAgcGFyZW50Q2FzZUlkOiBvcmlnaW5hbERhdGFHcm91cC5wYXJlbnRDYXNlSWQsXG4gICAgICAgICAgICBwYXJlbnRUYXNrUmVmSWQ6IG9yaWdpbmFsRGF0YUdyb3VwLnBhcmVudFRhc2tSZWZJZCxcbiAgICAgICAgICAgIG5lc3RpbmdMZXZlbDogb3JpZ2luYWxEYXRhR3JvdXAubmVzdGluZ0xldmVsLFxuICAgICAgICAgICAgbGF5b3V0OiBvcmlnaW5hbERhdGFHcm91cC5sYXlvdXRcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElkZW50aWZpZXMgZGF0YSBncm91cHMgdGhhdCByZXByZXNlbnQgZGFzaGJvYXJkIHRpbGVzLFxuICAgICAqIHJlbW92ZXMgdGhlbSBmcm9tIHRoZSBkYXRhIGdyb3VwIGFycmF5IGFuZCBwYXNzZXMgdGhlbSBvbnRvIHRoZSB0YXNrIHJlZiBmaWVsZCBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gcHJlcHJvY2Vzc2VkRGF0YUdyb3Vwc1xuICAgICAqIEBwYXJhbSByYXdEYXRhR3JvdXBzXG4gICAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgZGF0YSBncm91cCBvYmplY3RzIHRoYXQgZG9lcyBub3QgY29udGFpbiBkYXNoYm9hcmQgdGlsZXMgcmVmZXJlbmNlZCBieSB0aGUgZGFzaGJvYXJkIHRhc2sgcmVmXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBwcmVwcm9jZXNzRGFzaGJvYXJkVGFza1JlZihwcmVwcm9jZXNzZWREYXRhR3JvdXBzOiBBcnJheTxEYXRhR3JvdXA+LCByYXdEYXRhR3JvdXBzOiBBcnJheTxEYXRhR3JvdXA+KTogQXJyYXk8RGF0YUdyb3VwPiB7XG4gICAgICAgIC8vIFRPRE8gc3VwcG9ydCBtb3JlIHRoYW4gb25lIGRhc2hib2FyZCB0YXNrIHJlZiBpbiBhIHRhc2tcbiAgICAgICAgbGV0IGRhc2hib2FyZFRhc2tSZWZGaWVsZDogVGFza1JlZkZpZWxkO1xuICAgICAgICBsZXQgZGFzaGJvYXJkUGFyZW50SW5mb3JtYXRpb246IFBhcmVudERhdGFHcm91cEluZm9ybWF0aW9uO1xuICAgICAgICBmb3IgKGNvbnN0IGRnIG9mIHByZXByb2Nlc3NlZERhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGQgb2YgZGcuZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNUYXNrUmVmKGZpZWxkKSAmJiBmaWVsZC5jb21wb25lbnQ/Lm5hbWUgPT09IFRhc2tSZWZDb21wb25lbnRzLkRBU0hCT0FSRCkge1xuICAgICAgICAgICAgICAgICAgICBkYXNoYm9hcmRUYXNrUmVmRmllbGQgPSBmaWVsZCBhcyBUYXNrUmVmRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50VGFza0lkOiBkZy5wYXJlbnRUYXNrSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRUcmFuc2l0aW9uSWQ6IGRnLnBhcmVudFRyYW5zaXRpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENhc2VJZDogZGcucGFyZW50Q2FzZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50VGFza1JlZklkOiBkZy5wYXJlbnRUYXNrUmVmSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXN0aW5nTGV2ZWw6IGRnLm5lc3RpbmdMZXZlbFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXNoYm9hcmRUYXNrUmVmRmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkYXNoYm9hcmRUYXNrUmVmRmllbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdwcmVwcm9jZXNzRGFzaGJvYXJkVGFza1JlZiBtZXRob2Qgd2FzIGNhbGxlZCBvbiB0YXNrIGNvbnRlbnQgd2l0aG91dCBkYXNoYm9hcmQgdGFzayByZWZzIScpO1xuICAgICAgICAgICAgcmV0dXJuIHByZXByb2Nlc3NlZERhdGFHcm91cHM7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aWxlcyA9IG5ldyBNYXA8c3RyaW5nLCBUYXNrUmVmRGFzaGJvYXJkVGlsZT4oKTtcblxuICAgICAgICAvLyBUT0RPIHJlc29sdmUgdHJhbnNpdGl2ZSB0aWxlIGNvbnRlbnRcbiAgICAgICAgY29uc3Qgbm9uRGFzaGJvYXJkRGF0YUdyb3VwcyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRnIG9mIHByZXByb2Nlc3NlZERhdGFHcm91cHMpIHtcbiAgICAgICAgICAgIGlmIChkZy5wYXJlbnRUYXNrUmVmSWQgIT09IGRhc2hib2FyZFRhc2tSZWZGaWVsZC5zdHJpbmdJZCkge1xuICAgICAgICAgICAgICAgIG5vbkRhc2hib2FyZERhdGFHcm91cHMucHVzaChkZyk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGlsZXMuaGFzKGRnLnBhcmVudFRhc2tJZCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlID0gdGlsZXMuZ2V0KGRnLnBhcmVudFRhc2tJZCk7XG4gICAgICAgICAgICAgICAgdGlsZS5kYXRhR3JvdXBzLnB1c2goZGcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aWxlcy5zZXQoZGcucGFyZW50VGFza0lkLCB7ZGF0YUdyb3VwczogW2RnXX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCByZGcgb2YgcmF3RGF0YUdyb3Vwcykge1xuICAgICAgICAgICAgaWYgKHJkZy5wYXJlbnRUYXNrSWQgPT09IGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uLnBhcmVudFRhc2tJZFxuICAgICAgICAgICAgICAgICYmIHJkZy5wYXJlbnRUcmFuc2l0aW9uSWQgPT09IGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uLnBhcmVudFRyYW5zaXRpb25JZFxuICAgICAgICAgICAgICAgICYmIHJkZy5wYXJlbnRDYXNlSWQgPT09IGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uLnBhcmVudENhc2VJZFxuICAgICAgICAgICAgICAgICYmIHJkZy5wYXJlbnRUYXNrUmVmSWQgPT09IGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uLnBhcmVudFRhc2tSZWZJZFxuICAgICAgICAgICAgICAgICYmIHJkZy5uZXN0aW5nTGV2ZWwgPT09IGRhc2hib2FyZFBhcmVudEluZm9ybWF0aW9uLm5lc3RpbmdMZXZlbCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsZWQgb2YgcmRnLmZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZWQuc3RyaW5nSWQgPT09IFRhc2tSZWZEYXNoYm9hcmRDb25zdGFudHMuREFTSEJPQVJEX0NPTFMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZFRhc2tSZWZGaWVsZC5kYXNoYm9hcmRDb2xzID0gZmlsZWQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZWQuc3RyaW5nSWQgPT09IFRhc2tSZWZEYXNoYm9hcmRDb25zdGFudHMuREFTSEJPQVJEX1JPV1MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhc2hib2FyZFRhc2tSZWZGaWVsZC5kYXNoYm9hcmRSb3dzID0gZmlsZWQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXNoYm9hcmRUYXNrUmVmRmllbGQuZGFzaGJvYXJkVGlsZXMgPSBBcnJheS5mcm9tKHRpbGVzLnZhbHVlcygpKTtcbiAgICAgICAgcmV0dXJuIG5vbkRhc2hib2FyZERhdGFHcm91cHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIGxheW91dCBkYXRhIGZvciBhIHNpbmdsZSBkYXRhIGdyb3VwIHdpdGggZ3JpZCBsYXlvdXQuIFRoZSByZXN1bHRpbmcgbGF5b3V0IGlzIHNhdmVkIGludG8gdGhlIGlucHV0IG9iamVjdHMuXG4gICAgICogQHBhcmFtIGRhdGFHcm91cCB0aGUgZGF0YSBncm91cCB0aGF0IHNob3VsZCBiZSBsYWlkIG91dCBpbnRvIGEgZ3JpZFxuICAgICAqIEBwYXJhbSBzdWJncmlkIHRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgY29udGV4dCBvZiB0aGUgY29tcHV0ZWQgbGF5b3V0aW5nIHVuaXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29tcHV0ZUdyaWRMYXlvdXQoZGF0YUdyb3VwOiBEYXRhR3JvdXAsIHN1YmdyaWQ6IFN1YmdyaWQpIHtcbiAgICAgICAgY29uc3QgbG9jYWxHcmlkOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IFtdO1xuICAgICAgICBkYXRhR3JvdXAuZmllbGRzID0gWy4uLmRhdGFHcm91cC5maWVsZHNdLnNvcnQoKGYxICwgZjIpID0+IGYxLmxheW91dC55ID09PSBmMi5sYXlvdXQueSA/IGYxLmxheW91dC54IC0gZjIubGF5b3V0LnggOiBmMS5sYXlvdXQueSAtIGYyLmxheW91dC55KVxuICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZvckVhY2goZGF0YUZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmICghZGF0YUZpZWxkLmxvY2FsTGF5b3V0XG4gICAgICAgICAgICAgICAgfHwgZGF0YUZpZWxkLmxvY2FsTGF5b3V0LnggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIHx8IGRhdGFGaWVsZC5sb2NhbExheW91dC55ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB8fCAhZGF0YUZpZWxkLmxvY2FsTGF5b3V0LnJvd3NcbiAgICAgICAgICAgICAgICB8fCAhZGF0YUZpZWxkLmxvY2FsTGF5b3V0LmNvbHMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBZb3UgY2Fubm90IHVzZSAnZ3JpZCcgbGF5b3V0IHdpdGhvdXQgc3BlY2lmeWluZyB0aGUgbGF5b3V0IG9mIHRoZSBkYXRhIGZpZWxkcyAoZmllbGQgSUQ6ICR7ZGF0YUZpZWxkLnN0cmluZ0lkfSlgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2hpbGUgKGxvY2FsR3JpZC5sZW5ndGggPCBkYXRhRmllbGQubG9jYWxMYXlvdXQueSArIGRhdGFGaWVsZC5sb2NhbExheW91dC5yb3dzKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxHcmlkLnB1c2godGhpcy5uZXdHcmlkUm93KHN1YmdyaWQuY29scykpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaWVsZEVsZW1lbnQgPSBzdWJncmlkLmFkZEZpZWxkKGRhdGFGaWVsZCwgdGhpcy5fZmllbGRDb252ZXJ0ZXIucmVzb2x2ZVR5cGUoZGF0YUZpZWxkKSk7XG4gICAgICAgICAgICB0aGlzLm9jY3VweVNwYWNlKGxvY2FsR3JpZCwgZGF0YUZpZWxkLmxvY2FsTGF5b3V0LnksIGRhdGFGaWVsZC5sb2NhbExheW91dC54LFxuICAgICAgICAgICAgICAgIGRhdGFGaWVsZC5sb2NhbExheW91dC5jb2xzLCBmaWVsZEVsZW1lbnQuZ3JpZEFyZWFJZCwgZGF0YUZpZWxkLmxvY2FsTGF5b3V0LnJvd3MpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbGxhcHNlR3JpZEVtcHR5U3BhY2UobG9jYWxHcmlkLCBkYXRhR3JvdXAubGF5b3V0LCBzdWJncmlkKTtcblxuICAgICAgICBsb2NhbEdyaWQuZm9yRWFjaChsb2NhbEdyaWRSb3cgPT4gc3ViZ3JpZC5hZGRSb3cobG9jYWxHcmlkUm93KSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXBwbGllcyB0aGUgZW1wdHkgcm93IHJlbW92YWwgYW5kIGZpZWxkIGNvbXBhY3RpbmcgcnVsZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGxheW91dCBjb25maWd1cmF0aW9uLlxuICAgICAqXG4gICAgICogVGhlIGlucHV0IGdyaWQgaXMgbW9kaWZpZWQgaW4gcGxhY2UuXG4gICAgICogQHBhcmFtIGdyaWQgdGhlIHN0YXRlIG9mIHRoZSBncmlkIHRoYXQgc2hvdWxkIGJlIG1vZGlmaWVkXG4gICAgICogQHBhcmFtIGxheW91dCBjb25maWd1cmF0aW9uIG9mIHRoZSBhcHBsaWVkIGNvbXBhY3RpbmcgcnVsZXNcbiAgICAgKiBAcGFyYW0gc3ViZ3JpZCB0aGUgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGNvbnRleHQgb2YgdGhlIGNvbXB1dGVkIGxheW91dGluZyB1bml0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGNvbGxhcHNlR3JpZEVtcHR5U3BhY2UoZ3JpZDogQXJyYXk8QXJyYXk8c3RyaW5nPj4sIGxheW91dDogRGF0YUdyb3VwTGF5b3V0LCBzdWJncmlkOiBTdWJncmlkKSB7XG4gICAgICAgIGNvbnN0IGhpZGVSb3dzID0gbGF5b3V0LmhpZGVFbXB0eVJvd3MgPz8gdGhpcy5fZGVmYXVsdEhpZGVFbXB0eVJvd3M7XG5cbiAgICAgICAgaWYgKGhpZGVSb3dzID09PSBEYXRhR3JvdXBIaWRlRW1wdHlSb3dzLkFMTCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVFbXB0eVJvd3MoZ3JpZCk7XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGxheW91dC5jb21wYWN0RGlyZWN0aW9uID8/IHRoaXMuX2RlZmF1bHRDb21wYWN0RGlyZWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIERhdGFHcm91cENvbXBhY3QuVVA6XG4gICAgICAgICAgICAgICAgdGhpcy5jb21wYWN0RmllbGRzVXAoZ3JpZCwgaGlkZVJvd3MsIHN1YmdyaWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYW55IGVsZW1lbnQgYXMgZmFyIFVQIGFzIGl0IGNhbiBnby4gRWxlbWVudHMgdGhhdCB3ZXJlIG9yaWdpbmFsbHkgZGVjbGFyZWQgaW4gdGhlIHNhbWUgcm93IG1pZ2h0IGVuZCB1cCBpbiBkaWZmZXJlbnQgcm93cy5cbiAgICAgKiBSZXN1bHRpbmcgdHJhaWxpbmcgZW1wdHkgcm93cyBhcmUgcmVtb3ZlZC5cbiAgICAgKlxuICAgICAqIFRoZSBpbnB1dCBncmlkIGlzIG1vZGlmaWVkIGluIHBsYWNlLlxuICAgICAqIEBwYXJhbSBncmlkIHRoZSBzdGF0ZSBvZiB0aGUgZ3JpZCB0aGF0IHNob3VsZCBiZSBtb2RpZmllZFxuICAgICAqIEBwYXJhbSBoaWRlUm93cyBjb25maWd1cmF0aW9uIGZvciBlbXB0eSByb3cgcmVtb3ZhbCBkdXJpbmcgdGhlIGNvbXBhY3RpbmcgcHJvY2Vzc1xuICAgICAqIEBwYXJhbSBzdWJncmlkIHRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgY29udGV4dCBvZiB0aGUgY29tcHV0ZWQgbGF5b3V0aW5nIHVuaXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29tcGFjdEZpZWxkc1VwKGdyaWQ6IEFycmF5PEFycmF5PHN0cmluZz4+LCBoaWRlUm93czogRGF0YUdyb3VwSGlkZUVtcHR5Um93cywgc3ViZ3JpZDogU3ViZ3JpZCkge1xuICAgICAgICBmb3IgKGxldCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgZ3JpZC5sZW5ndGg7IHJvd0luZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IGdyaWRbcm93SW5kZXhdO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgcm93Lmxlbmd0aDsgY29sdW1uSW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGlmIChyb3dbY29sdW1uSW5kZXhdICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBsZXQgZm91bmRFbGVtZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IGZvdW5kRWxlbWVudFJvd0luZGV4ID0gcm93SW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIGZvciAoOyBmb3VuZEVsZW1lbnRSb3dJbmRleCA8IGdyaWQubGVuZ3RoOyBmb3VuZEVsZW1lbnRSb3dJbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncmlkW2ZvdW5kRWxlbWVudFJvd0luZGV4XVtjb2x1bW5JbmRleF0gIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEVsZW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFmb3VuZEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbkluZGV4ID4gMCAmJiBncmlkW2ZvdW5kRWxlbWVudFJvd0luZGV4XVtjb2x1bW5JbmRleCAtIDFdID09PSBncmlkW2ZvdW5kRWxlbWVudFJvd0luZGV4XVtjb2x1bW5JbmRleF0pIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudERpbWVuc2lvbnMgPSB0aGlzLmdldEVsZW1lbnREaW1lbnNpb25zKGdyaWQsIGNvbHVtbkluZGV4LCBmb3VuZEVsZW1lbnRSb3dJbmRleCwgc3ViZ3JpZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0FyZWFFbXB0eShncmlkLCBjb2x1bW5JbmRleCwgcm93SW5kZXgsIGVsZW1lbnREaW1lbnNpb25zLndpZHRoLCBmb3VuZEVsZW1lbnRSb3dJbmRleCAtIHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZ3JpZFtmb3VuZEVsZW1lbnRSb3dJbmRleF1bY29sdW1uSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9jY3VweVNwYWNlKGdyaWQsIGZvdW5kRWxlbWVudFJvd0luZGV4LCBjb2x1bW5JbmRleCwgZWxlbWVudERpbWVuc2lvbnMud2lkdGgsICcnLCBlbGVtZW50RGltZW5zaW9ucy5oZWlnaHQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vY2N1cHlTcGFjZShncmlkLCByb3dJbmRleCwgY29sdW1uSW5kZXgsIGVsZW1lbnREaW1lbnNpb25zLndpZHRoLCBlbGVtZW50LCBlbGVtZW50RGltZW5zaW9ucy5oZWlnaHQsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaGlkZVJvd3MgIT09IERhdGFHcm91cEhpZGVFbXB0eVJvd3MuTk9ORSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugb25seSBjaGVjayB0aGUgcm93cyBwb3RlbnRpYWxseSBjbGVhcmVkIGJ5IG1vdmluZyB0aGUgZ3JpZCBlbGVtZW50IHVwXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUVtcHR5Um93cyhncmlkLCBmb3VuZEVsZW1lbnRSb3dJbmRleCwgZm91bmRFbGVtZW50Um93SW5kZXggKyBlbGVtZW50RGltZW5zaW9ucy5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyByb3dzIGZyb20gdGhlIGdyaWQgdGhhdCBvbmx5IGNvbnRhaW4gZW1wdHkgZWxlbWVudHMgKGFyZSBlbXB0eSkuIFRoZSBncmlkIGlzIG1vZGlmaWVkIGluIHBsYWNlLlxuICAgICAqIEBwYXJhbSBncmlkIHRoZSBncmlkIHRoYXQgc2hvdWxkIGhhdmUgaXQncyBlbXB0eSByb3dzIHJlbW92ZWRcbiAgICAgKiBAcGFyYW0gZmlyc3RSb3cgdGhlIDAgYmFzZWQgaW5kZXggb2YgdGhlIGZpcnN0IHJvdyB0aGF0IHNob3VsZCBiZSBjaGVja2VkLiBVc2UgMCB0byBzdGFydCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdyaWQuXG4gICAgICpcbiAgICAgKiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgdGhlIGdyaWQgd2lsbCBiZSBjaGVja2VkIGZyb20gdGhlIGZpcnN0IHJvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsYXN0Um93IHRoZSAwIGJhc2VkIGluZGV4IG9mIHRoZSByb3cgd2hlcmUgdGhlIGNoZWNraW5nIHNob3VsZCBlbmQuIFRoZSByb3cgd2l0aCB0aGlzIGluZGV4IGlzIG5vdCBjaGVja2VkLlxuICAgICAqXG4gICAgICogSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQgdGhlIGVudGlyZSBncmlkIGZyb20gdGhlIGBmaXJzdFJvd2Agd2lsbCBiZSBjaGVja2VkLlxuICAgICAqXG4gICAgICogSWYgYSB2YWx1ZSB0aGF0IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGBmaXJzdFJvd2AgaXMgcHJvdmlkZWQgbm8gY2hlY2tzIHdpbGwgYmUgcHJlZm9ybWVkLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW1vdmVFbXB0eVJvd3MoZ3JpZDogQXJyYXk8QXJyYXk8c3RyaW5nPj4sIGZpcnN0Um93ID0gMCwgbGFzdFJvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkge1xuICAgICAgICBsZXQgaSA9IGZpcnN0Um93O1xuICAgICAgICB3aGlsZSAoaSA8IGdyaWQubGVuZ3RoICYmIGkgPCBsYXN0Um93KSB7XG4gICAgICAgICAgICBpZiAoZ3JpZFtpXS5ldmVyeShlbGVtZW50ID0+IGVsZW1lbnQgPT09ICcnKSkge1xuICAgICAgICAgICAgICAgIGdyaWQuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHRoZSBkaW1lbnNpb25zIG9mIHRoZSBlbGVtZW50IGluIHRoZSBncmlkIHdpdGggaXRzIHRvcC1sZWZ0IGNvcm5lciBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uXG4gICAgICogQHBhcmFtIGdyaWQgdGhlIGdyaWQgb2YgZWxlbWVudHNcbiAgICAgKiBAcGFyYW0geCB0aGUgWCBjb29yZGluYXRlIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRzIHRvcC1sZWZ0IGNvcm5lclxuICAgICAqIEBwYXJhbSB5IHRoZSBZIGNvb3JkaW5hdGUgb2YgdGhlIGRlc2lyZWQgZWxlbWVudHMgdG9wLWxlZnQgY29ybmVyXG4gICAgICogQHBhcmFtIHN1YmdyaWQgdGhlIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBjb250ZXh0IG9mIHRoZSBjb21wdXRlZCBsYXlvdXRpbmcgdW5pdFxuICAgICAqIEByZXR1cm5zIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IG9mIHRoZSBzcGVjaWZpZWQgZWxlbWVudFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRFbGVtZW50RGltZW5zaW9ucyhncmlkOiBBcnJheTxBcnJheTxzdHJpbmc+PiwgeDogbnVtYmVyLCB5OiBudW1iZXIsIHN1YmdyaWQ6IFN1YmdyaWQpOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZ3JpZFt5XVt4XTtcbiAgICAgICAgbGV0IHdpZHRoID0gMTtcbiAgICAgICAgd2hpbGUgKHggKyB3aWR0aCA8IHN1YmdyaWQuY29scyAmJiBncmlkW3ldW3ggKyB3aWR0aF0gPT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHdpZHRoKys7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGhlaWdodCA9IDE7XG4gICAgICAgIHdoaWxlICh5ICsgaGVpZ2h0IDwgZ3JpZC5sZW5ndGggJiYgZ3JpZFt5ICsgaGVpZ2h0XVt4XSA9PT0gZWxlbWVudCkge1xuICAgICAgICAgICAgaGVpZ2h0Kys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt3aWR0aCwgaGVpZ2h0fTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBhcmVhIGluIHRoZSBncmlkIGNvbnRhaW5zIG5vIGVsZW1lbnRzLCBvciBub3RcbiAgICAgKiBAcGFyYW0gZ3JpZCB0aGUgZ3JpZCBvZiBlbGVtZW50c1xuICAgICAqIEBwYXJhbSB4IHRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIHRlc3RlZCBhcmVhcyB0b3AtbGVmdCBjb3JuZXJcbiAgICAgKiBAcGFyYW0geSB0aGUgWSBjb29yZGluYXRlIG9mIHRoZSB0ZXN0ZWQgYXJlYXMgdG9wLWxlZnQgY29ybmVyXG4gICAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCBvZiB0aGUgdGVzdGVkIGFyZWFcbiAgICAgKiBAcGFyYW0gaGVpZ2h0IHRoZSBoZWlnaHQgb2YgdGhlIHRlc3RlZCBhcmVhXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGlzQXJlYUVtcHR5KGdyaWQ6IEFycmF5PEFycmF5PHN0cmluZz4+LCB4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHk7IGkgPCB5ICsgaGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSB4OyBqIDwgeCArIHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZFtpXVtqXSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlcyB0aGUgbGF5b3V0IGRhdGEgZm9yIGEgc2luZ2xlIGRhdGEgZ3JvdXAgd2l0aCBmbG93IGxheW91dC4gVGhlIHJlc3VsdGluZyBsYXlvdXQgaXMgc2F2ZWQgaW50byB0aGUgaW5wdXQgb2JqZWN0cy5cbiAgICAgKiBAcGFyYW0gZGF0YUdyb3VwIHRoZSBkYXRhIGdyb3VwIHRoYXQgc2hvdWxkIGJlIGxhaWQgb3V0IGludG8gYSBncmlkIHVzaW5nIHRoZSBmbG93IGFsZ29yaXRobVxuICAgICAqIEBwYXJhbSBzdWJncmlkIHRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgY29udGV4dCBvZiB0aGUgY29tcHV0ZWQgbGF5b3V0aW5nIHVuaXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29tcHV0ZUZsb3dMYXlvdXQoZGF0YUdyb3VwOiBEYXRhR3JvdXAsIHN1YmdyaWQ6IFN1YmdyaWQpIHtcbiAgICAgICAgdGhpcy5mbG93RmllbGRzKGRhdGFHcm91cCwgc3ViZ3JpZCwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZXMgdGhlIGxheW91dCBkYXRhIGZvciBhIHNpbmdsZSBkYXRhIGdyb3VwIHdpdGggbGVnYWN5IGxheW91dC4gVGhlIHJlc3VsdGluZyBsYXlvdXQgaXMgc2F2ZWQgaW50byB0aGUgaW5wdXQgb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIFRoZSBsZWdhY3kgbGF5b3V0IGZvcmNlcyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdG8gYmUgNCBhbmQgbG9ncyBhIHdhcm5pbmcgaWYgdGhpcyB3YXMgbm90IHRoZSBjYXNlLlxuICAgICAqIEBwYXJhbSBkYXRhR3JvdXAgdGhlIGRhdGEgZ3JvdXAgdGhhdCBzaG91bGQgYmUgbGFpZCBvdXQgaW50byBhIGdyaWQgdXNpbmcgdGhlIGxlZ2FjeSBhbGdvcml0aG0gdXNlZCBpbiBOQUUgdmVyc2lvbnMgPCA0LjAuMFxuICAgICAqIEBwYXJhbSBzdWJncmlkIHRoZSBvYmplY3QgdGhhdCBob2xkcyB0aGUgY29udGV4dCBvZiB0aGUgY29tcHV0ZWQgbGF5b3V0aW5nIHVuaXRcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgY29tcHV0ZUxlZ2FjeUxheW91dChkYXRhR3JvdXA6IERhdGFHcm91cCwgc3ViZ3JpZDogU3ViZ3JpZCkge1xuICAgICAgICBpZiAoc3ViZ3JpZC5jb2xzICE9PSA0KSB7XG4gICAgICAgICAgICBzdWJncmlkLmNvbHMgPSA0O1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oYFRhc2sgd2l0aCBpZCAnJHt0aGlzLnRhc2tDb250ZW50U2VydmljZS50YXNrLnN0cmluZ0lkfScgaGFzIGEgZGF0YSBncm91cCB3aXRoIGxlZ2FjeSBsYXlvdXQgd2l0aCBhIGBcbiAgICAgICAgICAgICAgICArIGBub24tZGVmYXVsdCBudW1iZXIgb2YgY29sdW1ucy4gSWYgeW91IHdhbnQgdG8gdXNlIGEgbGF5b3V0IHdpdGggZGlmZmVyZW50IG51bWJlciBvZiBjb2x1bW5zIHRoYW4gMiB1c2UgYSBkaWZmZXJlbnQgYFxuICAgICAgICAgICAgICAgICsgYGxheW91dCB0eXBlIGluc3RlYWQuYCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZsb3dGaWVsZHMoZGF0YUdyb3VwLCBzdWJncmlkLCAyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMYXlzIG91dCB0aGUgZmllbGRzIGZyb20gbGVmdCB0byByaWdodCwgZnJvbSB0b3AgdG8gYm90dG9tLiBJZiB0aGUgd2lkdGggaXMgZ3JlYXRlciB0aGFuIDEgYW5kIHRoZSBibG9jayBvZiBmbG93ZWQgZmllbGRzIGRvZXNuJ3QgZml0XG4gICAgICogbmVhdGx5IGludG8gdGhlIGNvbHVtbnMgKGlmIHRoZSB3aWR0aCBvZiBhIHNpbmdsZSBmaWVsZCBpcyBub3QgYSBkaXZpc29yIG9mIGNvbHVtbiBjb3VudCksIHRoZW4gdGhlIGVudGlyZSBibG9jayBvZiBmaWVsZHMgaXNcbiAgICAgKiBsZWZ0IGFsaWduZWQuIFRoZSBsYXN0IHJvdyBvZiBmaWVsZHMgaXMgYWxpZ25lZCB0byB0aGUgbGVmdCwgY2VudGVyIG9yIHJpZ2h0IGJhc2VkIG9uIHRoZSBkYXRhIGdyb3VwcyBwcm9wZXJ0eS5cbiAgICAgKiBJZiB0aGUgbGFzdCByb3cgY2Fubm90IGJlIGFsaWduZWQgdG8gdGhlIGV4YWN0IGNlbnRlciBpdCBpcyBvZmZzZXQgb25lIGdyaWQgdGlsZSB0byB0aGUgbGVmdC5cbiAgICAgKiBAcGFyYW0gZGF0YUdyb3VwIHRoZSBkYXRhIGdyb3VwIHRoYXQgc2hvdWxkIGJlIGxhaWQgb3V0IGludG8gYSBncmlkXG4gICAgICogQHBhcmFtIHN1YmdyaWQgdGhlIG9iamVjdCB0aGF0IGhvbGRzIHRoZSBjb250ZXh0IG9mIHRoZSBjb21wdXRlZCBsYXlvdXRpbmcgdW5pdFxuICAgICAqIEBwYXJhbSBmaWVsZFdpZHRoIHRoZSBudW1iZXIgb2YgZ3JpZCB0aWxlcywgdGhhdCBzaG91bGQgYmUgb2NjdXBpZWQgYnkgZWFjaCBmaWVsZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBmbG93RmllbGRzKGRhdGFHcm91cDogRGF0YUdyb3VwLCBzdWJncmlkOiBTdWJncmlkLCBmaWVsZFdpZHRoOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgZmllbGRzUGVyUm93ID0gTWF0aC5mbG9vcihzdWJncmlkLmNvbHMgLyBmaWVsZFdpZHRoKTtcbiAgICAgICAgY29uc3QgbWF4WFBvc2l0aW9uID0gZmllbGRXaWR0aCAqIChmaWVsZHNQZXJSb3cgLSAxKTtcblxuICAgICAgICBsZXQgeFBvc2l0aW9uID0gMDtcbiAgICAgICAgY29uc3QgbG9jYWxHcmlkOiBBcnJheTxBcnJheTxzdHJpbmc+PiA9IFtdO1xuICAgICAgICBkYXRhR3JvdXAuZmllbGRzLmZvckVhY2goKGRhdGFGaWVsZCwgZGF0YUZpZWxkQ291bnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRWxlbWVudCA9IHN1YmdyaWQuYWRkRmllbGQoZGF0YUZpZWxkLCB0aGlzLl9maWVsZENvbnZlcnRlci5yZXNvbHZlVHlwZShkYXRhRmllbGQpKTtcbiAgICAgICAgICAgIGlmIChkYXRhR3JvdXAuc3RyZXRjaCkge1xuICAgICAgICAgICAgICAgIHN1YmdyaWQuYWRkUm93KHRoaXMubmV3R3JpZFJvdyhzdWJncmlkLmNvbHMsIGZpZWxkRWxlbWVudC5ncmlkQXJlYUlkKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBjb250aW51ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZWxzZVxuICAgICAgICAgICAgaWYgKHhQb3NpdGlvbiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsR3JpZC5wdXNoKHRoaXMubmV3R3JpZFJvdyhzdWJncmlkLmNvbHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh4UG9zaXRpb24gPT09IDAgJiYgdGhpcy5pc0xhc3RSb3coZGF0YUZpZWxkQ291bnQsIGRhdGFHcm91cCwgZmllbGRzUGVyUm93KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkc0luTGFzdFJvdyA9IGRhdGFHcm91cC5maWVsZHMubGVuZ3RoICUgZmllbGRzUGVyUm93O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1dpZHRoID0gbWF4WFBvc2l0aW9uICsgZmllbGRXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YUdyb3VwLmFsaWdubWVudCA9PT0gRGF0YUdyb3VwQWxpZ25tZW50LkVORCkge1xuICAgICAgICAgICAgICAgICAgICB4UG9zaXRpb24gPSByb3dXaWR0aCAtIGZpZWxkV2lkdGggKiBmaWVsZHNJbkxhc3RSb3c7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhR3JvdXAuYWxpZ25tZW50ID09PSBEYXRhR3JvdXBBbGlnbm1lbnQuQ0VOVEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIHhQb3NpdGlvbiA9IE1hdGguZmxvb3IoKHJvd1dpZHRoIC0gZmllbGRzSW5MYXN0Um93ICogZmllbGRXaWR0aCkgLyAyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9jY3VweVNwYWNlKGxvY2FsR3JpZCwgbG9jYWxHcmlkLmxlbmd0aCAtIDEsIHhQb3NpdGlvbiwgZmllbGRXaWR0aCwgZmllbGRFbGVtZW50LmdyaWRBcmVhSWQpO1xuXG4gICAgICAgICAgICB4UG9zaXRpb24gKz0gZmllbGRXaWR0aDtcbiAgICAgICAgICAgIGlmICh4UG9zaXRpb24gPiBtYXhYUG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB4UG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9jYWxHcmlkLmZvckVhY2gocm93ID0+IHN1YmdyaWQuYWRkUm93KHJvdykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB3aWR0aCB3aWR0aCBvZiB0aGUgcm93XG4gICAgICogQHBhcmFtIGNvbnRlbnQgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZmlsbCBhbGwgZWxlbWVudHMgaW4gdGhlIHJvd1xuICAgICAqL1xuICAgIHByb3RlY3RlZCBuZXdHcmlkUm93KHdpZHRoOiBudW1iZXIsIGNvbnRlbnQgPSAnJyk6IEFycmF5PHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gQXJyYXkod2lkdGgpLmZpbGwoY29udGVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsbHMgdGhlIHNwZWNpZmllZCByZWN0YW5ndWxhciBhcmVhIHdpdGggdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgcHJvdmlkZWQgZ3JpZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBzcGVjaWZpZWQgYXJlYSBjb250YWlucyB2YWx1ZXMgb3RoZXIgdGhhbiB0aGUgZW1wdHkgc3RyaW5nIGFuIGVycm9yIHdpbGwgYmUgdGhyb3duLlxuICAgICAqIEBwYXJhbSBncmlkIHRoZSBncmlkIHRoYXQgc2hvdWxkIGJlIG1vZGlmaWVkXG4gICAgICogQHBhcmFtIHkgdGhlIDAgYmFzZWQgcm93IGluZGV4IG9mIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGZpbGxlZCBhcmVhXG4gICAgICogQHBhcmFtIHggdGhlIDAgYmFzZWQgY29sdW1uIGluZGV4IG9mIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGZpbGxlZCBhcmVhXG4gICAgICogQHBhcmFtIHdpZHRoIHRoZSB3aWR0aCBvZiB0aGUgZmlsbGVkIGFyZWFcbiAgICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIHRoYXQgaXMgc2V0IGludG8gZXZlcnkgY2VsbCBvZiB0aGUgZ3JpZCBpbnNpZGUgdGhlIHNwZWNpZmllZCBhcmVhXG4gICAgICogQHBhcmFtIGhlaWdodCB0aGUgaGVpZ2h0IG9mIHRoZSBmaWxsZWQgYXJlYVxuICAgICAqIEBwYXJhbSBjaGVja09jY3VwYW50cyB3aGV0aGVyIHRoZSBmaWxsZWQgYXJlYSBzaG91bGQgYmUgY2hlY2tlZCBmb3Igb3RoZXIgZWxlbWVudHMuXG4gICAgICogSWYgYSBjaGVjayBpcyBwZXJmb3JtZWQgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24gaWYgZWxlbWVudHMgYXJlIGZvdW5kLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvY2N1cHlTcGFjZShncmlkOiBBcnJheTxBcnJheTxzdHJpbmc+PiwgeTogbnVtYmVyLCB4OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcsIGhlaWdodCA9IDEsIGNoZWNrT2NjdXBhbnRzID0gdHJ1ZSkge1xuICAgICAgICBmb3IgKGxldCBqID0geTsgaiA8IHkgKyBoZWlnaHQ7IGorKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHg7IGkgPCB4ICsgd2lkdGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjaGVja09jY3VwYW50cyAmJiBncmlkW2pdW2ldICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBwbGFjZSBlbGVtZW50ICR7dmFsdWV9IGludG8gdGhlIGdyaWQgbGF5b3V0LCBiZWNhdXNlIGl0J3Mgc3BhY2UgKHg6ICR7aX0sIHk6ICR7an0pYCArXG4gICAgICAgICAgICAgICAgICAgICAgICBgIGlzIGFscmVhZHkgb2NjdXBpZWQgYnkgYW5vdGhlciBlbGVtZW50ICgke2dyaWRbal1baV19KWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBncmlkW2pdW2ldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gaW5kZXggdGhlIGluZGV4IG9mIHRoZSBjaGVja2VkIGVsZW1lbnQgd2l0aGluIGl0cyBkYXRhIGdyb3VwXG4gICAgICogQHBhcmFtIGRhdGFHcm91cCB0aGUgY2hlY2tlZCBkYXRhIGdyb3VwXG4gICAgICogQHBhcmFtIGZpZWxkc1BlclJvdyB0aGUgbnVtYmVyIG9mIGZpZWxkcyB0aGF0IGlzIHJlcXVpcmVkIHRvIGZpbGwgYW4gZW50aXJlIHJvd1xuICAgICAqIEByZXR1cm5zIHdoZXRoZXIgdGhlIGZpZWxkIGF0IHRoZSBnaXZlbiBpbmRleCBpcyB3aXRoaW4gdGhlIGxhc3Qgcm93IG9mIGVsZW1lbnRzIG9mIHRoZSBwcm92aWRlZCBkYXRhIGdyb3VwLlxuICAgICAqIE5vdGUgdGhhdCBpZiB0aGUgbGFzdCByb3cgY29udGFpbnMgZW5vdWdoIGVsZW1lbnRzIHRvIGJlIGNvbXBsZXRlbHkgZmlsbGVkIHRoaXMgbWV0aG9kIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNMYXN0Um93KGluZGV4OiBudW1iZXIsIGRhdGFHcm91cDogRGF0YUdyb3VwLCBmaWVsZHNQZXJSb3c6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gaW5kZXggKyBmaWVsZHNQZXJSb3cgPj0gZGF0YUdyb3VwLmZpZWxkcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVzdHJveXMgdGhlIHByZXZpb3VzIGNvbnRlbnQgYW5kIHB1c2hlcyB0aGUgbmV3IGNvbnRlbnQgaW50byB0aGUgc3RyZWFtXG4gICAgICogQHBhcmFtIGNvbnRlbnQgdGhlIG5ldyBjb250ZW50XG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoY29udGVudDogQXJyYXk8U3ViZ3JpZD4gPSBbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlJC52YWx1ZS5mb3JFYWNoKHN1YmdyaWQgPT4gc3ViZ3JpZC5kZXN0cm95KCkpO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlJC5uZXh0KGNvbnRlbnQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVTdWJncmlkSWQoZGF0YUdyb3VwOiBEYXRhR3JvdXApOiBzdHJpbmcge1xuICAgICAgICBsZXQgaWRCYXNlOiBzdHJpbmc7XG4gICAgICAgIGlmIChkYXRhR3JvdXAucGFyZW50VGFza0lkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlkQmFzZSA9IFtkYXRhR3JvdXAucGFyZW50VGFza0lkLCBkYXRhR3JvdXAucGFyZW50VGFza1JlZklkLCBkYXRhR3JvdXAubmVzdGluZ0xldmVsXS5qb2luKCcjJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZEJhc2UgPSAncm9vdCc7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlkID0gaWRCYXNlO1xuICAgICAgICB3aGlsZSAodGhpcy5fZXhpc3RpbmdTdWJncmlkSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgIGlkID0gaWRCYXNlICsgdGhpcy5fc3ViZ3JpZElkQ291bnRlci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXhpc3RpbmdTdWJncmlkSWRzLmFkZChpZCk7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJhY2tCeVN1YmdyaWRGbiA9IChpbmRleDogbnVtYmVyLCBzdWJncmlkOiBTdWJncmlkKSA9PiBzdWJncmlkLnN1YmdyaWRJZDtcblxuICAgIHB1YmxpYyB0cmFja0J5Rm4gPSAoaW5kZXg6IG51bWJlciwgZWxlbWVudDogRGF0YWZpZWxkR3JpZExheW91dEVsZW1lbnQpID0+IHRoaXMudHJhY2tCeURhdGFmaWVsZHMoaW5kZXgsIGVsZW1lbnQpO1xuXG4gICAgcHJvdGVjdGVkIHRyYWNrQnlEYXRhZmllbGRzKGluZGV4OiBudW1iZXIsIGVsZW1lbnQ6IERhdGFmaWVsZEdyaWRMYXlvdXRFbGVtZW50KSB7XG4gICAgICAgIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRhc2tFbGVtZW50VHlwZS5CTEFOSzpcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5ncmlkQXJlYUlkICsgJy0nICsgdGhpcy50YXNrQ29udGVudFNlcnZpY2UuJHNob3VsZENyZWF0ZUNvdW50ZXIuZ2V0VmFsdWUoKTtcbiAgICAgICAgICAgIGNhc2UgVGFza0VsZW1lbnRUeXBlLkxPQURFUjpcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5ncmlkQXJlYUlkICsgJy1MLScgKyB0aGlzLnRhc2tDb250ZW50U2VydmljZS4kc2hvdWxkQ3JlYXRlQ291bnRlci5nZXRWYWx1ZSgpO1xuICAgICAgICAgICAgY2FzZSBUYXNrRWxlbWVudFR5cGUuREFUQV9HUk9VUF9USVRMRTpcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC50aXRsZSArICctJyArIHRoaXMudGFza0NvbnRlbnRTZXJ2aWNlLiRzaG91bGRDcmVhdGVDb3VudGVyLmdldFZhbHVlKCk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50Lml0ZW0uc3RyaW5nSWQgKyAnLScgKyB0aGlzLnRhc2tDb250ZW50U2VydmljZS4kc2hvdWxkQ3JlYXRlQ291bnRlci5nZXRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNob3VsZFJlc29sdmVUYXNrUmVmRGF0YShkYXRhUmVmOiBEYXRhRmllbGQ8YW55Pik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoISFkYXRhUmVmLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzUmVxdWlyZWRDb21wb25lbnRQcm9wZXJ0eShkYXRhUmVmLmNvbXBvbmVudCwgXCJyZXNvbHZlX2RhdGFcIiwgXCJ0cnVlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYXNSZXF1aXJlZENvbXBvbmVudFByb3BlcnR5KGNvbXBvbmVudDogRGF0YVJlZkNvbXBvbmVudCwgcHJvcGVydHlOYW1lOiBzdHJpbmcsIHByb3BlcnR5VmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIGNvbXBvbmVudCAhPSBudWxsXG4gICAgICAgICYmIGNvbXBvbmVudC5wcm9wZXJ0aWVzICE9IG51bGxcbiAgICAgICAgJiYgISFjb21wb25lbnQucHJvcGVydGllc1twcm9wZXJ0eU5hbWVdXG4gICAgICAgICYmIGNvbXBvbmVudC5wcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPT09IHByb3BlcnR5VmFsdWU7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,27 @@
1
+ import { extractFieldValueFromData } from "../navigation/utility/navigation-item-task-utility-methods";
2
+ import { GroupNavigationConstants } from "../navigation/model/group-navigation-constants";
3
+ export function navigationItemCaseViewDefaultHeadersFactory(navigationItemTaskData) {
4
+ return navigationItemDefaultHeadersFactory(navigationItemTaskData, GroupNavigationConstants.ITEM_FIELD_ID_USE_CASE_DEFAULT_HEADERS, GroupNavigationConstants.ITEM_FIELD_ID_CASE_DEFAULT_HEADERS);
5
+ }
6
+ export function navigationItemTaskViewDefaultHeadersFactory(navigationItemTaskData) {
7
+ return navigationItemDefaultHeadersFactory(navigationItemTaskData, GroupNavigationConstants.ITEM_FIELD_ID_USE_TASK_DEFAULT_HEADERS, GroupNavigationConstants.ITEM_FIELD_ID_TASK_DEFAULT_HEADERS);
8
+ }
9
+ function navigationItemDefaultHeadersFactory(navigationItemTaskData, useFieldId, defaultHeadersFieldId) {
10
+ try {
11
+ const isUse = extractFieldValueFromData(navigationItemTaskData, useFieldId);
12
+ if (isUse) {
13
+ const defaultHeaders = extractFieldValueFromData(navigationItemTaskData, defaultHeadersFieldId);
14
+ if (defaultHeaders === undefined || defaultHeaders === "") {
15
+ return undefined;
16
+ }
17
+ return defaultHeaders.split(',');
18
+ }
19
+ else {
20
+ return undefined;
21
+ }
22
+ }
23
+ catch (e) {
24
+ return undefined;
25
+ }
26
+ }
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1pdGVtLWRlZmF1bHQtaGVhZGVycy1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi91dGlsaXR5L25hdmlnYXRpb24taXRlbS1kZWZhdWx0LWhlYWRlcnMtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUNyRyxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUd4RixNQUFNLFVBQVUsMkNBQTJDLENBQUMsc0JBQW1DO0lBQzNGLE9BQU8sbUNBQW1DLENBQUMsc0JBQXNCLEVBQUUsd0JBQXdCLENBQUMsc0NBQXNDLEVBQUUsd0JBQXdCLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtBQUNwTSxDQUFDO0FBRUQsTUFBTSxVQUFVLDJDQUEyQyxDQUFDLHNCQUFtQztJQUMzRixPQUFPLG1DQUFtQyxDQUFDLHNCQUFzQixFQUFFLHdCQUF3QixDQUFDLHNDQUFzQyxFQUFFLHdCQUF3QixDQUFDLGtDQUFrQyxDQUFDLENBQUE7QUFDcE0sQ0FBQztBQUVELFNBQVMsbUNBQW1DLENBQUMsc0JBQW1DLEVBQUUsVUFBa0IsRUFBRSxxQkFBNkI7SUFDL0gsSUFBSTtRQUNBLE1BQU0sS0FBSyxHQUFHLHlCQUF5QixDQUFVLHNCQUFzQixFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3JGLElBQUksS0FBSyxFQUFFO1lBQ1AsTUFBTSxjQUFjLEdBQUcseUJBQXlCLENBQVMsc0JBQXNCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztZQUN4RyxJQUFJLGNBQWMsS0FBSyxTQUFTLElBQUksY0FBYyxLQUFLLEVBQUUsRUFBRTtnQkFDdkQsT0FBTyxTQUFTLENBQUM7YUFDcEI7WUFDRCxPQUFPLGNBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEM7YUFBTTtZQUNILE9BQU8sU0FBUyxDQUFDO1NBQ3BCO0tBQ0o7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNSLE9BQU8sU0FBUyxDQUFDO0tBQ3BCO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0YUdyb3VwfSBmcm9tIFwiLi4vcmVzb3VyY2VzL2ludGVyZmFjZS9kYXRhLWdyb3Vwc1wiO1xuaW1wb3J0IHtleHRyYWN0RmllbGRWYWx1ZUZyb21EYXRhfSBmcm9tIFwiLi4vbmF2aWdhdGlvbi91dGlsaXR5L25hdmlnYXRpb24taXRlbS10YXNrLXV0aWxpdHktbWV0aG9kc1wiO1xuaW1wb3J0IHtHcm91cE5hdmlnYXRpb25Db25zdGFudHN9IGZyb20gXCIuLi9uYXZpZ2F0aW9uL21vZGVsL2dyb3VwLW5hdmlnYXRpb24tY29uc3RhbnRzXCI7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIG5hdmlnYXRpb25JdGVtQ2FzZVZpZXdEZWZhdWx0SGVhZGVyc0ZhY3RvcnkobmF2aWdhdGlvbkl0ZW1UYXNrRGF0YTogRGF0YUdyb3VwW10pOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gbmF2aWdhdGlvbkl0ZW1EZWZhdWx0SGVhZGVyc0ZhY3RvcnkobmF2aWdhdGlvbkl0ZW1UYXNrRGF0YSwgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfVVNFX0NBU0VfREVGQVVMVF9IRUFERVJTLCBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9DQVNFX0RFRkFVTFRfSEVBREVSUylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hdmlnYXRpb25JdGVtVGFza1ZpZXdEZWZhdWx0SGVhZGVyc0ZhY3RvcnkobmF2aWdhdGlvbkl0ZW1UYXNrRGF0YTogRGF0YUdyb3VwW10pOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gbmF2aWdhdGlvbkl0ZW1EZWZhdWx0SGVhZGVyc0ZhY3RvcnkobmF2aWdhdGlvbkl0ZW1UYXNrRGF0YSwgR3JvdXBOYXZpZ2F0aW9uQ29uc3RhbnRzLklURU1fRklFTERfSURfVVNFX1RBU0tfREVGQVVMVF9IRUFERVJTLCBHcm91cE5hdmlnYXRpb25Db25zdGFudHMuSVRFTV9GSUVMRF9JRF9UQVNLX0RFRkFVTFRfSEVBREVSUylcbn1cblxuZnVuY3Rpb24gbmF2aWdhdGlvbkl0ZW1EZWZhdWx0SGVhZGVyc0ZhY3RvcnkobmF2aWdhdGlvbkl0ZW1UYXNrRGF0YTogRGF0YUdyb3VwW10sIHVzZUZpZWxkSWQ6IHN0cmluZywgZGVmYXVsdEhlYWRlcnNGaWVsZElkOiBzdHJpbmcpOiBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCBpc1VzZSA9IGV4dHJhY3RGaWVsZFZhbHVlRnJvbURhdGE8Ym9vbGVhbj4obmF2aWdhdGlvbkl0ZW1UYXNrRGF0YSwgdXNlRmllbGRJZCk7XG4gICAgICAgIGlmIChpc1VzZSkge1xuICAgICAgICAgICAgY29uc3QgZGVmYXVsdEhlYWRlcnMgPSBleHRyYWN0RmllbGRWYWx1ZUZyb21EYXRhPHN0cmluZz4obmF2aWdhdGlvbkl0ZW1UYXNrRGF0YSwgZGVmYXVsdEhlYWRlcnNGaWVsZElkKTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0SGVhZGVycyA9PT0gdW5kZWZpbmVkIHx8IGRlZmF1bHRIZWFkZXJzID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0SGVhZGVycy5zcGxpdCgnLCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG59XG4iXX0=
@@ -20,6 +20,7 @@ export * from './refresh-tree';
20
20
  export * from './destroy-subscription';
21
21
  export * from './navigation-item-task-filter-factory';
22
22
  export * from './navigation-item-task-search-categories-factory';
23
+ export * from './navigation-item-default-headers-factory';
23
24
  export * from './is-empty.pipe';
24
25
  export * from './is-non-empty.pipe';
25
26
  export * from './contains.pipe';
@@ -54,4 +55,4 @@ export * from './tests/test-view-service';
54
55
  export * from './tests/mocks/mock-endpoint';
55
56
  export * from './tests/test-mock-dependencies.module';
56
57
  export * from './tests/mocks/mock-profile.service';
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvdXRpbGl0eS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxVQUFVLENBQUM7QUFFekIsV0FBVztBQUNYLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDBDQUEwQyxDQUFDO0FBQ3pELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxvQ0FBb0MsQ0FBQztBQUNuRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLG9DQUFvQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9vZi12b2lkJztcbmV4cG9ydCAqIGZyb20gJy4vbG9hZGluZy1lbWl0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vbG9hZGluZy13aXRoLWZpbHRlci1lbWl0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LWltbWVkaWF0ZS1kYXRhJztcbmV4cG9ydCAqIGZyb20gJy4vZ2V0LWZpZWxkJztcbmV4cG9ydCAqIGZyb20gJy4vY2FsbC1jaGFpbi9jYWxsLWNoYWluLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jYWxsLWNoYWluL2FmdGVyLWFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2luYXRpb24vcGFnZS1oYXMtY29udGVudCc7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2luYXRpb24vbG9hZC1hbGwtcGFnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24tcGFyYW1zJztcbmV4cG9ydCAqIGZyb20gJy4vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLXNvcnQnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlL3NwaW5uZXItb3ZlcmxheS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZS9jYXNlLWxpc3QtZm9udC1jb2xvci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaW5jcmVtZW50aW5nLWNvdW50ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9hcnJheS10by1vYnNlcnZhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvY2Vzcy1tZXNzYWdlLXJlc3BvbnNlJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzdWx0LXdpdGgtYWZ0ZXItYWN0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2NsZWFyLXRpbWUtaW5mb3JtYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9yZWZyZXNoLXRyZWUnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXN0cm95LXN1YnNjcmlwdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL25hdmlnYXRpb24taXRlbS10YXNrLWZpbHRlci1mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vbmF2aWdhdGlvbi1pdGVtLXRhc2stc2VhcmNoLWNhdGVnb3JpZXMtZmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL2lzLWVtcHR5LnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pcy1ub24tZW1wdHkucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRhaW5zLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlsaXR5Lm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMvbGV0LmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2Jhc2U2NCc7XG5cbi8qIFRFU1RTICovXG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL21vY2tzL21vY2stYXV0aGVudGljYXRpb24uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL21vY2tzL21vY2stdXNlci1wcmVmZXJlbmNlLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy9tb2Nrcy9tb2NrLXVzZXItcmVzb3VyY2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL21vY2tzL21vY2stdXNlci5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvbW9ja3MvbW9jay1hdXRoZW50aWNhdGlvbi1tZXRob2Qtc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL21vY2tzL21vY2stc2lnbi11cC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvbW9ja3MvbW9jay11c2VyLWF1dG9jb21wbGV0ZS12YWx1ZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3V0aWxpdHkvY3JlYXRlLW1vY2stdGFzayc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3V0aWxpdHkvY3JlYXRlLW1vY2stY2FzZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3V0aWxpdHkvY3JlYXRlLW1vY2staW1tZWRpYXRlLWRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy91dGlsaXR5L2NyZWF0ZS1tb2NrLXBhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy91dGlsaXR5L2NyZWF0ZS1tb2NrLW5ldCc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3V0aWxpdHkvY3JlYXRlLW1vY2stZGF0YWdyb3VwJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdXRpbGl0eS9jcmVhdGUtbW9jay1maWVsZCc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3V0aWxpdHkvY3JlYXRlLW1vY2stY2FzZS1vdXRjb21lJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdXRpbGl0eS9jcmVhdGUtbW9jay10YXNrLW91dGNvbWUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy91dGlsaXR5L2NyZWF0ZS1tb2NrLWdldC1kYXRhLW91dGNvbWUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy91dGlsaXR5L2NyZWF0ZS1tb2NrLXNldC1kYXRhLW91dGNvbWUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy91dGlsaXR5L2NyZWF0ZS1tb2NrLXBldHJpLW5ldC1vdXRjb21lJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdXRpbGl0eS9jb25maWd1cmUtY2F0ZWdvcnknO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy9zZWFyY2gtY2F0ZWdvcnktbW9jay1kZXBlbmRlbmNpZXMnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy90ZXN0LWNvbmZpZyc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3Rlc3QtZmFjdG9yeS1tZXRob2RzJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdGVzdC12aWV3LXNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy9tb2Nrcy9tb2NrLWVuZHBvaW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdGVzdC1tb2NrLWRlcGVuZGVuY2llcy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy9tb2Nrcy9tb2NrLXByb2ZpbGUuc2VydmljZSc7XG4iXX0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvdXRpbGl0eS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLFVBQVUsQ0FBQztBQUV6QixXQUFXO0FBQ1gsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLGtEQUFrRCxDQUFDO0FBQ2pFLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLGtDQUFrQyxDQUFDO0FBQ2pELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsMENBQTBDLENBQUM7QUFDekQsY0FBYywwQ0FBMEMsQ0FBQztBQUN6RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLG9DQUFvQyxDQUFDO0FBQ25ELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsb0NBQW9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL29mLXZvaWQnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkaW5nLWVtaXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkaW5nLXdpdGgtZmlsdGVyLWVtaXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtaW1tZWRpYXRlLWRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtZmllbGQnO1xuZXhwb3J0ICogZnJvbSAnLi9jYWxsLWNoYWluL2NhbGwtY2hhaW4uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2NhbGwtY2hhaW4vYWZ0ZXItYWN0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcGFnaW5hdGlvbi9wYWdlLWhhcy1jb250ZW50JztcbmV4cG9ydCAqIGZyb20gJy4vcGFnaW5hdGlvbi9sb2FkLWFsbC1wYWdlcyc7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1wYXJhbXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmF0aW9uL3BhZ2luYXRpb24tc29ydCc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2Uvc3Bpbm5lci1vdmVybGF5LnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlL2Nhc2UtbGlzdC1mb250LWNvbG9yLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbmNyZW1lbnRpbmctY291bnRlcic7XG5leHBvcnQgKiBmcm9tICcuL2FycmF5LXRvLW9ic2VydmFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9jZXNzLW1lc3NhZ2UtcmVzcG9uc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXN1bHQtd2l0aC1hZnRlci1hY3Rpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vY2xlYXItdGltZS1pbmZvcm1hdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3JlZnJlc2gtdHJlZSc7XG5leHBvcnQgKiBmcm9tICcuL2Rlc3Ryb3ktc3Vic2NyaXB0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbmF2aWdhdGlvbi1pdGVtLXRhc2stZmlsdGVyLWZhY3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9uYXZpZ2F0aW9uLWl0ZW0tdGFzay1zZWFyY2gtY2F0ZWdvcmllcy1mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vbmF2aWdhdGlvbi1pdGVtLWRlZmF1bHQtaGVhZGVycy1mYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vaXMtZW1wdHkucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2lzLW5vbi1lbXB0eS5waXBlJztcbmV4cG9ydCAqIGZyb20gJy4vY29udGFpbnMucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxpdHkubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy9sZXQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vYmFzZTY0JztcblxuLyogVEVTVFMgKi9cbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvbW9ja3MvbW9jay1hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvbW9ja3MvbW9jay11c2VyLXByZWZlcmVuY2Uuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL21vY2tzL21vY2stdXNlci1yZXNvdXJjZS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvbW9ja3MvbW9jay11c2VyLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy9tb2Nrcy9tb2NrLWF1dGhlbnRpY2F0aW9uLW1ldGhvZC1zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvbW9ja3MvbW9jay1zaWduLXVwLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy9tb2Nrcy9tb2NrLXVzZXItYXV0b2NvbXBsZXRlLXZhbHVlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdXRpbGl0eS9jcmVhdGUtbW9jay10YXNrJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdXRpbGl0eS9jcmVhdGUtbW9jay1jYXNlJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdXRpbGl0eS9jcmVhdGUtbW9jay1pbW1lZGlhdGUtZGF0YSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3V0aWxpdHkvY3JlYXRlLW1vY2stcGFnZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3V0aWxpdHkvY3JlYXRlLW1vY2stbmV0JztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdXRpbGl0eS9jcmVhdGUtbW9jay1kYXRhZ3JvdXAnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy91dGlsaXR5L2NyZWF0ZS1tb2NrLWZpZWxkJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdXRpbGl0eS9jcmVhdGUtbW9jay1jYXNlLW91dGNvbWUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy91dGlsaXR5L2NyZWF0ZS1tb2NrLXRhc2stb3V0Y29tZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3V0aWxpdHkvY3JlYXRlLW1vY2stZ2V0LWRhdGEtb3V0Y29tZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3V0aWxpdHkvY3JlYXRlLW1vY2stc2V0LWRhdGEtb3V0Y29tZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3V0aWxpdHkvY3JlYXRlLW1vY2stcGV0cmktbmV0LW91dGNvbWUnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy91dGlsaXR5L2NvbmZpZ3VyZS1jYXRlZ29yeSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3NlYXJjaC1jYXRlZ29yeS1tb2NrLWRlcGVuZGVuY2llcyc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL3Rlc3QtY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vdGVzdHMvdGVzdC1mYWN0b3J5LW1ldGhvZHMnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy90ZXN0LXZpZXctc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL21vY2tzL21vY2stZW5kcG9pbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90ZXN0cy90ZXN0LW1vY2stZGVwZW5kZW5jaWVzLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL3Rlc3RzL21vY2tzL21vY2stcHJvZmlsZS5zZXJ2aWNlJztcbiJdfQ==
@@ -0,0 +1,36 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@ngx-translate/core";
5
+ import * as i2 from "../../translate/language.service";
6
+ export class NetgrifPaginatorIntl {
7
+ constructor(_translate, _languageService) {
8
+ this._translate = _translate;
9
+ this._languageService = _languageService;
10
+ this.changes = new Subject();
11
+ this.initTranslations();
12
+ this._languageService.getLangChange$().subscribe(lang => {
13
+ this.initTranslations();
14
+ });
15
+ }
16
+ initTranslations() {
17
+ this.firstPageLabel = this._translate.instant('paginator.firstPage');
18
+ this.itemsPerPageLabel = this._translate.instant('paginator.itemsPage');
19
+ this.lastPageLabel = this._translate.instant('paginator.lastPage');
20
+ this.nextPageLabel = this._translate.instant('paginator.nextPage');
21
+ this.previousPageLabel = this._translate.instant('paginator.previousPage');
22
+ }
23
+ getRangeLabel(page, pageSize, length) {
24
+ if (length === 0) {
25
+ return this._translate.instant('paginator.pageOne');
26
+ }
27
+ const amountPages = Math.ceil(length / pageSize);
28
+ return this._translate.instant('paginator.pageAmount', { page: page + 1, amountPages });
29
+ }
30
+ }
31
+ NetgrifPaginatorIntl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NetgrifPaginatorIntl, deps: [{ token: i1.TranslateService }, { token: i2.LanguageService }], target: i0.ɵɵFactoryTarget.Injectable });
32
+ NetgrifPaginatorIntl.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NetgrifPaginatorIntl });
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: NetgrifPaginatorIntl, decorators: [{
34
+ type: Injectable
35
+ }], ctorParameters: function () { return [{ type: i1.TranslateService }, { type: i2.LanguageService }]; } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0Z3JpZi1wYWdpbmF0b3ItaW50bC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvdmlldy9hYnN0cmFjdC9uZXRncmlmLXBhZ2luYXRvci1pbnRsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7OztBQUs3QixNQUFNLE9BQU8sb0JBQW9CO0lBUzdCLFlBQXNCLFVBQTRCLEVBQVksZ0JBQWlDO1FBQXpFLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQVkscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUMzRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHTSxnQkFBZ0I7UUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVNLGFBQWEsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxNQUFjO1FBQy9ELElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztTQUN2RDtRQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsRUFBQyxJQUFJLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7O2tIQWhDUSxvQkFBb0I7c0hBQXBCLG9CQUFvQjs0RkFBcEIsb0JBQW9CO2tCQURoQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtNYXRQYWdpbmF0b3JJbnRsfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtMYW5ndWFnZVNlcnZpY2V9IGZyb20gJy4uLy4uL3RyYW5zbGF0ZS9sYW5ndWFnZS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ldGdyaWZQYWdpbmF0b3JJbnRsIGltcGxlbWVudHMgTWF0UGFnaW5hdG9ySW50bCB7XG5cbiAgICBwdWJsaWMgY2hhbmdlcztcbiAgICBwdWJsaWMgZmlyc3RQYWdlTGFiZWw7XG4gICAgcHVibGljIGl0ZW1zUGVyUGFnZUxhYmVsO1xuICAgIHB1YmxpYyBsYXN0UGFnZUxhYmVsO1xuICAgIHB1YmxpYyBuZXh0UGFnZUxhYmVsO1xuICAgIHB1YmxpYyBwcmV2aW91c1BhZ2VMYWJlbDtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLCBwcm90ZWN0ZWQgX2xhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgICAgIHRoaXMuaW5pdFRyYW5zbGF0aW9ucygpO1xuICAgICAgICB0aGlzLl9sYW5ndWFnZVNlcnZpY2UuZ2V0TGFuZ0NoYW5nZSQoKS5zdWJzY3JpYmUobGFuZyA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRUcmFuc2xhdGlvbnMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG5cbiAgICBwdWJsaWMgaW5pdFRyYW5zbGF0aW9ucygpIHtcbiAgICAgICAgdGhpcy5maXJzdFBhZ2VMYWJlbCA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdwYWdpbmF0b3IuZmlyc3RQYWdlJyk7XG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlTGFiZWwgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgncGFnaW5hdG9yLml0ZW1zUGFnZScpO1xuICAgICAgICB0aGlzLmxhc3RQYWdlTGFiZWwgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgncGFnaW5hdG9yLmxhc3RQYWdlJyk7XG4gICAgICAgIHRoaXMubmV4dFBhZ2VMYWJlbCA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdwYWdpbmF0b3IubmV4dFBhZ2UnKTtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2VMYWJlbCA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdwYWdpbmF0b3IucHJldmlvdXNQYWdlJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJhbmdlTGFiZWwocGFnZTogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgncGFnaW5hdG9yLnBhZ2VPbmUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbW91bnRQYWdlcyA9IE1hdGguY2VpbChsZW5ndGggLyBwYWdlU2l6ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgncGFnaW5hdG9yLnBhZ2VBbW91bnQnLCB7cGFnZTogcGFnZSArIDEsIGFtb3VudFBhZ2VzfSk7XG4gICAgfVxufVxuIl19