@wavemaker/app-ng-runtime 11.4.1-next.141653 → 11.4.1-next.141654

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 (504) hide show
  1. app-ng-runtime/components/advanced/carousel/bundles/index.umd.js +12 -23
  2. app-ng-runtime/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +2 -4
  3. app-ng-runtime/components/advanced/carousel/carousel.directive.d.ts +2 -4
  4. app-ng-runtime/components/advanced/carousel/esm2020/carousel-template/carousel-template.directive.mjs +6 -11
  5. app-ng-runtime/components/advanced/carousel/esm2020/carousel.directive.mjs +6 -11
  6. app-ng-runtime/components/advanced/carousel/fesm2015/index.mjs +9 -20
  7. app-ng-runtime/components/advanced/carousel/fesm2015/index.mjs.map +1 -1
  8. app-ng-runtime/components/advanced/carousel/fesm2020/index.mjs +9 -16
  9. app-ng-runtime/components/advanced/carousel/fesm2020/index.mjs.map +1 -1
  10. app-ng-runtime/components/advanced/login/bundles/index.umd.js +21 -27
  11. app-ng-runtime/components/advanced/login/esm2020/login.component.mjs +8 -13
  12. app-ng-runtime/components/advanced/login/fesm2015/index.mjs +7 -13
  13. app-ng-runtime/components/advanced/login/fesm2015/index.mjs.map +1 -1
  14. app-ng-runtime/components/advanced/login/fesm2020/index.mjs +7 -11
  15. app-ng-runtime/components/advanced/login/fesm2020/index.mjs.map +1 -1
  16. app-ng-runtime/components/advanced/login/login.component.d.ts +2 -4
  17. app-ng-runtime/components/advanced/marquee/bundles/index.umd.js +8 -14
  18. app-ng-runtime/components/advanced/marquee/esm2020/marquee.directive.mjs +6 -11
  19. app-ng-runtime/components/advanced/marquee/fesm2015/index.mjs +5 -11
  20. app-ng-runtime/components/advanced/marquee/fesm2015/index.mjs.map +1 -1
  21. app-ng-runtime/components/advanced/marquee/fesm2020/index.mjs +5 -9
  22. app-ng-runtime/components/advanced/marquee/fesm2020/index.mjs.map +1 -1
  23. app-ng-runtime/components/advanced/marquee/marquee.directive.d.ts +2 -4
  24. app-ng-runtime/components/base/bundles/index.umd.js +31 -61
  25. app-ng-runtime/components/base/esm2020/widgets/common/base/base-container.component.mjs +4 -6
  26. app-ng-runtime/components/base/esm2020/widgets/common/base/base.component.mjs +5 -6
  27. app-ng-runtime/components/base/esm2020/widgets/common/base/dataset-aware-nav.component.mjs +3 -3
  28. app-ng-runtime/components/base/esm2020/widgets/common/container/container.directive.mjs +7 -11
  29. app-ng-runtime/components/base/esm2020/widgets/common/item-template/item-template.directive.mjs +7 -10
  30. app-ng-runtime/components/base/esm2020/widgets/common/lazy-load/lazy-load.directive.mjs +6 -10
  31. app-ng-runtime/components/base/esm2020/widgets/common/message/message.component.mjs +7 -11
  32. app-ng-runtime/components/base/esm2020/widgets/common/partial/partial.directive.mjs +7 -10
  33. app-ng-runtime/components/base/esm2020/widgets/common/repeat-template/repeat-template.directive.mjs +6 -11
  34. app-ng-runtime/components/base/fesm2015/index.mjs +32 -62
  35. app-ng-runtime/components/base/fesm2015/index.mjs.map +1 -1
  36. app-ng-runtime/components/base/fesm2020/index.mjs +32 -50
  37. app-ng-runtime/components/base/fesm2020/index.mjs.map +1 -1
  38. app-ng-runtime/components/base/widgets/common/base/base-container.component.d.ts +1 -2
  39. app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +2 -3
  40. app-ng-runtime/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +1 -2
  41. app-ng-runtime/components/base/widgets/common/container/container.directive.d.ts +2 -4
  42. app-ng-runtime/components/base/widgets/common/item-template/item-template.directive.d.ts +3 -4
  43. app-ng-runtime/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +2 -4
  44. app-ng-runtime/components/base/widgets/common/message/message.component.d.ts +2 -4
  45. app-ng-runtime/components/base/widgets/common/partial/partial.directive.d.ts +3 -4
  46. app-ng-runtime/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +2 -4
  47. app-ng-runtime/components/basic/default/anchor/anchor.component.d.ts +3 -4
  48. app-ng-runtime/components/basic/default/audio/audio.component.d.ts +2 -4
  49. app-ng-runtime/components/basic/default/bundles/index.umd.js +247 -290
  50. app-ng-runtime/components/basic/default/esm2020/anchor/anchor.component.mjs +7 -10
  51. app-ng-runtime/components/basic/default/esm2020/audio/audio.component.mjs +8 -13
  52. app-ng-runtime/components/basic/default/esm2020/html/html.directive.mjs +7 -11
  53. app-ng-runtime/components/basic/default/esm2020/icon/icon.component.mjs +9 -14
  54. app-ng-runtime/components/basic/default/esm2020/iframe/iframe.component.mjs +9 -13
  55. app-ng-runtime/components/basic/default/esm2020/label/label.directive.mjs +7 -11
  56. app-ng-runtime/components/basic/default/esm2020/picture/picture.directive.mjs +7 -11
  57. app-ng-runtime/components/basic/default/esm2020/spinner/spinner.component.mjs +9 -13
  58. app-ng-runtime/components/basic/default/esm2020/video/video.component.mjs +9 -13
  59. app-ng-runtime/components/basic/default/fesm2015/index.mjs +46 -89
  60. app-ng-runtime/components/basic/default/fesm2015/index.mjs.map +1 -1
  61. app-ng-runtime/components/basic/default/fesm2020/index.mjs +46 -73
  62. app-ng-runtime/components/basic/default/fesm2020/index.mjs.map +1 -1
  63. app-ng-runtime/components/basic/default/html/html.directive.d.ts +2 -4
  64. app-ng-runtime/components/basic/default/icon/icon.component.d.ts +2 -4
  65. app-ng-runtime/components/basic/default/iframe/iframe.component.d.ts +2 -4
  66. app-ng-runtime/components/basic/default/label/label.directive.d.ts +2 -4
  67. app-ng-runtime/components/basic/default/picture/picture.directive.d.ts +2 -4
  68. app-ng-runtime/components/basic/default/spinner/spinner.component.d.ts +2 -4
  69. app-ng-runtime/components/basic/default/video/video.component.d.ts +2 -4
  70. app-ng-runtime/components/basic/progress/bundles/index.umd.js +23 -32
  71. app-ng-runtime/components/basic/progress/esm2020/progress-bar/progress-bar.component.mjs +8 -12
  72. app-ng-runtime/components/basic/progress/esm2020/progress-circle/progress-circle.component.mjs +8 -13
  73. app-ng-runtime/components/basic/progress/fesm2015/index.mjs +12 -21
  74. app-ng-runtime/components/basic/progress/fesm2015/index.mjs.map +1 -1
  75. app-ng-runtime/components/basic/progress/fesm2020/index.mjs +12 -19
  76. app-ng-runtime/components/basic/progress/fesm2020/index.mjs.map +1 -1
  77. app-ng-runtime/components/basic/progress/progress-bar/progress-bar.component.d.ts +2 -4
  78. app-ng-runtime/components/basic/progress/progress-circle/progress-circle.component.d.ts +2 -4
  79. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +14 -20
  80. app-ng-runtime/components/basic/rich-text-editor/esm2020/rich-text-editor.component.mjs +9 -13
  81. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.mjs +7 -13
  82. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.mjs.map +1 -1
  83. app-ng-runtime/components/basic/rich-text-editor/fesm2020/index.mjs +7 -11
  84. app-ng-runtime/components/basic/rich-text-editor/fesm2020/index.mjs.map +1 -1
  85. app-ng-runtime/components/basic/rich-text-editor/rich-text-editor.component.d.ts +2 -4
  86. app-ng-runtime/components/basic/search/bundles/index.umd.js +3 -6
  87. app-ng-runtime/components/basic/search/esm2020/search.component.mjs +6 -9
  88. app-ng-runtime/components/basic/search/fesm2015/index.mjs +4 -7
  89. app-ng-runtime/components/basic/search/fesm2015/index.mjs.map +1 -1
  90. app-ng-runtime/components/basic/search/fesm2020/index.mjs +4 -7
  91. app-ng-runtime/components/basic/search/fesm2020/index.mjs.map +1 -1
  92. app-ng-runtime/components/basic/search/search.component.d.ts +3 -4
  93. app-ng-runtime/components/chart/bundles/index.umd.js +4 -9
  94. app-ng-runtime/components/chart/chart.component.d.ts +3 -4
  95. app-ng-runtime/components/chart/esm2020/chart.component.mjs +7 -10
  96. app-ng-runtime/components/chart/fesm2015/index.mjs +5 -10
  97. app-ng-runtime/components/chart/fesm2015/index.mjs.map +1 -1
  98. app-ng-runtime/components/chart/fesm2020/index.mjs +5 -8
  99. app-ng-runtime/components/chart/fesm2020/index.mjs.map +1 -1
  100. app-ng-runtime/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -4
  101. app-ng-runtime/components/containers/accordion/accordion.directive.d.ts +3 -4
  102. app-ng-runtime/components/containers/accordion/bundles/index.umd.js +56 -66
  103. app-ng-runtime/components/containers/accordion/esm2020/accordion-pane/accordion-pane.component.mjs +10 -14
  104. app-ng-runtime/components/containers/accordion/esm2020/accordion.directive.mjs +7 -10
  105. app-ng-runtime/components/containers/accordion/fesm2015/index.mjs +12 -22
  106. app-ng-runtime/components/containers/accordion/fesm2015/index.mjs.map +1 -1
  107. app-ng-runtime/components/containers/accordion/fesm2020/index.mjs +12 -18
  108. app-ng-runtime/components/containers/accordion/fesm2020/index.mjs.map +1 -1
  109. app-ng-runtime/components/containers/layout-grid/bundles/index.umd.js +12 -25
  110. app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid-column/layout-grid-column.directive.mjs +7 -10
  111. app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid-row/layout-grid-row.directive.mjs +6 -11
  112. app-ng-runtime/components/containers/layout-grid/esm2020/layout-grid.directive.mjs +6 -11
  113. app-ng-runtime/components/containers/layout-grid/fesm2015/index.mjs +13 -26
  114. app-ng-runtime/components/containers/layout-grid/fesm2015/index.mjs.map +1 -1
  115. app-ng-runtime/components/containers/layout-grid/fesm2020/index.mjs +13 -22
  116. app-ng-runtime/components/containers/layout-grid/fesm2020/index.mjs.map +1 -1
  117. app-ng-runtime/components/containers/layout-grid/layout-grid-column/layout-grid-column.directive.d.ts +3 -4
  118. app-ng-runtime/components/containers/layout-grid/layout-grid-row/layout-grid-row.directive.d.ts +2 -4
  119. app-ng-runtime/components/containers/layout-grid/layout-grid.directive.d.ts +2 -4
  120. app-ng-runtime/components/containers/linear-layout/bundles/index.umd.js +12 -23
  121. app-ng-runtime/components/containers/linear-layout/esm2020/linear-layout-item/linear-layout-item.directive.mjs +6 -11
  122. app-ng-runtime/components/containers/linear-layout/esm2020/linear-layout.directive.mjs +6 -11
  123. app-ng-runtime/components/containers/linear-layout/fesm2015/index.mjs +9 -20
  124. app-ng-runtime/components/containers/linear-layout/fesm2015/index.mjs.map +1 -1
  125. app-ng-runtime/components/containers/linear-layout/fesm2020/index.mjs +9 -16
  126. app-ng-runtime/components/containers/linear-layout/fesm2020/index.mjs.map +1 -1
  127. app-ng-runtime/components/containers/linear-layout/linear-layout-item/linear-layout-item.directive.d.ts +2 -4
  128. app-ng-runtime/components/containers/linear-layout/linear-layout.directive.d.ts +2 -4
  129. app-ng-runtime/components/containers/panel/bundles/index.umd.js +65 -71
  130. app-ng-runtime/components/containers/panel/esm2020/panel.component.mjs +12 -16
  131. app-ng-runtime/components/containers/panel/fesm2015/index.mjs +10 -16
  132. app-ng-runtime/components/containers/panel/fesm2015/index.mjs.map +1 -1
  133. app-ng-runtime/components/containers/panel/fesm2020/index.mjs +10 -14
  134. app-ng-runtime/components/containers/panel/fesm2020/index.mjs.map +1 -1
  135. app-ng-runtime/components/containers/panel/panel.component.d.ts +2 -4
  136. app-ng-runtime/components/containers/tabs/bundles/index.umd.js +57 -63
  137. app-ng-runtime/components/containers/tabs/esm2020/tab-pane/tab-pane.component.mjs +8 -12
  138. app-ng-runtime/components/containers/tabs/esm2020/tabs.component.mjs +7 -10
  139. app-ng-runtime/components/containers/tabs/fesm2015/index.mjs +12 -18
  140. app-ng-runtime/components/containers/tabs/fesm2015/index.mjs.map +1 -1
  141. app-ng-runtime/components/containers/tabs/fesm2020/index.mjs +12 -18
  142. app-ng-runtime/components/containers/tabs/fesm2020/index.mjs.map +1 -1
  143. app-ng-runtime/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -4
  144. app-ng-runtime/components/containers/tabs/tabs.component.d.ts +3 -4
  145. app-ng-runtime/components/containers/tile/bundles/index.umd.js +8 -14
  146. app-ng-runtime/components/containers/tile/esm2020/tile.directive.mjs +6 -11
  147. app-ng-runtime/components/containers/tile/fesm2015/index.mjs +5 -11
  148. app-ng-runtime/components/containers/tile/fesm2015/index.mjs.map +1 -1
  149. app-ng-runtime/components/containers/tile/fesm2020/index.mjs +5 -9
  150. app-ng-runtime/components/containers/tile/fesm2020/index.mjs.map +1 -1
  151. app-ng-runtime/components/containers/tile/tile.directive.d.ts +2 -4
  152. app-ng-runtime/components/containers/wizard/bundles/index.umd.js +48 -57
  153. app-ng-runtime/components/containers/wizard/esm2020/wizard-step/wizard-step.directive.mjs +5 -10
  154. app-ng-runtime/components/containers/wizard/esm2020/wizard.component.mjs +10 -14
  155. app-ng-runtime/components/containers/wizard/fesm2015/index.mjs +11 -20
  156. app-ng-runtime/components/containers/wizard/fesm2015/index.mjs.map +1 -1
  157. app-ng-runtime/components/containers/wizard/fesm2020/index.mjs +11 -18
  158. app-ng-runtime/components/containers/wizard/fesm2020/index.mjs.map +1 -1
  159. app-ng-runtime/components/containers/wizard/wizard-step/wizard-step.directive.d.ts +2 -4
  160. app-ng-runtime/components/containers/wizard/wizard.component.d.ts +2 -4
  161. app-ng-runtime/components/data/card/bundles/index.umd.js +83 -106
  162. app-ng-runtime/components/data/card/card-actions/card-actions.directive.d.ts +2 -4
  163. app-ng-runtime/components/data/card/card-content/card-content.component.d.ts +2 -4
  164. app-ng-runtime/components/data/card/card-footer/card-footer.directive.d.ts +2 -4
  165. app-ng-runtime/components/data/card/card.component.d.ts +2 -4
  166. app-ng-runtime/components/data/card/esm2020/card-actions/card-actions.directive.mjs +6 -11
  167. app-ng-runtime/components/data/card/esm2020/card-content/card-content.component.mjs +6 -11
  168. app-ng-runtime/components/data/card/esm2020/card-footer/card-footer.directive.mjs +6 -11
  169. app-ng-runtime/components/data/card/esm2020/card.component.mjs +12 -18
  170. app-ng-runtime/components/data/card/fesm2015/index.mjs +23 -46
  171. app-ng-runtime/components/data/card/fesm2015/index.mjs.map +1 -1
  172. app-ng-runtime/components/data/card/fesm2020/index.mjs +23 -38
  173. app-ng-runtime/components/data/card/fesm2020/index.mjs.map +1 -1
  174. app-ng-runtime/components/data/form/bundles/index.umd.js +128 -137
  175. app-ng-runtime/components/data/form/esm2020/form-action/form-action.directive.mjs +4 -9
  176. app-ng-runtime/components/data/form/esm2020/form-field/form-field.directive.mjs +5 -8
  177. app-ng-runtime/components/data/form/esm2020/form.component.mjs +5 -8
  178. app-ng-runtime/components/data/form/fesm2015/index.mjs +20 -29
  179. app-ng-runtime/components/data/form/fesm2015/index.mjs.map +1 -1
  180. app-ng-runtime/components/data/form/fesm2020/index.mjs +20 -29
  181. app-ng-runtime/components/data/form/fesm2020/index.mjs.map +1 -1
  182. app-ng-runtime/components/data/form/form-action/form-action.directive.d.ts +2 -4
  183. app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +3 -4
  184. app-ng-runtime/components/data/form/form.component.d.ts +3 -4
  185. app-ng-runtime/components/data/list/bundles/index.umd.js +4 -7
  186. app-ng-runtime/components/data/list/esm2020/list.component.mjs +7 -10
  187. app-ng-runtime/components/data/list/fesm2015/index.mjs +4 -7
  188. app-ng-runtime/components/data/list/fesm2015/index.mjs.map +1 -1
  189. app-ng-runtime/components/data/list/fesm2020/index.mjs +4 -7
  190. app-ng-runtime/components/data/list/fesm2020/index.mjs.map +1 -1
  191. app-ng-runtime/components/data/list/list.component.d.ts +3 -4
  192. app-ng-runtime/components/data/live-table/bundles/index.umd.js +3 -6
  193. app-ng-runtime/components/data/live-table/esm2020/live-table.component.mjs +6 -9
  194. app-ng-runtime/components/data/live-table/fesm2015/index.mjs +4 -7
  195. app-ng-runtime/components/data/live-table/fesm2015/index.mjs.map +1 -1
  196. app-ng-runtime/components/data/live-table/fesm2020/index.mjs +4 -7
  197. app-ng-runtime/components/data/live-table/fesm2020/index.mjs.map +1 -1
  198. app-ng-runtime/components/data/live-table/live-table.component.d.ts +3 -4
  199. app-ng-runtime/components/data/pagination/bundles/index.umd.js +30 -34
  200. app-ng-runtime/components/data/pagination/esm2020/pagination.component.mjs +10 -14
  201. app-ng-runtime/components/data/pagination/fesm2015/index.mjs +8 -12
  202. app-ng-runtime/components/data/pagination/fesm2015/index.mjs.map +1 -1
  203. app-ng-runtime/components/data/pagination/fesm2020/index.mjs +8 -12
  204. app-ng-runtime/components/data/pagination/fesm2020/index.mjs.map +1 -1
  205. app-ng-runtime/components/data/pagination/pagination.component.d.ts +2 -4
  206. app-ng-runtime/components/data/table/bundles/index.umd.js +19 -37
  207. app-ng-runtime/components/data/table/esm2020/table-action/table-action.directive.mjs +4 -9
  208. app-ng-runtime/components/data/table/esm2020/table-column/table-column.directive.mjs +5 -8
  209. app-ng-runtime/components/data/table/esm2020/table-column-group/table-column-group.directive.mjs +4 -9
  210. app-ng-runtime/components/data/table/esm2020/table-row/table-row.directive.mjs +4 -9
  211. app-ng-runtime/components/data/table/esm2020/table-row-action/table-row-action.directive.mjs +4 -9
  212. app-ng-runtime/components/data/table/esm2020/table.component.mjs +6 -9
  213. app-ng-runtime/components/data/table/fesm2015/index.mjs +19 -37
  214. app-ng-runtime/components/data/table/fesm2015/index.mjs.map +1 -1
  215. app-ng-runtime/components/data/table/fesm2020/index.mjs +19 -37
  216. app-ng-runtime/components/data/table/fesm2020/index.mjs.map +1 -1
  217. app-ng-runtime/components/data/table/table-action/table-action.directive.d.ts +2 -4
  218. app-ng-runtime/components/data/table/table-column/table-column.directive.d.ts +3 -4
  219. app-ng-runtime/components/data/table/table-column-group/table-column-group.directive.d.ts +2 -4
  220. app-ng-runtime/components/data/table/table-row/table-row.directive.d.ts +2 -4
  221. app-ng-runtime/components/data/table/table-row-action/table-row-action.directive.d.ts +2 -4
  222. app-ng-runtime/components/data/table/table.component.d.ts +3 -4
  223. app-ng-runtime/components/dialogs/alert-dialog/alert-dialog.component.d.ts +2 -4
  224. app-ng-runtime/components/dialogs/alert-dialog/bundles/index.umd.js +40 -46
  225. app-ng-runtime/components/dialogs/alert-dialog/esm2020/alert-dialog.component.mjs +9 -15
  226. app-ng-runtime/components/dialogs/alert-dialog/fesm2015/index.mjs +8 -14
  227. app-ng-runtime/components/dialogs/alert-dialog/fesm2015/index.mjs.map +1 -1
  228. app-ng-runtime/components/dialogs/alert-dialog/fesm2020/index.mjs +8 -14
  229. app-ng-runtime/components/dialogs/alert-dialog/fesm2020/index.mjs.map +1 -1
  230. app-ng-runtime/components/dialogs/confirm-dialog/bundles/index.umd.js +16 -22
  231. app-ng-runtime/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +2 -4
  232. app-ng-runtime/components/dialogs/confirm-dialog/esm2020/confirm-dialog.component.mjs +8 -14
  233. app-ng-runtime/components/dialogs/confirm-dialog/fesm2015/index.mjs +7 -13
  234. app-ng-runtime/components/dialogs/confirm-dialog/fesm2015/index.mjs.map +1 -1
  235. app-ng-runtime/components/dialogs/confirm-dialog/fesm2020/index.mjs +7 -13
  236. app-ng-runtime/components/dialogs/confirm-dialog/fesm2020/index.mjs.map +1 -1
  237. app-ng-runtime/components/dialogs/default/base-dialog.d.ts +1 -2
  238. app-ng-runtime/components/dialogs/default/bundles/index.umd.js +25 -31
  239. app-ng-runtime/components/dialogs/default/dialog-footer/dialog-footer.directive.d.ts +2 -4
  240. app-ng-runtime/components/dialogs/default/esm2020/base-dialog.mjs +7 -8
  241. app-ng-runtime/components/dialogs/default/esm2020/dialog-footer/dialog-footer.directive.mjs +6 -11
  242. app-ng-runtime/components/dialogs/default/fesm2015/index.mjs +11 -17
  243. app-ng-runtime/components/dialogs/default/fesm2015/index.mjs.map +1 -1
  244. app-ng-runtime/components/dialogs/default/fesm2020/index.mjs +11 -15
  245. app-ng-runtime/components/dialogs/default/fesm2020/index.mjs.map +1 -1
  246. app-ng-runtime/components/dialogs/design-dialog/bundles/index.umd.js +17 -23
  247. app-ng-runtime/components/dialogs/design-dialog/dialog.component.d.ts +2 -4
  248. app-ng-runtime/components/dialogs/design-dialog/esm2020/dialog.component.mjs +8 -14
  249. app-ng-runtime/components/dialogs/design-dialog/fesm2015/index.mjs +7 -13
  250. app-ng-runtime/components/dialogs/design-dialog/fesm2015/index.mjs.map +1 -1
  251. app-ng-runtime/components/dialogs/design-dialog/fesm2020/index.mjs +7 -13
  252. app-ng-runtime/components/dialogs/design-dialog/fesm2020/index.mjs.map +1 -1
  253. app-ng-runtime/components/dialogs/iframe-dialog/bundles/index.umd.js +24 -30
  254. app-ng-runtime/components/dialogs/iframe-dialog/esm2020/iframe-dialog.component.mjs +10 -16
  255. app-ng-runtime/components/dialogs/iframe-dialog/fesm2015/index.mjs +9 -15
  256. app-ng-runtime/components/dialogs/iframe-dialog/fesm2015/index.mjs.map +1 -1
  257. app-ng-runtime/components/dialogs/iframe-dialog/fesm2020/index.mjs +9 -15
  258. app-ng-runtime/components/dialogs/iframe-dialog/fesm2020/index.mjs.map +1 -1
  259. app-ng-runtime/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +2 -4
  260. app-ng-runtime/components/dialogs/partial-dialog/bundles/index.umd.js +3 -8
  261. app-ng-runtime/components/dialogs/partial-dialog/esm2020/partial-dialog.component.mjs +5 -10
  262. app-ng-runtime/components/dialogs/partial-dialog/fesm2015/index.mjs +4 -9
  263. app-ng-runtime/components/dialogs/partial-dialog/fesm2015/index.mjs.map +1 -1
  264. app-ng-runtime/components/dialogs/partial-dialog/fesm2020/index.mjs +4 -9
  265. app-ng-runtime/components/dialogs/partial-dialog/fesm2020/index.mjs.map +1 -1
  266. app-ng-runtime/components/dialogs/partial-dialog/partial-dialog.component.d.ts +3 -4
  267. app-ng-runtime/components/input/calendar/bundles/index.umd.js +5 -10
  268. app-ng-runtime/components/input/calendar/calendar.component.d.ts +3 -4
  269. app-ng-runtime/components/input/calendar/esm2020/calendar.component.mjs +8 -11
  270. app-ng-runtime/components/input/calendar/fesm2015/index.mjs +6 -11
  271. app-ng-runtime/components/input/calendar/fesm2015/index.mjs.map +1 -1
  272. app-ng-runtime/components/input/calendar/fesm2020/index.mjs +6 -9
  273. app-ng-runtime/components/input/calendar/fesm2020/index.mjs.map +1 -1
  274. app-ng-runtime/components/input/chips/bundles/index.umd.js +87 -93
  275. app-ng-runtime/components/input/chips/chips.component.d.ts +2 -4
  276. app-ng-runtime/components/input/chips/esm2020/chips.component.mjs +9 -15
  277. app-ng-runtime/components/input/chips/fesm2015/index.mjs +8 -14
  278. app-ng-runtime/components/input/chips/fesm2015/index.mjs.map +1 -1
  279. app-ng-runtime/components/input/chips/fesm2020/index.mjs +8 -14
  280. app-ng-runtime/components/input/chips/fesm2020/index.mjs.map +1 -1
  281. app-ng-runtime/components/input/color-picker/bundles/index.umd.js +22 -28
  282. app-ng-runtime/components/input/color-picker/color-picker.component.d.ts +2 -4
  283. app-ng-runtime/components/input/color-picker/esm2020/color-picker.component.mjs +10 -14
  284. app-ng-runtime/components/input/color-picker/fesm2015/index.mjs +8 -14
  285. app-ng-runtime/components/input/color-picker/fesm2015/index.mjs.map +1 -1
  286. app-ng-runtime/components/input/color-picker/fesm2020/index.mjs +8 -12
  287. app-ng-runtime/components/input/color-picker/fesm2020/index.mjs.map +1 -1
  288. app-ng-runtime/components/input/currency/bundles/index.umd.js +4 -9
  289. app-ng-runtime/components/input/currency/currency.component.d.ts +3 -4
  290. app-ng-runtime/components/input/currency/esm2020/currency.component.mjs +7 -10
  291. app-ng-runtime/components/input/currency/fesm2015/index.mjs +5 -10
  292. app-ng-runtime/components/input/currency/fesm2015/index.mjs.map +1 -1
  293. app-ng-runtime/components/input/currency/fesm2020/index.mjs +5 -8
  294. app-ng-runtime/components/input/currency/fesm2020/index.mjs.map +1 -1
  295. app-ng-runtime/components/input/default/base-form.component.d.ts +1 -2
  296. app-ng-runtime/components/input/default/bundles/index.umd.js +575 -648
  297. app-ng-runtime/components/input/default/button/button.component.d.ts +2 -4
  298. app-ng-runtime/components/input/default/button-group/button-group.directive.d.ts +2 -4
  299. app-ng-runtime/components/input/default/checkbox/checkbox.component.d.ts +2 -4
  300. app-ng-runtime/components/input/default/checkboxset/checkboxset.component.d.ts +2 -4
  301. app-ng-runtime/components/input/default/composite/composite.directive.d.ts +2 -4
  302. app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +2 -3
  303. app-ng-runtime/components/input/default/esm2020/base-form.component.mjs +6 -7
  304. app-ng-runtime/components/input/default/esm2020/button/button.component.mjs +9 -14
  305. app-ng-runtime/components/input/default/esm2020/button-group/button-group.directive.mjs +6 -11
  306. app-ng-runtime/components/input/default/esm2020/checkbox/checkbox.component.mjs +9 -13
  307. app-ng-runtime/components/input/default/esm2020/checkboxset/checkboxset.component.mjs +10 -14
  308. app-ng-runtime/components/input/default/esm2020/composite/composite.directive.mjs +7 -11
  309. app-ng-runtime/components/input/default/esm2020/dataset-aware-form.component.mjs +6 -7
  310. app-ng-runtime/components/input/default/esm2020/number/number.component.mjs +7 -10
  311. app-ng-runtime/components/input/default/esm2020/radioset/radioset.component.mjs +10 -14
  312. app-ng-runtime/components/input/default/esm2020/select/select.component.mjs +11 -15
  313. app-ng-runtime/components/input/default/esm2020/switch/switch.component.mjs +10 -14
  314. app-ng-runtime/components/input/default/esm2020/text/base/base-input.mjs +6 -7
  315. app-ng-runtime/components/input/default/esm2020/text/calendar/input-calendar.component.mjs +8 -13
  316. app-ng-runtime/components/input/default/esm2020/text/color/input-color.component.mjs +8 -13
  317. app-ng-runtime/components/input/default/esm2020/text/email/input-email.component.mjs +8 -13
  318. app-ng-runtime/components/input/default/esm2020/text/locale/number-locale.mjs +3 -3
  319. app-ng-runtime/components/input/default/esm2020/text/number/input-number.component.mjs +9 -14
  320. app-ng-runtime/components/input/default/esm2020/text/text/input-text.component.mjs +9 -14
  321. app-ng-runtime/components/input/default/esm2020/textarea/textarea.component.mjs +9 -14
  322. app-ng-runtime/components/input/default/fesm2015/index.mjs +94 -167
  323. app-ng-runtime/components/input/default/fesm2015/index.mjs.map +1 -1
  324. app-ng-runtime/components/input/default/fesm2020/index.mjs +94 -139
  325. app-ng-runtime/components/input/default/fesm2020/index.mjs.map +1 -1
  326. app-ng-runtime/components/input/default/number/number.component.d.ts +3 -4
  327. app-ng-runtime/components/input/default/radioset/radioset.component.d.ts +2 -4
  328. app-ng-runtime/components/input/default/select/select.component.d.ts +2 -4
  329. app-ng-runtime/components/input/default/switch/switch.component.d.ts +2 -4
  330. app-ng-runtime/components/input/default/text/base/base-input.d.ts +1 -2
  331. app-ng-runtime/components/input/default/text/calendar/input-calendar.component.d.ts +2 -4
  332. app-ng-runtime/components/input/default/text/color/input-color.component.d.ts +2 -4
  333. app-ng-runtime/components/input/default/text/email/input-email.component.d.ts +2 -4
  334. app-ng-runtime/components/input/default/text/locale/number-locale.d.ts +2 -2
  335. app-ng-runtime/components/input/default/text/number/input-number.component.d.ts +2 -4
  336. app-ng-runtime/components/input/default/text/text/input-text.component.d.ts +2 -4
  337. app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +2 -4
  338. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +1 -2
  339. app-ng-runtime/components/input/epoch/bundles/index.umd.js +12 -21
  340. app-ng-runtime/components/input/epoch/date/date.component.d.ts +3 -4
  341. app-ng-runtime/components/input/epoch/date-time/date-time.component.d.ts +3 -4
  342. app-ng-runtime/components/input/epoch/esm2020/base-date-time.component.mjs +5 -6
  343. app-ng-runtime/components/input/epoch/esm2020/date/date.component.mjs +6 -9
  344. app-ng-runtime/components/input/epoch/esm2020/date-time/date-time.component.mjs +6 -9
  345. app-ng-runtime/components/input/epoch/esm2020/time/time.component.mjs +6 -9
  346. app-ng-runtime/components/input/epoch/fesm2015/index.mjs +13 -22
  347. app-ng-runtime/components/input/epoch/fesm2015/index.mjs.map +1 -1
  348. app-ng-runtime/components/input/epoch/fesm2020/index.mjs +13 -22
  349. app-ng-runtime/components/input/epoch/fesm2020/index.mjs.map +1 -1
  350. app-ng-runtime/components/input/epoch/time/time.component.d.ts +3 -4
  351. app-ng-runtime/components/input/file-upload/bundles/index.umd.js +3 -6
  352. app-ng-runtime/components/input/file-upload/esm2020/file-upload.component.mjs +6 -9
  353. app-ng-runtime/components/input/file-upload/fesm2015/index.mjs +4 -7
  354. app-ng-runtime/components/input/file-upload/fesm2015/index.mjs.map +1 -1
  355. app-ng-runtime/components/input/file-upload/fesm2020/index.mjs +4 -7
  356. app-ng-runtime/components/input/file-upload/fesm2020/index.mjs.map +1 -1
  357. app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +3 -4
  358. app-ng-runtime/components/input/rating/bundles/index.umd.js +45 -51
  359. app-ng-runtime/components/input/rating/esm2020/rating.component.mjs +11 -15
  360. app-ng-runtime/components/input/rating/fesm2015/index.mjs +9 -15
  361. app-ng-runtime/components/input/rating/fesm2015/index.mjs.map +1 -1
  362. app-ng-runtime/components/input/rating/fesm2020/index.mjs +9 -13
  363. app-ng-runtime/components/input/rating/fesm2020/index.mjs.map +1 -1
  364. app-ng-runtime/components/input/rating/rating.component.d.ts +2 -4
  365. app-ng-runtime/components/input/slider/bundles/index.umd.js +37 -43
  366. app-ng-runtime/components/input/slider/esm2020/slider.component.mjs +10 -15
  367. app-ng-runtime/components/input/slider/fesm2015/index.mjs +9 -15
  368. app-ng-runtime/components/input/slider/fesm2015/index.mjs.map +1 -1
  369. app-ng-runtime/components/input/slider/fesm2020/index.mjs +9 -13
  370. app-ng-runtime/components/input/slider/fesm2020/index.mjs.map +1 -1
  371. app-ng-runtime/components/input/slider/slider.component.d.ts +2 -4
  372. app-ng-runtime/components/navigation/menu/bundles/index.umd.js +13 -25
  373. app-ng-runtime/components/navigation/menu/esm2020/menu-adapator.component.mjs +4 -6
  374. app-ng-runtime/components/navigation/menu/esm2020/menu.component.mjs +4 -7
  375. app-ng-runtime/components/navigation/menu/esm2020/nav/nav-item/nav-item.directive.mjs +7 -11
  376. app-ng-runtime/components/navigation/menu/esm2020/nav/nav.component.mjs +5 -9
  377. app-ng-runtime/components/navigation/menu/fesm2015/index.mjs +14 -26
  378. app-ng-runtime/components/navigation/menu/fesm2015/index.mjs.map +1 -1
  379. app-ng-runtime/components/navigation/menu/fesm2020/index.mjs +14 -24
  380. app-ng-runtime/components/navigation/menu/fesm2020/index.mjs.map +1 -1
  381. app-ng-runtime/components/navigation/menu/menu-adapator.component.d.ts +1 -2
  382. app-ng-runtime/components/navigation/menu/menu.component.d.ts +2 -3
  383. app-ng-runtime/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +2 -4
  384. app-ng-runtime/components/navigation/menu/nav/nav.component.d.ts +3 -3
  385. app-ng-runtime/components/navigation/navbar/bundles/index.umd.js +28 -34
  386. app-ng-runtime/components/navigation/navbar/esm2020/navbar.component.mjs +9 -14
  387. app-ng-runtime/components/navigation/navbar/fesm2015/index.mjs +8 -14
  388. app-ng-runtime/components/navigation/navbar/fesm2015/index.mjs.map +1 -1
  389. app-ng-runtime/components/navigation/navbar/fesm2020/index.mjs +8 -12
  390. app-ng-runtime/components/navigation/navbar/fesm2020/index.mjs.map +1 -1
  391. app-ng-runtime/components/navigation/navbar/navbar.component.d.ts +2 -4
  392. app-ng-runtime/components/page/default/bundles/index.umd.js +32 -66
  393. app-ng-runtime/components/page/default/content/content.component.d.ts +2 -4
  394. app-ng-runtime/components/page/default/esm2020/content/content.component.mjs +6 -11
  395. app-ng-runtime/components/page/default/esm2020/layout.directive.mjs +7 -11
  396. app-ng-runtime/components/page/default/esm2020/page-content/page-content.component.mjs +7 -10
  397. app-ng-runtime/components/page/default/esm2020/page.directive.mjs +7 -12
  398. app-ng-runtime/components/page/default/esm2020/router-outlet.directive.mjs +7 -11
  399. app-ng-runtime/components/page/default/esm2020/spa-page.directive.mjs +7 -12
  400. app-ng-runtime/components/page/default/fesm2015/index.mjs +26 -60
  401. app-ng-runtime/components/page/default/fesm2015/index.mjs.map +1 -1
  402. app-ng-runtime/components/page/default/fesm2020/index.mjs +26 -48
  403. app-ng-runtime/components/page/default/fesm2020/index.mjs.map +1 -1
  404. app-ng-runtime/components/page/default/layout.directive.d.ts +2 -4
  405. app-ng-runtime/components/page/default/page-content/page-content.component.d.ts +3 -4
  406. app-ng-runtime/components/page/default/page.directive.d.ts +3 -4
  407. app-ng-runtime/components/page/default/router-outlet.directive.d.ts +2 -4
  408. app-ng-runtime/components/page/default/spa-page.directive.d.ts +3 -4
  409. app-ng-runtime/components/page/footer/bundles/index.umd.js +8 -14
  410. app-ng-runtime/components/page/footer/esm2020/footer.directive.mjs +6 -11
  411. app-ng-runtime/components/page/footer/fesm2015/index.mjs +5 -11
  412. app-ng-runtime/components/page/footer/fesm2015/index.mjs.map +1 -1
  413. app-ng-runtime/components/page/footer/fesm2020/index.mjs +5 -9
  414. app-ng-runtime/components/page/footer/fesm2020/index.mjs.map +1 -1
  415. app-ng-runtime/components/page/footer/footer.directive.d.ts +2 -4
  416. app-ng-runtime/components/page/header/bundles/index.umd.js +8 -14
  417. app-ng-runtime/components/page/header/esm2020/header.component.mjs +6 -11
  418. app-ng-runtime/components/page/header/fesm2015/index.mjs +5 -11
  419. app-ng-runtime/components/page/header/fesm2015/index.mjs.map +1 -1
  420. app-ng-runtime/components/page/header/fesm2020/index.mjs +5 -9
  421. app-ng-runtime/components/page/header/fesm2020/index.mjs.map +1 -1
  422. app-ng-runtime/components/page/header/header.component.d.ts +2 -4
  423. app-ng-runtime/components/page/left-panel/bundles/index.umd.js +4 -7
  424. app-ng-runtime/components/page/left-panel/esm2020/left-panel.directive.mjs +6 -9
  425. app-ng-runtime/components/page/left-panel/fesm2015/index.mjs +4 -7
  426. app-ng-runtime/components/page/left-panel/fesm2015/index.mjs.map +1 -1
  427. app-ng-runtime/components/page/left-panel/fesm2020/index.mjs +4 -7
  428. app-ng-runtime/components/page/left-panel/fesm2020/index.mjs.map +1 -1
  429. app-ng-runtime/components/page/left-panel/left-panel.directive.d.ts +3 -4
  430. app-ng-runtime/components/page/right-panel/bundles/index.umd.js +6 -12
  431. app-ng-runtime/components/page/right-panel/esm2020/right-panel.directive.mjs +7 -11
  432. app-ng-runtime/components/page/right-panel/fesm2015/index.mjs +5 -11
  433. app-ng-runtime/components/page/right-panel/fesm2015/index.mjs.map +1 -1
  434. app-ng-runtime/components/page/right-panel/fesm2020/index.mjs +5 -9
  435. app-ng-runtime/components/page/right-panel/fesm2020/index.mjs.map +1 -1
  436. app-ng-runtime/components/page/right-panel/right-panel.directive.d.ts +2 -4
  437. app-ng-runtime/components/page/top-nav/bundles/index.umd.js +8 -14
  438. app-ng-runtime/components/page/top-nav/esm2020/top-nav.directive.mjs +6 -11
  439. app-ng-runtime/components/page/top-nav/fesm2015/index.mjs +5 -11
  440. app-ng-runtime/components/page/top-nav/fesm2015/index.mjs.map +1 -1
  441. app-ng-runtime/components/page/top-nav/fesm2020/index.mjs +5 -9
  442. app-ng-runtime/components/page/top-nav/fesm2020/index.mjs.map +1 -1
  443. app-ng-runtime/components/page/top-nav/top-nav.directive.d.ts +2 -4
  444. app-ng-runtime/components/prefab/bundles/index.umd.js +7 -15
  445. app-ng-runtime/components/prefab/esm2020/prefab-container/prefab-container.directive.mjs +7 -10
  446. app-ng-runtime/components/prefab/esm2020/prefab.directive.mjs +6 -10
  447. app-ng-runtime/components/prefab/fesm2015/index.mjs +8 -16
  448. app-ng-runtime/components/prefab/fesm2015/index.mjs.map +1 -1
  449. app-ng-runtime/components/prefab/fesm2020/index.mjs +8 -14
  450. app-ng-runtime/components/prefab/fesm2020/index.mjs.map +1 -1
  451. app-ng-runtime/components/prefab/prefab-container/prefab-container.directive.d.ts +3 -4
  452. app-ng-runtime/components/prefab/prefab.directive.d.ts +2 -4
  453. app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +32 -37
  454. app-ng-runtime/mobile/components/basic/default/esm2020/network-info-toaster/network-info-toaster.component.mjs +7 -10
  455. app-ng-runtime/mobile/components/basic/default/fesm2015/index.mjs +10 -15
  456. app-ng-runtime/mobile/components/basic/default/fesm2015/index.mjs.map +1 -1
  457. app-ng-runtime/mobile/components/basic/default/fesm2020/index.mjs +10 -13
  458. app-ng-runtime/mobile/components/basic/default/fesm2020/index.mjs.map +1 -1
  459. app-ng-runtime/mobile/components/basic/default/network-info-toaster/network-info-toaster.component.d.ts +3 -4
  460. app-ng-runtime/mobile/components/containers/segmented-control/bundles/index.umd.js +18 -29
  461. app-ng-runtime/mobile/components/containers/segmented-control/esm2020/segment-content/segment-content.component.mjs +8 -13
  462. app-ng-runtime/mobile/components/containers/segmented-control/esm2020/segmented-control.component.mjs +9 -13
  463. app-ng-runtime/mobile/components/containers/segmented-control/fesm2015/index.mjs +12 -23
  464. app-ng-runtime/mobile/components/containers/segmented-control/fesm2015/index.mjs.map +1 -1
  465. app-ng-runtime/mobile/components/containers/segmented-control/fesm2020/index.mjs +12 -19
  466. app-ng-runtime/mobile/components/containers/segmented-control/fesm2020/index.mjs.map +1 -1
  467. app-ng-runtime/mobile/components/containers/segmented-control/segment-content/segment-content.component.d.ts +2 -4
  468. app-ng-runtime/mobile/components/containers/segmented-control/segmented-control.component.d.ts +2 -4
  469. app-ng-runtime/mobile/components/data/media-list/bundles/index.umd.js +30 -36
  470. app-ng-runtime/mobile/components/data/media-list/esm2020/media-list.component.mjs +14 -18
  471. app-ng-runtime/mobile/components/data/media-list/fesm2015/index.mjs +11 -17
  472. app-ng-runtime/mobile/components/data/media-list/fesm2015/index.mjs.map +1 -1
  473. app-ng-runtime/mobile/components/data/media-list/fesm2020/index.mjs +11 -15
  474. app-ng-runtime/mobile/components/data/media-list/fesm2020/index.mjs.map +1 -1
  475. app-ng-runtime/mobile/components/data/media-list/media-list.component.d.ts +2 -4
  476. app-ng-runtime/mobile/components/device/barcode-scanner/barcode-scanner.component.d.ts +2 -4
  477. app-ng-runtime/mobile/components/device/barcode-scanner/bundles/index.umd.js +28 -34
  478. app-ng-runtime/mobile/components/device/barcode-scanner/esm2020/barcode-scanner.component.mjs +10 -14
  479. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2015/index.mjs +8 -14
  480. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2015/index.mjs.map +1 -1
  481. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2020/index.mjs +8 -12
  482. app-ng-runtime/mobile/components/device/barcode-scanner/fesm2020/index.mjs.map +1 -1
  483. app-ng-runtime/mobile/components/device/camera/bundles/index.umd.js +12 -18
  484. app-ng-runtime/mobile/components/device/camera/camera.component.d.ts +2 -4
  485. app-ng-runtime/mobile/components/device/camera/esm2020/camera.component.mjs +9 -13
  486. app-ng-runtime/mobile/components/device/camera/fesm2015/index.mjs +7 -13
  487. app-ng-runtime/mobile/components/device/camera/fesm2015/index.mjs.map +1 -1
  488. app-ng-runtime/mobile/components/device/camera/fesm2020/index.mjs +7 -11
  489. app-ng-runtime/mobile/components/device/camera/fesm2020/index.mjs.map +1 -1
  490. app-ng-runtime/mobile/components/page/mobile-navbar/bundles/index.umd.js +3 -6
  491. app-ng-runtime/mobile/components/page/mobile-navbar/esm2020/mobile-navbar.component.mjs +6 -9
  492. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2015/index.mjs +4 -7
  493. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2015/index.mjs.map +1 -1
  494. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2020/index.mjs +4 -7
  495. app-ng-runtime/mobile/components/page/mobile-navbar/fesm2020/index.mjs.map +1 -1
  496. app-ng-runtime/mobile/components/page/mobile-navbar/mobile-navbar.component.d.ts +3 -4
  497. app-ng-runtime/mobile/components/page/tab-bar/bundles/index.umd.js +32 -36
  498. app-ng-runtime/mobile/components/page/tab-bar/esm2020/tabbar.component.mjs +8 -13
  499. app-ng-runtime/mobile/components/page/tab-bar/fesm2015/index.mjs +7 -11
  500. app-ng-runtime/mobile/components/page/tab-bar/fesm2015/index.mjs.map +1 -1
  501. app-ng-runtime/mobile/components/page/tab-bar/fesm2020/index.mjs +7 -11
  502. app-ng-runtime/mobile/components/page/tab-bar/fesm2020/index.mjs.map +1 -1
  503. app-ng-runtime/mobile/components/page/tab-bar/tabbar.component.d.ts +2 -4
  504. app-ng-runtime/package.json +1 -1
@@ -2,13 +2,12 @@ import { Injector, ViewChild, Directive } from '@angular/core';
2
2
  import { getLocaleDayPeriods, FormStyle, TranslationWidth } from '@angular/common';
3
3
  import { BsDropdownDirective } from 'ngx-bootstrap/dropdown';
4
4
  import { TimepickerComponent, TimepickerConfig } from 'ngx-bootstrap/timepicker';
5
- import { AbstractI18nService, getDateObj, getFormattedDate, getNativeDateObject, hasCordova, isIos, isMobile, isString, setAttr, UserDefinedExecutionContext } from '@wm/core';
5
+ import { AbstractI18nService, getDateObj, getFormattedDate, getNativeDateObject, hasCordova, isIos, isMobile, isString, setAttr } from '@wm/core';
6
6
  import { getContainerTargetClass, ToDatePipe } from '@wm/components/base';
7
7
  import { BaseFormCustomComponent } from '@wm/components/input';
8
8
  import { BsDatepickerConfig } from 'ngx-bootstrap/datepicker';
9
9
  import { DateTimePickerComponent } from './date-time//date-time-picker.component';
10
10
  import * as i0 from "@angular/core";
11
- import * as i1 from "@wm/core";
12
11
  const CURRENT_DATE = 'CURRENT_DATE';
13
12
  const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
14
13
  const DATEPICKER_DROPDOWN_OPTIONS = {
@@ -27,8 +26,8 @@ export function getTimepickerConfig(i18nService) {
27
26
  }
28
27
  export class BaseDateTimeComponent extends BaseFormCustomComponent {
29
28
  get timeZone() { return this.inj.get(AbstractI18nService).getTimezone(this); }
30
- constructor(inj, WIDGET_CONFIG, _viewParent) {
31
- super(inj, WIDGET_CONFIG, _viewParent);
29
+ constructor(inj, WIDGET_CONFIG) {
30
+ super(inj, WIDGET_CONFIG);
32
31
  this.isReadOnly = false;
33
32
  this.clicked = false;
34
33
  this.formatsByLocale = { 'timezone': '' };
@@ -964,7 +963,7 @@ BaseDateTimeComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseD
964
963
  } }, features: [i0.ɵɵInheritDefinitionFeature] });
965
964
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(BaseDateTimeComponent, [{
966
965
  type: Directive
967
- }], function () { return [{ type: i0.Injector }, { type: undefined }, { type: i1.UserDefinedExecutionContext }]; }, { bsDropdown: [{
966
+ }], function () { return [{ type: i0.Injector }, { type: undefined }]; }, { bsDropdown: [{
968
967
  type: ViewChild,
969
968
  args: [BsDropdownDirective]
970
969
  }], bsTimePicker: [{
@@ -974,4 +973,4 @@ BaseDateTimeComponent.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: BaseD
974
973
  type: ViewChild,
975
974
  args: [DateTimePickerComponent]
976
975
  }] }); })();
977
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRlLXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2Vwb2NoL3NyYy9iYXNlLWRhdGUtdGltZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixRQUFRLEVBQWEsU0FBUyxFQUFFLFNBQVMsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUdqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakYsT0FBTyxFQUNILG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsS0FBSyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsT0FBTyxFQUFFLDJCQUEyQixFQUN2QyxNQUFNLFVBQVUsQ0FBQztBQUVsQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUF5QixNQUFNLDBCQUEwQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDOzs7QUFJbEYsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDO0FBQ3BDLE1BQU0sTUFBTSxHQUFHLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVB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cUI7Y0FEMUMsU0FBUzswSEF5RG9DLFVBQVU7a0JBQW5ELFNBQVM7bUJBQUMsbUJBQW1CO1lBQ1ksWUFBWTtrQkFBckQsU0FBUzttQkFBQyxtQkFBbUI7WUFDTSx1QkFBdUI7a0JBQTFELFNBQVM7bUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBJbmplY3RvciwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIERpcmVjdGl2ZSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVmFsaWRhdG9yLCBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGdldExvY2FsZURheVBlcmlvZHMsIEZvcm1TdHlsZSwgVHJhbnNsYXRpb25XaWR0aCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBUaW1lcGlja2VyQ29tcG9uZW50LCBUaW1lcGlja2VyQ29uZmlnIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90aW1lcGlja2VyJztcblxuaW1wb3J0IHtcbiAgICBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgIGdldERhdGVPYmosXG4gICAgZ2V0Rm9ybWF0dGVkRGF0ZSxcbiAgICBnZXROYXRpdmVEYXRlT2JqZWN0LFxuICAgIGhhc0NvcmRvdmEsXG4gICAgaXNJb3MsXG4gICAgaXNNb2JpbGUsXG4gICAgaXNTdHJpbmcsXG4gICAgc2V0QXR0ciwgVXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0XG59IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHsgZ2V0Q29udGFpbmVyVGFyZ2V0Q2xhc3MsIFRvRGF0ZVBpcGUgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IEJhc2VGb3JtQ3VzdG9tQ29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvaW5wdXQnO1xuaW1wb3J0IHsgQnNEYXRlcGlja2VyQ29uZmlnLCBCc0RhdGVwaWNrZXJEaXJlY3RpdmUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL2RhdGUtdGltZS8vZGF0ZS10aW1lLXBpY2tlci5jb21wb25lbnQnO1xuXG5kZWNsYXJlIGNvbnN0IG1vbWVudCwgXywgJDtcblxuY29uc3QgQ1VSUkVOVF9EQVRFID0gJ0NVUlJFTlRfREFURSc7XG5jb25zdCBtb250aHMgPSBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXTtcbmNvbnN0IERBVEVQSUNLRVJfRFJPUERPV05fT1BUSU9OUyA9IHtcbiAgICBCVVRUT046ICdidXR0b24nLFxuICAgIERFRkFVTFQ6ICdkZWZhdWx0J1xufTtcbmNvbnN0IERBVEFFTlRSWU1PREVfRFJPUERPV05fT1BUSU9OUyA9IHtcbiAgICBQSUNLRVI6ICdwaWNrZXInLFxuICAgIERFRkFVTFQ6ICdkZWZhdWx0J1xufTtcblxuLy8gUHJvdmlkaW5nIG1lcmlkaWFucyB0byB0aGUgdGltZXBpY2tlciBiYWVzZCBvbiBzZWxlY3RlZCBsb2NhbGVcbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lcGlja2VyQ29uZmlnKGkxOG5TZXJ2aWNlKTogVGltZXBpY2tlckNvbmZpZyB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IFRpbWVwaWNrZXJDb25maWcoKSwge1xuICAgICAgICBtZXJpZGlhbnM6IGdldExvY2FsZURheVBlcmlvZHMoaTE4blNlcnZpY2UuZ2V0U2VsZWN0ZWRMb2NhbGUoKSwgRm9ybVN0eWxlLkZvcm1hdCwgVHJhbnNsYXRpb25XaWR0aC5BYmJyZXZpYXRlZClcbiAgICB9KTtcbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZURhdGVUaW1lQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZvcm1DdXN0b21Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIFZhbGlkYXRvciB7XG4gICAgcHVibGljIHJlcXVpcmVkOiBib29sZWFuO1xuICAgIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgdGFiaW5kZXg6IGFueTtcbiAgICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuICAgIHB1YmxpYyBhdXRvZm9jdXM6IGJvb2xlYW47XG4gICAgcHVibGljIHJlYWRvbmx5OiBib29sZWFuO1xuICAgIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyBzaG9ydGN1dGtleTogc3RyaW5nO1xuICAgIHB1YmxpYyBfdHJpZ2dlcmVkQnlVc2VyOiBib29sZWFuO1xuXG4gICAgcHVibGljIGV4Y2x1ZGVkYXlzOiBzdHJpbmc7XG4gICAgcHVibGljIGV4Y2x1ZGVkRGF5c1RvRGlzYWJsZTogQXJyYXk8bnVtYmVyPjtcbiAgICBwdWJsaWMgZXhjbHVkZWREYXRlc1RvRGlzYWJsZTogQXJyYXk8RGF0ZT47XG4gICAgcHVibGljIGV4Y2x1ZGVkYXRlcztcbiAgICBwdWJsaWMgb3V0cHV0Zm9ybWF0O1xuICAgIHB1YmxpYyBtaW5kYXRlO1xuICAgIHB1YmxpYyBtYXhkYXRlO1xuICAgIHB1YmxpYyBkYXRhZW50cnltb2RlO1xuICAgIHByb3RlY3RlZCBhY3RpdmVEYXRlO1xuICAgIHByaXZhdGUga2V5RXZlbnRQbHVnaW5JbnN0YW5jZTtcbiAgICBwcml2YXRlIGVsZW1lbnRTY29wZTtcbiAgICBwdWJsaWMgZGF0ZXBhdHRlcm47XG4gICAgcHVibGljIHRpbWVwYXR0ZXJuO1xuICAgIHByb3RlY3RlZCBzaG93c2Vjb25kczogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgaXNtZXJpZGlhbjogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgbWVyaWRpYW5zOiBhbnk7XG4gICAgcHJvdGVjdGVkIGRhdGVQaXBlO1xuICAgIHByb3RlY3RlZCBpMThuU2VydmljZTtcbiAgICBwdWJsaWMgaXNSZWFkT25seSA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBzZWxlY3RlZExvY2FsZTogc3RyaW5nO1xuICAgIHB1YmxpYyBzZWxlY3Rmcm9tb3RoZXJtb250aDogYm9vbGVhbjtcbiAgICBwdWJsaWMgdG9kYXlidXR0b246IGJvb2xlYW47XG4gICAgcHVibGljIGNsZWFyYnV0dG9uOiBib29sZWFuO1xuICAgIHB1YmxpYyByZW1vdmVLZXl1cExpc3RlbmVyO1xuICAgIHB1YmxpYyBsb2FkTmF0aXZlRGF0ZUlucHV0O1xuICAgIHB1YmxpYyBzaG93Y3VzdG9tcGlja2VyO1xuICAgIHB1YmxpYyBuZXh0O1xuICAgIHB1YmxpYyBwcmV2O1xuICAgIHB1YmxpYyBjbGlja2VkID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgZGF0ZU5vdEluUmFuZ2U6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIHRpbWVOb3RJblJhbmdlOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCBpbnZhbGlkRGF0ZVRpbWVGb3JtYXQ6IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIGRhdGVPblNob3dTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgZ2V0IHRpbWVab25lKCkgeyByZXR1cm4gdGhpcy5pbmouZ2V0KEFic3RyYWN0STE4blNlcnZpY2UpLmdldFRpbWV6b25lKHRoaXMpOyB9XG5cbiAgICBmb3JtYXRzQnlMb2NhbGUgPSB7J3RpbWV6b25lJzogJyd9O1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhbiBpbnRlcm5hbCBwcm9wZXJ0eSB1c2VkIHRvIG1hcCB0aGUgY29udGFpbmVyQ2xhc3MsIHNob3dXZWVrTnVtYmVycyBldGMuLCB0byB0aGUgYnNEYXRlcGlja2VyXG4gICAgICovXG4gICAgcHVibGljIF9kYXRlT3B0aW9uczogQnNEYXRlcGlja2VyQ29uZmlnID0gbmV3IEJzRGF0ZXBpY2tlckNvbmZpZygpO1xuICAgIHByb3RlY3RlZCBic0RhdGVQaWNrZXJEaXJlY3RpdmU6IEJzRGF0ZXBpY2tlckRpcmVjdGl2ZTtcblxuICAgIEBWaWV3Q2hpbGQoQnNEcm9wZG93bkRpcmVjdGl2ZSkgcHJvdGVjdGVkIGJzRHJvcGRvd247XG4gICAgQFZpZXdDaGlsZChUaW1lcGlja2VyQ29tcG9uZW50KSBwcm90ZWN0ZWQgYnNUaW1lUGlja2VyO1xuICAgIEBWaWV3Q2hpbGQoRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQpIGRhdGV0aW1lcGlja2VyQ29tcG9uZW50O1xuICAgIHByaXZhdGUgdmFsaWRhdGVUeXBlOiBzdHJpbmc7XG4gICAgY29udGFpbmVyVGFyZ2V0OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBXSURHRVRfQ09ORklHLCBfdmlld1BhcmVudDogVXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0KSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgX3ZpZXdQYXJlbnQpO1xuICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlID0gdGhpcy5pbmouZ2V0KEFic3RyYWN0STE4blNlcnZpY2UpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWxvYWQnKTtcblxuICAgICAgICB0aGlzLmRhdGVQaXBlID0gdGhpcy5pbmouZ2V0KFRvRGF0ZVBpcGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYWxlID0gdGhpcy5pMThuU2VydmljZS5nZXRTZWxlY3RlZExvY2FsZSgpO1xuICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy50b2RheVBvc2l0aW9uID0gJ2xlZnQnO1xuICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5jbGVhclBvc2l0aW9uID0gJ3JpZ2h0JztcbiAgICAgICAgdGhpcy5tZXJpZGlhbnMgPSBnZXRMb2NhbGVEYXlQZXJpb2RzKHRoaXMuc2VsZWN0ZWRMb2NhbGUsIEZvcm1TdHlsZS5Gb3JtYXQsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpO1xuICAgICAgICB0aGlzLmxvYWROYXRpdmVEYXRlSW5wdXQgPSBpc01vYmlsZSgpICYmICF0aGlzLnNob3djdXN0b21waWNrZXI7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGRlZmF1bHQgKGkuZSBvcGVuIGRhdGUgcGlja2VyIG9uIGlucHV0IGNsaWNrKVxuICAgICAqIEBwYXJhbTEgZHJvcGRvd252YWx1ZSwgdXNlciBzZWxlY3RlZCB2YWx1ZSAoYnkgZGVmYXVsdCBkYXRlcGlja2VyIG9wZW5zIG9uIGlucHV0IGNsaWNrKVxuICAgICAqICoqL1xuICAgIHByb3RlY3RlZCBpc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0KGRyb3Bkb3dudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRyb3Bkb3dudmFsdWUgPT09IERBVEVQSUNLRVJfRFJPUERPV05fT1BUSU9OUy5ERUZBVUxUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgZGVmYXVsdCAoaS5lIERhdGEgZW50cnkgY2FuIGJlIGRvbmUgZWl0aGVyIGJ5IHNlbGVjdGluZyBmcm9tIHRoZSBEYXRlL0RhdGVUaW1lL1RpbWUgUGlja2VyIG9yIGJ5IGVudGVyaW5nICBtYW51YWxseSB1c2luZyB0aGUga2V5Ym9hcmQuIClcbiAgICAgKiBAcGFyYW0xIGRyb3Bkb3dudmFsdWUsIHVzZXIgc2VsZWN0ZWQgdmFsdWVcbiAgICAgKiAqKi9cbiAgICBwcm90ZWN0ZWQgaXNEYXRhRW50cnlNb2RlRW5hYmxlZE9uSW5wdXQoZHJvcGRvd252YWx1ZSkge1xuICAgICAgICByZXR1cm4gZHJvcGRvd252YWx1ZSA9PT0gREFUQUVOVFJZTU9ERV9EUk9QRE9XTl9PUFRJT05TLkRFRkFVTFQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2hvdyB2YWxpZGF0aW9uIG1lc3NhZ2UgZGVwZW5kaW5nIG9uIHRoZSBpc05hdGl2ZVBpY2tlciBmbGFnLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2hvd1ZhbGlkYXRpb24oJGV2ZW50LCBkaXNwbGF5VmFsdWUsIGlzTmF0aXZlUGlja2VyLCBtc2cpIHtcbiAgICAgICAgaWYgKGlzTmF0aXZlUGlja2VyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ21pbiBtYXggZGF0ZSB2YWxpZGF0aW9uIGZhaWxlZCAnLCBtc2cpO1xuICAgICAgICAgICAgcmV0dXJuICQoJGV2ZW50LnRhcmdldCkudmFsKGRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldERpc3BsYXlJbnB1dCgpIHtcbiAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5kaXNwbGF5LWlucHV0JykudmFsKCcnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoYzogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgICAgIGlmICh0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkRGF0ZVRpbWVGb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5kYXRlTm90SW5SYW5nZSkgJiYgdGhpcy5kYXRlTm90SW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRlTm90SW5SYW5nZToge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy50aW1lTm90SW5SYW5nZSkgJiYgdGhpcy50aW1lTm90SW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0aW1lTm90SW5SYW5nZToge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvKiBXTVMtMTgyNjkgfCBFeHRlbmRpbmcgdGhlIGV4aXN0aW5nIHZhbGlkYXRpb24gZm9yICdyZXF1aXJlZCcgKi9cbiAgICAgICAgaWYgKHRoaXNbJ3Nob3cnXSAmJiB0aGlzWydyZXF1aXJlZCddKSB7XG4gICAgICAgICAgICByZXR1cm4gISFjLnZhbHVlID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHZhbGlkYXRlIGRhdGUgcGF0dGVybiBhbmQgdGltZSBwYXR0ZXJuXG4gICAgICogSWYgdXNlciBzZWxlY3RzIG9uZSBwYXR0ZXJuIGluIGRlc2lnbiB0aW1lIGFuZCBpZiBoZSB0cmllcyB0byBlbnRlciB0aGUgZGF0ZSBpbiBhbm90aGVyIHBhdHRlcm4gdGhlbiB0aGUgZGV2aWNlIGlzIHRocm93aW5nIGFuIGVycm9yXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGZvcm1hdFZhbGlkYXRpb24obmV3VmFsLCBpbnB1dFZhbCwgaXNOYXRpdmVQaWNrZXI/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLmRhdGVwYXR0ZXJuIHx8IHRoaXMudGltZXBhdHRlcm47XG4gICAgICAgIGNvbnN0IHRpbWVab25lID0gdGhpcy50aW1lWm9uZTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbmV3VmFsLCBwYXR0ZXJuLCB0aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcyk7XG4gICAgICAgIGlucHV0VmFsID0gaW5wdXRWYWwudHJpbSgpO1xuICAgICAgICBpZiAoaW5wdXRWYWwpIHtcbiAgICAgICAgICAgIGlmIChwYXR0ZXJuID09PSAndGltZXN0YW1wJykge1xuICAgICAgICAgICAgICAgIGlmICghXy5pc05hTihpbnB1dFZhbCkgJiYgXy5wYXJzZUludChpbnB1dFZhbCkgIT09IGZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdpbmNvcnJlY3Rmb3JtYXQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmF0aXZlUGlja2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm1hdCB0aGUgZGF0ZSB2YWx1ZSBvbmx5IHdoZW4gaW5wdXRWYWwgaXMgb2J0YWluZWQgZnJvbSAkZXZlbnQudGFyZ2V0LnZhbHVlLCBhcyB0aGUgZm9ybWF0IGRvZXNudCBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWwgPSBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIGlucHV0VmFsLCBwYXR0ZXJuLCB0aW1lWm9uZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbCAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ2luY29ycmVjdGZvcm1hdCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB2YWxpZGF0ZSBtaW4gZGF0ZSwgbWF4IGRhdGUsIGV4Y2x1ZGUgZGF0ZXMgYW5kIGV4Y2x1ZGUgZGF5c1xuICAgICAqIEluIG1vYmlsZSBpZiBpbnZhbGlkIGRhdGVzIGFyZSBlbnRlcmVkLCBkZXZpY2UgaXMgc2hvd2luZyBhbiBhbGVydC5cbiAgICAgKiBJbiB3ZWIgaWYgaW52YWxpZCBkYXRlcyBhcmUgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtaW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCwgJGV2ZW50PzogRXZlbnQsIGRpc3BsYXlWYWx1ZT86IHN0cmluZywgaXNOYXRpdmVQaWNrZXI/OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lVmFsID0gbmV3VmFsO1xuICAgICAgICAgICAgbmV3VmFsID0gbW9tZW50KG5ld1ZhbCkuc3RhcnRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBtaW5EYXRlID0gbW9tZW50KGdldERhdGVPYmoodGhpcy5taW5kYXRlKSkuc3RhcnRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBtYXhEYXRlID0gbW9tZW50KGdldERhdGVPYmoodGhpcy5tYXhkYXRlKSkuc3RhcnRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5taW5kYXRlICYmIG5ld1ZhbCA8IG1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBgJHt0aGlzLmFwcExvY2FsZS5MQUJFTF9NSU5EQVRFX1ZBTElEQVRJT05fTUVTU0FHRX0gJHt0aGlzLm1pbmRhdGV9LmA7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmF0aXZlUGlja2VyICYmIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbWluRGF0ZSwgdGhpcy5kYXRlcGF0dGVybiwgdGhpcy50aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcykgPT09IGRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgkZXZlbnQudGFyZ2V0KS52YWwoZGlzcGxheVZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlTm90SW5SYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnbWluZGF0ZSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1ZhbGlkYXRpb24oJGV2ZW50LCBkaXNwbGF5VmFsdWUsIGlzTmF0aXZlUGlja2VyLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubWF4ZGF0ZSAmJiBuZXdWYWwgPiBtYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7dGhpcy5hcHBMb2NhbGUuTEFCRUxfTUFYREFURV9WQUxJREFUSU9OX01FU1NBR0V9ICR7dGhpcy5tYXhkYXRlfS5gO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hdGl2ZVBpY2tlciAmJiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG1heERhdGUsIHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpID09PSBkaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJGV2ZW50LnRhcmdldCkudmFsKGRpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21heGRhdGUnO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dWYWxpZGF0aW9uKCRldmVudCwgZGlzcGxheVZhbHVlLCBpc05hdGl2ZVBpY2tlciwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkYXRlcykge1xuICAgICAgICAgICAgICAgIGxldCBleGNsdWRlRGF0ZXNBcnJheTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcodGhpcy5leGNsdWRlZGF0ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVEYXRlc0FycmF5ID0gXy5zcGxpdCh0aGlzLmV4Y2x1ZGVkYXRlcywgJywnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlRGF0ZXNBcnJheSA9IHRoaXMuZXhjbHVkZWRhdGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleGNsdWRlRGF0ZXNBcnJheSA9IGV4Y2x1ZGVEYXRlc0FycmF5Lm1hcChkID0+IGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgZCwgdGhpcy5kYXRlcGF0dGVybiwgdGhpcy50aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcykpO1xuICAgICAgICAgICAgICAgIGlmIChleGNsdWRlRGF0ZXNBcnJheS5pbmRleE9mKGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgZGF0ZVRpbWVWYWwsIHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdleGNsdWRlZGF0ZXMnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkYXlzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhjbHVkZURheXNBcnJheSA9IF8uc3BsaXQodGhpcy5leGNsdWRlZGF5cywgJywnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBfLmdldChkYXRlVGltZVZhbCwgJ2dldERheScpID8gZGF0ZVRpbWVWYWwuZ2V0RGF5KCkgOiBkYXRlVGltZVZhbDtcbiAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZURheXNBcnJheS5pbmRleE9mKGRheS50b1N0cmluZygpKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdleGNsdWRlZGF5cyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hdGl2ZVBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy5kYXRlTm90SW5SYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgY3VycmVudCBkYXRlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhpZ2h0bGlnaHRUb2RheSgpIHtcbiAgICAgICAgY29uc3QgdG9EYXkgPSBuZXcgRGF0ZSgpLmdldERhdGUoKS50b1N0cmluZygpO1xuICAgICAgICBfLmZpbHRlcigkKGBzcGFuOmNvbnRhaW5zKCR7dG9EYXl9KWApLm5vdCgnLmlzLW90aGVyLW1vbnRoJyksIChvYmopID0+IHtcbiAgICAgICAgICAgIGlmICgkKG9iaikudGV4dCgpID09PSB0b0RheSkge1xuICAgICAgICAgICAgICAgICQob2JqKS5hZGRDbGFzcygnY3VycmVudC1kYXRlIHRleHQtaW5mbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGZpbmQgdGhlIG5ldyBkYXRlIGlzIGZyb20gYW5vdGhlciB5ZWFyIG9yIG5vdFxuICAgICAqIEBwYXJhbSBuZXdEYXRlIC0gbmV3bHkgc2VsZWN0ZWQgZGF0ZSB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgaXNPdGhlcnllYXIobmV3RGF0ZSkge1xuICAgICAgICByZXR1cm4gKG5ld0RhdGUuZ2V0TW9udGgoKSA9PT0gMCAmJiB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSA9PT0gMTEpIHx8IChuZXdEYXRlLmdldE1vbnRoKCkgPT09IDExICYmIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpID09PSAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCBmb2N1cyBmb3IgYWN0aXZlIGRheVxuICAgICAqIEBwYXJhbSBuZXdEYXRlIC0gbmV3bHkgc2VsZWN0ZWQgZGF0ZSB2YWx1ZVxuICAgICAqIEBwYXJhbSBpc01vdXNlRXZlbnQgLSBib29sZWFuIHZhbHVlIHJlcHJlc2VudHMgdGhlIGV2ZW50IGlzIG1vdXNlIGV2ZW50LyBrZXlib2FyZCBldmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUsIGlzTW91c2VFdmVudD86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXROZXh0RGF0YShuZXdEYXRlKTtcbiAgICAgICAgY29uc3QgYWN0aXZlTW9udGggPSB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGtleWJvYXJkIGV2ZW50XG4gICAgICAgIGlmICghaXNNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXRNb250aCgpIDwgYWN0aXZlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3RoZXJ5ZWFyKG5ld0RhdGUpID8gdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcignbmV4dCcsICdkYXlzJykgOiB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCdwcmV2aW91cycsICdkYXlzJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5ld0RhdGUuZ2V0TW9udGgoKSA+IGFjdGl2ZU1vbnRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc090aGVyeWVhcihuZXdEYXRlKSA/IHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ3ByZXZpb3VzJywgJ2RheXMnKSA6IHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ25leHQnLCAnZGF5cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF5ID0gbmV3RGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIF8uZmlsdGVyKCQoYHNwYW46Y29udGFpbnMoJHtuZXdEYXl9KWApLm5vdCgnLmlzLW90aGVyLW1vbnRoJyksIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoJChvYmopLnRleHQoKSA9PT0gbmV3RGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKG9iaikuaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgJChvYmopLnBhcmVudCgpLmF0dHIoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICQob2JqKS5hdHRyKCdhcmlhLWxhYmVsJywgbW9tZW50KG5ld0RhdGUpLmZvcm1hdCgnZGRkZCwgTU1NTSBEbyBZWVlZJykpO1xuICAgICAgICAgICAgICAgICAgICAkKCdbYnNkYXRlcGlja2VyZGF5ZGVjb3JhdG9yXScpLm5vdCgnLmlzLW90aGVyLW1vbnRoJykuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICAgICAgICAgJChvYmopLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgJChvYmopLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXRNb250aCgpID09PSBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgJiYgbmV3RGF0ZS5nZXRGdWxsWWVhcigpID09PSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2h0bGlnaHRUb2RheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9hZCBvdGhlciBtb250aCBkYXlzIG9yIG90aGVyIG1vbnRoIG9yIG90aGVyIHllYXJcbiAgICAgKiBAcGFyYW0gYnRuQ2xhc3MgLSBjbGFzcyhwcmV2aW91cy9uZXh0KSBvZiB0aGUgYnV0dG9uIHdoaWNoIHdlIGhhdmUgdG8gY2xpY2tcbiAgICAgKiBAcGFyYW0gdGltZVBlcmlvZCAtIFN0cmluZyB2YWx1ZSBkZWNpZGVzIHRvIGxvYWQgb3RoZXIgbW9udGggZGF5cyBvciBvdGhlciBtb250aCBvciBvdGhlciB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBnb1RvT3RoZXJNb250aE9yeWVhcihidG5DbGFzcywgdGltZVBlcmlvZCkge1xuICAgICAgICBjb25zdCAkbm9kZSA9ICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLiR7YnRuQ2xhc3N9YCk7XG4gICAgICAgIGlmICgkbm9kZS5hdHRyKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgJG5vZGUudHJpZ2dlcignY2xpY2snKTtcbiAgICAgICAgaWYgKHRpbWVQZXJpb2QgPT09ICdkYXlzJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkRGF5cygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbWVQZXJpb2QgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbWVQZXJpb2QgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9udGgoZGF0ZSwgaW5jKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IG5ldyBEYXRlKGRhdGUpO1xuXG4gICAgICAgIGxldCBtb250aCA9IGN1cnJlbnRNb250aC5nZXRNb250aCgpO1xuICAgICAgICBjb25zdCB5ZWFyID0gY3VycmVudE1vbnRoLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgbW9udGggKz0gaW5jO1xuXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCk7XG5cbiAgICAgICAgY29uc3QgZnVsbE1vbnRoID0gbmV3RGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnbG9uZycgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGU6IG5ld0RhdGUsXG4gICAgICAgICAgICBmdWxsTW9udGg6IGZ1bGxNb250aFxuICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBtb3VzZSBldmVudHMgdG8gRGF0ZXBpY2tlciBwb3B1cC4gVGhlc2UgZXZlbnRzIGFyZSByZXF1aXJlZCB3aGVuIHdlIG5hdmlnYXRlIGRhdGUgcGlja2VyIHRocm91Z2ggbW91c2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGREYXRlcGlja2VyTW91c2VFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJIZWFkID0gJChgLmJzLWRhdGVwaWNrZXItaGVhZGApO1xuICAgICAgICBkYXRlUGlja2VySGVhZC5maW5kKGAucHJldmlvdXNgKS5jbGljaygoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmV4dCA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAwKTtcbiAgICAgICAgICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAtMik7XG4gICAgICAgICAgICB0aGlzLmNsaWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JEYXRlKC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLnByZXZpb3VzYCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBkYXRlUGlja2VySGVhZC5maW5kKGAubmV4dGApLmNsaWNrKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDIpO1xuICAgICAgICAgICAgdGhpcy5wcmV2ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDApO1xuICAgICAgICAgICAgdGhpcy5jbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcmlnaW5hbCBtb3VzZSBjbGlja1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzRm9yRGF0ZSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLm5leHRgKS5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGVQaWNrZXJIZWFkLmZpbmQoYC5jdXJyZW50YCkuY2xpY2soKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igb3JpZ2luYWwgbW91c2UgY2xpY2tcbiAgICAgICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1c0ZvckN1cnJlbnRNb250aE9yeWVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItYm9keSwgLmJzLWRhdGVwaWNrZXItYWN0aW9uLWJ1dHRvbnMnKS5jbGljaygoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JNb250aE9yRGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkYXRlUGlja2VySGVhZC5maW5kKCcubmV4dCcpLmF0dHIoJ2FyaWEtbGFiZWwnLCBgTmV4dCBNb250aCwgJHt0aGlzLm5leHQuZnVsbE1vbnRofSAke3RoaXMubmV4dC5kYXRlLmdldEZ1bGxZZWFyKCl9YCk7XG4gICAgICAgIGRhdGVQaWNrZXJIZWFkLmZpbmQoJy5wcmV2aW91cycpLmF0dHIoJ2FyaWEtbGFiZWwnLCBgUHJldmlvdXMgTW9udGgsICR7dGhpcy5wcmV2LmZ1bGxNb250aH0gJHt0aGlzLnByZXYuZGF0ZS5nZXRGdWxsWWVhcigpfWApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlcyA9IGRhdGVQaWNrZXJIZWFkLmZpbmQoJy5jdXJyZW50IHNwYW4nKTtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdDaGFuZ2VkIHRvIG1vbnRoICc7XG4gICAgICAgICAgICAvLyBjdXJyZW50Tm9kZXMuZWFjaCgoaSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgIG1zZyA9YCR7bXNnfSAkeyQoY3VycmVudE5vZGVzW2ldKS50ZXh0KCl9YDtcbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgZGF0ZVBpY2tlckhlYWQuZmluZCgnLmN1cnJlbnQnKS5hdHRyKFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpLmF0dHIoXCJhcmlhLWF0b21pY1wiLCBcImZhbHNlXCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2tlZCkge1xuICAgICAgICAgICAgICAgIGlmICgkKGN1cnJlbnROb2Rlc1swXSkudGV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVQaWNrZXJIZWFkLmZpbmQoJy5uZy1zdGFyLWluc2VydGVkJykucHJlcGVuZChgPGRpdiBjbGFzcz1cInNyLW9ubHlcIj4ke21zZ308L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCQoY3VycmVudE5vZGVzWzFdKS50ZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVBpY2tlckhlYWQuZmluZCgnLmN1cnJlbnQnKS5sYXN0KCkucHJlcGVuZChgPGRpdiBjbGFzcz1cInNyLW9ubHlcIj4gYW5kIHllYXIgPC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGZvY3VzIGZvciBtb250aHMvZGF5cyBkZXBlbmRpbmcgb24gdGhlIGxvYWRlZCBkYXRlcGlja2VyIHRhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRGb2N1c0Zvck1vbnRoT3JEYXkoKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU1vbnRoT3JZZWFyID0gJChgLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudGApLmZpcnN0KCkudGV4dCgpO1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChfLnBhcnNlSW50KGFjdGl2ZU1vbnRoT3JZZWFyKSAhPT0gdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShfLnBhcnNlSW50KGFjdGl2ZU1vbnRoT3JZZWFyKSwgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLmRheXMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdNb250aCA9IG1vbnRocy5pbmRleE9mKGFjdGl2ZU1vbnRoT3JZZWFyKTtcbiAgICAgICAgICAgIGlmIChuZXdNb250aCAhPT0gdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIG5ld01vbnRoLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBmb2N1cyBmb3IgbW9udGhzL3llYXJzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yQ3VycmVudE1vbnRoT3J5ZWFyKCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKHRoaXMuYWN0aXZlRGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0ZVBpY2tlckJvZHkuZmluZCgndGFibGUueWVhcnMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRZZWFycygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXModGhpcy5hY3RpdmVEYXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgZm9jdXMgZm9yIG1vbnRocy95ZWFycy9kYXlzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yRGF0ZShjb3VudCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpICsgY291bnQsIDAsIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzIHNwYW4nKS5maXJzdCgpLnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShfLnBhcnNlSW50KHN0YXJ0WWVhciksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpLCB0aGlzLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLmRheXMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpICsgY291bnQsIDEpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3RGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkZCBrZXlib2FyZCBldmVudHMgd2hpbGUgb3BlbmluZyB0aGUgZGF0ZSBwaWNrZXJcbiAgICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgZGF0ZS9kYXRldGltZSB3aWRnZXRcbiAgICAgKiBAcGFyYW0gaXNEYXRlVGltZSAtIGJvb2xlYW4gdmFsdWUgcmVwcmVzZW50cyB0aGUgbG9hZGVkIHdpZGdldCBpcyBkYXRlIG9yIGRhdGV0aW1lXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZERhdGVwaWNrZXJLZXlib2FyZEV2ZW50cyhzY29wZSwgaXNEYXRlVGltZSkge1xuICAgICAgICB0aGlzLmtleUV2ZW50UGx1Z2luSW5zdGFuY2UgPSBzY29wZS5rZXlFdmVudFBsdWdpbi5jb25zdHJ1Y3RvcjtcbiAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUgPSBzY29wZTtcbiAgICAgICAgY29uc3QgZGF0ZUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3Njb3BlLmRhdGVDb250YWluZXJDbHN9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHNldEF0dHIoZGF0ZUNvbnRhaW5lciwgJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgZGF0ZUNvbnRhaW5lci5vbmtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMua2V5RXZlbnRQbHVnaW5JbnN0YW5jZS5nZXRFdmVudEZ1bGxLZXkoZXZlbnQpO1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFNoaWZ0K1RhYiBrZXkgb3IgVGFiIGtleSBvciBlc2NhcGVcbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdlc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUuaGlkZURhdGVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlJbnB1dEVsZW0gPSB0aGlzLmVsZW1lbnRTY29wZS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBkaXNwbGF5SW5wdXRFbGVtLmZvY3VzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgc2V0TmV4dERhdGEobmV4dERhdGUpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aChuZXh0RGF0ZSwgMSk7XG4gICAgICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgobmV4dERhdGUsIC0xKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGFiaW5kZXgsIGtleWJvcmQgYW5kIG1vdXNlIGV2ZW50cyBmb3IgZGF5c1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZERheXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJCgnW2JzZGF0ZXBpY2tlcmRheWRlY29yYXRvcl0nKS5ub3QoJy5pcy1vdGhlci1tb250aCcpLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmNsaWNrZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDEpO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAtMSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yRGF5cygpO1xuICAgICAgICAgICAgdGhpcy5hZGREYXRlcGlja2VyTW91c2VFdmVudHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBrZXlib2FyZCBldmVudHMgZm9yIGRheXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZEtleUJvYXJkRXZlbnRzRm9yRGF5cygpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckJvZHkgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jyk7XG4gICAgICAgIGRhdGVQaWNrZXJCb2R5LmtleWRvd24oKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmtleUV2ZW50UGx1Z2luSW5zdGFuY2UuZ2V0RXZlbnRGdWxsS2V5KGV2ZW50KTtcbiAgICAgICAgICAgIGxldCBuZXdkYXRlO1xuICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2Fycm93ZG93bicpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoKzcsICdkYXlzJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2Fycm93dXAnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC03LCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdhcnJvd2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnYXJyb3dyaWdodCcpIHtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdwYWdldXAnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC0xLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAncGFnZWRvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnY29udHJvbC5hcnJvd3VwJykge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNraW5nIG9uIHRhYmxlIGhlYWRlciBtb250aCBuYW1lIHRvIGxvYWQgbGlzdCBvZiBtb250aHNcbiAgICAgICAgICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50JykuZmlyc3QoKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICAgICAgICBpZiAoJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5oYXNDbGFzcygnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRTY29wZS5oaWRlRGF0ZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMuZWxlbWVudFNjb3BlLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRpc3BsYXktaW5wdXQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGRpc3BsYXlJbnB1dEVsZW0uZm9jdXMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvY3VzQmx1ckRhdGVQaWNrZXJIZWFkQnV0dG9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNCbHVyRGF0ZVBpY2tlckhlYWRCdXR0b25zKCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VySGVhZEJ1dHRvbiA9ICQoJy5icy1kYXRlcGlja2VyLWhlYWQgYnV0dG9uJyk7XG4gICAgICAgIGRhdGVQaWNrZXJIZWFkQnV0dG9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcicsICcjOUFBMEEzJyk7IH0pO1xuICAgICAgICBkYXRlUGlja2VySGVhZEJ1dHRvbi5vbignYmx1cicsIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcicsICcnKTsgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGFiaW5kZXgsIGtleWJvcmQgYW5kIG1vdXNlIGV2ZW50cyBmb3IgbW9udGhzXG4gICAgICovXG4gICAgcHJpdmF0ZSBsb2FkTW9udGhzKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5Qm9hcmRFdmVudHNGb3JNb250aHMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlck1vdXNlRXZlbnRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMga2V5Ym9hcmQgZXZlbnRzIGZvciBtb250aHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZEtleUJvYXJkRXZlbnRzRm9yTW9udGhzKCkge1xuICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jykua2V5ZG93bigoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMua2V5RXZlbnRQbHVnaW5JbnN0YW5jZS5nZXRFdmVudEZ1bGxLZXkoZXZlbnQpO1xuICAgICAgICAgICAgbGV0IG5ld2RhdGU7XG4gICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnYXJyb3dkb3duJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMywgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdhcnJvd3VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMywgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdhcnJvd2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdhcnJvd3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoKzEsICdtb250aCcpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnY29udHJvbC5hcnJvd3VwJykge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNraW5nIG9uIHRhYmxlIGhlYWRlciB5ZWFyIHRvIGxvYWQgbGlzdCBvZiB5ZWFyc1xuICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnQnKS5maXJzdCgpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdjb250cm9sLmFycm93ZG93bicgfHwgYWN0aW9uID09PSAnZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkucGFyZW50KCkuaGFzQ2xhc3MoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGF5cygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSwgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb2N1c0JsdXJEYXRlUGlja2VySGVhZEJ1dHRvbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkZCB0YWJpbmRleCwga2V5Ym9yZCBhbmQgbW91c2UgZXZlbnRzIGZvciB5ZWFyc1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZFllYXJzKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5Qm9hcmRFdmVudHNGb3JZZWFycygpO1xuICAgICAgICAgICAgdGhpcy5hZGREYXRlcGlja2VyTW91c2VFdmVudHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXQgZm9jdXMgZm9yIGFjdGl2ZSBtb250aFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdEYXRlLCBpc01vb3VzZUV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldE5leHREYXRhKG5ld0RhdGUpO1xuICAgICAgICBjb25zdCBuZXdNb250aCA9IG1vbnRoc1tuZXdEYXRlLmdldE1vbnRoKCldO1xuICAgICAgICAvLyBjaGVjayBmb3Iga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgaWYgKCFpc01vb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXRGdWxsWWVhcigpIDwgdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCdwcmV2aW91cycsICdtb250aCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdEYXRlLmdldEZ1bGxZZWFyKCkgPiB0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ25leHQnLCAnbW9udGgnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUubW9udGhzIHNwYW5gKS5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS5tb250aHMgc3Bhbjpjb250YWlucygke25ld01vbnRofSlgKS5hdHRyKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLm1vbnRocyBzcGFuOmNvbnRhaW5zKCR7bmV3TW9udGh9KWApLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXdEYXRlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGtleWJvYXJkIGV2ZW50cyBmb3IgeWVhcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZEtleUJvYXJkRXZlbnRzRm9yWWVhcnMoKSB7XG4gICAgICAgICQoJy5icy1kYXRlcGlja2VyLWJvZHknKS5rZXlkb3duKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5rZXlFdmVudFBsdWdpbkluc3RhbmNlLmdldEV2ZW50RnVsbEtleShldmVudCk7XG4gICAgICAgICAgICBsZXQgbmV3ZGF0ZTtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdhcnJvd2Rvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCs0LCAneWVhcicpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdhcnJvd3VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtNCwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnYXJyb3dsZWZ0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoLTEsICd5ZWFyJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2Fycm93cmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMSwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnY29udHJvbC5hcnJvd2Rvd24nIHx8IGFjdGlvbiA9PT0gJ2VudGVyJykge1xuICAgICAgICAgICAgICAgIGlmICgkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLnBhcmVudCgpLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb2N1c0JsdXJEYXRlUGlja2VySGVhZEJ1dHRvbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCBmb2N1cyBmb3IgYWN0aXZlIHllYXJcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEFjdGl2ZVllYXJGb2N1cyhuZXdEYXRlLCBpc01vdXNlRXZlbnQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IG5ld1llYXIgPSBuZXdEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJZZWFycyA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUueWVhcnMgc3BhbicpO1xuICAgICAgICBjb25zdCBzdGFydFllYXIgPSBkYXRlUGlja2VyWWVhcnMuZmlyc3QoKS50ZXh0KCk7XG4gICAgICAgIGNvbnN0IGVuZFllYXIgPSBkYXRlUGlja2VyWWVhcnMubGFzdCgpLnRleHQoKTtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGtleWJvYXJkIGV2ZW50XG4gICAgICAgIGlmICghaXNNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXRGdWxsWWVhcigpIDwgXy5wYXJzZUludChzdGFydFllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcigncHJldmlvdXMnLCAneWVhcicpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdEYXRlLmdldEZ1bGxZZWFyKCkgPiBfLnBhcnNlSW50KGVuZFllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcignbmV4dCcsICd5ZWFyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLnllYXJzIHNwYW5gKS5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS55ZWFycyBzcGFuOmNvbnRhaW5zKCR7bmV3WWVhcn0pYCkuYXR0cigndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS55ZWFycyBzcGFuOmNvbnRhaW5zKCR7bmV3WWVhcn0pYCkuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgZm9jdXMgZm9yIHRpbWVwaWNrZXIgZmlyc3QgaW5wdXQgZmllbGQoaG91cnMgZmllbGQpIHdoaWxlIG9wZW5pbmcgdGltZSBwaWNrZXJcbiAgICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgdGltZSBwaWNrZXIgd2lkZ2V0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGZvY3VzVGltZVBpY2tlclBvcG92ZXIoc2NvcGUpIHtcbiAgICAgICAgdGhpcy5rZXlFdmVudFBsdWdpbkluc3RhbmNlID0gc2NvcGUua2V5RXZlbnRQbHVnaW4uY29uc3RydWN0b3I7XG4gICAgICAgIHRoaXMuZWxlbWVudFNjb3BlID0gc2NvcGU7XG4gICAgICAgIC8vIHNldFRpbWVvdXQgaXMgdXNlZCBzbyB0aGF0IGJ5IHRoZW4gdGltZSBpbnB1dCBoYXMgdGhlIHVwZGF0ZWQgdmFsdWUuIGZvY3VzIGlzIHNldHRpbmcgYmFjayB0byB0aGUgaW5wdXQgZmllbGRcbiAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoJ3RpbWVwaWNrZXIgLmZvcm0tZ3JvdXAnKS5maXJzdCgpLmZpbmQoJz4gaW5wdXQuZm9ybS1jb250cm9sJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUga2V5Ym9hcmQgZXZlbnRzIHRvIFRpbWVwaWNrZXIgcG9wdXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYmluZFRpbWVQaWNrZXJLZXlib2FyZEV2ZW50cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdGltZXBpY2tlclBvcHVwID0gJCgnYm9keScpLmZpbmQoJz4gYnMtZHJvcGRvd24tY29udGFpbmVyIHRpbWVwaWNrZXInKTtcbiAgICAgICAgICAgICR0aW1lcGlja2VyUG9wdXAuYXR0cigndGFiaW5kZXgnLCAwKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRzT25UaW1lUGlja2VyKCR0aW1lcGlja2VyUG9wdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9jdXNPbklucHV0RWwoKSB7XG4gICAgICAgIGlmICgkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnLmNhcHRpb24tZmxvYXRpbmcnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmFwcC10ZXh0Ym94JykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBkYXRlIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqIEByZXR1cm5zIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZGF0ZSBpcyB2YWxpZCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWREYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB0aW1lIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqL1xuICAgIHByaXZhdGUgdGltZUZvcm1hdFZhbGlkYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGVudGVyZWREYXRlID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJ2lucHV0JykudmFsKCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGdldE5hdGl2ZURhdGVPYmplY3QoZW50ZXJlZERhdGUsIHttZXJpZGlhbnM6IHRoaXMubWVyaWRpYW5zLCBwYXR0ZXJuOiB0aGlzLmRhdGVwYXR0ZXJufSk7XG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRWYWxpZGF0aW9uKG5ld1ZhbCwgZW50ZXJlZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lVmFsdWUodmFsdWUsIGZpZWxkTmFtZSkge1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lID09PSAnbWludXRlcycgPyB0aGlzLmJzVGltZVBpY2tlci51cGRhdGVNaW51dGVzKCcwMCcpIDogdGhpcy5ic1RpbWVQaWNrZXIudXBkYXRlU2Vjb25kcygnMDAnKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZE5hbWUgPT09ICdtaW51dGVzJyA/IHRoaXMuYnNUaW1lUGlja2VyLnVwZGF0ZU1pbnV0ZXMoJzAwJykgOiB0aGlzLmJzVGltZVBpY2tlci51cGRhdGVTZWNvbmRzKCcwMCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBldmVudHMgdG8gZ2l2ZW4gZWxlbWVudFxuICAgICAqIEBwYXJhbSAkZWwgLSBlbGVtZW50IG9uIHdoaWNoIHRoZSBldmVudCBpcyBhZGRlZFxuICAgICAqL1xuICAgIHByaXZhdGUgYWRkRXZlbnRzT25UaW1lUGlja2VyKCRlbDogSlF1ZXJ5KSB7XG4gICAgICAgIGNvbnN0IGlucHV0RmllbGRzID0gJGVsLmZpbmQoJy5icy10aW1lcGlja2VyLWZpZWxkJyk7XG4gICAgICAgIC8vIFdNUy0xOTM4MjogdXBkYXRlIG1pbnV0ZXMgYW5kIHNlY29uZHMgdG8gMCB3aGVuIHdlIGVudGVyIGhvdXIgdmFsdWVcbiAgICAgICAgaW5wdXRGaWVsZHMuZmlyc3QoKS5vbigna2V5dXAnLCBldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaG91clZhbHVlID0gKGV2dC50YXJnZXQgYXMgYW55KS52YWx1ZTtcbiAgICAgICAgICAgIF8uZm9yRWFjaChpbnB1dEZpZWxkcywgKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldnQudGFyZ2V0ICE9PSBmaWVsZCAmJiBmaWVsZC52YWx1ZSA9PT0gJycgJiYgaG91clZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBpbmRleCA9PT0gMSA/ICdtaW51dGVzJyA6ICdzZWNvbmRzJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUaW1lVmFsdWUoaG91clZhbHVlLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW1vdmVLZXl1cExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgaW5wdXRGaWVsZHMuZmlyc3QoKS5vZmYoJ2tleXVwJyk7XG4gICAgICAgIH07XG4gICAgICAgICRlbC5vbigna2V5ZG93bicsIGV2dCA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0ID0gJChldnQudGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0ICRwYXJlbnQgPSAkdGFyZ2V0LnBhcmVudCgpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNjb3BlID0gdGhpcy5lbGVtZW50U2NvcGU7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMua2V5RXZlbnRQbHVnaW5JbnN0YW5jZS5nZXRFdmVudEZ1bGxLZXkoZXZ0KTtcblxuICAgICAgICAgICAgbGV0IHN0b3BQcm9wb2dhdGlvbiwgcHJldmVudERlZmF1bHQ7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdlc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmhpZGVUaW1lcGlja2VyRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCR0YXJnZXQuaGFzQ2xhc3MoJ2JzLXRpbWVwaWNrZXItZmllbGQnKSkge1xuICAgICAgICAgICAgICAgIGlmICgkcGFyZW50LmlzKCc6Zmlyc3QtY2hpbGQnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnc2hpZnQudGFiJyB8fCBhY3Rpb24gPT09ICdlbnRlcicgfHwgYWN0aW9uID09PSAnZXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLnNldElzVGltZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFByb3BvZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHBhcmVudC5pcygnOmxhc3QtY2hpbGQnKSB8fCAoJHBhcmVudC5uZXh0KCkubmV4dCgpLmZpbmQoJ2J1dHRvbi5kaXNhYmxlZCcpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ3RhYicgfHwgYWN0aW9uID09PSAnZXNjYXBlJyB8fCBhY3Rpb24gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wb2dhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnZW50ZXInIHx8IGFjdGlvbiA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wb2dhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0b3BQcm9wb2dhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTY29wZS5taW50aW1lICYmIGVsZW1lbnRTY29wZS5tYXh0aW1lICYmICF0aGlzLmlzVmFsaWREYXRlKGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2Fycm93ZG93bicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSA9IGVsZW1lbnRTY29wZS5tYXhUaW1lO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2Fycm93dXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUgPSBlbGVtZW50U2NvcGUubWluVGltZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMuZGF0ZXBhdHRlcm4gfHwgdGhpcy50aW1lcGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldEZvcm1hdHRlZERhdGUoZWxlbWVudFNjb3BlLmRhdGVQaXBlLCBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUsIHBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpID09PSBlbGVtZW50U2NvcGUuZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmRpc3BsYXktaW5wdXQnKS52YWwoZWxlbWVudFNjb3BlLmRpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2Fycm93ZG93bicgfHwgYWN0aW9uID09PSAnYXJyb3d1cCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lRm9ybWF0VmFsaWRhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRhcmdldC5oYXNDbGFzcygnYnRuLWRlZmF1bHQnKSkge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICd0YWInIHx8IGFjdGlvbiA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLnNldElzVGltZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJGVsLmZpbmQoJ2EnKS5vbignY2xpY2snLCBldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNjb3BlID0gdGhpcy5lbGVtZW50U2NvcGU7XG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0ID0gJChldnQudGFyZ2V0KTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50U2NvcGUubWludGltZSAmJiBlbGVtZW50U2NvcGUubWF4dGltZSAmJiAhdGhpcy5pc1ZhbGlkRGF0ZShlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCR0YXJnZXQuZmluZCgnc3BhbicpLmhhc0NsYXNzKCdicy1jaGV2cm9uLWRvd24nKSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUgPSBlbGVtZW50U2NvcGUubWF4VGltZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCR0YXJnZXQuZmluZCgnc3BhbicpLmhhc0NsYXNzKCdicy1jaGV2cm9uLXVwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlID0gZWxlbWVudFNjb3BlLm1pblRpbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50aW1lRm9ybWF0VmFsaWRhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlRm9ybWF0KHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICdkYXRlcGF0dGVybicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLmRhdGVJbnB1dEZvcm1hdCA9IHRoaXMuZGF0ZXBhdHRlcm47XG4gICAgICAgICAgICB0aGlzLnNob3dzZWNvbmRzID0gXy5pbmNsdWRlcyh0aGlzLmRhdGVwYXR0ZXJuLCAncycpO1xuICAgICAgICAgICAgdGhpcy5pc21lcmlkaWFuID0gXy5pbmNsdWRlcyh0aGlzLmRhdGVwYXR0ZXJuLCAnaCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhdHRlcm4gPT09ICd0aW1lcGF0dGVybicpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd3NlY29uZHMgPSBfLmluY2x1ZGVzKHRoaXMudGltZXBhdHRlcm4sICdzJyk7XG4gICAgICAgICAgICB0aGlzLmlzbWVyaWRpYW4gPSBfLmluY2x1ZGVzKHRoaXMudGltZXBhdHRlcm4sICdoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNb2JpbGVJbnB1dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubW9iaWxlLWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgb25EYXRlVGltZUlucHV0Qmx1cigpIHtcbiAgICAgICAgLy8gcmVtb3ZpbmcgdGhlIG9wYWNpdHkgb24gYmx1ciBvZiB0aGUgbW9iaWxlIHdpZGdldFxuICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5nZXRNb2JpbGVJbnB1dCgpO1xuICAgICAgICBpZiAoZGlzcGxheUlucHV0RWxlbSAmJiAhaGFzQ29yZG92YSgpKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5jbGFzc0xpc3QucmVtb3ZlKCdhZGQtb3BhY2l0eScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5jbGFzc0xpc3QucmVtb3ZlKCdyZW1vdmUtb3BhY2l0eScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EYXRlVGltZUlucHV0Rm9jdXMoc2tpcEZvY3VzOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWROYXRpdmVEYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5nZXRNb2JpbGVJbnB1dCgpO1xuICAgICAgICAvLyB0b2dnbGluZyB0aGUgY2xhc3NlcyB0byBzaG93IGFuZCBoaWRlIHRoZSBuYXRpdmUgd2lkZ2V0IHVzaW5nIG9wYWNpdHlcbiAgICAgICAgaWYgKHNraXBGb2N1cyAmJiAhaGFzQ29yZG92YSgpKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5jbGFzc0xpc3QuYWRkKCdhZGQtb3BhY2l0eScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKCdyZW1vdmUtb3BhY2l0eScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlJbnB1dEVsZW0gJiYgdGhpcy5fdHJpZ2dlcmVkQnlVc2VyKSB7XG4gICAgICAgICAgICBkaXNwbGF5SW5wdXRFbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICBkaXNwbGF5SW5wdXRFbGVtLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDb3Jkb3ZhUGx1Z2luRGF0ZVBpY2tlckFwaSgpIHtcbiAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBfLmdldCh3aW5kb3csICdjb3Jkb3ZhLndhdmVtYWtlci5kYXRlUGlja2VyLnNlbGVjdERhdGUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzaG93RGF0ZVBpY2tlck1vZGFsKCkge1xuICAgICAgICB0aGlzLmRhdGV0aW1lcGlja2VyQ29tcG9uZW50LnNob3coKTtcbiAgICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICBibHVyRGF0ZUlucHV0KGlzUGlja2VyT3Blbikge1xuICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChpc1BpY2tlck9wZW4pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZGlzcGxheUlucHV0RWxlbS5ibHVyKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcblxuICAgICAgICBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ3JlcXVpcmVkJykge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRlcGF0dGVybicpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWF0KGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc2hvd3dlZWtzJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuc2hvd1dlZWtOdW1iZXJzID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbWluZGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLm1pbkRhdGUgPSAobnYgPT09IENVUlJFTlRfREFURSkgPyB0aGlzLm1pbmRhdGUgPSBuZXcgRGF0ZSgpIDogZ2V0RGF0ZU9iaihudik7XG4gICAgICAgICAgICB0aGlzLm1pbkRhdGVNYXhEYXRlVmFsaWRhdGlvbk9uSW5wdXQodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21heGRhdGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5tYXhEYXRlID0gKG52ID09PSBDVVJSRU5UX0RBVEUpID8gdGhpcy5tYXhkYXRlID0gbmV3IERhdGUoKSA6IGdldERhdGVPYmoobnYpO1xuICAgICAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdleGNsdWRlZGF0ZXMnIHx8IGtleSA9PT0gJ2V4Y2x1ZGVkYXlzJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZWRheXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkRGF5c1RvRGlzYWJsZSA9IF8uc3BsaXQodGhpcy5leGNsdWRlZGF5cywgJywnKS5tYXAoKGRheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gK2RheTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkYXRlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZWREYXRlc1RvRGlzYWJsZSA9IHRoaXMuZXhjbHVkZWRhdGVzO1xuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyh0aGlzLmV4Y2x1ZGVkYXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlID0gXy5zcGxpdCh0aGlzLmV4Y2x1ZGVkYXRlcywgJywnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlID0gdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlLm1hcChkID0+IGdldERhdGVPYmooZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzZWxlY3Rmcm9tb3RoZXJtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNlbGVjdEZyb21PdGhlck1vbnRoID0gbnY7XG5cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICd0b2RheWJ1dHRvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dUb2RheUJ1dHRvbiA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsZWFyYnV0dG9uJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuc2hvd0NsZWFyQnV0dG9uID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndG9kYXlidXR0b25sYWJlbCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnRvZGF5QnV0dG9uTGFiZWwgPSB0aGlzLmkxOG5TZXJ2aWNlLmdldExvY2FsaXplZE1lc3NhZ2UobnYpIHx8IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsZWFyYnV0dG9ubGFiZWwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5jbGVhckJ1dHRvbkxhYmVsID0gdGhpcy5pMThuU2VydmljZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKG52KSB8fCBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzaG93Y3VzdG9tcGlja2VyJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0ID0gaXNNb2JpbGUoKSAmJiAhdGhpcy5zaG93Y3VzdG9tcGlja2VyO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2FkYXB0aXZlcG9zaXRpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5hZGFwdGl2ZVBvc2l0aW9uID0gbnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJUYXJnZXQgPSBnZXRDb250YWluZXJUYXJnZXRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLmlzUmVhZE9ubHkgPSB0aGlzLmRhdGFlbnRyeW1vZGUgIT0gJ3VuZGVmaW5lZCcgJiYgIXRoaXMuaXNEYXRhRW50cnlNb2RlRW5hYmxlZE9uSW5wdXQodGhpcy5kYXRhZW50cnltb2RlKTtcblxuICAgICAgICAvLyB0aGlzIG1vYmlsZWlucHV0IHdpZHRoIHZhcmllcyBpbiBpb3MgaGVuY2Ugc2V0dGluZyB3aWR0aCBoZXJlLlxuICAgICAgICBjb25zdCBtb2JpbGVJbnB1dCA9IHRoaXMuZ2V0TW9iaWxlSW5wdXQoKTtcbiAgICAgICAgaWYgKG1vYmlsZUlucHV0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBtb2JpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgICAgICAgICAgICBtb2JpbGVJbnB1dC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5kYXRlT25TaG93U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVPblNob3dTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXRhY2goKSB7XG4gICAgICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJDb21wb25lbnQ/LmhpZGVNb2RhbCgpO1xuICAgIH1cblxuICAgIHNldFRpbWV6b25lKGxvY2FsZSkge1xuICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlLnNldFRpbWV6b25lKGxvY2FsZSwgdGhpcyk7XG4gICAgfVxufVxuIl19
976
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kYXRlLXRpbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy93aWRnZXRzL2lucHV0L2Vwb2NoL3NyYy9iYXNlLWRhdGUtdGltZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixRQUFRLEVBQWEsU0FBUyxFQUFFLFNBQVMsRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUdqRyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakYsT0FBTyxFQUNILG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsS0FBSyxFQUNMLFFBQVEsRUFDUixRQUFRLEVBQ1IsT0FBTyxFQUNWLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sMEJBQTBCLENBQUM7QUFDckYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUM7O0FBSWxGLE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxV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QUFTO21CQUFDLG1CQUFtQjtZQUNZLFlBQVk7a0JBQXJELFNBQVM7bUJBQUMsbUJBQW1CO1lBQ00sdUJBQXVCO2tCQUExRCxTQUFTO21CQUFDLHVCQUF1QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgVmlld0NoaWxkLCBEaXJlY3RpdmUsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFZhbGlkYXRvciwgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBnZXRMb2NhbGVEYXlQZXJpb2RzLCBGb3JtU3R5bGUsIFRyYW5zbGF0aW9uV2lkdGggfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQnNEcm9wZG93bkRpcmVjdGl2ZSB9IGZyb20gJ25neC1ib290c3RyYXAvZHJvcGRvd24nO1xuaW1wb3J0IHsgVGltZXBpY2tlckNvbXBvbmVudCwgVGltZXBpY2tlckNvbmZpZyB9IGZyb20gJ25neC1ib290c3RyYXAvdGltZXBpY2tlcic7XG5cbmltcG9ydCB7XG4gICAgQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICBnZXREYXRlT2JqLFxuICAgIGdldEZvcm1hdHRlZERhdGUsXG4gICAgZ2V0TmF0aXZlRGF0ZU9iamVjdCxcbiAgICBoYXNDb3Jkb3ZhLFxuICAgIGlzSW9zLFxuICAgIGlzTW9iaWxlLFxuICAgIGlzU3RyaW5nLFxuICAgIHNldEF0dHIsIFVzZXJEZWZpbmVkRXhlY3V0aW9uQ29udGV4dFxufSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7IGdldENvbnRhaW5lclRhcmdldENsYXNzLCBUb0RhdGVQaXBlIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyBCYXNlRm9ybUN1c3RvbUNvbXBvbmVudCB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2lucHV0JztcbmltcG9ydCB7IEJzRGF0ZXBpY2tlckNvbmZpZywgQnNEYXRlcGlja2VyRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kYXRlcGlja2VyJztcbmltcG9ydCB7IERhdGVUaW1lUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXRpbWUvL2RhdGUtdGltZS1waWNrZXIuY29tcG9uZW50JztcblxuZGVjbGFyZSBjb25zdCBtb21lbnQsIF8sICQ7XG5cbmNvbnN0IENVUlJFTlRfREFURSA9ICdDVVJSRU5UX0RBVEUnO1xuY29uc3QgbW9udGhzID0gWydKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ107XG5jb25zdCBEQVRFUElDS0VSX0RST1BET1dOX09QVElPTlMgPSB7XG4gICAgQlVUVE9OOiAnYnV0dG9uJyxcbiAgICBERUZBVUxUOiAnZGVmYXVsdCdcbn07XG5jb25zdCBEQVRBRU5UUllNT0RFX0RST1BET1dOX09QVElPTlMgPSB7XG4gICAgUElDS0VSOiAncGlja2VyJyxcbiAgICBERUZBVUxUOiAnZGVmYXVsdCdcbn07XG5cbi8vIFByb3ZpZGluZyBtZXJpZGlhbnMgdG8gdGhlIHRpbWVwaWNrZXIgYmFlc2Qgb24gc2VsZWN0ZWQgbG9jYWxlXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZXBpY2tlckNvbmZpZyhpMThuU2VydmljZSk6IFRpbWVwaWNrZXJDb25maWcge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKG5ldyBUaW1lcGlja2VyQ29uZmlnKCksIHtcbiAgICAgICAgbWVyaWRpYW5zOiBnZXRMb2NhbGVEYXlQZXJpb2RzKGkxOG5TZXJ2aWNlLmdldFNlbGVjdGVkTG9jYWxlKCksIEZvcm1TdHlsZS5Gb3JtYXQsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpXG4gICAgfSk7XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VEYXRlVGltZUNvbXBvbmVudCBleHRlbmRzIEJhc2VGb3JtQ3VzdG9tQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBWYWxpZGF0b3Ige1xuICAgIHB1YmxpYyByZXF1aXJlZDogYm9vbGVhbjtcbiAgICBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW47XG4gICAgcHVibGljIHRhYmluZGV4OiBhbnk7XG4gICAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgICBwdWJsaWMgYXV0b2ZvY3VzOiBib29sZWFuO1xuICAgIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcbiAgICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICBwdWJsaWMgc2hvcnRjdXRrZXk6IHN0cmluZztcbiAgICBwdWJsaWMgX3RyaWdnZXJlZEJ5VXNlcjogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBleGNsdWRlZGF5czogc3RyaW5nO1xuICAgIHB1YmxpYyBleGNsdWRlZERheXNUb0Rpc2FibGU6IEFycmF5PG51bWJlcj47XG4gICAgcHVibGljIGV4Y2x1ZGVkRGF0ZXNUb0Rpc2FibGU6IEFycmF5PERhdGU+O1xuICAgIHB1YmxpYyBleGNsdWRlZGF0ZXM7XG4gICAgcHVibGljIG91dHB1dGZvcm1hdDtcbiAgICBwdWJsaWMgbWluZGF0ZTtcbiAgICBwdWJsaWMgbWF4ZGF0ZTtcbiAgICBwdWJsaWMgZGF0YWVudHJ5bW9kZTtcbiAgICBwcm90ZWN0ZWQgYWN0aXZlRGF0ZTtcbiAgICBwcml2YXRlIGtleUV2ZW50UGx1Z2luSW5zdGFuY2U7XG4gICAgcHJpdmF0ZSBlbGVtZW50U2NvcGU7XG4gICAgcHVibGljIGRhdGVwYXR0ZXJuO1xuICAgIHB1YmxpYyB0aW1lcGF0dGVybjtcbiAgICBwcm90ZWN0ZWQgc2hvd3NlY29uZHM6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIGlzbWVyaWRpYW46IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIG1lcmlkaWFuczogYW55O1xuICAgIHByb3RlY3RlZCBkYXRlUGlwZTtcbiAgICBwcm90ZWN0ZWQgaTE4blNlcnZpY2U7XG4gICAgcHVibGljIGlzUmVhZE9ubHkgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgc2VsZWN0ZWRMb2NhbGU6IHN0cmluZztcbiAgICBwdWJsaWMgc2VsZWN0ZnJvbW90aGVybW9udGg6IGJvb2xlYW47XG4gICAgcHVibGljIHRvZGF5YnV0dG9uOiBib29sZWFuO1xuICAgIHB1YmxpYyBjbGVhcmJ1dHRvbjogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVtb3ZlS2V5dXBMaXN0ZW5lcjtcbiAgICBwdWJsaWMgbG9hZE5hdGl2ZURhdGVJbnB1dDtcbiAgICBwdWJsaWMgc2hvd2N1c3RvbXBpY2tlcjtcbiAgICBwdWJsaWMgbmV4dDtcbiAgICBwdWJsaWMgcHJldjtcbiAgICBwdWJsaWMgY2xpY2tlZCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIGRhdGVOb3RJblJhbmdlOiBib29sZWFuO1xuICAgIHByb3RlY3RlZCB0aW1lTm90SW5SYW5nZTogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgaW52YWxpZERhdGVUaW1lRm9ybWF0OiBib29sZWFuO1xuXG4gICAgcHJpdmF0ZSBkYXRlT25TaG93U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljIGdldCB0aW1lWm9uZSgpIHsgcmV0dXJuIHRoaXMuaW5qLmdldChBYnN0cmFjdEkxOG5TZXJ2aWNlKS5nZXRUaW1lem9uZSh0aGlzKTsgfVxuXG4gICAgZm9ybWF0c0J5TG9jYWxlID0geyd0aW1lem9uZSc6ICcnfTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgcHJvcGVydHkgdXNlZCB0byBtYXAgdGhlIGNvbnRhaW5lckNsYXNzLCBzaG93V2Vla051bWJlcnMgZXRjLiwgdG8gdGhlIGJzRGF0ZXBpY2tlclxuICAgICAqL1xuICAgIHB1YmxpYyBfZGF0ZU9wdGlvbnM6IEJzRGF0ZXBpY2tlckNvbmZpZyA9IG5ldyBCc0RhdGVwaWNrZXJDb25maWcoKTtcbiAgICBwcm90ZWN0ZWQgYnNEYXRlUGlja2VyRGlyZWN0aXZlOiBCc0RhdGVwaWNrZXJEaXJlY3RpdmU7XG5cbiAgICBAVmlld0NoaWxkKEJzRHJvcGRvd25EaXJlY3RpdmUpIHByb3RlY3RlZCBic0Ryb3Bkb3duO1xuICAgIEBWaWV3Q2hpbGQoVGltZXBpY2tlckNvbXBvbmVudCkgcHJvdGVjdGVkIGJzVGltZVBpY2tlcjtcbiAgICBAVmlld0NoaWxkKERhdGVUaW1lUGlja2VyQ29tcG9uZW50KSBkYXRldGltZXBpY2tlckNvbXBvbmVudDtcbiAgICBwcml2YXRlIHZhbGlkYXRlVHlwZTogc3RyaW5nO1xuICAgIGNvbnRhaW5lclRhcmdldDogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgV0lER0VUX0NPTkZJRykge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcpO1xuICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlID0gdGhpcy5pbmouZ2V0KEFic3RyYWN0STE4blNlcnZpY2UpO1xuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWxvYWQnKTtcblxuICAgICAgICB0aGlzLmRhdGVQaXBlID0gdGhpcy5pbmouZ2V0KFRvRGF0ZVBpcGUpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYWxlID0gdGhpcy5pMThuU2VydmljZS5nZXRTZWxlY3RlZExvY2FsZSgpO1xuICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy50b2RheVBvc2l0aW9uID0gJ2xlZnQnO1xuICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5jbGVhclBvc2l0aW9uID0gJ3JpZ2h0JztcbiAgICAgICAgdGhpcy5tZXJpZGlhbnMgPSBnZXRMb2NhbGVEYXlQZXJpb2RzKHRoaXMuc2VsZWN0ZWRMb2NhbGUsIEZvcm1TdHlsZS5Gb3JtYXQsIFRyYW5zbGF0aW9uV2lkdGguQWJicmV2aWF0ZWQpO1xuICAgICAgICB0aGlzLmxvYWROYXRpdmVEYXRlSW5wdXQgPSBpc01vYmlsZSgpICYmICF0aGlzLnNob3djdXN0b21waWNrZXI7XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIGlucHV0IHZhbHVlIGlzIGRlZmF1bHQgKGkuZSBvcGVuIGRhdGUgcGlja2VyIG9uIGlucHV0IGNsaWNrKVxuICAgICAqIEBwYXJhbTEgZHJvcGRvd252YWx1ZSwgdXNlciBzZWxlY3RlZCB2YWx1ZSAoYnkgZGVmYXVsdCBkYXRlcGlja2VyIG9wZW5zIG9uIGlucHV0IGNsaWNrKVxuICAgICAqICoqL1xuICAgIHByb3RlY3RlZCBpc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0KGRyb3Bkb3dudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRyb3Bkb3dudmFsdWUgPT09IERBVEVQSUNLRVJfRFJPUERPV05fT1BUSU9OUy5ERUZBVUxUO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgdHJ1ZSBpZiB0aGUgaW5wdXQgdmFsdWUgaXMgZGVmYXVsdCAoaS5lIERhdGEgZW50cnkgY2FuIGJlIGRvbmUgZWl0aGVyIGJ5IHNlbGVjdGluZyBmcm9tIHRoZSBEYXRlL0RhdGVUaW1lL1RpbWUgUGlja2VyIG9yIGJ5IGVudGVyaW5nICBtYW51YWxseSB1c2luZyB0aGUga2V5Ym9hcmQuIClcbiAgICAgKiBAcGFyYW0xIGRyb3Bkb3dudmFsdWUsIHVzZXIgc2VsZWN0ZWQgdmFsdWVcbiAgICAgKiAqKi9cbiAgICBwcm90ZWN0ZWQgaXNEYXRhRW50cnlNb2RlRW5hYmxlZE9uSW5wdXQoZHJvcGRvd252YWx1ZSkge1xuICAgICAgICByZXR1cm4gZHJvcGRvd252YWx1ZSA9PT0gREFUQUVOVFJZTU9ERV9EUk9QRE9XTl9PUFRJT05TLkRFRkFVTFQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2hvdyB2YWxpZGF0aW9uIG1lc3NhZ2UgZGVwZW5kaW5nIG9uIHRoZSBpc05hdGl2ZVBpY2tlciBmbGFnLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2hvd1ZhbGlkYXRpb24oJGV2ZW50LCBkaXNwbGF5VmFsdWUsIGlzTmF0aXZlUGlja2VyLCBtc2cpIHtcbiAgICAgICAgaWYgKGlzTmF0aXZlUGlja2VyKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ21pbiBtYXggZGF0ZSB2YWxpZGF0aW9uIGZhaWxlZCAnLCBtc2cpO1xuICAgICAgICAgICAgcmV0dXJuICQoJGV2ZW50LnRhcmdldCkudmFsKGRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldERpc3BsYXlJbnB1dCgpIHtcbiAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJy5kaXNwbGF5LWlucHV0JykudmFsKCcnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoYzogQWJzdHJhY3RDb250cm9sKSB7XG4gICAgICAgIGlmICh0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkRGF0ZVRpbWVGb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy5kYXRlTm90SW5SYW5nZSkgJiYgdGhpcy5kYXRlTm90SW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRlTm90SW5SYW5nZToge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhpcy50aW1lTm90SW5SYW5nZSkgJiYgdGhpcy50aW1lTm90SW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0aW1lTm90SW5SYW5nZToge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvKiBXTVMtMTgyNjkgfCBFeHRlbmRpbmcgdGhlIGV4aXN0aW5nIHZhbGlkYXRpb24gZm9yICdyZXF1aXJlZCcgKi9cbiAgICAgICAgaWYgKHRoaXNbJ3Nob3cnXSAmJiB0aGlzWydyZXF1aXJlZCddKSB7XG4gICAgICAgICAgICByZXR1cm4gISFjLnZhbHVlID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHZhbGlkYXRlIGRhdGUgcGF0dGVybiBhbmQgdGltZSBwYXR0ZXJuXG4gICAgICogSWYgdXNlciBzZWxlY3RzIG9uZSBwYXR0ZXJuIGluIGRlc2lnbiB0aW1lIGFuZCBpZiBoZSB0cmllcyB0byBlbnRlciB0aGUgZGF0ZSBpbiBhbm90aGVyIHBhdHRlcm4gdGhlbiB0aGUgZGV2aWNlIGlzIHRocm93aW5nIGFuIGVycm9yXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGZvcm1hdFZhbGlkYXRpb24obmV3VmFsLCBpbnB1dFZhbCwgaXNOYXRpdmVQaWNrZXI/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSB0aGlzLmRhdGVwYXR0ZXJuIHx8IHRoaXMudGltZXBhdHRlcm47XG4gICAgICAgIGNvbnN0IHRpbWVab25lID0gdGhpcy50aW1lWm9uZTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF0ZSA9IGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbmV3VmFsLCBwYXR0ZXJuLCB0aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcyk7XG4gICAgICAgIGlucHV0VmFsID0gaW5wdXRWYWwudHJpbSgpO1xuICAgICAgICBpZiAoaW5wdXRWYWwpIHtcbiAgICAgICAgICAgIGlmIChwYXR0ZXJuID09PSAndGltZXN0YW1wJykge1xuICAgICAgICAgICAgICAgIGlmICghXy5pc05hTihpbnB1dFZhbCkgJiYgXy5wYXJzZUludChpbnB1dFZhbCkgIT09IGZvcm1hdHRlZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdpbmNvcnJlY3Rmb3JtYXQnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmF0aXZlUGlja2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZvcm1hdCB0aGUgZGF0ZSB2YWx1ZSBvbmx5IHdoZW4gaW5wdXRWYWwgaXMgb2J0YWluZWQgZnJvbSAkZXZlbnQudGFyZ2V0LnZhbHVlLCBhcyB0aGUgZm9ybWF0IGRvZXNudCBtYXRjaC5cbiAgICAgICAgICAgICAgICAgICAgaW5wdXRWYWwgPSBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIGlucHV0VmFsLCBwYXR0ZXJuLCB0aW1lWm9uZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpbnB1dFZhbCAhPT0gZm9ybWF0dGVkRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ2luY29ycmVjdGZvcm1hdCc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byB2YWxpZGF0ZSBtaW4gZGF0ZSwgbWF4IGRhdGUsIGV4Y2x1ZGUgZGF0ZXMgYW5kIGV4Y2x1ZGUgZGF5c1xuICAgICAqIEluIG1vYmlsZSBpZiBpbnZhbGlkIGRhdGVzIGFyZSBlbnRlcmVkLCBkZXZpY2UgaXMgc2hvd2luZyBhbiBhbGVydC5cbiAgICAgKiBJbiB3ZWIgaWYgaW52YWxpZCBkYXRlcyBhcmUgZW50ZXJlZCwgZGV2aWNlIGlzIHNob3dpbmcgdmFsaWRhdGlvbiBtZXNzYWdlLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBtaW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KG5ld1ZhbCwgJGV2ZW50PzogRXZlbnQsIGRpc3BsYXlWYWx1ZT86IHN0cmluZywgaXNOYXRpdmVQaWNrZXI/OiBib29sZWFuKSB7XG4gICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lVmFsID0gbmV3VmFsO1xuICAgICAgICAgICAgbmV3VmFsID0gbW9tZW50KG5ld1ZhbCkuc3RhcnRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBtaW5EYXRlID0gbW9tZW50KGdldERhdGVPYmoodGhpcy5taW5kYXRlKSkuc3RhcnRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgICAgICBjb25zdCBtYXhEYXRlID0gbW9tZW50KGdldERhdGVPYmoodGhpcy5tYXhkYXRlKSkuc3RhcnRPZignZGF5JykudG9EYXRlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5taW5kYXRlICYmIG5ld1ZhbCA8IG1pbkRhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBgJHt0aGlzLmFwcExvY2FsZS5MQUJFTF9NSU5EQVRFX1ZBTElEQVRJT05fTUVTU0FHRX0gJHt0aGlzLm1pbmRhdGV9LmA7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmF0aXZlUGlja2VyICYmIGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgbWluRGF0ZSwgdGhpcy5kYXRlcGF0dGVybiwgdGhpcy50aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcykgPT09IGRpc3BsYXlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgkZXZlbnQudGFyZ2V0KS52YWwoZGlzcGxheVZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlTm90SW5SYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy52YWxpZGF0ZVR5cGUgPSAnbWluZGF0ZSc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1ZhbGlkYXRpb24oJGV2ZW50LCBkaXNwbGF5VmFsdWUsIGlzTmF0aXZlUGlja2VyLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubWF4ZGF0ZSAmJiBuZXdWYWwgPiBtYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbXNnID0gYCR7dGhpcy5hcHBMb2NhbGUuTEFCRUxfTUFYREFURV9WQUxJREFUSU9OX01FU1NBR0V9ICR7dGhpcy5tYXhkYXRlfS5gO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIGlmIChpc05hdGl2ZVBpY2tlciAmJiBnZXRGb3JtYXR0ZWREYXRlKHRoaXMuZGF0ZVBpcGUsIG1heERhdGUsIHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpID09PSBkaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJGV2ZW50LnRhcmdldCkudmFsKGRpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21heGRhdGUnO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNob3dWYWxpZGF0aW9uKCRldmVudCwgZGlzcGxheVZhbHVlLCBpc05hdGl2ZVBpY2tlciwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkYXRlcykge1xuICAgICAgICAgICAgICAgIGxldCBleGNsdWRlRGF0ZXNBcnJheTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTdHJpbmcodGhpcy5leGNsdWRlZGF0ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVEYXRlc0FycmF5ID0gXy5zcGxpdCh0aGlzLmV4Y2x1ZGVkYXRlcywgJywnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBleGNsdWRlRGF0ZXNBcnJheSA9IHRoaXMuZXhjbHVkZWRhdGVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleGNsdWRlRGF0ZXNBcnJheSA9IGV4Y2x1ZGVEYXRlc0FycmF5Lm1hcChkID0+IGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgZCwgdGhpcy5kYXRlcGF0dGVybiwgdGhpcy50aW1lWm9uZSwgbnVsbCwgbnVsbCwgdGhpcykpO1xuICAgICAgICAgICAgICAgIGlmIChleGNsdWRlRGF0ZXNBcnJheS5pbmRleE9mKGdldEZvcm1hdHRlZERhdGUodGhpcy5kYXRlUGlwZSwgZGF0ZVRpbWVWYWwsIHRoaXMuZGF0ZXBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdleGNsdWRlZGF0ZXMnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkYXlzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhjbHVkZURheXNBcnJheSA9IF8uc3BsaXQodGhpcy5leGNsdWRlZGF5cywgJywnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXkgPSBfLmdldChkYXRlVGltZVZhbCwgJ2dldERheScpID8gZGF0ZVRpbWVWYWwuZ2V0RGF5KCkgOiBkYXRlVGltZVZhbDtcbiAgICAgICAgICAgICAgICBpZiAoZXhjbHVkZURheXNBcnJheS5pbmRleE9mKGRheS50b1N0cmluZygpKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZU5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdleGNsdWRlZGF5cyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW52b2tlT25DaGFuZ2UodGhpcy5kYXRhdmFsdWUsIHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hdGl2ZVBpY2tlcikge1xuICAgICAgICAgICAgdGhpcy5kYXRlTm90SW5SYW5nZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGhpZ2hsaWdodCB0aGUgY3VycmVudCBkYXRlXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGhpZ2h0bGlnaHRUb2RheSgpIHtcbiAgICAgICAgY29uc3QgdG9EYXkgPSBuZXcgRGF0ZSgpLmdldERhdGUoKS50b1N0cmluZygpO1xuICAgICAgICBfLmZpbHRlcigkKGBzcGFuOmNvbnRhaW5zKCR7dG9EYXl9KWApLm5vdCgnLmlzLW90aGVyLW1vbnRoJyksIChvYmopID0+IHtcbiAgICAgICAgICAgIGlmICgkKG9iaikudGV4dCgpID09PSB0b0RheSkge1xuICAgICAgICAgICAgICAgICQob2JqKS5hZGRDbGFzcygnY3VycmVudC1kYXRlIHRleHQtaW5mbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGZpbmQgdGhlIG5ldyBkYXRlIGlzIGZyb20gYW5vdGhlciB5ZWFyIG9yIG5vdFxuICAgICAqIEBwYXJhbSBuZXdEYXRlIC0gbmV3bHkgc2VsZWN0ZWQgZGF0ZSB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgaXNPdGhlcnllYXIobmV3RGF0ZSkge1xuICAgICAgICByZXR1cm4gKG5ld0RhdGUuZ2V0TW9udGgoKSA9PT0gMCAmJiB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKSA9PT0gMTEpIHx8IChuZXdEYXRlLmdldE1vbnRoKCkgPT09IDExICYmIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpID09PSAwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCBmb2N1cyBmb3IgYWN0aXZlIGRheVxuICAgICAqIEBwYXJhbSBuZXdEYXRlIC0gbmV3bHkgc2VsZWN0ZWQgZGF0ZSB2YWx1ZVxuICAgICAqIEBwYXJhbSBpc01vdXNlRXZlbnQgLSBib29sZWFuIHZhbHVlIHJlcHJlc2VudHMgdGhlIGV2ZW50IGlzIG1vdXNlIGV2ZW50LyBrZXlib2FyZCBldmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUsIGlzTW91c2VFdmVudD86IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXROZXh0RGF0YShuZXdEYXRlKTtcbiAgICAgICAgY29uc3QgYWN0aXZlTW9udGggPSB0aGlzLmFjdGl2ZURhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGtleWJvYXJkIGV2ZW50XG4gICAgICAgIGlmICghaXNNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXRNb250aCgpIDwgYWN0aXZlTW9udGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3RoZXJ5ZWFyKG5ld0RhdGUpID8gdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcignbmV4dCcsICdkYXlzJykgOiB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCdwcmV2aW91cycsICdkYXlzJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5ld0RhdGUuZ2V0TW9udGgoKSA+IGFjdGl2ZU1vbnRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc090aGVyeWVhcihuZXdEYXRlKSA/IHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ3ByZXZpb3VzJywgJ2RheXMnKSA6IHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ25leHQnLCAnZGF5cycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF5ID0gbmV3RGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIF8uZmlsdGVyKCQoYHNwYW46Y29udGFpbnMoJHtuZXdEYXl9KWApLm5vdCgnLmlzLW90aGVyLW1vbnRoJyksIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoJChvYmopLnRleHQoKSA9PT0gbmV3RGF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgkKG9iaikuaGFzQ2xhc3MoJ3NlbGVjdGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgJChvYmopLnBhcmVudCgpLmF0dHIoJ2FyaWEtc2VsZWN0ZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICQob2JqKS5hdHRyKCdhcmlhLWxhYmVsJywgbW9tZW50KG5ld0RhdGUpLmZvcm1hdCgnZGRkZCwgTU1NTSBEbyBZWVlZJykpO1xuICAgICAgICAgICAgICAgICAgICAkKCdbYnNkYXRlcGlja2VyZGF5ZGVjb3JhdG9yXScpLm5vdCgnLmlzLW90aGVyLW1vbnRoJykuYXR0cigndGFiaW5kZXgnLCAnLTEnKTtcbiAgICAgICAgICAgICAgICAgICAgJChvYmopLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgJChvYmopLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXRNb250aCgpID09PSBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgJiYgbmV3RGF0ZS5nZXRGdWxsWWVhcigpID09PSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZ2h0bGlnaHRUb2RheSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbG9hZCBvdGhlciBtb250aCBkYXlzIG9yIG90aGVyIG1vbnRoIG9yIG90aGVyIHllYXJcbiAgICAgKiBAcGFyYW0gYnRuQ2xhc3MgLSBjbGFzcyhwcmV2aW91cy9uZXh0KSBvZiB0aGUgYnV0dG9uIHdoaWNoIHdlIGhhdmUgdG8gY2xpY2tcbiAgICAgKiBAcGFyYW0gdGltZVBlcmlvZCAtIFN0cmluZyB2YWx1ZSBkZWNpZGVzIHRvIGxvYWQgb3RoZXIgbW9udGggZGF5cyBvciBvdGhlciBtb250aCBvciBvdGhlciB5ZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBnb1RvT3RoZXJNb250aE9yeWVhcihidG5DbGFzcywgdGltZVBlcmlvZCkge1xuICAgICAgICBjb25zdCAkbm9kZSA9ICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLiR7YnRuQ2xhc3N9YCk7XG4gICAgICAgIGlmICgkbm9kZS5hdHRyKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgJG5vZGUudHJpZ2dlcignY2xpY2snKTtcbiAgICAgICAgaWYgKHRpbWVQZXJpb2QgPT09ICdkYXlzJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkRGF5cygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbWVQZXJpb2QgPT09ICdtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICB9IGVsc2UgaWYgKHRpbWVQZXJpb2QgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TW9udGgoZGF0ZSwgaW5jKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNb250aCA9IG5ldyBEYXRlKGRhdGUpO1xuXG4gICAgICAgIGxldCBtb250aCA9IGN1cnJlbnRNb250aC5nZXRNb250aCgpO1xuICAgICAgICBjb25zdCB5ZWFyID0gY3VycmVudE1vbnRoLmdldEZ1bGxZZWFyKCk7XG5cbiAgICAgICAgbW9udGggKz0gaW5jO1xuXG4gICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCk7XG5cbiAgICAgICAgY29uc3QgZnVsbE1vbnRoID0gbmV3RGF0ZS50b0xvY2FsZVN0cmluZygnZW4tVVMnLCB7IG1vbnRoOiAnbG9uZycgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGU6IG5ld0RhdGUsXG4gICAgICAgICAgICBmdWxsTW9udGg6IGZ1bGxNb250aFxuICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBUaGlzIG1ldGhvZCBzZXRzIHRoZSBtb3VzZSBldmVudHMgdG8gRGF0ZXBpY2tlciBwb3B1cC4gVGhlc2UgZXZlbnRzIGFyZSByZXF1aXJlZCB3aGVuIHdlIG5hdmlnYXRlIGRhdGUgcGlja2VyIHRocm91Z2ggbW91c2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhZGREYXRlcGlja2VyTW91c2VFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJIZWFkID0gJChgLmJzLWRhdGVwaWNrZXItaGVhZGApO1xuICAgICAgICBkYXRlUGlja2VySGVhZC5maW5kKGAucHJldmlvdXNgKS5jbGljaygoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubmV4dCA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAwKTtcbiAgICAgICAgICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAtMik7XG4gICAgICAgICAgICB0aGlzLmNsaWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JEYXRlKC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLnByZXZpb3VzYCkuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIH0pO1xuICAgICAgICBkYXRlUGlja2VySGVhZC5maW5kKGAubmV4dGApLmNsaWNrKChldmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDIpO1xuICAgICAgICAgICAgdGhpcy5wcmV2ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDApO1xuICAgICAgICAgICAgdGhpcy5jbGlja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBvcmlnaW5hbCBtb3VzZSBjbGlja1xuICAgICAgICAgICAgaWYgKGV2ZW50Lm9yaWdpbmFsRXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzRm9yRGF0ZSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWhlYWQgLm5leHRgKS5mb2N1cygpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSk7XG4gICAgICAgIGRhdGVQaWNrZXJIZWFkLmZpbmQoYC5jdXJyZW50YCkuY2xpY2soKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBjaGVjayBmb3Igb3JpZ2luYWwgbW91c2UgY2xpY2tcbiAgICAgICAgICAgIGlmIChldmVudC5vcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1c0ZvckN1cnJlbnRNb250aE9yeWVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJCgnLmJzLWRhdGVwaWNrZXItYm9keSwgLmJzLWRhdGVwaWNrZXItYWN0aW9uLWJ1dHRvbnMnKS5jbGljaygoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIG9yaWdpbmFsIG1vdXNlIGNsaWNrXG4gICAgICAgICAgICBpZiAoZXZlbnQub3JpZ2luYWxFdmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Rm9jdXNGb3JNb250aE9yRGF5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBkYXRlUGlja2VySGVhZC5maW5kKCcubmV4dCcpLmF0dHIoJ2FyaWEtbGFiZWwnLCBgTmV4dCBNb250aCwgJHt0aGlzLm5leHQuZnVsbE1vbnRofSAke3RoaXMubmV4dC5kYXRlLmdldEZ1bGxZZWFyKCl9YCk7XG4gICAgICAgIGRhdGVQaWNrZXJIZWFkLmZpbmQoJy5wcmV2aW91cycpLmF0dHIoJ2FyaWEtbGFiZWwnLCBgUHJldmlvdXMgTW9udGgsICR7dGhpcy5wcmV2LmZ1bGxNb250aH0gJHt0aGlzLnByZXYuZGF0ZS5nZXRGdWxsWWVhcigpfWApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnROb2RlcyA9IGRhdGVQaWNrZXJIZWFkLmZpbmQoJy5jdXJyZW50IHNwYW4nKTtcbiAgICAgICAgICAgIGNvbnN0IG1zZyA9ICdDaGFuZ2VkIHRvIG1vbnRoICc7XG4gICAgICAgICAgICAvLyBjdXJyZW50Tm9kZXMuZWFjaCgoaSkgPT4ge1xuICAgICAgICAgICAgLy8gICAgIG1zZyA9YCR7bXNnfSAkeyQoY3VycmVudE5vZGVzW2ldKS50ZXh0KCl9YDtcbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgZGF0ZVBpY2tlckhlYWQuZmluZCgnLmN1cnJlbnQnKS5hdHRyKFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpLmF0dHIoXCJhcmlhLWF0b21pY1wiLCBcImZhbHNlXCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xpY2tlZCkge1xuICAgICAgICAgICAgICAgIGlmICgkKGN1cnJlbnROb2Rlc1swXSkudGV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVQaWNrZXJIZWFkLmZpbmQoJy5uZy1zdGFyLWluc2VydGVkJykucHJlcGVuZChgPGRpdiBjbGFzcz1cInNyLW9ubHlcIj4ke21zZ308L2Rpdj5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCQoY3VycmVudE5vZGVzWzFdKS50ZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVBpY2tlckhlYWQuZmluZCgnLmN1cnJlbnQnKS5sYXN0KCkucHJlcGVuZChgPGRpdiBjbGFzcz1cInNyLW9ubHlcIj4gYW5kIHllYXIgPC9kaXY+YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGZvY3VzIGZvciBtb250aHMvZGF5cyBkZXBlbmRpbmcgb24gdGhlIGxvYWRlZCBkYXRlcGlja2VyIHRhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRGb2N1c0Zvck1vbnRoT3JEYXkoKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU1vbnRoT3JZZWFyID0gJChgLmJzLWRhdGVwaWNrZXItaGVhZCAuY3VycmVudGApLmZpcnN0KCkudGV4dCgpO1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGlmIChfLnBhcnNlSW50KGFjdGl2ZU1vbnRoT3JZZWFyKSAhPT0gdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb250aHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShfLnBhcnNlSW50KGFjdGl2ZU1vbnRoT3JZZWFyKSwgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLmRheXMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdNb250aCA9IG1vbnRocy5pbmRleE9mKGFjdGl2ZU1vbnRoT3JZZWFyKTtcbiAgICAgICAgICAgIGlmIChuZXdNb250aCAhPT0gdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIG5ld01vbnRoLCAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBmb2N1cyBmb3IgbW9udGhzL3llYXJzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yQ3VycmVudE1vbnRoT3J5ZWFyKCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKHRoaXMuYWN0aXZlRGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0ZVBpY2tlckJvZHkuZmluZCgndGFibGUueWVhcnMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRZZWFycygpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXModGhpcy5hY3RpdmVEYXRlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgZm9jdXMgZm9yIG1vbnRocy95ZWFycy9kYXlzIGRlcGVuZGluZyBvbiB0aGUgbG9hZGVkIGRhdGVwaWNrZXIgdGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEZvY3VzRm9yRGF0ZShjb3VudCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VyQm9keSA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHknKTtcbiAgICAgICAgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLm1vbnRocycpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKHRoaXMuYWN0aXZlRGF0ZS5nZXRGdWxsWWVhcigpICsgY291bnQsIDAsIHRoaXMuYWN0aXZlRGF0ZS5nZXREYXRlKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzJykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0WWVhciA9IGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLnllYXJzIHNwYW4nKS5maXJzdCgpLnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZShfLnBhcnNlSW50KHN0YXJ0WWVhciksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpLCB0aGlzLmFjdGl2ZURhdGUuZ2V0RGF0ZSgpKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKG5ld0RhdGUsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGVQaWNrZXJCb2R5LmZpbmQoJ3RhYmxlLmRheXMnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMuYWN0aXZlRGF0ZS5nZXRNb250aCgpICsgY291bnQsIDEpO1xuICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3RGF0ZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkZCBrZXlib2FyZCBldmVudHMgd2hpbGUgb3BlbmluZyB0aGUgZGF0ZSBwaWNrZXJcbiAgICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgZGF0ZS9kYXRldGltZSB3aWRnZXRcbiAgICAgKiBAcGFyYW0gaXNEYXRlVGltZSAtIGJvb2xlYW4gdmFsdWUgcmVwcmVzZW50cyB0aGUgbG9hZGVkIHdpZGdldCBpcyBkYXRlIG9yIGRhdGV0aW1lXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGFkZERhdGVwaWNrZXJLZXlib2FyZEV2ZW50cyhzY29wZSwgaXNEYXRlVGltZSkge1xuICAgICAgICB0aGlzLmtleUV2ZW50UGx1Z2luSW5zdGFuY2UgPSBzY29wZS5rZXlFdmVudFBsdWdpbi5jb25zdHJ1Y3RvcjtcbiAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUgPSBzY29wZTtcbiAgICAgICAgY29uc3QgZGF0ZUNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC4ke3Njb3BlLmRhdGVDb250YWluZXJDbHN9YCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHNldEF0dHIoZGF0ZUNvbnRhaW5lciwgJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgZGF0ZUNvbnRhaW5lci5vbmtleWRvd24gPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMua2V5RXZlbnRQbHVnaW5JbnN0YW5jZS5nZXRFdmVudEZ1bGxLZXkoZXZlbnQpO1xuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIFNoaWZ0K1RhYiBrZXkgb3IgVGFiIGtleSBvciBlc2NhcGVcbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdlc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUuaGlkZURhdGVwaWNrZXJEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlJbnB1dEVsZW0gPSB0aGlzLmVsZW1lbnRTY29wZS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiBkaXNwbGF5SW5wdXRFbGVtLmZvY3VzKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmxvYWREYXlzKCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuICAgIHByaXZhdGUgc2V0TmV4dERhdGEobmV4dERhdGUpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aChuZXh0RGF0ZSwgMSk7XG4gICAgICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgobmV4dERhdGUsIC0xKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGFiaW5kZXgsIGtleWJvcmQgYW5kIG1vdXNlIGV2ZW50cyBmb3IgZGF5c1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZERheXMoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgJCgnW2JzZGF0ZXBpY2tlcmRheWRlY29yYXRvcl0nKS5ub3QoJy5pcy1vdGhlci1tb250aCcpLmF0dHIoJ3RhYmluZGV4JywgJzAnKTtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmNsaWNrZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5uZXh0ID0gdGhpcy5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUsIDEpO1xuICAgICAgICAgICAgLy8gICAgIHRoaXMucHJldiA9IHRoaXMuZ2V0TW9udGgodGhpcy5hY3RpdmVEYXRlLCAtMSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB0aGlzLmFkZEtleUJvYXJkRXZlbnRzRm9yRGF5cygpO1xuICAgICAgICAgICAgdGhpcy5hZGREYXRlcGlja2VyTW91c2VFdmVudHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2Qgc2V0cyBrZXlib2FyZCBldmVudHMgZm9yIGRheXNcbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZEtleUJvYXJkRXZlbnRzRm9yRGF5cygpIHtcbiAgICAgICAgY29uc3QgZGF0ZVBpY2tlckJvZHkgPSAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jyk7XG4gICAgICAgIGRhdGVQaWNrZXJCb2R5LmtleWRvd24oKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmtleUV2ZW50UGx1Z2luSW5zdGFuY2UuZ2V0RXZlbnRGdWxsS2V5KGV2ZW50KTtcbiAgICAgICAgICAgIGxldCBuZXdkYXRlO1xuICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2Fycm93ZG93bicpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoKzcsICdkYXlzJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVEYXRlRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2Fycm93dXAnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC03LCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdhcnJvd2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ2RheXMnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnYXJyb3dyaWdodCcpIHtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnZGF5cycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdwYWdldXAnKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKC0xLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAncGFnZWRvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCsxLCAnbW9udGgnKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZURhdGVGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnY29udHJvbC5hcnJvd3VwJykge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNraW5nIG9uIHRhYmxlIGhlYWRlciBtb250aCBuYW1lIHRvIGxvYWQgbGlzdCBvZiBtb250aHNcbiAgICAgICAgICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1oZWFkIC5jdXJyZW50JykuZmlyc3QoKS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICAgICAgICBpZiAoJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5oYXNDbGFzcygnZGlzYWJsZWQnKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkuY2xpY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRTY29wZS5oaWRlRGF0ZXBpY2tlckRyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlzcGxheUlucHV0RWxlbSA9IHRoaXMuZWxlbWVudFNjb3BlLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRpc3BsYXktaW5wdXQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGRpc3BsYXlJbnB1dEVsZW0uZm9jdXMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmZvY3VzQmx1ckRhdGVQaWNrZXJIZWFkQnV0dG9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9jdXNCbHVyRGF0ZVBpY2tlckhlYWRCdXR0b25zKCkge1xuICAgICAgICBjb25zdCBkYXRlUGlja2VySGVhZEJ1dHRvbiA9ICQoJy5icy1kYXRlcGlja2VyLWhlYWQgYnV0dG9uJyk7XG4gICAgICAgIGRhdGVQaWNrZXJIZWFkQnV0dG9uLm9uKCdmb2N1cycsIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcicsICcjOUFBMEEzJyk7IH0pO1xuICAgICAgICBkYXRlUGlja2VySGVhZEJ1dHRvbi5vbignYmx1cicsIGZ1bmN0aW9uKCkgeyAkKHRoaXMpLmNzcygnYmFja2dyb3VuZC1jb2xvcicsICcnKTsgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGQgdGFiaW5kZXgsIGtleWJvcmQgYW5kIG1vdXNlIGV2ZW50cyBmb3IgbW9udGhzXG4gICAgICovXG4gICAgcHJpdmF0ZSBsb2FkTW9udGhzKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5Qm9hcmRFdmVudHNGb3JNb250aHMoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRGF0ZXBpY2tlck1vdXNlRXZlbnRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMga2V5Ym9hcmQgZXZlbnRzIGZvciBtb250aHNcbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZEtleUJvYXJkRXZlbnRzRm9yTW9udGhzKCkge1xuICAgICAgICAkKCcuYnMtZGF0ZXBpY2tlci1ib2R5Jykua2V5ZG93bigoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMua2V5RXZlbnRQbHVnaW5JbnN0YW5jZS5nZXRFdmVudEZ1bGxLZXkoZXZlbnQpO1xuICAgICAgICAgICAgbGV0IG5ld2RhdGU7XG4gICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnYXJyb3dkb3duJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMywgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdhcnJvd3VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMywgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdhcnJvd2xlZnQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtMSwgJ21vbnRoJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVNb250aEZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdhcnJvd3JpZ2h0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoKzEsICdtb250aCcpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnY29udHJvbC5hcnJvd3VwJykge1xuICAgICAgICAgICAgICAgIC8vIGNsaWNraW5nIG9uIHRhYmxlIGhlYWRlciB5ZWFyIHRvIGxvYWQgbGlzdCBvZiB5ZWFyc1xuICAgICAgICAgICAgICAgICQoJy5icy1kYXRlcGlja2VyLWhlYWQgLmN1cnJlbnQnKS5maXJzdCgpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkWWVhcnMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdjb250cm9sLmFycm93ZG93bicgfHwgYWN0aW9uID09PSAnZW50ZXInKSB7XG4gICAgICAgICAgICAgICAgaWYgKCQoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkucGFyZW50KCkuaGFzQ2xhc3MoJ2Rpc2FibGVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGF5cygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSwgdGhpcy5hY3RpdmVEYXRlLmdldE1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlRGF0ZUZvY3VzKG5ld0RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb2N1c0JsdXJEYXRlUGlja2VySGVhZEJ1dHRvbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkZCB0YWJpbmRleCwga2V5Ym9yZCBhbmQgbW91c2UgZXZlbnRzIGZvciB5ZWFyc1xuICAgICAqL1xuICAgIHByaXZhdGUgbG9hZFllYXJzKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkS2V5Qm9hcmRFdmVudHNGb3JZZWFycygpO1xuICAgICAgICAgICAgdGhpcy5hZGREYXRlcGlja2VyTW91c2VFdmVudHMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXQgZm9jdXMgZm9yIGFjdGl2ZSBtb250aFxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0QWN0aXZlTW9udGhGb2N1cyhuZXdEYXRlLCBpc01vb3VzZUV2ZW50PzogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldE5leHREYXRhKG5ld0RhdGUpO1xuICAgICAgICBjb25zdCBuZXdNb250aCA9IG1vbnRoc1tuZXdEYXRlLmdldE1vbnRoKCldO1xuICAgICAgICAvLyBjaGVjayBmb3Iga2V5Ym9hcmQgZXZlbnRcbiAgICAgICAgaWYgKCFpc01vb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXRGdWxsWWVhcigpIDwgdGhpcy5hY3RpdmVEYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9PdGhlck1vbnRoT3J5ZWFyKCdwcmV2aW91cycsICdtb250aCcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdEYXRlLmdldEZ1bGxZZWFyKCkgPiB0aGlzLmFjdGl2ZURhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub090aGVyTW9udGhPcnllYXIoJ25leHQnLCAnbW9udGgnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICQoYC5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUubW9udGhzIHNwYW5gKS5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS5tb250aHMgc3Bhbjpjb250YWlucygke25ld01vbnRofSlgKS5hdHRyKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLm1vbnRocyBzcGFuOmNvbnRhaW5zKCR7bmV3TW9udGh9KWApLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBuZXdEYXRlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBzZXRzIGtleWJvYXJkIGV2ZW50cyBmb3IgeWVhcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIGFkZEtleUJvYXJkRXZlbnRzRm9yWWVhcnMoKSB7XG4gICAgICAgICQoJy5icy1kYXRlcGlja2VyLWJvZHknKS5rZXlkb3duKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5rZXlFdmVudFBsdWdpbkluc3RhbmNlLmdldEV2ZW50RnVsbEtleShldmVudCk7XG4gICAgICAgICAgICBsZXQgbmV3ZGF0ZTtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdhcnJvd2Rvd24nKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBuZXdkYXRlID0gbW9tZW50KHRoaXMuYWN0aXZlRGF0ZSkuYWRkKCs0LCAneWVhcicpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlWWVhckZvY3VzKG5ld2RhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdhcnJvd3VwJykge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgtNCwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnYXJyb3dsZWZ0Jykge1xuICAgICAgICAgICAgICAgIG5ld2RhdGUgPSBtb21lbnQodGhpcy5hY3RpdmVEYXRlKS5hZGQoLTEsICd5ZWFyJykudG9EYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVZZWFyRm9jdXMobmV3ZGF0ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2Fycm93cmlnaHQnKSB7XG4gICAgICAgICAgICAgICAgbmV3ZGF0ZSA9IG1vbWVudCh0aGlzLmFjdGl2ZURhdGUpLmFkZCgrMSwgJ3llYXInKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZVllYXJGb2N1cyhuZXdkYXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uID09PSAnY29udHJvbC5hcnJvd2Rvd24nIHx8IGFjdGlvbiA9PT0gJ2VudGVyJykge1xuICAgICAgICAgICAgICAgIGlmICgkKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpLnBhcmVudCgpLmhhc0NsYXNzKCdkaXNhYmxlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgJChkb2N1bWVudC5hY3RpdmVFbGVtZW50KS5jbGljaygpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZE1vbnRocygpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTW9udGhGb2N1cyh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb2N1c0JsdXJEYXRlUGlja2VySGVhZEJ1dHRvbnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNldCBmb2N1cyBmb3IgYWN0aXZlIHllYXJcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEFjdGl2ZVllYXJGb2N1cyhuZXdEYXRlLCBpc01vdXNlRXZlbnQ/OiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IG5ld1llYXIgPSBuZXdEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGNvbnN0IGRhdGVQaWNrZXJZZWFycyA9ICQoJy5icy1kYXRlcGlja2VyLWJvZHkgdGFibGUueWVhcnMgc3BhbicpO1xuICAgICAgICBjb25zdCBzdGFydFllYXIgPSBkYXRlUGlja2VyWWVhcnMuZmlyc3QoKS50ZXh0KCk7XG4gICAgICAgIGNvbnN0IGVuZFllYXIgPSBkYXRlUGlja2VyWWVhcnMubGFzdCgpLnRleHQoKTtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGtleWJvYXJkIGV2ZW50XG4gICAgICAgIGlmICghaXNNb3VzZUV2ZW50KSB7XG4gICAgICAgICAgICBpZiAobmV3RGF0ZS5nZXRGdWxsWWVhcigpIDwgXy5wYXJzZUludChzdGFydFllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcigncHJldmlvdXMnLCAneWVhcicpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXdEYXRlLmdldEZ1bGxZZWFyKCkgPiBfLnBhcnNlSW50KGVuZFllYXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvT3RoZXJNb250aE9yeWVhcignbmV4dCcsICd5ZWFyJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAkKGAuYnMtZGF0ZXBpY2tlci1ib2R5IHRhYmxlLnllYXJzIHNwYW5gKS5hdHRyKCd0YWJpbmRleCcsICctMScpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS55ZWFycyBzcGFuOmNvbnRhaW5zKCR7bmV3WWVhcn0pYCkuYXR0cigndGFiaW5kZXgnLCAnMCcpO1xuICAgICAgICAgICAgJChgLmJzLWRhdGVwaWNrZXItYm9keSB0YWJsZS55ZWFycyBzcGFuOmNvbnRhaW5zKCR7bmV3WWVhcn0pYCkuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IG5ld0RhdGU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIHNldHMgZm9jdXMgZm9yIHRpbWVwaWNrZXIgZmlyc3QgaW5wdXQgZmllbGQoaG91cnMgZmllbGQpIHdoaWxlIG9wZW5pbmcgdGltZSBwaWNrZXJcbiAgICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgdGltZSBwaWNrZXIgd2lkZ2V0XG4gICAgICovXG4gICAgcHJvdGVjdGVkIGZvY3VzVGltZVBpY2tlclBvcG92ZXIoc2NvcGUpIHtcbiAgICAgICAgdGhpcy5rZXlFdmVudFBsdWdpbkluc3RhbmNlID0gc2NvcGUua2V5RXZlbnRQbHVnaW4uY29uc3RydWN0b3I7XG4gICAgICAgIHRoaXMuZWxlbWVudFNjb3BlID0gc2NvcGU7XG4gICAgICAgIC8vIHNldFRpbWVvdXQgaXMgdXNlZCBzbyB0aGF0IGJ5IHRoZW4gdGltZSBpbnB1dCBoYXMgdGhlIHVwZGF0ZWQgdmFsdWUuIGZvY3VzIGlzIHNldHRpbmcgYmFjayB0byB0aGUgaW5wdXQgZmllbGRcbiAgICAgICAgdGhpcy5lbGVtZW50U2NvcGUubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoJ3RpbWVwaWNrZXIgLmZvcm0tZ3JvdXAnKS5maXJzdCgpLmZpbmQoJz4gaW5wdXQuZm9ybS1jb250cm9sJykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUga2V5Ym9hcmQgZXZlbnRzIHRvIFRpbWVwaWNrZXIgcG9wdXBcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgYmluZFRpbWVQaWNrZXJLZXlib2FyZEV2ZW50cygpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdGltZXBpY2tlclBvcHVwID0gJCgnYm9keScpLmZpbmQoJz4gYnMtZHJvcGRvd24tY29udGFpbmVyIHRpbWVwaWNrZXInKTtcbiAgICAgICAgICAgICR0aW1lcGlja2VyUG9wdXAuYXR0cigndGFiaW5kZXgnLCAwKTtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnRzT25UaW1lUGlja2VyKCR0aW1lcGlja2VyUG9wdXApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9jdXNPbklucHV0RWwoKSB7XG4gICAgICAgIGlmICgkKHRoaXMubmF0aXZlRWxlbWVudCkuY2xvc2VzdCgnLmNhcHRpb24tZmxvYXRpbmcnKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmFwcC10ZXh0Ym94JykuZm9jdXMoKTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiBkYXRlIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqIEByZXR1cm5zIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZGF0ZSBpcyB2YWxpZCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWREYXRlKGRhdGUpIHtcbiAgICAgICAgcmV0dXJuIGRhdGUgJiYgZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBnaXZlbiB0aW1lIGlzIHZhbGlkIG9yIG5vdFxuICAgICAqL1xuICAgIHByaXZhdGUgdGltZUZvcm1hdFZhbGlkYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGVudGVyZWREYXRlID0gJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmZpbmQoJ2lucHV0JykudmFsKCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IGdldE5hdGl2ZURhdGVPYmplY3QoZW50ZXJlZERhdGUsIHttZXJpZGlhbnM6IHRoaXMubWVyaWRpYW5zLCBwYXR0ZXJuOiB0aGlzLmRhdGVwYXR0ZXJufSk7XG4gICAgICAgIGlmICghdGhpcy5mb3JtYXRWYWxpZGF0aW9uKG5ld1ZhbCwgZW50ZXJlZERhdGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZhbGlkRGF0ZVRpbWVGb3JtYXQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnZva2VPbkNoYW5nZSh0aGlzLmRhdGF2YWx1ZSwgdW5kZWZpbmVkLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lVmFsdWUodmFsdWUsIGZpZWxkTmFtZSkge1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZmllbGROYW1lID09PSAnbWludXRlcycgPyB0aGlzLmJzVGltZVBpY2tlci51cGRhdGVNaW51dGVzKCcwMCcpIDogdGhpcy5ic1RpbWVQaWNrZXIudXBkYXRlU2Vjb25kcygnMDAnKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaWVsZE5hbWUgPT09ICdtaW51dGVzJyA/IHRoaXMuYnNUaW1lUGlja2VyLnVwZGF0ZU1pbnV0ZXMoJzAwJykgOiB0aGlzLmJzVGltZVBpY2tlci51cGRhdGVTZWNvbmRzKCcwMCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBldmVudHMgdG8gZ2l2ZW4gZWxlbWVudFxuICAgICAqIEBwYXJhbSAkZWwgLSBlbGVtZW50IG9uIHdoaWNoIHRoZSBldmVudCBpcyBhZGRlZFxuICAgICAqL1xuICAgIHByaXZhdGUgYWRkRXZlbnRzT25UaW1lUGlja2VyKCRlbDogSlF1ZXJ5KSB7XG4gICAgICAgIGNvbnN0IGlucHV0RmllbGRzID0gJGVsLmZpbmQoJy5icy10aW1lcGlja2VyLWZpZWxkJyk7XG4gICAgICAgIC8vIFdNUy0xOTM4MjogdXBkYXRlIG1pbnV0ZXMgYW5kIHNlY29uZHMgdG8gMCB3aGVuIHdlIGVudGVyIGhvdXIgdmFsdWVcbiAgICAgICAgaW5wdXRGaWVsZHMuZmlyc3QoKS5vbigna2V5dXAnLCBldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgaG91clZhbHVlID0gKGV2dC50YXJnZXQgYXMgYW55KS52YWx1ZTtcbiAgICAgICAgICAgIF8uZm9yRWFjaChpbnB1dEZpZWxkcywgKGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldnQudGFyZ2V0ICE9PSBmaWVsZCAmJiBmaWVsZC52YWx1ZSA9PT0gJycgJiYgaG91clZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBpbmRleCA9PT0gMSA/ICdtaW51dGVzJyA6ICdzZWNvbmRzJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUaW1lVmFsdWUoaG91clZhbHVlLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW1vdmVLZXl1cExpc3RlbmVyID0gKCkgPT4ge1xuICAgICAgICAgICAgaW5wdXRGaWVsZHMuZmlyc3QoKS5vZmYoJ2tleXVwJyk7XG4gICAgICAgIH07XG4gICAgICAgICRlbC5vbigna2V5ZG93bicsIGV2dCA9PiB7XG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0ID0gJChldnQudGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0ICRwYXJlbnQgPSAkdGFyZ2V0LnBhcmVudCgpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNjb3BlID0gdGhpcy5lbGVtZW50U2NvcGU7XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMua2V5RXZlbnRQbHVnaW5JbnN0YW5jZS5nZXRFdmVudEZ1bGxLZXkoZXZ0KTtcblxuICAgICAgICAgICAgbGV0IHN0b3BQcm9wb2dhdGlvbiwgcHJldmVudERlZmF1bHQ7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdlc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmhpZGVUaW1lcGlja2VyRHJvcGRvd24oKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCR0YXJnZXQuaGFzQ2xhc3MoJ2JzLXRpbWVwaWNrZXItZmllbGQnKSkge1xuICAgICAgICAgICAgICAgIGlmICgkcGFyZW50LmlzKCc6Zmlyc3QtY2hpbGQnKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnc2hpZnQudGFiJyB8fCBhY3Rpb24gPT09ICdlbnRlcicgfHwgYWN0aW9uID09PSAnZXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLnNldElzVGltZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFByb3BvZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJHBhcmVudC5pcygnOmxhc3QtY2hpbGQnKSB8fCAoJHBhcmVudC5uZXh0KCkubmV4dCgpLmZpbmQoJ2J1dHRvbi5kaXNhYmxlZCcpLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ3RhYicgfHwgYWN0aW9uID09PSAnZXNjYXBlJyB8fCBhY3Rpb24gPT09ICdlbnRlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wb2dhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAnZW50ZXInIHx8IGFjdGlvbiA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5zZXRJc1RpbWVPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0b3BQcm9wb2dhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0b3BQcm9wb2dhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRTY29wZS5taW50aW1lICYmIGVsZW1lbnRTY29wZS5tYXh0aW1lICYmICF0aGlzLmlzVmFsaWREYXRlKGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2Fycm93ZG93bicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTY29wZS5ic1RpbWVWYWx1ZSA9IGVsZW1lbnRTY29wZS5tYXhUaW1lO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gJ2Fycm93dXAnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUgPSBlbGVtZW50U2NvcGUubWluVGltZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uID09PSAndGFiJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludmFsaWREYXRlVGltZUZvcm1hdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmludm9rZU9uQ2hhbmdlKHRoaXMuZGF0YXZhbHVlLCB1bmRlZmluZWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMuZGF0ZXBhdHRlcm4gfHwgdGhpcy50aW1lcGF0dGVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldEZvcm1hdHRlZERhdGUoZWxlbWVudFNjb3BlLmRhdGVQaXBlLCBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUsIHBhdHRlcm4sIHRoaXMudGltZVpvbmUsIG51bGwsIG51bGwsIHRoaXMpID09PSBlbGVtZW50U2NvcGUuZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuZmluZCgnLmRpc3BsYXktaW5wdXQnKS52YWwoZWxlbWVudFNjb3BlLmRpc3BsYXlWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ2Fycm93ZG93bicgfHwgYWN0aW9uID09PSAnYXJyb3d1cCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lRm9ybWF0VmFsaWRhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHRhcmdldC5oYXNDbGFzcygnYnRuLWRlZmF1bHQnKSkge1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICd0YWInIHx8IGFjdGlvbiA9PT0gJ2VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLnNldElzVGltZU9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgJGVsLmZpbmQoJ2EnKS5vbignY2xpY2snLCBldnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNjb3BlID0gdGhpcy5lbGVtZW50U2NvcGU7XG4gICAgICAgICAgICBjb25zdCAkdGFyZ2V0ID0gJChldnQudGFyZ2V0KTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50U2NvcGUubWludGltZSAmJiBlbGVtZW50U2NvcGUubWF4dGltZSAmJiAhdGhpcy5pc1ZhbGlkRGF0ZShlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCR0YXJnZXQuZmluZCgnc3BhbicpLmhhc0NsYXNzKCdicy1jaGV2cm9uLWRvd24nKSkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2NvcGUuYnNUaW1lVmFsdWUgPSBlbGVtZW50U2NvcGUubWF4VGltZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCR0YXJnZXQuZmluZCgnc3BhbicpLmhhc0NsYXNzKCdicy1jaGV2cm9uLXVwJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNjb3BlLmJzVGltZVZhbHVlID0gZWxlbWVudFNjb3BlLm1pblRpbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50aW1lRm9ybWF0VmFsaWRhdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlRm9ybWF0KHBhdHRlcm4pIHtcbiAgICAgICAgaWYgKHBhdHRlcm4gPT09ICdkYXRlcGF0dGVybicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLmRhdGVJbnB1dEZvcm1hdCA9IHRoaXMuZGF0ZXBhdHRlcm47XG4gICAgICAgICAgICB0aGlzLnNob3dzZWNvbmRzID0gXy5pbmNsdWRlcyh0aGlzLmRhdGVwYXR0ZXJuLCAncycpO1xuICAgICAgICAgICAgdGhpcy5pc21lcmlkaWFuID0gXy5pbmNsdWRlcyh0aGlzLmRhdGVwYXR0ZXJuLCAnaCcpO1xuICAgICAgICB9IGVsc2UgaWYgKHBhdHRlcm4gPT09ICd0aW1lcGF0dGVybicpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd3NlY29uZHMgPSBfLmluY2x1ZGVzKHRoaXMudGltZXBhdHRlcm4sICdzJyk7XG4gICAgICAgICAgICB0aGlzLmlzbWVyaWRpYW4gPSBfLmluY2x1ZGVzKHRoaXMudGltZXBhdHRlcm4sICdoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRNb2JpbGVJbnB1dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubW9iaWxlLWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgb25EYXRlVGltZUlucHV0Qmx1cigpIHtcbiAgICAgICAgLy8gcmVtb3ZpbmcgdGhlIG9wYWNpdHkgb24gYmx1ciBvZiB0aGUgbW9iaWxlIHdpZGdldFxuICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5nZXRNb2JpbGVJbnB1dCgpO1xuICAgICAgICBpZiAoZGlzcGxheUlucHV0RWxlbSAmJiAhaGFzQ29yZG92YSgpKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5jbGFzc0xpc3QucmVtb3ZlKCdhZGQtb3BhY2l0eScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5jbGFzc0xpc3QucmVtb3ZlKCdyZW1vdmUtb3BhY2l0eScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EYXRlVGltZUlucHV0Rm9jdXMoc2tpcEZvY3VzOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvYWROYXRpdmVEYXRlSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5nZXRNb2JpbGVJbnB1dCgpO1xuICAgICAgICAvLyB0b2dnbGluZyB0aGUgY2xhc3NlcyB0byBzaG93IGFuZCBoaWRlIHRoZSBuYXRpdmUgd2lkZ2V0IHVzaW5nIG9wYWNpdHlcbiAgICAgICAgaWYgKHNraXBGb2N1cyAmJiAhaGFzQ29yZG92YSgpKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbltpXS5jbGFzc0xpc3QuYWRkKCdhZGQtb3BhY2l0eScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlzcGxheUlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKCdyZW1vdmUtb3BhY2l0eScpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3BsYXlJbnB1dEVsZW0gJiYgdGhpcy5fdHJpZ2dlcmVkQnlVc2VyKSB7XG4gICAgICAgICAgICBkaXNwbGF5SW5wdXRFbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICBkaXNwbGF5SW5wdXRFbGVtLmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDb3Jkb3ZhUGx1Z2luRGF0ZVBpY2tlckFwaSgpIHtcbiAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBfLmdldCh3aW5kb3csICdjb3Jkb3ZhLndhdmVtYWtlci5kYXRlUGlja2VyLnNlbGVjdERhdGUnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzaG93RGF0ZVBpY2tlck1vZGFsKCkge1xuICAgICAgICB0aGlzLmRhdGV0aW1lcGlja2VyQ29tcG9uZW50LnNob3coKTtcbiAgICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICBibHVyRGF0ZUlucHV0KGlzUGlja2VyT3Blbikge1xuICAgICAgICBjb25zdCBkaXNwbGF5SW5wdXRFbGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaXNwbGF5LWlucHV0JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGlmIChpc1BpY2tlck9wZW4pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gZGlzcGxheUlucHV0RWxlbS5ibHVyKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcblxuICAgICAgICBpZiAoa2V5ID09PSAndGFiaW5kZXgnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gJ3JlcXVpcmVkJykge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRlcGF0dGVybicpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9ybWF0KGtleSk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnc2hvd3dlZWtzJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuc2hvd1dlZWtOdW1iZXJzID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbWluZGF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLm1pbkRhdGUgPSAobnYgPT09IENVUlJFTlRfREFURSkgPyB0aGlzLm1pbmRhdGUgPSBuZXcgRGF0ZSgpIDogZ2V0RGF0ZU9iaihudik7XG4gICAgICAgICAgICB0aGlzLm1pbkRhdGVNYXhEYXRlVmFsaWRhdGlvbk9uSW5wdXQodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21heGRhdGUnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5tYXhEYXRlID0gKG52ID09PSBDVVJSRU5UX0RBVEUpID8gdGhpcy5tYXhkYXRlID0gbmV3IERhdGUoKSA6IGdldERhdGVPYmoobnYpO1xuICAgICAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdleGNsdWRlZGF0ZXMnIHx8IGtleSA9PT0gJ2V4Y2x1ZGVkYXlzJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZWRheXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4Y2x1ZGVkRGF5c1RvRGlzYWJsZSA9IF8uc3BsaXQodGhpcy5leGNsdWRlZGF5cywgJywnKS5tYXAoKGRheSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gK2RheTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmV4Y2x1ZGVkYXRlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZXhjbHVkZWREYXRlc1RvRGlzYWJsZSA9IHRoaXMuZXhjbHVkZWRhdGVzO1xuICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZyh0aGlzLmV4Y2x1ZGVkYXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlID0gXy5zcGxpdCh0aGlzLmV4Y2x1ZGVkYXRlcywgJywnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlID0gdGhpcy5leGNsdWRlZERhdGVzVG9EaXNhYmxlLm1hcChkID0+IGdldERhdGVPYmooZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5taW5EYXRlTWF4RGF0ZVZhbGlkYXRpb25PbklucHV0KHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzZWxlY3Rmcm9tb3RoZXJtb250aCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNlbGVjdEZyb21PdGhlck1vbnRoID0gbnY7XG5cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICd0b2RheWJ1dHRvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnNob3dUb2RheUJ1dHRvbiA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsZWFyYnV0dG9uJykge1xuICAgICAgICAgICAgdGhpcy5fZGF0ZU9wdGlvbnMuc2hvd0NsZWFyQnV0dG9uID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAndG9kYXlidXR0b25sYWJlbCcpIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGVPcHRpb25zLnRvZGF5QnV0dG9uTGFiZWwgPSB0aGlzLmkxOG5TZXJ2aWNlLmdldExvY2FsaXplZE1lc3NhZ2UobnYpIHx8IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2NsZWFyYnV0dG9ubGFiZWwnKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5jbGVhckJ1dHRvbkxhYmVsID0gdGhpcy5pMThuU2VydmljZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKG52KSB8fCBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdzaG93Y3VzdG9tcGlja2VyJykge1xuICAgICAgICAgICAgdGhpcy5sb2FkTmF0aXZlRGF0ZUlucHV0ID0gaXNNb2JpbGUoKSAmJiAhdGhpcy5zaG93Y3VzdG9tcGlja2VyO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2FkYXB0aXZlcG9zaXRpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRlT3B0aW9ucy5hZGFwdGl2ZVBvc2l0aW9uID0gbnY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJUYXJnZXQgPSBnZXRDb250YWluZXJUYXJnZXRDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLmlzUmVhZE9ubHkgPSB0aGlzLmRhdGFlbnRyeW1vZGUgIT0gJ3VuZGVmaW5lZCcgJiYgIXRoaXMuaXNEYXRhRW50cnlNb2RlRW5hYmxlZE9uSW5wdXQodGhpcy5kYXRhZW50cnltb2RlKTtcblxuICAgICAgICAvLyB0aGlzIG1vYmlsZWlucHV0IHdpZHRoIHZhcmllcyBpbiBpb3MgaGVuY2Ugc2V0dGluZyB3aWR0aCBoZXJlLlxuICAgICAgICBjb25zdCBtb2JpbGVJbnB1dCA9IHRoaXMuZ2V0TW9iaWxlSW5wdXQoKTtcbiAgICAgICAgaWYgKG1vYmlsZUlucHV0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBtb2JpbGVJbnB1dC5zdHlsZS53aWR0aCA9ICcxMDAlJztcbiAgICAgICAgICAgICAgICBtb2JpbGVJbnB1dC5zdHlsZS5oZWlnaHQgPSAnMTAwJSc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5kYXRlT25TaG93U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVPblNob3dTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXRhY2goKSB7XG4gICAgICAgIHRoaXMuZGF0ZXRpbWVwaWNrZXJDb21wb25lbnQ/LmhpZGVNb2RhbCgpO1xuICAgIH1cblxuICAgIHNldFRpbWV6b25lKGxvY2FsZSkge1xuICAgICAgICB0aGlzLmkxOG5TZXJ2aWNlLnNldFRpbWV6b25lKGxvY2FsZSwgdGhpcyk7XG4gICAgfVxufVxuIl19