@angular/material-experimental 14.2.1 → 15.0.0-next.0

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 (590) hide show
  1. package/_index.scss +0 -69
  2. package/esm2020/selection/selection-column.mjs +11 -11
  3. package/esm2020/selection/selection-module.mjs +5 -5
  4. package/esm2020/version.mjs +1 -1
  5. package/fesm2015/material-experimental.mjs +1 -1
  6. package/fesm2015/material-experimental.mjs.map +1 -1
  7. package/fesm2015/selection.mjs +13 -13
  8. package/fesm2015/selection.mjs.map +1 -1
  9. package/fesm2020/material-experimental.mjs +1 -1
  10. package/fesm2020/material-experimental.mjs.map +1 -1
  11. package/fesm2020/selection.mjs +13 -13
  12. package/fesm2020/selection.mjs.map +1 -1
  13. package/package.json +55 -422
  14. package/selection/index.d.ts +4 -4
  15. package/esm2020/mdc-autocomplete/animations.mjs +0 -25
  16. package/esm2020/mdc-autocomplete/autocomplete-origin.mjs +0 -26
  17. package/esm2020/mdc-autocomplete/autocomplete-trigger.mjs +0 -54
  18. package/esm2020/mdc-autocomplete/autocomplete.mjs +0 -35
  19. package/esm2020/mdc-autocomplete/index.mjs +0 -9
  20. package/esm2020/mdc-autocomplete/mdc-autocomplete_public_index.mjs +0 -5
  21. package/esm2020/mdc-autocomplete/module.mjs +0 -46
  22. package/esm2020/mdc-autocomplete/public-api.mjs +0 -14
  23. package/esm2020/mdc-autocomplete/testing/autocomplete-harness-filters.mjs +0 -9
  24. package/esm2020/mdc-autocomplete/testing/autocomplete-harness.mjs +0 -31
  25. package/esm2020/mdc-autocomplete/testing/index.mjs +0 -9
  26. package/esm2020/mdc-autocomplete/testing/public-api.mjs +0 -10
  27. package/esm2020/mdc-button/button-base.mjs +0 -152
  28. package/esm2020/mdc-button/button.mjs +0 -69
  29. package/esm2020/mdc-button/fab.mjs +0 -175
  30. package/esm2020/mdc-button/icon-button.mjs +0 -57
  31. package/esm2020/mdc-button/index.mjs +0 -9
  32. package/esm2020/mdc-button/mdc-button_public_index.mjs +0 -5
  33. package/esm2020/mdc-button/module.mjs +0 -61
  34. package/esm2020/mdc-button/public-api.mjs +0 -12
  35. package/esm2020/mdc-button/testing/button-harness.mjs +0 -50
  36. package/esm2020/mdc-button/testing/index.mjs +0 -9
  37. package/esm2020/mdc-button/testing/public-api.mjs +0 -9
  38. package/esm2020/mdc-card/card.mjs +0 -261
  39. package/esm2020/mdc-card/index.mjs +0 -9
  40. package/esm2020/mdc-card/mdc-card_public_index.mjs +0 -5
  41. package/esm2020/mdc-card/module.mjs +0 -68
  42. package/esm2020/mdc-card/public-api.mjs +0 -10
  43. package/esm2020/mdc-card/testing/card-harness-filters.mjs +0 -9
  44. package/esm2020/mdc-card/testing/card-harness.mjs +0 -42
  45. package/esm2020/mdc-card/testing/index.mjs +0 -9
  46. package/esm2020/mdc-card/testing/public-api.mjs +0 -10
  47. package/esm2020/mdc-checkbox/checkbox.mjs +0 -93
  48. package/esm2020/mdc-checkbox/index.mjs +0 -9
  49. package/esm2020/mdc-checkbox/mdc-checkbox_public_index.mjs +0 -5
  50. package/esm2020/mdc-checkbox/module.mjs +0 -26
  51. package/esm2020/mdc-checkbox/public-api.mjs +0 -11
  52. package/esm2020/mdc-checkbox/testing/checkbox-harness.mjs +0 -41
  53. package/esm2020/mdc-checkbox/testing/index.mjs +0 -9
  54. package/esm2020/mdc-checkbox/testing/public-api.mjs +0 -9
  55. package/esm2020/mdc-chips/chip-action.mjs +0 -90
  56. package/esm2020/mdc-chips/chip-edit-input.mjs +0 -60
  57. package/esm2020/mdc-chips/chip-grid.mjs +0 -407
  58. package/esm2020/mdc-chips/chip-icons.mjs +0 -110
  59. package/esm2020/mdc-chips/chip-input.mjs +0 -212
  60. package/esm2020/mdc-chips/chip-listbox.mjs +0 -332
  61. package/esm2020/mdc-chips/chip-option.mjs +0 -160
  62. package/esm2020/mdc-chips/chip-row.mjs +0 -176
  63. package/esm2020/mdc-chips/chip-set.mjs +0 -271
  64. package/esm2020/mdc-chips/chip-text-control.mjs +0 -9
  65. package/esm2020/mdc-chips/chip.mjs +0 -287
  66. package/esm2020/mdc-chips/index.mjs +0 -9
  67. package/esm2020/mdc-chips/mdc-chips_public_index.mjs +0 -5
  68. package/esm2020/mdc-chips/module.mjs +0 -87
  69. package/esm2020/mdc-chips/public-api.mjs +0 -20
  70. package/esm2020/mdc-chips/testing/chip-avatar-harness.mjs +0 -22
  71. package/esm2020/mdc-chips/testing/chip-grid-harness.mjs +0 -43
  72. package/esm2020/mdc-chips/testing/chip-harness-filters.mjs +0 -9
  73. package/esm2020/mdc-chips/testing/chip-harness.mjs +0 -58
  74. package/esm2020/mdc-chips/testing/chip-input-harness.mjs +0 -82
  75. package/esm2020/mdc-chips/testing/chip-listbox-harness.mjs +0 -59
  76. package/esm2020/mdc-chips/testing/chip-option-harness.mjs +0 -45
  77. package/esm2020/mdc-chips/testing/chip-remove-harness.mjs +0 -26
  78. package/esm2020/mdc-chips/testing/chip-row-harness.mjs +0 -22
  79. package/esm2020/mdc-chips/testing/chip-set-harness.mjs +0 -26
  80. package/esm2020/mdc-chips/testing/index.mjs +0 -9
  81. package/esm2020/mdc-chips/testing/public-api.mjs +0 -18
  82. package/esm2020/mdc-chips/tokens.mjs +0 -33
  83. package/esm2020/mdc-core/index.mjs +0 -9
  84. package/esm2020/mdc-core/mdc-core_public_index.mjs +0 -5
  85. package/esm2020/mdc-core/option/index.mjs +0 -30
  86. package/esm2020/mdc-core/option/optgroup.mjs +0 -46
  87. package/esm2020/mdc-core/option/option.mjs +0 -52
  88. package/esm2020/mdc-core/public-api.mjs +0 -10
  89. package/esm2020/mdc-core/testing/index.mjs +0 -9
  90. package/esm2020/mdc-core/testing/optgroup-harness-filters.mjs +0 -9
  91. package/esm2020/mdc-core/testing/optgroup-harness.mjs +0 -43
  92. package/esm2020/mdc-core/testing/option-harness-filters.mjs +0 -9
  93. package/esm2020/mdc-core/testing/option-harness.mjs +0 -53
  94. package/esm2020/mdc-core/testing/public-api.mjs +0 -12
  95. package/esm2020/mdc-dialog/dialog-container.mjs +0 -171
  96. package/esm2020/mdc-dialog/dialog-content-directives.mjs +0 -179
  97. package/esm2020/mdc-dialog/dialog-ref.mjs +0 -14
  98. package/esm2020/mdc-dialog/dialog.mjs +0 -82
  99. package/esm2020/mdc-dialog/index.mjs +0 -9
  100. package/esm2020/mdc-dialog/mdc-dialog_public_index.mjs +0 -5
  101. package/esm2020/mdc-dialog/module.mjs +0 -53
  102. package/esm2020/mdc-dialog/public-api.mjs +0 -14
  103. package/esm2020/mdc-dialog/testing/dialog-harness.mjs +0 -29
  104. package/esm2020/mdc-dialog/testing/dialog-opener.mjs +0 -45
  105. package/esm2020/mdc-dialog/testing/index.mjs +0 -9
  106. package/esm2020/mdc-dialog/testing/public-api.mjs +0 -10
  107. package/esm2020/mdc-form-field/directives/error.mjs +0 -47
  108. package/esm2020/mdc-form-field/directives/floating-label.mjs +0 -73
  109. package/esm2020/mdc-form-field/directives/hint.mjs +0 -39
  110. package/esm2020/mdc-form-field/directives/label.mjs +0 -21
  111. package/esm2020/mdc-form-field/directives/line-ripple.mjs +0 -59
  112. package/esm2020/mdc-form-field/directives/notched-outline.mjs +0 -68
  113. package/esm2020/mdc-form-field/directives/prefix.mjs +0 -32
  114. package/esm2020/mdc-form-field/directives/suffix.mjs +0 -32
  115. package/esm2020/mdc-form-field/form-field.mjs +0 -608
  116. package/esm2020/mdc-form-field/index.mjs +0 -9
  117. package/esm2020/mdc-form-field/mdc-form-field_public_index.mjs +0 -5
  118. package/esm2020/mdc-form-field/module.mjs +0 -53
  119. package/esm2020/mdc-form-field/public-api.mjs +0 -16
  120. package/esm2020/mdc-form-field/testing/form-field-harness.mjs +0 -58
  121. package/esm2020/mdc-form-field/testing/index.mjs +0 -9
  122. package/esm2020/mdc-form-field/testing/public-api.mjs +0 -13
  123. package/esm2020/mdc-input/index.mjs +0 -9
  124. package/esm2020/mdc-input/input.mjs +0 -55
  125. package/esm2020/mdc-input/mdc-input_public_index.mjs +0 -5
  126. package/esm2020/mdc-input/module.mjs +0 -27
  127. package/esm2020/mdc-input/public-api.mjs +0 -11
  128. package/esm2020/mdc-input/testing/index.mjs +0 -9
  129. package/esm2020/mdc-input/testing/public-api.mjs +0 -9
  130. package/esm2020/mdc-list/action-list.mjs +0 -31
  131. package/esm2020/mdc-list/index.mjs +0 -9
  132. package/esm2020/mdc-list/list-base.mjs +0 -272
  133. package/esm2020/mdc-list/list-item-sections.mjs +0 -138
  134. package/esm2020/mdc-list/list-option-types.mjs +0 -16
  135. package/esm2020/mdc-list/list-option.mjs +0 -253
  136. package/esm2020/mdc-list/list.mjs +0 -82
  137. package/esm2020/mdc-list/mdc-list_public_index.mjs +0 -5
  138. package/esm2020/mdc-list/module.mjs +0 -98
  139. package/esm2020/mdc-list/nav-list.mjs +0 -31
  140. package/esm2020/mdc-list/public-api.mjs +0 -18
  141. package/esm2020/mdc-list/selection-list.mjs +0 -338
  142. package/esm2020/mdc-list/subheader.mjs +0 -27
  143. package/esm2020/mdc-list/testing/action-list-harness.mjs +0 -59
  144. package/esm2020/mdc-list/testing/index.mjs +0 -9
  145. package/esm2020/mdc-list/testing/list-harness-base.mjs +0 -95
  146. package/esm2020/mdc-list/testing/list-harness-filters.mjs +0 -9
  147. package/esm2020/mdc-list/testing/list-harness.mjs +0 -41
  148. package/esm2020/mdc-list/testing/list-item-harness-base.mjs +0 -150
  149. package/esm2020/mdc-list/testing/nav-list-harness.mjs +0 -69
  150. package/esm2020/mdc-list/testing/public-api.mjs +0 -14
  151. package/esm2020/mdc-list/testing/selection-list-harness.mjs +0 -117
  152. package/esm2020/mdc-menu/directives.mjs +0 -38
  153. package/esm2020/mdc-menu/index.mjs +0 -9
  154. package/esm2020/mdc-menu/mdc-menu_public_index.mjs +0 -5
  155. package/esm2020/mdc-menu/menu-item.mjs +0 -36
  156. package/esm2020/mdc-menu/menu.mjs +0 -43
  157. package/esm2020/mdc-menu/module.mjs +0 -44
  158. package/esm2020/mdc-menu/public-api.mjs +0 -13
  159. package/esm2020/mdc-menu/testing/index.mjs +0 -9
  160. package/esm2020/mdc-menu/testing/menu-harness.mjs +0 -46
  161. package/esm2020/mdc-menu/testing/public-api.mjs +0 -9
  162. package/esm2020/mdc-paginator/index.mjs +0 -9
  163. package/esm2020/mdc-paginator/mdc-paginator_public_index.mjs +0 -5
  164. package/esm2020/mdc-paginator/module.mjs +0 -30
  165. package/esm2020/mdc-paginator/paginator.mjs +0 -48
  166. package/esm2020/mdc-paginator/public-api.mjs +0 -11
  167. package/esm2020/mdc-paginator/testing/index.mjs +0 -9
  168. package/esm2020/mdc-paginator/testing/paginator-harness.mjs +0 -36
  169. package/esm2020/mdc-paginator/testing/public-api.mjs +0 -9
  170. package/esm2020/mdc-progress-bar/index.mjs +0 -9
  171. package/esm2020/mdc-progress-bar/mdc-progress-bar_public_index.mjs +0 -5
  172. package/esm2020/mdc-progress-bar/module.mjs +0 -24
  173. package/esm2020/mdc-progress-bar/progress-bar.mjs +0 -152
  174. package/esm2020/mdc-progress-bar/public-api.mjs +0 -11
  175. package/esm2020/mdc-progress-bar/testing/index.mjs +0 -9
  176. package/esm2020/mdc-progress-bar/testing/progress-bar-harness.mjs +0 -33
  177. package/esm2020/mdc-progress-bar/testing/public-api.mjs +0 -9
  178. package/esm2020/mdc-progress-bar/testing/testing_public_index.mjs +0 -5
  179. package/esm2020/mdc-progress-spinner/index.mjs +0 -9
  180. package/esm2020/mdc-progress-spinner/mdc-progress-spinner_public_index.mjs +0 -5
  181. package/esm2020/mdc-progress-spinner/module.mjs +0 -26
  182. package/esm2020/mdc-progress-spinner/progress-spinner.mjs +0 -151
  183. package/esm2020/mdc-progress-spinner/public-api.mjs +0 -11
  184. package/esm2020/mdc-progress-spinner/testing/index.mjs +0 -9
  185. package/esm2020/mdc-progress-spinner/testing/progress-spinner-harness.mjs +0 -35
  186. package/esm2020/mdc-progress-spinner/testing/public-api.mjs +0 -9
  187. package/esm2020/mdc-progress-spinner/testing/testing_public_index.mjs +0 -5
  188. package/esm2020/mdc-radio/index.mjs +0 -9
  189. package/esm2020/mdc-radio/mdc-radio_public_index.mjs +0 -5
  190. package/esm2020/mdc-radio/module.mjs +0 -26
  191. package/esm2020/mdc-radio/public-api.mjs +0 -11
  192. package/esm2020/mdc-radio/radio.mjs +0 -111
  193. package/esm2020/mdc-radio/testing/index.mjs +0 -9
  194. package/esm2020/mdc-radio/testing/public-api.mjs +0 -9
  195. package/esm2020/mdc-radio/testing/radio-harness.mjs +0 -50
  196. package/esm2020/mdc-select/index.mjs +0 -9
  197. package/esm2020/mdc-select/mdc-select_public_index.mjs +0 -5
  198. package/esm2020/mdc-select/module.mjs +0 -46
  199. package/esm2020/mdc-select/public-api.mjs +0 -12
  200. package/esm2020/mdc-select/select-animations.mjs +0 -38
  201. package/esm2020/mdc-select/select-errors.mjs +0 -35
  202. package/esm2020/mdc-select/select.mjs +0 -172
  203. package/esm2020/mdc-select/testing/index.mjs +0 -9
  204. package/esm2020/mdc-select/testing/public-api.mjs +0 -10
  205. package/esm2020/mdc-select/testing/select-harness-filters.mjs +0 -9
  206. package/esm2020/mdc-select/testing/select-harness.mjs +0 -29
  207. package/esm2020/mdc-slide-toggle/index.mjs +0 -9
  208. package/esm2020/mdc-slide-toggle/mdc-slide-toggle_public_index.mjs +0 -5
  209. package/esm2020/mdc-slide-toggle/module.mjs +0 -27
  210. package/esm2020/mdc-slide-toggle/public-api.mjs +0 -12
  211. package/esm2020/mdc-slide-toggle/slide-toggle-config.mjs +0 -14
  212. package/esm2020/mdc-slide-toggle/slide-toggle.mjs +0 -99
  213. package/esm2020/mdc-slide-toggle/testing/index.mjs +0 -9
  214. package/esm2020/mdc-slide-toggle/testing/public-api.mjs +0 -9
  215. package/esm2020/mdc-slide-toggle/testing/slide-toggle-harness.mjs +0 -47
  216. package/esm2020/mdc-slider/global-change-and-input-listener.mjs +0 -59
  217. package/esm2020/mdc-slider/index.mjs +0 -9
  218. package/esm2020/mdc-slider/mdc-slider_public_index.mjs +0 -5
  219. package/esm2020/mdc-slider/module.mjs +0 -26
  220. package/esm2020/mdc-slider/public-api.mjs +0 -10
  221. package/esm2020/mdc-slider/slider.mjs +0 -1094
  222. package/esm2020/mdc-slider/testing/index.mjs +0 -9
  223. package/esm2020/mdc-slider/testing/public-api.mjs +0 -11
  224. package/esm2020/mdc-slider/testing/slider-harness-filters.mjs +0 -2
  225. package/esm2020/mdc-slider/testing/slider-harness.mjs +0 -62
  226. package/esm2020/mdc-slider/testing/slider-thumb-harness.mjs +0 -94
  227. package/esm2020/mdc-snack-bar/index.mjs +0 -9
  228. package/esm2020/mdc-snack-bar/mdc-snack-bar_public_index.mjs +0 -5
  229. package/esm2020/mdc-snack-bar/module.mjs +0 -51
  230. package/esm2020/mdc-snack-bar/public-api.mjs +0 -14
  231. package/esm2020/mdc-snack-bar/simple-snack-bar.mjs +0 -40
  232. package/esm2020/mdc-snack-bar/snack-bar-container.mjs +0 -41
  233. package/esm2020/mdc-snack-bar/snack-bar-content.mjs +0 -52
  234. package/esm2020/mdc-snack-bar/snack-bar.mjs +0 -45
  235. package/esm2020/mdc-snack-bar/testing/index.mjs +0 -9
  236. package/esm2020/mdc-snack-bar/testing/public-api.mjs +0 -9
  237. package/esm2020/mdc-snack-bar/testing/snack-bar-harness.mjs +0 -34
  238. package/esm2020/mdc-table/cell.mjs +0 -141
  239. package/esm2020/mdc-table/index.mjs +0 -9
  240. package/esm2020/mdc-table/mdc-table_public_index.mjs +0 -5
  241. package/esm2020/mdc-table/module.mjs +0 -94
  242. package/esm2020/mdc-table/public-api.mjs +0 -14
  243. package/esm2020/mdc-table/row.mjs +0 -143
  244. package/esm2020/mdc-table/table-data-source.mjs +0 -24
  245. package/esm2020/mdc-table/table.mjs +0 -74
  246. package/esm2020/mdc-table/testing/cell-harness.mjs +0 -50
  247. package/esm2020/mdc-table/testing/index.mjs +0 -9
  248. package/esm2020/mdc-table/testing/public-api.mjs +0 -11
  249. package/esm2020/mdc-table/testing/row-harness.mjs +0 -64
  250. package/esm2020/mdc-table/testing/table-harness.mjs +0 -30
  251. package/esm2020/mdc-table/text-column.mjs +0 -58
  252. package/esm2020/mdc-tabs/index.mjs +0 -9
  253. package/esm2020/mdc-tabs/ink-bar.mjs +0 -130
  254. package/esm2020/mdc-tabs/mdc-tabs_public_index.mjs +0 -5
  255. package/esm2020/mdc-tabs/module.mjs +0 -93
  256. package/esm2020/mdc-tabs/public-api.mjs +0 -19
  257. package/esm2020/mdc-tabs/tab-body.mjs +0 -60
  258. package/esm2020/mdc-tabs/tab-content.mjs +0 -20
  259. package/esm2020/mdc-tabs/tab-group.mjs +0 -98
  260. package/esm2020/mdc-tabs/tab-header.mjs +0 -73
  261. package/esm2020/mdc-tabs/tab-label-wrapper.mjs +0 -32
  262. package/esm2020/mdc-tabs/tab-label.mjs +0 -22
  263. package/esm2020/mdc-tabs/tab-nav-bar/tab-nav-bar.mjs +0 -202
  264. package/esm2020/mdc-tabs/tab.mjs +0 -34
  265. package/esm2020/mdc-tabs/testing/index.mjs +0 -9
  266. package/esm2020/mdc-tabs/testing/public-api.mjs +0 -13
  267. package/esm2020/mdc-tabs/testing/tab-group-harness.mjs +0 -56
  268. package/esm2020/mdc-tabs/testing/tab-harness-filters.mjs +0 -2
  269. package/esm2020/mdc-tabs/testing/tab-harness.mjs +0 -64
  270. package/esm2020/mdc-tabs/testing/tab-link-harness.mjs +0 -40
  271. package/esm2020/mdc-tabs/testing/tab-nav-bar-harness.mjs +0 -66
  272. package/esm2020/mdc-tabs/testing/tab-nav-panel-harness.mjs +0 -27
  273. package/esm2020/mdc-tooltip/index.mjs +0 -9
  274. package/esm2020/mdc-tooltip/mdc-tooltip_public_index.mjs +0 -5
  275. package/esm2020/mdc-tooltip/module.mjs +0 -31
  276. package/esm2020/mdc-tooltip/public-api.mjs +0 -12
  277. package/esm2020/mdc-tooltip/testing/index.mjs +0 -9
  278. package/esm2020/mdc-tooltip/testing/public-api.mjs +0 -9
  279. package/esm2020/mdc-tooltip/testing/tooltip-harness.mjs +0 -30
  280. package/esm2020/mdc-tooltip/tooltip-animations.mjs +0 -24
  281. package/esm2020/mdc-tooltip/tooltip.mjs +0 -132
  282. package/fesm2015/mdc-autocomplete/testing.mjs +0 -50
  283. package/fesm2015/mdc-autocomplete/testing.mjs.map +0 -1
  284. package/fesm2015/mdc-autocomplete.mjs +0 -196
  285. package/fesm2015/mdc-autocomplete.mjs.map +0 -1
  286. package/fesm2015/mdc-button/testing.mjs +0 -75
  287. package/fesm2015/mdc-button/testing.mjs.map +0 -1
  288. package/fesm2015/mdc-button.mjs +0 -490
  289. package/fesm2015/mdc-button.mjs.map +0 -1
  290. package/fesm2015/mdc-card/testing.mjs +0 -63
  291. package/fesm2015/mdc-card/testing.mjs.map +0 -1
  292. package/fesm2015/mdc-card.mjs +0 -351
  293. package/fesm2015/mdc-card.mjs.map +0 -1
  294. package/fesm2015/mdc-checkbox/testing.mjs +0 -56
  295. package/fesm2015/mdc-checkbox/testing.mjs.map +0 -1
  296. package/fesm2015/mdc-checkbox.mjs +0 -142
  297. package/fesm2015/mdc-checkbox.mjs.map +0 -1
  298. package/fesm2015/mdc-chips/testing.mjs +0 -394
  299. package/fesm2015/mdc-chips/testing.mjs.map +0 -1
  300. package/fesm2015/mdc-chips.mjs +0 -2169
  301. package/fesm2015/mdc-chips.mjs.map +0 -1
  302. package/fesm2015/mdc-core/testing.mjs +0 -118
  303. package/fesm2015/mdc-core/testing.mjs.map +0 -1
  304. package/fesm2015/mdc-core.mjs +0 -141
  305. package/fesm2015/mdc-core.mjs.map +0 -1
  306. package/fesm2015/mdc-dialog/testing.mjs +0 -90
  307. package/fesm2015/mdc-dialog/testing.mjs.map +0 -1
  308. package/fesm2015/mdc-dialog.mjs +0 -500
  309. package/fesm2015/mdc-dialog.mjs.map +0 -1
  310. package/fesm2015/mdc-form-field/testing.mjs +0 -78
  311. package/fesm2015/mdc-form-field/testing.mjs.map +0 -1
  312. package/fesm2015/mdc-form-field.mjs +0 -1018
  313. package/fesm2015/mdc-form-field.mjs.map +0 -1
  314. package/fesm2015/mdc-input/testing.mjs +0 -18
  315. package/fesm2015/mdc-input/testing.mjs.map +0 -1
  316. package/fesm2015/mdc-input.mjs +0 -103
  317. package/fesm2015/mdc-input.mjs.map +0 -1
  318. package/fesm2015/mdc-list/testing.mjs +0 -574
  319. package/fesm2015/mdc-list/testing.mjs.map +0 -1
  320. package/fesm2015/mdc-list.mjs +0 -1264
  321. package/fesm2015/mdc-list.mjs.map +0 -1
  322. package/fesm2015/mdc-menu/testing.mjs +0 -59
  323. package/fesm2015/mdc-menu/testing.mjs.map +0 -1
  324. package/fesm2015/mdc-menu.mjs +0 -174
  325. package/fesm2015/mdc-menu.mjs.map +0 -1
  326. package/fesm2015/mdc-paginator/testing.mjs +0 -55
  327. package/fesm2015/mdc-paginator/testing.mjs.map +0 -1
  328. package/fesm2015/mdc-paginator.mjs +0 -100
  329. package/fesm2015/mdc-paginator.mjs.map +0 -1
  330. package/fesm2015/mdc-progress-bar/testing.mjs +0 -54
  331. package/fesm2015/mdc-progress-bar/testing.mjs.map +0 -1
  332. package/fesm2015/mdc-progress-bar.mjs +0 -198
  333. package/fesm2015/mdc-progress-bar.mjs.map +0 -1
  334. package/fesm2015/mdc-progress-spinner/testing.mjs +0 -56
  335. package/fesm2015/mdc-progress-spinner/testing.mjs.map +0 -1
  336. package/fesm2015/mdc-progress-spinner.mjs +0 -200
  337. package/fesm2015/mdc-progress-spinner.mjs.map +0 -1
  338. package/fesm2015/mdc-radio/testing.mjs +0 -63
  339. package/fesm2015/mdc-radio/testing.mjs.map +0 -1
  340. package/fesm2015/mdc-radio.mjs +0 -155
  341. package/fesm2015/mdc-radio.mjs.map +0 -1
  342. package/fesm2015/mdc-select/testing.mjs +0 -48
  343. package/fesm2015/mdc-select/testing.mjs.map +0 -1
  344. package/fesm2015/mdc-select.mjs +0 -273
  345. package/fesm2015/mdc-select.mjs.map +0 -1
  346. package/fesm2015/mdc-slide-toggle/testing.mjs +0 -66
  347. package/fesm2015/mdc-slide-toggle/testing.mjs.map +0 -1
  348. package/fesm2015/mdc-slide-toggle.mjs +0 -159
  349. package/fesm2015/mdc-slide-toggle.mjs.map +0 -1
  350. package/fesm2015/mdc-slider/testing.mjs +0 -199
  351. package/fesm2015/mdc-slider/testing.mjs.map +0 -1
  352. package/fesm2015/mdc-slider.mjs +0 -1212
  353. package/fesm2015/mdc-slider.mjs.map +0 -1
  354. package/fesm2015/mdc-snack-bar/testing.mjs +0 -49
  355. package/fesm2015/mdc-snack-bar/testing.mjs.map +0 -1
  356. package/fesm2015/mdc-snack-bar.mjs +0 -229
  357. package/fesm2015/mdc-snack-bar.mjs.map +0 -1
  358. package/fesm2015/mdc-table/testing.mjs +0 -158
  359. package/fesm2015/mdc-table/testing.mjs.map +0 -1
  360. package/fesm2015/mdc-table.mjs +0 -540
  361. package/fesm2015/mdc-table.mjs.map +0 -1
  362. package/fesm2015/mdc-tabs/testing.mjs +0 -273
  363. package/fesm2015/mdc-tabs/testing.mjs.map +0 -1
  364. package/fesm2015/mdc-tabs.mjs +0 -737
  365. package/fesm2015/mdc-tabs.mjs.map +0 -1
  366. package/fesm2015/mdc-tooltip/testing.mjs +0 -49
  367. package/fesm2015/mdc-tooltip/testing.mjs.map +0 -1
  368. package/fesm2015/mdc-tooltip.mjs +0 -206
  369. package/fesm2015/mdc-tooltip.mjs.map +0 -1
  370. package/fesm2020/mdc-autocomplete/testing.mjs +0 -58
  371. package/fesm2020/mdc-autocomplete/testing.mjs.map +0 -1
  372. package/fesm2020/mdc-autocomplete.mjs +0 -196
  373. package/fesm2020/mdc-autocomplete.mjs.map +0 -1
  374. package/fesm2020/mdc-button/testing.mjs +0 -69
  375. package/fesm2020/mdc-button/testing.mjs.map +0 -1
  376. package/fesm2020/mdc-button.mjs +0 -510
  377. package/fesm2020/mdc-button.mjs.map +0 -1
  378. package/fesm2020/mdc-card/testing.mjs +0 -69
  379. package/fesm2020/mdc-card/testing.mjs.map +0 -1
  380. package/fesm2020/mdc-card.mjs +0 -349
  381. package/fesm2020/mdc-card.mjs.map +0 -1
  382. package/fesm2020/mdc-checkbox/testing.mjs +0 -60
  383. package/fesm2020/mdc-checkbox/testing.mjs.map +0 -1
  384. package/fesm2020/mdc-checkbox.mjs +0 -139
  385. package/fesm2020/mdc-checkbox.mjs.map +0 -1
  386. package/fesm2020/mdc-chips/testing.mjs +0 -395
  387. package/fesm2020/mdc-chips/testing.mjs.map +0 -1
  388. package/fesm2020/mdc-chips.mjs +0 -2161
  389. package/fesm2020/mdc-chips.mjs.map +0 -1
  390. package/fesm2020/mdc-core/testing.mjs +0 -129
  391. package/fesm2020/mdc-core/testing.mjs.map +0 -1
  392. package/fesm2020/mdc-core.mjs +0 -139
  393. package/fesm2020/mdc-core.mjs.map +0 -1
  394. package/fesm2020/mdc-dialog/testing.mjs +0 -90
  395. package/fesm2020/mdc-dialog/testing.mjs.map +0 -1
  396. package/fesm2020/mdc-dialog.mjs +0 -499
  397. package/fesm2020/mdc-dialog.mjs.map +0 -1
  398. package/fesm2020/mdc-form-field/testing.mjs +0 -78
  399. package/fesm2020/mdc-form-field/testing.mjs.map +0 -1
  400. package/fesm2020/mdc-form-field.mjs +0 -1014
  401. package/fesm2020/mdc-form-field.mjs.map +0 -1
  402. package/fesm2020/mdc-input/testing.mjs +0 -18
  403. package/fesm2020/mdc-input/testing.mjs.map +0 -1
  404. package/fesm2020/mdc-input.mjs +0 -103
  405. package/fesm2020/mdc-input.mjs.map +0 -1
  406. package/fesm2020/mdc-list/testing.mjs +0 -544
  407. package/fesm2020/mdc-list/testing.mjs.map +0 -1
  408. package/fesm2020/mdc-list.mjs +0 -1260
  409. package/fesm2020/mdc-list.mjs.map +0 -1
  410. package/fesm2020/mdc-menu/testing.mjs +0 -65
  411. package/fesm2020/mdc-menu/testing.mjs.map +0 -1
  412. package/fesm2020/mdc-menu.mjs +0 -172
  413. package/fesm2020/mdc-menu.mjs.map +0 -1
  414. package/fesm2020/mdc-paginator/testing.mjs +0 -55
  415. package/fesm2020/mdc-paginator/testing.mjs.map +0 -1
  416. package/fesm2020/mdc-paginator.mjs +0 -98
  417. package/fesm2020/mdc-paginator.mjs.map +0 -1
  418. package/fesm2020/mdc-progress-bar/testing.mjs +0 -56
  419. package/fesm2020/mdc-progress-bar/testing.mjs.map +0 -1
  420. package/fesm2020/mdc-progress-bar.mjs +0 -196
  421. package/fesm2020/mdc-progress-bar.mjs.map +0 -1
  422. package/fesm2020/mdc-progress-spinner/testing.mjs +0 -58
  423. package/fesm2020/mdc-progress-spinner/testing.mjs.map +0 -1
  424. package/fesm2020/mdc-progress-spinner.mjs +0 -197
  425. package/fesm2020/mdc-progress-spinner.mjs.map +0 -1
  426. package/fesm2020/mdc-radio/testing.mjs +0 -69
  427. package/fesm2020/mdc-radio/testing.mjs.map +0 -1
  428. package/fesm2020/mdc-radio.mjs +0 -153
  429. package/fesm2020/mdc-radio.mjs.map +0 -1
  430. package/fesm2020/mdc-select/testing.mjs +0 -56
  431. package/fesm2020/mdc-select/testing.mjs.map +0 -1
  432. package/fesm2020/mdc-select.mjs +0 -273
  433. package/fesm2020/mdc-select.mjs.map +0 -1
  434. package/fesm2020/mdc-slide-toggle/testing.mjs +0 -66
  435. package/fesm2020/mdc-slide-toggle/testing.mjs.map +0 -1
  436. package/fesm2020/mdc-slide-toggle.mjs +0 -157
  437. package/fesm2020/mdc-slide-toggle.mjs.map +0 -1
  438. package/fesm2020/mdc-slider/testing.mjs +0 -172
  439. package/fesm2020/mdc-slider/testing.mjs.map +0 -1
  440. package/fesm2020/mdc-slider.mjs +0 -1191
  441. package/fesm2020/mdc-slider.mjs.map +0 -1
  442. package/fesm2020/mdc-snack-bar/testing.mjs +0 -53
  443. package/fesm2020/mdc-snack-bar/testing.mjs.map +0 -1
  444. package/fesm2020/mdc-snack-bar.mjs +0 -232
  445. package/fesm2020/mdc-snack-bar.mjs.map +0 -1
  446. package/fesm2020/mdc-table/testing.mjs +0 -158
  447. package/fesm2020/mdc-table/testing.mjs.map +0 -1
  448. package/fesm2020/mdc-table.mjs +0 -539
  449. package/fesm2020/mdc-table.mjs.map +0 -1
  450. package/fesm2020/mdc-tabs/testing.mjs +0 -265
  451. package/fesm2020/mdc-tabs/testing.mjs.map +0 -1
  452. package/fesm2020/mdc-tabs.mjs +0 -723
  453. package/fesm2020/mdc-tabs.mjs.map +0 -1
  454. package/fesm2020/mdc-tooltip/testing.mjs +0 -49
  455. package/fesm2020/mdc-tooltip/testing.mjs.map +0 -1
  456. package/fesm2020/mdc-tooltip.mjs +0 -202
  457. package/fesm2020/mdc-tooltip.mjs.map +0 -1
  458. package/mdc-autocomplete/_autocomplete-theme.import.scss +0 -5
  459. package/mdc-autocomplete/_autocomplete-theme.scss +0 -48
  460. package/mdc-autocomplete/index.d.ts +0 -97
  461. package/mdc-autocomplete/testing/index.d.ts +0 -32
  462. package/mdc-button/_button-base.import.scss +0 -4
  463. package/mdc-button/_button-base.scss +0 -95
  464. package/mdc-button/_button-theme-private.scss +0 -62
  465. package/mdc-button/_button-theme.import.scss +0 -16
  466. package/mdc-button/_button-theme.scss +0 -224
  467. package/mdc-button/_fab-theme.scss +0 -90
  468. package/mdc-button/_icon-button-theme.scss +0 -76
  469. package/mdc-button/index.d.ts +0 -216
  470. package/mdc-button/testing/index.d.ts +0 -41
  471. package/mdc-card/_card-theme.import.scss +0 -7
  472. package/mdc-card/_card-theme.scss +0 -74
  473. package/mdc-card/index.d.ts +0 -194
  474. package/mdc-card/testing/index.d.ts +0 -44
  475. package/mdc-checkbox/_checkbox-private.scss +0 -53
  476. package/mdc-checkbox/_checkbox-theme.import.scss +0 -15
  477. package/mdc-checkbox/_checkbox-theme.scss +0 -122
  478. package/mdc-checkbox/index.d.ts +0 -87
  479. package/mdc-checkbox/testing/index.d.ts +0 -28
  480. package/mdc-chips/_chips-theme.import.scss +0 -8
  481. package/mdc-chips/_chips-theme.scss +0 -117
  482. package/mdc-chips/index.d.ts +0 -979
  483. package/mdc-chips/testing/index.d.ts +0 -232
  484. package/mdc-core/_core-theme.import.scss +0 -10
  485. package/mdc-core/_core-theme.scss +0 -78
  486. package/mdc-core/_elevation.scss +0 -38
  487. package/mdc-core/color/_all-color.scss +0 -25
  488. package/mdc-core/density/_all-density.scss +0 -25
  489. package/mdc-core/index.d.ts +0 -206
  490. package/mdc-core/mdc-helpers/_focus-indicators-theme.scss +0 -39
  491. package/mdc-core/mdc-helpers/_focus-indicators.import.scss +0 -10
  492. package/mdc-core/mdc-helpers/_focus-indicators.scss +0 -15
  493. package/mdc-core/mdc-helpers/_mdc-helpers.import.scss +0 -8
  494. package/mdc-core/mdc-helpers/_mdc-helpers.scss +0 -221
  495. package/mdc-core/option/_optgroup-theme.import.scss +0 -7
  496. package/mdc-core/option/_optgroup-theme.scss +0 -44
  497. package/mdc-core/option/_option-theme.import.scss +0 -7
  498. package/mdc-core/option/_option-theme.scss +0 -87
  499. package/mdc-core/testing/index.d.ts +0 -64
  500. package/mdc-core/theming/_all-theme.scss +0 -61
  501. package/mdc-core/theming/prebuilt/deeppurple-amber.css +0 -1
  502. package/mdc-core/theming/prebuilt/indigo-pink.css +0 -1
  503. package/mdc-core/theming/prebuilt/pink-bluegrey.css +0 -1
  504. package/mdc-core/theming/prebuilt/purple-green.css +0 -1
  505. package/mdc-core/typography/_all-typography.scss +0 -99
  506. package/mdc-dialog/_dialog-legacy-padding.import.scss +0 -1
  507. package/mdc-dialog/_dialog-legacy-padding.scss +0 -31
  508. package/mdc-dialog/_dialog-theme.import.scss +0 -5
  509. package/mdc-dialog/_dialog-theme.scss +0 -78
  510. package/mdc-dialog/_mdc-dialog-structure-overrides.import.scss +0 -1
  511. package/mdc-dialog/_mdc-dialog-structure-overrides.scss +0 -56
  512. package/mdc-dialog/index.d.ts +0 -217
  513. package/mdc-dialog/testing/index.d.ts +0 -47
  514. package/mdc-form-field/_form-field-density.scss +0 -119
  515. package/mdc-form-field/_form-field-focus-overlay.scss +0 -34
  516. package/mdc-form-field/_form-field-high-contrast.scss +0 -39
  517. package/mdc-form-field/_form-field-native-select.scss +0 -133
  518. package/mdc-form-field/_form-field-sizing.scss +0 -40
  519. package/mdc-form-field/_form-field-subscript.scss +0 -83
  520. package/mdc-form-field/_form-field-theme.scss +0 -148
  521. package/mdc-form-field/_mdc-text-field-structure-overrides.scss +0 -129
  522. package/mdc-form-field/_mdc-text-field-textarea-overrides.scss +0 -36
  523. package/mdc-form-field/_mdc-text-field-theme-variable-refresh.scss +0 -63
  524. package/mdc-form-field/index.d.ts +0 -431
  525. package/mdc-form-field/testing/index.d.ts +0 -48
  526. package/mdc-input/_input-theme.import.scss +0 -5
  527. package/mdc-input/_input-theme.scss +0 -35
  528. package/mdc-input/index.d.ts +0 -30
  529. package/mdc-input/testing/index.d.ts +0 -20
  530. package/mdc-list/_interactive-list-theme.import.scss +0 -5
  531. package/mdc-list/_interactive-list-theme.scss +0 -40
  532. package/mdc-list/_list-option-theme.import.scss +0 -13
  533. package/mdc-list/_list-option-theme.scss +0 -28
  534. package/mdc-list/_list-option-trailing-avatar-compat.scss +0 -58
  535. package/mdc-list/_list-theme.import.scss +0 -17
  536. package/mdc-list/_list-theme.scss +0 -81
  537. package/mdc-list/index.d.ts +0 -534
  538. package/mdc-list/testing/index.d.ts +0 -372
  539. package/mdc-menu/_menu-theme.import.scss +0 -5
  540. package/mdc-menu/_menu-theme.scss +0 -88
  541. package/mdc-menu/index.d.ts +0 -110
  542. package/mdc-menu/testing/index.d.ts +0 -38
  543. package/mdc-paginator/_paginator-theme.import.scss +0 -9
  544. package/mdc-paginator/_paginator-theme.scss +0 -106
  545. package/mdc-paginator/_paginator-variables.import.scss +0 -1
  546. package/mdc-paginator/_paginator-variables.scss +0 -13
  547. package/mdc-paginator/index.d.ts +0 -72
  548. package/mdc-paginator/testing/index.d.ts +0 -30
  549. package/mdc-progress-bar/_progress-bar-theme.import.scss +0 -6
  550. package/mdc-progress-bar/_progress-bar-theme.scss +0 -57
  551. package/mdc-progress-bar/index.d.ts +0 -98
  552. package/mdc-progress-bar/testing/index.d.ts +0 -24
  553. package/mdc-progress-spinner/_progress-spinner-theme.import.scss +0 -6
  554. package/mdc-progress-spinner/_progress-spinner-theme.scss +0 -48
  555. package/mdc-progress-spinner/index.d.ts +0 -90
  556. package/mdc-progress-spinner/testing/index.d.ts +0 -26
  557. package/mdc-radio/_radio-theme.import.scss +0 -7
  558. package/mdc-radio/_radio-theme.scss +0 -110
  559. package/mdc-radio/index.d.ts +0 -72
  560. package/mdc-radio/testing/index.d.ts +0 -43
  561. package/mdc-select/_select-theme.import.scss +0 -10
  562. package/mdc-select/_select-theme.scss +0 -100
  563. package/mdc-select/index.d.ts +0 -111
  564. package/mdc-select/testing/index.d.ts +0 -28
  565. package/mdc-slide-toggle/_slide-toggle-theme.import.scss +0 -11
  566. package/mdc-slide-toggle/_slide-toggle-theme.scss +0 -140
  567. package/mdc-slide-toggle/index.d.ts +0 -83
  568. package/mdc-slide-toggle/testing/index.d.ts +0 -27
  569. package/mdc-slider/_slider-theme.import.scss +0 -5
  570. package/mdc-slider/_slider-theme.scss +0 -125
  571. package/mdc-slider/index.d.ts +0 -435
  572. package/mdc-slider/testing/index.d.ts +0 -92
  573. package/mdc-snack-bar/_snack-bar-theme.import.scss +0 -8
  574. package/mdc-snack-bar/_snack-bar-theme.scss +0 -81
  575. package/mdc-snack-bar/index.d.ts +0 -136
  576. package/mdc-snack-bar/testing/index.d.ts +0 -23
  577. package/mdc-table/_table-theme.import.scss +0 -11
  578. package/mdc-table/_table-theme.scss +0 -78
  579. package/mdc-table/index.d.ts +0 -238
  580. package/mdc-table/testing/index.d.ts +0 -118
  581. package/mdc-tabs/_tabs-common.import.scss +0 -14
  582. package/mdc-tabs/_tabs-common.scss +0 -196
  583. package/mdc-tabs/_tabs-theme.import.scss +0 -8
  584. package/mdc-tabs/_tabs-theme.scss +0 -146
  585. package/mdc-tabs/index.d.ts +0 -307
  586. package/mdc-tabs/testing/index.d.ts +0 -151
  587. package/mdc-tooltip/_tooltip-theme.import.scss +0 -5
  588. package/mdc-tooltip/_tooltip-theme.scss +0 -49
  589. package/mdc-tooltip/index.d.ts +0 -118
  590. package/mdc-tooltip/testing/index.d.ts +0 -26
@@ -1,608 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { Directionality } from '@angular/cdk/bidi';
9
- import { Platform } from '@angular/cdk/platform';
10
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, Inject, InjectionToken, Input, NgZone, Optional, QueryList, ViewChild, ViewEncapsulation, } from '@angular/core';
11
- import { getMatFormFieldDuplicatedHintError, getMatFormFieldMissingControlError, MAT_FORM_FIELD, matFormFieldAnimations, MatFormFieldControl, } from '@angular/material/form-field';
12
- import { ANIMATION_MODULE_TYPE } from '@angular/platform-browser/animations';
13
- import { merge, Subject } from 'rxjs';
14
- import { takeUntil } from 'rxjs/operators';
15
- import { MAT_ERROR } from './directives/error';
16
- import { MatFormFieldFloatingLabel } from './directives/floating-label';
17
- import { MatHint } from './directives/hint';
18
- import { MatLabel } from './directives/label';
19
- import { MatFormFieldLineRipple } from './directives/line-ripple';
20
- import { MatFormFieldNotchedOutline } from './directives/notched-outline';
21
- import { MAT_PREFIX } from './directives/prefix';
22
- import { MAT_SUFFIX } from './directives/suffix';
23
- import { DOCUMENT } from '@angular/common';
24
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
25
- import * as i0 from "@angular/core";
26
- import * as i1 from "@angular/cdk/bidi";
27
- import * as i2 from "@angular/cdk/platform";
28
- import * as i3 from "@angular/common";
29
- import * as i4 from "@angular/cdk/observers";
30
- import * as i5 from "./directives/hint";
31
- import * as i6 from "./directives/floating-label";
32
- import * as i7 from "./directives/notched-outline";
33
- import * as i8 from "./directives/line-ripple";
34
- /**
35
- * Injection token that can be used to configure the
36
- * default options for all form field within an app.
37
- */
38
- export const MAT_FORM_FIELD_DEFAULT_OPTIONS = new InjectionToken('MAT_FORM_FIELD_DEFAULT_OPTIONS');
39
- let nextUniqueId = 0;
40
- /** Default appearance used by the form field. */
41
- const DEFAULT_APPEARANCE = 'fill';
42
- /**
43
- * Whether the label for form fields should by default float `always`,
44
- * `never`, or `auto`.
45
- */
46
- const DEFAULT_FLOAT_LABEL = 'auto';
47
- /** Default way that the subscript element height is set. */
48
- const DEFAULT_SUBSCRIPT_SIZING = 'fixed';
49
- /**
50
- * Default transform for docked floating labels in a MDC text-field. This value has been
51
- * extracted from the MDC text-field styles because we programmatically modify the docked
52
- * label transform, but do not want to accidentally discard the default label transform.
53
- */
54
- const FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM = `translateY(-50%)`;
55
- /**
56
- * Horizontal padding in pixels used by the MDC for the wrapper containing infix.
57
- * This value is extracted from MDC's Sass variables. See `$padding-horizontal`.
58
- */
59
- const WRAPPER_HORIZONTAL_PADDING = 16;
60
- /** Container for form controls that applies Material Design styling and behavior. */
61
- export class MatFormField {
62
- constructor(_elementRef, _changeDetectorRef, _ngZone, _dir, _platform, _defaults, _animationMode, _document) {
63
- this._elementRef = _elementRef;
64
- this._changeDetectorRef = _changeDetectorRef;
65
- this._ngZone = _ngZone;
66
- this._dir = _dir;
67
- this._platform = _platform;
68
- this._defaults = _defaults;
69
- this._animationMode = _animationMode;
70
- this._document = _document;
71
- this._hideRequiredMarker = false;
72
- /** The color palette for the form field. */
73
- this.color = 'primary';
74
- this._appearance = DEFAULT_APPEARANCE;
75
- this._subscriptSizing = null;
76
- this._hintLabel = '';
77
- this._hasIconPrefix = false;
78
- this._hasTextPrefix = false;
79
- this._hasIconSuffix = false;
80
- this._hasTextSuffix = false;
81
- // Unique id for the internal form field label.
82
- this._labelId = `mat-mdc-form-field-label-${nextUniqueId++}`;
83
- // Unique id for the hint label.
84
- this._hintLabelId = `mat-mdc-hint-${nextUniqueId++}`;
85
- /** State of the mat-hint and mat-error animations. */
86
- this._subscriptAnimationState = '';
87
- /** Width of the label element (at scale=1). */
88
- this._labelWidth = 0;
89
- this._destroyed = new Subject();
90
- this._isFocused = null;
91
- this._needsOutlineLabelOffsetUpdateOnStable = false;
92
- if (_defaults) {
93
- if (_defaults.appearance) {
94
- this.appearance = _defaults.appearance;
95
- }
96
- this._hideRequiredMarker = Boolean(_defaults?.hideRequiredMarker);
97
- if (_defaults.color) {
98
- this.color = _defaults.color;
99
- }
100
- }
101
- }
102
- /** Whether the required marker should be hidden. */
103
- get hideRequiredMarker() {
104
- return this._hideRequiredMarker;
105
- }
106
- set hideRequiredMarker(value) {
107
- this._hideRequiredMarker = coerceBooleanProperty(value);
108
- }
109
- /** Whether the label should always float or float as the user types. */
110
- get floatLabel() {
111
- return this._floatLabel || this._defaults?.floatLabel || DEFAULT_FLOAT_LABEL;
112
- }
113
- set floatLabel(value) {
114
- if (value !== this._floatLabel) {
115
- this._floatLabel = value;
116
- // For backwards compatibility. Custom form field controls or directives might set
117
- // the "floatLabel" input and expect the form field view to be updated automatically.
118
- // e.g. autocomplete trigger. Ideally we'd get rid of this and the consumers would just
119
- // emit the "stateChanges" observable. TODO(devversion): consider removing.
120
- this._changeDetectorRef.markForCheck();
121
- }
122
- }
123
- /** The form field appearance style. */
124
- get appearance() {
125
- return this._appearance;
126
- }
127
- set appearance(value) {
128
- const oldValue = this._appearance;
129
- const newAppearance = value || this._defaults?.appearance || DEFAULT_APPEARANCE;
130
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
131
- if (newAppearance !== 'fill' && newAppearance !== 'outline') {
132
- throw new Error(`MatFormField: Invalid appearance "${newAppearance}", valid values are "fill" or "outline".`);
133
- }
134
- }
135
- this._appearance = newAppearance;
136
- if (this._appearance === 'outline' && this._appearance !== oldValue) {
137
- this._refreshOutlineNotchWidth();
138
- // If the appearance has been switched to `outline`, the label offset needs to be updated.
139
- // The update can happen once the view has been re-checked, but not immediately because
140
- // the view has not been updated and the notched-outline floating label is not present.
141
- this._needsOutlineLabelOffsetUpdateOnStable = true;
142
- }
143
- }
144
- /**
145
- * Whether the form field should reserve space for one line of hint/error text (default)
146
- * or to have the spacing grow from 0px as needed based on the size of the hint/error content.
147
- * Note that when using dynamic sizing, layout shifts will occur when hint/error text changes.
148
- */
149
- get subscriptSizing() {
150
- return this._subscriptSizing || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;
151
- }
152
- set subscriptSizing(value) {
153
- this._subscriptSizing = value || this._defaults?.subscriptSizing || DEFAULT_SUBSCRIPT_SIZING;
154
- }
155
- /** Text for the form field hint. */
156
- get hintLabel() {
157
- return this._hintLabel;
158
- }
159
- set hintLabel(value) {
160
- this._hintLabel = value;
161
- this._processHints();
162
- }
163
- /** Gets the current form field control */
164
- get _control() {
165
- return this._explicitFormFieldControl || this._formFieldControl;
166
- }
167
- set _control(value) {
168
- this._explicitFormFieldControl = value;
169
- }
170
- ngAfterViewInit() {
171
- // Initial focus state sync. This happens rarely, but we want to account for
172
- // it in case the form field control has "focused" set to true on init.
173
- this._updateFocusState();
174
- // Initial notch width update. This is needed in case the text-field label floats
175
- // on initialization, and renders inside of the notched outline.
176
- this._refreshOutlineNotchWidth();
177
- // Make sure fonts are loaded before calculating the width.
178
- // zone.js currently doesn't patch the FontFaceSet API so two calls to
179
- // _refreshOutlineNotchWidth is needed for this to work properly in async tests.
180
- // Furthermore if the font takes a long time to load we want the outline notch to be close
181
- // to the correct width from the start then correct itself when the fonts load.
182
- if (this._document?.fonts?.ready) {
183
- this._document.fonts.ready.then(() => {
184
- this._refreshOutlineNotchWidth();
185
- this._changeDetectorRef.markForCheck();
186
- });
187
- }
188
- else {
189
- // FontFaceSet is not supported in IE
190
- setTimeout(() => this._refreshOutlineNotchWidth(), 100);
191
- }
192
- // Enable animations now. This ensures we don't animate on initial render.
193
- this._subscriptAnimationState = 'enter';
194
- // Because the above changes a value used in the template after it was checked, we need
195
- // to trigger CD or the change might not be reflected if there is no other CD scheduled.
196
- this._changeDetectorRef.detectChanges();
197
- }
198
- ngAfterContentInit() {
199
- this._assertFormFieldControl();
200
- this._initializeControl();
201
- this._initializeSubscript();
202
- this._initializePrefixAndSuffix();
203
- this._initializeOutlineLabelOffsetSubscriptions();
204
- }
205
- ngAfterContentChecked() {
206
- this._assertFormFieldControl();
207
- }
208
- ngOnDestroy() {
209
- this._destroyed.next();
210
- this._destroyed.complete();
211
- }
212
- /**
213
- * Gets the id of the label element. If no label is present, returns `null`.
214
- */
215
- getLabelId() {
216
- return this._hasFloatingLabel() ? this._labelId : null;
217
- }
218
- /**
219
- * Gets an ElementRef for the element that a overlay attached to the form field
220
- * should be positioned relative to.
221
- */
222
- getConnectedOverlayOrigin() {
223
- return this._textField || this._elementRef;
224
- }
225
- /** Animates the placeholder up and locks it in position. */
226
- _animateAndLockLabel() {
227
- // This is for backwards compatibility only. Consumers of the form field might use
228
- // this method. e.g. the autocomplete trigger. This method has been added to the non-MDC
229
- // form field because setting "floatLabel" to "always" caused the label to float without
230
- // animation. This is different in MDC where the label always animates, so this method
231
- // is no longer necessary. There doesn't seem any benefit in adding logic to allow changing
232
- // the floating label state without animations. The non-MDC implementation was inconsistent
233
- // because it always animates if "floatLabel" is set away from "always".
234
- // TODO(devversion): consider removing this method when releasing the MDC form field.
235
- if (this._hasFloatingLabel()) {
236
- this.floatLabel = 'always';
237
- }
238
- }
239
- /** Initializes the registered form field control. */
240
- _initializeControl() {
241
- const control = this._control;
242
- if (control.controlType) {
243
- this._elementRef.nativeElement.classList.add(`mat-mdc-form-field-type-${control.controlType}`);
244
- }
245
- // Subscribe to changes in the child control state in order to update the form field UI.
246
- control.stateChanges.subscribe(() => {
247
- this._updateFocusState();
248
- this._syncDescribedByIds();
249
- this._changeDetectorRef.markForCheck();
250
- });
251
- // Run change detection if the value changes.
252
- if (control.ngControl && control.ngControl.valueChanges) {
253
- control.ngControl.valueChanges
254
- .pipe(takeUntil(this._destroyed))
255
- .subscribe(() => this._changeDetectorRef.markForCheck());
256
- }
257
- }
258
- _checkPrefixAndSuffixTypes() {
259
- this._hasIconPrefix = !!this._prefixChildren.find(p => !p._isText);
260
- this._hasTextPrefix = !!this._prefixChildren.find(p => p._isText);
261
- this._hasIconSuffix = !!this._suffixChildren.find(s => !s._isText);
262
- this._hasTextSuffix = !!this._suffixChildren.find(s => s._isText);
263
- }
264
- /** Initializes the prefix and suffix containers. */
265
- _initializePrefixAndSuffix() {
266
- this._checkPrefixAndSuffixTypes();
267
- // Mark the form field as dirty whenever the prefix or suffix children change. This
268
- // is necessary because we conditionally display the prefix/suffix containers based
269
- // on whether there is projected content.
270
- merge(this._prefixChildren.changes, this._suffixChildren.changes).subscribe(() => {
271
- this._checkPrefixAndSuffixTypes();
272
- this._changeDetectorRef.markForCheck();
273
- });
274
- }
275
- /**
276
- * Initializes the subscript by validating hints and synchronizing "aria-describedby" ids
277
- * with the custom form field control. Also subscribes to hint and error changes in order
278
- * to be able to validate and synchronize ids on change.
279
- */
280
- _initializeSubscript() {
281
- // Re-validate when the number of hints changes.
282
- this._hintChildren.changes.subscribe(() => {
283
- this._processHints();
284
- this._changeDetectorRef.markForCheck();
285
- });
286
- // Update the aria-described by when the number of errors changes.
287
- this._errorChildren.changes.subscribe(() => {
288
- this._syncDescribedByIds();
289
- this._changeDetectorRef.markForCheck();
290
- });
291
- // Initial mat-hint validation and subscript describedByIds sync.
292
- this._validateHints();
293
- this._syncDescribedByIds();
294
- }
295
- /** Throws an error if the form field's control is missing. */
296
- _assertFormFieldControl() {
297
- if (!this._control && (typeof ngDevMode === 'undefined' || ngDevMode)) {
298
- throw getMatFormFieldMissingControlError();
299
- }
300
- }
301
- _updateFocusState() {
302
- // Usually the MDC foundation would call "activateFocus" and "deactivateFocus" whenever
303
- // certain DOM events are emitted. This is not possible in our implementation of the
304
- // form field because we support abstract form field controls which are not necessarily
305
- // of type input, nor do we have a reference to a native form field control element. Instead
306
- // we handle the focus by checking if the abstract form field control focused state changes.
307
- if (this._control.focused && !this._isFocused) {
308
- this._isFocused = true;
309
- this._lineRipple?.activate();
310
- }
311
- else if (!this._control.focused && (this._isFocused || this._isFocused === null)) {
312
- this._isFocused = false;
313
- this._lineRipple?.deactivate();
314
- }
315
- this._textField?.nativeElement.classList.toggle('mdc-text-field--focused', this._control.focused);
316
- }
317
- /**
318
- * The floating label in the docked state needs to account for prefixes. The horizontal offset
319
- * is calculated whenever the appearance changes to `outline`, the prefixes change, or when the
320
- * form field is added to the DOM. This method sets up all subscriptions which are needed to
321
- * trigger the label offset update. In general, we want to avoid performing measurements often,
322
- * so we rely on the `NgZone` as indicator when the offset should be recalculated, instead of
323
- * checking every change detection cycle.
324
- */
325
- _initializeOutlineLabelOffsetSubscriptions() {
326
- // Whenever the prefix changes, schedule an update of the label offset.
327
- this._prefixChildren.changes.subscribe(() => (this._needsOutlineLabelOffsetUpdateOnStable = true));
328
- // Note that we have to run outside of the `NgZone` explicitly, in order to avoid
329
- // throwing users into an infinite loop if `zone-patch-rxjs` is included.
330
- this._ngZone.runOutsideAngular(() => {
331
- this._ngZone.onStable.pipe(takeUntil(this._destroyed)).subscribe(() => {
332
- if (this._needsOutlineLabelOffsetUpdateOnStable) {
333
- this._needsOutlineLabelOffsetUpdateOnStable = false;
334
- this._updateOutlineLabelOffset();
335
- }
336
- });
337
- });
338
- this._dir.change
339
- .pipe(takeUntil(this._destroyed))
340
- .subscribe(() => (this._needsOutlineLabelOffsetUpdateOnStable = true));
341
- }
342
- /** Whether the floating label should always float or not. */
343
- _shouldAlwaysFloat() {
344
- return this.floatLabel === 'always';
345
- }
346
- _hasOutline() {
347
- return this.appearance === 'outline';
348
- }
349
- /**
350
- * Whether the label should display in the infix. Labels in the outline appearance are
351
- * displayed as part of the notched-outline and are horizontally offset to account for
352
- * form field prefix content. This won't work in server side rendering since we cannot
353
- * measure the width of the prefix container. To make the docked label appear as if the
354
- * right offset has been calculated, we forcibly render the label inside the infix. Since
355
- * the label is part of the infix, the label cannot overflow the prefix content.
356
- */
357
- _forceDisplayInfixLabel() {
358
- return !this._platform.isBrowser && this._prefixChildren.length && !this._shouldLabelFloat();
359
- }
360
- _hasFloatingLabel() {
361
- return !!this._labelChildNonStatic || !!this._labelChildStatic;
362
- }
363
- _shouldLabelFloat() {
364
- return this._control.shouldLabelFloat || this._shouldAlwaysFloat();
365
- }
366
- /**
367
- * Determines whether a class from the AbstractControlDirective
368
- * should be forwarded to the host element.
369
- */
370
- _shouldForward(prop) {
371
- const control = this._control ? this._control.ngControl : null;
372
- return control && control[prop];
373
- }
374
- /** Determines whether to display hints or errors. */
375
- _getDisplayedMessages() {
376
- return this._errorChildren && this._errorChildren.length > 0 && this._control.errorState
377
- ? 'error'
378
- : 'hint';
379
- }
380
- /** Refreshes the width of the outline-notch, if present. */
381
- _refreshOutlineNotchWidth() {
382
- if (!this._hasOutline() || !this._floatingLabel) {
383
- return;
384
- }
385
- this._labelWidth = this._floatingLabel.getWidth();
386
- }
387
- /** Does any extra processing that is required when handling the hints. */
388
- _processHints() {
389
- this._validateHints();
390
- this._syncDescribedByIds();
391
- }
392
- /**
393
- * Ensure that there is a maximum of one of each "mat-hint" alignment specified. The hint
394
- * label specified set through the input is being considered as "start" aligned.
395
- *
396
- * This method is a noop if Angular runs in production mode.
397
- */
398
- _validateHints() {
399
- if (this._hintChildren && (typeof ngDevMode === 'undefined' || ngDevMode)) {
400
- let startHint;
401
- let endHint;
402
- this._hintChildren.forEach((hint) => {
403
- if (hint.align === 'start') {
404
- if (startHint || this.hintLabel) {
405
- throw getMatFormFieldDuplicatedHintError('start');
406
- }
407
- startHint = hint;
408
- }
409
- else if (hint.align === 'end') {
410
- if (endHint) {
411
- throw getMatFormFieldDuplicatedHintError('end');
412
- }
413
- endHint = hint;
414
- }
415
- });
416
- }
417
- }
418
- /**
419
- * Sets the list of element IDs that describe the child control. This allows the control to update
420
- * its `aria-describedby` attribute accordingly.
421
- */
422
- _syncDescribedByIds() {
423
- if (this._control) {
424
- let ids = [];
425
- // TODO(wagnermaciel): Remove the type check when we find the root cause of this bug.
426
- if (this._control.userAriaDescribedBy &&
427
- typeof this._control.userAriaDescribedBy === 'string') {
428
- ids.push(...this._control.userAriaDescribedBy.split(' '));
429
- }
430
- if (this._getDisplayedMessages() === 'hint') {
431
- const startHint = this._hintChildren
432
- ? this._hintChildren.find(hint => hint.align === 'start')
433
- : null;
434
- const endHint = this._hintChildren
435
- ? this._hintChildren.find(hint => hint.align === 'end')
436
- : null;
437
- if (startHint) {
438
- ids.push(startHint.id);
439
- }
440
- else if (this._hintLabel) {
441
- ids.push(this._hintLabelId);
442
- }
443
- if (endHint) {
444
- ids.push(endHint.id);
445
- }
446
- }
447
- else if (this._errorChildren) {
448
- ids.push(...this._errorChildren.map(error => error.id));
449
- }
450
- this._control.setDescribedByIds(ids);
451
- }
452
- }
453
- /**
454
- * Updates the horizontal offset of the label in the outline appearance. In the outline
455
- * appearance, the notched-outline and label are not relative to the infix container because
456
- * the outline intends to surround prefixes, suffixes and the infix. This means that the
457
- * floating label by default overlaps prefixes in the docked state. To avoid this, we need to
458
- * horizontally offset the label by the width of the prefix container. The MDC text-field does
459
- * not need to do this because they use a fixed width for prefixes. Hence, they can simply
460
- * incorporate the horizontal offset into their default text-field styles.
461
- */
462
- _updateOutlineLabelOffset() {
463
- if (!this._platform.isBrowser || !this._hasOutline() || !this._floatingLabel) {
464
- return;
465
- }
466
- const floatingLabel = this._floatingLabel.element;
467
- // If no prefix is displayed, reset the outline label offset from potential
468
- // previous label offset updates.
469
- if (!(this._iconPrefixContainer || this._textPrefixContainer)) {
470
- floatingLabel.style.transform = '';
471
- return;
472
- }
473
- // If the form field is not attached to the DOM yet (e.g. in a tab), we defer
474
- // the label offset update until the zone stabilizes.
475
- if (!this._isAttachedToDom()) {
476
- this._needsOutlineLabelOffsetUpdateOnStable = true;
477
- return;
478
- }
479
- const iconPrefixContainer = this._iconPrefixContainer?.nativeElement;
480
- const textPrefixContainer = this._textPrefixContainer?.nativeElement;
481
- const iconPrefixContainerWidth = iconPrefixContainer?.getBoundingClientRect().width ?? 0;
482
- const textPrefixContainerWidth = textPrefixContainer?.getBoundingClientRect().width ?? 0;
483
- // If the directionality is RTL, the x-axis transform needs to be inverted. This
484
- // is because `transformX` does not change based on the page directionality.
485
- const labelHorizontalOffset = (this._dir.value === 'rtl' ? -1 : 1) *
486
- // If there's an icon prefix, we subtract the default horizontal padding as we
487
- // reset the horizontal padding in CSS too.
488
- ((iconPrefixContainer ? iconPrefixContainerWidth - WRAPPER_HORIZONTAL_PADDING : 0) +
489
- textPrefixContainerWidth);
490
- // Update the translateX of the floating label to account for the prefix container,
491
- // but allow the CSS to override this setting via a CSS variable when the label is
492
- // floating.
493
- floatingLabel.style.transform = `var(
494
- --mat-mdc-form-field-label-transform,
495
- ${FLOATING_LABEL_DEFAULT_DOCKED_TRANSFORM} translateX(${labelHorizontalOffset}px
496
- )`;
497
- }
498
- /** Checks whether the form field is attached to the DOM. */
499
- _isAttachedToDom() {
500
- const element = this._elementRef.nativeElement;
501
- if (element.getRootNode) {
502
- const rootNode = element.getRootNode();
503
- // If the element is inside the DOM the root node will be either the document
504
- // or the closest shadow root, otherwise it'll be the element itself.
505
- return rootNode && rootNode !== element;
506
- }
507
- // Otherwise fall back to checking if it's in the document. This doesn't account for
508
- // shadow DOM, however browser that support shadow DOM should support `getRootNode` as well.
509
- return document.documentElement.contains(element);
510
- }
511
- }
512
- MatFormField.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MatFormField, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.Directionality }, { token: i2.Platform }, { token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: ANIMATION_MODULE_TYPE, optional: true }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
513
- MatFormField.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: MatFormField, selector: "mat-form-field", inputs: { hideRequiredMarker: "hideRequiredMarker", color: "color", floatLabel: "floatLabel", appearance: "appearance", subscriptSizing: "subscriptSizing", hintLabel: "hintLabel" }, host: { properties: { "class.mat-mdc-form-field-label-always-float": "_shouldAlwaysFloat()", "class.mat-mdc-form-field-has-icon-prefix": "_hasIconPrefix", "class.mat-mdc-form-field-has-icon-suffix": "_hasIconSuffix", "class.mat-form-field-invalid": "_control.errorState", "class.mat-form-field-disabled": "_control.disabled", "class.mat-form-field-autofilled": "_control.autofilled", "class.mat-form-field-no-animations": "_animationMode === \"NoopAnimations\"", "class.mat-form-field-appearance-fill": "appearance == \"fill\"", "class.mat-form-field-appearance-outline": "appearance == \"outline\"", "class.mat-form-field-hide-placeholder": "_hasFloatingLabel() && !_shouldLabelFloat()", "class.mat-focused": "_control.focused", "class.mat-primary": "color !== \"accent\" && color !== \"warn\"", "class.mat-accent": "color === \"accent\"", "class.mat-warn": "color === \"warn\"", "class.ng-untouched": "_shouldForward(\"untouched\")", "class.ng-touched": "_shouldForward(\"touched\")", "class.ng-pristine": "_shouldForward(\"pristine\")", "class.ng-dirty": "_shouldForward(\"dirty\")", "class.ng-valid": "_shouldForward(\"valid\")", "class.ng-invalid": "_shouldForward(\"invalid\")", "class.ng-pending": "_shouldForward(\"pending\")" }, classAttribute: "mat-mdc-form-field" }, providers: [{ provide: MAT_FORM_FIELD, useExisting: MatFormField }], queries: [{ propertyName: "_labelChildNonStatic", first: true, predicate: MatLabel, descendants: true }, { propertyName: "_labelChildStatic", first: true, predicate: MatLabel, descendants: true, static: true }, { propertyName: "_formFieldControl", first: true, predicate: MatFormFieldControl, descendants: true }, { propertyName: "_prefixChildren", predicate: MAT_PREFIX, descendants: true }, { propertyName: "_suffixChildren", predicate: MAT_SUFFIX, descendants: true }, { propertyName: "_errorChildren", predicate: MAT_ERROR, descendants: true }, { propertyName: "_hintChildren", predicate: MatHint, descendants: true }], viewQueries: [{ propertyName: "_textField", first: true, predicate: ["textField"], descendants: true }, { propertyName: "_iconPrefixContainer", first: true, predicate: ["iconPrefixContainer"], descendants: true }, { propertyName: "_textPrefixContainer", first: true, predicate: ["textPrefixContainer"], descendants: true }, { propertyName: "_floatingLabel", first: true, predicate: MatFormFieldFloatingLabel, descendants: true }, { propertyName: "_notchedOutline", first: true, predicate: MatFormFieldNotchedOutline, descendants: true }, { propertyName: "_lineRipple", first: true, predicate: MatFormFieldLineRipple, descendants: true }], exportAs: ["matFormField"], ngImport: i0, template: "<ng-template #labelTemplate>\n <!--\n MDC recommends that the text-field is a `<label>` element. This rather complicates the\n setup because it would require every form-field control to explicitly set `aria-labelledby`.\n This is because the `<label>` itself contains more than the actual label (e.g. prefix, suffix\n or other projected content), and screen readers could potentially read out undesired content.\n Excluding elements from being printed out requires them to be marked with `aria-hidden`, or\n the form control is set to a scoped element for the label (using `aria-labelledby`). Both of\n these options seem to complicate the setup because we know exactly what content is rendered\n as part of the label, and we don't want to spend resources on walking through projected content\n to set `aria-hidden`. Nor do we want to set `aria-labelledby` on every form control if we could\n simply link the label to the control using the label `for` attribute.\n\n *Note*: We add aria-owns as a workaround for an issue in JAWS & NVDA where the label isn't\n read if it comes before the control in the DOM.\n -->\n <label matFormFieldFloatingLabel\n [floating]=\"_shouldLabelFloat()\"\n *ngIf=\"_hasFloatingLabel()\"\n (cdkObserveContent)=\"_refreshOutlineNotchWidth()\"\n [cdkObserveContentDisabled]=\"!_hasOutline()\"\n [id]=\"_labelId\"\n [attr.for]=\"_control.id\"\n [attr.aria-owns]=\"_control.id\">\n <ng-content select=\"mat-label\"></ng-content>\n <!--\n We set the required marker as a separate element, in order to make it easier to target if\n apps want to override it and to be able to set `aria-hidden` so that screen readers don't\n pick it up.\n -->\n <span\n *ngIf=\"!hideRequiredMarker && _control.required\"\n aria-hidden=\"true\"\n class=\"mat-mdc-form-field-required-marker mdc-floating-label--required\"></span>\n </label>\n</ng-template>\n\n<div class=\"mat-mdc-text-field-wrapper mdc-text-field\" #textField\n [class.mdc-text-field--filled]=\"!_hasOutline()\"\n [class.mdc-text-field--outlined]=\"_hasOutline()\"\n [class.mdc-text-field--no-label]=\"!_hasFloatingLabel()\"\n [class.mdc-text-field--disabled]=\"_control.disabled\"\n [class.mdc-text-field--invalid]=\"_control.errorState\"\n (click)=\"_control.onContainerClick && _control.onContainerClick($event)\">\n <div class=\"mat-mdc-form-field-focus-overlay\" *ngIf=\"!_hasOutline() && !_control.disabled\"></div>\n <div class=\"mat-mdc-form-field-flex\">\n <div *ngIf=\"_hasOutline()\" matFormFieldNotchedOutline\n [matFormFieldNotchedOutlineOpen]=\"_shouldLabelFloat()\"\n [matFormFieldNotchedOutlineLabelWidth]=\"_labelWidth\">\n <ng-template [ngIf]=\"!_forceDisplayInfixLabel()\">\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </ng-template>\n </div>\n\n <div class=\"mat-mdc-form-field-icon-prefix\" *ngIf=\"_hasIconPrefix\" #iconPrefixContainer>\n <ng-content select=\"[matPrefix], [matIconPrefix]\"></ng-content>\n </div>\n <div class=\"mat-mdc-form-field-text-prefix\" *ngIf=\"_hasTextPrefix\" #textPrefixContainer>\n <ng-content select=\"[matTextPrefix]\"></ng-content>\n </div>\n\n <div class=\"mat-mdc-form-field-infix\">\n <ng-template [ngIf]=\"!_hasOutline() || _forceDisplayInfixLabel()\">\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </ng-template>\n\n <ng-content></ng-content>\n </div>\n\n <div class=\"mat-mdc-form-field-text-suffix\" *ngIf=\"_hasTextSuffix\">\n <ng-content select=\"[matTextSuffix]\"></ng-content>\n </div>\n <div class=\"mat-mdc-form-field-icon-suffix\" *ngIf=\"_hasIconSuffix\">\n <ng-content select=\"[matSuffix], [matIconSuffix]\"></ng-content>\n </div>\n </div>\n\n <div matFormFieldLineRipple *ngIf=\"!_hasOutline()\"></div>\n</div>\n\n<div class=\"mat-mdc-form-field-subscript-wrapper mat-mdc-form-field-bottom-align\"\n [class.mat-mdc-form-field-subscript-dynamic-size]=\"subscriptSizing === 'dynamic'\"\n [ngSwitch]=\"_getDisplayedMessages()\">\n <div class=\"mat-mdc-form-field-error-wrapper\" *ngSwitchCase=\"'error'\"\n [@transitionMessages]=\"_subscriptAnimationState\">\n <ng-content select=\"mat-error\"></ng-content>\n </div>\n\n <div class=\"mat-mdc-form-field-hint-wrapper\" *ngSwitchCase=\"'hint'\"\n [@transitionMessages]=\"_subscriptAnimationState\">\n <mat-hint *ngIf=\"hintLabel\" [id]=\"_hintLabelId\">{{hintLabel}}</mat-hint>\n <ng-content select=\"mat-hint:not([align='end'])\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</div>\n", styles: [".mdc-text-field{border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:0;border-bottom-left-radius:0;display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-text-field__input{height:28px;width:100%;min-width:0;border:none;border-radius:0;background:none;appearance:none;padding:0}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}@media all{.mdc-text-field__input::placeholder{opacity:0}}@media all{.mdc-text-field__input:-ms-input-placeholder{opacity:0}}@media all{.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}}@media all{.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}}.mdc-text-field__affix{height:28px;opacity:0;white-space:nowrap}.mdc-text-field--label-floating .mdc-text-field__affix,.mdc-text-field--no-label .mdc-text-field__affix{opacity:1}@supports(-webkit-hyphens: none){.mdc-text-field--outlined .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field__affix--prefix,.mdc-text-field__affix--prefix[dir=rtl]{padding-left:2px;padding-right:0}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:0;padding-right:12px}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl]{padding-left:12px;padding-right:0}.mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field__affix--suffix,.mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:12px}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px;padding-right:0}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:2px}.mdc-text-field--filled{height:56px}.mdc-text-field--filled::before{display:inline-block;width:0;height:40px;content:\"\";vertical-align:0}.mdc-text-field--filled .mdc-floating-label{left:16px;right:initial}[dir=rtl] .mdc-text-field--filled .mdc-floating-label,.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled.mdc-text-field--no-label::before{display:none}@supports(-webkit-hyphens: none){.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field--outlined{height:56px;overflow:visible}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1)}.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--outlined .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:var(--mdc-shape-small, 4px)}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px))*2)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:var(--mdc-shape-small, 4px)}@supports(top: max(0%)){.mdc-text-field--outlined{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined{padding-right:max(16px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-right:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-left:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-right:max(16px, var(--mdc-shape-small, 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-right:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-right:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-right:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:initial}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mdc-text-field--textarea{flex-direction:column;align-items:center;width:auto;height:auto;padding:0}.mdc-text-field--textarea .mdc-floating-label{top:19px}.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above){transform:none}.mdc-text-field--textarea .mdc-text-field__input{flex-grow:1;height:auto;min-height:1.5rem;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;resize:none;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--filled::before{display:none}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-10.25px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--filled .mdc-text-field__input{margin-top:23px;margin-bottom:9px}.mdc-text-field--textarea.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-27.25px) scale(1)}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-24.75px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label{top:18px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field__input{margin-bottom:2px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter{align-self:flex-end;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::after{display:inline-block;width:0;height:16px;content:\"\";vertical-align:-16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::before{display:none}.mdc-text-field__resizer{align-self:stretch;display:inline-flex;flex-direction:column;flex-grow:1;max-height:100%;max-width:100%;min-height:56px;min-width:fit-content;min-width:-moz-available;min-width:-webkit-fill-available;overflow:hidden;resize:both}.mdc-text-field--filled .mdc-text-field__resizer{transform:translateY(-1px)}.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field-character-counter{transform:translateY(1px)}.mdc-text-field--outlined .mdc-text-field__resizer{transform:translateX(-1px) translateY(-1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer,.mdc-text-field--outlined .mdc-text-field__resizer[dir=rtl]{transform:translateX(1px) translateY(-1px)}.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter{transform:translateX(1px) translateY(1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input[dir=rtl],.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter[dir=rtl]{transform:translateX(-1px) translateY(1px)}.mdc-text-field--with-leading-icon{padding-left:0;padding-right:16px}[dir=rtl] .mdc-text-field--with-leading-icon,.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:16px;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 48px);left:48px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:48px}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:36px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:36px}.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) translateX(-32px) scale(1)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) translateX(-32px) scale(0.75)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-34.75px) translateX(32px) scale(0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--with-trailing-icon{padding-left:16px;padding-right:0}[dir=rtl] .mdc-text-field--with-trailing-icon,.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:16px}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 96px / 0.75)}.mdc-text-field-helper-line{display:flex;justify-content:space-between;box-sizing:border-box}.mdc-text-field+.mdc-text-field-helper-line{padding-right:16px;padding-left:16px}.mdc-form-field>.mdc-text-field+label{align-self:flex-start}.mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--focused .mdc-notched-outline__trailing{border-width:2px}.mdc-text-field--focused+.mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg){opacity:1}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-text-field--focused.mdc-text-field--outlined.mdc-text-field--textarea .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{opacity:1}.mdc-text-field--disabled{pointer-events:none}@media screen and (forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--disabled .mdc-floating-label{cursor:default}.mdc-text-field--disabled.mdc-text-field--filled .mdc-text-field__ripple{display:none}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl]{text-align:left}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix{direction:ltr}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading{order:1}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{order:2}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input{order:3}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{order:4}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing{order:5}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix{padding-right:12px}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix{padding-left:2px}.mdc-floating-label{position:absolute;left:0;-webkit-transform-origin:left top;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label,.mdc-floating-label[dir=rtl]{right:0;left:auto;-webkit-transform-origin:right top;transform-origin:right top;text-align:right}.mdc-floating-label--float-above{cursor:auto}.mdc-floating-label--required::after{margin-left:1px;margin-right:0px;content:\"*\"}[dir=rtl] .mdc-floating-label--required::after,.mdc-floating-label--required[dir=rtl]::after{margin-left:0;margin-right:1px}.mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;border-top:1px solid;border-bottom:1px solid;pointer-events:none}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid;flex-grow:1}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 12px * 2)}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:\"\"}.mdc-line-ripple::before{border-bottom-width:1px}.mdc-line-ripple::before{z-index:1}.mdc-line-ripple::after{transform:scaleX(0);border-bottom-width:2px;opacity:0;z-index:2}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{font:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{line-height:normal}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-text-field-wrapper::before{content:none}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:\"\";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:\"\";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;pointer-events:none}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}.cdk-high-contrast-active .mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:12px;box-sizing:content-box}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input{transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}@media all{.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}}@media all{.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}}@media all{.mdc-text-field--no-label .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder,.mdc-text-field--focused .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}}@media all{.mdc-text-field--no-label .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__affix{transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple::before,.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea{transition:none}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1}@keyframes mdc-floating-label-shake-float-above-textarea-filled{0%{transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1}@keyframes mdc-floating-label-shake-float-above-textarea-outlined{0%{transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}[dir=rtl] .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake,.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-standard 250ms 1}@keyframes mdc-floating-label-shake-float-above-standard{0%{transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i4.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }, { kind: "directive", type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i6.MatFormFieldFloatingLabel, selector: "label[matFormFieldFloatingLabel]", inputs: ["floating"] }, { kind: "component", type: i7.MatFormFieldNotchedOutline, selector: "div[matFormFieldNotchedOutline]", inputs: ["matFormFieldNotchedOutlineLabelWidth", "matFormFieldNotchedOutlineOpen"] }, { kind: "directive", type: i8.MatFormFieldLineRipple, selector: "div[matFormFieldLineRipple]" }], animations: [matFormFieldAnimations.transitionMessages], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
514
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MatFormField, decorators: [{
515
- type: Component,
516
- args: [{ selector: 'mat-form-field', exportAs: 'matFormField', animations: [matFormFieldAnimations.transitionMessages], host: {
517
- 'class': 'mat-mdc-form-field',
518
- '[class.mat-mdc-form-field-label-always-float]': '_shouldAlwaysFloat()',
519
- '[class.mat-mdc-form-field-has-icon-prefix]': '_hasIconPrefix',
520
- '[class.mat-mdc-form-field-has-icon-suffix]': '_hasIconSuffix',
521
- // Note that these classes reuse the same names as the non-MDC version, because they can be
522
- // considered a public API since custom form controls may use them to style themselves.
523
- // See https://github.com/angular/components/pull/20502#discussion_r486124901.
524
- '[class.mat-form-field-invalid]': '_control.errorState',
525
- '[class.mat-form-field-disabled]': '_control.disabled',
526
- '[class.mat-form-field-autofilled]': '_control.autofilled',
527
- '[class.mat-form-field-no-animations]': '_animationMode === "NoopAnimations"',
528
- '[class.mat-form-field-appearance-fill]': 'appearance == "fill"',
529
- '[class.mat-form-field-appearance-outline]': 'appearance == "outline"',
530
- '[class.mat-form-field-hide-placeholder]': '_hasFloatingLabel() && !_shouldLabelFloat()',
531
- '[class.mat-focused]': '_control.focused',
532
- '[class.mat-primary]': 'color !== "accent" && color !== "warn"',
533
- '[class.mat-accent]': 'color === "accent"',
534
- '[class.mat-warn]': 'color === "warn"',
535
- '[class.ng-untouched]': '_shouldForward("untouched")',
536
- '[class.ng-touched]': '_shouldForward("touched")',
537
- '[class.ng-pristine]': '_shouldForward("pristine")',
538
- '[class.ng-dirty]': '_shouldForward("dirty")',
539
- '[class.ng-valid]': '_shouldForward("valid")',
540
- '[class.ng-invalid]': '_shouldForward("invalid")',
541
- '[class.ng-pending]': '_shouldForward("pending")',
542
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [{ provide: MAT_FORM_FIELD, useExisting: MatFormField }], template: "<ng-template #labelTemplate>\n <!--\n MDC recommends that the text-field is a `<label>` element. This rather complicates the\n setup because it would require every form-field control to explicitly set `aria-labelledby`.\n This is because the `<label>` itself contains more than the actual label (e.g. prefix, suffix\n or other projected content), and screen readers could potentially read out undesired content.\n Excluding elements from being printed out requires them to be marked with `aria-hidden`, or\n the form control is set to a scoped element for the label (using `aria-labelledby`). Both of\n these options seem to complicate the setup because we know exactly what content is rendered\n as part of the label, and we don't want to spend resources on walking through projected content\n to set `aria-hidden`. Nor do we want to set `aria-labelledby` on every form control if we could\n simply link the label to the control using the label `for` attribute.\n\n *Note*: We add aria-owns as a workaround for an issue in JAWS & NVDA where the label isn't\n read if it comes before the control in the DOM.\n -->\n <label matFormFieldFloatingLabel\n [floating]=\"_shouldLabelFloat()\"\n *ngIf=\"_hasFloatingLabel()\"\n (cdkObserveContent)=\"_refreshOutlineNotchWidth()\"\n [cdkObserveContentDisabled]=\"!_hasOutline()\"\n [id]=\"_labelId\"\n [attr.for]=\"_control.id\"\n [attr.aria-owns]=\"_control.id\">\n <ng-content select=\"mat-label\"></ng-content>\n <!--\n We set the required marker as a separate element, in order to make it easier to target if\n apps want to override it and to be able to set `aria-hidden` so that screen readers don't\n pick it up.\n -->\n <span\n *ngIf=\"!hideRequiredMarker && _control.required\"\n aria-hidden=\"true\"\n class=\"mat-mdc-form-field-required-marker mdc-floating-label--required\"></span>\n </label>\n</ng-template>\n\n<div class=\"mat-mdc-text-field-wrapper mdc-text-field\" #textField\n [class.mdc-text-field--filled]=\"!_hasOutline()\"\n [class.mdc-text-field--outlined]=\"_hasOutline()\"\n [class.mdc-text-field--no-label]=\"!_hasFloatingLabel()\"\n [class.mdc-text-field--disabled]=\"_control.disabled\"\n [class.mdc-text-field--invalid]=\"_control.errorState\"\n (click)=\"_control.onContainerClick && _control.onContainerClick($event)\">\n <div class=\"mat-mdc-form-field-focus-overlay\" *ngIf=\"!_hasOutline() && !_control.disabled\"></div>\n <div class=\"mat-mdc-form-field-flex\">\n <div *ngIf=\"_hasOutline()\" matFormFieldNotchedOutline\n [matFormFieldNotchedOutlineOpen]=\"_shouldLabelFloat()\"\n [matFormFieldNotchedOutlineLabelWidth]=\"_labelWidth\">\n <ng-template [ngIf]=\"!_forceDisplayInfixLabel()\">\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </ng-template>\n </div>\n\n <div class=\"mat-mdc-form-field-icon-prefix\" *ngIf=\"_hasIconPrefix\" #iconPrefixContainer>\n <ng-content select=\"[matPrefix], [matIconPrefix]\"></ng-content>\n </div>\n <div class=\"mat-mdc-form-field-text-prefix\" *ngIf=\"_hasTextPrefix\" #textPrefixContainer>\n <ng-content select=\"[matTextPrefix]\"></ng-content>\n </div>\n\n <div class=\"mat-mdc-form-field-infix\">\n <ng-template [ngIf]=\"!_hasOutline() || _forceDisplayInfixLabel()\">\n <ng-template [ngTemplateOutlet]=\"labelTemplate\"></ng-template>\n </ng-template>\n\n <ng-content></ng-content>\n </div>\n\n <div class=\"mat-mdc-form-field-text-suffix\" *ngIf=\"_hasTextSuffix\">\n <ng-content select=\"[matTextSuffix]\"></ng-content>\n </div>\n <div class=\"mat-mdc-form-field-icon-suffix\" *ngIf=\"_hasIconSuffix\">\n <ng-content select=\"[matSuffix], [matIconSuffix]\"></ng-content>\n </div>\n </div>\n\n <div matFormFieldLineRipple *ngIf=\"!_hasOutline()\"></div>\n</div>\n\n<div class=\"mat-mdc-form-field-subscript-wrapper mat-mdc-form-field-bottom-align\"\n [class.mat-mdc-form-field-subscript-dynamic-size]=\"subscriptSizing === 'dynamic'\"\n [ngSwitch]=\"_getDisplayedMessages()\">\n <div class=\"mat-mdc-form-field-error-wrapper\" *ngSwitchCase=\"'error'\"\n [@transitionMessages]=\"_subscriptAnimationState\">\n <ng-content select=\"mat-error\"></ng-content>\n </div>\n\n <div class=\"mat-mdc-form-field-hint-wrapper\" *ngSwitchCase=\"'hint'\"\n [@transitionMessages]=\"_subscriptAnimationState\">\n <mat-hint *ngIf=\"hintLabel\" [id]=\"_hintLabelId\">{{hintLabel}}</mat-hint>\n <ng-content select=\"mat-hint:not([align='end'])\"></ng-content>\n <div class=\"mat-mdc-form-field-hint-spacer\"></div>\n <ng-content select=\"mat-hint[align='end']\"></ng-content>\n </div>\n</div>\n", styles: [".mdc-text-field{border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:0;border-bottom-left-radius:0;display:inline-flex;align-items:baseline;padding:0 16px;position:relative;box-sizing:border-box;overflow:hidden;will-change:opacity,transform,color}.mdc-text-field .mdc-floating-label{top:50%;transform:translateY(-50%);pointer-events:none}.mdc-text-field__input{height:28px;width:100%;min-width:0;border:none;border-radius:0;background:none;appearance:none;padding:0}.mdc-text-field__input::-ms-clear{display:none}.mdc-text-field__input::-webkit-calendar-picker-indicator{display:none}.mdc-text-field__input:focus{outline:none}.mdc-text-field__input:invalid{box-shadow:none}@media all{.mdc-text-field__input::placeholder{opacity:0}}@media all{.mdc-text-field__input:-ms-input-placeholder{opacity:0}}@media all{.mdc-text-field--no-label .mdc-text-field__input::placeholder,.mdc-text-field--focused .mdc-text-field__input::placeholder{opacity:1}}@media all{.mdc-text-field--no-label .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mdc-text-field__input:-ms-input-placeholder{opacity:1}}.mdc-text-field__affix{height:28px;opacity:0;white-space:nowrap}.mdc-text-field--label-floating .mdc-text-field__affix,.mdc-text-field--no-label .mdc-text-field__affix{opacity:1}@supports(-webkit-hyphens: none){.mdc-text-field--outlined .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field__affix--prefix,.mdc-text-field__affix--prefix[dir=rtl]{padding-left:2px;padding-right:0}.mdc-text-field--end-aligned .mdc-text-field__affix--prefix{padding-left:0;padding-right:12px}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--end-aligned .mdc-text-field__affix--prefix[dir=rtl]{padding-left:12px;padding-right:0}.mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field__affix--suffix,.mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:12px}.mdc-text-field--end-aligned .mdc-text-field__affix--suffix{padding-left:2px;padding-right:0}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--end-aligned .mdc-text-field__affix--suffix[dir=rtl]{padding-left:0;padding-right:2px}.mdc-text-field--filled{height:56px}.mdc-text-field--filled::before{display:inline-block;width:0;height:40px;content:\"\";vertical-align:0}.mdc-text-field--filled .mdc-floating-label{left:16px;right:initial}[dir=rtl] .mdc-text-field--filled .mdc-floating-label,.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:16px}.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{height:100%}.mdc-text-field--filled.mdc-text-field--no-label .mdc-floating-label{display:none}.mdc-text-field--filled.mdc-text-field--no-label::before{display:none}@supports(-webkit-hyphens: none){.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__affix{align-items:center;align-self:center;display:inline-flex;height:100%}}.mdc-text-field--outlined{height:56px;overflow:visible}.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) scale(1)}.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) scale(0.75)}.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--outlined .mdc-text-field__input{height:100%}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:var(--mdc-shape-small, 4px)}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading[dir=rtl]{border-top-left-radius:0;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__leading{width:max(12px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__notch{max-width:calc(100% - max(12px, var(--mdc-shape-small, 4px))*2)}}.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing{border-top-left-radius:0;border-top-right-radius:var(--mdc-shape-small, 4px);border-bottom-right-radius:var(--mdc-shape-small, 4px);border-bottom-left-radius:0}[dir=rtl] .mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing,.mdc-text-field--outlined .mdc-notched-outline .mdc-notched-outline__trailing[dir=rtl]{border-top-left-radius:var(--mdc-shape-small, 4px);border-top-right-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:var(--mdc-shape-small, 4px)}@supports(top: max(0%)){.mdc-text-field--outlined{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined{padding-right:max(16px, var(--mdc-shape-small, 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}@supports(top: max(0%)){.mdc-text-field--outlined+.mdc-text-field-helper-line{padding-right:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-left:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-leading-icon{padding-right:max(16px, var(--mdc-shape-small, 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-right:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-leading-icon,.mdc-text-field--outlined.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:max(16px, var(--mdc-shape-small, 4px))}}.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-right:0}@supports(top: max(0%)){.mdc-text-field--outlined.mdc-text-field--with-trailing-icon{padding-left:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0}@supports(top: max(0%)){[dir=rtl] .mdc-text-field--outlined.mdc-text-field--with-trailing-icon,.mdc-text-field--outlined.mdc-text-field--with-trailing-icon[dir=rtl]{padding-right:max(16px, calc(var(--mdc-shape-small, 4px) + 4px))}}.mdc-text-field--outlined.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:1px}.mdc-text-field--outlined .mdc-floating-label{left:4px;right:initial}[dir=rtl] .mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:4px}.mdc-text-field--outlined .mdc-text-field__input{display:flex;border:none !important;background-color:rgba(0,0,0,0)}.mdc-text-field--outlined .mdc-notched-outline{z-index:1}.mdc-text-field--textarea{flex-direction:column;align-items:center;width:auto;height:auto;padding:0}.mdc-text-field--textarea .mdc-floating-label{top:19px}.mdc-text-field--textarea .mdc-floating-label:not(.mdc-floating-label--float-above){transform:none}.mdc-text-field--textarea .mdc-text-field__input{flex-grow:1;height:auto;min-height:1.5rem;overflow-x:hidden;overflow-y:auto;box-sizing:border-box;resize:none;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--filled::before{display:none}.mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--float-above{transform:translateY(-10.25px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--filled .mdc-text-field__input{margin-top:23px;margin-bottom:9px}.mdc-text-field--textarea.mdc-text-field--filled.mdc-text-field--no-label .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-27.25px) scale(1)}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-24.75px) scale(0.75)}.mdc-text-field--textarea.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--textarea.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-text-field__input{margin-top:16px;margin-bottom:16px}.mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label{top:18px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field__input{margin-bottom:2px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter{align-self:flex-end;padding:0 16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::after{display:inline-block;width:0;height:16px;content:\"\";vertical-align:-16px}.mdc-text-field--textarea.mdc-text-field--with-internal-counter .mdc-text-field-character-counter::before{display:none}.mdc-text-field__resizer{align-self:stretch;display:inline-flex;flex-direction:column;flex-grow:1;max-height:100%;max-width:100%;min-height:56px;min-width:fit-content;min-width:-moz-available;min-width:-webkit-fill-available;overflow:hidden;resize:both}.mdc-text-field--filled .mdc-text-field__resizer{transform:translateY(-1px)}.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--filled .mdc-text-field__resizer .mdc-text-field-character-counter{transform:translateY(1px)}.mdc-text-field--outlined .mdc-text-field__resizer{transform:translateX(-1px) translateY(-1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer,.mdc-text-field--outlined .mdc-text-field__resizer[dir=rtl]{transform:translateX(1px) translateY(-1px)}.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter{transform:translateX(1px) translateY(1px)}[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input,[dir=rtl] .mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter,.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field__input[dir=rtl],.mdc-text-field--outlined .mdc-text-field__resizer .mdc-text-field-character-counter[dir=rtl]{transform:translateX(-1px) translateY(1px)}.mdc-text-field--with-leading-icon{padding-left:0;padding-right:16px}[dir=rtl] .mdc-text-field--with-leading-icon,.mdc-text-field--with-leading-icon[dir=rtl]{padding-left:16px;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 48px);left:48px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label[dir=rtl]{left:initial;right:48px}.mdc-text-field--with-leading-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label{left:36px;right:initial}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label[dir=rtl]{left:initial;right:36px}.mdc-text-field--with-leading-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{transform:translateY(-37.25px) translateX(-32px) scale(1)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-37.25px) translateX(32px) scale(1)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--float-above{font-size:.75rem}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{transform:translateY(-34.75px) translateX(-32px) scale(0.75)}[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,[dir=rtl] .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl],.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above[dir=rtl]{transform:translateY(-34.75px) translateX(32px) scale(0.75)}.mdc-text-field--with-leading-icon.mdc-text-field--outlined.mdc-notched-outline--upgraded .mdc-floating-label--float-above,.mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-notched-outline--upgraded .mdc-floating-label--float-above{font-size:1rem}.mdc-text-field--with-trailing-icon{padding-left:16px;padding-right:0}[dir=rtl] .mdc-text-field--with-trailing-icon,.mdc-text-field--with-trailing-icon[dir=rtl]{padding-left:0;padding-right:16px}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 64px)}.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 64px / 0.75)}.mdc-text-field--with-trailing-icon.mdc-text-field--outlined :not(.mdc-notched-outline--notched) .mdc-notched-outline__notch{max-width:calc(100% - 60px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon{padding-left:0;padding-right:0}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label{max-width:calc(100% - 96px)}.mdc-text-field--with-leading-icon.mdc-text-field--with-trailing-icon.mdc-text-field--filled .mdc-floating-label--float-above{max-width:calc(100% / 0.75 - 96px / 0.75)}.mdc-text-field-helper-line{display:flex;justify-content:space-between;box-sizing:border-box}.mdc-text-field+.mdc-text-field-helper-line{padding-right:16px;padding-left:16px}.mdc-form-field>.mdc-text-field+label{align-self:flex-start}.mdc-text-field--focused .mdc-notched-outline__leading,.mdc-text-field--focused .mdc-notched-outline__notch,.mdc-text-field--focused .mdc-notched-outline__trailing{border-width:2px}.mdc-text-field--focused+.mdc-text-field-helper-line .mdc-text-field-helper-text:not(.mdc-text-field-helper-text--validation-msg){opacity:1}.mdc-text-field--focused.mdc-text-field--outlined .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:2px}.mdc-text-field--focused.mdc-text-field--outlined.mdc-text-field--textarea .mdc-notched-outline--notched .mdc-notched-outline__notch{padding-top:0}.mdc-text-field--invalid+.mdc-text-field-helper-line .mdc-text-field-helper-text--validation-msg{opacity:1}.mdc-text-field--disabled{pointer-events:none}@media screen and (forced-colors: active){.mdc-text-field--disabled .mdc-text-field__input{background-color:Window}.mdc-text-field--disabled .mdc-floating-label{z-index:1}}.mdc-text-field--disabled .mdc-floating-label{cursor:default}.mdc-text-field--disabled.mdc-text-field--filled .mdc-text-field__ripple{display:none}.mdc-text-field--disabled .mdc-text-field__input{pointer-events:auto}.mdc-text-field--end-aligned .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--end-aligned .mdc-text-field__input[dir=rtl]{text-align:left}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix{direction:ltr}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{padding-left:0;padding-right:2px}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{padding-left:12px;padding-right:0}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--leading,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--leading{order:1}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--suffix{order:2}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__input,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__input{order:3}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__affix--prefix{order:4}[dir=rtl] .mdc-text-field--ltr-text .mdc-text-field__icon--trailing,.mdc-text-field--ltr-text[dir=rtl] .mdc-text-field__icon--trailing{order:5}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__input,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__input{text-align:right}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--prefix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--prefix{padding-right:12px}[dir=rtl] .mdc-text-field--ltr-text.mdc-text-field--end-aligned .mdc-text-field__affix--suffix,.mdc-text-field--ltr-text.mdc-text-field--end-aligned[dir=rtl] .mdc-text-field__affix--suffix{padding-left:2px}.mdc-floating-label{position:absolute;left:0;-webkit-transform-origin:left top;transform-origin:left top;line-height:1.15rem;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;overflow:hidden;will-change:transform}[dir=rtl] .mdc-floating-label,.mdc-floating-label[dir=rtl]{right:0;left:auto;-webkit-transform-origin:right top;transform-origin:right top;text-align:right}.mdc-floating-label--float-above{cursor:auto}.mdc-floating-label--required::after{margin-left:1px;margin-right:0px;content:\"*\"}[dir=rtl] .mdc-floating-label--required::after,.mdc-floating-label--required[dir=rtl]::after{margin-left:0;margin-right:1px}.mdc-floating-label--float-above{transform:translateY(-106%) scale(0.75)}.mdc-notched-outline{display:flex;position:absolute;top:0;right:0;left:0;box-sizing:border-box;width:100%;max-width:100%;height:100%;text-align:left;pointer-events:none}[dir=rtl] .mdc-notched-outline,.mdc-notched-outline[dir=rtl]{text-align:right}.mdc-notched-outline__leading,.mdc-notched-outline__notch,.mdc-notched-outline__trailing{box-sizing:border-box;height:100%;border-top:1px solid;border-bottom:1px solid;pointer-events:none}.mdc-notched-outline__leading{border-left:1px solid;border-right:none;width:12px}[dir=rtl] .mdc-notched-outline__leading,.mdc-notched-outline__leading[dir=rtl]{border-left:none;border-right:1px solid}.mdc-notched-outline__trailing{border-left:none;border-right:1px solid;flex-grow:1}[dir=rtl] .mdc-notched-outline__trailing,.mdc-notched-outline__trailing[dir=rtl]{border-left:1px solid;border-right:none}.mdc-notched-outline__notch{flex:0 0 auto;width:auto;max-width:calc(100% - 12px * 2)}.mdc-notched-outline .mdc-floating-label{display:inline-block;position:relative;max-width:100%}.mdc-notched-outline .mdc-floating-label--float-above{text-overflow:clip}.mdc-notched-outline--upgraded .mdc-floating-label--float-above{max-width:133.3333333333%}.mdc-notched-outline--notched .mdc-notched-outline__notch{padding-left:0;padding-right:8px;border-top:none}[dir=rtl] .mdc-notched-outline--notched .mdc-notched-outline__notch,.mdc-notched-outline--notched .mdc-notched-outline__notch[dir=rtl]{padding-left:8px;padding-right:0}.mdc-notched-outline--no-label .mdc-notched-outline__notch{display:none}.mdc-line-ripple::before,.mdc-line-ripple::after{position:absolute;bottom:0;left:0;width:100%;border-bottom-style:solid;content:\"\"}.mdc-line-ripple::before{border-bottom-width:1px}.mdc-line-ripple::before{z-index:1}.mdc-line-ripple::after{transform:scaleX(0);border-bottom-width:2px;opacity:0;z-index:2}.mdc-line-ripple--active::after{transform:scaleX(1);opacity:1}.mdc-line-ripple--deactivating::after{opacity:0}.mat-mdc-form-field-textarea-control{vertical-align:middle;resize:vertical;box-sizing:border-box;height:auto;margin:0;padding:0;border:none;overflow:auto}.mat-mdc-form-field-input-control.mat-mdc-form-field-input-control{font:inherit;border:none}.mat-mdc-form-field .mat-mdc-floating-label.mdc-floating-label{line-height:normal}.mdc-text-field--no-label:not(.mdc-text-field--textarea) .mat-mdc-form-field-input-control.mdc-text-field__input,.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control{height:auto}.mat-mdc-text-field-wrapper .mat-mdc-form-field-input-control.mdc-text-field__input[type=color]{height:23px}.mat-mdc-text-field-wrapper{height:auto;flex:auto}.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-left:0}.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-right:0}[dir=rtl] .mat-mdc-text-field-wrapper{padding-left:16px;padding-right:16px}[dir=rtl] .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper{padding-left:0}[dir=rtl] .mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper{padding-right:0}.mat-mdc-form-field-label-always-float .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms;opacity:1}.mat-mdc-text-field-wrapper .mat-mdc-form-field-infix .mat-mdc-floating-label{left:auto;right:auto}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mdc-text-field__input{display:inline-block}.mat-mdc-form-field .mat-mdc-text-field-wrapper.mdc-text-field .mdc-notched-outline__notch{padding-top:0}.mat-mdc-text-field-wrapper::before{content:none}.mat-mdc-form-field-subscript-wrapper{box-sizing:border-box;width:100%;position:relative}.mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-error-wrapper{position:absolute;top:0;left:0;right:0;padding:0 16px}.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-hint-wrapper,.mat-mdc-form-field-subscript-dynamic-size .mat-mdc-form-field-error-wrapper{position:static}.mat-mdc-form-field-bottom-align::before{content:\"\";display:inline-block;height:16px}.mat-mdc-form-field-bottom-align.mat-mdc-form-field-subscript-dynamic-size::before{content:unset}.mat-mdc-form-field-hint-end{order:1}.mat-mdc-form-field-hint-wrapper{display:flex}.mat-mdc-form-field-hint-spacer{flex:1 0 1em}.mat-mdc-form-field-error{display:block}.mat-mdc-form-field-focus-overlay{top:0;left:0;right:0;bottom:0;position:absolute;opacity:0}select.mat-mdc-form-field-input-control{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(0,0,0,0);display:inline-flex;box-sizing:border-box}select.mat-mdc-form-field-input-control:not(:disabled){cursor:pointer}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{content:\"\";width:0;height:0;border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;position:absolute;right:0;pointer-events:none}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-infix::after{right:auto;left:0}.mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:15px}[dir=rtl] .mat-mdc-form-field-type-mat-native-select .mat-mdc-form-field-input-control{padding-right:0;padding-left:15px}.cdk-high-contrast-active .mat-form-field-appearance-fill .mat-mdc-text-field-wrapper{outline:solid 1px}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-form-field-disabled .mat-mdc-text-field-wrapper{outline-color:GrayText}.cdk-high-contrast-active .mat-form-field-appearance-fill.mat-focused .mat-mdc-text-field-wrapper{outline:dashed 3px}.cdk-high-contrast-active .mat-mdc-form-field.mat-focused .mdc-notched-outline{border:dashed 3px}.mat-mdc-form-field{--mat-mdc-form-field-floating-label-scale: 0.75;display:inline-flex;flex-direction:column;min-width:0;text-align:left}[dir=rtl] .mat-mdc-form-field{text-align:right}.mat-mdc-form-field-flex{display:inline-flex;align-items:baseline;box-sizing:border-box;width:100%}.mat-mdc-text-field-wrapper{width:100%}.mat-mdc-form-field-icon-prefix,.mat-mdc-form-field-icon-suffix{align-self:center;line-height:0}.mat-mdc-form-field-icon-prefix,[dir=rtl] .mat-mdc-form-field-icon-suffix{padding:0 4px 0 0}.mat-mdc-form-field-icon-suffix,[dir=rtl] .mat-mdc-form-field-icon-prefix{padding:0 0 0 4px}.mat-mdc-form-field-icon-prefix>.mat-icon,.mat-mdc-form-field-icon-suffix>.mat-icon{padding:12px;box-sizing:content-box}.mat-mdc-form-field-subscript-wrapper .mat-icon,.mat-mdc-form-field label .mat-icon{width:1em;height:1em;font-size:inherit}.mat-mdc-form-field-infix{flex:auto;min-width:0;width:180px;position:relative;box-sizing:border-box}.mat-mdc-form-field .mdc-notched-outline__notch{margin-left:-1px;-webkit-clip-path:inset(-9em -999em -9em 1px);clip-path:inset(-9em -999em -9em 1px)}[dir=rtl] .mat-mdc-form-field .mdc-notched-outline__notch{margin-left:0;margin-right:-1px;-webkit-clip-path:inset(-9em 1px -9em -999em);clip-path:inset(-9em 1px -9em -999em)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input{transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}@media all{.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}}@media all{.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder{transition:opacity 67ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}}@media all{.mdc-text-field--no-label .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder,.mdc-text-field--focused .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input::placeholder{transition-delay:40ms;transition-duration:110ms}}@media all{.mdc-text-field--no-label .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder,.mdc-text-field--focused .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__input:-ms-input-placeholder{transition-delay:40ms;transition-duration:110ms}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field__affix{transition:opacity 150ms 0ms cubic-bezier(0.4, 0, 0.2, 1)}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--filled.mdc-ripple-upgraded--background-focused .mdc-text-field__ripple::before,.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--filled:not(.mdc-ripple-upgraded):focus .mdc-text-field__ripple::before{transition-duration:75ms}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined{0%{transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-34.75px) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea{transition:none}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea.mdc-text-field--filled .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-textarea-filled 250ms 1}@keyframes mdc-floating-label-shake-float-above-textarea-filled{0%{transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-10.25px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-10.25px) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-10.25px) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--textarea.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-textarea-outlined 250ms 1}@keyframes mdc-floating-label-shake-float-above-textarea-outlined{0%{transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-24.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-24.75px) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-24.75px) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon{0%{transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 32px)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 32px)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - 32px)) translateY(-34.75px) scale(0.75)}}[dir=rtl] .mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined .mdc-floating-label--shake,.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-text-field--with-leading-icon.mdc-text-field--outlined[dir=rtl] .mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-text-field-outlined-leading-icon 250ms 1}@keyframes mdc-floating-label-shake-float-above-text-field-outlined-leading-icon-rtl{0%{transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - -32px)) translateY(-34.75px) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - -32px)) translateY(-34.75px) scale(0.75)}100%{transform:translateX(calc(0 - -32px)) translateY(-34.75px) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-floating-label{transition:transform 150ms cubic-bezier(0.4, 0, 0.2, 1),color 150ms cubic-bezier(0.4, 0, 0.2, 1)}.mdc-floating-label--shake{animation:mdc-floating-label-shake-float-above-standard 250ms 1}@keyframes mdc-floating-label-shake-float-above-standard{0%{transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}33%{animation-timing-function:cubic-bezier(0.5, 0, 0.701732, 0.495819);transform:translateX(calc(4% - 0%)) translateY(-106%) scale(0.75)}66%{animation-timing-function:cubic-bezier(0.302435, 0.381352, 0.55, 0.956352);transform:translateX(calc(-4% - 0%)) translateY(-106%) scale(0.75)}100%{transform:translateX(calc(0 - 0%)) translateY(-106%) scale(0.75)}}.mat-mdc-form-field:not(.mat-form-field-no-animations) .mdc-line-ripple::after{transition:transform 180ms cubic-bezier(0.4, 0, 0.2, 1),opacity 180ms cubic-bezier(0.4, 0, 0.2, 1)}"] }]
543
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.Directionality }, { type: i2.Platform }, { type: undefined, decorators: [{
544
- type: Optional
545
- }, {
546
- type: Inject,
547
- args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]
548
- }] }, { type: undefined, decorators: [{
549
- type: Optional
550
- }, {
551
- type: Inject,
552
- args: [ANIMATION_MODULE_TYPE]
553
- }] }, { type: undefined, decorators: [{
554
- type: Inject,
555
- args: [DOCUMENT]
556
- }] }]; }, propDecorators: { _textField: [{
557
- type: ViewChild,
558
- args: ['textField']
559
- }], _iconPrefixContainer: [{
560
- type: ViewChild,
561
- args: ['iconPrefixContainer']
562
- }], _textPrefixContainer: [{
563
- type: ViewChild,
564
- args: ['textPrefixContainer']
565
- }], _floatingLabel: [{
566
- type: ViewChild,
567
- args: [MatFormFieldFloatingLabel]
568
- }], _notchedOutline: [{
569
- type: ViewChild,
570
- args: [MatFormFieldNotchedOutline]
571
- }], _lineRipple: [{
572
- type: ViewChild,
573
- args: [MatFormFieldLineRipple]
574
- }], _labelChildNonStatic: [{
575
- type: ContentChild,
576
- args: [MatLabel]
577
- }], _labelChildStatic: [{
578
- type: ContentChild,
579
- args: [MatLabel, { static: true }]
580
- }], _formFieldControl: [{
581
- type: ContentChild,
582
- args: [MatFormFieldControl]
583
- }], _prefixChildren: [{
584
- type: ContentChildren,
585
- args: [MAT_PREFIX, { descendants: true }]
586
- }], _suffixChildren: [{
587
- type: ContentChildren,
588
- args: [MAT_SUFFIX, { descendants: true }]
589
- }], _errorChildren: [{
590
- type: ContentChildren,
591
- args: [MAT_ERROR, { descendants: true }]
592
- }], _hintChildren: [{
593
- type: ContentChildren,
594
- args: [MatHint, { descendants: true }]
595
- }], hideRequiredMarker: [{
596
- type: Input
597
- }], color: [{
598
- type: Input
599
- }], floatLabel: [{
600
- type: Input
601
- }], appearance: [{
602
- type: Input
603
- }], subscriptSizing: [{
604
- type: Input
605
- }], hintLabel: [{
606
- type: Input
607
- }] } });
608
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC1leHBlcmltZW50YWwvbWRjLWZvcm0tZmllbGQvZm9ybS1maWVsZC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tYXRlcmlhbC1leHBlcmltZW50YWwvbWRjLWZvcm0tZmllbGQvZm9ybS1maWVsZC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUlMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLE1BQU0sRUFFTixRQUFRLEVBQ1IsU0FBUyxFQUNULFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQyxrQ0FBa0MsRUFDbEMsY0FBYyxFQUNkLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDcEIsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFDLFNBQVMsRUFBVyxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUMxQyxPQUFPLEVBQUMs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QUFNOzJCQUFDLFFBQVE7NENBeklNLFVBQVU7c0JBQWpDLFNBQVM7dUJBQUMsV0FBVztnQkFDWSxvQkFBb0I7c0JBQXJELFNBQVM7dUJBQUMscUJBQXFCO2dCQUNFLG9CQUFvQjtzQkFBckQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBQ00sY0FBYztzQkFBbkQsU0FBUzt1QkFBQyx5QkFBeUI7Z0JBQ0csZUFBZTtzQkFBckQsU0FBUzt1QkFBQywwQkFBMEI7Z0JBQ0YsV0FBVztzQkFBN0MsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBRVQsb0JBQW9CO3NCQUEzQyxZQUFZO3VCQUFDLFFBQVE7Z0JBQ2tCLGlCQUFpQjtzQkFBeEQsWUFBWTt1QkFBQyxRQUFRLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDO2dCQUNILGlCQUFpQjtzQkFBbkQsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBQ2lCLGVBQWU7c0JBQWhFLGVBQWU7dUJBQUMsVUFBVSxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztnQkFDRSxlQUFlO3NCQUFoRSxlQUFlO3VCQUFDLFVBQVUsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7Z0JBQ0MsY0FBYztzQkFBOUQsZUFBZTt1QkFBQyxTQUFTLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDO2dCQUNBLGFBQWE7c0JBQTNELGVBQWU7dUJBQUMsT0FBTyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztnQkFJekMsa0JBQWtCO3NCQURyQixLQUFLO2dCQVVHLEtBQUs7c0JBQWIsS0FBSztnQkFJRixVQUFVO3NCQURiLEtBQUs7Z0JBa0JGLFVBQVU7c0JBRGIsS0FBSztnQkFnQ0YsZUFBZTtzQkFEbEIsS0FBSztnQkFXRixTQUFTO3NCQURaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7RGlyZWN0aW9uYWxpdHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICBBZnRlckNvbnRlbnRJbml0LFxuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbERpcmVjdGl2ZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtUaGVtZVBhbGV0dGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLWV4cGVyaW1lbnRhbC9tZGMtY29yZSc7XG5pbXBvcnQge1xuICBnZXRNYXRGb3JtRmllbGREdXBsaWNhdGVkSGludEVycm9yLFxuICBnZXRNYXRGb3JtRmllbGRNaXNzaW5nQ29udHJvbEVycm9yLFxuICBNQVRfRk9STV9GSUVMRCxcbiAgbWF0Rm9ybUZpZWxkQW5pbWF0aW9ucyxcbiAgTWF0Rm9ybUZpZWxkQ29udHJvbCxcbn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQge0FOSU1BVElPTl9NT0RVTEVfVFlQRX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcbmltcG9ydCB7bWVyZ2UsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHt0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7TUFUX0VSUk9SLCBNYXRFcnJvcn0gZnJvbSAnLi9kaXJlY3RpdmVzL2Vycm9yJztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkRmxvYXRpbmdMYWJlbH0gZnJvbSAnLi9kaXJlY3RpdmVzL2Zsb2F0aW5nLWxhYmVsJztcbmltcG9ydCB7TWF0SGludH0gZnJvbSAnLi9kaXJlY3RpdmVzL2hpbnQnO1xuaW1wb3J0IHtNYXRMYWJlbH0gZnJvbSAnLi9kaXJlY3RpdmVzL2xhYmVsJztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkTGluZVJpcHBsZX0gZnJvbSAnLi9kaXJlY3RpdmVzL2xpbmUtcmlwcGxlJztcbmltcG9ydCB7TWF0Rm9ybUZpZWxkTm90Y2hlZE91dGxpbmV9IGZyb20gJy4vZGlyZWN0aXZlcy9ub3RjaGVkLW91dGxpbmUnO1xuaW1wb3J0IHtNQVRfUFJFRklYLCBNYXRQcmVmaXh9IGZyb20gJy4vZGlyZWN0aXZlcy9wcmVmaXgnO1xuaW1wb3J0IHtNQVRfU1VGRklYLCBNYXRTdWZmaXh9IGZyb20gJy4vZGlyZWN0aXZlcy9zdWZmaXgnO1xuaW1wb3J0IHtET0NVTUVOVH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Qm9vbGVhbklucHV0LCBjb2VyY2VCb29sZWFuUHJvcGVydHl9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbi8qKiBUeXBlIGZvciB0aGUgYXZhaWxhYmxlIGZsb2F0TGFiZWwgdmFsdWVzLiAqL1xuZXhwb3J0IHR5cGUgRmxvYXRMYWJlbFR5cGUgPSAnYWx3YXlzJyB8ICdhdXRvJztcblxuLyoqIFBvc3NpYmxlIGFwcGVhcmFuY2Ugc3R5bGVzIGZvciB0aGUgZm9ybSBmaWVsZC4gKi9cbmV4cG9ydCB0eXBlIE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnZmlsbCcgfCAnb3V0bGluZSc7XG5cbi8qKiBCZWhhdmlvcnMgZm9yIGhvdyB0aGUgc3Vic2NyaXB0IGhlaWdodCBpcyBzZXQuICovXG5leHBvcnQgdHlwZSBTdWJzY3JpcHRTaXppbmcgPSAnZml4ZWQnIHwgJ2R5bmFtaWMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgdGhlIGZvcm0gZmllbGQgdGhhdCBjYW4gYmUgY29uZmlndXJlZFxuICogdXNpbmcgdGhlIGBNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlNgIGluamVjdGlvbiB0b2tlbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucyB7XG4gIC8qKiBEZWZhdWx0IGZvcm0gZmllbGQgYXBwZWFyYW5jZSBzdHlsZS4gKi9cbiAgYXBwZWFyYW5jZT86IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIC8qKiBEZWZhdWx0IGNvbG9yIG9mIHRoZSBmb3JtIGZpZWxkLiAqL1xuICBjb2xvcj86IFRoZW1lUGFsZXR0ZTtcbiAgLyoqIFdoZXRoZXIgdGhlIHJlcXVpcmVkIG1hcmtlciBzaG91bGQgYmUgaGlkZGVuIGJ5IGRlZmF1bHQuICovXG4gIGhpZGVSZXF1aXJlZE1hcmtlcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBsYWJlbCBmb3IgZm9ybSBmaWVsZHMgc2hvdWxkIGJ5IGRlZmF1bHQgZmxvYXQgYGFsd2F5c2AsXG4gICAqIGBuZXZlcmAsIG9yIGBhdXRvYCAob25seSB3aGVuIG5lY2Vzc2FyeSkuXG4gICAqL1xuICBmbG9hdExhYmVsPzogRmxvYXRMYWJlbFR5cGU7XG4gIC8qKiBXaGV0aGVyIHRoZSBmb3JtIGZpZWxkIHNob3VsZCByZXNlcnZlIHNwYWNlIGZvciBvbmUgbGluZSBieSBkZWZhdWx0LiAqL1xuICBzdWJzY3JpcHRTaXppbmc/OiBTdWJzY3JpcHRTaXppbmc7XG59XG5cbi8qKlxuICogSW5qZWN0aW9uIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHRoZVxuICogZGVmYXVsdCBvcHRpb25zIGZvciBhbGwgZm9ybSBmaWVsZCB3aXRoaW4gYW4gYXBwLlxuICovXG5leHBvcnQgY29uc3QgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TID0gbmV3IEluamVjdGlvblRva2VuPE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zPihcbiAgJ01BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUycsXG4pO1xuXG5sZXQgbmV4dFVuaXF1ZUlkID0gMDtcblxuLyoqIERlZmF1bHQgYXBwZWFyYW5jZSB1c2VkIGJ5IHRoZSBmb3JtIGZpZWxkLiAqL1xuY29uc3QgREVGQVVMVF9BUFBFQVJBTkNFOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ2ZpbGwnO1xuXG4vKipcbiAqIFdoZXRoZXIgdGhlIGxhYmVsIGZvciBmb3JtIGZpZWxkcyBzaG91bGQgYnkgZGVmYXVsdCBmbG9hdCBgYWx3YXlzYCxcbiAqIGBuZXZlcmAsIG9yIGBhdXRvYC5cbiAqL1xuY29uc3QgREVGQVVMVF9GTE9BVF9MQUJFTDogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG5cbi8qKiBEZWZhdWx0IHdheSB0aGF0IHRoZSBzdWJzY3JpcHQgZWxlbWVudCBoZWlnaHQgaXMgc2V0LiAqL1xuY29uc3QgREVGQVVMVF9TVUJTQ1JJUFRfU0laSU5HOiBTdWJzY3JpcHRTaXppbmcgPSAnZml4ZWQnO1xuXG4vKipcbiAqIERlZmF1bHQgdHJhbnNmb3JtIGZvciBkb2NrZWQgZmxvYXRpbmcgbGFiZWxzIGluIGEgTURDIHRleHQtZmllbGQuIFRoaXMgdmFsdWUgaGFzIGJlZW5cbiAqIGV4dHJhY3RlZCBmcm9tIHRoZSBNREMgdGV4dC1maWVsZCBzdHlsZXMgYmVjYXVzZSB3ZSBwcm9ncmFtbWF0aWNhbGx5IG1vZGlmeSB0aGUgZG9ja2VkXG4gKiBsYWJlbCB0cmFuc2Zvcm0sIGJ1dCBkbyBub3Qgd2FudCB0byBhY2NpZGVudGFsbHkgZGlzY2FyZCB0aGUgZGVmYXVsdCBsYWJlbCB0cmFuc2Zvcm0uXG4gKi9cbmNvbnN0IEZMT0FUSU5HX0xBQkVMX0RFRkFVTFRfRE9DS0VEX1RSQU5TRk9STSA9IGB0cmFuc2xhdGVZKC01MCUpYDtcblxuLyoqXG4gKiBIb3Jpem9udGFsIHBhZGRpbmcgaW4gcGl4ZWxzIHVzZWQgYnkgdGhlIE1EQyBmb3IgdGhlIHdyYXBwZXIgY29udGFpbmluZyBpbmZpeC5cbiAqIFRoaXMgdmFsdWUgaXMgZXh0cmFjdGVkIGZyb20gTURDJ3MgU2FzcyB2YXJpYWJsZXMuIFNlZSBgJHBhZGRpbmctaG9yaXpvbnRhbGAuXG4gKi9cbmNvbnN0IFdSQVBQRVJfSE9SSVpPTlRBTF9QQURESU5HID0gMTY7XG5cbi8qKiBDb250YWluZXIgZm9yIGZvcm0gY29udHJvbHMgdGhhdCBhcHBsaWVzIE1hdGVyaWFsIERlc2lnbiBzdHlsaW5nIGFuZCBiZWhhdmlvci4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1mb3JtLWZpZWxkJyxcbiAgZXhwb3J0QXM6ICdtYXRGb3JtRmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1maWVsZC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZm9ybS1maWVsZC5jc3MnXSxcbiAgYW5pbWF0aW9uczogW21hdEZvcm1GaWVsZEFuaW1hdGlvbnMudHJhbnNpdGlvbk1lc3NhZ2VzXSxcbiAgaG9zdDoge1xuICAgICdjbGFzcyc6ICdtYXQtbWRjLWZvcm0tZmllbGQnLFxuICAgICdbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLWxhYmVsLWFsd2F5cy1mbG9hdF0nOiAnX3Nob3VsZEFsd2F5c0Zsb2F0KCknLFxuICAgICdbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXByZWZpeF0nOiAnX2hhc0ljb25QcmVmaXgnLFxuICAgICdbY2xhc3MubWF0LW1kYy1mb3JtLWZpZWxkLWhhcy1pY29uLXN1ZmZpeF0nOiAnX2hhc0ljb25TdWZmaXgnLFxuXG4gICAgLy8gTm90ZSB0aGF0IHRoZXNlIGNsYXNzZXMgcmV1c2UgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG5vbi1NREMgdmVyc2lvbiwgYmVjYXVzZSB0aGV5IGNhbiBiZVxuICAgIC8vIGNvbnNpZGVyZWQgYSBwdWJsaWMgQVBJIHNpbmNlIGN1c3RvbSBmb3JtIGNvbnRyb2xzIG1heSB1c2UgdGhlbSB0byBzdHlsZSB0aGVtc2VsdmVzLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL3B1bGwvMjA1MDIjZGlzY3Vzc2lvbl9yNDg2MTI0OTAxLlxuICAgICdbY2xhc3MubWF0LWZvcm0tZmllbGQtaW52YWxpZF0nOiAnX2NvbnRyb2wuZXJyb3JTdGF0ZScsXG4gICAgJ1tjbGFzcy5tYXQtZm9ybS1maWVsZC1kaXNhYmxlZF0nOiAnX2NvbnRyb2wuZGlzYWJsZWQnLFxuICAgICdbY2xhc3MubWF0LWZvcm0tZmllbGQtYXV0b2ZpbGxlZF0nOiAnX2NvbnRyb2wuYXV0b2ZpbGxlZCcsXG4gICAgJ1tjbGFzcy5tYXQtZm9ybS1maWVsZC1uby1hbmltYXRpb25zXSc6ICdfYW5pbWF0aW9uTW9kZSA9PT0gXCJOb29wQW5pbWF0aW9uc1wiJyxcbiAgICAnW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWFwcGVhcmFuY2UtZmlsbF0nOiAnYXBwZWFyYW5jZSA9PSBcImZpbGxcIicsXG4gICAgJ1tjbGFzcy5tYXQtZm9ybS1maWVsZC1hcHBlYXJhbmNlLW91dGxpbmVdJzogJ2FwcGVhcmFuY2UgPT0gXCJvdXRsaW5lXCInLFxuICAgICdbY2xhc3MubWF0LWZvcm0tZmllbGQtaGlkZS1wbGFjZWhvbGRlcl0nOiAnX2hhc0Zsb2F0aW5nTGFiZWwoKSAmJiAhX3Nob3VsZExhYmVsRmxvYXQoKScsXG4gICAgJ1tjbGFzcy5tYXQtZm9jdXNlZF0nOiAnX2NvbnRyb2wuZm9jdXNlZCcsXG4gICAgJ1tjbGFzcy5tYXQtcHJpbWFyeV0nOiAnY29sb3IgIT09IFwiYWNjZW50XCIgJiYgY29sb3IgIT09IFwid2FyblwiJyxcbiAgICAnW2NsYXNzLm1hdC1hY2NlbnRdJzogJ2NvbG9yID09PSBcImFjY2VudFwiJyxcbiAgICAnW2NsYXNzLm1hdC13YXJuXSc6ICdjb2xvciA9PT0gXCJ3YXJuXCInLFxuICAgICdbY2xhc3MubmctdW50b3VjaGVkXSc6ICdfc2hvdWxkRm9yd2FyZChcInVudG91Y2hlZFwiKScsXG4gICAgJ1tjbGFzcy5uZy10b3VjaGVkXSc6ICdfc2hvdWxkRm9yd2FyZChcInRvdWNoZWRcIiknLFxuICAgICdbY2xhc3MubmctcHJpc3RpbmVdJzogJ19zaG91bGRGb3J3YXJkKFwicHJpc3RpbmVcIiknLFxuICAgICdbY2xhc3MubmctZGlydHldJzogJ19zaG91bGRGb3J3YXJkKFwiZGlydHlcIiknLFxuICAgICdbY2xhc3MubmctdmFsaWRdJzogJ19zaG91bGRGb3J3YXJkKFwidmFsaWRcIiknLFxuICAgICdbY2xhc3MubmctaW52YWxpZF0nOiAnX3Nob3VsZEZvcndhcmQoXCJpbnZhbGlkXCIpJyxcbiAgICAnW2NsYXNzLm5nLXBlbmRpbmddJzogJ19zaG91bGRGb3J3YXJkKFwicGVuZGluZ1wiKScsXG4gIH0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFt7cHJvdmlkZTogTUFUX0ZPUk1fRklFTEQsIHVzZUV4aXN0aW5nOiBNYXRGb3JtRmllbGR9XSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0Rm9ybUZpZWxkXG4gIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95XG57XG4gIEBWaWV3Q2hpbGQoJ3RleHRGaWVsZCcpIF90ZXh0RmllbGQ6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCdpY29uUHJlZml4Q29udGFpbmVyJykgX2ljb25QcmVmaXhDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKCd0ZXh0UHJlZml4Q29udGFpbmVyJykgX3RleHRQcmVmaXhDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBAVmlld0NoaWxkKE1hdEZvcm1GaWVsZEZsb2F0aW5nTGFiZWwpIF9mbG9hdGluZ0xhYmVsOiBNYXRGb3JtRmllbGRGbG9hdGluZ0xhYmVsIHwgdW5kZWZpbmVkO1xuICBAVmlld0NoaWxkKE1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lKSBfbm90Y2hlZE91dGxpbmU6IE1hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lIHwgdW5kZWZpbmVkO1xuICBAVmlld0NoaWxkKE1hdEZvcm1GaWVsZExpbmVSaXBwbGUpIF9saW5lUmlwcGxlOiBNYXRGb3JtRmllbGRMaW5lUmlwcGxlIHwgdW5kZWZpbmVkO1xuXG4gIEBDb250ZW50Q2hpbGQoTWF0TGFiZWwpIF9sYWJlbENoaWxkTm9uU3RhdGljOiBNYXRMYWJlbCB8IHVuZGVmaW5lZDtcbiAgQENvbnRlbnRDaGlsZChNYXRMYWJlbCwge3N0YXRpYzogdHJ1ZX0pIF9sYWJlbENoaWxkU3RhdGljOiBNYXRMYWJlbCB8IHVuZGVmaW5lZDtcbiAgQENvbnRlbnRDaGlsZChNYXRGb3JtRmllbGRDb250cm9sKSBfZm9ybUZpZWxkQ29udHJvbDogTWF0Rm9ybUZpZWxkQ29udHJvbDxhbnk+O1xuICBAQ29udGVudENoaWxkcmVuKE1BVF9QUkVGSVgsIHtkZXNjZW5kYW50czogdHJ1ZX0pIF9wcmVmaXhDaGlsZHJlbjogUXVlcnlMaXN0PE1hdFByZWZpeD47XG4gIEBDb250ZW50Q2hpbGRyZW4oTUFUX1NVRkZJWCwge2Rlc2NlbmRhbnRzOiB0cnVlfSkgX3N1ZmZpeENoaWxkcmVuOiBRdWVyeUxpc3Q8TWF0U3VmZml4PjtcbiAgQENvbnRlbnRDaGlsZHJlbihNQVRfRVJST1IsIHtkZXNjZW5kYW50czogdHJ1ZX0pIF9lcnJvckNoaWxkcmVuOiBRdWVyeUxpc3Q8TWF0RXJyb3I+O1xuICBAQ29udGVudENoaWxkcmVuKE1hdEhpbnQsIHtkZXNjZW5kYW50czogdHJ1ZX0pIF9oaW50Q2hpbGRyZW46IFF1ZXJ5TGlzdDxNYXRIaW50PjtcblxuICAvKiogV2hldGhlciB0aGUgcmVxdWlyZWQgbWFya2VyIHNob3VsZCBiZSBoaWRkZW4uICovXG4gIEBJbnB1dCgpXG4gIGdldCBoaWRlUmVxdWlyZWRNYXJrZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlcjtcbiAgfVxuICBzZXQgaGlkZVJlcXVpcmVkTWFya2VyKHZhbHVlOiBCb29sZWFuSW5wdXQpIHtcbiAgICB0aGlzLl9oaWRlUmVxdWlyZWRNYXJrZXIgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuICB9XG4gIHByaXZhdGUgX2hpZGVSZXF1aXJlZE1hcmtlciA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgY29sb3IgcGFsZXR0ZSBmb3IgdGhlIGZvcm0gZmllbGQuICovXG4gIEBJbnB1dCgpIGNvbG9yOiBUaGVtZVBhbGV0dGUgPSAncHJpbWFyeSc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGxhYmVsIHNob3VsZCBhbHdheXMgZmxvYXQgb3IgZmxvYXQgYXMgdGhlIHVzZXIgdHlwZXMuICovXG4gIEBJbnB1dCgpXG4gIGdldCBmbG9hdExhYmVsKCk6IEZsb2F0TGFiZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fZmxvYXRMYWJlbCB8fCB0aGlzLl9kZWZhdWx0cz8uZmxvYXRMYWJlbCB8fCBERUZBVUxUX0ZMT0FUX0xBQkVMO1xuICB9XG4gIHNldCBmbG9hdExhYmVsKHZhbHVlOiBGbG9hdExhYmVsVHlwZSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fZmxvYXRMYWJlbCkge1xuICAgICAgdGhpcy5fZmxvYXRMYWJlbCA9IHZhbHVlO1xuICAgICAgLy8gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBDdXN0b20gZm9ybSBmaWVsZCBjb250cm9scyBvciBkaXJlY3RpdmVzIG1pZ2h0IHNldFxuICAgICAgLy8gdGhlIFwiZmxvYXRMYWJlbFwiIGlucHV0IGFuZCBleHBlY3QgdGhlIGZvcm0gZmllbGQgdmlldyB0byBiZSB1cGRhdGVkIGF1dG9tYXRpY2FsbHkuXG4gICAgICAvLyBlLmcuIGF1dG9jb21wbGV0ZSB0cmlnZ2VyLiBJZGVhbGx5IHdlJ2QgZ2V0IHJpZCBvZiB0aGlzIGFuZCB0aGUgY29uc3VtZXJzIHdvdWxkIGp1c3RcbiAgICAgIC8vIGVtaXQgdGhlIFwic3RhdGVDaGFuZ2VzXCIgb2JzZXJ2YWJsZS4gVE9ETyhkZXZ2ZXJzaW9uKTogY29uc2lkZXIgcmVtb3ZpbmcuXG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGU7XG5cbiAgLyoqIFRoZSBmb3JtIGZpZWxkIGFwcGVhcmFuY2Ugc3R5bGUuICovXG4gIEBJbnB1dCgpXG4gIGdldCBhcHBlYXJhbmNlKCk6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2Uge1xuICAgIHJldHVybiB0aGlzLl9hcHBlYXJhbmNlO1xuICB9XG4gIHNldCBhcHBlYXJhbmNlKHZhbHVlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlKSB7XG4gICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl9hcHBlYXJhbmNlO1xuICAgIGNvbnN0IG5ld0FwcGVhcmFuY2UgPSB2YWx1ZSB8fCB0aGlzLl9kZWZhdWx0cz8uYXBwZWFyYW5jZSB8fCBERUZBVUxUX0FQUEVBUkFOQ0U7XG4gICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkge1xuICAgICAgaWYgKG5ld0FwcGVhcmFuY2UgIT09ICdmaWxsJyAmJiBuZXdBcHBlYXJhbmNlICE9PSAnb3V0bGluZScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBNYXRGb3JtRmllbGQ6IEludmFsaWQgYXBwZWFyYW5jZSBcIiR7bmV3QXBwZWFyYW5jZX1cIiwgdmFsaWQgdmFsdWVzIGFyZSBcImZpbGxcIiBvciBcIm91dGxpbmVcIi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9hcHBlYXJhbmNlID0gbmV3QXBwZWFyYW5jZTtcbiAgICBpZiAodGhpcy5fYXBwZWFyYW5jZSA9PT0gJ291dGxpbmUnICYmIHRoaXMuX2FwcGVhcmFuY2UgIT09IG9sZFZhbHVlKSB7XG4gICAgICB0aGlzLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKTtcblxuICAgICAgLy8gSWYgdGhlIGFwcGVhcmFuY2UgaGFzIGJlZW4gc3dpdGNoZWQgdG8gYG91dGxpbmVgLCB0aGUgbGFiZWwgb2Zmc2V0IG5lZWRzIHRvIGJlIHVwZGF0ZWQuXG4gICAgICAvLyBUaGUgdXBkYXRlIGNhbiBoYXBwZW4gb25jZSB0aGUgdmlldyBoYXMgYmVlbiByZS1jaGVja2VkLCBidXQgbm90IGltbWVkaWF0ZWx5IGJlY2F1c2VcbiAgICAgIC8vIHRoZSB2aWV3IGhhcyBub3QgYmVlbiB1cGRhdGVkIGFuZCB0aGUgbm90Y2hlZC1vdXRsaW5lIGZsb2F0aW5nIGxhYmVsIGlzIG5vdCBwcmVzZW50LlxuICAgICAgdGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZSA9IHRydWU7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2FwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSBERUZBVUxUX0FQUEVBUkFOQ0U7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGZvcm0gZmllbGQgc2hvdWxkIHJlc2VydmUgc3BhY2UgZm9yIG9uZSBsaW5lIG9mIGhpbnQvZXJyb3IgdGV4dCAoZGVmYXVsdClcbiAgICogb3IgdG8gaGF2ZSB0aGUgc3BhY2luZyBncm93IGZyb20gMHB4IGFzIG5lZWRlZCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgaGludC9lcnJvciBjb250ZW50LlxuICAgKiBOb3RlIHRoYXQgd2hlbiB1c2luZyBkeW5hbWljIHNpemluZywgbGF5b3V0IHNoaWZ0cyB3aWxsIG9jY3VyIHdoZW4gaGludC9lcnJvciB0ZXh0IGNoYW5nZXMuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgc3Vic2NyaXB0U2l6aW5nKCk6IFN1YnNjcmlwdFNpemluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YnNjcmlwdFNpemluZyB8fCB0aGlzLl9kZWZhdWx0cz8uc3Vic2NyaXB0U2l6aW5nIHx8IERFRkFVTFRfU1VCU0NSSVBUX1NJWklORztcbiAgfVxuICBzZXQgc3Vic2NyaXB0U2l6aW5nKHZhbHVlOiBTdWJzY3JpcHRTaXppbmcpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRTaXppbmcgPSB2YWx1ZSB8fCB0aGlzLl9kZWZhdWx0cz8uc3Vic2NyaXB0U2l6aW5nIHx8IERFRkFVTFRfU1VCU0NSSVBUX1NJWklORztcbiAgfVxuICBwcml2YXRlIF9zdWJzY3JpcHRTaXppbmc6IFN1YnNjcmlwdFNpemluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBUZXh0IGZvciB0aGUgZm9ybSBmaWVsZCBoaW50LiAqL1xuICBASW5wdXQoKVxuICBnZXQgaGludExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2hpbnRMYWJlbDtcbiAgfVxuICBzZXQgaGludExhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9oaW50TGFiZWwgPSB2YWx1ZTtcbiAgICB0aGlzLl9wcm9jZXNzSGludHMoKTtcbiAgfVxuICBwcml2YXRlIF9oaW50TGFiZWwgPSAnJztcblxuICBfaGFzSWNvblByZWZpeCA9IGZhbHNlO1xuICBfaGFzVGV4dFByZWZpeCA9IGZhbHNlO1xuICBfaGFzSWNvblN1ZmZpeCA9IGZhbHNlO1xuICBfaGFzVGV4dFN1ZmZpeCA9IGZhbHNlO1xuXG4gIC8vIFVuaXF1ZSBpZCBmb3IgdGhlIGludGVybmFsIGZvcm0gZmllbGQgbGFiZWwuXG4gIHJlYWRvbmx5IF9sYWJlbElkID0gYG1hdC1tZGMtZm9ybS1maWVsZC1sYWJlbC0ke25leHRVbmlxdWVJZCsrfWA7XG5cbiAgLy8gVW5pcXVlIGlkIGZvciB0aGUgaGludCBsYWJlbC5cbiAgcmVhZG9ubHkgX2hpbnRMYWJlbElkID0gYG1hdC1tZGMtaGludC0ke25leHRVbmlxdWVJZCsrfWA7XG5cbiAgLyoqIFN0YXRlIG9mIHRoZSBtYXQtaGludCBhbmQgbWF0LWVycm9yIGFuaW1hdGlvbnMuICovXG4gIF9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSA9ICcnO1xuXG4gIC8qKiBXaWR0aCBvZiB0aGUgbGFiZWwgZWxlbWVudCAoYXQgc2NhbGU9MSkuICovXG4gIF9sYWJlbFdpZHRoID0gMDtcblxuICAvKiogR2V0cyB0aGUgY3VycmVudCBmb3JtIGZpZWxkIGNvbnRyb2wgKi9cbiAgZ2V0IF9jb250cm9sKCk6IE1hdEZvcm1GaWVsZENvbnRyb2w8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbCB8fCB0aGlzLl9mb3JtRmllbGRDb250cm9sO1xuICB9XG4gIHNldCBfY29udHJvbCh2YWx1ZSkge1xuICAgIHRoaXMuX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbCA9IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVzdHJveWVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBfaXNGb2N1c2VkOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2V4cGxpY2l0Rm9ybUZpZWxkQ29udHJvbDogTWF0Rm9ybUZpZWxkQ29udHJvbDxhbnk+O1xuICBwcml2YXRlIF9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBfZGlyOiBEaXJlY3Rpb25hbGl0eSxcbiAgICBwcml2YXRlIF9wbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KE1BVF9GT1JNX0ZJRUxEX0RFRkFVTFRfT1BUSU9OUylcbiAgICBwcml2YXRlIF9kZWZhdWx0cz86IE1hdEZvcm1GaWVsZERlZmF1bHRPcHRpb25zLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQU5JTUFUSU9OX01PRFVMRV9UWVBFKSBwdWJsaWMgX2FuaW1hdGlvbk1vZGU/OiBzdHJpbmcsXG4gICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBfZG9jdW1lbnQ/OiBhbnksXG4gICkge1xuICAgIGlmIChfZGVmYXVsdHMpIHtcbiAgICAgIGlmIChfZGVmYXVsdHMuYXBwZWFyYW5jZSkge1xuICAgICAgICB0aGlzLmFwcGVhcmFuY2UgPSBfZGVmYXVsdHMuYXBwZWFyYW5jZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2hpZGVSZXF1aXJlZE1hcmtlciA9IEJvb2xlYW4oX2RlZmF1bHRzPy5oaWRlUmVxdWlyZWRNYXJrZXIpO1xuICAgICAgaWYgKF9kZWZhdWx0cy5jb2xvcikge1xuICAgICAgICB0aGlzLmNvbG9yID0gX2RlZmF1bHRzLmNvbG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyBJbml0aWFsIGZvY3VzIHN0YXRlIHN5bmMuIFRoaXMgaGFwcGVucyByYXJlbHksIGJ1dCB3ZSB3YW50IHRvIGFjY291bnQgZm9yXG4gICAgLy8gaXQgaW4gY2FzZSB0aGUgZm9ybSBmaWVsZCBjb250cm9sIGhhcyBcImZvY3VzZWRcIiBzZXQgdG8gdHJ1ZSBvbiBpbml0LlxuICAgIHRoaXMuX3VwZGF0ZUZvY3VzU3RhdGUoKTtcbiAgICAvLyBJbml0aWFsIG5vdGNoIHdpZHRoIHVwZGF0ZS4gVGhpcyBpcyBuZWVkZWQgaW4gY2FzZSB0aGUgdGV4dC1maWVsZCBsYWJlbCBmbG9hdHNcbiAgICAvLyBvbiBpbml0aWFsaXphdGlvbiwgYW5kIHJlbmRlcnMgaW5zaWRlIG9mIHRoZSBub3RjaGVkIG91dGxpbmUuXG4gICAgdGhpcy5fcmVmcmVzaE91dGxpbmVOb3RjaFdpZHRoKCk7XG4gICAgLy8gTWFrZSBzdXJlIGZvbnRzIGFyZSBsb2FkZWQgYmVmb3JlIGNhbGN1bGF0aW5nIHRoZSB3aWR0aC5cbiAgICAvLyB6b25lLmpzIGN1cnJlbnRseSBkb2Vzbid0IHBhdGNoIHRoZSBGb250RmFjZVNldCBBUEkgc28gdHdvIGNhbGxzIHRvXG4gICAgLy8gX3JlZnJlc2hPdXRsaW5lTm90Y2hXaWR0aCBpcyBuZWVkZWQgZm9yIHRoaXMgdG8gd29yayBwcm9wZXJseSBpbiBhc3luYyB0ZXN0cy5cbiAgICAvLyBGdXJ0aGVybW9yZSBpZiB0aGUgZm9udCB0YWtlcyBhIGxvbmcgdGltZSB0byBsb2FkIHdlIHdhbnQgdGhlIG91dGxpbmUgbm90Y2ggdG8gYmUgY2xvc2VcbiAgICAvLyB0byB0aGUgY29ycmVjdCB3aWR0aCBmcm9tIHRoZSBzdGFydCB0aGVuIGNvcnJlY3QgaXRzZWxmIHdoZW4gdGhlIGZvbnRzIGxvYWQuXG4gICAgaWYgKHRoaXMuX2RvY3VtZW50Py5mb250cz8ucmVhZHkpIHtcbiAgICAgIHRoaXMuX2RvY3VtZW50LmZvbnRzLnJlYWR5LnRoZW4oKCkgPT4ge1xuICAgICAgICB0aGlzLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKTtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9udEZhY2VTZXQgaXMgbm90IHN1cHBvcnRlZCBpbiBJRVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKSwgMTAwKTtcbiAgICB9XG4gICAgLy8gRW5hYmxlIGFuaW1hdGlvbnMgbm93LiBUaGlzIGVuc3VyZXMgd2UgZG9uJ3QgYW5pbWF0ZSBvbiBpbml0aWFsIHJlbmRlci5cbiAgICB0aGlzLl9zdWJzY3JpcHRBbmltYXRpb25TdGF0ZSA9ICdlbnRlcic7XG4gICAgLy8gQmVjYXVzZSB0aGUgYWJvdmUgY2hhbmdlcyBhIHZhbHVlIHVzZWQgaW4gdGhlIHRlbXBsYXRlIGFmdGVyIGl0IHdhcyBjaGVja2VkLCB3ZSBuZWVkXG4gICAgLy8gdG8gdHJpZ2dlciBDRCBvciB0aGUgY2hhbmdlIG1pZ2h0IG5vdCBiZSByZWZsZWN0ZWQgaWYgdGhlcmUgaXMgbm8gb3RoZXIgQ0Qgc2NoZWR1bGVkLlxuICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICB0aGlzLl9hc3NlcnRGb3JtRmllbGRDb250cm9sKCk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZUNvbnRyb2woKTtcbiAgICB0aGlzLl9pbml0aWFsaXplU3Vic2NyaXB0KCk7XG4gICAgdGhpcy5faW5pdGlhbGl6ZVByZWZpeEFuZFN1ZmZpeCgpO1xuICAgIHRoaXMuX2luaXRpYWxpemVPdXRsaW5lTGFiZWxPZmZzZXRTdWJzY3JpcHRpb25zKCk7XG4gIH1cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgdGhpcy5fYXNzZXJ0Rm9ybUZpZWxkQ29udHJvbCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fZGVzdHJveWVkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBpZCBvZiB0aGUgbGFiZWwgZWxlbWVudC4gSWYgbm8gbGFiZWwgaXMgcHJlc2VudCwgcmV0dXJucyBgbnVsbGAuXG4gICAqL1xuICBnZXRMYWJlbElkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCkgPyB0aGlzLl9sYWJlbElkIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFuIEVsZW1lbnRSZWYgZm9yIHRoZSBlbGVtZW50IHRoYXQgYSBvdmVybGF5IGF0dGFjaGVkIHRvIHRoZSBmb3JtIGZpZWxkXG4gICAqIHNob3VsZCBiZSBwb3NpdGlvbmVkIHJlbGF0aXZlIHRvLlxuICAgKi9cbiAgZ2V0Q29ubmVjdGVkT3ZlcmxheU9yaWdpbigpOiBFbGVtZW50UmVmIHtcbiAgICByZXR1cm4gdGhpcy5fdGV4dEZpZWxkIHx8IHRoaXMuX2VsZW1lbnRSZWY7XG4gIH1cblxuICAvKiogQW5pbWF0ZXMgdGhlIHBsYWNlaG9sZGVyIHVwIGFuZCBsb2NrcyBpdCBpbiBwb3NpdGlvbi4gKi9cbiAgX2FuaW1hdGVBbmRMb2NrTGFiZWwoKTogdm9pZCB7XG4gICAgLy8gVGhpcyBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seS4gQ29uc3VtZXJzIG9mIHRoZSBmb3JtIGZpZWxkIG1pZ2h0IHVzZVxuICAgIC8vIHRoaXMgbWV0aG9kLiBlLmcuIHRoZSBhdXRvY29tcGxldGUgdHJpZ2dlci4gVGhpcyBtZXRob2QgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIG5vbi1NRENcbiAgICAvLyBmb3JtIGZpZWxkIGJlY2F1c2Ugc2V0dGluZyBcImZsb2F0TGFiZWxcIiB0byBcImFsd2F5c1wiIGNhdXNlZCB0aGUgbGFiZWwgdG8gZmxvYXQgd2l0aG91dFxuICAgIC8vIGFuaW1hdGlvbi4gVGhpcyBpcyBkaWZmZXJlbnQgaW4gTURDIHdoZXJlIHRoZSBsYWJlbCBhbHdheXMgYW5pbWF0ZXMsIHNvIHRoaXMgbWV0aG9kXG4gICAgLy8gaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4gVGhlcmUgZG9lc24ndCBzZWVtIGFueSBiZW5lZml0IGluIGFkZGluZyBsb2dpYyB0byBhbGxvdyBjaGFuZ2luZ1xuICAgIC8vIHRoZSBmbG9hdGluZyBsYWJlbCBzdGF0ZSB3aXRob3V0IGFuaW1hdGlvbnMuIFRoZSBub24tTURDIGltcGxlbWVudGF0aW9uIHdhcyBpbmNvbnNpc3RlbnRcbiAgICAvLyBiZWNhdXNlIGl0IGFsd2F5cyBhbmltYXRlcyBpZiBcImZsb2F0TGFiZWxcIiBpcyBzZXQgYXdheSBmcm9tIFwiYWx3YXlzXCIuXG4gICAgLy8gVE9ETyhkZXZ2ZXJzaW9uKTogY29uc2lkZXIgcmVtb3ZpbmcgdGhpcyBtZXRob2Qgd2hlbiByZWxlYXNpbmcgdGhlIE1EQyBmb3JtIGZpZWxkLlxuICAgIGlmICh0aGlzLl9oYXNGbG9hdGluZ0xhYmVsKCkpIHtcbiAgICAgIHRoaXMuZmxvYXRMYWJlbCA9ICdhbHdheXMnO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBJbml0aWFsaXplcyB0aGUgcmVnaXN0ZXJlZCBmb3JtIGZpZWxkIGNvbnRyb2wuICovXG4gIHByaXZhdGUgX2luaXRpYWxpemVDb250cm9sKCkge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLl9jb250cm9sO1xuXG4gICAgaWYgKGNvbnRyb2wuY29udHJvbFR5cGUpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKFxuICAgICAgICBgbWF0LW1kYy1mb3JtLWZpZWxkLXR5cGUtJHtjb250cm9sLmNvbnRyb2xUeXBlfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFN1YnNjcmliZSB0byBjaGFuZ2VzIGluIHRoZSBjaGlsZCBjb250cm9sIHN0YXRlIGluIG9yZGVyIHRvIHVwZGF0ZSB0aGUgZm9ybSBmaWVsZCBVSS5cbiAgICBjb250cm9sLnN0YXRlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fdXBkYXRlRm9jdXNTdGF0ZSgpO1xuICAgICAgdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIC8vIFJ1biBjaGFuZ2UgZGV0ZWN0aW9uIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzLlxuICAgIGlmIChjb250cm9sLm5nQ29udHJvbCAmJiBjb250cm9sLm5nQ29udHJvbC52YWx1ZUNoYW5nZXMpIHtcbiAgICAgIGNvbnRyb2wubmdDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tQcmVmaXhBbmRTdWZmaXhUeXBlcygpIHtcbiAgICB0aGlzLl9oYXNJY29uUHJlZml4ID0gISF0aGlzLl9wcmVmaXhDaGlsZHJlbi5maW5kKHAgPT4gIXAuX2lzVGV4dCk7XG4gICAgdGhpcy5faGFzVGV4dFByZWZpeCA9ICEhdGhpcy5fcHJlZml4Q2hpbGRyZW4uZmluZChwID0+IHAuX2lzVGV4dCk7XG4gICAgdGhpcy5faGFzSWNvblN1ZmZpeCA9ICEhdGhpcy5fc3VmZml4Q2hpbGRyZW4uZmluZChzID0+ICFzLl9pc1RleHQpO1xuICAgIHRoaXMuX2hhc1RleHRTdWZmaXggPSAhIXRoaXMuX3N1ZmZpeENoaWxkcmVuLmZpbmQocyA9PiBzLl9pc1RleHQpO1xuICB9XG5cbiAgLyoqIEluaXRpYWxpemVzIHRoZSBwcmVmaXggYW5kIHN1ZmZpeCBjb250YWluZXJzLiAqL1xuICBwcml2YXRlIF9pbml0aWFsaXplUHJlZml4QW5kU3VmZml4KCkge1xuICAgIHRoaXMuX2NoZWNrUHJlZml4QW5kU3VmZml4VHlwZXMoKTtcbiAgICAvLyBNYXJrIHRoZSBmb3JtIGZpZWxkIGFzIGRpcnR5IHdoZW5ldmVyIHRoZSBwcmVmaXggb3Igc3VmZml4IGNoaWxkcmVuIGNoYW5nZS4gVGhpc1xuICAgIC8vIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlIGNvbmRpdGlvbmFsbHkgZGlzcGxheSB0aGUgcHJlZml4L3N1ZmZpeCBjb250YWluZXJzIGJhc2VkXG4gICAgLy8gb24gd2hldGhlciB0aGVyZSBpcyBwcm9qZWN0ZWQgY29udGVudC5cbiAgICBtZXJnZSh0aGlzLl9wcmVmaXhDaGlsZHJlbi5jaGFuZ2VzLCB0aGlzLl9zdWZmaXhDaGlsZHJlbi5jaGFuZ2VzKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fY2hlY2tQcmVmaXhBbmRTdWZmaXhUeXBlcygpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIHN1YnNjcmlwdCBieSB2YWxpZGF0aW5nIGhpbnRzIGFuZCBzeW5jaHJvbml6aW5nIFwiYXJpYS1kZXNjcmliZWRieVwiIGlkc1xuICAgKiB3aXRoIHRoZSBjdXN0b20gZm9ybSBmaWVsZCBjb250cm9sLiBBbHNvIHN1YnNjcmliZXMgdG8gaGludCBhbmQgZXJyb3IgY2hhbmdlcyBpbiBvcmRlclxuICAgKiB0byBiZSBhYmxlIHRvIHZhbGlkYXRlIGFuZCBzeW5jaHJvbml6ZSBpZHMgb24gY2hhbmdlLlxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZVN1YnNjcmlwdCgpIHtcbiAgICAvLyBSZS12YWxpZGF0ZSB3aGVuIHRoZSBudW1iZXIgb2YgaGludHMgY2hhbmdlcy5cbiAgICB0aGlzLl9oaW50Q2hpbGRyZW4uY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fcHJvY2Vzc0hpbnRzKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgYXJpYS1kZXNjcmliZWQgYnkgd2hlbiB0aGUgbnVtYmVyIG9mIGVycm9ycyBjaGFuZ2VzLlxuICAgIHRoaXMuX2Vycm9yQ2hpbGRyZW4uY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIC8vIEluaXRpYWwgbWF0LWhpbnQgdmFsaWRhdGlvbiBhbmQgc3Vic2NyaXB0IGRlc2NyaWJlZEJ5SWRzIHN5bmMuXG4gICAgdGhpcy5fdmFsaWRhdGVIaW50cygpO1xuICAgIHRoaXMuX3N5bmNEZXNjcmliZWRCeUlkcygpO1xuICB9XG5cbiAgLyoqIFRocm93cyBhbiBlcnJvciBpZiB0aGUgZm9ybSBmaWVsZCdzIGNvbnRyb2wgaXMgbWlzc2luZy4gKi9cbiAgcHJpdmF0ZSBfYXNzZXJ0Rm9ybUZpZWxkQ29udHJvbCgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbnRyb2wgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgIHRocm93IGdldE1hdEZvcm1GaWVsZE1pc3NpbmdDb250cm9sRXJyb3IoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVGb2N1c1N0YXRlKCkge1xuICAgIC8vIFVzdWFsbHkgdGhlIE1EQyBmb3VuZGF0aW9uIHdvdWxkIGNhbGwgXCJhY3RpdmF0ZUZvY3VzXCIgYW5kIFwiZGVhY3RpdmF0ZUZvY3VzXCIgd2hlbmV2ZXJcbiAgICAvLyBjZXJ0YWluIERPTSBldmVudHMgYXJlIGVtaXR0ZWQuIFRoaXMgaXMgbm90IHBvc3NpYmxlIGluIG91ciBpbXBsZW1lbnRhdGlvbiBvZiB0aGVcbiAgICAvLyBmb3JtIGZpZWxkIGJlY2F1c2Ugd2Ugc3VwcG9ydCBhYnN0cmFjdCBmb3JtIGZpZWxkIGNvbnRyb2xzIHdoaWNoIGFyZSBub3QgbmVjZXNzYXJpbHlcbiAgICAvLyBvZiB0eXBlIGlucHV0LCBub3IgZG8gd2UgaGF2ZSBhIHJlZmVyZW5jZSB0byBhIG5hdGl2ZSBmb3JtIGZpZWxkIGNvbnRyb2wgZWxlbWVudC4gSW5zdGVhZFxuICAgIC8vIHdlIGhhbmRsZSB0aGUgZm9jdXMgYnkgY2hlY2tpbmcgaWYgdGhlIGFic3RyYWN0IGZvcm0gZmllbGQgY29udHJvbCBmb2N1c2VkIHN0YXRlIGNoYW5nZXMuXG4gICAgaWYgKHRoaXMuX2NvbnRyb2wuZm9jdXNlZCAmJiAhdGhpcy5faXNGb2N1c2VkKSB7XG4gICAgICB0aGlzLl9pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fbGluZVJpcHBsZT8uYWN0aXZhdGUoKTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9jb250cm9sLmZvY3VzZWQgJiYgKHRoaXMuX2lzRm9jdXNlZCB8fCB0aGlzLl9pc0ZvY3VzZWQgPT09IG51bGwpKSB7XG4gICAgICB0aGlzLl9pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2xpbmVSaXBwbGU/LmRlYWN0aXZhdGUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl90ZXh0RmllbGQ/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShcbiAgICAgICdtZGMtdGV4dC1maWVsZC0tZm9jdXNlZCcsXG4gICAgICB0aGlzLl9jb250cm9sLmZvY3VzZWQsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZmxvYXRpbmcgbGFiZWwgaW4gdGhlIGRvY2tlZCBzdGF0ZSBuZWVkcyB0byBhY2NvdW50IGZvciBwcmVmaXhlcy4gVGhlIGhvcml6b250YWwgb2Zmc2V0XG4gICAqIGlzIGNhbGN1bGF0ZWQgd2hlbmV2ZXIgdGhlIGFwcGVhcmFuY2UgY2hhbmdlcyB0byBgb3V0bGluZWAsIHRoZSBwcmVmaXhlcyBjaGFuZ2UsIG9yIHdoZW4gdGhlXG4gICAqIGZvcm0gZmllbGQgaXMgYWRkZWQgdG8gdGhlIERPTS4gVGhpcyBtZXRob2Qgc2V0cyB1cCBhbGwgc3Vic2NyaXB0aW9ucyB3aGljaCBhcmUgbmVlZGVkIHRvXG4gICAqIHRyaWdnZXIgdGhlIGxhYmVsIG9mZnNldCB1cGRhdGUuIEluIGdlbmVyYWwsIHdlIHdhbnQgdG8gYXZvaWQgcGVyZm9ybWluZyBtZWFzdXJlbWVudHMgb2Z0ZW4sXG4gICAqIHNvIHdlIHJlbHkgb24gdGhlIGBOZ1pvbmVgIGFzIGluZGljYXRvciB3aGVuIHRoZSBvZmZzZXQgc2hvdWxkIGJlIHJlY2FsY3VsYXRlZCwgaW5zdGVhZCBvZlxuICAgKiBjaGVja2luZyBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLlxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZU91dGxpbmVMYWJlbE9mZnNldFN1YnNjcmlwdGlvbnMoKSB7XG4gICAgLy8gV2hlbmV2ZXIgdGhlIHByZWZpeCBjaGFuZ2VzLCBzY2hlZHVsZSBhbiB1cGRhdGUgb2YgdGhlIGxhYmVsIG9mZnNldC5cbiAgICB0aGlzLl9wcmVmaXhDaGlsZHJlbi5jaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICgpID0+ICh0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlID0gdHJ1ZSksXG4gICAgKTtcblxuICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIHJ1biBvdXRzaWRlIG9mIHRoZSBgTmdab25lYCBleHBsaWNpdGx5LCBpbiBvcmRlciB0byBhdm9pZFxuICAgIC8vIHRocm93aW5nIHVzZXJzIGludG8gYW4gaW5maW5pdGUgbG9vcCBpZiBgem9uZS1wYXRjaC1yeGpzYCBpcyBpbmNsdWRlZC5cbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlKSB7XG4gICAgICAgICAgdGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZU91dGxpbmVMYWJlbE9mZnNldCgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Rpci5jaGFuZ2VcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiAodGhpcy5fbmVlZHNPdXRsaW5lTGFiZWxPZmZzZXRVcGRhdGVPblN0YWJsZSA9IHRydWUpKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIHRoZSBmbG9hdGluZyBsYWJlbCBzaG91bGQgYWx3YXlzIGZsb2F0IG9yIG5vdC4gKi9cbiAgX3Nob3VsZEFsd2F5c0Zsb2F0KCkge1xuICAgIHJldHVybiB0aGlzLmZsb2F0TGFiZWwgPT09ICdhbHdheXMnO1xuICB9XG5cbiAgX2hhc091dGxpbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwZWFyYW5jZSA9PT0gJ291dGxpbmUnO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGxhYmVsIHNob3VsZCBkaXNwbGF5IGluIHRoZSBpbmZpeC4gTGFiZWxzIGluIHRoZSBvdXRsaW5lIGFwcGVhcmFuY2UgYXJlXG4gICAqIGRpc3BsYXllZCBhcyBwYXJ0IG9mIHRoZSBub3RjaGVkLW91dGxpbmUgYW5kIGFyZSBob3Jpem9udGFsbHkgb2Zmc2V0IHRvIGFjY291bnQgZm9yXG4gICAqIGZvcm0gZmllbGQgcHJlZml4IGNvbnRlbnQuIFRoaXMgd29uJ3Qgd29yayBpbiBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcgc2luY2Ugd2UgY2Fubm90XG4gICAqIG1lYXN1cmUgdGhlIHdpZHRoIG9mIHRoZSBwcmVmaXggY29udGFpbmVyLiBUbyBtYWtlIHRoZSBkb2NrZWQgbGFiZWwgYXBwZWFyIGFzIGlmIHRoZVxuICAgKiByaWdodCBvZmZzZXQgaGFzIGJlZW4gY2FsY3VsYXRlZCwgd2UgZm9yY2libHkgcmVuZGVyIHRoZSBsYWJlbCBpbnNpZGUgdGhlIGluZml4LiBTaW5jZVxuICAgKiB0aGUgbGFiZWwgaXMgcGFydCBvZiB0aGUgaW5maXgsIHRoZSBsYWJlbCBjYW5ub3Qgb3ZlcmZsb3cgdGhlIHByZWZpeCBjb250ZW50LlxuICAgKi9cbiAgX2ZvcmNlRGlzcGxheUluZml4TGFiZWwoKSB7XG4gICAgcmV0dXJuICF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIgJiYgdGhpcy5fcHJlZml4Q2hpbGRyZW4ubGVuZ3RoICYmICF0aGlzLl9zaG91bGRMYWJlbEZsb2F0KCk7XG4gIH1cblxuICBfaGFzRmxvYXRpbmdMYWJlbCgpIHtcbiAgICByZXR1cm4gISF0aGlzLl9sYWJlbENoaWxkTm9uU3RhdGljIHx8ICEhdGhpcy5fbGFiZWxDaGlsZFN0YXRpYztcbiAgfVxuXG4gIF9zaG91bGRMYWJlbEZsb2F0KCkge1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sLnNob3VsZExhYmVsRmxvYXQgfHwgdGhpcy5fc2hvdWxkQWx3YXlzRmxvYXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBjbGFzcyBmcm9tIHRoZSBBYnN0cmFjdENvbnRyb2xEaXJlY3RpdmVcbiAgICogc2hvdWxkIGJlIGZvcndhcmRlZCB0byB0aGUgaG9zdCBlbGVtZW50LlxuICAgKi9cbiAgX3Nob3VsZEZvcndhcmQocHJvcDoga2V5b2YgQWJzdHJhY3RDb250cm9sRGlyZWN0aXZlKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY29udHJvbCA9IHRoaXMuX2NvbnRyb2wgPyB0aGlzLl9jb250cm9sLm5nQ29udHJvbCA6IG51bGw7XG4gICAgcmV0dXJuIGNvbnRyb2wgJiYgY29udHJvbFtwcm9wXTtcbiAgfVxuXG4gIC8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSBoaW50cyBvciBlcnJvcnMuICovXG4gIF9nZXREaXNwbGF5ZWRNZXNzYWdlcygpOiAnZXJyb3InIHwgJ2hpbnQnIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JDaGlsZHJlbiAmJiB0aGlzLl9lcnJvckNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgdGhpcy5fY29udHJvbC5lcnJvclN0YXRlXG4gICAgICA/ICdlcnJvcidcbiAgICAgIDogJ2hpbnQnO1xuICB9XG5cbiAgLyoqIFJlZnJlc2hlcyB0aGUgd2lkdGggb2YgdGhlIG91dGxpbmUtbm90Y2gsIGlmIHByZXNlbnQuICovXG4gIF9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKSB7XG4gICAgaWYgKCF0aGlzLl9oYXNPdXRsaW5lKCkgfHwgIXRoaXMuX2Zsb2F0aW5nTGFiZWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbGFiZWxXaWR0aCA9IHRoaXMuX2Zsb2F0aW5nTGFiZWwuZ2V0V2lkdGgoKTtcbiAgfVxuXG4gIC8qKiBEb2VzIGFueSBleHRyYSBwcm9jZXNzaW5nIHRoYXQgaXMgcmVxdWlyZWQgd2hlbiBoYW5kbGluZyB0aGUgaGludHMuICovXG4gIHByaXZhdGUgX3Byb2Nlc3NIaW50cygpIHtcbiAgICB0aGlzLl92YWxpZGF0ZUhpbnRzKCk7XG4gICAgdGhpcy5fc3luY0Rlc2NyaWJlZEJ5SWRzKCk7XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBtYXhpbXVtIG9mIG9uZSBvZiBlYWNoIFwibWF0LWhpbnRcIiBhbGlnbm1lbnQgc3BlY2lmaWVkLiBUaGUgaGludFxuICAgKiBsYWJlbCBzcGVjaWZpZWQgc2V0IHRocm91Z2ggdGhlIGlucHV0IGlzIGJlaW5nIGNvbnNpZGVyZWQgYXMgXCJzdGFydFwiIGFsaWduZWQuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIGEgbm9vcCBpZiBBbmd1bGFyIHJ1bnMgaW4gcHJvZHVjdGlvbiBtb2RlLlxuICAgKi9cbiAgcHJpdmF0ZSBfdmFsaWRhdGVIaW50cygpIHtcbiAgICBpZiAodGhpcy5faGludENoaWxkcmVuICYmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpKSB7XG4gICAgICBsZXQgc3RhcnRIaW50OiBNYXRIaW50O1xuICAgICAgbGV0IGVuZEhpbnQ6IE1hdEhpbnQ7XG4gICAgICB0aGlzLl9oaW50Q2hpbGRyZW4uZm9yRWFjaCgoaGludDogTWF0SGludCkgPT4ge1xuICAgICAgICBpZiAoaGludC5hbGlnbiA9PT0gJ3N0YXJ0Jykge1xuICAgICAgICAgIGlmIChzdGFydEhpbnQgfHwgdGhpcy5oaW50TGFiZWwpIHtcbiAgICAgICAgICAgIHRocm93IGdldE1hdEZvcm1GaWVsZER1cGxpY2F0ZWRIaW50RXJyb3IoJ3N0YXJ0Jyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXJ0SGludCA9IGhpbnQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaGludC5hbGlnbiA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICBpZiAoZW5kSGludCkge1xuICAgICAgICAgICAgdGhyb3cgZ2V0TWF0Rm9ybUZpZWxkRHVwbGljYXRlZEhpbnRFcnJvcignZW5kJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVuZEhpbnQgPSBoaW50O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgbGlzdCBvZiBlbGVtZW50IElEcyB0aGF0IGRlc2NyaWJlIHRoZSBjaGlsZCBjb250cm9sLiBUaGlzIGFsbG93cyB0aGUgY29udHJvbCB0byB1cGRhdGVcbiAgICogaXRzIGBhcmlhLWRlc2NyaWJlZGJ5YCBhdHRyaWJ1dGUgYWNjb3JkaW5nbHkuXG4gICAqL1xuICBwcml2YXRlIF9zeW5jRGVzY3JpYmVkQnlJZHMoKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRyb2wpIHtcbiAgICAgIGxldCBpZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIC8vIFRPRE8od2FnbmVybWFjaWVsKTogUmVtb3ZlIHRoZSB0eXBlIGNoZWNrIHdoZW4gd2UgZmluZCB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIGJ1Zy5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5ICYmXG4gICAgICAgIHR5cGVvZiB0aGlzLl9jb250cm9sLnVzZXJBcmlhRGVzY3JpYmVkQnkgPT09ICdzdHJpbmcnXG4gICAgICApIHtcbiAgICAgICAgaWRzLnB1c2goLi4udGhpcy5fY29udHJvbC51c2VyQXJpYURlc2NyaWJlZEJ5LnNwbGl0KCcgJykpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fZ2V0RGlzcGxheWVkTWVzc2FnZXMoKSA9PT0gJ2hpbnQnKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SGludCA9IHRoaXMuX2hpbnRDaGlsZHJlblxuICAgICAgICAgID8gdGhpcy5faGludENoaWxkcmVuLmZpbmQoaGludCA9PiBoaW50LmFsaWduID09PSAnc3RhcnQnKVxuICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgY29uc3QgZW5kSGludCA9IHRoaXMuX2hpbnRDaGlsZHJlblxuICAgICAgICAgID8gdGhpcy5faGludENoaWxkcmVuLmZpbmQoaGludCA9PiBoaW50LmFsaWduID09PSAnZW5kJylcbiAgICAgICAgICA6IG51bGw7XG5cbiAgICAgICAgaWYgKHN0YXJ0SGludCkge1xuICAgICAgICAgIGlkcy5wdXNoKHN0YXJ0SGludC5pZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5faGludExhYmVsKSB7XG4gICAgICAgICAgaWRzLnB1c2godGhpcy5faGludExhYmVsSWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVuZEhpbnQpIHtcbiAgICAgICAgICBpZHMucHVzaChlbmRIaW50LmlkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9lcnJvckNoaWxkcmVuKSB7XG4gICAgICAgIGlkcy5wdXNoKC4uLnRoaXMuX2Vycm9yQ2hpbGRyZW4ubWFwKGVycm9yID0+IGVycm9yLmlkKSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NvbnRyb2wuc2V0RGVzY3JpYmVkQnlJZHMoaWRzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgaG9yaXpvbnRhbCBvZmZzZXQgb2YgdGhlIGxhYmVsIGluIHRoZSBvdXRsaW5lIGFwcGVhcmFuY2UuIEluIHRoZSBvdXRsaW5lXG4gICAqIGFwcGVhcmFuY2UsIHRoZSBub3RjaGVkLW91dGxpbmUgYW5kIGxhYmVsIGFyZSBub3QgcmVsYXRpdmUgdG8gdGhlIGluZml4IGNvbnRhaW5lciBiZWNhdXNlXG4gICAqIHRoZSBvdXRsaW5lIGludGVuZHMgdG8gc3Vycm91bmQgcHJlZml4ZXMsIHN1ZmZpeGVzIGFuZCB0aGUgaW5maXguIFRoaXMgbWVhbnMgdGhhdCB0aGVcbiAgICogZmxvYXRpbmcgbGFiZWwgYnkgZGVmYXVsdCBvdmVybGFwcyBwcmVmaXhlcyBpbiB0aGUgZG9ja2VkIHN0YXRlLiBUbyBhdm9pZCB0aGlzLCB3ZSBuZWVkIHRvXG4gICAqIGhvcml6b250YWxseSBvZmZzZXQgdGhlIGxhYmVsIGJ5IHRoZSB3aWR0aCBvZiB0aGUgcHJlZml4IGNvbnRhaW5lci4gVGhlIE1EQyB0ZXh0LWZpZWxkIGRvZXNcbiAgICogbm90IG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIHRoZXkgdXNlIGEgZml4ZWQgd2lkdGggZm9yIHByZWZpeGVzLiBIZW5jZSwgdGhleSBjYW4gc2ltcGx5XG4gICAqIGluY29ycG9yYXRlIHRoZSBob3Jpem9udGFsIG9mZnNldCBpbnRvIHRoZWlyIGRlZmF1bHQgdGV4dC1maWVsZCBzdHlsZXMuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVPdXRsaW5lTGFiZWxPZmZzZXQoKSB7XG4gICAgaWYgKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIgfHwgIXRoaXMuX2hhc091dGxpbmUoKSB8fCAhdGhpcy5fZmxvYXRpbmdMYWJlbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmbG9hdGluZ0xhYmVsID0gdGhpcy5fZmxvYXRpbmdMYWJlbC5lbGVtZW50O1xuICAgIC8vIElmIG5vIHByZWZpeCBpcyBkaXNwbGF5ZWQsIHJlc2V0IHRoZSBvdXRsaW5lIGxhYmVsIG9mZnNldCBmcm9tIHBvdGVudGlhbFxuICAgIC8vIHByZXZpb3VzIGxhYmVsIG9mZnNldCB1cGRhdGVzLlxuICAgIGlmICghKHRoaXMuX2ljb25QcmVmaXhDb250YWluZXIgfHwgdGhpcy5fdGV4dFByZWZpeENvbnRhaW5lcikpIHtcbiAgICAgIGZsb2F0aW5nTGFiZWwuc3R5bGUudHJhbnNmb3JtID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIElmIHRoZSBmb3JtIGZpZWxkIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRE9NIHlldCAoZS5nLiBpbiBhIHRhYiksIHdlIGRlZmVyXG4gICAgLy8gdGhlIGxhYmVsIG9mZnNldCB1cGRhdGUgdW50aWwgdGhlIHpvbmUgc3RhYmlsaXplcy5cbiAgICBpZiAoIXRoaXMuX2lzQXR0YWNoZWRUb0RvbSgpKSB7XG4gICAgICB0aGlzLl9uZWVkc091dGxpbmVMYWJlbE9mZnNldFVwZGF0ZU9uU3RhYmxlID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaWNvblByZWZpeENvbnRhaW5lciA9IHRoaXMuX2ljb25QcmVmaXhDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGV4dFByZWZpeENvbnRhaW5lciA9IHRoaXMuX3RleHRQcmVmaXhDb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgaWNvblByZWZpeENvbnRhaW5lcldpZHRoID0gaWNvblByZWZpeENvbnRhaW5lcj8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gMDtcbiAgICBjb25zdCB0ZXh0UHJlZml4Q29udGFpbmVyV2lkdGggPSB0ZXh0UHJlZml4Q29udGFpbmVyPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCA/PyAwO1xuICAgIC8vIElmIHRoZSBkaXJlY3Rpb25hbGl0eSBpcyBSVEwsIHRoZSB4LWF4aXMgdHJhbnNmb3JtIG5lZWRzIHRvIGJlIGludmVydGVkLiBUaGlzXG4gICAgLy8gaXMgYmVjYXVzZSBgdHJhbnNmb3JtWGAgZG9lcyBub3QgY2hhbmdlIGJhc2VkIG9uIHRoZSBwYWdlIGRpcmVjdGlvbmFsaXR5LlxuICAgIGNvbnN0IGxhYmVsSG9yaXpvbnRhbE9mZnNldCA9XG4gICAgICAodGhpcy5fZGlyLnZhbHVlID09PSAncnRsJyA/IC0xIDogMSkgKlxuICAgICAgLy8gSWYgdGhlcmUncyBhbiBpY29uIHByZWZpeCwgd2Ugc3VidHJhY3QgdGhlIGRlZmF1bHQgaG9yaXpvbnRhbCBwYWRkaW5nIGFzIHdlXG4gICAgICAvLyByZXNldCB0aGUgaG9yaXpvbnRhbCBwYWRkaW5nIGluIENTUyB0b28uXG4gICAgICAoKGljb25QcmVmaXhDb250YWluZXIgPyBpY29uUHJlZml4Q29udGFpbmVyV2lkdGggLSBXUkFQUEVSX0hPUklaT05UQUxfUEFERElORyA6IDApICtcbiAgICAgICAgdGV4dFByZWZpeENvbnRhaW5lcldpZHRoKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgdHJhbnNsYXRlWCBvZiB0aGUgZmxvYXRpbmcgbGFiZWwgdG8gYWNjb3VudCBmb3IgdGhlIHByZWZpeCBjb250YWluZXIsXG4gICAgLy8gYnV0IGFsbG93IHRoZSBDU1MgdG8gb3ZlcnJpZGUgdGhpcyBzZXR0aW5nIHZpYSBhIENTUyB2YXJpYWJsZSB3aGVuIHRoZSBsYWJlbCBpc1xuICAgIC8vIGZsb2F0aW5nLlxuICAgIGZsb2F0aW5nTGFiZWwuc3R5bGUudHJhbnNmb3JtID0gYHZhcihcbiAgICAgICAgLS1tYXQtbWRjLWZvcm0tZmllbGQtbGFiZWwtdHJhbnNmb3JtLFxuICAgICAgICAke0ZMT0FUSU5HX0xBQkVMX0RFRkFVTFRfRE9DS0VEX1RSQU5TRk9STX0gdHJhbnNsYXRlWCgke2xhYmVsSG9yaXpvbnRhbE9mZnNldH1weFxuICAgIClgO1xuICB9XG5cbiAgLyoqIENoZWNrcyB3aGV0aGVyIHRoZSBmb3JtIGZpZWxkIGlzIGF0dGFjaGVkIHRvIHRoZSBET00uICovXG4gIHByaXZhdGUgX2lzQXR0YWNoZWRUb0RvbSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBlbGVtZW50OiBIVE1MRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoZWxlbWVudC5nZXRSb290Tm9kZSkge1xuICAgICAgY29uc3Qgcm9vdE5vZGUgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG4gICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBpbnNpZGUgdGhlIERPTSB0aGUgcm9vdCBub2RlIHdpbGwgYmUgZWl0aGVyIHRoZSBkb2N1bWVudFxuICAgICAgLy8gb3IgdGhlIGNsb3Nlc3Qgc2hhZG93IHJvb3QsIG90aGVyd2lzZSBpdCdsbCBiZSB0aGUgZWxlbWVudCBpdHNlbGYuXG4gICAgICByZXR1cm4gcm9vdE5vZGUgJiYgcm9vdE5vZGUgIT09IGVsZW1lbnQ7XG4gICAgfVxuICAgIC8vIE90aGVyd2lzZSBmYWxsIGJhY2sgdG8gY2hlY2tpbmcgaWYgaXQncyBpbiB0aGUgZG9jdW1lbnQuIFRoaXMgZG9lc24ndCBhY2NvdW50IGZvclxuICAgIC8vIHNoYWRvdyBET00sIGhvd2V2ZXIgYnJvd3NlciB0aGF0IHN1cHBvcnQgc2hhZG93IERPTSBzaG91bGQgc3VwcG9ydCBgZ2V0Um9vdE5vZGVgIGFzIHdlbGwuXG4gICAgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCEuY29udGFpbnMoZWxlbWVudCk7XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSAjbGFiZWxUZW1wbGF0ZT5cbiAgPCEtLVxuICAgIE1EQyByZWNvbW1lbmRzIHRoYXQgdGhlIHRleHQtZmllbGQgaXMgYSBgPGxhYmVsPmAgZWxlbWVudC4gVGhpcyByYXRoZXIgY29tcGxpY2F0ZXMgdGhlXG4gICAgc2V0dXAgYmVjYXVzZSBpdCB3b3VsZCByZXF1aXJlIGV2ZXJ5IGZvcm0tZmllbGQgY29udHJvbCB0byBleHBsaWNpdGx5IHNldCBgYXJpYS1sYWJlbGxlZGJ5YC5cbiAgICBUaGlzIGlzIGJlY2F1c2UgdGhlIGA8bGFiZWw+YCBpdHNlbGYgY29udGFpbnMgbW9yZSB0aGFuIHRoZSBhY3R1YWwgbGFiZWwgKGUuZy4gcHJlZml4LCBzdWZmaXhcbiAgICBvciBvdGhlciBwcm9qZWN0ZWQgY29udGVudCksIGFuZCBzY3JlZW4gcmVhZGVycyBjb3VsZCBwb3RlbnRpYWxseSByZWFkIG91dCB1bmRlc2lyZWQgY29udGVudC5cbiAgICBFeGNsdWRpbmcgZWxlbWVudHMgZnJvbSBiZWluZyBwcmludGVkIG91dCByZXF1aXJlcyB0aGVtIHRvIGJlIG1hcmtlZCB3aXRoIGBhcmlhLWhpZGRlbmAsIG9yXG4gICAgdGhlIGZvcm0gY29udHJvbCBpcyBzZXQgdG8gYSBzY29wZWQgZWxlbWVudCBmb3IgdGhlIGxhYmVsICh1c2luZyBgYXJpYS1sYWJlbGxlZGJ5YCkuIEJvdGggb2ZcbiAgICB0aGVzZSBvcHRpb25zIHNlZW0gdG8gY29tcGxpY2F0ZSB0aGUgc2V0dXAgYmVjYXVzZSB3ZSBrbm93IGV4YWN0bHkgd2hhdCBjb250ZW50IGlzIHJlbmRlcmVkXG4gICAgYXMgcGFydCBvZiB0aGUgbGFiZWwsIGFuZCB3ZSBkb24ndCB3YW50IHRvIHNwZW5kIHJlc291cmNlcyBvbiB3YWxraW5nIHRocm91Z2ggcHJvamVjdGVkIGNvbnRlbnRcbiAgICB0byBzZXQgYGFyaWEtaGlkZGVuYC4gTm9yIGRvIHdlIHdhbnQgdG8gc2V0IGBhcmlhLWxhYmVsbGVkYnlgIG9uIGV2ZXJ5IGZvcm0gY29udHJvbCBpZiB3ZSBjb3VsZFxuICAgIHNpbXBseSBsaW5rIHRoZSBsYWJlbCB0byB0aGUgY29udHJvbCB1c2luZyB0aGUgbGFiZWwgYGZvcmAgYXR0cmlidXRlLlxuXG4gICAgKk5vdGUqOiBXZSBhZGQgYXJpYS1vd25zIGFzIGEgd29ya2Fyb3VuZCBmb3IgYW4gaXNzdWUgaW4gSkFXUyAmIE5WREEgd2hlcmUgdGhlIGxhYmVsIGlzbid0XG4gICAgcmVhZCBpZiBpdCBjb21lcyBiZWZvcmUgdGhlIGNvbnRyb2wgaW4gdGhlIERPTS5cbiAgLS0+XG4gIDxsYWJlbCBtYXRGb3JtRmllbGRGbG9hdGluZ0xhYmVsXG4gICAgICAgICBbZmxvYXRpbmddPVwiX3Nob3VsZExhYmVsRmxvYXQoKVwiXG4gICAgICAgICAqbmdJZj1cIl9oYXNGbG9hdGluZ0xhYmVsKClcIlxuICAgICAgICAgKGNka09ic2VydmVDb250ZW50KT1cIl9yZWZyZXNoT3V0bGluZU5vdGNoV2lkdGgoKVwiXG4gICAgICAgICBbY2RrT2JzZXJ2ZUNvbnRlbnREaXNhYmxlZF09XCIhX2hhc091dGxpbmUoKVwiXG4gICAgICAgICBbaWRdPVwiX2xhYmVsSWRcIlxuICAgICAgICAgW2F0dHIuZm9yXT1cIl9jb250cm9sLmlkXCJcbiAgICAgICAgIFthdHRyLmFyaWEtb3duc109XCJfY29udHJvbC5pZFwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1sYWJlbFwiPjwvbmctY29udGVudD5cbiAgICA8IS0tXG4gICAgICBXZSBzZXQgdGhlIHJlcXVpcmVkIG1hcmtlciBhcyBhIHNlcGFyYXRlIGVsZW1lbnQsIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHRhcmdldCBpZlxuICAgICAgYXBwcyB3YW50IHRvIG92ZXJyaWRlIGl0IGFuZCB0byBiZSBhYmxlIHRvIHNldCBgYXJpYS1oaWRkZW5gIHNvIHRoYXQgc2NyZWVuIHJlYWRlcnMgZG9uJ3RcbiAgICAgIHBpY2sgaXQgdXAuXG4gICAgIC0tPlxuICAgIDxzcGFuXG4gICAgICAqbmdJZj1cIiFoaWRlUmVxdWlyZWRNYXJrZXIgJiYgX2NvbnRyb2wucmVxdWlyZWRcIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgIGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLXJlcXVpcmVkLW1hcmtlciBtZGMtZmxvYXRpbmctbGFiZWwtLXJlcXVpcmVkXCI+PC9zcGFuPlxuICA8L2xhYmVsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cIm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyIG1kYy10ZXh0LWZpZWxkXCIgI3RleHRGaWVsZFxuICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWZpbGxlZF09XCIhX2hhc091dGxpbmUoKVwiXG4gICAgIFtjbGFzcy5tZGMtdGV4dC1maWVsZC0tb3V0bGluZWRdPVwiX2hhc091dGxpbmUoKVwiXG4gICAgIFtjbGFzcy5tZGMtdGV4dC1maWVsZC0tbm8tbGFiZWxdPVwiIV9oYXNGbG9hdGluZ0xhYmVsKClcIlxuICAgICBbY2xhc3MubWRjLXRleHQtZmllbGQtLWRpc2FibGVkXT1cIl9jb250cm9sLmRpc2FibGVkXCJcbiAgICAgW2NsYXNzLm1kYy10ZXh0LWZpZWxkLS1pbnZhbGlkXT1cIl9jb250cm9sLmVycm9yU3RhdGVcIlxuICAgICAoY2xpY2spPVwiX2NvbnRyb2wub25Db250YWluZXJDbGljayAmJiBfY29udHJvbC5vbkNvbnRhaW5lckNsaWNrKCRldmVudClcIj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1mb2N1cy1vdmVybGF5XCIgKm5nSWY9XCIhX2hhc091dGxpbmUoKSAmJiAhX2NvbnRyb2wuZGlzYWJsZWRcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1mbGV4XCI+XG4gICAgPGRpdiAqbmdJZj1cIl9oYXNPdXRsaW5lKClcIiBtYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZVxuICAgICAgICAgW21hdEZvcm1GaWVsZE5vdGNoZWRPdXRsaW5lT3Blbl09XCJfc2hvdWxkTGFiZWxGbG9hdCgpXCJcbiAgICAgICAgIFttYXRGb3JtRmllbGROb3RjaGVkT3V0bGluZUxhYmVsV2lkdGhdPVwiX2xhYmVsV2lkdGhcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhX2ZvcmNlRGlzcGxheUluZml4TGFiZWwoKVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibGFiZWxUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXByZWZpeFwiICpuZ0lmPVwiX2hhc0ljb25QcmVmaXhcIiAjaWNvblByZWZpeENvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRQcmVmaXhdLCBbbWF0SWNvblByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC10ZXh0LXByZWZpeFwiICpuZ0lmPVwiX2hhc1RleHRQcmVmaXhcIiAjdGV4dFByZWZpeENvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRUZXh0UHJlZml4XVwiPjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaW5maXhcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhX2hhc091dGxpbmUoKSB8fCBfZm9yY2VEaXNwbGF5SW5maXhMYWJlbCgpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJsYWJlbFRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtdGV4dC1zdWZmaXhcIiAqbmdJZj1cIl9oYXNUZXh0U3VmZml4XCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0VGV4dFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1pY29uLXN1ZmZpeFwiICpuZ0lmPVwiX2hhc0ljb25TdWZmaXhcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdLCBbbWF0SWNvblN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgbWF0Rm9ybUZpZWxkTGluZVJpcHBsZSAqbmdJZj1cIiFfaGFzT3V0bGluZSgpXCI+PC9kaXY+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtd3JhcHBlciBtYXQtbWRjLWZvcm0tZmllbGQtYm90dG9tLWFsaWduXCJcbiAgICAgW2NsYXNzLm1hdC1tZGMtZm9ybS1maWVsZC1zdWJzY3JpcHQtZHluYW1pYy1zaXplXT1cInN1YnNjcmlwdFNpemluZyA9PT0gJ2R5bmFtaWMnXCJcbiAgICAgW25nU3dpdGNoXT1cIl9nZXREaXNwbGF5ZWRNZXNzYWdlcygpXCI+XG4gIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtZXJyb3Itd3JhcHBlclwiICpuZ1N3aXRjaENhc2U9XCInZXJyb3InXCJcbiAgICAgICBbQHRyYW5zaXRpb25NZXNzYWdlc109XCJfc3Vic2NyaXB0QW5pbWF0aW9uU3RhdGVcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtZXJyb3JcIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyXCIgKm5nU3dpdGNoQ2FzZT1cIidoaW50J1wiXG4gICAgICAgW0B0cmFuc2l0aW9uTWVzc2FnZXNdPVwiX3N1YnNjcmlwdEFuaW1hdGlvblN0YXRlXCI+XG4gICAgPG1hdC1oaW50ICpuZ0lmPVwiaGludExhYmVsXCIgW2lkXT1cIl9oaW50TGFiZWxJZFwiPnt7aGludExhYmVsfX08L21hdC1oaW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1oaW50Om5vdChbYWxpZ249J2VuZCddKVwiPjwvbmctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtc3BhY2VyXCI+PC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnRbYWxpZ249J2VuZCddXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19