vc-create-dashboard 2.5.7 → 2.5.9

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 (357) hide show
  1. package/esm2020/create-dashboard.mjs +5 -0
  2. package/{esm2015/lib/configurations.js → esm2020/lib/configurations.mjs} +0 -0
  3. package/{esm2015/lib/create-dashboard-container/categories/categories-config.js → esm2020/lib/create-dashboard-container/categories/categories-config.mjs} +0 -0
  4. package/esm2020/lib/create-dashboard-container/categories/categories.component.mjs +209 -0
  5. package/esm2020/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.mjs +537 -0
  6. package/{esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.js → esm2020/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.mjs} +0 -0
  7. package/esm2020/lib/create-dashboard-container/configure-widgets/configure-widgets.module.mjs +45 -0
  8. package/{esm2015/lib/create-dashboard-container/create-dashboard-config.js → esm2020/lib/create-dashboard-container/create-dashboard-config.mjs} +0 -0
  9. package/esm2020/lib/create-dashboard-container/create-dashboard.component.mjs +884 -0
  10. package/esm2020/lib/create-dashboard-container/create-dashboard.module.mjs +125 -0
  11. package/esm2020/lib/create-dashboard-container/directives/directives.module.mjs +24 -0
  12. package/esm2020/lib/create-dashboard-container/directives/scroll-in-view.directive.mjs +35 -0
  13. package/esm2020/lib/create-dashboard-container/form-group/form-group.component.mjs +137 -0
  14. package/esm2020/lib/create-dashboard-container/frequency/frequency.component.mjs +300 -0
  15. package/{esm2015/lib/create-dashboard-container/interfaces/widget-data-model.js → esm2020/lib/create-dashboard-container/interfaces/widget-data-model.mjs} +0 -0
  16. package/esm2020/lib/create-dashboard-container/pipes/filter.pipe.mjs +30 -0
  17. package/esm2020/lib/create-dashboard-container/pipes/search.pipe.mjs +25 -0
  18. package/esm2020/lib/create-dashboard-container/pipes/text-count.pipe.mjs +19 -0
  19. package/esm2020/lib/create-dashboard-container/responsibility-center/responsibility-center.component.mjs +146 -0
  20. package/{esm2015/lib/create-dashboard-container/risk-categories/risk-categories-config.js → esm2020/lib/create-dashboard-container/risk-categories/risk-categories-config.mjs} +0 -0
  21. package/esm2020/lib/create-dashboard-container/risk-categories/risk-categories.component.mjs +194 -0
  22. package/esm2020/lib/create-dashboard-container/services/auth.service.mjs +29 -0
  23. package/{esm2015/lib/create-dashboard-container/services/configure-widgets.service.js → esm2020/lib/create-dashboard-container/services/configure-widgets.service.mjs} +12 -15
  24. package/{esm2015/lib/create-dashboard-container/services/create-dashboard.service.js → esm2020/lib/create-dashboard-container/services/create-dashboard.service.mjs} +14 -17
  25. package/esm2020/lib/create-dashboard-container/services/pagination.service.mjs +29 -0
  26. package/esm2020/lib/create-dashboard-container/user-list/user-list.component.mjs +238 -0
  27. package/{esm2015/lib/create-dashboard-container/user-list/user-list.config.js → esm2020/lib/create-dashboard-container/user-list/user-list.config.mjs} +0 -0
  28. package/esm2020/lib/create-dashboard.service.mjs +14 -0
  29. package/esm2020/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.mjs +49 -0
  30. package/{esm2015/lib/ui-kit/dashboard-footer/dashboard-footer-config.js → esm2020/lib/ui-kit/dashboard-footer/dashboard-footer-config.mjs} +0 -0
  31. package/esm2020/lib/ui-kit/dashboard-footer/dashboard-footer.module.mjs +28 -0
  32. package/{esm2015/lib/ui-kit/dialog/dialog-config.js → esm2020/lib/ui-kit/dialog/dialog-config.mjs} +0 -0
  33. package/{esm2015/lib/ui-kit/dialog/dialog-injector.js → esm2020/lib/ui-kit/dialog/dialog-injector.mjs} +0 -0
  34. package/{esm2015/lib/ui-kit/dialog/dialog-ref.js → esm2020/lib/ui-kit/dialog/dialog-ref.mjs} +0 -0
  35. package/esm2020/lib/ui-kit/dialog/dialog.component.mjs +85 -0
  36. package/esm2020/lib/ui-kit/dialog/dialog.module.mjs +20 -0
  37. package/esm2020/lib/ui-kit/dialog/dialog.service.mjs +52 -0
  38. package/esm2020/lib/ui-kit/dialog/insertion.directive.mjs +16 -0
  39. package/esm2020/lib/ui-kit/floating-bar/floating-bar.component.mjs +51 -0
  40. package/esm2020/lib/ui-kit/floating-bar/floating-bar.module.mjs +28 -0
  41. package/esm2020/lib/ui-kit/formgroup/click-outside.directive.mjs +29 -0
  42. package/esm2020/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.mjs +27 -0
  43. package/esm2020/lib/ui-kit/formgroup/cs-radio/cs-radio.component.mjs +30 -0
  44. package/esm2020/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.mjs +14 -0
  45. package/esm2020/lib/ui-kit/formgroup/cs-select/cs-select.component.mjs +100 -0
  46. package/esm2020/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +35 -0
  47. package/esm2020/lib/ui-kit/formgroup/formgroup.module.mjs +55 -0
  48. package/esm2020/lib/ui-kit/formgroup/pipes/pascal.pipe.mjs +19 -0
  49. package/esm2020/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.mjs +24 -0
  50. package/esm2020/lib/ui-kit/no-data/no-data.component.mjs +40 -0
  51. package/esm2020/lib/ui-kit/no-data/no-data.module.mjs +18 -0
  52. package/esm2020/lib/ui-kit/pagination/pagination.component.mjs +127 -0
  53. package/esm2020/lib/ui-kit/pagination/pagination.module.mjs +18 -0
  54. package/esm2020/lib/ui-kit/popover/popover.component.mjs +133 -0
  55. package/esm2020/lib/ui-kit/popover/popover.directive.mjs +86 -0
  56. package/esm2020/lib/ui-kit/popover/popover.module.mjs +21 -0
  57. package/esm2020/lib/ui-kit/popover/popover.service.mjs +17 -0
  58. package/esm2020/lib/ui-kit/select/cs-option/cs-option.component.mjs +36 -0
  59. package/esm2020/lib/ui-kit/select/cs-select/cs-select.component.mjs +89 -0
  60. package/esm2020/lib/ui-kit/select/safe-html.pipe.mjs +20 -0
  61. package/esm2020/lib/ui-kit/select/select.module.mjs +21 -0
  62. package/esm2020/lib/ui-kit/services/cs-select.service.mjs +15 -0
  63. package/esm2020/lib/ui-kit/smiley-dialog/smiley-dialog.component.mjs +50 -0
  64. package/esm2020/lib/ui-kit/smiley-dialog/smiley-dialog.module.mjs +18 -0
  65. package/esm2020/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.mjs +39 -0
  66. package/esm2020/lib/ui-kit/snack-bar/snack-bar.module.mjs +18 -0
  67. package/esm2020/lib/ui-kit/snack-bar/snack-bar.service.mjs +24 -0
  68. package/esm2020/lib/ui-kit/tooltip/tooltip.directive.mjs +153 -0
  69. package/esm2020/lib/ui-kit/tooltip/tooltip.module.mjs +18 -0
  70. package/esm2020/lib/ui-kit/v-loader/loader/loader.component.mjs +13 -0
  71. package/esm2020/lib/ui-kit/v-loader/loader-inline/loader-inline.component.mjs +13 -0
  72. package/esm2020/lib/ui-kit/v-loader/v-loader.module.mjs +19 -0
  73. package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
  74. package/fesm2015/create-dashboard.mjs +4766 -0
  75. package/fesm2015/create-dashboard.mjs.map +1 -0
  76. package/fesm2020/create-dashboard.mjs +4746 -0
  77. package/fesm2020/create-dashboard.mjs.map +1 -0
  78. package/index.d.ts +5 -0
  79. package/lib/create-dashboard-container/categories/categories.component.d.ts +3 -0
  80. package/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.d.ts +3 -0
  81. package/lib/create-dashboard-container/configure-widgets/configure-widgets.module.d.ts +12 -0
  82. package/lib/create-dashboard-container/create-dashboard.component.d.ts +3 -0
  83. package/lib/create-dashboard-container/create-dashboard.module.d.ts +31 -0
  84. package/lib/create-dashboard-container/directives/directives.module.d.ts +6 -0
  85. package/lib/create-dashboard-container/directives/scroll-in-view.directive.d.ts +3 -0
  86. package/lib/create-dashboard-container/form-group/form-group.component.d.ts +3 -0
  87. package/lib/create-dashboard-container/frequency/frequency.component.d.ts +3 -0
  88. package/lib/create-dashboard-container/pipes/filter.pipe.d.ts +3 -0
  89. package/lib/create-dashboard-container/pipes/search.pipe.d.ts +3 -0
  90. package/lib/create-dashboard-container/pipes/text-count.pipe.d.ts +3 -0
  91. package/lib/create-dashboard-container/responsibility-center/responsibility-center.component.d.ts +3 -0
  92. package/lib/create-dashboard-container/risk-categories/risk-categories.component.d.ts +3 -0
  93. package/lib/create-dashboard-container/services/auth.service.d.ts +3 -0
  94. package/lib/create-dashboard-container/services/configure-widgets.service.d.ts +3 -0
  95. package/lib/create-dashboard-container/services/create-dashboard.service.d.ts +3 -0
  96. package/lib/create-dashboard-container/services/pagination.service.d.ts +3 -0
  97. package/lib/create-dashboard-container/user-list/user-list.component.d.ts +3 -0
  98. package/lib/create-dashboard.service.d.ts +3 -0
  99. package/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.d.ts +3 -0
  100. package/lib/ui-kit/dashboard-footer/dashboard-footer.module.d.ts +7 -0
  101. package/lib/ui-kit/dialog/dialog.component.d.ts +3 -0
  102. package/lib/ui-kit/dialog/dialog.module.d.ts +7 -0
  103. package/lib/ui-kit/dialog/dialog.service.d.ts +3 -0
  104. package/lib/ui-kit/dialog/insertion.directive.d.ts +3 -0
  105. package/lib/ui-kit/floating-bar/floating-bar.component.d.ts +3 -0
  106. package/lib/ui-kit/floating-bar/floating-bar.module.d.ts +7 -0
  107. package/lib/ui-kit/formgroup/click-outside.directive.d.ts +3 -0
  108. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts +3 -0
  109. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts +3 -0
  110. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts +3 -0
  111. package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts +3 -0
  112. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +3 -0
  113. package/lib/ui-kit/formgroup/formgroup.module.d.ts +15 -0
  114. package/lib/ui-kit/formgroup/pipes/pascal.pipe.d.ts +3 -0
  115. package/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.d.ts +3 -0
  116. package/lib/ui-kit/no-data/no-data.component.d.ts +3 -0
  117. package/lib/ui-kit/no-data/no-data.module.d.ts +6 -0
  118. package/lib/ui-kit/pagination/pagination.component.d.ts +3 -0
  119. package/lib/ui-kit/pagination/pagination.module.d.ts +6 -0
  120. package/lib/ui-kit/popover/popover.component.d.ts +3 -0
  121. package/lib/ui-kit/popover/popover.directive.d.ts +3 -0
  122. package/lib/ui-kit/popover/popover.module.d.ts +7 -0
  123. package/lib/ui-kit/popover/popover.service.d.ts +3 -0
  124. package/lib/ui-kit/select/cs-option/cs-option.component.d.ts +3 -0
  125. package/lib/ui-kit/select/cs-select/cs-select.component.d.ts +3 -0
  126. package/lib/ui-kit/select/safe-html.pipe.d.ts +3 -0
  127. package/lib/ui-kit/select/select.module.d.ts +9 -0
  128. package/lib/ui-kit/services/cs-select.service.d.ts +3 -0
  129. package/lib/ui-kit/smiley-dialog/smiley-dialog.component.d.ts +3 -0
  130. package/lib/ui-kit/smiley-dialog/smiley-dialog.module.d.ts +6 -0
  131. package/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.d.ts +3 -0
  132. package/lib/ui-kit/snack-bar/snack-bar.module.d.ts +6 -0
  133. package/lib/ui-kit/snack-bar/snack-bar.service.d.ts +3 -0
  134. package/lib/ui-kit/tooltip/tooltip.directive.d.ts +3 -0
  135. package/lib/ui-kit/tooltip/tooltip.module.d.ts +6 -0
  136. package/lib/ui-kit/v-loader/loader/loader.component.d.ts +3 -0
  137. package/lib/ui-kit/v-loader/loader-inline/loader-inline.component.d.ts +3 -0
  138. package/lib/ui-kit/v-loader/v-loader.module.d.ts +7 -0
  139. package/package.json +21 -9
  140. package/bundles/create-dashboard.umd.js +0 -5167
  141. package/bundles/create-dashboard.umd.js.map +0 -1
  142. package/create-dashboard.d.ts +0 -64
  143. package/create-dashboard.metadata.json +0 -1
  144. package/esm2015/create-dashboard.js +0 -65
  145. package/esm2015/create-dashboard.ngsummary.json +0 -1
  146. package/esm2015/lib/configurations.ngsummary.json +0 -1
  147. package/esm2015/lib/create-dashboard-container/categories/categories-config.ngsummary.json +0 -1
  148. package/esm2015/lib/create-dashboard-container/categories/categories.component.js +0 -199
  149. package/esm2015/lib/create-dashboard-container/categories/categories.component.ngfactory.js +0 -94
  150. package/esm2015/lib/create-dashboard-container/categories/categories.component.ngsummary.json +0 -1
  151. package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.js +0 -531
  152. package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.ngfactory.js +0 -86
  153. package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.ngsummary.json +0 -1
  154. package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.ngsummary.json +0 -1
  155. package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets.module.js +0 -30
  156. package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets.module.ngfactory.js +0 -20
  157. package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets.module.ngsummary.json +0 -1
  158. package/esm2015/lib/create-dashboard-container/create-dashboard-config.ngsummary.json +0 -1
  159. package/esm2015/lib/create-dashboard-container/create-dashboard.component.js +0 -872
  160. package/esm2015/lib/create-dashboard-container/create-dashboard.component.ngfactory.js +0 -357
  161. package/esm2015/lib/create-dashboard-container/create-dashboard.component.ngsummary.json +0 -1
  162. package/esm2015/lib/create-dashboard-container/create-dashboard.module.js +0 -78
  163. package/esm2015/lib/create-dashboard-container/create-dashboard.module.ngfactory.js +0 -35
  164. package/esm2015/lib/create-dashboard-container/create-dashboard.module.ngsummary.json +0 -1
  165. package/esm2015/lib/create-dashboard-container/directives/directives.module.js +0 -19
  166. package/esm2015/lib/create-dashboard-container/directives/directives.module.ngfactory.js +0 -12
  167. package/esm2015/lib/create-dashboard-container/directives/directives.module.ngsummary.json +0 -1
  168. package/esm2015/lib/create-dashboard-container/directives/scroll-in-view.directive.js +0 -36
  169. package/esm2015/lib/create-dashboard-container/directives/scroll-in-view.directive.ngsummary.json +0 -1
  170. package/esm2015/lib/create-dashboard-container/form-group/form-group.component.js +0 -126
  171. package/esm2015/lib/create-dashboard-container/form-group/form-group.component.ngfactory.js +0 -129
  172. package/esm2015/lib/create-dashboard-container/form-group/form-group.component.ngsummary.json +0 -1
  173. package/esm2015/lib/create-dashboard-container/frequency/frequency.component.js +0 -295
  174. package/esm2015/lib/create-dashboard-container/frequency/frequency.component.ngfactory.js +0 -105
  175. package/esm2015/lib/create-dashboard-container/frequency/frequency.component.ngsummary.json +0 -1
  176. package/esm2015/lib/create-dashboard-container/interfaces/widget-data-model.ngsummary.json +0 -1
  177. package/esm2015/lib/create-dashboard-container/pipes/filter.pipe.js +0 -26
  178. package/esm2015/lib/create-dashboard-container/pipes/filter.pipe.ngsummary.json +0 -1
  179. package/esm2015/lib/create-dashboard-container/pipes/search.pipe.js +0 -21
  180. package/esm2015/lib/create-dashboard-container/pipes/search.pipe.ngsummary.json +0 -1
  181. package/esm2015/lib/create-dashboard-container/pipes/text-count.pipe.js +0 -16
  182. package/esm2015/lib/create-dashboard-container/pipes/text-count.pipe.ngsummary.json +0 -1
  183. package/esm2015/lib/create-dashboard-container/responsibility-center/responsibility-center.component.js +0 -137
  184. package/esm2015/lib/create-dashboard-container/responsibility-center/responsibility-center.component.ngfactory.js +0 -79
  185. package/esm2015/lib/create-dashboard-container/responsibility-center/responsibility-center.component.ngsummary.json +0 -1
  186. package/esm2015/lib/create-dashboard-container/risk-categories/risk-categories-config.ngsummary.json +0 -1
  187. package/esm2015/lib/create-dashboard-container/risk-categories/risk-categories.component.js +0 -183
  188. package/esm2015/lib/create-dashboard-container/risk-categories/risk-categories.component.ngfactory.js +0 -93
  189. package/esm2015/lib/create-dashboard-container/risk-categories/risk-categories.component.ngsummary.json +0 -1
  190. package/esm2015/lib/create-dashboard-container/services/auth.service.js +0 -31
  191. package/esm2015/lib/create-dashboard-container/services/auth.service.ngsummary.json +0 -1
  192. package/esm2015/lib/create-dashboard-container/services/configure-widgets.service.ngsummary.json +0 -1
  193. package/esm2015/lib/create-dashboard-container/services/create-dashboard.service.ngsummary.json +0 -1
  194. package/esm2015/lib/create-dashboard-container/services/pagination.service.js +0 -28
  195. package/esm2015/lib/create-dashboard-container/services/pagination.service.ngsummary.json +0 -1
  196. package/esm2015/lib/create-dashboard-container/user-list/user-list.component.js +0 -229
  197. package/esm2015/lib/create-dashboard-container/user-list/user-list.component.ngfactory.js +0 -96
  198. package/esm2015/lib/create-dashboard-container/user-list/user-list.component.ngsummary.json +0 -1
  199. package/esm2015/lib/create-dashboard-container/user-list/user-list.config.ngsummary.json +0 -1
  200. package/esm2015/lib/create-dashboard.service.js +0 -13
  201. package/esm2015/lib/create-dashboard.service.ngsummary.json +0 -1
  202. package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.js +0 -45
  203. package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.ngfactory.js +0 -49
  204. package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.ngsummary.json +0 -1
  205. package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer-config.ngsummary.json +0 -1
  206. package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer.module.js +0 -21
  207. package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer.module.ngfactory.js +0 -14
  208. package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer.module.ngsummary.json +0 -1
  209. package/esm2015/lib/ui-kit/dialog/dialog-config.ngsummary.json +0 -1
  210. package/esm2015/lib/ui-kit/dialog/dialog-injector.ngsummary.json +0 -1
  211. package/esm2015/lib/ui-kit/dialog/dialog-ref.ngsummary.json +0 -1
  212. package/esm2015/lib/ui-kit/dialog/dialog.component.js +0 -89
  213. package/esm2015/lib/ui-kit/dialog/dialog.component.ngfactory.js +0 -29
  214. package/esm2015/lib/ui-kit/dialog/dialog.component.ngsummary.json +0 -1
  215. package/esm2015/lib/ui-kit/dialog/dialog.module.js +0 -16
  216. package/esm2015/lib/ui-kit/dialog/dialog.module.ngfactory.js +0 -14
  217. package/esm2015/lib/ui-kit/dialog/dialog.module.ngsummary.json +0 -1
  218. package/esm2015/lib/ui-kit/dialog/dialog.service.js +0 -56
  219. package/esm2015/lib/ui-kit/dialog/dialog.service.ngsummary.json +0 -1
  220. package/esm2015/lib/ui-kit/dialog/insertion.directive.js +0 -15
  221. package/esm2015/lib/ui-kit/dialog/insertion.directive.ngsummary.json +0 -1
  222. package/esm2015/lib/ui-kit/floating-bar/floating-bar.component.js +0 -46
  223. package/esm2015/lib/ui-kit/floating-bar/floating-bar.component.ngfactory.js +0 -50
  224. package/esm2015/lib/ui-kit/floating-bar/floating-bar.component.ngsummary.json +0 -1
  225. package/esm2015/lib/ui-kit/floating-bar/floating-bar.module.js +0 -21
  226. package/esm2015/lib/ui-kit/floating-bar/floating-bar.module.ngfactory.js +0 -14
  227. package/esm2015/lib/ui-kit/floating-bar/floating-bar.module.ngsummary.json +0 -1
  228. package/esm2015/lib/ui-kit/formgroup/click-outside.directive.js +0 -26
  229. package/esm2015/lib/ui-kit/formgroup/click-outside.directive.ngsummary.json +0 -1
  230. package/esm2015/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.js +0 -25
  231. package/esm2015/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ngfactory.js +0 -30
  232. package/esm2015/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ngsummary.json +0 -1
  233. package/esm2015/lib/ui-kit/formgroup/cs-radio/cs-radio.component.js +0 -27
  234. package/esm2015/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ngfactory.js +0 -20
  235. package/esm2015/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ngsummary.json +0 -1
  236. package/esm2015/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.js +0 -14
  237. package/esm2015/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ngfactory.js +0 -19
  238. package/esm2015/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ngsummary.json +0 -1
  239. package/esm2015/lib/ui-kit/formgroup/cs-select/cs-select.component.js +0 -80
  240. package/esm2015/lib/ui-kit/formgroup/cs-select/cs-select.component.ngfactory.js +0 -89
  241. package/esm2015/lib/ui-kit/formgroup/cs-select/cs-select.component.ngsummary.json +0 -1
  242. package/esm2015/lib/ui-kit/formgroup/cs-switch/cs-switch.component.js +0 -29
  243. package/esm2015/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ngfactory.js +0 -62
  244. package/esm2015/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ngsummary.json +0 -1
  245. package/esm2015/lib/ui-kit/formgroup/formgroup.module.js +0 -38
  246. package/esm2015/lib/ui-kit/formgroup/formgroup.module.ngfactory.js +0 -14
  247. package/esm2015/lib/ui-kit/formgroup/formgroup.module.ngsummary.json +0 -1
  248. package/esm2015/lib/ui-kit/formgroup/pipes/pascal.pipe.js +0 -15
  249. package/esm2015/lib/ui-kit/formgroup/pipes/pascal.pipe.ngsummary.json +0 -1
  250. package/esm2015/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.js +0 -20
  251. package/esm2015/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.ngsummary.json +0 -1
  252. package/esm2015/lib/ui-kit/no-data/no-data.component.js +0 -32
  253. package/esm2015/lib/ui-kit/no-data/no-data.component.ngfactory.js +0 -28
  254. package/esm2015/lib/ui-kit/no-data/no-data.component.ngsummary.json +0 -1
  255. package/esm2015/lib/ui-kit/no-data/no-data.module.js +0 -13
  256. package/esm2015/lib/ui-kit/no-data/no-data.module.ngfactory.js +0 -12
  257. package/esm2015/lib/ui-kit/no-data/no-data.module.ngsummary.json +0 -1
  258. package/esm2015/lib/ui-kit/pagination/pagination.component.js +0 -127
  259. package/esm2015/lib/ui-kit/pagination/pagination.component.ngfactory.js +0 -30
  260. package/esm2015/lib/ui-kit/pagination/pagination.component.ngsummary.json +0 -1
  261. package/esm2015/lib/ui-kit/pagination/pagination.module.js +0 -13
  262. package/esm2015/lib/ui-kit/pagination/pagination.module.ngfactory.js +0 -12
  263. package/esm2015/lib/ui-kit/pagination/pagination.module.ngsummary.json +0 -1
  264. package/esm2015/lib/ui-kit/popover/popover.component.js +0 -131
  265. package/esm2015/lib/ui-kit/popover/popover.component.ngfactory.js +0 -29
  266. package/esm2015/lib/ui-kit/popover/popover.component.ngsummary.json +0 -1
  267. package/esm2015/lib/ui-kit/popover/popover.directive.js +0 -84
  268. package/esm2015/lib/ui-kit/popover/popover.directive.ngsummary.json +0 -1
  269. package/esm2015/lib/ui-kit/popover/popover.module.js +0 -16
  270. package/esm2015/lib/ui-kit/popover/popover.module.ngfactory.js +0 -13
  271. package/esm2015/lib/ui-kit/popover/popover.module.ngsummary.json +0 -1
  272. package/esm2015/lib/ui-kit/popover/popover.service.js +0 -16
  273. package/esm2015/lib/ui-kit/popover/popover.service.ngsummary.json +0 -1
  274. package/esm2015/lib/ui-kit/select/cs-option/cs-option.component.js +0 -39
  275. package/esm2015/lib/ui-kit/select/cs-option/cs-option.component.ngfactory.js +0 -22
  276. package/esm2015/lib/ui-kit/select/cs-option/cs-option.component.ngsummary.json +0 -1
  277. package/esm2015/lib/ui-kit/select/cs-select/cs-select.component.js +0 -80
  278. package/esm2015/lib/ui-kit/select/cs-select/cs-select.component.ngfactory.js +0 -43
  279. package/esm2015/lib/ui-kit/select/cs-select/cs-select.component.ngsummary.json +0 -1
  280. package/esm2015/lib/ui-kit/select/safe-html.pipe.js +0 -19
  281. package/esm2015/lib/ui-kit/select/safe-html.pipe.ngsummary.json +0 -1
  282. package/esm2015/lib/ui-kit/select/select.module.js +0 -16
  283. package/esm2015/lib/ui-kit/select/select.module.ngfactory.js +0 -13
  284. package/esm2015/lib/ui-kit/select/select.module.ngsummary.json +0 -1
  285. package/esm2015/lib/ui-kit/services/cs-select.service.js +0 -14
  286. package/esm2015/lib/ui-kit/services/cs-select.service.ngsummary.json +0 -1
  287. package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.component.js +0 -45
  288. package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.component.ngfactory.js +0 -28
  289. package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.component.ngsummary.json +0 -1
  290. package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.module.js +0 -13
  291. package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.module.ngfactory.js +0 -12
  292. package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.module.ngsummary.json +0 -1
  293. package/esm2015/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.js +0 -41
  294. package/esm2015/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.ngfactory.js +0 -23
  295. package/esm2015/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.ngsummary.json +0 -1
  296. package/esm2015/lib/ui-kit/snack-bar/snack-bar.module.js +0 -13
  297. package/esm2015/lib/ui-kit/snack-bar/snack-bar.module.ngfactory.js +0 -12
  298. package/esm2015/lib/ui-kit/snack-bar/snack-bar.module.ngsummary.json +0 -1
  299. package/esm2015/lib/ui-kit/snack-bar/snack-bar.service.js +0 -23
  300. package/esm2015/lib/ui-kit/snack-bar/snack-bar.service.ngsummary.json +0 -1
  301. package/esm2015/lib/ui-kit/tooltip/tooltip.directive.js +0 -138
  302. package/esm2015/lib/ui-kit/tooltip/tooltip.directive.ngsummary.json +0 -1
  303. package/esm2015/lib/ui-kit/tooltip/tooltip.module.js +0 -13
  304. package/esm2015/lib/ui-kit/tooltip/tooltip.module.ngfactory.js +0 -12
  305. package/esm2015/lib/ui-kit/tooltip/tooltip.module.ngsummary.json +0 -1
  306. package/esm2015/lib/ui-kit/v-loader/loader/loader.component.js +0 -14
  307. package/esm2015/lib/ui-kit/v-loader/loader/loader.component.ngfactory.js +0 -17
  308. package/esm2015/lib/ui-kit/v-loader/loader/loader.component.ngsummary.json +0 -1
  309. package/esm2015/lib/ui-kit/v-loader/loader-inline/loader-inline.component.js +0 -14
  310. package/esm2015/lib/ui-kit/v-loader/loader-inline/loader-inline.component.ngfactory.js +0 -17
  311. package/esm2015/lib/ui-kit/v-loader/loader-inline/loader-inline.component.ngsummary.json +0 -1
  312. package/esm2015/lib/ui-kit/v-loader/v-loader.module.js +0 -14
  313. package/esm2015/lib/ui-kit/v-loader/v-loader.module.ngfactory.js +0 -12
  314. package/esm2015/lib/ui-kit/v-loader/v-loader.module.ngsummary.json +0 -1
  315. package/esm2015/public-api.ngsummary.json +0 -1
  316. package/fesm2015/create-dashboard.js +0 -4573
  317. package/fesm2015/create-dashboard.js.map +0 -1
  318. package/lib/create-dashboard-container/categories/categories.component.ngfactory.d.ts +0 -1
  319. package/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.ngfactory.d.ts +0 -1
  320. package/lib/create-dashboard-container/configure-widgets/configure-widgets.module.ngfactory.d.ts +0 -3
  321. package/lib/create-dashboard-container/create-dashboard.component.ngfactory.d.ts +0 -1
  322. package/lib/create-dashboard-container/create-dashboard.module.ngfactory.d.ts +0 -3
  323. package/lib/create-dashboard-container/directives/directives.module.ngfactory.d.ts +0 -3
  324. package/lib/create-dashboard-container/form-group/form-group.component.ngfactory.d.ts +0 -1
  325. package/lib/create-dashboard-container/frequency/frequency.component.ngfactory.d.ts +0 -1
  326. package/lib/create-dashboard-container/responsibility-center/responsibility-center.component.ngfactory.d.ts +0 -1
  327. package/lib/create-dashboard-container/risk-categories/risk-categories.component.ngfactory.d.ts +0 -1
  328. package/lib/create-dashboard-container/user-list/user-list.component.ngfactory.d.ts +0 -1
  329. package/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.ngfactory.d.ts +0 -1
  330. package/lib/ui-kit/dashboard-footer/dashboard-footer.module.ngfactory.d.ts +0 -3
  331. package/lib/ui-kit/dialog/dialog.component.ngfactory.d.ts +0 -1
  332. package/lib/ui-kit/dialog/dialog.module.ngfactory.d.ts +0 -3
  333. package/lib/ui-kit/floating-bar/floating-bar.component.ngfactory.d.ts +0 -1
  334. package/lib/ui-kit/floating-bar/floating-bar.module.ngfactory.d.ts +0 -3
  335. package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ngfactory.d.ts +0 -1
  336. package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ngfactory.d.ts +0 -1
  337. package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ngfactory.d.ts +0 -1
  338. package/lib/ui-kit/formgroup/cs-select/cs-select.component.ngfactory.d.ts +0 -1
  339. package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ngfactory.d.ts +0 -1
  340. package/lib/ui-kit/formgroup/formgroup.module.ngfactory.d.ts +0 -3
  341. package/lib/ui-kit/no-data/no-data.component.ngfactory.d.ts +0 -1
  342. package/lib/ui-kit/no-data/no-data.module.ngfactory.d.ts +0 -3
  343. package/lib/ui-kit/pagination/pagination.component.ngfactory.d.ts +0 -1
  344. package/lib/ui-kit/pagination/pagination.module.ngfactory.d.ts +0 -3
  345. package/lib/ui-kit/popover/popover.component.ngfactory.d.ts +0 -1
  346. package/lib/ui-kit/popover/popover.module.ngfactory.d.ts +0 -3
  347. package/lib/ui-kit/select/cs-option/cs-option.component.ngfactory.d.ts +0 -1
  348. package/lib/ui-kit/select/cs-select/cs-select.component.ngfactory.d.ts +0 -1
  349. package/lib/ui-kit/select/select.module.ngfactory.d.ts +0 -3
  350. package/lib/ui-kit/smiley-dialog/smiley-dialog.component.ngfactory.d.ts +0 -1
  351. package/lib/ui-kit/smiley-dialog/smiley-dialog.module.ngfactory.d.ts +0 -3
  352. package/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.ngfactory.d.ts +0 -1
  353. package/lib/ui-kit/snack-bar/snack-bar.module.ngfactory.d.ts +0 -3
  354. package/lib/ui-kit/tooltip/tooltip.module.ngfactory.d.ts +0 -3
  355. package/lib/ui-kit/v-loader/loader/loader.component.ngfactory.d.ts +0 -1
  356. package/lib/ui-kit/v-loader/loader-inline/loader-inline.component.ngfactory.d.ts +0 -1
  357. package/lib/ui-kit/v-loader/v-loader.module.ngfactory.d.ts +0 -3
@@ -0,0 +1,537 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../../ui-kit/dialog/dialog-ref";
4
+ import * as i2 from "../../services/configure-widgets.service";
5
+ import * as i3 from "../../../ui-kit/snack-bar/snack-bar.service";
6
+ import * as i4 from "@angular/common";
7
+ import * as i5 from "../../../ui-kit/floating-bar/floating-bar.component";
8
+ import * as i6 from "../../../ui-kit/formgroup/cs-checkbox/cs-checkbox.component";
9
+ import * as i7 from "@angular/forms";
10
+ import * as i8 from "../../../ui-kit/no-data/no-data.component";
11
+ import * as i9 from "../../pipes/search.pipe";
12
+ export class ConfigureWidgetsComponent {
13
+ constructor(dialog, configureWidgetsService, snackBar) {
14
+ this.dialog = dialog;
15
+ this.configureWidgetsService = configureWidgetsService;
16
+ this.snackBar = snackBar;
17
+ this.widgetsDataModified = new EventEmitter();
18
+ this.closeConfigureWidgets = new EventEmitter();
19
+ this.search = '';
20
+ this.checkedArray = [];
21
+ this.selectedWidgets = [];
22
+ this.module = 'COMPLIANCE';
23
+ this.selectedWidgetsData = [];
24
+ this.displayedWidgets = [];
25
+ this.showRisk = false;
26
+ this.showCompliance = false;
27
+ this.mode = 'CREATE';
28
+ this.noDataText = 'You have not configured any widgets. Click on the <strong>Configure Widgets</strong> button to begin.';
29
+ this.selectedWidgetIds = [];
30
+ this.subResponsibilitiesSelected = false;
31
+ this.subKeyResponsibilitiesSelected = false;
32
+ this.showWidgets = true;
33
+ this.complianceWidgetsDisplayCount = 9;
34
+ this.riskWidgetsDisplayCount = 12;
35
+ this.widgetsList = {
36
+ COMPLIANCE: [
37
+ {
38
+ title: 'Overview',
39
+ id: 'overview',
40
+ description: 'Overview shows the performance of responsibilities and Programs.',
41
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/overview.png',
42
+ value: false,
43
+ visibility: true,
44
+ module: 'COMPLIANCE',
45
+ subWidgets: []
46
+ },
47
+ {
48
+ title: 'Responsibility Calendar',
49
+ id: 'compliance_calendar_flag',
50
+ description: 'The Responsibility Calendar shows the due dates of responsibilities in a calendar format. The responsibilities are color coded to reflect the status of the responsibilities.',
51
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/responsibility-calender.png',
52
+ value: false,
53
+ visibility: true,
54
+ module: 'COMPLIANCE',
55
+ subWidgets: []
56
+ },
57
+ {
58
+ title: 'Responsibility Center Overview',
59
+ id: 'responsibility_center_overview_flag',
60
+ description: 'The Responsibility Center Overview shows the performance of responsibilities and Responsibility Centers.',
61
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/responsibility-center-overview.png',
62
+ value: false,
63
+ visibility: true,
64
+ module: 'COMPLIANCE',
65
+ subWidgets: []
66
+ },
67
+ {
68
+ title: 'Responsibilities',
69
+ id: 'my_responsibilities',
70
+ description: 'This widget shows the performance of the responsibilities that you are required to complete, the responsibilities that you are reviewing and the responsibilities that you are overseeing.',
71
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/my-responsibilities.png',
72
+ tabOption: true,
73
+ value: false,
74
+ visibility: true,
75
+ module: 'COMPLIANCE',
76
+ subWidgets: [
77
+ {
78
+ title: 'My Responsibilities',
79
+ id: 'my_responsibility_flag',
80
+ value: false,
81
+ visibility: true,
82
+ },
83
+ {
84
+ title: 'I’m Reviewing',
85
+ id: 'reviewer_responsibility_flag',
86
+ value: false,
87
+ visibility: true,
88
+ },
89
+ {
90
+ title: 'I’m Overseeing',
91
+ id: 'cc_responsibility_flag',
92
+ value: false,
93
+ visibility: true,
94
+ }
95
+ ]
96
+ },
97
+ {
98
+ title: 'Key Responsibilities',
99
+ id: 'key_responsibilities',
100
+ description: 'This widget shows the performance of key responsibilities that you are required to complete, that you are reviewing, that you are overseeing and that you have assigned to another person.',
101
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/key-responsibilities.png',
102
+ tabOption: true,
103
+ value: false,
104
+ visibility: true,
105
+ module: 'COMPLIANCE',
106
+ subWidgets: [
107
+ {
108
+ title: 'Overview',
109
+ id: 'key_responsibilities_overview_flag',
110
+ value: false,
111
+ visibility: true,
112
+ },
113
+ {
114
+ title: 'My Responsibilities',
115
+ id: 'key_my_responsibilities_flag',
116
+ value: false,
117
+ visibility: true,
118
+ },
119
+ {
120
+ title: 'I’m Reviewing',
121
+ id: 'key_i_am_reviewing_flag',
122
+ value: false,
123
+ visibility: true,
124
+ },
125
+ {
126
+ title: 'I’m Overseeing',
127
+ id: 'key_i_am_overseeing_flag',
128
+ value: false,
129
+ visibility: true,
130
+ }
131
+ ]
132
+ },
133
+ {
134
+ title: 'Trend Analysis',
135
+ id: 'trend_analysis_flag',
136
+ description: 'The Trend Analysis is a graphical representation of the performance of responsibilities over a period.',
137
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/trend-analysis.png',
138
+ value: false,
139
+ visibility: true,
140
+ module: 'COMPLIANCE',
141
+ subWidgets: []
142
+ },
143
+ {
144
+ title: 'Workroom Updates',
145
+ id: 'workroom_alert_flag',
146
+ description: 'The Responsibility Workroom shows updates from the Responsibility Workrooms. A Responsibility Workroom exists for all responsibilities.',
147
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/workroom-updates.png',
148
+ value: false,
149
+ visibility: true,
150
+ module: 'COMPLIANCE',
151
+ subWidgets: []
152
+ },
153
+ {
154
+ title: 'Recent Activities',
155
+ id: 'recent_activity_flag',
156
+ description: 'This is a chronological view of the recent updates of responsibilities.',
157
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/recent-activities.png',
158
+ value: false,
159
+ visibility: true,
160
+ module: 'COMPLIANCE',
161
+ subWidgets: []
162
+ },
163
+ {
164
+ title: 'Exception Summary',
165
+ id: 'exception_summary_flag',
166
+ description: 'Exceptions Summary show the number of responsibilities that are either not accepted, not completed or deleted.',
167
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/exception-summary.png',
168
+ value: false,
169
+ visibility: true,
170
+ module: 'COMPLIANCE',
171
+ subWidgets: []
172
+ }
173
+ ],
174
+ RISK: [
175
+ {
176
+ title: 'Risk Overview',
177
+ id: 'risk_overview',
178
+ description: 'This widget shows the number and percentage of risks within each risk response strategy.',
179
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/risk-overview.png',
180
+ value: false,
181
+ visibility: true,
182
+ module: 'RISK',
183
+ subWidgets: []
184
+ },
185
+ {
186
+ title: 'Risk Metrics',
187
+ id: 'risk_metrics',
188
+ description: 'This widget shows the number of risks within each risk appetite, the number of risks that exceed the risk appetite, the number of risks that exceed the risk tolerance, the number of risks within each risk rating, and the number of risks that do not have any linked controls.',
189
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/appetite-tolerance.png',
190
+ value: false,
191
+ visibility: true,
192
+ module: 'RISK',
193
+ subWidgets: [
194
+ {
195
+ title: 'Risk Appetite & Tolerance',
196
+ id: 'risk_appetite_tolerance',
197
+ value: false,
198
+ visibility: true,
199
+ },
200
+ {
201
+ title: 'Risk Ratings',
202
+ id: 'risk_ratings',
203
+ value: false,
204
+ visibility: true,
205
+ },
206
+ {
207
+ title: 'Risks Without Controls',
208
+ id: 'risks_without_controls',
209
+ value: false,
210
+ visibility: true,
211
+ },
212
+ {
213
+ title: 'Exceeds Risk Tolerance',
214
+ id: 'exceeds_risk_tolerance',
215
+ value: false,
216
+ visibility: true,
217
+ },
218
+ ]
219
+ },
220
+ {
221
+ title: 'Inherent Risk Rating by Responsibility Centers ',
222
+ id: 'inherent_risk_rating_by_responsibility_centers',
223
+ description: 'This widget shows the number of risks within each inherent risk rating, grouped according to the Responsibility Center exposed to the risk.',
224
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/inherent-RC.png',
225
+ value: false,
226
+ visibility: true,
227
+ module: 'RISK',
228
+ subWidgets: []
229
+ },
230
+ {
231
+ title: 'Residual Risk Rating by Responsibility Centers ',
232
+ id: 'residual_risk_rating_by_responsibility_centers',
233
+ description: 'This widget shows the number of risks within each residual risk rating, grouped according to the Responsibility Center exposed to the risk.',
234
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/residual-RC.png',
235
+ value: false,
236
+ visibility: true,
237
+ module: 'RISK',
238
+ subWidgets: []
239
+ },
240
+ {
241
+ title: 'Risk Category Overview',
242
+ id: 'risk_category_overview',
243
+ description: 'This widgets shows the number of risks within each status, grouped according to the Risk Category the risk is assigned to.',
244
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/risk-category-overview.png',
245
+ value: false,
246
+ visibility: true,
247
+ module: 'RISK',
248
+ subWidgets: []
249
+ },
250
+ {
251
+ title: 'Risk Heatmap',
252
+ id: 'risk_heatmap',
253
+ description: 'The Risk Heatmap displays the risk matrix for any two risk factors.',
254
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/risk-heatmap.png',
255
+ value: false,
256
+ visibility: true,
257
+ module: 'RISK',
258
+ subWidgets: []
259
+ },
260
+ {
261
+ title: 'Inherent Risk Rating by Categories',
262
+ id: 'inherent_risk_rating_by_categories',
263
+ description: 'This widget shows the number of risks within each inherent risk rating, grouped according to the Risk Category that the risk is assigned to.',
264
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/inherent-categories.png',
265
+ value: false,
266
+ visibility: true,
267
+ module: 'RISK',
268
+ subWidgets: []
269
+ },
270
+ {
271
+ title: 'Residual Risk Rating by Categories',
272
+ id: 'residual_risk_rating_by_categories',
273
+ description: 'This widget shows the number of risks within each residual risk rating, grouped according to the Risk Category that the risk is assigned to.',
274
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/residual-categories.png',
275
+ value: false,
276
+ visibility: true,
277
+ module: 'RISK',
278
+ subWidgets: []
279
+ },
280
+ {
281
+ title: 'Inherent Risk Rating Trend by Responsibility Centers',
282
+ id: 'inherent_risk_rating_trend_by_responsibility_centers',
283
+ description: 'This widget is a graphical representation of the number of risks within each inherent risk rating, grouped according to the Responsibility Center exposed to the risk.',
284
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/inherent-trend.png',
285
+ value: false,
286
+ visibility: true,
287
+ module: 'RISK',
288
+ subWidgets: []
289
+ },
290
+ {
291
+ title: 'Residual Risk Rating Trend by Responsibility Centers',
292
+ id: 'residual_risk_rating_trend_by_responsibility_centers',
293
+ description: 'This widget is a graphical representation of the number of risks within each residual risk rating, grouped according to the Responsibility Center exposed to the risk.',
294
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/residual-trend.png',
295
+ value: false,
296
+ visibility: true,
297
+ module: 'RISK',
298
+ subWidgets: []
299
+ },
300
+ {
301
+ title: 'Risk Rating Trend by Categories',
302
+ id: 'risk_rating_trend_by_categories',
303
+ description: 'This widgets is a trend chart that shows the inherent and residual risk rating trend across the different Risk Categories.',
304
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/risk-trend.png',
305
+ value: false,
306
+ visibility: true,
307
+ module: 'RISK',
308
+ subWidgets: []
309
+ },
310
+ {
311
+ title: 'Top 5 Risk Ratings',
312
+ id: 'top_5_residual_risk_ratings',
313
+ description: 'This widgets shows ths top five risks with the highest risk rating.',
314
+ widgetImage: 'https://cdn.v-comply.com/libraries/configure-widget/assets/images/5-risk-ratings.png',
315
+ value: false,
316
+ visibility: true,
317
+ module: 'RISK',
318
+ subWidgets: []
319
+ }
320
+ ]
321
+ };
322
+ }
323
+ ngOnChanges() {
324
+ if (this.mode == 'EDIT') {
325
+ this.setWidgetsVisibilityToFalse();
326
+ this.riskWidgetsDisplayCount = 0;
327
+ this.complianceWidgetsDisplayCount = 0;
328
+ const finalData = [...new Set(this.displayedWidgets)];
329
+ finalData.forEach((element, index) => {
330
+ this.widgetsList.COMPLIANCE.forEach((ele) => {
331
+ if (ele.id == element.widget_code) {
332
+ ele.visibility = true;
333
+ if (ele.subWidgets.length > 0) {
334
+ const filterData = [];
335
+ element.sub_widgets.filter((subwidget) => {
336
+ filterData.push(subwidget.widget_code);
337
+ });
338
+ ele.subWidgets.forEach((subElement, subIndex) => {
339
+ if (filterData.includes(subElement.id)) {
340
+ ele.subWidgets[subIndex].visibility = true;
341
+ }
342
+ else {
343
+ ele.subWidgets[subIndex].visibility = false;
344
+ }
345
+ });
346
+ }
347
+ this.complianceWidgetsDisplayCount++;
348
+ }
349
+ });
350
+ this.widgetsList.RISK.forEach((ele) => {
351
+ if (ele.id == element.widget_code) {
352
+ ele.visibility = true;
353
+ if (ele.subWidgets.length > 0) {
354
+ const filterData = [];
355
+ element.sub_widgets.filter((subwidget) => {
356
+ filterData.push(subwidget.widget_code);
357
+ });
358
+ ele.subWidgets.forEach((subElement, subIndex) => {
359
+ if (filterData.includes(subElement.id)) {
360
+ ele.subWidgets[subIndex].visibility = true;
361
+ }
362
+ else {
363
+ ele.subWidgets[subIndex].visibility = false;
364
+ }
365
+ });
366
+ }
367
+ this.riskWidgetsDisplayCount++;
368
+ }
369
+ });
370
+ });
371
+ }
372
+ const data = [...new Set(this.selectedWidgetsData)];
373
+ data.forEach((element, index) => {
374
+ this.widgetsList.COMPLIANCE.forEach((ele) => {
375
+ if (ele.id == element.widget_code && element.state == 'ACTIVE') {
376
+ ele.value = true;
377
+ if (ele.subWidgets.length > 0) {
378
+ const filterData = [];
379
+ element.sub_widgets.filter((subwidget) => {
380
+ if (subwidget.state == 'ACTIVE') {
381
+ filterData.push(subwidget.widget_code);
382
+ }
383
+ });
384
+ ele.subWidgets.forEach((subElement, subIndex) => {
385
+ if (filterData.includes(subElement.id)) {
386
+ ele.subWidgets[subIndex].value = true;
387
+ }
388
+ else {
389
+ ele.subWidgets[subIndex].value = false;
390
+ }
391
+ });
392
+ }
393
+ this.selectedWidgets.push(ele);
394
+ }
395
+ });
396
+ this.widgetsList.RISK.forEach((ele) => {
397
+ if (ele.id == element.widget_code && element.state == 'ACTIVE') {
398
+ ele.value = true;
399
+ if (ele.subWidgets.length > 0) {
400
+ const filterData = [];
401
+ element.sub_widgets.filter((subwidget) => {
402
+ if (subwidget.state == 'ACTIVE') {
403
+ filterData.push(subwidget.widget_code);
404
+ }
405
+ });
406
+ ele.subWidgets.forEach((subElement, subIndex) => {
407
+ if (filterData.includes(subElement.id)) {
408
+ ele.subWidgets[subIndex].value = true;
409
+ }
410
+ else {
411
+ ele.subWidgets[subIndex].value = false;
412
+ }
413
+ });
414
+ }
415
+ this.selectedWidgets.push(ele);
416
+ }
417
+ });
418
+ });
419
+ this.module = (this.showCompliance) ? 'COMPLIANCE' : 'RISK';
420
+ this.setSelectedWidgets();
421
+ }
422
+ ngOnInit() {
423
+ }
424
+ selectWidget(event, module, widgetId, subWidgetId) {
425
+ const widgetIndex = this.widgetsList[module].findIndex((ele) => ele.id == widgetId);
426
+ const isSubWidgetAddable = this.selectedWidgets.findIndex((widget) => widget.id === widgetId);
427
+ if (event) {
428
+ if (this.selectedWidgets.length >= 10 && !(subWidgetId && isSubWidgetAddable >= 0)) {
429
+ this.snackBar.show('You cannot add more than 10 widgets.', 'alert');
430
+ this.showWidgets = false;
431
+ setTimeout(() => {
432
+ this.widgetsList[module][widgetIndex].value = false;
433
+ this.showWidgets = true;
434
+ }, 10);
435
+ return;
436
+ }
437
+ this.widgetsList[module][widgetIndex].value = true;
438
+ if (this.widgetsList[module][widgetIndex].subWidgets.length > 0) {
439
+ if (!subWidgetId) {
440
+ this.widgetsList[module][widgetIndex].subWidgets.forEach(ele => ele.value = true);
441
+ }
442
+ else {
443
+ const subWidgetIndex = this.widgetsList[module][widgetIndex].subWidgets.findIndex((ele) => ele.id == subWidgetId);
444
+ this.widgetsList[module][widgetIndex].subWidgets[subWidgetIndex].value = true;
445
+ }
446
+ }
447
+ }
448
+ else {
449
+ if (this.widgetsList[module][widgetIndex].subWidgets.length > 0) {
450
+ if (!subWidgetId) {
451
+ this.widgetsList[module][widgetIndex].value = false;
452
+ this.widgetsList[module][widgetIndex].subWidgets.forEach((ele) => ele.value = false);
453
+ }
454
+ else {
455
+ const subWidgetIndex = this.widgetsList[module][widgetIndex].subWidgets.findIndex((ele) => ele.id == subWidgetId);
456
+ this.widgetsList[module][widgetIndex].subWidgets[subWidgetIndex].value = false;
457
+ const isAllWidgetsRemoved = this.widgetsList[module][widgetIndex].subWidgets.every((ele) => ele.value == false);
458
+ if (isAllWidgetsRemoved) {
459
+ this.widgetsList[module][widgetIndex].value = false;
460
+ }
461
+ }
462
+ }
463
+ else {
464
+ this.widgetsList[module][widgetIndex].value = false;
465
+ }
466
+ }
467
+ this.setSelectedWidgets();
468
+ }
469
+ setSelectedWidgets() {
470
+ this.selectedWidgets = [];
471
+ this.widgetsList.COMPLIANCE.forEach((ele) => {
472
+ if (ele.value) {
473
+ this.selectedWidgets.push(ele);
474
+ }
475
+ });
476
+ this.widgetsList.RISK.forEach((ele) => {
477
+ if (ele.value) {
478
+ this.selectedWidgets.push(ele);
479
+ }
480
+ });
481
+ }
482
+ removeWidget(widget) {
483
+ const widgetIndex = this.widgetsList[widget.module].findIndex((ele) => ele.id == widget.id);
484
+ this.widgetsList[widget.module][widgetIndex].value = false;
485
+ if (this.widgetsList[widget.module][widgetIndex].subWidgets.length > 0) {
486
+ this.widgetsList[widget.module][widgetIndex].subWidgets.forEach((ele) => ele.value = false);
487
+ }
488
+ this.setSelectedWidgets();
489
+ }
490
+ onNextClick() {
491
+ this.widgetsDataModified.emit(this.selectedWidgets);
492
+ }
493
+ closeConfigureDashboard() {
494
+ this.selectedWidgets = [];
495
+ this.dialog.close();
496
+ this.closeConfigureWidgets.emit(false);
497
+ }
498
+ setWidgetsVisibilityToFalse() {
499
+ this.widgetsList.COMPLIANCE.forEach((ele) => {
500
+ ele.visibility = false;
501
+ if (ele.subWidgets.length > 0) {
502
+ ele.subWidgets.forEach((subElement) => {
503
+ subElement.visibility = false;
504
+ });
505
+ }
506
+ });
507
+ this.widgetsList.RISK.forEach((ele) => {
508
+ ele.visibility = false;
509
+ if (ele.subWidgets.length > 0) {
510
+ ele.subWidgets.forEach((subElement) => {
511
+ subElement.visibility = false;
512
+ });
513
+ }
514
+ });
515
+ }
516
+ }
517
+ ConfigureWidgetsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ConfigureWidgetsComponent, deps: [{ token: i1.DialogRef }, { token: i2.ConfigureWidgetsService }, { token: i3.SnackBarService }], target: i0.ɵɵFactoryTarget.Component });
518
+ ConfigureWidgetsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.8", type: ConfigureWidgetsComponent, selector: "app-configure-widgets", inputs: { selectedWidgetsData: "selectedWidgetsData", displayedWidgets: "displayedWidgets", showRisk: "showRisk", showCompliance: "showCompliance", mode: "mode" }, outputs: { widgetsDataModified: "widgetsDataModified", closeConfigureWidgets: "closeConfigureWidgets" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"configure-widgets\" *ngIf=\"showWidgets\">\r\n <div class=\"configure-widgets-head\">\r\n <h3 class=\"configure-widgets-title\">Configure Widgets</h3>\r\n <button class=\"configure-widgets-back\" (click)=\"closeConfigureDashboard()\">\r\n <i class=\"icons\">&#xe91d;</i> Back\r\n </button>\r\n </div>\r\n <div class=\"configure-widgets-body\">\r\n <div class=\"configure-widgets-tab\">\r\n <ul>\r\n <li [class.active]=\"module === 'COMPLIANCE'\" *ngIf=\"showCompliance\" (click)=\"module='COMPLIANCE'\">\r\n <button>Compliance<span>{{complianceWidgetsDisplayCount}}</span></button></li>\r\n <li [class.active]=\"module === 'RISK'\" *ngIf=\"showRisk\"><button\r\n (click)=\"module='RISK'\">Risks<span>{{riskWidgetsDisplayCount}}</span></button></li>\r\n </ul>\r\n </div>\r\n <div class=\"configure-widgets-search\">\r\n <i class=\"icons vx-fs-3\">&#xe90b;</i>\r\n <input type=\"text\" placeholder=\"Search widgets\" [(ngModel)]=\"search\">\r\n </div>\r\n <div class=\"configure-widgets-list\" *ngIf=\"(widgetsList[module] | search:search).length !== 0\">\r\n <ng-container *ngFor=\"let widget of widgetsList[module] | search:search\">\r\n <div class=\"configure-widgets-item\" *ngIf=\"widget?.visibility\">\r\n <label class=\"block\">\r\n <input type=\"checkbox\" [checked]=\"widget.value\"\r\n (change)=\"selectWidget($event.target.checked,module,widget.id)\">\r\n <div class=\"check-icon\">\r\n <svg class=\"check\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"check-circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"check-circle\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"configure-widgets-item-head\">\r\n <h4 class=\"configure-widgets-item-title\" [innerHTML]=\"widget?.title\"></h4>\r\n <p class=\"configure-widgets-item-description\" [innerHTML]=\"widget?.description\"></p>\r\n <button *ngIf=\"!widget.value\" class=\"configure-widgets-item-button add\"\r\n (click)=\"selectWidget(true,module,widget.id) \">+ ADD</button>\r\n <button *ngIf=\"widget.value\" class=\"configure-widgets-item-button remove\"\r\n (click)=\"selectWidget(false,module,widget.id) \">- Remove</button>\r\n </div>\r\n <div class=\"configure-widgets-item-body\">\r\n <div class=\"image-wrapper\">\r\n <img [src]=\"widget?.widgetImage\" alt=\"\">\r\n </div>\r\n <div class=\"floating-option vx-d-flex\" *ngIf=\"widget?.subWidgets?.length>0\">\r\n <ng-container *ngFor=\"let subWidget of widget.subWidgets\">\r\n <app-cs-checkbox *ngIf=\"subWidget.visibility\"\r\n (ngValueChange)=\"selectWidget($event, module,widget.id,subWidget.id)\"\r\n [ngValue]=\"subWidget.value\">{{subWidget.title}}\r\n </app-cs-checkbox>\r\n </ng-container>\r\n \r\n </div>\r\n\r\n </div>\r\n </label>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- No Data Image -->\r\n\r\n </div>\r\n <app-no-data *ngIf=\"(widgetsList[module] | search:search).length === 0 \"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/configure-widget/assets/images/configure-widget.svg'\"\r\n [noDataText]=\"'No data to display'\">\r\n </app-no-data>\r\n </div>\r\n\r\n <floating-bar (submitEvent)=\"onNextClick()\" (cancelEvent)=\"closeConfigureDashboard()\"\r\n [selectedData]=\"selectedWidgets\" (deleteEvent)=\"removeWidget($event)\"></floating-bar>\r\n</div>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";::ng-deep .configure-widgets{display:block;width:calc(100vw - 48px);height:100vh;margin-left:48px;background:#FFFFFF}::ng-deep .configure-widgets-head{height:44px;background:#FBFBFB;padding:12px;display:flex;justify-content:space-between;border-bottom:1px solid #F1F1F1}::ng-deep .configure-widgets-title{line-height:20px;font-weight:500;font-size:14px;color:#161b2f;margin:0}::ng-deep .configure-widgets-back{border:none;outline:none;color:#161b2f;font-size:14px;font-weight:500;line-height:20px;display:inline-flex;background:transparent;margin:0;padding:0}::ng-deep .configure-widgets-back i{margin-right:6px;font-size:20px}::ng-deep .configure-widgets-body{padding:4px 36px;position:relative}::ng-deep .configure-widgets-body .floating-option{position:absolute;right:0;bottom:0;left:0;background:#fff;padding:16px 12px;z-index:3;box-shadow:0 -6px 12px #1e5dd31a}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox{display:flex}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox label span.value{color:#161b2f!important;font-size:11px!important;line-height:16px!important;margin-left:8px!important;white-space:nowrap}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox+app-cs-checkbox{margin-left:20px}::ng-deep .configure-widgets-body app-no-data .no-data-wrapper{height:calc(100vh - 222px)!important}::ng-deep .configure-widgets-tab ul{padding:0;margin:0 0 12px;display:flex;border-bottom:1px solid #DBDBDB}::ng-deep .configure-widgets-tab ul li{list-style:none;display:block;width:auto;padding:0}::ng-deep .configure-widgets-tab ul li button{color:#747576;display:inline-block;font-size:11px;line-height:16px;font-weight:600;text-transform:uppercase;border:none;outline:none;background:transparent;padding:8px 0;position:relative;margin:0}::ng-deep .configure-widgets-tab ul li button span{display:inline-block;margin-left:8px;color:#74757680}::ng-deep .configure-widgets-tab ul li+li{padding-left:40px}::ng-deep .configure-widgets-tab ul li.active button{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button span{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button:after{content:\"\";right:0;bottom:0;left:0;height:2px;border-radius:2px;position:absolute;background-color:#1e5dd3}::ng-deep .configure-widgets-search{position:relative;margin-bottom:24px}::ng-deep .configure-widgets-search i{position:absolute;top:16px;left:16px;color:#dbdbdb}::ng-deep .configure-widgets-search input{border:1px solid #DBDBDB;border-radius:4px;height:44px;padding:10px 180px 10px 40px;width:100%;font-size:14px;color:#747576;outline:none}::ng-deep .configure-widgets-search input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .configure-widgets-list{display:flex;flex-wrap:wrap;margin:0 -24px;height:calc(100vh - 238px);overflow:auto}::ng-deep .configure-widgets-item{width:50%;padding:0 24px;margin-bottom:40px}::ng-deep .configure-widgets-item .block{background:#F8F8F8;border-radius:4px;padding:16px 44px 4px;cursor:pointer;position:relative;display:block}::ng-deep .configure-widgets-item .block .check-icon{position:absolute;top:8px;left:0;height:36px;width:36px;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center;background:#34AA44;opacity:0;pointer-events:none}::ng-deep .configure-widgets-item .block .check-icon .check{display:none;width:27px;height:27px;background:transparent;border-radius:50%;stroke-width:4;stroke:#fff;stroke-miterlimit:10;box-shadow:inset 0 0 #fff;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .configure-widgets-item .block .check-icon .check-circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:4;stroke-miterlimit:10;stroke:#fff;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .configure-widgets-item .block .check-icon .check-check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .configure-widgets-item .block input[type=checkbox]{opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;margin:0;z-index:1;cursor:pointer}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon{opacity:1}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon .check{display:block}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-body .image-wrapper{opacity:.5}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.add{display:none}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.remove{display:flex}::ng-deep .configure-widgets-item-head{padding:0 0 16px;position:relative}::ng-deep .configure-widgets-item-title{margin:0 0 12px;font-size:14px;line-height:20px;text-transform:uppercase;color:#161b2f;max-width:calc(100% - 72px);font-weight:500}::ng-deep .configure-widgets-item-description{font-size:12px;line-height:20px;color:#747576;margin:0;font-weight:400;height:60px}::ng-deep .configure-widgets-item-button{width:72px;height:28px;cursor:pointer;display:flex;position:absolute;top:0;right:-24px;font-size:11px;font-weight:500;border:none;outline:none;justify-content:center;align-items:center;border-radius:2px;text-transform:uppercase;padding:0;margin:0}::ng-deep .configure-widgets-item-button.add{color:#fff;background:#1E5DD3}::ng-deep .configure-widgets-item-button.remove{background:#FFFFFF;border:1px solid #f1f1f1;color:#c7381b;display:none}::ng-deep .configure-widgets-item-body{overflow:hidden;height:220px;border:1px solid #f1f1f1;border-bottom:none;border-radius:2px 2px 0 0;box-shadow:0 -4px 8px #161b2f10}::ng-deep .configure-widgets-item-body .image-wrapper{box-shadow:0 -6px 12px #0000001a;border-radius:2px;overflow:hidden;background:#FFFFFF}::ng-deep .configure-widgets-item-body img{width:100%}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #fff}}.disabled{pointer-events:none;opacity:.7}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.FloatingBarComponent, selector: "floating-bar", inputs: ["text", "frequencyMessage", "singleCategory", "selectedData"], outputs: ["cancelEvent", "submitEvent", "deleteEvent"] }, { kind: "component", type: i6.CsCheckboxComponent, selector: "app-cs-checkbox", inputs: ["disabled", "ngValue", "value"], outputs: ["ngValueChange"] }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.NoDataComponent, selector: "app-no-data", inputs: ["action", "noDataImage", "noDataText", "noDataButton", "noDataSecButton", "altText", "smallButton", "buttonIcon", "iconClass"], outputs: ["buttonAction"] }, { kind: "pipe", type: i9.SearchPipe, name: "search" }] });
519
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.8", ngImport: i0, type: ConfigureWidgetsComponent, decorators: [{
520
+ type: Component,
521
+ args: [{ selector: 'app-configure-widgets', template: "<div class=\"configure-widgets\" *ngIf=\"showWidgets\">\r\n <div class=\"configure-widgets-head\">\r\n <h3 class=\"configure-widgets-title\">Configure Widgets</h3>\r\n <button class=\"configure-widgets-back\" (click)=\"closeConfigureDashboard()\">\r\n <i class=\"icons\">&#xe91d;</i> Back\r\n </button>\r\n </div>\r\n <div class=\"configure-widgets-body\">\r\n <div class=\"configure-widgets-tab\">\r\n <ul>\r\n <li [class.active]=\"module === 'COMPLIANCE'\" *ngIf=\"showCompliance\" (click)=\"module='COMPLIANCE'\">\r\n <button>Compliance<span>{{complianceWidgetsDisplayCount}}</span></button></li>\r\n <li [class.active]=\"module === 'RISK'\" *ngIf=\"showRisk\"><button\r\n (click)=\"module='RISK'\">Risks<span>{{riskWidgetsDisplayCount}}</span></button></li>\r\n </ul>\r\n </div>\r\n <div class=\"configure-widgets-search\">\r\n <i class=\"icons vx-fs-3\">&#xe90b;</i>\r\n <input type=\"text\" placeholder=\"Search widgets\" [(ngModel)]=\"search\">\r\n </div>\r\n <div class=\"configure-widgets-list\" *ngIf=\"(widgetsList[module] | search:search).length !== 0\">\r\n <ng-container *ngFor=\"let widget of widgetsList[module] | search:search\">\r\n <div class=\"configure-widgets-item\" *ngIf=\"widget?.visibility\">\r\n <label class=\"block\">\r\n <input type=\"checkbox\" [checked]=\"widget.value\"\r\n (change)=\"selectWidget($event.target.checked,module,widget.id)\">\r\n <div class=\"check-icon\">\r\n <svg class=\"check\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"check-circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"check-circle\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"configure-widgets-item-head\">\r\n <h4 class=\"configure-widgets-item-title\" [innerHTML]=\"widget?.title\"></h4>\r\n <p class=\"configure-widgets-item-description\" [innerHTML]=\"widget?.description\"></p>\r\n <button *ngIf=\"!widget.value\" class=\"configure-widgets-item-button add\"\r\n (click)=\"selectWidget(true,module,widget.id) \">+ ADD</button>\r\n <button *ngIf=\"widget.value\" class=\"configure-widgets-item-button remove\"\r\n (click)=\"selectWidget(false,module,widget.id) \">- Remove</button>\r\n </div>\r\n <div class=\"configure-widgets-item-body\">\r\n <div class=\"image-wrapper\">\r\n <img [src]=\"widget?.widgetImage\" alt=\"\">\r\n </div>\r\n <div class=\"floating-option vx-d-flex\" *ngIf=\"widget?.subWidgets?.length>0\">\r\n <ng-container *ngFor=\"let subWidget of widget.subWidgets\">\r\n <app-cs-checkbox *ngIf=\"subWidget.visibility\"\r\n (ngValueChange)=\"selectWidget($event, module,widget.id,subWidget.id)\"\r\n [ngValue]=\"subWidget.value\">{{subWidget.title}}\r\n </app-cs-checkbox>\r\n </ng-container>\r\n \r\n </div>\r\n\r\n </div>\r\n </label>\r\n </div>\r\n </ng-container>\r\n\r\n <!-- No Data Image -->\r\n\r\n </div>\r\n <app-no-data *ngIf=\"(widgetsList[module] | search:search).length === 0 \"\r\n [noDataImage]=\"'https://cdn.v-comply.com/libraries/configure-widget/assets/images/configure-widget.svg'\"\r\n [noDataText]=\"'No data to display'\">\r\n </app-no-data>\r\n </div>\r\n\r\n <floating-bar (submitEvent)=\"onNextClick()\" (cancelEvent)=\"closeConfigureDashboard()\"\r\n [selectedData]=\"selectedWidgets\" (deleteEvent)=\"removeWidget($event)\"></floating-bar>\r\n</div>", styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";::ng-deep .configure-widgets{display:block;width:calc(100vw - 48px);height:100vh;margin-left:48px;background:#FFFFFF}::ng-deep .configure-widgets-head{height:44px;background:#FBFBFB;padding:12px;display:flex;justify-content:space-between;border-bottom:1px solid #F1F1F1}::ng-deep .configure-widgets-title{line-height:20px;font-weight:500;font-size:14px;color:#161b2f;margin:0}::ng-deep .configure-widgets-back{border:none;outline:none;color:#161b2f;font-size:14px;font-weight:500;line-height:20px;display:inline-flex;background:transparent;margin:0;padding:0}::ng-deep .configure-widgets-back i{margin-right:6px;font-size:20px}::ng-deep .configure-widgets-body{padding:4px 36px;position:relative}::ng-deep .configure-widgets-body .floating-option{position:absolute;right:0;bottom:0;left:0;background:#fff;padding:16px 12px;z-index:3;box-shadow:0 -6px 12px #1e5dd31a}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox{display:flex}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox label span.value{color:#161b2f!important;font-size:11px!important;line-height:16px!important;margin-left:8px!important;white-space:nowrap}::ng-deep .configure-widgets-body .floating-option app-cs-checkbox+app-cs-checkbox{margin-left:20px}::ng-deep .configure-widgets-body app-no-data .no-data-wrapper{height:calc(100vh - 222px)!important}::ng-deep .configure-widgets-tab ul{padding:0;margin:0 0 12px;display:flex;border-bottom:1px solid #DBDBDB}::ng-deep .configure-widgets-tab ul li{list-style:none;display:block;width:auto;padding:0}::ng-deep .configure-widgets-tab ul li button{color:#747576;display:inline-block;font-size:11px;line-height:16px;font-weight:600;text-transform:uppercase;border:none;outline:none;background:transparent;padding:8px 0;position:relative;margin:0}::ng-deep .configure-widgets-tab ul li button span{display:inline-block;margin-left:8px;color:#74757680}::ng-deep .configure-widgets-tab ul li+li{padding-left:40px}::ng-deep .configure-widgets-tab ul li.active button{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button span{color:#1e5dd3}::ng-deep .configure-widgets-tab ul li.active button:after{content:\"\";right:0;bottom:0;left:0;height:2px;border-radius:2px;position:absolute;background-color:#1e5dd3}::ng-deep .configure-widgets-search{position:relative;margin-bottom:24px}::ng-deep .configure-widgets-search i{position:absolute;top:16px;left:16px;color:#dbdbdb}::ng-deep .configure-widgets-search input{border:1px solid #DBDBDB;border-radius:4px;height:44px;padding:10px 180px 10px 40px;width:100%;font-size:14px;color:#747576;outline:none}::ng-deep .configure-widgets-search input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .configure-widgets-list{display:flex;flex-wrap:wrap;margin:0 -24px;height:calc(100vh - 238px);overflow:auto}::ng-deep .configure-widgets-item{width:50%;padding:0 24px;margin-bottom:40px}::ng-deep .configure-widgets-item .block{background:#F8F8F8;border-radius:4px;padding:16px 44px 4px;cursor:pointer;position:relative;display:block}::ng-deep .configure-widgets-item .block .check-icon{position:absolute;top:8px;left:0;height:36px;width:36px;border-radius:0 4px 4px 0;display:flex;justify-content:center;align-items:center;background:#34AA44;opacity:0;pointer-events:none}::ng-deep .configure-widgets-item .block .check-icon .check{display:none;width:27px;height:27px;background:transparent;border-radius:50%;stroke-width:4;stroke:#fff;stroke-miterlimit:10;box-shadow:inset 0 0 #fff;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .configure-widgets-item .block .check-icon .check-circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:4;stroke-miterlimit:10;stroke:#fff;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .configure-widgets-item .block .check-icon .check-check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .configure-widgets-item .block input[type=checkbox]{opacity:0;position:absolute;top:0;left:0;width:100%;height:100%;margin:0;z-index:1;cursor:pointer}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon{opacity:1}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked+.check-icon .check{display:block}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-body .image-wrapper{opacity:.5}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.add{display:none}::ng-deep .configure-widgets-item .block input[type=checkbox]:checked~.configure-widgets-item-head button.remove{display:flex}::ng-deep .configure-widgets-item-head{padding:0 0 16px;position:relative}::ng-deep .configure-widgets-item-title{margin:0 0 12px;font-size:14px;line-height:20px;text-transform:uppercase;color:#161b2f;max-width:calc(100% - 72px);font-weight:500}::ng-deep .configure-widgets-item-description{font-size:12px;line-height:20px;color:#747576;margin:0;font-weight:400;height:60px}::ng-deep .configure-widgets-item-button{width:72px;height:28px;cursor:pointer;display:flex;position:absolute;top:0;right:-24px;font-size:11px;font-weight:500;border:none;outline:none;justify-content:center;align-items:center;border-radius:2px;text-transform:uppercase;padding:0;margin:0}::ng-deep .configure-widgets-item-button.add{color:#fff;background:#1E5DD3}::ng-deep .configure-widgets-item-button.remove{background:#FFFFFF;border:1px solid #f1f1f1;color:#c7381b;display:none}::ng-deep .configure-widgets-item-body{overflow:hidden;height:220px;border:1px solid #f1f1f1;border-bottom:none;border-radius:2px 2px 0 0;box-shadow:0 -4px 8px #161b2f10}::ng-deep .configure-widgets-item-body .image-wrapper{box-shadow:0 -6px 12px #0000001a;border-radius:2px;overflow:hidden;background:#FFFFFF}::ng-deep .configure-widgets-item-body img{width:100%}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #fff}}.disabled{pointer-events:none;opacity:.7}\n"] }]
522
+ }], ctorParameters: function () { return [{ type: i1.DialogRef }, { type: i2.ConfigureWidgetsService }, { type: i3.SnackBarService }]; }, propDecorators: { widgetsDataModified: [{
523
+ type: Output
524
+ }], closeConfigureWidgets: [{
525
+ type: Output
526
+ }], selectedWidgetsData: [{
527
+ type: Input
528
+ }], displayedWidgets: [{
529
+ type: Input
530
+ }], showRisk: [{
531
+ type: Input
532
+ }], showCompliance: [{
533
+ type: Input
534
+ }], mode: [{
535
+ type: Input
536
+ }] } });
537
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlLXdpZGdldHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3JlYXRlLWRhc2hib2FyZC9zcmMvbGliL2NyZWF0ZS1kYXNoYm9hcmQtY29udGFpbmVyL2NvbmZpZ3VyZS13aWRnZXRzL2NvbmZpZ3VyZS13aWRnZXRzL2NvbmZpZ3VyZS13aWRnZXRzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NyZWF0ZS1kYXNoYm9hcmQvc3JjL2xpYi9jcmVhdGUtZGFzaGJvYXJkLWNvbnRhaW5lci9jb25maWd1cmUtd2lkZ2V0cy9jb25maWd1cmUtd2lkZ2V0cy9jb25maWd1cmUtd2lkZ2V0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7QUFZMUYsTUFBTSxPQUFPLHlCQUF5QjtJQXlCcEMsWUFDVSxNQUFpQixFQUNsQix1QkFBZ0QsRUFDL0MsUUFBeUI7UUFGekIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNsQiw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBQy9DLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBMUJ6Qix3QkFBbUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM1RCwwQkFBcUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV4RSxXQUFNLEdBQVcsRUFBRSxDQUFDO1FBQ3BCLGlCQUFZLEdBQTZDLEVBQUUsQ0FBQztRQUM1RCxvQkFBZSxHQUEyQixFQUFFLENBQUM7UUFFN0MsV0FBTSxHQUEwQixZQUFZLENBQUM7UUFDcEMsd0JBQW1CLEdBQVEsRUFBRSxDQUFDO1FBQzlCLHFCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMzQixhQUFRLEdBQUcs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TTtnQkFPRSxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWd1cmVXaWRnZXRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZ3VyZS13aWRnZXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgcmV0cnkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IHdpZGdldERhdGFNb2RlbCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvd2lkZ2V0LWRhdGEtbW9kZWwnO1xyXG5pbXBvcnQgeyBEaWFsb2dSZWYgfSBmcm9tICcuLi8uLi8uLi91aS1raXQvZGlhbG9nL2RpYWxvZy1yZWYnO1xyXG5pbXBvcnQgeyB3aWRnZXRDb25maWcgfSBmcm9tICcuL3dpZGdldC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTbmFja0JhclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi91aS1raXQvc25hY2stYmFyL3NuYWNrLWJhci5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNvbmZpZ3VyZS13aWRnZXRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29uZmlndXJlLXdpZGdldHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbmZpZ3VyZS13aWRnZXRzLmNvbXBvbmVudC5sZXNzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyZVdpZGdldHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBPdXRwdXQoKSB3aWRnZXRzRGF0YU1vZGlmaWVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY2xvc2VDb25maWd1cmVXaWRnZXRzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjaGVja2JveFN0YXR1cyE6IGFueTtcclxuICBzZWFyY2g6IHN0cmluZyA9ICcnO1xyXG4gIGNoZWNrZWRBcnJheTogQXJyYXk8eyBpbmRleDogbnVtYmVyLCBzdGF0dXM6IG51bWJlciB9PiA9IFtdO1xyXG4gIHNlbGVjdGVkV2lkZ2V0czogQXJyYXk8d2lkZ2V0RGF0YU1vZGVsPiA9IFtdO1xyXG5cclxuICBtb2R1bGU6IFwiQ09NUExJQU5DRVwiIHwgXCJSSVNLXCIgPSAnQ09NUExJQU5DRSc7XHJcbiAgQElucHV0KCkgc2VsZWN0ZWRXaWRnZXRzRGF0YTogYW55ID0gW107XHJcbiAgQElucHV0KCkgZGlzcGxheWVkV2lkZ2V0czogYW55ID0gW107XHJcbiAgQElucHV0KCkgc2hvd1Jpc2sgPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93Q29tcGxpYW5jZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1vZGUgPSAnQ1JFQVRFJ1xyXG4gIG5vRGF0YVRleHQgPSAnWW91IGhhdmUgbm90IGNvbmZpZ3VyZWQgYW55IHdpZGdldHMuIENsaWNrIG9uIHRoZSA8c3Ryb25nPkNvbmZpZ3VyZSBXaWRnZXRzPC9zdHJvbmc+IGJ1dHRvbiB0byBiZWdpbi4nO1xyXG5cclxuICBzZWxlY3RlZFdpZGdldElkczogYW55ID0gW107XHJcbiAgc3ViUmVzcG9uc2liaWxpdGllc1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2VcclxuICBzdWJLZXlSZXNwb25zaWJpbGl0aWVzU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIHNob3dXaWRnZXRzID0gdHJ1ZTtcclxuICBjb21wbGlhbmNlV2lkZ2V0c0Rpc3BsYXlDb3VudCA9IDk7XHJcbiAgcmlza1dpZGdldHNEaXNwbGF5Q291bnQgPSAxMjtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IERpYWxvZ1JlZixcclxuICAgIHB1YmxpYyBjb25maWd1cmVXaWRnZXRzU2VydmljZTogQ29uZmlndXJlV2lkZ2V0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBTbmFja0JhclNlcnZpY2UpIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ0VESVQnKSB7XHJcbiAgICAgIHRoaXMuc2V0V2lkZ2V0c1Zpc2liaWxpdHlUb0ZhbHNlKClcclxuICAgICAgdGhpcy5yaXNrV2lkZ2V0c0Rpc3BsYXlDb3VudCA9IDA7XHJcbiAgICAgIHRoaXMuY29tcGxpYW5jZVdpZGdldHNEaXNwbGF5Q291bnQgPSAwO1xyXG4gICAgICBjb25zdCBmaW5hbERhdGEgPSBbLi4ubmV3IFNldCh0aGlzLmRpc3BsYXllZFdpZGdldHMpXTtcclxuICAgICAgZmluYWxEYXRhLmZvckVhY2goKGVsZW1lbnQ6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMud2lkZ2V0c0xpc3QuQ09NUExJQU5DRS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsZS5pZCA9PSBlbGVtZW50LndpZGdldF9jb2RlKSB7XHJcbiAgICAgICAgICAgIGVsZS52aXNpYmlsaXR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGVsZS5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJEYXRhOiBhbnkgPSBbXVxyXG4gICAgICAgICAgICAgIGVsZW1lbnQuc3ViX3dpZGdldHMuZmlsdGVyKChzdWJ3aWRnZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJEYXRhLnB1c2goc3Vid2lkZ2V0LndpZGdldF9jb2RlKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBlbGUuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJFbGVtZW50OiBhbnksIHN1YkluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJEYXRhLmluY2x1ZGVzKHN1YkVsZW1lbnQuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGVsZS5zdWJXaWRnZXRzW3N1YkluZGV4XS52aXNpYmlsaXR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGVsZS5zdWJXaWRnZXRzW3N1YkluZGV4XS52aXNpYmlsaXR5ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb21wbGlhbmNlV2lkZ2V0c0Rpc3BsYXlDb3VudCsrXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICB0aGlzLndpZGdldHNMaXN0LlJJU0suZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChlbGUuaWQgPT0gZWxlbWVudC53aWRnZXRfY29kZSkge1xyXG4gICAgICAgICAgICBlbGUudmlzaWJpbGl0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChlbGUuc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRGF0YTogYW55ID0gW11cclxuICAgICAgICAgICAgICBlbGVtZW50LnN1Yl93aWRnZXRzLmZpbHRlcigoc3Vid2lkZ2V0OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZmlsdGVyRGF0YS5wdXNoKHN1YndpZGdldC53aWRnZXRfY29kZSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgZWxlLnN1YldpZGdldHMuZm9yRWFjaCgoc3ViRWxlbWVudDogYW55LCBzdWJJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyRGF0YS5pbmNsdWRlcyhzdWJFbGVtZW50LmlkKSkge1xyXG4gICAgICAgICAgICAgICAgICBlbGUuc3ViV2lkZ2V0c1tzdWJJbmRleF0udmlzaWJpbGl0eSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBlbGUuc3ViV2lkZ2V0c1tzdWJJbmRleF0udmlzaWJpbGl0eSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJpc2tXaWRnZXRzRGlzcGxheUNvdW50KytcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGEgPSBbLi4ubmV3IFNldCh0aGlzLnNlbGVjdGVkV2lkZ2V0c0RhdGEpXTtcclxuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMud2lkZ2V0c0xpc3QuQ09NUExJQU5DRS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGUuaWQgPT0gZWxlbWVudC53aWRnZXRfY29kZSAmJiBlbGVtZW50LnN0YXRlID09ICdBQ1RJVkUnKSB7XHJcbiAgICAgICAgICBlbGUudmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGVsZS5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyRGF0YTogYW55ID0gW11cclxuICAgICAgICAgICAgZWxlbWVudC5zdWJfd2lkZ2V0cy5maWx0ZXIoKHN1YndpZGdldDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHN1YndpZGdldC5zdGF0ZSA9PSAnQUNUSVZFJykge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyRGF0YS5wdXNoKHN1YndpZGdldC53aWRnZXRfY29kZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZWxlLnN1YldpZGdldHMuZm9yRWFjaCgoc3ViRWxlbWVudDogYW55LCBzdWJJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlckRhdGEuaW5jbHVkZXMoc3ViRWxlbWVudC5pZCkpIHtcclxuICAgICAgICAgICAgICAgIGVsZS5zdWJXaWRnZXRzW3N1YkluZGV4XS52YWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZS5zdWJXaWRnZXRzW3N1YkluZGV4XS52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMucHVzaChlbGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIHRoaXMud2lkZ2V0c0xpc3QuUklTSy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChlbGUuaWQgPT0gZWxlbWVudC53aWRnZXRfY29kZSAmJiBlbGVtZW50LnN0YXRlID09ICdBQ1RJVkUnKSB7XHJcbiAgICAgICAgICBlbGUudmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgaWYgKGVsZS5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVyRGF0YTogYW55ID0gW11cclxuICAgICAgICAgICAgZWxlbWVudC5zdWJfd2lkZ2V0cy5maWx0ZXIoKHN1YndpZGdldDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHN1YndpZGdldC5zdGF0ZSA9PSAnQUNUSVZFJykge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyRGF0YS5wdXNoKHN1YndpZGdldC53aWRnZXRfY29kZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZWxlLnN1YldpZGdldHMuZm9yRWFjaCgoc3ViRWxlbWVudDogYW55LCBzdWJJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGZpbHRlckRhdGEuaW5jbHVkZXMoc3ViRWxlbWVudC5pZCkpIHtcclxuICAgICAgICAgICAgICAgIGVsZS5zdWJXaWRnZXRzW3N1YkluZGV4XS52YWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVsZS5zdWJXaWRnZXRzW3N1YkluZGV4XS52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMucHVzaChlbGUpO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcblxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm1vZHVsZSA9ICh0aGlzLnNob3dDb21wbGlhbmNlKSA/ICdDT01QTElBTkNFJyA6ICdSSVNLJztcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRXaWRnZXRzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgd2lkZ2V0c0xpc3QgPSB7XHJcbiAgICBDT01QTElBTkNFOiBbXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogJ092ZXJ2aWV3JyxcclxuICAgICAgICBpZDogJ292ZXJ2aWV3JyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ092ZXJ2aWV3IHNob3dzIHRoZSBwZXJmb3JtYW5jZSBvZiByZXNwb25zaWJpbGl0aWVzIGFuZCBQcm9ncmFtcy4nLFxyXG4gICAgICAgIHdpZGdldEltYWdlOiAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy9jb25maWd1cmUtd2lkZ2V0L2Fzc2V0cy9pbWFnZXMvb3ZlcnZpZXcucG5nJyxcclxuICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgdmlzaWJpbGl0eTp0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ0NPTVBMSUFOQ0UnLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogJ1Jlc3BvbnNpYmlsaXR5IENhbGVuZGFyJyxcclxuICAgICAgICBpZDogJ2NvbXBsaWFuY2VfY2FsZW5kYXJfZmxhZycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgUmVzcG9uc2liaWxpdHkgQ2FsZW5kYXIgc2hvd3MgdGhlIGR1ZSBkYXRlcyBvZiByZXNwb25zaWJpbGl0aWVzIGluIGEgY2FsZW5kYXIgZm9ybWF0LiBUaGUgcmVzcG9uc2liaWxpdGllcyBhcmUgY29sb3IgY29kZWQgdG8gcmVmbGVjdCB0aGUgc3RhdHVzIG9mIHRoZSByZXNwb25zaWJpbGl0aWVzLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9yZXNwb25zaWJpbGl0eS1jYWxlbmRlci5wbmcnLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW11cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnUmVzcG9uc2liaWxpdHkgQ2VudGVyIE92ZXJ2aWV3JyxcclxuICAgICAgICBpZDogJ3Jlc3BvbnNpYmlsaXR5X2NlbnRlcl9vdmVydmlld19mbGFnJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBSZXNwb25zaWJpbGl0eSBDZW50ZXIgT3ZlcnZpZXcgc2hvd3MgdGhlIHBlcmZvcm1hbmNlIG9mIHJlc3BvbnNpYmlsaXRpZXMgYW5kIFJlc3BvbnNpYmlsaXR5IENlbnRlcnMuJyxcclxuICAgICAgICB3aWRnZXRJbWFnZTogJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvY29uZmlndXJlLXdpZGdldC9hc3NldHMvaW1hZ2VzL3Jlc3BvbnNpYmlsaXR5LWNlbnRlci1vdmVydmlldy5wbmcnLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW11cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnUmVzcG9uc2liaWxpdGllcycsXHJcbiAgICAgICAgaWQ6ICdteV9yZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgd2lkZ2V0IHNob3dzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgcmVzcG9uc2liaWxpdGllcyB0aGF0IHlvdSBhcmUgcmVxdWlyZWQgdG8gY29tcGxldGUsIHRoZSByZXNwb25zaWJpbGl0aWVzIHRoYXQgeW91IGFyZSByZXZpZXdpbmcgYW5kIHRoZSByZXNwb25zaWJpbGl0aWVzIHRoYXQgeW91IGFyZSBvdmVyc2VlaW5nLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9teS1yZXNwb25zaWJpbGl0aWVzLnBuZycsXHJcbiAgICAgICAgdGFiT3B0aW9uOiB0cnVlLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogJ015IFJlc3BvbnNpYmlsaXRpZXMnLFxyXG4gICAgICAgICAgICBpZDogJ215X3Jlc3BvbnNpYmlsaXR5X2ZsYWcnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6dHJ1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiAnSeKAmW0gUmV2aWV3aW5nJyxcclxuICAgICAgICAgICAgaWQ6ICdyZXZpZXdlcl9yZXNwb25zaWJpbGl0eV9mbGFnJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogJ0nigJltIE92ZXJzZWVpbmcnLFxyXG4gICAgICAgICAgICBpZDogJ2NjX3Jlc3BvbnNpYmlsaXR5X2ZsYWcnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6dHJ1ZSxcclxuICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogJ0tleSBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgICBpZDogJ2tleV9yZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgd2lkZ2V0IHNob3dzIHRoZSBwZXJmb3JtYW5jZSBvZiBrZXkgcmVzcG9uc2liaWxpdGllcyB0aGF0IHlvdSBhcmUgcmVxdWlyZWQgdG8gY29tcGxldGUsIHRoYXQgeW91IGFyZSByZXZpZXdpbmcsIHRoYXQgeW91IGFyZSBvdmVyc2VlaW5nIGFuZCB0aGF0IHlvdSBoYXZlIGFzc2lnbmVkIHRvIGFub3RoZXIgcGVyc29uLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9rZXktcmVzcG9uc2liaWxpdGllcy5wbmcnLFxyXG4gICAgICAgIHRhYk9wdGlvbjogdHJ1ZSxcclxuICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgdmlzaWJpbGl0eTp0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ0NPTVBMSUFOQ0UnLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6ICdPdmVydmlldycsXHJcbiAgICAgICAgICAgIGlkOiAna2V5X3Jlc3BvbnNpYmlsaXRpZXNfb3ZlcnZpZXdfZmxhZycsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICAgICAgdmlzaWJpbGl0eTp0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgdGl0bGU6ICdNeSBSZXNwb25zaWJpbGl0aWVzJyxcclxuICAgICAgICAgICAgaWQ6ICdrZXlfbXlfcmVzcG9uc2liaWxpdGllc19mbGFnJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogJ0nigJltIFJldmlld2luZycsXHJcbiAgICAgICAgICAgIGlkOiAna2V5X2lfYW1fcmV2aWV3aW5nX2ZsYWcnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6dHJ1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiAnSeKAmW0gT3ZlcnNlZWluZycsXHJcbiAgICAgICAgICAgIGlkOiAna2V5X2lfYW1fb3ZlcnNlZWluZ19mbGFnJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6ICdUcmVuZCBBbmFseXNpcycsXHJcbiAgICAgICAgaWQ6ICd0cmVuZF9hbmFseXNpc19mbGFnJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBUcmVuZCBBbmFseXNpcyBpcyBhIGdyYXBoaWNhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGVyZm9ybWFuY2Ugb2YgcmVzcG9uc2liaWxpdGllcyBvdmVyIGEgcGVyaW9kLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy90cmVuZC1hbmFseXNpcy5wbmcnLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW11cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnV29ya3Jvb20gVXBkYXRlcycsXHJcbiAgICAgICAgaWQ6ICd3b3Jrcm9vbV9hbGVydF9mbGFnJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBSZXNwb25zaWJpbGl0eSBXb3Jrcm9vbSBzaG93cyB1cGRhdGVzIGZyb20gdGhlIFJlc3BvbnNpYmlsaXR5IFdvcmtyb29tcy4gQSBSZXNwb25zaWJpbGl0eSBXb3Jrcm9vbSBleGlzdHMgZm9yIGFsbCByZXNwb25zaWJpbGl0aWVzLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy93b3Jrcm9vbS11cGRhdGVzLnBuZycsXHJcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgIHZpc2liaWxpdHk6dHJ1ZSxcclxuICAgICAgICBtb2R1bGU6ICdDT01QTElBTkNFJyxcclxuICAgICAgICBzdWJXaWRnZXRzOiBbXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6ICdSZWNlbnQgQWN0aXZpdGllcycsXHJcbiAgICAgICAgaWQ6ICdyZWNlbnRfYWN0aXZpdHlfZmxhZycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIGlzIGEgY2hyb25vbG9naWNhbCB2aWV3IG9mIHRoZSByZWNlbnQgdXBkYXRlcyBvZiByZXNwb25zaWJpbGl0aWVzLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9yZWNlbnQtYWN0aXZpdGllcy5wbmcnLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW11cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnRXhjZXB0aW9uIFN1bW1hcnknLFxyXG4gICAgICAgIGlkOiAnZXhjZXB0aW9uX3N1bW1hcnlfZmxhZycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdFeGNlcHRpb25zIFN1bW1hcnkgc2hvdyB0aGUgbnVtYmVyIG9mIHJlc3BvbnNpYmlsaXRpZXMgdGhhdCBhcmUgZWl0aGVyIG5vdCBhY2NlcHRlZCwgbm90IGNvbXBsZXRlZCBvciBkZWxldGVkLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9leGNlcHRpb24tc3VtbWFyeS5wbmcnLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnQ09NUExJQU5DRScsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW11cclxuICAgICAgfVxyXG4gICAgXSxcclxuICAgIFJJU0s6IFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnUmlzayBPdmVydmlldycsXHJcbiAgICAgICAgaWQ6ICdyaXNrX292ZXJ2aWV3JyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgd2lkZ2V0IHNob3dzIHRoZSBudW1iZXIgYW5kIHBlcmNlbnRhZ2Ugb2Ygcmlza3Mgd2l0aGluIGVhY2ggcmlzayByZXNwb25zZSBzdHJhdGVneS4nLFxyXG4gICAgICAgIHdpZGdldEltYWdlOiAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy9jb25maWd1cmUtd2lkZ2V0L2Fzc2V0cy9pbWFnZXMvcmlzay1vdmVydmlldy5wbmcnLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnUklTSycsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW11cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnUmlzayBNZXRyaWNzJyxcclxuICAgICAgICBpZDogJ3Jpc2tfbWV0cmljcycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHdpZGdldCBzaG93cyB0aGUgbnVtYmVyIG9mIHJpc2tzIHdpdGhpbiBlYWNoIHJpc2sgYXBwZXRpdGUsIHRoZSBudW1iZXIgb2Ygcmlza3MgdGhhdCBleGNlZWQgdGhlIHJpc2sgYXBwZXRpdGUsIHRoZSBudW1iZXIgb2Ygcmlza3MgdGhhdCBleGNlZWQgdGhlIHJpc2sgdG9sZXJhbmNlLCB0aGUgbnVtYmVyIG9mIHJpc2tzIHdpdGhpbiBlYWNoIHJpc2sgcmF0aW5nLCBhbmQgdGhlIG51bWJlciBvZiByaXNrcyB0aGF0IGRvIG5vdCBoYXZlIGFueSBsaW5rZWQgY29udHJvbHMuJyxcclxuICAgICAgICB3aWRnZXRJbWFnZTogJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvY29uZmlndXJlLXdpZGdldC9hc3NldHMvaW1hZ2VzL2FwcGV0aXRlLXRvbGVyYW5jZS5wbmcnLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnUklTSycsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogJ1Jpc2sgQXBwZXRpdGUgJiBUb2xlcmFuY2UnLFxyXG4gICAgICAgICAgICBpZDogJ3Jpc2tfYXBwZXRpdGVfdG9sZXJhbmNlJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogJ1Jpc2sgUmF0aW5ncycsXHJcbiAgICAgICAgICAgIGlkOiAncmlza19yYXRpbmdzJyxcclxuICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB0aXRsZTogJ1Jpc2tzIFdpdGhvdXQgQ29udHJvbHMnLFxyXG4gICAgICAgICAgICBpZDogJ3Jpc2tzX3dpdGhvdXRfY29udHJvbHMnLFxyXG4gICAgICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2liaWxpdHk6dHJ1ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHRpdGxlOiAnRXhjZWVkcyBSaXNrIFRvbGVyYW5jZScsXHJcbiAgICAgICAgICAgIGlkOiAnZXhjZWVkc19yaXNrX3RvbGVyYW5jZScsXHJcbiAgICAgICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICAgICAgdmlzaWJpbGl0eTp0cnVlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6ICdJbmhlcmVudCBSaXNrIFJhdGluZyBieSBSZXNwb25zaWJpbGl0eSBDZW50ZXJzICcsXHJcbiAgICAgICAgaWQ6ICdpbmhlcmVudF9yaXNrX3JhdGluZ19ieV9yZXNwb25zaWJpbGl0eV9jZW50ZXJzJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgd2lkZ2V0IHNob3dzIHRoZSBudW1iZXIgb2Ygcmlza3Mgd2l0aGluIGVhY2ggaW5oZXJlbnQgcmlzayByYXRpbmcsIGdyb3VwZWQgYWNjb3JkaW5nIHRvIHRoZcKgUmVzcG9uc2liaWxpdHkgQ2VudGVywqBleHBvc2VkIHRvIHRoZSByaXNrLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9pbmhlcmVudC1SQy5wbmcnLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnUklTSycsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW11cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnUmVzaWR1YWwgUmlzayBSYXRpbmcgYnkgUmVzcG9uc2liaWxpdHkgQ2VudGVycyAnLFxyXG4gICAgICAgIGlkOiAncmVzaWR1YWxfcmlza19yYXRpbmdfYnlfcmVzcG9uc2liaWxpdHlfY2VudGVycycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHdpZGdldCBzaG93cyB0aGUgbnVtYmVyIG9mIHJpc2tzIHdpdGhpbiBlYWNoIHJlc2lkdWFsIHJpc2sgcmF0aW5nLCBncm91cGVkIGFjY29yZGluZyB0byB0aGXCoFJlc3BvbnNpYmlsaXR5IENlbnRlcsKgZXhwb3NlZCB0byB0aGUgcmlzay4nLFxyXG4gICAgICAgIHdpZGdldEltYWdlOiAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy9jb25maWd1cmUtd2lkZ2V0L2Fzc2V0cy9pbWFnZXMvcmVzaWR1YWwtUkMucG5nJyxcclxuICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgdmlzaWJpbGl0eTp0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ1JJU0snLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogJ1Jpc2sgQ2F0ZWdvcnkgT3ZlcnZpZXcnLFxyXG4gICAgICAgIGlkOiAncmlza19jYXRlZ29yeV9vdmVydmlldycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHdpZGdldHMgc2hvd3MgdGhlwqBudW1iZXIgb2Ygcmlza3Mgd2l0aGluIGVhY2ggc3RhdHVzLCBncm91cGVkIGFjY29yZGluZyB0byB0aGUgUmlzayBDYXRlZ29yeSB0aGUgcmlzayBpcyBhc3NpZ25lZCB0by4nLFxyXG4gICAgICAgIHdpZGdldEltYWdlOiAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy9jb25maWd1cmUtd2lkZ2V0L2Fzc2V0cy9pbWFnZXMvcmlzay1jYXRlZ29yeS1vdmVydmlldy5wbmcnLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnUklTSycsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW11cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnUmlzayBIZWF0bWFwJyxcclxuICAgICAgICBpZDogJ3Jpc2tfaGVhdG1hcCcsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGXCoFJpc2sgSGVhdG1hcCBkaXNwbGF5cyB0aGUgcmlzayBtYXRyaXggZm9yIGFueSB0d28gcmlzayBmYWN0b3JzLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9yaXNrLWhlYXRtYXAucG5nJyxcclxuICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgdmlzaWJpbGl0eTp0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ1JJU0snLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogJ0luaGVyZW50IFJpc2sgUmF0aW5nIGJ5IENhdGVnb3JpZXMnLFxyXG4gICAgICAgIGlkOiAnaW5oZXJlbnRfcmlza19yYXRpbmdfYnlfY2F0ZWdvcmllcycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHdpZGdldCBzaG93cyB0aGUgbnVtYmVyIG9mIHJpc2tzIHdpdGhpbiBlYWNoIGluaGVyZW50IHJpc2sgcmF0aW5nLCBncm91cGVkIGFjY29yZGluZyB0byB0aGUgUmlzayBDYXRlZ29yecKgdGhhdMKgdGhlIHJpc2sgaXMgYXNzaWduZWQgdG8uJyxcclxuICAgICAgICB3aWRnZXRJbWFnZTogJ2h0dHBzOi8vY2RuLnYtY29tcGx5LmNvbS9saWJyYXJpZXMvY29uZmlndXJlLXdpZGdldC9hc3NldHMvaW1hZ2VzL2luaGVyZW50LWNhdGVnb3JpZXMucG5nJyxcclxuICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgdmlzaWJpbGl0eTp0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ1JJU0snLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtdXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6ICdSZXNpZHVhbCBSaXNrIFJhdGluZyBieSBDYXRlZ29yaWVzJyxcclxuICAgICAgICBpZDogJ3Jlc2lkdWFsX3Jpc2tfcmF0aW5nX2J5X2NhdGVnb3JpZXMnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyB3aWRnZXQgc2hvd3MgdGhlIG51bWJlciBvZiByaXNrcyB3aXRoaW4gZWFjaCByZXNpZHVhbCByaXNrIHJhdGluZywgZ3JvdXBlZCBhY2NvcmRpbmcgdG8gdGhlIFJpc2sgQ2F0ZWdvcnnCoHRoYXTCoHRoZSByaXNrIGlzIGFzc2lnbmVkIHRvLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9yZXNpZHVhbC1jYXRlZ29yaWVzLnBuZycsXHJcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgIHZpc2liaWxpdHk6dHJ1ZSxcclxuICAgICAgICBtb2R1bGU6ICdSSVNLJyxcclxuICAgICAgICBzdWJXaWRnZXRzOiBbXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6ICdJbmhlcmVudCBSaXNrIFJhdGluZyBUcmVuZCBieSBSZXNwb25zaWJpbGl0eSBDZW50ZXJzJyxcclxuICAgICAgICBpZDogJ2luaGVyZW50X3Jpc2tfcmF0aW5nX3RyZW5kX2J5X3Jlc3BvbnNpYmlsaXR5X2NlbnRlcnMnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhpcyB3aWRnZXQgaXMgYSBncmFwaGljYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG51bWJlciBvZiByaXNrcyB3aXRoaW4gZWFjaCBpbmhlcmVudCByaXNrIHJhdGluZywgZ3JvdXBlZCBhY2NvcmRpbmcgdG8gdGhlIFJlc3BvbnNpYmlsaXR5IENlbnRlciBleHBvc2VkIHRvIHRoZSByaXNrLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9pbmhlcmVudC10cmVuZC5wbmcnLFxyXG4gICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICB2aXNpYmlsaXR5OnRydWUsXHJcbiAgICAgICAgbW9kdWxlOiAnUklTSycsXHJcbiAgICAgICAgc3ViV2lkZ2V0czogW11cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiAnUmVzaWR1YWwgUmlzayBSYXRpbmcgVHJlbmQgYnkgUmVzcG9uc2liaWxpdHkgQ2VudGVycycsXHJcbiAgICAgICAgaWQ6ICdyZXNpZHVhbF9yaXNrX3JhdGluZ190cmVuZF9ieV9yZXNwb25zaWJpbGl0eV9jZW50ZXJzJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgd2lkZ2V0IGlzIGEgZ3JhcGhpY2FsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgb2Ygcmlza3Mgd2l0aGluIGVhY2ggcmVzaWR1YWwgcmlzayByYXRpbmcsIGdyb3VwZWQgYWNjb3JkaW5nIHRvIHRoZSBSZXNwb25zaWJpbGl0eSBDZW50ZXIgZXhwb3NlZCB0byB0aGUgcmlzay4nLFxyXG4gICAgICAgIHdpZGdldEltYWdlOiAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy9jb25maWd1cmUtd2lkZ2V0L2Fzc2V0cy9pbWFnZXMvcmVzaWR1YWwtdHJlbmQucG5nJyxcclxuICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgdmlzaWJpbGl0eTp0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ1JJU0snLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogJ1Jpc2sgUmF0aW5nIFRyZW5kIGJ5IENhdGVnb3JpZXMnLFxyXG4gICAgICAgIGlkOiAncmlza19yYXRpbmdfdHJlbmRfYnlfY2F0ZWdvcmllcycsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGlzIHdpZGdldHMgaXMgYSB0cmVuZCBjaGFydCB0aGF0IHNob3dzIHRoZSBpbmhlcmVudCBhbmQgcmVzaWR1YWwgcmlzayByYXRpbmcgdHJlbmQgYWNyb3NzIHRoZSBkaWZmZXJlbnQgUmlzayBDYXRlZ29yaWVzLicsXHJcbiAgICAgICAgd2lkZ2V0SW1hZ2U6ICdodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9yaXNrLXRyZW5kLnBuZycsXHJcbiAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgIHZpc2liaWxpdHk6dHJ1ZSxcclxuICAgICAgICBtb2R1bGU6ICdSSVNLJyxcclxuICAgICAgICBzdWJXaWRnZXRzOiBbXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6ICdUb3AgNSBSaXNrIFJhdGluZ3MnLFxyXG4gICAgICAgIGlkOiAndG9wXzVfcmVzaWR1YWxfcmlza19yYXRpbmdzJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoaXMgd2lkZ2V0cyBzaG93cyB0aHMgdG9wIGZpdmUgcmlza3Mgd2l0aCB0aGUgaGlnaGVzdCByaXNrIHJhdGluZy4nLFxyXG4gICAgICAgIHdpZGdldEltYWdlOiAnaHR0cHM6Ly9jZG4udi1jb21wbHkuY29tL2xpYnJhcmllcy9jb25maWd1cmUtd2lkZ2V0L2Fzc2V0cy9pbWFnZXMvNS1yaXNrLXJhdGluZ3MucG5nJyxcclxuICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgdmlzaWJpbGl0eTp0cnVlLFxyXG4gICAgICAgIG1vZHVsZTogJ1JJU0snLFxyXG4gICAgICAgIHN1YldpZGdldHM6IFtdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcblxyXG4gIHNlbGVjdFdpZGdldChldmVudDogYW55LCBtb2R1bGU6ICdDT01QTElBTkNFJyB8ICdSSVNLJywgd2lkZ2V0SWQ6IHN0cmluZywgc3ViV2lkZ2V0SWQ/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHdpZGdldEluZGV4ID0gdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5pZCA9PSB3aWRnZXRJZCk7XHJcbiAgICBjb25zdCBpc1N1YldpZGdldEFkZGFibGUgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maW5kSW5kZXgoKCB3aWRnZXQ6IGFueSkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCApXHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmxlbmd0aCA+PSAxMCAmJiAhKHN1YldpZGdldElkICYmIGlzU3ViV2lkZ2V0QWRkYWJsZSA+PSAwKSkge1xyXG4gICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnWW91IGNhbm5vdCBhZGQgbW9yZSB0aGFuIDEwIHdpZGdldHMuJywnYWxlcnQnKTtcclxuICAgICAgICB0aGlzLnNob3dXaWRnZXRzID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dXaWRnZXRzID0gdHJ1ZTtcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS52YWx1ZSA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnN1YldpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGlmICghc3ViV2lkZ2V0SWQpIHtcclxuICAgICAgICAgIHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0uc3ViV2lkZ2V0cy5mb3JFYWNoKGVsZSA9PiBlbGUudmFsdWUgPSB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3Qgc3ViV2lkZ2V0SW5kZXggPSB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnN1YldpZGdldHMuZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLmlkID09IHN1YldpZGdldElkKTtcclxuICAgICAgICAgIHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0uc3ViV2lkZ2V0c1tzdWJXaWRnZXRJbmRleF0udmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0uc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKCFzdWJXaWRnZXRJZCkge1xyXG4gICAgICAgICAgdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS52YWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS5zdWJXaWRnZXRzLmZvckVhY2goKGVsZTogYW55KSA9PiBlbGUudmFsdWUgPSBmYWxzZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHN1YldpZGdldEluZGV4ID0gdGhpcy53aWRnZXRzTGlzdFttb2R1bGVdW3dpZGdldEluZGV4XS5zdWJXaWRnZXRzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS5pZCA9PSBzdWJXaWRnZXRJZCk7XHJcbiAgICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnN1YldpZGdldHNbc3ViV2lkZ2V0SW5kZXhdLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgY29uc3QgaXNBbGxXaWRnZXRzUmVtb3ZlZCA9IHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0uc3ViV2lkZ2V0cy5ldmVyeSgoZWxlOiBhbnkpID0+IGVsZS52YWx1ZSA9PSBmYWxzZSk7XHJcbiAgICAgICAgICBpZiAoaXNBbGxXaWRnZXRzUmVtb3ZlZCkge1xyXG4gICAgICAgICAgICB0aGlzLndpZGdldHNMaXN0W21vZHVsZV1bd2lkZ2V0SW5kZXhdLnZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMud2lkZ2V0c0xpc3RbbW9kdWxlXVt3aWRnZXRJbmRleF0udmFsdWUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTZWxlY3RlZFdpZGdldHMoKTtcclxuXHJcbiAgfVxyXG4gIHNldFNlbGVjdGVkV2lkZ2V0cygpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gW11cclxuICAgIHRoaXMud2lkZ2V0c0xpc3QuQ09NUExJQU5DRS5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoZWxlLnZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMucHVzaChlbGUpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLndpZGdldHNMaXN0LlJJU0suZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVsZS52YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzLnB1c2goZWxlKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlV2lkZ2V0KHdpZGdldDogd2lkZ2V0Q29uZmlnKSB7XHJcbiAgICBjb25zdCB3aWRnZXRJbmRleCA9IHRoaXMud2lkZ2V0c0xpc3Rbd2lkZ2V0Lm1vZHVsZV0uZmluZEluZGV4KChlbGU6IGFueSkgPT4gZWxlLmlkID09IHdpZGdldC5pZCk7XHJcbiAgICB0aGlzLndpZGdldHNMaXN0W3dpZGdldC5tb2R1bGVdW3dpZGdldEluZGV4XS52YWx1ZSA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0c0xpc3Rbd2lkZ2V0Lm1vZHVsZV1bd2lkZ2V0SW5kZXhdLnN1YldpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLndpZGdldHNMaXN0W3dpZGdldC5tb2R1bGVdW3dpZGdldEluZGV4XS5zdWJXaWRnZXRzLmZvckVhY2goKGVsZTogYW55KSA9PiBlbGUudmFsdWUgPSBmYWxzZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkV2lkZ2V0cygpXHJcbiAgfVxyXG5cclxuICBvbk5leHRDbGljaygpIHtcclxuICAgIHRoaXMud2lkZ2V0c0RhdGFNb2RpZmllZC5lbWl0KHRoaXMuc2VsZWN0ZWRXaWRnZXRzKTtcclxuICB9XHJcblxyXG4gIGNsb3NlQ29uZmlndXJlRGFzaGJvYXJkKCkge1xyXG4gICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSBbXTtcclxuICAgIHRoaXMuZGlhbG9nLmNsb3NlKCk7XHJcbiAgICB0aGlzLmNsb3NlQ29uZmlndXJlV2lkZ2V0cy5lbWl0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHNldFdpZGdldHNWaXNpYmlsaXR5VG9GYWxzZSgpe1xyXG4gICAgdGhpcy53aWRnZXRzTGlzdC5DT01QTElBTkNFLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgZWxlLnZpc2liaWxpdHkgPSBmYWxzZTtcclxuICAgICAgICBpZiAoZWxlLnN1YldpZGdldHMubGVuZ3RoID4gMCkgeyAgICAgICAgXHJcbiAgICAgICAgICBlbGUuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJFbGVtZW50OiBhbnkpID0+IHsgICAgICAgIFxyXG4gICAgICAgICAgICBzdWJFbGVtZW50LnZpc2liaWxpdHkgPSBmYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbiAgICB0aGlzLndpZGdldHNMaXN0LlJJU0suZm9yRWFjaCgoZWxlOiBhbnkpID0+IHtcclxuICAgICAgICBlbGUudmlzaWJpbGl0eSA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChlbGUuc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBlbGUuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgc3ViRWxlbWVudC52aXNpYmlsaXR5ID0gZmFsc2U7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHNcIiAqbmdJZj1cInNob3dXaWRnZXRzXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaGVhZFwiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLXRpdGxlXCI+Q29uZmlndXJlIFdpZGdldHM8L2gzPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1iYWNrXCIgKGNsaWNrKT1cImNsb3NlQ29uZmlndXJlRGFzaGJvYXJkKClcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uc1wiPiYjeGU5MWQ7PC9pPiBCYWNrXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1ib2R5XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLXRhYlwiPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgW2NsYXNzLmFjdGl2ZV09XCJtb2R1bGUgPT09ICdDT01QTElBTkNFJ1wiICpuZ0lmPVwic2hvd0NvbXBsaWFuY2VcIiAoY2xpY2spPVwibW9kdWxlPSdDT01QTElBTkNFJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24+Q29tcGxpYW5jZTxzcGFuPnt7Y29tcGxpYW5jZVdpZGdldHNEaXNwbGF5Q291bnR9fTwvc3Bhbj48L2J1dHRvbj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwibW9kdWxlID09PSAnUklTSydcIiAqbmdJZj1cInNob3dSaXNrXCI+PGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibW9kdWxlPSdSSVNLJ1wiPlJpc2tzPHNwYW4+e3tyaXNrV2lkZ2V0c0Rpc3BsYXlDb3VudH19PC9zcGFuPjwvYnV0dG9uPjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImljb25zIHZ4LWZzLTNcIj4mI3hlOTBiOzwvaT5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggd2lkZ2V0c1wiIFsobmdNb2RlbCldPVwic2VhcmNoXCI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLWxpc3RcIiAqbmdJZj1cIih3aWRnZXRzTGlzdFttb2R1bGVdIHwgc2VhcmNoOnNlYXJjaCkubGVuZ3RoICE9PSAwXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHdpZGdldCBvZiB3aWRnZXRzTGlzdFttb2R1bGVdIHwgc2VhcmNoOnNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZ3VyZS13aWRnZXRzLWl0ZW1cIiAqbmdJZj1cIndpZGdldD8udmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbY2hlY2tlZF09XCJ3aWRnZXQudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RXaWRnZXQoJGV2ZW50LnRhcmdldC5jaGVja2VkLG1vZHVsZSx3aWRnZXQuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiY2hlY2tcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCA1MiA1MlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9XCJjaGVjay1jaXJjbGVcIiBjeD1cIjI2XCIgY3k9XCIyNlwiIHI9XCIyNVwiIGZpbGw9XCJub25lXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz1cImNoZWNrLWNpcmNsZVwiIGZpbGw9XCJub25lXCIgZD1cIk0xNC4xIDI3LjJsNy4xIDcuMiAxNi43LTE2LjhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaXRlbS1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1pdGVtLXRpdGxlXCIgW2lubmVySFRNTF09XCJ3aWRnZXQ/LnRpdGxlXCI+PC9oND5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaXRlbS1kZXNjcmlwdGlvblwiIFtpbm5lckhUTUxdPVwid2lkZ2V0Py5kZXNjcmlwdGlvblwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhd2lkZ2V0LnZhbHVlXCIgY2xhc3M9XCJjb25maWd1cmUtd2lkZ2V0cy1pdGVtLWJ1dHRvbiBhZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RXaWRnZXQodHJ1ZSxtb2R1bGUsd2lkZ2V0LmlkKSBcIj4rIEFERDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIndpZGdldC52YWx1ZVwiIGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaXRlbS1idXR0b24gcmVtb3ZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0V2lkZ2V0KGZhbHNlLG1vZHVsZSx3aWRnZXQuaWQpIFwiPi0gUmVtb3ZlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlndXJlLXdpZGdldHMtaXRlbS1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2Utd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJ3aWRnZXQ/LndpZGdldEltYWdlXCIgYWx0PVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbG9hdGluZy1vcHRpb24gdngtZC1mbGV4XCIgKm5nSWY9XCJ3aWRnZXQ/LnN1YldpZGdldHM/Lmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViV2lkZ2V0IG9mIHdpZGdldC5zdWJXaWRnZXRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNzLWNoZWNrYm94ICpuZ0lmPVwic3ViV2lkZ2V0LnZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdWYWx1ZUNoYW5nZSk9XCJzZWxlY3RXaWRnZXQoJGV2ZW50LCBtb2R1bGUsd2lkZ2V0LmlkLHN1YldpZGdldC5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdWYWx1ZV09XCJzdWJXaWRnZXQudmFsdWVcIj57e3N1YldpZGdldC50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtY3MtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gTm8gRGF0YSBJbWFnZSAtLT5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGFwcC1uby1kYXRhICpuZ0lmPVwiKHdpZGdldHNMaXN0W21vZHVsZV0gfCBzZWFyY2g6c2VhcmNoKS5sZW5ndGggPT09IDAgXCJcclxuICAgICAgICAgICAgW25vRGF0YUltYWdlXT1cIidodHRwczovL2Nkbi52LWNvbXBseS5jb20vbGlicmFyaWVzL2NvbmZpZ3VyZS13aWRnZXQvYXNzZXRzL2ltYWdlcy9jb25maWd1cmUtd2lkZ2V0LnN2ZydcIlxyXG4gICAgICAgICAgICBbbm9EYXRhVGV4dF09XCInTm8gZGF0YSB0byBkaXNwbGF5J1wiPlxyXG4gICAgICAgIDwvYXBwLW5vLWRhdGE+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZmxvYXRpbmctYmFyIChzdWJtaXRFdmVudCk9XCJvbk5leHRDbGljaygpXCIgKGNhbmNlbEV2ZW50KT1cImNsb3NlQ29uZmlndXJlRGFzaGJvYXJkKClcIlxyXG4gICAgICAgIFtzZWxlY3RlZERhdGFdPVwic2VsZWN0ZWRXaWRnZXRzXCIgKGRlbGV0ZUV2ZW50KT1cInJlbW92ZVdpZGdldCgkZXZlbnQpXCI+PC9mbG9hdGluZy1iYXI+XHJcbjwvZGl2PiJdfQ==