qms-angular 1.0.56 → 1.0.57

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 (449) hide show
  1. package/bundles/qms-angular.umd.js +22071 -13193
  2. package/bundles/qms-angular.umd.js.map +1 -1
  3. package/esm2015/lib/components/app-icon/app-icon.module.js +29 -16
  4. package/esm2015/lib/components/app-icon/icon-registry.service.js +9 -7
  5. package/esm2015/lib/components/badges/qms-badges.component.js +24 -15
  6. package/esm2015/lib/components/badges/qms-badges.module.js +33 -18
  7. package/esm2015/lib/components/banner/qms-banner/qms-banner.component.js +28 -16
  8. package/esm2015/lib/components/banner/qms-banner/qms-banner.module.js +36 -19
  9. package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.js +28 -16
  10. package/esm2015/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.js +36 -19
  11. package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.component.js +19 -13
  12. package/esm2015/lib/components/banner/qms-banner-loading/qms-banner-loading.module.js +30 -17
  13. package/esm2015/lib/components/breadcrumb/breadcrumb-direction-icon.directive.js +11 -10
  14. package/esm2015/lib/components/breadcrumb/breadcrumb-item.directive.js +20 -17
  15. package/esm2015/lib/components/breadcrumb/breadcrumb.js +40 -28
  16. package/esm2015/lib/components/breadcrumb/breadcrumb.module.js +50 -26
  17. package/esm2015/lib/components/button/button-toggle.js +120 -85
  18. package/esm2015/lib/components/button/button.js +86 -78
  19. package/esm2015/lib/components/button/button.module.js +51 -27
  20. package/esm2015/lib/components/comment/comment.js +29 -18
  21. package/esm2015/lib/components/dialog/dialog.js +38 -28
  22. package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.js +24 -16
  23. package/esm2015/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.js +71 -31
  24. package/esm2015/lib/components/list/list.js +101 -89
  25. package/esm2015/lib/components/list/list.module.js +94 -50
  26. package/esm2015/lib/components/qms-app-bar/qms-app-bar.component.js +55 -29
  27. package/esm2015/lib/components/qms-app-bar/qms-app-bar.module.js +39 -20
  28. package/esm2015/lib/components/qms-stepper/qms-stepper.component.js +32 -22
  29. package/esm2015/lib/components/qms-stepper/qms-stepper.module.js +35 -25
  30. package/esm2015/lib/components/related/content/related-content.component.js +19 -12
  31. package/esm2015/lib/components/related/list-other-related/list-related.component.js +29 -25
  32. package/esm2015/lib/components/related/model/popup-data.model.js +1 -1
  33. package/esm2015/lib/components/related/popup/related-popup.component.js +54 -42
  34. package/esm2015/lib/components/related/related.module.js +96 -43
  35. package/esm2015/lib/components/related/risk/analysis/analysis.component.js +23 -17
  36. package/esm2015/lib/components/related/risk/list/list.component.js +22 -18
  37. package/esm2015/lib/components/related/risk/result/result.component.js +23 -16
  38. package/esm2015/lib/components/related/service/related-global.service.js +7 -6
  39. package/esm2015/lib/components/related/sidenav/sidenav.component.js +21 -12
  40. package/esm2015/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.js +22 -18
  41. package/esm2015/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.js +22 -18
  42. package/esm2015/lib/components/reports/qms-reports.module.js +29 -20
  43. package/esm2015/lib/components/rich-text/rich-text.js +47 -32
  44. package/esm2015/lib/components/rich-text/rich-text.module.js +35 -21
  45. package/esm2015/lib/components/select-dialog/select-dialog.js +31 -16
  46. package/esm2015/lib/components/select-include-children/enum/select-option-type.enum.js +7 -0
  47. package/esm2015/lib/components/select-include-children/model/select-option.model.js +1 -1
  48. package/esm2015/lib/components/select-include-children/model/select-popup-data.model.js +1 -1
  49. package/esm2015/lib/components/select-include-children/model/select-search-option.model.js +4 -0
  50. package/esm2015/lib/components/select-include-children/model/seleted-option.model.js +3 -0
  51. package/esm2015/lib/components/select-include-children/select-include-children.component.js +449 -347
  52. package/esm2015/lib/components/select-include-children/select-include-children.module.js +78 -33
  53. package/esm2015/lib/components/select-include-children/services/select-global.service.js +9 -12
  54. package/esm2015/lib/components/select-one/common/data-type.enum.js +14 -0
  55. package/esm2015/lib/components/select-one/common/document-folder-type.enum.js +12 -0
  56. package/esm2015/lib/components/select-one/common/module-type.enum.js +8 -0
  57. package/esm2015/lib/components/select-one/common/select-data.model.js +3 -0
  58. package/esm2015/lib/components/select-one/common/selected-node.model.js +3 -0
  59. package/esm2015/lib/components/select-one/common/selectone-popup-data.model.js +11 -0
  60. package/esm2015/lib/components/select-one/common/show-hide-search-result.const.js +6 -0
  61. package/esm2015/lib/components/select-one/index.js +2 -0
  62. package/esm2015/lib/components/select-one/public_api.js +7 -0
  63. package/esm2015/lib/components/select-one/select-one.component.js +359 -0
  64. package/esm2015/lib/components/select-one/select-one.module.js +94 -0
  65. package/esm2015/lib/components/select-one/service/select-one-global.service.js +18 -0
  66. package/esm2015/lib/components/suffix-field/suffix-field.directive.js +22 -21
  67. package/esm2015/lib/components/table/table-action.js +31 -31
  68. package/esm2015/lib/components/table/table.module.js +37 -21
  69. package/esm2015/lib/components/test-only/test-only.component.js +14 -11
  70. package/esm2015/lib/components/tooltip/tooltip.js +24 -19
  71. package/esm2015/lib/components/tooltip/tooltip.module.js +38 -20
  72. package/esm2015/lib/components/tree/tree.component.js +99 -35
  73. package/esm2015/lib/components/tree/tree.module.js +69 -30
  74. package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.js +22 -16
  75. package/esm2015/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.js +71 -31
  76. package/esm2015/lib/directives/chip-input/chip-input-chip-list.directive.js +13 -13
  77. package/esm2015/lib/directives/chip-input/chip-input-field.directive.js +11 -10
  78. package/esm2015/lib/directives/chip-input/chip-input-select-dropdown.directive.js +11 -10
  79. package/esm2015/lib/directives/chip-input/chip-input-select-field.directive.js +17 -14
  80. package/esm2015/lib/directives/chip-input/chip-input-select-trigger.directive.js +14 -13
  81. package/esm2015/lib/directives/chips/chip-body.directive.js +11 -10
  82. package/esm2015/lib/directives/chips/chip.directive.js +13 -13
  83. package/esm2015/lib/directives/dropdown-menu/dropdown-item.directive.js +16 -14
  84. package/esm2015/lib/directives/file-upload/file-upload-attachment-list.directive.js +11 -10
  85. package/esm2015/lib/directives/file-upload/file-upload-display.directive.js +19 -16
  86. package/esm2015/lib/directives/file-upload/file-upload-multiple-display.directive.js +16 -14
  87. package/esm2015/lib/directives/file-upload/file-upload-multiple-selector.directive.js +26 -20
  88. package/esm2015/lib/directives/file-upload/file-upload-multiple.directive.js +19 -15
  89. package/esm2015/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.js +11 -10
  90. package/esm2015/lib/directives/file-upload/file-upload-selector.directive.js +25 -18
  91. package/esm2015/lib/directives/file-upload/file-upload.directive.js +24 -20
  92. package/esm2015/lib/directives/form.directive.js +48 -51
  93. package/esm2015/lib/directives/margin.directive.js +15 -14
  94. package/esm2015/lib/directives/range-slider/range-slider-lockup.directive.js +11 -10
  95. package/esm2015/lib/directives/range-slider/range-slider.directive.js +17 -14
  96. package/esm2015/lib/directives/scroll-selected/scroll-to-selected.directive.js +16 -15
  97. package/esm2015/lib/directives/scrollbar/scrollbar.directive.js +13 -13
  98. package/esm2015/lib/directives/search-field.directive.js +21 -22
  99. package/esm2015/lib/directives/side-sheet/drawer-content.directive.js +11 -10
  100. package/esm2015/lib/directives/side-sheet/drawer-header-action.directive.js +11 -10
  101. package/esm2015/lib/directives/side-sheet/drawer-header.directive.js +11 -10
  102. package/esm2015/lib/directives/side-sheet/drawer.directive.js +11 -10
  103. package/esm2015/lib/directives/tab/tab-group-advanced.directive.js +15 -14
  104. package/esm2015/lib/directives/tab/tab-group.directive.js +11 -10
  105. package/esm2015/lib/directives/tab/tab-label.directive.js +11 -10
  106. package/esm2015/lib/directives/text-block/text-block-line.directive.js +20 -16
  107. package/esm2015/lib/directives/text-block/text-block.directive.js +17 -14
  108. package/esm2015/lib/directives/tooltip/tooltip-image.directive.js +14 -13
  109. package/esm2015/lib/directives/tooltip/tooltip-renderer.directive.js +35 -22
  110. package/esm2015/lib/material-module.js +35 -16
  111. package/esm2015/lib/model/en.js +35 -4
  112. package/esm2015/lib/model/no.js +34 -3
  113. package/esm2015/lib/pipe/dateFormat.pipe.js +11 -10
  114. package/esm2015/lib/qms-angular.component.js +13 -11
  115. package/esm2015/lib/qms-angular.module.js +232 -121
  116. package/esm2015/lib/qms-angular.service.js +9 -8
  117. package/esm2015/lib/qms-ckeditor-components/common/bpmn/toolbar.function.js +32 -12
  118. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.js +5 -1
  119. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.js +10 -1
  120. package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.js +7 -0
  121. package/esm2015/lib/qms-ckeditor-components/common/enums/document-type.enum.js +2 -1
  122. package/esm2015/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.js +8 -0
  123. package/esm2015/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.js +16 -0
  124. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/halo-service.js +105 -0
  125. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.js +3762 -0
  126. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.js +68 -0
  127. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.js +372 -0
  128. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.js +1041 -0
  129. package/esm2015/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.js +326 -0
  130. package/esm2015/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.js +318 -0
  131. package/esm2015/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.js +80 -0
  132. package/esm2015/lib/qms-ckeditor-components/common/functions/common.function.js +2 -2
  133. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.js +9 -0
  134. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.js +9 -0
  135. package/esm2015/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.js +3 -0
  136. package/esm2015/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.js +23 -16
  137. package/esm2015/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.js +34 -19
  138. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.js +43 -0
  139. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.js +577 -53
  140. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.js +69 -35
  141. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.js +322 -0
  142. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.js +12 -8
  143. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.js +39 -30
  144. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.js +22 -18
  145. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.js +29 -20
  146. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.js +22 -18
  147. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.js +35 -23
  148. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.js +30 -20
  149. package/esm2015/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.js +27 -18
  150. package/esm2015/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.js +8 -0
  151. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor-base.component.js +7 -4
  152. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.component.js +118 -44
  153. package/esm2015/lib/qms-ckeditor-components/qms-ckeditor.module.js +131 -55
  154. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.js +10 -10
  155. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.js +9 -9
  156. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.js +66 -26
  157. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.js +26 -0
  158. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.js +9 -8
  159. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.js +9 -9
  160. package/esm2015/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.js +9 -9
  161. package/esm2015/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.js +9 -9
  162. package/esm2015/lib/services/translation-registry.service.js +9 -8
  163. package/esm2015/lib/shared.module.js +9 -4
  164. package/esm2015/public-api.js +20 -1
  165. package/esm2015/qms-angular.js +1 -9
  166. package/fesm2015/qms-angular.js +14918 -6210
  167. package/fesm2015/qms-angular.js.map +1 -1
  168. package/lib/components/app-icon/app-icon.module.d.ts +7 -0
  169. package/lib/components/app-icon/icon-registry.service.d.ts +3 -0
  170. package/lib/components/badges/qms-badges.component.d.ts +3 -0
  171. package/lib/components/badges/qms-badges.module.d.ts +9 -0
  172. package/lib/components/banner/qms-banner/qms-banner.component.d.ts +3 -0
  173. package/lib/components/banner/qms-banner/qms-banner.module.d.ts +10 -0
  174. package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.d.ts +3 -0
  175. package/lib/components/banner/qms-banner-confirm/qms-banner-confirm.module.d.ts +10 -0
  176. package/lib/components/banner/qms-banner-loading/qms-banner-loading.component.d.ts +3 -0
  177. package/lib/components/banner/qms-banner-loading/qms-banner-loading.module.d.ts +8 -0
  178. package/lib/components/breadcrumb/breadcrumb-direction-icon.directive.d.ts +3 -0
  179. package/lib/components/breadcrumb/breadcrumb-item.directive.d.ts +3 -0
  180. package/lib/components/breadcrumb/breadcrumb.d.ts +3 -0
  181. package/lib/components/breadcrumb/breadcrumb.module.d.ts +13 -0
  182. package/lib/components/button/button-toggle.d.ts +5 -0
  183. package/lib/components/button/button.d.ts +7 -0
  184. package/lib/components/button/button.module.d.ts +9 -0
  185. package/lib/components/comment/comment.d.ts +3 -0
  186. package/lib/components/dialog/dialog.d.ts +5 -0
  187. package/lib/components/edit-file-name-dialog/edit-file-name-dialog.d.ts +3 -0
  188. package/lib/components/edit-file-name-dialog/edit-file-name-dialog.module.d.ts +16 -0
  189. package/lib/components/list/list.d.ts +15 -0
  190. package/lib/components/list/list.module.d.ts +11 -0
  191. package/lib/components/qms-app-bar/qms-app-bar.component.d.ts +3 -0
  192. package/lib/components/qms-app-bar/qms-app-bar.module.d.ts +12 -0
  193. package/lib/components/qms-stepper/qms-stepper.component.d.ts +3 -0
  194. package/lib/components/qms-stepper/qms-stepper.module.d.ts +8 -0
  195. package/lib/components/related/content/related-content.component.d.ts +3 -0
  196. package/lib/components/related/list-other-related/list-related.component.d.ts +3 -0
  197. package/lib/components/related/model/popup-data.model.d.ts +0 -1
  198. package/lib/components/related/popup/related-popup.component.d.ts +7 -5
  199. package/lib/components/related/related.module.d.ts +29 -0
  200. package/lib/components/related/risk/analysis/analysis.component.d.ts +3 -0
  201. package/lib/components/related/risk/list/list.component.d.ts +3 -0
  202. package/lib/components/related/risk/result/result.component.d.ts +3 -0
  203. package/lib/components/related/service/related-global.service.d.ts +3 -0
  204. package/lib/components/related/sidenav/sidenav.component.d.ts +3 -0
  205. package/lib/components/reports/qms-report-content-portrait/qms-report-content-portrait.component.d.ts +3 -0
  206. package/lib/components/reports/qms-report-cover-portrait/qms-report-cover-portrait.component.d.ts +3 -0
  207. package/lib/components/reports/qms-reports.module.d.ts +7 -0
  208. package/lib/components/rich-text/rich-text.d.ts +3 -0
  209. package/lib/components/rich-text/rich-text.module.d.ts +8 -0
  210. package/lib/components/select-dialog/select-dialog.d.ts +3 -0
  211. package/lib/components/select-include-children/enum/select-option-type.enum.d.ts +5 -0
  212. package/lib/components/select-include-children/model/select-option.model.d.ts +2 -0
  213. package/lib/components/select-include-children/model/select-popup-data.model.d.ts +4 -0
  214. package/lib/components/select-include-children/model/select-search-option.model.d.ts +7 -0
  215. package/lib/components/select-include-children/model/seleted-option.model.d.ts +15 -0
  216. package/lib/components/select-include-children/select-include-children.component.d.ts +35 -18
  217. package/lib/components/select-include-children/select-include-children.module.d.ts +25 -0
  218. package/lib/components/select-include-children/services/select-global.service.d.ts +6 -5
  219. package/lib/components/select-one/common/data-type.enum.d.ts +12 -0
  220. package/lib/components/select-one/common/document-folder-type.enum.d.ts +10 -0
  221. package/lib/components/select-one/common/module-type.enum.d.ts +6 -0
  222. package/lib/components/select-one/common/select-data.model.d.ts +12 -0
  223. package/lib/components/select-one/common/selected-node.model.d.ts +12 -0
  224. package/lib/components/select-one/common/selectone-popup-data.model.d.ts +12 -0
  225. package/lib/components/select-one/common/show-hide-search-result.const.d.ts +5 -0
  226. package/lib/components/select-one/index.d.ts +1 -0
  227. package/lib/components/select-one/public_api.d.ts +6 -0
  228. package/lib/components/select-one/select-one.component.d.ts +80 -0
  229. package/lib/components/select-one/select-one.module.d.ts +25 -0
  230. package/lib/components/select-one/service/select-one-global.service.d.ts +10 -0
  231. package/lib/components/suffix-field/suffix-field.directive.d.ts +5 -0
  232. package/lib/components/table/table-action.d.ts +5 -0
  233. package/lib/components/table/table.module.d.ts +8 -0
  234. package/lib/components/test-only/test-only.component.d.ts +3 -0
  235. package/lib/components/tooltip/tooltip.d.ts +3 -0
  236. package/lib/components/tooltip/tooltip.module.d.ts +9 -0
  237. package/lib/components/tree/tree.component.d.ts +7 -0
  238. package/lib/components/tree/tree.module.d.ts +22 -0
  239. package/lib/components/upload-file-error-dialog/upload-file-error-dialog.d.ts +3 -0
  240. package/lib/components/upload-file-error-dialog/upload-file-error-dialog.module.d.ts +16 -0
  241. package/lib/directives/chip-input/chip-input-chip-list.directive.d.ts +3 -0
  242. package/lib/directives/chip-input/chip-input-field.directive.d.ts +3 -0
  243. package/lib/directives/chip-input/chip-input-select-dropdown.directive.d.ts +3 -0
  244. package/lib/directives/chip-input/chip-input-select-field.directive.d.ts +3 -0
  245. package/lib/directives/chip-input/chip-input-select-trigger.directive.d.ts +3 -0
  246. package/lib/directives/chips/chip-body.directive.d.ts +3 -0
  247. package/lib/directives/chips/chip.directive.d.ts +3 -0
  248. package/lib/directives/dropdown-menu/dropdown-item.directive.d.ts +3 -0
  249. package/lib/directives/file-upload/file-upload-attachment-list.directive.d.ts +3 -0
  250. package/lib/directives/file-upload/file-upload-display.directive.d.ts +3 -0
  251. package/lib/directives/file-upload/file-upload-multiple-display.directive.d.ts +3 -0
  252. package/lib/directives/file-upload/file-upload-multiple-selector.directive.d.ts +3 -0
  253. package/lib/directives/file-upload/file-upload-multiple.directive.d.ts +3 -0
  254. package/lib/directives/file-upload/file-upload-scrollable-attachment-list.directive.d.ts +3 -0
  255. package/lib/directives/file-upload/file-upload-selector.directive.d.ts +3 -0
  256. package/lib/directives/file-upload/file-upload.directive.d.ts +5 -0
  257. package/lib/directives/form.directive.d.ts +11 -0
  258. package/lib/directives/margin.directive.d.ts +3 -0
  259. package/lib/directives/range-slider/range-slider-lockup.directive.d.ts +3 -0
  260. package/lib/directives/range-slider/range-slider.directive.d.ts +3 -0
  261. package/lib/directives/scroll-selected/scroll-to-selected.directive.d.ts +3 -0
  262. package/lib/directives/scrollbar/scrollbar.directive.d.ts +3 -0
  263. package/lib/directives/search-field.directive.d.ts +5 -0
  264. package/lib/directives/side-sheet/drawer-content.directive.d.ts +3 -0
  265. package/lib/directives/side-sheet/drawer-header-action.directive.d.ts +3 -0
  266. package/lib/directives/side-sheet/drawer-header.directive.d.ts +3 -0
  267. package/lib/directives/side-sheet/drawer.directive.d.ts +3 -0
  268. package/lib/directives/tab/tab-group-advanced.directive.d.ts +3 -0
  269. package/lib/directives/tab/tab-group.directive.d.ts +3 -0
  270. package/lib/directives/tab/tab-label.directive.d.ts +3 -0
  271. package/lib/directives/text-block/text-block-line.directive.d.ts +3 -0
  272. package/lib/directives/text-block/text-block.directive.d.ts +3 -0
  273. package/lib/directives/tooltip/tooltip-image.directive.d.ts +3 -0
  274. package/lib/directives/tooltip/tooltip-renderer.directive.d.ts +3 -0
  275. package/lib/material-module.d.ts +12 -0
  276. package/lib/model/en.d.ts +31 -0
  277. package/lib/model/no.d.ts +31 -0
  278. package/lib/pipe/dateFormat.pipe.d.ts +3 -0
  279. package/lib/qms-angular.component.d.ts +3 -0
  280. package/lib/qms-angular.module.d.ts +49 -0
  281. package/lib/qms-angular.service.d.ts +3 -0
  282. package/lib/qms-ckeditor-components/common/bpmn/toolbar.function.d.ts +2 -2
  283. package/lib/qms-ckeditor-components/common/constants/ckeditorEvent.constant.d.ts +4 -0
  284. package/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.d.ts +9 -0
  285. package/lib/qms-ckeditor-components/common/constants/ckeditorLink.constant.d.ts +6 -0
  286. package/lib/qms-ckeditor-components/common/enums/document-type.enum.d.ts +1 -0
  287. package/lib/qms-ckeditor-components/common/enums/shape-flow-chart-connection-type.d.ts +6 -0
  288. package/lib/qms-ckeditor-components/common/flowchart/sample/sample-graphs.d.ts +14 -0
  289. package/lib/qms-ckeditor-components/common/flowchart/service/halo-service.d.ts +48 -0
  290. package/lib/qms-ckeditor-components/common/flowchart/service/inspector-service.d.ts +18 -0
  291. package/lib/qms-ckeditor-components/common/flowchart/service/keyboard-service.d.ts +17 -0
  292. package/lib/qms-ckeditor-components/common/flowchart/service/kitchensink-service.d.ts +62 -0
  293. package/lib/qms-ckeditor-components/common/flowchart/service/stencil-service.d.ts +1183 -0
  294. package/lib/qms-ckeditor-components/common/flowchart/service/toolbar-service.d.ts +216 -0
  295. package/lib/qms-ckeditor-components/common/flowchart/shapes/app-shapes.d.ts +61 -0
  296. package/lib/qms-ckeditor-components/common/flowchart/themes/theme-picker.d.ts +36 -0
  297. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart-template.model.d.ts +7 -0
  298. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-flowchart.model.d.ts +7 -0
  299. package/lib/qms-ckeditor-components/common/models/qms-ckeditor-save-as-template.model.d.ts +7 -0
  300. package/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.d.ts +3 -0
  301. package/lib/qms-ckeditor-components/common/module/tree/qms-ckeditor-tree.component.d.ts +3 -0
  302. package/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.d.ts +18 -0
  303. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.d.ts +88 -4
  304. package/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/save-template/save-template.component.d.ts +11 -2
  305. package/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.d.ts +44 -0
  306. package/lib/qms-ckeditor-components/components/qms-ckeditor-fullscreen/qms-ckeditor-fullscreen.component.d.ts +3 -0
  307. package/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.d.ts +3 -0
  308. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.d.ts +3 -0
  309. package/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.d.ts +3 -0
  310. package/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.d.ts +3 -0
  311. package/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.d.ts +4 -0
  312. package/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.d.ts +3 -0
  313. package/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.d.ts +3 -0
  314. package/lib/qms-ckeditor-components/models/qms-ckeditor-bpmn-data.model.d.ts +7 -0
  315. package/lib/qms-ckeditor-components/qms-ckeditor-base.component.d.ts +3 -0
  316. package/lib/qms-ckeditor-components/qms-ckeditor.component.d.ts +8 -0
  317. package/lib/qms-ckeditor-components/qms-ckeditor.module.d.ts +44 -0
  318. package/lib/qms-ckeditor-components/services/qms-ckeditor-base.service.d.ts +3 -0
  319. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn-api.service.d.ts +3 -0
  320. package/lib/qms-ckeditor-components/services/qms-ckeditor-bpmn.service.d.ts +4 -0
  321. package/lib/qms-ckeditor-components/services/qms-ckeditor-flowchart.service.d.ts +13 -0
  322. package/lib/qms-ckeditor-components/services/qms-ckeditor-global.service.d.ts +3 -0
  323. package/lib/qms-ckeditor-components/services/qms-ckeditor-link.service.d.ts +3 -0
  324. package/lib/qms-ckeditor-components/services/qms-ckeditor-tree.service.d.ts +3 -0
  325. package/lib/qms-ckeditor-components/services/qms-ckedtior-template.service.d.ts +3 -0
  326. package/lib/services/translation-registry.service.d.ts +3 -0
  327. package/lib/shared.module.d.ts +4 -0
  328. package/lib.theme.scss +8 -0
  329. package/package.json +1 -2
  330. package/public-api.d.ts +18 -0
  331. package/qms-angular.d.ts +1 -8
  332. package/src/assets/images/ckeditor5.svg +1 -0
  333. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Bold.ttf +0 -0
  334. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Light.ttf +0 -0
  335. package/src/assets/jointjs/fonts/Alegreya_Sans/AlegreyaSans-Regular.ttf +0 -0
  336. package/src/assets/jointjs/fonts/Alegreya_Sans/OFL.txt +92 -0
  337. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Bold.ttf +0 -0
  338. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Light.ttf +0 -0
  339. package/src/assets/jointjs/fonts/Averia_Libre/AveriaLibre-Regular.ttf +0 -0
  340. package/src/assets/jointjs/fonts/Averia_Libre/OFL.txt +93 -0
  341. package/src/assets/jointjs/fonts/Roboto_Condensed/LICENSE.txt +202 -0
  342. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Bold.ttf +0 -0
  343. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Light.ttf +0 -0
  344. package/src/assets/jointjs/fonts/Roboto_Condensed/RobotoCondensed-Regular.ttf +0 -0
  345. package/src/assets/jointjs/images/delete-icon-modern.png +0 -0
  346. package/src/assets/jointjs/images/image-icon1.svg +1 -0
  347. package/src/assets/jointjs/images/image-icon2.svg +6 -0
  348. package/src/assets/jointjs/images/image-icon3.svg +11 -0
  349. package/src/assets/jointjs/images/image-icon4.svg +8 -0
  350. package/src/assets/jointjs/images/member-female.png +0 -0
  351. package/src/assets/jointjs/images/member-male.png +0 -0
  352. package/src/assets/jointjs/images/no-color-icon.svg +72 -0
  353. package/src/assets/jointjs/images/reset-icon-modern.png +0 -0
  354. package/src/assets/jointjs/images/save-icon-modern.png +0 -0
  355. package/src/assets/jointjs/images/to-front-icon-modern.png +0 -0
  356. package/src/assets/jointjs/images/toback-icon-modern.png +0 -0
  357. package/src/assets/jointjs/images/toolbar-icons-dark.woff +0 -0
  358. package/src/assets/jointjs/images/toolbar-icons-material.png +0 -0
  359. package/src/assets/jointjs/images/toolbar-icons-modern.png +0 -0
  360. package/src/assets/jointjs/images/transparent-icon.svg +50 -0
  361. package/src/assets/jointjs/scss/bpmn.scss +36 -35
  362. package/src/assets/jointjs/scss/style.dark.scss +233 -0
  363. package/src/assets/jointjs/scss/style.material.scss +234 -0
  364. package/src/assets/jointjs/scss/style.modern.scss +225 -0
  365. package/src/assets/jointjs/scss/style.scss +216 -0
  366. package/src/assets/jointjs/scss/theme-picker.scss +21 -0
  367. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
  368. package/src/assets/qms-ckeditor-plugin/build/ckeditor.js.map +1 -1
  369. package/src/assets/qms-ckeditor-plugin/build/translations/ar.js +1 -1
  370. package/src/assets/qms-ckeditor-plugin/build/translations/az.js +1 -1
  371. package/src/assets/qms-ckeditor-plugin/build/translations/bg.js +1 -1
  372. package/src/assets/qms-ckeditor-plugin/build/translations/cs.js +1 -1
  373. package/src/assets/qms-ckeditor-plugin/build/translations/da.js +1 -1
  374. package/src/assets/qms-ckeditor-plugin/build/translations/de-ch.js +1 -1
  375. package/src/assets/qms-ckeditor-plugin/build/translations/de.js +1 -1
  376. package/src/assets/qms-ckeditor-plugin/build/translations/en-au.js +1 -1
  377. package/src/assets/qms-ckeditor-plugin/build/translations/en-gb.js +1 -1
  378. package/src/assets/qms-ckeditor-plugin/build/translations/es.js +1 -1
  379. package/src/assets/qms-ckeditor-plugin/build/translations/et.js +1 -1
  380. package/src/assets/qms-ckeditor-plugin/build/translations/fa.js +1 -1
  381. package/src/assets/qms-ckeditor-plugin/build/translations/fi.js +1 -1
  382. package/src/assets/qms-ckeditor-plugin/build/translations/fr.js +1 -1
  383. package/src/assets/qms-ckeditor-plugin/build/translations/gl.js +1 -1
  384. package/src/assets/qms-ckeditor-plugin/build/translations/he.js +1 -1
  385. package/src/assets/qms-ckeditor-plugin/build/translations/hi.js +1 -1
  386. package/src/assets/qms-ckeditor-plugin/build/translations/hr.js +1 -1
  387. package/src/assets/qms-ckeditor-plugin/build/translations/hu.js +1 -1
  388. package/src/assets/qms-ckeditor-plugin/build/translations/id.js +1 -1
  389. package/src/assets/qms-ckeditor-plugin/build/translations/it.js +1 -1
  390. package/src/assets/qms-ckeditor-plugin/build/translations/ja.js +1 -1
  391. package/src/assets/qms-ckeditor-plugin/build/translations/ko.js +1 -1
  392. package/src/assets/qms-ckeditor-plugin/build/translations/ku.js +1 -1
  393. package/src/assets/qms-ckeditor-plugin/build/translations/lt.js +1 -1
  394. package/src/assets/qms-ckeditor-plugin/build/translations/lv.js +1 -1
  395. package/src/assets/qms-ckeditor-plugin/build/translations/nb.js +1 -1
  396. package/src/assets/qms-ckeditor-plugin/build/translations/ne.js +1 -1
  397. package/src/assets/qms-ckeditor-plugin/build/translations/nl.js +1 -1
  398. package/src/assets/qms-ckeditor-plugin/build/translations/no.js +1 -1
  399. package/src/assets/qms-ckeditor-plugin/build/translations/pl.js +1 -1
  400. package/src/assets/qms-ckeditor-plugin/build/translations/pt-br.js +1 -1
  401. package/src/assets/qms-ckeditor-plugin/build/translations/ro.js +1 -1
  402. package/src/assets/qms-ckeditor-plugin/build/translations/ru.js +1 -1
  403. package/src/assets/qms-ckeditor-plugin/build/translations/sk.js +1 -1
  404. package/src/assets/qms-ckeditor-plugin/build/translations/sl.js +1 -1
  405. package/src/assets/qms-ckeditor-plugin/build/translations/sq.js +1 -1
  406. package/src/assets/qms-ckeditor-plugin/build/translations/sr-latn.js +1 -1
  407. package/src/assets/qms-ckeditor-plugin/build/translations/sr.js +1 -1
  408. package/src/assets/qms-ckeditor-plugin/build/translations/sv.js +1 -1
  409. package/src/assets/qms-ckeditor-plugin/build/translations/th.js +1 -1
  410. package/src/assets/qms-ckeditor-plugin/build/translations/tk.js +1 -1
  411. package/src/assets/qms-ckeditor-plugin/build/translations/tr.js +1 -1
  412. package/src/assets/qms-ckeditor-plugin/build/translations/ug.js +1 -1
  413. package/src/assets/qms-ckeditor-plugin/build/translations/uk.js +1 -1
  414. package/src/assets/qms-ckeditor-plugin/build/translations/vi.js +1 -1
  415. package/src/assets/qms-ckeditor-plugin/build/translations/zh-cn.js +1 -1
  416. package/src/assets/qms-ckeditor-plugin/build/translations/zh.js +1 -1
  417. package/src/assets/qms-ckeditor-plugin/package-lock.json +17 -12177
  418. package/src/assets/qms-ckeditor-plugin/package.json +1 -0
  419. package/src/assets/qms-ckeditor-plugin/src/ckeditor.js +22 -3
  420. package/src/assets/qms-ckeditor-plugin/src/plugins/aboutckeditor/aboutckeditor.js +28 -0
  421. package/src/assets/qms-ckeditor-plugin/src/plugins/bpmn/qmsCKEditorBpmnPlugin.js +24 -5
  422. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorConstant.js +7 -1
  423. package/src/assets/qms-ckeditor-plugin/src/plugins/common/qmsCKEditorService.js +20 -0
  424. package/src/assets/qms-ckeditor-plugin/src/plugins/flowchart/qmsCKEditorFlowchartPlugin.js +63 -0
  425. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapediting.js +47 -43
  426. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/imagemapui.js +1 -1
  427. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/insertimagemapcommand.js +72 -108
  428. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/openimagemapcommand.js +58 -0
  429. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/resizeimagemapcommand.js +4 -3
  430. package/src/assets/qms-ckeditor-plugin/src/plugins/imagemap/utils.js +13 -0
  431. package/src/assets/qms-ckeditor-plugin/src/plugins/timestamp/timestamp.js +8 -8
  432. package/src/assets/qms-ckeditor-plugin/src/plugins/tooltip/tooltipui.js +23 -24
  433. package/src/assets/qms-ckeditor-plugin/src/themes/icons/flowchart.svg +507 -0
  434. package/src/assets/qms-ckeditor-plugin/src/themes/icons/information.svg +1 -50
  435. package/src/assets/qms-ckeditor-plugin/src/themes/icons/timestamp.svg +1 -1
  436. package/src/assets/qms-ckeditor-plugin/src/themes/icons/tooltip.svg +1 -0
  437. package/src/lib/components/qms-app-bar/qms-app-bar.component.scss +7 -0
  438. package/src/lib/components/select-include-children/select-include-children.component.scss +11 -4
  439. package/src/lib/components/select-one/select-one.component.scss +240 -0
  440. package/src/lib/components/tree/tree.component.scss +1 -1
  441. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.scss +16 -0
  442. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-bpmn/qms-ckeditor-bpmn.component.scss +15 -1
  443. package/src/lib/qms-ckeditor-components/components/qms-ckeditor-flowchart/qms-ckeditor-flowchart.component.scss +5 -0
  444. package/src/lib/qms-ckeditor-components/styles/_layout.scss +24 -0
  445. package/src/lib/qms-ckeditor-components/styles/_modules.scss +8 -0
  446. package/src/themes/_non-bg-srcollbar.scss +4 -0
  447. package/qms-angular.metadata.json +0 -1
  448. package/src/assets/qms-ckeditor-plugin/src/dist/ckeditor.dev.js +0 -173
  449. package/src/assets/qms-ckeditor-plugin/src/plugins/fullscreen/dist/qmsCKEditorFullscreenPlugin.dev.js +0 -87
@@ -1,27 +1,45 @@
1
- import { ChangeDetectorRef, EventEmitter, ViewChild, ViewEncapsulation, ViewChildren, ElementRef } from '@angular/core';
1
+ import { EventEmitter, ViewChild, ViewEncapsulation, ViewChildren } from '@angular/core';
2
2
  import { Component, HostListener, Inject } from '@angular/core';
3
3
  import { FormControl } from '@angular/forms';
4
4
  import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
5
- import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
6
- import { MatIconRegistry } from '@angular/material/icon';
7
- import { DomSanitizer } from '@angular/platform-browser';
5
+ import { MAT_DIALOG_DATA } from '@angular/material/dialog';
8
6
  import { Subject } from 'rxjs';
9
7
  import { debounceTime, takeUntil } from 'rxjs/operators';
10
- import { TranslateLibraryService } from '../../services/translation-registry.service';
11
- import { QMSIconRegistryService } from '../app-icon/icon-registry.service';
12
- import { SelectPopupData } from './model/select-popup-data.model';
13
8
  import { SelectOption } from './model/select-option.model';
14
- import { QMSSelectGlobalService } from './services/select-global.service';
15
9
  import { TreeComponent } from '../tree/tree.component';
16
10
  import { SelectConst } from './model/select.const';
11
+ import { SelectOptionTypes } from 'projects/qms-angular/src/public-api';
12
+ import { ItemIconType } from '../related/common/item-icon-type.enum';
13
+ import * as i0 from "@angular/core";
14
+ import * as i1 from "../../services/translation-registry.service";
15
+ import * as i2 from "@angular/material/dialog";
16
+ import * as i3 from "./services/select-global.service";
17
+ import * as i4 from "@angular/material/icon";
18
+ import * as i5 from "@angular/platform-browser";
19
+ import * as i6 from "../app-icon/icon-registry.service";
20
+ import * as i7 from "@angular/material/slide-toggle";
21
+ import * as i8 from "@angular/material/autocomplete";
22
+ import * as i9 from "@angular/cdk/scrolling";
23
+ import * as i10 from "@angular/material/core";
24
+ import * as i11 from "../list/list";
25
+ import * as i12 from "../tree/tree.component";
26
+ import * as i13 from "@angular/material/button";
27
+ import * as i14 from "../button/button";
28
+ import * as i15 from "@angular/material/input";
29
+ import * as i16 from "@angular/forms";
30
+ import * as i17 from "../../directives/form.directive";
31
+ import * as i18 from "../../directives/scrollbar/scrollbar.directive";
32
+ import * as i19 from "@angular/common";
33
+ import * as i20 from "../../directives/tooltip/tooltip-renderer.directive";
34
+ import * as i21 from "./model/select-popup-data.model";
17
35
  export class SelectIncludeChildrenPopUpComponent {
18
- constructor(cdRef, translate, dialogRef, globalService, iconRegistry, sanitizer, appIconService, elem, data) {
36
+ constructor(cdRef, translate, dialogRef, globalService, iconRegistry, domSanitizer, appIconService, elem, data) {
19
37
  this.cdRef = cdRef;
20
38
  this.translate = translate;
21
39
  this.dialogRef = dialogRef;
22
40
  this.globalService = globalService;
23
41
  this.iconRegistry = iconRegistry;
24
- this.sanitizer = sanitizer;
42
+ this.domSanitizer = domSanitizer;
25
43
  this.appIconService = appIconService;
26
44
  this.elem = elem;
27
45
  this.data = data;
@@ -29,15 +47,13 @@ export class SelectIncludeChildrenPopUpComponent {
29
47
  this.headerName = '';
30
48
  this.treeData = [];
31
49
  this.checkedNodeList = [];
32
- this.SelectOption = [];
50
+ this.selectedOptions = [];
33
51
  this.selectedData = [];
34
52
  this.commonCheckedList = [];
35
- this.documentCheckedList = [];
36
- this.singleProcessList = [];
37
53
  this.itemType = 0;
38
54
  this.selectedRiskData = [];
39
55
  this.disabledList = [];
40
- this.disabledList2 = [];
56
+ this.orginalDisableList = [];
41
57
  this.isDocumentExpanded = true;
42
58
  this.isCommonExpanded = true;
43
59
  this.singleSelectOption = false;
@@ -48,22 +64,33 @@ export class SelectIncludeChildrenPopUpComponent {
48
64
  this.selectedFolder = null;
49
65
  this.listChildrenSelectOne = [];
50
66
  this.includeChildren = false;
67
+ this.itemIconType = ItemIconType;
51
68
  this.onSearch = new EventEmitter();
52
69
  this.onExpandFolder = new EventEmitter();
53
70
  this.headerName = data.headerName;
54
71
  this.treeData = data.treeData;
55
72
  this.treeConfig = data.treeConfig;
56
73
  this.selectedRiskData = (data === null || data === void 0 ? void 0 : data.selectedNode) || [];
57
- this.disabledList = data.disabledList || [];
74
+ this.disabledList = $.extend(true, [], data.disabledList || []);
75
+ this.orginalDisableList = $.extend(true, [], data.disabledList || []);
58
76
  this.singleSelectOption = data.treeConfig.singleSelectedNode;
59
77
  this.maxSelectItemCount = data.maxSelectItemCount;
60
- appIconService.registerProcessIcon(iconRegistry, sanitizer);
61
- appIconService.registerProcessAreaIcon(iconRegistry, sanitizer);
62
- appIconService.registerDocumentIcon(iconRegistry, sanitizer);
63
- appIconService.registerFolderIcon(iconRegistry, sanitizer);
64
- appIconService.registerDeviationIcon(iconRegistry, sanitizer);
65
- appIconService.registerChecklistIcon(iconRegistry, sanitizer);
66
- appIconService.registerRiskIcon(iconRegistry, sanitizer);
78
+ this.checkedNodeList = (data === null || data === void 0 ? void 0 : data.selectedList) || [];
79
+ this.includeChildren = data === null || data === void 0 ? void 0 : data.includeChildren;
80
+ this.editItem = data.editItem;
81
+ appIconService.registerProcessIcon(iconRegistry, domSanitizer);
82
+ appIconService.registerProcessAreaIcon(iconRegistry, domSanitizer);
83
+ appIconService.registerDocumentIcon(iconRegistry, domSanitizer);
84
+ appIconService.registerFolderIcon(iconRegistry, domSanitizer);
85
+ appIconService.registerDeviationIcon(iconRegistry, domSanitizer);
86
+ appIconService.registerChecklistIcon(iconRegistry, domSanitizer);
87
+ appIconService.registerRiskIcon(iconRegistry, domSanitizer);
88
+ }
89
+ ngAfterViewInit() {
90
+ if (this.editItem) {
91
+ this.focusEditItem(this.editItem);
92
+ }
93
+ this.initTree(this.checkedNodeList);
67
94
  }
68
95
  ngOnDestroy() {
69
96
  this.ngUnsubscribe.next();
@@ -82,7 +109,7 @@ export class SelectIncludeChildrenPopUpComponent {
82
109
  this.LANG = this.translate.getObjectLang(res);
83
110
  }
84
111
  });
85
- this.globalService.searchRelated.pipe(takeUntil(this.ngUnsubscribe)).subscribe((res) => {
112
+ this.globalService.searchSelect.pipe(takeUntil(this.ngUnsubscribe)).subscribe((res) => {
86
113
  if (res && res.length) {
87
114
  this.filteredOptions = res;
88
115
  }
@@ -103,36 +130,98 @@ export class SelectIncludeChildrenPopUpComponent {
103
130
  this.autoComplete.closePanel();
104
131
  }
105
132
  }
106
- removeCheckedNodeList(item) {
107
- this.selectedData = [];
108
- this.checkedNodeList = this.checkedNodeList.filter(x => (x.id.toLowerCase() !== item.id.toLowerCase() || x.parentId.toLowerCase() !== item.parentId.toLowerCase()));
109
- const tempArr = [];
110
- const tempArrDocument = [];
111
- const newSelectProcessList = [];
112
- const newSelectDocumentList = [];
113
- this.commonCheckedList.forEach(element => {
114
- this.checkedNodeList.forEach(x => {
115
- if (element.id.toLowerCase() === x.id.toLowerCase() && element.parentId.toLowerCase() === x.parentId.toLowerCase()) {
116
- tempArr.push(element);
117
- }
118
- });
119
- });
120
- this.singleProcessList.forEach(element => {
121
- this.checkedNodeList.forEach(x => {
122
- if (element.id.toLowerCase() === x.id.toLowerCase() && element.parentId.toLowerCase() === x.parentId.toLowerCase()) {
123
- newSelectProcessList.push(element);
124
- }
125
- });
126
- });
127
- this.singleProcessList = newSelectProcessList;
128
- this.selectedData = [...tempArr];
129
- this.documentCheckedList.forEach(element => {
130
- this.checkedNodeList.forEach(x => {
131
- if (element.id.toLowerCase() === x.id.toLowerCase() && element.parentId.toLowerCase() === x.parentId.toLowerCase()) {
132
- tempArrDocument.push(element);
133
+ initTree(selectedOptions) {
134
+ if (selectedOptions.length > 0) {
135
+ selectedOptions.forEach(element => {
136
+ this.selectedOptions.push(element);
137
+ if (element.type === SelectOptionTypes.IncludeChildren) {
138
+ this.selectedOptions = this.selectedOptions.concat(element.children);
133
139
  }
140
+ this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
134
141
  });
135
- });
142
+ }
143
+ }
144
+ focusEditItem(selectedOption) {
145
+ const node = this.dataTrees.toArray()[0].getNodeByIdAndParentId(selectedOption.id, selectedOption.parentId);
146
+ if (node) {
147
+ this.dataTrees.toArray()[0].expandNode(node);
148
+ const element = document.getElementById(`_${node.parentId ? node.parentId : ''}_${node.id}_${node.level}`);
149
+ if (element) {
150
+ element.scrollIntoView(false);
151
+ }
152
+ }
153
+ }
154
+ removeCheckedNodeList(item) {
155
+ const index = this.checkedNodeList.findIndex(x => (x.id.toLowerCase() === item.id.toLowerCase() && x.parentId.toLowerCase() === item.parentId.toLowerCase()));
156
+ if (index >= 0) {
157
+ let position = this.selectedOptions.findIndex(x => x.id === item.id && x.parentId === item.parentId);
158
+ if (position >= 0) {
159
+ this.selectedOptions.splice(position, 1);
160
+ }
161
+ if (this.checkedNodeList[index].type === SelectOptionTypes.IncludeChildren) {
162
+ this.removeIncludeChildren(item);
163
+ }
164
+ if (this.includeChildren) {
165
+ this.refactorSelectList(item);
166
+ }
167
+ else {
168
+ this.checkedNodeList.splice(index, 1);
169
+ }
170
+ this.enableSelectedNode({ id: item.id, parentId: item.parentId, itemName: item.name, type: SelectOptionTypes.IncludeChildren });
171
+ this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
172
+ }
173
+ }
174
+ selectSearchOption(item) {
175
+ let position = this.selectedOptions.findIndex(x => x.id === item.id && x.parentId === item.parentId);
176
+ if (position < 0) {
177
+ if (this.includeChildren) {
178
+ this.selectIncludeChildren({
179
+ id: item.id,
180
+ name: item.itemName,
181
+ parentId: item.parentId,
182
+ level: 0,
183
+ expandable: true,
184
+ disabled: false,
185
+ hasChild: false
186
+ });
187
+ this.refactorSelectList({
188
+ id: item.id,
189
+ name: item.itemName,
190
+ parentId: item.parentId,
191
+ level: 0,
192
+ expandable: true,
193
+ disabled: false,
194
+ hasChild: false
195
+ });
196
+ }
197
+ else {
198
+ this.selectedOptions.push(item);
199
+ this.checkedNodeList.push({
200
+ id: item.id,
201
+ itemName: item.itemName,
202
+ type: SelectOptionTypes.SelectOne,
203
+ parentId: item.parentId,
204
+ children: [],
205
+ noChildren: 0,
206
+ noSelectedChildren: 0
207
+ });
208
+ }
209
+ }
210
+ this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
211
+ }
212
+ getItemIconType(item) {
213
+ if (item.itemIcon && item.itemIcon.length)
214
+ return this.itemIconType.name;
215
+ if (item.itemIconPath && item.itemIconPath.length)
216
+ return this.itemIconType.path;
217
+ if (item.itemIconBase64 && item.itemIconBase64.length)
218
+ return this.itemIconType.base64;
219
+ if (item.itemIconSvg && item.itemIconSvg.length)
220
+ return this.itemIconType.svg;
221
+ return this.itemIconType.none;
222
+ }
223
+ getImagePath(item) {
224
+ return this.domSanitizer.bypassSecurityTrustResourceUrl(item.itemIconBase64);
136
225
  }
137
226
  isMatchTrue(arr, arr2) {
138
227
  return arr.every((i) => {
@@ -168,163 +257,87 @@ export class SelectIncludeChildrenPopUpComponent {
168
257
  }
169
258
  }
170
259
  }
171
- getModuleFilteredOptions() {
172
- if (this.listChildrenSelectOne.length) {
173
- for (let index = 0; index < this.listChildrenSelectOne.length; index++) {
174
- const firstEl = this.listChildrenSelectOne[index];
175
- for (let j = 0; j < this.filteredOptions.length; j++) {
176
- const secondEl = this.filteredOptions[j];
177
- if (firstEl.id === secondEl.id) {
178
- this.filteredOptions.splice(j, 1);
179
- }
180
- }
181
- }
182
- }
183
- return this.filteredOptions;
184
- }
185
260
  showSearchResult() {
186
261
  this.autoComplete.openPanel();
187
262
  }
188
263
  displayRelated(related) {
189
264
  return related ? related.itemName : undefined;
190
265
  }
191
- selectSearch(item) {
192
- if (this.treeConfig.selectOne) {
193
- this.disabledList = [];
194
- }
195
- let index = -1;
196
- this.SelectOption = [];
197
- if (this.treeConfig.showCheckBox) {
198
- index = this.checkedNodeList.findIndex(x => {
199
- return x.id === item.id && x.parentId === item.parentId;
200
- });
201
- }
202
- if (index < 0) {
203
- let position = -1;
204
- let node;
205
- let typeId;
206
- }
266
+ getCommonCheckedNode(list) {
207
267
  }
208
- selectNodeRecursive(item) {
209
- let position = this.treeData.findIndex(x => {
210
- return x.rootId === item.rootId;
268
+ selectIncludeChildren(item) {
269
+ let listChildren = [];
270
+ listChildren = this.getAllChildrenNodeRecursive(listChildren, item);
271
+ this.selectedOptions.push({
272
+ id: item.id,
273
+ itemName: item.name,
274
+ itemNumberId: item.id,
275
+ parentId: item.parentId,
276
+ type: SelectOptionTypes.IncludeChildren
211
277
  });
212
- if (position >= 0) {
213
- const node = {
214
- id: item.rootId,
215
- name: item.rootName,
216
- children: [],
217
- parentId: item.parentId
218
- };
219
- let nodeChildren = this.treeData.
220
- filter(x => x.rootId === item.rootId).
221
- map(x => {
278
+ listChildren.forEach(x => {
279
+ const index = this.selectedOptions.findIndex(node => node.id === x.id && node.parentId === x.parentId);
280
+ if (index < 0) {
281
+ this.selectedOptions.push(x);
282
+ }
283
+ });
284
+ }
285
+ removeIncludeChildren(item) {
286
+ let listChildren = [];
287
+ listChildren = this.getAllChildrenNodeRecursive(listChildren, item);
288
+ const itemIndex = this.selectedOptions.findIndex(node => node.id === item.id && node.parentId === item.parentId);
289
+ if (itemIndex >= 0) {
290
+ this.selectedOptions.splice(itemIndex, 1);
291
+ }
292
+ listChildren.forEach(x => {
293
+ const index = this.selectedOptions.findIndex(node => node.id === x.id && node.parentId === x.parentId);
294
+ if (index >= 0) {
295
+ this.selectedOptions.splice(index, 1);
296
+ }
297
+ });
298
+ }
299
+ getAllChildrenNodeRecursive(listResult, item) {
300
+ let children = this.treeData.filter(x => x.parentId === item.id);
301
+ let childrenItem = [...new Set(this.treeData.filter(x => x.rootId === item.id && !!x.childId))];
302
+ if (childrenItem.length > 0) {
303
+ childrenItem = childrenItem.filter(x => listResult.findIndex(node => node.id === x.childId && node.parentId === x.rootId) < 0);
304
+ listResult = listResult.concat([...new Set(childrenItem.map(x => {
305
+ return {
306
+ id: x.childId,
307
+ itemName: x.childName,
308
+ parentId: x.rootId,
309
+ parentName: x.rootName,
310
+ type: SelectOptionTypes.Children
311
+ };
312
+ }))]);
313
+ }
314
+ if (children.length > 0) {
315
+ children = children.filter(x => listResult.findIndex(node => node.id === x.rootId && node.parentId === x.parentId) < 0);
316
+ const uniqueChildren = children.map(x => {
317
+ var _a;
222
318
  return {
223
- id: x.childId,
224
- name: item.childName,
225
- children: [],
226
- parentId: item.rootId
319
+ id: x.rootId,
320
+ itemName: ((_a = x.parentId) === null || _a === void 0 ? void 0 : _a.length) > 0 ? x.subName : x.rootName,
321
+ parentId: x.parentId,
322
+ type: SelectOptionTypes.IncludeChildren
227
323
  };
228
324
  });
229
- let nodeSubfolders = this.treeData.
230
- filter(x => x.parentId === item.rootId);
231
- if (this.treeConfig.showCheckBox) {
232
- nodeChildren.forEach(x => {
233
- this.checkedNodeList.push({
234
- id: x.id,
235
- itemName: x.name,
236
- itemNumberId: item.displayId.toString(),
237
- parentId: item.rootId,
238
- parentName: item.rootName
239
- });
325
+ listResult = listResult.concat(uniqueChildren.filter((x, index) => {
326
+ return index === uniqueChildren.findIndex(node => node.id === x.id && node.parentId === x.parentId);
327
+ }));
328
+ children.forEach(node => {
329
+ listResult = this.getAllChildrenNodeRecursive(listResult, {
330
+ id: node.rootId,
331
+ name: node.rootName,
332
+ parentId: node.parentId,
333
+ level: 0,
334
+ expandable: true,
335
+ hasChild: true,
336
+ disabled: false
240
337
  });
241
- }
242
- else {
243
- nodeChildren.forEach(x => {
244
- this.SelectOption.push({
245
- id: x.id,
246
- itemName: x.name,
247
- itemNumberId: item.displayId.toString(),
248
- parentId: item.rootId,
249
- parentName: item.rootName
250
- });
251
- });
252
- }
253
- this.dataTrees.toArray()[0].todoItemSelection([node].concat(nodeChildren));
254
- if (nodeSubfolders) {
255
- nodeSubfolders.forEach(folder => {
256
- this.selectNodeRecursive(folder);
257
- });
258
- }
259
- }
260
- return;
261
- }
262
- // setTypeProcess(expand) {
263
- // return expand ? this.dataType.area : this.dataType.process;
264
- // }
265
- getCommonCheckedNode(list) {
266
- this.checkedNodeList = [];
267
- this.commonCheckedList = [];
268
- this.singleProcessList = [];
269
- if (list.length) {
270
- list.forEach(item => {
271
- const index = this.checkedNodeList.findIndex(x => x.id === item.id && x.parentId === item.parentId);
272
- if (item.id && index < 0) {
273
- this.commonCheckedList.push(item);
274
- }
275
- if (this.singleSelectOption) {
276
- let position;
277
- if (item.expandable) {
278
- position = this.treeData.findIndex(p => p.rootId === item.id);
279
- }
280
- else {
281
- position = this.treeData.findIndex(p => p.childId === item.id);
282
- }
283
- if (position > -1) {
284
- this.singleProcessList.push({
285
- id: item.id,
286
- itemName: item.name,
287
- itemNumberId: this.treeData[position].displayId.toString(),
288
- parentId: item.parentId,
289
- levelType: item.levelType
290
- });
291
- }
292
- }
293
- if (item.id && index < 0 && !item.expandable && !this.singleSelectOption) {
294
- const position = this.treeData.findIndex(p => p.childId === item.id && p.rootId === item.parentId);
295
- if (position > -1) {
296
- this.checkedNodeList.push({
297
- id: item.id,
298
- itemName: item.name,
299
- parentId: item.parentId,
300
- parentName: this.treeData[position].parentId ? this.treeData[position].subName : this.treeData[position].rootName,
301
- itemNumberId: this.treeData[position].displayId.toString(),
302
- levelType: item.levelType
303
- });
304
- }
305
- }
306
338
  });
307
- if (this.singleSelectOption) {
308
- this.checkedNodeList = [...this.checkedNodeList, ...this.singleProcessList];
309
- }
310
- if (this.maxSelectItemCount && this.maxSelectItemCount > 0) {
311
- const removeList = this.checkedNodeList.slice(0, this.maxSelectItemCount * -1);
312
- if (removeList.length) {
313
- removeList.forEach(item => {
314
- this.removeCheckedNodeList({
315
- id: item.id,
316
- name: item.itemName,
317
- parentId: item.parentId,
318
- level: 0,
319
- expandable: true,
320
- hasChild: true,
321
- disabled: false
322
- });
323
- });
324
- }
325
- this.checkedNodeList = this.checkedNodeList.slice(this.maxSelectItemCount * -1);
326
- }
327
339
  }
340
+ return listResult;
328
341
  }
329
342
  onCloseClick() {
330
343
  this.selectedFolder = null;
@@ -332,13 +345,8 @@ export class SelectIncludeChildrenPopUpComponent {
332
345
  }
333
346
  ;
334
347
  onAddClick() {
335
- // if (this.treeConfig.showCheckBox) {
336
348
  this.selectedFolder = null;
337
349
  this.dialogRef.close(this.checkedNodeList);
338
- // }
339
- // else {
340
- // this.dialogRef.close(this.SelectOption);
341
- // }
342
350
  }
343
351
  getOffsetHeight(element, includeMargin) {
344
352
  let elmHeight = 0, elmMargin = 0;
@@ -350,100 +358,14 @@ export class SelectIncludeChildrenPopUpComponent {
350
358
  return (elmHeight + elmMargin);
351
359
  }
352
360
  getItemChipName(item) {
353
- return (item.parentName) ? `${item.parentName}/${item.itemName}` : item.itemName;
361
+ return `${item.itemName}`;
362
+ }
363
+ getItemSelectedChildrenRatio(item) {
364
+ return `${item.noSelectedChildren}/${item.noChildren}`;
354
365
  }
355
366
  isEllipsisActive(e) {
356
367
  return e ? (e.clientWidth < e.scrollWidth) : false;
357
368
  }
358
- // getNodeIcon(item: SelectOption) {
359
- // switch (item.itemType) {
360
- // case DataType.folder: {
361
- // switch (item.levelType) {
362
- // case DocumentNodeType.DepartmentFolder:
363
- // return 'department_folder_outlined';
364
- // case DocumentNodeType.RegionalFolder:
365
- // return 'regional_folder_outlined';
366
- // case DocumentNodeType.TopFolder:
367
- // return 'enterprise_folder_outlined';
368
- // case DocumentNodeType.Folder:
369
- // return 'local_folder_outlined';
370
- // default:
371
- // return 'folder_outlined';
372
- // }
373
- // }
374
- // case DataType.document: {
375
- // switch (item.levelType) {
376
- // case DocumentNodeType.DepartmentFolder:
377
- // return 'document_department';
378
- // case DocumentNodeType.RegionalFolder:
379
- // return 'document_regional';
380
- // case DocumentNodeType.TopFolder:
381
- // return 'document_enterprise';
382
- // case DocumentNodeType.Folder:
383
- // return 'document_local';
384
- // default:
385
- // return 'document';
386
- // }
387
- // }
388
- // case DataType.area:
389
- // return 'process_area_outlined';
390
- // case DataType.process:
391
- // return 'process';
392
- // case DataType.deviation:
393
- // return 'deviation';
394
- // case DataType.checklist:
395
- // return 'checklist';
396
- // case DataType.risk:
397
- // return 'risk';
398
- // default:
399
- // return 'folder_outlined';
400
- // }
401
- // }
402
- // getSearchOrder() {
403
- // let searchTypes = Object.keys(this.dataType)
404
- // .map(key => ({ value: this.dataType[key], key: key }));
405
- // searchTypes = searchTypes.slice(searchTypes.length / 2);
406
- // return searchTypes;
407
- // }
408
- // getTitle(type: number) {
409
- // switch (type) {
410
- // case DataType.process:
411
- // return this.LANG.PROCESSES;
412
- // case DataType.area:
413
- // return this.LANG.PROCESS_AREA;
414
- // case DataType.document:
415
- // return this.LANG.DOCUMENTS;
416
- // case DataType.folder:
417
- // return this.LANG.FOLDER;
418
- // case DataType.deviation:
419
- // return this.LANG.DEVIATION;
420
- // case DataType.deviationType:
421
- // return this.LANG.DEVIATION_TYPE;
422
- // case DataType.checklist:
423
- // return this.LANG.CHECKLIST;
424
- // case DataType.checklistCategory:
425
- // return this.LANG.CHECKLIST_CATEGORY;
426
- // case DataType.risk:
427
- // return this.LANG.ASSESSMENT;
428
- // case DataType.riskFolder:
429
- // return this.LANG.FOLDER;
430
- // }
431
- // }
432
- // getParentName(item: SelectOption) {
433
- // if (item.itemType === this.dataType.checklist || item.itemType === this.dataType.deviation) {
434
- // return item.parentName;
435
- // }
436
- // return null;
437
- // }
438
- // getItemId(item: SelectOption) {
439
- // if (item.itemType === this.dataType.process) {
440
- // return `${this.LANG.PROCESS_ID}: ${item.itemNumberId}; ${item.statusName}`;
441
- // }
442
- // else if (item.itemType === this.dataType.document) {
443
- // return `${this.LANG.DOCUMENT_ID}: ${item.itemNumberId}; ${item.statusName}`;
444
- // }
445
- // return null;
446
- // }
447
369
  toggleSelectItem(node) {
448
370
  const SelectOption = this.checkedNodeList.find(x => (x.id.toLowerCase() === node.id.toLowerCase() && x.parentId.toLowerCase() === node.parentId.toLowerCase()));
449
371
  if (SelectOption) {
@@ -482,67 +404,247 @@ export class SelectIncludeChildrenPopUpComponent {
482
404
  this.onExpandFolder.emit(item);
483
405
  // }
484
406
  }
485
- // canShowSearchOption(moduleId: number) {
486
- // if (this.canOnlySelectItem &&
487
- // (moduleId === DataType.checklistCategory
488
- // || moduleId === DataType.riskFolder
489
- // || moduleId === DataType.deviationType
490
- // || (moduleId === DataType.area && this.treeConfig && !this.treeConfig.singleSelectOption)
491
- // || (moduleId === DataType.folder && this.treeConfig2 && !this.treeConfig2.singleSelectOption)
492
- // )) {
493
- // return false;
494
- // }
495
- // return this.getModuleFilteredOptions(moduleId).length > 0;
496
- // }
497
407
  selectNodeTreeEvent(node) {
498
- var _a, _b;
499
- let position = -1;
500
- let parentName = '';
501
- let itemNumberId = '';
502
- position = !node.expandable ? this.treeData.findIndex(p => p.childId === node.id && p.rootId === node.parentId) :
503
- this.treeData.findIndex(p => p.rootId === node.id);
504
- parentName = this.treeData[position].parentId ? this.treeData[position].subName : this.treeData[position].rootName;
505
- itemNumberId = (_b = (_a = this.treeData[position]) === null || _a === void 0 ? void 0 : _a.displayId) === null || _b === void 0 ? void 0 : _b.toString();
506
- this.checkedNodeList = [];
507
- this.checkedNodeList.push({
508
- id: node.id,
509
- itemName: node.name,
510
- parentId: node.parentId,
511
- parentName: parentName,
512
- itemNumberId: itemNumberId,
513
- levelType: node.levelType
514
- });
515
- }
516
- getChildNodeSelectOne(listChildren) {
517
- this.listChildrenSelectOne = [];
518
- this.listChildrenSelectOne = listChildren;
408
+ let position = this.selectedOptions.findIndex(x => x.id === node.id && x.parentId === node.parentId);
409
+ if (position > -1) {
410
+ if (this.includeChildren) {
411
+ if (node.expandable) {
412
+ this.removeIncludeChildren(node);
413
+ }
414
+ else {
415
+ const itemIndex = this.selectedOptions.findIndex(item => node.id === item.id && node.parentId === item.parentId);
416
+ if (itemIndex >= 0) {
417
+ this.selectedOptions.splice(itemIndex, 1);
418
+ }
419
+ }
420
+ this.checkedNodeList = this.checkedNodeList.filter(x => x.id !== node.id || x.parentId !== node.parentId);
421
+ this.refactorSelectList(node);
422
+ }
423
+ else {
424
+ const itemIndex = this.selectedOptions.findIndex(item => node.id === item.id && node.parentId === item.parentId);
425
+ if (itemIndex >= 0) {
426
+ this.selectedOptions.splice(itemIndex, 1);
427
+ }
428
+ this.checkedNodeList = this.checkedNodeList.filter(x => x.id !== node.id || x.parentId !== node.parentId);
429
+ }
430
+ }
431
+ else {
432
+ if (this.includeChildren) {
433
+ if (node.expandable) {
434
+ this.selectIncludeChildren(node);
435
+ }
436
+ else {
437
+ this.selectedOptions.push({
438
+ id: node.id,
439
+ itemName: node.name,
440
+ itemNumberId: node.id,
441
+ parentId: node.parentId,
442
+ type: SelectOptionTypes.Children
443
+ });
444
+ }
445
+ this.refactorSelectList(node);
446
+ }
447
+ else {
448
+ this.selectedOptions.push({
449
+ id: node.id,
450
+ itemName: node.name,
451
+ itemNumberId: node.id,
452
+ parentId: node.parentId,
453
+ type: SelectOptionTypes.SelectOne
454
+ });
455
+ this.checkedNodeList.push({
456
+ id: node.id,
457
+ itemName: node.name,
458
+ type: SelectOptionTypes.SelectOne,
459
+ parentId: node.parentId,
460
+ children: [],
461
+ noSelectedChildren: 0,
462
+ noChildren: 0,
463
+ });
464
+ }
465
+ }
466
+ this.selectedData = this.mapSelectOptionToTreeNode(this.selectedOptions);
519
467
  }
520
468
  setValue(e) {
521
469
  this.includeChildren = !!e.checked;
470
+ if (!this.includeChildren) {
471
+ this.checkedNodeList.forEach(node => {
472
+ this.disableSelectedNode(node);
473
+ });
474
+ }
475
+ else {
476
+ this.disabledList = this.orginalDisableList;
477
+ }
478
+ }
479
+ mapSelectOptionToTreeNode(list) {
480
+ return list.map(x => {
481
+ return {
482
+ id: x.id,
483
+ name: x.itemName,
484
+ level: 0,
485
+ expandable: true,
486
+ hasChild: true,
487
+ parentId: x.parentId,
488
+ disabled: false,
489
+ };
490
+ });
491
+ }
492
+ refactorSelectList(node) {
493
+ let parent;
494
+ let parentList = [];
495
+ parent = this.treeData.find(x => x.rootId === node.parentId);
496
+ if (parent) {
497
+ parentList.push({
498
+ id: parent.rootId,
499
+ itemName: parent.rootName,
500
+ parentId: parent.parentId,
501
+ type: SelectOptionTypes.IncludeChildren
502
+ });
503
+ parentList = this.getParentLineOfNode(parentList, parent);
504
+ }
505
+ if (parentList.length > 0) {
506
+ const selectedParentList = parentList.filter(x => this.selectedOptions
507
+ .findIndex(selectedNode => x.id === selectedNode.id && x.parentId === selectedNode.parentId) >= 0);
508
+ if (selectedParentList.length > 0) {
509
+ const highestSelectedNode = selectedParentList[selectedParentList.length - 1];
510
+ this.combineNodes(highestSelectedNode);
511
+ }
512
+ else {
513
+ this.combineNodes({
514
+ id: node.id,
515
+ itemName: node.name,
516
+ type: SelectOptionTypes.IncludeChildren,
517
+ parentId: node.parentId
518
+ });
519
+ }
520
+ }
521
+ else {
522
+ this.combineNodes({
523
+ id: node.id,
524
+ itemName: node.name,
525
+ type: SelectOptionTypes.IncludeChildren,
526
+ parentId: node.parentId
527
+ });
528
+ }
529
+ }
530
+ combineNodes(root) {
531
+ let children = [];
532
+ children = this.getAllChildrenNodeRecursive(children, {
533
+ id: root.id,
534
+ name: root.itemName,
535
+ parentId: root.parentId,
536
+ level: 0,
537
+ expandable: true,
538
+ hasChild: true,
539
+ disabled: false
540
+ });
541
+ let selectedNodeIndex = this.checkedNodeList.findIndex(x => x.id === root.id && x.parentId === root.parentId);
542
+ let nodeList = [];
543
+ children.forEach(child => {
544
+ const index = this.checkedNodeList.findIndex(node => node.id === child.id && node.parentId === child.parentId);
545
+ if (index >= 0) {
546
+ this.checkedNodeList.splice(index, 1);
547
+ }
548
+ const selectIndex = this.selectedOptions.findIndex(node => node.id === child.id && node.parentId === child.parentId);
549
+ if (selectIndex >= 0) {
550
+ nodeList.push(child);
551
+ }
552
+ });
553
+ if (nodeList.length > 0 || children.length === 0) {
554
+ if (selectedNodeIndex < 0) {
555
+ this.checkedNodeList.push({
556
+ id: root.id,
557
+ itemName: root.itemName,
558
+ type: SelectOptionTypes.IncludeChildren,
559
+ parentId: root.parentId,
560
+ children: [],
561
+ noSelectedChildren: 0,
562
+ noChildren: 0
563
+ });
564
+ selectedNodeIndex = this.checkedNodeList.length - 1;
565
+ }
566
+ this.checkedNodeList[selectedNodeIndex].children = nodeList;
567
+ this.checkedNodeList[selectedNodeIndex].noChildren = children.length;
568
+ this.checkedNodeList[selectedNodeIndex].noSelectedChildren = nodeList.length;
569
+ this.checkedNodeList[selectedNodeIndex].type = children.length === 0 ? SelectOptionTypes.SelectOne : SelectOptionTypes.IncludeChildren;
570
+ }
571
+ }
572
+ getParentLineOfNode(listParent, node) {
573
+ let parent;
574
+ parent = this.treeData.find(x => x.rootId === node.parentId);
575
+ if (parent) {
576
+ listParent = [...listParent, {
577
+ id: parent.rootId,
578
+ itemName: parent.rootName,
579
+ parentId: parent.parentId,
580
+ type: SelectOptionTypes.IncludeChildren
581
+ }];
582
+ this.getParentLineOfNode(listParent, parent);
583
+ }
584
+ return listParent;
585
+ }
586
+ disableSelectedNode(node) {
587
+ if (node.type === SelectOptionTypes.IncludeChildren) {
588
+ let children = [];
589
+ children = this.getAllChildrenNodeRecursive(children, {
590
+ id: node.id,
591
+ name: node.itemName,
592
+ parentId: node.parentId,
593
+ level: 0,
594
+ expandable: true,
595
+ hasChild: true,
596
+ disabled: false
597
+ });
598
+ let disableNodes = [];
599
+ const index = this.disabledList.findIndex(x => x.id === node.id && x.parentId === node.parentId);
600
+ if (index < 0) {
601
+ disableNodes.push(node);
602
+ }
603
+ children.forEach(child => {
604
+ const index = this.disabledList.findIndex(x => x.id === child.id && x.parentId === child.parentId);
605
+ if (index < 0) {
606
+ disableNodes.push(child);
607
+ }
608
+ });
609
+ this.disabledList = [...this.disabledList, ...disableNodes];
610
+ }
611
+ }
612
+ enableSelectedNode(node) {
613
+ let children = [];
614
+ children = this.getAllChildrenNodeRecursive(children, {
615
+ id: node.id,
616
+ name: node.itemName,
617
+ parentId: node.parentId,
618
+ level: 0,
619
+ expandable: true,
620
+ hasChild: true,
621
+ disabled: false
622
+ });
623
+ this.disabledList = this.disabledList.filter(x => children.filter(child => (x.id === child.id && x.parentId === child.parentId)).length === 0);
624
+ this.disabledList = this.disabledList.filter(x => !(x.id === node.id && x.parentId === node.parentId));
522
625
  }
523
626
  }
524
- SelectIncludeChildrenPopUpComponent.decorators = [
525
- { type: Component, args: [{
526
- selector: 'qms-select-include-children-popup',
527
- template: "<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\r\n <div id=\"qmslib_related_popup_header\">\r\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\r\n <mat-icon mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmslib_related_popup_header_001\" mat-dialog-content>\r\n <span>{{ headerName | uppercase }}</span>\r\n </div>\r\n </div>\r\n \r\n <div\r\n id=\"qmslib_related_popup_search\"\r\n class=\"input__field\"\r\n (click)=\"showSearchResult()\"\r\n >\r\n <input\r\n #name\r\n type=\"text\"\r\n placeholder=\"{{ LANG.SEARCH }}\"\r\n matInput\r\n [formControl]=\"myControl\"\r\n [matAutocomplete]=\"auto\"\r\n #autoCompleteInputSearch\r\n />\r\n <mat-icon>search</mat-icon>\r\n </div>\r\n \r\n <div class=\"line__divider\"></div>\r\n \r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n [displayWith]=\"displayRelated\"\r\n class=\"mat-autocomplete_related-viewport\"\r\n >\r\n <cdk-virtual-scroll-viewport\r\n qms-scrollbar\r\n itemSize=\"10\"\r\n class=\"related-viewport\"\r\n >\r\n <ng-container *ngFor=\"let type of searchOrder\">\r\n <div\r\n class=\"search__module-result\"\r\n *ngIf=\"filteredOptions\"\r\n >\r\n <span class=\"search__module-title\">Hello</span>\r\n <mat-option\r\n class=\"search__option\"\r\n *ngFor=\"let option of getModuleFilteredOptions()\"\r\n [value]=\"option\"\r\n >\r\n <!-- <qms-list-item type=\"image-square\">\r\n <mat-icon\r\n leading-icon\r\n type=\"image-square\"\r\n [svgIcon]=\"getNodeIcon(option)\"\r\n ></mat-icon>\r\n <div qms-list-header>\r\n <div\r\n qms-line\r\n type=\"caption\"\r\n qms-tool-tip=\"{{\r\n isEllipsisActive(searchItemResult) ? option.parentName : ''\r\n }}\"\r\n mode=\"dark\"\r\n *ngIf=\"getParentName(option)\"\r\n >\r\n <span #searchItemResult class=\"search__result__parent-name\">\r\n {{ option.parentName }}\r\n </span>\r\n </div>\r\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\r\n {{ option.itemName }}\r\n </div>\r\n <div\r\n class=\"caption\"\r\n *ngIf=\"option.breadcumbs && option.breadcumbs.length\"\r\n >\r\n <qms-breadcrumb\r\n class=\"breadcrumb-containe\"\r\n type=\"table\"\r\n numDisplayItem=\"1\"\r\n [nodes]=\"option.breadcumbs\"\r\n >\r\n </qms-breadcrumb>\r\n </div>\r\n </div>\r\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\r\n <span class=\"material-icons-outlined search__description-icon\">\r\n local_offer\r\n </span>\r\n {{ getItemId(option) }}\r\n </div>\r\n </qms-list-item> -->\r\n </mat-option>\r\n </div>\r\n </ng-container>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n \r\n <div class=\"row\">\r\n <div\r\n class=\"qms-scrollbar qmslib_related_popup_content col-12\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length\r\n }\">\r\n <div id=\"qmslib_related_popup_common_002\">\r\n <qms-tree\r\n [treeData]=\"treeData\"\r\n [treeConfig]=\"treeConfig\"\r\n [selectedData]=\"selectedData\"\r\n [selectedRiskData]=\"selectedRiskData\"\r\n [disabledList]=\"disabledList\"\r\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\"\r\n (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\r\n ></qms-tree>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\r\n \r\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\r\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\r\n <button\r\n *ngIf=\"item.itemName\"\r\n mat-button\r\n class=\"related__item__content\"\r\n qms-tool-tip=\"{{\r\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\r\n }}\"\r\n mode=\"dark\"\r\n >\r\n <span class=\"related__item__content_name\" #itemName>\r\n {{getItemChipName(item)}}</span>\r\n <mat-icon\r\n *ngIf=\"!treeConfig?.selectOne\"\r\n (click)=\"removeCheckedNodeList(item)\"\r\n >cancel</mat-icon\r\n >\r\n </button>\r\n </div>\r\n <div class=\"select__toggle-include\">\r\n <mat-slide-toggle\r\n [checked]=\"includeChildren\"\r\n (change)=\"setValue($event)\"\r\n color=\"default\"\r\n qms-group-options>\r\n <span class=\"text-label\">Select label</span>\r\n </mat-slide-toggle>\r\n </div>\r\n </div>\r\n \r\n <div class=\"line__divider\"></div>\r\n \r\n <div class=\"confirm__button__groups\">\r\n <button\r\n *ngIf=\"!checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 7px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }}\r\n </button>\r\n <button\r\n *ngIf=\"checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 0px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\r\n </button>\r\n <button\r\n qms-btn-text\r\n [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\r\n (click)=\"onCloseClick()\"\r\n >\r\n {{ LANG.CANCEL }}\r\n </button>\r\n </div>\r\n</div>\r\n ",
528
- encapsulation: ViewEncapsulation.None,
529
- styles: [".qms-scrollbar::-webkit-scrollbar{width:12px}.qms-scrollbar::-webkit-scrollbar-track{background:rgba(0,0,0,.12);background-clip:content-box}.qms-scrollbar::-webkit-scrollbar-thumb{background:rgba(0,0,0,.38);border-radius:20px;width:4px;border:4px solid transparent;background-clip:content-box}.qms-scrollbar::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.5);background-clip:content-box;border:4px solid transparent}.qms-scrollbar.none-scroll-bg::-webkit-scrollbar-track{background:transparent;background-clip:content-box}.qms__popup .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qms__danger button{border:none;color:#fff;padding:0;text-align:center;text-decoration:none;display:inline-block;cursor:pointer;height:20px;width:20px;font-family:Open Sans;font-size:12px;font-weight:600;font-style:normal;line-height:16px}.qms__danger .red{background-color:#9e360f;margin-left:10px}.qms__danger .yellow{background-color:#e4cf53;margin-left:10px;color:#323232}.qms__danger .green{background-color:#00804c;margin-left:10px}.confirm__button__groups{margin-top:11px}.confirm__button__groups button{min-height:36px;width:auto;font-family:Open Sans;font-weight:500;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px;margin-right:5px;float:right}.confirm__button__groups .confirm{background:#f8f9f9}.confirm__button__groups .confirm:hover{background:#001983;color:#fff}.confirm__button__groups .confirm:disabled{cursor:not-allowed}.confirm__button__groups .cancel{background:#f8f9f9}.confirm__button__groups .cancel:hover{background:#001983;color:#fff}.qmslib__related__popup__container .input__field{display:flex;align-items:center}.qmslib__related__popup__container .input__field input{width:100%;padding:10px;outline:none;border:none;background:#eee}.qmslib__related__popup__container .input__field .mat-icon{margin-left:-30px;cursor:pointer;vertical-align:middle}.qmslib__related__popup__container .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qmslib__related__popup__container .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qmslib__related__popup__container .panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel-tree .mat-expansion-panel-body{padding:0 12px 12px}.qmslib__related__popup__container .mat-expansion-panel-header{height:30px;font-size:12px;letter-spacing:1px;font-family:Raleway;font-weight:600;padding:0}.qmslib__related__popup__container .mat-expansion-panel-header .mat-expansion-panel-header-title{align-items:center;margin-left:12px}.qmslib__related__popup__container .mat-expansion-panel-header .related_popup_toggle-btn{width:1.5rem;height:1.5rem;line-height:1.5rem}.qmslib__related__popup__container .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none}.qmslib__related__popup__container .panel__item{height:100px;margin-top:12px;overflow-x:hidden;overflow-y:auto;padding-right:5px;width:100%;max-width:100%;display:flex;flex-wrap:wrap;align-content:flex-start}.qmslib__related__popup__container .panel__item .related__item__inline{max-width:100%}.qmslib__related__popup__container .panel__item .select__toggle-include{width:100%}.qmslib__related__popup__container .panel__item .related__item__content{height:32px;line-height:32px;background-color:#e5e5e5;max-width:100%;margin-bottom:5px;margin-left:2.5px;margin-right:2.5px}.qmslib__related__popup__container .panel__item .related__item__content .mat-icon{color:#8e8e8e;font-size:24px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name{display:inline-block;min-width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:320px}.qmslib__related__popup__container .qmslib-related-popup-splitview{background-color:#fff;border-left:1px solid #ccc;height:450px;overflow-y:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview .splitview-header{height:30px;font-size:12px;letter-spacing:1px;font-family:RALEWAY;font-weight:600;display:flex;align-items:center}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options{padding:0}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node{margin-left:8px;display:flex;align-items:center;min-height:40px}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon{color:rgba(0,0,0,.6);margin-right:17px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}cdk-virtual-scroll-viewport{overflow-x:hidden}cdk-virtual-scroll-viewport .search__module-result{margin:1.5rem;padding:0 0 .5rem}cdk-virtual-scroll-viewport .search__module-result .search__module-title{font-size:14px;font-weight:600}cdk-virtual-scroll-viewport .search__module-result .search__option{height:auto;line-height:normal;padding:8px 0;border-bottom:1px solid #e0e0e0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item.mat-2-line.image-item{height:auto}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content{margin:0;border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square{width:2.5rem;height:100%;background:transparent;align-self:center;margin-right:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square img{width:24px;height:24px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .material-icons-outlined.leading-icon,cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content mat-icon.leading-icon{padding:4px 0 4px 4px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .subtitle{font-weight:400}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption{overflow:hidden;line-height:normal;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0;margin:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption span.search__result__parent-name{display:inline-block;width:auto;width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .default-subtitle{color:rgba(0,0,0,.38)}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .search__description-icon{margin-right:0;width:12px;height:12px;font-size:12px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .qms-list-text{border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .breadcrumb-containe .qms-breadcrumb-item .mat-icon{font-size:16px!important;padding-bottom:1px}cdk-virtual-scroll-viewport .search__module-result svg{display:block}#qmslib_related_popup_header_001{margin-bottom:20px;padding:0;font-weight:600;font-family:Raleway}.padding-5{padding:5px}.mat-autocomplete_related-viewport{height:100%;max-height:100%!important}.mat-autocomplete_related-viewport .cdk-virtual-scroll-content-wrapper{width:100%}.mat-autocomplete_related-viewport .related-viewport{min-height:10.25rem}"]
530
- },] }
531
- ];
532
- SelectIncludeChildrenPopUpComponent.ctorParameters = () => [
533
- { type: ChangeDetectorRef },
534
- { type: TranslateLibraryService },
535
- { type: MatDialogRef },
536
- { type: QMSSelectGlobalService },
537
- { type: MatIconRegistry },
538
- { type: DomSanitizer },
539
- { type: QMSIconRegistryService },
540
- { type: ElementRef },
541
- { type: SelectPopupData, decorators: [{ type: Inject, args: [MAT_DIALOG_DATA,] }] }
542
- ];
543
- SelectIncludeChildrenPopUpComponent.propDecorators = {
544
- dataTrees: [{ type: ViewChildren, args: [TreeComponent, {},] }],
545
- autoComplete: [{ type: ViewChild, args: ['autoCompleteInputSearch', { read: MatAutocompleteTrigger, static: true },] }],
546
- onMessage: [{ type: HostListener, args: ['window:message', ['$event'],] }]
547
- };
548
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWluY2x1ZGUtY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFhLFNBQVMsRUFBRSxpQkFBaUIsRUFBK0IsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSyxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUzRCxPQUFPLEVBQUUs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QUN0Qzs7O1lBNUJRLGlCQUFpQjtZQVVqQix1QkFBdUI7WUFOdkIsWUFBWTtZQVdaLHNCQUFzQjtZQVZ0QixlQUFlO1lBQ2YsWUFBWTtZQUtaLHNCQUFzQjtZQVgrRixVQUFVO1lBWS9ILGVBQWUsdUJBbUVmLE1BQU0sU0FBQyxlQUFlOzs7d0JBYjFCLFlBQVksU0FBQyxhQUFhLEVBQUUsRUFBRTsyQkFFOUIsU0FBUyxTQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7d0JBb0NuRixZQUFZLFNBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIEFmdGVyVmlld0NoZWNrZWQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4uLy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXRyZWUtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RQb3B1cERhdGEgfSBmcm9tICcuL21vZGVsL3NlbGVjdC1wb3B1cC1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZU1vZGVsIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TU2VsZWN0R2xvYmFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2VsZWN0LWdsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL3RyZWUvdHJlZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmVlRmxhdE5vZGUgfSBmcm9tICcuLi90cmVlL21vZGVsL3RyZWUtZmxhdC1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZUNvbmZpZyB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RDb25zdCB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LmNvbnN0JztcclxuXHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LWluY2x1ZGUtY2hpbGRyZW4tcG9wdXAnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QtaW5jbHVkZS1jaGlsZHJlbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LWluY2x1ZGUtY2hpbGRyZW4uY29tcG9uZW50LnNjc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RJbmNsdWRlQ2hpbGRyZW5Qb3BVcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkIHtcclxuICAgIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIExBTkc6IGFueTtcclxuICAgIGhlYWRlck5hbWUgPSAnJztcclxuICAgIHRyZWVEYXRhOiBBcnJheTxUcmVlTW9kZWw+ID0gW107XHJcbiAgICB0cmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xyXG5cclxuICAgIGNoZWNrZWROb2RlTGlzdDogQXJyYXk8U2VsZWN0T3B0aW9uPiA9IFtdO1xyXG4gICAgU2VsZWN0T3B0aW9uOiBBcnJheTxTZWxlY3RPcHRpb24+ID0gW107XHJcbiAgICBzZWxlY3RlZERhdGE6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcclxuXHJcbiAgICBjb21tb25DaGVja2VkTGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG4gICAgZG9jdW1lbnRDaGVja2VkTGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG4gICAgc2luZ2xlUHJvY2Vzc0xpc3Q6IEFycmF5PFNlbGVjdE9wdGlvbj4gPSBbXTtcclxuXHJcbiAgICBpdGVtVHlwZSA9IDA7XHJcbiAgICBzZWxlY3RlZFJpc2tEYXRhOiBhbnkgPSBbXTtcclxuICAgIGRpc2FibGVkTGlzdDogYW55ID0gW107XHJcbiAgICBkaXNhYmxlZExpc3QyOiBhbnkgPSBbXTtcclxuICAgIG1heFNlbGVjdEl0ZW1Db3VudDogbnVtYmVyO1xyXG4gICAgY2FuT25seVNlbGVjdEl0ZW06IGJvb2xlYW47XHJcblxyXG4gICAgaXNEb2N1bWVudEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgIGlzQ29tbW9uRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgc2luZ2xlU2VsZWN0T3B0aW9uID0gZmFsc2U7XHJcbiAgICBzZWFyY2hPcmRlciA9IFtdO1xyXG5cclxuICAgIG15Q29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gICAgZmlsdGVyZWRPcHRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gICAgaXNJbnB1dFZhbHVlID0gZmFsc2U7XHJcbiAgICBzZWxlY3RlZEZvbGRlcjogVHJlZUZsYXROb2RlID0gbnVsbDtcclxuICAgIGxpc3RDaGlsZHJlblNlbGVjdE9uZTogYW55ID0gW107XHJcbiAgICBpbmNsdWRlQ2hpbGRyZW4gPSBmYWxzZTtcclxuICAgIG9uU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgb25FeHBhbmRGb2xkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdE9wdGlvbj4oKTtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKFRyZWVDb21wb25lbnQsIHt9KSBkYXRhVHJlZXM6IFF1ZXJ5TGlzdDxUcmVlQ29tcG9uZW50PjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdhdXRvQ29tcGxldGVJbnB1dFNlYXJjaCcsIHsgcmVhZDogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciwgc3RhdGljOiB0cnVlIH0pXHJcbiAgICBhdXRvQ29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXI7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8U2VsZWN0SW5jbHVkZUNoaWxkcmVuUG9wVXBDb21wb25lbnQ+LFxyXG4gICAgICAgIHB1YmxpYyBnbG9iYWxTZXJ2aWNlOiBRTVNTZWxlY3RHbG9iYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgaWNvblJlZ2lzdHJ5OiBNYXRJY29uUmVnaXN0cnksXHJcbiAgICAgICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgICAgICBwcml2YXRlIGFwcEljb25TZXJ2aWNlOiBRTVNJY29uUmVnaXN0cnlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZWxlbTogRWxlbWVudFJlZixcclxuICAgICAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IFNlbGVjdFBvcHVwRGF0YVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5oZWFkZXJOYW1lID0gZGF0YS5oZWFkZXJOYW1lO1xyXG4gICAgICAgIHRoaXMudHJlZURhdGEgPSBkYXRhLnRyZWVEYXRhO1xyXG4gICAgICAgIHRoaXMudHJlZUNvbmZpZyA9IGRhdGEudHJlZUNvbmZpZztcclxuICAgICAgICB0aGlzLnNlbGVjdGVkUmlza0RhdGEgPSBkYXRhPy5zZWxlY3RlZE5vZGUgfHwgW107XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSBkYXRhLmRpc2FibGVkTGlzdCB8fCBbXTtcclxuICAgICAgICB0aGlzLnNpbmdsZVNlbGVjdE9wdGlvbiA9IGRhdGEudHJlZUNvbmZpZy5zaW5nbGVTZWxlY3RlZE5vZGU7XHJcbiAgICAgICAgdGhpcy5tYXhTZWxlY3RJdGVtQ291bnQgPSBkYXRhLm1heFNlbGVjdEl0ZW1Db3VudDtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlclByb2Nlc3NBcmVhSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEb2N1bWVudEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyRm9sZGVySWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJEZXZpYXRpb25JY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckNoZWNrbGlzdEljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUmlza0ljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNlYXJjaFJlc3VsdChbXSk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1lc3NhZ2UnLCBbJyRldmVudCddKVxyXG4gICAgb25NZXNzYWdlKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmRhdGEgPT09IFNlbGVjdENvbnN0LkhJREVfU0VBUkNIX1JFU1VMVCkge1xyXG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0TGFuZ3VhZ2VTdWJqZWN0JC5waXBlKCkuc3Vic2NyaWJlKChyZXMpID0+IHtcclxuICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZWFyY2hSZWxhdGVkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gcmVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5teUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDEwMDApKS5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNJbnB1dFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm9uU2VhcmNoUmVsYXRlZCh2YWwpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyB0aGlzLnNlYXJjaE9yZGVyID0gdGhpcy5nZXRTZWFyY2hPcmRlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMgJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGUub3BlblBhbmVsKCk7XHJcbiAgICAgICAgdGhpcy5zZXRSZXN1bHRIZWlnaHQoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYXV0b0NvbXBsZXRlKSB7XHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGUuY2xvc2VQYW5lbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KGl0ZW06IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gW107XHJcblxyXG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmlsdGVyKHggPT4gKHguaWQudG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpIHx8IHgucGFyZW50SWQudG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgY29uc3QgdGVtcEFyciA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHRlbXBBcnJEb2N1bWVudCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdFByb2Nlc3NMaXN0ID0gW107XHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0RG9jdW1lbnRMaXN0ID0gW107XHJcblxyXG5cclxuICAgICAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIHRlbXBBcnIucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNpbmdsZVByb2Nlc3NMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuaWQudG9Mb3dlckNhc2UoKSA9PT0geC5pZC50b0xvd2VyQ2FzZSgpICYmIGVsZW1lbnQucGFyZW50SWQudG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgIG5ld1NlbGVjdFByb2Nlc3NMaXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdCA9IG5ld1NlbGVjdFByb2Nlc3NMaXN0O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRlbXBBcnJdO1xyXG5cclxuICAgICAgICB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgdGVtcEFyckRvY3VtZW50LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc01hdGNoVHJ1ZShhcnI6IGFueVtdLCBhcnIyOiBhbnlbXSkge1xyXG4gICAgICAgIHJldHVybiBhcnIuZXZlcnkoKGkpID0+IHtcclxuICAgICAgICByZXR1cm4gYXJyMi5pbmNsdWRlcyhpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRSZXN1bHRIZWlnaHQoYXJyPzogU2VsZWN0T3B0aW9uW10pIHtcclxuICAgICAgICBsZXQgbWF4SGVpZ2h0ID0gNDg0O1xyXG4gICAgICAgIGNvbnN0IHBvcHVwX2NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb250ZW50JylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgbGluZV9fZGl2aWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVfX2RpdmlkZXInKVswXSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICBpZiAocG9wdXBfY29udGVudCAmJiBsaW5lX19kaXZpZGVyKSB7XHJcbiAgICAgICAgbWF4SGVpZ2h0ID0gdGhpcy5nZXRPZmZzZXRIZWlnaHQocG9wdXBfY29udGVudCwgdHJ1ZSkgKyB0aGlzLmdldE9mZnNldEhlaWdodChsaW5lX19kaXZpZGVyLCB0cnVlKSAqIDI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcicpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHZpZXdyZXBvcnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmVsYXRlZC12aWV3cG9ydCcpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAodmlld3JlcG9ydHMpIHtcclxuICAgICAgICBpZiAoY29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHQgPD0gbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIHZpZXdyZXBvcnRzLnN0eWxlLmhlaWdodCA9IGAke2NvbnRlbnRSZXN1bHQub2Zmc2V0SGVpZ2h0fXB4YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHZpZXdyZXBvcnRzLnN0eWxlLmhlaWdodCA9IGAke21heEhlaWdodH1weGA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNlYXJjaFJlbGF0ZWQoX3ZhbDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcclxuICAgICAgICBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgdGhpcy5teUNvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgKF92YWwpID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBpZiAoISFfdmFsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQoX3ZhbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9kdWxlRmlsdGVyZWRPcHRpb25zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZS5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0RWwgPSB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZVtpbmRleF07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2Vjb25kRWwgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tqXTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0RWwuaWQgPT09IHNlY29uZEVsLmlkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucy5zcGxpY2UoaiwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmVkT3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2VhcmNoUmVzdWx0KCkge1xyXG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXlSZWxhdGVkKHJlbGF0ZWQ/OiBTZWxlY3RPcHRpb24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiByZWxhdGVkID8gcmVsYXRlZC5pdGVtTmFtZSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RTZWFyY2goaXRlbTogU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZUNvbmZpZy5zZWxlY3RPbmUpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkTGlzdCA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGluZGV4ID0gLTE7XHJcbiAgICAgICAgdGhpcy5TZWxlY3RPcHRpb24gPSBbXTtcclxuICAgICAgICBpZiAodGhpcy50cmVlQ29uZmlnLnNob3dDaGVja0JveCkge1xyXG4gICAgICAgIGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4geC5pZCA9PT0gaXRlbS5pZCAmJiB4LnBhcmVudElkID09PSBpdGVtLnBhcmVudElkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IC0xO1xyXG4gICAgICAgIGxldCBub2RlOiBhbnk7XHJcbiAgICAgICAgbGV0IHR5cGVJZDogbnVtYmVyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3ROb2RlUmVjdXJzaXZlKGl0ZW06IFRyZWVNb2RlbCkge1xyXG4gICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGEuZmluZEluZGV4KHggPT4ge1xyXG4gICAgICAgIHJldHVybiB4LnJvb3RJZCA9PT0gaXRlbS5yb290SWQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IG5vZGU6IFRyZWVOb2RlID0ge1xyXG4gICAgICAgICAgICBpZDogaXRlbS5yb290SWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0ucm9vdE5hbWUsXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcclxuICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWRcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgbm9kZUNoaWxkcmVuOiBUcmVlTm9kZVtdID0gdGhpcy50cmVlRGF0YS5cclxuICAgICAgICAgICAgZmlsdGVyKHggPT4geC5yb290SWQgPT09IGl0ZW0ucm9vdElkKS5cclxuICAgICAgICAgICAgbWFwKHggPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHguY2hpbGRJZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uY2hpbGROYW1lLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucm9vdElkXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBub2RlU3ViZm9sZGVyczogVHJlZU1vZGVsW10gPSB0aGlzLnRyZWVEYXRhLlxyXG4gICAgICAgICAgICBmaWx0ZXIoeCA9PiB4LnBhcmVudElkID09PSBpdGVtLnJvb3RJZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRyZWVDb25maWcuc2hvd0NoZWNrQm94KSB7XHJcbiAgICAgICAgICAgIG5vZGVDaGlsZHJlbi5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IHgubmFtZSxcclxuICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogaXRlbS5kaXNwbGF5SWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnJvb3RJZCxcclxuICAgICAgICAgICAgICAgIHBhcmVudE5hbWU6IGl0ZW0ucm9vdE5hbWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbm9kZUNoaWxkcmVuLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuU2VsZWN0T3B0aW9uLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHguaWQsXHJcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogeC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBpdGVtLmRpc3BsYXlJZC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50TmFtZTogaXRlbS5yb290TmFtZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0udG9kb0l0ZW1TZWxlY3Rpb24oW25vZGVdLmNvbmNhdChub2RlQ2hpbGRyZW4pKTtcclxuICAgICAgICBpZiAobm9kZVN1YmZvbGRlcnMpIHtcclxuICAgICAgICAgICAgbm9kZVN1YmZvbGRlcnMuZm9yRWFjaChmb2xkZXIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5vZGVSZWN1cnNpdmUoZm9sZGVyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0VHlwZVByb2Nlc3MoZXhwYW5kKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIGV4cGFuZCA/IHRoaXMuZGF0YVR5cGUuYXJlYSA6IHRoaXMuZGF0YVR5cGUucHJvY2VzcztcclxuICAgIC8vIH1cclxuXHJcbiAgICBnZXRDb21tb25DaGVja2VkTm9kZShsaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+KSB7XHJcbiAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdCA9IFtdO1xyXG5cclxuICAgICAgICBpZiAobGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBpdGVtLmlkICYmIHgucGFyZW50SWQgPT09IGl0ZW0ucGFyZW50SWQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkICYmIGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zaW5nbGVTZWxlY3RPcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9zaXRpb246IG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5leHBhbmRhYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YS5maW5kSW5kZXgocCA9PiBwLnJvb3RJZCA9PT0gaXRlbS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGEuZmluZEluZGV4KHAgPT4gcC5jaGlsZElkID09PSBpdGVtLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogdGhpcy50cmVlRGF0YVtwb3NpdGlvbl0uZGlzcGxheUlkLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IGl0ZW0ubGV2ZWxUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5pZCAmJiBpbmRleCA8IDAgJiYgIWl0ZW0uZXhwYW5kYWJsZSAmJiAhdGhpcy5zaW5nbGVTZWxlY3RPcHRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGEuZmluZEluZGV4KHAgPT4gcC5jaGlsZElkID09PSBpdGVtLmlkICYmIHAucm9vdElkID09PSBpdGVtLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiB0aGlzLnRyZWVEYXRhW3Bvc2l0aW9uXS5wYXJlbnRJZCA/IHRoaXMudHJlZURhdGFbcG9zaXRpb25dLnN1Yk5hbWUgOiB0aGlzLnRyZWVEYXRhW3Bvc2l0aW9uXS5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiB0aGlzLnRyZWVEYXRhW3Bvc2l0aW9uXS5kaXNwbGF5SWQudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBpdGVtLmxldmVsVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IFsuLi50aGlzLmNoZWNrZWROb2RlTGlzdCwgLi4udGhpcy5zaW5nbGVQcm9jZXNzTGlzdF07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCAmJiB0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUxpc3QgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5zbGljZSgwLCB0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCAqIC0xKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVMaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxpc3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5zbGljZSh0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCAqIC0xKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNsb3NlQ2xpY2soKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICAgIH07XHJcblxyXG4gICAgb25BZGRDbGljaygpIHtcclxuICAgICAgICAvLyBpZiAodGhpcy50cmVlQ29uZmlnLnNob3dDaGVja0JveCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuY2hlY2tlZE5vZGVMaXN0KTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gZWxzZSB7XHJcbiAgICAgICAgLy8gICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLlNlbGVjdE9wdGlvbik7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIGdldE9mZnNldEhlaWdodChlbGVtZW50OiBIVE1MRWxlbWVudCwgaW5jbHVkZU1hcmdpbjogYm9vbGVhbik6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGVsbUhlaWdodCA9IDAsIGVsbU1hcmdpbiA9IDA7XHJcblxyXG4gICAgICAgIGVsbUhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICAgIGlmIChpbmNsdWRlTWFyZ2luKSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcclxuICAgICAgICBlbG1NYXJnaW4gPSBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblRvcC5yZXBsYWNlKCdweCcsICcnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkJvdHRvbS5yZXBsYWNlKCdweCcsICcnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKGVsbUhlaWdodCArIGVsbU1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUNoaXBOYW1lKGl0ZW06IFNlbGVjdE9wdGlvbikge1xyXG4gICAgICAgIHJldHVybiAoaXRlbS5wYXJlbnROYW1lKSA/IGAke2l0ZW0ucGFyZW50TmFtZX0vJHtpdGVtLml0ZW1OYW1lfWAgOiBpdGVtLml0ZW1OYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRWxsaXBzaXNBY3RpdmUoZTogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZSA/IChlLmNsaWVudFdpZHRoIDwgZS5zY3JvbGxXaWR0aCkgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBnZXROb2RlSWNvbihpdGVtOiBTZWxlY3RPcHRpb24pIHtcclxuICAgIC8vICAgICBzd2l0Y2ggKGl0ZW0uaXRlbVR5cGUpIHtcclxuICAgIC8vICAgICBjYXNlIERhdGFUeXBlLmZvbGRlcjoge1xyXG4gICAgLy8gICAgICAgICBzd2l0Y2ggKGl0ZW0ubGV2ZWxUeXBlKSB7XHJcbiAgICAvLyAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5EZXBhcnRtZW50Rm9sZGVyOlxyXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuICdkZXBhcnRtZW50X2ZvbGRlcl9vdXRsaW5lZCc7XHJcbiAgICAvLyAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgIC8vICAgICAgICAgICAgIHJldHVybiAncmVnaW9uYWxfZm9sZGVyX291dGxpbmVkJztcclxuICAgIC8vICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlRvcEZvbGRlcjpcclxuICAgIC8vICAgICAgICAgICAgIHJldHVybiAnZW50ZXJwcmlzZV9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgLy8gICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRm9sZGVyOlxyXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuICdsb2NhbF9mb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgLy8gICAgICAgICBkZWZhdWx0OlxyXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6IHtcclxuICAgIC8vICAgICAgICAgc3dpdGNoIChpdGVtLmxldmVsVHlwZSkge1xyXG4gICAgLy8gICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcclxuICAgIC8vICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfZGVwYXJ0bWVudCc7XHJcbiAgICAvLyAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcclxuICAgIC8vICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfcmVnaW9uYWwnO1xyXG4gICAgLy8gICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuVG9wRm9sZGVyOlxyXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9lbnRlcnByaXNlJztcclxuICAgIC8vICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcclxuICAgIC8vICAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfbG9jYWwnO1xyXG4gICAgLy8gICAgICAgICBkZWZhdWx0OlxyXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudCc7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxyXG4gICAgLy8gICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XHJcbiAgICAvLyAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4gICAgLy8gICAgICAgICByZXR1cm4gJ3Byb2Nlc3MnO1xyXG4gICAgLy8gICAgIGNhc2UgRGF0YVR5cGUuZGV2aWF0aW9uOlxyXG4gICAgLy8gICAgICAgICByZXR1cm4gJ2RldmlhdGlvbic7XHJcbiAgICAvLyAgICAgY2FzZSBEYXRhVHlwZS5jaGVja2xpc3Q6XHJcbiAgICAvLyAgICAgICAgIHJldHVybiAnY2hlY2tsaXN0JztcclxuICAgIC8vICAgICBjYXNlIERhdGFUeXBlLnJpc2s6XHJcbiAgICAvLyAgICAgICAgIHJldHVybiAncmlzayc7XHJcbiAgICAvLyAgICAgZGVmYXVsdDpcclxuICAgIC8vICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBnZXRTZWFyY2hPcmRlcigpIHtcclxuICAgIC8vICAgICBsZXQgc2VhcmNoVHlwZXMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFUeXBlKVxyXG4gICAgLy8gICAgIC5tYXAoa2V5ID0+ICh7IHZhbHVlOiB0aGlzLmRhdGFUeXBlW2tleV0sIGtleToga2V5IH0pKTtcclxuICAgIC8vICAgICBzZWFyY2hUeXBlcyA9IHNlYXJjaFR5cGVzLnNsaWNlKHNlYXJjaFR5cGVzLmxlbmd0aCAvIDIpO1xyXG4gICAgLy8gICAgIHJldHVybiBzZWFyY2hUeXBlcztcclxuICAgIC8vIH1cclxuXHJcbi8vICAgZ2V0VGl0bGUodHlwZTogbnVtYmVyKSB7XHJcbi8vICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuLy8gICAgICAgY2FzZSBEYXRhVHlwZS5wcm9jZXNzOlxyXG4vLyAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuUFJPQ0VTU0VTO1xyXG4vLyAgICAgICBjYXNlIERhdGFUeXBlLmFyZWE6XHJcbi8vICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5QUk9DRVNTX0FSRUE7XHJcbi8vICAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XHJcbi8vICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5ET0NVTUVOVFM7XHJcbi8vICAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOlxyXG4vLyAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuRk9MREVSO1xyXG4vLyAgICAgICBjYXNlIERhdGFUeXBlLmRldmlhdGlvbjpcclxuLy8gICAgICAgICByZXR1cm4gdGhpcy5MQU5HLkRFVklBVElPTjtcclxuLy8gICAgICAgY2FzZSBEYXRhVHlwZS5kZXZpYXRpb25UeXBlOlxyXG4vLyAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuREVWSUFUSU9OX1RZUEU7XHJcbi8vICAgICAgIGNhc2UgRGF0YVR5cGUuY2hlY2tsaXN0OlxyXG4vLyAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuQ0hFQ0tMSVNUO1xyXG4vLyAgICAgICBjYXNlIERhdGFUeXBlLmNoZWNrbGlzdENhdGVnb3J5OlxyXG4vLyAgICAgICAgIHJldHVybiB0aGlzLkxBTkcuQ0hFQ0tMSVNUX0NBVEVHT1JZO1xyXG4vLyAgICAgICBjYXNlIERhdGFUeXBlLnJpc2s6XHJcbi8vICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5BU1NFU1NNRU5UO1xyXG4vLyAgICAgICBjYXNlIERhdGFUeXBlLnJpc2tGb2xkZXI6XHJcbi8vICAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5GT0xERVI7XHJcbi8vICAgICB9XHJcbi8vICAgfVxyXG5cclxuLy8gICBnZXRQYXJlbnROYW1lKGl0ZW06IFNlbGVjdE9wdGlvbikge1xyXG4vLyAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUuY2hlY2tsaXN0IHx8IGl0ZW0uaXRlbVR5cGUgPT09IHRoaXMuZGF0YVR5cGUuZGV2aWF0aW9uKSB7XHJcbi8vICAgICAgIHJldHVybiBpdGVtLnBhcmVudE5hbWU7XHJcbi8vICAgICB9XHJcbi8vICAgICByZXR1cm4gbnVsbDtcclxuLy8gICB9XHJcblxyXG4vLyAgIGdldEl0ZW1JZChpdGVtOiBTZWxlY3RPcHRpb24pIHtcclxuLy8gICAgIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLnByb2Nlc3MpIHtcclxuLy8gICAgICAgcmV0dXJuIGAke3RoaXMuTEFORy5QUk9DRVNTX0lEfTogJHtpdGVtLml0ZW1OdW1iZXJJZH07ICR7aXRlbS5zdGF0dXNOYW1lfWA7XHJcbi8vICAgICB9XHJcbi8vICAgICBlbHNlIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmRvY3VtZW50KSB7XHJcbi8vICAgICAgIHJldHVybiBgJHt0aGlzLkxBTkcuRE9DVU1FTlRfSUR9OiAke2l0ZW0uaXRlbU51bWJlcklkfTsgJHtpdGVtLnN0YXR1c05hbWV9YDtcclxuLy8gICAgIH1cclxuLy8gICAgIHJldHVybiBudWxsO1xyXG4vLyAgIH1cclxuXHJcbiAgICB0b2dnbGVTZWxlY3RJdGVtKG5vZGU6IFNlbGVjdE9wdGlvbikge1xyXG4gICAgICAgIGNvbnN0IFNlbGVjdE9wdGlvbiA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBpZiAoU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xyXG4gICAgICAgICAgICBpZDogU2VsZWN0T3B0aW9uLmlkLFxyXG4gICAgICAgICAgICBuYW1lOiBub2RlLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICBwYXJlbnRJZDogU2VsZWN0T3B0aW9uLnBhcmVudElkLFxyXG4gICAgICAgICAgICBoYXNDaGlsZDogZmFsc2UsXHJcbiAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5zZWxlY3RSZWxhdGVkKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc05vZGVTZWxlY3RlZChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldENoaWxkcmVuT2ZGb2xkZXIobm9kZTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuc3BsaXRWaWV3KSB7XHJcbiAgICAgICAgLy8gY29uc3QgcGFyZW50VGV4dHMgPSB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGV4dC1ub2RlLXBhcmVudCcpO1xyXG4gICAgICAgIC8vIFtdLmZvckVhY2guY2FsbChwYXJlbnRUZXh0cywgKGVsKSA9PiB7XHJcbiAgICAgICAgLy8gICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZS1pdGVtJyk7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgLy8gY29uc3QgaXRlbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjXyR7bm9kZS5wYXJlbnRJZCA/IG5vZGUucGFyZW50SWQgOiAnJ31fJHtub2RlLmlkfV8ke25vZGUubGV2ZWx9YCk7XHJcbiAgICAgICAgLy8gW10uZm9yRWFjaC5jYWxsKGl0ZW1FbGVtZW50LCAoZWwpID0+IHtcclxuICAgICAgICAvLyAgICAgZWwuY2xhc3NMaXN0LmFkZCgnYWN0aXZlLWl0ZW0nKTtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICBsZXQgaXRlbSA9IG5ldyBTZWxlY3RPcHRpb24oKTtcclxuICAgICAgICBpdGVtLmlkID0gbm9kZS5pZDtcclxuICAgICAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xyXG4gICAgICAgIGl0ZW0ubGV2ZWxUeXBlID0gbm9kZS5sZXZlbFR5cGU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG5vZGU7XHJcbiAgICAgICAgdGhpcy5vbkV4cGFuZEZvbGRlci5lbWl0KGl0ZW0pO1xyXG4gICAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbi8vICAgY2FuU2hvd1NlYXJjaE9wdGlvbihtb2R1bGVJZDogbnVtYmVyKSB7XHJcbi8vICAgICBpZiAodGhpcy5jYW5Pbmx5U2VsZWN0SXRlbSAmJlxyXG4vLyAgICAgICAobW9kdWxlSWQgPT09IERhdGFUeXBlLmNoZWNrbGlzdENhdGVnb3J5XHJcbi8vICAgICAgICAgfHwgbW9kdWxlSWQgPT09IERhdGFUeXBlLnJpc2tGb2xkZXJcclxuLy8gICAgICAgICB8fCBtb2R1bGVJZCA9PT0gRGF0YVR5cGUuZGV2aWF0aW9uVHlwZVxyXG4vLyAgICAgICAgIHx8IChtb2R1bGVJZCA9PT0gRGF0YVR5cGUuYXJlYSAmJiB0aGlzLnRyZWVDb25maWcgJiYgIXRoaXMudHJlZUNvbmZpZy5zaW5nbGVTZWxlY3RPcHRpb24pXHJcbi8vICAgICAgICAgfHwgKG1vZHVsZUlkID09PSBEYXRhVHlwZS5mb2xkZXIgJiYgdGhpcy50cmVlQ29uZmlnMiAmJiAhdGhpcy50cmVlQ29uZmlnMi5zaW5nbGVTZWxlY3RPcHRpb24pXHJcbi8vICAgICAgICkpIHtcclxuLy8gICAgICAgcmV0dXJuIGZhbHNlO1xyXG4vLyAgICAgfVxyXG4vLyAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlRmlsdGVyZWRPcHRpb25zKG1vZHVsZUlkKS5sZW5ndGggPiAwO1xyXG4vLyAgIH1cclxuXHJcbiAgICBzZWxlY3ROb2RlVHJlZUV2ZW50KG5vZGUpIHtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSAtMTtcclxuICAgICAgICBsZXQgcGFyZW50TmFtZSA9ICcnO1xyXG4gICAgICAgIGxldCBpdGVtTnVtYmVySWQgPSAnJztcclxuXHJcbiAgICAgICAgcG9zaXRpb24gPSAhbm9kZS5leHBhbmRhYmxlID8gdGhpcy50cmVlRGF0YS5maW5kSW5kZXgocCA9PiBwLmNoaWxkSWQgPT09IG5vZGUuaWQgJiYgcC5yb290SWQgPT09IG5vZGUucGFyZW50SWQpIDpcclxuICAgICAgICB0aGlzLnRyZWVEYXRhLmZpbmRJbmRleChwID0+IHAucm9vdElkID09PSBub2RlLmlkKTtcclxuICAgICAgICBwYXJlbnROYW1lID0gdGhpcy50cmVlRGF0YVtwb3NpdGlvbl0ucGFyZW50SWQgPyB0aGlzLnRyZWVEYXRhW3Bvc2l0aW9uXS5zdWJOYW1lIDogdGhpcy50cmVlRGF0YVtwb3NpdGlvbl0ucm9vdE5hbWU7XHJcbiAgICAgICAgaXRlbU51bWJlcklkID0gdGhpcy50cmVlRGF0YVtwb3NpdGlvbl0/LmRpc3BsYXlJZD8udG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICAgIHBhcmVudE5hbWU6IHBhcmVudE5hbWUsXHJcbiAgICAgICAgaXRlbU51bWJlcklkOiBpdGVtTnVtYmVySWQsXHJcbiAgICAgICAgbGV2ZWxUeXBlOiBub2RlLmxldmVsVHlwZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENoaWxkTm9kZVNlbGVjdE9uZShsaXN0Q2hpbGRyZW4pIHtcclxuICAgICAgICB0aGlzLmxpc3RDaGlsZHJlblNlbGVjdE9uZSA9IFtdO1xyXG4gICAgICAgIHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lID0gbGlzdENoaWxkcmVuO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFZhbHVlKGUpe1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUNoaWxkcmVuID0gISFlLmNoZWNrZWQ7XHJcbiAgICB9XHJcbn1cclxuIl19
627
+ SelectIncludeChildrenPopUpComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SelectIncludeChildrenPopUpComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TranslateLibraryService }, { token: i2.MatDialogRef }, { token: i3.QMSSelectGlobalService }, { token: i4.MatIconRegistry }, { token: i5.DomSanitizer }, { token: i6.QMSIconRegistryService }, { token: i0.ElementRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
628
+ SelectIncludeChildrenPopUpComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: SelectIncludeChildrenPopUpComponent, selector: "qms-select-include-children-popup", host: { listeners: { "window:message": "onMessage($event)" } }, viewQueries: [{ propertyName: "autoComplete", first: true, predicate: ["autoCompleteInputSearch"], descendants: true, read: MatAutocompleteTrigger, static: true }, { propertyName: "dataTrees", predicate: TreeComponent, descendants: true }], ngImport: i0, template: "<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\r\n <div id=\"qmslib_related_popup_header\">\r\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\r\n <mat-icon mat-icon>close</mat-icon>\r\n </span>\r\n <div id=\"qmslib_related_popup_header_001\" mat-dialog-content>\r\n <span>{{ headerName | uppercase }}</span>\r\n </div>\r\n </div>\r\n \r\n <div\r\n id=\"qmslib_related_popup_search\"\r\n class=\"input__field\"\r\n (click)=\"showSearchResult()\"\r\n >\r\n <input\r\n #name\r\n type=\"text\"\r\n placeholder=\"{{ LANG.SEARCH }}\"\r\n matInput\r\n [formControl]=\"myControl\"\r\n [matAutocomplete]=\"auto\"\r\n #autoCompleteInputSearch\r\n />\r\n <mat-icon>search</mat-icon>\r\n </div>\r\n <div class=\"select__toggle-include\">\r\n <mat-slide-toggle\r\n [checked]=\"includeChildren\"\r\n (change)=\"setValue($event)\"\r\n color=\"default\"\r\n qms-group-options>\r\n <span class=\"text-label\">Select label</span>\r\n </mat-slide-toggle>\r\n </div>\r\n <div class=\"line__divider\"></div>\r\n \r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n [displayWith]=\"displayRelated\"\r\n class=\"mat-autocomplete_related-viewport\"\r\n >\r\n <cdk-virtual-scroll-viewport\r\n qms-scrollbar\r\n itemSize=\"10\"\r\n class=\"related-viewport\"\r\n >\r\n <div\r\n class=\"search__module-result\"\r\n *ngIf=\"filteredOptions\">\r\n <mat-option\r\n class=\"search__option\"\r\n *ngFor=\"let option of filteredOptions\"\r\n [value]=\"option\"\r\n (click)=\"selectSearchOption(option)\"\r\n >\r\n <qms-list-item type=\"image-square\">\r\n <mat-icon\r\n leading-icon\r\n *ngIf=\"getItemIconType(option) === itemIconType.name\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n type=\"image-square\"\r\n >\r\n {{ option.itemIcon }}\r\n </mat-icon>\r\n\r\n <mat-icon \r\n leading-icon\r\n *ngIf=\"getItemIconType(option) === itemIconType.svg\"\r\n class=\"mat-icon-rtl-mirror material-icons-outlined\"\r\n type=\"image-square\"\r\n [svgIcon]=\"option.itemIconSvg\"\r\n >\r\n </mat-icon>\r\n\r\n <img \r\n leading-icon\r\n *ngIf=\"getItemIconType(option) === itemIconType.path\"\r\n class=\"mat-icon\"\r\n [src]=\"option.itemIconPath\"\r\n type=\"image-square\"\r\n />\r\n\r\n <img \r\n leading-icon\r\n *ngIf=\"getItemIconType(option) === itemIconType.base64\"\r\n class=\"mat-icon image-base64\"\r\n [src]=\"getImagePath(option)\"\r\n type=\"image-square\"\r\n />\r\n <div qms-list-header>\r\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\r\n {{ option.itemName }}\r\n </div>\r\n </div>\r\n </qms-list-item>\r\n </mat-option>\r\n </div>\r\n </cdk-virtual-scroll-viewport>\r\n </mat-autocomplete>\r\n \r\n <div class=\"row\">\r\n <div\r\n class=\"qms-scrollbar qmslib_related_popup_content col-12\"\r\n [ngClass]=\"{\r\n panel__content_item: checkedNodeList.length,\r\n panel__content: !checkedNodeList.length\r\n }\">\r\n <div id=\"qmslib_related_popup_common_002\">\r\n <qms-tree\r\n [treeData]=\"treeData\"\r\n [treeConfig]=\"treeConfig\"\r\n [selectedData]=\"selectedData\"\r\n [selectedRiskData]=\"selectedRiskData\"\r\n [disabledList]=\"disabledList\"\r\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\r\n (nodeExpandEvent)=\"getChildrenOfFolder($event)\"\r\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\"\r\n ></qms-tree>\r\n </div>\r\n </div>\r\n \r\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\r\n \r\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\r\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\r\n <button\r\n *ngIf=\"item.itemName\"\r\n mat-button\r\n class=\"related__item__content\"\r\n qms-tool-tip=\"{{\r\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\r\n }}\"\r\n mode=\"dark\"\r\n >\r\n <span class=\"related__item__content_name\" #itemName>\r\n {{getItemChipName(item)}}\r\n <span class=\"select__include-children__count\" *ngIf=\"item.noSelectedChildren > 0\">\r\n {{getItemSelectedChildrenRatio(item)}}\r\n </span>\r\n </span>\r\n \r\n <mat-icon\r\n (click)=\"removeCheckedNodeList(item)\"\r\n >cancel</mat-icon\r\n >\r\n </button>\r\n </div>\r\n </div>\r\n \r\n <div class=\"line__divider\"></div>\r\n \r\n <div class=\"confirm__button__groups\">\r\n <button\r\n *ngIf=\"!checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 7px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }}\r\n </button>\r\n <button\r\n *ngIf=\"checkedNodeList.length\"\r\n qms-btn\r\n style=\"margin-top: 0px\"\r\n (click)=\"onAddClick()\"\r\n >\r\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\r\n </button>\r\n <button\r\n qms-btn-text\r\n [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\r\n (click)=\"onCloseClick()\"\r\n >\r\n {{ LANG.CANCEL }}\r\n </button>\r\n </div>\r\n</div>\r\n ", styles: [".qms-scrollbar::-webkit-scrollbar{width:12px}.qms-scrollbar::-webkit-scrollbar-track{background:rgba(0,0,0,.12);background-clip:content-box}.qms-scrollbar::-webkit-scrollbar-thumb{background:rgba(0,0,0,.38);border-radius:20px;width:4px;border:4px solid transparent;background-clip:content-box}.qms-scrollbar::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.5);background-clip:content-box;border:4px solid transparent}.qms-scrollbar.none-scroll-bg::-webkit-scrollbar-track{background:transparent;background-clip:content-box}.qms__popup .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qms__danger button{border:none;color:#fff;padding:0;text-align:center;text-decoration:none;display:inline-block;cursor:pointer;height:20px;width:20px;font-family:Open Sans;font-size:12px;font-weight:600;font-style:normal;line-height:16px}.qms__danger .red{background-color:#9e360f;margin-left:10px}.qms__danger .yellow{background-color:#e4cf53;margin-left:10px;color:#323232}.qms__danger .green{background-color:#00804c;margin-left:10px}.confirm__button__groups{margin-top:11px}.confirm__button__groups button{min-height:36px;width:auto;font-family:Open Sans;font-weight:500;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px;margin-right:5px;float:right}.confirm__button__groups .confirm{background:#f8f9f9}.confirm__button__groups .confirm:hover{background:#001983;color:#fff}.confirm__button__groups .confirm:disabled{cursor:not-allowed}.confirm__button__groups .cancel{background:#f8f9f9}.confirm__button__groups .cancel:hover{background:#001983;color:#fff}.qmslib__related__popup__container .input__field{display:flex;align-items:center}.qmslib__related__popup__container .input__field input{width:100%;padding:10px;outline:none;border:none;background:#eee}.qmslib__related__popup__container .input__field .mat-icon{margin-left:-30px;cursor:pointer;vertical-align:middle}.qmslib__related__popup__container .select__toggle-include{width:100%;padding:0;margin:1rem 0}.qmslib__related__popup__container .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qmslib__related__popup__container .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qmslib__related__popup__container .panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel-tree .mat-expansion-panel-body{padding:0 12px 12px}.qmslib__related__popup__container .mat-expansion-panel-header{height:30px;font-size:12px;letter-spacing:1px;font-family:Raleway;font-weight:600;padding:0}.qmslib__related__popup__container .mat-expansion-panel-header .mat-expansion-panel-header-title{align-items:center;margin-left:12px}.qmslib__related__popup__container .mat-expansion-panel-header .related_popup_toggle-btn{width:1.5rem;height:1.5rem;line-height:1.5rem}.qmslib__related__popup__container .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none}.qmslib__related__popup__container .panel__item{height:100px;margin-top:12px;overflow-x:hidden;overflow-y:auto;padding-right:5px;width:100%;max-width:100%;display:flex;flex-wrap:wrap;align-content:flex-start}.qmslib__related__popup__container .panel__item .related__item__inline{max-width:100%}.qmslib__related__popup__container .panel__item .related__item__content{height:32px;line-height:32px;background-color:#e5e5e5;max-width:100%;margin-bottom:5px;margin-left:2.5px;margin-right:2.5px}.qmslib__related__popup__container .panel__item .related__item__content .mat-icon{color:#8e8e8e;font-size:24px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name{display:inline-block;min-width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:320px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name .select__include-children__count{font-size:.75rem;color:rgba(0,0,0,.38)}.qmslib__related__popup__container .qmslib-related-popup-splitview{background-color:#fff;border-left:1px solid #ccc;height:450px;overflow-y:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview .splitview-header{height:30px;font-size:12px;letter-spacing:1px;font-family:RALEWAY;font-weight:600;display:flex;align-items:center}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options{padding:0}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node{margin-left:8px;display:flex;align-items:center;min-height:40px}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon{color:rgba(0,0,0,.6);margin-right:17px;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content}cdk-virtual-scroll-viewport{overflow-x:hidden}cdk-virtual-scroll-viewport .search__module-result{margin:1.5rem;padding:0 0 .5rem}cdk-virtual-scroll-viewport .search__module-result .search__module-title{font-size:14px;font-weight:600}cdk-virtual-scroll-viewport .search__module-result .search__option{height:auto;line-height:normal;padding:8px 0;border-bottom:1px solid #e0e0e0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item.mat-2-line.image-item{height:auto}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content{margin:0;border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square{width:2.5rem;height:100%;background:transparent;align-self:center;margin-right:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square img{width:24px;height:24px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .material-icons-outlined.leading-icon,cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content mat-icon.leading-icon{padding:4px 0 4px 4px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .subtitle{font-weight:400}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption{overflow:hidden;line-height:normal;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0;margin:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption span.search__result__parent-name{display:inline-block;width:auto;width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .default-subtitle{color:rgba(0,0,0,.38)}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .search__description-icon{margin-right:0;width:12px;height:12px;font-size:12px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .qms-list-text{border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .breadcrumb-containe .qms-breadcrumb-item .mat-icon{font-size:16px!important;padding-bottom:1px}cdk-virtual-scroll-viewport .search__module-result svg{display:block}#qmslib_related_popup_header_001{margin-bottom:20px;padding:0;font-weight:600;font-family:Raleway}.padding-5{padding:5px}.mat-autocomplete_related-viewport{height:100%;max-height:100%!important}.mat-autocomplete_related-viewport .cdk-virtual-scroll-content-wrapper{width:100%}.mat-autocomplete_related-viewport .related-viewport{min-height:10.25rem}"], components: [{ type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex", "name", "id", "labelPosition", "aria-label", "aria-labelledby", "required", "checked"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { type: i8.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i9.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation"], outputs: ["scrolledIndexChange"] }, { type: i10.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i11.QMSListItem, selector: "qms-list-item", inputs: ["type"] }, { type: i12.TreeComponent, selector: "qms-tree", inputs: ["treeData", "treeConfig", "selectedData", "selectedRiskData", "disabledList", "expandOnTitleClick", "expandToChildNode"], outputs: ["selectNodeEvent", "selectFolderEvent", "checkBoxEvent", "childCheckedEvent", "nodeExpandEvent", "getChildNodeSelectOne"] }, { type: i13.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i14.QMSButton, selector: "button[qms-btn], button[qms-btn-lg], button[qms-btn-outlined],\n button[qms-btn-outlined-lg], button[qms-btn-text], button[qms-btn-text-lg],\n button[qms-btn-fab],button[qms-btn-fab-sm],button[qms-btn-fab-ext],\n button[qms-btn-fab-outlined],button[qms-btn-fab-outlined-sm],button[qms-btn-fab-outlined-ext]", inputs: ["disabled", "color"], exportAs: ["qmsButton"] }], directives: [{ type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i16.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i8.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i16.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i16.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i17.QMSGroupOptionDirective, selector: "[qms-group-options]" }, { type: i17.AutocompleteOffDirective, selector: "[qms-group-options]" }, { type: i9.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i18.QMSScrollbarDirective, selector: "[qms-scrollbar]", inputs: ["isNoneBackground"] }, { type: i19.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i19.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i11.QMSListLeadingIcon, selector: "[leading-icon]" }, { type: i11.QMSListHeader, selector: "[qms-list-header]" }, { type: i11.QMSListLine, selector: "[qms-line]", inputs: ["size", "type", "color"] }, { type: i19.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i20.QMSToolTipRendererDirective, selector: "[qms-tool-tip]", inputs: ["showToolTip", "mode", "qms-tool-tip", "contentTemplate", "position"] }, { type: i19.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "uppercase": i19.UpperCasePipe }, encapsulation: i0.ViewEncapsulation.None });
629
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: SelectIncludeChildrenPopUpComponent, decorators: [{
630
+ type: Component,
631
+ args: [{
632
+ selector: 'qms-select-include-children-popup',
633
+ templateUrl: './select-include-children.component.html',
634
+ styleUrls: ['./select-include-children.component.scss'],
635
+ encapsulation: ViewEncapsulation.None
636
+ }]
637
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.TranslateLibraryService }, { type: i2.MatDialogRef }, { type: i3.QMSSelectGlobalService }, { type: i4.MatIconRegistry }, { type: i5.DomSanitizer }, { type: i6.QMSIconRegistryService }, { type: i0.ElementRef }, { type: i21.SelectPopupData, decorators: [{
638
+ type: Inject,
639
+ args: [MAT_DIALOG_DATA]
640
+ }] }]; }, propDecorators: { dataTrees: [{
641
+ type: ViewChildren,
642
+ args: [TreeComponent, {}]
643
+ }], autoComplete: [{
644
+ type: ViewChild,
645
+ args: ['autoCompleteInputSearch', { read: MatAutocompleteTrigger, static: true }]
646
+ }], onMessage: [{
647
+ type: HostListener,
648
+ args: ['window:message', ['$event']]
649
+ }] } });
650
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWluY2x1ZGUtY2hpbGRyZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9zZWxlY3QtaW5jbHVkZS1jaGlsZHJlbi9zZWxlY3QtaW5jbHVkZS1jaGlsZHJlbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFlBQVksRUFBYSxTQUFTLEVBQUUsaUJBQWlCLEVBQStCLFlBQVksRUFBNkIsTUFBTSxlQUFlLENBQUM7QUFDL0ssT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN4RSxPQUFPLEVBQWdCLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUt6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBR3ZELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUduRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFP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QUFDLGVBQWU7NENBYk0sU0FBUztzQkFBekMsWUFBWTt1QkFBQyxhQUFhLEVBQUUsRUFBRTtnQkFHL0IsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBK0NwRixTQUFTO3NCQURSLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24sIEFmdGVyVmlld0NoZWNrZWQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkcmVuLCBFbGVtZW50UmVmLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBJbmplY3QsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4uLy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXRyZWUtbm9kZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRpb24tcmVnaXN0cnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWxlY3RQb3B1cERhdGEgfSBmcm9tICcuL21vZGVsL3NlbGVjdC1wb3B1cC1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3Qtb3B0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZU1vZGVsIH0gZnJvbSAnLi4vdHJlZS9tb2RlbC90cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgUU1TU2VsZWN0R2xvYmFsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvc2VsZWN0LWdsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHJlZUNvbXBvbmVudCB9IGZyb20gJy4uL3RyZWUvdHJlZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmVlRmxhdE5vZGUgfSBmcm9tICcuLi90cmVlL21vZGVsL3RyZWUtZmxhdC1ub2RlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJlZUNvbmZpZyB9IGZyb20gJy4uL3RyZWUvbW9kZWwvdHJlZS1jb25maWcubW9kZWwnO1xyXG5pbXBvcnQgeyBTZWxlY3RDb25zdCB9IGZyb20gJy4vbW9kZWwvc2VsZWN0LmNvbnN0JztcclxuaW1wb3J0IHsgWCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IFNlbGVjdGVkT3B0aW9uIH0gZnJvbSAnLi9tb2RlbC9zZWxldGVkLW9wdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IFNlbGVjdE9wdGlvblR5cGVzIH0gZnJvbSAncHJvamVjdHMvcW1zLWFuZ3VsYXIvc3JjL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBJdGVtSWNvblR5cGUgfSBmcm9tICcuLi9yZWxhdGVkL2NvbW1vbi9pdGVtLWljb24tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2VsZWN0U2VhcmNoT3B0aW9uIH0gZnJvbSAnLi9tb2RlbC9zZWxlY3Qtc2VhcmNoLW9wdGlvbi5tb2RlbCc7XHJcblxyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdxbXMtc2VsZWN0LWluY2x1ZGUtY2hpbGRyZW4tcG9wdXAnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3NlbGVjdC1pbmNsdWRlLWNoaWxkcmVuLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3RJbmNsdWRlQ2hpbGRyZW5Qb3BVcENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdDaGVja2VkLCBBZnRlclZpZXdJbml0IHtcclxuICAgIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICAgIExBTkc6IGFueTtcclxuICAgIGhlYWRlck5hbWUgPSAnJztcclxuICAgIHRyZWVEYXRhOiBBcnJheTxUcmVlTW9kZWw+ID0gW107XHJcbiAgICB0cmVlQ29uZmlnOiBUcmVlQ29uZmlnO1xyXG5cclxuICAgIGNoZWNrZWROb2RlTGlzdDogQXJyYXk8U2VsZWN0ZWRPcHRpb24+ID0gW107XHJcbiAgICBzZWxlY3RlZE9wdGlvbnM6IEFycmF5PFNlbGVjdE9wdGlvbj4gPSBbXTtcclxuICAgIHNlbGVjdGVkRGF0YTogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xyXG5cclxuICAgIGNvbW1vbkNoZWNrZWRMaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XHJcblxyXG4gICAgaXRlbVR5cGUgPSAwO1xyXG4gICAgc2VsZWN0ZWRSaXNrRGF0YTogYW55ID0gW107XHJcbiAgICBkaXNhYmxlZExpc3Q6IFNlbGVjdGVkT3B0aW9uW10gPSBbXTtcclxuICAgIG9yZ2luYWxEaXNhYmxlTGlzdDogYW55ID0gW107XHJcbiAgICBtYXhTZWxlY3RJdGVtQ291bnQ6IG51bWJlcjtcclxuXHJcbiAgICBpc0RvY3VtZW50RXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgaXNDb21tb25FeHBhbmRlZCA9IHRydWU7XHJcbiAgICBzaW5nbGVTZWxlY3RPcHRpb24gPSBmYWxzZTtcclxuICAgIHNlYXJjaE9yZGVyID0gW107XHJcblxyXG4gICAgbXlDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XHJcbiAgICBmaWx0ZXJlZE9wdGlvbnM6IFNlbGVjdFNlYXJjaE9wdGlvbltdID0gW107XHJcbiAgICBpc0lucHV0VmFsdWUgPSBmYWxzZTtcclxuICAgIHNlbGVjdGVkRm9sZGVyOiBUcmVlRmxhdE5vZGUgPSBudWxsO1xyXG4gICAgbGlzdENoaWxkcmVuU2VsZWN0T25lOiBhbnkgPSBbXTtcclxuICAgIGluY2x1ZGVDaGlsZHJlbiA9IGZhbHNlO1xyXG4gICAgZWRpdEl0ZW06IFNlbGVjdGVkT3B0aW9uO1xyXG4gICAgaXRlbUljb25UeXBlID0gSXRlbUljb25UeXBlO1xyXG4gICAgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBvbkV4cGFuZEZvbGRlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0T3B0aW9uPigpO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oVHJlZUNvbXBvbmVudCwge30pIGRhdGFUcmVlczogUXVlcnlMaXN0PFRyZWVDb21wb25lbnQ+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2F1dG9Db21wbGV0ZUlucHV0U2VhcmNoJywgeyByZWFkOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLCBzdGF0aWM6IHRydWUgfSlcclxuICAgIGF1dG9Db21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxTZWxlY3RJbmNsdWRlQ2hpbGRyZW5Qb3BVcENvbXBvbmVudD4sXHJcbiAgICAgICAgcHVibGljIGdsb2JhbFNlcnZpY2U6IFFNU1NlbGVjdEdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcclxuICAgICAgICBwcml2YXRlIGRvbVNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogU2VsZWN0UG9wdXBEYXRhXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmhlYWRlck5hbWUgPSBkYXRhLmhlYWRlck5hbWU7XHJcbiAgICAgICAgdGhpcy50cmVlRGF0YSA9IGRhdGEudHJlZURhdGE7XHJcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnID0gZGF0YS50cmVlQ29uZmlnO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSaXNrRGF0YSA9IGRhdGE/LnNlbGVjdGVkTm9kZSB8fCBbXTtcclxuICAgICAgICB0aGlzLmRpc2FibGVkTGlzdCA9ICQuZXh0ZW5kKHRydWUsIFtdLCBkYXRhLmRpc2FibGVkTGlzdCB8fCBbXSk7XHJcbiAgICAgICAgdGhpcy5vcmdpbmFsRGlzYWJsZUxpc3QgPSAkLmV4dGVuZCh0cnVlLCBbXSwgZGF0YS5kaXNhYmxlZExpc3QgfHwgW10pO1xyXG4gICAgICAgIHRoaXMuc2luZ2xlU2VsZWN0T3B0aW9uID0gZGF0YS50cmVlQ29uZmlnLnNpbmdsZVNlbGVjdGVkTm9kZTtcclxuICAgICAgICB0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCA9IGRhdGEubWF4U2VsZWN0SXRlbUNvdW50O1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gZGF0YT8uc2VsZWN0ZWRMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaW5jbHVkZUNoaWxkcmVuID0gZGF0YT8uaW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgICAgIHRoaXMuZWRpdEl0ZW0gPSBkYXRhLmVkaXRJdGVtO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJGb2xkZXJJY29uKGljb25SZWdpc3RyeSwgZG9tU2FuaXRpemVyKTtcclxuICAgICAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBkb21TYW5pdGl6ZXIpO1xyXG4gICAgICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICAgICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJSaXNrSWNvbihpY29uUmVnaXN0cnksIGRvbVNhbml0aXplcik7XHJcbiAgICB9XHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWRpdEl0ZW0pIHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c0VkaXRJdGVtKHRoaXMuZWRpdEl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmluaXRUcmVlKHRoaXMuY2hlY2tlZE5vZGVMaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZXRTZWFyY2hSZXN1bHQoW10pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptZXNzYWdlJywgWyckZXZlbnQnXSlcclxuICAgIG9uTWVzc2FnZShldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudC5kYXRhID09PSBTZWxlY3RDb25zdC5ISURFX1NFQVJDSF9SRVNVTFQpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGUuY2xvc2VQYW5lbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUoKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNlYXJjaFNlbGVjdC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gcmVzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMubXlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxMDAwKSkuc3Vic2NyaWJlKCh2YWwpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc0lucHV0VmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoUmVsYXRlZCh2YWwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHRoaXMuc2VhcmNoT3JkZXIgPSB0aGlzLmdldFNlYXJjaE9yZGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucyAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGUub3BlblBhbmVsKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0SGVpZ2h0KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmF1dG9Db21wbGV0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZS5jbG9zZVBhbmVsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRUcmVlKHNlbGVjdGVkT3B0aW9uczogU2VsZWN0ZWRPcHRpb25bXSkge1xyXG4gICAgICAgIGlmIChzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmNvbmNhdChlbGVtZW50LmNoaWxkcmVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gdGhpcy5tYXBTZWxlY3RPcHRpb25Ub1RyZWVOb2RlKHRoaXMuc2VsZWN0ZWRPcHRpb25zKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXNFZGl0SXRlbShzZWxlY3RlZE9wdGlvbjogU2VsZWN0ZWRPcHRpb24pIHtcclxuICAgICAgICBjb25zdCBub2RlID0gdGhpcy5kYXRhVHJlZXMudG9BcnJheSgpWzBdLmdldE5vZGVCeUlkQW5kUGFyZW50SWQoc2VsZWN0ZWRPcHRpb24uaWQsIHNlbGVjdGVkT3B0aW9uLnBhcmVudElkKTtcclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0uZXhwYW5kTm9kZShub2RlKTtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBfJHtub2RlLnBhcmVudElkID8gbm9kZS5wYXJlbnRJZCA6ICcnfV8ke25vZGUuaWR9XyR7bm9kZS5sZXZlbH1gKTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNoZWNrZWROb2RlTGlzdChpdGVtOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQgJiYgeC5wYXJlbnRJZCA9PT0gaXRlbS5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja2VkTm9kZUxpc3RbaW5kZXhdLnR5cGUgPT09IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJbmNsdWRlQ2hpbGRyZW4oaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZhY3RvclNlbGVjdExpc3QoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNlbGVjdGVkTm9kZSh7IGlkOiBpdGVtLmlkLCBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCwgaXRlbU5hbWU6IGl0ZW0ubmFtZSwgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMubWFwU2VsZWN0T3B0aW9uVG9UcmVlTm9kZSh0aGlzLnNlbGVjdGVkT3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdFNlYXJjaE9wdGlvbihpdGVtOiBTZWxlY3RPcHRpb24pIHtcclxuICAgICAgICBsZXQgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgoeCA9PiB4LmlkID09PSBpdGVtLmlkICYmIHgucGFyZW50SWQgPT09IGl0ZW0ucGFyZW50SWQpO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEluY2x1ZGVDaGlsZHJlbih7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZhY3RvclNlbGVjdExpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5TZWxlY3RPbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vQ2hpbGRyZW46IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgbm9TZWxlY3RlZENoaWxkcmVuOiAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLm1hcFNlbGVjdE9wdGlvblRvVHJlZU5vZGUodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBnZXRJdGVtSWNvblR5cGUoaXRlbTogU2VsZWN0U2VhcmNoT3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uaXRlbUljb24gJiYgaXRlbS5pdGVtSWNvbi5sZW5ndGgpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5uYW1lO1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1JY29uUGF0aCAmJiBpdGVtLml0ZW1JY29uUGF0aC5sZW5ndGgpIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5wYXRoO1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1JY29uQmFzZTY0ICYmIGl0ZW0uaXRlbUljb25CYXNlNjQubGVuZ3RoKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuYmFzZTY0O1xyXG4gICAgICAgIGlmIChpdGVtLml0ZW1JY29uU3ZnICYmIGl0ZW0uaXRlbUljb25TdmcubGVuZ3RoKSByZXR1cm4gdGhpcy5pdGVtSWNvblR5cGUuc3ZnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1JY29uVHlwZS5ub25lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEltYWdlUGF0aChpdGVtOiBTZWxlY3RTZWFyY2hPcHRpb24pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kb21TYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKGl0ZW0uaXRlbUljb25CYXNlNjQpIGFzIHN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICBpc01hdGNoVHJ1ZShhcnI6IGFueVtdLCBhcnIyOiBhbnlbXSkge1xyXG4gICAgICAgIHJldHVybiBhcnIuZXZlcnkoKGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGFycjIuaW5jbHVkZXMoaSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmVzdWx0SGVpZ2h0KGFycj86IFNlbGVjdE9wdGlvbltdKSB7XHJcbiAgICAgICAgbGV0IG1heEhlaWdodCA9IDQ4NDtcclxuICAgICAgICBjb25zdCBwb3B1cF9jb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncW1zbGliX3JlbGF0ZWRfcG9wdXBfY29udGVudCcpWzBdIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGxpbmVfX2RpdmlkZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdsaW5lX19kaXZpZGVyJylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHBvcHVwX2NvbnRlbnQgJiYgbGluZV9fZGl2aWRlcikge1xyXG4gICAgICAgICAgICBtYXhIZWlnaHQgPSB0aGlzLmdldE9mZnNldEhlaWdodChwb3B1cF9jb250ZW50LCB0cnVlKSArIHRoaXMuZ2V0T2Zmc2V0SGVpZ2h0KGxpbmVfX2RpdmlkZXIsIHRydWUpICogMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnRSZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyJylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3Qgdmlld3JlcG9ydHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyZWxhdGVkLXZpZXdwb3J0JylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIGlmICh2aWV3cmVwb3J0cykge1xyXG4gICAgICAgICAgICBpZiAoY29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHQgPD0gbWF4SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3cmVwb3J0cy5zdHlsZS5oZWlnaHQgPSBgJHtjb250ZW50UmVzdWx0Lm9mZnNldEhlaWdodH1weGA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2aWV3cmVwb3J0cy5zdHlsZS5oZWlnaHQgPSBgJHttYXhIZWlnaHR9cHhgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uU2VhcmNoUmVsYXRlZChfdmFsOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIGlmICh0eXBlb2YgKF92YWwpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICB0aGlzLm15Q29udHJvbC5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiAoX3ZhbCkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGlmICghIV92YWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2guZW1pdChfdmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG93U2VhcmNoUmVzdWx0KCkge1xyXG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXlSZWxhdGVkKHJlbGF0ZWQ/OiBTZWxlY3RPcHRpb24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgICAgIHJldHVybiByZWxhdGVkID8gcmVsYXRlZC5pdGVtTmFtZSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21tb25DaGVja2VkTm9kZShsaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+KSB7XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0SW5jbHVkZUNoaWxkcmVuKGl0ZW06IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGxldCBsaXN0Q2hpbGRyZW46IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgICAgICAgbGlzdENoaWxkcmVuID0gdGhpcy5nZXRBbGxDaGlsZHJlbk5vZGVSZWN1cnNpdmUobGlzdENoaWxkcmVuLCBpdGVtKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgIGl0ZW1OYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogaXRlbS5pZCxcclxuICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXHJcbiAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxpc3RDaGlsZHJlbi5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IHguaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0geC5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnB1c2goeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSW5jbHVkZUNoaWxkcmVuKGl0ZW06IFRyZWVGbGF0Tm9kZSkge1xyXG4gICAgICAgIGxldCBsaXN0Q2hpbGRyZW4gPSBbXTtcclxuICAgICAgICBsaXN0Q2hpbGRyZW4gPSB0aGlzLmdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0Q2hpbGRyZW4sIGl0ZW0pO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0gaXRlbS5wYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0Q2hpbGRyZW4uZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgobm9kZSA9PiBub2RlLmlkID09PSB4LmlkICYmIG5vZGUucGFyZW50SWQgPT09IHgucGFyZW50SWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0UmVzdWx0LCBpdGVtOiBUcmVlRmxhdE5vZGUpOiBTZWxlY3RPcHRpb25bXSB7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gdGhpcy50cmVlRGF0YS5maWx0ZXIoeCA9PiB4LnBhcmVudElkID09PSBpdGVtLmlkKTtcclxuICAgICAgICBsZXQgY2hpbGRyZW5JdGVtID0gWy4uLm5ldyBTZXQodGhpcy50cmVlRGF0YS5maWx0ZXIoeCA9PiB4LnJvb3RJZCA9PT0gaXRlbS5pZCAmJiAhIXguY2hpbGRJZCkpXTtcclxuICAgICAgICBpZiAoY2hpbGRyZW5JdGVtLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hpbGRyZW5JdGVtID0gY2hpbGRyZW5JdGVtLmZpbHRlcih4ID0+IGxpc3RSZXN1bHQuZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0geC5jaGlsZElkICYmIG5vZGUucGFyZW50SWQgPT09IHgucm9vdElkKSA8IDApXHJcbiAgICAgICAgICAgIGxpc3RSZXN1bHQgPSBsaXN0UmVzdWx0LmNvbmNhdChbLi4ubmV3IFNldChjaGlsZHJlbkl0ZW0ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogeC5jaGlsZElkLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiB4LmNoaWxkTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50TmFtZTogeC5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5DaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSldKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5maWx0ZXIoeCA9PiBsaXN0UmVzdWx0LmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IHgucm9vdElkICYmIG5vZGUucGFyZW50SWQgPT09IHgucGFyZW50SWQpIDwgMClcclxuICAgICAgICAgICAgY29uc3QgdW5pcXVlQ2hpbGRyZW46IFNlbGVjdE9wdGlvbltdID0gY2hpbGRyZW4ubWFwKHggPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogeC5yb290SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbU5hbWU6IHgucGFyZW50SWQ/Lmxlbmd0aCA+IDAgPyB4LnN1Yk5hbWUgOiB4LnJvb3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbGlzdFJlc3VsdCA9IGxpc3RSZXN1bHQuY29uY2F0KFxyXG4gICAgICAgICAgICAgICAgdW5pcXVlQ2hpbGRyZW4uZmlsdGVyKCh4LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA9PT0gdW5pcXVlQ2hpbGRyZW4uZmluZEluZGV4KG5vZGUgPT4gbm9kZS5pZCA9PT0geC5pZCAmJiBub2RlLnBhcmVudElkID09PSB4LnBhcmVudElkKVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChub2RlID0+IHtcclxuICAgICAgICAgICAgICAgIGxpc3RSZXN1bHQgPSB0aGlzLmdldEFsbENoaWxkcmVuTm9kZVJlY3Vyc2l2ZShsaXN0UmVzdWx0LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IG5vZGUucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5vZGUucm9vdE5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBsaXN0UmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xvc2VDbGljaygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBvbkFkZENsaWNrKCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMuY2hlY2tlZE5vZGVMaXN0KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPZmZzZXRIZWlnaHQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluY2x1ZGVNYXJnaW46IGJvb2xlYW4pOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBlbG1IZWlnaHQgPSAwLCBlbG1NYXJnaW4gPSAwO1xyXG5cclxuICAgICAgICBlbG1IZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcclxuICAgICAgICBpZiAoaW5jbHVkZU1hcmdpbikge1xyXG4gICAgICAgICAgICBjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBlbG1NYXJnaW4gPSBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblRvcC5yZXBsYWNlKCdweCcsICcnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkJvdHRvbS5yZXBsYWNlKCdweCcsICcnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gKGVsbUhlaWdodCArIGVsbU1hcmdpbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SXRlbUNoaXBOYW1lKGl0ZW06IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2l0ZW0uaXRlbU5hbWV9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtU2VsZWN0ZWRDaGlsZHJlblJhdGlvKGl0ZW06IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke2l0ZW0ubm9TZWxlY3RlZENoaWxkcmVufS8ke2l0ZW0ubm9DaGlsZHJlbn1gO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRWxsaXBzaXNBY3RpdmUoZTogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gZSA/IChlLmNsaWVudFdpZHRoIDwgZS5zY3JvbGxXaWR0aCkgOiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVTZWxlY3RJdGVtKG5vZGU6IFNlbGVjdE9wdGlvbikge1xyXG4gICAgICAgIGNvbnN0IFNlbGVjdE9wdGlvbiA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmQoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZC50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkLnRvTG93ZXJDYXNlKCkpKTtcclxuICAgICAgICBpZiAoU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcclxuICAgICAgICAgICAgICAgIGlkOiBTZWxlY3RPcHRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBub2RlLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IFNlbGVjdE9wdGlvbi5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgIGhhc0NoaWxkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgLy8gdGhpcy5zZWxlY3RSZWxhdGVkKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpc05vZGVTZWxlY3RlZChub2RlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQudG9Mb3dlckNhc2UoKSkpLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hpbGRyZW5PZkZvbGRlcihub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgICAgICAvLyBpZiAodGhpcy5zcGxpdFZpZXcpIHtcclxuICAgICAgICAvLyBjb25zdCBwYXJlbnRUZXh0cyA9IHRoaXMuZWxlbS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50ZXh0LW5vZGUtcGFyZW50Jyk7XHJcbiAgICAgICAgLy8gW10uZm9yRWFjaC5jYWxsKHBhcmVudFRleHRzLCAoZWwpID0+IHtcclxuICAgICAgICAvLyAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlLWl0ZW0nKTtcclxuICAgICAgICAvLyB9KTtcclxuICAgICAgICAvLyBjb25zdCBpdGVtRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNfJHtub2RlLnBhcmVudElkID8gbm9kZS5wYXJlbnRJZCA6ICcnfV8ke25vZGUuaWR9XyR7bm9kZS5sZXZlbH1gKTtcclxuICAgICAgICAvLyBbXS5mb3JFYWNoLmNhbGwoaXRlbUVsZW1lbnQsIChlbCkgPT4ge1xyXG4gICAgICAgIC8vICAgICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUtaXRlbScpO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIGxldCBpdGVtID0gbmV3IFNlbGVjdE9wdGlvbigpO1xyXG4gICAgICAgIGl0ZW0uaWQgPSBub2RlLmlkO1xyXG4gICAgICAgIGl0ZW0uaXRlbU5hbWUgPSBub2RlLm5hbWU7XHJcbiAgICAgICAgaXRlbS5sZXZlbFR5cGUgPSBub2RlLmxldmVsVHlwZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbm9kZTtcclxuICAgICAgICB0aGlzLm9uRXhwYW5kRm9sZGVyLmVtaXQoaXRlbSk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdE5vZGVUcmVlRXZlbnQobm9kZTogVHJlZUZsYXROb2RlKSB7XHJcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCAmJiB4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICBpZiAocG9zaXRpb24gPiAtMSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbmNsdWRlQ2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmV4cGFuZGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUluY2x1ZGVDaGlsZHJlbihub2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWRPcHRpb25zLmZpbmRJbmRleChpdGVtID0+IG5vZGUuaWQgPT09IGl0ZW0uaWQgJiYgbm9kZS5wYXJlbnRJZCA9PT0gaXRlbS5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmlsdGVyKHggPT4geC5pZCAhPT0gbm9kZS5pZCB8fCB4LnBhcmVudElkICE9PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmYWN0b3JTZWxlY3RMaXN0KG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmluZEluZGV4KGl0ZW0gPT4gbm9kZS5pZCA9PT0gaXRlbS5pZCAmJiBub2RlLnBhcmVudElkID09PSBpdGVtLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zLnNwbGljZShpdGVtSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maWx0ZXIoeCA9PiB4LmlkICE9PSBub2RlLmlkIHx8IHgucGFyZW50SWQgIT09IG5vZGUucGFyZW50SWQpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1ZGVDaGlsZHJlbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZXhwYW5kYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SW5jbHVkZUNoaWxkcmVuKG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5DaGlsZHJlblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZhY3RvclNlbGVjdExpc3Qobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLlNlbGVjdE9uZVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIClcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLlNlbGVjdE9uZSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgbm9TZWxlY3RlZENoaWxkcmVuOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vQ2hpbGRyZW46IDAsXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLm1hcFNlbGVjdE9wdGlvblRvVHJlZU5vZGUodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBzZXRWYWx1ZShlKSB7XHJcbiAgICAgICAgdGhpcy5pbmNsdWRlQ2hpbGRyZW4gPSAhIWUuY2hlY2tlZDtcclxuICAgICAgICBpZiAoIXRoaXMuaW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3RlZE5vZGUobm9kZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSB0aGlzLm9yZ2luYWxEaXNhYmxlTGlzdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbWFwU2VsZWN0T3B0aW9uVG9UcmVlTm9kZShsaXN0OiBTZWxlY3RPcHRpb25bXSk6IFRyZWVGbGF0Tm9kZVtdIHtcclxuICAgICAgICByZXR1cm4gbGlzdC5tYXAoeCA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBpZDogeC5pZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHguaXRlbU5hbWUsXHJcbiAgICAgICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZmFjdG9yU2VsZWN0TGlzdChub2RlOiBUcmVlRmxhdE5vZGUpIHtcclxuICAgICAgICBsZXQgcGFyZW50O1xyXG4gICAgICAgIGxldCBwYXJlbnRMaXN0OiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gICAgICAgIHBhcmVudCA9IHRoaXMudHJlZURhdGEuZmluZCh4ID0+IHgucm9vdElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICBpZiAocGFyZW50KSB7XHJcbiAgICAgICAgICAgIHBhcmVudExpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBpZDogcGFyZW50LnJvb3RJZCxcclxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBwYXJlbnQucm9vdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogcGFyZW50LnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBwYXJlbnRMaXN0ID0gdGhpcy5nZXRQYXJlbnRMaW5lT2ZOb2RlKHBhcmVudExpc3QsIHBhcmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnRMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJlbnRMaXN0ID0gcGFyZW50TGlzdC5maWx0ZXIoeCA9PiB0aGlzLnNlbGVjdGVkT3B0aW9uc1xyXG4gICAgICAgICAgICAgICAgLmZpbmRJbmRleChzZWxlY3RlZE5vZGUgPT4geC5pZCA9PT0gc2VsZWN0ZWROb2RlLmlkICYmIHgucGFyZW50SWQgPT09IHNlbGVjdGVkTm9kZS5wYXJlbnRJZCkgPj0gMCk7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZFBhcmVudExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFNlbGVjdGVkTm9kZSA9IHNlbGVjdGVkUGFyZW50TGlzdFtzZWxlY3RlZFBhcmVudExpc3QubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJpbmVOb2RlcyhoaWdoZXN0U2VsZWN0ZWROb2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tYmluZU5vZGVzKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogbm9kZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFNlbGVjdE9wdGlvblR5cGVzLkluY2x1ZGVDaGlsZHJlbixcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb21iaW5lTm9kZXMoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IG5vZGUuaWQsXHJcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuLFxyXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWRcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29tYmluZU5vZGVzKHJvb3Q6IFNlbGVjdE9wdGlvbikge1xyXG4gICAgICAgIGxldCBjaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgIGNoaWxkcmVuID0gdGhpcy5nZXRBbGxDaGlsZHJlbk5vZGVSZWN1cnNpdmUoY2hpbGRyZW4sIHtcclxuICAgICAgICAgICAgaWQ6IHJvb3QuaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IHJvb3QuaXRlbU5hbWUsXHJcbiAgICAgICAgICAgIHBhcmVudElkOiByb290LnBhcmVudElkLFxyXG4gICAgICAgICAgICBsZXZlbDogMCxcclxuICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGxldCBzZWxlY3RlZE5vZGVJbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IHJvb3QuaWQgJiYgeC5wYXJlbnRJZCA9PT0gcm9vdC5wYXJlbnRJZCk7XHJcblxyXG4gICAgICAgIGxldCBub2RlTGlzdCA9IFtdO1xyXG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleChub2RlID0+IG5vZGUuaWQgPT09IGNoaWxkLmlkICYmIG5vZGUucGFyZW50SWQgPT09IGNoaWxkLnBhcmVudElkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0SW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgobm9kZSA9PiBub2RlLmlkID09PSBjaGlsZC5pZCAmJiBub2RlLnBhcmVudElkID09PSBjaGlsZC5wYXJlbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3RJbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBub2RlTGlzdC5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChub2RlTGlzdC5sZW5ndGggPiAwIHx8IGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWROb2RlSW5kZXggPCAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogcm9vdC5pZCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtTmFtZTogcm9vdC5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW4sXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHJvb3QucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxyXG4gICAgICAgICAgICAgICAgICAgIG5vU2VsZWN0ZWRDaGlsZHJlbjogMCxcclxuICAgICAgICAgICAgICAgICAgICBub0NoaWxkcmVuOiAwXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWROb2RlSW5kZXggPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdFtzZWxlY3RlZE5vZGVJbmRleF0uY2hpbGRyZW4gPSBub2RlTGlzdDtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3Rbc2VsZWN0ZWROb2RlSW5kZXhdLm5vQ2hpbGRyZW4gPSBjaGlsZHJlbi5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0W3NlbGVjdGVkTm9kZUluZGV4XS5ub1NlbGVjdGVkQ2hpbGRyZW4gPSBub2RlTGlzdC5sZW5ndGg7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0W3NlbGVjdGVkTm9kZUluZGV4XS50eXBlID0gY2hpbGRyZW4ubGVuZ3RoID09PSAwID8gU2VsZWN0T3B0aW9uVHlwZXMuU2VsZWN0T25lIDogU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyZW50TGluZU9mTm9kZShsaXN0UGFyZW50OiBTZWxlY3RPcHRpb25bXSwgbm9kZTogVHJlZU1vZGVsKSB7XHJcbiAgICAgICAgbGV0IHBhcmVudDtcclxuICAgICAgICBwYXJlbnQgPSB0aGlzLnRyZWVEYXRhLmZpbmQoeCA9PiB4LnJvb3RJZCA9PT0gbm9kZS5wYXJlbnRJZCk7XHJcbiAgICAgICAgaWYgKHBhcmVudCkge1xyXG4gICAgICAgICAgICBsaXN0UGFyZW50ID0gWy4uLmxpc3RQYXJlbnQsIHtcclxuICAgICAgICAgICAgICAgIGlkOiBwYXJlbnQucm9vdElkLFxyXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IHBhcmVudC5yb290TmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBwYXJlbnQucGFyZW50SWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiBTZWxlY3RPcHRpb25UeXBlcy5JbmNsdWRlQ2hpbGRyZW5cclxuICAgICAgICAgICAgfV07XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0UGFyZW50TGluZU9mTm9kZShsaXN0UGFyZW50LCBwYXJlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlzdFBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlU2VsZWN0ZWROb2RlKG5vZGU6IFNlbGVjdGVkT3B0aW9uKSB7XHJcbiAgICAgICAgaWYgKG5vZGUudHlwZSA9PT0gU2VsZWN0T3B0aW9uVHlwZXMuSW5jbHVkZUNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGxldCBjaGlsZHJlbiA9IFtdXHJcbiAgICAgICAgICAgIGNoaWxkcmVuID0gdGhpcy5nZXRBbGxDaGlsZHJlbk5vZGVSZWN1cnNpdmUoY2hpbGRyZW4sIHtcclxuICAgICAgICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogbm9kZS5pdGVtTmFtZSxcclxuICAgICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnBhcmVudElkLFxyXG4gICAgICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgbGV0IGRpc2FibGVOb2RlcyA9IFtdXHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5kaXNhYmxlZExpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gbm9kZS5pZCAmJiB4LnBhcmVudElkID09PSBub2RlLnBhcmVudElkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgICAgZGlzYWJsZU5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZGlzYWJsZWRMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGNoaWxkLmlkICYmIHgucGFyZW50SWQgPT09IGNoaWxkLnBhcmVudElkKTtcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlTm9kZXMucHVzaChjaGlsZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRMaXN0ID0gWy4uLnRoaXMuZGlzYWJsZWRMaXN0LCAuLi5kaXNhYmxlTm9kZXNdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVTZWxlY3RlZE5vZGUobm9kZTogU2VsZWN0T3B0aW9uKSB7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuID0gW11cclxuICAgICAgICBjaGlsZHJlbiA9IHRoaXMuZ2V0QWxsQ2hpbGRyZW5Ob2RlUmVjdXJzaXZlKGNoaWxkcmVuLCB7XHJcbiAgICAgICAgICAgIGlkOiBub2RlLmlkLFxyXG4gICAgICAgICAgICBuYW1lOiBub2RlLml0ZW1OYW1lLFxyXG4gICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZCxcclxuICAgICAgICAgICAgbGV2ZWw6IDAsXHJcbiAgICAgICAgICAgIGV4cGFuZGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGhhc0NoaWxkOiB0cnVlLFxyXG4gICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0aGlzLmRpc2FibGVkTGlzdCA9IHRoaXMuZGlzYWJsZWRMaXN0LmZpbHRlcih4ID0+XHJcbiAgICAgICAgICAgIGNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PlxyXG4gICAgICAgICAgICAgICAgKHguaWQgPT09IGNoaWxkLmlkICYmIHgucGFyZW50SWQgPT09IGNoaWxkLnBhcmVudElkKVxyXG4gICAgICAgICAgICApLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZExpc3QgPSB0aGlzLmRpc2FibGVkTGlzdC5maWx0ZXIoeCA9PiAhKHguaWQgPT09IG5vZGUuaWQgJiYgeC5wYXJlbnRJZCA9PT0gbm9kZS5wYXJlbnRJZCkpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJxbXNsaWJfcmVsYXRlZF9wb3B1cFwiIGNsYXNzPVwicW1zbGliX19yZWxhdGVkX19wb3B1cF9fY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfaGVhZGVyXCI+XHJcbiAgICAgIDxzcGFuIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImJ1dHRvbl9fY2xvc2VcIiAoY2xpY2spPVwib25DbG9zZUNsaWNrKClcIj5cclxuICAgICAgICA8bWF0LWljb24gbWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDxkaXYgaWQ9XCJxbXNsaWJfcmVsYXRlZF9wb3B1cF9oZWFkZXJfMDAxXCIgbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gICAgICAgIDxzcGFuPnt7IGhlYWRlck5hbWUgfCB1cHBlcmNhc2UgfX08L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgXHJcbiAgICA8ZGl2XHJcbiAgICAgIGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfc2VhcmNoXCJcclxuICAgICAgY2xhc3M9XCJpbnB1dF9fZmllbGRcIlxyXG4gICAgICAoY2xpY2spPVwic2hvd1NlYXJjaFJlc3VsdCgpXCJcclxuICAgID5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgI25hbWVcclxuICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBMQU5HLlNFQVJDSCB9fVwiXHJcbiAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICBbZm9ybUNvbnRyb2xdPVwibXlDb250cm9sXCJcclxuICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxyXG4gICAgICAgICNhdXRvQ29tcGxldGVJbnB1dFNlYXJjaFxyXG4gICAgICAvPlxyXG4gICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNlbGVjdF9fdG9nZ2xlLWluY2x1ZGVcIj5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgICAgW2NoZWNrZWRdPVwiaW5jbHVkZUNoaWxkcmVuXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwic2V0VmFsdWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICBjb2xvcj1cImRlZmF1bHRcIlxyXG4gICAgICAgICAgcW1zLWdyb3VwLW9wdGlvbnM+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGFiZWxcIj5TZWxlY3QgbGFiZWw8L3NwYW4+XHJcbiAgICAgICAgPC9tYXQtc2xpZGUtdG9nZ2xlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJsaW5lX19kaXZpZGVyXCI+PC9kaXY+XHJcbiAgXHJcbiAgICA8bWF0LWF1dG9jb21wbGV0ZVxyXG4gICAgICAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5UmVsYXRlZFwiXHJcbiAgICAgIGNsYXNzPVwibWF0LWF1dG9jb21wbGV0ZV9yZWxhdGVkLXZpZXdwb3J0XCJcclxuICAgID5cclxuICAgICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydFxyXG4gICAgICAgIHFtcy1zY3JvbGxiYXJcclxuICAgICAgICBpdGVtU2l6ZT1cIjEwXCJcclxuICAgICAgICBjbGFzcz1cInJlbGF0ZWQtdmlld3BvcnRcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgY2xhc3M9XCJzZWFyY2hfX21vZHVsZS1yZXN1bHRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnNcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoX19vcHRpb25cIlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9uc1wiXHJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0U2VhcmNoT3B0aW9uKG9wdGlvbilcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8cW1zLWxpc3QtaXRlbSB0eXBlPVwiaW1hZ2Utc3F1YXJlXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICAgICAgICBsZWFkaW5nLWljb25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0SXRlbUljb25UeXBlKG9wdGlvbikgPT09IGl0ZW1JY29uVHlwZS5uYW1lXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvciBtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiXHJcbiAgICAgICAgICAgICAgICB0eXBlPVwiaW1hZ2Utc3F1YXJlXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICB7eyBvcHRpb24uaXRlbUljb24gfX1cclxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG5cclxuICAgICAgICAgICAgICA8bWF0LWljb24gXHJcbiAgICAgICAgICAgICAgICBsZWFkaW5nLWljb25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0SXRlbUljb25UeXBlKG9wdGlvbikgPT09IGl0ZW1JY29uVHlwZS5zdmdcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yIG1hdGVyaWFsLWljb25zLW91dGxpbmVkXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJpbWFnZS1zcXVhcmVcIlxyXG4gICAgICAgICAgICAgICAgW3N2Z0ljb25dPVwib3B0aW9uLml0ZW1JY29uU3ZnXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuXHJcbiAgICAgICAgICAgICAgPGltZyBcclxuICAgICAgICAgICAgICAgIGxlYWRpbmctaWNvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRJdGVtSWNvblR5cGUob3B0aW9uKSA9PT0gaXRlbUljb25UeXBlLnBhdGhcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtaWNvblwiXHJcbiAgICAgICAgICAgICAgICBbc3JjXT1cIm9wdGlvbi5pdGVtSWNvblBhdGhcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImltYWdlLXNxdWFyZVwiXHJcbiAgICAgICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICAgICAgPGltZyBcclxuICAgICAgICAgICAgICAgIGxlYWRpbmctaWNvblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRJdGVtSWNvblR5cGUob3B0aW9uKSA9PT0gaXRlbUljb25UeXBlLmJhc2U2NFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1pY29uIGltYWdlLWJhc2U2NFwiXHJcbiAgICAgICAgICAgICAgICBbc3JjXT1cImdldEltYWdlUGF0aChvcHRpb24pXCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJpbWFnZS1zcXVhcmVcIlxyXG4gICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPGRpdiBxbXMtbGlzdC1oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHFtcy1saW5lIHR5cGU9XCJzdWJ0aXRsZVwiIGNsYXNzPVwic2VhcmNoX19vcHRpb24tbmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24uaXRlbU5hbWUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Ftcy1saXN0LWl0ZW0+XHJcbiAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxyXG4gICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJxbXMtc2Nyb2xsYmFyIHFtc2xpYl9yZWxhdGVkX3BvcHVwX2NvbnRlbnQgY29sLTEyXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICBwYW5lbF9fY29udGVudF9pdGVtOiBjaGVja2VkTm9kZUxpc3QubGVuZ3RoLFxyXG4gICAgICAgICAgICBwYW5lbF9fY29udGVudDogIWNoZWNrZWROb2RlTGlzdC5sZW5ndGhcclxuICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfY29tbW9uXzAwMlwiPlxyXG4gICAgICAgICAgICAgICAgPHFtcy10cmVlXHJcbiAgICAgICAgICAgICAgICAgICAgW3RyZWVEYXRhXT1cInRyZWVEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICBbdHJlZUNvbmZpZ109XCJ0cmVlQ29uZmlnXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWREYXRhXT1cInNlbGVjdGVkRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkUmlza0RhdGFdPVwic2VsZWN0ZWRSaXNrRGF0YVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkTGlzdF09XCJkaXNhYmxlZExpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjaGVja0JveEV2ZW50KT1cImdldENvbW1vbkNoZWNrZWROb2RlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChub2RlRXhwYW5kRXZlbnQpPVwiZ2V0Q2hpbGRyZW5PZkZvbGRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0Tm9kZUV2ZW50KT1cInNlbGVjdE5vZGVUcmVlRXZlbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9xbXMtdHJlZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICBcclxuICAgIDxkaXYgKm5nSWY9XCJjaGVja2VkTm9kZUxpc3QubGVuZ3RoXCIgY2xhc3M9XCJsaW5lX19kaXZpZGVyXCI+PC9kaXY+XHJcbiAgXHJcbiAgICA8ZGl2ICpuZ0lmPVwiY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIGNsYXNzPVwicGFuZWxfX2l0ZW0gcW1zLXNjcm9sbGJhclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmVsYXRlZF9faXRlbV9faW5saW5lXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hlY2tlZE5vZGVMaXN0XCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJpdGVtLml0ZW1OYW1lXCJcclxuICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgIGNsYXNzPVwicmVsYXRlZF9faXRlbV9fY29udGVudFwiXHJcbiAgICAgICAgICBxbXMtdG9vbC10aXA9XCJ7e1xyXG4gICAgICAgICAgICBpc0VsbGlwc2lzQWN0aXZlKGl0ZW1OYW1lKSA/IGdldEl0ZW1DaGlwTmFtZShpdGVtKSA6ICcnXHJcbiAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICBtb2RlPVwiZGFya1wiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWxhdGVkX19pdGVtX19jb250ZW50X25hbWVcIiAjaXRlbU5hbWU+XHJcbiAgICAgICAgICAgIHt7Z2V0SXRlbUNoaXBOYW1lKGl0ZW0pfX1cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWxlY3RfX2luY2x1ZGUtY2hpbGRyZW5fX2NvdW50XCIgKm5nSWY9XCJpdGVtLm5vU2VsZWN0ZWRDaGlsZHJlbiA+IDBcIj5cclxuICAgICAgICAgICAgICB7e2dldEl0ZW1TZWxlY3RlZENoaWxkcmVuUmF0aW8oaXRlbSl9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICA8bWF0LWljb25cclxuICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUNoZWNrZWROb2RlTGlzdChpdGVtKVwiXHJcbiAgICAgICAgICAgID5jYW5jZWw8L21hdC1pY29uXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgXHJcbiAgICA8ZGl2IGNsYXNzPVwibGluZV9fZGl2aWRlclwiPjwvZGl2PlxyXG4gIFxyXG4gICAgPGRpdiBjbGFzcz1cImNvbmZpcm1fX2J1dHRvbl9fZ3JvdXBzXCI+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAqbmdJZj1cIiFjaGVja2VkTm9kZUxpc3QubGVuZ3RoXCJcclxuICAgICAgICBxbXMtYnRuXHJcbiAgICAgICAgc3R5bGU9XCJtYXJnaW4tdG9wOiA3cHhcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkFkZENsaWNrKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgTEFORy5BREQgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICAqbmdJZj1cImNoZWNrZWROb2RlTGlzdC5sZW5ndGhcIlxyXG4gICAgICAgIHFtcy1idG5cclxuICAgICAgICBzdHlsZT1cIm1hcmdpbi10b3A6IDBweFwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQWRkQ2xpY2soKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBMQU5HLkFERCB9fSAoe3sgY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCB9fSlcclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICBxbXMtYnRuLXRleHRcclxuICAgICAgICBbbmdTdHlsZV09XCJ7ICdtYXJnaW4tdG9wJzogY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCA/ICcwcHgnIDogJzdweCcgfVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2VDbGljaygpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IExBTkcuQ0FOQ0VMIH19XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4gICJdfQ==