@angular/cdk 14.0.0-next.10 → 14.0.0-next.13

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 (451) hide show
  1. package/a11y/index.d.ts +1119 -5
  2. package/accordion/index.d.ts +108 -6
  3. package/bidi/index.d.ts +77 -5
  4. package/clipboard/index.d.ts +112 -5
  5. package/coercion/index.d.ts +64 -5
  6. package/collections/index.d.ts +348 -5
  7. package/dialog/index.d.ts +410 -0
  8. package/drag-drop/index.d.ts +1456 -5
  9. package/esm2020/a11y/a11y-module.mjs +5 -5
  10. package/esm2020/a11y/aria-describer/aria-describer.mjs +4 -4
  11. package/esm2020/a11y/focus-monitor/focus-monitor.mjs +7 -7
  12. package/esm2020/a11y/focus-trap/configurable-focus-trap-factory.mjs +4 -4
  13. package/esm2020/a11y/focus-trap/focus-trap-manager.mjs +4 -4
  14. package/esm2020/a11y/focus-trap/focus-trap.mjs +7 -7
  15. package/esm2020/a11y/high-contrast-mode/high-contrast-mode-detector.mjs +4 -4
  16. package/esm2020/a11y/input-modality/input-modality-detector.mjs +4 -4
  17. package/esm2020/a11y/interactivity-checker/interactivity-checker.mjs +4 -4
  18. package/esm2020/a11y/live-announcer/live-announcer.mjs +7 -7
  19. package/esm2020/accordion/accordion-item.mjs +4 -4
  20. package/esm2020/accordion/accordion-module.mjs +5 -5
  21. package/esm2020/accordion/accordion.mjs +4 -4
  22. package/esm2020/bidi/bidi-module.mjs +5 -5
  23. package/esm2020/bidi/dir.mjs +4 -4
  24. package/esm2020/bidi/directionality.mjs +4 -4
  25. package/esm2020/clipboard/clipboard-module.mjs +5 -5
  26. package/esm2020/clipboard/clipboard.mjs +4 -4
  27. package/esm2020/clipboard/copy-to-clipboard.mjs +4 -4
  28. package/esm2020/collections/unique-selection-dispatcher.mjs +4 -4
  29. package/esm2020/dialog/dialog-config.mjs +63 -0
  30. package/esm2020/dialog/dialog-container.mjs +278 -0
  31. package/esm2020/dialog/dialog-injectors.mjs +26 -0
  32. package/esm2020/dialog/dialog-module.mjs +42 -0
  33. package/esm2020/dialog/dialog-ref.mjs +76 -0
  34. package/esm2020/dialog/dialog.mjs +298 -0
  35. package/esm2020/dialog/dialog_public_index.mjs +5 -0
  36. package/esm2020/dialog/index.mjs +9 -0
  37. package/esm2020/dialog/public-api.mjs +14 -0
  38. package/esm2020/drag-drop/directives/drag-handle.mjs +4 -4
  39. package/esm2020/drag-drop/directives/drag-placeholder.mjs +4 -4
  40. package/esm2020/drag-drop/directives/drag-preview.mjs +4 -4
  41. package/esm2020/drag-drop/directives/drag.mjs +11 -4
  42. package/esm2020/drag-drop/directives/drop-list-group.mjs +4 -4
  43. package/esm2020/drag-drop/directives/drop-list.mjs +4 -4
  44. package/esm2020/drag-drop/drag-drop-module.mjs +5 -5
  45. package/esm2020/drag-drop/drag-drop-registry.mjs +4 -4
  46. package/esm2020/drag-drop/drag-drop.mjs +4 -4
  47. package/esm2020/layout/breakpoints-observer.mjs +4 -4
  48. package/esm2020/layout/layout-module.mjs +5 -5
  49. package/esm2020/layout/media-matcher.mjs +4 -4
  50. package/esm2020/menu/context-menu-trigger.mjs +229 -0
  51. package/esm2020/menu/index.mjs +9 -0
  52. package/esm2020/menu/menu-aim.mjs +204 -0
  53. package/esm2020/menu/menu-bar.mjs +159 -0
  54. package/esm2020/menu/menu-base.mjs +203 -0
  55. package/esm2020/menu/menu-errors.mjs +22 -0
  56. package/esm2020/menu/menu-group.mjs +30 -0
  57. package/esm2020/menu/menu-interface.mjs +11 -0
  58. package/esm2020/menu/menu-item-checkbox.mjs +48 -0
  59. package/esm2020/menu/menu-item-radio.mjs +114 -0
  60. package/esm2020/menu/menu-item-selectable.mjs +42 -0
  61. package/esm2020/menu/menu-item.mjs +289 -0
  62. package/esm2020/menu/menu-module.mjs +62 -0
  63. package/esm2020/menu/menu-stack.mjs +156 -0
  64. package/esm2020/menu/menu-trigger-base.mjs +114 -0
  65. package/esm2020/menu/menu-trigger.mjs +304 -0
  66. package/esm2020/menu/menu.mjs +168 -0
  67. package/esm2020/menu/menu_public_index.mjs +5 -0
  68. package/esm2020/menu/pointer-focus-tracker.mjs +51 -0
  69. package/esm2020/menu/public-api.mjs +24 -0
  70. package/esm2020/observers/observe-content.mjs +14 -14
  71. package/esm2020/overlay/dispatchers/base-overlay-dispatcher.mjs +4 -4
  72. package/esm2020/overlay/dispatchers/overlay-keyboard-dispatcher.mjs +4 -4
  73. package/esm2020/overlay/dispatchers/overlay-outside-click-dispatcher.mjs +4 -4
  74. package/esm2020/overlay/fullscreen-overlay-container.mjs +4 -4
  75. package/esm2020/overlay/overlay-container.mjs +4 -4
  76. package/esm2020/overlay/overlay-directives.mjs +7 -7
  77. package/esm2020/overlay/overlay-module.mjs +5 -5
  78. package/esm2020/overlay/overlay-ref.mjs +4 -3
  79. package/esm2020/overlay/overlay.mjs +4 -4
  80. package/esm2020/overlay/position/overlay-position-builder.mjs +4 -4
  81. package/esm2020/overlay/scroll/scroll-strategy-options.mjs +4 -4
  82. package/esm2020/platform/platform-module.mjs +5 -5
  83. package/esm2020/platform/platform.mjs +4 -4
  84. package/esm2020/portal/dom-portal-outlet.mjs +6 -2
  85. package/esm2020/portal/portal-directives.mjs +17 -17
  86. package/esm2020/scrolling/fixed-size-virtual-scroll.mjs +4 -4
  87. package/esm2020/scrolling/scroll-dispatcher.mjs +4 -4
  88. package/esm2020/scrolling/scrollable.mjs +4 -4
  89. package/esm2020/scrolling/scrolling-module.mjs +9 -9
  90. package/esm2020/scrolling/viewport-ruler.mjs +4 -4
  91. package/esm2020/scrolling/virtual-for-of.mjs +4 -4
  92. package/esm2020/scrolling/virtual-scroll-viewport.mjs +4 -4
  93. package/esm2020/stepper/step-header.mjs +4 -4
  94. package/esm2020/stepper/step-label.mjs +4 -4
  95. package/esm2020/stepper/stepper-button.mjs +7 -7
  96. package/esm2020/stepper/stepper-module.mjs +5 -5
  97. package/esm2020/stepper/stepper.mjs +7 -7
  98. package/esm2020/table/cell.mjs +22 -22
  99. package/esm2020/table/coalesced-style-scheduler.mjs +4 -4
  100. package/esm2020/table/row.mjs +28 -28
  101. package/esm2020/table/table-module.mjs +5 -5
  102. package/esm2020/table/table.mjs +20 -20
  103. package/esm2020/table/text-column.mjs +5 -5
  104. package/esm2020/testing/selenium-webdriver/selenium-web-driver-harness-environment.mjs +1 -1
  105. package/esm2020/testing/test-element.mjs +1 -1
  106. package/esm2020/text-field/autofill.mjs +7 -7
  107. package/esm2020/text-field/autosize.mjs +4 -4
  108. package/esm2020/text-field/text-field-module.mjs +5 -5
  109. package/esm2020/tree/nested-node.mjs +4 -4
  110. package/esm2020/tree/node.mjs +4 -4
  111. package/esm2020/tree/outlet.mjs +4 -4
  112. package/esm2020/tree/padding.mjs +4 -4
  113. package/esm2020/tree/toggle.mjs +4 -4
  114. package/esm2020/tree/tree-module.mjs +5 -5
  115. package/esm2020/tree/tree.mjs +7 -7
  116. package/esm2020/version.mjs +1 -1
  117. package/fesm2015/a11y.mjs +40 -40
  118. package/fesm2015/a11y.mjs.map +1 -1
  119. package/fesm2015/accordion.mjs +10 -10
  120. package/fesm2015/accordion.mjs.map +1 -1
  121. package/fesm2015/bidi.mjs +10 -10
  122. package/fesm2015/bidi.mjs.map +1 -1
  123. package/fesm2015/cdk.mjs +1 -1
  124. package/fesm2015/cdk.mjs.map +1 -1
  125. package/fesm2015/clipboard.mjs +10 -10
  126. package/fesm2015/clipboard.mjs.map +1 -1
  127. package/fesm2015/collections.mjs +3 -3
  128. package/fesm2015/collections.mjs.map +1 -1
  129. package/fesm2015/dialog.mjs +780 -0
  130. package/fesm2015/dialog.mjs.map +1 -0
  131. package/fesm2015/drag-drop.mjs +35 -28
  132. package/fesm2015/drag-drop.mjs.map +1 -1
  133. package/fesm2015/layout.mjs +10 -10
  134. package/fesm2015/layout.mjs.map +1 -1
  135. package/fesm2015/menu.mjs +2135 -0
  136. package/fesm2015/menu.mjs.map +1 -0
  137. package/fesm2015/observers.mjs +13 -13
  138. package/fesm2015/observers.mjs.map +1 -1
  139. package/fesm2015/overlay.mjs +37 -36
  140. package/fesm2015/overlay.mjs.map +1 -1
  141. package/fesm2015/platform.mjs +7 -7
  142. package/fesm2015/platform.mjs.map +1 -1
  143. package/fesm2015/portal.mjs +21 -17
  144. package/fesm2015/portal.mjs.map +1 -1
  145. package/fesm2015/scrolling.mjs +26 -26
  146. package/fesm2015/scrolling.mjs.map +1 -1
  147. package/fesm2015/stepper.mjs +22 -22
  148. package/fesm2015/stepper.mjs.map +1 -1
  149. package/fesm2015/table.mjs +78 -78
  150. package/fesm2015/table.mjs.map +1 -1
  151. package/fesm2015/testing/selenium-webdriver.mjs.map +1 -1
  152. package/fesm2015/testing.mjs.map +1 -1
  153. package/fesm2015/text-field.mjs +13 -13
  154. package/fesm2015/text-field.mjs.map +1 -1
  155. package/fesm2015/tree.mjs +25 -25
  156. package/fesm2015/tree.mjs.map +1 -1
  157. package/fesm2020/a11y.mjs +40 -40
  158. package/fesm2020/a11y.mjs.map +1 -1
  159. package/fesm2020/accordion.mjs +10 -10
  160. package/fesm2020/accordion.mjs.map +1 -1
  161. package/fesm2020/bidi.mjs +10 -10
  162. package/fesm2020/bidi.mjs.map +1 -1
  163. package/fesm2020/cdk.mjs +1 -1
  164. package/fesm2020/cdk.mjs.map +1 -1
  165. package/fesm2020/clipboard.mjs +10 -10
  166. package/fesm2020/clipboard.mjs.map +1 -1
  167. package/fesm2020/collections.mjs +3 -3
  168. package/fesm2020/collections.mjs.map +1 -1
  169. package/fesm2020/dialog.mjs +784 -0
  170. package/fesm2020/dialog.mjs.map +1 -0
  171. package/fesm2020/drag-drop.mjs +35 -28
  172. package/fesm2020/drag-drop.mjs.map +1 -1
  173. package/fesm2020/layout.mjs +10 -10
  174. package/fesm2020/layout.mjs.map +1 -1
  175. package/fesm2020/menu.mjs +2108 -0
  176. package/fesm2020/menu.mjs.map +1 -0
  177. package/fesm2020/observers.mjs +13 -13
  178. package/fesm2020/observers.mjs.map +1 -1
  179. package/fesm2020/overlay.mjs +37 -36
  180. package/fesm2020/overlay.mjs.map +1 -1
  181. package/fesm2020/platform.mjs +7 -7
  182. package/fesm2020/platform.mjs.map +1 -1
  183. package/fesm2020/portal.mjs +21 -17
  184. package/fesm2020/portal.mjs.map +1 -1
  185. package/fesm2020/scrolling.mjs +26 -26
  186. package/fesm2020/scrolling.mjs.map +1 -1
  187. package/fesm2020/stepper.mjs +22 -22
  188. package/fesm2020/stepper.mjs.map +1 -1
  189. package/fesm2020/table.mjs +78 -78
  190. package/fesm2020/table.mjs.map +1 -1
  191. package/fesm2020/testing/selenium-webdriver.mjs.map +1 -1
  192. package/fesm2020/testing.mjs.map +1 -1
  193. package/fesm2020/text-field.mjs +13 -13
  194. package/fesm2020/text-field.mjs.map +1 -1
  195. package/fesm2020/tree.mjs +25 -25
  196. package/fesm2020/tree.mjs.map +1 -1
  197. package/index.d.ts +6 -8
  198. package/keycodes/index.d.ts +247 -6
  199. package/layout/index.d.ts +91 -8
  200. package/menu/index.d.ts +992 -0
  201. package/observers/index.d.ts +89 -6
  202. package/overlay/index.d.ts +1202 -5
  203. package/package.json +34 -18
  204. package/platform/index.d.ts +104 -6
  205. package/portal/index.d.ts +325 -5
  206. package/schematics/ng-add/index.js +1 -1
  207. package/schematics/ng-add/index.mjs +1 -1
  208. package/schematics/utils/build-component.js +2 -2
  209. package/schematics/utils/build-component.mjs +2 -2
  210. package/schematics/utils/schematic-options.js +2 -2
  211. package/schematics/utils/schematic-options.mjs +2 -2
  212. package/scrolling/index.d.ts +647 -6
  213. package/stepper/index.d.ts +328 -6
  214. package/table/index.d.ts +1172 -5
  215. package/testing/index.d.ts +726 -5
  216. package/testing/selenium-webdriver/index.d.ts +134 -8
  217. package/testing/testbed/index.d.ts +161 -8
  218. package/text-field/index.d.ts +175 -6
  219. package/tree/index.d.ts +498 -6
  220. package/a11y/a11y-module.d.ts +0 -12
  221. package/a11y/a11y_public_index.d.ts +0 -4
  222. package/a11y/aria-describer/aria-describer.d.ts +0 -101
  223. package/a11y/aria-describer/aria-reference.d.ts +0 -22
  224. package/a11y/fake-event-detection.d.ts +0 -11
  225. package/a11y/focus-monitor/focus-monitor.d.ts +0 -209
  226. package/a11y/focus-trap/configurable-focus-trap-config.d.ts +0 -16
  227. package/a11y/focus-trap/configurable-focus-trap-factory.d.ts +0 -30
  228. package/a11y/focus-trap/configurable-focus-trap.d.ts +0 -33
  229. package/a11y/focus-trap/event-listener-inert-strategy.d.ts +0 -29
  230. package/a11y/focus-trap/focus-trap-inert-strategy.d.ts +0 -21
  231. package/a11y/focus-trap/focus-trap-manager.d.ts +0 -26
  232. package/a11y/focus-trap/focus-trap.d.ts +0 -163
  233. package/a11y/high-contrast-mode/high-contrast-mode-detector.d.ts +0 -48
  234. package/a11y/input-modality/input-modality-detector.d.ts +0 -99
  235. package/a11y/interactivity-checker/interactivity-checker.d.ts +0 -60
  236. package/a11y/key-manager/activedescendant-key-manager.d.ts +0 -35
  237. package/a11y/key-manager/focus-key-manager.d.ts +0 -37
  238. package/a11y/key-manager/list-key-manager.d.ts +0 -152
  239. package/a11y/live-announcer/live-announcer-tokens.d.ts +0 -22
  240. package/a11y/live-announcer/live-announcer.d.ts +0 -85
  241. package/a11y/package.json +0 -9
  242. package/a11y/public-api.d.ts +0 -25
  243. package/accordion/accordion-item.d.ts +0 -59
  244. package/accordion/accordion-module.d.ts +0 -8
  245. package/accordion/accordion.d.ts +0 -40
  246. package/accordion/accordion_public_index.d.ts +0 -4
  247. package/accordion/package.json +0 -9
  248. package/accordion/public-api.d.ts +0 -10
  249. package/bidi/bidi-module.d.ts +0 -7
  250. package/bidi/bidi_public_index.d.ts +0 -4
  251. package/bidi/dir-document-token.d.ts +0 -26
  252. package/bidi/dir.d.ts +0 -36
  253. package/bidi/directionality.d.ts +0 -26
  254. package/bidi/package.json +0 -9
  255. package/bidi/public-api.d.ts +0 -11
  256. package/clipboard/clipboard-module.d.ts +0 -7
  257. package/clipboard/clipboard.d.ts +0 -28
  258. package/clipboard/clipboard_public_index.d.ts +0 -4
  259. package/clipboard/copy-to-clipboard.d.ts +0 -49
  260. package/clipboard/package.json +0 -9
  261. package/clipboard/pending-copy.d.ts +0 -29
  262. package/clipboard/public-api.d.ts +0 -11
  263. package/coercion/array.d.ts +0 -10
  264. package/coercion/boolean-property.d.ts +0 -14
  265. package/coercion/css-pixel-value.d.ts +0 -9
  266. package/coercion/element.d.ts +0 -13
  267. package/coercion/number-property.d.ts +0 -20
  268. package/coercion/package.json +0 -9
  269. package/coercion/public-api.d.ts +0 -13
  270. package/coercion/string-array.d.ts +0 -25
  271. package/collections/array-data-source.d.ts +0 -16
  272. package/collections/collection-viewer.d.ts +0 -24
  273. package/collections/collections_public_index.d.ts +0 -4
  274. package/collections/data-source.d.ts +0 -30
  275. package/collections/dispose-view-repeater-strategy.d.ts +0 -22
  276. package/collections/package.json +0 -9
  277. package/collections/public-api.d.ts +0 -16
  278. package/collections/recycle-view-repeater-strategy.d.ts +0 -54
  279. package/collections/selection-model.d.ts +0 -95
  280. package/collections/tree-adapter.d.ts +0 -26
  281. package/collections/unique-selection-dispatcher.d.ts +0 -36
  282. package/collections/view-repeater.d.ts +0 -92
  283. package/drag-drop/client-rect.d.ts +0 -38
  284. package/drag-drop/clone-node.d.ts +0 -9
  285. package/drag-drop/directives/assertions.d.ts +0 -13
  286. package/drag-drop/directives/config.d.ts +0 -43
  287. package/drag-drop/directives/drag-handle.d.ts +0 -33
  288. package/drag-drop/directives/drag-placeholder.d.ts +0 -27
  289. package/drag-drop/directives/drag-preview.d.ts +0 -32
  290. package/drag-drop/directives/drag.d.ts +0 -160
  291. package/drag-drop/directives/drop-list-group.d.ts +0 -33
  292. package/drag-drop/directives/drop-list.d.ts +0 -123
  293. package/drag-drop/drag-drop-module.d.ts +0 -13
  294. package/drag-drop/drag-drop-registry.d.ts +0 -89
  295. package/drag-drop/drag-drop.d.ts +0 -36
  296. package/drag-drop/drag-drop_public_index.d.ts +0 -4
  297. package/drag-drop/drag-events.d.ts +0 -124
  298. package/drag-drop/drag-parent.d.ts +0 -15
  299. package/drag-drop/drag-ref.d.ts +0 -448
  300. package/drag-drop/drag-styling.d.ts +0 -42
  301. package/drag-drop/drag-utils.d.ts +0 -32
  302. package/drag-drop/drop-list-ref.d.ts +0 -312
  303. package/drag-drop/package.json +0 -9
  304. package/drag-drop/parent-position-tracker.d.ts +0 -39
  305. package/drag-drop/public-api.d.ts +0 -22
  306. package/drag-drop/transition-duration.d.ts +0 -9
  307. package/keycodes/keycodes.d.ts +0 -126
  308. package/keycodes/keycodes_public_index.d.ts +0 -4
  309. package/keycodes/modifiers.d.ts +0 -14
  310. package/keycodes/package.json +0 -9
  311. package/keycodes/public-api.d.ts +0 -9
  312. package/layout/breakpoints-observer.d.ts +0 -45
  313. package/layout/breakpoints.d.ts +0 -23
  314. package/layout/layout-module.d.ts +0 -6
  315. package/layout/layout_public_index.d.ts +0 -4
  316. package/layout/media-matcher.d.ts +0 -18
  317. package/layout/package.json +0 -9
  318. package/layout/public-api.d.ts +0 -11
  319. package/observers/observe-content.d.ts +0 -87
  320. package/observers/observers_public_index.d.ts +0 -4
  321. package/observers/package.json +0 -9
  322. package/observers/public-api.d.ts +0 -8
  323. package/overlay/dispatchers/base-overlay-dispatcher.d.ts +0 -24
  324. package/overlay/dispatchers/index.d.ts +0 -9
  325. package/overlay/dispatchers/overlay-keyboard-dispatcher.d.ts +0 -24
  326. package/overlay/dispatchers/overlay-outside-click-dispatcher.d.ts +0 -32
  327. package/overlay/fullscreen-overlay-container.d.ts +0 -35
  328. package/overlay/overlay-config.d.ts +0 -47
  329. package/overlay/overlay-container.d.ts +0 -25
  330. package/overlay/overlay-directives.d.ts +0 -148
  331. package/overlay/overlay-module.d.ts +0 -10
  332. package/overlay/overlay-ref.d.ts +0 -145
  333. package/overlay/overlay-reference.d.ts +0 -38
  334. package/overlay/overlay.d.ts +0 -76
  335. package/overlay/overlay_public_index.d.ts +0 -4
  336. package/overlay/package.json +0 -9
  337. package/overlay/position/connected-position.d.ts +0 -102
  338. package/overlay/position/flexible-connected-position-strategy.d.ts +0 -282
  339. package/overlay/position/global-position-strategy.d.ts +0 -99
  340. package/overlay/position/overlay-position-builder.d.ts +0 -32
  341. package/overlay/position/position-strategy.d.ts +0 -19
  342. package/overlay/position/scroll-clip.d.ts +0 -26
  343. package/overlay/public-api.d.ts +0 -23
  344. package/overlay/scroll/block-scroll-strategy.d.ts +0 -27
  345. package/overlay/scroll/close-scroll-strategy.d.ts +0 -40
  346. package/overlay/scroll/index.d.ts +0 -14
  347. package/overlay/scroll/noop-scroll-strategy.d.ts +0 -17
  348. package/overlay/scroll/reposition-scroll-strategy.d.ts +0 -39
  349. package/overlay/scroll/scroll-strategy-options.d.ts +0 -44
  350. package/overlay/scroll/scroll-strategy.d.ts +0 -25
  351. package/platform/features/input-types.d.ts +0 -9
  352. package/platform/features/passive-listeners.d.ts +0 -19
  353. package/platform/features/scrolling.d.ts +0 -32
  354. package/platform/features/shadow-dom.d.ts +0 -18
  355. package/platform/features/test-environment.d.ts +0 -9
  356. package/platform/package.json +0 -9
  357. package/platform/platform-module.d.ts +0 -6
  358. package/platform/platform.d.ts +0 -29
  359. package/platform/platform_public_index.d.ts +0 -4
  360. package/platform/public-api.d.ts +0 -14
  361. package/portal/dom-portal-outlet.d.ts +0 -71
  362. package/portal/package.json +0 -9
  363. package/portal/portal-directives.d.ts +0 -99
  364. package/portal/portal-errors.d.ts +0 -37
  365. package/portal/portal-injector.d.ts +0 -21
  366. package/portal/portal.d.ts +0 -140
  367. package/portal/portal_public_index.d.ts +0 -4
  368. package/portal/public-api.d.ts +0 -11
  369. package/public-api.d.ts +0 -8
  370. package/scrolling/fixed-size-virtual-scroll.d.ts +0 -97
  371. package/scrolling/package.json +0 -9
  372. package/scrolling/public-api.d.ts +0 -16
  373. package/scrolling/scroll-dispatcher.d.ts +0 -71
  374. package/scrolling/scrollable.d.ts +0 -85
  375. package/scrolling/scrolling-module.d.ts +0 -19
  376. package/scrolling/scrolling_public_index.d.ts +0 -4
  377. package/scrolling/viewport-ruler.d.ts +0 -63
  378. package/scrolling/virtual-for-of.d.ts +0 -117
  379. package/scrolling/virtual-scroll-repeater.d.ts +0 -16
  380. package/scrolling/virtual-scroll-strategy.d.ts +0 -38
  381. package/scrolling/virtual-scroll-viewport.d.ts +0 -147
  382. package/stepper/package.json +0 -9
  383. package/stepper/public-api.d.ts +0 -12
  384. package/stepper/step-header.d.ts +0 -18
  385. package/stepper/step-label.d.ts +0 -15
  386. package/stepper/stepper-button.d.ts +0 -20
  387. package/stepper/stepper-module.d.ts +0 -11
  388. package/stepper/stepper.d.ts +0 -233
  389. package/stepper/stepper_public_index.d.ts +0 -4
  390. package/table/can-stick.d.ts +0 -34
  391. package/table/cell.d.ts +0 -126
  392. package/table/coalesced-style-scheduler.d.ts +0 -46
  393. package/table/package.json +0 -9
  394. package/table/public-api.d.ts +0 -19
  395. package/table/row.d.ts +0 -175
  396. package/table/sticky-position-listener.d.ts +0 -31
  397. package/table/sticky-styler.d.ts +0 -126
  398. package/table/table-errors.d.ts +0 -48
  399. package/table/table-module.d.ts +0 -11
  400. package/table/table.d.ts +0 -494
  401. package/table/table_public_index.d.ts +0 -4
  402. package/table/text-column.d.ts +0 -73
  403. package/table/tokens.d.ts +0 -25
  404. package/testing/change-detection.d.ts +0 -83
  405. package/testing/component-harness.d.ts +0 -426
  406. package/testing/element-dimensions.d.ts +0 -16
  407. package/testing/harness-environment.d.ts +0 -62
  408. package/testing/package.json +0 -9
  409. package/testing/public-api.d.ts +0 -14
  410. package/testing/selenium-webdriver/package.json +0 -9
  411. package/testing/selenium-webdriver/public-api.d.ts +0 -9
  412. package/testing/selenium-webdriver/selenium-web-driver-element.d.ts +0 -91
  413. package/testing/selenium-webdriver/selenium-web-driver-harness-environment.d.ts +0 -66
  414. package/testing/selenium-webdriver/selenium-webdriver-keys.d.ts +0 -46
  415. package/testing/test-element-errors.d.ts +0 -12
  416. package/testing/test-element.d.ts +0 -135
  417. package/testing/testbed/fake-events/dispatch-events.d.ts +0 -39
  418. package/testing/testbed/fake-events/element-focus.d.ts +0 -18
  419. package/testing/testbed/fake-events/event-objects.d.ts +0 -39
  420. package/testing/testbed/fake-events/index.d.ts +0 -11
  421. package/testing/testbed/fake-events/type-in-element.d.ts +0 -41
  422. package/testing/testbed/package.json +0 -9
  423. package/testing/testbed/proxy-zone-types.d.ts +0 -29
  424. package/testing/testbed/public-api.d.ts +0 -9
  425. package/testing/testbed/task-state-zone-interceptor.d.ts +0 -37
  426. package/testing/testbed/testbed-harness-environment.d.ts +0 -64
  427. package/testing/testbed/unit-test-element.d.ts +0 -98
  428. package/testing/testbed/zone-types.d.ts +0 -22
  429. package/testing/text-filtering.d.ts +0 -13
  430. package/text-field/autofill.d.ts +0 -66
  431. package/text-field/autosize.d.ts +0 -95
  432. package/text-field/package.json +0 -9
  433. package/text-field/public-api.d.ts +0 -10
  434. package/text-field/text-field-module.d.ts +0 -8
  435. package/text-field/text-field_public_index.d.ts +0 -4
  436. package/tree/control/base-tree-control.d.ts +0 -54
  437. package/tree/control/flat-tree-control.d.ts +0 -34
  438. package/tree/control/nested-tree-control.d.ts +0 -31
  439. package/tree/control/tree-control.d.ts +0 -49
  440. package/tree/nested-node.d.ts +0 -38
  441. package/tree/node.d.ts +0 -40
  442. package/tree/outlet.d.ts +0 -26
  443. package/tree/package.json +0 -9
  444. package/tree/padding.d.ts +0 -60
  445. package/tree/public-api.d.ts +0 -19
  446. package/tree/toggle.d.ts +0 -25
  447. package/tree/tree-errors.d.ts +0 -32
  448. package/tree/tree-module.d.ts +0 -12
  449. package/tree/tree.d.ts +0 -128
  450. package/tree/tree_public_index.d.ts +0 -4
  451. package/version.d.ts +0 -10
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { Directive, EventEmitter, Inject, InjectionToken, Injector, ViewContainerRef, } from '@angular/core';
9
+ import { MENU_STACK, MenuStack } from './menu-stack';
10
+ import { TemplatePortal } from '@angular/cdk/portal';
11
+ import { merge, Subject } from 'rxjs';
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "./menu-stack";
14
+ /** Injection token used for an implementation of MenuStack. */
15
+ export const MENU_TRIGGER = new InjectionToken('cdk-menu-trigger');
16
+ /**
17
+ * Abstract directive that implements shared logic common to all menu triggers.
18
+ * This class can be extended to create custom menu trigger types.
19
+ */
20
+ export class CdkMenuTriggerBase {
21
+ constructor(
22
+ /** The DI injector for this component */
23
+ injector,
24
+ /** The view container ref for this component */
25
+ viewContainerRef,
26
+ /** The menu stack this menu is part of. */
27
+ menuStack) {
28
+ this.injector = injector;
29
+ this.viewContainerRef = viewContainerRef;
30
+ this.menuStack = menuStack;
31
+ /** Emits when the attached menu is requested to open */
32
+ this.opened = new EventEmitter();
33
+ /** Emits when the attached menu is requested to close */
34
+ this.closed = new EventEmitter();
35
+ /** A reference to the overlay which manages the triggered menu */
36
+ this.overlayRef = null;
37
+ /** Emits when this trigger is destroyed. */
38
+ this.destroyed = new Subject();
39
+ /** Emits when the outside pointer events listener on the overlay should be stopped. */
40
+ this.stopOutsideClicksListener = merge(this.closed, this.destroyed);
41
+ }
42
+ ngOnDestroy() {
43
+ this._destroyOverlay();
44
+ this.destroyed.next();
45
+ this.destroyed.complete();
46
+ }
47
+ /** Whether the attached menu is open. */
48
+ isOpen() {
49
+ return !!this.overlayRef?.hasAttached();
50
+ }
51
+ /** Registers a child menu as having been opened by this trigger. */
52
+ registerChildMenu(child) {
53
+ this.childMenu = child;
54
+ }
55
+ /**
56
+ * Get the portal to be attached to the overlay which contains the menu. Allows for the menu
57
+ * content to change dynamically and be reflected in the application.
58
+ */
59
+ getMenuContentPortal() {
60
+ const hasMenuContentChanged = this.menuTemplateRef !== this._menuPortal?.templateRef;
61
+ if (this.menuTemplateRef && (!this._menuPortal || hasMenuContentChanged)) {
62
+ this._menuPortal = new TemplatePortal(this.menuTemplateRef, this.viewContainerRef, undefined, this._getChildMenuInjector());
63
+ }
64
+ return this._menuPortal;
65
+ }
66
+ /**
67
+ * Whether the given element is inside the scope of this trigger's menu stack.
68
+ * @param element The element to check.
69
+ * @return Whether the element is inside the scope of this trigger's menu stack.
70
+ */
71
+ isElementInsideMenuStack(element) {
72
+ for (let el = element; el; el = el?.parentElement ?? null) {
73
+ if (el.getAttribute('data-cdk-menu-stack-id') === this.menuStack.id) {
74
+ return true;
75
+ }
76
+ }
77
+ return false;
78
+ }
79
+ /** Destroy and unset the overlay reference it if exists */
80
+ _destroyOverlay() {
81
+ if (this.overlayRef) {
82
+ this.overlayRef.dispose();
83
+ this.overlayRef = null;
84
+ }
85
+ }
86
+ /** Gets the injector to use when creating a child menu. */
87
+ _getChildMenuInjector() {
88
+ this._childMenuInjector =
89
+ this._childMenuInjector ||
90
+ Injector.create({
91
+ providers: [
92
+ { provide: MENU_TRIGGER, useValue: this },
93
+ { provide: MENU_STACK, useValue: this.menuStack },
94
+ ],
95
+ parent: this.injector,
96
+ });
97
+ return this._childMenuInjector;
98
+ }
99
+ }
100
+ CdkMenuTriggerBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-next.15", ngImport: i0, type: CdkMenuTriggerBase, deps: [{ token: i0.Injector }, { token: i0.ViewContainerRef }, { token: MENU_STACK }], target: i0.ɵɵFactoryTarget.Directive });
101
+ CdkMenuTriggerBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "14.0.0-next.15", type: CdkMenuTriggerBase, host: { properties: { "attr.aria-controls": "childMenu?.id", "attr.data-cdk-menu-stack-id": "menuStack.id" } }, ngImport: i0 });
102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-next.15", ngImport: i0, type: CdkMenuTriggerBase, decorators: [{
103
+ type: Directive,
104
+ args: [{
105
+ host: {
106
+ '[attr.aria-controls]': 'childMenu?.id',
107
+ '[attr.data-cdk-menu-stack-id]': 'menuStack.id',
108
+ },
109
+ }]
110
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ViewContainerRef }, { type: i1.MenuStack, decorators: [{
111
+ type: Inject,
112
+ args: [MENU_STACK]
113
+ }] }]; } });
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10cmlnZ2VyLWJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2RrL21lbnUvbWVudS10cmlnZ2VyLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFDZCxRQUFRLEVBR1IsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRW5ELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQzs7O0FBRXBDLCtEQUErRDtBQUMvRCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxjQUFjLENBQXFCLGtCQUFrQixDQUFDLENBQUM7QUFFdkY7OztHQUdHO0FBT0gsTUFBTSxPQUFnQixrQkFBa0I7SUErQnRDO0lBQ0UseUNBQXlDO0lBQ3RCLFFBQWtCO0lBQ3JDLGdEQUFnRDtJQUM3QixnQkFBa0M7SUFDckQsMkNBQTJDO0lBQ0osU0FBb0I7UUFKeEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUVsQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBRWQsY0FBUyxHQUFULFNBQVMsQ0FBVztRQWpDN0Qsd0RBQXdEO1FBQy9DLFdBQU0sR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV6RCx5REFBeUQ7UUFDaEQsV0FBTSxHQUF1QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBS3pELGtFQUFrRTtRQUN4RCxlQUFVLEdBQXNCLElBQUksQ0FBQztRQUUvQyw0Q0FBNEM7UUFDekIsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRTVELHVGQUF1RjtRQUNwRSw4QkFBeUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFrQi9FLENBQUM7SUFFSixXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQseUNBQXlDO0lBQ3pDLE1BQU07UUFDSixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsaUJBQWlCLENBQUMsS0FBVztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sb0JBQW9CO1FBQzVCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQztRQUNyRixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUkscUJBQXFCLENBQUMsRUFBRTtZQUN4RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksY0FBYyxDQUNuQyxJQUFJLENBQUMsZUFBZSxFQUNwQixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLFNBQVMsRUFDVCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FDN0IsQ0FBQztTQUNIO1FBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ08sd0JBQXdCLENBQUMsT0FBZ0I7UUFDakQsS0FBSyxJQUFJLEVBQUUsR0FBbUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLGFBQWEsSUFBSSxJQUFJLEVBQUU7WUFDekUsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ25FLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELDJEQUEyRDtJQUNuRCxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELDJEQUEyRDtJQUNuRCxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQjtZQUNyQixJQUFJLENBQUMsa0JBQWtCO2dCQUN2QixRQUFRLENBQUMsTUFBTSxDQUFDO29CQUNkLFNBQVMsRUFBRTt3QkFDVCxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBQzt3QkFDdkMsRUFBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFDO3FCQUNoRDtvQkFDRCxNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVE7aUJBQ3RCLENBQUMsQ0FBQztRQUNMLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7O3VIQTdHbUIsa0JBQWtCLDBFQXFDNUIsVUFBVTsyR0FyQ0Esa0JBQWtCO21HQUFsQixrQkFBa0I7a0JBTnZDLFNBQVM7bUJBQUM7b0JBQ1QsSUFBSSxFQUFFO3dCQUNKLHNCQUFzQixFQUFFLGVBQWU7d0JBQ3ZDLCtCQUErQixFQUFFLGNBQWM7cUJBQ2hEO2lCQUNGOzswQkFzQ0ksTUFBTTsyQkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgT25EZXN0cm95LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01lbnV9IGZyb20gJy4vbWVudS1pbnRlcmZhY2UnO1xuaW1wb3J0IHtNRU5VX1NUQUNLLCBNZW51U3RhY2t9IGZyb20gJy4vbWVudS1zdGFjayc7XG5pbXBvcnQge0Nvbm5lY3RlZFBvc2l0aW9uLCBPdmVybGF5UmVmfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1RlbXBsYXRlUG9ydGFsfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7bWVyZ2UsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG4vKiogSW5qZWN0aW9uIHRva2VuIHVzZWQgZm9yIGFuIGltcGxlbWVudGF0aW9uIG9mIE1lbnVTdGFjay4gKi9cbmV4cG9ydCBjb25zdCBNRU5VX1RSSUdHRVIgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q2RrTWVudVRyaWdnZXJCYXNlPignY2RrLW1lbnUtdHJpZ2dlcicpO1xuXG4vKipcbiAqIEFic3RyYWN0IGRpcmVjdGl2ZSB0aGF0IGltcGxlbWVudHMgc2hhcmVkIGxvZ2ljIGNvbW1vbiB0byBhbGwgbWVudSB0cmlnZ2Vycy5cbiAqIFRoaXMgY2xhc3MgY2FuIGJlIGV4dGVuZGVkIHRvIGNyZWF0ZSBjdXN0b20gbWVudSB0cmlnZ2VyIHR5cGVzLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgaG9zdDoge1xuICAgICdbYXR0ci5hcmlhLWNvbnRyb2xzXSc6ICdjaGlsZE1lbnU/LmlkJyxcbiAgICAnW2F0dHIuZGF0YS1jZGstbWVudS1zdGFjay1pZF0nOiAnbWVudVN0YWNrLmlkJyxcbiAgfSxcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2RrTWVudVRyaWdnZXJCYXNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqIEEgbGlzdCBvZiBwcmVmZXJyZWQgbWVudSBwb3NpdGlvbnMgdG8gYmUgdXNlZCB3aGVuIGNvbnN0cnVjdGluZyB0aGUgYEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneWAgZm9yIHRoaXMgdHJpZ2dlcidzIG1lbnUuICovXG4gIG1lbnVQb3NpdGlvbjogQ29ubmVjdGVkUG9zaXRpb25bXTtcblxuICAvKiogRW1pdHMgd2hlbiB0aGUgYXR0YWNoZWQgbWVudSBpcyByZXF1ZXN0ZWQgdG8gb3BlbiAqL1xuICByZWFkb25seSBvcGVuZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKiogRW1pdHMgd2hlbiB0aGUgYXR0YWNoZWQgbWVudSBpcyByZXF1ZXN0ZWQgdG8gY2xvc2UgKi9cbiAgcmVhZG9ubHkgY2xvc2VkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqIFRlbXBsYXRlIHJlZmVyZW5jZSB2YXJpYWJsZSB0byB0aGUgbWVudSB0aGlzIHRyaWdnZXIgb3BlbnMgKi9cbiAgbWVudVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcblxuICAvKiogQSByZWZlcmVuY2UgdG8gdGhlIG92ZXJsYXkgd2hpY2ggbWFuYWdlcyB0aGUgdHJpZ2dlcmVkIG1lbnUgKi9cbiAgcHJvdGVjdGVkIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCBudWxsID0gbnVsbDtcblxuICAvKiogRW1pdHMgd2hlbiB0aGlzIHRyaWdnZXIgaXMgZGVzdHJveWVkLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveWVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICAvKiogRW1pdHMgd2hlbiB0aGUgb3V0c2lkZSBwb2ludGVyIGV2ZW50cyBsaXN0ZW5lciBvbiB0aGUgb3ZlcmxheSBzaG91bGQgYmUgc3RvcHBlZC4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0b3BPdXRzaWRlQ2xpY2tzTGlzdGVuZXIgPSBtZXJnZSh0aGlzLmNsb3NlZCwgdGhpcy5kZXN0cm95ZWQpO1xuXG4gIC8qKiBUaGUgY2hpbGQgbWVudSBvcGVuZWQgYnkgdGhpcyB0cmlnZ2VyLiAqL1xuICBwcm90ZWN0ZWQgY2hpbGRNZW51PzogTWVudTtcblxuICAvKiogVGhlIGNvbnRlbnQgb2YgdGhlIG1lbnUgcGFuZWwgb3BlbmVkIGJ5IHRoaXMgdHJpZ2dlci4gKi9cbiAgcHJpdmF0ZSBfbWVudVBvcnRhbDogVGVtcGxhdGVQb3J0YWw7XG5cbiAgLyoqIFRoZSBpbmplY3RvciB0byB1c2UgZm9yIHRoZSBjaGlsZCBtZW51IG9wZW5lZCBieSB0aGlzIHRyaWdnZXIuICovXG4gIHByaXZhdGUgX2NoaWxkTWVudUluamVjdG9yPzogSW5qZWN0b3I7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBUaGUgREkgaW5qZWN0b3IgZm9yIHRoaXMgY29tcG9uZW50ICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICAvKiogVGhlIHZpZXcgY29udGFpbmVyIHJlZiBmb3IgdGhpcyBjb21wb25lbnQgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAvKiogVGhlIG1lbnUgc3RhY2sgdGhpcyBtZW51IGlzIHBhcnQgb2YuICovXG4gICAgQEluamVjdChNRU5VX1NUQUNLKSBwcm90ZWN0ZWQgcmVhZG9ubHkgbWVudVN0YWNrOiBNZW51U3RhY2ssXG4gICkge31cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95T3ZlcmxheSgpO1xuXG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgYXR0YWNoZWQgbWVudSBpcyBvcGVuLiAqL1xuICBpc09wZW4oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5vdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVycyBhIGNoaWxkIG1lbnUgYXMgaGF2aW5nIGJlZW4gb3BlbmVkIGJ5IHRoaXMgdHJpZ2dlci4gKi9cbiAgcmVnaXN0ZXJDaGlsZE1lbnUoY2hpbGQ6IE1lbnUpIHtcbiAgICB0aGlzLmNoaWxkTWVudSA9IGNoaWxkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcG9ydGFsIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBvdmVybGF5IHdoaWNoIGNvbnRhaW5zIHRoZSBtZW51LiBBbGxvd3MgZm9yIHRoZSBtZW51XG4gICAqIGNvbnRlbnQgdG8gY2hhbmdlIGR5bmFtaWNhbGx5IGFuZCBiZSByZWZsZWN0ZWQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldE1lbnVDb250ZW50UG9ydGFsKCkge1xuICAgIGNvbnN0IGhhc01lbnVDb250ZW50Q2hhbmdlZCA9IHRoaXMubWVudVRlbXBsYXRlUmVmICE9PSB0aGlzLl9tZW51UG9ydGFsPy50ZW1wbGF0ZVJlZjtcbiAgICBpZiAodGhpcy5tZW51VGVtcGxhdGVSZWYgJiYgKCF0aGlzLl9tZW51UG9ydGFsIHx8IGhhc01lbnVDb250ZW50Q2hhbmdlZCkpIHtcbiAgICAgIHRoaXMuX21lbnVQb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwoXG4gICAgICAgIHRoaXMubWVudVRlbXBsYXRlUmVmLFxuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdGhpcy5fZ2V0Q2hpbGRNZW51SW5qZWN0b3IoKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21lbnVQb3J0YWw7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBpbnNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgdHJpZ2dlcidzIG1lbnUgc3RhY2suXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJuIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgaW5zaWRlIHRoZSBzY29wZSBvZiB0aGlzIHRyaWdnZXIncyBtZW51IHN0YWNrLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzRWxlbWVudEluc2lkZU1lbnVTdGFjayhlbGVtZW50OiBFbGVtZW50KSB7XG4gICAgZm9yIChsZXQgZWw6IEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDsgZWw7IGVsID0gZWw/LnBhcmVudEVsZW1lbnQgPz8gbnVsbCkge1xuICAgICAgaWYgKGVsLmdldEF0dHJpYnV0ZSgnZGF0YS1jZGstbWVudS1zdGFjay1pZCcpID09PSB0aGlzLm1lbnVTdGFjay5pZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqIERlc3Ryb3kgYW5kIHVuc2V0IHRoZSBvdmVybGF5IHJlZmVyZW5jZSBpdCBpZiBleGlzdHMgKi9cbiAgcHJpdmF0ZSBfZGVzdHJveU92ZXJsYXkoKSB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldHMgdGhlIGluamVjdG9yIHRvIHVzZSB3aGVuIGNyZWF0aW5nIGEgY2hpbGQgbWVudS4gKi9cbiAgcHJpdmF0ZSBfZ2V0Q2hpbGRNZW51SW5qZWN0b3IoKSB7XG4gICAgdGhpcy5fY2hpbGRNZW51SW5qZWN0b3IgPVxuICAgICAgdGhpcy5fY2hpbGRNZW51SW5qZWN0b3IgfHxcbiAgICAgIEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgIHtwcm92aWRlOiBNRU5VX1RSSUdHRVIsIHVzZVZhbHVlOiB0aGlzfSxcbiAgICAgICAgICB7cHJvdmlkZTogTUVOVV9TVEFDSywgdXNlVmFsdWU6IHRoaXMubWVudVN0YWNrfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkTWVudUluamVjdG9yO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,304 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google LLC All Rights Reserved.
4
+ *
5
+ * Use of this source code is governed by an MIT-style license that can be
6
+ * found in the LICENSE file at https://angular.io/license
7
+ */
8
+ import { Directive, ElementRef, Inject, Injector, NgZone, Optional, ViewContainerRef, } from '@angular/core';
9
+ import { Directionality } from '@angular/cdk/bidi';
10
+ import { Overlay, OverlayConfig, STANDARD_DROPDOWN_ADJACENT_POSITIONS, STANDARD_DROPDOWN_BELOW_POSITIONS, } from '@angular/cdk/overlay';
11
+ import { DOWN_ARROW, ENTER, hasModifierKey, LEFT_ARROW, RIGHT_ARROW, SPACE, UP_ARROW, } from '@angular/cdk/keycodes';
12
+ import { fromEvent } from 'rxjs';
13
+ import { filter, takeUntil } from 'rxjs/operators';
14
+ import { CDK_MENU } from './menu-interface';
15
+ import { MENU_STACK, MenuStack, PARENT_OR_NEW_MENU_STACK_PROVIDER } from './menu-stack';
16
+ import { MENU_AIM } from './menu-aim';
17
+ import { CdkMenuTriggerBase, MENU_TRIGGER } from './menu-trigger-base';
18
+ import * as i0 from "@angular/core";
19
+ import * as i1 from "@angular/cdk/overlay";
20
+ import * as i2 from "@angular/cdk/bidi";
21
+ import * as i3 from "./menu-stack";
22
+ /**
23
+ * A directive that turns its host element into a trigger for a popup menu.
24
+ * It can be combined with cdkMenuItem to create sub-menus. If the element is in a top level
25
+ * MenuBar it will open the menu on click, or if a sibling is already opened it will open on hover.
26
+ * If it is inside of a Menu it will open the attached Submenu on hover regardless of its sibling
27
+ * state.
28
+ */
29
+ export class CdkMenuTrigger extends CdkMenuTriggerBase {
30
+ constructor(
31
+ /** The DI injector for this component. */
32
+ injector,
33
+ /** The host element. */
34
+ _elementRef,
35
+ /** The view container ref for this component. */
36
+ viewContainerRef,
37
+ /** The CDK overlay service. */
38
+ _overlay,
39
+ /** The Angular zone. */
40
+ _ngZone,
41
+ /** The menu stack this trigger belongs to. */
42
+ menuStack,
43
+ /** The parent menu this trigger belongs to. */
44
+ _parentMenu,
45
+ /** The menu aim service used by this menu. */
46
+ _menuAim,
47
+ /** The directionality of the page. */
48
+ _directionality) {
49
+ super(injector, viewContainerRef, menuStack);
50
+ this._elementRef = _elementRef;
51
+ this._overlay = _overlay;
52
+ this._ngZone = _ngZone;
53
+ this._parentMenu = _parentMenu;
54
+ this._menuAim = _menuAim;
55
+ this._directionality = _directionality;
56
+ this._registerCloseHandler();
57
+ this._subscribeToMenuStackClosed();
58
+ this._subscribeToMouseEnter();
59
+ this._subscribeToMenuStackHasFocus();
60
+ }
61
+ /** Toggle the attached menu. */
62
+ toggle() {
63
+ this.isOpen() ? this.close() : this.open();
64
+ }
65
+ /** Open the attached menu. */
66
+ open() {
67
+ if (!this.isOpen()) {
68
+ this.opened.next();
69
+ this.overlayRef = this.overlayRef || this._overlay.create(this._getOverlayConfig());
70
+ this.overlayRef.attach(this.getMenuContentPortal());
71
+ this._subscribeToOutsideClicks();
72
+ }
73
+ }
74
+ /** Close the opened menu. */
75
+ close() {
76
+ if (this.isOpen()) {
77
+ this.closed.next();
78
+ this.overlayRef.detach();
79
+ }
80
+ this._closeSiblingTriggers();
81
+ }
82
+ /**
83
+ * Get a reference to the rendered Menu if the Menu is open and rendered in the DOM.
84
+ */
85
+ getMenu() {
86
+ return this.childMenu;
87
+ }
88
+ /**
89
+ * Handles keyboard events for the menu item.
90
+ * @param event The keyboard event to handle
91
+ */
92
+ _toggleOnKeydown(event) {
93
+ const isParentVertical = this._parentMenu?.orientation === 'vertical';
94
+ const keyCode = event.keyCode;
95
+ switch (keyCode) {
96
+ case SPACE:
97
+ case ENTER:
98
+ if (!hasModifierKey(event)) {
99
+ event.preventDefault();
100
+ this.toggle();
101
+ this.childMenu?.focusFirstItem('keyboard');
102
+ }
103
+ break;
104
+ case RIGHT_ARROW:
105
+ if (!hasModifierKey(event)) {
106
+ if (this._parentMenu && isParentVertical && this._directionality?.value !== 'rtl') {
107
+ event.preventDefault();
108
+ this.open();
109
+ this.childMenu?.focusFirstItem('keyboard');
110
+ }
111
+ }
112
+ break;
113
+ case LEFT_ARROW:
114
+ if (!hasModifierKey(event)) {
115
+ if (this._parentMenu && isParentVertical && this._directionality?.value === 'rtl') {
116
+ event.preventDefault();
117
+ this.open();
118
+ this.childMenu?.focusFirstItem('keyboard');
119
+ }
120
+ }
121
+ break;
122
+ case DOWN_ARROW:
123
+ case UP_ARROW:
124
+ if (!hasModifierKey(event)) {
125
+ if (!isParentVertical) {
126
+ event.preventDefault();
127
+ this.open();
128
+ keyCode === DOWN_ARROW
129
+ ? this.childMenu?.focusFirstItem('keyboard')
130
+ : this.childMenu?.focusLastItem('keyboard');
131
+ }
132
+ }
133
+ break;
134
+ }
135
+ }
136
+ /**
137
+ * Sets whether the trigger's menu stack has focus.
138
+ * @param hasFocus Whether the menu stack has focus.
139
+ */
140
+ _setHasFocus(hasFocus) {
141
+ if (!this._parentMenu) {
142
+ this.menuStack.setHasFocus(hasFocus);
143
+ }
144
+ }
145
+ /**
146
+ * Subscribe to the mouseenter events and close any sibling menu items if this element is moused
147
+ * into.
148
+ */
149
+ _subscribeToMouseEnter() {
150
+ // Closes any sibling menu items and opens the menu associated with this trigger.
151
+ const toggleMenus = () => this._ngZone.run(() => {
152
+ this._closeSiblingTriggers();
153
+ this.open();
154
+ });
155
+ this._ngZone.runOutsideAngular(() => {
156
+ fromEvent(this._elementRef.nativeElement, 'mouseenter')
157
+ .pipe(filter(() => !this.menuStack.isEmpty() && !this.isOpen()), takeUntil(this.destroyed))
158
+ .subscribe(() => {
159
+ if (this._menuAim) {
160
+ this._menuAim.toggle(toggleMenus);
161
+ }
162
+ else {
163
+ toggleMenus();
164
+ }
165
+ });
166
+ });
167
+ }
168
+ /** Close out any sibling menu trigger menus. */
169
+ _closeSiblingTriggers() {
170
+ if (this._parentMenu) {
171
+ // If nothing was removed from the stack and the last element is not the parent item
172
+ // that means that the parent menu is a menu bar since we don't put the menu bar on the
173
+ // stack
174
+ const isParentMenuBar = !this.menuStack.closeSubMenuOf(this._parentMenu) &&
175
+ this.menuStack.peek() !== this._parentMenu;
176
+ if (isParentMenuBar) {
177
+ this.menuStack.closeAll();
178
+ }
179
+ }
180
+ else {
181
+ this.menuStack.closeAll();
182
+ }
183
+ }
184
+ /** Get the configuration object used to create the overlay. */
185
+ _getOverlayConfig() {
186
+ return new OverlayConfig({
187
+ positionStrategy: this._getOverlayPositionStrategy(),
188
+ scrollStrategy: this._overlay.scrollStrategies.reposition(),
189
+ direction: this._directionality,
190
+ });
191
+ }
192
+ /** Build the position strategy for the overlay which specifies where to place the menu. */
193
+ _getOverlayPositionStrategy() {
194
+ return this._overlay
195
+ .position()
196
+ .flexibleConnectedTo(this._elementRef)
197
+ .withLockedPosition()
198
+ .withGrowAfterOpen()
199
+ .withPositions(this._getOverlayPositions());
200
+ }
201
+ /** Get the preferred positions for the opened menu relative to the menu item. */
202
+ _getOverlayPositions() {
203
+ return (this.menuPosition ??
204
+ (!this._parentMenu || this._parentMenu.orientation === 'horizontal'
205
+ ? STANDARD_DROPDOWN_BELOW_POSITIONS
206
+ : STANDARD_DROPDOWN_ADJACENT_POSITIONS));
207
+ }
208
+ /**
209
+ * Subscribe to the MenuStack close events if this is a standalone trigger and close out the menu
210
+ * this triggers when requested.
211
+ */
212
+ _registerCloseHandler() {
213
+ if (!this._parentMenu) {
214
+ this.menuStack.closed.pipe(takeUntil(this.destroyed)).subscribe(({ item }) => {
215
+ if (item === this.childMenu) {
216
+ this.close();
217
+ }
218
+ });
219
+ }
220
+ }
221
+ /**
222
+ * Subscribe to the overlays outside pointer events stream and handle closing out the stack if a
223
+ * click occurs outside the menus.
224
+ */
225
+ _subscribeToOutsideClicks() {
226
+ if (this.overlayRef) {
227
+ this.overlayRef
228
+ .outsidePointerEvents()
229
+ .pipe(filter(e => e.target != this._elementRef.nativeElement &&
230
+ !this._elementRef.nativeElement.contains(e.target)), takeUntil(this.stopOutsideClicksListener))
231
+ .subscribe(event => {
232
+ if (!this.isElementInsideMenuStack(event.target)) {
233
+ this.menuStack.closeAll();
234
+ }
235
+ else {
236
+ this._closeSiblingTriggers();
237
+ }
238
+ });
239
+ }
240
+ }
241
+ /** Subscribe to the MenuStack hasFocus events. */
242
+ _subscribeToMenuStackHasFocus() {
243
+ if (!this._parentMenu) {
244
+ this.menuStack.hasFocus.pipe(takeUntil(this.destroyed)).subscribe(hasFocus => {
245
+ if (!hasFocus) {
246
+ this.menuStack.closeAll();
247
+ }
248
+ });
249
+ }
250
+ }
251
+ /** Subscribe to the MenuStack closed events. */
252
+ _subscribeToMenuStackClosed() {
253
+ if (!this._parentMenu) {
254
+ this.menuStack.closed.subscribe(({ focusParentTrigger }) => {
255
+ if (focusParentTrigger && !this.menuStack.length()) {
256
+ this._elementRef.nativeElement.focus();
257
+ }
258
+ });
259
+ }
260
+ }
261
+ }
262
+ CdkMenuTrigger.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0-next.15", ngImport: i0, type: CdkMenuTrigger, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i1.Overlay }, { token: i0.NgZone }, { token: MENU_STACK }, { token: CDK_MENU, optional: true }, { token: MENU_AIM, optional: true }, { token: i2.Directionality, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
263
+ CdkMenuTrigger.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "14.0.0-next.15", type: CdkMenuTrigger, selector: "[cdkMenuTriggerFor]", inputs: { menuTemplateRef: ["cdkMenuTriggerFor", "menuTemplateRef"], menuPosition: ["cdkMenuPosition", "menuPosition"] }, outputs: { opened: "cdkMenuOpened", closed: "cdkMenuClosed" }, host: { attributes: { "aria-haspopup": "menu" }, listeners: { "focusin": "_setHasFocus(true)", "focusout": "_setHasFocus(false)", "keydown": "_toggleOnKeydown($event)", "click": "toggle()" }, properties: { "attr.aria-expanded": "isOpen()" }, classAttribute: "cdk-menu-trigger" }, providers: [
264
+ { provide: MENU_TRIGGER, useExisting: CdkMenuTrigger },
265
+ PARENT_OR_NEW_MENU_STACK_PROVIDER,
266
+ ], exportAs: ["cdkMenuTriggerFor"], usesInheritance: true, ngImport: i0 });
267
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0-next.15", ngImport: i0, type: CdkMenuTrigger, decorators: [{
268
+ type: Directive,
269
+ args: [{
270
+ selector: '[cdkMenuTriggerFor]',
271
+ exportAs: 'cdkMenuTriggerFor',
272
+ host: {
273
+ 'class': 'cdk-menu-trigger',
274
+ 'aria-haspopup': 'menu',
275
+ '[attr.aria-expanded]': 'isOpen()',
276
+ '(focusin)': '_setHasFocus(true)',
277
+ '(focusout)': '_setHasFocus(false)',
278
+ '(keydown)': '_toggleOnKeydown($event)',
279
+ '(click)': 'toggle()',
280
+ },
281
+ inputs: ['menuTemplateRef: cdkMenuTriggerFor', 'menuPosition: cdkMenuPosition'],
282
+ outputs: ['opened: cdkMenuOpened', 'closed: cdkMenuClosed'],
283
+ providers: [
284
+ { provide: MENU_TRIGGER, useExisting: CdkMenuTrigger },
285
+ PARENT_OR_NEW_MENU_STACK_PROVIDER,
286
+ ],
287
+ }]
288
+ }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i1.Overlay }, { type: i0.NgZone }, { type: i3.MenuStack, decorators: [{
289
+ type: Inject,
290
+ args: [MENU_STACK]
291
+ }] }, { type: undefined, decorators: [{
292
+ type: Optional
293
+ }, {
294
+ type: Inject,
295
+ args: [CDK_MENU]
296
+ }] }, { type: undefined, decorators: [{
297
+ type: Optional
298
+ }, {
299
+ type: Inject,
300
+ args: [MENU_AIM]
301
+ }] }, { type: i2.Directionality, decorators: [{
302
+ type: Optional
303
+ }] }]; } });
304
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS10cmlnZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2Nkay9tZW51L21lbnUtdHJpZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixNQUFNLEVBQ04sUUFBUSxFQUNSLE1BQU0sRUFFTixRQUFRLEVBQ1IsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBR0wsT0FBTyxFQUNQLGFBQWEsRUFDYixvQ0FBb0MsRUFDcEMsaUNBQWlDLEdBQ2xDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLFVBQVUsRUFDVixLQUFLLEVBQ0wsY0FBYyxFQUNkLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLFFBQVEsR0FDVCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRCxPQUFPLEVBQUMsUUFBUSxFQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsaUNBQWlDLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdEYsT0FBTyxFQUFDLFFBQVEsRUFBVSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFDLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBRXJFOzs7Ozs7R0FNRztBQW9CSCxNQUFNLE9BQU8sY0FBZSxTQUFRLGtCQUFrQjtJQUNwRDtJQUNFLDBDQUEwQztJQUMxQyxRQUFrQjtJQUNsQix3QkFBd0I7SUFDUCxXQUFvQztJQUNyRCxpREFBaUQ7SUFDakQsZ0JBQWtDO0lBQ2xDLCtCQUErQjtJQUNkLFFBQWlCO0lBQ2xDLHdCQUF3QjtJQUNQLE9BQWU7SUFDaEMsOENBQThDO0lBQzFCLFNBQW9CO0lBQ3hDLCtDQUErQztJQUNBLFdBQWtCO0lBQ2pFLDhDQUE4QztJQUNDLFFBQWtCO0lBQ2pFLHNDQUFzQztJQUNULGVBQWdDO1FBRTdELEtBQUssQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFoQjVCLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQUlwQyxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBRWpCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFJZSxnQkFBVyxHQUFYLFdBQVcsQ0FBTztRQUVsQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRXBDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUc3RCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLE1BQU07UUFDSixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsSUFBSTtRQUNGLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVuQixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELDZCQUE2QjtJQUM3QixLQUFLO1FBQ0gsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVuQixJQUFJLENBQUMsVUFBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsZ0JBQWdCLENBQUMsS0FBb0I7UUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLFdBQVcsS0FBSyxVQUFVLENBQUM7UUFDdEUsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUM5QixRQUFRLE9BQU8sRUFBRTtZQUNmLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxLQUFLO2dCQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQzFCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNkLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUM1QztnQkFDRCxNQUFNO1lBRVIsS0FBSyxXQUFXO2dCQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssS0FBSyxLQUFLLEVBQUU7d0JBQ2pGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUM1QztpQkFDRjtnQkFDRCxNQUFNO1lBRVIsS0FBSyxVQUFVO2dCQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssS0FBSyxLQUFLLEVBQUU7d0JBQ2pGLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3QkFDdkIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO3dCQUNaLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUM1QztpQkFDRjtnQkFDRCxNQUFNO1lBRVIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxRQUFRO2dCQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTt3QkFDckIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7d0JBQ1osT0FBTyxLQUFLLFVBQVU7NEJBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUM7NEJBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDL0M7aUJBQ0Y7Z0JBQ0QsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxRQUFpQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0QztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxzQkFBc0I7UUFDNUIsaUZBQWlGO1FBQ2pGLE1BQU0sV0FBVyxHQUFHLEdBQUcsRUFBRSxDQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNsQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDO2lCQUNwRCxJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUN6RCxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjtpQkFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ25DO3FCQUFNO29CQUNMLFdBQVcsRUFBRSxDQUFDO2lCQUNmO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxnREFBZ0Q7SUFDeEMscUJBQXFCO1FBQzNCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixvRkFBb0Y7WUFDcEYsdUZBQXVGO1lBQ3ZGLFFBQVE7WUFDUixNQUFNLGVBQWUsR0FDbkIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUNoRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUM7WUFFN0MsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDM0I7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRCwrREFBK0Q7SUFDdkQsaUJBQWlCO1FBQ3ZCLE9BQU8sSUFBSSxhQUFhLENBQUM7WUFDdkIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ3BELGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUMzRCxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWU7U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJGQUEyRjtJQUNuRiwyQkFBMkI7UUFDakMsT0FBTyxJQUFJLENBQUMsUUFBUTthQUNqQixRQUFRLEVBQUU7YUFDVixtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ3JDLGtCQUFrQixFQUFFO2FBQ3BCLGlCQUFpQixFQUFFO2FBQ25CLGFBQWEsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxpRkFBaUY7SUFDekUsb0JBQW9CO1FBQzFCLE9BQU8sQ0FDTCxJQUFJLENBQUMsWUFBWTtZQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsS0FBSyxZQUFZO2dCQUNqRSxDQUFDLENBQUMsaUNBQWlDO2dCQUNuQyxDQUFDLENBQUMsb0NBQW9DLENBQUMsQ0FDMUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUU7Z0JBQ3pFLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7b0JBQzNCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDZDtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0sseUJBQXlCO1FBQy9CLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVTtpQkFDWixvQkFBb0IsRUFBRTtpQkFDdEIsSUFBSSxDQUNILE1BQU0sQ0FDSixDQUFDLENBQUMsRUFBRSxDQUNGLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhO2dCQUMxQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBaUIsQ0FBQyxDQUNoRSxFQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FDMUM7aUJBQ0EsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxNQUFpQixDQUFDLEVBQUU7b0JBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7aUJBQzNCO3FCQUFNO29CQUNMLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2lCQUM5QjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQsa0RBQWtEO0lBQzFDLDZCQUE2QjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDM0UsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDYixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO2lCQUMzQjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsZ0RBQWdEO0lBQ3hDLDJCQUEyQjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFDLGtCQUFrQixFQUFDLEVBQUUsRUFBRTtnQkFDdkQsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ2xELElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUN4QztZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzttSEFsUVUsY0FBYyxpSkFhZixVQUFVLGFBRUUsUUFBUSw2QkFFUixRQUFRO3VHQWpCbkIsY0FBYywrZkFMZDtRQUNULEVBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFDO1FBQ3BELGlDQUFpQztLQUNsQzttR0FFVSxjQUFjO2tCQW5CMUIsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixRQUFRLEVBQUUsbUJBQW1CO29CQUM3QixJQUFJLEVBQUU7d0JBQ0osT0FBTyxFQUFFLGtCQUFrQjt3QkFDM0IsZUFBZSxFQUFFLE1BQU07d0JBQ3ZCLHNCQUFzQixFQUFFLFVBQVU7d0JBQ2xDLFdBQVcsRUFBRSxvQkFBb0I7d0JBQ2pDLFlBQVksRUFBRSxxQkFBcUI7d0JBQ25DLFdBQVcsRUFBRSwwQkFBMEI7d0JBQ3ZDLFNBQVMsRUFBRSxVQUFVO3FCQUN0QjtvQkFDRCxNQUFNLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRSwrQkFBK0IsQ0FBQztvQkFDL0UsT0FBTyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLENBQUM7b0JBQzNELFNBQVMsRUFBRTt3QkFDVCxFQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxnQkFBZ0IsRUFBQzt3QkFDcEQsaUNBQWlDO3FCQUNsQztpQkFDRjs7MEJBY0ksTUFBTTsyQkFBQyxVQUFVOzswQkFFakIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxRQUFROzswQkFFM0IsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxRQUFROzswQkFFM0IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0b3IsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0RpcmVjdGlvbmFsaXR5fSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQge1xuICBDb25uZWN0ZWRQb3NpdGlvbixcbiAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICBPdmVybGF5LFxuICBPdmVybGF5Q29uZmlnLFxuICBTVEFOREFSRF9EUk9QRE9XTl9BREpBQ0VOVF9QT1NJVElPTlMsXG4gIFNUQU5EQVJEX0RST1BET1dOX0JFTE9XX1BPU0lUSU9OUyxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgRE9XTl9BUlJPVyxcbiAgRU5URVIsXG4gIGhhc01vZGlmaWVyS2V5LFxuICBMRUZUX0FSUk9XLFxuICBSSUdIVF9BUlJPVyxcbiAgU1BBQ0UsXG4gIFVQX0FSUk9XLFxufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtmcm9tRXZlbnR9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaWx0ZXIsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtDREtfTUVOVSwgTWVudX0gZnJvbSAnLi9tZW51LWludGVyZmFjZSc7XG5pbXBvcnQge01FTlVfU1RBQ0ssIE1lbnVTdGFjaywgUEFSRU5UX09SX05FV19NRU5VX1NUQUNLX1BST1ZJREVSfSBmcm9tICcuL21lbnUtc3RhY2snO1xuaW1wb3J0IHtNRU5VX0FJTSwgTWVudUFpbX0gZnJvbSAnLi9tZW51LWFpbSc7XG5pbXBvcnQge0Nka01lbnVUcmlnZ2VyQmFzZSwgTUVOVV9UUklHR0VSfSBmcm9tICcuL21lbnUtdHJpZ2dlci1iYXNlJztcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IHR1cm5zIGl0cyBob3N0IGVsZW1lbnQgaW50byBhIHRyaWdnZXIgZm9yIGEgcG9wdXAgbWVudS5cbiAqIEl0IGNhbiBiZSBjb21iaW5lZCB3aXRoIGNka01lbnVJdGVtIHRvIGNyZWF0ZSBzdWItbWVudXMuIElmIHRoZSBlbGVtZW50IGlzIGluIGEgdG9wIGxldmVsXG4gKiBNZW51QmFyIGl0IHdpbGwgb3BlbiB0aGUgbWVudSBvbiBjbGljaywgb3IgaWYgYSBzaWJsaW5nIGlzIGFscmVhZHkgb3BlbmVkIGl0IHdpbGwgb3BlbiBvbiBob3Zlci5cbiAqIElmIGl0IGlzIGluc2lkZSBvZiBhIE1lbnUgaXQgd2lsbCBvcGVuIHRoZSBhdHRhY2hlZCBTdWJtZW51IG9uIGhvdmVyIHJlZ2FyZGxlc3Mgb2YgaXRzIHNpYmxpbmdcbiAqIHN0YXRlLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY2RrTWVudVRyaWdnZXJGb3JdJyxcbiAgZXhwb3J0QXM6ICdjZGtNZW51VHJpZ2dlckZvcicsXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnY2RrLW1lbnUtdHJpZ2dlcicsXG4gICAgJ2FyaWEtaGFzcG9wdXAnOiAnbWVudScsXG4gICAgJ1thdHRyLmFyaWEtZXhwYW5kZWRdJzogJ2lzT3BlbigpJyxcbiAgICAnKGZvY3VzaW4pJzogJ19zZXRIYXNGb2N1cyh0cnVlKScsXG4gICAgJyhmb2N1c291dCknOiAnX3NldEhhc0ZvY3VzKGZhbHNlKScsXG4gICAgJyhrZXlkb3duKSc6ICdfdG9nZ2xlT25LZXlkb3duKCRldmVudCknLFxuICAgICcoY2xpY2spJzogJ3RvZ2dsZSgpJyxcbiAgfSxcbiAgaW5wdXRzOiBbJ21lbnVUZW1wbGF0ZVJlZjogY2RrTWVudVRyaWdnZXJGb3InLCAnbWVudVBvc2l0aW9uOiBjZGtNZW51UG9zaXRpb24nXSxcbiAgb3V0cHV0czogWydvcGVuZWQ6IGNka01lbnVPcGVuZWQnLCAnY2xvc2VkOiBjZGtNZW51Q2xvc2VkJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtwcm92aWRlOiBNRU5VX1RSSUdHRVIsIHVzZUV4aXN0aW5nOiBDZGtNZW51VHJpZ2dlcn0sXG4gICAgUEFSRU5UX09SX05FV19NRU5VX1NUQUNLX1BST1ZJREVSLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDZGtNZW51VHJpZ2dlciBleHRlbmRzIENka01lbnVUcmlnZ2VyQmFzZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIC8qKiBUaGUgREkgaW5qZWN0b3IgZm9yIHRoaXMgY29tcG9uZW50LiAqL1xuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAvKiogVGhlIGhvc3QgZWxlbWVudC4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAvKiogVGhlIHZpZXcgY29udGFpbmVyIHJlZiBmb3IgdGhpcyBjb21wb25lbnQuICovXG4gICAgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAvKiogVGhlIENESyBvdmVybGF5IHNlcnZpY2UuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICAvKiogVGhlIEFuZ3VsYXIgem9uZS4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAvKiogVGhlIG1lbnUgc3RhY2sgdGhpcyB0cmlnZ2VyIGJlbG9uZ3MgdG8uICovXG4gICAgQEluamVjdChNRU5VX1NUQUNLKSBtZW51U3RhY2s6IE1lbnVTdGFjayxcbiAgICAvKiogVGhlIHBhcmVudCBtZW51IHRoaXMgdHJpZ2dlciBiZWxvbmdzIHRvLiAqL1xuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQ0RLX01FTlUpIHByaXZhdGUgcmVhZG9ubHkgX3BhcmVudE1lbnU/OiBNZW51LFxuICAgIC8qKiBUaGUgbWVudSBhaW0gc2VydmljZSB1c2VkIGJ5IHRoaXMgbWVudS4gKi9cbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1FTlVfQUlNKSBwcml2YXRlIHJlYWRvbmx5IF9tZW51QWltPzogTWVudUFpbSxcbiAgICAvKiogVGhlIGRpcmVjdGlvbmFsaXR5IG9mIHRoZSBwYWdlLiAqL1xuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX2RpcmVjdGlvbmFsaXR5PzogRGlyZWN0aW9uYWxpdHksXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCB2aWV3Q29udGFpbmVyUmVmLCBtZW51U3RhY2spO1xuICAgIHRoaXMuX3JlZ2lzdGVyQ2xvc2VIYW5kbGVyKCk7XG4gICAgdGhpcy5fc3Vic2NyaWJlVG9NZW51U3RhY2tDbG9zZWQoKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb01vdXNlRW50ZXIoKTtcbiAgICB0aGlzLl9zdWJzY3JpYmVUb01lbnVTdGFja0hhc0ZvY3VzKCk7XG4gIH1cblxuICAvKiogVG9nZ2xlIHRoZSBhdHRhY2hlZCBtZW51LiAqL1xuICB0b2dnbGUoKSB7XG4gICAgdGhpcy5pc09wZW4oKSA/IHRoaXMuY2xvc2UoKSA6IHRoaXMub3BlbigpO1xuICB9XG5cbiAgLyoqIE9wZW4gdGhlIGF0dGFjaGVkIG1lbnUuICovXG4gIG9wZW4oKSB7XG4gICAgaWYgKCF0aGlzLmlzT3BlbigpKSB7XG4gICAgICB0aGlzLm9wZW5lZC5uZXh0KCk7XG5cbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheVJlZiB8fCB0aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKCkpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaCh0aGlzLmdldE1lbnVDb250ZW50UG9ydGFsKCkpO1xuICAgICAgdGhpcy5fc3Vic2NyaWJlVG9PdXRzaWRlQ2xpY2tzKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIENsb3NlIHRoZSBvcGVuZWQgbWVudS4gKi9cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKCkpIHtcbiAgICAgIHRoaXMuY2xvc2VkLm5leHQoKTtcblxuICAgICAgdGhpcy5vdmVybGF5UmVmIS5kZXRhY2goKTtcbiAgICB9XG4gICAgdGhpcy5fY2xvc2VTaWJsaW5nVHJpZ2dlcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIHJlbmRlcmVkIE1lbnUgaWYgdGhlIE1lbnUgaXMgb3BlbiBhbmQgcmVuZGVyZWQgaW4gdGhlIERPTS5cbiAgICovXG4gIGdldE1lbnUoKTogTWVudSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRNZW51O1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIGZvciB0aGUgbWVudSBpdGVtLlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIGtleWJvYXJkIGV2ZW50IHRvIGhhbmRsZVxuICAgKi9cbiAgX3RvZ2dsZU9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGlzUGFyZW50VmVydGljYWwgPSB0aGlzLl9wYXJlbnRNZW51Py5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgIGNhc2UgU1BBQ0U6XG4gICAgICBjYXNlIEVOVEVSOlxuICAgICAgICBpZiAoIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgICB0aGlzLmNoaWxkTWVudT8uZm9jdXNGaXJzdEl0ZW0oJ2tleWJvYXJkJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUklHSFRfQVJST1c6XG4gICAgICAgIGlmICghaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3BhcmVudE1lbnUgJiYgaXNQYXJlbnRWZXJ0aWNhbCAmJiB0aGlzLl9kaXJlY3Rpb25hbGl0eT8udmFsdWUgIT09ICdydGwnKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICB0aGlzLmNoaWxkTWVudT8uZm9jdXNGaXJzdEl0ZW0oJ2tleWJvYXJkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIExFRlRfQVJST1c6XG4gICAgICAgIGlmICghaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3BhcmVudE1lbnUgJiYgaXNQYXJlbnRWZXJ0aWNhbCAmJiB0aGlzLl9kaXJlY3Rpb25hbGl0eT8udmFsdWUgPT09ICdydGwnKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICB0aGlzLmNoaWxkTWVudT8uZm9jdXNGaXJzdEl0ZW0oJ2tleWJvYXJkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIERPV05fQVJST1c6XG4gICAgICBjYXNlIFVQX0FSUk9XOlxuICAgICAgICBpZiAoIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgIGlmICghaXNQYXJlbnRWZXJ0aWNhbCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAga2V5Q29kZSA9PT0gRE9XTl9BUlJPV1xuICAgICAgICAgICAgICA/IHRoaXMuY2hpbGRNZW51Py5mb2N1c0ZpcnN0SXRlbSgna2V5Ym9hcmQnKVxuICAgICAgICAgICAgICA6IHRoaXMuY2hpbGRNZW51Py5mb2N1c0xhc3RJdGVtKCdrZXlib2FyZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB3aGV0aGVyIHRoZSB0cmlnZ2VyJ3MgbWVudSBzdGFjayBoYXMgZm9jdXMuXG4gICAqIEBwYXJhbSBoYXNGb2N1cyBXaGV0aGVyIHRoZSBtZW51IHN0YWNrIGhhcyBmb2N1cy5cbiAgICovXG4gIF9zZXRIYXNGb2N1cyhoYXNGb2N1czogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5fcGFyZW50TWVudSkge1xuICAgICAgdGhpcy5tZW51U3RhY2suc2V0SGFzRm9jdXMoaGFzRm9jdXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIG1vdXNlZW50ZXIgZXZlbnRzIGFuZCBjbG9zZSBhbnkgc2libGluZyBtZW51IGl0ZW1zIGlmIHRoaXMgZWxlbWVudCBpcyBtb3VzZWRcbiAgICogaW50by5cbiAgICovXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvTW91c2VFbnRlcigpIHtcbiAgICAvLyBDbG9zZXMgYW55IHNpYmxpbmcgbWVudSBpdGVtcyBhbmQgb3BlbnMgdGhlIG1lbnUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHJpZ2dlci5cbiAgICBjb25zdCB0b2dnbGVNZW51cyA9ICgpID0+XG4gICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5fY2xvc2VTaWJsaW5nVHJpZ2dlcnMoKTtcbiAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnbW91c2VlbnRlcicpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5tZW51U3RhY2suaXNFbXB0eSgpICYmICF0aGlzLmlzT3BlbigpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9tZW51QWltKSB7XG4gICAgICAgICAgICB0aGlzLl9tZW51QWltLnRvZ2dsZSh0b2dnbGVNZW51cyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvZ2dsZU1lbnVzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDbG9zZSBvdXQgYW55IHNpYmxpbmcgbWVudSB0cmlnZ2VyIG1lbnVzLiAqL1xuICBwcml2YXRlIF9jbG9zZVNpYmxpbmdUcmlnZ2VycygpIHtcbiAgICBpZiAodGhpcy5fcGFyZW50TWVudSkge1xuICAgICAgLy8gSWYgbm90aGluZyB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBzdGFjayBhbmQgdGhlIGxhc3QgZWxlbWVudCBpcyBub3QgdGhlIHBhcmVudCBpdGVtXG4gICAgICAvLyB0aGF0IG1lYW5zIHRoYXQgdGhlIHBhcmVudCBtZW51IGlzIGEgbWVudSBiYXIgc2luY2Ugd2UgZG9uJ3QgcHV0IHRoZSBtZW51IGJhciBvbiB0aGVcbiAgICAgIC8vIHN0YWNrXG4gICAgICBjb25zdCBpc1BhcmVudE1lbnVCYXIgPVxuICAgICAgICAhdGhpcy5tZW51U3RhY2suY2xvc2VTdWJNZW51T2YodGhpcy5fcGFyZW50TWVudSkgJiZcbiAgICAgICAgdGhpcy5tZW51U3RhY2sucGVlaygpICE9PSB0aGlzLl9wYXJlbnRNZW51O1xuXG4gICAgICBpZiAoaXNQYXJlbnRNZW51QmFyKSB7XG4gICAgICAgIHRoaXMubWVudVN0YWNrLmNsb3NlQWxsKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVudVN0YWNrLmNsb3NlQWxsKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldCB0aGUgY29uZmlndXJhdGlvbiBvYmplY3QgdXNlZCB0byBjcmVhdGUgdGhlIG92ZXJsYXkuICovXG4gIHByaXZhdGUgX2dldE92ZXJsYXlDb25maWcoKSB7XG4gICAgcmV0dXJuIG5ldyBPdmVybGF5Q29uZmlnKHtcbiAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuX2dldE92ZXJsYXlQb3NpdGlvblN0cmF0ZWd5KCksXG4gICAgICBzY3JvbGxTdHJhdGVneTogdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKSxcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyZWN0aW9uYWxpdHksXG4gICAgfSk7XG4gIH1cblxuICAvKiogQnVpbGQgdGhlIHBvc2l0aW9uIHN0cmF0ZWd5IGZvciB0aGUgb3ZlcmxheSB3aGljaCBzcGVjaWZpZXMgd2hlcmUgdG8gcGxhY2UgdGhlIG1lbnUuICovXG4gIHByaXZhdGUgX2dldE92ZXJsYXlQb3NpdGlvblN0cmF0ZWd5KCk6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSB7XG4gICAgcmV0dXJuIHRoaXMuX292ZXJsYXlcbiAgICAgIC5wb3NpdGlvbigpXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50UmVmKVxuICAgICAgLndpdGhMb2NrZWRQb3NpdGlvbigpXG4gICAgICAud2l0aEdyb3dBZnRlck9wZW4oKVxuICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5fZ2V0T3ZlcmxheVBvc2l0aW9ucygpKTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHByZWZlcnJlZCBwb3NpdGlvbnMgZm9yIHRoZSBvcGVuZWQgbWVudSByZWxhdGl2ZSB0byB0aGUgbWVudSBpdGVtLiAqL1xuICBwcml2YXRlIF9nZXRPdmVybGF5UG9zaXRpb25zKCk6IENvbm5lY3RlZFBvc2l0aW9uW10ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLm1lbnVQb3NpdGlvbiA/P1xuICAgICAgKCF0aGlzLl9wYXJlbnRNZW51IHx8IHRoaXMuX3BhcmVudE1lbnUub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IFNUQU5EQVJEX0RST1BET1dOX0JFTE9XX1BPU0lUSU9OU1xuICAgICAgICA6IFNUQU5EQVJEX0RST1BET1dOX0FESkFDRU5UX1BPU0lUSU9OUylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgTWVudVN0YWNrIGNsb3NlIGV2ZW50cyBpZiB0aGlzIGlzIGEgc3RhbmRhbG9uZSB0cmlnZ2VyIGFuZCBjbG9zZSBvdXQgdGhlIG1lbnVcbiAgICogdGhpcyB0cmlnZ2VycyB3aGVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ2xvc2VIYW5kbGVyKCkge1xuICAgIGlmICghdGhpcy5fcGFyZW50TWVudSkge1xuICAgICAgdGhpcy5tZW51U3RhY2suY2xvc2VkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSkuc3Vic2NyaWJlKCh7aXRlbX0pID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IHRoaXMuY2hpbGRNZW51KSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBvdmVybGF5cyBvdXRzaWRlIHBvaW50ZXIgZXZlbnRzIHN0cmVhbSBhbmQgaGFuZGxlIGNsb3Npbmcgb3V0IHRoZSBzdGFjayBpZiBhXG4gICAqIGNsaWNrIG9jY3VycyBvdXRzaWRlIHRoZSBtZW51cy5cbiAgICovXG4gIHByaXZhdGUgX3N1YnNjcmliZVRvT3V0c2lkZUNsaWNrcygpIHtcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWZcbiAgICAgICAgLm91dHNpZGVQb2ludGVyRXZlbnRzKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgZSA9PlxuICAgICAgICAgICAgICBlLnRhcmdldCAhPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgIXRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhlLnRhcmdldCBhcyBFbGVtZW50KSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN0b3BPdXRzaWRlQ2xpY2tzTGlzdGVuZXIpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5pc0VsZW1lbnRJbnNpZGVNZW51U3RhY2soZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVTdGFjay5jbG9zZUFsbCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jbG9zZVNpYmxpbmdUcmlnZ2VycygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFN1YnNjcmliZSB0byB0aGUgTWVudVN0YWNrIGhhc0ZvY3VzIGV2ZW50cy4gKi9cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9NZW51U3RhY2tIYXNGb2N1cygpIHtcbiAgICBpZiAoIXRoaXMuX3BhcmVudE1lbnUpIHtcbiAgICAgIHRoaXMubWVudVN0YWNrLmhhc0ZvY3VzLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSkuc3Vic2NyaWJlKGhhc0ZvY3VzID0+IHtcbiAgICAgICAgaWYgKCFoYXNGb2N1cykge1xuICAgICAgICAgIHRoaXMubWVudVN0YWNrLmNsb3NlQWxsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdWJzY3JpYmUgdG8gdGhlIE1lbnVTdGFjayBjbG9zZWQgZXZlbnRzLiAqL1xuICBwcml2YXRlIF9zdWJzY3JpYmVUb01lbnVTdGFja0Nsb3NlZCgpIHtcbiAgICBpZiAoIXRoaXMuX3BhcmVudE1lbnUpIHtcbiAgICAgIHRoaXMubWVudVN0YWNrLmNsb3NlZC5zdWJzY3JpYmUoKHtmb2N1c1BhcmVudFRyaWdnZXJ9KSA9PiB7XG4gICAgICAgIGlmIChmb2N1c1BhcmVudFRyaWdnZXIgJiYgIXRoaXMubWVudVN0YWNrLmxlbmd0aCgpKSB7XG4gICAgICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19