@angular/material 13.0.0-next.4 → 13.0.0-next.8

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 (1684) hide show
  1. package/autocomplete/autocomplete-module.d.ts +11 -7
  2. package/autocomplete/autocomplete-origin.d.ts +5 -0
  3. package/autocomplete/autocomplete-trigger.d.ts +5 -0
  4. package/autocomplete/autocomplete.d.ts +6 -1
  5. package/autocomplete/package.json +5 -5
  6. package/autocomplete/testing/package.json +5 -5
  7. package/badge/badge-module.d.ts +7 -7
  8. package/badge/badge.d.ts +19 -15
  9. package/badge/package.json +5 -5
  10. package/badge/testing/package.json +5 -5
  11. package/bottom-sheet/bottom-sheet-container.d.ts +6 -3
  12. package/bottom-sheet/bottom-sheet-module.d.ts +8 -7
  13. package/bottom-sheet/bottom-sheet.d.ts +3 -7
  14. package/bottom-sheet/package.json +5 -5
  15. package/bottom-sheet/testing/package.json +5 -5
  16. package/button/button-module.d.ts +6 -7
  17. package/button/button.d.ts +6 -1
  18. package/button/package.json +5 -5
  19. package/button/testing/package.json +5 -5
  20. package/button-toggle/button-toggle-module.d.ts +6 -7
  21. package/button-toggle/button-toggle.d.ts +6 -1
  22. package/button-toggle/package.json +5 -5
  23. package/button-toggle/testing/package.json +5 -5
  24. package/card/card-module.d.ts +6 -7
  25. package/card/card.d.ts +29 -7
  26. package/card/package.json +5 -5
  27. package/card/testing/package.json +5 -5
  28. package/checkbox/checkbox-module.d.ts +11 -7
  29. package/checkbox/checkbox-required-validator.d.ts +3 -0
  30. package/checkbox/checkbox.d.ts +4 -1
  31. package/checkbox/package.json +5 -5
  32. package/checkbox/testing/package.json +5 -5
  33. package/chips/chip-input.d.ts +3 -0
  34. package/chips/chip-list.d.ts +4 -1
  35. package/chips/chip.d.ts +10 -1
  36. package/chips/chips-module.d.ts +8 -7
  37. package/chips/package.json +5 -5
  38. package/chips/testing/package.json +5 -5
  39. package/core/common-behaviors/color.d.ts +2 -6
  40. package/core/common-behaviors/common-module.d.ts +5 -4
  41. package/core/common-behaviors/disable-ripple.d.ts +2 -6
  42. package/core/common-behaviors/disabled.d.ts +2 -6
  43. package/core/common-behaviors/error-state.d.ts +2 -6
  44. package/core/common-behaviors/index.d.ts +7 -6
  45. package/core/common-behaviors/initialized.d.ts +2 -6
  46. package/core/common-behaviors/tabindex.d.ts +2 -6
  47. package/core/datetime/index.d.ts +8 -7
  48. package/core/datetime/native-date-adapter.d.ts +3 -0
  49. package/core/error/error-options.d.ts +5 -7
  50. package/core/index.d.ts +0 -1
  51. package/core/line/line.d.ts +7 -0
  52. package/core/option/index.d.ts +10 -7
  53. package/core/option/optgroup.d.ts +6 -1
  54. package/core/option/option.d.ts +5 -0
  55. package/core/package.json +5 -5
  56. package/core/ripple/index.d.ts +7 -7
  57. package/core/ripple/ripple.d.ts +3 -0
  58. package/core/selection/index.d.ts +6 -7
  59. package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +3 -7
  60. package/core/testing/package.json +5 -5
  61. package/core/typography/_typography.scss +7 -2
  62. package/datepicker/_datepicker-theme.scss +1 -4
  63. package/datepicker/calendar-body.d.ts +3 -0
  64. package/datepicker/calendar.d.ts +5 -0
  65. package/datepicker/date-range-input-parts.d.ts +8 -1
  66. package/datepicker/date-range-input.d.ts +3 -0
  67. package/datepicker/date-range-picker.d.ts +3 -7
  68. package/datepicker/date-range-selection-strategy.d.ts +3 -0
  69. package/datepicker/date-selection-model.d.ts +7 -0
  70. package/datepicker/datepicker-actions.d.ts +7 -0
  71. package/datepicker/datepicker-base.d.ts +7 -12
  72. package/datepicker/datepicker-input-base.d.ts +3 -0
  73. package/datepicker/datepicker-input.d.ts +3 -0
  74. package/datepicker/datepicker-intl.d.ts +3 -7
  75. package/datepicker/datepicker-module.d.ts +24 -7
  76. package/datepicker/datepicker-toggle.d.ts +5 -0
  77. package/datepicker/datepicker.d.ts +3 -7
  78. package/datepicker/index.d.ts +0 -4
  79. package/datepicker/month-view.d.ts +3 -7
  80. package/datepicker/multi-year-view.d.ts +3 -7
  81. package/datepicker/package.json +5 -5
  82. package/datepicker/testing/package.json +5 -5
  83. package/datepicker/year-view.d.ts +3 -7
  84. package/dialog/dialog-container.d.ts +5 -0
  85. package/dialog/dialog-content-directives.d.ts +9 -0
  86. package/dialog/dialog-module.d.ts +9 -7
  87. package/dialog/dialog.d.ts +5 -7
  88. package/dialog/package.json +5 -5
  89. package/dialog/testing/dialog-harness.d.ts +14 -11
  90. package/dialog/testing/package.json +5 -5
  91. package/divider/divider-module.d.ts +6 -7
  92. package/divider/divider.d.ts +3 -7
  93. package/divider/package.json +5 -5
  94. package/divider/testing/package.json +5 -5
  95. package/esm2020/autocomplete/autocomplete-module.mjs +58 -0
  96. package/esm2020/autocomplete/autocomplete-origin.mjs +38 -0
  97. package/esm2020/autocomplete/autocomplete-trigger.mjs +651 -0
  98. package/esm2020/autocomplete/autocomplete.mjs +216 -0
  99. package/{esm2015/autocomplete/index.js → esm2020/autocomplete/index.mjs} +0 -0
  100. package/{esm2015/autocomplete/public-api.js → esm2020/autocomplete/public-api.mjs} +0 -0
  101. package/{esm2015/autocomplete/testing/autocomplete-harness-filters.js → esm2020/autocomplete/testing/autocomplete-harness-filters.mjs} +0 -0
  102. package/esm2020/autocomplete/testing/autocomplete-harness.mjs +101 -0
  103. package/{esm2015/autocomplete/testing/index.js → esm2020/autocomplete/testing/index.mjs} +0 -0
  104. package/{esm2015/autocomplete/testing/public-api.js → esm2020/autocomplete/testing/public-api.mjs} +0 -0
  105. package/esm2020/badge/badge-module.mjs +33 -0
  106. package/esm2020/badge/badge.mjs +228 -0
  107. package/{esm2015/badge/index.js → esm2020/badge/index.mjs} +0 -0
  108. package/{esm2015/badge/public-api.js → esm2020/badge/public-api.mjs} +0 -0
  109. package/{esm2015/badge/testing/badge-harness-filters.js → esm2020/badge/testing/badge-harness-filters.mjs} +0 -0
  110. package/esm2020/badge/testing/badge-harness.mjs +72 -0
  111. package/{esm2015/badge/testing/index.js → esm2020/badge/testing/index.mjs} +0 -0
  112. package/{esm2015/badge/testing/public-api.js → esm2020/badge/testing/public-api.mjs} +0 -0
  113. package/{esm2015/bottom-sheet/bottom-sheet-animations.js → esm2020/bottom-sheet/bottom-sheet-animations.mjs} +0 -0
  114. package/{esm2015/bottom-sheet/bottom-sheet-config.js → esm2020/bottom-sheet/bottom-sheet-config.mjs} +0 -0
  115. package/esm2020/bottom-sheet/bottom-sheet-container.mjs +230 -0
  116. package/esm2020/bottom-sheet/bottom-sheet-module.mjs +38 -0
  117. package/esm2020/bottom-sheet/bottom-sheet-ref.mjs +91 -0
  118. package/esm2020/bottom-sheet/bottom-sheet.mjs +172 -0
  119. package/{esm2015/bottom-sheet/index.js → esm2020/bottom-sheet/index.mjs} +0 -0
  120. package/{esm2015/bottom-sheet/public-api.js → esm2020/bottom-sheet/public-api.mjs} +0 -0
  121. package/{esm2015/bottom-sheet/testing/bottom-sheet-harness-filters.js → esm2020/bottom-sheet/testing/bottom-sheet-harness-filters.mjs} +0 -0
  122. package/esm2020/bottom-sheet/testing/bottom-sheet-harness.mjs +35 -0
  123. package/{esm2015/bottom-sheet/testing/index.js → esm2020/bottom-sheet/testing/index.mjs} +0 -0
  124. package/{esm2015/bottom-sheet/testing/public-api.js → esm2020/bottom-sheet/testing/public-api.mjs} +0 -0
  125. package/esm2020/button/button-module.mjs +42 -0
  126. package/esm2020/button/button.mjs +153 -0
  127. package/{esm2015/button/index.js → esm2020/button/index.mjs} +0 -0
  128. package/{esm2015/button/public-api.js → esm2020/button/public-api.mjs} +0 -0
  129. package/{esm2015/button/testing/button-harness-filters.js → esm2020/button/testing/button-harness-filters.mjs} +0 -0
  130. package/esm2020/button/testing/button-harness.mjs +51 -0
  131. package/{esm2015/button/testing/index.js → esm2020/button/testing/index.mjs} +0 -0
  132. package/{esm2015/button/testing/public-api.js → esm2020/button/testing/public-api.mjs} +0 -0
  133. package/esm2020/button-toggle/button-toggle-module.mjs +25 -0
  134. package/esm2020/button-toggle/button-toggle.mjs +470 -0
  135. package/{esm2015/button-toggle/index.js → esm2020/button-toggle/index.mjs} +0 -0
  136. package/{esm2015/button-toggle/public-api.js → esm2020/button-toggle/public-api.mjs} +0 -0
  137. package/{esm2015/button-toggle/testing/button-toggle-group-harness-filters.js → esm2020/button-toggle/testing/button-toggle-group-harness-filters.mjs} +0 -0
  138. package/esm2020/button-toggle/testing/button-toggle-group-harness.mjs +45 -0
  139. package/{esm2015/button-toggle/testing/button-toggle-harness-filters.js → esm2020/button-toggle/testing/button-toggle-harness-filters.mjs} +0 -0
  140. package/esm2020/button-toggle/testing/button-toggle-harness.mjs +98 -0
  141. package/{esm2015/button-toggle/testing/index.js → esm2020/button-toggle/testing/index.mjs} +0 -0
  142. package/{esm2015/button-toggle/testing/public-api.js → esm2020/button-toggle/testing/public-api.mjs} +0 -0
  143. package/esm2020/card/card-module.mjs +61 -0
  144. package/esm2020/card/card.mjs +247 -0
  145. package/{esm2015/card/index.js → esm2020/card/index.mjs} +0 -0
  146. package/{esm2015/card/public-api.js → esm2020/card/public-api.mjs} +0 -0
  147. package/{esm2015/card/testing/card-harness-filters.js → esm2020/card/testing/card-harness-filters.mjs} +0 -0
  148. package/esm2020/card/testing/card-harness.mjs +43 -0
  149. package/{esm2015/card/testing/index.js → esm2020/card/testing/index.mjs} +0 -0
  150. package/{esm2015/card/testing/public-api.js → esm2020/card/testing/public-api.mjs} +0 -0
  151. package/{esm2015/checkbox/checkbox-config.js → esm2020/checkbox/checkbox-config.mjs} +0 -0
  152. package/esm2020/checkbox/checkbox-module.mjs +46 -0
  153. package/esm2020/checkbox/checkbox-required-validator.mjs +33 -0
  154. package/esm2020/checkbox/checkbox.mjs +403 -0
  155. package/{esm2015/checkbox/index.js → esm2020/checkbox/index.mjs} +0 -0
  156. package/{esm2015/checkbox/public-api.js → esm2020/checkbox/public-api.mjs} +0 -0
  157. package/{esm2015/checkbox/testing/checkbox-harness-filters.js → esm2020/checkbox/testing/checkbox-harness-filters.mjs} +0 -0
  158. package/esm2020/checkbox/testing/checkbox-harness.mjs +123 -0
  159. package/{esm2015/checkbox/testing/index.js → esm2020/checkbox/testing/index.mjs} +0 -0
  160. package/{esm2015/checkbox/testing/public-api.js → esm2020/checkbox/testing/public-api.mjs} +0 -0
  161. package/{esm2015/chips/chip-default-options.js → esm2020/chips/chip-default-options.mjs} +0 -0
  162. package/esm2020/chips/chip-input.mjs +192 -0
  163. package/esm2020/chips/chip-list.mjs +673 -0
  164. package/{esm2015/chips/chip-text-control.js → esm2020/chips/chip-text-control.mjs} +0 -0
  165. package/esm2020/chips/chip.mjs +415 -0
  166. package/esm2020/chips/chips-module.mjs +64 -0
  167. package/{esm2015/chips/index.js → esm2020/chips/index.mjs} +0 -0
  168. package/{esm2015/chips/public-api.js → esm2020/chips/public-api.mjs} +0 -0
  169. package/{esm2015/chips/testing/chip-avatar-harness.js → esm2020/chips/testing/chip-avatar-harness.mjs} +0 -0
  170. package/{esm2015/chips/testing/chip-harness-filters.js → esm2020/chips/testing/chip-harness-filters.mjs} +0 -0
  171. package/esm2020/chips/testing/chip-harness.mjs +91 -0
  172. package/esm2020/chips/testing/chip-input-harness.mjs +82 -0
  173. package/esm2020/chips/testing/chip-list-harness.mjs +82 -0
  174. package/esm2020/chips/testing/chip-listbox-harness.mjs +44 -0
  175. package/esm2020/chips/testing/chip-option-harness.mjs +45 -0
  176. package/esm2020/chips/testing/chip-remove-harness.mjs +26 -0
  177. package/{esm2015/chips/testing/index.js → esm2020/chips/testing/index.mjs} +0 -0
  178. package/{esm2015/chips/testing/public-api.js → esm2020/chips/testing/public-api.mjs} +0 -0
  179. package/{esm2015/core/animation/animation.js → esm2020/core/animation/animation.mjs} +0 -0
  180. package/esm2020/core/common-behaviors/color.mjs +31 -0
  181. package/esm2020/core/common-behaviors/common-module.mjs +122 -0
  182. package/{esm2015/core/common-behaviors/constructor.js → esm2020/core/common-behaviors/constructor.mjs} +0 -0
  183. package/esm2020/core/common-behaviors/disable-ripple.mjs +20 -0
  184. package/esm2020/core/common-behaviors/disabled.mjs +19 -0
  185. package/esm2020/core/common-behaviors/error-state.mjs +36 -0
  186. package/esm2020/core/common-behaviors/index.mjs +15 -0
  187. package/esm2020/core/common-behaviors/initialized.mjs +58 -0
  188. package/esm2020/core/common-behaviors/tabindex.mjs +23 -0
  189. package/{esm2015/core/datetime/date-adapter.js → esm2020/core/datetime/date-adapter.mjs} +0 -0
  190. package/{esm2015/core/datetime/date-formats.js → esm2020/core/datetime/date-formats.mjs} +0 -0
  191. package/esm2020/core/datetime/index.mjs +47 -0
  192. package/esm2020/core/datetime/native-date-adapter.mjs +218 -0
  193. package/{esm2015/core/datetime/native-date-formats.js → esm2020/core/datetime/native-date-formats.mjs} +0 -0
  194. package/esm2020/core/error/error-options.mjs +33 -0
  195. package/esm2020/core/index.mjs +5 -0
  196. package/esm2020/core/line/line.mjs +64 -0
  197. package/esm2020/core/option/index.mjs +32 -0
  198. package/esm2020/core/option/optgroup.mjs +73 -0
  199. package/{esm2015/core/option/option-parent.js → esm2020/core/option/option-parent.mjs} +0 -0
  200. package/esm2020/core/option/option.mjs +276 -0
  201. package/{esm2015/core/public-api.js → esm2020/core/public-api.mjs} +0 -0
  202. package/esm2020/core/ripple/index.mjs +29 -0
  203. package/{esm2015/core/ripple/ripple-ref.js → esm2020/core/ripple/ripple-ref.mjs} +0 -0
  204. package/esm2020/core/ripple/ripple-renderer.mjs +261 -0
  205. package/esm2020/core/ripple/ripple.mjs +152 -0
  206. package/esm2020/core/selection/index.mjs +26 -0
  207. package/esm2020/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +54 -0
  208. package/{esm2015/core/testing/index.js → esm2020/core/testing/index.mjs} +0 -0
  209. package/{esm2015/core/testing/optgroup-harness-filters.js → esm2020/core/testing/optgroup-harness-filters.mjs} +0 -0
  210. package/esm2020/core/testing/optgroup-harness.mjs +44 -0
  211. package/{esm2015/core/testing/option-harness-filters.js → esm2020/core/testing/option-harness-filters.mjs} +0 -0
  212. package/esm2020/core/testing/option-harness.mjs +54 -0
  213. package/{esm2015/core/testing/public-api.js → esm2020/core/testing/public-api.mjs} +0 -0
  214. package/esm2020/core/version.mjs +11 -0
  215. package/esm2020/datepicker/calendar-body.mjs +298 -0
  216. package/esm2020/datepicker/calendar.mjs +354 -0
  217. package/esm2020/datepicker/date-range-input-parts.mjs +342 -0
  218. package/esm2020/datepicker/date-range-input.mjs +331 -0
  219. package/esm2020/datepicker/date-range-picker.mjs +48 -0
  220. package/esm2020/datepicker/date-range-selection-strategy.mjs +59 -0
  221. package/esm2020/datepicker/date-selection-model.mjs +187 -0
  222. package/esm2020/datepicker/datepicker-actions.mjs +89 -0
  223. package/{esm2015/datepicker/datepicker-animations.js → esm2020/datepicker/datepicker-animations.mjs} +0 -0
  224. package/esm2020/datepicker/datepicker-base.mjs +549 -0
  225. package/{esm2015/datepicker/datepicker-errors.js → esm2020/datepicker/datepicker-errors.mjs} +0 -0
  226. package/esm2020/datepicker/datepicker-input-base.mjs +298 -0
  227. package/esm2020/datepicker/datepicker-input.mjs +183 -0
  228. package/esm2020/datepicker/datepicker-intl.mjs +53 -0
  229. package/esm2020/datepicker/datepicker-module.mjs +148 -0
  230. package/esm2020/datepicker/datepicker-toggle.mjs +113 -0
  231. package/esm2020/datepicker/datepicker.mjs +37 -0
  232. package/esm2020/datepicker/index.mjs +5 -0
  233. package/esm2020/datepicker/month-view.mjs +364 -0
  234. package/esm2020/datepicker/multi-year-view.mjs +289 -0
  235. package/{esm2015/datepicker/public-api.js → esm2020/datepicker/public-api.mjs} +0 -0
  236. package/esm2020/datepicker/testing/calendar-cell-harness.mjs +138 -0
  237. package/esm2020/datepicker/testing/calendar-harness.mjs +76 -0
  238. package/esm2020/datepicker/testing/date-range-input-harness.mjs +99 -0
  239. package/{esm2015/datepicker/testing/datepicker-harness-filters.js → esm2020/datepicker/testing/datepicker-harness-filters.mjs} +0 -0
  240. package/esm2020/datepicker/testing/datepicker-input-harness-base.mjs +81 -0
  241. package/esm2020/datepicker/testing/datepicker-input-harness.mjs +58 -0
  242. package/esm2020/datepicker/testing/datepicker-toggle-harness.mjs +41 -0
  243. package/esm2020/datepicker/testing/datepicker-trigger-harness-base.mjs +65 -0
  244. package/{esm2015/datepicker/testing/index.js → esm2020/datepicker/testing/index.mjs} +0 -0
  245. package/{esm2015/datepicker/testing/public-api.js → esm2020/datepicker/testing/public-api.mjs} +0 -0
  246. package/esm2020/datepicker/year-view.mjs +281 -0
  247. package/{esm2015/dialog/dialog-animations.js → esm2020/dialog/dialog-animations.mjs} +0 -0
  248. package/{esm2015/dialog/dialog-config.js → esm2020/dialog/dialog-config.mjs} +0 -0
  249. package/esm2020/dialog/dialog-container.mjs +282 -0
  250. package/esm2020/dialog/dialog-content-directives.mjs +172 -0
  251. package/esm2020/dialog/dialog-module.mjs +69 -0
  252. package/esm2020/dialog/dialog-ref.mjs +196 -0
  253. package/esm2020/dialog/dialog.mjs +358 -0
  254. package/{esm2015/dialog/index.js → esm2020/dialog/index.mjs} +0 -0
  255. package/{esm2015/dialog/public-api.js → esm2020/dialog/public-api.mjs} +0 -0
  256. package/{esm2015/dialog/testing/dialog-harness-filters.js → esm2020/dialog/testing/dialog-harness-filters.mjs} +0 -0
  257. package/esm2020/dialog/testing/dialog-harness.mjs +83 -0
  258. package/{esm2015/dialog/testing/index.js → esm2020/dialog/testing/index.mjs} +0 -0
  259. package/{esm2015/dialog/testing/public-api.js → esm2020/dialog/testing/public-api.mjs} +0 -0
  260. package/esm2020/divider/divider-module.mjs +25 -0
  261. package/esm2020/divider/divider.mjs +40 -0
  262. package/{esm2015/divider/index.js → esm2020/divider/index.mjs} +0 -0
  263. package/{esm2015/divider/public-api.js → esm2020/divider/public-api.mjs} +0 -0
  264. package/{esm2015/divider/testing/divider-harness-filters.js → esm2020/divider/testing/divider-harness-filters.mjs} +0 -0
  265. package/esm2020/divider/testing/divider-harness.mjs +22 -0
  266. package/{esm2015/divider/testing/index.js → esm2020/divider/testing/index.mjs} +0 -0
  267. package/{esm2015/divider/testing/public-api.js → esm2020/divider/testing/public-api.mjs} +0 -0
  268. package/{esm2015/expansion/accordion-base.js → esm2020/expansion/accordion-base.mjs} +0 -0
  269. package/esm2020/expansion/accordion.mjs +93 -0
  270. package/{esm2015/expansion/expansion-animations.js → esm2020/expansion/expansion-animations.mjs} +0 -0
  271. package/esm2020/expansion/expansion-module.mjs +59 -0
  272. package/esm2020/expansion/expansion-panel-content.mjs +27 -0
  273. package/esm2020/expansion/expansion-panel-header.mjs +226 -0
  274. package/esm2020/expansion/expansion-panel.mjs +195 -0
  275. package/{esm2015/expansion/index.js → esm2020/expansion/index.mjs} +0 -0
  276. package/{esm2015/expansion/public-api.js → esm2020/expansion/public-api.mjs} +0 -0
  277. package/esm2020/expansion/testing/accordion-harness.mjs +31 -0
  278. package/{esm2015/expansion/testing/expansion-harness-filters.js → esm2020/expansion/testing/expansion-harness-filters.mjs} +0 -0
  279. package/esm2020/expansion/testing/expansion-harness.mjs +120 -0
  280. package/{esm2015/expansion/testing/index.js → esm2020/expansion/testing/index.mjs} +0 -0
  281. package/{esm2015/expansion/testing/public-api.js → esm2020/expansion/testing/public-api.mjs} +0 -0
  282. package/esm2020/form-field/error.mjs +47 -0
  283. package/{esm2015/form-field/form-field-animations.js → esm2020/form-field/form-field-animations.mjs} +0 -0
  284. package/esm2020/form-field/form-field-control.mjs +11 -0
  285. package/{esm2015/form-field/form-field-errors.js → esm2020/form-field/form-field-errors.mjs} +0 -0
  286. package/esm2020/form-field/form-field-module.mjs +73 -0
  287. package/esm2020/form-field/form-field.mjs +510 -0
  288. package/esm2020/form-field/hint.mjs +49 -0
  289. package/{esm2015/form-field/index.js → esm2020/form-field/index.mjs} +0 -0
  290. package/esm2020/form-field/label.mjs +21 -0
  291. package/esm2020/form-field/placeholder.mjs +26 -0
  292. package/esm2020/form-field/prefix.mjs +28 -0
  293. package/{esm2015/form-field/public-api.js → esm2020/form-field/public-api.mjs} +0 -0
  294. package/esm2020/form-field/suffix.mjs +28 -0
  295. package/{esm2015/form-field/testing/control/form-field-control-harness.js → esm2020/form-field/testing/control/form-field-control-harness.mjs} +0 -0
  296. package/{esm2015/form-field/testing/control/index.js → esm2020/form-field/testing/control/index.mjs} +0 -0
  297. package/{esm2015/form-field/testing/form-field-harness-filters.js → esm2020/form-field/testing/form-field-harness-filters.mjs} +0 -0
  298. package/esm2020/form-field/testing/form-field-harness.mjs +181 -0
  299. package/{esm2015/form-field/testing/index.js → esm2020/form-field/testing/index.mjs} +0 -0
  300. package/{esm2015/form-field/testing/public-api.js → esm2020/form-field/testing/public-api.mjs} +0 -0
  301. package/{esm2015/grid-list/grid-list-base.js → esm2020/grid-list/grid-list-base.mjs} +0 -0
  302. package/esm2020/grid-list/grid-list-module.mjs +55 -0
  303. package/esm2020/grid-list/grid-list.mjs +135 -0
  304. package/esm2020/grid-list/grid-tile.mjs +117 -0
  305. package/esm2020/grid-list/index.mjs +5 -0
  306. package/{esm2015/grid-list/public-api.js → esm2020/grid-list/public-api.mjs} +0 -0
  307. package/{esm2015/grid-list/testing/grid-list-harness-filters.js → esm2020/grid-list/testing/grid-list-harness-filters.mjs} +0 -0
  308. package/esm2020/grid-list/testing/grid-list-harness.mjs +72 -0
  309. package/esm2020/grid-list/testing/grid-tile-harness.mjs +65 -0
  310. package/{esm2015/grid-list/testing/index.js → esm2020/grid-list/testing/index.mjs} +0 -0
  311. package/{esm2015/grid-list/testing/public-api.js → esm2020/grid-list/testing/public-api.mjs} +0 -0
  312. package/{esm2015/grid-list/tile-coordinator.js → esm2020/grid-list/tile-coordinator.mjs} +0 -0
  313. package/{esm2015/grid-list/tile-styler.js → esm2020/grid-list/tile-styler.mjs} +0 -0
  314. package/{esm2015/icon/fake-svgs.js → esm2020/icon/fake-svgs.mjs} +0 -0
  315. package/esm2020/icon/icon-module.mjs +25 -0
  316. package/esm2020/icon/icon-registry.mjs +582 -0
  317. package/esm2020/icon/icon.mjs +357 -0
  318. package/{esm2015/icon/index.js → esm2020/icon/index.mjs} +0 -0
  319. package/{esm2015/icon/public-api.js → esm2020/icon/public-api.mjs} +0 -0
  320. package/esm2020/icon/testing/fake-icon-registry.mjs +92 -0
  321. package/{esm2015/icon/testing/icon-harness-filters.js → esm2020/icon/testing/icon-harness-filters.mjs} +0 -0
  322. package/esm2020/icon/testing/icon-harness.mjs +54 -0
  323. package/{esm2015/icon/testing/index.js → esm2020/icon/testing/index.mjs} +0 -0
  324. package/{esm2015/icon/testing/public-api.js → esm2020/icon/testing/public-api.mjs} +0 -0
  325. package/esm2020/icon/trusted-types.mjs +43 -0
  326. package/{esm2015/index.js → esm2020/index.mjs} +0 -0
  327. package/{esm2015/input/index.js → esm2020/input/index.mjs} +0 -0
  328. package/{esm2015/input/input-errors.js → esm2020/input/input-errors.mjs} +0 -0
  329. package/esm2020/input/input-module.mjs +51 -0
  330. package/{esm2015/input/input-value-accessor.js → esm2020/input/input-value-accessor.mjs} +0 -0
  331. package/esm2020/input/input.mjs +428 -0
  332. package/esm2020/input/public-api.mjs +12 -0
  333. package/{esm2015/input/testing/index.js → esm2020/input/testing/index.mjs} +0 -0
  334. package/{esm2015/input/testing/input-harness-filters.js → esm2020/input/testing/input-harness-filters.mjs} +0 -0
  335. package/esm2020/input/testing/input-harness.mjs +113 -0
  336. package/esm2020/input/testing/native-option-harness.mjs +42 -0
  337. package/{esm2015/input/testing/native-select-harness-filters.js → esm2020/input/testing/native-select-harness-filters.mjs} +0 -0
  338. package/esm2020/input/testing/native-select-harness.mjs +79 -0
  339. package/{esm2015/input/testing/public-api.js → esm2020/input/testing/public-api.mjs} +0 -0
  340. package/{esm2015/list/index.js → esm2020/list/index.mjs} +0 -0
  341. package/esm2020/list/list-module.mjs +71 -0
  342. package/esm2020/list/list.mjs +216 -0
  343. package/{esm2015/list/public-api.js → esm2020/list/public-api.mjs} +0 -0
  344. package/esm2020/list/selection-list.mjs +612 -0
  345. package/esm2020/list/testing/action-list-harness.mjs +59 -0
  346. package/{esm2015/list/testing/index.js → esm2020/list/testing/index.mjs} +0 -0
  347. package/esm2020/list/testing/list-harness-base.mjs +88 -0
  348. package/{esm2015/list/testing/list-harness-filters.js → esm2020/list/testing/list-harness-filters.mjs} +0 -0
  349. package/{esm2015/list/testing/list-harness.js → esm2020/list/testing/list-harness.mjs} +0 -0
  350. package/esm2020/list/testing/list-item-harness-base.mjs +72 -0
  351. package/esm2020/list/testing/nav-list-harness.mjs +64 -0
  352. package/{esm2015/list/testing/public-api.js → esm2020/list/testing/public-api.mjs} +0 -0
  353. package/esm2020/list/testing/selection-list-harness.mjs +125 -0
  354. package/esm2020/menu/index.mjs +5 -0
  355. package/{esm2015/menu/menu-animations.js → esm2020/menu/menu-animations.mjs} +0 -0
  356. package/esm2020/menu/menu-content.mjs +97 -0
  357. package/{esm2015/menu/menu-errors.js → esm2020/menu/menu-errors.mjs} +0 -0
  358. package/esm2020/menu/menu-item.mjs +164 -0
  359. package/esm2020/menu/menu-module.mjs +58 -0
  360. package/{esm2015/menu/menu-panel.js → esm2020/menu/menu-panel.mjs} +0 -0
  361. package/{esm2015/menu/menu-positions.js → esm2020/menu/menu-positions.mjs} +0 -0
  362. package/esm2020/menu/menu-trigger.mjs +540 -0
  363. package/esm2020/menu/menu.mjs +401 -0
  364. package/esm2020/menu/public-api.mjs +16 -0
  365. package/{esm2015/menu/testing/index.js → esm2020/menu/testing/index.mjs} +0 -0
  366. package/{esm2015/menu/testing/menu-harness-filters.js → esm2020/menu/testing/menu-harness-filters.mjs} +0 -0
  367. package/esm2020/menu/testing/menu-harness.mjs +183 -0
  368. package/{esm2015/menu/testing/public-api.js → esm2020/menu/testing/public-api.mjs} +0 -0
  369. package/{esm2015/paginator/index.js → esm2020/paginator/index.mjs} +0 -0
  370. package/esm2020/paginator/paginator-intl.mjs +64 -0
  371. package/esm2020/paginator/paginator-module.mjs +47 -0
  372. package/esm2020/paginator/paginator.mjs +268 -0
  373. package/{esm2015/paginator/public-api.js → esm2020/paginator/public-api.mjs} +0 -0
  374. package/{esm2015/paginator/testing/index.js → esm2020/paginator/testing/index.mjs} +0 -0
  375. package/{esm2015/paginator/testing/paginator-harness-filters.js → esm2020/paginator/testing/paginator-harness-filters.mjs} +0 -0
  376. package/esm2020/paginator/testing/paginator-harness.mjs +91 -0
  377. package/{esm2015/paginator/testing/public-api.js → esm2020/paginator/testing/public-api.mjs} +0 -0
  378. package/{esm2015/progress-bar/index.js → esm2020/progress-bar/index.mjs} +0 -0
  379. package/esm2020/progress-bar/progress-bar-module.mjs +26 -0
  380. package/esm2020/progress-bar/progress-bar.mjs +187 -0
  381. package/{esm2015/progress-bar/public-api.js → esm2020/progress-bar/public-api.mjs} +0 -0
  382. package/{esm2015/progress-bar/testing/index.js → esm2020/progress-bar/testing/index.mjs} +0 -0
  383. package/{esm2015/progress-bar/testing/progress-bar-harness-filters.js → esm2020/progress-bar/testing/progress-bar-harness-filters.mjs} +0 -0
  384. package/esm2020/progress-bar/testing/progress-bar-harness.mjs +34 -0
  385. package/{esm2015/progress-bar/testing/public-api.js → esm2020/progress-bar/testing/public-api.mjs} +0 -0
  386. package/{esm2015/progress-spinner/index.js → esm2020/progress-spinner/index.mjs} +0 -0
  387. package/esm2020/progress-spinner/progress-spinner-module.mjs +36 -0
  388. package/esm2020/progress-spinner/progress-spinner.mjs +280 -0
  389. package/{esm2015/progress-spinner/public-api.js → esm2020/progress-spinner/public-api.mjs} +0 -0
  390. package/{esm2015/progress-spinner/testing/index.js → esm2020/progress-spinner/testing/index.mjs} +0 -0
  391. package/{esm2015/progress-spinner/testing/progress-spinner-harness-filters.js → esm2020/progress-spinner/testing/progress-spinner-harness-filters.mjs} +0 -0
  392. package/esm2020/progress-spinner/testing/progress-spinner-harness.mjs +35 -0
  393. package/{esm2015/progress-spinner/testing/public-api.js → esm2020/progress-spinner/testing/public-api.mjs} +0 -0
  394. package/{esm2015/radio/index.js → esm2020/radio/index.mjs} +0 -0
  395. package/{esm2015/radio/public-api.js → esm2020/radio/public-api.mjs} +0 -0
  396. package/esm2020/radio/radio-module.mjs +25 -0
  397. package/esm2020/radio/radio.mjs +570 -0
  398. package/{esm2015/radio/testing/index.js → esm2020/radio/testing/index.mjs} +0 -0
  399. package/{esm2015/radio/testing/public-api.js → esm2020/radio/testing/public-api.mjs} +0 -0
  400. package/{esm2015/radio/testing/radio-harness-filters.js → esm2020/radio/testing/radio-harness-filters.mjs} +0 -0
  401. package/esm2020/radio/testing/radio-harness.mjs +231 -0
  402. package/{esm2015/select/index.js → esm2020/select/index.mjs} +0 -0
  403. package/{esm2015/select/public-api.js → esm2020/select/public-api.mjs} +0 -0
  404. package/{esm2015/select/select-animations.js → esm2020/select/select-animations.mjs} +0 -0
  405. package/{esm2015/select/select-errors.js → esm2020/select/select-errors.mjs} +0 -0
  406. package/esm2020/select/select-module.mjs +58 -0
  407. package/esm2020/select/select.mjs +1188 -0
  408. package/{esm2015/select/testing/index.js → esm2020/select/testing/index.mjs} +0 -0
  409. package/{esm2015/select/testing/public-api.js → esm2020/select/testing/public-api.mjs} +0 -0
  410. package/{esm2015/select/testing/select-harness-filters.js → esm2020/select/testing/select-harness-filters.mjs} +0 -0
  411. package/esm2020/select/testing/select-harness.mjs +130 -0
  412. package/{esm2015/sidenav/drawer-animations.js → esm2020/sidenav/drawer-animations.mjs} +0 -0
  413. package/esm2020/sidenav/drawer.mjs +788 -0
  414. package/esm2020/sidenav/index.mjs +5 -0
  415. package/{esm2015/sidenav/public-api.js → esm2020/sidenav/public-api.mjs} +0 -0
  416. package/esm2020/sidenav/sidenav-module.mjs +71 -0
  417. package/esm2020/sidenav/sidenav.mjs +115 -0
  418. package/esm2020/sidenav/testing/drawer-container-harness.mjs +36 -0
  419. package/{esm2015/sidenav/testing/drawer-content-harness.js → esm2020/sidenav/testing/drawer-content-harness.mjs} +0 -0
  420. package/{esm2015/sidenav/testing/drawer-harness-filters.js → esm2020/sidenav/testing/drawer-harness-filters.mjs} +0 -0
  421. package/esm2020/sidenav/testing/drawer-harness.mjs +50 -0
  422. package/{esm2015/sidenav/testing/index.js → esm2020/sidenav/testing/index.mjs} +0 -0
  423. package/{esm2015/sidenav/testing/public-api.js → esm2020/sidenav/testing/public-api.mjs} +0 -0
  424. package/esm2020/sidenav/testing/sidenav-container-harness.mjs +36 -0
  425. package/{esm2015/sidenav/testing/sidenav-content-harness.js → esm2020/sidenav/testing/sidenav-content-harness.mjs} +0 -0
  426. package/esm2020/sidenav/testing/sidenav-harness.mjs +29 -0
  427. package/{esm2015/slide-toggle/index.js → esm2020/slide-toggle/index.mjs} +0 -0
  428. package/{esm2015/slide-toggle/public-api.js → esm2020/slide-toggle/public-api.mjs} +0 -0
  429. package/{esm2015/slide-toggle/slide-toggle-config.js → esm2020/slide-toggle/slide-toggle-config.mjs} +0 -0
  430. package/esm2020/slide-toggle/slide-toggle-module.mjs +57 -0
  431. package/esm2020/slide-toggle/slide-toggle-required-validator.mjs +36 -0
  432. package/esm2020/slide-toggle/slide-toggle.mjs +253 -0
  433. package/{esm2015/slide-toggle/testing/index.js → esm2020/slide-toggle/testing/index.mjs} +0 -0
  434. package/{esm2015/slide-toggle/testing/public-api.js → esm2020/slide-toggle/testing/public-api.mjs} +0 -0
  435. package/{esm2015/slide-toggle/testing/slide-toggle-harness-filters.js → esm2020/slide-toggle/testing/slide-toggle-harness-filters.mjs} +0 -0
  436. package/esm2020/slide-toggle/testing/slide-toggle-harness.mjs +110 -0
  437. package/{esm2015/slider/index.js → esm2020/slider/index.mjs} +0 -0
  438. package/{esm2015/slider/public-api.js → esm2020/slider/public-api.mjs} +0 -0
  439. package/esm2020/slider/slider-module.mjs +26 -0
  440. package/esm2020/slider/slider.mjs +801 -0
  441. package/{esm2015/slider/testing/index.js → esm2020/slider/testing/index.mjs} +0 -0
  442. package/{esm2015/slider/testing/public-api.js → esm2020/slider/testing/public-api.mjs} +0 -0
  443. package/{esm2015/slider/testing/slider-harness-filters.js → esm2020/slider/testing/slider-harness-filters.mjs} +0 -0
  444. package/esm2020/slider/testing/slider-harness.mjs +114 -0
  445. package/{esm2015/snack-bar/index.js → esm2020/snack-bar/index.mjs} +0 -0
  446. package/{esm2015/snack-bar/public-api.js → esm2020/snack-bar/public-api.mjs} +0 -0
  447. package/esm2020/snack-bar/simple-snack-bar.mjs +44 -0
  448. package/{esm2015/snack-bar/snack-bar-animations.js → esm2020/snack-bar/snack-bar-animations.mjs} +0 -0
  449. package/{esm2015/snack-bar/snack-bar-config.js → esm2020/snack-bar/snack-bar-config.mjs} +0 -0
  450. package/esm2020/snack-bar/snack-bar-container.mjs +205 -0
  451. package/esm2020/snack-bar/snack-bar-module.mjs +47 -0
  452. package/esm2020/snack-bar/snack-bar-ref.mjs +90 -0
  453. package/esm2020/snack-bar/snack-bar.mjs +265 -0
  454. package/{esm2015/snack-bar/testing/index.js → esm2020/snack-bar/testing/index.mjs} +0 -0
  455. package/{esm2015/snack-bar/testing/public-api.js → esm2020/snack-bar/testing/public-api.mjs} +0 -0
  456. package/{esm2015/snack-bar/testing/snack-bar-harness-filters.js → esm2020/snack-bar/testing/snack-bar-harness-filters.mjs} +0 -0
  457. package/esm2020/snack-bar/testing/snack-bar-harness.mjs +118 -0
  458. package/{esm2015/sort/index.js → esm2020/sort/index.mjs} +0 -0
  459. package/{esm2015/sort/public-api.js → esm2020/sort/public-api.mjs} +0 -0
  460. package/{esm2015/sort/sort-animations.js → esm2020/sort/sort-animations.mjs} +0 -0
  461. package/{esm2015/sort/sort-direction.js → esm2020/sort/sort-direction.mjs} +0 -0
  462. package/{esm2015/sort/sort-errors.js → esm2020/sort/sort-errors.mjs} +0 -0
  463. package/esm2020/sort/sort-header-intl.mjs +43 -0
  464. package/esm2020/sort/sort-header.mjs +275 -0
  465. package/esm2020/sort/sort-module.mjs +29 -0
  466. package/esm2020/sort/sort.mjs +154 -0
  467. package/{esm2015/sort/testing/index.js → esm2020/sort/testing/index.mjs} +0 -0
  468. package/{esm2015/sort/testing/public-api.js → esm2020/sort/testing/public-api.mjs} +0 -0
  469. package/{esm2015/sort/testing/sort-harness-filters.js → esm2020/sort/testing/sort-harness-filters.mjs} +0 -0
  470. package/esm2020/sort/testing/sort-harness.mjs +36 -0
  471. package/esm2020/sort/testing/sort-header-harness.mjs +56 -0
  472. package/{esm2015/stepper/index.js → esm2020/stepper/index.mjs} +0 -0
  473. package/{esm2015/stepper/public-api.js → esm2020/stepper/public-api.mjs} +0 -0
  474. package/esm2020/stepper/step-content.mjs +26 -0
  475. package/esm2020/stepper/step-header.mjs +110 -0
  476. package/esm2020/stepper/step-label.mjs +21 -0
  477. package/{esm2015/stepper/stepper-animations.js → esm2020/stepper/stepper-animations.mjs} +0 -0
  478. package/esm2020/stepper/stepper-button.mjs +43 -0
  479. package/esm2020/stepper/stepper-icon.mjs +29 -0
  480. package/esm2020/stepper/stepper-intl.mjs +43 -0
  481. package/esm2020/stepper/stepper-module.mjs +97 -0
  482. package/esm2020/stepper/stepper.mjs +213 -0
  483. package/{esm2015/stepper/testing/index.js → esm2020/stepper/testing/index.mjs} +0 -0
  484. package/{esm2015/stepper/testing/public-api.js → esm2020/stepper/testing/public-api.mjs} +0 -0
  485. package/{esm2015/stepper/testing/step-harness-filters.js → esm2020/stepper/testing/step-harness-filters.mjs} +0 -0
  486. package/esm2020/stepper/testing/step-harness.mjs +90 -0
  487. package/esm2020/stepper/testing/stepper-button-harnesses.mjs +50 -0
  488. package/esm2020/stepper/testing/stepper-harness.mjs +50 -0
  489. package/esm2020/table/cell.mjs +139 -0
  490. package/{esm2015/table/index.js → esm2020/table/index.mjs} +0 -0
  491. package/{esm2015/table/public-api.js → esm2020/table/public-api.mjs} +0 -0
  492. package/esm2020/table/row.mjs +139 -0
  493. package/esm2020/table/table-data-source.mjs +310 -0
  494. package/esm2020/table/table-module.mjs +101 -0
  495. package/esm2020/table/table.mjs +71 -0
  496. package/esm2020/table/testing/cell-harness.mjs +72 -0
  497. package/{esm2015/table/testing/index.js → esm2020/table/testing/index.mjs} +0 -0
  498. package/{esm2015/table/testing/public-api.js → esm2020/table/testing/public-api.mjs} +0 -0
  499. package/esm2020/table/testing/row-harness.mjs +84 -0
  500. package/{esm2015/table/testing/table-harness-filters.js → esm2020/table/testing/table-harness-filters.mjs} +0 -0
  501. package/esm2020/table/testing/table-harness.mjs +88 -0
  502. package/esm2020/table/text-column.mjs +58 -0
  503. package/esm2020/tabs/index.mjs +5 -0
  504. package/esm2020/tabs/ink-bar.mjs +93 -0
  505. package/esm2020/tabs/paginated-tab-header.mjs +480 -0
  506. package/esm2020/tabs/public-api.mjs +20 -0
  507. package/esm2020/tabs/tab-body.mjs +214 -0
  508. package/{esm2015/tabs/tab-config.js → esm2020/tabs/tab-config.mjs} +0 -0
  509. package/esm2020/tabs/tab-content.mjs +32 -0
  510. package/esm2020/tabs/tab-group.mjs +382 -0
  511. package/esm2020/tabs/tab-header.mjs +101 -0
  512. package/esm2020/tabs/tab-label-wrapper.mjs +41 -0
  513. package/esm2020/tabs/tab-label.mjs +43 -0
  514. package/{esm2015/tabs/tab-nav-bar/index.js → esm2020/tabs/tab-nav-bar/index.mjs} +0 -0
  515. package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +263 -0
  516. package/esm2020/tabs/tab.mjs +106 -0
  517. package/{esm2015/tabs/tabs-animations.js → esm2020/tabs/tabs-animations.mjs} +0 -0
  518. package/esm2020/tabs/tabs-module.mjs +93 -0
  519. package/{esm2015/tabs/testing/index.js → esm2020/tabs/testing/index.mjs} +0 -0
  520. package/{esm2015/tabs/testing/public-api.js → esm2020/tabs/testing/public-api.mjs} +0 -0
  521. package/esm2020/tabs/testing/tab-group-harness.mjs +58 -0
  522. package/{esm2015/tabs/testing/tab-harness-filters.js → esm2020/tabs/testing/tab-harness-filters.mjs} +0 -0
  523. package/esm2020/tabs/testing/tab-harness.mjs +66 -0
  524. package/esm2020/tabs/testing/tab-link-harness.mjs +42 -0
  525. package/esm2020/tabs/testing/tab-nav-bar-harness.mjs +54 -0
  526. package/{esm2015/toolbar/index.js → esm2020/toolbar/index.mjs} +0 -0
  527. package/{esm2015/toolbar/public-api.js → esm2020/toolbar/public-api.mjs} +0 -0
  528. package/{esm2015/toolbar/testing/index.js → esm2020/toolbar/testing/index.mjs} +0 -0
  529. package/{esm2015/toolbar/testing/public-api.js → esm2020/toolbar/testing/public-api.mjs} +0 -0
  530. package/{esm2015/toolbar/testing/toolbar-harness-filters.js → esm2020/toolbar/testing/toolbar-harness-filters.mjs} +0 -0
  531. package/esm2020/toolbar/testing/toolbar-harness.mjs +40 -0
  532. package/esm2020/toolbar/toolbar-module.mjs +25 -0
  533. package/esm2020/toolbar/toolbar.mjs +88 -0
  534. package/{esm2015/tooltip/index.js → esm2020/tooltip/index.mjs} +0 -0
  535. package/{esm2015/tooltip/public-api.js → esm2020/tooltip/public-api.mjs} +0 -0
  536. package/{esm2015/tooltip/testing/index.js → esm2020/tooltip/testing/index.mjs} +0 -0
  537. package/{esm2015/tooltip/testing/public-api.js → esm2020/tooltip/testing/public-api.mjs} +0 -0
  538. package/{esm2015/tooltip/testing/tooltip-harness-filters.js → esm2020/tooltip/testing/tooltip-harness-filters.mjs} +0 -0
  539. package/esm2020/tooltip/testing/tooltip-harness.mjs +57 -0
  540. package/{esm2015/tooltip/tooltip-animations.js → esm2020/tooltip/tooltip-animations.mjs} +0 -0
  541. package/esm2020/tooltip/tooltip-module.mjs +44 -0
  542. package/esm2020/tooltip/tooltip.mjs +739 -0
  543. package/{esm2015/tree/data-source/flat-data-source.js → esm2020/tree/data-source/flat-data-source.mjs} +0 -0
  544. package/{esm2015/tree/data-source/nested-data-source.js → esm2020/tree/data-source/nested-data-source.mjs} +0 -0
  545. package/{esm2015/tree/index.js → esm2020/tree/index.mjs} +0 -0
  546. package/esm2020/tree/node.mjs +143 -0
  547. package/esm2020/tree/outlet.mjs +41 -0
  548. package/esm2020/tree/padding.mjs +37 -0
  549. package/{esm2015/tree/public-api.js → esm2020/tree/public-api.mjs} +0 -0
  550. package/{esm2015/tree/testing/index.js → esm2020/tree/testing/index.mjs} +0 -0
  551. package/esm2020/tree/testing/node-harness.mjs +69 -0
  552. package/{esm2015/tree/testing/public-api.js → esm2020/tree/testing/public-api.mjs} +0 -0
  553. package/{esm2015/tree/testing/tree-harness-filters.js → esm2020/tree/testing/tree-harness-filters.mjs} +0 -0
  554. package/esm2020/tree/testing/tree-harness.mjs +123 -0
  555. package/esm2020/tree/toggle.mjs +36 -0
  556. package/esm2020/tree/tree-module.mjs +51 -0
  557. package/esm2020/tree/tree.mjs +37 -0
  558. package/expansion/accordion.d.ts +3 -0
  559. package/expansion/expansion-module.d.ts +12 -7
  560. package/expansion/expansion-panel-content.d.ts +3 -0
  561. package/expansion/expansion-panel-header.d.ts +8 -1
  562. package/expansion/expansion-panel.d.ts +5 -0
  563. package/expansion/package.json +5 -5
  564. package/expansion/testing/package.json +5 -5
  565. package/fesm2015/autocomplete/testing.mjs +132 -0
  566. package/fesm2015/autocomplete/testing.mjs.map +1 -0
  567. package/fesm2015/autocomplete.mjs +958 -0
  568. package/fesm2015/autocomplete.mjs.map +1 -0
  569. package/fesm2015/badge/testing.mjs +97 -0
  570. package/fesm2015/badge/testing.mjs.map +1 -0
  571. package/fesm2015/badge.mjs +266 -0
  572. package/fesm2015/badge.mjs.map +1 -0
  573. package/fesm2015/bottom-sheet/testing.mjs +52 -0
  574. package/fesm2015/bottom-sheet/testing.mjs.map +1 -0
  575. package/fesm2015/bottom-sheet.mjs +596 -0
  576. package/fesm2015/bottom-sheet.mjs.map +1 -0
  577. package/fesm2015/button/testing.mjs +76 -0
  578. package/fesm2015/button/testing.mjs.map +1 -0
  579. package/fesm2015/button-toggle/testing.mjs +181 -0
  580. package/fesm2015/button-toggle/testing.mjs.map +1 -0
  581. package/fesm2015/button-toggle.mjs +502 -0
  582. package/fesm2015/button-toggle.mjs.map +1 -0
  583. package/fesm2015/button.mjs +202 -0
  584. package/fesm2015/button.mjs.map +1 -0
  585. package/fesm2015/card/testing.mjs +64 -0
  586. package/fesm2015/card/testing.mjs.map +1 -0
  587. package/fesm2015/card.mjs +322 -0
  588. package/fesm2015/card.mjs.map +1 -0
  589. package/fesm2015/checkbox/testing.mjs +168 -0
  590. package/fesm2015/checkbox/testing.mjs.map +1 -0
  591. package/fesm2015/checkbox.mjs +503 -0
  592. package/fesm2015/checkbox.mjs.map +1 -0
  593. package/fesm2015/chips/testing.mjs +423 -0
  594. package/fesm2015/chips/testing.mjs.map +1 -0
  595. package/fesm2015/chips.mjs +1354 -0
  596. package/fesm2015/chips.mjs.map +1 -0
  597. package/fesm2015/core/testing.mjs +120 -0
  598. package/fesm2015/core/testing.mjs.map +1 -0
  599. package/fesm2015/core.mjs +1719 -0
  600. package/fesm2015/core.mjs.map +1 -0
  601. package/fesm2015/datepicker/testing.mjs +635 -0
  602. package/fesm2015/datepicker/testing.mjs.map +1 -0
  603. package/fesm2015/datepicker.mjs +3948 -0
  604. package/fesm2015/datepicker.mjs.map +1 -0
  605. package/fesm2015/dialog/testing.mjs +119 -0
  606. package/fesm2015/dialog/testing.mjs.map +1 -0
  607. package/fesm2015/dialog.mjs +1155 -0
  608. package/fesm2015/dialog.mjs.map +1 -0
  609. package/fesm2015/divider/testing.mjs +39 -0
  610. package/fesm2015/divider/testing.mjs.map +1 -0
  611. package/fesm2015/divider.mjs +77 -0
  612. package/fesm2015/divider.mjs.map +1 -0
  613. package/fesm2015/expansion/testing.mjs +187 -0
  614. package/fesm2015/expansion/testing.mjs.map +1 -0
  615. package/fesm2015/expansion.mjs +641 -0
  616. package/fesm2015/expansion.mjs.map +1 -0
  617. package/fesm2015/form-field/testing/control.mjs +26 -0
  618. package/fesm2015/form-field/testing/control.mjs.map +1 -0
  619. package/fesm2015/form-field/testing.mjs +231 -0
  620. package/fesm2015/form-field/testing.mjs.map +1 -0
  621. package/fesm2015/form-field.mjs +814 -0
  622. package/fesm2015/form-field.mjs.map +1 -0
  623. package/fesm2015/grid-list/testing.mjs +161 -0
  624. package/fesm2015/grid-list/testing.mjs.map +1 -0
  625. package/fesm2015/grid-list.mjs +700 -0
  626. package/fesm2015/grid-list.mjs.map +1 -0
  627. package/fesm2015/icon/testing.mjs +163 -0
  628. package/fesm2015/icon/testing.mjs.map +1 -0
  629. package/fesm2015/icon.mjs +1016 -0
  630. package/fesm2015/icon.mjs.map +1 -0
  631. package/fesm2015/input/testing.mjs +281 -0
  632. package/fesm2015/input/testing.mjs.map +1 -0
  633. package/fesm2015/input.mjs +515 -0
  634. package/fesm2015/input.mjs.map +1 -0
  635. package/fesm2015/list/testing.mjs +486 -0
  636. package/fesm2015/list/testing.mjs.map +1 -0
  637. package/fesm2015/list.mjs +908 -0
  638. package/fesm2015/list.mjs.map +1 -0
  639. package/fesm2015/material.mjs +16 -0
  640. package/fesm2015/material.mjs.map +1 -0
  641. package/fesm2015/menu/testing.mjs +235 -0
  642. package/fesm2015/menu/testing.mjs.map +1 -0
  643. package/fesm2015/menu.mjs +1363 -0
  644. package/fesm2015/menu.mjs.map +1 -0
  645. package/fesm2015/paginator/testing.mjs +118 -0
  646. package/fesm2015/paginator/testing.mjs.map +1 -0
  647. package/fesm2015/paginator.mjs +387 -0
  648. package/fesm2015/paginator.mjs.map +1 -0
  649. package/fesm2015/progress-bar/testing.mjs +51 -0
  650. package/fesm2015/progress-bar/testing.mjs.map +1 -0
  651. package/fesm2015/progress-bar.mjs +225 -0
  652. package/fesm2015/progress-bar.mjs.map +1 -0
  653. package/fesm2015/progress-spinner/testing.mjs +52 -0
  654. package/fesm2015/progress-spinner/testing.mjs.map +1 -0
  655. package/fesm2015/progress-spinner.mjs +330 -0
  656. package/fesm2015/progress-spinner.mjs.map +1 -0
  657. package/fesm2015/radio/testing.mjs +284 -0
  658. package/fesm2015/radio/testing.mjs.map +1 -0
  659. package/fesm2015/radio.mjs +599 -0
  660. package/fesm2015/radio.mjs.map +1 -0
  661. package/fesm2015/select/testing.mjs +169 -0
  662. package/fesm2015/select/testing.mjs.map +1 -0
  663. package/fesm2015/select.mjs +1346 -0
  664. package/fesm2015/select.mjs.map +1 -0
  665. package/fesm2015/sidenav/testing.mjs +195 -0
  666. package/fesm2015/sidenav/testing.mjs.map +1 -0
  667. package/fesm2015/sidenav.mjs +1013 -0
  668. package/fesm2015/sidenav.mjs.map +1 -0
  669. package/fesm2015/slide-toggle/testing.mjs +151 -0
  670. package/fesm2015/slide-toggle/testing.mjs.map +1 -0
  671. package/fesm2015/slide-toggle.mjs +359 -0
  672. package/fesm2015/slide-toggle.mjs.map +1 -0
  673. package/fesm2015/slider/testing.mjs +153 -0
  674. package/fesm2015/slider/testing.mjs.map +1 -0
  675. package/fesm2015/slider.mjs +830 -0
  676. package/fesm2015/slider.mjs.map +1 -0
  677. package/fesm2015/snack-bar/testing.mjs +153 -0
  678. package/fesm2015/snack-bar/testing.mjs.map +1 -0
  679. package/fesm2015/snack-bar.mjs +698 -0
  680. package/fesm2015/snack-bar.mjs.map +1 -0
  681. package/fesm2015/sort/testing.mjs +110 -0
  682. package/fesm2015/sort/testing.mjs.map +1 -0
  683. package/fesm2015/sort.mjs +605 -0
  684. package/fesm2015/sort.mjs.map +1 -0
  685. package/fesm2015/stepper/testing.mjs +216 -0
  686. package/fesm2015/stepper/testing.mjs.map +1 -0
  687. package/fesm2015/stepper.mjs +579 -0
  688. package/fesm2015/stepper.mjs.map +1 -0
  689. package/fesm2015/table/testing.mjs +259 -0
  690. package/fesm2015/table/testing.mjs.map +1 -0
  691. package/fesm2015/table.mjs +817 -0
  692. package/fesm2015/table.mjs.map +1 -0
  693. package/fesm2015/tabs/testing.mjs +245 -0
  694. package/fesm2015/tabs/testing.mjs.map +1 -0
  695. package/fesm2015/tabs.mjs +1846 -0
  696. package/fesm2015/tabs.mjs.map +1 -0
  697. package/fesm2015/toolbar/testing.mjs +59 -0
  698. package/fesm2015/toolbar/testing.mjs.map +1 -0
  699. package/fesm2015/toolbar.mjs +118 -0
  700. package/fesm2015/toolbar.mjs.map +1 -0
  701. package/fesm2015/tooltip/testing.mjs +80 -0
  702. package/fesm2015/tooltip/testing.mjs.map +1 -0
  703. package/fesm2015/tooltip.mjs +820 -0
  704. package/fesm2015/tooltip.mjs.map +1 -0
  705. package/fesm2015/tree/testing.mjs +215 -0
  706. package/fesm2015/tree/testing.mjs.map +1 -0
  707. package/fesm2015/tree.mjs +520 -0
  708. package/fesm2015/tree.mjs.map +1 -0
  709. package/fesm2020/autocomplete/testing.mjs +128 -0
  710. package/fesm2020/autocomplete/testing.mjs.map +1 -0
  711. package/fesm2020/autocomplete.mjs +958 -0
  712. package/fesm2020/autocomplete.mjs.map +1 -0
  713. package/fesm2020/badge/testing.mjs +99 -0
  714. package/fesm2020/badge/testing.mjs.map +1 -0
  715. package/fesm2020/badge.mjs +271 -0
  716. package/fesm2020/badge.mjs.map +1 -0
  717. package/fesm2020/bottom-sheet/testing.mjs +62 -0
  718. package/fesm2020/bottom-sheet/testing.mjs.map +1 -0
  719. package/fesm2020/bottom-sheet.mjs +592 -0
  720. package/fesm2020/bottom-sheet.mjs.map +1 -0
  721. package/fesm2020/button/testing.mjs +78 -0
  722. package/fesm2020/button/testing.mjs.map +1 -0
  723. package/fesm2020/button-toggle/testing.mjs +176 -0
  724. package/fesm2020/button-toggle/testing.mjs.map +1 -0
  725. package/fesm2020/button-toggle.mjs +505 -0
  726. package/fesm2020/button-toggle.mjs.map +1 -0
  727. package/fesm2020/button.mjs +205 -0
  728. package/fesm2020/button.mjs.map +1 -0
  729. package/fesm2020/card/testing.mjs +70 -0
  730. package/fesm2020/card/testing.mjs.map +1 -0
  731. package/fesm2020/card.mjs +320 -0
  732. package/fesm2020/card.mjs.map +1 -0
  733. package/fesm2020/checkbox/testing.mjs +150 -0
  734. package/fesm2020/checkbox/testing.mjs.map +1 -0
  735. package/fesm2020/checkbox.mjs +507 -0
  736. package/fesm2020/checkbox.mjs.map +1 -0
  737. package/fesm2020/chips/testing.mjs +398 -0
  738. package/fesm2020/chips/testing.mjs.map +1 -0
  739. package/fesm2020/chips.mjs +1346 -0
  740. package/fesm2020/chips.mjs.map +1 -0
  741. package/fesm2020/core/testing.mjs +131 -0
  742. package/fesm2020/core/testing.mjs.map +1 -0
  743. package/fesm2020/core.mjs +1731 -0
  744. package/fesm2020/core.mjs.map +1 -0
  745. package/fesm2020/datepicker/testing.mjs +572 -0
  746. package/fesm2020/datepicker/testing.mjs.map +1 -0
  747. package/fesm2020/datepicker.mjs +3921 -0
  748. package/fesm2020/datepicker.mjs.map +1 -0
  749. package/fesm2020/dialog/testing.mjs +110 -0
  750. package/fesm2020/dialog/testing.mjs.map +1 -0
  751. package/fesm2020/dialog.mjs +1147 -0
  752. package/fesm2020/dialog.mjs.map +1 -0
  753. package/fesm2020/divider/testing.mjs +49 -0
  754. package/fesm2020/divider/testing.mjs.map +1 -0
  755. package/fesm2020/divider.mjs +77 -0
  756. package/fesm2020/divider.mjs.map +1 -0
  757. package/fesm2020/expansion/testing.mjs +176 -0
  758. package/fesm2020/expansion/testing.mjs.map +1 -0
  759. package/fesm2020/expansion.mjs +644 -0
  760. package/fesm2020/expansion.mjs.map +1 -0
  761. package/fesm2020/form-field/testing/control.mjs +26 -0
  762. package/fesm2020/form-field/testing/control.mjs.map +1 -0
  763. package/fesm2020/form-field/testing.mjs +209 -0
  764. package/fesm2020/form-field/testing.mjs.map +1 -0
  765. package/fesm2020/form-field.mjs +817 -0
  766. package/fesm2020/form-field.mjs.map +1 -0
  767. package/fesm2020/grid-list/testing.mjs +162 -0
  768. package/fesm2020/grid-list/testing.mjs.map +1 -0
  769. package/fesm2020/grid-list.mjs +696 -0
  770. package/fesm2020/grid-list.mjs.map +1 -0
  771. package/fesm2020/icon/testing.mjs +169 -0
  772. package/fesm2020/icon/testing.mjs.map +1 -0
  773. package/fesm2020/icon.mjs +1010 -0
  774. package/fesm2020/icon.mjs.map +1 -0
  775. package/fesm2020/input/testing.mjs +265 -0
  776. package/fesm2020/input/testing.mjs.map +1 -0
  777. package/fesm2020/input.mjs +512 -0
  778. package/fesm2020/input.mjs.map +1 -0
  779. package/fesm2020/list/testing.mjs +464 -0
  780. package/fesm2020/list/testing.mjs.map +1 -0
  781. package/fesm2020/list.mjs +901 -0
  782. package/fesm2020/list.mjs.map +1 -0
  783. package/fesm2020/material.mjs +16 -0
  784. package/fesm2020/material.mjs.map +1 -0
  785. package/fesm2020/menu/testing.mjs +210 -0
  786. package/fesm2020/menu/testing.mjs.map +1 -0
  787. package/fesm2020/menu.mjs +1365 -0
  788. package/fesm2020/menu.mjs.map +1 -0
  789. package/fesm2020/paginator/testing.mjs +118 -0
  790. package/fesm2020/paginator/testing.mjs.map +1 -0
  791. package/fesm2020/paginator.mjs +385 -0
  792. package/fesm2020/paginator.mjs.map +1 -0
  793. package/fesm2020/progress-bar/testing.mjs +61 -0
  794. package/fesm2020/progress-bar/testing.mjs.map +1 -0
  795. package/fesm2020/progress-bar.mjs +223 -0
  796. package/fesm2020/progress-bar.mjs.map +1 -0
  797. package/fesm2020/progress-spinner/testing.mjs +62 -0
  798. package/fesm2020/progress-spinner/testing.mjs.map +1 -0
  799. package/fesm2020/progress-spinner.mjs +326 -0
  800. package/fesm2020/progress-spinner.mjs.map +1 -0
  801. package/fesm2020/radio/testing.mjs +258 -0
  802. package/fesm2020/radio/testing.mjs.map +1 -0
  803. package/fesm2020/radio.mjs +604 -0
  804. package/fesm2020/radio.mjs.map +1 -0
  805. package/fesm2020/select/testing.mjs +157 -0
  806. package/fesm2020/select/testing.mjs.map +1 -0
  807. package/fesm2020/select.mjs +1338 -0
  808. package/fesm2020/select.mjs.map +1 -0
  809. package/fesm2020/sidenav/testing.mjs +214 -0
  810. package/fesm2020/sidenav/testing.mjs.map +1 -0
  811. package/fesm2020/sidenav.mjs +1004 -0
  812. package/fesm2020/sidenav.mjs.map +1 -0
  813. package/fesm2020/slide-toggle/testing.mjs +137 -0
  814. package/fesm2020/slide-toggle/testing.mjs.map +1 -0
  815. package/fesm2020/slide-toggle.mjs +364 -0
  816. package/fesm2020/slide-toggle.mjs.map +1 -0
  817. package/fesm2020/slider/testing.mjs +133 -0
  818. package/fesm2020/slider/testing.mjs.map +1 -0
  819. package/fesm2020/slider.mjs +835 -0
  820. package/fesm2020/slider.mjs.map +1 -0
  821. package/fesm2020/snack-bar/testing.mjs +145 -0
  822. package/fesm2020/snack-bar/testing.mjs.map +1 -0
  823. package/fesm2020/snack-bar.mjs +701 -0
  824. package/fesm2020/snack-bar.mjs.map +1 -0
  825. package/fesm2020/sort/testing.mjs +109 -0
  826. package/fesm2020/sort/testing.mjs.map +1 -0
  827. package/fesm2020/sort.mjs +609 -0
  828. package/fesm2020/sort.mjs.map +1 -0
  829. package/fesm2020/stepper/testing.mjs +206 -0
  830. package/fesm2020/stepper/testing.mjs.map +1 -0
  831. package/fesm2020/stepper.mjs +589 -0
  832. package/fesm2020/stepper.mjs.map +1 -0
  833. package/fesm2020/table/testing.mjs +259 -0
  834. package/fesm2020/table/testing.mjs.map +1 -0
  835. package/fesm2020/table.mjs +814 -0
  836. package/fesm2020/table.mjs.map +1 -0
  837. package/fesm2020/tabs/testing.mjs +234 -0
  838. package/fesm2020/tabs/testing.mjs.map +1 -0
  839. package/fesm2020/tabs.mjs +1829 -0
  840. package/fesm2020/tabs.mjs.map +1 -0
  841. package/fesm2020/toolbar/testing.mjs +67 -0
  842. package/fesm2020/toolbar/testing.mjs.map +1 -0
  843. package/fesm2020/toolbar.mjs +123 -0
  844. package/fesm2020/toolbar.mjs.map +1 -0
  845. package/fesm2020/tooltip/testing.mjs +84 -0
  846. package/fesm2020/tooltip/testing.mjs.map +1 -0
  847. package/fesm2020/tooltip.mjs +815 -0
  848. package/fesm2020/tooltip.mjs.map +1 -0
  849. package/fesm2020/tree/testing.mjs +217 -0
  850. package/fesm2020/tree/testing.mjs.map +1 -0
  851. package/fesm2020/tree.mjs +514 -0
  852. package/fesm2020/tree.mjs.map +1 -0
  853. package/form-field/error.d.ts +3 -0
  854. package/form-field/form-field-control.d.ts +3 -0
  855. package/form-field/form-field-module.d.ts +14 -7
  856. package/form-field/form-field.d.ts +4 -1
  857. package/form-field/hint.d.ts +3 -0
  858. package/form-field/label.d.ts +3 -7
  859. package/form-field/package.json +5 -5
  860. package/form-field/placeholder.d.ts +3 -7
  861. package/form-field/prefix.d.ts +3 -0
  862. package/form-field/suffix.d.ts +3 -0
  863. package/form-field/testing/control/package.json +5 -5
  864. package/form-field/testing/package.json +5 -5
  865. package/grid-list/grid-list-module.d.ts +7 -7
  866. package/grid-list/grid-list.d.ts +3 -0
  867. package/grid-list/grid-tile.d.ts +11 -0
  868. package/grid-list/index.d.ts +0 -1
  869. package/grid-list/package.json +5 -5
  870. package/grid-list/testing/package.json +5 -5
  871. package/icon/icon-module.d.ts +6 -7
  872. package/icon/icon-registry.d.ts +3 -7
  873. package/icon/icon.d.ts +4 -1
  874. package/icon/package.json +5 -5
  875. package/icon/testing/fake-icon-registry.d.ts +6 -0
  876. package/icon/testing/package.json +5 -5
  877. package/input/input-module.d.ts +8 -7
  878. package/input/input.d.ts +4 -1
  879. package/input/package.json +5 -5
  880. package/input/public-api.d.ts +0 -1
  881. package/input/testing/package.json +5 -5
  882. package/list/list-module.d.ts +9 -7
  883. package/list/list.d.ts +15 -2
  884. package/list/package.json +5 -5
  885. package/list/selection-list.d.ts +7 -2
  886. package/list/testing/package.json +5 -5
  887. package/menu/index.d.ts +0 -2
  888. package/menu/menu-content.d.ts +11 -11
  889. package/menu/menu-item.d.ts +4 -1
  890. package/menu/menu-module.d.ts +12 -13
  891. package/menu/menu-trigger.d.ts +12 -2
  892. package/menu/menu.d.ts +5 -0
  893. package/menu/package.json +5 -5
  894. package/menu/public-api.d.ts +1 -1
  895. package/menu/testing/package.json +5 -5
  896. package/package.json +612 -8
  897. package/paginator/package.json +5 -5
  898. package/paginator/paginator-intl.d.ts +3 -0
  899. package/paginator/paginator-module.d.ts +10 -7
  900. package/paginator/paginator.d.ts +6 -1
  901. package/paginator/testing/package.json +5 -5
  902. package/prebuilt-themes/deeppurple-amber.css +1 -1
  903. package/prebuilt-themes/indigo-pink.css +1 -1
  904. package/prebuilt-themes/pink-bluegrey.css +1 -1
  905. package/prebuilt-themes/purple-green.css +1 -1
  906. package/progress-bar/package.json +5 -5
  907. package/progress-bar/progress-bar-module.d.ts +7 -7
  908. package/progress-bar/progress-bar.d.ts +4 -1
  909. package/progress-bar/testing/package.json +5 -5
  910. package/progress-spinner/package.json +5 -5
  911. package/progress-spinner/progress-spinner-module.d.ts +7 -0
  912. package/progress-spinner/progress-spinner.d.ts +6 -1
  913. package/progress-spinner/testing/package.json +5 -5
  914. package/radio/package.json +5 -5
  915. package/radio/radio-module.d.ts +6 -7
  916. package/radio/radio.d.ts +10 -1
  917. package/radio/testing/package.json +5 -5
  918. package/schematics/ng-add/fonts/material-fonts.js +8 -17
  919. package/schematics/ng-add/fonts/material-fonts.mjs +8 -17
  920. package/schematics/ng-add/index.js +8 -8
  921. package/schematics/ng-add/index.mjs +8 -8
  922. package/schematics/ng-add/setup-project.js +23 -32
  923. package/schematics/ng-add/setup-project.mjs +23 -32
  924. package/schematics/ng-add/theming/create-custom-theme.js +2 -2
  925. package/schematics/ng-add/theming/create-custom-theme.mjs +2 -2
  926. package/schematics/ng-add/theming/theming.js +35 -46
  927. package/schematics/ng-add/theming/theming.mjs +35 -46
  928. package/schematics/ng-generate/address-form/index.js +13 -22
  929. package/schematics/ng-generate/address-form/index.mjs +13 -22
  930. package/schematics/ng-generate/dashboard/index.js +13 -22
  931. package/schematics/ng-generate/dashboard/index.mjs +13 -22
  932. package/schematics/ng-generate/navigation/index.js +13 -22
  933. package/schematics/ng-generate/navigation/index.mjs +13 -22
  934. package/schematics/ng-generate/table/index.js +10 -19
  935. package/schematics/ng-generate/table/index.mjs +10 -19
  936. package/schematics/ng-generate/tree/index.js +10 -19
  937. package/schematics/ng-generate/tree/index.mjs +10 -19
  938. package/schematics/ng-update/data/constructor-checks.js +5 -1
  939. package/schematics/ng-update/data/constructor-checks.mjs +5 -1
  940. package/schematics/ng-update/index.js +9 -9
  941. package/schematics/ng-update/index.mjs +9 -9
  942. package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.js +24 -24
  943. package/schematics/ng-update/migrations/hammer-gestures-v9/hammer-gestures-migration.mjs +24 -24
  944. package/schematics/ng-update/migrations/hammer-gestures-v9/import-manager.js +5 -5
  945. package/schematics/ng-update/migrations/hammer-gestures-v9/import-manager.mjs +5 -5
  946. package/schematics/ng-update/migrations/misc-checks/misc-class-inheritance.js +2 -2
  947. package/schematics/ng-update/migrations/misc-checks/misc-class-inheritance.mjs +2 -2
  948. package/schematics/ng-update/migrations/misc-checks/misc-imports.js +2 -2
  949. package/schematics/ng-update/migrations/misc-checks/misc-imports.mjs +2 -2
  950. package/schematics/ng-update/migrations/misc-checks/misc-template.js +4 -4
  951. package/schematics/ng-update/migrations/misc-checks/misc-template.mjs +4 -4
  952. package/schematics/ng-update/migrations/misc-ripples-v7/ripple-speed-factor-migration.js +7 -7
  953. package/schematics/ng-update/migrations/misc-ripples-v7/ripple-speed-factor-migration.mjs +7 -7
  954. package/schematics/ng-update/migrations/package-imports-v8/secondary-entry-points-migration.js +2 -3
  955. package/schematics/ng-update/migrations/package-imports-v8/secondary-entry-points-migration.mjs +2 -3
  956. package/schematics/ng-update/migrations/theming-api-v12/migration.d.ts +6 -6
  957. package/schematics/ng-update/migrations/theming-api-v12/migration.js +12 -12
  958. package/schematics/ng-update/migrations/theming-api-v12/migration.mjs +12 -12
  959. package/schematics/ng-update/migrations/theming-api-v12/theming-api-migration.js +3 -3
  960. package/schematics/ng-update/migrations/theming-api-v12/theming-api-migration.mjs +3 -3
  961. package/schematics/ng-update/typescript/module-specifiers.js +3 -3
  962. package/schematics/ng-update/typescript/module-specifiers.mjs +3 -3
  963. package/schematics/package.json +3 -0
  964. package/schematics/paths.js +3 -3
  965. package/schematics/paths.mjs +3 -3
  966. package/select/package.json +5 -5
  967. package/select/select-module.d.ts +10 -7
  968. package/select/select.d.ts +8 -1
  969. package/select/testing/package.json +5 -5
  970. package/sidenav/drawer.d.ts +7 -0
  971. package/sidenav/index.d.ts +0 -1
  972. package/sidenav/package.json +5 -5
  973. package/sidenav/sidenav-module.d.ts +10 -0
  974. package/sidenav/sidenav.d.ts +7 -0
  975. package/sidenav/testing/package.json +5 -5
  976. package/slide-toggle/package.json +5 -5
  977. package/slide-toggle/slide-toggle-module.d.ts +11 -7
  978. package/slide-toggle/slide-toggle-required-validator.d.ts +3 -0
  979. package/slide-toggle/slide-toggle.d.ts +4 -1
  980. package/slide-toggle/testing/package.json +5 -5
  981. package/slider/package.json +5 -5
  982. package/slider/slider-module.d.ts +7 -7
  983. package/slider/slider.d.ts +4 -1
  984. package/slider/testing/package.json +5 -5
  985. package/snack-bar/package.json +5 -5
  986. package/snack-bar/simple-snack-bar.d.ts +3 -7
  987. package/snack-bar/snack-bar-container.d.ts +3 -0
  988. package/snack-bar/snack-bar-module.d.ts +11 -7
  989. package/snack-bar/snack-bar.d.ts +3 -0
  990. package/snack-bar/testing/package.json +5 -5
  991. package/snack-bar/testing/snack-bar-harness.d.ts +8 -9
  992. package/sort/package.json +5 -5
  993. package/sort/sort-header-intl.d.ts +3 -0
  994. package/sort/sort-header.d.ts +4 -1
  995. package/sort/sort-module.d.ts +8 -7
  996. package/sort/sort.d.ts +4 -1
  997. package/sort/testing/package.json +5 -5
  998. package/stepper/package.json +5 -5
  999. package/stepper/step-content.d.ts +3 -0
  1000. package/stepper/step-header.d.ts +6 -1
  1001. package/stepper/step-label.d.ts +3 -7
  1002. package/stepper/stepper-button.d.ts +5 -0
  1003. package/stepper/stepper-icon.d.ts +3 -0
  1004. package/stepper/stepper-intl.d.ts +7 -0
  1005. package/stepper/stepper-module.d.ts +16 -7
  1006. package/stepper/stepper.d.ts +11 -0
  1007. package/stepper/testing/package.json +5 -5
  1008. package/table/cell.d.ts +15 -7
  1009. package/table/package.json +5 -5
  1010. package/table/row.d.ts +15 -0
  1011. package/table/table-module.d.ts +10 -7
  1012. package/table/table.d.ts +5 -0
  1013. package/table/testing/package.json +5 -5
  1014. package/table/text-column.d.ts +3 -0
  1015. package/tabs/index.d.ts +0 -4
  1016. package/tabs/ink-bar.d.ts +3 -0
  1017. package/tabs/package.json +5 -5
  1018. package/tabs/paginated-tab-header.d.ts +3 -0
  1019. package/tabs/public-api.d.ts +1 -1
  1020. package/tabs/tab-body.d.ts +7 -0
  1021. package/tabs/tab-content.d.ts +3 -0
  1022. package/tabs/tab-group.d.ts +6 -1
  1023. package/tabs/tab-header.d.ts +5 -0
  1024. package/tabs/tab-label-wrapper.d.ts +4 -1
  1025. package/tabs/tab-label.d.ts +11 -1
  1026. package/tabs/tab-nav-bar/tab-nav-bar.d.ts +10 -1
  1027. package/tabs/tab.d.ts +5 -2
  1028. package/tabs/tabs-module.d.ts +18 -7
  1029. package/tabs/testing/package.json +5 -5
  1030. package/toolbar/package.json +5 -5
  1031. package/toolbar/testing/package.json +5 -5
  1032. package/toolbar/toolbar-module.d.ts +6 -7
  1033. package/toolbar/toolbar.d.ts +6 -1
  1034. package/tooltip/package.json +5 -5
  1035. package/tooltip/testing/package.json +5 -5
  1036. package/tooltip/tooltip-module.d.ts +10 -7
  1037. package/tooltip/tooltip.d.ts +11 -2
  1038. package/tree/node.d.ts +8 -1
  1039. package/tree/outlet.d.ts +3 -0
  1040. package/tree/package.json +5 -5
  1041. package/tree/padding.d.ts +3 -0
  1042. package/tree/testing/package.json +5 -5
  1043. package/tree/toggle.d.ts +3 -7
  1044. package/tree/tree-module.d.ts +11 -7
  1045. package/tree/tree.d.ts +3 -0
  1046. package/autocomplete/index.metadata.json +0 -1
  1047. package/badge/index.metadata.json +0 -1
  1048. package/bottom-sheet/index.metadata.json +0 -1
  1049. package/bundles/material-autocomplete-testing.umd.js +0 -564
  1050. package/bundles/material-autocomplete-testing.umd.js.map +0 -1
  1051. package/bundles/material-autocomplete.umd.js +0 -1266
  1052. package/bundles/material-autocomplete.umd.js.map +0 -1
  1053. package/bundles/material-badge-testing.umd.js +0 -474
  1054. package/bundles/material-badge-testing.umd.js.map +0 -1
  1055. package/bundles/material-badge.umd.js +0 -606
  1056. package/bundles/material-badge.umd.js.map +0 -1
  1057. package/bundles/material-bottom-sheet-testing.umd.js +0 -396
  1058. package/bundles/material-bottom-sheet-testing.umd.js.map +0 -1
  1059. package/bundles/material-bottom-sheet.umd.js +0 -955
  1060. package/bundles/material-bottom-sheet.umd.js.map +0 -1
  1061. package/bundles/material-button-testing.umd.js +0 -444
  1062. package/bundles/material-button-testing.umd.js.map +0 -1
  1063. package/bundles/material-button-toggle-testing.umd.js +0 -628
  1064. package/bundles/material-button-toggle-testing.umd.js.map +0 -1
  1065. package/bundles/material-button-toggle.umd.js +0 -850
  1066. package/bundles/material-button-toggle.umd.js.map +0 -1
  1067. package/bundles/material-button.umd.js +0 -545
  1068. package/bundles/material-button.umd.js.map +0 -1
  1069. package/bundles/material-card-testing.umd.js +0 -408
  1070. package/bundles/material-card-testing.umd.js.map +0 -1
  1071. package/bundles/material-card.umd.js +0 -337
  1072. package/bundles/material-card.umd.js.map +0 -1
  1073. package/bundles/material-checkbox-testing.umd.js +0 -615
  1074. package/bundles/material-checkbox-testing.umd.js.map +0 -1
  1075. package/bundles/material-checkbox.umd.js +0 -829
  1076. package/bundles/material-checkbox.umd.js.map +0 -1
  1077. package/bundles/material-chips-testing.umd.js +0 -1023
  1078. package/bundles/material-chips-testing.umd.js.map +0 -1
  1079. package/bundles/material-chips.umd.js +0 -1753
  1080. package/bundles/material-chips.umd.js.map +0 -1
  1081. package/bundles/material-core-testing.umd.js +0 -518
  1082. package/bundles/material-core-testing.umd.js.map +0 -1
  1083. package/bundles/material-core.umd.js +0 -2186
  1084. package/bundles/material-core.umd.js.map +0 -1
  1085. package/bundles/material-datepicker-testing.umd.js +0 -1366
  1086. package/bundles/material-datepicker-testing.umd.js.map +0 -1
  1087. package/bundles/material-datepicker.umd.js +0 -4344
  1088. package/bundles/material-datepicker.umd.js.map +0 -1
  1089. package/bundles/material-dialog-testing.umd.js +0 -500
  1090. package/bundles/material-dialog-testing.umd.js.map +0 -1
  1091. package/bundles/material-dialog.umd.js +0 -1487
  1092. package/bundles/material-dialog.umd.js.map +0 -1
  1093. package/bundles/material-divider-testing.umd.js +0 -380
  1094. package/bundles/material-divider-testing.umd.js.map +0 -1
  1095. package/bundles/material-divider.umd.js +0 -95
  1096. package/bundles/material-divider.umd.js.map +0 -1
  1097. package/bundles/material-expansion-testing.umd.js +0 -627
  1098. package/bundles/material-expansion-testing.umd.js.map +0 -1
  1099. package/bundles/material-expansion.umd.js +0 -949
  1100. package/bundles/material-expansion.umd.js.map +0 -1
  1101. package/bundles/material-form-field-testing-control.umd.js +0 -350
  1102. package/bundles/material-form-field-testing-control.umd.js.map +0 -1
  1103. package/bundles/material-form-field-testing.umd.js +0 -708
  1104. package/bundles/material-form-field-testing.umd.js.map +0 -1
  1105. package/bundles/material-form-field.umd.js +0 -1131
  1106. package/bundles/material-form-field.umd.js.map +0 -1
  1107. package/bundles/material-grid-list-testing.umd.js +0 -566
  1108. package/bundles/material-grid-list-testing.umd.js.map +0 -1
  1109. package/bundles/material-grid-list.umd.js +0 -1070
  1110. package/bundles/material-grid-list.umd.js.map +0 -1
  1111. package/bundles/material-icon-testing.umd.js +0 -527
  1112. package/bundles/material-icon-testing.umd.js.map +0 -1
  1113. package/bundles/material-icon.umd.js +0 -1391
  1114. package/bundles/material-icon.umd.js.map +0 -1
  1115. package/bundles/material-input-testing.umd.js +0 -806
  1116. package/bundles/material-input-testing.umd.js.map +0 -1
  1117. package/bundles/material-input.umd.js +0 -875
  1118. package/bundles/material-input.umd.js.map +0 -1
  1119. package/bundles/material-list-testing.umd.js +0 -1092
  1120. package/bundles/material-list-testing.umd.js.map +0 -1
  1121. package/bundles/material-list.umd.js +0 -1284
  1122. package/bundles/material-list.umd.js.map +0 -1
  1123. package/bundles/material-menu-testing.umd.js +0 -722
  1124. package/bundles/material-menu-testing.umd.js.map +0 -1
  1125. package/bundles/material-menu.umd.js +0 -1661
  1126. package/bundles/material-menu.umd.js.map +0 -1
  1127. package/bundles/material-paginator-testing.umd.js +0 -504
  1128. package/bundles/material-paginator-testing.umd.js.map +0 -1
  1129. package/bundles/material-paginator.umd.js +0 -746
  1130. package/bundles/material-paginator.umd.js.map +0 -1
  1131. package/bundles/material-progress-bar-testing.umd.js +0 -395
  1132. package/bundles/material-progress-bar-testing.umd.js.map +0 -1
  1133. package/bundles/material-progress-bar.umd.js +0 -546
  1134. package/bundles/material-progress-bar.umd.js.map +0 -1
  1135. package/bundles/material-progress-spinner-testing.umd.js +0 -399
  1136. package/bundles/material-progress-spinner-testing.umd.js.map +0 -1
  1137. package/bundles/material-progress-spinner.umd.js +0 -631
  1138. package/bundles/material-progress-spinner.umd.js.map +0 -1
  1139. package/bundles/material-radio-testing.umd.js +0 -812
  1140. package/bundles/material-radio-testing.umd.js.map +0 -1
  1141. package/bundles/material-radio.umd.js +0 -971
  1142. package/bundles/material-radio.umd.js.map +0 -1
  1143. package/bundles/material-select-testing.umd.js +0 -620
  1144. package/bundles/material-select-testing.umd.js.map +0 -1
  1145. package/bundles/material-select.umd.js +0 -1665
  1146. package/bundles/material-select.umd.js.map +0 -1
  1147. package/bundles/material-sidenav-testing.umd.js +0 -603
  1148. package/bundles/material-sidenav-testing.umd.js.map +0 -1
  1149. package/bundles/material-sidenav.umd.js +0 -1368
  1150. package/bundles/material-sidenav.umd.js.map +0 -1
  1151. package/bundles/material-slide-toggle-testing.umd.js +0 -582
  1152. package/bundles/material-slide-toggle-testing.umd.js.map +0 -1
  1153. package/bundles/material-slide-toggle.umd.js +0 -670
  1154. package/bundles/material-slide-toggle.umd.js.map +0 -1
  1155. package/bundles/material-slider-testing.umd.js +0 -587
  1156. package/bundles/material-slider-testing.umd.js.map +0 -1
  1157. package/bundles/material-slider.umd.js +0 -1186
  1158. package/bundles/material-slider.umd.js.map +0 -1
  1159. package/bundles/material-snack-bar-testing.umd.js +0 -554
  1160. package/bundles/material-snack-bar-testing.umd.js.map +0 -1
  1161. package/bundles/material-snack-bar.umd.js +0 -1076
  1162. package/bundles/material-snack-bar.umd.js.map +0 -1
  1163. package/bundles/material-sort-testing.umd.js +0 -493
  1164. package/bundles/material-sort-testing.umd.js.map +0 -1
  1165. package/bundles/material-sort.umd.js +0 -943
  1166. package/bundles/material-sort.umd.js.map +0 -1
  1167. package/bundles/material-stepper-testing.umd.js +0 -703
  1168. package/bundles/material-stepper-testing.umd.js.map +0 -1
  1169. package/bundles/material-stepper.umd.js +0 -893
  1170. package/bundles/material-stepper.umd.js.map +0 -1
  1171. package/bundles/material-table-testing.umd.js +0 -700
  1172. package/bundles/material-table-testing.umd.js.map +0 -1
  1173. package/bundles/material-table.umd.js +0 -1121
  1174. package/bundles/material-table.umd.js.map +0 -1
  1175. package/bundles/material-tabs-testing.umd.js +0 -744
  1176. package/bundles/material-tabs-testing.umd.js.map +0 -1
  1177. package/bundles/material-tabs.umd.js +0 -2169
  1178. package/bundles/material-tabs.umd.js.map +0 -1
  1179. package/bundles/material-toolbar-testing.umd.js +0 -406
  1180. package/bundles/material-toolbar-testing.umd.js.map +0 -1
  1181. package/bundles/material-toolbar.umd.js +0 -454
  1182. package/bundles/material-toolbar.umd.js.map +0 -1
  1183. package/bundles/material-tooltip-testing.umd.js +0 -460
  1184. package/bundles/material-tooltip-testing.umd.js.map +0 -1
  1185. package/bundles/material-tooltip.umd.js +0 -1170
  1186. package/bundles/material-tooltip.umd.js.map +0 -1
  1187. package/bundles/material-tree-testing.umd.js +0 -636
  1188. package/bundles/material-tree-testing.umd.js.map +0 -1
  1189. package/bundles/material-tree.umd.js +0 -837
  1190. package/bundles/material-tree.umd.js.map +0 -1
  1191. package/bundles/material.umd.js +0 -26
  1192. package/bundles/material.umd.js.map +0 -1
  1193. package/button/index.metadata.json +0 -1
  1194. package/button-toggle/index.metadata.json +0 -1
  1195. package/card/index.metadata.json +0 -1
  1196. package/checkbox/index.metadata.json +0 -1
  1197. package/chips/index.metadata.json +0 -1
  1198. package/core/index.metadata.json +0 -1
  1199. package/datepicker/index.metadata.json +0 -1
  1200. package/dialog/index.metadata.json +0 -1
  1201. package/divider/index.metadata.json +0 -1
  1202. package/esm2015/autocomplete/autocomplete-module.js +0 -38
  1203. package/esm2015/autocomplete/autocomplete-origin.js +0 -35
  1204. package/esm2015/autocomplete/autocomplete-trigger.js +0 -627
  1205. package/esm2015/autocomplete/autocomplete.externs.js +0 -6
  1206. package/esm2015/autocomplete/autocomplete.js +0 -202
  1207. package/esm2015/autocomplete/testing/autocomplete-harness.js +0 -120
  1208. package/esm2015/autocomplete/testing/testing.externs.js +0 -0
  1209. package/esm2015/badge/badge-module.js +0 -24
  1210. package/esm2015/badge/badge.externs.js +0 -6
  1211. package/esm2015/badge/badge.js +0 -230
  1212. package/esm2015/badge/testing/badge-harness.js +0 -85
  1213. package/esm2015/badge/testing/testing.externs.js +0 -0
  1214. package/esm2015/bottom-sheet/bottom-sheet-container.js +0 -253
  1215. package/esm2015/bottom-sheet/bottom-sheet-module.js +0 -27
  1216. package/esm2015/bottom-sheet/bottom-sheet-ref.js +0 -91
  1217. package/esm2015/bottom-sheet/bottom-sheet.externs.js +0 -6
  1218. package/esm2015/bottom-sheet/bottom-sheet.js +0 -167
  1219. package/esm2015/bottom-sheet/testing/bottom-sheet-harness.js +0 -40
  1220. package/esm2015/bottom-sheet/testing/testing.externs.js +0 -0
  1221. package/esm2015/button/button-module.js +0 -30
  1222. package/esm2015/button/button.externs.js +0 -6
  1223. package/esm2015/button/button.js +0 -163
  1224. package/esm2015/button/testing/button-harness.js +0 -64
  1225. package/esm2015/button/testing/testing.externs.js +0 -0
  1226. package/esm2015/button-toggle/button-toggle-module.js +0 -20
  1227. package/esm2015/button-toggle/button-toggle.externs.js +0 -6
  1228. package/esm2015/button-toggle/button-toggle.js +0 -441
  1229. package/esm2015/button-toggle/testing/button-toggle-group-harness.js +0 -54
  1230. package/esm2015/button-toggle/testing/button-toggle-harness.js +0 -125
  1231. package/esm2015/button-toggle/testing/testing.externs.js +0 -0
  1232. package/esm2015/card/card-module.js +0 -40
  1233. package/esm2015/card/card.externs.js +0 -6
  1234. package/esm2015/card/card.js +0 -223
  1235. package/esm2015/card/testing/card-harness.js +0 -52
  1236. package/esm2015/card/testing/testing.externs.js +0 -0
  1237. package/esm2015/checkbox/checkbox-module.js +0 -34
  1238. package/esm2015/checkbox/checkbox-required-validator.js +0 -29
  1239. package/esm2015/checkbox/checkbox.externs.js +0 -6
  1240. package/esm2015/checkbox/checkbox.js +0 -385
  1241. package/esm2015/checkbox/testing/checkbox-harness.js +0 -156
  1242. package/esm2015/checkbox/testing/testing.externs.js +0 -0
  1243. package/esm2015/chips/chip-input.js +0 -180
  1244. package/esm2015/chips/chip-list.js +0 -663
  1245. package/esm2015/chips/chip.js +0 -394
  1246. package/esm2015/chips/chips-module.js +0 -43
  1247. package/esm2015/chips/chips.externs.js +0 -6
  1248. package/esm2015/chips/testing/chip-harness.js +0 -110
  1249. package/esm2015/chips/testing/chip-input-harness.js +0 -101
  1250. package/esm2015/chips/testing/chip-list-harness.js +0 -99
  1251. package/esm2015/chips/testing/chip-listbox-harness.js +0 -49
  1252. package/esm2015/chips/testing/chip-option-harness.js +0 -54
  1253. package/esm2015/chips/testing/chip-remove-harness.js +0 -29
  1254. package/esm2015/chips/testing/testing.externs.js +0 -0
  1255. package/esm2015/core/common-behaviors/color.js +0 -31
  1256. package/esm2015/core/common-behaviors/common-module.js +0 -122
  1257. package/esm2015/core/common-behaviors/disable-ripple.js +0 -20
  1258. package/esm2015/core/common-behaviors/disabled.js +0 -19
  1259. package/esm2015/core/common-behaviors/error-state.js +0 -36
  1260. package/esm2015/core/common-behaviors/index.js +0 -15
  1261. package/esm2015/core/common-behaviors/initialized.js +0 -58
  1262. package/esm2015/core/common-behaviors/tabindex.js +0 -23
  1263. package/esm2015/core/core.externs.js +0 -6
  1264. package/esm2015/core/datetime/index.js +0 -38
  1265. package/esm2015/core/datetime/native-date-adapter.js +0 -213
  1266. package/esm2015/core/error/error-options.js +0 -29
  1267. package/esm2015/core/index.js +0 -6
  1268. package/esm2015/core/line/line.js +0 -57
  1269. package/esm2015/core/option/index.js +0 -27
  1270. package/esm2015/core/option/optgroup.js +0 -84
  1271. package/esm2015/core/option/option.js +0 -274
  1272. package/esm2015/core/ripple/index.js +0 -24
  1273. package/esm2015/core/ripple/ripple-renderer.js +0 -261
  1274. package/esm2015/core/ripple/ripple.js +0 -128
  1275. package/esm2015/core/selection/index.js +0 -21
  1276. package/esm2015/core/selection/pseudo-checkbox/pseudo-checkbox.js +0 -55
  1277. package/esm2015/core/testing/optgroup-harness.js +0 -51
  1278. package/esm2015/core/testing/option-harness.js +0 -67
  1279. package/esm2015/core/testing/testing.externs.js +0 -0
  1280. package/esm2015/core/version.js +0 -11
  1281. package/esm2015/datepicker/calendar-body.js +0 -291
  1282. package/esm2015/datepicker/calendar.js +0 -330
  1283. package/esm2015/datepicker/date-range-input-parts.js +0 -315
  1284. package/esm2015/datepicker/date-range-input.js +0 -316
  1285. package/esm2015/datepicker/date-range-picker.js +0 -40
  1286. package/esm2015/datepicker/date-range-selection-strategy.js +0 -58
  1287. package/esm2015/datepicker/date-selection-model.js +0 -189
  1288. package/esm2015/datepicker/datepicker-actions.js +0 -89
  1289. package/esm2015/datepicker/datepicker-base.js +0 -542
  1290. package/esm2015/datepicker/datepicker-input-base.js +0 -290
  1291. package/esm2015/datepicker/datepicker-input.js +0 -164
  1292. package/esm2015/datepicker/datepicker-intl.js +0 -51
  1293. package/esm2015/datepicker/datepicker-module.js +0 -93
  1294. package/esm2015/datepicker/datepicker-toggle.js +0 -104
  1295. package/esm2015/datepicker/datepicker.externs.js +0 -6
  1296. package/esm2015/datepicker/datepicker.js +0 -30
  1297. package/esm2015/datepicker/index.js +0 -9
  1298. package/esm2015/datepicker/month-view.js +0 -344
  1299. package/esm2015/datepicker/multi-year-view.js +0 -280
  1300. package/esm2015/datepicker/testing/calendar-cell-harness.js +0 -181
  1301. package/esm2015/datepicker/testing/calendar-harness.js +0 -91
  1302. package/esm2015/datepicker/testing/date-range-input-harness.js +0 -116
  1303. package/esm2015/datepicker/testing/datepicker-input-harness-base.js +0 -102
  1304. package/esm2015/datepicker/testing/datepicker-input-harness.js +0 -69
  1305. package/esm2015/datepicker/testing/datepicker-toggle-harness.js +0 -48
  1306. package/esm2015/datepicker/testing/datepicker-trigger-harness-base.js +0 -77
  1307. package/esm2015/datepicker/testing/testing.externs.js +0 -0
  1308. package/esm2015/datepicker/year-view.js +0 -268
  1309. package/esm2015/dialog/dialog-container.js +0 -295
  1310. package/esm2015/dialog/dialog-content-directives.js +0 -159
  1311. package/esm2015/dialog/dialog-module.js +0 -46
  1312. package/esm2015/dialog/dialog-ref.js +0 -196
  1313. package/esm2015/dialog/dialog.externs.js +0 -6
  1314. package/esm2015/dialog/dialog.js +0 -353
  1315. package/esm2015/dialog/testing/dialog-harness.js +0 -103
  1316. package/esm2015/dialog/testing/testing.externs.js +0 -0
  1317. package/esm2015/divider/divider-module.js +0 -20
  1318. package/esm2015/divider/divider.externs.js +0 -6
  1319. package/esm2015/divider/divider.js +0 -43
  1320. package/esm2015/divider/testing/divider-harness.js +0 -27
  1321. package/esm2015/divider/testing/testing.externs.js +0 -0
  1322. package/esm2015/expansion/accordion.js +0 -83
  1323. package/esm2015/expansion/expansion-module.js +0 -42
  1324. package/esm2015/expansion/expansion-panel-content.js +0 -26
  1325. package/esm2015/expansion/expansion-panel-header.js +0 -214
  1326. package/esm2015/expansion/expansion-panel.js +0 -186
  1327. package/esm2015/expansion/expansion.externs.js +0 -6
  1328. package/esm2015/expansion/testing/accordion-harness.js +0 -36
  1329. package/esm2015/expansion/testing/expansion-harness.js +0 -149
  1330. package/esm2015/expansion/testing/testing.externs.js +0 -0
  1331. package/esm2015/form-field/error.js +0 -45
  1332. package/esm2015/form-field/form-field-control.js +0 -15
  1333. package/esm2015/form-field/form-field-module.js +0 -49
  1334. package/esm2015/form-field/form-field.externs.js +0 -6
  1335. package/esm2015/form-field/form-field.js +0 -482
  1336. package/esm2015/form-field/hint.js +0 -45
  1337. package/esm2015/form-field/label.js +0 -17
  1338. package/esm2015/form-field/placeholder.js +0 -22
  1339. package/esm2015/form-field/prefix.js +0 -24
  1340. package/esm2015/form-field/suffix.js +0 -24
  1341. package/esm2015/form-field/testing/control/control.externs.js +0 -0
  1342. package/esm2015/form-field/testing/form-field-harness.js +0 -218
  1343. package/esm2015/form-field/testing/testing.externs.js +0 -0
  1344. package/esm2015/grid-list/grid-list-module.js +0 -37
  1345. package/esm2015/grid-list/grid-list.externs.js +0 -6
  1346. package/esm2015/grid-list/grid-list.js +0 -135
  1347. package/esm2015/grid-list/grid-tile.js +0 -116
  1348. package/esm2015/grid-list/index.js +0 -6
  1349. package/esm2015/grid-list/testing/grid-list-harness.js +0 -79
  1350. package/esm2015/grid-list/testing/grid-tile-harness.js +0 -80
  1351. package/esm2015/grid-list/testing/testing.externs.js +0 -0
  1352. package/esm2015/icon/icon-module.js +0 -20
  1353. package/esm2015/icon/icon-registry.js +0 -581
  1354. package/esm2015/icon/icon.externs.js +0 -6
  1355. package/esm2015/icon/icon.js +0 -362
  1356. package/esm2015/icon/testing/fake-icon-registry.js +0 -85
  1357. package/esm2015/icon/testing/icon-harness.js +0 -63
  1358. package/esm2015/icon/testing/testing.externs.js +0 -6
  1359. package/esm2015/icon/trusted-types.js +0 -44
  1360. package/esm2015/input/autosize.js +0 -44
  1361. package/esm2015/input/input-module.js +0 -35
  1362. package/esm2015/input/input.externs.js +0 -6
  1363. package/esm2015/input/input.js +0 -395
  1364. package/esm2015/input/public-api.js +0 -13
  1365. package/esm2015/input/testing/input-harness.js +0 -138
  1366. package/esm2015/input/testing/native-option-harness.js +0 -51
  1367. package/esm2015/input/testing/native-select-harness.js +0 -100
  1368. package/esm2015/input/testing/testing.externs.js +0 -0
  1369. package/esm2015/list/list-module.js +0 -45
  1370. package/esm2015/list/list.externs.js +0 -6
  1371. package/esm2015/list/list.js +0 -218
  1372. package/esm2015/list/selection-list.js +0 -608
  1373. package/esm2015/list/testing/action-list-harness.js +0 -68
  1374. package/esm2015/list/testing/list-harness-base.js +0 -97
  1375. package/esm2015/list/testing/list-item-harness-base.js +0 -85
  1376. package/esm2015/list/testing/nav-list-harness.js +0 -75
  1377. package/esm2015/list/testing/selection-list-harness.js +0 -152
  1378. package/esm2015/list/testing/testing.externs.js +0 -0
  1379. package/esm2015/material.externs.js +0 -0
  1380. package/esm2015/menu/index.js +0 -7
  1381. package/esm2015/menu/menu-content.js +0 -92
  1382. package/esm2015/menu/menu-item.js +0 -164
  1383. package/esm2015/menu/menu-module.js +0 -49
  1384. package/esm2015/menu/menu-trigger.js +0 -493
  1385. package/esm2015/menu/menu.externs.js +0 -6
  1386. package/esm2015/menu/menu.js +0 -381
  1387. package/esm2015/menu/public-api.js +0 -16
  1388. package/esm2015/menu/testing/menu-harness.js +0 -223
  1389. package/esm2015/menu/testing/testing.externs.js +0 -0
  1390. package/esm2015/paginator/paginator-intl.js +0 -62
  1391. package/esm2015/paginator/paginator-module.js +0 -32
  1392. package/esm2015/paginator/paginator.externs.js +0 -6
  1393. package/esm2015/paginator/paginator.js +0 -263
  1394. package/esm2015/paginator/testing/paginator-harness.js +0 -106
  1395. package/esm2015/paginator/testing/testing.externs.js +0 -0
  1396. package/esm2015/progress-bar/progress-bar-module.js +0 -21
  1397. package/esm2015/progress-bar/progress-bar.externs.js +0 -6
  1398. package/esm2015/progress-bar/progress-bar.js +0 -179
  1399. package/esm2015/progress-bar/testing/progress-bar-harness.js +0 -39
  1400. package/esm2015/progress-bar/testing/testing.externs.js +0 -0
  1401. package/esm2015/progress-spinner/progress-spinner-module.js +0 -28
  1402. package/esm2015/progress-spinner/progress-spinner.externs.js +0 -6
  1403. package/esm2015/progress-spinner/progress-spinner.js +0 -274
  1404. package/esm2015/progress-spinner/testing/progress-spinner-harness.js +0 -40
  1405. package/esm2015/progress-spinner/testing/testing.externs.js +0 -0
  1406. package/esm2015/radio/radio-module.js +0 -20
  1407. package/esm2015/radio/radio.externs.js +0 -6
  1408. package/esm2015/radio/radio.js +0 -546
  1409. package/esm2015/radio/testing/radio-harness.js +0 -272
  1410. package/esm2015/radio/testing/testing.externs.js +0 -0
  1411. package/esm2015/select/select-module.js +0 -37
  1412. package/esm2015/select/select.externs.js +0 -6
  1413. package/esm2015/select/select.js +0 -1138
  1414. package/esm2015/select/testing/select-harness.js +0 -157
  1415. package/esm2015/select/testing/testing.externs.js +0 -0
  1416. package/esm2015/sidenav/drawer.js +0 -766
  1417. package/esm2015/sidenav/index.js +0 -6
  1418. package/esm2015/sidenav/sidenav-module.js +0 -45
  1419. package/esm2015/sidenav/sidenav.externs.js +0 -6
  1420. package/esm2015/sidenav/sidenav.js +0 -118
  1421. package/esm2015/sidenav/testing/drawer-container-harness.js +0 -41
  1422. package/esm2015/sidenav/testing/drawer-harness.js +0 -57
  1423. package/esm2015/sidenav/testing/sidenav-container-harness.js +0 -41
  1424. package/esm2015/sidenav/testing/sidenav-harness.js +0 -32
  1425. package/esm2015/sidenav/testing/testing.externs.js +0 -0
  1426. package/esm2015/slide-toggle/slide-toggle-module.js +0 -40
  1427. package/esm2015/slide-toggle/slide-toggle-required-validator.js +0 -32
  1428. package/esm2015/slide-toggle/slide-toggle.externs.js +0 -6
  1429. package/esm2015/slide-toggle/slide-toggle.js +0 -236
  1430. package/esm2015/slide-toggle/testing/slide-toggle-harness.js +0 -139
  1431. package/esm2015/slide-toggle/testing/testing.externs.js +0 -0
  1432. package/esm2015/slider/slider-module.js +0 -21
  1433. package/esm2015/slider/slider.externs.js +0 -6
  1434. package/esm2015/slider/slider.js +0 -788
  1435. package/esm2015/slider/testing/slider-harness.js +0 -141
  1436. package/esm2015/slider/testing/testing.externs.js +0 -0
  1437. package/esm2015/snack-bar/simple-snack-bar.js +0 -45
  1438. package/esm2015/snack-bar/snack-bar-container.js +0 -224
  1439. package/esm2015/snack-bar/snack-bar-module.js +0 -32
  1440. package/esm2015/snack-bar/snack-bar-ref.js +0 -90
  1441. package/esm2015/snack-bar/snack-bar.externs.js +0 -6
  1442. package/esm2015/snack-bar/snack-bar.js +0 -265
  1443. package/esm2015/snack-bar/testing/snack-bar-harness.js +0 -142
  1444. package/esm2015/snack-bar/testing/testing.externs.js +0 -0
  1445. package/esm2015/sort/sort-header-intl.js +0 -41
  1446. package/esm2015/sort/sort-header.js +0 -268
  1447. package/esm2015/sort/sort-module.js +0 -24
  1448. package/esm2015/sort/sort.externs.js +0 -6
  1449. package/esm2015/sort/sort.js +0 -140
  1450. package/esm2015/sort/testing/sort-harness.js +0 -41
  1451. package/esm2015/sort/testing/sort-header-harness.js +0 -67
  1452. package/esm2015/sort/testing/testing.externs.js +0 -0
  1453. package/esm2015/stepper/step-content.js +0 -25
  1454. package/esm2015/stepper/step-header.js +0 -108
  1455. package/esm2015/stepper/step-label.js +0 -17
  1456. package/esm2015/stepper/stepper-button.js +0 -36
  1457. package/esm2015/stepper/stepper-icon.js +0 -28
  1458. package/esm2015/stepper/stepper-intl.js +0 -37
  1459. package/esm2015/stepper/stepper-module.js +0 -61
  1460. package/esm2015/stepper/stepper.externs.js +0 -6
  1461. package/esm2015/stepper/stepper.js +0 -187
  1462. package/esm2015/stepper/testing/step-harness.js +0 -111
  1463. package/esm2015/stepper/testing/stepper-button-harnesses.js +0 -55
  1464. package/esm2015/stepper/testing/stepper-harness.js +0 -57
  1465. package/esm2015/stepper/testing/testing.externs.js +0 -0
  1466. package/esm2015/table/cell.js +0 -114
  1467. package/esm2015/table/row.js +0 -116
  1468. package/esm2015/table/table-data-source.js +0 -312
  1469. package/esm2015/table/table-module.js +0 -50
  1470. package/esm2015/table/table.externs.js +0 -6
  1471. package/esm2015/table/table.js +0 -63
  1472. package/esm2015/table/testing/cell-harness.js +0 -77
  1473. package/esm2015/table/testing/row-harness.js +0 -91
  1474. package/esm2015/table/testing/table-harness.js +0 -99
  1475. package/esm2015/table/testing/testing.externs.js +0 -0
  1476. package/esm2015/table/text-column.js +0 -44
  1477. package/esm2015/tabs/index.js +0 -9
  1478. package/esm2015/tabs/ink-bar.js +0 -87
  1479. package/esm2015/tabs/paginated-tab-header.js +0 -477
  1480. package/esm2015/tabs/public-api.js +0 -20
  1481. package/esm2015/tabs/tab-body.js +0 -212
  1482. package/esm2015/tabs/tab-content.js +0 -31
  1483. package/esm2015/tabs/tab-group.js +0 -357
  1484. package/esm2015/tabs/tab-header.js +0 -94
  1485. package/esm2015/tabs/tab-label-wrapper.js +0 -47
  1486. package/esm2015/tabs/tab-label.js +0 -25
  1487. package/esm2015/tabs/tab-nav-bar/tab-nav-bar.js +0 -241
  1488. package/esm2015/tabs/tab.js +0 -106
  1489. package/esm2015/tabs/tabs-module.js +0 -60
  1490. package/esm2015/tabs/tabs.externs.js +0 -6
  1491. package/esm2015/tabs/testing/tab-group-harness.js +0 -65
  1492. package/esm2015/tabs/testing/tab-harness.js +0 -85
  1493. package/esm2015/tabs/testing/tab-link-harness.js +0 -51
  1494. package/esm2015/tabs/testing/tab-nav-bar-harness.js +0 -61
  1495. package/esm2015/tabs/testing/testing.externs.js +0 -0
  1496. package/esm2015/toolbar/testing/testing.externs.js +0 -0
  1497. package/esm2015/toolbar/testing/toolbar-harness.js +0 -47
  1498. package/esm2015/toolbar/toolbar-module.js +0 -20
  1499. package/esm2015/toolbar/toolbar.externs.js +0 -6
  1500. package/esm2015/toolbar/toolbar.js +0 -91
  1501. package/esm2015/tooltip/testing/testing.externs.js +0 -0
  1502. package/esm2015/tooltip/testing/tooltip-harness.js +0 -68
  1503. package/esm2015/tooltip/tooltip-module.js +0 -31
  1504. package/esm2015/tooltip/tooltip.externs.js +0 -6
  1505. package/esm2015/tooltip/tooltip.js +0 -737
  1506. package/esm2015/tree/node.js +0 -131
  1507. package/esm2015/tree/outlet.js +0 -33
  1508. package/esm2015/tree/padding.js +0 -31
  1509. package/esm2015/tree/testing/node-harness.js +0 -84
  1510. package/esm2015/tree/testing/testing.externs.js +0 -0
  1511. package/esm2015/tree/testing/tree-harness.js +0 -129
  1512. package/esm2015/tree/toggle.js +0 -32
  1513. package/esm2015/tree/tree-module.js +0 -34
  1514. package/esm2015/tree/tree.externs.js +0 -6
  1515. package/esm2015/tree/tree.js +0 -43
  1516. package/expansion/index.metadata.json +0 -1
  1517. package/fesm2015/autocomplete/testing.js +0 -147
  1518. package/fesm2015/autocomplete/testing.js.map +0 -1
  1519. package/fesm2015/autocomplete.js +0 -901
  1520. package/fesm2015/autocomplete.js.map +0 -1
  1521. package/fesm2015/badge/testing.js +0 -112
  1522. package/fesm2015/badge/testing.js.map +0 -1
  1523. package/fesm2015/badge.js +0 -265
  1524. package/fesm2015/badge.js.map +0 -1
  1525. package/fesm2015/bottom-sheet/testing.js +0 -67
  1526. package/fesm2015/bottom-sheet/testing.js.map +0 -1
  1527. package/fesm2015/bottom-sheet.js +0 -603
  1528. package/fesm2015/bottom-sheet.js.map +0 -1
  1529. package/fesm2015/button/testing.js +0 -91
  1530. package/fesm2015/button/testing.js.map +0 -1
  1531. package/fesm2015/button-toggle/testing.js +0 -211
  1532. package/fesm2015/button-toggle/testing.js.map +0 -1
  1533. package/fesm2015/button-toggle.js +0 -473
  1534. package/fesm2015/button-toggle.js.map +0 -1
  1535. package/fesm2015/button.js +0 -205
  1536. package/fesm2015/button.js.map +0 -1
  1537. package/fesm2015/card/testing.js +0 -79
  1538. package/fesm2015/card/testing.js.map +0 -1
  1539. package/fesm2015/card.js +0 -276
  1540. package/fesm2015/card.js.map +0 -1
  1541. package/fesm2015/checkbox/testing.js +0 -183
  1542. package/fesm2015/checkbox/testing.js.map +0 -1
  1543. package/fesm2015/checkbox.js +0 -476
  1544. package/fesm2015/checkbox.js.map +0 -1
  1545. package/fesm2015/chips/testing.js +0 -465
  1546. package/fesm2015/chips/testing.js.map +0 -1
  1547. package/fesm2015/chips.js +0 -1286
  1548. package/fesm2015/chips.js.map +0 -1
  1549. package/fesm2015/core/testing.js +0 -150
  1550. package/fesm2015/core/testing.js.map +0 -1
  1551. package/fesm2015/core.js +0 -1692
  1552. package/fesm2015/core.js.map +0 -1
  1553. package/fesm2015/datepicker/testing.js +0 -692
  1554. package/fesm2015/datepicker/testing.js.map +0 -1
  1555. package/fesm2015/datepicker.js +0 -3745
  1556. package/fesm2015/datepicker.js.map +0 -1
  1557. package/fesm2015/dialog/testing.js +0 -130
  1558. package/fesm2015/dialog/testing.js.map +0 -1
  1559. package/fesm2015/dialog.js +0 -1127
  1560. package/fesm2015/dialog.js.map +0 -1
  1561. package/fesm2015/divider/testing.js +0 -54
  1562. package/fesm2015/divider/testing.js.map +0 -1
  1563. package/fesm2015/divider.js +0 -76
  1564. package/fesm2015/divider.js.map +0 -1
  1565. package/fesm2015/expansion/testing.js +0 -209
  1566. package/fesm2015/expansion/testing.js.map +0 -1
  1567. package/fesm2015/expansion.js +0 -600
  1568. package/fesm2015/expansion.js.map +0 -1
  1569. package/fesm2015/form-field/testing/control.js +0 -26
  1570. package/fesm2015/form-field/testing/control.js.map +0 -1
  1571. package/fesm2015/form-field/testing.js +0 -246
  1572. package/fesm2015/form-field/testing.js.map +0 -1
  1573. package/fesm2015/form-field.js +0 -757
  1574. package/fesm2015/form-field.js.map +0 -1
  1575. package/fesm2015/grid-list/testing.js +0 -183
  1576. package/fesm2015/grid-list/testing.js.map +0 -1
  1577. package/fesm2015/grid-list.js +0 -680
  1578. package/fesm2015/grid-list.js.map +0 -1
  1579. package/fesm2015/icon/testing.js +0 -171
  1580. package/fesm2015/icon/testing.js.map +0 -1
  1581. package/fesm2015/icon.js +0 -1012
  1582. package/fesm2015/icon.js.map +0 -1
  1583. package/fesm2015/input/testing.js +0 -318
  1584. package/fesm2015/input/testing.js.map +0 -1
  1585. package/fesm2015/input.js +0 -506
  1586. package/fesm2015/input.js.map +0 -1
  1587. package/fesm2015/list/testing.js +0 -529
  1588. package/fesm2015/list/testing.js.map +0 -1
  1589. package/fesm2015/list.js +0 -876
  1590. package/fesm2015/list.js.map +0 -1
  1591. package/fesm2015/material.js +0 -16
  1592. package/fesm2015/material.js.map +0 -1
  1593. package/fesm2015/menu/testing.js +0 -250
  1594. package/fesm2015/menu/testing.js.map +0 -1
  1595. package/fesm2015/menu.js +0 -1292
  1596. package/fesm2015/menu.js.map +0 -1
  1597. package/fesm2015/paginator/testing.js +0 -133
  1598. package/fesm2015/paginator/testing.js.map +0 -1
  1599. package/fesm2015/paginator.js +0 -366
  1600. package/fesm2015/paginator.js.map +0 -1
  1601. package/fesm2015/progress-bar/testing.js +0 -66
  1602. package/fesm2015/progress-bar/testing.js.map +0 -1
  1603. package/fesm2015/progress-bar.js +0 -211
  1604. package/fesm2015/progress-bar.js.map +0 -1
  1605. package/fesm2015/progress-spinner/testing.js +0 -67
  1606. package/fesm2015/progress-spinner/testing.js.map +0 -1
  1607. package/fesm2015/progress-spinner.js +0 -313
  1608. package/fesm2015/progress-spinner.js.map +0 -1
  1609. package/fesm2015/radio/testing.js +0 -299
  1610. package/fesm2015/radio/testing.js.map +0 -1
  1611. package/fesm2015/radio.js +0 -578
  1612. package/fesm2015/radio.js.map +0 -1
  1613. package/fesm2015/select/testing.js +0 -184
  1614. package/fesm2015/select/testing.js.map +0 -1
  1615. package/fesm2015/select.js +0 -1269
  1616. package/fesm2015/select.js.map +0 -1
  1617. package/fesm2015/sidenav/testing.js +0 -231
  1618. package/fesm2015/sidenav/testing.js.map +0 -1
  1619. package/fesm2015/sidenav.js +0 -965
  1620. package/fesm2015/sidenav.js.map +0 -1
  1621. package/fesm2015/slide-toggle/testing.js +0 -166
  1622. package/fesm2015/slide-toggle/testing.js.map +0 -1
  1623. package/fesm2015/slide-toggle.js +0 -329
  1624. package/fesm2015/slide-toggle.js.map +0 -1
  1625. package/fesm2015/slider/testing.js +0 -160
  1626. package/fesm2015/slider/testing.js.map +0 -1
  1627. package/fesm2015/slider.js +0 -820
  1628. package/fesm2015/slider.js.map +0 -1
  1629. package/fesm2015/snack-bar/testing.js +0 -169
  1630. package/fesm2015/snack-bar/testing.js.map +0 -1
  1631. package/fesm2015/snack-bar.js +0 -713
  1632. package/fesm2015/snack-bar.js.map +0 -1
  1633. package/fesm2015/sort/testing.js +0 -124
  1634. package/fesm2015/sort/testing.js.map +0 -1
  1635. package/fesm2015/sort.js +0 -587
  1636. package/fesm2015/sort.js.map +0 -1
  1637. package/fesm2015/stepper/testing.js +0 -237
  1638. package/fesm2015/stepper/testing.js.map +0 -1
  1639. package/fesm2015/stepper.js +0 -519
  1640. package/fesm2015/stepper.js.map +0 -1
  1641. package/fesm2015/table/testing.js +0 -280
  1642. package/fesm2015/table/testing.js.map +0 -1
  1643. package/fesm2015/table.js +0 -701
  1644. package/fesm2015/table.js.map +0 -1
  1645. package/fesm2015/tabs/testing.js +0 -273
  1646. package/fesm2015/tabs/testing.js.map +0 -1
  1647. package/fesm2015/tabs.js +0 -1746
  1648. package/fesm2015/tabs.js.map +0 -1
  1649. package/fesm2015/toolbar/testing.js +0 -74
  1650. package/fesm2015/toolbar/testing.js.map +0 -1
  1651. package/fesm2015/toolbar.js +0 -123
  1652. package/fesm2015/toolbar.js.map +0 -1
  1653. package/fesm2015/tooltip/testing.js +0 -95
  1654. package/fesm2015/tooltip/testing.js.map +0 -1
  1655. package/fesm2015/tooltip.js +0 -802
  1656. package/fesm2015/tooltip.js.map +0 -1
  1657. package/fesm2015/tree/testing.js +0 -237
  1658. package/fesm2015/tree/testing.js.map +0 -1
  1659. package/fesm2015/tree.js +0 -479
  1660. package/fesm2015/tree.js.map +0 -1
  1661. package/form-field/index.metadata.json +0 -1
  1662. package/grid-list/index.metadata.json +0 -1
  1663. package/icon/index.metadata.json +0 -1
  1664. package/icon/testing/index.metadata.json +0 -1
  1665. package/input/autosize.d.ts +0 -23
  1666. package/input/index.metadata.json +0 -1
  1667. package/list/index.metadata.json +0 -1
  1668. package/menu/index.metadata.json +0 -1
  1669. package/paginator/index.metadata.json +0 -1
  1670. package/progress-bar/index.metadata.json +0 -1
  1671. package/progress-spinner/index.metadata.json +0 -1
  1672. package/radio/index.metadata.json +0 -1
  1673. package/select/index.metadata.json +0 -1
  1674. package/sidenav/index.metadata.json +0 -1
  1675. package/slide-toggle/index.metadata.json +0 -1
  1676. package/slider/index.metadata.json +0 -1
  1677. package/snack-bar/index.metadata.json +0 -1
  1678. package/sort/index.metadata.json +0 -1
  1679. package/stepper/index.metadata.json +0 -1
  1680. package/table/index.metadata.json +0 -1
  1681. package/tabs/index.metadata.json +0 -1
  1682. package/toolbar/index.metadata.json +0 -1
  1683. package/tooltip/index.metadata.json +0 -1
  1684. package/tree/index.metadata.json +0 -1
@@ -1,766 +0,0 @@
1
- import { FocusMonitor, FocusTrapFactory, InteractivityChecker } from '@angular/cdk/a11y';
2
- import { Directionality } from '@angular/cdk/bidi';
3
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
- import { ESCAPE, hasModifierKey } from '@angular/cdk/keycodes';
5
- import { Platform } from '@angular/cdk/platform';
6
- import { CdkScrollable, ScrollDispatcher, ViewportRuler } from '@angular/cdk/scrolling';
7
- import { DOCUMENT } from '@angular/common';
8
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, forwardRef, Inject, InjectionToken, Input, NgZone, Optional, Output, QueryList, ViewChild, ViewEncapsulation, HostListener, HostBinding, } from '@angular/core';
9
- import { fromEvent, merge, Observable, Subject } from 'rxjs';
10
- import { debounceTime, filter, map, startWith, take, takeUntil, distinctUntilChanged, mapTo, } from 'rxjs/operators';
11
- import { matDrawerAnimations } from './drawer-animations';
12
- import { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';
13
- /**
14
- * Throws an exception when two MatDrawer are matching the same position.
15
- * @docs-private
16
- */
17
- export function throwMatDuplicatedDrawerError(position) {
18
- throw Error(`A drawer was already declared for 'position="${position}"'`);
19
- }
20
- /** Configures whether drawers should use auto sizing by default. */
21
- export const MAT_DRAWER_DEFAULT_AUTOSIZE = new InjectionToken('MAT_DRAWER_DEFAULT_AUTOSIZE', {
22
- providedIn: 'root',
23
- factory: MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY,
24
- });
25
- /**
26
- * Used to provide a drawer container to a drawer while avoiding circular references.
27
- * @docs-private
28
- */
29
- export const MAT_DRAWER_CONTAINER = new InjectionToken('MAT_DRAWER_CONTAINER');
30
- /** @docs-private */
31
- export function MAT_DRAWER_DEFAULT_AUTOSIZE_FACTORY() {
32
- return false;
33
- }
34
- export class MatDrawerContent extends CdkScrollable {
35
- constructor(_changeDetectorRef, _container, elementRef, scrollDispatcher, ngZone) {
36
- super(elementRef, scrollDispatcher, ngZone);
37
- this._changeDetectorRef = _changeDetectorRef;
38
- this._container = _container;
39
- }
40
- ngAfterContentInit() {
41
- this._container._contentMarginChanges.subscribe(() => {
42
- this._changeDetectorRef.markForCheck();
43
- });
44
- }
45
- }
46
- MatDrawerContent.decorators = [
47
- { type: Component, args: [{
48
- selector: 'mat-drawer-content',
49
- template: '<ng-content></ng-content>',
50
- host: {
51
- 'class': 'mat-drawer-content',
52
- '[style.margin-left.px]': '_container._contentMargins.left',
53
- '[style.margin-right.px]': '_container._contentMargins.right',
54
- },
55
- changeDetection: ChangeDetectionStrategy.OnPush,
56
- encapsulation: ViewEncapsulation.None
57
- },] }
58
- ];
59
- MatDrawerContent.ctorParameters = () => [
60
- { type: ChangeDetectorRef },
61
- { type: MatDrawerContainer, decorators: [{ type: Inject, args: [forwardRef(() => MatDrawerContainer),] }] },
62
- { type: ElementRef },
63
- { type: ScrollDispatcher },
64
- { type: NgZone }
65
- ];
66
- /**
67
- * This component corresponds to a drawer that can be opened on the drawer container.
68
- */
69
- export class MatDrawer {
70
- constructor(_elementRef, _focusTrapFactory, _focusMonitor, _platform, _ngZone, _interactivityChecker, _doc, _container) {
71
- this._elementRef = _elementRef;
72
- this._focusTrapFactory = _focusTrapFactory;
73
- this._focusMonitor = _focusMonitor;
74
- this._platform = _platform;
75
- this._ngZone = _ngZone;
76
- this._interactivityChecker = _interactivityChecker;
77
- this._doc = _doc;
78
- this._container = _container;
79
- this._elementFocusedBeforeDrawerWasOpened = null;
80
- /** Whether the drawer is initialized. Used for disabling the initial animation. */
81
- this._enableAnimations = false;
82
- this._position = 'start';
83
- this._mode = 'over';
84
- this._disableClose = false;
85
- this._opened = false;
86
- /** Emits whenever the drawer has started animating. */
87
- this._animationStarted = new Subject();
88
- /** Emits whenever the drawer is done animating. */
89
- this._animationEnd = new Subject();
90
- /** Current state of the sidenav animation. */
91
- // @HostBinding is used in the class as it is expected to be extended. Since @Component decorator
92
- // metadata is not inherited by child classes, instead the host binding data is defined in a way
93
- // that can be inherited.
94
- // tslint:disable-next-line:no-host-decorator-in-concrete
95
- this._animationState = 'void';
96
- /** Event emitted when the drawer open state is changed. */
97
- this.openedChange =
98
- // Note this has to be async in order to avoid some issues with two-bindings (see #8872).
99
- new EventEmitter(/* isAsync */ true);
100
- /** Event emitted when the drawer has been opened. */
101
- this._openedStream = this.openedChange.pipe(filter(o => o), map(() => { }));
102
- /** Event emitted when the drawer has started opening. */
103
- this.openedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState.indexOf('open') === 0), mapTo(undefined));
104
- /** Event emitted when the drawer has been closed. */
105
- this._closedStream = this.openedChange.pipe(filter(o => !o), map(() => { }));
106
- /** Event emitted when the drawer has started closing. */
107
- this.closedStart = this._animationStarted.pipe(filter(e => e.fromState !== e.toState && e.toState === 'void'), mapTo(undefined));
108
- /** Emits when the component is destroyed. */
109
- this._destroyed = new Subject();
110
- /** Event emitted when the drawer's position changes. */
111
- // tslint:disable-next-line:no-output-on-prefix
112
- this.onPositionChanged = new EventEmitter();
113
- /**
114
- * An observable that emits when the drawer mode changes. This is used by the drawer container to
115
- * to know when to when the mode changes so it can adapt the margins on the content.
116
- */
117
- this._modeChanged = new Subject();
118
- this.openedChange.subscribe((opened) => {
119
- if (opened) {
120
- if (this._doc) {
121
- this._elementFocusedBeforeDrawerWasOpened = this._doc.activeElement;
122
- }
123
- this._takeFocus();
124
- }
125
- else if (this._isFocusWithinDrawer()) {
126
- this._restoreFocus(this._openedVia || 'program');
127
- }
128
- });
129
- /**
130
- * Listen to `keydown` events outside the zone so that change detection is not run every
131
- * time a key is pressed. Instead we re-enter the zone only if the `ESC` key is pressed
132
- * and we don't have close disabled.
133
- */
134
- this._ngZone.runOutsideAngular(() => {
135
- fromEvent(this._elementRef.nativeElement, 'keydown').pipe(filter(event => {
136
- return event.keyCode === ESCAPE && !this.disableClose && !hasModifierKey(event);
137
- }), takeUntil(this._destroyed)).subscribe(event => this._ngZone.run(() => {
138
- this.close();
139
- event.stopPropagation();
140
- event.preventDefault();
141
- }));
142
- });
143
- // We need a Subject with distinctUntilChanged, because the `done` event
144
- // fires twice on some browsers. See https://github.com/angular/angular/issues/24084
145
- this._animationEnd.pipe(distinctUntilChanged((x, y) => {
146
- return x.fromState === y.fromState && x.toState === y.toState;
147
- })).subscribe((event) => {
148
- const { fromState, toState } = event;
149
- if ((toState.indexOf('open') === 0 && fromState === 'void') ||
150
- (toState === 'void' && fromState.indexOf('open') === 0)) {
151
- this.openedChange.emit(this._opened);
152
- }
153
- });
154
- }
155
- /** The side that the drawer is attached to. */
156
- get position() { return this._position; }
157
- set position(value) {
158
- // Make sure we have a valid value.
159
- value = value === 'end' ? 'end' : 'start';
160
- if (value != this._position) {
161
- this._position = value;
162
- this.onPositionChanged.emit();
163
- }
164
- }
165
- /** Mode of the drawer; one of 'over', 'push' or 'side'. */
166
- get mode() { return this._mode; }
167
- set mode(value) {
168
- this._mode = value;
169
- this._updateFocusTrapState();
170
- this._modeChanged.next();
171
- }
172
- /** Whether the drawer can be closed with the escape key or by clicking on the backdrop. */
173
- get disableClose() { return this._disableClose; }
174
- set disableClose(value) { this._disableClose = coerceBooleanProperty(value); }
175
- /**
176
- * Whether the drawer should focus the first focusable element automatically when opened.
177
- * Defaults to false in when `mode` is set to `side`, otherwise defaults to `true`. If explicitly
178
- * enabled, focus will be moved into the sidenav in `side` mode as well.
179
- * @breaking-change 14.0.0 Remove boolean option from autoFocus. Use string or AutoFocusTarget
180
- * instead.
181
- */
182
- get autoFocus() {
183
- const value = this._autoFocus;
184
- // Note that usually we don't allow autoFocus to be set to `first-tabbable` in `side` mode,
185
- // because we don't know how the sidenav is being used, but in some cases it still makes
186
- // sense to do it. The consumer can explicitly set `autoFocus`.
187
- if (value == null) {
188
- if (this.mode === 'side') {
189
- return 'dialog';
190
- }
191
- else {
192
- return 'first-tabbable';
193
- }
194
- }
195
- return value;
196
- }
197
- set autoFocus(value) {
198
- if (value === 'true' || value === 'false') {
199
- value = coerceBooleanProperty(value);
200
- }
201
- this._autoFocus = value;
202
- }
203
- /**
204
- * Whether the drawer is opened. We overload this because we trigger an event when it
205
- * starts or end.
206
- */
207
- get opened() { return this._opened; }
208
- set opened(value) { this.toggle(coerceBooleanProperty(value)); }
209
- /**
210
- * Focuses the provided element. If the element is not focusable, it will add a tabIndex
211
- * attribute to forcefully focus it. The attribute is removed after focus is moved.
212
- * @param element The element to focus.
213
- */
214
- _forceFocus(element, options) {
215
- if (!this._interactivityChecker.isFocusable(element)) {
216
- element.tabIndex = -1;
217
- // The tabindex attribute should be removed to avoid navigating to that element again
218
- this._ngZone.runOutsideAngular(() => {
219
- element.addEventListener('blur', () => element.removeAttribute('tabindex'));
220
- element.addEventListener('mousedown', () => element.removeAttribute('tabindex'));
221
- });
222
- }
223
- element.focus(options);
224
- }
225
- /**
226
- * Focuses the first element that matches the given selector within the focus trap.
227
- * @param selector The CSS selector for the element to set focus to.
228
- */
229
- _focusByCssSelector(selector, options) {
230
- let elementToFocus = this._elementRef.nativeElement.querySelector(selector);
231
- if (elementToFocus) {
232
- this._forceFocus(elementToFocus, options);
233
- }
234
- }
235
- /**
236
- * Moves focus into the drawer. Note that this works even if
237
- * the focus trap is disabled in `side` mode.
238
- */
239
- _takeFocus() {
240
- if (!this._focusTrap) {
241
- return;
242
- }
243
- const element = this._elementRef.nativeElement;
244
- // When autoFocus is not on the sidenav, if the element cannot be focused or does
245
- // not exist, focus the sidenav itself so the keyboard navigation still works.
246
- // We need to check that `focus` is a function due to Universal.
247
- switch (this.autoFocus) {
248
- case false:
249
- case 'dialog':
250
- return;
251
- case true:
252
- case 'first-tabbable':
253
- this._focusTrap.focusInitialElementWhenReady().then(hasMovedFocus => {
254
- if (!hasMovedFocus && typeof this._elementRef.nativeElement.focus === 'function') {
255
- element.focus();
256
- }
257
- });
258
- break;
259
- case 'first-heading':
260
- this._focusByCssSelector('h1, h2, h3, h4, h5, h6, [role="heading"]');
261
- break;
262
- default:
263
- this._focusByCssSelector(this.autoFocus);
264
- break;
265
- }
266
- }
267
- /**
268
- * Restores focus to the element that was originally focused when the drawer opened.
269
- * If no element was focused at that time, the focus will be restored to the drawer.
270
- */
271
- _restoreFocus(focusOrigin) {
272
- if (this.autoFocus === 'dialog') {
273
- return;
274
- }
275
- if (this._elementFocusedBeforeDrawerWasOpened) {
276
- this._focusMonitor.focusVia(this._elementFocusedBeforeDrawerWasOpened, focusOrigin);
277
- }
278
- else {
279
- this._elementRef.nativeElement.blur();
280
- }
281
- this._elementFocusedBeforeDrawerWasOpened = null;
282
- }
283
- /** Whether focus is currently within the drawer. */
284
- _isFocusWithinDrawer() {
285
- var _a;
286
- const activeEl = (_a = this._doc) === null || _a === void 0 ? void 0 : _a.activeElement;
287
- return !!activeEl && this._elementRef.nativeElement.contains(activeEl);
288
- }
289
- ngAfterContentInit() {
290
- this._focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement);
291
- this._updateFocusTrapState();
292
- }
293
- ngAfterContentChecked() {
294
- // Enable the animations after the lifecycle hooks have run, in order to avoid animating
295
- // drawers that are open by default. When we're on the server, we shouldn't enable the
296
- // animations, because we don't want the drawer to animate the first time the user sees
297
- // the page.
298
- if (this._platform.isBrowser) {
299
- this._enableAnimations = true;
300
- }
301
- }
302
- ngOnDestroy() {
303
- if (this._focusTrap) {
304
- this._focusTrap.destroy();
305
- }
306
- this._animationStarted.complete();
307
- this._animationEnd.complete();
308
- this._modeChanged.complete();
309
- this._destroyed.next();
310
- this._destroyed.complete();
311
- }
312
- /**
313
- * Open the drawer.
314
- * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.
315
- * Used for focus management after the sidenav is closed.
316
- */
317
- open(openedVia) {
318
- return this.toggle(true, openedVia);
319
- }
320
- /** Close the drawer. */
321
- close() {
322
- return this.toggle(false);
323
- }
324
- /** Closes the drawer with context that the backdrop was clicked. */
325
- _closeViaBackdropClick() {
326
- // If the drawer is closed upon a backdrop click, we always want to restore focus. We
327
- // don't need to check whether focus is currently in the drawer, as clicking on the
328
- // backdrop causes blurs the active element.
329
- return this._setOpen(/* isOpen */ false, /* restoreFocus */ true, 'mouse');
330
- }
331
- /**
332
- * Toggle this drawer.
333
- * @param isOpen Whether the drawer should be open.
334
- * @param openedVia Whether the drawer was opened by a key press, mouse click or programmatically.
335
- * Used for focus management after the sidenav is closed.
336
- */
337
- toggle(isOpen = !this.opened, openedVia) {
338
- // If the focus is currently inside the drawer content and we are closing the drawer,
339
- // restore the focus to the initially focused element (when the drawer opened).
340
- if (isOpen && openedVia) {
341
- this._openedVia = openedVia;
342
- }
343
- const result = this._setOpen(isOpen, /* restoreFocus */ !isOpen && this._isFocusWithinDrawer(), this._openedVia || 'program');
344
- if (!isOpen) {
345
- this._openedVia = null;
346
- }
347
- return result;
348
- }
349
- /**
350
- * Toggles the opened state of the drawer.
351
- * @param isOpen Whether the drawer should open or close.
352
- * @param restoreFocus Whether focus should be restored on close.
353
- * @param focusOrigin Origin to use when restoring focus.
354
- */
355
- _setOpen(isOpen, restoreFocus, focusOrigin) {
356
- this._opened = isOpen;
357
- if (isOpen) {
358
- this._animationState = this._enableAnimations ? 'open' : 'open-instant';
359
- }
360
- else {
361
- this._animationState = 'void';
362
- if (restoreFocus) {
363
- this._restoreFocus(focusOrigin);
364
- }
365
- }
366
- this._updateFocusTrapState();
367
- return new Promise(resolve => {
368
- this.openedChange.pipe(take(1)).subscribe(open => resolve(open ? 'open' : 'close'));
369
- });
370
- }
371
- _getWidth() {
372
- return this._elementRef.nativeElement ? (this._elementRef.nativeElement.offsetWidth || 0) : 0;
373
- }
374
- /** Updates the enabled state of the focus trap. */
375
- _updateFocusTrapState() {
376
- if (this._focusTrap) {
377
- // The focus trap is only enabled when the drawer is open in any mode other than side.
378
- this._focusTrap.enabled = this.opened && this.mode !== 'side';
379
- }
380
- }
381
- // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
382
- // In Ivy the `host` bindings will be merged when this class is extended, whereas in
383
- // ViewEngine they're overwritten.
384
- // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.
385
- // tslint:disable-next-line:no-host-decorator-in-concrete
386
- _animationStartListener(event) {
387
- this._animationStarted.next(event);
388
- }
389
- // We have to use a `HostListener` here in order to support both Ivy and ViewEngine.
390
- // In Ivy the `host` bindings will be merged when this class is extended, whereas in
391
- // ViewEngine they're overwritten.
392
- // TODO(crisbeto): we move this back into `host` once Ivy is turned on by default.
393
- // tslint:disable-next-line:no-host-decorator-in-concrete
394
- _animationDoneListener(event) {
395
- this._animationEnd.next(event);
396
- }
397
- }
398
- MatDrawer.decorators = [
399
- { type: Component, args: [{
400
- selector: 'mat-drawer',
401
- exportAs: 'matDrawer',
402
- template: "<div class=\"mat-drawer-inner-container\" cdkScrollable>\r\n <ng-content></ng-content>\r\n</div>\r\n",
403
- animations: [matDrawerAnimations.transformDrawer],
404
- host: {
405
- 'class': 'mat-drawer',
406
- // must prevent the browser from aligning text based on value
407
- '[attr.align]': 'null',
408
- '[class.mat-drawer-end]': 'position === "end"',
409
- '[class.mat-drawer-over]': 'mode === "over"',
410
- '[class.mat-drawer-push]': 'mode === "push"',
411
- '[class.mat-drawer-side]': 'mode === "side"',
412
- '[class.mat-drawer-opened]': 'opened',
413
- 'tabIndex': '-1',
414
- },
415
- changeDetection: ChangeDetectionStrategy.OnPush,
416
- encapsulation: ViewEncapsulation.None
417
- },] }
418
- ];
419
- MatDrawer.ctorParameters = () => [
420
- { type: ElementRef },
421
- { type: FocusTrapFactory },
422
- { type: FocusMonitor },
423
- { type: Platform },
424
- { type: NgZone },
425
- { type: InteractivityChecker },
426
- { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [DOCUMENT,] }] },
427
- { type: MatDrawerContainer, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DRAWER_CONTAINER,] }] }
428
- ];
429
- MatDrawer.propDecorators = {
430
- position: [{ type: Input }],
431
- mode: [{ type: Input }],
432
- disableClose: [{ type: Input }],
433
- autoFocus: [{ type: Input }],
434
- opened: [{ type: Input }],
435
- _animationState: [{ type: HostBinding, args: ['@transform',] }],
436
- openedChange: [{ type: Output }],
437
- _openedStream: [{ type: Output, args: ['opened',] }],
438
- openedStart: [{ type: Output }],
439
- _closedStream: [{ type: Output, args: ['closed',] }],
440
- closedStart: [{ type: Output }],
441
- onPositionChanged: [{ type: Output, args: ['positionChanged',] }],
442
- _animationStartListener: [{ type: HostListener, args: ['@transform.start', ['$event'],] }],
443
- _animationDoneListener: [{ type: HostListener, args: ['@transform.done', ['$event'],] }]
444
- };
445
- /**
446
- * `<mat-drawer-container>` component.
447
- *
448
- * This is the parent component to one or two `<mat-drawer>`s that validates the state internally
449
- * and coordinates the backdrop and content styling.
450
- */
451
- export class MatDrawerContainer {
452
- constructor(_dir, _element, _ngZone, _changeDetectorRef, viewportRuler, defaultAutosize = false, _animationMode) {
453
- this._dir = _dir;
454
- this._element = _element;
455
- this._ngZone = _ngZone;
456
- this._changeDetectorRef = _changeDetectorRef;
457
- this._animationMode = _animationMode;
458
- /** Drawers that belong to this container. */
459
- this._drawers = new QueryList();
460
- /** Event emitted when the drawer backdrop is clicked. */
461
- this.backdropClick = new EventEmitter();
462
- /** Emits when the component is destroyed. */
463
- this._destroyed = new Subject();
464
- /** Emits on every ngDoCheck. Used for debouncing reflows. */
465
- this._doCheckSubject = new Subject();
466
- /**
467
- * Margins to be applied to the content. These are used to push / shrink the drawer content when a
468
- * drawer is open. We use margin rather than transform even for push mode because transform breaks
469
- * fixed position elements inside of the transformed element.
470
- */
471
- this._contentMargins = { left: null, right: null };
472
- this._contentMarginChanges = new Subject();
473
- // If a `Dir` directive exists up the tree, listen direction changes
474
- // and update the left/right properties to point to the proper start/end.
475
- if (_dir) {
476
- _dir.change.pipe(takeUntil(this._destroyed)).subscribe(() => {
477
- this._validateDrawers();
478
- this.updateContentMargins();
479
- });
480
- }
481
- // Since the minimum width of the sidenav depends on the viewport width,
482
- // we need to recompute the margins if the viewport changes.
483
- viewportRuler.change()
484
- .pipe(takeUntil(this._destroyed))
485
- .subscribe(() => this.updateContentMargins());
486
- this._autosize = defaultAutosize;
487
- }
488
- /** The drawer child with the `start` position. */
489
- get start() { return this._start; }
490
- /** The drawer child with the `end` position. */
491
- get end() { return this._end; }
492
- /**
493
- * Whether to automatically resize the container whenever
494
- * the size of any of its drawers changes.
495
- *
496
- * **Use at your own risk!** Enabling this option can cause layout thrashing by measuring
497
- * the drawers on every change detection cycle. Can be configured globally via the
498
- * `MAT_DRAWER_DEFAULT_AUTOSIZE` token.
499
- */
500
- get autosize() { return this._autosize; }
501
- set autosize(value) { this._autosize = coerceBooleanProperty(value); }
502
- /**
503
- * Whether the drawer container should have a backdrop while one of the sidenavs is open.
504
- * If explicitly set to `true`, the backdrop will be enabled for drawers in the `side`
505
- * mode as well.
506
- */
507
- get hasBackdrop() {
508
- if (this._backdropOverride == null) {
509
- return !this._start || this._start.mode !== 'side' || !this._end || this._end.mode !== 'side';
510
- }
511
- return this._backdropOverride;
512
- }
513
- set hasBackdrop(value) {
514
- this._backdropOverride = value == null ? null : coerceBooleanProperty(value);
515
- }
516
- /** Reference to the CdkScrollable instance that wraps the scrollable content. */
517
- get scrollable() {
518
- return this._userContent || this._content;
519
- }
520
- ngAfterContentInit() {
521
- this._allDrawers.changes
522
- .pipe(startWith(this._allDrawers), takeUntil(this._destroyed))
523
- .subscribe((drawer) => {
524
- this._drawers.reset(drawer.filter(item => !item._container || item._container === this));
525
- this._drawers.notifyOnChanges();
526
- });
527
- this._drawers.changes.pipe(startWith(null)).subscribe(() => {
528
- this._validateDrawers();
529
- this._drawers.forEach((drawer) => {
530
- this._watchDrawerToggle(drawer);
531
- this._watchDrawerPosition(drawer);
532
- this._watchDrawerMode(drawer);
533
- });
534
- if (!this._drawers.length ||
535
- this._isDrawerOpen(this._start) ||
536
- this._isDrawerOpen(this._end)) {
537
- this.updateContentMargins();
538
- }
539
- this._changeDetectorRef.markForCheck();
540
- });
541
- // Avoid hitting the NgZone through the debounce timeout.
542
- this._ngZone.runOutsideAngular(() => {
543
- this._doCheckSubject.pipe(debounceTime(10), // Arbitrary debounce time, less than a frame at 60fps
544
- takeUntil(this._destroyed)).subscribe(() => this.updateContentMargins());
545
- });
546
- }
547
- ngOnDestroy() {
548
- this._contentMarginChanges.complete();
549
- this._doCheckSubject.complete();
550
- this._drawers.destroy();
551
- this._destroyed.next();
552
- this._destroyed.complete();
553
- }
554
- /** Calls `open` of both start and end drawers */
555
- open() {
556
- this._drawers.forEach(drawer => drawer.open());
557
- }
558
- /** Calls `close` of both start and end drawers */
559
- close() {
560
- this._drawers.forEach(drawer => drawer.close());
561
- }
562
- /**
563
- * Recalculates and updates the inline styles for the content. Note that this should be used
564
- * sparingly, because it causes a reflow.
565
- */
566
- updateContentMargins() {
567
- // 1. For drawers in `over` mode, they don't affect the content.
568
- // 2. For drawers in `side` mode they should shrink the content. We do this by adding to the
569
- // left margin (for left drawer) or right margin (for right the drawer).
570
- // 3. For drawers in `push` mode the should shift the content without resizing it. We do this by
571
- // adding to the left or right margin and simultaneously subtracting the same amount of
572
- // margin from the other side.
573
- let left = 0;
574
- let right = 0;
575
- if (this._left && this._left.opened) {
576
- if (this._left.mode == 'side') {
577
- left += this._left._getWidth();
578
- }
579
- else if (this._left.mode == 'push') {
580
- const width = this._left._getWidth();
581
- left += width;
582
- right -= width;
583
- }
584
- }
585
- if (this._right && this._right.opened) {
586
- if (this._right.mode == 'side') {
587
- right += this._right._getWidth();
588
- }
589
- else if (this._right.mode == 'push') {
590
- const width = this._right._getWidth();
591
- right += width;
592
- left -= width;
593
- }
594
- }
595
- // If either `right` or `left` is zero, don't set a style to the element. This
596
- // allows users to specify a custom size via CSS class in SSR scenarios where the
597
- // measured widths will always be zero. Note that we reset to `null` here, rather
598
- // than below, in order to ensure that the types in the `if` below are consistent.
599
- left = left || null;
600
- right = right || null;
601
- if (left !== this._contentMargins.left || right !== this._contentMargins.right) {
602
- this._contentMargins = { left, right };
603
- // Pull back into the NgZone since in some cases we could be outside. We need to be careful
604
- // to do it only when something changed, otherwise we can end up hitting the zone too often.
605
- this._ngZone.run(() => this._contentMarginChanges.next(this._contentMargins));
606
- }
607
- }
608
- ngDoCheck() {
609
- // If users opted into autosizing, do a check every change detection cycle.
610
- if (this._autosize && this._isPushed()) {
611
- // Run outside the NgZone, otherwise the debouncer will throw us into an infinite loop.
612
- this._ngZone.runOutsideAngular(() => this._doCheckSubject.next());
613
- }
614
- }
615
- /**
616
- * Subscribes to drawer events in order to set a class on the main container element when the
617
- * drawer is open and the backdrop is visible. This ensures any overflow on the container element
618
- * is properly hidden.
619
- */
620
- _watchDrawerToggle(drawer) {
621
- drawer._animationStarted.pipe(filter((event) => event.fromState !== event.toState), takeUntil(this._drawers.changes))
622
- .subscribe((event) => {
623
- // Set the transition class on the container so that the animations occur. This should not
624
- // be set initially because animations should only be triggered via a change in state.
625
- if (event.toState !== 'open-instant' && this._animationMode !== 'NoopAnimations') {
626
- this._element.nativeElement.classList.add('mat-drawer-transition');
627
- }
628
- this.updateContentMargins();
629
- this._changeDetectorRef.markForCheck();
630
- });
631
- if (drawer.mode !== 'side') {
632
- drawer.openedChange.pipe(takeUntil(this._drawers.changes)).subscribe(() => this._setContainerClass(drawer.opened));
633
- }
634
- }
635
- /**
636
- * Subscribes to drawer onPositionChanged event in order to
637
- * re-validate drawers when the position changes.
638
- */
639
- _watchDrawerPosition(drawer) {
640
- if (!drawer) {
641
- return;
642
- }
643
- // NOTE: We need to wait for the microtask queue to be empty before validating,
644
- // since both drawers may be swapping positions at the same time.
645
- drawer.onPositionChanged.pipe(takeUntil(this._drawers.changes)).subscribe(() => {
646
- this._ngZone.onMicrotaskEmpty.pipe(take(1)).subscribe(() => {
647
- this._validateDrawers();
648
- });
649
- });
650
- }
651
- /** Subscribes to changes in drawer mode so we can run change detection. */
652
- _watchDrawerMode(drawer) {
653
- if (drawer) {
654
- drawer._modeChanged.pipe(takeUntil(merge(this._drawers.changes, this._destroyed)))
655
- .subscribe(() => {
656
- this.updateContentMargins();
657
- this._changeDetectorRef.markForCheck();
658
- });
659
- }
660
- }
661
- /** Toggles the 'mat-drawer-opened' class on the main 'mat-drawer-container' element. */
662
- _setContainerClass(isAdd) {
663
- const classList = this._element.nativeElement.classList;
664
- const className = 'mat-drawer-container-has-open';
665
- if (isAdd) {
666
- classList.add(className);
667
- }
668
- else {
669
- classList.remove(className);
670
- }
671
- }
672
- /** Validate the state of the drawer children components. */
673
- _validateDrawers() {
674
- this._start = this._end = null;
675
- // Ensure that we have at most one start and one end drawer.
676
- this._drawers.forEach(drawer => {
677
- if (drawer.position == 'end') {
678
- if (this._end != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {
679
- throwMatDuplicatedDrawerError('end');
680
- }
681
- this._end = drawer;
682
- }
683
- else {
684
- if (this._start != null && (typeof ngDevMode === 'undefined' || ngDevMode)) {
685
- throwMatDuplicatedDrawerError('start');
686
- }
687
- this._start = drawer;
688
- }
689
- });
690
- this._right = this._left = null;
691
- // Detect if we're LTR or RTL.
692
- if (this._dir && this._dir.value === 'rtl') {
693
- this._left = this._end;
694
- this._right = this._start;
695
- }
696
- else {
697
- this._left = this._start;
698
- this._right = this._end;
699
- }
700
- }
701
- /** Whether the container is being pushed to the side by one of the drawers. */
702
- _isPushed() {
703
- return (this._isDrawerOpen(this._start) && this._start.mode != 'over') ||
704
- (this._isDrawerOpen(this._end) && this._end.mode != 'over');
705
- }
706
- _onBackdropClicked() {
707
- this.backdropClick.emit();
708
- this._closeModalDrawersViaBackdrop();
709
- }
710
- _closeModalDrawersViaBackdrop() {
711
- // Close all open drawers where closing is not disabled and the mode is not `side`.
712
- [this._start, this._end]
713
- .filter(drawer => drawer && !drawer.disableClose && this._canHaveBackdrop(drawer))
714
- .forEach(drawer => drawer._closeViaBackdropClick());
715
- }
716
- _isShowingBackdrop() {
717
- return (this._isDrawerOpen(this._start) && this._canHaveBackdrop(this._start)) ||
718
- (this._isDrawerOpen(this._end) && this._canHaveBackdrop(this._end));
719
- }
720
- _canHaveBackdrop(drawer) {
721
- return drawer.mode !== 'side' || !!this._backdropOverride;
722
- }
723
- _isDrawerOpen(drawer) {
724
- return drawer != null && drawer.opened;
725
- }
726
- }
727
- MatDrawerContainer.decorators = [
728
- { type: Component, args: [{
729
- selector: 'mat-drawer-container',
730
- exportAs: 'matDrawerContainer',
731
- template: "<div class=\"mat-drawer-backdrop\" (click)=\"_onBackdropClicked()\" *ngIf=\"hasBackdrop\"\n [class.mat-drawer-shown]=\"_isShowingBackdrop()\"></div>\n\n<ng-content select=\"mat-drawer\"></ng-content>\n\n<ng-content select=\"mat-drawer-content\">\n</ng-content>\n<mat-drawer-content *ngIf=\"!_content\">\n <ng-content></ng-content>\n</mat-drawer-content>\n",
732
- host: {
733
- 'class': 'mat-drawer-container',
734
- '[class.mat-drawer-container-explicit-backdrop]': '_backdropOverride',
735
- },
736
- changeDetection: ChangeDetectionStrategy.OnPush,
737
- encapsulation: ViewEncapsulation.None,
738
- providers: [{
739
- provide: MAT_DRAWER_CONTAINER,
740
- useExisting: MatDrawerContainer
741
- }],
742
- styles: [".mat-drawer-container{position:relative;z-index:1;box-sizing:border-box;-webkit-overflow-scrolling:touch;display:block;overflow:hidden}.mat-drawer-container[fullscreen]{top:0;left:0;right:0;bottom:0;position:absolute}.mat-drawer-container[fullscreen].mat-drawer-container-has-open{overflow:hidden}.mat-drawer-container.mat-drawer-container-explicit-backdrop .mat-drawer-side{z-index:3}.mat-drawer-container.ng-animate-disabled .mat-drawer-backdrop,.mat-drawer-container.ng-animate-disabled .mat-drawer-content,.ng-animate-disabled .mat-drawer-container .mat-drawer-backdrop,.ng-animate-disabled .mat-drawer-container .mat-drawer-content{transition:none}.mat-drawer-backdrop{top:0;left:0;right:0;bottom:0;position:absolute;display:block;z-index:3;visibility:hidden}.mat-drawer-backdrop.mat-drawer-shown{visibility:visible}.mat-drawer-transition .mat-drawer-backdrop{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:background-color,visibility}.cdk-high-contrast-active .mat-drawer-backdrop{opacity:.5}.mat-drawer-content{position:relative;z-index:1;display:block;height:100%;overflow:auto}.mat-drawer-transition .mat-drawer-content{transition-duration:400ms;transition-timing-function:cubic-bezier(0.25, 0.8, 0.25, 1);transition-property:transform,margin-left,margin-right}.mat-drawer{position:relative;z-index:4;display:block;position:absolute;top:0;bottom:0;z-index:3;outline:0;box-sizing:border-box;overflow-y:auto;transform:translate3d(-100%, 0, 0)}.cdk-high-contrast-active .mat-drawer,.cdk-high-contrast-active [dir=rtl] .mat-drawer.mat-drawer-end{border-right:solid 1px currentColor}.cdk-high-contrast-active [dir=rtl] .mat-drawer,.cdk-high-contrast-active .mat-drawer.mat-drawer-end{border-left:solid 1px currentColor;border-right:none}.mat-drawer.mat-drawer-side{z-index:2}.mat-drawer.mat-drawer-end{right:0;transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer{transform:translate3d(100%, 0, 0)}[dir=rtl] .mat-drawer.mat-drawer-end{left:0;right:auto;transform:translate3d(-100%, 0, 0)}.mat-drawer-inner-container{width:100%;height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.mat-sidenav-fixed{position:fixed}\n"]
743
- },] }
744
- ];
745
- MatDrawerContainer.ctorParameters = () => [
746
- { type: Directionality, decorators: [{ type: Optional }] },
747
- { type: ElementRef },
748
- { type: NgZone },
749
- { type: ChangeDetectorRef },
750
- { type: ViewportRuler },
751
- { type: undefined, decorators: [{ type: Inject, args: [MAT_DRAWER_DEFAULT_AUTOSIZE,] }] },
752
- { type: String, decorators: [{ type: Optional }, { type: Inject, args: [ANIMATION_MODULE_TYPE,] }] }
753
- ];
754
- MatDrawerContainer.propDecorators = {
755
- _allDrawers: [{ type: ContentChildren, args: [MatDrawer, {
756
- // We need to use `descendants: true`, because Ivy will no longer match
757
- // indirect descendants if it's left as false.
758
- descendants: true
759
- },] }],
760
- _content: [{ type: ContentChild, args: [MatDrawerContent,] }],
761
- _userContent: [{ type: ViewChild, args: [MatDrawerContent,] }],
762
- autosize: [{ type: Input }],
763
- hasBackdrop: [{ type: Input }],
764
- backdropClick: [{ type: Output }]
765
- };
766
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL21hdGVyaWFsL3NpZGVuYXYvZHJhd2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFDTCxZQUFZLEVBR1osZ0JBQWdCLEVBQ2hCLG9CQUFvQixFQUNyQixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQWUscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRSxPQUFPLEVBQUMsTUFBTSxFQUFFLGNBQWMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzdELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3RGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBR0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFFZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFDTCxNQUFNLEVBRU4sUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULGlCQUFpQixFQUNqQixZQUFZLEVBQ1osV0FBVyxHQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLFlBQVksRUFDWixNQUFNLEVBQ04sR0FBRyxFQUNILFNBQVMsRUFDVCxJQUFJLEVBQ0osU0FBUyxFQUNULG9CQUFvQixFQUNwQixLQUFLLEdBQ04sTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUczRTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQUMsUUFBZ0I7SUFDNUQsTUFBTSxLQUFLLENBQUMsZ0RBQWdELFFBQVEsSUFBSSxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQVdELG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FDcEMsSUFBSSxjQUFjLENBQVUsNkJBQTZCLEVBQUU7SUFDekQsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLG1DQUFtQztDQUM3QyxDQUFDLENBQUM7QUFHUDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBRS9FLG9CQUFvQjtBQUNwQixNQUFNLFVBQVUsbUNBQW1DO0lBQ2pELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQWFELE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxhQUFhO0lBQ2pELFlBQ1ksa0JBQXFDLEVBQ1EsVUFBOEIsRUFDbkYsVUFBbUMsRUFDbkMsZ0JBQWtDLEVBQ2xDLE1BQWM7UUFDaEIsS0FBSyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUxsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBQ1EsZUFBVSxHQUFWLFVBQVUsQ0FBb0I7SUFLdkYsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7O1lBekJGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsb0JBQW9CO2dCQUM5QixRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLG9CQUFvQjtvQkFDN0Isd0JBQXdCLEVBQUUsaUNBQWlDO29CQUMzRCx5QkFBeUIsRUFBRSxrQ0FBa0M7aUJBQzlEO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O1lBbEZDLGlCQUFpQjtZQXNGb0Qsa0JBQWtCLHVCQUFsRixNQUFNLFNBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDO1lBakZoRCxVQUFVO1lBWFcsZ0JBQWdCO1lBaUJyQyxNQUFNOztBQTBGUjs7R0FFRztBQW9CSCxNQUFNLE9BQU8sU0FBUztJQXFJcEIsWUFBb0IsV0FBb0MsRUFDcEMsaUJBQW1DLEVBQ25DLGFBQTJCLEVBQzNCLFNBQW1CLEVBQ25CLE9BQWUsRUFDTixxQkFBMkMsRUFDdEIsSUFBUyxFQUNFLFVBQStCO1FBUHhFLGdCQUFXLEdBQVgsV0FBVyxDQUF5QjtRQUNwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQzNCLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNOLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBc0I7UUFDdEIsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNFLGVBQVUsR0FBVixVQUFVLENBQXFCO1FBMUlwRix5Q0FBb0MsR0FBdUIsSUFBSSxDQUFDO1FBRXhFLG1GQUFtRjtRQUMzRSxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFhMUIsY0FBUyxHQUFvQixPQUFPLENBQUM7UUFVckMsVUFBSyxHQUFrQixNQUFNLENBQUM7UUFNOUIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUF3Qy9CLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFLakMsdURBQXVEO1FBQzlDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO1FBRTNELG1EQUFtRDtRQUMxQyxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFrQixDQUFDO1FBRXZELDhDQUE4QztRQUM5QyxrR0FBa0c7UUFDbEcsZ0dBQWdHO1FBQ2hHLHlCQUF5QjtRQUN6Qix5REFBeUQ7UUFFekQsb0JBQWUsR0FBcUMsTUFBTSxDQUFDO1FBRTNELDJEQUEyRDtRQUN4QyxpQkFBWTtRQUMzQix5RkFBeUY7UUFDekYsSUFBSSxZQUFZLENBQVUsYUFBYSxDQUFBLElBQUksQ0FBQyxDQUFDO1FBRWpELHFEQUFxRDtRQUU1QyxrQkFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRS9FLHlEQUF5RDtRQUVoRCxnQkFBVyxHQUFxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUNsRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3pFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FDakIsQ0FBQztRQUVGLHFEQUFxRDtRQUU1QyxrQkFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFaEYseURBQXlEO1FBRWhELGdCQUFXLEdBQXFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQ2xFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxFQUM5RCxLQUFLLENBQUMsU0FBUyxDQUFDLENBQ2pCLENBQUM7UUFFRiw2Q0FBNkM7UUFDNUIsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFbEQsd0RBQXdEO1FBQ3hELCtDQUErQztRQUNYLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFakY7OztXQUdHO1FBQ00saUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBVzFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBZSxFQUFFLEVBQUU7WUFDOUMsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUNiLElBQUksQ0FBQyxvQ0FBb0MsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQTRCLENBQUM7aUJBQ3BGO2dCQUVELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUNuQjtpQkFBTSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLENBQUM7YUFDbEQ7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVIOzs7O1dBSUc7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUErQixDQUFDLElBQUksQ0FDcEYsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNiLE9BQU8sS0FBSyxDQUFDLE9BQU8sS0FBSyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xGLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQzdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUN2QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDO1FBRUgsd0VBQXdFO1FBQ3hFLG9GQUFvRjtRQUNwRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwRCxPQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUU7WUFDdEMsTUFBTSxFQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUMsR0FBRyxLQUFLLENBQUM7WUFFbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxNQUFNLENBQUM7Z0JBQ3ZELENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUMzRCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFqTEQsK0NBQStDO0lBQy9DLElBQ0ksUUFBUSxLQUFzQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUksUUFBUSxDQUFDLEtBQXNCO1FBQ2pDLG1DQUFtQztRQUNuQyxLQUFLLEdBQUcsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDMUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDL0I7SUFDSCxDQUFDO0lBR0QsMkRBQTJEO0lBQzNELElBQ0ksSUFBSSxLQUFvQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2hELElBQUksSUFBSSxDQUFDLEtBQW9CO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUdELDJGQUEyRjtJQUMzRixJQUNJLFlBQVksS0FBYyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQzFELElBQUksWUFBWSxDQUFDLEtBQWMsSUFBSSxJQUFJLENBQUMsYUFBYSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUd2Rjs7Ozs7O09BTUc7SUFDSCxJQUNJLFNBQVM7UUFDWCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRTlCLDJGQUEyRjtRQUMzRix3RkFBd0Y7UUFDeEYsK0RBQStEO1FBQy9ELElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFO2dCQUN4QixPQUFPLFFBQVEsQ0FBQzthQUNqQjtpQkFBTTtnQkFDTCxPQUFPLGdCQUFnQixDQUFDO2FBQ3pCO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxLQUF5QztRQUNuRCxJQUFJLEtBQUssS0FBSyxNQUFNLElBQUksS0FBSyxLQUFLLE9BQU8sRUFBRTtZQUN2QyxLQUFLLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDeEM7UUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsSUFDSSxNQUFNLEtBQWMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLE1BQU0sQ0FBQyxLQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQWlIekU7Ozs7T0FJRztJQUNLLFdBQVcsQ0FBQyxPQUFvQixFQUFFLE9BQXNCO1FBQzlELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BELE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdEIscUZBQXFGO1lBQ3JGLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO2dCQUNsQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFDNUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDbkYsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsT0FBc0I7UUFDbEUsSUFBSSxjQUFjLEdBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQXVCLENBQUM7UUFDL0UsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDM0M7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNwQixPQUFPO1NBQ1I7UUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUUvQyxpRkFBaUY7UUFDakYsOEVBQThFO1FBQzlFLGdFQUFnRTtRQUNoRSxRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdEIsS0FBSyxLQUFLLENBQUM7WUFDWCxLQUFLLFFBQVE7Z0JBQ1gsT0FBTztZQUNULEtBQUssSUFBSSxDQUFDO1lBQ1YsS0FBSyxnQkFBZ0I7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQ2xFLElBQUksQ0FBQyxhQUFhLElBQUksT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO3dCQUNoRixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ2pCO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUixLQUFLLGVBQWU7Z0JBQ2xCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO2dCQUNyRSxNQUFNO1lBQ1I7Z0JBQ0UsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFVLENBQUMsQ0FBQztnQkFDMUMsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGFBQWEsQ0FBQyxXQUF1QztRQUMzRCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssUUFBUSxFQUFFO1lBQy9CLE9BQU87U0FDUjtRQUVELElBQUksSUFBSSxDQUFDLG9DQUFvQyxFQUFFO1lBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxXQUFXLENBQUMsQ0FBQztTQUNyRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDdkM7UUFFRCxJQUFJLENBQUMsb0NBQW9DLEdBQUcsSUFBSSxDQUFDO0lBQ25ELENBQUM7SUFFRCxvREFBb0Q7SUFDNUMsb0JBQW9COztRQUMxQixNQUFNLFFBQVEsR0FBRyxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLGFBQWEsQ0FBQztRQUMxQyxPQUFPLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELHFCQUFxQjtRQUNuQix3RkFBd0Y7UUFDeEYsc0ZBQXNGO1FBQ3RGLHVGQUF1RjtRQUN2RixZQUFZO1FBQ1osSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRTtZQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMzQjtRQUVELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxDQUFDLFNBQXVCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELHdCQUF3QjtJQUN4QixLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxvRUFBb0U7SUFDcEUsc0JBQXNCO1FBQ3BCLHFGQUFxRjtRQUNyRixtRkFBbUY7UUFDbkYsNENBQTRDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsU0FBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQXVCO1FBRTVELHFGQUFxRjtRQUNyRiwrRUFBK0U7UUFDL0UsSUFBSSxNQUFNLElBQUksU0FBUyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1NBQzdCO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQzVGLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLENBQUM7UUFFaEMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNYLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQ3hCO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssUUFBUSxDQUFDLE1BQWUsRUFBRSxZQUFxQixFQUFFLFdBQXVDO1FBRTlGLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRXRCLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1NBQ3pFO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztZQUM5QixJQUFJLFlBQVksRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNqQztTQUNGO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFFN0IsT0FBTyxJQUFJLE9BQU8sQ0FBd0IsT0FBTyxDQUFDLEVBQUU7WUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxtREFBbUQ7SUFDM0MscUJBQXFCO1FBQzNCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixzRkFBc0Y7WUFDdEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztTQUMvRDtJQUNILENBQUM7SUFFRCxvRkFBb0Y7SUFDcEYsb0ZBQW9GO0lBQ3BGLGtDQUFrQztJQUNsQyxrRkFBa0Y7SUFDbEYseURBQXlEO0lBRXpELHVCQUF1QixDQUFDLEtBQXFCO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELG9GQUFvRjtJQUNwRixvRkFBb0Y7SUFDcEYsa0NBQWtDO0lBQ2xDLGtGQUFrRjtJQUNsRix5REFBeUQ7SUFFekQsc0JBQXNCLENBQUMsS0FBcUI7UUFDMUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakMsQ0FBQzs7O1lBdGFGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLGlIQUEwQjtnQkFDMUIsVUFBVSxFQUFFLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDO2dCQUNqRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLFlBQVk7b0JBQ3JCLDZEQUE2RDtvQkFDN0QsY0FBYyxFQUFFLE1BQU07b0JBQ3RCLHdCQUF3QixFQUFFLG9CQUFvQjtvQkFDOUMseUJBQXlCLEVBQUUsaUJBQWlCO29CQUM1Qyx5QkFBeUIsRUFBRSxpQkFBaUI7b0JBQzVDLHlCQUF5QixFQUFFLGlCQUFpQjtvQkFDNUMsMkJBQTJCLEVBQUUsUUFBUTtvQkFDckMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O1lBckhDLFVBQVU7WUFsQlYsZ0JBQWdCO1lBSGhCLFlBQVk7WUFTTixRQUFRO1lBa0JkLE1BQU07WUF2Qk4sb0JBQW9COzRDQWtSUCxRQUFRLFlBQUksTUFBTSxTQUFDLFFBQVE7WUFDa0Msa0JBQWtCLHVCQUEvRSxRQUFRLFlBQUksTUFBTSxTQUFDLG9CQUFvQjs7O3VCQXBJbkQsS0FBSzttQkFhTCxLQUFLOzJCQVVMLEtBQUs7d0JBWUwsS0FBSztxQkE0QkwsS0FBSzs4QkFtQkwsV0FBVyxTQUFDLFlBQVk7MkJBSXhCLE1BQU07NEJBS04sTUFBTSxTQUFDLFFBQVE7MEJBSWYsTUFBTTs0QkFPTixNQUFNLFNBQUMsUUFBUTswQkFJZixNQUFNO2dDQVdOLE1BQU0sU0FBQyxpQkFBaUI7c0NBeVF4QixZQUFZLFNBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7cUNBVTNDLFlBQVksU0FBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFXN0M7Ozs7O0dBS0c7QUFpQkgsTUFBTSxPQUFPLGtCQUFrQjtJQXdGN0IsWUFBZ0MsSUFBb0IsRUFDaEMsUUFBaUMsRUFDakMsT0FBZSxFQUNmLGtCQUFxQyxFQUM3QyxhQUE0QixFQUNTLGVBQWUsR0FBRyxLQUFLLEVBQ1QsY0FBdUI7UUFOdEQsU0FBSSxHQUFKLElBQUksQ0FBZ0I7UUFDaEMsYUFBUSxHQUFSLFFBQVEsQ0FBeUI7UUFDakMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFHTSxtQkFBYyxHQUFkLGNBQWMsQ0FBUztRQXJGdEYsNkNBQTZDO1FBQzdDLGFBQVEsR0FBRyxJQUFJLFNBQVMsRUFBYSxDQUFDO1FBMEN0Qyx5REFBeUQ7UUFDdEMsa0JBQWEsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQWVoRiw2Q0FBNkM7UUFDNUIsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFbEQsNkRBQTZEO1FBQzVDLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUV2RDs7OztXQUlHO1FBQ0gsb0JBQWUsR0FBNEMsRUFBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQztRQUU1RSwwQkFBcUIsR0FBRyxJQUFJLE9BQU8sRUFBMkMsQ0FBQztRQWV0RixvRUFBb0U7UUFDcEUseUVBQXlFO1FBQ3pFLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsd0VBQXdFO1FBQ3hFLDREQUE0RDtRQUM1RCxhQUFhLENBQUMsTUFBTSxFQUFFO2FBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ2hDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDO0lBQ25DLENBQUM7SUFqR0Qsa0RBQWtEO0lBQ2xELElBQUksS0FBSyxLQUF1QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBRXJELGdEQUFnRDtJQUNoRCxJQUFJLEdBQUcsS0FBdUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUVqRDs7Ozs7OztPQU9HO0lBQ0gsSUFDSSxRQUFRLEtBQWMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNsRCxJQUFJLFFBQVEsQ0FBQyxLQUFjLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFHL0U7Ozs7T0FJRztJQUNILElBQ0ksV0FBVztRQUNiLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRTtZQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQztTQUMvRjtRQUVELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2hDLENBQUM7SUFDRCxJQUFJLFdBQVcsQ0FBQyxLQUFVO1FBQ3hCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9FLENBQUM7SUFrQ0QsaUZBQWlGO0lBQ2pGLElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzVDLENBQUM7SUE0QkQsa0JBQWtCO1FBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTzthQUNyQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzdELFNBQVMsQ0FBQyxDQUFDLE1BQTRCLEVBQUUsRUFBRTtZQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN6RixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekQsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFpQixFQUFFLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNqQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUM3QjtZQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDdkIsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLHNEQUFzRDtZQUN4RSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUMzQixDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsaURBQWlEO0lBQ2pELElBQUk7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOzs7T0FHRztJQUNILG9CQUFvQjtRQUNsQixnRUFBZ0U7UUFDaEUsNEZBQTRGO1FBQzVGLDJFQUEyRTtRQUMzRSxnR0FBZ0c7UUFDaEcsMEZBQTBGO1FBQzFGLGlDQUFpQztRQUNqQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFFZCxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDbkMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUU7Z0JBQzdCLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ2hDO2lCQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFO2dCQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLElBQUksS0FBSyxDQUFDO2dCQUNkLEtBQUssSUFBSSxLQUFLLENBQUM7YUFDaEI7U0FDRjtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNyQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFBRTtnQkFDOUIsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7YUFDbEM7aUJBQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLEVBQUU7Z0JBQ3JDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ3RDLEtBQUssSUFBSSxLQUFLLENBQUM7Z0JBQ2YsSUFBSSxJQUFJLEtBQUssQ0FBQzthQUNmO1NBQ0Y7UUFFRCw4RUFBOEU7UUFDOUUsaUZBQWlGO1FBQ2pGLGlGQUFpRjtRQUNqRixrRkFBa0Y7UUFDbEYsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFLLENBQUM7UUFDckIsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFLLENBQUM7UUFFdkIsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFO1lBQzlFLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBQyxJQUFJLEVBQUUsS0FBSyxFQUFDLENBQUM7WUFFckMsMkZBQTJGO1lBQzNGLDRGQUE0RjtZQUM1RixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1NBQy9FO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCwyRUFBMkU7UUFDM0UsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN0Qyx1RkFBdUY7WUFDdkYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7U0FDbkU7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGtCQUFrQixDQUFDLE1BQWlCO1FBQzFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQzNCLE1BQU0sQ0FBQyxDQUFDLEtBQXFCLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUNwRSxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FDakM7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFxQixFQUFFLEVBQUU7WUFDbkMsMEZBQTBGO1lBQzFGLHNGQUFzRjtZQUN0RixJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssZ0JBQWdCLEVBQUU7Z0JBQ2hGLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQzthQUNwRTtZQUVELElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUU7WUFDMUIsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQ3RFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUM3QztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxvQkFBb0IsQ0FBQyxNQUFpQjtRQUM1QyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTztTQUNSO1FBQ0QsK0VBQStFO1FBQy9FLGlFQUFpRTtRQUNqRSxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3RSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJFQUEyRTtJQUNuRSxnQkFBZ0IsQ0FBQyxNQUFpQjtRQUN4QyxJQUFJLE1BQU0sRUFBRTtZQUNWLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQy9FLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QyxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0gsQ0FBQztJQUVELHdGQUF3RjtJQUNoRixrQkFBa0IsQ0FBQyxLQUFjO1FBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRywrQkFBK0IsQ0FBQztRQUVsRCxJQUFJLEtBQUssRUFBRTtZQUNULFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDMUI7YUFBTTtZQUNMLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsNERBQTREO0lBQ3BELGdCQUFnQjtRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRS9CLDREQUE0RDtRQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksS0FBSyxFQUFFO2dCQUM1QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLFNBQVMsQ0FBQyxFQUFFO29CQUN4RSw2QkFBNkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDdEM7Z0JBQ0QsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7YUFDcEI7aUJBQU07Z0JBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLENBQUMsRUFBRTtvQkFDMUUsNkJBQTZCLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO2FBQ3RCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBRWhDLDhCQUE4QjtRQUM5QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxFQUFFO1lBQzFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDM0I7YUFBTTtZQUNMLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUN6QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsK0VBQStFO0lBQ3ZFLFNBQVM7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDO1lBQy9ELENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFRCw2QkFBNkI7UUFDM0IsbUZBQW1GO1FBQ25GLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ3JCLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ2pGLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2RSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBaUI7UUFDeEMsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQzVELENBQUM7SUFFTyxhQUFhLENBQUMsTUFBd0I7UUFDNUMsT0FBTyxNQUFNLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDekMsQ0FBQzs7O1lBaFhGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsc0JBQXNCO2dCQUNoQyxRQUFRLEVBQUUsb0JBQW9CO2dCQUM5QixvWEFBb0M7Z0JBRXBDLElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsc0JBQXNCO29CQUMvQixnREFBZ0QsRUFBRSxtQkFBbUI7aUJBQ3RFO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFDckMsU0FBUyxFQUFFLENBQUM7d0JBQ1YsT0FBTyxFQUFFLG9CQUFvQjt3QkFDN0IsV0FBVyxFQUFFLGtCQUFrQjtxQkFDaEMsQ0FBQzs7YUFDSDs7O1lBcmpCTyxjQUFjLHVCQThvQlAsUUFBUTtZQS9uQnJCLFVBQVU7WUFNVixNQUFNO1lBWE4saUJBQWlCO1lBTnNCLGFBQWE7NENBK29CdkMsTUFBTSxTQUFDLDJCQUEyQjt5Q0FDbEMsUUFBUSxZQUFJLE1BQU0sU0FBQyxxQkFBcUI7OzswQkE1RnBELGVBQWUsU0FBQyxTQUFTLEVBQUU7b0JBQzFCLHVFQUF1RTtvQkFDdkUsOENBQThDO29CQUM5QyxXQUFXLEVBQUUsSUFBSTtpQkFDbEI7dUJBTUEsWUFBWSxTQUFDLGdCQUFnQjsyQkFDN0IsU0FBUyxTQUFDLGdCQUFnQjt1QkFnQjFCLEtBQUs7MEJBVUwsS0FBSzs0QkFjTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge0FuaW1hdGlvbkV2ZW50fSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7XG4gIEZvY3VzTW9uaXRvcixcbiAgRm9jdXNPcmlnaW4sXG4gIEZvY3VzVHJhcCxcbiAgRm9jdXNUcmFwRmFjdG9yeSxcbiAgSW50ZXJhY3Rpdml0eUNoZWNrZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtEaXJlY3Rpb25hbGl0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHtCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7RVNDQVBFLCBoYXNNb2RpZmllcktleX0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge0Nka1Njcm9sbGFibGUsIFNjcm9sbERpc3BhdGNoZXIsIFZpZXdwb3J0UnVsZXJ9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudENoZWNrZWQsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBJbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgSG9zdExpc3RlbmVyLFxuICBIb3N0QmluZGluZyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2Zyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGVib3VuY2VUaW1lLFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgc3RhcnRXaXRoLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICBtYXBUbyxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHttYXREcmF3ZXJBbmltYXRpb25zfSBmcm9tICcuL2RyYXdlci1hbmltYXRpb25zJztcbmltcG9ydCB7QU5JTUFUSU9OX01PRFVMRV9UWVBFfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyL2FuaW1hdGlvbnMnO1xuXG5cbi8qKlxuICogVGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIHR3byBNYXREcmF3ZXIgYXJlIG1hdGNoaW5nIHRoZSBzYW1lIHBvc2l0aW9uLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dNYXREdXBsaWNhdGVkRHJhd2VyRXJyb3IocG9zaXRpb246IHN0cmluZykge1xuICB0aHJvdyBFcnJvcihgQSBkcmF3ZXIgd2FzIGFscmVhZHkgZGVjbGFyZWQgZm9yICdwb3NpdGlvbj1cIiR7cG9zaXRpb259XCInYCk7XG59XG5cbi8qKiBPcHRpb25zIGZvciB3aGVyZSB0byBzZXQgZm9jdXMgdG8gYXV0b21hdGljYWxseSBvbiBkaWFsb2cgb3BlbiAqL1xuZXhwb3J0IHR5cGUgQXV0b0ZvY3VzVGFyZ2V0ID0gJ2RpYWxvZycgfCAnZmlyc3QtdGFiYmFibGUnIHwgJ2ZpcnN0LWhlYWRpbmcnO1xuXG4vKiogUmVzdWx0IG9mIHRoZSB0b2dnbGUgcHJvbWlzZSB0aGF0IGluZGljYXRlcyB0aGUgc3RhdGUgb2YgdGhlIGRyYXdlci4gKi9cbmV4cG9ydCB0eXBlIE1hdERyYXdlclRvZ2dsZVJlc3VsdCA9ICdvcGVuJyB8ICdjbG9zZSc7XG5cbi8qKiBEcmF3ZXIgYW5kIFNpZGVOYXYgZGlzcGxheSBtb2Rlcy4gKi9cbmV4cG9ydCB0eXBlIE1hdERyYXdlck1vZGUgPSAnb3ZlcicgfCAncHVzaCcgfCAnc2lkZSc7XG5cbi8qKiBDb25maWd1cmVzIHdoZXRoZXIgZHJhd2VycyBzaG91bGQgdXNlIGF1dG8gc2l6aW5nIGJ5IGRlZmF1bHQuICovXG5leHBvcnQgY29uc3QgTUFUX0RSQVdFUl9ERUZBVUxUX0FVVE9TSVpFID1cbiAgICBuZXcgSW5qZWN0aW9uVG9rZW48Ym9vbGVhbj4oJ01BVF9EUkFXRVJfREVGQVVMVF9BVVRPU0laRScsIHtcbiAgICAgIHByb3ZpZGVkSW46ICdyb290JyxcbiAgICAgIGZhY3Rvcnk6IE1BVF9EUkFXRVJfREVGQVVMVF9BVVRPU0laRV9GQUNUT1JZLFxuICAgIH0pO1xuXG5cbi8qKlxuICogVXNlZCB0byBwcm92aWRlIGEgZHJhd2VyIGNvbnRhaW5lciB0byBhIGRyYXdlciB3aGlsZSBhdm9pZGluZyBjaXJjdWxhciByZWZlcmVuY2VzLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgTUFUX0RSQVdFUl9DT05UQUlORVIgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ01BVF9EUkFXRVJfQ09OVEFJTkVSJyk7XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgZnVuY3Rpb24gTUFUX0RSQVdFUl9ERUZBVUxUX0FVVE9TSVpFX0ZBQ1RPUlkoKTogYm9vbGVhbiB7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWRyYXdlci1jb250ZW50JyxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdtYXQtZHJhd2VyLWNvbnRlbnQnLFxuICAgICdbc3R5bGUubWFyZ2luLWxlZnQucHhdJzogJ19jb250YWluZXIuX2NvbnRlbnRNYXJnaW5zLmxlZnQnLFxuICAgICdbc3R5bGUubWFyZ2luLXJpZ2h0LnB4XSc6ICdfY29udGFpbmVyLl9jb250ZW50TWFyZ2lucy5yaWdodCcsXG4gIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBNYXREcmF3ZXJDb250ZW50IGV4dGVuZHMgQ2RrU2Nyb2xsYWJsZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBNYXREcmF3ZXJDb250YWluZXIpKSBwdWJsaWMgX2NvbnRhaW5lcjogTWF0RHJhd2VyQ29udGFpbmVyLFxuICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyLFxuICAgICAgbmdab25lOiBOZ1pvbmUpIHtcbiAgICBzdXBlcihlbGVtZW50UmVmLCBzY3JvbGxEaXNwYXRjaGVyLCBuZ1pvbmUpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX2NvbnRhaW5lci5fY29udGVudE1hcmdpbkNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG59XG5cblxuLyoqXG4gKiBUaGlzIGNvbXBvbmVudCBjb3JyZXNwb25kcyB0byBhIGRyYXdlciB0aGF0IGNhbiBiZSBvcGVuZWQgb24gdGhlIGRyYXdlciBjb250YWluZXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1kcmF3ZXInLFxuICBleHBvcnRBczogJ21hdERyYXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnZHJhd2VyLmh0bWwnLFxuICBhbmltYXRpb25zOiBbbWF0RHJhd2VyQW5pbWF0aW9ucy50cmFuc2Zvcm1EcmF3ZXJdLFxuICBob3N0OiB7XG4gICAgJ2NsYXNzJzogJ21hdC1kcmF3ZXInLFxuICAgIC8vIG11c3QgcHJldmVudCB0aGUgYnJvd3NlciBmcm9tIGFsaWduaW5nIHRleHQgYmFzZWQgb24gdmFsdWVcbiAgICAnW2F0dHIuYWxpZ25dJzogJ251bGwnLFxuICAgICdbY2xhc3MubWF0LWRyYXdlci1lbmRdJzogJ3Bvc2l0aW9uID09PSBcImVuZFwiJyxcbiAgICAnW2NsYXNzLm1hdC1kcmF3ZXItb3Zlcl0nOiAnbW9kZSA9PT0gXCJvdmVyXCInLFxuICAgICdbY2xhc3MubWF0LWRyYXdlci1wdXNoXSc6ICdtb2RlID09PSBcInB1c2hcIicsXG4gICAgJ1tjbGFzcy5tYXQtZHJhd2VyLXNpZGVdJzogJ21vZGUgPT09IFwic2lkZVwiJyxcbiAgICAnW2NsYXNzLm1hdC1kcmF3ZXItb3BlbmVkXSc6ICdvcGVuZWQnLFxuICAgICd0YWJJbmRleCc6ICctMScsXG4gIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBNYXREcmF3ZXIgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9mb2N1c1RyYXA6IEZvY3VzVHJhcDtcbiAgcHJpdmF0ZSBfZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGRyYXdlciBpcyBpbml0aWFsaXplZC4gVXNlZCBmb3IgZGlzYWJsaW5nIHRoZSBpbml0aWFsIGFuaW1hdGlvbi4gKi9cbiAgcHJpdmF0ZSBfZW5hYmxlQW5pbWF0aW9ucyA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgc2lkZSB0aGF0IHRoZSBkcmF3ZXIgaXMgYXR0YWNoZWQgdG8uICovXG4gIEBJbnB1dCgpXG4gIGdldCBwb3NpdGlvbigpOiAnc3RhcnQnIHwgJ2VuZCcgeyByZXR1cm4gdGhpcy5fcG9zaXRpb247IH1cbiAgc2V0IHBvc2l0aW9uKHZhbHVlOiAnc3RhcnQnIHwgJ2VuZCcpIHtcbiAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhIHZhbGlkIHZhbHVlLlxuICAgIHZhbHVlID0gdmFsdWUgPT09ICdlbmQnID8gJ2VuZCcgOiAnc3RhcnQnO1xuICAgIGlmICh2YWx1ZSAhPSB0aGlzLl9wb3NpdGlvbikge1xuICAgICAgdGhpcy5fcG9zaXRpb24gPSB2YWx1ZTtcbiAgICAgIHRoaXMub25Qb3NpdGlvbkNoYW5nZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIF9wb3NpdGlvbjogJ3N0YXJ0JyB8ICdlbmQnID0gJ3N0YXJ0JztcblxuICAvKiogTW9kZSBvZiB0aGUgZHJhd2VyOyBvbmUgb2YgJ292ZXInLCAncHVzaCcgb3IgJ3NpZGUnLiAqL1xuICBASW5wdXQoKVxuICBnZXQgbW9kZSgpOiBNYXREcmF3ZXJNb2RlIHsgcmV0dXJuIHRoaXMuX21vZGU7IH1cbiAgc2V0IG1vZGUodmFsdWU6IE1hdERyYXdlck1vZGUpIHtcbiAgICB0aGlzLl9tb2RlID0gdmFsdWU7XG4gICAgdGhpcy5fdXBkYXRlRm9jdXNUcmFwU3RhdGUoKTtcbiAgICB0aGlzLl9tb2RlQ2hhbmdlZC5uZXh0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfbW9kZTogTWF0RHJhd2VyTW9kZSA9ICdvdmVyJztcblxuICAvKiogV2hldGhlciB0aGUgZHJhd2VyIGNhbiBiZSBjbG9zZWQgd2l0aCB0aGUgZXNjYXBlIGtleSBvciBieSBjbGlja2luZyBvbiB0aGUgYmFja2Ryb3AuICovXG4gIEBJbnB1dCgpXG4gIGdldCBkaXNhYmxlQ2xvc2UoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9kaXNhYmxlQ2xvc2U7IH1cbiAgc2V0IGRpc2FibGVDbG9zZSh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLl9kaXNhYmxlQ2xvc2UgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpOyB9XG4gIHByaXZhdGUgX2Rpc2FibGVDbG9zZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBkcmF3ZXIgc2hvdWxkIGZvY3VzIHRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCBhdXRvbWF0aWNhbGx5IHdoZW4gb3BlbmVkLlxuICAgKiBEZWZhdWx0cyB0byBmYWxzZSBpbiB3aGVuIGBtb2RlYCBpcyBzZXQgdG8gYHNpZGVgLCBvdGhlcndpc2UgZGVmYXVsdHMgdG8gYHRydWVgLiBJZiBleHBsaWNpdGx5XG4gICAqIGVuYWJsZWQsIGZvY3VzIHdpbGwgYmUgbW92ZWQgaW50byB0aGUgc2lkZW5hdiBpbiBgc2lkZWAgbW9kZSBhcyB3ZWxsLlxuICAgKiBAYnJlYWtpbmctY2hhbmdlIDE0LjAuMCBSZW1vdmUgYm9vbGVhbiBvcHRpb24gZnJvbSBhdXRvRm9jdXMuIFVzZSBzdHJpbmcgb3IgQXV0b0ZvY3VzVGFyZ2V0XG4gICAqIGluc3RlYWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgYXV0b0ZvY3VzKCk6IEF1dG9Gb2N1c1RhcmdldCB8IHN0cmluZyB8IGJvb2xlYW4ge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fYXV0b0ZvY3VzO1xuXG4gICAgLy8gTm90ZSB0aGF0IHVzdWFsbHkgd2UgZG9uJ3QgYWxsb3cgYXV0b0ZvY3VzIHRvIGJlIHNldCB0byBgZmlyc3QtdGFiYmFibGVgIGluIGBzaWRlYCBtb2RlLFxuICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBob3cgdGhlIHNpZGVuYXYgaXMgYmVpbmcgdXNlZCwgYnV0IGluIHNvbWUgY2FzZXMgaXQgc3RpbGwgbWFrZXNcbiAgICAvLyBzZW5zZSB0byBkbyBpdC4gVGhlIGNvbnN1bWVyIGNhbiBleHBsaWNpdGx5IHNldCBgYXV0b0ZvY3VzYC5cbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpZGUnKSB7XG4gICAgICAgIHJldHVybiAnZGlhbG9nJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAnZmlyc3QtdGFiYmFibGUnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgc2V0IGF1dG9Gb2N1cyh2YWx1ZTogQXV0b0ZvY3VzVGFyZ2V0IHwgc3RyaW5nIHwgYm9vbGVhbikge1xuICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICAgICAgICB2YWx1ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9hdXRvRm9jdXMgPSB2YWx1ZTtcbiAgfVxuICBwcml2YXRlIF9hdXRvRm9jdXM6IEF1dG9Gb2N1c1RhcmdldCB8IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRyYXdlciBpcyBvcGVuZWQuIFdlIG92ZXJsb2FkIHRoaXMgYmVjYXVzZSB3ZSB0cmlnZ2VyIGFuIGV2ZW50IHdoZW4gaXRcbiAgICogc3RhcnRzIG9yIGVuZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBvcGVuZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9vcGVuZWQ7IH1cbiAgc2V0IG9wZW5lZCh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLnRvZ2dsZShjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpKTsgfVxuICBwcml2YXRlIF9vcGVuZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogSG93IHRoZSBzaWRlbmF2IHdhcyBvcGVuZWQgKGtleXByZXNzLCBtb3VzZSBjbGljayBldGMuKSAqL1xuICBwcml2YXRlIF9vcGVuZWRWaWE6IEZvY3VzT3JpZ2luIHwgbnVsbDtcblxuICAvKiogRW1pdHMgd2hlbmV2ZXIgdGhlIGRyYXdlciBoYXMgc3RhcnRlZCBhbmltYXRpbmcuICovXG4gIHJlYWRvbmx5IF9hbmltYXRpb25TdGFydGVkID0gbmV3IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+KCk7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIHRoZSBkcmF3ZXIgaXMgZG9uZSBhbmltYXRpbmcuICovXG4gIHJlYWRvbmx5IF9hbmltYXRpb25FbmQgPSBuZXcgU3ViamVjdDxBbmltYXRpb25FdmVudD4oKTtcblxuICAvKiogQ3VycmVudCBzdGF0ZSBvZiB0aGUgc2lkZW5hdiBhbmltYXRpb24uICovXG4gIC8vIEBIb3N0QmluZGluZyBpcyB1c2VkIGluIHRoZSBjbGFzcyBhcyBpdCBpcyBleHBlY3RlZCB0byBiZSBleHRlbmRlZC4gIFNpbmNlIEBDb21wb25lbnQgZGVjb3JhdG9yXG4gIC8vIG1ldGFkYXRhIGlzIG5vdCBpbmhlcml0ZWQgYnkgY2hpbGQgY2xhc3NlcywgaW5zdGVhZCB0aGUgaG9zdCBiaW5kaW5nIGRhdGEgaXMgZGVmaW5lZCBpbiBhIHdheVxuICAvLyB0aGF0IGNhbiBiZSBpbmhlcml0ZWQuXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1ob3N0LWRlY29yYXRvci1pbi1jb25jcmV0ZVxuICBASG9zdEJpbmRpbmcoJ0B0cmFuc2Zvcm0nKVxuICBfYW5pbWF0aW9uU3RhdGU6ICdvcGVuLWluc3RhbnQnIHwgJ29wZW4nIHwgJ3ZvaWQnID0gJ3ZvaWQnO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGRyYXdlciBvcGVuIHN0YXRlIGlzIGNoYW5nZWQuICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBvcGVuZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XG4gICAgICAvLyBOb3RlIHRoaXMgaGFzIHRvIGJlIGFzeW5jIGluIG9yZGVyIHRvIGF2b2lkIHNvbWUgaXNzdWVzIHdpdGggdHdvLWJpbmRpbmdzIChzZWUgIzg4NzIpLlxuICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigvKiBpc0FzeW5jICovdHJ1ZSk7XG5cbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZHJhd2VyIGhhcyBiZWVuIG9wZW5lZC4gKi9cbiAgQE91dHB1dCgnb3BlbmVkJylcbiAgcmVhZG9ubHkgX29wZW5lZFN0cmVhbSA9IHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoZmlsdGVyKG8gPT4gbyksIG1hcCgoKSA9PiB7fSkpO1xuXG4gIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGRyYXdlciBoYXMgc3RhcnRlZCBvcGVuaW5nLiAqL1xuICBAT3V0cHV0KClcbiAgcmVhZG9ubHkgb3BlbmVkU3RhcnQ6IE9ic2VydmFibGU8dm9pZD4gPSB0aGlzLl9hbmltYXRpb25TdGFydGVkLnBpcGUoXG4gICAgZmlsdGVyKGUgPT4gZS5mcm9tU3RhdGUgIT09IGUudG9TdGF0ZSAmJiBlLnRvU3RhdGUuaW5kZXhPZignb3BlbicpID09PSAwKSxcbiAgICBtYXBUbyh1bmRlZmluZWQpXG4gICk7XG5cbiAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZHJhd2VyIGhhcyBiZWVuIGNsb3NlZC4gKi9cbiAgQE91dHB1dCgnY2xvc2VkJylcbiAgcmVhZG9ubHkgX2Nsb3NlZFN0cmVhbSA9IHRoaXMub3BlbmVkQ2hhbmdlLnBpcGUoZmlsdGVyKG8gPT4gIW8pLCBtYXAoKCkgPT4ge30pKTtcblxuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkcmF3ZXIgaGFzIHN0YXJ0ZWQgY2xvc2luZy4gKi9cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IGNsb3NlZFN0YXJ0OiBPYnNlcnZhYmxlPHZvaWQ+ID0gdGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5waXBlKFxuICAgIGZpbHRlcihlID0+IGUuZnJvbVN0YXRlICE9PSBlLnRvU3RhdGUgJiYgZS50b1N0YXRlID09PSAndm9pZCcpLFxuICAgIG1hcFRvKHVuZGVmaW5lZClcbiAgKTtcblxuICAvKiogRW1pdHMgd2hlbiB0aGUgY29tcG9uZW50IGlzIGRlc3Ryb3llZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkcmF3ZXIncyBwb3NpdGlvbiBjaGFuZ2VzLiAqL1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tb3V0cHV0LW9uLXByZWZpeFxuICBAT3V0cHV0KCdwb3NpdGlvbkNoYW5nZWQnKSByZWFkb25seSBvblBvc2l0aW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHdoZW4gdGhlIGRyYXdlciBtb2RlIGNoYW5nZXMuIFRoaXMgaXMgdXNlZCBieSB0aGUgZHJhd2VyIGNvbnRhaW5lciB0b1xuICAgKiB0byBrbm93IHdoZW4gdG8gd2hlbiB0aGUgbW9kZSBjaGFuZ2VzIHNvIGl0IGNhbiBhZGFwdCB0aGUgbWFyZ2lucyBvbiB0aGUgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IF9tb2RlQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgICAgICAgIHByaXZhdGUgX2ZvY3VzVHJhcEZhY3Rvcnk6IEZvY3VzVHJhcEZhY3RvcnksXG4gICAgICAgICAgICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgICAgICAgICAgICBwcml2YXRlIF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgICAgICAgICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxuICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9pbnRlcmFjdGl2aXR5Q2hlY2tlcjogSW50ZXJhY3Rpdml0eUNoZWNrZXIsXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgX2RvYzogYW55LFxuICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1BVF9EUkFXRVJfQ09OVEFJTkVSKSBwdWJsaWMgX2NvbnRhaW5lcj86IE1hdERyYXdlckNvbnRhaW5lcikge1xuXG4gICAgdGhpcy5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RvYykge1xuICAgICAgICAgIHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkID0gdGhpcy5fZG9jLmFjdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90YWtlRm9jdXMoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNGb2N1c1dpdGhpbkRyYXdlcigpKSB7XG4gICAgICAgIHRoaXMuX3Jlc3RvcmVGb2N1cyh0aGlzLl9vcGVuZWRWaWEgfHwgJ3Byb2dyYW0nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIExpc3RlbiB0byBga2V5ZG93bmAgZXZlbnRzIG91dHNpZGUgdGhlIHpvbmUgc28gdGhhdCBjaGFuZ2UgZGV0ZWN0aW9uIGlzIG5vdCBydW4gZXZlcnlcbiAgICAgKiB0aW1lIGEga2V5IGlzIHByZXNzZWQuIEluc3RlYWQgd2UgcmUtZW50ZXIgdGhlIHpvbmUgb25seSBpZiB0aGUgYEVTQ2Aga2V5IGlzIHByZXNzZWRcbiAgICAgKiBhbmQgd2UgZG9uJ3QgaGF2ZSBjbG9zZSBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAoZnJvbUV2ZW50KHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nKSBhcyBPYnNlcnZhYmxlPEtleWJvYXJkRXZlbnQ+KS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSAmJiAhdGhpcy5kaXNhYmxlQ2xvc2UgJiYgIWhhc01vZGlmaWVyS2V5KGV2ZW50KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICAgKS5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcblxuICAgIC8vIFdlIG5lZWQgYSBTdWJqZWN0IHdpdGggZGlzdGluY3RVbnRpbENoYW5nZWQsIGJlY2F1c2UgdGhlIGBkb25lYCBldmVudFxuICAgIC8vIGZpcmVzIHR3aWNlIG9uIHNvbWUgYnJvd3NlcnMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8yNDA4NFxuICAgIHRoaXMuX2FuaW1hdGlvbkVuZC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCh4LCB5KSA9PiB7XG4gICAgICByZXR1cm4geC5mcm9tU3RhdGUgPT09IHkuZnJvbVN0YXRlICYmIHgudG9TdGF0ZSA9PT0geS50b1N0YXRlO1xuICAgIH0pKS5zdWJzY3JpYmUoKGV2ZW50OiBBbmltYXRpb25FdmVudCkgPT4ge1xuICAgICAgY29uc3Qge2Zyb21TdGF0ZSwgdG9TdGF0ZX0gPSBldmVudDtcblxuICAgICAgaWYgKCh0b1N0YXRlLmluZGV4T2YoJ29wZW4nKSA9PT0gMCAmJiBmcm9tU3RhdGUgPT09ICd2b2lkJykgfHxcbiAgICAgICAgICAodG9TdGF0ZSA9PT0gJ3ZvaWQnICYmIGZyb21TdGF0ZS5pbmRleE9mKCdvcGVuJykgPT09IDApKSB7XG4gICAgICAgIHRoaXMub3BlbmVkQ2hhbmdlLmVtaXQodGhpcy5fb3BlbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1c2VzIHRoZSBwcm92aWRlZCBlbGVtZW50LiBJZiB0aGUgZWxlbWVudCBpcyBub3QgZm9jdXNhYmxlLCBpdCB3aWxsIGFkZCBhIHRhYkluZGV4XG4gICAqIGF0dHJpYnV0ZSB0byBmb3JjZWZ1bGx5IGZvY3VzIGl0LiBUaGUgYXR0cmlidXRlIGlzIHJlbW92ZWQgYWZ0ZXIgZm9jdXMgaXMgbW92ZWQuXG4gICAqIEBwYXJhbSBlbGVtZW50IFRoZSBlbGVtZW50IHRvIGZvY3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZm9yY2VGb2N1cyhlbGVtZW50OiBIVE1MRWxlbWVudCwgb3B0aW9ucz86IEZvY3VzT3B0aW9ucykge1xuICAgIGlmICghdGhpcy5faW50ZXJhY3Rpdml0eUNoZWNrZXIuaXNGb2N1c2FibGUoZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgIC8vIFRoZSB0YWJpbmRleCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHJlbW92ZWQgdG8gYXZvaWQgbmF2aWdhdGluZyB0byB0aGF0IGVsZW1lbnQgYWdhaW5cbiAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpKTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoKSA9PiBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxlbWVudC5mb2N1cyhvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1c2VzIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2VsZWN0b3Igd2l0aGluIHRoZSBmb2N1cyB0cmFwLlxuICAgKiBAcGFyYW0gc2VsZWN0b3IgVGhlIENTUyBzZWxlY3RvciBmb3IgdGhlIGVsZW1lbnQgdG8gc2V0IGZvY3VzIHRvLlxuICAgKi9cbiAgcHJpdmF0ZSBfZm9jdXNCeUNzc1NlbGVjdG9yKHNlbGVjdG9yOiBzdHJpbmcsIG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpIHtcbiAgICBsZXQgZWxlbWVudFRvRm9jdXMgPVxuICAgICAgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICBpZiAoZWxlbWVudFRvRm9jdXMpIHtcbiAgICAgIHRoaXMuX2ZvcmNlRm9jdXMoZWxlbWVudFRvRm9jdXMsIG9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb3ZlcyBmb2N1cyBpbnRvIHRoZSBkcmF3ZXIuIE5vdGUgdGhhdCB0aGlzIHdvcmtzIGV2ZW4gaWZcbiAgICogdGhlIGZvY3VzIHRyYXAgaXMgZGlzYWJsZWQgaW4gYHNpZGVgIG1vZGUuXG4gICAqL1xuICBwcml2YXRlIF90YWtlRm9jdXMoKSB7XG4gICAgaWYgKCF0aGlzLl9mb2N1c1RyYXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgLy8gV2hlbiBhdXRvRm9jdXMgaXMgbm90IG9uIHRoZSBzaWRlbmF2LCBpZiB0aGUgZWxlbWVudCBjYW5ub3QgYmUgZm9jdXNlZCBvciBkb2VzXG4gICAgLy8gbm90IGV4aXN0LCBmb2N1cyB0aGUgc2lkZW5hdiBpdHNlbGYgc28gdGhlIGtleWJvYXJkIG5hdmlnYXRpb24gc3RpbGwgd29ya3MuXG4gICAgLy8gV2UgbmVlZCB0byBjaGVjayB0aGF0IGBmb2N1c2AgaXMgYSBmdW5jdGlvbiBkdWUgdG8gVW5pdmVyc2FsLlxuICAgIHN3aXRjaCAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIGNhc2UgZmFsc2U6XG4gICAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIHRydWU6XG4gICAgICBjYXNlICdmaXJzdC10YWJiYWJsZSc6XG4gICAgICAgIHRoaXMuX2ZvY3VzVHJhcC5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCkudGhlbihoYXNNb3ZlZEZvY3VzID0+IHtcbiAgICAgICAgICBpZiAoIWhhc01vdmVkRm9jdXMgJiYgdHlwZW9mIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgZWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZmlyc3QtaGVhZGluZyc6XG4gICAgICAgIHRoaXMuX2ZvY3VzQnlDc3NTZWxlY3RvcignaDEsIGgyLCBoMywgaDQsIGg1LCBoNiwgW3JvbGU9XCJoZWFkaW5nXCJdJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5fZm9jdXNCeUNzc1NlbGVjdG9yKHRoaXMuYXV0b0ZvY3VzISk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBmb2N1cyB0byB0aGUgZWxlbWVudCB0aGF0IHdhcyBvcmlnaW5hbGx5IGZvY3VzZWQgd2hlbiB0aGUgZHJhd2VyIG9wZW5lZC5cbiAgICogSWYgbm8gZWxlbWVudCB3YXMgZm9jdXNlZCBhdCB0aGF0IHRpbWUsIHRoZSBmb2N1cyB3aWxsIGJlIHJlc3RvcmVkIHRvIHRoZSBkcmF3ZXIuXG4gICAqL1xuICBwcml2YXRlIF9yZXN0b3JlRm9jdXMoZm9jdXNPcmlnaW46IEV4Y2x1ZGU8Rm9jdXNPcmlnaW4sIG51bGw+KSB7XG4gICAgaWYgKHRoaXMuYXV0b0ZvY3VzID09PSAnZGlhbG9nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9lbGVtZW50Rm9jdXNlZEJlZm9yZURyYXdlcldhc09wZW5lZCkge1xuICAgICAgdGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2VsZW1lbnRGb2N1c2VkQmVmb3JlRHJhd2VyV2FzT3BlbmVkLCBmb2N1c09yaWdpbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudEZvY3VzZWRCZWZvcmVEcmF3ZXJXYXNPcGVuZWQgPSBudWxsO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgZm9jdXMgaXMgY3VycmVudGx5IHdpdGhpbiB0aGUgZHJhd2VyLiAqL1xuICBwcml2YXRlIF9pc0ZvY3VzV2l0aGluRHJhd2VyKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFjdGl2ZUVsID0gdGhpcy5fZG9jPy5hY3RpdmVFbGVtZW50O1xuICAgIHJldHVybiAhIWFjdGl2ZUVsICYmIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhhY3RpdmVFbCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5fZm9jdXNUcmFwID0gdGhpcy5fZm9jdXNUcmFwRmFjdG9yeS5jcmVhdGUodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB0aGlzLl91cGRhdGVGb2N1c1RyYXBTdGF0ZSgpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgIC8vIEVuYWJsZSB0aGUgYW5pbWF0aW9ucyBhZnRlciB0aGUgbGlmZWN5Y2xlIGhvb2tzIGhhdmUgcnVuLCBpbiBvcmRlciB0byBhdm9pZCBhbmltYXRpbmdcbiAgICAvLyBkcmF3ZXJzIHRoYXQgYXJlIG9wZW4gYnkgZGVmYXVsdC4gV2hlbiB3ZSdyZSBvbiB0aGUgc2VydmVyLCB3ZSBzaG91bGRuJ3QgZW5hYmxlIHRoZVxuICAgIC8vIGFuaW1hdGlvbnMsIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgZHJhd2VyIHRvIGFuaW1hdGUgdGhlIGZpcnN0IHRpbWUgdGhlIHVzZXIgc2Vlc1xuICAgIC8vIHRoZSBwYWdlLlxuICAgIGlmICh0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpIHtcbiAgICAgIHRoaXMuX2VuYWJsZUFuaW1hdGlvbnMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLl9mb2N1c1RyYXApIHtcbiAgICAgIHRoaXMuX2ZvY3VzVHJhcC5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgdGhpcy5fYW5pbWF0aW9uU3RhcnRlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2FuaW1hdGlvbkVuZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX21vZGVDaGFuZ2VkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBkcmF3ZXIuXG4gICAqIEBwYXJhbSBvcGVuZWRWaWEgV2hldGhlciB0aGUgZHJhd2VyIHdhcyBvcGVuZWQgYnkgYSBrZXkgcHJlc3MsIG1vdXNlIGNsaWNrIG9yIHByb2dyYW1tYXRpY2FsbHkuXG4gICAqIFVzZWQgZm9yIGZvY3VzIG1hbmFnZW1lbnQgYWZ0ZXIgdGhlIHNpZGVuYXYgaXMgY2xvc2VkLlxuICAgKi9cbiAgb3BlbihvcGVuZWRWaWE/OiBGb2N1c09yaWdpbik6IFByb21pc2U8TWF0RHJhd2VyVG9nZ2xlUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMudG9nZ2xlKHRydWUsIG9wZW5lZFZpYSk7XG4gIH1cblxuICAvKiogQ2xvc2UgdGhlIGRyYXdlci4gKi9cbiAgY2xvc2UoKTogUHJvbWlzZTxNYXREcmF3ZXJUb2dnbGVSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy50b2dnbGUoZmFsc2UpO1xuICB9XG5cbiAgLyoqIENsb3NlcyB0aGUgZHJhd2VyIHdpdGggY29udGV4dCB0aGF0IHRoZSBiYWNrZHJvcCB3YXMgY2xpY2tlZC4gKi9cbiAgX2Nsb3NlVmlhQmFja2Ryb3BDbGljaygpOiBQcm9taXNlPE1hdERyYXdlclRvZ2dsZVJlc3VsdD4ge1xuICAgIC8vIElmIHRoZSBkcmF3ZXIgaXMgY2xvc2VkIHVwb24gYSBiYWNrZHJvcCBjbGljaywgd2UgYWx3YXlzIHdhbnQgdG8gcmVzdG9yZSBmb2N1cy4gV2VcbiAgICAvLyBkb24ndCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgZm9jdXMgaXMgY3VycmVudGx5IGluIHRoZSBkcmF3ZXIsIGFzIGNsaWNraW5nIG9uIHRoZVxuICAgIC8vIGJhY2tkcm9wIGNhdXNlcyBibHVycyB0aGUgYWN0aXZlIGVsZW1lbnQuXG4gICAgcmV0dXJuIHRoaXMuX3NldE9wZW4oLyogaXNPcGVuICovIGZhbHNlLCAvKiByZXN0b3JlRm9jdXMgKi8gdHJ1ZSwgJ21vdXNlJyk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHRoaXMgZHJhd2VyLlxuICAgKiBAcGFyYW0gaXNPcGVuIFdoZXRoZXIgdGhlIGRyYXdlciBzaG91bGQgYmUgb3Blbi5cbiAgICogQHBhcmFtIG9wZW5lZFZpYSBXaGV0aGVyIHRoZSBkcmF3ZXIgd2FzIG9wZW5lZCBieSBhIGtleSBwcmVzcywgbW91c2UgY2xpY2sgb3IgcHJvZ3JhbW1hdGljYWxseS5cbiAgICogVXNlZCBmb3IgZm9jdXMgbWFuYWdlbWVudCBhZnRlciB0aGUgc2lkZW5hdiBpcyBjbG9zZWQuXG4gICAqL1xuICB0b2dnbGUoaXNPcGVuOiBib29sZWFuID0gIXRoaXMub3BlbmVkLCBvcGVuZWRWaWE/OiBGb2N1c09yaWdpbilcbiAgICAgIDogUHJvbWlzZTxNYXREcmF3ZXJUb2dnbGVSZXN1bHQ+IHtcbiAgICAvLyBJZiB0aGUgZm9jdXMgaXMgY3VycmVudGx5IGluc2lkZSB0aGUgZHJhd2VyIGNvbnRlbnQgYW5kIHdlIGFyZSBjbG9zaW5nIHRoZSBkcmF3ZXIsXG4gICAgLy8gcmVzdG9yZSB0aGUgZm9jdXMgdG8gdGhlIGluaXRpYWxseSBmb2N1c2VkIGVsZW1lbnQgKHdoZW4gdGhlIGRyYXdlciBvcGVuZWQpLlxuICAgIGlmIChpc09wZW4gJiYgb3BlbmVkVmlhKSB7XG4gICAgICB0aGlzLl9vcGVuZWRWaWEgPSBvcGVuZWRWaWE7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fc2V0T3Blbihpc09wZW4sIC8qIHJlc3RvcmVGb2N1cyAqLyAhaXNPcGVuICYmIHRoaXMuX2lzRm9jdXNXaXRoaW5EcmF3ZXIoKSxcbiAgICAgIHRoaXMuX29wZW5lZFZpYSB8fCAncHJvZ3JhbScpO1xuXG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHRoaXMuX29wZW5lZFZpYSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBvcGVuZWQgc3RhdGUgb2YgdGhlIGRyYXdlci5cbiAgICogQHBhcmFtIGlzT3BlbiBXaGV0aGVyIHRoZSBkcmF3ZXIgc2hvdWxkIG9wZW4gb3IgY2xvc2UuXG4gICAqIEBwYXJhbSByZXN0b3JlRm9jdXMgV2hldGhlciBmb2N1cyBzaG91bGQgYmUgcmVzdG9yZWQgb24gY2xvc2UuXG4gICAqIEBwYXJhbSBmb2N1c09yaWdpbiBPcmlnaW4gdG8gdXNlIHdoZW4gcmVzdG9yaW5nIGZvY3VzLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0T3Blbihpc09wZW46IGJvb2xlYW4sIHJlc3RvcmVGb2N1czogYm9vbGVhbiwgZm9jdXNPcmlnaW46IEV4Y2x1ZGU8Rm9jdXNPcmlnaW4sIG51bGw+KTpcbiAgICBQcm9taXNlPE1hdERyYXdlclRvZ2dsZVJlc3VsdD4ge1xuICAgIHRoaXMuX29wZW5lZCA9IGlzT3BlbjtcblxuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIHRoaXMuX2FuaW1hdGlvblN0YXRlID0gdGhpcy5fZW5hYmxlQW5pbWF0aW9ucyA/ICdvcGVuJyA6ICdvcGVuLWluc3RhbnQnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9hbmltYXRpb25TdGF0ZSA9ICd2b2lkJztcbiAgICAgIGlmIChyZXN0b3JlRm9jdXMpIHtcbiAgICAgICAgdGhpcy5fcmVzdG9yZUZvY3VzKGZvY3VzT3JpZ2luKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVGb2N1c1RyYXBTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPE1hdERyYXdlclRvZ2dsZVJlc3VsdD4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9wZW5lZENoYW5nZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShvcGVuID0+IHJlc29sdmUob3BlbiA/ICdvcGVuJyA6ICdjbG9zZScpKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9nZXRXaWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgPyAodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIHx8IDApIDogMDtcbiAgfVxuXG4gIC8qKiBVcGRhdGVzIHRoZSBlbmFibGVkIHN0YXRlIG9mIHRoZSBmb2N1cyB0cmFwLiAqL1xuICBwcml2YXRlIF91cGRhdGVGb2N1c1RyYXBTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy5fZm9jdXNUcmFwKSB7XG4gICAgICAvLyBUaGUgZm9jdXMgdHJhcCBpcyBvbmx5IGVuYWJsZWQgd2hlbiB0aGUgZHJhd2VyIGlzIG9wZW4gaW4gYW55IG1vZGUgb3RoZXIgdGhhbiBzaWRlLlxuICAgICAgdGhpcy5fZm9jdXNUcmFwLmVuYWJsZWQgPSB0aGlzLm9wZW5lZCAmJiB0aGlzLm1vZGUgIT09ICdzaWRlJztcbiAgICB9XG4gIH1cblxuICAvLyBXZSBoYXZlIHRvIHVzZSBhIGBIb3N0TGlzdGVuZXJgIGhlcmUgaW4gb3JkZXIgdG8gc3VwcG9ydCBib3RoIEl2eSBhbmQgVmlld0VuZ2luZS5cbiAgLy8gSW4gSXZ5IHRoZSBgaG9zdGAgYmluZGluZ3Mgd2lsbCBiZSBtZXJnZWQgd2hlbiB0aGlzIGNsYXNzIGlzIGV4dGVuZGVkLCB3aGVyZWFzIGluXG4gIC8vIFZpZXdFbmdpbmUgdGhleSdyZSBvdmVyd3JpdHRlbi5cbiAgLy8gVE9ETyhjcmlzYmV0byk6IHdlIG1vdmUgdGhpcyBiYWNrIGludG8gYGhvc3RgIG9uY2UgSXZ5IGlzIHR1cm5lZCBvbiBieSBkZWZhdWx0LlxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taG9zdC1kZWNvcmF0b3ItaW4tY29uY3JldGVcbiAgQEhvc3RMaXN0ZW5lcignQHRyYW5zZm9ybS5zdGFydCcsIFsnJGV2ZW50J10pXG4gIF9hbmltYXRpb25TdGFydExpc3RlbmVyKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHRoaXMuX2FuaW1hdGlvblN0YXJ0ZWQubmV4dChldmVudCk7XG4gIH1cblxuICAvLyBXZSBoYXZlIHRvIHVzZSBhIGBIb3N0TGlzdGVuZXJgIGhlcmUgaW4gb3JkZXIgdG8gc3VwcG9ydCBib3RoIEl2eSBhbmQgVmlld0VuZ2luZS5cbiAgLy8gSW4gSXZ5IHRoZSBgaG9zdGAgYmluZGluZ3Mgd2lsbCBiZSBtZXJnZWQgd2hlbiB0aGlzIGNsYXNzIGlzIGV4dGVuZGVkLCB3aGVyZWFzIGluXG4gIC8vIFZpZXdFbmdpbmUgdGhleSdyZSBvdmVyd3JpdHRlbi5cbiAgLy8gVE9ETyhjcmlzYmV0byk6IHdlIG1vdmUgdGhpcyBiYWNrIGludG8gYGhvc3RgIG9uY2UgSXZ5IGlzIHR1cm5lZCBvbiBieSBkZWZhdWx0LlxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taG9zdC1kZWNvcmF0b3ItaW4tY29uY3JldGVcbiAgQEhvc3RMaXN0ZW5lcignQHRyYW5zZm9ybS5kb25lJywgWyckZXZlbnQnXSlcbiAgX2FuaW1hdGlvbkRvbmVMaXN0ZW5lcihldmVudDogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICB0aGlzLl9hbmltYXRpb25FbmQubmV4dChldmVudCk7XG4gIH1cblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZGlzYWJsZUNsb3NlOiBCb29sZWFuSW5wdXQ7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9hdXRvRm9jdXM6IEF1dG9Gb2N1c1RhcmdldCB8IHN0cmluZyB8IEJvb2xlYW5JbnB1dDtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29wZW5lZDogQm9vbGVhbklucHV0O1xufVxuXG5cbi8qKlxuICogYDxtYXQtZHJhd2VyLWNvbnRhaW5lcj5gIGNvbXBvbmVudC5cbiAqXG4gKiBUaGlzIGlzIHRoZSBwYXJlbnQgY29tcG9uZW50IHRvIG9uZSBvciB0d28gYDxtYXQtZHJhd2VyPmBzIHRoYXQgdmFsaWRhdGVzIHRoZSBzdGF0ZSBpbnRlcm5hbGx5XG4gKiBhbmQgY29vcmRpbmF0ZXMgdGhlIGJhY2tkcm9wIGFuZCBjb250ZW50IHN0eWxpbmcuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1kcmF3ZXItY29udGFpbmVyJyxcbiAgZXhwb3J0QXM6ICdtYXREcmF3ZXJDb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJ2RyYXdlci1jb250YWluZXIuaHRtbCcsXG4gIHN0eWxlVXJsczogWydkcmF3ZXIuY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICAnY2xhc3MnOiAnbWF0LWRyYXdlci1jb250YWluZXInLFxuICAgICdbY2xhc3MubWF0LWRyYXdlci1jb250YWluZXItZXhwbGljaXQtYmFja2Ryb3BdJzogJ19iYWNrZHJvcE92ZXJyaWRlJyxcbiAgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW3tcbiAgICBwcm92aWRlOiBNQVRfRFJBV0VSX0NPTlRBSU5FUixcbiAgICB1c2VFeGlzdGluZzogTWF0RHJhd2VyQ29udGFpbmVyXG4gIH1dXG59KVxuZXhwb3J0IGNsYXNzIE1hdERyYXdlckNvbnRhaW5lciBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIERvQ2hlY2ssIE9uRGVzdHJveSB7XG4gIC8qKiBBbGwgZHJhd2VycyBpbiB0aGUgY29udGFpbmVyLiBJbmNsdWRlcyBkcmF3ZXJzIGZyb20gaW5zaWRlIG5lc3RlZCBjb250YWluZXJzLiAqL1xuICBAQ29udGVudENoaWxkcmVuKE1hdERyYXdlciwge1xuICAgIC8vIFdlIG5lZWQgdG8gdXNlIGBkZXNjZW5kYW50czogdHJ1ZWAsIGJlY2F1c2UgSXZ5IHdpbGwgbm8gbG9uZ2VyIG1hdGNoXG4gICAgLy8gaW5kaXJlY3QgZGVzY2VuZGFudHMgaWYgaXQncyBsZWZ0IGFzIGZhbHNlLlxuICAgIGRlc2NlbmRhbnRzOiB0cnVlXG4gIH0pXG4gIF9hbGxEcmF3ZXJzOiBRdWVyeUxpc3Q8TWF0RHJhd2VyPjtcblxuICAvKiogRHJhd2VycyB0aGF0IGJlbG9uZyB0byB0aGlzIGNvbnRhaW5lci4gKi9cbiAgX2RyYXdlcnMgPSBuZXcgUXVlcnlMaXN0PE1hdERyYXdlcj4oKTtcblxuICBAQ29udGVudENoaWxkKE1hdERyYXdlckNvbnRlbnQpIF9jb250ZW50OiBNYXREcmF3ZXJDb250ZW50O1xuICBAVmlld0NoaWxkKE1hdERyYXdlckNvbnRlbnQpIF91c2VyQ29udGVudDogTWF0RHJhd2VyQ29udGVudDtcblxuICAvKiogVGhlIGRyYXdlciBjaGlsZCB3aXRoIHRoZSBgc3RhcnRgIHBvc2l0aW9uLiAqL1xuICBnZXQgc3RhcnQoKTogTWF0RHJhd2VyIHwgbnVsbCB7IHJldHVybiB0aGlzLl9zdGFydDsgfVxuXG4gIC8qKiBUaGUgZHJhd2VyIGNoaWxkIHdpdGggdGhlIGBlbmRgIHBvc2l0aW9uLiAqL1xuICBnZXQgZW5kKCk6IE1hdERyYXdlciB8IG51bGwgeyByZXR1cm4gdGhpcy5fZW5kOyB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYXV0b21hdGljYWxseSByZXNpemUgdGhlIGNvbnRhaW5lciB3aGVuZXZlclxuICAgKiB0aGUgc2l6ZSBvZiBhbnkgb2YgaXRzIGRyYXdlcnMgY2hhbmdlcy5cbiAgICpcbiAgICogKipVc2UgYXQgeW91ciBvd24gcmlzayEqKiBFbmFibGluZyB0aGlzIG9wdGlvbiBjYW4gY2F1c2UgbGF5b3V0IHRocmFzaGluZyBieSBtZWFzdXJpbmdcbiAgICogdGhlIGRyYXdlcnMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZS4gQ2FuIGJlIGNvbmZpZ3VyZWQgZ2xvYmFsbHkgdmlhIHRoZVxuICAgKiBgTUFUX0RSQVdFUl9ERUZBVUxUX0FVVE9TSVpFYCB0b2tlbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBhdXRvc2l6ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2F1dG9zaXplOyB9XG4gIHNldCBhdXRvc2l6ZSh2YWx1ZTogYm9vbGVhbikgeyB0aGlzLl9hdXRvc2l6ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7IH1cbiAgcHJpdmF0ZSBfYXV0b3NpemU6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGRyYXdlciBjb250YWluZXIgc2hvdWxkIGhhdmUgYSBiYWNrZHJvcCB3aGlsZSBvbmUgb2YgdGhlIHNpZGVuYXZzIGlzIG9wZW4uXG4gICAqIElmIGV4cGxpY2l0bHkgc2V0IHRvIGB0cnVlYCwgdGhlIGJhY2tkcm9wIHdpbGwgYmUgZW5hYmxlZCBmb3IgZHJhd2VycyBpbiB0aGUgYHNpZGVgXG4gICAqIG1vZGUgYXMgd2VsbC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBoYXNCYWNrZHJvcCgpIHtcbiAgICBpZiAodGhpcy5fYmFja2Ryb3BPdmVycmlkZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gIXRoaXMuX3N0YXJ0IHx8IHRoaXMuX3N0YXJ0Lm1vZGUgIT09ICdzaWRlJyB8fCAhdGhpcy5fZW5kIHx8IHRoaXMuX2VuZC5tb2RlICE9PSAnc2lkZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2JhY2tkcm9wT3ZlcnJpZGU7XG4gIH1cbiAgc2V0IGhhc0JhY2tkcm9wKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLl9iYWNrZHJvcE92ZXJyaWRlID0gdmFsdWUgPT0gbnVsbCA/IG51bGwgOiBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIF9iYWNrZHJvcE92ZXJyaWRlOiBib29sZWFuIHwgbnVsbDtcblxuICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBkcmF3ZXIgYmFja2Ryb3AgaXMgY2xpY2tlZC4gKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGJhY2tkcm9wQ2xpY2s6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogVGhlIGRyYXdlciBhdCB0aGUgc3RhcnQvZW5kIHBvc2l0aW9uLCBpbmRlcGVuZGVudCBvZiBkaXJlY3Rpb24uICovXG4gIHByaXZhdGUgX3N0YXJ0OiBNYXREcmF3ZXIgfCBudWxsO1xuICBwcml2YXRlIF9lbmQ6IE1hdERyYXdlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFRoZSBkcmF3ZXIgYXQgdGhlIGxlZnQvcmlnaHQuIFdoZW4gZGlyZWN0aW9uIGNoYW5nZXMsIHRoZXNlIHdpbGwgY2hhbmdlIGFzIHdlbGwuXG4gICAqIFRoZXkncmUgdXNlZCBhcyBhbGlhc2VzIGZvciB0aGUgYWJvdmUgdG8gc2V0IHRoZSBsZWZ0L3JpZ2h0IHN0eWxlIHByb3Blcmx5LlxuICAgKiBJbiBMVFIsIF9sZWZ0ID09IF9zdGFydCBhbmQgX3JpZ2h0ID09IF9lbmQuXG4gICAqIEluIFJUTCwgX2xlZnQgPT0gX2VuZCBhbmQgX3JpZ2h0ID09IF9zdGFydC5cbiAgICovXG4gIHByaXZhdGUgX2xlZnQ6IE1hdERyYXdlciB8IG51bGw7XG4gIHByaXZhdGUgX3JpZ2h0OiBNYXREcmF3ZXIgfCBudWxsO1xuXG4gIC8qKiBFbWl0cyB3aGVuIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKiBFbWl0cyBvbiBldmVyeSBuZ0RvQ2hlY2suIFVzZWQgZm9yIGRlYm91bmNpbmcgcmVmbG93cy4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9DaGVja1N1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBNYXJnaW5zIHRvIGJlIGFwcGxpZWQgdG8gdGhlIGNvbnRlbnQuIFRoZXNlIGFyZSB1c2VkIHRvIHB1c2ggLyBzaHJpbmsgdGhlIGRyYXdlciBjb250ZW50IHdoZW4gYVxuICAgKiBkcmF3ZXIgaXMgb3Blbi4gV2UgdXNlIG1hcmdpbiByYXRoZXIgdGhhbiB0cmFuc2Zvcm0gZXZlbiBmb3IgcHVzaCBtb2RlIGJlY2F1c2UgdHJhbnNmb3JtIGJyZWFrc1xuICAgKiBmaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBpbnNpZGUgb2YgdGhlIHRyYW5zZm9ybWVkIGVsZW1lbnQuXG4gICAqL1xuICBfY29udGVudE1hcmdpbnM6IHtsZWZ0OiBudW1iZXJ8bnVsbCwgcmlnaHQ6IG51bWJlcnxudWxsfSA9IHtsZWZ0OiBudWxsLCByaWdodDogbnVsbH07XG5cbiAgcmVhZG9ubHkgX2NvbnRlbnRNYXJnaW5DaGFuZ2VzID0gbmV3IFN1YmplY3Q8e2xlZnQ6IG51bWJlcnxudWxsLCByaWdodDogbnVtYmVyfG51bGx9PigpO1xuXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIENka1Njcm9sbGFibGUgaW5zdGFuY2UgdGhhdCB3cmFwcyB0aGUgc2Nyb2xsYWJsZSBjb250ZW50LiAqL1xuICBnZXQgc2Nyb2xsYWJsZSgpOiBDZGtTY3JvbGxhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlckNvbnRlbnQgfHwgdGhpcy5fY29udGVudDtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIHByaXZhdGUgX2RpcjogRGlyZWN0aW9uYWxpdHksXG4gICAgICAgICAgICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICAgICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgICAgICAgICAgICBASW5qZWN0KE1BVF9EUkFXRVJfREVGQVVMVF9BVVRPU0laRSkgZGVmYXVsdEF1dG9zaXplID0gZmFsc2UsXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQU5JTUFUSU9OX01PRFVMRV9UWVBFKSBwcml2YXRlIF9hbmltYXRpb25Nb2RlPzogc3RyaW5nKSB7XG5cbiAgICAvLyBJZiBhIGBEaXJgIGRpcmVjdGl2ZSBleGlzdHMgdXAgdGhlIHRyZWUsIGxpc3RlbiBkaXJlY3Rpb24gY2hhbmdlc1xuICAgIC8vIGFuZCB1cGRhdGUgdGhlIGxlZnQvcmlnaHQgcHJvcGVydGllcyB0byBwb2ludCB0byB0aGUgcHJvcGVyIHN0YXJ0L2VuZC5cbiAgICBpZiAoX2Rpcikge1xuICAgICAgX2Rpci5jaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVEcmF3ZXJzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlQ29udGVudE1hcmdpbnMoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNpbmNlIHRoZSBtaW5pbXVtIHdpZHRoIG9mIHRoZSBzaWRlbmF2IGRlcGVuZHMgb24gdGhlIHZpZXdwb3J0IHdpZHRoLFxuICAgIC8vIHdlIG5lZWQgdG8gcmVjb21wdXRlIHRoZSBtYXJnaW5zIGlmIHRoZSB2aWV3cG9ydCBjaGFuZ2VzLlxuICAgIHZpZXdwb3J0UnVsZXIuY2hhbmdlKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbnRlbnRNYXJnaW5zKCkpO1xuXG4gICAgdGhpcy5fYXV0b3NpemUgPSBkZWZhdWx0QXV0b3NpemU7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5fYWxsRHJhd2Vycy5jaGFuZ2VzXG4gICAgICAucGlwZShzdGFydFdpdGgodGhpcy5fYWxsRHJhd2VycyksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgLnN1YnNjcmliZSgoZHJhd2VyOiBRdWVyeUxpc3Q8TWF0RHJhd2VyPikgPT4ge1xuICAgICAgICB0aGlzLl9kcmF3ZXJzLnJlc2V0KGRyYXdlci5maWx0ZXIoaXRlbSA9PiAhaXRlbS5fY29udGFpbmVyIHx8IGl0ZW0uX2NvbnRhaW5lciA9PT0gdGhpcykpO1xuICAgICAgICB0aGlzLl9kcmF3ZXJzLm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9kcmF3ZXJzLmNoYW5nZXMucGlwZShzdGFydFdpdGgobnVsbCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl92YWxpZGF0ZURyYXdlcnMoKTtcblxuICAgICAgdGhpcy5fZHJhd2Vycy5mb3JFYWNoKChkcmF3ZXI6IE1hdERyYXdlcikgPT4ge1xuICAgICAgICB0aGlzLl93YXRjaERyYXdlclRvZ2dsZShkcmF3ZXIpO1xuICAgICAgICB0aGlzLl93YXRjaERyYXdlclBvc2l0aW9uKGRyYXdlcik7XG4gICAgICAgIHRoaXMuX3dhdGNoRHJhd2VyTW9kZShkcmF3ZXIpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICghdGhpcy5fZHJhd2Vycy5sZW5ndGggfHxcbiAgICAgICAgICB0aGlzLl9pc0RyYXdlck9wZW4odGhpcy5fc3RhcnQpIHx8XG4gICAgICAgICAgdGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX2VuZCkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDb250ZW50TWFyZ2lucygpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIC8vIEF2b2lkIGhpdHRpbmcgdGhlIE5nWm9uZSB0aHJvdWdoIHRoZSBkZWJvdW5jZSB0aW1lb3V0LlxuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLl9kb0NoZWNrU3ViamVjdC5waXBlKFxuICAgICAgICBkZWJvdW5jZVRpbWUoMTApLCAvLyBBcmJpdHJhcnkgZGVib3VuY2UgdGltZSwgbGVzcyB0aGFuIGEgZnJhbWUgYXQgNjBmcHNcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZClcbiAgICAgICkuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlQ29udGVudE1hcmdpbnMoKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9jb250ZW50TWFyZ2luQ2hhbmdlcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2RvQ2hlY2tTdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fZHJhd2Vycy5kZXN0cm95KCk7XG4gICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKiBDYWxscyBgb3BlbmAgb2YgYm90aCBzdGFydCBhbmQgZW5kIGRyYXdlcnMgKi9cbiAgb3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLl9kcmF3ZXJzLmZvckVhY2goZHJhd2VyID0+IGRyYXdlci5vcGVuKCkpO1xuICB9XG5cbiAgLyoqIENhbGxzIGBjbG9zZWAgb2YgYm90aCBzdGFydCBhbmQgZW5kIGRyYXdlcnMgKi9cbiAgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZHJhd2Vycy5mb3JFYWNoKGRyYXdlciA9PiBkcmF3ZXIuY2xvc2UoKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjYWxjdWxhdGVzIGFuZCB1cGRhdGVzIHRoZSBpbmxpbmUgc3R5bGVzIGZvciB0aGUgY29udGVudC4gTm90ZSB0aGF0IHRoaXMgc2hvdWxkIGJlIHVzZWRcbiAgICogc3BhcmluZ2x5LCBiZWNhdXNlIGl0IGNhdXNlcyBhIHJlZmxvdy5cbiAgICovXG4gIHVwZGF0ZUNvbnRlbnRNYXJnaW5zKCkge1xuICAgIC8vIDEuIEZvciBkcmF3ZXJzIGluIGBvdmVyYCBtb2RlLCB0aGV5IGRvbid0IGFmZmVjdCB0aGUgY29udGVudC5cbiAgICAvLyAyLiBGb3IgZHJhd2VycyBpbiBgc2lkZWAgbW9kZSB0aGV5IHNob3VsZCBzaHJpbmsgdGhlIGNvbnRlbnQuIFdlIGRvIHRoaXMgYnkgYWRkaW5nIHRvIHRoZVxuICAgIC8vICAgIGxlZnQgbWFyZ2luIChmb3IgbGVmdCBkcmF3ZXIpIG9yIHJpZ2h0IG1hcmdpbiAoZm9yIHJpZ2h0IHRoZSBkcmF3ZXIpLlxuICAgIC8vIDMuIEZvciBkcmF3ZXJzIGluIGBwdXNoYCBtb2RlIHRoZSBzaG91bGQgc2hpZnQgdGhlIGNvbnRlbnQgd2l0aG91dCByZXNpemluZyBpdC4gV2UgZG8gdGhpcyBieVxuICAgIC8vICAgIGFkZGluZyB0byB0aGUgbGVmdCBvciByaWdodCBtYXJnaW4gYW5kIHNpbXVsdGFuZW91c2x5IHN1YnRyYWN0aW5nIHRoZSBzYW1lIGFtb3VudCBvZlxuICAgIC8vICAgIG1hcmdpbiBmcm9tIHRoZSBvdGhlciBzaWRlLlxuICAgIGxldCBsZWZ0ID0gMDtcbiAgICBsZXQgcmlnaHQgPSAwO1xuXG4gICAgaWYgKHRoaXMuX2xlZnQgJiYgdGhpcy5fbGVmdC5vcGVuZWQpIHtcbiAgICAgIGlmICh0aGlzLl9sZWZ0Lm1vZGUgPT0gJ3NpZGUnKSB7XG4gICAgICAgIGxlZnQgKz0gdGhpcy5fbGVmdC5fZ2V0V2lkdGgoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fbGVmdC5tb2RlID09ICdwdXNoJykge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuX2xlZnQuX2dldFdpZHRoKCk7XG4gICAgICAgIGxlZnQgKz0gd2lkdGg7XG4gICAgICAgIHJpZ2h0IC09IHdpZHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9yaWdodCAmJiB0aGlzLl9yaWdodC5vcGVuZWQpIHtcbiAgICAgIGlmICh0aGlzLl9yaWdodC5tb2RlID09ICdzaWRlJykge1xuICAgICAgICByaWdodCArPSB0aGlzLl9yaWdodC5fZ2V0V2lkdGgoKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fcmlnaHQubW9kZSA9PSAncHVzaCcpIHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLl9yaWdodC5fZ2V0V2lkdGgoKTtcbiAgICAgICAgcmlnaHQgKz0gd2lkdGg7XG4gICAgICAgIGxlZnQgLT0gd2lkdGg7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgZWl0aGVyIGByaWdodGAgb3IgYGxlZnRgIGlzIHplcm8sIGRvbid0IHNldCBhIHN0eWxlIHRvIHRoZSBlbGVtZW50LiBUaGlzXG4gICAgLy8gYWxsb3dzIHVzZXJzIHRvIHNwZWNpZnkgYSBjdXN0b20gc2l6ZSB2aWEgQ1NTIGNsYXNzIGluIFNTUiBzY2VuYXJpb3Mgd2hlcmUgdGhlXG4gICAgLy8gbWVhc3VyZWQgd2lkdGhzIHdpbGwgYWx3YXlzIGJlIHplcm8uIE5vdGUgdGhhdCB3ZSByZXNldCB0byBgbnVsbGAgaGVyZSwgcmF0aGVyXG4gICAgLy8gdGhhbiBiZWxvdywgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHR5cGVzIGluIHRoZSBgaWZgIGJlbG93IGFyZSBjb25zaXN0ZW50LlxuICAgIGxlZnQgPSBsZWZ0IHx8IG51bGwhO1xuICAgIHJpZ2h0ID0gcmlnaHQgfHwgbnVsbCE7XG5cbiAgICBpZiAobGVmdCAhPT0gdGhpcy5fY29udGVudE1hcmdpbnMubGVmdCB8fCByaWdodCAhPT0gdGhpcy5fY29udGVudE1hcmdpbnMucmlnaHQpIHtcbiAgICAgIHRoaXMuX2NvbnRlbnRNYXJnaW5zID0ge2xlZnQsIHJpZ2h0fTtcblxuICAgICAgLy8gUHVsbCBiYWNrIGludG8gdGhlIE5nWm9uZSBzaW5jZSBpbiBzb21lIGNhc2VzIHdlIGNvdWxkIGJlIG91dHNpZGUuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bFxuICAgICAgLy8gdG8gZG8gaXQgb25seSB3aGVuIHNvbWV0aGluZyBjaGFuZ2VkLCBvdGhlcndpc2Ugd2UgY2FuIGVuZCB1cCBoaXR0aW5nIHRoZSB6b25lIHRvbyBvZnRlbi5cbiAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4gdGhpcy5fY29udGVudE1hcmdpbkNoYW5nZXMubmV4dCh0aGlzLl9jb250ZW50TWFyZ2lucykpO1xuICAgIH1cbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICAvLyBJZiB1c2VycyBvcHRlZCBpbnRvIGF1dG9zaXppbmcsIGRvIGEgY2hlY2sgZXZlcnkgY2hhbmdlIGRldGVjdGlvbiBjeWNsZS5cbiAgICBpZiAodGhpcy5fYXV0b3NpemUgJiYgdGhpcy5faXNQdXNoZWQoKSkge1xuICAgICAgLy8gUnVuIG91dHNpZGUgdGhlIE5nWm9uZSwgb3RoZXJ3aXNlIHRoZSBkZWJvdW5jZXIgd2lsbCB0aHJvdyB1cyBpbnRvIGFuIGluZmluaXRlIGxvb3AuXG4gICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5fZG9DaGVja1N1YmplY3QubmV4dCgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byBkcmF3ZXIgZXZlbnRzIGluIG9yZGVyIHRvIHNldCBhIGNsYXNzIG9uIHRoZSBtYWluIGNvbnRhaW5lciBlbGVtZW50IHdoZW4gdGhlXG4gICAqIGRyYXdlciBpcyBvcGVuIGFuZCB0aGUgYmFja2Ryb3AgaXMgdmlzaWJsZS4gVGhpcyBlbnN1cmVzIGFueSBvdmVyZmxvdyBvbiB0aGUgY29udGFpbmVyIGVsZW1lbnRcbiAgICogaXMgcHJvcGVybHkgaGlkZGVuLlxuICAgKi9cbiAgcHJpdmF0ZSBfd2F0Y2hEcmF3ZXJUb2dnbGUoZHJhd2VyOiBNYXREcmF3ZXIpOiB2b2lkIHtcbiAgICBkcmF3ZXIuX2FuaW1hdGlvblN0YXJ0ZWQucGlwZShcbiAgICAgIGZpbHRlcigoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSA9PiBldmVudC5mcm9tU3RhdGUgIT09IGV2ZW50LnRvU3RhdGUpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX2RyYXdlcnMuY2hhbmdlcyksXG4gICAgKVxuICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBBbmltYXRpb25FdmVudCkgPT4ge1xuICAgICAgLy8gU2V0IHRoZSB0cmFuc2l0aW9uIGNsYXNzIG9uIHRoZSBjb250YWluZXIgc28gdGhhdCB0aGUgYW5pbWF0aW9ucyBvY2N1ci4gVGhpcyBzaG91bGQgbm90XG4gICAgICAvLyBiZSBzZXQgaW5pdGlhbGx5IGJlY2F1c2UgYW5pbWF0aW9ucyBzaG91bGQgb25seSBiZSB0cmlnZ2VyZWQgdmlhIGEgY2hhbmdlIGluIHN0YXRlLlxuICAgICAgaWYgKGV2ZW50LnRvU3RhdGUgIT09ICdvcGVuLWluc3RhbnQnICYmIHRoaXMuX2FuaW1hdGlvbk1vZGUgIT09ICdOb29wQW5pbWF0aW9ucycpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ21hdC1kcmF3ZXItdHJhbnNpdGlvbicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnVwZGF0ZUNvbnRlbnRNYXJnaW5zKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIGlmIChkcmF3ZXIubW9kZSAhPT0gJ3NpZGUnKSB7XG4gICAgICBkcmF3ZXIub3BlbmVkQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2RyYXdlcnMuY2hhbmdlcykpLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICAgIHRoaXMuX3NldENvbnRhaW5lckNsYXNzKGRyYXdlci5vcGVuZWQpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlcyB0byBkcmF3ZXIgb25Qb3NpdGlvbkNoYW5nZWQgZXZlbnQgaW4gb3JkZXIgdG9cbiAgICogcmUtdmFsaWRhdGUgZHJhd2VycyB3aGVuIHRoZSBwb3NpdGlvbiBjaGFuZ2VzLlxuICAgKi9cbiAgcHJpdmF0ZSBfd2F0Y2hEcmF3ZXJQb3NpdGlvbihkcmF3ZXI6IE1hdERyYXdlcik6IHZvaWQge1xuICAgIGlmICghZHJhd2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBlbXB0eSBiZWZvcmUgdmFsaWRhdGluZyxcbiAgICAvLyBzaW5jZSBib3RoIGRyYXdlcnMgbWF5IGJlIHN3YXBwaW5nIHBvc2l0aW9ucyBhdCB0aGUgc2FtZSB0aW1lLlxuICAgIGRyYXdlci5vblBvc2l0aW9uQ2hhbmdlZC5waXBlKHRha2VVbnRpbCh0aGlzLl9kcmF3ZXJzLmNoYW5nZXMpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fbmdab25lLm9uTWljcm90YXNrRW1wdHkucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl92YWxpZGF0ZURyYXdlcnMoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFN1YnNjcmliZXMgdG8gY2hhbmdlcyBpbiBkcmF3ZXIgbW9kZSBzbyB3ZSBjYW4gcnVuIGNoYW5nZSBkZXRlY3Rpb24uICovXG4gIHByaXZhdGUgX3dhdGNoRHJhd2VyTW9kZShkcmF3ZXI6IE1hdERyYXdlcik6IHZvaWQge1xuICAgIGlmIChkcmF3ZXIpIHtcbiAgICAgIGRyYXdlci5fbW9kZUNoYW5nZWQucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5fZHJhd2Vycy5jaGFuZ2VzLCB0aGlzLl9kZXN0cm95ZWQpKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50TWFyZ2lucygpO1xuICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogVG9nZ2xlcyB0aGUgJ21hdC1kcmF3ZXItb3BlbmVkJyBjbGFzcyBvbiB0aGUgbWFpbiAnbWF0LWRyYXdlci1jb250YWluZXInIGVsZW1lbnQuICovXG4gIHByaXZhdGUgX3NldENvbnRhaW5lckNsYXNzKGlzQWRkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgY2xhc3NMaXN0ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdDtcbiAgICBjb25zdCBjbGFzc05hbWUgPSAnbWF0LWRyYXdlci1jb250YWluZXItaGFzLW9wZW4nO1xuXG4gICAgaWYgKGlzQWRkKSB7XG4gICAgICBjbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICB9XG4gIH1cblxuICAvKiogVmFsaWRhdGUgdGhlIHN0YXRlIG9mIHRoZSBkcmF3ZXIgY2hpbGRyZW4gY29tcG9uZW50cy4gKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVEcmF3ZXJzKCkge1xuICAgIHRoaXMuX3N0YXJ0ID0gdGhpcy5fZW5kID0gbnVsbDtcblxuICAgIC8vIEVuc3VyZSB0aGF0IHdlIGhhdmUgYXQgbW9zdCBvbmUgc3RhcnQgYW5kIG9uZSBlbmQgZHJhd2VyLlxuICAgIHRoaXMuX2RyYXdlcnMuZm9yRWFjaChkcmF3ZXIgPT4ge1xuICAgICAgaWYgKGRyYXdlci5wb3NpdGlvbiA9PSAnZW5kJykge1xuICAgICAgICBpZiAodGhpcy5fZW5kICE9IG51bGwgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgICAgICB0aHJvd01hdER1cGxpY2F0ZWREcmF3ZXJFcnJvcignZW5kJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW5kID0gZHJhd2VyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX3N0YXJ0ICE9IG51bGwgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgICAgICB0aHJvd01hdER1cGxpY2F0ZWREcmF3ZXJFcnJvcignc3RhcnQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zdGFydCA9IGRyYXdlcjtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX3JpZ2h0ID0gdGhpcy5fbGVmdCA9IG51bGw7XG5cbiAgICAvLyBEZXRlY3QgaWYgd2UncmUgTFRSIG9yIFJUTC5cbiAgICBpZiAodGhpcy5fZGlyICYmIHRoaXMuX2Rpci52YWx1ZSA9PT0gJ3J0bCcpIHtcbiAgICAgIHRoaXMuX2xlZnQgPSB0aGlzLl9lbmQ7XG4gICAgICB0aGlzLl9yaWdodCA9IHRoaXMuX3N0YXJ0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sZWZ0ID0gdGhpcy5fc3RhcnQ7XG4gICAgICB0aGlzLl9yaWdodCA9IHRoaXMuX2VuZDtcbiAgICB9XG4gIH1cblxuICAvKiogV2hldGhlciB0aGUgY29udGFpbmVyIGlzIGJlaW5nIHB1c2hlZCB0byB0aGUgc2lkZSBieSBvbmUgb2YgdGhlIGRyYXdlcnMuICovXG4gIHByaXZhdGUgX2lzUHVzaGVkKCkge1xuICAgIHJldHVybiAodGhpcy5faXNEcmF3ZXJPcGVuKHRoaXMuX3N0YXJ0KSAmJiB0aGlzLl9zdGFydC5tb2RlICE9ICdvdmVyJykgfHxcbiAgICAgICAgICAgKHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpICYmIHRoaXMuX2VuZC5tb2RlICE9ICdvdmVyJyk7XG4gIH1cblxuICBfb25CYWNrZHJvcENsaWNrZWQoKSB7XG4gICAgdGhpcy5iYWNrZHJvcENsaWNrLmVtaXQoKTtcbiAgICB0aGlzLl9jbG9zZU1vZGFsRHJhd2Vyc1ZpYUJhY2tkcm9wKCk7XG4gIH1cblxuICBfY2xvc2VNb2RhbERyYXdlcnNWaWFCYWNrZHJvcCgpIHtcbiAgICAvLyBDbG9zZSBhbGwgb3BlbiBkcmF3ZXJzIHdoZXJlIGNsb3NpbmcgaXMgbm90IGRpc2FibGVkIGFuZCB0aGUgbW9kZSBpcyBub3QgYHNpZGVgLlxuICAgIFt0aGlzLl9zdGFydCwgdGhpcy5fZW5kXVxuICAgICAgLmZpbHRlcihkcmF3ZXIgPT4gZHJhd2VyICYmICFkcmF3ZXIuZGlzYWJsZUNsb3NlICYmIHRoaXMuX2NhbkhhdmVCYWNrZHJvcChkcmF3ZXIpKVxuICAgICAgLmZvckVhY2goZHJhd2VyID0+IGRyYXdlciEuX2Nsb3NlVmlhQmFja2Ryb3BDbGljaygpKTtcbiAgfVxuXG4gIF9pc1Nob3dpbmdCYWNrZHJvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9zdGFydCkgJiYgdGhpcy5fY2FuSGF2ZUJhY2tkcm9wKHRoaXMuX3N0YXJ0KSkgfHxcbiAgICAgICAgICAgKHRoaXMuX2lzRHJhd2VyT3Blbih0aGlzLl9lbmQpICYmIHRoaXMuX2NhbkhhdmVCYWNrZHJvcCh0aGlzLl9lbmQpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbkhhdmVCYWNrZHJvcChkcmF3ZXI6IE1hdERyYXdlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkcmF3ZXIubW9kZSAhPT0gJ3NpZGUnIHx8ICEhdGhpcy5fYmFja2Ryb3BPdmVycmlkZTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzRHJhd2VyT3BlbihkcmF3ZXI6IE1hdERyYXdlciB8IG51bGwpOiBkcmF3ZXIgaXMgTWF0RHJhd2VyIHtcbiAgICByZXR1cm4gZHJhd2VyICE9IG51bGwgJiYgZHJhd2VyLm9wZW5lZDtcbiAgfVxuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9hdXRvc2l6ZTogQm9vbGVhbklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGFzQmFja2Ryb3A6IEJvb2xlYW5JbnB1dDtcbn1cbiJdfQ==