@wavemaker/app-ng-runtime 11.13.0-rc.222 → 11.14.0-rc.226

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 (1024) hide show
  1. package/build-task/bundles/index.umd.js +34 -5
  2. package/build-task/esm2022/basic/anchor/anchor.build.mjs +15 -0
  3. package/build-task/esm2022/basic/audio/audio.build.mjs +10 -0
  4. package/build-task/esm2022/basic/html/html.build.mjs +15 -0
  5. package/build-task/esm2022/basic/icon/icon.build.mjs +10 -0
  6. package/build-task/esm2022/basic/iframe/iframe.build.mjs +10 -0
  7. package/build-task/esm2022/basic/label/label.build.mjs +25 -0
  8. package/build-task/esm2022/basic/picture/picture.build.mjs +14 -0
  9. package/build-task/esm2022/basic/spinner/spinner.build.mjs +15 -0
  10. package/build-task/esm2022/basic/video/video.build.mjs +10 -0
  11. package/build-task/esm2022/data/form/form-field/form-field.build.mjs +8 -3
  12. package/build-task/esm2022/data/form/form.build.mjs +8 -1
  13. package/build-task/esm2022/data/table/table-column/table-column.build.mjs +14 -3
  14. package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +2 -2
  15. package/build-task/esm2022/page/page-content/page-content.build.mjs +8 -2
  16. package/build-task/esm2022/public_api.mjs +10 -10
  17. package/build-task/fesm2022/index.mjs +36 -7
  18. package/build-task/fesm2022/index.mjs.map +1 -1
  19. package/build-task/package.json +3 -6
  20. package/build-task/public_api.d.ts +9 -9
  21. package/components/advanced/carousel/bundles/index.umd.js +33 -38
  22. package/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +16 -16
  23. package/components/advanced/carousel/esm2022/carousel.directive.mjs +19 -24
  24. package/components/advanced/carousel/fesm2022/index.mjs +34 -39
  25. package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
  26. package/components/advanced/carousel/package.json +0 -3
  27. package/components/advanced/custom/bundles/index.umd.js +48 -48
  28. package/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +1 -1
  29. package/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +31 -31
  30. package/components/advanced/custom/esm2022/custom-widget.directive.mjs +15 -15
  31. package/components/advanced/custom/fesm2022/index.mjs +45 -45
  32. package/components/advanced/custom/fesm2022/index.mjs.map +1 -1
  33. package/components/advanced/custom/package.json +0 -3
  34. package/components/advanced/login/bundles/index.umd.js +33 -53
  35. package/components/advanced/login/esm2022/login.component.mjs +26 -47
  36. package/components/advanced/login/fesm2022/index.mjs +27 -47
  37. package/components/advanced/login/fesm2022/index.mjs.map +1 -1
  38. package/components/advanced/login/login.component.d.ts +1 -1
  39. package/components/advanced/login/package.json +0 -3
  40. package/components/advanced/marquee/bundles/index.umd.js +19 -19
  41. package/components/advanced/marquee/esm2022/marquee.directive.mjs +20 -20
  42. package/components/advanced/marquee/fesm2022/index.mjs +20 -20
  43. package/components/advanced/marquee/fesm2022/index.mjs.map +1 -1
  44. package/components/advanced/marquee/package.json +0 -3
  45. package/components/base/bundles/index.umd.js +4272 -4243
  46. package/components/base/esm2022/pipes/custom-pipes.mjs +14 -12
  47. package/components/base/esm2022/pipes/wm-pipe.mjs +3 -3
  48. package/components/base/esm2022/public_api.mjs +1 -2
  49. package/components/base/esm2022/widgets/common/container/container.directive.mjs +154 -1
  50. package/components/base/esm2022/widgets/common/container/container.props.mjs +7 -2
  51. package/components/base/esm2022/widgets/common/redraw/redrawable.directive.mjs +1 -1
  52. package/components/base/fesm2022/index.mjs +4280 -4251
  53. package/components/base/fesm2022/index.mjs.map +1 -1
  54. package/components/base/package.json +2 -2
  55. package/components/base/pipes/custom-pipes.d.ts +4 -2
  56. package/components/base/pipes/wm-pipe.d.ts +1 -1
  57. package/components/base/public_api.d.ts +0 -1
  58. package/components/base/widgets/common/container/container.directive.d.ts +9 -0
  59. package/components/base/widgets/common/pull-to-refresh/pull-to-refresh.d.ts +0 -2
  60. package/components/basic/anchor/bundles/index.umd.js +192 -0
  61. package/components/basic/anchor/esm2022/anchor.component.mjs +143 -0
  62. package/components/basic/anchor/esm2022/anchor.props.mjs +27 -0
  63. package/components/basic/anchor/esm2022/index.mjs +5 -0
  64. package/components/basic/anchor/esm2022/public_api.mjs +2 -0
  65. package/components/basic/anchor/fesm2022/index.mjs +175 -0
  66. package/components/basic/anchor/fesm2022/index.mjs.map +1 -0
  67. package/components/basic/{progress → anchor}/index.d.ts +1 -1
  68. package/components/basic/{default → anchor}/package.json +1 -4
  69. package/components/basic/anchor/public_api.d.ts +1 -0
  70. package/components/basic/audio/bundles/index.umd.js +83 -0
  71. package/components/basic/audio/esm2022/audio.component.mjs +41 -0
  72. package/components/basic/audio/esm2022/audio.props.mjs +19 -0
  73. package/components/{input/epoch → basic/audio}/esm2022/index.mjs +1 -1
  74. package/components/basic/audio/esm2022/public_api.mjs +2 -0
  75. package/components/basic/audio/fesm2022/index.mjs +65 -0
  76. package/components/basic/audio/fesm2022/index.mjs.map +1 -0
  77. package/components/{input/epoch → basic/audio}/index.d.ts +1 -1
  78. package/components/{input/default → basic/audio}/package.json +2 -5
  79. package/components/basic/audio/public_api.d.ts +1 -0
  80. package/components/basic/html/bundles/index.umd.js +110 -0
  81. package/components/basic/html/esm2022/html.directive.mjs +76 -0
  82. package/components/basic/html/esm2022/html.props.mjs +12 -0
  83. package/components/basic/html/esm2022/index.mjs +5 -0
  84. package/components/basic/html/esm2022/public_api.mjs +2 -0
  85. package/components/basic/html/fesm2022/index.mjs +93 -0
  86. package/components/basic/html/fesm2022/index.mjs.map +1 -0
  87. package/components/basic/{default → html}/index.d.ts +1 -1
  88. package/components/{input/epoch → basic/html}/package.json +1 -4
  89. package/components/basic/html/public_api.d.ts +1 -0
  90. package/components/basic/icon/bundles/index.umd.js +80 -0
  91. package/components/basic/icon/esm2022/icon.component.mjs +38 -0
  92. package/components/basic/icon/esm2022/icon.props.mjs +19 -0
  93. package/components/basic/icon/esm2022/index.mjs +5 -0
  94. package/components/basic/icon/esm2022/public_api.mjs +2 -0
  95. package/components/basic/icon/fesm2022/index.mjs +62 -0
  96. package/components/basic/icon/fesm2022/index.mjs.map +1 -0
  97. package/components/{input/default → basic/icon}/index.d.ts +1 -1
  98. package/components/basic/{progress → icon}/package.json +1 -4
  99. package/components/basic/icon/public_api.d.ts +1 -0
  100. package/components/basic/iframe/.npmignore +2 -0
  101. package/components/basic/iframe/bundles/index.umd.js +101 -0
  102. package/components/basic/iframe/esm2022/iframe.component.mjs +65 -0
  103. package/components/basic/iframe/esm2022/iframe.props.mjs +15 -0
  104. package/components/basic/iframe/esm2022/index.mjs +5 -0
  105. package/components/basic/iframe/esm2022/public_api.mjs +2 -0
  106. package/components/basic/iframe/fesm2022/index.mjs +84 -0
  107. package/components/basic/iframe/fesm2022/index.mjs.map +1 -0
  108. package/components/basic/iframe/index.d.ts +5 -0
  109. package/components/basic/iframe/package.json +20 -0
  110. package/components/basic/iframe/public_api.d.ts +1 -0
  111. package/components/basic/label/.npmignore +2 -0
  112. package/components/basic/label/bundles/index.umd.js +109 -0
  113. package/components/basic/label/esm2022/index.mjs +5 -0
  114. package/components/basic/label/esm2022/label.directive.mjs +71 -0
  115. package/components/basic/label/esm2022/label.props.mjs +17 -0
  116. package/components/basic/label/esm2022/public_api.mjs +2 -0
  117. package/components/basic/label/fesm2022/index.mjs +93 -0
  118. package/components/basic/label/fesm2022/index.mjs.map +1 -0
  119. package/components/basic/label/index.d.ts +5 -0
  120. package/components/basic/{default/label → label}/label.directive.d.ts +1 -1
  121. package/components/basic/label/package.json +20 -0
  122. package/components/basic/label/public_api.d.ts +1 -0
  123. package/components/basic/picture/.npmignore +2 -0
  124. package/components/basic/picture/bundles/index.umd.js +138 -0
  125. package/components/basic/{default → picture}/esm2022/index.mjs +1 -1
  126. package/components/basic/picture/esm2022/picture.directive.mjs +93 -0
  127. package/components/basic/picture/esm2022/picture.props.mjs +23 -0
  128. package/components/basic/picture/esm2022/public_api.mjs +2 -0
  129. package/components/basic/picture/fesm2022/index.mjs +121 -0
  130. package/components/basic/picture/fesm2022/index.mjs.map +1 -0
  131. package/components/basic/picture/index.d.ts +5 -0
  132. package/components/basic/picture/package.json +20 -0
  133. package/components/basic/picture/public_api.d.ts +1 -0
  134. package/components/basic/progress/progress-bar/.npmignore +2 -0
  135. package/components/basic/progress/progress-bar/bundles/index.umd.js +170 -0
  136. package/components/basic/progress/progress-bar/esm2022/index.mjs +5 -0
  137. package/components/basic/progress/progress-bar/esm2022/progress-bar.component.mjs +130 -0
  138. package/components/basic/progress/{esm2022/progress-bar → progress-bar/esm2022}/progress-bar.props.mjs +1 -1
  139. package/components/basic/progress/progress-bar/esm2022/public_api.mjs +2 -0
  140. package/components/basic/progress/progress-bar/fesm2022/index.mjs +154 -0
  141. package/components/basic/progress/progress-bar/fesm2022/index.mjs.map +1 -0
  142. package/components/basic/progress/progress-bar/index.d.ts +5 -0
  143. package/components/basic/progress/progress-bar/package.json +20 -0
  144. package/components/basic/progress/progress-bar/public_api.d.ts +1 -0
  145. package/components/basic/progress/progress-circle/.npmignore +2 -0
  146. package/components/basic/progress/progress-circle/bundles/index.umd.js +161 -0
  147. package/components/basic/progress/progress-circle/esm2022/index.mjs +5 -0
  148. package/components/basic/progress/progress-circle/esm2022/progress-circle.component.mjs +120 -0
  149. package/components/basic/progress/{esm2022/progress-circle → progress-circle/esm2022}/progress-circle.props.mjs +1 -1
  150. package/components/basic/progress/progress-circle/esm2022/public_api.mjs +2 -0
  151. package/components/basic/progress/progress-circle/fesm2022/index.mjs +145 -0
  152. package/components/basic/progress/progress-circle/fesm2022/index.mjs.map +1 -0
  153. package/components/basic/progress/progress-circle/index.d.ts +5 -0
  154. package/components/basic/progress/progress-circle/package.json +20 -0
  155. package/components/basic/progress/progress-circle/public_api.d.ts +1 -0
  156. package/components/basic/progress/progress-utils/.npmignore +2 -0
  157. package/components/basic/progress/progress-utils/bundles/index.umd.js +35 -0
  158. package/components/basic/progress/progress-utils/esm2022/index.mjs +5 -0
  159. package/components/basic/progress/progress-utils/esm2022/progress-utils.mjs +25 -0
  160. package/components/basic/progress/progress-utils/esm2022/public_api.mjs +2 -0
  161. package/components/basic/progress/progress-utils/fesm2022/index.mjs +32 -0
  162. package/components/basic/progress/progress-utils/fesm2022/index.mjs.map +1 -0
  163. package/components/basic/progress/progress-utils/index.d.ts +5 -0
  164. package/components/basic/progress/progress-utils/package.json +20 -0
  165. package/components/basic/progress/progress-utils/public_api.d.ts +1 -0
  166. package/components/basic/rich-text-editor/bundles/index.umd.js +23 -40
  167. package/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +19 -38
  168. package/components/basic/rich-text-editor/fesm2022/index.mjs +21 -39
  169. package/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
  170. package/components/basic/rich-text-editor/package.json +0 -3
  171. package/components/basic/rich-text-editor/rich-text-editor.component.d.ts +1 -1
  172. package/components/basic/search/bundles/index.umd.js +109 -313
  173. package/components/basic/search/esm2022/scrollable.directive.mjs +13 -14
  174. package/components/basic/search/esm2022/search.component.mjs +40 -246
  175. package/components/basic/search/fesm2022/index.mjs +52 -256
  176. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  177. package/components/basic/search/package.json +0 -3
  178. package/components/basic/search/scrollable.directive.d.ts +2 -3
  179. package/components/basic/search/search.component.d.ts +1 -1
  180. package/components/basic/spinner/.npmignore +2 -0
  181. package/components/basic/spinner/bundles/index.umd.js +118 -0
  182. package/components/{input/default → basic/spinner}/esm2022/index.mjs +1 -1
  183. package/components/basic/spinner/esm2022/public_api.mjs +2 -0
  184. package/components/basic/spinner/esm2022/spinner.component.mjs +79 -0
  185. package/components/basic/spinner/esm2022/spinner.props.mjs +20 -0
  186. package/components/basic/spinner/fesm2022/index.mjs +103 -0
  187. package/components/basic/spinner/fesm2022/index.mjs.map +1 -0
  188. package/components/basic/spinner/index.d.ts +5 -0
  189. package/components/basic/spinner/package.json +20 -0
  190. package/components/basic/spinner/public_api.d.ts +1 -0
  191. package/components/basic/tree/bundles/index.umd.js +34 -38
  192. package/components/basic/tree/esm2022/tree.component.mjs +31 -36
  193. package/components/basic/tree/fesm2022/index.mjs +32 -36
  194. package/components/basic/tree/fesm2022/index.mjs.map +1 -1
  195. package/components/basic/tree/package.json +0 -3
  196. package/components/basic/video/.npmignore +2 -0
  197. package/components/basic/video/bundles/index.umd.js +116 -0
  198. package/components/basic/video/esm2022/index.mjs +5 -0
  199. package/components/basic/video/esm2022/public_api.mjs +2 -0
  200. package/components/basic/video/esm2022/video.component.mjs +70 -0
  201. package/components/basic/video/esm2022/video.props.mjs +24 -0
  202. package/components/basic/video/fesm2022/index.mjs +99 -0
  203. package/components/basic/video/fesm2022/index.mjs.map +1 -0
  204. package/components/basic/video/index.d.ts +5 -0
  205. package/components/basic/video/package.json +20 -0
  206. package/components/basic/video/public_api.d.ts +1 -0
  207. package/components/chart/bundles/index.umd.js +22 -75
  208. package/components/chart/esm2022/chart.component.mjs +20 -74
  209. package/components/chart/fesm2022/index.mjs +21 -74
  210. package/components/chart/fesm2022/index.mjs.map +1 -1
  211. package/components/chart/package.json +0 -3
  212. package/components/containers/accordion/bundles/index.umd.js +45 -100
  213. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +19 -70
  214. package/components/containers/accordion/esm2022/accordion.directive.mjs +24 -29
  215. package/components/containers/accordion/fesm2022/index.mjs +43 -98
  216. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  217. package/components/containers/accordion/package.json +0 -3
  218. package/components/containers/layout-grid/bundles/index.umd.js +60 -60
  219. package/components/containers/layout-grid/esm2022/layout-grid-column/layout-grid-column.directive.mjs +23 -23
  220. package/components/containers/layout-grid/esm2022/layout-grid-row/layout-grid-row.directive.mjs +20 -20
  221. package/components/containers/layout-grid/esm2022/layout-grid.directive.mjs +20 -20
  222. package/components/containers/layout-grid/fesm2022/index.mjs +61 -61
  223. package/components/containers/layout-grid/fesm2022/index.mjs.map +1 -1
  224. package/components/containers/layout-grid/package.json +0 -3
  225. package/components/containers/linear-layout/bundles/index.umd.js +38 -38
  226. package/components/containers/linear-layout/esm2022/linear-layout-item/linear-layout-item.directive.mjs +20 -20
  227. package/components/containers/linear-layout/esm2022/linear-layout.directive.mjs +20 -20
  228. package/components/containers/linear-layout/fesm2022/index.mjs +39 -39
  229. package/components/containers/linear-layout/fesm2022/index.mjs.map +1 -1
  230. package/components/containers/linear-layout/package.json +0 -3
  231. package/components/containers/panel/bundles/index.umd.js +62 -223
  232. package/components/containers/panel/esm2022/panel.component.mjs +29 -190
  233. package/components/containers/panel/fesm2022/index.mjs +29 -190
  234. package/components/containers/panel/fesm2022/index.mjs.map +1 -1
  235. package/components/containers/panel/package.json +0 -3
  236. package/components/containers/tabs/bundles/index.umd.js +95 -204
  237. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +34 -51
  238. package/components/containers/tabs/esm2022/tabs.component.mjs +29 -123
  239. package/components/containers/tabs/fesm2022/index.mjs +61 -170
  240. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  241. package/components/containers/tabs/package.json +0 -3
  242. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +3 -4
  243. package/components/containers/tile/bundles/index.umd.js +19 -19
  244. package/components/containers/tile/esm2022/tile.directive.mjs +20 -20
  245. package/components/containers/tile/fesm2022/index.mjs +20 -20
  246. package/components/containers/tile/fesm2022/index.mjs.map +1 -1
  247. package/components/containers/tile/package.json +0 -3
  248. package/components/containers/wizard/bundles/index.umd.js +119 -302
  249. package/components/containers/wizard/esm2022/wizard-action/wizard-action.directive.mjs +21 -21
  250. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +32 -45
  251. package/components/containers/wizard/esm2022/wizard.component.mjs +30 -201
  252. package/components/containers/wizard/fesm2022/index.mjs +81 -264
  253. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  254. package/components/containers/wizard/package.json +0 -3
  255. package/components/containers/wizard/wizard.component.d.ts +1 -1
  256. package/components/data/card/bundles/index.umd.js +108 -208
  257. package/components/data/card/esm2022/card-actions/card-actions.directive.mjs +15 -15
  258. package/components/data/card/esm2022/card-content/card-content.component.mjs +19 -34
  259. package/components/data/card/esm2022/card-footer/card-footer.directive.mjs +15 -15
  260. package/components/data/card/esm2022/card.component.mjs +21 -107
  261. package/components/data/card/fesm2022/index.mjs +67 -167
  262. package/components/data/card/fesm2022/index.mjs.map +1 -1
  263. package/components/data/card/package.json +0 -3
  264. package/components/data/form/bundles/index.umd.js +287 -467
  265. package/components/data/form/esm2022/form-action/form-action.directive.mjs +22 -22
  266. package/components/data/form/esm2022/form-field/form-field.directive.mjs +80 -91
  267. package/components/data/form/esm2022/form-widget.directive.mjs +31 -31
  268. package/components/data/form/esm2022/form.component.mjs +88 -251
  269. package/components/data/form/esm2022/form.props.mjs +1 -1
  270. package/components/data/form/esm2022/live-actions/dependson.directive.mjs +19 -24
  271. package/components/data/form/esm2022/live-actions/live-actions.directive.mjs +15 -15
  272. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +15 -15
  273. package/components/data/form/esm2022/live-form/live-form.directive.mjs +23 -25
  274. package/components/data/form/fesm2022/index.mjs +288 -468
  275. package/components/data/form/fesm2022/index.mjs.map +1 -1
  276. package/components/data/form/package.json +0 -3
  277. package/components/data/list/bundles/index.umd.js +80 -360
  278. package/components/data/list/esm2022/list-item.directive.mjs +27 -34
  279. package/components/data/list/esm2022/list.animator.mjs +1 -1
  280. package/components/data/list/esm2022/list.component.mjs +55 -330
  281. package/components/data/list/esm2022/list.props.mjs +1 -1
  282. package/components/data/list/fesm2022/index.mjs +79 -358
  283. package/components/data/list/fesm2022/index.mjs.map +1 -1
  284. package/components/data/list/list-item.directive.d.ts +3 -3
  285. package/components/data/list/list.component.d.ts +2 -4
  286. package/components/data/list/package.json +0 -3
  287. package/components/data/live-table/bundles/index.umd.js +28 -39
  288. package/components/data/live-table/esm2022/live-table.component.mjs +25 -37
  289. package/components/data/live-table/fesm2022/index.mjs +26 -37
  290. package/components/data/live-table/fesm2022/index.mjs.map +1 -1
  291. package/components/data/live-table/package.json +0 -3
  292. package/components/data/pagination/bundles/index.umd.js +33 -505
  293. package/components/data/pagination/esm2022/pagination.component.mjs +33 -507
  294. package/components/data/pagination/esm2022/pagination.props.mjs +1 -1
  295. package/components/data/pagination/fesm2022/index.mjs +32 -505
  296. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  297. package/components/data/pagination/package.json +0 -3
  298. package/components/data/pagination/pagination.component.d.ts +1 -1
  299. package/components/data/table/bundles/index.umd.js +310 -457
  300. package/components/data/table/esm2022/table-action/table-action.directive.mjs +22 -22
  301. package/components/data/table/esm2022/table-column/table-column.directive.mjs +50 -71
  302. package/components/data/table/esm2022/table-column/table-column.props.mjs +1 -1
  303. package/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +26 -26
  304. package/components/data/table/esm2022/table-cud.directive.mjs +15 -15
  305. package/components/data/table/esm2022/table-filter.directive.mjs +16 -16
  306. package/components/data/table/esm2022/table-row/table-row.directive.mjs +24 -24
  307. package/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +29 -29
  308. package/components/data/table/esm2022/table.component.mjs +135 -263
  309. package/components/data/table/esm2022/table.props.mjs +2 -1
  310. package/components/data/table/fesm2022/index.mjs +312 -459
  311. package/components/data/table/fesm2022/index.mjs.map +1 -1
  312. package/components/data/table/package.json +0 -3
  313. package/components/data/table/table-column/table-column.directive.d.ts +1 -1
  314. package/components/data/table/table.component.d.ts +3 -0
  315. package/components/dialogs/alert-dialog/bundles/index.umd.js +50 -79
  316. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +32 -62
  317. package/components/dialogs/alert-dialog/fesm2022/index.mjs +32 -61
  318. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  319. package/components/dialogs/alert-dialog/package.json +0 -3
  320. package/components/dialogs/confirm-dialog/bundles/index.umd.js +36 -72
  321. package/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +34 -71
  322. package/components/dialogs/confirm-dialog/fesm2022/index.mjs +35 -71
  323. package/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
  324. package/components/dialogs/confirm-dialog/package.json +0 -3
  325. package/components/dialogs/default/bundles/index.umd.js +85 -232
  326. package/components/dialogs/default/esm2022/base-dialog.mjs +14 -14
  327. package/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +16 -18
  328. package/components/dialogs/default/esm2022/dialog-footer/dialog-footer.directive.mjs +20 -20
  329. package/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +34 -179
  330. package/components/dialogs/default/fesm2022/index.mjs +80 -227
  331. package/components/dialogs/default/fesm2022/index.mjs.map +1 -1
  332. package/components/dialogs/default/package.json +0 -3
  333. package/components/dialogs/design-dialog/bundles/index.umd.js +52 -108
  334. package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +50 -107
  335. package/components/dialogs/design-dialog/fesm2022/index.mjs +51 -107
  336. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  337. package/components/dialogs/design-dialog/package.json +0 -3
  338. package/components/dialogs/iframe-dialog/bundles/index.umd.js +33 -81
  339. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +32 -82
  340. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +33 -82
  341. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  342. package/components/dialogs/iframe-dialog/package.json +0 -3
  343. package/components/dialogs/login-dialog/bundles/index.umd.js +22 -29
  344. package/components/dialogs/login-dialog/esm2022/login-dialog.directive.mjs +23 -30
  345. package/components/dialogs/login-dialog/fesm2022/index.mjs +23 -30
  346. package/components/dialogs/login-dialog/fesm2022/index.mjs.map +1 -1
  347. package/components/dialogs/login-dialog/package.json +0 -3
  348. package/components/dialogs/partial-dialog/bundles/index.umd.js +39 -85
  349. package/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +38 -85
  350. package/components/dialogs/partial-dialog/fesm2022/index.mjs +39 -85
  351. package/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
  352. package/components/dialogs/partial-dialog/package.json +0 -3
  353. package/components/input/base-form/.npmignore +2 -0
  354. package/components/input/base-form/bundles/index.umd.js +133 -0
  355. package/components/input/base-form/esm2022/base-form.component.mjs +110 -0
  356. package/components/input/base-form/esm2022/index.mjs +5 -0
  357. package/components/input/base-form/esm2022/public_api.mjs +2 -0
  358. package/components/input/base-form/fesm2022/index.mjs +117 -0
  359. package/components/input/base-form/fesm2022/index.mjs.map +1 -0
  360. package/components/input/base-form/index.d.ts +5 -0
  361. package/components/input/base-form/package.json +20 -0
  362. package/components/input/base-form/public_api.d.ts +1 -0
  363. package/components/input/base-form-custom/.npmignore +2 -0
  364. package/components/input/{default → base-form-custom}/base-form-custom.component.d.ts +1 -1
  365. package/components/input/base-form-custom/bundles/index.umd.js +118 -0
  366. package/components/input/base-form-custom/esm2022/base-form-custom.component.mjs +94 -0
  367. package/components/input/base-form-custom/esm2022/index.mjs +5 -0
  368. package/components/input/base-form-custom/esm2022/public_api.mjs +2 -0
  369. package/components/input/base-form-custom/fesm2022/index.mjs +101 -0
  370. package/components/input/base-form-custom/fesm2022/index.mjs.map +1 -0
  371. package/components/input/base-form-custom/index.d.ts +5 -0
  372. package/components/input/base-form-custom/package.json +20 -0
  373. package/components/input/base-form-custom/public_api.d.ts +1 -0
  374. package/components/input/button/.npmignore +2 -0
  375. package/components/input/button/bundles/index.umd.js +98 -0
  376. package/components/input/button/esm2022/button.component.mjs +50 -0
  377. package/components/input/button/esm2022/button.props.mjs +26 -0
  378. package/components/input/button/esm2022/index.mjs +5 -0
  379. package/components/input/button/esm2022/public_api.mjs +2 -0
  380. package/components/input/button/fesm2022/index.mjs +81 -0
  381. package/components/input/button/fesm2022/index.mjs.map +1 -0
  382. package/components/input/button/index.d.ts +5 -0
  383. package/components/input/button/package.json +20 -0
  384. package/components/input/button/public_api.d.ts +1 -0
  385. package/components/input/button-group/.npmignore +2 -0
  386. package/components/input/button-group/bundles/index.umd.js +80 -0
  387. package/components/input/button-group/esm2022/button-group.directive.mjs +47 -0
  388. package/components/input/button-group/esm2022/button-group.props.mjs +10 -0
  389. package/components/input/button-group/esm2022/index.mjs +5 -0
  390. package/components/input/button-group/esm2022/public_api.mjs +2 -0
  391. package/components/input/button-group/fesm2022/index.mjs +62 -0
  392. package/components/input/button-group/fesm2022/index.mjs.map +1 -0
  393. package/components/input/button-group/index.d.ts +5 -0
  394. package/components/input/button-group/package.json +20 -0
  395. package/components/input/button-group/public_api.d.ts +1 -0
  396. package/components/input/calendar/bundles/index.umd.js +25 -38
  397. package/components/input/calendar/esm2022/calendar.component.mjs +22 -36
  398. package/components/input/calendar/fesm2022/index.mjs +23 -36
  399. package/components/input/calendar/fesm2022/index.mjs.map +1 -1
  400. package/components/input/calendar/package.json +0 -3
  401. package/components/input/caption-position/.npmignore +2 -0
  402. package/components/input/caption-position/bundles/index.umd.js +196 -0
  403. package/components/input/caption-position/esm2022/caption-position.directive.mjs +172 -0
  404. package/components/input/caption-position/esm2022/index.mjs +5 -0
  405. package/components/input/caption-position/esm2022/public_api.mjs +2 -0
  406. package/components/input/caption-position/fesm2022/index.mjs +178 -0
  407. package/components/input/caption-position/fesm2022/index.mjs.map +1 -0
  408. package/components/input/caption-position/index.d.ts +5 -0
  409. package/components/input/caption-position/package.json +20 -0
  410. package/components/input/caption-position/public_api.d.ts +1 -0
  411. package/components/input/checkbox/.npmignore +2 -0
  412. package/components/input/checkbox/bundles/index.umd.js +190 -0
  413. package/components/input/{default/checkbox → checkbox}/checkbox.component.d.ts +1 -1
  414. package/components/input/checkbox/esm2022/checkbox.component.mjs +145 -0
  415. package/components/input/checkbox/esm2022/checkbox.props.mjs +27 -0
  416. package/components/{basic/progress → input/checkbox}/esm2022/index.mjs +1 -1
  417. package/components/input/checkbox/esm2022/public_api.mjs +2 -0
  418. package/components/input/checkbox/fesm2022/index.mjs +175 -0
  419. package/components/input/checkbox/fesm2022/index.mjs.map +1 -0
  420. package/components/input/checkbox/index.d.ts +5 -0
  421. package/components/input/checkbox/package.json +20 -0
  422. package/components/input/checkbox/public_api.d.ts +1 -0
  423. package/components/input/checkboxset/.npmignore +2 -0
  424. package/components/input/checkboxset/bundles/index.umd.js +151 -0
  425. package/components/input/{default/checkboxset → checkboxset}/checkboxset.component.d.ts +1 -1
  426. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +99 -0
  427. package/components/input/checkboxset/esm2022/checkboxset.props.mjs +35 -0
  428. package/components/input/checkboxset/esm2022/index.mjs +5 -0
  429. package/components/input/checkboxset/esm2022/public_api.mjs +2 -0
  430. package/components/input/checkboxset/fesm2022/index.mjs +138 -0
  431. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -0
  432. package/components/input/checkboxset/index.d.ts +5 -0
  433. package/components/input/checkboxset/package.json +20 -0
  434. package/components/input/checkboxset/public_api.d.ts +1 -0
  435. package/components/input/chips/bundles/index.umd.js +94 -153
  436. package/components/input/chips/chips.component.d.ts +1 -1
  437. package/components/input/chips/esm2022/chips.component.mjs +41 -101
  438. package/components/input/chips/fesm2022/index.mjs +42 -101
  439. package/components/input/chips/fesm2022/index.mjs.map +1 -1
  440. package/components/input/chips/package.json +0 -3
  441. package/components/input/color-picker/bundles/index.umd.js +35 -74
  442. package/components/input/color-picker/color-picker.component.d.ts +2 -2
  443. package/components/input/color-picker/esm2022/color-picker.component.mjs +34 -75
  444. package/components/input/color-picker/fesm2022/index.mjs +36 -75
  445. package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  446. package/components/input/color-picker/package.json +0 -3
  447. package/components/input/composite/.npmignore +2 -0
  448. package/components/input/composite/bundles/index.umd.js +111 -0
  449. package/components/input/composite/esm2022/composite.directive.mjs +79 -0
  450. package/components/input/composite/esm2022/composite.props.mjs +10 -0
  451. package/components/input/composite/esm2022/index.mjs +5 -0
  452. package/components/input/composite/esm2022/public_api.mjs +2 -0
  453. package/components/input/composite/fesm2022/index.mjs +94 -0
  454. package/components/input/composite/fesm2022/index.mjs.map +1 -0
  455. package/components/input/composite/index.d.ts +5 -0
  456. package/components/input/composite/package.json +20 -0
  457. package/components/input/composite/public_api.d.ts +1 -0
  458. package/components/input/currency/bundles/index.umd.js +31 -52
  459. package/components/input/currency/currency.component.d.ts +1 -1
  460. package/components/input/currency/esm2022/currency.component.mjs +28 -50
  461. package/components/input/currency/fesm2022/index.mjs +30 -51
  462. package/components/input/currency/fesm2022/index.mjs.map +1 -1
  463. package/components/input/currency/package.json +0 -3
  464. package/components/input/dataset-aware-form/.npmignore +2 -0
  465. package/components/input/dataset-aware-form/bundles/index.umd.js +328 -0
  466. package/components/input/{default → dataset-aware-form}/dataset-aware-form.component.d.ts +1 -1
  467. package/components/input/dataset-aware-form/esm2022/dataset-aware-form.component.mjs +307 -0
  468. package/components/input/dataset-aware-form/esm2022/index.mjs +5 -0
  469. package/components/input/dataset-aware-form/esm2022/public_api.mjs +2 -0
  470. package/components/input/dataset-aware-form/fesm2022/index.mjs +314 -0
  471. package/components/input/dataset-aware-form/fesm2022/index.mjs.map +1 -0
  472. package/components/input/dataset-aware-form/index.d.ts +5 -0
  473. package/components/input/dataset-aware-form/package.json +20 -0
  474. package/components/input/dataset-aware-form/public_api.d.ts +1 -0
  475. package/components/input/epoch/base-date-time/.npmignore +2 -0
  476. package/components/input/epoch/{base-date-time.component.d.ts → base-date-time/base-date-time.component.d.ts} +1 -1
  477. package/components/input/epoch/base-date-time/bundles/index.umd.js +1086 -0
  478. package/components/input/epoch/{esm2022 → base-date-time/esm2022}/base-date-time.component.mjs +22 -31
  479. package/components/input/epoch/base-date-time/esm2022/index.mjs +5 -0
  480. package/components/input/epoch/base-date-time/esm2022/public_api.mjs +2 -0
  481. package/components/input/epoch/base-date-time/fesm2022/index.mjs +1077 -0
  482. package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -0
  483. package/components/input/epoch/base-date-time/index.d.ts +5 -0
  484. package/components/input/epoch/base-date-time/package.json +20 -0
  485. package/components/input/epoch/base-date-time/public_api.d.ts +1 -0
  486. package/components/input/epoch/date/.npmignore +2 -0
  487. package/components/input/epoch/date/bundles/index.umd.js +492 -0
  488. package/components/input/epoch/date/date.component.d.ts +2 -2
  489. package/components/input/epoch/date/esm2022/date.component.mjs +322 -0
  490. package/components/input/epoch/{esm2022/date → date/esm2022}/date.props.mjs +1 -1
  491. package/components/input/epoch/{esm2022/date → date/esm2022}/imaskUtil.mjs +1 -1
  492. package/components/input/epoch/date/esm2022/index.mjs +5 -0
  493. package/components/input/epoch/date/esm2022/public_api.mjs +2 -0
  494. package/components/input/epoch/date/fesm2022/index.mjs +482 -0
  495. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -0
  496. package/components/input/epoch/date/index.d.ts +5 -0
  497. package/components/input/epoch/date/package.json +20 -0
  498. package/components/input/epoch/date/public_api.d.ts +1 -0
  499. package/components/input/epoch/date-time/.npmignore +2 -0
  500. package/components/input/epoch/date-time/bundles/index.umd.js +518 -0
  501. package/components/input/epoch/date-time/date-time.component.d.ts +1 -1
  502. package/components/input/epoch/date-time/esm2022/date-time.component.mjs +458 -0
  503. package/components/input/epoch/{esm2022/date-time → date-time/esm2022}/date-time.props.mjs +1 -1
  504. package/components/input/epoch/date-time/esm2022/index.mjs +5 -0
  505. package/components/input/epoch/date-time/esm2022/public_api.mjs +2 -0
  506. package/components/input/epoch/date-time/fesm2022/index.mjs +509 -0
  507. package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -0
  508. package/components/input/epoch/date-time/index.d.ts +5 -0
  509. package/components/input/epoch/date-time/package.json +20 -0
  510. package/components/input/epoch/date-time/public_api.d.ts +1 -0
  511. package/components/input/epoch/date-time-picker/.npmignore +2 -0
  512. package/components/input/epoch/date-time-picker/bundles/index.umd.js +453 -0
  513. package/components/input/epoch/date-time-picker/esm2022/date-time-picker.component.mjs +433 -0
  514. package/components/input/epoch/date-time-picker/esm2022/index.mjs +5 -0
  515. package/components/input/epoch/date-time-picker/esm2022/public_api.mjs +2 -0
  516. package/components/input/epoch/date-time-picker/fesm2022/index.mjs +439 -0
  517. package/components/input/epoch/date-time-picker/fesm2022/index.mjs.map +1 -0
  518. package/components/input/epoch/date-time-picker/index.d.ts +5 -0
  519. package/components/input/epoch/date-time-picker/package.json +20 -0
  520. package/components/input/epoch/date-time-picker/public_api.d.ts +1 -0
  521. package/components/input/epoch/picker/.npmignore +2 -0
  522. package/components/input/epoch/picker/bundles/index.umd.js +192 -0
  523. package/components/input/epoch/picker/esm2022/index.mjs +5 -0
  524. package/components/input/epoch/picker/esm2022/picker.component.mjs +165 -0
  525. package/components/input/epoch/picker/esm2022/public_api.mjs +3 -0
  526. package/components/input/epoch/picker/fesm2022/index.mjs +172 -0
  527. package/components/input/epoch/picker/fesm2022/index.mjs.map +1 -0
  528. package/components/input/epoch/picker/index.d.ts +5 -0
  529. package/components/input/epoch/picker/package.json +20 -0
  530. package/components/input/epoch/picker/public_api.d.ts +2 -0
  531. package/components/input/epoch/time/.npmignore +2 -0
  532. package/components/input/epoch/time/bundles/index.umd.js +397 -0
  533. package/components/input/epoch/time/esm2022/index.mjs +5 -0
  534. package/components/input/epoch/time/esm2022/public_api.mjs +2 -0
  535. package/components/input/epoch/time/esm2022/time.component.mjs +348 -0
  536. package/components/input/epoch/{esm2022/time → time/esm2022}/time.props.mjs +1 -1
  537. package/components/input/epoch/time/fesm2022/index.mjs +387 -0
  538. package/components/input/epoch/time/fesm2022/index.mjs.map +1 -0
  539. package/components/input/epoch/time/index.d.ts +5 -0
  540. package/components/input/epoch/time/package.json +20 -0
  541. package/components/input/epoch/time/public_api.d.ts +1 -0
  542. package/components/input/epoch/time/time.component.d.ts +1 -1
  543. package/components/input/file-upload/bundles/index.umd.js +56 -348
  544. package/components/input/file-upload/esm2022/file-upload.component.mjs +20 -313
  545. package/components/input/file-upload/fesm2022/index.mjs +20 -312
  546. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  547. package/components/input/file-upload/package.json +0 -3
  548. package/components/input/number/.npmignore +2 -0
  549. package/components/input/number/bundles/index.umd.js +101 -0
  550. package/components/input/number/esm2022/index.mjs +5 -0
  551. package/components/input/number/esm2022/number.component.mjs +49 -0
  552. package/components/input/number/esm2022/number.props.mjs +35 -0
  553. package/components/input/number/esm2022/public_api.mjs +2 -0
  554. package/components/input/number/fesm2022/index.mjs +87 -0
  555. package/components/input/number/fesm2022/index.mjs.map +1 -0
  556. package/components/input/number/index.d.ts +5 -0
  557. package/components/input/{default/number → number}/number.component.d.ts +1 -1
  558. package/components/input/number/package.json +20 -0
  559. package/components/input/number/public_api.d.ts +1 -0
  560. package/components/input/radioset/.npmignore +2 -0
  561. package/components/input/radioset/bundles/index.umd.js +136 -0
  562. package/components/input/radioset/esm2022/index.mjs +5 -0
  563. package/components/input/radioset/esm2022/public_api.mjs +2 -0
  564. package/components/input/radioset/esm2022/radioset.component.mjs +84 -0
  565. package/components/input/radioset/esm2022/radioset.props.mjs +35 -0
  566. package/components/input/radioset/fesm2022/index.mjs +123 -0
  567. package/components/input/radioset/fesm2022/index.mjs.map +1 -0
  568. package/components/input/radioset/index.d.ts +5 -0
  569. package/components/input/radioset/package.json +20 -0
  570. package/components/input/radioset/public_api.d.ts +1 -0
  571. package/components/input/{default/radioset → radioset}/radioset.component.d.ts +1 -1
  572. package/components/input/rating/bundles/index.umd.js +49 -103
  573. package/components/input/rating/esm2022/rating.component.mjs +24 -79
  574. package/components/input/rating/fesm2022/index.mjs +25 -79
  575. package/components/input/rating/fesm2022/index.mjs.map +1 -1
  576. package/components/input/rating/package.json +0 -3
  577. package/components/input/rating/rating.component.d.ts +1 -1
  578. package/components/input/select/.npmignore +2 -0
  579. package/components/input/select/bundles/index.umd.js +219 -0
  580. package/components/input/select/esm2022/index.mjs +5 -0
  581. package/components/input/select/esm2022/public_api.mjs +2 -0
  582. package/components/input/select/esm2022/select.component.mjs +166 -0
  583. package/components/input/select/esm2022/select.props.mjs +36 -0
  584. package/components/input/select/fesm2022/index.mjs +205 -0
  585. package/components/input/select/fesm2022/index.mjs.map +1 -0
  586. package/components/input/select/index.d.ts +5 -0
  587. package/components/input/select/package.json +20 -0
  588. package/components/input/select/public_api.d.ts +1 -0
  589. package/components/input/{default/select → select}/select.component.d.ts +1 -1
  590. package/components/input/slider/bundles/index.umd.js +44 -111
  591. package/components/input/slider/esm2022/slider.component.mjs +25 -95
  592. package/components/input/slider/esm2022/slider.props.mjs +1 -1
  593. package/components/input/slider/fesm2022/index.mjs +25 -93
  594. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  595. package/components/input/slider/package.json +0 -3
  596. package/components/input/slider/slider.component.d.ts +2 -2
  597. package/components/input/switch/.npmignore +2 -0
  598. package/components/input/switch/bundles/index.umd.js +204 -0
  599. package/components/input/switch/esm2022/index.mjs +5 -0
  600. package/components/input/switch/esm2022/public_api.mjs +2 -0
  601. package/components/input/switch/esm2022/switch.component.mjs +159 -0
  602. package/components/input/switch/esm2022/switch.props.mjs +28 -0
  603. package/components/input/switch/fesm2022/index.mjs +191 -0
  604. package/components/input/switch/fesm2022/index.mjs.map +1 -0
  605. package/components/input/switch/index.d.ts +5 -0
  606. package/components/input/switch/package.json +20 -0
  607. package/components/input/switch/public_api.d.ts +1 -0
  608. package/components/input/{default/switch → switch}/switch.component.d.ts +1 -1
  609. package/components/input/text/.npmignore +2 -0
  610. package/components/input/{default/text/base → text/base-input}/base-input.d.ts +1 -1
  611. package/components/input/text/bundles/index.umd.js +1070 -0
  612. package/components/input/text/esm2022/base-input/base-input.mjs +93 -0
  613. package/components/input/text/esm2022/index.mjs +5 -0
  614. package/components/input/text/esm2022/input-calendar/input-calendar.component.mjs +46 -0
  615. package/components/input/text/esm2022/input-calendar/input-calendar.props.mjs +30 -0
  616. package/components/input/text/esm2022/input-color/input-color.component.mjs +46 -0
  617. package/components/input/text/esm2022/input-color/input-color.props.mjs +27 -0
  618. package/components/input/text/esm2022/input-email/input-email.component.mjs +46 -0
  619. package/components/input/text/esm2022/input-email/input-email.props.mjs +29 -0
  620. package/components/input/text/esm2022/input-number/input-number.component.mjs +56 -0
  621. package/components/input/text/esm2022/input-number/input-number.props.mjs +32 -0
  622. package/components/input/text/esm2022/input-text/input-text.component.mjs +121 -0
  623. package/components/input/text/esm2022/input-text/input-text.props.mjs +46 -0
  624. package/components/input/text/esm2022/number-locale/number-locale.mjs +539 -0
  625. package/components/input/text/esm2022/public_api.mjs +8 -0
  626. package/components/input/text/fesm2022/index.mjs +1054 -0
  627. package/components/input/text/fesm2022/index.mjs.map +1 -0
  628. package/components/input/text/index.d.ts +5 -0
  629. package/components/input/{default/text/calendar → text/input-calendar}/input-calendar.component.d.ts +1 -1
  630. package/components/input/{default/text/color → text/input-color}/input-color.component.d.ts +1 -1
  631. package/components/input/{default/text/email → text/input-email}/input-email.component.d.ts +1 -1
  632. package/components/input/{default/text/number → text/input-number}/input-number.component.d.ts +1 -1
  633. package/components/input/{default/text/text → text/input-text}/input-text.component.d.ts +1 -1
  634. package/components/input/{default/text/locale → text/number-locale}/number-locale.d.ts +1 -1
  635. package/components/input/text/package.json +20 -0
  636. package/components/input/text/public_api.d.ts +7 -0
  637. package/components/input/textarea/.npmignore +2 -0
  638. package/components/input/textarea/bundles/index.umd.js +101 -0
  639. package/components/input/textarea/esm2022/index.mjs +5 -0
  640. package/components/input/textarea/esm2022/public_api.mjs +2 -0
  641. package/components/input/textarea/esm2022/textarea.component.mjs +53 -0
  642. package/components/input/textarea/esm2022/textarea.props.mjs +30 -0
  643. package/components/input/textarea/fesm2022/index.mjs +87 -0
  644. package/components/input/textarea/fesm2022/index.mjs.map +1 -0
  645. package/components/input/textarea/index.d.ts +5 -0
  646. package/components/input/textarea/package.json +20 -0
  647. package/components/input/textarea/public_api.d.ts +1 -0
  648. package/components/input/{default/textarea → textarea}/textarea.component.d.ts +1 -1
  649. package/components/navigation/breadcrumb/bundles/index.umd.js +37 -79
  650. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +20 -64
  651. package/components/navigation/breadcrumb/fesm2022/index.mjs +21 -64
  652. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  653. package/components/navigation/breadcrumb/package.json +0 -3
  654. package/components/navigation/menu/bundles/index.umd.js +247 -442
  655. package/components/navigation/menu/esm2022/menu-adapator.component.mjs +14 -19
  656. package/components/navigation/menu/esm2022/menu-dropdown/menu-dropdown.component.mjs +13 -29
  657. package/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +43 -100
  658. package/components/navigation/menu/esm2022/menu.component.mjs +53 -104
  659. package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +30 -37
  660. package/components/navigation/menu/esm2022/nav/nav.component.mjs +20 -88
  661. package/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +14 -14
  662. package/components/navigation/menu/fesm2022/index.mjs +174 -369
  663. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  664. package/components/navigation/menu/menu-dropdown/menu-dropdown.component.d.ts +2 -3
  665. package/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +3 -3
  666. package/components/navigation/menu/package.json +0 -3
  667. package/components/navigation/navbar/bundles/index.umd.js +32 -83
  668. package/components/navigation/navbar/esm2022/navbar.component.mjs +20 -72
  669. package/components/navigation/navbar/fesm2022/index.mjs +20 -71
  670. package/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
  671. package/components/navigation/navbar/package.json +0 -3
  672. package/components/navigation/popover/bundles/index.umd.js +31 -59
  673. package/components/navigation/popover/esm2022/popover.component.mjs +29 -58
  674. package/components/navigation/popover/fesm2022/index.mjs +31 -59
  675. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  676. package/components/navigation/popover/package.json +0 -3
  677. package/components/page/default/bundles/index.umd.js +109 -123
  678. package/components/page/default/esm2022/content/content.component.mjs +16 -25
  679. package/components/page/default/esm2022/layout.directive.mjs +21 -21
  680. package/components/page/default/esm2022/page-content/page-content.component.mjs +16 -23
  681. package/components/page/default/esm2022/page.directive.mjs +21 -21
  682. package/components/page/default/esm2022/router-outlet.directive.mjs +20 -20
  683. package/components/page/default/esm2022/spa-page.directive.mjs +21 -21
  684. package/components/page/default/fesm2022/index.mjs +111 -125
  685. package/components/page/default/fesm2022/index.mjs.map +1 -1
  686. package/components/page/default/package.json +0 -3
  687. package/components/page/footer/bundles/index.umd.js +20 -20
  688. package/components/page/footer/esm2022/footer.directive.mjs +21 -21
  689. package/components/page/footer/fesm2022/index.mjs +21 -21
  690. package/components/page/footer/fesm2022/index.mjs.map +1 -1
  691. package/components/page/footer/package.json +0 -3
  692. package/components/page/header/bundles/index.umd.js +19 -26
  693. package/components/page/header/esm2022/header.component.mjs +16 -24
  694. package/components/page/header/fesm2022/index.mjs +17 -24
  695. package/components/page/header/fesm2022/index.mjs.map +1 -1
  696. package/components/page/header/package.json +0 -3
  697. package/components/page/left-panel/bundles/index.umd.js +30 -30
  698. package/components/page/left-panel/esm2022/left-panel.directive.mjs +31 -31
  699. package/components/page/left-panel/fesm2022/index.mjs +31 -31
  700. package/components/page/left-panel/fesm2022/index.mjs.map +1 -1
  701. package/components/page/left-panel/package.json +0 -3
  702. package/components/page/right-panel/bundles/index.umd.js +23 -23
  703. package/components/page/right-panel/esm2022/right-panel.directive.mjs +24 -24
  704. package/components/page/right-panel/fesm2022/index.mjs +24 -24
  705. package/components/page/right-panel/fesm2022/index.mjs.map +1 -1
  706. package/components/page/right-panel/package.json +0 -3
  707. package/components/page/top-nav/bundles/index.umd.js +20 -20
  708. package/components/page/top-nav/esm2022/top-nav.directive.mjs +21 -21
  709. package/components/page/top-nav/fesm2022/index.mjs +21 -21
  710. package/components/page/top-nav/fesm2022/index.mjs.map +1 -1
  711. package/components/page/top-nav/package.json +0 -3
  712. package/components/prefab/bundles/index.umd.js +41 -41
  713. package/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +20 -20
  714. package/components/prefab/esm2022/prefab.directive.mjs +23 -23
  715. package/components/prefab/fesm2022/index.mjs +42 -42
  716. package/components/prefab/fesm2022/index.mjs.map +1 -1
  717. package/components/prefab/package.json +0 -3
  718. package/core/bundles/index.umd.js +80 -61
  719. package/core/esm2022/services/constant.service.mjs +7 -7
  720. package/core/esm2022/services/custom-icons-loader.service.mjs +7 -7
  721. package/core/esm2022/services/field-type.service.mjs +7 -7
  722. package/core/esm2022/services/field-widget.service.mjs +7 -7
  723. package/core/esm2022/services/pagination.service.mjs +7 -7
  724. package/core/esm2022/services/script-loader.service.mjs +7 -7
  725. package/core/esm2022/services/state-persistence.service.mjs +7 -7
  726. package/core/esm2022/services/user-custom-pipe-manager.service.mjs +7 -7
  727. package/core/esm2022/services/utils.service.mjs +7 -7
  728. package/core/esm2022/services/viewport.service.mjs +7 -7
  729. package/core/esm2022/types/types.mjs +1 -1
  730. package/core/esm2022/utils/build-utils.mjs +21 -2
  731. package/core/fesm2022/index.mjs +80 -61
  732. package/core/fesm2022/index.mjs.map +1 -1
  733. package/core/package.json +3 -6
  734. package/core/types/types.d.ts +2 -1
  735. package/http/bundles/index.umd.js +8 -8
  736. package/http/esm2022/http.service.mjs +9 -9
  737. package/http/fesm2022/index.mjs +8 -8
  738. package/http/fesm2022/index.mjs.map +1 -1
  739. package/http/package.json +2 -5
  740. package/locales/moment/ar-dz.js +8 -8
  741. package/locales/moment/ar-ly.js +8 -8
  742. package/locales/moment/ar-ps.js +123 -0
  743. package/locales/moment/ar.js +8 -8
  744. package/locales/moment/be.js +2 -2
  745. package/locales/moment/bs.js +14 -4
  746. package/locales/moment/ca.js +6 -6
  747. package/locales/moment/cs.js +5 -4
  748. package/locales/moment/cv.js +2 -2
  749. package/locales/moment/en-au.js +6 -6
  750. package/locales/moment/en-ca.js +6 -6
  751. package/locales/moment/en-gb.js +6 -6
  752. package/locales/moment/en-ie.js +6 -6
  753. package/locales/moment/en-il.js +6 -6
  754. package/locales/moment/en-in.js +6 -6
  755. package/locales/moment/en-nz.js +6 -6
  756. package/locales/moment/en-sg.js +6 -6
  757. package/locales/moment/it.js +4 -4
  758. package/locales/moment/ku-kmr.js +125 -0
  759. package/locales/moment/lt.js +2 -2
  760. package/locales/moment/me.js +2 -2
  761. package/locales/moment/nb.js +4 -4
  762. package/locales/moment/nl-be.js +1 -1
  763. package/locales/moment/nl.js +1 -1
  764. package/locales/moment/oc-lnc.js +6 -6
  765. package/locales/moment/ru.js +2 -2
  766. package/locales/moment/sv.js +6 -6
  767. package/locales/moment/tet.js +6 -6
  768. package/locales/moment/tlh.js +8 -8
  769. package/locales/moment/tzl.js +2 -2
  770. package/locales/moment/uk.js +4 -4
  771. package/locales/moment/x-pseudo.js +6 -6
  772. package/locales/moment-timezone/moment-timezone-with-data.js +2 -2
  773. package/npm-shrinkwrap.json +2 -2
  774. package/oAuth/bundles/index.umd.js +5 -5
  775. package/oAuth/esm2022/oAuth.service.mjs +6 -6
  776. package/oAuth/fesm2022/index.mjs +5 -5
  777. package/oAuth/fesm2022/index.mjs.map +1 -1
  778. package/oAuth/package.json +2 -5
  779. package/package-lock.json +2 -2
  780. package/package.json +1 -1
  781. package/runtime/base/bundles/index.umd.js +3162 -3100
  782. package/runtime/base/components/empty-component/empty-page.component.d.ts +1 -0
  783. package/runtime/base/esm2022/components/app-component/app.component.mjs +14 -95
  784. package/runtime/base/esm2022/components/app-spinner.component.mjs +34 -45
  785. package/runtime/base/esm2022/components/base-custom-widget.component.mjs +8 -7
  786. package/runtime/base/esm2022/components/base-layout.component.mjs +14 -21
  787. package/runtime/base/esm2022/components/base-page.component.mjs +12 -19
  788. package/runtime/base/esm2022/components/base-partial.component.mjs +9 -14
  789. package/runtime/base/esm2022/components/base-prefab.component.mjs +9 -14
  790. package/runtime/base/esm2022/components/base-spa-page.component.mjs +12 -19
  791. package/runtime/base/esm2022/components/custom-toaster.component.mjs +30 -52
  792. package/runtime/base/esm2022/components/empty-component/empty-page.component.mjs +33 -15
  793. package/runtime/base/esm2022/components/prefab-preview.component.mjs +19 -26
  794. package/runtime/base/esm2022/directives/accessroles.directive.mjs +17 -17
  795. package/runtime/base/esm2022/directives/prefab.directive.mjs +15 -15
  796. package/runtime/base/esm2022/guards/auth.guard.mjs +6 -6
  797. package/runtime/base/esm2022/guards/can-deactivate-page.guard.mjs +11 -11
  798. package/runtime/base/esm2022/guards/page-not-found.guard.mjs +6 -6
  799. package/runtime/base/esm2022/guards/role.guard.mjs +6 -6
  800. package/runtime/base/esm2022/overrides/wm_dom_renderer.mjs +12 -12
  801. package/runtime/base/esm2022/overrides/wm_shared_styles_host.mjs +14 -14
  802. package/runtime/base/esm2022/public_api.mjs +5 -2
  803. package/runtime/base/esm2022/resolves/app-before-load.resolve.mjs +22 -0
  804. package/runtime/base/esm2022/resolves/app-extension.resolve.mjs +6 -6
  805. package/runtime/base/esm2022/resolves/app-js.resolve.mjs +6 -6
  806. package/runtime/base/esm2022/resolves/app-variables.resolve.mjs +9 -9
  807. package/runtime/base/esm2022/resolves/i18n.resolve.mjs +6 -6
  808. package/runtime/base/esm2022/resolves/metadata.resolve.mjs +9 -9
  809. package/runtime/base/esm2022/resolves/security-config.resolve.mjs +9 -9
  810. package/runtime/base/esm2022/runtime-base.module.mjs +457 -316
  811. package/runtime/base/esm2022/services/app-defaults.service.mjs +6 -6
  812. package/runtime/base/esm2022/services/app.manager.service.mjs +25 -9
  813. package/runtime/base/esm2022/services/app.service.mjs +39 -18
  814. package/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +6 -6
  815. package/runtime/base/esm2022/services/http-interceptor.services.mjs +6 -6
  816. package/runtime/base/esm2022/services/i18n.service.mjs +37 -34
  817. package/runtime/base/esm2022/services/navigation.service.mjs +6 -6
  818. package/runtime/base/esm2022/services/pipe-provider.service.mjs +13 -13
  819. package/runtime/base/esm2022/services/pipe.service.mjs +10 -8
  820. package/runtime/base/esm2022/services/prefab-manager.service.mjs +6 -6
  821. package/runtime/base/esm2022/services/spinner.service.mjs +6 -6
  822. package/runtime/base/esm2022/services/toaster.service.mjs +6 -6
  823. package/runtime/base/esm2022/util/fragment-monitor.mjs +6 -6
  824. package/runtime/base/esm2022/util/utils.mjs +15 -1
  825. package/runtime/base/esm2022/util/wm-route-reuse-strategy.mjs +1 -1
  826. package/runtime/base/fesm2022/index.mjs +3145 -3071
  827. package/runtime/base/fesm2022/index.mjs.map +1 -1
  828. package/runtime/base/package.json +2 -5
  829. package/runtime/base/public_api.d.ts +4 -1
  830. package/runtime/base/resolves/app-before-load.resolve.d.ts +11 -0
  831. package/runtime/base/runtime-base.module.d.ts +96 -59
  832. package/runtime/base/services/app.manager.service.d.ts +2 -1
  833. package/runtime/base/services/app.service.d.ts +3 -2
  834. package/runtime/base/services/i18n.service.d.ts +2 -1
  835. package/runtime/base/util/utils.d.ts +2 -1
  836. package/runtime/dynamic/app/app.config.d.ts +1 -1
  837. package/runtime/dynamic/app/services/app-variables-provider.service.d.ts +3 -1
  838. package/runtime/dynamic/bundles/index.umd.js +145 -114
  839. package/runtime/dynamic/esm2022/app/app.config.mjs +11 -10
  840. package/runtime/dynamic/esm2022/app/app.module.mjs +35 -5
  841. package/runtime/dynamic/esm2022/app/app.routes.mjs +2 -11
  842. package/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +11 -16
  843. package/runtime/dynamic/esm2022/app/services/app-extension.service.mjs +9 -9
  844. package/runtime/dynamic/esm2022/app/services/app-js-provider.service.mjs +9 -9
  845. package/runtime/dynamic/esm2022/app/services/app-resource-manager.service.mjs +6 -6
  846. package/runtime/dynamic/esm2022/app/services/app-variables-provider.service.mjs +15 -11
  847. package/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +57 -8
  848. package/runtime/dynamic/esm2022/app/services/customwidget-config-provider.service.mjs +6 -6
  849. package/runtime/dynamic/esm2022/app/services/prefab-config-provider.service.mjs +6 -6
  850. package/runtime/dynamic/fesm2022/index.mjs +143 -88
  851. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  852. package/runtime/dynamic/package.json +2 -5
  853. package/scripts/datatable/datatable.js +26 -5
  854. package/scripts/jquery-ui/ui/widgets/droppable.js +3 -3
  855. package/scripts/jquery-ui/ui/widgets/resizable.js +72 -19
  856. package/scripts/jquery-ui/ui/widgets/sortable.js +9 -16
  857. package/security/bundles/index.umd.js +5 -5
  858. package/security/esm2022/security.service.mjs +6 -6
  859. package/security/fesm2022/index.mjs +5 -5
  860. package/security/fesm2022/index.mjs.map +1 -1
  861. package/security/package.json +2 -5
  862. package/swipey/fesm2022/index.mjs.map +1 -1
  863. package/swipey/package.json +2 -5
  864. package/transpiler/build.d.ts +1 -1
  865. package/transpiler/bundles/index.umd.js +94 -56
  866. package/transpiler/esm2022/build.mjs +5 -2
  867. package/transpiler/esm2022/imports.mjs +92 -57
  868. package/transpiler/fesm2022/index.mjs +94 -56
  869. package/transpiler/fesm2022/index.mjs.map +1 -1
  870. package/transpiler/package.json +3 -6
  871. package/variables/bundles/index.umd.js +20 -10
  872. package/variables/constants/variables.constants.d.ts +9 -0
  873. package/variables/esm2022/constants/variables.constants.mjs +10 -1
  874. package/variables/esm2022/service/metadata-service/metadata.service.mjs +6 -6
  875. package/variables/esm2022/service/variables.service.mjs +6 -6
  876. package/variables/fesm2022/index.mjs +20 -11
  877. package/variables/fesm2022/index.mjs.map +1 -1
  878. package/variables/package.json +2 -5
  879. package/variables/service/variables.service.d.ts +1 -1
  880. package/build-task/esm2022/basic/default/anchor/anchor.build.mjs +0 -15
  881. package/build-task/esm2022/basic/default/audio/audio.build.mjs +0 -10
  882. package/build-task/esm2022/basic/default/html/html.build.mjs +0 -15
  883. package/build-task/esm2022/basic/default/icon/icon.build.mjs +0 -10
  884. package/build-task/esm2022/basic/default/iframe/iframe.build.mjs +0 -10
  885. package/build-task/esm2022/basic/default/label/label.build.mjs +0 -25
  886. package/build-task/esm2022/basic/default/picture/picture.build.mjs +0 -14
  887. package/build-task/esm2022/basic/default/spinner/spinner.build.mjs +0 -15
  888. package/build-task/esm2022/basic/default/video/video.build.mjs +0 -10
  889. package/components/base/components.module.d.ts +0 -25
  890. package/components/base/esm2022/components.module.mjs +0 -152
  891. package/components/basic/default/bundles/index.umd.js +0 -1036
  892. package/components/basic/default/esm2022/anchor/anchor.component.mjs +0 -198
  893. package/components/basic/default/esm2022/anchor/anchor.props.mjs +0 -27
  894. package/components/basic/default/esm2022/audio/audio.component.mjs +0 -59
  895. package/components/basic/default/esm2022/audio/audio.props.mjs +0 -19
  896. package/components/basic/default/esm2022/html/html.directive.mjs +0 -76
  897. package/components/basic/default/esm2022/html/html.props.mjs +0 -12
  898. package/components/basic/default/esm2022/icon/icon.component.mjs +0 -70
  899. package/components/basic/default/esm2022/icon/icon.props.mjs +0 -19
  900. package/components/basic/default/esm2022/iframe/iframe.component.mjs +0 -85
  901. package/components/basic/default/esm2022/iframe/iframe.props.mjs +0 -15
  902. package/components/basic/default/esm2022/label/label.directive.mjs +0 -71
  903. package/components/basic/default/esm2022/label/label.props.mjs +0 -17
  904. package/components/basic/default/esm2022/picture/picture.directive.mjs +0 -95
  905. package/components/basic/default/esm2022/picture/picture.props.mjs +0 -23
  906. package/components/basic/default/esm2022/public_api.mjs +0 -10
  907. package/components/basic/default/esm2022/spinner/spinner.component.mjs +0 -130
  908. package/components/basic/default/esm2022/spinner/spinner.props.mjs +0 -20
  909. package/components/basic/default/esm2022/video/video.component.mjs +0 -113
  910. package/components/basic/default/esm2022/video/video.props.mjs +0 -24
  911. package/components/basic/default/fesm2022/index.mjs +0 -1012
  912. package/components/basic/default/fesm2022/index.mjs.map +0 -1
  913. package/components/basic/default/public_api.d.ts +0 -9
  914. package/components/basic/progress/bundles/index.umd.js +0 -361
  915. package/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +0 -154
  916. package/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +0 -132
  917. package/components/basic/progress/esm2022/public_api.mjs +0 -3
  918. package/components/basic/progress/esm2022/utils.mjs +0 -25
  919. package/components/basic/progress/fesm2022/index.mjs +0 -344
  920. package/components/basic/progress/fesm2022/index.mjs.map +0 -1
  921. package/components/basic/progress/public_api.d.ts +0 -2
  922. package/components/input/default/bundles/index.umd.js +0 -3559
  923. package/components/input/default/esm2022/base-form-custom.component.mjs +0 -94
  924. package/components/input/default/esm2022/base-form.component.mjs +0 -110
  925. package/components/input/default/esm2022/button/button.component.mjs +0 -106
  926. package/components/input/default/esm2022/button/button.props.mjs +0 -26
  927. package/components/input/default/esm2022/button-group/button-group.directive.mjs +0 -51
  928. package/components/input/default/esm2022/button-group/button-group.props.mjs +0 -10
  929. package/components/input/default/esm2022/caption-position.directive.mjs +0 -172
  930. package/components/input/default/esm2022/checkbox/checkbox.component.mjs +0 -179
  931. package/components/input/default/esm2022/checkbox/checkbox.props.mjs +0 -27
  932. package/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +0 -268
  933. package/components/input/default/esm2022/checkboxset/checkboxset.props.mjs +0 -35
  934. package/components/input/default/esm2022/composite/composite.directive.mjs +0 -84
  935. package/components/input/default/esm2022/composite/composite.props.mjs +0 -10
  936. package/components/input/default/esm2022/dataset-aware-form.component.mjs +0 -307
  937. package/components/input/default/esm2022/number/number.component.mjs +0 -68
  938. package/components/input/default/esm2022/number/number.props.mjs +0 -35
  939. package/components/input/default/esm2022/public_api.mjs +0 -21
  940. package/components/input/default/esm2022/radioset/radioset.component.mjs +0 -251
  941. package/components/input/default/esm2022/radioset/radioset.props.mjs +0 -35
  942. package/components/input/default/esm2022/select/select.component.mjs +0 -230
  943. package/components/input/default/esm2022/select/select.props.mjs +0 -36
  944. package/components/input/default/esm2022/switch/switch.component.mjs +0 -227
  945. package/components/input/default/esm2022/switch/switch.props.mjs +0 -28
  946. package/components/input/default/esm2022/text/base/base-input.mjs +0 -93
  947. package/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +0 -69
  948. package/components/input/default/esm2022/text/calendar/input-calendar.props.mjs +0 -30
  949. package/components/input/default/esm2022/text/color/input-color.component.mjs +0 -69
  950. package/components/input/default/esm2022/text/color/input-color.props.mjs +0 -27
  951. package/components/input/default/esm2022/text/email/input-email.component.mjs +0 -68
  952. package/components/input/default/esm2022/text/email/input-email.props.mjs +0 -29
  953. package/components/input/default/esm2022/text/locale/number-locale.mjs +0 -539
  954. package/components/input/default/esm2022/text/number/input-number.component.mjs +0 -79
  955. package/components/input/default/esm2022/text/number/input-number.props.mjs +0 -32
  956. package/components/input/default/esm2022/text/text/input-text.component.mjs +0 -145
  957. package/components/input/default/esm2022/text/text/input-text.props.mjs +0 -46
  958. package/components/input/default/esm2022/textarea/textarea.component.mjs +0 -85
  959. package/components/input/default/esm2022/textarea/textarea.props.mjs +0 -30
  960. package/components/input/default/fesm2022/index.mjs +0 -3529
  961. package/components/input/default/fesm2022/index.mjs.map +0 -1
  962. package/components/input/default/public_api.d.ts +0 -20
  963. package/components/input/epoch/bundles/index.umd.js +0 -3292
  964. package/components/input/epoch/esm2022/date/date.component.mjs +0 -376
  965. package/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +0 -473
  966. package/components/input/epoch/esm2022/date-time/date-time.component.mjs +0 -563
  967. package/components/input/epoch/esm2022/picker/picker.component.mjs +0 -184
  968. package/components/input/epoch/esm2022/public_api.mjs +0 -6
  969. package/components/input/epoch/esm2022/time/time.component.mjs +0 -432
  970. package/components/input/epoch/fesm2022/index.mjs +0 -3280
  971. package/components/input/epoch/fesm2022/index.mjs.map +0 -1
  972. package/components/input/epoch/public_api.d.ts +0 -5
  973. /package/build-task/basic/{default/anchor → anchor}/anchor.build.d.ts +0 -0
  974. /package/build-task/basic/{default/audio → audio}/audio.build.d.ts +0 -0
  975. /package/build-task/basic/{default/html → html}/html.build.d.ts +0 -0
  976. /package/build-task/basic/{default/icon → icon}/icon.build.d.ts +0 -0
  977. /package/build-task/basic/{default/iframe → iframe}/iframe.build.d.ts +0 -0
  978. /package/build-task/basic/{default/label → label}/label.build.d.ts +0 -0
  979. /package/build-task/basic/{default/picture → picture}/picture.build.d.ts +0 -0
  980. /package/build-task/basic/{default/spinner → spinner}/spinner.build.d.ts +0 -0
  981. /package/build-task/basic/{default/video → video}/video.build.d.ts +0 -0
  982. /package/components/basic/{default → anchor}/.npmignore +0 -0
  983. /package/components/basic/{default/anchor → anchor}/anchor.component.d.ts +0 -0
  984. /package/components/basic/{default/anchor → anchor}/anchor.props.d.ts +0 -0
  985. /package/components/basic/{progress → audio}/.npmignore +0 -0
  986. /package/components/basic/{default/audio → audio}/audio.component.d.ts +0 -0
  987. /package/components/basic/{default/audio → audio}/audio.props.d.ts +0 -0
  988. /package/components/{input/default → basic/html}/.npmignore +0 -0
  989. /package/components/basic/{default/html → html}/html.directive.d.ts +0 -0
  990. /package/components/basic/{default/html → html}/html.props.d.ts +0 -0
  991. /package/components/{input/epoch → basic/icon}/.npmignore +0 -0
  992. /package/components/basic/{default/icon → icon}/icon.component.d.ts +0 -0
  993. /package/components/basic/{default/icon → icon}/icon.props.d.ts +0 -0
  994. /package/components/basic/{default/iframe → iframe}/iframe.component.d.ts +0 -0
  995. /package/components/basic/{default/iframe → iframe}/iframe.props.d.ts +0 -0
  996. /package/components/basic/{default/label → label}/label.props.d.ts +0 -0
  997. /package/components/basic/{default/picture → picture}/picture.directive.d.ts +0 -0
  998. /package/components/basic/{default/picture → picture}/picture.props.d.ts +0 -0
  999. /package/components/basic/progress/{utils.d.ts → progress-utils/progress-utils.d.ts} +0 -0
  1000. /package/components/basic/{default/spinner → spinner}/spinner.component.d.ts +0 -0
  1001. /package/components/basic/{default/spinner → spinner}/spinner.props.d.ts +0 -0
  1002. /package/components/basic/{default/video → video}/video.component.d.ts +0 -0
  1003. /package/components/basic/{default/video → video}/video.props.d.ts +0 -0
  1004. /package/components/input/{default → base-form}/base-form.component.d.ts +0 -0
  1005. /package/components/input/{default/button → button}/button.component.d.ts +0 -0
  1006. /package/components/input/{default/button → button}/button.props.d.ts +0 -0
  1007. /package/components/input/{default/button-group → button-group}/button-group.directive.d.ts +0 -0
  1008. /package/components/input/{default/button-group → button-group}/button-group.props.d.ts +0 -0
  1009. /package/components/input/{default → caption-position}/caption-position.directive.d.ts +0 -0
  1010. /package/components/input/{default/checkbox → checkbox}/checkbox.props.d.ts +0 -0
  1011. /package/components/input/{default/checkboxset → checkboxset}/checkboxset.props.d.ts +0 -0
  1012. /package/components/input/{default/composite → composite}/composite.directive.d.ts +0 -0
  1013. /package/components/input/{default/composite → composite}/composite.props.d.ts +0 -0
  1014. /package/components/input/epoch/{date-time → date-time-picker}/date-time-picker.component.d.ts +0 -0
  1015. /package/components/input/{default/number → number}/number.props.d.ts +0 -0
  1016. /package/components/input/{default/radioset → radioset}/radioset.props.d.ts +0 -0
  1017. /package/components/input/{default/select → select}/select.props.d.ts +0 -0
  1018. /package/components/input/{default/switch → switch}/switch.props.d.ts +0 -0
  1019. /package/components/input/{default/text/calendar → text/input-calendar}/input-calendar.props.d.ts +0 -0
  1020. /package/components/input/{default/text/color → text/input-color}/input-color.props.d.ts +0 -0
  1021. /package/components/input/{default/text/email → text/input-email}/input-email.props.d.ts +0 -0
  1022. /package/components/input/{default/text/number → text/input-number}/input-number.props.d.ts +0 -0
  1023. /package/components/input/{default/text/text → text/input-text}/input-text.props.d.ts +0 -0
  1024. /package/components/input/{default/textarea → textarea}/textarea.props.d.ts +0 -0
@@ -1,477 +1,17 @@
1
1
  import { CommonModule } from '@angular/common';
2
- import { WmComponentsModule } from "@wm/components/base";
3
2
  import { FormsModule } from '@angular/forms';
4
- import { Component, EventEmitter, Inject, Injector, Output, SkipSelf, Optional, ViewChild } from '@angular/core';
3
+ import { Component, EventEmitter, Inject, Injector, Optional, Output, SkipSelf, ViewChild } from '@angular/core';
5
4
  import { $appDigest, $watch, AppConstants, DataSource, debounce, isDefined, switchClass, triggerFn } from '@wm/core';
6
- import { DEBOUNCE_TIMES, getOrderByExpr, provideAsWidgetRef, StylableComponent, styler, WidgetRef, unsupportedStatePersistenceTypes } from '@wm/components/base';
5
+ import { DEBOUNCE_TIMES, getOrderByExpr, provideAsWidgetRef, StylableComponent, styler, unsupportedStatePersistenceTypes, WidgetRef } from '@wm/components/base';
7
6
  import { registerProps } from './pagination.props';
8
7
  import { forEach, get, isArray, isEmpty, isNull, isString, range } from "lodash-es";
9
8
  import { PaginationModule } from 'ngx-bootstrap/pagination';
10
- import { BsDropdownModule, BsDropdownDirective } from 'ngx-bootstrap/dropdown';
11
- import { MenuComponent } from '@wm/components/navigation/menu';
9
+ import { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';
12
10
  import * as i0 from "@angular/core";
13
11
  import * as i1 from "@angular/common";
14
12
  import * as i2 from "@angular/forms";
15
13
  import * as i3 from "ngx-bootstrap/pagination";
16
14
  import * as i4 from "ngx-bootstrap/dropdown";
17
- const _c0 = ["wmPagination", ""];
18
- const _c1 = a0 => ({ "active": a0 });
19
- const _c2 = a0 => ({ "disabled": a0 });
20
- const _c3 = () => ({ standalone: true });
21
- function PaginationComponent_Conditional_0_Conditional_1_ul_7_For_2_Template(rf, ctx) { if (rf & 1) {
22
- const _r3 = i0.ɵɵgetCurrentView();
23
- i0.ɵɵelementStart(0, "li", 17)(1, "a", 18);
24
- i0.ɵɵlistener("click", function PaginationComponent_Conditional_0_Conditional_1_ul_7_For_2_Template_a_click_1_listener($event) { const option_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onPageSizeChange($event, option_r4)); })("keydown", function PaginationComponent_Conditional_0_Conditional_1_ul_7_For_2_Template_a_keydown_1_listener($event) { const ɵ$index_21_r5 = i0.ɵɵrestoreView(_r3).$index; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onDropdownKeydown($event, ɵ$index_21_r5)); });
25
- i0.ɵɵtext(2);
26
- i0.ɵɵelementEnd()();
27
- } if (rf & 2) {
28
- const option_r4 = ctx.$implicit;
29
- const ɵ$index_21_r5 = ctx.$index;
30
- const ctx_r1 = i0.ɵɵnextContext(4);
31
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c1, option_r4 == ctx_r1.maxResults));
32
- i0.ɵɵadvance();
33
- i0.ɵɵattribute("tabindex", ɵ$index_21_r5 === ctx_r1.focusedIndex ? 0 : -1);
34
- i0.ɵɵadvance();
35
- i0.ɵɵtextInterpolate(option_r4);
36
- } }
37
- function PaginationComponent_Conditional_0_Conditional_1_ul_7_Template(rf, ctx) { if (rf & 1) {
38
- i0.ɵɵelementStart(0, "ul", 16);
39
- i0.ɵɵrepeaterCreate(1, PaginationComponent_Conditional_0_Conditional_1_ul_7_For_2_Template, 3, 5, "li", 17, i0.ɵɵrepeaterTrackByIdentity);
40
- i0.ɵɵelementEnd();
41
- } if (rf & 2) {
42
- const ctx_r1 = i0.ɵɵnextContext(3);
43
- i0.ɵɵadvance();
44
- i0.ɵɵrepeater(ctx_r1.pageSizeOptions);
45
- } }
46
- function PaginationComponent_Conditional_0_Conditional_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
47
- i0.ɵɵelementStart(0, "li", 15)(1, "div")(2, "span");
48
- i0.ɵɵtext(3);
49
- i0.ɵɵelementEnd();
50
- i0.ɵɵelementStart(4, "span");
51
- i0.ɵɵtext(5, "of");
52
- i0.ɵɵelementEnd();
53
- i0.ɵɵelementStart(6, "span");
54
- i0.ɵɵtext(7);
55
- i0.ɵɵelementEnd()()();
56
- } if (rf & 2) {
57
- const ctx_r1 = i0.ɵɵnextContext(3);
58
- i0.ɵɵadvance(3);
59
- i0.ɵɵtextInterpolate2("", ctx_r1.rowSummary.startIndex, " - ", ctx_r1.rowSummary.endIndex, "");
60
- i0.ɵɵadvance(4);
61
- i0.ɵɵtextInterpolate(ctx_r1.rowSummary.totalRecords);
62
- } }
63
- function PaginationComponent_Conditional_0_Conditional_1_Template(rf, ctx) { if (rf & 1) {
64
- const _r1 = i0.ɵɵgetCurrentView();
65
- i0.ɵɵelementStart(0, "li", 9)(1, "label", 10);
66
- i0.ɵɵtext(2);
67
- i0.ɵɵelementEnd();
68
- i0.ɵɵelementStart(3, "div", 11);
69
- i0.ɵɵlistener("isOpenChange", function PaginationComponent_Conditional_0_Conditional_1_Template_div_isOpenChange_3_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenChange($event)); });
70
- i0.ɵɵelementStart(4, "button", 12);
71
- i0.ɵɵtext(5);
72
- i0.ɵɵelement(6, "span", 13);
73
- i0.ɵɵelementEnd();
74
- i0.ɵɵtemplate(7, PaginationComponent_Conditional_0_Conditional_1_ul_7_Template, 3, 0, "ul", 14);
75
- i0.ɵɵelementEnd()();
76
- i0.ɵɵtemplate(8, PaginationComponent_Conditional_0_Conditional_1_Conditional_8_Template, 8, 3, "li", 15);
77
- } if (rf & 2) {
78
- const ctx_r1 = i0.ɵɵnextContext(2);
79
- i0.ɵɵadvance();
80
- i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_ITEMS_PER_PAGE);
81
- i0.ɵɵadvance();
82
- i0.ɵɵtextInterpolate1("", ctx_r1.appLocale.LABEL_ITEMS_PER_PAGE, " :");
83
- i0.ɵɵadvance(3);
84
- i0.ɵɵtextInterpolate1(" ", ctx_r1.maxResults, " ");
85
- i0.ɵɵadvance(3);
86
- i0.ɵɵconditional((ctx_r1.rowSummary == null ? null : ctx_r1.rowSummary.totalRecords) ? 8 : -1);
87
- } }
88
- function PaginationComponent_Conditional_0_Conditional_2_Template(rf, ctx) { if (rf & 1) {
89
- const _r6 = i0.ɵɵgetCurrentView();
90
- i0.ɵɵelementStart(0, "li", 5)(1, "a", 19);
91
- i0.ɵɵlistener("click", function PaginationComponent_Conditional_0_Conditional_2_Template_a_click_1_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigatePage("first", $event)); });
92
- i0.ɵɵelementStart(2, "span", 20);
93
- i0.ɵɵelement(3, "i", 21);
94
- i0.ɵɵelementEnd();
95
- i0.ɵɵelementStart(4, "span", 22);
96
- i0.ɵɵtext(5);
97
- i0.ɵɵelementEnd()()();
98
- } if (rf & 2) {
99
- const ctx_r1 = i0.ɵɵnextContext(2);
100
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c2, ctx_r1.isDisableFirst));
101
- i0.ɵɵadvance();
102
- i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_FIRST);
103
- i0.ɵɵattribute("aria-disabled", ctx_r1.isDisableFirst);
104
- i0.ɵɵadvance(4);
105
- i0.ɵɵtextInterpolate1("Go to first page ", ctx_r1.isDisableFirst ? " , Disabled" : "", "");
106
- } }
107
- function PaginationComponent_Conditional_0_Conditional_3_Template(rf, ctx) { if (rf & 1) {
108
- const _r7 = i0.ɵɵgetCurrentView();
109
- i0.ɵɵelementStart(0, "li", 5)(1, "a", 23);
110
- i0.ɵɵlistener("click", function PaginationComponent_Conditional_0_Conditional_3_Template_a_click_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigatePage("prev", $event)); });
111
- i0.ɵɵelementStart(2, "span", 20);
112
- i0.ɵɵelement(3, "i", 24);
113
- i0.ɵɵelementEnd();
114
- i0.ɵɵelementStart(4, "span", 22);
115
- i0.ɵɵtext(5);
116
- i0.ɵɵelementEnd()()();
117
- } if (rf & 2) {
118
- const ctx_r1 = i0.ɵɵnextContext(2);
119
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c2, ctx_r1.isDisablePrevious));
120
- i0.ɵɵadvance();
121
- i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_PREVIOUS);
122
- i0.ɵɵattribute("aria-disabled", ctx_r1.isDisablePrevious);
123
- i0.ɵɵadvance(4);
124
- i0.ɵɵtextInterpolate1("Go to previous page ", ctx_r1.isDisablePrevious ? ", Disabled" : "", "");
125
- } }
126
- function PaginationComponent_Conditional_0_Conditional_4_Template(rf, ctx) { if (rf & 1) {
127
- const _r8 = i0.ɵɵgetCurrentView();
128
- i0.ɵɵelementStart(0, "li", 6)(1, "a", 25)(2, "input", 26);
129
- i0.ɵɵtwoWayListener("ngModelChange", function PaginationComponent_Conditional_0_Conditional_4_Template_input_ngModelChange_2_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); i0.ɵɵtwoWayBindingSet(ctx_r1.dn.currentPage, $event) || (ctx_r1.dn.currentPage = $event); return i0.ɵɵresetView($event); });
130
- i0.ɵɵlistener("keydown", function PaginationComponent_Conditional_0_Conditional_4_Template_input_keydown_2_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onKeyDown($event)); })("change", function PaginationComponent_Conditional_0_Conditional_4_Template_input_change_2_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onModelChange($event)); });
131
- i0.ɵɵelementEnd()()();
132
- } if (rf & 2) {
133
- const ctx_r1 = i0.ɵɵnextContext(2);
134
- i0.ɵɵadvance(2);
135
- i0.ɵɵtwoWayProperty("ngModel", ctx_r1.dn.currentPage);
136
- i0.ɵɵproperty("disabled", ctx_r1.isDisableCurrent)("ngModelOptions", i0.ɵɵpureFunction0(4, _c3));
137
- i0.ɵɵattribute("aria-label", "Showing Page " + ctx_r1.dn.currentPage + " of " + ctx_r1.pageCount);
138
- } }
139
- function PaginationComponent_Conditional_0_Conditional_5_Template(rf, ctx) { if (rf & 1) {
140
- i0.ɵɵelementStart(0, "li", 7)(1, "a", 27);
141
- i0.ɵɵtext(2);
142
- i0.ɵɵelementEnd()();
143
- } if (rf & 2) {
144
- const ctx_r1 = i0.ɵɵnextContext(2);
145
- i0.ɵɵadvance();
146
- i0.ɵɵproperty("hidden", ctx_r1.isDisableCount);
147
- i0.ɵɵadvance();
148
- i0.ɵɵtextInterpolate1(" / ", ctx_r1.pageCount, "");
149
- } }
150
- function PaginationComponent_Conditional_0_Conditional_6_Template(rf, ctx) { if (rf & 1) {
151
- const _r9 = i0.ɵɵgetCurrentView();
152
- i0.ɵɵelementStart(0, "li", 5)(1, "a", 28);
153
- i0.ɵɵlistener("click", function PaginationComponent_Conditional_0_Conditional_6_Template_a_click_1_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigatePage("next", $event)); });
154
- i0.ɵɵelementStart(2, "span", 20);
155
- i0.ɵɵelement(3, "i", 29);
156
- i0.ɵɵelementEnd();
157
- i0.ɵɵelementStart(4, "span", 22);
158
- i0.ɵɵtext(5);
159
- i0.ɵɵelementEnd()()();
160
- } if (rf & 2) {
161
- const ctx_r1 = i0.ɵɵnextContext(2);
162
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c2, ctx_r1.isDisableNext));
163
- i0.ɵɵadvance();
164
- i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_NEXT);
165
- i0.ɵɵattribute("aria-disabled", ctx_r1.isDisableNext);
166
- i0.ɵɵadvance(4);
167
- i0.ɵɵtextInterpolate1("Go to next page ", ctx_r1.isDisableNext ? " , Disabled" : "", "");
168
- } }
169
- function PaginationComponent_Conditional_0_Conditional_7_Template(rf, ctx) { if (rf & 1) {
170
- const _r10 = i0.ɵɵgetCurrentView();
171
- i0.ɵɵelementStart(0, "li", 5)(1, "a", 30);
172
- i0.ɵɵlistener("click", function PaginationComponent_Conditional_0_Conditional_7_Template_a_click_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.navigatePage("last", $event)); });
173
- i0.ɵɵelementStart(2, "span", 20);
174
- i0.ɵɵelement(3, "i", 31);
175
- i0.ɵɵelementEnd();
176
- i0.ɵɵelementStart(4, "span", 22);
177
- i0.ɵɵtext(5);
178
- i0.ɵɵelementEnd()()();
179
- } if (rf & 2) {
180
- const ctx_r1 = i0.ɵɵnextContext(2);
181
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c2, ctx_r1.isDisableLast));
182
- i0.ɵɵadvance();
183
- i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_LAST);
184
- i0.ɵɵattribute("aria-disabled", ctx_r1.isDisableLast);
185
- i0.ɵɵadvance(4);
186
- i0.ɵɵtextInterpolate1("Go to last page ", ctx_r1.isDisableLast ? " , Disabled" : "", "");
187
- } }
188
- function PaginationComponent_Conditional_0_Conditional_8_Template(rf, ctx) { if (rf & 1) {
189
- i0.ɵɵelementStart(0, "li", 8)(1, "a", 32);
190
- i0.ɵɵtext(2);
191
- i0.ɵɵelementEnd()();
192
- } if (rf & 2) {
193
- const ctx_r1 = i0.ɵɵnextContext(2);
194
- i0.ɵɵadvance(2);
195
- i0.ɵɵtextInterpolate2("", ctx_r1.appLocale.LABEL_TOTAL_RECORDS, ": ", ctx_r1.dataSize, "");
196
- } }
197
- function PaginationComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
198
- i0.ɵɵelementStart(0, "ul");
199
- i0.ɵɵtemplate(1, PaginationComponent_Conditional_0_Conditional_1_Template, 9, 4)(2, PaginationComponent_Conditional_0_Conditional_2_Template, 6, 6, "li", 5)(3, PaginationComponent_Conditional_0_Conditional_3_Template, 6, 6, "li", 5)(4, PaginationComponent_Conditional_0_Conditional_4_Template, 3, 5, "li", 6)(5, PaginationComponent_Conditional_0_Conditional_5_Template, 3, 2, "li", 7)(6, PaginationComponent_Conditional_0_Conditional_6_Template, 6, 6, "li", 5)(7, PaginationComponent_Conditional_0_Conditional_7_Template, 6, 6, "li", 5)(8, PaginationComponent_Conditional_0_Conditional_8_Template, 3, 2, "li", 8);
200
- i0.ɵɵelementEnd();
201
- } if (rf & 2) {
202
- const ctx_r1 = i0.ɵɵnextContext();
203
- i0.ɵɵclassMapInterpolate1("pagination advanced ", ctx_r1.navigationClass, "");
204
- i0.ɵɵadvance();
205
- i0.ɵɵconditional(ctx_r1.allowpagesizechange && (ctx_r1.pageSizeOptions == null ? null : ctx_r1.pageSizeOptions[0]) < (ctx_r1.rowSummary == null ? null : ctx_r1.rowSummary.totalRecords) ? 1 : -1);
206
- i0.ɵɵadvance();
207
- i0.ɵɵconditional(!(ctx_r1.dataSize <= ctx_r1.maxResults) ? 2 : -1);
208
- i0.ɵɵadvance();
209
- i0.ɵɵconditional(!(ctx_r1.dataSize <= ctx_r1.maxResults) ? 3 : -1);
210
- i0.ɵɵadvance();
211
- i0.ɵɵconditional(!(ctx_r1.dataSize <= ctx_r1.maxResults) ? 4 : -1);
212
- i0.ɵɵadvance();
213
- i0.ɵɵconditional(!(ctx_r1.dataSize <= ctx_r1.maxResults) ? 5 : -1);
214
- i0.ɵɵadvance();
215
- i0.ɵɵconditional(!(ctx_r1.dataSize <= ctx_r1.maxResults) ? 6 : -1);
216
- i0.ɵɵadvance();
217
- i0.ɵɵconditional(!(ctx_r1.dataSize <= ctx_r1.maxResults) ? 7 : -1);
218
- i0.ɵɵadvance();
219
- i0.ɵɵconditional(ctx_r1.showrecordcount ? 8 : -1);
220
- } }
221
- function PaginationComponent_Conditional_1_Conditional_1_ul_7_For_2_Template(rf, ctx) { if (rf & 1) {
222
- const _r13 = i0.ɵɵgetCurrentView();
223
- i0.ɵɵelementStart(0, "li", 17)(1, "a", 18);
224
- i0.ɵɵlistener("click", function PaginationComponent_Conditional_1_Conditional_1_ul_7_For_2_Template_a_click_1_listener($event) { const option_r14 = i0.ɵɵrestoreView(_r13).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onPageSizeChange($event, option_r14)); })("keydown", function PaginationComponent_Conditional_1_Conditional_1_ul_7_For_2_Template_a_keydown_1_listener($event) { const ɵ$index_128_r15 = i0.ɵɵrestoreView(_r13).$index; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onDropdownKeydown($event, ɵ$index_128_r15)); });
225
- i0.ɵɵtext(2);
226
- i0.ɵɵelementEnd()();
227
- } if (rf & 2) {
228
- const option_r14 = ctx.$implicit;
229
- const ɵ$index_128_r15 = ctx.$index;
230
- const ctx_r1 = i0.ɵɵnextContext(4);
231
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c1, option_r14 == ctx_r1.maxResults));
232
- i0.ɵɵadvance();
233
- i0.ɵɵattribute("tabindex", ɵ$index_128_r15 === ctx_r1.focusedIndex ? 0 : -1);
234
- i0.ɵɵadvance();
235
- i0.ɵɵtextInterpolate(option_r14);
236
- } }
237
- function PaginationComponent_Conditional_1_Conditional_1_ul_7_Template(rf, ctx) { if (rf & 1) {
238
- i0.ɵɵelementStart(0, "ul", 16);
239
- i0.ɵɵrepeaterCreate(1, PaginationComponent_Conditional_1_Conditional_1_ul_7_For_2_Template, 3, 5, "li", 17, i0.ɵɵrepeaterTrackByIdentity);
240
- i0.ɵɵelementEnd();
241
- } if (rf & 2) {
242
- const ctx_r1 = i0.ɵɵnextContext(3);
243
- i0.ɵɵadvance();
244
- i0.ɵɵrepeater(ctx_r1.pageSizeOptions);
245
- } }
246
- function PaginationComponent_Conditional_1_Conditional_1_Conditional_8_Template(rf, ctx) { if (rf & 1) {
247
- i0.ɵɵelementStart(0, "li", 15)(1, "div")(2, "span");
248
- i0.ɵɵtext(3);
249
- i0.ɵɵelementEnd();
250
- i0.ɵɵelementStart(4, "span");
251
- i0.ɵɵtext(5, "of");
252
- i0.ɵɵelementEnd();
253
- i0.ɵɵelementStart(6, "span");
254
- i0.ɵɵtext(7);
255
- i0.ɵɵelementEnd()()();
256
- } if (rf & 2) {
257
- const ctx_r1 = i0.ɵɵnextContext(3);
258
- i0.ɵɵadvance(3);
259
- i0.ɵɵtextInterpolate2("", ctx_r1.rowSummary.startIndex, " - ", ctx_r1.rowSummary.endIndex, "");
260
- i0.ɵɵadvance(4);
261
- i0.ɵɵtextInterpolate(ctx_r1.rowSummary.totalRecords);
262
- } }
263
- function PaginationComponent_Conditional_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
264
- const _r12 = i0.ɵɵgetCurrentView();
265
- i0.ɵɵelementStart(0, "li", 9)(1, "label", 10);
266
- i0.ɵɵtext(2);
267
- i0.ɵɵelementEnd();
268
- i0.ɵɵelementStart(3, "div", 11);
269
- i0.ɵɵlistener("isOpenChange", function PaginationComponent_Conditional_1_Conditional_1_Template_div_isOpenChange_3_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenChange($event)); });
270
- i0.ɵɵelementStart(4, "button", 12);
271
- i0.ɵɵtext(5);
272
- i0.ɵɵelement(6, "span", 13);
273
- i0.ɵɵelementEnd();
274
- i0.ɵɵtemplate(7, PaginationComponent_Conditional_1_Conditional_1_ul_7_Template, 3, 0, "ul", 14);
275
- i0.ɵɵelementEnd()();
276
- i0.ɵɵtemplate(8, PaginationComponent_Conditional_1_Conditional_1_Conditional_8_Template, 8, 3, "li", 15);
277
- } if (rf & 2) {
278
- const ctx_r1 = i0.ɵɵnextContext(2);
279
- i0.ɵɵadvance();
280
- i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_ITEMS_PER_PAGE);
281
- i0.ɵɵadvance();
282
- i0.ɵɵtextInterpolate1("", ctx_r1.appLocale.LABEL_ITEMS_PER_PAGE, " :");
283
- i0.ɵɵadvance(3);
284
- i0.ɵɵtextInterpolate1(" ", ctx_r1.maxResults, " ");
285
- i0.ɵɵadvance(3);
286
- i0.ɵɵconditional((ctx_r1.rowSummary == null ? null : ctx_r1.rowSummary.totalRecords) ? 8 : -1);
287
- } }
288
- function PaginationComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
289
- const _r11 = i0.ɵɵgetCurrentView();
290
- i0.ɵɵelementStart(0, "ul");
291
- i0.ɵɵtemplate(1, PaginationComponent_Conditional_1_Conditional_1_Template, 9, 4);
292
- i0.ɵɵelementStart(2, "li", 33)(3, "a", 34);
293
- i0.ɵɵlistener("click", function PaginationComponent_Conditional_1_Template_a_click_3_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.navigatePage("prev", $event)); });
294
- i0.ɵɵelementStart(4, "span", 20);
295
- i0.ɵɵelement(5, "i", 24);
296
- i0.ɵɵelementEnd();
297
- i0.ɵɵtext(6);
298
- i0.ɵɵelementStart(7, "span", 22);
299
- i0.ɵɵtext(8);
300
- i0.ɵɵelementEnd()()();
301
- i0.ɵɵelementStart(9, "li", 35)(10, "a", 34);
302
- i0.ɵɵlistener("click", function PaginationComponent_Conditional_1_Template_a_click_10_listener($event) { i0.ɵɵrestoreView(_r11); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.navigatePage("next", $event)); });
303
- i0.ɵɵelementStart(11, "span", 20);
304
- i0.ɵɵelement(12, "i", 29);
305
- i0.ɵɵelementEnd();
306
- i0.ɵɵtext(13);
307
- i0.ɵɵelementStart(14, "span", 22);
308
- i0.ɵɵtext(15);
309
- i0.ɵɵelementEnd()()()();
310
- } if (rf & 2) {
311
- const ctx_r1 = i0.ɵɵnextContext();
312
- i0.ɵɵclassMapInterpolate1("pager ", ctx_r1.navigationClass, "");
313
- i0.ɵɵadvance();
314
- i0.ɵɵconditional(ctx_r1.allowpagesizechange && (ctx_r1.pageSizeOptions == null ? null : ctx_r1.pageSizeOptions[0]) < (ctx_r1.rowSummary == null ? null : ctx_r1.rowSummary.totalRecords) ? 1 : -1);
315
- i0.ɵɵadvance();
316
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(12, _c2, ctx_r1.isDisablePrevious));
317
- i0.ɵɵadvance();
318
- i0.ɵɵattribute("aria-disabled", ctx_r1.isDisablePrevious);
319
- i0.ɵɵadvance(3);
320
- i0.ɵɵtextInterpolate1(" ", ctx_r1.appLocale.LABEL_PREVIOUS, " ");
321
- i0.ɵɵadvance(2);
322
- i0.ɵɵtextInterpolate(ctx_r1.isDisablePrevious ? " , Disabled" : "");
323
- i0.ɵɵadvance();
324
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(14, _c2, ctx_r1.isDisableNext));
325
- i0.ɵɵadvance();
326
- i0.ɵɵattribute("aria-disabled", ctx_r1.isDisableNext);
327
- i0.ɵɵadvance(3);
328
- i0.ɵɵtextInterpolate1(" ", ctx_r1.appLocale.LABEL_NEXT, " ");
329
- i0.ɵɵadvance(2);
330
- i0.ɵɵtextInterpolate(ctx_r1.isDisableNext ? " , Disabled" : "");
331
- } }
332
- function PaginationComponent_Conditional_2_Conditional_0_ul_7_For_2_Template(rf, ctx) { if (rf & 1) {
333
- const _r17 = i0.ɵɵgetCurrentView();
334
- i0.ɵɵelementStart(0, "li", 17)(1, "a", 18);
335
- i0.ɵɵlistener("click", function PaginationComponent_Conditional_2_Conditional_0_ul_7_For_2_Template_a_click_1_listener($event) { const option_r18 = i0.ɵɵrestoreView(_r17).$implicit; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onPageSizeChange($event, option_r18)); })("keydown", function PaginationComponent_Conditional_2_Conditional_0_ul_7_For_2_Template_a_keydown_1_listener($event) { const ɵ$index_190_r19 = i0.ɵɵrestoreView(_r17).$index; const ctx_r1 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r1.onDropdownKeydown($event, ɵ$index_190_r19)); });
336
- i0.ɵɵtext(2);
337
- i0.ɵɵelementEnd()();
338
- } if (rf & 2) {
339
- const option_r18 = ctx.$implicit;
340
- const ɵ$index_190_r19 = ctx.$index;
341
- const ctx_r1 = i0.ɵɵnextContext(4);
342
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c1, option_r18 == ctx_r1.maxResults));
343
- i0.ɵɵadvance();
344
- i0.ɵɵattribute("tabindex", ɵ$index_190_r19 === ctx_r1.focusedIndex ? 0 : -1);
345
- i0.ɵɵadvance();
346
- i0.ɵɵtextInterpolate(option_r18);
347
- } }
348
- function PaginationComponent_Conditional_2_Conditional_0_ul_7_Template(rf, ctx) { if (rf & 1) {
349
- i0.ɵɵelementStart(0, "ul", 16);
350
- i0.ɵɵrepeaterCreate(1, PaginationComponent_Conditional_2_Conditional_0_ul_7_For_2_Template, 3, 5, "li", 17, i0.ɵɵrepeaterTrackByIdentity);
351
- i0.ɵɵelementEnd();
352
- } if (rf & 2) {
353
- const ctx_r1 = i0.ɵɵnextContext(3);
354
- i0.ɵɵadvance();
355
- i0.ɵɵrepeater(ctx_r1.pageSizeOptions);
356
- } }
357
- function PaginationComponent_Conditional_2_Conditional_0_Conditional_8_Template(rf, ctx) { if (rf & 1) {
358
- i0.ɵɵelementStart(0, "div", 15)(1, "div")(2, "span");
359
- i0.ɵɵtext(3);
360
- i0.ɵɵelementEnd();
361
- i0.ɵɵelementStart(4, "span");
362
- i0.ɵɵtext(5, "of");
363
- i0.ɵɵelementEnd();
364
- i0.ɵɵelementStart(6, "span");
365
- i0.ɵɵtext(7);
366
- i0.ɵɵelementEnd()()();
367
- } if (rf & 2) {
368
- const ctx_r1 = i0.ɵɵnextContext(3);
369
- i0.ɵɵadvance(3);
370
- i0.ɵɵtextInterpolate2("", ctx_r1.rowSummary.startIndex, " - ", ctx_r1.rowSummary.endIndex, "");
371
- i0.ɵɵadvance(4);
372
- i0.ɵɵtextInterpolate(ctx_r1.rowSummary.totalRecords);
373
- } }
374
- function PaginationComponent_Conditional_2_Conditional_0_Template(rf, ctx) { if (rf & 1) {
375
- const _r16 = i0.ɵɵgetCurrentView();
376
- i0.ɵɵelementStart(0, "div", 9)(1, "label", 10);
377
- i0.ɵɵtext(2);
378
- i0.ɵɵelementEnd();
379
- i0.ɵɵelementStart(3, "div", 11);
380
- i0.ɵɵlistener("isOpenChange", function PaginationComponent_Conditional_2_Conditional_0_Template_div_isOpenChange_3_listener($event) { i0.ɵɵrestoreView(_r16); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.onOpenChange($event)); });
381
- i0.ɵɵelementStart(4, "button", 12);
382
- i0.ɵɵtext(5);
383
- i0.ɵɵelement(6, "span", 13);
384
- i0.ɵɵelementEnd();
385
- i0.ɵɵtemplate(7, PaginationComponent_Conditional_2_Conditional_0_ul_7_Template, 3, 0, "ul", 14);
386
- i0.ɵɵelementEnd()();
387
- i0.ɵɵtemplate(8, PaginationComponent_Conditional_2_Conditional_0_Conditional_8_Template, 8, 3, "div", 15);
388
- } if (rf & 2) {
389
- const ctx_r1 = i0.ɵɵnextContext(2);
390
- i0.ɵɵadvance();
391
- i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_ITEMS_PER_PAGE);
392
- i0.ɵɵadvance();
393
- i0.ɵɵtextInterpolate1("", ctx_r1.appLocale.LABEL_ITEMS_PER_PAGE, " :");
394
- i0.ɵɵadvance(3);
395
- i0.ɵɵtextInterpolate1(" ", ctx_r1.maxResults, " ");
396
- i0.ɵɵadvance(3);
397
- i0.ɵɵconditional((ctx_r1.rowSummary == null ? null : ctx_r1.rowSummary.totalRecords) ? 8 : -1);
398
- } }
399
- function PaginationComponent_Conditional_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
400
- const _r20 = i0.ɵɵgetCurrentView();
401
- i0.ɵɵelementStart(0, "pagination", 37);
402
- i0.ɵɵlistener("pageChanged", function PaginationComponent_Conditional_2_Conditional_1_Template_pagination_pageChanged_0_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.pageChanged($event)); });
403
- i0.ɵɵelementEnd();
404
- } if (rf & 2) {
405
- const ctx_r1 = i0.ɵɵnextContext(2);
406
- const pageTemplate_r21 = i0.ɵɵreference(5);
407
- const prevTemplate_r22 = i0.ɵɵreference(7);
408
- const nextTemplate_r23 = i0.ɵɵreference(9);
409
- i0.ɵɵproperty("ngClass", ctx_r1.navigationClass)("itemsPerPage", ctx_r1.maxResults)("totalItems", ctx_r1.dataSize)("ngModelOptions", i0.ɵɵpureFunction0(12, _c3))("ngModel", ctx_r1.dn.currentPage)("boundaryLinks", ctx_r1.boundarylinks)("maxSize", ctx_r1.maxsize)("directionLinks", ctx_r1.directionlinks)("customPreviousTemplate", prevTemplate_r22)("customNextTemplate", nextTemplate_r23)("customPageTemplate", pageTemplate_r21);
410
- i0.ɵɵattribute("aria-label", "Showing Page " + ctx_r1.dn.currentPage + " of " + ctx_r1.pageCount + " pages");
411
- } }
412
- function PaginationComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
413
- i0.ɵɵtemplate(0, PaginationComponent_Conditional_2_Conditional_0_Template, 9, 4)(1, PaginationComponent_Conditional_2_Conditional_1_Template, 1, 13, "pagination", 36);
414
- } if (rf & 2) {
415
- const ctx_r1 = i0.ɵɵnextContext();
416
- i0.ɵɵconditional(ctx_r1.allowpagesizechange && (ctx_r1.pageSizeOptions == null ? null : ctx_r1.pageSizeOptions[0]) < (ctx_r1.rowSummary == null ? null : ctx_r1.rowSummary.totalRecords) ? 0 : -1);
417
- i0.ɵɵadvance();
418
- i0.ɵɵconditional(!(ctx_r1.dataSize <= ctx_r1.maxResults) ? 1 : -1);
419
- } }
420
- function PaginationComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
421
- i0.ɵɵelementStart(0, "ul", 4)(1, "li", 38)(2, "a", 32);
422
- i0.ɵɵtext(3);
423
- i0.ɵɵelementEnd()()();
424
- } if (rf & 2) {
425
- const ctx_r1 = i0.ɵɵnextContext();
426
- i0.ɵɵadvance(3);
427
- i0.ɵɵtextInterpolate2("", ctx_r1.appLocale.LABEL_TOTAL_RECORDS, ": ", ctx_r1.dataSize, "");
428
- } }
429
- function PaginationComponent_ng_template_4_Conditional_3_Template(rf, ctx) { if (rf & 1) {
430
- i0.ɵɵelementStart(0, "span", 22);
431
- i0.ɵɵtext(1);
432
- i0.ɵɵelementEnd();
433
- } if (rf & 2) {
434
- const page_r24 = i0.ɵɵnextContext().$implicit;
435
- const ctx_r1 = i0.ɵɵnextContext();
436
- i0.ɵɵadvance();
437
- i0.ɵɵtextInterpolate1(" ", ", Showing page " + page_r24.number + " of " + ctx_r1.pageCount, "");
438
- } }
439
- function PaginationComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {
440
- i0.ɵɵelementStart(0, "span", 22);
441
- i0.ɵɵtext(1);
442
- i0.ɵɵelementEnd();
443
- i0.ɵɵtext(2);
444
- i0.ɵɵtemplate(3, PaginationComponent_ng_template_4_Conditional_3_Template, 2, 1, "span", 22);
445
- } if (rf & 2) {
446
- const page_r24 = ctx.$implicit;
447
- i0.ɵɵattribute("data-isacitvepage", page_r24.active);
448
- i0.ɵɵadvance();
449
- i0.ɵɵtextInterpolate("Page ");
450
- i0.ɵɵadvance();
451
- i0.ɵɵtextInterpolate1(" ", page_r24.number, " ");
452
- i0.ɵɵadvance();
453
- i0.ɵɵconditional(page_r24.active ? 3 : -1);
454
- } }
455
- function PaginationComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {
456
- i0.ɵɵelementStart(0, "span", 22);
457
- i0.ɵɵtext(1);
458
- i0.ɵɵelementEnd();
459
- } if (rf & 2) {
460
- const disabled_r25 = ctx.disabled;
461
- i0.ɵɵattribute("data-isdisabled", disabled_r25);
462
- i0.ɵɵadvance();
463
- i0.ɵɵtextInterpolate1("Go to Previous page ", disabled_r25 ? ", Disabled" : "", "");
464
- } }
465
- function PaginationComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {
466
- i0.ɵɵelementStart(0, "span", 22);
467
- i0.ɵɵtext(1);
468
- i0.ɵɵelementEnd();
469
- } if (rf & 2) {
470
- const disabled_r26 = ctx.disabled;
471
- i0.ɵɵattribute("data-isdisabled", disabled_r26);
472
- i0.ɵɵadvance();
473
- i0.ɵɵtextInterpolate1("Go to Next page ", disabled_r26 ? ", Disabled" : "", "");
474
- } }
475
15
  const DEFAULT_CLS = 'app-datanavigator clearfix';
476
16
  const WIDGET_CONFIG = { widgetType: 'wm-pagination', hostClass: DEFAULT_CLS };
477
17
  const sizeClasses = {
@@ -855,9 +395,11 @@ export class PaginationComponent extends StylableComponent {
855
395
  if (event && (isNaN(this.dn.currentPage) || this.dn.currentPage <= 0 || (this.pageCount && (this.dn.currentPage > this.pageCount || isNull(this.dn.currentPage))))) {
856
396
  if (this.dn.currentPage <= 0) {
857
397
  this.dn.currentPage = 1;
398
+ this.goToPage(event);
858
399
  }
859
400
  else if (this.dn.currentPage > this.pageCount) {
860
401
  this.dn.currentPage = this.pageCount;
402
+ this.goToPage(event);
861
403
  }
862
404
  return false;
863
405
  }
@@ -1164,48 +706,32 @@ export class PaginationComponent extends StylableComponent {
1164
706
  event.stopPropagation();
1165
707
  };
1166
708
  }
1167
- static { this.ɵfac = function PaginationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(WidgetRef, 4), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
1168
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PaginationComponent, selectors: [["", "wmPagination", ""]], viewQuery: function PaginationComponent_Query(rf, ctx) { if (rf & 1) {
1169
- i0.ɵɵviewQuery(BsDropdownDirective, 5);
1170
- } if (rf & 2) {
1171
- let _t;
1172
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.bsDropdown = _t.first);
1173
- } }, outputs: { resultEmitter: "resultEmitter", maxResultsEmitter: "maxResultsEmitter" }, standalone: true, features: [i0.ɵɵProvidersFeature([
1174
- provideAsWidgetRef(PaginationComponent)
1175
- ]), i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], attrs: _c0, decls: 10, vars: 4, consts: [["pageTemplate", ""], ["prevTemplate", ""], ["nextTemplate", ""], [3, "class"], [1, "pagination"], [3, "ngClass"], [1, "pagecount", "disabled"], [1, "disabled"], [1, "totalcount", "disabled"], [1, "items-per-page"], [1, "app-label", 3, "title"], ["dropdown", "", "container", "body", 1, "btn-group", 3, "isOpenChange"], ["id", "button-basic", "dropdownToggle", "", "type", "button", "aria-controls", "dropdown-basic", 1, "btn", "app-button", "dropdown-toggle"], [1, "caret"], ["id", "dropdown-basic", "class", "dropdown-menu pagesize-options", "role", "menu", "aria-labelledby", "button-basic", 4, "dropdownMenu"], [1, "item-range"], ["id", "dropdown-basic", "role", "menu", "aria-labelledby", "button-basic", 1, "dropdown-menu", "pagesize-options"], ["role", "menuitem", 3, "ngClass"], [1, "dropdown-item", 3, "click", "keydown"], ["name", "first", "href", "javascript:void(0);", 3, "click", "title"], ["aria-hidden", "true"], [1, "wi", "wi-first-page"], [1, "sr-only"], ["name", "prev", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-chevron-left"], ["href", "javascript:void(0);", "aria-label", "Change Page Number"], ["type", "number", 1, "form-control", 3, "ngModelChange", "keydown", "change", "ngModel", "disabled", "ngModelOptions"], [3, "hidden"], ["name", "next", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-chevron-right"], ["name", "last", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-last-page"], ["href", "javascript:void(0);", "tabindex", "-1", "aria-disabled", "true"], [1, "previous", 3, "ngClass"], ["href", "javascript:void(0);", 3, "click"], [1, "next", 3, "ngClass"], ["role", "navigation", "firstText", "Firtst", "lastText", "Last", 1, "pagination", "basic", 3, "ngClass", "itemsPerPage", "totalItems", "ngModelOptions", "ngModel", "boundaryLinks", "maxSize", "directionLinks", "customPreviousTemplate", "customNextTemplate", "customPageTemplate"], ["role", "navigation", "firstText", "Firtst", "lastText", "Last", 1, "pagination", "basic", 3, "pageChanged", "ngClass", "itemsPerPage", "totalItems", "ngModelOptions", "ngModel", "boundaryLinks", "maxSize", "directionLinks", "customPreviousTemplate", "customNextTemplate", "customPageTemplate"], [1, "totalcount", "disabled", "basiccount"]], template: function PaginationComponent_Template(rf, ctx) { if (rf & 1) {
1176
- i0.ɵɵtemplate(0, PaginationComponent_Conditional_0_Template, 9, 11, "ul", 3)(1, PaginationComponent_Conditional_1_Template, 16, 16, "ul", 3)(2, PaginationComponent_Conditional_2_Template, 2, 2)(3, PaginationComponent_Conditional_3_Template, 4, 2, "ul", 4)(4, PaginationComponent_ng_template_4_Template, 4, 4, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(6, PaginationComponent_ng_template_6_Template, 2, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(8, PaginationComponent_ng_template_8_Template, 2, 2, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
1177
- } if (rf & 2) {
1178
- i0.ɵɵconditional(ctx.navcontrols === "Classic" ? 0 : -1);
1179
- i0.ɵɵadvance();
1180
- i0.ɵɵconditional(ctx.navcontrols === "Pager" ? 1 : -1);
1181
- i0.ɵɵadvance();
1182
- i0.ɵɵconditional(ctx.navcontrols === "Basic" ? 2 : -1);
1183
- i0.ɵɵadvance();
1184
- i0.ɵɵconditional(ctx.navcontrols === "Basic" && ctx.showrecordcount ? 3 : -1);
1185
- } }, dependencies: [CommonModule, i1.NgClass, WmComponentsModule, FormsModule, i2.DefaultValueAccessor, i2.NumberValueAccessor, i2.NgControlStatus, i2.NgModel, PaginationModule, i3.PaginationComponent, BsDropdownModule, i4.BsDropdownMenuDirective, i4.BsDropdownToggleDirective, i4.BsDropdownDirective], encapsulation: 2 }); }
709
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PaginationComponent, deps: [{ token: i0.Injector }, { token: WidgetRef, skipSelf: true }, { token: 'EXPLICIT_CONTEXT', optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
710
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: PaginationComponent, isStandalone: true, selector: "[wmPagination]", outputs: { resultEmitter: "resultEmitter", maxResultsEmitter: "maxResultsEmitter" }, providers: [
711
+ provideAsWidgetRef(PaginationComponent)
712
+ ], viewQueries: [{ propertyName: "bsDropdown", first: true, predicate: BsDropdownDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "\n@if (navcontrols === 'Classic') {\n<ul class=\"pagination advanced {{navigationClass}}\">\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <li class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE}} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n @if (rowSummary?.totalRecords) {\n <li class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </li>\n }\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableFirst}\">\n <a [title]=\"appLocale.LABEL_FIRST\" name=\"first\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableFirst\"\n (click)=\"navigatePage('first', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-first-page\"></i></span>\n <span class=\"sr-only\">Go to first page {{ isDisableFirst ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a [title]=\"appLocale.LABEL_PREVIOUS\" name=\"prev\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisablePrevious\"\n (click)=\"navigatePage('prev', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n <span class=\"sr-only\">Go to previous page {{ isDisablePrevious ? ', Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li class=\"pagecount disabled\">\n <a href=\"javascript:void(0);\" aria-label=\"Change Page Number\">\n <input [(ngModel)]=\"dn.currentPage\" [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount\" [disabled]=\"isDisableCurrent\"\n [ngModelOptions]=\"{standalone: true}\"\n type=\"number\"\n (keydown)=\"onKeyDown($event)\" (change)=\"onModelChange($event)\" class=\"form-control\"/>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li class=\"disabled\">\n <a [hidden]=\"isDisableCount\"> / {{pageCount}}</a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableNext}\">\n <a [title]=\"appLocale.LABEL_NEXT\" name=\"next\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableNext\"\n (click)=\"navigatePage('next', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n <span class=\"sr-only\">Go to next page {{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableLast}\">\n <a [title]=\"appLocale.LABEL_LAST\" name=\"last\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableLast\"\n (click)=\"navigatePage('last', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-last-page\"></i></span>\n <span class=\"sr-only\">Go to last page {{ isDisableLast ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (showrecordcount) {\n <li class=\"totalcount disabled\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n }\n</ul>\n}\n@if (navcontrols === 'Pager') {\n <ul class=\"pager {{navigationClass}}\">\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <li class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE}} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n @if (rowSummary?.totalRecords) {\n <li class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </li>\n }\n }\n@if (!(dataSize<=maxResults)) {\n <li class=\"previous\" [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('prev', $event)\"\n [attr.aria-disabled]=\"isDisablePrevious\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n {{appLocale.LABEL_PREVIOUS}}\n <span class=\"sr-only\">{{ isDisablePrevious ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"next\" [ngClass]=\"{'disabled':isDisableNext}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('next', $event)\"\n [attr.aria-disabled]=\"isDisableNext\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n {{appLocale.LABEL_NEXT}}\n <span class=\"sr-only\">{{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n </ul>\n}\n\n@if (navcontrols === 'Basic') {\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <div class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE }} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </div>\n @if (rowSummary?.totalRecords) {\n <div class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </div>\n }\n }\n @if (!(dataSize<=maxResults)) {\n <pagination class=\"pagination basic\" [ngClass]=\"navigationClass\" role=\"navigation\"\n [itemsPerPage]=\"maxResults\" [totalItems]=\"dataSize\"\n (pageChanged)=\"pageChanged($event)\" [ngModelOptions]=\"{standalone:true}\" [ngModel]=\"dn.currentPage\"\n [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount + ' pages'\"\n [boundaryLinks]=\"boundarylinks\" [maxSize]=\"maxsize\"\n [directionLinks]=\"directionlinks\"\n firstText=\"Firtst\" lastText=\"Last\"\n [customPreviousTemplate]=\"prevTemplate\"\n [customNextTemplate]=\"nextTemplate\"\n [customPageTemplate]=\"pageTemplate\"></pagination>\n }\n}\n\n@if (navcontrols === 'Basic' && showrecordcount) {\n <ul class=\"pagination\">\n <li class=\"totalcount disabled basiccount\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n </ul>\n}\n\n<ng-template #pageTemplate let-page>\n <span class=\"sr-only\" [attr.data-isacitvepage]=\"page.active\">{{'Page '}}</span>\n {{page.number}}\n @if (page.active) {\n <span class=\"sr-only\"> {{', Showing page ' + page.number + ' of ' + pageCount}}</span>\n }\n</ng-template>\n<ng-template #prevTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Previous page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n<ng-template #nextTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Next page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: PaginationModule }, { kind: "component", type: i3.PaginationComponent, selector: "pagination", inputs: ["align", "maxSize", "boundaryLinks", "directionLinks", "firstText", "previousText", "nextText", "lastText", "rotate", "pageBtnClass", "disabled", "customPageTemplate", "customNextTemplate", "customPreviousTemplate", "customFirstTemplate", "customLastTemplate", "itemsPerPage", "totalItems"], outputs: ["numPages", "pageChanged"] }, { kind: "ngmodule", type: BsDropdownModule }, { kind: "directive", type: i4.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i4.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i4.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }] }); }
1186
713
  }
1187
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationComponent, [{
1188
- type: Component,
1189
- args: [{ standalone: true, imports: [CommonModule, WmComponentsModule, FormsModule, PaginationModule, BsDropdownModule, MenuComponent], selector: '[wmPagination]', providers: [
1190
- provideAsWidgetRef(PaginationComponent)
1191
- ], template: "\n@if (navcontrols === 'Classic') {\n<ul class=\"pagination advanced {{navigationClass}}\">\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <li class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE}} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n @if (rowSummary?.totalRecords) {\n <li class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </li>\n }\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableFirst}\">\n <a [title]=\"appLocale.LABEL_FIRST\" name=\"first\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableFirst\"\n (click)=\"navigatePage('first', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-first-page\"></i></span>\n <span class=\"sr-only\">Go to first page {{ isDisableFirst ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a [title]=\"appLocale.LABEL_PREVIOUS\" name=\"prev\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisablePrevious\"\n (click)=\"navigatePage('prev', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n <span class=\"sr-only\">Go to previous page {{ isDisablePrevious ? ', Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li class=\"pagecount disabled\">\n <a href=\"javascript:void(0);\" aria-label=\"Change Page Number\">\n <input [(ngModel)]=\"dn.currentPage\" [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount\" [disabled]=\"isDisableCurrent\"\n [ngModelOptions]=\"{standalone: true}\"\n type=\"number\"\n (keydown)=\"onKeyDown($event)\" (change)=\"onModelChange($event)\" class=\"form-control\"/>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li class=\"disabled\">\n <a [hidden]=\"isDisableCount\"> / {{pageCount}}</a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableNext}\">\n <a [title]=\"appLocale.LABEL_NEXT\" name=\"next\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableNext\"\n (click)=\"navigatePage('next', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n <span class=\"sr-only\">Go to next page {{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableLast}\">\n <a [title]=\"appLocale.LABEL_LAST\" name=\"last\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableLast\"\n (click)=\"navigatePage('last', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-last-page\"></i></span>\n <span class=\"sr-only\">Go to last page {{ isDisableLast ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (showrecordcount) {\n <li class=\"totalcount disabled\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n }\n</ul>\n}\n@if (navcontrols === 'Pager') {\n <ul class=\"pager {{navigationClass}}\">\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <li class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE}} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n @if (rowSummary?.totalRecords) {\n <li class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </li>\n }\n }\n\n <li class=\"previous\" [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('prev', $event)\"\n [attr.aria-disabled]=\"isDisablePrevious\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n {{appLocale.LABEL_PREVIOUS}}\n <span class=\"sr-only\">{{ isDisablePrevious ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"next\" [ngClass]=\"{'disabled':isDisableNext}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('next', $event)\"\n [attr.aria-disabled]=\"isDisableNext\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n {{appLocale.LABEL_NEXT}}\n <span class=\"sr-only\">{{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n </ul>\n}\n\n@if (navcontrols === 'Basic') {\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <div class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE }} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </div>\n @if (rowSummary?.totalRecords) {\n <div class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </div>\n }\n }\n @if (!(dataSize<=maxResults)) {\n <pagination class=\"pagination basic\" [ngClass]=\"navigationClass\" role=\"navigation\"\n [itemsPerPage]=\"maxResults\" [totalItems]=\"dataSize\"\n (pageChanged)=\"pageChanged($event)\" [ngModelOptions]=\"{standalone:true}\" [ngModel]=\"dn.currentPage\"\n [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount + ' pages'\"\n [boundaryLinks]=\"boundarylinks\" [maxSize]=\"maxsize\"\n [directionLinks]=\"directionlinks\"\n firstText=\"Firtst\" lastText=\"Last\"\n [customPreviousTemplate]=\"prevTemplate\"\n [customNextTemplate]=\"nextTemplate\"\n [customPageTemplate]=\"pageTemplate\"></pagination>\n }\n}\n\n@if (navcontrols === 'Basic' && showrecordcount) {\n <ul class=\"pagination\">\n <li class=\"totalcount disabled basiccount\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n </ul>\n}\n\n<ng-template #pageTemplate let-page>\n <span class=\"sr-only\" [attr.data-isacitvepage]=\"page.active\">{{'Page '}}</span>\n {{page.number}}\n @if (page.active) {\n <span class=\"sr-only\"> {{', Showing page ' + page.number + ' of ' + pageCount}}</span>\n }\n</ng-template>\n<ng-template #prevTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Previous page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n<ng-template #nextTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Next page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n" }]
1192
- }], () => [{ type: i0.Injector }, { type: undefined, decorators: [{
1193
- type: SkipSelf
1194
- }, {
1195
- type: Inject,
1196
- args: [WidgetRef]
1197
- }] }, { type: undefined, decorators: [{
1198
- type: Inject,
1199
- args: ['EXPLICIT_CONTEXT']
1200
- }, {
1201
- type: Optional
1202
- }] }], { resultEmitter: [{
1203
- type: Output
1204
- }], maxResultsEmitter: [{
1205
- type: Output
1206
- }], bsDropdown: [{
1207
- type: ViewChild,
1208
- args: [BsDropdownDirective]
1209
- }] }); })();
1210
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PaginationComponent, { className: "PaginationComponent", filePath: "pagination.component.ts", lineNumber: 49 }); })();
1211
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWlCLFFBQVEsRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFOUgsT0FBTyxFQUNILFVBQVUsRUFDVixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQ0FBZ0MsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hLLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxn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cUpBUm5CO2dCQUNQLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDO2FBQzFDO1lDb0tMLEFBSEEsQUFQQSxBQVJBLEFBN0NBLEFBcERBLEFBOUZBLDRFQUFpQyxnRUE4RkYscURBb0RBLDhEQTZDbUIsd0dBUWQsd0dBT2Usd0dBR0E7O1lBak5uRCx3REE2RkM7WUFDRCxjQWtEQztZQWxERCxzREFrREM7WUFFRCxjQTJDQztZQTNDRCxzREEyQ0M7WUFFRCxjQU1DO1lBTkQsNkVBTUM7NEJEN0pXLFlBQVksY0FBRSxrQkFBa0IsRUFBRSxXQUFXLG1GQUFFLGdCQUFnQiwwQkFBRSxnQkFBZ0I7O2lGQU9oRixtQkFBbUI7Y0FUL0IsU0FBUzs2QkFDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxZQUMvRixnQkFBZ0IsYUFFZjtvQkFDUCxrQkFBa0IscUJBQXFCO2lCQUMxQzs7c0JBc0YyQixRQUFROztzQkFBSSxNQUFNO3VCQUFDLFNBQVM7O3NCQUFrQixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUTtxQkFsRnBHLGFBQWE7a0JBQXRCLE1BQU07WUFDRyxpQkFBaUI7a0JBQTFCLE1BQU07WUFDbUMsVUFBVTtrQkFBbkQsU0FBUzttQkFBQyxtQkFBbUI7O2tGQUpyQixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgV21Db21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2Jhc2VcIjtcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT3V0cHV0LCBTa2lwU2VsZiwgQWZ0ZXJWaWV3SW5pdCwgT3B0aW9uYWwsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgJGFwcERpZ2VzdCxcbiAgICAkd2F0Y2gsXG4gICAgQXBwQ29uc3RhbnRzLFxuICAgIERhdGFTb3VyY2UsXG4gICAgZGVib3VuY2UsXG4gICAgaXNEZWZpbmVkLFxuICAgIHN3aXRjaENsYXNzLFxuICAgIHRyaWdnZXJGblxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBERUJPVU5DRV9USU1FUywgZ2V0T3JkZXJCeUV4cHIsIHByb3ZpZGVBc1dpZGdldFJlZiwgU3R5bGFibGVDb21wb25lbnQsIHN0eWxlciwgV2lkZ2V0UmVmLCB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlc30gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9wYWdpbmF0aW9uLnByb3BzJztcbmltcG9ydCB7Zm9yRWFjaCwgZ2V0LCBpc0FycmF5LCBpc0VtcHR5LCBpc051bGwsIGlzU3RyaW5nLCByYW5nZX0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHsgUGFnaW5hdGlvbk1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvcGFnaW5hdGlvbic7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duTW9kdWxlLCBCc0Ryb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9tZW51JztcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWRhdGFuYXZpZ2F0b3IgY2xlYXJmaXgnO1xuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tcGFnaW5hdGlvbicsIGhvc3RDbGFzczogREVGQVVMVF9DTFN9O1xuXG5jb25zdCBzaXplQ2xhc3NlcyA9IHtcbiAgICAnUGFnZXInOiB7XG4gICAgICAgICdzbWFsbCc6ICdwYWdlci1zbScsXG4gICAgICAgICdsYXJnZSc6ICdwYWdlci1sZydcbiAgICB9LFxuICAgICdCYXNpYyc6IHtcbiAgICAgICAgJ3NtYWxsJzogJ3BhZ2luYXRpb24tc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnaW5hdGlvbi1sZydcbiAgICB9LFxuICAgICdDbGFzc2ljJzoge1xuICAgICAgICAnc21hbGwnOiAncGFnaW5hdGlvbi1zbScsXG4gICAgICAgICdsYXJnZSc6ICdwYWdpbmF0aW9uLWxnJ1xuICAgIH1cbn07XG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgV21Db21wb25lbnRzTW9kdWxlLCBGb3Jtc01vZHVsZSwgUGFnaW5hdGlvbk1vZHVsZSwgQnNEcm9wZG93bk1vZHVsZSwgTWVudUNvbXBvbmVudF0sXG4gICAgc2VsZWN0b3I6ICdbd21QYWdpbmF0aW9uXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoUGFnaW5hdGlvbkNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG4gICAgQE91dHB1dCgpIHJlc3VsdEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBtYXhSZXN1bHRzRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQFZpZXdDaGlsZChCc0Ryb3Bkb3duRGlyZWN0aXZlKSBwcm90ZWN0ZWQgYnNEcm9wZG93bjtcblxuICAgIGRhdGFzb3VyY2U7XG4gICAgbWF4UmVzdWx0cztcbiAgICBwYWdlU2l6ZU9wdGlvbnM7XG4gICAgcHJldlBhZ2VTaXplO1xuICAgIGFjdHVhbFBhZ2VTaXplO1xuICAgIGFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgZGVmYXVsdFBhZ2VTaXplT3B0aW9ucyA9IFtdO1xuICAgIGZvY3VzZWRJbmRleCA9IDA7XG4gICAgcm93U3VtbWFyeTtcbiAgICBuYXZpZ2F0aW9uc2l6ZTtcbiAgICBzaG93cmVjb3JkY291bnQ7XG5cbiAgICBuYXZjb250cm9scztcbiAgICBuYXZpZ2F0aW9uO1xuXG4gICAgYm91bmRhcnlsaW5rcztcbiAgICBkaXJlY3Rpb25saW5rcztcblxuICAgIG5hdmlnYXRpb25DbGFzcztcbiAgICBkbiA9IHtcbiAgICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuXG4gICAgcGFnZUNvdW50ID0gMDtcbiAgICBpc0Rpc2FibGVOZXh0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVQcmV2aW91cyA9IHRydWU7XG4gICAgaXNEaXNhYmxlRmlyc3QgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUxhc3QgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUN1cnJlbnQ7XG4gICAgZGF0YVNpemU7XG4gICAgcHJldnNob3dyZWNvcmRjb3VudDtcbiAgICBpc0Rpc2FibGVDb3VudDtcbiAgICBmaXJzdFJvdztcbiAgICByZXN1bHQ7XG4gICAgX19mdWxsRGF0YTtcbiAgICBkYXRhc2V0O1xuICAgIG9wdGlvbnM7XG4gICAgc3RhdGVoYW5kbGVyO1xuICAgIGZpbHRlckZpZWxkcztcbiAgICBzb3J0T3B0aW9ucztcbiAgICBiaW5kZGF0YXNldDtcbiAgICBwYWdpbmF0aW9uO1xuICAgIGxvZ2ljYWxPcDtcblxuICAgIHByaXZhdGUgX2RlYm91bmNlZEFwcGx5RGF0YXNldCA9IGRlYm91bmNlKCgpID0+IHRoaXMud2lkZ2V0LmRhdGFzZXQgPSB0aGlzLmRhdGFzZXQsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkUGFnZUNoYW5nZWQgPSBkZWJvdW5jZShldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gZXZlbnQgJiYgZXZlbnQucGFnZTtcbiAgICAgICAgY29uc3QgbWF4UmVzdWx0cyA9IGV2ZW50ICYmIChldmVudC5wYWdlc2l6ZSB8fCBldmVudC5pdGVtc1BlclBhZ2UpIHx8IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgXG4gICAgICAgIC8vIERvIG5vdCBjYWxsIGdvVG9QYWdlIGlmIHBhZ2UgaGFzIG5vdCBjaGFuZ2VkXG4gICAgICAgIGlmIChjdXJyZW50UGFnZSAhPT0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCB0aGlzLm1heFJlc3VsdHMgIT09IG1heFJlc3VsdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluc3QgPSAodGhpcyBhcyBhbnkpLnBhcmVudCB8fCB0aGlzO1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gbWF4UmVzdWx0cztcbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0c0VtaXR0ZXIuZW1pdCh0aGlzLm1heFJlc3VsdHMpO1xuICAgICAgICAgICAgaW5zdC5pbnZva2VFdmVudENhbGxiYWNrKCdwYWdpbmF0aW9uY2hhbmdlJywgeyRldmVudDogdW5kZWZpbmVkLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2V9KTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb24gPT09ICdCYXNpYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuXG4gICAgcHJpdmF0ZSBfc2V0QXJpYUZvckJhc2ljTmF2aWdhdGlvbigpIHtcbiAgICAgICAgZm9yRWFjaCh0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2EnKSwgKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdocmVmJywgJ2phdmFzY3JpcHQ6dm9pZCgwKTsnKTtcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IGl0ZW0ucXVlcnlTZWxlY3Rvcignc3BhbicpO1xuICAgICAgICAgICAgaWYgKGNoaWxkTm9kZT8uZGF0YXNldC5pc2FjaXR2ZXBhZ2UgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICd0cnVlJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihjaGlsZE5vZGU/LmRhdGFzZXQuaXNkaXNhYmxlZCA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGl0ZW0ucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGluajogSW5qZWN0b3IsIEBTa2lwU2VsZigpIEBJbmplY3QoV2lkZ2V0UmVmKSBwdWJsaWMgcGFyZW50LCBASW5qZWN0KCdFWFBMSUNJVF9DT05URVhUJykgQE9wdGlvbmFsKCkgZXhwbGljaXRDb250ZXh0OiBhbnkpIHtcbiAgICAgICAgc3VwZXIoaW5qLCBXSURHRVRfQ09ORklHLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICBzdHlsZXIodGhpcy5uYXRpdmVFbGVtZW50LCB0aGlzKTtcbiAgICAgICAgc2V0VGltZW91dCgoKT0+IHtcbiAgICAgICAgICAgIHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSA9IHRoaXMucGFyZW50LmFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgICAgICAgICBpZih0aGlzLmFsbG93cGFnZXNpemVjaGFuZ2UpXG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zID0gdGhpcy5wYXJlbnQ/LnBhZ2VzaXplb3B0aW9ucyA/IHRoaXMucGFyZW50LnBhZ2VzaXplb3B0aW9ucz8uc3BsaXQoJywnKS5tYXAoTnVtYmVyKS5zb3J0KChhLCBiKSA9PiBhIC0gYikgOiBbXTtcbiAgICAgICAgfSwgMCk7XG4gICAgfVxuXG4gICAgc2V0UmVzdWx0KHJlc3VsdCkge1xuICAgICAgICAvLyBUT0RPOiBFbWl0IGV2ZW50IG9ubHkgaWYgcmVzdWx0IGlzIGNoYW5nZWRcbiAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMucmVzdWx0RW1pdHRlci5lbWl0KHRoaXMucmVzdWx0KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbmF2aWdhdGlvbkNsYXNzIGJhc2VkIG9uIG5hdmlnYXRpb24gYW5kIG5hdmlnYXRpb25TaXplIHByb3BzXG4gICAgcHJpdmF0ZSB1cGRhdGVOYXZTaXplKCkge1xuICAgICAgICBjb25zdCBzaXplQ2xzID0gc2l6ZUNsYXNzZXNbdGhpcy5uYXZjb250cm9sc107XG4gICAgICAgIGlmIChzaXplQ2xzICYmIHRoaXMubmF2aWdhdGlvbnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNsYXNzID0gc2l6ZUNsc1t0aGlzLm5hdmlnYXRpb25zaXplXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNsYXNzID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byByZXNldCB0aGUgcGFnaW5nIHZhbHVlcyB0byBkZWZhdWx0LlxuICAgIHJlc2V0UGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZGF0YVNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBwYWdpbmcgdmFsdWVzLiovXG4gICAgY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCkge1xuICAgICAgICB0aGlzLnBhZ2VDb3VudCA9ICh0aGlzLmRhdGFTaXplID4gdGhpcy5tYXhSZXN1bHRzKSA/IChNYXRoLmNlaWwodGhpcy5kYXRhU2l6ZSAvIHRoaXMubWF4UmVzdWx0cykpIDogKHRoaXMuZGF0YVNpemUgPCAwID8gMCA6IDEpO1xuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCAxO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gc2V0IGRlZmF1bHQgdmFsdWVzIHRvIHRoZSBwYWdpbmcgcGFyYW1ldGVycyovXG4gICAgc2V0RGVmYXVsdFBhZ2luZ1ZhbHVlcyhkYXRhU2l6ZSwgbWF4UmVzdWx0cywgY3VycmVudFBhZ2UpIHtcbiAgICAgICAgLypJZiBuZWl0aGVyICdkYXRhU2l6ZScgbm9yICdtYXhSZXN1bHRzJyBpcyBzZXQsIHRoZW4gc2V0IGRlZmF1bHQgdmFsdWVzIHRvIHRoZSBwYWdpbmcgcGFyYW1ldGVycy4qL1xuICAgICAgICBpZiAoIWRhdGFTaXplICYmICFtYXhSZXN1bHRzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IDE7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IGRhdGFTaXplO1xuICAgICAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IGRhdGFTaXplO1xuICAgICAgICB9IGVsc2UgeyAvKkVsc2UsIHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlcyBhbmQgcmVjYWxjdWxhdGUgcGFnaW5nIHBhcmFtZXRlcnMuKi9cbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IG1heFJlc3VsdHMgfHwgdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IGlzRGVmaW5lZChkYXRhU2l6ZSkgPyBkYXRhU2l6ZSA6IHRoaXMuZGF0YVNpemU7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2UgfHwgdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5lbWl0KHRoaXMubWF4UmVzdWx0cyk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayB0aGUgZGF0YVNpemUgYW5kIG1hbmlwdWxhdGUgdGhlIG5hdmlnYXRvciBhY2NvcmRpbmdseS4qL1xuICAgIGNoZWNrRGF0YVNpemUoZGF0YVNpemUsIG51bWJlck9mRWxlbWVudHM/LCBzaXplPykge1xuICAgICAgICAvKklmIHRoZSBkYXRhU2l6ZSBpcyAtMSBvciBJbnRlZ2VyLk1BWF9WQUxVRSggd2hpY2ggaXMgMjE0NzQ4MzY0NyksIHRoZW4gdGhlIHRvdGFsIG51bWJlciBvZiByZWNvcmRzIGlzIG5vdCBrbm93bi5cbiAgICAgICAgICogSGVuY2UsXG4gICAgICAgICAqIDEuIEhpZGUgdGhlICdUb3RhbCBSZWNvcmQgQ291bnQnLlxuICAgICAgICAgKiAyLiBEaXNhYmxlIHRoZSAnR29Ub0xhc3RQYWdlJyBsaW5rIGFzIHRoZSBwYWdlIG51bWJlciBvZiB0aGUgbGFzdCBwYWdlIGlzIG5vdCBrbm93bi4qL1xuICAgICAgICBpZiAoZGF0YVNpemUgPT09IC0xIHx8IGRhdGFTaXplID09PSBBcHBDb25zdGFudHMuSU5UX01BWF9WQUxVRSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2c2hvd3JlY29yZGNvdW50ID0gdGhpcy5zaG93cmVjb3JkY291bnQ7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUxhc3QgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVDb3VudCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNob3dyZWNvcmRjb3VudCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgbnVtYmVyIG9mIHJlY29yZHMgaW4gY3VycmVudCBwYWdlIGlzIGxlc3MgdGhhbiB0aGUgbWF4IHJlY29yZHMgc2l6ZSwgdGhpcyBpcyB0aGUgbGFzdCBwYWdlLiBTbyBkaXNhYmxlIG5leHQgYnV0dG9uLlxuICAgICAgICAgICAgaWYgKG51bWJlck9mRWxlbWVudHMgPCBzaXplKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQ291bnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd3JlY29yZGNvdW50ID0gdGhpcy5wcmV2c2hvd3JlY29yZGNvdW50IHx8IHRoaXMuc2hvd3JlY29yZGNvdW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBkaXNhYmxlIG5hdmlnYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgYW5kIHRvdGFsIHBhZ2VzLiovXG4gICAgZGlzYWJsZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudFBhZ2VGaXJzdCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlID09PSAxKSxcbiAgICAgICAgICAgIGlzQ3VycmVudFBhZ2VMYXN0ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IHRoaXMucGFnZUNvdW50KTtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlRmlyc3QgPSB0aGlzLmlzRGlzYWJsZVByZXZpb3VzID0gaXNDdXJyZW50UGFnZUZpcnN0O1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVOZXh0ID0gdGhpcy5pc0Rpc2FibGVMYXN0ID0gaXNDdXJyZW50UGFnZUxhc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBXTVMtMTg4Njc6IEluIGNhc2Ugb2Ygc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgZm9yIHBhZ2VyIHR5cGUgcGFnaW5hdGlvbiBkZXBlbmQgb24gcHJldiBhbmQgbmV4dCBmbGFncyB3aGljaCBhcmUgc2V0IGJ5IGRldmVsb3BlclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVGaXJzdCA9IHRoaXMuaXNEaXNhYmxlUHJldmlvdXMgPSAhdGhpcy5wYWdpbmF0aW9uLnByZXY7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0aGlzLmlzRGlzYWJsZUxhc3QgPSAhdGhpcy5wYWdpbmF0aW9uLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0Rpc2FibGVDdXJyZW50ID0gaXNDdXJyZW50UGFnZUZpcnN0ICYmIGlzQ3VycmVudFBhZ2VMYXN0O1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGNsaWVudCBzaWRlIHBhZ2luYXRpb24sIHdoZW4gbG9hZCBtb3JlIHJlYWNoZXMgbGFzdCBwYWdlIGhpZGUgdGhlIG9uLWRlbWFuZCBncmlkIGVsZVxuICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmIHRoaXMuZGF0YXNldC5sZW5ndGggJiYgdGhpcy5pc0Rpc2FibGVOZXh0ICYmIHRoaXMucGFyZW50Lm9uRGVtYW5kTG9hZCAmJiB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5jYWxsRGF0YUdyaWRNZXRob2QoJ2hpZGVMb2FkaW5nSW5kaWNhdG9yJywgdGhpcy5pc0Rpc2FibGVOZXh0LCB0aGlzLnBhcmVudC5pbmZTY3JvbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgdmFyaWFibGUgYm91bmQgdG8gdGhlIGRhdGEtbmF2aWdhdG9yIGhhcyBwYWdpbmcuKi9cbiAgICBpc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUpO1xuICAgIH1cblxuICAgIC8vIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3Qgd2hpY2ggZ2l2ZXMgc3VtbWFyeSBvZiB0aGUgY3VycmVudCBwYWdlIGRhdGEgKGV4OiBJbiBVSSBpdCBpcyBzaG93biBhcyAgMSB0byAxMCBvdXQgb2YgNTAgcmVjb3JkcylcbiAgICBnZXRQYWdlRGV0YWlscyhzdGFydEluZGV4LCBlbmRJbmRleCwgdG90YWxSZWNvcmRzKSB7XG4gICAgICAgIHRoaXMucm93U3VtbWFyeSA9ICAoaXNEZWZpbmVkKHN0YXJ0SW5kZXgpICYmIGlzRGVmaW5lZChlbmRJbmRleCkgJiYgaXNEZWZpbmVkKHRvdGFsUmVjb3JkcykpID8ge1xuICAgICAgICAgICAgc3RhcnRJbmRleDogc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGVuZEluZGV4OiBlbmRJbmRleCxcbiAgICAgICAgICAgIHRvdGFsUmVjb3JkczogdG90YWxSZWNvcmRzXG4gICAgICAgIH06IHt9O1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgcmVzdWx0IGZvciBjbGllbnQgc2lkZSBwYWdpbmF0aW9uXG4gICAgc2V0Tm9uUGFnZWFibGVEYXRhKG5ld1ZhbCkge1xuICAgICAgICBsZXQgZGF0YVNpemUsXG4gICAgICAgICAgICBtYXhSZXN1bHRzLFxuICAgICAgICAgICAgY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzdGFydEluZGV4O1xuICAgICAgICBkYXRhU2l6ZSA9IGlzQXJyYXkobmV3VmFsKSA/IG5ld1ZhbC5sZW5ndGggOiAoaXNFbXB0eShuZXdWYWwpID8gMCA6IDEpO1xuICAgICAgICBtYXhSZXN1bHRzID0gKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubWF4UmVzdWx0cykgfHwgZGF0YVNpemU7XG5cbiAgICAgICAgaWYgKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSkgeyAvLyB3aGVuIGRlZmF1bHQgcGFnZSBzaXplIGlzIG5vdCBnaXZlbiB0aGVuIHVzZSBtYXhSZXN1bHRzIGluc3RlYWQgb2Ygb3B0aW9ucy5tYXhSZXN1bHRzXG4gICAgICAgICAgICBtYXhSZXN1bHRzID0gdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvciBzdGF0aWMgdmFyaWFibGUsIGtlZXAgdGhlIGN1cnJlbnQgcGFnZS4gRm9yIG90aGVyIHZhcmlhYmxlcyB3aXRob3V0IHBhZ2luYXRpb24gcmVzZXQgdGhlIHBhZ2UgdG8gMVxuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjMyNjNdOiBncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YSBmbGFnIGlzIGZhbHNlIHdoZW4gZGF0YXNldCBpcyBjaGFuZ2VkIGZyb20gc2NyaXB0LCBzbyBzZXR0aW5nIGN1cnJlbnQgcGFnZSB0byAxXG4gICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgKHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkgfHwgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgJiYgKHRoaXMucGFyZW50LmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSAmJiAoZ2V0KHRoaXMucGFyZW50LCAnZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCcpID09PSB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5BQ1RJT05TLkRBVEFTRVRfVVBEQVRFIHx8ICFnZXQodGhpcy5wYXJlbnQsICdncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YScpKSkpKSkge1xuICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuXG4gICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5kbi5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxLCBNYXRoLm1pbihzdGFydEluZGV4ICsgdGhpcy5tYXhSZXN1bHRzLCBuZXdWYWw/Lmxlbmd0aCksIG5ld1ZhbD8ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zZXRSZXN1bHQoaXNBcnJheShuZXdWYWwpID8gbmV3VmFsLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMpIDogbmV3VmFsKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIHNldCB0aGUgdmFsdWVzIG5lZWRlZCBmb3IgcGFnaW5hdGlvbiovXG4gICAgcHJpdmF0ZSBzZXRQYWdpbmdWYWx1ZXMobmV3VmFsKSB7XG4gICAgICAgIGxldCBkYXRhU2l6ZSxcbiAgICAgICAgICAgIG1heFJlc3VsdHMsXG4gICAgICAgICAgICBjdXJyZW50UGFnZSxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICBkYXRhU291cmNlO1xuICAgICAgICBsZXQgdmFyaWFibGVPcHRpb25zOiBhbnkgPSB7fTtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGRhdGEgaW4gX19mdWxsRGF0YS4gVGhpcyBpcyB1c2VkIGZvciBjbGllbnQgc2lkZSBzZWFyY2hpbmcgd2l0dmFoIG91dCBtb2RpZnlpbmcgdGhlIGFjdHVhbCBkYXRhc2V0LlxuICAgICAgICB0aGlzLl9fZnVsbERhdGEgPSBuZXdWYWw7XG4gICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gdGhpcy5kYXRhc291cmNlIHx8IHt9O1xuICAgICAgICAgICAgdmFyaWFibGVPcHRpb25zID0gZGF0YVNvdXJjZS5fb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIC8qQ2hlY2sgZm9yIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGF0YSBzZXQqL1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QQUdJTkdfT1BUSU9OUykgfHwge307XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIFwiZmlsdGVyRmllbGRzXCIgYW5kIFwic29ydE9wdGlvbnNcIiBoYXZlIGJlZW4gc2V0LCB0aGVuIHNldCB0aGVtIHNvIHRoYXQgdGhlIGZpbHRlcnMgY2FuIGJlIHJldGFpbmVkIHdoaWxlIGZldGNoaW5nIGRhdGEgdXBvbiBwYWdlIG5hdmlnYXRpb24uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gdmFyaWFibGVPcHRpb25zLmZpbHRlckZpZWxkcyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dpY2FsT3AgPSB2YXJpYWJsZU9wdGlvbnMubG9naWNhbE9wIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRPcHRpb25zID0gdmFyaWFibGVPcHRpb25zLm9yZGVyQnkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0FycmF5KHRoaXMucGFnaW5hdGlvbi5zb3J0KSA/IGdldE9yZGVyQnlFeHByKHRoaXMucGFnaW5hdGlvbi5zb3J0KSA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNpemUgPSB0aGlzLnBhZ2luYXRpb24udG90YWxFbGVtZW50cztcbiAgICAgICAgICAgICAgICAgICAgbWF4UmVzdWx0cyA9IHRoaXMucGFnaW5hdGlvbi5zaXplID0gTnVtYmVyKHRoaXMucGFnaW5hdGlvbi5zaXplKSA/IHRoaXMucGFnaW5hdGlvbi5zaXplIDogZ2V0KHRoaXMuZGF0YXNvdXJjZS5kYXRhU2V0LCB0aGlzLnBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzID0gTnVtYmVyKHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzKSA/IHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzIDogZ2V0KHRoaXMuZGF0YXNvdXJjZS5kYXRhU2V0LCB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cylcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnBhZ2luYXRpb24ubnVtYmVyKSkgeyAvLyBudW1iZXIgaXMgcGFnZSBudW1iZXIgcmVjZWl2ZWQgZnJvbSBiYWNrZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IHRoaXMucGFnaW5hdGlvbi5udW1iZXIgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyogU2VuZGluZyBwYWdlQ291bnQgdW5kZWZpbmVkIHRvIGNhbGN1bGF0ZSBpdCBhZ2FpbiBmb3IgcXVlcnkuKi9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0UGFnaW5nVmFsdWVzKGRhdGFTaXplLCBtYXhSZXN1bHRzLCBjdXJyZW50UGFnZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0RhdGFTaXplKGRhdGFTaXplLCB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cywgdGhpcy5wYWdpbmF0aW9uLnNpemUpO1xuICAgICAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKGN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UGFnZURldGFpbHMoc3RhcnRJbmRleCArIDEsIHN0YXJ0SW5kZXggKyB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cywgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb25QYWdlYWJsZURhdGEobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uID09PSAnQmFzaWMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0QXJpYUZvckJhc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCAmJiAhaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9uUGFnZWFibGVEYXRhKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGZpcnN0IHBhZ2UqL1xuICAgIGlzRmlyc3RQYWdlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IDEgfHwgIXRoaXMuZG4uY3VycmVudFBhZ2UpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlKi9cbiAgICBpc0xhc3RQYWdlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IHRoaXMucGFnZUNvdW50KTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSBsYXN0IHBhZ2UqL1xuICAgIGdvVG9MYXN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlQ291bnQ7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNSZWZyZXNoKSB7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlKi9cbiAgICBnb1RvRmlyc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0UGFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGN1cnJlbnQgcGFnZSovXG4gICAgZ29Ub1BhZ2UoZXZlbnQ/LCBjYWxsYmFjaz8pIHtcbiAgICAgICAgdGhpcy5maXJzdFJvdyA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLmNvbXB1dGVNb2RlKHRoaXMuc3RhdGVoYW5kbGVyKSxcbiAgICAgICAgICAgIGFsbG93cGFnZXNpemVjaGFuZ2UgPSB0aGlzLnBhcmVudC5hbGxvd3BhZ2VzaXplY2hhbmdlO1xuICAgICAgICBpZiAobW9kZSAmJiBtb2RlLnRvTG93ZXJDYXNlKCkgIT09ICdub25lJyAmJiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyB8fCB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tbGlzdCcpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRmlyc3RQYWdlKCkgJiYgIWFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMucGFyZW50LCAncGFnaW5hdGlvbicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLnBhcmVudC5uYXZpZ2F0aW9uKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdGU6IHsgcGFnaW5hdGlvbjogbnVtYmVyOyBwYWdlc2l6ZT86IG51bWJlciB9ID0geyBwYWdpbmF0aW9uOiB0aGlzLmRuLmN1cnJlbnRQYWdlIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd3BhZ2VzaXplY2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5wYWdlc2l6ZSA9IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMucGFyZW50LCBzdGF0ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tbGlzdCcgfHwgdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMucGFyZW50Lm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFyZW50LmN1cnJlbnRwYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm5hdGl2ZUVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnY3VycmVudHBhZ2UnLCB0aGlzLmRuLmN1cnJlbnRQYWdlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxsIGdldFBhZ2VEYXRhIGFmdGVyIGNoZWNraW5nIHN0YXRlIGNvbmZpZyBzbyB0aGF0IFN0YXRpYyBWYXJpYWJsZXMgY2FuIHVzZSBpdFxuICAgICAgICB0aGlzLmdldFBhZ2VEYXRhKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBkYXRhIG9mIHRoZSBwYWdlIGhhcyBiZWVuIGZldGNoZWQuKi9cbiAgICBvblBhZ2VEYXRhUmVhZHkoZXZlbnQsIGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU5hdmlnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pbnZva2VTZXRSZWNvcmQoZXZlbnQsIGRhdGEpO1xuICAgICAgICB0cmlnZ2VyRm4oY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gZ2V0IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UqL1xuICAgIGdldFBhZ2VEYXRhKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgZGF0YSxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW4gdGFibGUgY29tcG9uZW50LCBpbiBjYXNlIG9mIG9uIGRlbWFuZCBhbmQgc2Nyb2xsIHBhZ2luYXRpb25cbiAgICAgICAgICAgICAqIFdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gZGF0YSBpdGVtIHdoaWNoIGlzIG5vdCBpbiBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgICAqIEZldGNoIHRoZSBpdGVtcyBvZiB0aGUgcGFnZSB3aGVyZSB0aGUgY2hhbmdlIGlzIG1hZGVcbiAgICAgICAgICAgICAqICovXG4gICAgICAgICAgICBsZXQgcGFnZUluZGV4ID0gdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSAmJiB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkICE9PSAnZGVsZXRlJykge1xuICAgICAgICAgICAgICAgIHBhZ2VJbmRleCA9IHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMsIHtcbiAgICAgICAgICAgICAgICAncGFnZSc6IHBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgICAnc2l6ZSc6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICAnZmlsdGVyRmllbGRzJzogdGhpcy5maWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICAgICAgJ29yZGVyQnknOiB0aGlzLnNvcnRPcHRpb25zLFxuICAgICAgICAgICAgICAgICdsb2dpY2FsT3AnOiB0aGlzLmxvZ2ljYWxPcCxcbiAgICAgICAgICAgICAgICAnbWF0Y2hNb2RlJzogJ2FueXdoZXJlaWdub3JlY2FzZSdcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlRGF0YVJlYWR5KGV2ZW50LCByZXNwb25zZSAmJiByZXNwb25zZS5kYXRhLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSAsIHN0YXJ0SW5kZXggKyB0aGlzLnBhZ2luYXRpb24/Lm51bWJlck9mRWxlbWVudHMsIHRoaXMucGFnaW5hdGlvbj8udG90YWxFbGVtZW50cyk7XG4gICAgICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIGVycm9yIGlzIHVuZGVmaW5lZCwgZG8gbm90IHNob3cgYW55IG1lc3NhZ2UgYXMgdGhpcyBtYXkgYmUgZGlzY2FyZGVkIHJlcXVlc3RcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIEVycm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIHdtVG9hc3Rlci5zaG93KCdlcnJvcicsICdFUlJPUicsICdVbmFibGUgdG8gZ2V0IGRhdGEgb2YgcGFnZSAtJyArIHRoaXMuZG4uY3VycmVudFBhZ2UgKyAnOicgKyBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gaXNBcnJheSh0aGlzLl9fZnVsbERhdGEpID8gdGhpcy5fX2Z1bGxEYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMpIDogdGhpcy5fX2Z1bGxEYXRhO1xuICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSAsIE1hdGgubWluKHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMsIHRoaXMuX19mdWxsRGF0YT8ubGVuZ3RoKSwgdGhpcy5fX2Z1bGxEYXRhPy5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZURhdGFSZWFkeShldmVudCwgZGF0YSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICBGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgZWRpdCBhY3Rpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBwcmV2aW91cyBwYWdlIGRhdGEgb2YgdGhlIHRhYmxlXG4gICAgKi9cbiAgICBpc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkge1xuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiBwYWdlSW5kZXggPT09IHRoaXMucGFyZW50LmN1cnJlbnRQYWdlICYmXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5hY3Rpb25Sb3dQYWdlICYmIHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgPCBwYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgaW52b2tlU2V0UmVjb3JkKGV2ZW50LCBkYXRhKSB7XG4gICAgICAgIC8vIFRyaWdnZXIgdGhlIGV2ZW50IGhhbmRsZXIgaWYgZXhpc3RzLlxuICAgICAgICBjb25zdCBwYWdlSW5mbyA9IHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmRuLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgdG90YWxFbGVtZW50czogdGhpcy5kYXRhU2l6ZSxcbiAgICAgICAgICAgIHRvdGFsUGFnZXM6IHRoaXMucGFnZUNvdW50XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuaW52b2tlRXZlbnRDYWxsYmFjaygnc2V0cmVjb3JkJywgeyRldmVudDogZXZlbnQsICRkYXRhOiBkYXRhLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2UsIHBhZ2VJbmZvLCBkYXRhfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NldHJlY29yZCcsIHskZXZlbnQ6IGV2ZW50LCAkZGF0YTogZGF0YSwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlLCBwYWdlSW5mbywgZGF0YX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgcGFnZSBpbnB1dC5cbiAgICAgSW4gY2FzZSBvZiBpbnZhbGlkIGlucHV0LCBuYXZpZ2F0ZSB0byB0aGUgYXBwcm9wcmlhdGUgcGFnZTsgYWxzbyByZXR1cm4gZmFsc2UuXG4gICAgIEluIGNhc2Ugb2YgdmFsaWQgaW5wdXQsIHJldHVybiB0cnVlLiovXG4gICAgdmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2s/KSB7XG4gICAgICAgIC8qSWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IHBhZ2UgbnVtYmVyIG9yIGludmFsaWQgdmFsdWUsIHRoZW4gaGlnaGxpZ2h0aW5nIHRoZSBmaWVsZCBzaG93aW5nIGVycm9yLiovXG4gICAgICAgIGlmIChldmVudCAmJiAoaXNOYU4odGhpcy5kbi5jdXJyZW50UGFnZSkgfHwgdGhpcy5kbi5jdXJyZW50UGFnZSA8PSAwIHx8ICh0aGlzLnBhZ2VDb3VudCAmJiAodGhpcy5kbi5jdXJyZW50UGFnZSA+IHRoaXMucGFnZUNvdW50IHx8IGlzTnVsbCh0aGlzLmRuLmN1cnJlbnRQYWdlKSkpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZG4uY3VycmVudFBhZ2UgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRuLmN1cnJlbnRQYWdlID4gdGhpcy5wYWdlQ291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlQ291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgb25Nb2RlbENoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlID0gJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJ2EnKTtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdLZXlFJykge1xuICAgICAgICAgICAgdGFyZ2V0RWxlLmFkZENsYXNzKCduZy1pbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0RWxlLnJlbW92ZUNsYXNzKCduZy1pbnZhbGlkJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHBhZ2VDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICAgICB0aGlzLl9kZWJvdW5jZWRQYWdlQ2hhbmdlZChldmVudCk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgcmVzcGVjdGl2ZSBwYWdlcy4qL1xuICAgIG5hdmlnYXRlUGFnZShpbmRleCwgZXZlbnQsIGlzUmVmcmVzaD8sIGNhbGxiYWNrPykge1xuICAgICAgICAvLyB3aGVuIG5hdmlnYXRlZCB0byBuZXh0IHBhZ2UgdHVybiBvbiB0aGUgaXNEYXRhTG9hZGluZyBmbGFnIHRvIHNob3cgdGhlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5wYXJlbnQuaXNEYXRhTG9hZGluZykgJiYgIXRoaXMuaXNEaXNhYmxlTmV4dCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuaXNEYXRhTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGluZmluaXRlIHNjcm9sbCBjYWxsaW5nIHRoZSBzaG93TG9hZGluZ0luZGljYXRvciBtZXRob2QgdG8gdXBkYXRlIHRoZSBsb2FkaW5nIG1lc3NhZ2UgaW1tZWRpYXRlbHkgd2hlbiBuYXZpZ2F0ZWQgdG8gbmV4dCBwYWdlXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQudmFyaWFibGVJbmZsaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2FsbERhdGFHcmlkTWV0aG9kKCdzaG93TG9hZGluZ0luZGljYXRvcicsIHRoaXMucGFyZW50LmxvYWRpbmdkYXRhbXNnLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXNldCB0aGUgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIHRvIFwic2Nyb2xsXCIgYW5kIGlzRGF0YXNldFVwZGF0ZWQgdG8gZmFsc2VcbiAgICAgICAgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgJiYgdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkKHRoaXMucGFyZW50LmdyaWRPcHRpb25zLkFDVElPTlMuREVGQVVMVCk7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5zZXRJc0RhdGFzZXRVcGRhdGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3BhZ2luYXRpb25jaGFuZ2UnLCB7JGV2ZW50OiB1bmRlZmluZWQsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZX0pO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIGN1cnJlbnQgcGFnZSB0byBhIHZhbGlkIHBhZ2UgbnVtYmVyLlxuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gK3RoaXMuZG4uY3VycmVudFBhZ2U7XG5cbiAgICAgICAgc3dpdGNoIChpbmRleCkge1xuICAgICAgICAgICAgY2FzZSAnZmlyc3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0ZpcnN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAncHJldic6XG4gICAgICAgICAgICAgICAgLypSZXR1cm4gaWYgYWxyZWFkeSBvbiB0aGUgZmlyc3QgcGFnZS4qL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYWdpbmF0aW9uPy5uZXh0ICYmICh0aGlzLmlzRmlyc3RQYWdlKCkgfHwgIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2spKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHsgLy8gV01TLTE4ODY3OiBGb3Igc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgc2tpcHBpbmcgdGhlIHJlZ3VsYXIgZmxvdyBhbmQgZW5hYmxpbmcgaXNOZXh0IGZsYWcgaW4gcGFnaW5hdGlvbiBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc05leHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNQcmV2ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLypEZWNyZW1lbnQgdGhlIGN1cnJlbnQgcGFnZSBieSAxLiovXG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSAtPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgICAgICAgLypSZXR1cm4gaWYgYWxyZWFkeSBvbiB0aGUgbGFzdCBwYWdlLiovXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQgJiYgKHRoaXMuaXNMYXN0UGFnZSgpIHx8ICF0aGlzLnZhbGlkYXRlQ3VycmVudFBhZ2UoZXZlbnQsIGNhbGxiYWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdpbmF0aW9uPy5uZXh0KSB7IC8vIFdNUy0xODg2NzogRm9yIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIHNraXBwaW5nIHRoZSByZWd1bGFyIGZsb3cgYW5kIGVuYWJsaW5nIGlzUHJldiBmbGFnIGluIHBhZ2luYXRpb24gbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNQcmV2ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qSW5jcmVtZW50IHRoZSBjdXJyZW50IHBhZ2UgYnkgMS4qL1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgKz0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xhc3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0xhc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLypOYXZpZ2F0ZSB0byB0aGUgY3VycmVudCBwYWdlLiovXG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBzZXRCaW5kRGF0YVNldChiaW5kZGF0YXNldCwgcGFyZW50LCBkYXRhU291cmNlLCBkYXRhc2V0PywgYmluZGRhdGFzb3VyY2U/LCBkYXRhc2V0Qm91bmRFeHByPywgc3RhdGVoYW5kbGVyPykge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGJpbmRkYXRhc2V0LnNwbGl0KCcuJyk7XG4gICAgICAgIGxldCBiaW5kUGFnaW5nT3B0aW9ucztcbiAgICAgICAgdGhpcy5zdGF0ZWhhbmRsZXIgPSBzdGF0ZWhhbmRsZXI7XG4gICAgICAgIGlmIChwYXJ0c1swXSA9PT0gJ1ZhcmlhYmxlcycgfHwgcGFydHNbMF0gPT09ICdXaWRnZXRzJykge1xuICAgICAgICAgICAgYmluZFBhZ2luZ09wdGlvbnMgPSBgJHtwYXJ0c1swXX0uJHtwYXJ0c1sxXX0ucGFnaW5hdGlvbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFiaW5kZGF0YXNvdXJjZSAmJiBkYXRhc2V0ICYmICFkYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBkYXRhc2V0O1xuICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iaW5kZGF0YXNldCA9IGJpbmRkYXRhc2V0O1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHdhdGNoaW5nIGZvciBkYXRhc2V0IGNoYW5nZXMgZXZlbiB3aGVuIGRhdGFzZXQgaXMgYm91bmQgdG8gXCJpdGVtLlwiIChpLmUuIGJ5IGNoZWNraW5nIGZvciBkYXRhc2V0Qm91bmRFeHByKVxuICAgICAgICAgICAgLy8gaXRlbSBjb250ZXh0IGlzIHBhc3NlZCBhcyBkYXRhU291cmNlIGhlcmVcbiAgICAgICAgICAgIC8vIFtUb2RvLUNTUF06IGNoZWNrIGlmIHNhbWUgZXhwciBmbiBpcyBnZW5lcmF0ZWQgYnkgcGFyZW50IHdpZGdldCAobGlzdCwgdGFibGUpXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgICR3YXRjaChcbiAgICAgICAgICAgICAgICAgICAgYmluZGRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldEJvdW5kRXhwciA/IGRhdGFTb3VyY2UgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgbnYgPT4gIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNldCA9IG52O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdNUy0xOTI4NTogU2V0dGluZyBkYXRhc2V0IG9uIHByb3h5IG9ubHkgdG8gaGFuZGxlIHByb3BlcnR5Y2hhbmdlIGhhbmRsZXIgY2FsbCBmb3IgdW5kZWZpbmVkIGNhc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IG52O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgYSB3YXRjaCBvbiBwYWdpbmcgb3B0aW9ucy4gQ2FsbCBkYXRhc2V0IHByb3BlcnR5IGNoYW5nZSBoYW5kbGVyIGV2ZW4gaWYgcGFnaW5nIG9wdGlvbnMgY2hhbmdlcyB0byByZWZsZWN0IHBhZ2luYXRpb24gc3RhdGVcbiAgICAgICAgICAgIGlmICghYmluZFBhZ2luZ09wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IGVpdGhlciBnZW5lcmF0ZSB3YXRjaCBleHByIGZuIG9yIHJlZ2lzdGVyIGFuIGV2ZW50IGZyb20gdGhlIGRhdGFzb3VyY2UgaXRzZWxmXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgICR3YXRjaChcbiAgICAgICAgICAgICAgICAgICAgYmluZFBhZ2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFwcGx5IGRhdGFzb3VyY2Ugb25seSB3aGVuIGRhdGFzZXQgaXMgbm90IGJvdW5kIHRvIFwiaXRlbS5GSUVMRFwiXG4gICAgICAgIGlmICghZGF0YXNldEJvdW5kRXhwcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgZGF0YXNvdXJjZSBvZiBwYWdpbmF0aW9uIGZyb20gdGhlIHBhcmVudCB3aWRnZXRcbiAgICBzZXREYXRhU291cmNlKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudiwgb3YpIHtcbiAgICAgICAgbGV0IHBhZ2VTaXplLCBwcmV2UGFnZVNpemU7XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQub25EYXRhTmF2aWdhdG9yRGF0YVNldENoYW5nZSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnBhcmVudC5vbkRhdGFOYXZpZ2F0b3JEYXRhU2V0Q2hhbmdlKG52KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IG52O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2V0IGxhc3QgYWN0aW9uIHBlcmZvcm1lZCB0byBcImRhdGFzZXRfdXBkYXRlXCIgd2hlbmV2ZXIgZGF0YXNldCBpcyBjaGFuZ2VkIGluIHRhYmxlIGNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5fdHJpZ2dlcmVkQnlVc2VyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0YT8ubGVuZ3RoKSB7IC8vIGNhbGN1bGF0ZSBQYWdlc2l6ZSBvcHRpb25zIGJhc2VkIG9uIGFjdHVhbCBwYWdlIHNpemVcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSkgeyAvLyBmb3IgTGl2ZSB2YXJpYWJsZXNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFBhZ2VTaXplID0gZ2V0KGRhdGEsICdwYWdpbmF0aW9uLnNpemUnKSB8fCBnZXQodGhpcy5kYXRhc291cmNlLCAncGFnaW5hdGlvbi5zaXplJyksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEVsZW1lbnRzID0gZ2V0KGRhdGEsICdwYWdpbmF0aW9uLnRvdGFsRWxlbWVudHMnKSB8fCBnZXQodGhpcy5kYXRhc291cmNlLCAncGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzJyksXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWRnZXRTdGF0ZSA9IHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UuZ2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gd2lkZ2V0U3RhdGU/LmFjdHVhbHBhZ2VzaXplIHx8IGN1cnJlbnRQYWdlU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3R1YWxQYWdlU2l6ZSA9IE51bWJlcih0aGlzLmFjdHVhbFBhZ2VTaXplKSA/IHRoaXMuYWN0dWFsUGFnZVNpemUgOiBnZXQodGhpcy5kYXRhc291cmNlLmRhdGFTZXQsIHRoaXMuYWN0dWFsUGFnZVNpemUpXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9ucy5sZW5ndGggPiAwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IFsuLi50aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnNdO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gcmFuZ2UodGhpcy5hY3R1YWxQYWdlU2l6ZSwgIE1hdGgubWF4KHRoaXMuYWN0dWFsUGFnZVNpemUgKyAxLCB0aGlzLmFjdHVhbFBhZ2VTaXplICsgdG90YWxFbGVtZW50cyksIHRoaXMuYWN0dWFsUGFnZVNpemUpOyAvLyBoZXJlIGRhdGEgaGFzIG9ubHkgdGhhdCBwYWdlIGRhdGEgYW5kIHBhZ2VzaXplIGhhcyB0b3RhbE5vb2YgRWxlbWVudHNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAod2lkZ2V0U3RhdGU/LnNlbGVjdGVkSXRlbSAmJiB3aWRnZXRTdGF0ZS5hY3R1YWxwYWdlc2l6ZSAhPT0gd2lkZ2V0U3RhdGUucGFnZXNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5wcmV2UGFnZVNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZQYWdlU2l6ZSA9IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgZGF0YT8ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEl0ZW1zID0gdGhpcy5oYW5kbGVTdGF0ZVBhcmFtc2Zvck5ld1BhZ2VTaXplKHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbSwgdGhpcy5wcmV2UGFnZVNpemUsIGRhdGE/Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxwYWdlc2l6ZTogdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogdXBkYXRlZEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXZQYWdlU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplID0gdGhpcy5wYXJlbnQuZ2V0QWN0dWFsUGFnZVNpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gWy4uLnRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9uc107XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSByYW5nZShwYWdlU2l6ZSwgZGF0YS5sZW5ndGggKyBwYWdlU2l6ZSwgcGFnZVNpemUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2hlbiB0aGUgZGF0YXNldCBpcyBub3QgaW4gY3VycmVudCBwYWdlLCBidXQgaW4gcHJldmlvdXMgb25lcyBkaXJlY3RseSBzZXQgdGhlIHJlc3VsdCB3aXRob3V0IHNldHRpbmcgcGFnZSB2YWx1ZXNcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KGRhdGEpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFBhZ2luZ1ZhbHVlcyhkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uJykge1xuICAgICAgICAgICAgaWYgKG52ID09PSAnQWR2YW5jZWQnKSB7IC8vIFN1cHBvcnQgZm9yIG9sZGVyIHByb2plY3RzIHdoZXJlIG5hdmlnYXRpb24gdHlwZSB3YXMgYWR2YW5jZWQgaW5zdGVhZCBvZiBjbGFzaWNcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSAnQ2xhc3NpYyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdlNpemUoKTtcbiAgICAgICAgICAgIHRoaXMubmF2Y29udHJvbHMgPSBudjtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uc2l6ZScpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTmF2U2l6ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hdmlnYXRpb25hbGlnbicpIHtcbiAgICAgICAgICAgIHN3aXRjaENsYXNzKHRoaXMubmF0aXZlRWxlbWVudCwgYHRleHQtJHtudn1gLCBgdGV4dC0ke292fWApO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ21heFJlc3VsdHMnKSB7XG4gICAgICAgICAgICB0aGlzLnNldFBhZ2luZ1ZhbHVlcyh0aGlzLmRhdGFzZXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG4gICAvLyBjaGFuZ2UgdGhlIHNlbGVjdGVkSXRlbXMgcGFnZSBudW1iZXIgYW5kIGluZGV4IGluIHRoZSBzdGF0ZXBhcmFtcyB3aGVuIHBhZ2VzaXplIGlzIGNoYW5nZWRcbiAgICBoYW5kbGVTdGF0ZVBhcmFtc2Zvck5ld1BhZ2VTaXplKFxuICAgICAgICBzZWxlY3RlZEl0ZW06IHsgcGFnZTogbnVtYmVyOyBpbmRleDogbnVtYmVyIH1bXSxcbiAgICAgICAgb2xkUGFnZVNpemU6IG51bWJlcixcbiAgICAgICAgbmV3UGFnZVNpemU6IG51bWJlclxuICAgICk6IHsgcGFnZTogbnVtYmVyOyBpbmRleDogbnVtYmVyIH1bXSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW0ubWFwKCh7IHBhZ2UsIGluZGV4IH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFic29sdXRlSW5kZXggPSAocGFnZSAtIDEpICogb2xkUGFnZVNpemUgKyBpbmRleDtcbiAgICAgICAgICAgIGNvbnN0IG5ld1BhZ2UgPSBNYXRoLmZsb29yKGFic29sdXRlSW5kZXggLyBuZXdQYWdlU2l6ZSkgKyAxOyAvLyBiYWNrIHRvIDEtYmFzZWRcbiAgICAgICAgICAgIGNvbnN0IG5ld0luZGV4ID0gYWJzb2x1dGVJbmRleCAlIG5ld1BhZ2VTaXplO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHBhZ2U6IG5ld1BhZ2UsXG4gICAgICAgICAgICAgICAgaW5kZXg6IG5ld0luZGV4XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRyb3Bkb3duS2V5ZG93bihldmVudCwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgJGl0ZW1zID0gJCgndWwjZHJvcGRvd24tYmFzaWMgYS5kcm9wZG93bi1pdGVtJyk7XG4gICAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgbGV0IHNlbGVjdGVkT3B0aW9uO1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IFNoaWZ0K1RhYiBhcyBBcnJvd1VwXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gKGluZGV4IC0gMSkgPCAwID8gbWF4SW5kZXggOiBpbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgVGFiIG9yIEFycm93RG93biBhcyBBcnJvd0Rvd25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSAoaW5kZXggKyAxKSA+IG1heEluZGV4ID8gMCA6IGluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNlZEluZGV4ID0gKGluZGV4IC0gMSkgPCAwID8gbWF4SW5kZXggOiBpbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkT3B0aW9uID0gdGhpcy5wYWdlU2l6ZU9wdGlvbnNbdGhpcy5mb2N1c2VkSW5kZXhdO1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlU2l6ZUNoYW5nZShldmVudCwgc2VsZWN0ZWRPcHRpb24pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBNb3ZlIGZvY3VzIGFmdGVyIGluZGV4IGlzIHVwZGF0ZWRcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAkaXRlbXMuZXEodGhpcy5mb2N1c2VkSW5kZXgpPy5mb2N1cygpO1xuICAgICAgICB9KTtcblxuICAgIH1cblxuICAgIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgICAgIC8vIENsb3NlIGRyb3Bkb3duXG4gICAgICAgIHRoaXMuYnNEcm9wZG93bi5oaWRlKCk7XG4gICAgICAgIGNvbnN0ICR0b2dnbGVCdXR0b24gPSAkKCdidXR0b25bYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCJdJyk7XG4gICAgICAgICR0b2dnbGVCdXR0b24uZm9jdXMoKTsgLy8gUmV0dXJuIGZvY3VzIHRvIGJ1dHRvblxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIGdldHMgY2FsbGVkIG9uIGRyb3Bkb3duIG9wZW4gJiBjbG9zZVxuICAgIG9uT3BlbkNoYW5nZShpc09wZW4pIHtcbiAgICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSAwO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gbWFudWFsbHkgZm9jdXMgdGhlIGRyb3Bkb3duIGFzIGRyb3Bkb3duIGhhcyBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICBjb25zdCAkaXRlbXMgPSAkKCd1bCNkcm9wZG93bi1iYXNpYyBhLmRyb3Bkb3duLWl0ZW0nKTtcbiAgICAgICAgICAgICAgICBjb25zdCAkZmlyc3RJdGVtID0gJGl0ZW1zLmVxKHRoaXMuZm9jdXNlZEluZGV4KTtcbiAgICAgICAgICAgICAgICAkZmlyc3RJdGVtPy5mb2N1cygpO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQsIG5ld1BhZ2VTaXplKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldFN0YXRlID0gdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCk7XG4gICAgICAgICAgICBsZXQgdXBkYXRlZEl0ZW1zO1xuICAgICAgICBpZiAod2lkZ2V0U3RhdGU/LnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdXBkYXRlZEl0ZW1zID0gdGhpcy5oYW5kbGVTdGF0ZVBhcmFtc2Zvck5ld1BhZ2VTaXplKHdpZGdldFN0YXRlLnNlbGVjdGVkSXRlbSwgdGhpcy5tYXhSZXN1bHRzLCArbmV3UGFnZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0dWFsUGFnZVNpemUgPSB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gK25ld1BhZ2VTaXplO1xuICAgICAgICB0aGlzLm1heFJlc3VsdHNFbWl0dGVyLmVtaXQodGhpcy5tYXhSZXN1bHRzKTtcbiAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkgJiYgdGhpcy5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UubWF4UmVzdWx0cyA9IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlZEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMucGFyZW50LCB7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogMSxcbiAgICAgICAgICAgICAgICBwYWdlc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgIGFjdHVhbHBhZ2VzaXplOiB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW06IHVwZGF0ZWRJdGVtc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgYWN0dWFscGFnZXNpemU6IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5tYXhSZXN1bHRzXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubmF2aWdhdGVQYWdlKCdmaXJzdCcsICRldmVudCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkVsZW0gPSAgdGhpcy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBwYWdpbmF0aW9uRWxlbS5vbmNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJcbkBpZiAobmF2Y29udHJvbHMgPT09ICdDbGFzc2ljJykge1xuPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBhZHZhbmNlZCB7e25hdmlnYXRpb25DbGFzc319XCI+XG4gICAgQGlmIChhbGxvd3BhZ2VzaXplY2hhbmdlICYmICBwYWdlU2l6ZU9wdGlvbnM/LlswXTxyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGxpIGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cbiAgICAgICAgICA8bGFiZWwgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRVwiIGNsYXNzPVwiYXBwLWxhYmVsXCI+e3thcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0V9fSA6PC9sYWJlbD5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIGRyb3Bkb3duICBjb250YWluZXI9XCJib2R5XCIgKGlzT3BlbkNoYW5nZSk9XCJvbk9wZW5DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidXR0b24tYmFzaWNcIiBkcm9wZG93blRvZ2dsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYXBwLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bWF4UmVzdWx0c319IDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPHVsIGlkPVwiZHJvcGRvd24tYmFzaWNcIiAqZHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudSBwYWdlc2l6ZS1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJidXR0b24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHBhZ2VTaXplT3B0aW9uczsgdHJhY2sgb3B0aW9uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogb3B0aW9uID09IG1heFJlc3VsdHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgQGlmIChyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGxpIGNsYXNzPVwiaXRlbS1yYW5nZVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+b2Y8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkudG90YWxSZWNvcmRzfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgfVxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZUZpcnN0fVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0ZJUlNUXCIgbmFtZT1cImZpcnN0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZUZpcnN0XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnZmlyc3QnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWZpcnN0LXBhZ2VcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gZmlyc3QgcGFnZSB7eyBpc0Rpc2FibGVGaXJzdCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVQcmV2aW91c31cIj5cbiAgICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9QUkVWSU9VU1wiIG5hbWU9XCJwcmV2XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVQcmV2aW91c1wiXG4gICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCdwcmV2JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLWxlZnRcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gcHJldmlvdXMgcGFnZSB7eyBpc0Rpc2FibGVQcmV2aW91cyA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIGNsYXNzPVwicGFnZWNvdW50IGRpc2FibGVkXCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgYXJpYS1sYWJlbD1cIkNoYW5nZSBQYWdlIE51bWJlclwiPlxuICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwiZG4uY3VycmVudFBhZ2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidTaG93aW5nIFBhZ2UgJyArIGRuLmN1cnJlbnRQYWdlICsgJyBvZiAnICsgcGFnZUNvdW50XCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUN1cnJlbnRcIlxuICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIiAoY2hhbmdlKT1cIm9uTW9kZWxDaGFuZ2UoJGV2ZW50KVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIvPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBjbGFzcz1cImRpc2FibGVkXCI+XG4gICAgICAgIDxhIFtoaWRkZW5dPVwiaXNEaXNhYmxlQ291bnRcIj4gLyB7e3BhZ2VDb3VudH19PC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlTmV4dH1cIj5cbiAgICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9ORVhUXCIgbmFtZT1cIm5leHRcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlTmV4dFwiXG4gICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tcmlnaHRcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gbmV4dCBwYWdlIHt7IGlzRGlzYWJsZU5leHQgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlTGFzdH1cIj5cbiAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfTEFTVFwiIG5hbWU9XCJsYXN0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZUxhc3RcIlxuICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCdsYXN0JywgJGV2ZW50KVwiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWxhc3QtcGFnZVwiPjwvaT48L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIGxhc3QgcGFnZSB7eyBpc0Rpc2FibGVMYXN0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmIChzaG93cmVjb3JkY291bnQpIHtcbiAgICAgIDxsaSBjbGFzcz1cInRvdGFsY291bnQgZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1kaXNhYmxlZD1cInRydWVcIj57e2FwcExvY2FsZS5MQUJFTF9UT1RBTF9SRUNPUkRTfX06IHt7ZGF0YVNpemV9fTwvYT5cbiAgICAgIDwvbGk+XG4gICAgfVxuPC91bD5cbn1cbkBpZiAobmF2Y29udHJvbHMgPT09ICdQYWdlcicpIHtcbiAgPHVsIGNsYXNzPVwicGFnZXIge3tuYXZpZ2F0aW9uQ2xhc3N9fVwiPlxuICAgICAgICBAaWYgKGFsbG93cGFnZXNpemVjaGFuZ2UgJiYgIHBhZ2VTaXplT3B0aW9ucz8uWzBdPHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtcy1wZXItcGFnZVwiPlxuICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFXCIgY2xhc3M9XCJhcHAtbGFiZWxcIj57e2FwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRX19IDo8L2xhYmVsPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZHJvcGRvd24gY29udGFpbmVyPVwiYm9keVwiIChpc09wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVwiYnV0dG9uLWJhc2ljXCIgZHJvcGRvd25Ub2dnbGUgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGFwcC1idXR0b24gZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9XCJkcm9wZG93bi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICB7e21heFJlc3VsdHN9fSA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDx1bCBpZD1cImRyb3Bkb3duLWJhc2ljXCIgKmRyb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnUgcGFnZXNpemUtb3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYnV0dG9uLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBwYWdlU2l6ZU9wdGlvbnM7IHRyYWNrIG9wdGlvbjsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBvcHRpb24gPT0gbWF4UmVzdWx0cyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIEBpZiAocm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW0tcmFuZ2VcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPm9mPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS50b3RhbFJlY29yZHN9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgPGxpIGNsYXNzPVwicHJldmlvdXNcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVQcmV2aW91c31cIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgncHJldicsICRldmVudClcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZVByZXZpb3VzXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1sZWZ0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAge3thcHBMb2NhbGUuTEFCRUxfUFJFVklPVVN9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyBpc0Rpc2FibGVQcmV2aW91cyA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwibmV4dFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ25leHQnLCAkZXZlbnQpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVOZXh0XCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiPjwvaT48L3NwYW4+XG4gICAgICAgIHt7YXBwTG9jYWxlLkxBQkVMX05FWFR9fVxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj57eyBpc0Rpc2FibGVOZXh0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbn1cblxuQGlmIChuYXZjb250cm9scyA9PT0gJ0Jhc2ljJykge1xuICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiAgcGFnZVNpemVPcHRpb25zPy5bMF08cm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cbiAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0VcIiBjbGFzcz1cImFwcC1sYWJlbFwiPnt7YXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFIH19IDo8L2xhYmVsPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiBkcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgIChpc09wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidXR0b24tYmFzaWNcIiBkcm9wZG93blRvZ2dsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYXBwLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICB7e21heFJlc3VsdHN9fSA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8dWwgaWQ9XCJkcm9wZG93bi1iYXNpY1wiICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBhZ2VzaXplLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYnV0dG9uLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHBhZ2VTaXplT3B0aW9uczsgdHJhY2sgb3B0aW9uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogb3B0aW9uID09IG1heFJlc3VsdHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbS1yYW5nZVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+b2Y8L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkudG90YWxSZWNvcmRzfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgICA8cGFnaW5hdGlvbiBjbGFzcz1cInBhZ2luYXRpb24gYmFzaWNcIiBbbmdDbGFzc109XCJuYXZpZ2F0aW9uQ2xhc3NcIiByb2xlPVwibmF2aWdhdGlvblwiXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwibWF4UmVzdWx0c1wiIFt0b3RhbEl0ZW1zXT1cImRhdGFTaXplXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkKCRldmVudClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6dHJ1ZX1cIiBbbmdNb2RlbF09XCJkbi5jdXJyZW50UGFnZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Nob3dpbmcgUGFnZSAnICsgZG4uY3VycmVudFBhZ2UgKyAnIG9mICcgKyBwYWdlQ291bnQgKyAnIHBhZ2VzJ1wiXG4gICAgICAgIFtib3VuZGFyeUxpbmtzXT1cImJvdW5kYXJ5bGlua3NcIiBbbWF4U2l6ZV09XCJtYXhzaXplXCJcbiAgICAgICAgW2RpcmVjdGlvbkxpbmtzXT1cImRpcmVjdGlvbmxpbmtzXCJcbiAgICAgICAgZmlyc3RUZXh0PVwiRmlydHN0XCIgbGFzdFRleHQ9XCJMYXN0XCJcbiAgICAgICAgW2N1c3RvbVByZXZpb3VzVGVtcGxhdGVdPVwicHJldlRlbXBsYXRlXCJcbiAgICAgICAgW2N1c3RvbU5leHRUZW1wbGF0ZV09XCJuZXh0VGVtcGxhdGVcIlxuICAgICAgICBbY3VzdG9tUGFnZVRlbXBsYXRlXT1cInBhZ2VUZW1wbGF0ZVwiPjwvcGFnaW5hdGlvbj5cbiAgICB9XG59XG5cbkBpZiAobmF2Y29udHJvbHMgPT09ICdCYXNpYycgJiYgc2hvd3JlY29yZGNvdW50KSB7XG4gIDx1bCBjbGFzcz1cInBhZ2luYXRpb25cIj5cbiAgICA8bGkgY2xhc3M9XCJ0b3RhbGNvdW50IGRpc2FibGVkIGJhc2ljY291bnRcIj5cbiAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtZGlzYWJsZWQ9XCJ0cnVlXCI+e3thcHBMb2NhbGUuTEFCRUxfVE9UQUxfUkVDT1JEU319OiB7e2RhdGFTaXplfX08L2E+XG4gICAgPC9saT5cbiAgPC91bD5cbn1cblxuPG5nLXRlbXBsYXRlICNwYWdlVGVtcGxhdGUgbGV0LXBhZ2U+XG4gIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIFthdHRyLmRhdGEtaXNhY2l0dmVwYWdlXT1cInBhZ2UuYWN0aXZlXCI+e3snUGFnZSAnfX08L3NwYW4+XG4gIHt7cGFnZS5udW1iZXJ9fVxuICBAaWYgKHBhZ2UuYWN0aXZlKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+IHt7JywgU2hvd2luZyBwYWdlICcgKyBwYWdlLm51bWJlciArICcgb2YgJyArIHBhZ2VDb3VudH19PC9zcGFuPlxuICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmV2VGVtcGxhdGUgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgW2F0dHIuZGF0YS1pc2Rpc2FibGVkXT1cImRpc2FibGVkXCI+R28gdG8gUHJldmlvdXMgcGFnZSB7e2Rpc2FibGVkID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI25leHRUZW1wbGF0ZSBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5HbyB0byBOZXh0IHBhZ2Uge3tkaXNhYmxlZCA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuIl19
714
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PaginationComponent, decorators: [{
715
+ type: Component,
716
+ args: [{ standalone: true, imports: [CommonModule, FormsModule, PaginationModule, BsDropdownModule], selector: '[wmPagination]', providers: [
717
+ provideAsWidgetRef(PaginationComponent)
718
+ ], template: "\n@if (navcontrols === 'Classic') {\n<ul class=\"pagination advanced {{navigationClass}}\">\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <li class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE}} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n @if (rowSummary?.totalRecords) {\n <li class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </li>\n }\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableFirst}\">\n <a [title]=\"appLocale.LABEL_FIRST\" name=\"first\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableFirst\"\n (click)=\"navigatePage('first', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-first-page\"></i></span>\n <span class=\"sr-only\">Go to first page {{ isDisableFirst ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a [title]=\"appLocale.LABEL_PREVIOUS\" name=\"prev\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisablePrevious\"\n (click)=\"navigatePage('prev', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n <span class=\"sr-only\">Go to previous page {{ isDisablePrevious ? ', Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li class=\"pagecount disabled\">\n <a href=\"javascript:void(0);\" aria-label=\"Change Page Number\">\n <input [(ngModel)]=\"dn.currentPage\" [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount\" [disabled]=\"isDisableCurrent\"\n [ngModelOptions]=\"{standalone: true}\"\n type=\"number\"\n (keydown)=\"onKeyDown($event)\" (change)=\"onModelChange($event)\" class=\"form-control\"/>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li class=\"disabled\">\n <a [hidden]=\"isDisableCount\"> / {{pageCount}}</a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableNext}\">\n <a [title]=\"appLocale.LABEL_NEXT\" name=\"next\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableNext\"\n (click)=\"navigatePage('next', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n <span class=\"sr-only\">Go to next page {{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (!(dataSize<=maxResults)) {\n <li [ngClass]=\"{'disabled':isDisableLast}\">\n <a [title]=\"appLocale.LABEL_LAST\" name=\"last\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableLast\"\n (click)=\"navigatePage('last', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-last-page\"></i></span>\n <span class=\"sr-only\">Go to last page {{ isDisableLast ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n @if (showrecordcount) {\n <li class=\"totalcount disabled\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n }\n</ul>\n}\n@if (navcontrols === 'Pager') {\n <ul class=\"pager {{navigationClass}}\">\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <li class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE}} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </li>\n @if (rowSummary?.totalRecords) {\n <li class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </li>\n }\n }\n@if (!(dataSize<=maxResults)) {\n <li class=\"previous\" [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('prev', $event)\"\n [attr.aria-disabled]=\"isDisablePrevious\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n {{appLocale.LABEL_PREVIOUS}}\n <span class=\"sr-only\">{{ isDisablePrevious ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"next\" [ngClass]=\"{'disabled':isDisableNext}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('next', $event)\"\n [attr.aria-disabled]=\"isDisableNext\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n {{appLocale.LABEL_NEXT}}\n <span class=\"sr-only\">{{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n }\n </ul>\n}\n\n@if (navcontrols === 'Basic') {\n @if (allowpagesizechange && pageSizeOptions?.[0]<rowSummary?.totalRecords) {\n <div class=\"items-per-page\">\n <label [title]=\"appLocale.LABEL_ITEMS_PER_PAGE\" class=\"app-label\">{{appLocale.LABEL_ITEMS_PER_PAGE }} :</label>\n\n <div class=\"btn-group\" dropdown container=\"body\" (isOpenChange)=\"onOpenChange($event)\">\n <button id=\"button-basic\" dropdownToggle type=\"button\" class=\"btn app-button dropdown-toggle\"\n aria-controls=\"dropdown-basic\">\n {{maxResults}} <span class=\"caret\"></span>\n </button>\n <ul id=\"dropdown-basic\" *dropdownMenu class=\"dropdown-menu pagesize-options\"\n role=\"menu\" aria-labelledby=\"button-basic\">\n @for (option of pageSizeOptions; track option; let i = $index) {\n <li role=\"menuitem\" [ngClass]=\"{ 'active': option == maxResults }\">\n <a class=\"dropdown-item\" (click)=\"onPageSizeChange($event, option)\" (keydown)=\"onDropdownKeydown($event, i)\"\n [attr.tabindex]=\"i === focusedIndex ? 0 : -1\">{{option}}</a>\n </li>\n }\n </ul>\n </div>\n </div>\n @if (rowSummary?.totalRecords) {\n <div class=\"item-range\">\n <div>\n <span>{{rowSummary.startIndex}} - {{rowSummary.endIndex}}</span>\n <span>of</span>\n <span>{{rowSummary.totalRecords}}</span>\n </div>\n </div>\n }\n }\n @if (!(dataSize<=maxResults)) {\n <pagination class=\"pagination basic\" [ngClass]=\"navigationClass\" role=\"navigation\"\n [itemsPerPage]=\"maxResults\" [totalItems]=\"dataSize\"\n (pageChanged)=\"pageChanged($event)\" [ngModelOptions]=\"{standalone:true}\" [ngModel]=\"dn.currentPage\"\n [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount + ' pages'\"\n [boundaryLinks]=\"boundarylinks\" [maxSize]=\"maxsize\"\n [directionLinks]=\"directionlinks\"\n firstText=\"Firtst\" lastText=\"Last\"\n [customPreviousTemplate]=\"prevTemplate\"\n [customNextTemplate]=\"nextTemplate\"\n [customPageTemplate]=\"pageTemplate\"></pagination>\n }\n}\n\n@if (navcontrols === 'Basic' && showrecordcount) {\n <ul class=\"pagination\">\n <li class=\"totalcount disabled basiccount\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n </ul>\n}\n\n<ng-template #pageTemplate let-page>\n <span class=\"sr-only\" [attr.data-isacitvepage]=\"page.active\">{{'Page '}}</span>\n {{page.number}}\n @if (page.active) {\n <span class=\"sr-only\"> {{', Showing page ' + page.number + ' of ' + pageCount}}</span>\n }\n</ng-template>\n<ng-template #prevTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Previous page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n<ng-template #nextTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Next page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n" }]
719
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: undefined, decorators: [{
720
+ type: SkipSelf
721
+ }, {
722
+ type: Inject,
723
+ args: [WidgetRef]
724
+ }] }, { type: undefined, decorators: [{
725
+ type: Inject,
726
+ args: ['EXPLICIT_CONTEXT']
727
+ }, {
728
+ type: Optional
729
+ }] }], propDecorators: { resultEmitter: [{
730
+ type: Output
731
+ }], maxResultsEmitter: [{
732
+ type: Output
733
+ }], bsDropdown: [{
734
+ type: ViewChild,
735
+ args: [BsDropdownDirective]
736
+ }] } });
737
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLFFBQVEsRUFDUixNQUFNLEVBQ04sUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNuSCxPQUFPLEVBQ0gsY0FBYyxFQUNkLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDTixnQ0FBZ0MsRUFDaEMsU0FBUyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDbEYsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFD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ZW50IjpbImltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdG9yLFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7JGFwcERpZ2VzdCwgJHdhdGNoLCBBcHBDb25zdGFudHMsIERhdGFTb3VyY2UsIGRlYm91bmNlLCBpc0RlZmluZWQsIHN3aXRjaENsYXNzLCB0cmlnZ2VyRm59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgREVCT1VOQ0VfVElNRVMsXG4gICAgZ2V0T3JkZXJCeUV4cHIsXG4gICAgcHJvdmlkZUFzV2lkZ2V0UmVmLFxuICAgIFN0eWxhYmxlQ29tcG9uZW50LFxuICAgIHN0eWxlcixcbiAgICB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcyxcbiAgICBXaWRnZXRSZWZcbn0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQge3JlZ2lzdGVyUHJvcHN9IGZyb20gJy4vcGFnaW5hdGlvbi5wcm9wcyc7XG5pbXBvcnQge2ZvckVhY2gsIGdldCwgaXNBcnJheSwgaXNFbXB0eSwgaXNOdWxsLCBpc1N0cmluZywgcmFuZ2V9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7UGFnaW5hdGlvbk1vZHVsZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wYWdpbmF0aW9uJztcbmltcG9ydCB7QnNEcm9wZG93bkRpcmVjdGl2ZSwgQnNEcm9wZG93bk1vZHVsZX0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1kYXRhbmF2aWdhdG9yIGNsZWFyZml4JztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXBhZ2luYXRpb24nLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuY29uc3Qgc2l6ZUNsYXNzZXMgPSB7XG4gICAgJ1BhZ2VyJzoge1xuICAgICAgICAnc21hbGwnOiAncGFnZXItc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnZXItbGcnXG4gICAgfSxcbiAgICAnQmFzaWMnOiB7XG4gICAgICAgICdzbWFsbCc6ICdwYWdpbmF0aW9uLXNtJyxcbiAgICAgICAgJ2xhcmdlJzogJ3BhZ2luYXRpb24tbGcnXG4gICAgfSxcbiAgICAnQ2xhc3NpYyc6IHtcbiAgICAgICAgJ3NtYWxsJzogJ3BhZ2luYXRpb24tc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnaW5hdGlvbi1sZydcbiAgICB9XG59O1xuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFBhZ2luYXRpb25Nb2R1bGUsIEJzRHJvcGRvd25Nb2R1bGVdLFxuICAgIHNlbGVjdG9yOiAnW3dtUGFnaW5hdGlvbl0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgcHJvdmlkZUFzV2lkZ2V0UmVmKFBhZ2luYXRpb25Db21wb25lbnQpXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uQ29tcG9uZW50IGV4dGVuZHMgU3R5bGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZVByb3BzID0gcmVnaXN0ZXJQcm9wcygpO1xuICAgIEBPdXRwdXQoKSByZXN1bHRFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgbWF4UmVzdWx0c0VtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBWaWV3Q2hpbGQoQnNEcm9wZG93bkRpcmVjdGl2ZSkgcHJvdGVjdGVkIGJzRHJvcGRvd247XG5cbiAgICBkYXRhc291cmNlO1xuICAgIG1heFJlc3VsdHM7XG4gICAgcGFnZVNpemVPcHRpb25zO1xuICAgIHByZXZQYWdlU2l6ZTtcbiAgICBhY3R1YWxQYWdlU2l6ZTtcbiAgICBhbGxvd3BhZ2VzaXplY2hhbmdlO1xuICAgIGRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSBbXTtcbiAgICBmb2N1c2VkSW5kZXggPSAwO1xuICAgIHJvd1N1bW1hcnk7XG4gICAgbmF2aWdhdGlvbnNpemU7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuXG4gICAgbmF2Y29udHJvbHM7XG4gICAgbmF2aWdhdGlvbjtcblxuICAgIGJvdW5kYXJ5bGlua3M7XG4gICAgZGlyZWN0aW9ubGlua3M7XG5cbiAgICBuYXZpZ2F0aW9uQ2xhc3M7XG4gICAgZG4gPSB7XG4gICAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcblxuICAgIHBhZ2VDb3VudCA9IDA7XG4gICAgaXNEaXNhYmxlTmV4dCA9IHRydWU7XG4gICAgaXNEaXNhYmxlUHJldmlvdXMgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUZpcnN0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVMYXN0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVDdXJyZW50O1xuICAgIGRhdGFTaXplO1xuICAgIHByZXZzaG93cmVjb3JkY291bnQ7XG4gICAgaXNEaXNhYmxlQ291bnQ7XG4gICAgZmlyc3RSb3c7XG4gICAgcmVzdWx0O1xuICAgIF9fZnVsbERhdGE7XG4gICAgZGF0YXNldDtcbiAgICBvcHRpb25zO1xuICAgIHN0YXRlaGFuZGxlcjtcbiAgICBmaWx0ZXJGaWVsZHM7XG4gICAgc29ydE9wdGlvbnM7XG4gICAgYmluZGRhdGFzZXQ7XG4gICAgcGFnaW5hdGlvbjtcbiAgICBsb2dpY2FsT3A7XG5cbiAgICBwcml2YXRlIF9kZWJvdW5jZWRBcHBseURhdGFzZXQgPSBkZWJvdW5jZSgoKSA9PiB0aGlzLndpZGdldC5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0LCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuICAgIHByaXZhdGUgX2RlYm91bmNlZFBhZ2VDaGFuZ2VkID0gZGVib3VuY2UoZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZSA9IGV2ZW50ICYmIGV2ZW50LnBhZ2U7XG4gICAgICAgIGNvbnN0IG1heFJlc3VsdHMgPSBldmVudCAmJiAoZXZlbnQucGFnZXNpemUgfHwgZXZlbnQuaXRlbXNQZXJQYWdlKSB8fCB0aGlzLm1heFJlc3VsdHM7XG5cbiAgICAgICAgLy8gRG8gbm90IGNhbGwgZ29Ub1BhZ2UgaWYgcGFnZSBoYXMgbm90IGNoYW5nZWRcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlICE9PSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IHRoaXMubWF4UmVzdWx0cyAhPT0gbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9ICh0aGlzIGFzIGFueSkucGFyZW50IHx8IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLm1heFJlc3VsdHMgPSBtYXhSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5lbWl0KHRoaXMubWF4UmVzdWx0cyk7XG4gICAgICAgICAgICBpbnN0Lmludm9rZUV2ZW50Q2FsbGJhY2soJ3BhZ2luYXRpb25jaGFuZ2UnLCB7JGV2ZW50OiB1bmRlZmluZWQsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZX0pO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiA9PT0gJ0Jhc2ljJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEFyaWFGb3JCYXNpY05hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG5cbiAgICBwcml2YXRlIF9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCkge1xuICAgICAgICBmb3JFYWNoKHRoaXMubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApOycpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gaXRlbS5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlPy5kYXRhc2V0LmlzYWNpdHZlcGFnZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGNoaWxkTm9kZT8uZGF0YXNldC5pc2Rpc2FibGVkID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgQFNraXBTZWxmKCkgQEluamVjdChXaWRnZXRSZWYpIHB1YmxpYyBwYXJlbnQsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlID0gdGhpcy5wYXJlbnQuYWxsb3dwYWdlc2l6ZWNoYW5nZTtcbiAgICAgICAgICAgIGlmKHRoaXMuYWxsb3dwYWdlc2l6ZWNoYW5nZSlcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMgPSB0aGlzLnBhcmVudD8ucGFnZXNpemVvcHRpb25zID8gdGhpcy5wYXJlbnQucGFnZXNpemVvcHRpb25zPy5zcGxpdCgnLCcpLm1hcChOdW1iZXIpLnNvcnQoKGEsIGIpID0+IGEgLSBiKSA6IFtdO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG5cbiAgICBzZXRSZXN1bHQocmVzdWx0KSB7XG4gICAgICAgIC8vIFRPRE86IEVtaXQgZXZlbnQgb25seSBpZiByZXN1bHQgaXMgY2hhbmdlZFxuICAgICAgICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgdGhpcy5yZXN1bHRFbWl0dGVyLmVtaXQodGhpcy5yZXN1bHQpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBuYXZpZ2F0aW9uQ2xhc3MgYmFzZWQgb24gbmF2aWdhdGlvbiBhbmQgbmF2aWdhdGlvblNpemUgcHJvcHNcbiAgICBwcml2YXRlIHVwZGF0ZU5hdlNpemUoKSB7XG4gICAgICAgIGNvbnN0IHNpemVDbHMgPSBzaXplQ2xhc3Nlc1t0aGlzLm5hdmNvbnRyb2xzXTtcbiAgICAgICAgaWYgKHNpemVDbHMgJiYgdGhpcy5uYXZpZ2F0aW9uc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ2xhc3MgPSBzaXplQ2xzW3RoaXMubmF2aWdhdGlvbnNpemVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ2xhc3MgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEZ1bmN0aW9uIHRvIHJlc2V0IHRoZSBwYWdpbmcgdmFsdWVzIHRvIGRlZmF1bHQuXG4gICAgcmVzZXRQYWdlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IDA7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHBhZ2luZyB2YWx1ZXMuKi9cbiAgICBjYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKSB7XG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gKHRoaXMuZGF0YVNpemUgPiB0aGlzLm1heFJlc3VsdHMpID8gKE1hdGguY2VpbCh0aGlzLmRhdGFTaXplIC8gdGhpcy5tYXhSZXN1bHRzKSkgOiAodGhpcy5kYXRhU2l6ZSA8IDAgPyAwIDogMSk7XG4gICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBzZXQgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIHBhZ2luZyBwYXJhbWV0ZXJzKi9cbiAgICBzZXREZWZhdWx0UGFnaW5nVmFsdWVzKGRhdGFTaXplLCBtYXhSZXN1bHRzLCBjdXJyZW50UGFnZSkge1xuICAgICAgICAvKklmIG5laXRoZXIgJ2RhdGFTaXplJyBub3IgJ21heFJlc3VsdHMnIGlzIHNldCwgdGhlbiBzZXQgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlIHBhZ2luZyBwYXJhbWV0ZXJzLiovXG4gICAgICAgIGlmICghZGF0YVNpemUgJiYgIW1heFJlc3VsdHMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZUNvdW50ID0gMTtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gZGF0YVNpemU7XG4gICAgICAgICAgICB0aGlzLmRhdGFTaXplID0gZGF0YVNpemU7XG4gICAgICAgIH0gZWxzZSB7IC8qRWxzZSwgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVzIGFuZCByZWNhbGN1bGF0ZSBwYWdpbmcgcGFyYW1ldGVycy4qL1xuICAgICAgICAgICAgdGhpcy5tYXhSZXN1bHRzID0gbWF4UmVzdWx0cyB8fCB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICB0aGlzLmRhdGFTaXplID0gaXNEZWZpbmVkKGRhdGFTaXplKSA/IGRhdGFTaXplIDogdGhpcy5kYXRhU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSBjdXJyZW50UGFnZSB8fCB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1heFJlc3VsdHNFbWl0dGVyLmVtaXQodGhpcy5tYXhSZXN1bHRzKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIHRoZSBkYXRhU2l6ZSBhbmQgbWFuaXB1bGF0ZSB0aGUgbmF2aWdhdG9yIGFjY29yZGluZ2x5LiovXG4gICAgY2hlY2tEYXRhU2l6ZShkYXRhU2l6ZSwgbnVtYmVyT2ZFbGVtZW50cz8sIHNpemU/KSB7XG4gICAgICAgIC8qSWYgdGhlIGRhdGFTaXplIGlzIC0xIG9yIEludGVnZXIuTUFYX1ZBTFVFKCB3aGljaCBpcyAyMTQ3NDgzNjQ3KSwgdGhlbiB0aGUgdG90YWwgbnVtYmVyIG9mIHJlY29yZHMgaXMgbm90IGtub3duLlxuICAgICAgICAgKiBIZW5jZSxcbiAgICAgICAgICogMS4gSGlkZSB0aGUgJ1RvdGFsIFJlY29yZCBDb3VudCcuXG4gICAgICAgICAqIDIuIERpc2FibGUgdGhlICdHb1RvTGFzdFBhZ2UnIGxpbmsgYXMgdGhlIHBhZ2UgbnVtYmVyIG9mIHRoZSBsYXN0IHBhZ2UgaXMgbm90IGtub3duLiovXG4gICAgICAgIGlmIChkYXRhU2l6ZSA9PT0gLTEgfHwgZGF0YVNpemUgPT09IEFwcENvbnN0YW50cy5JTlRfTUFYX1ZBTFVFKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZzaG93cmVjb3JkY291bnQgPSB0aGlzLnNob3dyZWNvcmRjb3VudDtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTGFzdCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUNvdW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd3JlY29yZGNvdW50ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBJZiBudW1iZXIgb2YgcmVjb3JkcyBpbiBjdXJyZW50IHBhZ2UgaXMgbGVzcyB0aGFuIHRoZSBtYXggcmVjb3JkcyBzaXplLCB0aGlzIGlzIHRoZSBsYXN0IHBhZ2UuIFNvIGRpc2FibGUgbmV4dCBidXR0b24uXG4gICAgICAgICAgICBpZiAobnVtYmVyT2ZFbGVtZW50cyA8IHNpemUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVDb3VudCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zaG93cmVjb3JkY291bnQgPSB0aGlzLnByZXZzaG93cmVjb3JkY291bnQgfHwgdGhpcy5zaG93cmVjb3JkY291bnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGRpc2FibGUgbmF2aWdhdGlvbiBiYXNlZCBvbiB0aGUgY3VycmVudCBhbmQgdG90YWwgcGFnZXMuKi9cbiAgICBkaXNhYmxlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgY29uc3QgaXNDdXJyZW50UGFnZUZpcnN0ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IDEpLFxuICAgICAgICAgICAgaXNDdXJyZW50UGFnZUxhc3QgPSAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gdGhpcy5wYWdlQ291bnQpO1xuICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbj8ubmV4dCkge1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVGaXJzdCA9IHRoaXMuaXNEaXNhYmxlUHJldmlvdXMgPSBpc0N1cnJlbnRQYWdlRmlyc3Q7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0aGlzLmlzRGlzYWJsZUxhc3QgPSBpc0N1cnJlbnRQYWdlTGFzdDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdNUy0xODg2NzogSW4gY2FzZSBvZiBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBmb3IgcGFnZXIgdHlwZSBwYWdpbmF0aW9uIGRlcGVuZCBvbiBwcmV2IGFuZCBuZXh0IGZsYWdzIHdoaWNoIGFyZSBzZXQgYnkgZGV2ZWxvcGVyXG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUZpcnN0ID0gdGhpcy5pc0Rpc2FibGVQcmV2aW91cyA9ICF0aGlzLnBhZ2luYXRpb24ucHJldjtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTmV4dCA9IHRoaXMuaXNEaXNhYmxlTGFzdCA9ICF0aGlzLnBhZ2luYXRpb24ubmV4dDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzRGlzYWJsZUN1cnJlbnQgPSBpc0N1cnJlbnRQYWdlRmlyc3QgJiYgaXNDdXJyZW50UGFnZUxhc3Q7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgY2xpZW50IHNpZGUgcGFnaW5hdGlvbiwgd2hlbiBsb2FkIG1vcmUgcmVhY2hlcyBsYXN0IHBhZ2UgaGlkZSB0aGUgb24tZGVtYW5kIGdyaWQgZWxlXG4gICAgICAgIGlmICh0aGlzLmRhdGFzZXQgJiYgdGhpcy5kYXRhc2V0Lmxlbmd0aCAmJiB0aGlzLmlzRGlzYWJsZU5leHQgJiYgdGhpcy5wYXJlbnQub25EZW1hbmRMb2FkICYmIHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmNhbGxEYXRhR3JpZE1ldGhvZCgnaGlkZUxvYWRpbmdJbmRpY2F0b3InLCB0aGlzLmlzRGlzYWJsZU5leHQsIHRoaXMucGFyZW50LmluZlNjcm9sbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSB2YXJpYWJsZSBib3VuZCB0byB0aGUgZGF0YS1uYXZpZ2F0b3IgaGFzIHBhZ2luZy4qL1xuICAgIGlzRGF0YVNvdXJjZUhhc1BhZ2luZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YXNvdXJjZSAmJiB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdCB3aGljaCBnaXZlcyBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHBhZ2UgZGF0YSAoZXg6IEluIFVJIGl0IGlzIHNob3duIGFzICAxIHRvIDEwIG91dCBvZiA1MCByZWNvcmRzKVxuICAgIGdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0b3RhbFJlY29yZHMpIHtcbiAgICAgICAgdGhpcy5yb3dTdW1tYXJ5ID0gIChpc0RlZmluZWQoc3RhcnRJbmRleCkgJiYgaXNEZWZpbmVkKGVuZEluZGV4KSAmJiBpc0RlZmluZWQodG90YWxSZWNvcmRzKSkgPyB7XG4gICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgZW5kSW5kZXg6IGVuZEluZGV4LFxuICAgICAgICAgICAgdG90YWxSZWNvcmRzOiB0b3RhbFJlY29yZHNcbiAgICAgICAgfToge307XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSByZXN1bHQgZm9yIGNsaWVudCBzaWRlIHBhZ2luYXRpb25cbiAgICBzZXROb25QYWdlYWJsZURhdGEobmV3VmFsKSB7XG4gICAgICAgIGxldCBkYXRhU2l6ZSxcbiAgICAgICAgICAgIG1heFJlc3VsdHMsXG4gICAgICAgICAgICBjdXJyZW50UGFnZSxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg7XG4gICAgICAgIGRhdGFTaXplID0gaXNBcnJheShuZXdWYWwpID8gbmV3VmFsLmxlbmd0aCA6IChpc0VtcHR5KG5ld1ZhbCkgPyAwIDogMSk7XG4gICAgICAgIG1heFJlc3VsdHMgPSAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5tYXhSZXN1bHRzKSB8fCBkYXRhU2l6ZTtcblxuICAgICAgICBpZiAodGhpcy5hbGxvd3BhZ2VzaXplY2hhbmdlKSB7IC8vIHdoZW4gZGVmYXVsdCBwYWdlIHNpemUgaXMgbm90IGdpdmVuIHRoZW4gdXNlIG1heFJlc3VsdHMgaW5zdGVhZCBvZiBvcHRpb25zLm1heFJlc3VsdHNcbiAgICAgICAgICAgIG1heFJlc3VsdHMgPSB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIHN0YXRpYyB2YXJpYWJsZSwga2VlcCB0aGUgY3VycmVudCBwYWdlLiBGb3Igb3RoZXIgdmFyaWFibGVzIHdpdGhvdXQgcGFnaW5hdGlvbiByZXNldCB0aGUgcGFnZSB0byAxXG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzI2M106IGdyaWRPcHRpb25zLmlzTmV4dFBhZ2VEYXRhIGZsYWcgaXMgZmFsc2Ugd2hlbiBkYXRhc2V0IGlzIGNoYW5nZWQgZnJvbSBzY3JpcHQsIHNvIHNldHRpbmcgY3VycmVudCBwYWdlIHRvIDFcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiAodGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSB8fCAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiAodGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpICYmIChnZXQodGhpcy5wYXJlbnQsICdncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkJykgPT09IHRoaXMucGFyZW50LmdyaWRPcHRpb25zLkFDVElPTlMuREFUQVNFVF9VUERBVEUgfHwgIWdldCh0aGlzLnBhcmVudCwgJ2dyaWRPcHRpb25zLmlzTmV4dFBhZ2VEYXRhJykpKSkpKSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBhZ2luZ1ZhbHVlcyhkYXRhU2l6ZSwgbWF4UmVzdWx0cywgY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLmRpc2FibGVOYXZpZ2F0aW9uKCk7XG5cbiAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIHRoaXMuZ2V0UGFnZURldGFpbHMoc3RhcnRJbmRleCArIDEsIE1hdGgubWluKHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMsIG5ld1ZhbD8ubGVuZ3RoKSwgbmV3VmFsPy5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNldFJlc3VsdChpc0FycmF5KG5ld1ZhbCkgPyBuZXdWYWwuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cykgOiBuZXdWYWwpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZXMgbmVlZGVkIGZvciBwYWdpbmF0aW9uKi9cbiAgICBwcml2YXRlIHNldFBhZ2luZ1ZhbHVlcyhuZXdWYWwpIHtcbiAgICAgICAgbGV0IGRhdGFTaXplLFxuICAgICAgICAgICAgbWF4UmVzdWx0cyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgIGRhdGFTb3VyY2U7XG4gICAgICAgIGxldCB2YXJpYWJsZU9wdGlvbnM6IGFueSA9IHt9O1xuICAgICAgICAvLyBTdG9yZSB0aGUgZGF0YSBpbiBfX2Z1bGxEYXRhLiBUaGlzIGlzIHVzZWQgZm9yIGNsaWVudCBzaWRlIHNlYXJjaGluZyB3aXR2YWggb3V0IG1vZGlmeWluZyB0aGUgYWN0dWFsIGRhdGFzZXQuXG4gICAgICAgIHRoaXMuX19mdWxsRGF0YSA9IG5ld1ZhbDtcbiAgICAgICAgLypDaGVjayBmb3Igc2FuaXR5Ki9cbiAgICAgICAgaWYgKHRoaXMuYmluZGRhdGFzZXQpIHtcbiAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB0aGlzLmRhdGFzb3VyY2UgfHwge307XG4gICAgICAgICAgICB2YXJpYWJsZU9wdGlvbnMgPSBkYXRhU291cmNlLl9vcHRpb25zIHx8IHt9O1xuICAgICAgICAgICAgLypDaGVjayBmb3IgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBkYXRhIHNldCovXG4gICAgICAgICAgICBpZiAobmV3VmFsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uID0gdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1BBR0lOR19PUFRJT05TKSB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgXCJmaWx0ZXJGaWVsZHNcIiBhbmQgXCJzb3J0T3B0aW9uc1wiIGhhdmUgYmVlbiBzZXQsIHRoZW4gc2V0IHRoZW0gc28gdGhhdCB0aGUgZmlsdGVycyBjYW4gYmUgcmV0YWluZWQgd2hpbGUgZmV0Y2hpbmcgZGF0YSB1cG9uIHBhZ2UgbmF2aWdhdGlvbi5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGaWVsZHMgPSB2YXJpYWJsZU9wdGlvbnMuZmlsdGVyRmllbGRzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2ljYWxPcCA9IHZhcmlhYmxlT3B0aW9ucy5sb2dpY2FsT3AgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydE9wdGlvbnMgPSB2YXJpYWJsZU9wdGlvbnMub3JkZXJCeSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGlzQXJyYXkodGhpcy5wYWdpbmF0aW9uLnNvcnQpID8gZ2V0T3JkZXJCeUV4cHIodGhpcy5wYWdpbmF0aW9uLnNvcnQpIDogJycpO1xuICAgICAgICAgICAgICAgICAgICBkYXRhU2l6ZSA9IHRoaXMucGFnaW5hdGlvbi50b3RhbEVsZW1lbnRzO1xuICAgICAgICAgICAgICAgICAgICBtYXhSZXN1bHRzID0gdGhpcy5wYWdpbmF0aW9uLnNpemUgPSBOdW1iZXIodGhpcy5wYWdpbmF0aW9uLnNpemUpID8gdGhpcy5wYWdpbmF0aW9uLnNpemUgOiBnZXQodGhpcy5kYXRhc291cmNlLmRhdGFTZXQsIHRoaXMucGFnaW5hdGlvbi5zaXplKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMgPSBOdW1iZXIodGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMpID8gdGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMgOiBnZXQodGhpcy5kYXRhc291cmNlLmRhdGFTZXQsIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucGFnaW5hdGlvbi5udW1iZXIpKSB7IC8vIG51bWJlciBpcyBwYWdlIG51bWJlciByZWNlaXZlZCBmcm9tIGJhY2tlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uLm51bWJlciArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKiBTZW5kaW5nIHBhZ2VDb3VudCB1bmRlZmluZWQgdG8gY2FsY3VsYXRlIGl0IGFnYWluIGZvciBxdWVyeS4qL1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRGF0YVNpemUoZGF0YVNpemUsIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzLCB0aGlzLnBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAoY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGV0YWlscyhzdGFydEluZGV4ICsgMSwgc3RhcnRJbmRleCArIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vblBhZ2VhYmxlRGF0YShuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0UGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb24gPT09ICdCYXNpYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobmV3VmFsICYmICFpc1N0cmluZyhuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb25QYWdlYWJsZURhdGEobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgZmlyc3QgcGFnZSovXG4gICAgaXNGaXJzdFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gMSB8fCAhdGhpcy5kbi5jdXJyZW50UGFnZSk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IHBhZ2UqL1xuICAgIGlzTGFzdFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gdGhpcy5wYWdlQ291bnQpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGxhc3QgcGFnZSovXG4gICAgZ29Ub0xhc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0xhc3RQYWdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VDb3VudDtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGZpcnN0IHBhZ2UqL1xuICAgIGdvVG9GaXJzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyc3RQYWdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVmcmVzaCkge1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgY3VycmVudCBwYWdlKi9cbiAgICBnb1RvUGFnZShldmVudD8sIGNhbGxiYWNrPykge1xuICAgICAgICB0aGlzLmZpcnN0Um93ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UuY29tcHV0ZU1vZGUodGhpcy5zdGF0ZWhhbmRsZXIpLFxuICAgICAgICAgICAgYWxsb3dwYWdlc2l6ZWNoYW5nZSA9IHRoaXMucGFyZW50LmFsbG93cGFnZXNpemVjaGFuZ2U7XG4gICAgICAgIGlmIChtb2RlICYmIG1vZGUudG9Mb3dlckNhc2UoKSAhPT0gJ25vbmUnICYmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnIHx8IHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS1saXN0JykpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Ll9zZWxlY3RlZEl0ZW1zRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNGaXJzdFBhZ2UoKSAmJiAhYWxsb3dwYWdlc2l6ZWNoYW5nZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsICdwYWdpbmF0aW9uJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcy5pbmRleE9mKHRoaXMucGFyZW50Lm5hdmlnYXRpb24pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZTogeyBwYWdpbmF0aW9uOiBudW1iZXI7IHBhZ2VzaXplPzogbnVtYmVyIH0gPSB7IHBhZ2luYXRpb246IHRoaXMuZG4uY3VycmVudFBhZ2UgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFsbG93cGFnZXNpemVjaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBhZ2VzaXplID0gdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS1saXN0JyB8fCB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy5wYXJlbnQubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXJlbnQuY3VycmVudHBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQubmF0aXZlRWxlbWVudD8uc2V0QXR0cmlidXRlKCdjdXJyZW50cGFnZScsIHRoaXMuZG4uY3VycmVudFBhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNhbGwgZ2V0UGFnZURhdGEgYWZ0ZXIgY2hlY2tpbmcgc3RhdGUgY29uZmlnIHNvIHRoYXQgU3RhdGljIFZhcmlhYmxlcyBjYW4gdXNlIGl0XG4gICAgICAgIHRoaXMuZ2V0UGFnZURhdGEoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlIGRhdGEgb2YgdGhlIHBhZ2UgaGFzIGJlZW4gZmV0Y2hlZC4qL1xuICAgIG9uUGFnZURhdGFSZWFkeShldmVudCwgZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuICAgICAgICB0aGlzLmludm9rZVNldFJlY29yZChldmVudCwgZGF0YSk7XG4gICAgICAgIHRyaWdnZXJGbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBnZXQgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSovXG4gICAgZ2V0UGFnZURhdGEoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBkYXRhLFxuICAgICAgICAgICAgc3RhcnRJbmRleDtcblxuICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJbiB0YWJsZSBjb21wb25lbnQsIGluIGNhc2Ugb2Ygb24gZGVtYW5kIGFuZCBzY3JvbGwgcGFnaW5hdGlvblxuICAgICAgICAgICAgICogV2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBkYXRhIGl0ZW0gd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgICogRmV0Y2ggdGhlIGl0ZW1zIG9mIHRoZSBwYWdlIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbWFkZVxuICAgICAgICAgICAgICogKi9cbiAgICAgICAgICAgIGxldCBwYWdlSW5kZXggPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0Tm90SW5DdXJyZW50UGFnZSgpICYmIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLmxhc3RBY3Rpb25QZXJmb3JtZWQgIT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgICAgICAgcGFnZUluZGV4ID0gdGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkxJU1RfUkVDT1JEUywge1xuICAgICAgICAgICAgICAgICdwYWdlJzogcGFnZUluZGV4LFxuICAgICAgICAgICAgICAgICdzaXplJzogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgICdmaWx0ZXJGaWVsZHMnOiB0aGlzLmZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgICAgICAnb3JkZXJCeSc6IHRoaXMuc29ydE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgJ2xvZ2ljYWxPcCc6IHRoaXMubG9naWNhbE9wLFxuICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnOiAnYW55d2hlcmVpZ25vcmVjYXNlJ1xuICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VEYXRhUmVhZHkoZXZlbnQsIHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxICwgc3RhcnRJbmRleCArIHRoaXMucGFnaW5hdGlvbj8ubnVtYmVyT2ZFbGVtZW50cywgdGhpcy5wYWdpbmF0aW9uPy50b3RhbEVsZW1lbnRzKTtcbiAgICAgICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZXJyb3IgaXMgdW5kZWZpbmVkLCBkbyBub3Qgc2hvdyBhbnkgbWVzc2FnZSBhcyB0aGlzIG1heSBiZSBkaXNjYXJkZWQgcmVxdWVzdFxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gd21Ub2FzdGVyLnNob3coJ2Vycm9yJywgJ0VSUk9SJywgJ1VuYWJsZSB0byBnZXQgZGF0YSBvZiBwYWdlIC0nICsgdGhpcy5kbi5jdXJyZW50UGFnZSArICc6JyArIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSBpc0FycmF5KHRoaXMuX19mdWxsRGF0YSkgPyB0aGlzLl9fZnVsbERhdGEuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cykgOiB0aGlzLl9fZnVsbERhdGE7XG4gICAgICAgICAgICB0aGlzLmdldFBhZ2VEZXRhaWxzKHN0YXJ0SW5kZXggKyAxICwgTWF0aC5taW4oc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cywgdGhpcy5fX2Z1bGxEYXRhPy5sZW5ndGgpLCB0aGlzLl9fZnVsbERhdGE/Lmxlbmd0aCk7XG4gICAgICAgICAgICB0aGlzLnNldFJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlRGF0YVJlYWR5KGV2ZW50LCBkYXRhLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBlZGl0IGFjdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIHByZXZpb3VzIHBhZ2UgZGF0YSBvZiB0aGUgdGFibGVcbiAgICAqL1xuICAgIGlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnICYmIHBhZ2VJbmRleCA9PT0gdGhpcy5wYXJlbnQuY3VycmVudFBhZ2UgJiZcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgJiYgdGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSA8IHBhZ2VJbmRleDtcbiAgICB9XG5cbiAgICBpbnZva2VTZXRSZWNvcmQoZXZlbnQsIGRhdGEpIHtcbiAgICAgICAgLy8gVHJpZ2dlciB0aGUgZXZlbnQgaGFuZGxlciBpZiBleGlzdHMuXG4gICAgICAgIGNvbnN0IHBhZ2VJbmZvID0ge1xuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuZG4uY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICB0b3RhbEVsZW1lbnRzOiB0aGlzLmRhdGFTaXplLFxuICAgICAgICAgICAgdG90YWxQYWdlczogdGhpcy5wYWdlQ291bnRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pbnZva2VFdmVudENhbGxiYWNrKCdzZXRyZWNvcmQnLCB7JGV2ZW50OiBldmVudCwgJGRhdGE6IGRhdGEsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZSwgcGFnZUluZm8sIGRhdGF9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2V0cmVjb3JkJywgeyRldmVudDogZXZlbnQsICRkYXRhOiBkYXRhLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2UsIHBhZ2VJbmZvLCBkYXRhfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBwYWdlIGlucHV0LlxuICAgICBJbiBjYXNlIG9mIGludmFsaWQgaW5wdXQsIG5hdmlnYXRlIHRvIHRoZSBhcHByb3ByaWF0ZSBwYWdlOyBhbHNvIHJldHVybiBmYWxzZS5cbiAgICAgSW4gY2FzZSBvZiB2YWxpZCBpbnB1dCwgcmV0dXJuIHRydWUuKi9cbiAgICB2YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaz8pIHtcbiAgICAgICAgLypJZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxhc3QgcGFnZSBudW1iZXIgb3IgaW52YWxpZCB2YWx1ZSwgdGhlbiBoaWdobGlnaHRpbmcgdGhlIGZpZWxkIHNob3dpbmcgZXJyb3IuKi9cbiAgICAgICAgaWYgKGV2ZW50ICYmIChpc05hTih0aGlzLmRuLmN1cnJlbnRQYWdlKSB8fCB0aGlzLmRuLmN1cnJlbnRQYWdlIDw9IDAgfHwgKHRoaXMucGFnZUNvdW50ICYmICh0aGlzLmRuLmN1cnJlbnRQYWdlID4gdGhpcy5wYWdlQ291bnQgfHwgaXNOdWxsKHRoaXMuZG4uY3VycmVudFBhZ2UpKSkpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kbi5jdXJyZW50UGFnZSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZG4uY3VycmVudFBhZ2UgPiB0aGlzLnBhZ2VDb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VDb3VudDtcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXRFbGUgPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnYScpO1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0tleUUnKSB7XG4gICAgICAgICAgICB0YXJnZXRFbGUuYWRkQ2xhc3MoJ25nLWludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRFbGUucmVtb3ZlQ2xhc3MoJ25nLWludmFsaWQnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcGFnZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgICAgIHRoaXMuX2RlYm91bmNlZFBhZ2VDaGFuZ2VkKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSByZXNwZWN0aXZlIHBhZ2VzLiovXG4gICAgbmF2aWdhdGVQYWdlKGluZGV4LCBldmVudCwgaXNSZWZyZXNoPywgY2FsbGJhY2s/KSB7XG4gICAgICAgIC8vIHdoZW4gbmF2aWdhdGVkIHRvIG5leHQgcGFnZSB0dXJuIG9uIHRoZSBpc0RhdGFMb2FkaW5nIGZsYWcgdG8gc2hvdyB0aGUgbG9hZGluZyBpbmRpY2F0b3JcbiAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnBhcmVudC5pc0RhdGFMb2FkaW5nKSAmJiAhdGhpcy5pc0Rpc2FibGVOZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pc0RhdGFMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgaW5maW5pdGUgc2Nyb2xsIGNhbGxpbmcgdGhlIHNob3dMb2FkaW5nSW5kaWNhdG9yIG1ldGhvZCB0byB1cGRhdGUgdGhlIGxvYWRpbmcgbWVzc2FnZSBpbW1lZGlhdGVseSB3aGVuIG5hdmlnYXRlZCB0byBuZXh0IHBhZ2VcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudC5pbmZTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC52YXJpYWJsZUluZmxpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5jYWxsRGF0YUdyaWRNZXRob2QoJ3Nob3dMb2FkaW5nSW5kaWNhdG9yJywgdGhpcy5wYXJlbnQubG9hZGluZ2RhdGFtc2csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlc2V0IHRoZSBsYXN0IGFjdGlvbiBwZXJmb3JtZWQgdG8gXCJzY3JvbGxcIiBhbmQgaXNEYXRhc2V0VXBkYXRlZCB0byBmYWxzZVxuICAgICAgICBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5pc05hdlR5cGVTY3JvbGxPck9uZGVtYW5kKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuQUNUSU9OUy5ERUZBVUxUKTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLnNldElzRGF0YXNldFVwZGF0ZWQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygncGFnaW5hdGlvbmNoYW5nZScsIHskZXZlbnQ6IHVuZGVmaW5lZCwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlfSk7XG5cbiAgICAgICAgLy8gQ29udmVydCB0aGUgY3VycmVudCBwYWdlIHRvIGEgdmFsaWQgcGFnZSBudW1iZXIuXG4gICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSArdGhpcy5kbi5jdXJyZW50UGFnZTtcblxuICAgICAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICAgICAgICBjYXNlICdmaXJzdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvRmlyc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlICdwcmV2JzpcbiAgICAgICAgICAgICAgICAvKlJldHVybiBpZiBhbHJlYWR5IG9uIHRoZSBmaXJzdCBwYWdlLiovXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQgJiYgKHRoaXMuaXNGaXJzdFBhZ2UoKSB8fCAhdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFnaW5hdGlvbj8ubmV4dCkgeyAvLyBXTVMtMTg4Njc6IEZvciBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBza2lwcGluZyB0aGUgcmVndWxhciBmbG93IGFuZCBlbmFibGluZyBpc05leHQgZmxhZyBpbiBwYWdpbmF0aW9uIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzTmV4dCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc1ByZXYgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKkRlY3JlbWVudCB0aGUgY3VycmVudCBwYWdlIGJ5IDEuKi9cbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlIC09IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgICAgICAgICAvKlJldHVybiBpZiBhbHJlYWR5IG9uIHRoZSBsYXN0IHBhZ2UuKi9cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbj8ubmV4dCAmJiAodGhpcy5pc0xhc3RQYWdlKCkgfHwgIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2spKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHsgLy8gV01TLTE4ODY3OiBGb3Igc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgc2tpcHBpbmcgdGhlIHJlZ3VsYXIgZmxvdyBhbmQgZW5hYmxpbmcgaXNQcmV2IGZsYWcgaW4gcGFnaW5hdGlvbiBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc05leHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc1ByZXYgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLypJbmNyZW1lbnQgdGhlIGN1cnJlbnQgcGFnZSBieSAxLiovXG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSArPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbGFzdCc6XG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTGFzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvKk5hdmlnYXRlIHRvIHRoZSBjdXJyZW50IHBhZ2UuKi9cbiAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHNldEJpbmREYXRhU2V0KGJpbmRkYXRhc2V0LCBwYXJlbnQsIGRhdGFTb3VyY2UsIGRhdGFzZXQ/LCBiaW5kZGF0YXNvdXJjZT8sIGRhdGFzZXRCb3VuZEV4cHI/LCBzdGF0ZWhhbmRsZXI/KSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gYmluZGRhdGFzZXQuc3BsaXQoJy4nKTtcbiAgICAgICAgbGV0IGJpbmRQYWdpbmdPcHRpb25zO1xuICAgICAgICB0aGlzLnN0YXRlaGFuZGxlciA9IHN0YXRlaGFuZGxlcjtcbiAgICAgICAgaWYgKHBhcnRzWzBdID09PSAnVmFyaWFibGVzJyB8fCBwYXJ0c1swXSA9PT0gJ1dpZGdldHMnKSB7XG4gICAgICAgICAgICBiaW5kUGFnaW5nT3B0aW9ucyA9IGAke3BhcnRzWzBdfS4ke3BhcnRzWzFdfS5wYWdpbmF0aW9uYDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWJpbmRkYXRhc291cmNlICYmIGRhdGFzZXQgJiYgIWRhdGFzZXRCb3VuZEV4cHIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNldCA9IGRhdGFzZXQ7XG4gICAgICAgICAgICB0aGlzLl9kZWJvdW5jZWRBcHBseURhdGFzZXQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJpbmRkYXRhc2V0ID0gYmluZGRhdGFzZXQ7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgLy8gd2F0Y2hpbmcgZm9yIGRhdGFzZXQgY2hhbmdlcyBldmVuIHdoZW4gZGF0YXNldCBpcyBib3VuZCB0byBcIml0ZW0uXCIgKGkuZS4gYnkgY2hlY2tpbmcgZm9yIGRhdGFzZXRCb3VuZEV4cHIpXG4gICAgICAgICAgICAvLyBpdGVtIGNvbnRleHQgaXMgcGFzc2VkIGFzIGRhdGFTb3VyY2UgaGVyZVxuICAgICAgICAgICAgLy8gW1RvZG8tQ1NQXTogY2hlY2sgaWYgc2FtZSBleHByIGZuIGlzIGdlbmVyYXRlZCBieSBwYXJlbnQgd2lkZ2V0IChsaXN0LCB0YWJsZSlcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgJHdhdGNoKFxuICAgICAgICAgICAgICAgICAgICBiaW5kZGF0YXNldCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0Qm91bmRFeHByID8gZGF0YVNvdXJjZSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICBudiA9PiAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG52KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc2V0ID0gbnY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV01TLTE5Mjg1OiBTZXR0aW5nIGRhdGFzZXQgb24gcHJveHkgb25seSB0byBoYW5kbGUgcHJvcGVydHljaGFuZ2UgaGFuZGxlciBjYWxsIGZvciB1bmRlZmluZWQgY2FzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGdldC5kYXRhc2V0ID0gbnY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBSZWdpc3RlciBhIHdhdGNoIG9uIHBhZ2luZyBvcHRpb25zLiBDYWxsIGRhdGFzZXQgcHJvcGVydHkgY2hhbmdlIGhhbmRsZXIgZXZlbiBpZiBwYWdpbmcgb3B0aW9ucyBjaGFuZ2VzIHRvIHJlZmxlY3QgcGFnaW5hdGlvbiBzdGF0ZVxuICAgICAgICAgICAgaWYgKCFiaW5kUGFnaW5nT3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogZWl0aGVyIGdlbmVyYXRlIHdhdGNoIGV4cHIgZm4gb3IgcmVnaXN0ZXIgYW4gZXZlbnQgZnJvbSB0aGUgZGF0YXNvdXJjZSBpdHNlbGZcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIoXG4gICAgICAgICAgICAgICAgJHdhdGNoKFxuICAgICAgICAgICAgICAgICAgICBiaW5kUGFnaW5nT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYXBwbHkgZGF0YXNvdXJjZSBvbmx5IHdoZW4gZGF0YXNldCBpcyBub3QgYm91bmQgdG8gXCJpdGVtLkZJRUxEXCJcbiAgICAgICAgaWYgKCFkYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHRoZSBkYXRhc291cmNlIG9mIHBhZ2luYXRpb24gZnJvbSB0aGUgcGFyZW50IHdpZGdldFxuICAgIHNldERhdGFTb3VyY2UoZGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLmRhdGFzb3VyY2UgPSBkYXRhU291cmNlO1xuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5OiBzdHJpbmcsIG52LCBvdikge1xuICAgICAgICBsZXQgcGFnZVNpemUsIHByZXZQYWdlU2l6ZTtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5vbkRhdGFOYXZpZ2F0b3JEYXRhU2V0Q2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMucGFyZW50Lm9uRGF0YU5hdmlnYXRvckRhdGFTZXRDaGFuZ2UobnYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gbnY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIHRvIFwiZGF0YXNldF91cGRhdGVcIiB3aGVuZXZlciBkYXRhc2V0IGlzIGNoYW5nZWQgaW4gdGFibGUgY29tcG9uZW50XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Ll90cmlnZ2VyZWRCeVVzZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhPy5sZW5ndGgpIHsgLy8gY2FsY3VsYXRlIFBhZ2VzaXplIG9wdGlvbnMgYmFzZWQgb24gYWN0dWFsIHBhZ2Ugc2l6ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpKSB7IC8vIGZvciBMaXZlIHZhcmlhYmxlc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50UGFnZVNpemUgPSBnZXQoZGF0YSwgJ3BhZ2luYXRpb24uc2l6ZScpIHx8IGdldCh0aGlzLmRhdGFzb3VyY2UsICdwYWdpbmF0aW9uLnNpemUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsRWxlbWVudHMgPSBnZXQoZGF0YSwgJ3BhZ2luYXRpb24udG90YWxFbGVtZW50cycpIHx8IGdldCh0aGlzLmRhdGFzb3VyY2UsICdwYWdpbmF0aW9uLnRvdGFsRWxlbWVudHMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZGdldFN0YXRlID0gdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5nZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0dWFsUGFnZVNpemUgPSB3aWRnZXRTdGF0ZT8uYWN0dWFscGFnZXNpemUgfHwgY3VycmVudFBhZ2VTaXplO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdHVhbFBhZ2VTaXplID0gTnVtYmVyKHRoaXMuYWN0dWFsUGFnZVNpemUpID8gdGhpcy5hY3R1YWxQYWdlU2l6ZSA6IGdldCh0aGlzLmRhdGFzb3VyY2UuZGF0YVNldCwgdGhpcy5hY3R1YWxQYWdlU2l6ZSlcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemVPcHRpb25zID0gWy4uLnRoaXMuZGVmYXVsdFBhZ2VTaXplT3B0aW9uc107XG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSByYW5nZSh0aGlzLmFjdHVhbFBhZ2VTaXplLCAgTWF0aC5tYXgodGhpcy5hY3R1YWxQYWdlU2l6ZSArIDEsIHRoaXMuYWN0dWFsUGFnZVNpemUgKyB0b3RhbEVsZW1lbnRzKSwgdGhpcy5hY3R1YWxQYWdlU2l6ZSk7IC8vIGhlcmUgZGF0YSBoYXMgb25seSB0aGF0IHBhZ2UgZGF0YSBhbmQgcGFnZXNpemUgaGFzIHRvdGFsTm9vZiBFbGVtZW50c1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aWRnZXRTdGF0ZT8uc2VsZWN0ZWRJdGVtICYmIHdpZGdldFN0YXRlLmFjdHVhbHBhZ2VzaXplICE9PSB3aWRnZXRTdGF0ZS5wYWdlc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZQYWdlU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VTaXplID0gdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCBkYXRhPy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkSXRlbXMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zZm9yTmV3UGFnZVNpemUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCB0aGlzLnByZXZQYWdlU2l6ZSwgZGF0YT8ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkSXRlbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMucGFyZW50LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbHBhZ2VzaXplOiB0aGlzLmFjdHVhbFBhZ2VTaXplIHx8IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtOiB1cGRhdGVkSXRlbXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldlBhZ2VTaXplID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVNpemUgPSB0aGlzLnBhcmVudC5nZXRBY3R1YWxQYWdlU2l6ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmRlZmF1bHRQYWdlU2l6ZU9wdGlvbnMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZU9wdGlvbnMgPSBbLi4udGhpcy5kZWZhdWx0UGFnZVNpemVPcHRpb25zXTtcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplT3B0aW9ucyA9IHJhbmdlKHBhZ2VTaXplLCBkYXRhLmxlbmd0aCArIHBhZ2VTaXplLCBwYWdlU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaGVuIHRoZSBkYXRhc2V0IGlzIG5vdCBpbiBjdXJyZW50IHBhZ2UsIGJ1dCBpbiBwcmV2aW91cyBvbmVzIGRpcmVjdGx5IHNldCB0aGUgcmVzdWx0IHdpdGhvdXQgc2V0dGluZyBwYWdlIHZhbHVlc1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0Tm90SW5DdXJyZW50UGFnZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQoZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5nVmFsdWVzKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hdmlnYXRpb24nKSB7XG4gICAgICAgICAgICBpZiAobnYgPT09ICdBZHZhbmNlZCcpIHsgLy8gU3VwcG9ydCBmb3Igb2xkZXIgcHJvamVjdHMgd2hlcmUgbmF2aWdhdGlvbiB0eXBlIHdhcyBhZHZhbmNlZCBpbnN0ZWFkIG9mIGNsYXNpY1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9ICdDbGFzc2ljJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTmF2U2l6ZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZjb250cm9scyA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hdmlnYXRpb25zaXplJykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOYXZTaXplKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbmFsaWduJykge1xuICAgICAgICAgICAgc3dpdGNoQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBgdGV4dC0ke252fWAsIGB0ZXh0LSR7b3Z9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbWF4UmVzdWx0cycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5nVmFsdWVzKHRoaXMuZGF0YXNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cbiAgIC8vIGNoYW5nZSB0aGUgc2VsZWN0ZWRJdGVtcyBwYWdlIG51bWJlciBhbmQgaW5kZXggaW4gdGhlIHN0YXRlcGFyYW1zIHdoZW4gcGFnZXNpemUgaXMgY2hhbmdlZFxuICAgIGhhbmRsZVN0YXRlUGFyYW1zZm9yTmV3UGFnZVNpemUoXG4gICAgICAgIHNlbGVjdGVkSXRlbTogeyBwYWdlOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdLFxuICAgICAgICBvbGRQYWdlU2l6ZTogbnVtYmVyLFxuICAgICAgICBuZXdQYWdlU2l6ZTogbnVtYmVyXG4gICAgKTogeyBwYWdlOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdIHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbS5tYXAoKHsgcGFnZSwgaW5kZXggfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGVJbmRleCA9IChwYWdlIC0gMSkgKiBvbGRQYWdlU2l6ZSArIGluZGV4O1xuICAgICAgICAgICAgY29uc3QgbmV3UGFnZSA9IE1hdGguZmxvb3IoYWJzb2x1dGVJbmRleCAvIG5ld1BhZ2VTaXplKSArIDE7IC8vIGJhY2sgdG8gMS1iYXNlZFxuICAgICAgICAgICAgY29uc3QgbmV3SW5kZXggPSBhYnNvbHV0ZUluZGV4ICUgbmV3UGFnZVNpemU7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGFnZTogbmV3UGFnZSxcbiAgICAgICAgICAgICAgICBpbmRleDogbmV3SW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25LZXlkb3duKGV2ZW50LCBpbmRleCkge1xuICAgICAgICBjb25zdCAkaXRlbXMgPSAkKCd1bCNkcm9wZG93bi1iYXNpYyBhLmRyb3Bkb3duLWl0ZW0nKTtcbiAgICAgICAgY29uc3QgbWF4SW5kZXggPSB0aGlzLnBhZ2VTaXplT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgICAgICBsZXQgc2VsZWN0ZWRPcHRpb247XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICBjYXNlICdUYWInOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgJiYgZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJlYXQgU2hpZnQrVGFiIGFzIEFycm93VXBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSAoaW5kZXggLSAxKSA8IDAgPyBtYXhJbmRleCA6IGluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBUYWIgb3IgQXJyb3dEb3duIGFzIEFycm93RG93blxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IChpbmRleCArIDEpID4gbWF4SW5kZXggPyAwIDogaW5kZXggKyAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSAoaW5kZXggLSAxKSA8IDAgPyBtYXhJbmRleCA6IGluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb24gPSB0aGlzLnBhZ2VTaXplT3B0aW9uc1t0aGlzLmZvY3VzZWRJbmRleF07XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VTaXplQ2hhbmdlKGV2ZW50LCBzZWxlY3RlZE9wdGlvbik7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmUgZm9jdXMgYWZ0ZXIgaW5kZXggaXMgdXBkYXRlZFxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICRpdGVtcy5lcSh0aGlzLmZvY3VzZWRJbmRleCk/LmZvY3VzKCk7XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgY2xvc2VEcm9wZG93bigpIHtcbiAgICAgICAgLy8gQ2xvc2UgZHJvcGRvd25cbiAgICAgICAgdGhpcy5ic0Ryb3Bkb3duLmhpZGUoKTtcbiAgICAgICAgY29uc3QgJHRvZ2dsZUJ1dHRvbiA9ICQoJ2J1dHRvblthcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIl0nKTtcbiAgICAgICAgJHRvZ2dsZUJ1dHRvbi5mb2N1cygpOyAvLyBSZXR1cm4gZm9jdXMgdG8gYnV0dG9uXG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gZ2V0cyBjYWxsZWQgb24gZHJvcGRvd24gb3BlbiAmIGNsb3NlXG4gICAgb25PcGVuQ2hhbmdlKGlzT3Blbikge1xuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRJbmRleCA9IDA7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBtYW51YWxseSBmb2N1cyB0aGUgZHJvcGRvd24gYXMgZHJvcGRvd24gaGFzIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgIGNvbnN0ICRpdGVtcyA9ICQoJ3VsI2Ryb3Bkb3duLWJhc2ljIGEuZHJvcGRvd24taXRlbScpO1xuICAgICAgICAgICAgICAgIGNvbnN0ICRmaXJzdEl0ZW0gPSAkaXRlbXMuZXEodGhpcy5mb2N1c2VkSW5kZXgpO1xuICAgICAgICAgICAgICAgICRmaXJzdEl0ZW0/LmZvY3VzKCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblBhZ2VTaXplQ2hhbmdlKCRldmVudCwgbmV3UGFnZVNpemUpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0U3RhdGUgPSB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLmdldFdpZGdldFN0YXRlKHRoaXMucGFyZW50KTtcbiAgICAgICAgICAgIGxldCB1cGRhdGVkSXRlbXM7XG4gICAgICAgIGlmICh3aWRnZXRTdGF0ZT8uc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICB1cGRhdGVkSXRlbXMgPSB0aGlzLmhhbmRsZVN0YXRlUGFyYW1zZm9yTmV3UGFnZVNpemUod2lkZ2V0U3RhdGUuc2VsZWN0ZWRJdGVtLCB0aGlzLm1heFJlc3VsdHMsICtuZXdQYWdlU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3R1YWxQYWdlU2l6ZSA9IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB0aGlzLm1heFJlc3VsdHMgPSArbmV3UGFnZVNpemU7XG4gICAgICAgIHRoaXMubWF4UmVzdWx0c0VtaXR0ZXIuZW1pdCh0aGlzLm1heFJlc3VsdHMpO1xuICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSAmJiB0aGlzLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5tYXhSZXN1bHRzID0gdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHtcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICAgICAgYWN0dWFscGFnZXNpemU6IHRoaXMuYWN0dWFsUGFnZVNpemUgfHwgdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbTogdXBkYXRlZEl0ZW1zXG4gICAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IDEsXG4gICAgICAgICAgICAgICAgcGFnZXNpemU6IHRoaXMubWF4UmVzdWx0cyxcbiAgICAgICAgICAgICAgICBhY3R1YWxwYWdlc2l6ZTogdGhpcy5hY3R1YWxQYWdlU2l6ZSB8fCB0aGlzLm1heFJlc3VsdHNcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50LCB0cnVlKTtcbiAgICAgICAgdGhpcy5jYWxjdWxhdGVQYWdpbmdWYWx1ZXMoKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBwYWdpbmF0aW9uRWxlbSA9ICB0aGlzLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHBhZ2luYXRpb25FbGVtLm9uY2xpY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIlxuQGlmIChuYXZjb250cm9scyA9PT0gJ0NsYXNzaWMnKSB7XG48dWwgY2xhc3M9XCJwYWdpbmF0aW9uIGFkdmFuY2VkIHt7bmF2aWdhdGlvbkNsYXNzfX1cIj5cbiAgICBAaWYgKGFsbG93cGFnZXNpemVjaGFuZ2UgJiYgIHBhZ2VTaXplT3B0aW9ucz8uWzBdPHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtcy1wZXItcGFnZVwiPlxuICAgICAgICAgIDxsYWJlbCBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFXCIgY2xhc3M9XCJhcHAtbGFiZWxcIj57e2FwcExvY2FsZS5MQUJFTF9JVEVNU19QRVJfUEFHRX19IDo8L2xhYmVsPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZHJvcGRvd24gIGNvbnRhaW5lcj1cImJvZHlcIiAoaXNPcGVuQ2hhbmdlKT1cIm9uT3BlbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBpZD1cImJ1dHRvbi1iYXNpY1wiIGRyb3Bkb3duVG9nZ2xlIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBhcHAtYnV0dG9uIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAge3ttYXhSZXN1bHRzfX0gPHNwYW4gY2xhc3M9XCJjYXJldFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8dWwgaWQ9XCJkcm9wZG93bi1iYXNpY1wiICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBhZ2VzaXplLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwibWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImJ1dHRvbi1iYXNpY1wiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgcGFnZVNpemVPcHRpb25zOyB0cmFjayBvcHRpb247IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJtZW51aXRlbVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IG9wdGlvbiA9PSBtYXhSZXN1bHRzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImkgPT09IGZvY3VzZWRJbmRleCA/IDAgOiAtMVwiPnt7b3B0aW9ufX08L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICBAaWYgKHJvd1N1bW1hcnk/LnRvdGFsUmVjb3Jkcykge1xuICAgICAgICA8bGkgY2xhc3M9XCJpdGVtLXJhbmdlXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3Bhbj57e3Jvd1N1bW1hcnkuc3RhcnRJbmRleH19IC0ge3tyb3dTdW1tYXJ5LmVuZEluZGV4fX08L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj5vZjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS50b3RhbFJlY29yZHN9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlRmlyc3R9XCI+XG4gICAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfRklSU1RcIiBuYW1lPVwiZmlyc3RcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlRmlyc3RcIlxuICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCdmaXJzdCcsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktZmlyc3QtcGFnZVwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBmaXJzdCBwYWdlIHt7IGlzRGlzYWJsZUZpcnN0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZVByZXZpb3VzfVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX1BSRVZJT1VTXCIgbmFtZT1cInByZXZcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZVByZXZpb3VzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ3ByZXYnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tbGVmdFwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBwcmV2aW91cyBwYWdlIHt7IGlzRGlzYWJsZVByZXZpb3VzID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgfVxuICAgIEBpZiAoIShkYXRhU2l6ZTw9bWF4UmVzdWx0cykpIHtcbiAgICA8bGkgY2xhc3M9XCJwYWdlY291bnQgZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBhcmlhLWxhYmVsPVwiQ2hhbmdlIFBhZ2UgTnVtYmVyXCI+XG4gICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJkbi5jdXJyZW50UGFnZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Nob3dpbmcgUGFnZSAnICsgZG4uY3VycmVudFBhZ2UgKyAnIG9mICcgKyBwYWdlQ291bnRcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlQ3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiIChjaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIi8+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKCEoZGF0YVNpemU8PW1heFJlc3VsdHMpKSB7XG4gICAgPGxpIGNsYXNzPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgW2hpZGRlbl09XCJpc0Rpc2FibGVDb3VudFwiPiAvIHt7cGFnZUNvdW50fX08L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVOZXh0fVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX05FWFRcIiBuYW1lPVwibmV4dFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVOZXh0XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBuZXh0IHBhZ2Uge3sgaXNEaXNhYmxlTmV4dCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVMYXN0fVwiPlxuICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9MQVNUXCIgbmFtZT1cImxhc3RcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlTGFzdFwiXG4gICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ2xhc3QnLCAkZXZlbnQpXCI+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktbGFzdC1wYWdlXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gbGFzdCBwYWdlIHt7IGlzRGlzYWJsZUxhc3QgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIH1cbiAgICBAaWYgKHNob3dyZWNvcmRjb3VudCkge1xuICAgICAgPGxpIGNsYXNzPVwidG90YWxjb3VudCBkaXNhYmxlZFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPnt7YXBwTG9jYWxlLkxBQkVMX1RPVEFMX1JFQ09SRFN9fToge3tkYXRhU2l6ZX19PC9hPlxuICAgICAgPC9saT5cbiAgICB9XG48L3VsPlxufVxuQGlmIChuYXZjb250cm9scyA9PT0gJ1BhZ2VyJykge1xuICA8dWwgY2xhc3M9XCJwYWdlciB7e25hdmlnYXRpb25DbGFzc319XCI+XG4gICAgICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiAgcGFnZVNpemVPcHRpb25zPy5bMF08cm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW1zLXBlci1wYWdlXCI+XG4gICAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0VcIiBjbGFzcz1cImFwcC1sYWJlbFwiPnt7YXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFfX0gOjwvbGFiZWw+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiBkcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgKGlzT3BlbkNoYW5nZSk9XCJvbk9wZW5DaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidXR0b24tYmFzaWNcIiBkcm9wZG93blRvZ2dsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYXBwLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImRyb3Bkb3duLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7bWF4UmVzdWx0c319IDxzcGFuIGNsYXNzPVwiY2FyZXRcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPHVsIGlkPVwiZHJvcGRvd24tYmFzaWNcIiAqZHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudSBwYWdlc2l6ZS1vcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJidXR0b24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHBhZ2VTaXplT3B0aW9uczsgdHJhY2sgb3B0aW9uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJtZW51aXRlbVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IG9wdGlvbiA9PSBtYXhSZXN1bHRzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAoY2xpY2spPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQsIG9wdGlvbilcIiAoa2V5ZG93bik9XCJvbkRyb3Bkb3duS2V5ZG93bigkZXZlbnQsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpID09PSBmb2N1c2VkSW5kZXggPyAwIDogLTFcIj57e29wdGlvbn19PC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbGk+XG4gICAgICAgIEBpZiAocm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW0tcmFuZ2VcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnN0YXJ0SW5kZXh9fSAtIHt7cm93U3VtbWFyeS5lbmRJbmRleH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPm9mPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS50b3RhbFJlY29yZHN9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2xpPlxuICAgICAgICB9XG4gICAgfVxuQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgIDxsaSBjbGFzcz1cInByZXZpb3VzXCIgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlUHJldmlvdXN9XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ3ByZXYnLCAkZXZlbnQpXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVQcmV2aW91c1wiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tbGVmdFwiPjwvaT48L3NwYW4+XG4gICAgICAgIHt7YXBwTG9jYWxlLkxBQkVMX1BSRVZJT1VTfX1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgaXNEaXNhYmxlUHJldmlvdXMgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIDxsaSBjbGFzcz1cIm5leHRcIiBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVOZXh0fVwiPlxuICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCduZXh0JywgJGV2ZW50KVwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlTmV4dFwiPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tcmlnaHRcIj48L2k+PC9zcGFuPlxuICAgICAgICB7e2FwcExvY2FsZS5MQUJFTF9ORVhUfX1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgaXNEaXNhYmxlTmV4dCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gIH1cbiAgPC91bD5cbn1cblxuQGlmIChuYXZjb250cm9scyA9PT0gJ0Jhc2ljJykge1xuICAgIEBpZiAoYWxsb3dwYWdlc2l6ZWNoYW5nZSAmJiAgcGFnZVNpemVPcHRpb25zPy5bMF08cm93U3VtbWFyeT8udG90YWxSZWNvcmRzKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtcGVyLXBhZ2VcIj5cbiAgICAgICAgPGxhYmVsIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfSVRFTVNfUEVSX1BBR0VcIiBjbGFzcz1cImFwcC1sYWJlbFwiPnt7YXBwTG9jYWxlLkxBQkVMX0lURU1TX1BFUl9QQUdFIH19IDo8L2xhYmVsPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiBkcm9wZG93biBjb250YWluZXI9XCJib2R5XCIgIChpc09wZW5DaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIDxidXR0b24gaWQ9XCJidXR0b24tYmFzaWNcIiBkcm9wZG93blRvZ2dsZSB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYXBwLWJ1dHRvbiBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZHJvcGRvd24tYmFzaWNcIj5cbiAgICAgICAgICAgICAgICB7e21heFJlc3VsdHN9fSA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8dWwgaWQ9XCJkcm9wZG93bi1iYXNpY1wiICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBhZ2VzaXplLW9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiYnV0dG9uLWJhc2ljXCI+XG4gICAgICAgICAgICAgICAgQGZvciAob3B0aW9uIG9mIHBhZ2VTaXplT3B0aW9uczsgdHJhY2sgb3B0aW9uOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bGkgcm9sZT1cIm1lbnVpdGVtXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogb3B0aW9uID09IG1heFJlc3VsdHMgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKGNsaWNrKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50LCBvcHRpb24pXCIgKGtleWRvd24pPVwib25Ecm9wZG93bktleWRvd24oJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaSA9PT0gZm9jdXNlZEluZGV4ID8gMCA6IC0xXCI+e3tvcHRpb259fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChyb3dTdW1tYXJ5Py50b3RhbFJlY29yZHMpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0tcmFuZ2VcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuPnt7cm93U3VtbWFyeS5zdGFydEluZGV4fX0gLSB7e3Jvd1N1bW1hcnkuZW5kSW5kZXh9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPm9mPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3tyb3dTdW1tYXJ5LnRvdGFsUmVjb3Jkc319PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG4gICAgQGlmICghKGRhdGFTaXplPD1tYXhSZXN1bHRzKSkge1xuICAgICAgPHBhZ2luYXRpb24gY2xhc3M9XCJwYWdpbmF0aW9uIGJhc2ljXCIgW25nQ2xhc3NdPVwibmF2aWdhdGlvbkNsYXNzXCIgcm9sZT1cIm5hdmlnYXRpb25cIlxuICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIm1heFJlc3VsdHNcIiBbdG90YWxJdGVtc109XCJkYXRhU2l6ZVwiXG4gICAgICAgIChwYWdlQ2hhbmdlZCk9XCJwYWdlQ2hhbmdlZCgkZXZlbnQpXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOnRydWV9XCIgW25nTW9kZWxdPVwiZG4uY3VycmVudFBhZ2VcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTaG93aW5nIFBhZ2UgJyArIGRuLmN1cnJlbnRQYWdlICsgJyBvZiAnICsgcGFnZUNvdW50ICsgJyBwYWdlcydcIlxuICAgICAgICBbYm91bmRhcnlMaW5rc109XCJib3VuZGFyeWxpbmtzXCIgW21heFNpemVdPVwibWF4c2l6ZVwiXG4gICAgICAgIFtkaXJlY3Rpb25MaW5rc109XCJkaXJlY3Rpb25saW5rc1wiXG4gICAgICAgIGZpcnN0VGV4dD1cIkZpcnRzdFwiIGxhc3RUZXh0PVwiTGFzdFwiXG4gICAgICAgIFtjdXN0b21QcmV2aW91c1RlbXBsYXRlXT1cInByZXZUZW1wbGF0ZVwiXG4gICAgICAgIFtjdXN0b21OZXh0VGVtcGxhdGVdPVwibmV4dFRlbXBsYXRlXCJcbiAgICAgICAgW2N1c3RvbVBhZ2VUZW1wbGF0ZV09XCJwYWdlVGVtcGxhdGVcIj48L3BhZ2luYXRpb24+XG4gICAgfVxufVxuXG5AaWYgKG5hdmNvbnRyb2xzID09PSAnQmFzaWMnICYmIHNob3dyZWNvcmRjb3VudCkge1xuICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XG4gICAgPGxpIGNsYXNzPVwidG90YWxjb3VudCBkaXNhYmxlZCBiYXNpY2NvdW50XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPnt7YXBwTG9jYWxlLkxBQkVMX1RPVEFMX1JFQ09SRFN9fToge3tkYXRhU2l6ZX19PC9hPlxuICAgIDwvbGk+XG4gIDwvdWw+XG59XG5cbjxuZy10ZW1wbGF0ZSAjcGFnZVRlbXBsYXRlIGxldC1wYWdlPlxuICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzYWNpdHZlcGFnZV09XCJwYWdlLmFjdGl2ZVwiPnt7J1BhZ2UgJ319PC9zcGFuPlxuICB7e3BhZ2UubnVtYmVyfX1cbiAgQGlmIChwYWdlLmFjdGl2ZSkge1xuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPiB7eycsIFNob3dpbmcgcGFnZSAnICsgcGFnZS5udW1iZXIgKyAnIG9mICcgKyBwYWdlQ291bnR9fTwvc3Bhbj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcHJldlRlbXBsYXRlIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gIDxzcGFuIGNsYXNzPVwic3Itb25seVwiIFthdHRyLmRhdGEtaXNkaXNhYmxlZF09XCJkaXNhYmxlZFwiPkdvIHRvIFByZXZpb3VzIHBhZ2Uge3tkaXNhYmxlZCA/ICcsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNuZXh0VGVtcGxhdGUgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgW2F0dHIuZGF0YS1pc2Rpc2FibGVkXT1cImRpc2FibGVkXCI+R28gdG8gTmV4dCBwYWdlIHt7ZGlzYWJsZWQgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==