@payloadcms/ui 3.0.0-alpha.4 → 3.0.0-alpha.41

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 (889) hide show
  1. package/dist/@types/assets.d.js +0 -1
  2. package/dist/config.js +2 -12
  3. package/dist/elements/ArrayAction/index.d.ts +1 -1
  4. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  5. package/dist/elements/ArrayAction/index.js +25 -81
  6. package/dist/elements/ArrayAction/types.js +2 -5
  7. package/dist/elements/Autosave/index.d.ts +1 -1
  8. package/dist/elements/Autosave/index.d.ts.map +1 -1
  9. package/dist/elements/Autosave/index.js +37 -92
  10. package/dist/elements/Autosave/types.js +2 -5
  11. package/dist/elements/Banner/index.d.ts +1 -1
  12. package/dist/elements/Banner/index.d.ts.map +1 -1
  13. package/dist/elements/Banner/index.js +11 -34
  14. package/dist/elements/Banner/types.js +2 -5
  15. package/dist/elements/Button/index.d.ts +1 -1
  16. package/dist/elements/Button/index.d.ts.map +1 -1
  17. package/dist/elements/Button/index.js +34 -93
  18. package/dist/elements/Button/types.d.ts +1 -1
  19. package/dist/elements/Button/types.d.ts.map +1 -1
  20. package/dist/elements/Button/types.js +2 -5
  21. package/dist/elements/Card/index.d.ts +1 -1
  22. package/dist/elements/Card/index.d.ts.map +1 -1
  23. package/dist/elements/Card/index.js +9 -24
  24. package/dist/elements/Card/types.js +2 -5
  25. package/dist/elements/CodeEditor/CodeEditor.d.ts +1 -1
  26. package/dist/elements/CodeEditor/CodeEditor.d.ts.map +1 -1
  27. package/dist/elements/CodeEditor/CodeEditor.js +11 -25
  28. package/dist/elements/CodeEditor/index.d.ts +1 -1
  29. package/dist/elements/CodeEditor/index.d.ts.map +1 -1
  30. package/dist/elements/CodeEditor/index.js +8 -60
  31. package/dist/elements/CodeEditor/types.js +2 -5
  32. package/dist/elements/Collapsible/index.d.ts +1 -1
  33. package/dist/elements/Collapsible/index.d.ts.map +1 -1
  34. package/dist/elements/Collapsible/index.js +27 -82
  35. package/dist/elements/Collapsible/provider.js +7 -66
  36. package/dist/elements/Collapsible/types.d.ts +1 -1
  37. package/dist/elements/Collapsible/types.d.ts.map +1 -1
  38. package/dist/elements/Collapsible/types.js +2 -5
  39. package/dist/elements/ColumnSelector/index.d.ts +1 -1
  40. package/dist/elements/ColumnSelector/index.d.ts.map +1 -1
  41. package/dist/elements/ColumnSelector/index.js +20 -76
  42. package/dist/elements/ColumnSelector/types.js +2 -5
  43. package/dist/elements/CopyToClipboard/index.d.ts +1 -1
  44. package/dist/elements/CopyToClipboard/index.d.ts.map +1 -1
  45. package/dist/elements/CopyToClipboard/index.js +14 -65
  46. package/dist/elements/CopyToClipboard/types.js +2 -5
  47. package/dist/elements/DatePicker/DatePicker.d.ts +1 -1
  48. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  49. package/dist/elements/DatePicker/DatePicker.js +21 -81
  50. package/dist/elements/DatePicker/index.d.ts +2 -3
  51. package/dist/elements/DatePicker/index.d.ts.map +1 -1
  52. package/dist/elements/DatePicker/index.js +7 -60
  53. package/dist/elements/DatePicker/index.scss +3 -0
  54. package/dist/elements/DatePicker/types.js +2 -5
  55. package/dist/elements/DeleteDocument/index.d.ts +1 -1
  56. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  57. package/dist/elements/DeleteDocument/index.js +67 -117
  58. package/dist/elements/DeleteDocument/types.js +2 -5
  59. package/dist/elements/DeleteMany/index.d.ts +1 -1
  60. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  61. package/dist/elements/DeleteMany/index.js +47 -108
  62. package/dist/elements/DeleteMany/types.js +2 -5
  63. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  64. package/dist/elements/DocumentControls/index.js +50 -105
  65. package/dist/elements/DocumentDrawer/DrawerContent.d.ts +1 -1
  66. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  67. package/dist/elements/DocumentDrawer/DrawerContent.js +66 -117
  68. package/dist/elements/DocumentDrawer/index.d.ts +1 -1
  69. package/dist/elements/DocumentDrawer/index.d.ts.map +1 -1
  70. package/dist/elements/DocumentDrawer/index.js +34 -98
  71. package/dist/elements/DocumentDrawer/types.d.ts +2 -2
  72. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  73. package/dist/elements/DocumentDrawer/types.js +2 -5
  74. package/dist/elements/DocumentFields/index.d.ts +1 -1
  75. package/dist/elements/DocumentFields/index.d.ts.map +1 -1
  76. package/dist/elements/DocumentFields/index.js +16 -31
  77. package/dist/elements/DocumentHeader/Tabs/ShouldRenderTabs.js +4 -14
  78. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.d.ts.map +1 -1
  79. package/dist/elements/DocumentHeader/Tabs/Tab/TabLink.js +18 -26
  80. package/dist/elements/DocumentHeader/Tabs/Tab/index.js +9 -68
  81. package/dist/elements/DocumentHeader/Tabs/getCustomViews.js +5 -15
  82. package/dist/elements/DocumentHeader/Tabs/getViewConfig.js +2 -12
  83. package/dist/elements/DocumentHeader/Tabs/index.js +18 -33
  84. package/dist/elements/DocumentHeader/Tabs/tabs/VersionsPill/index.js +8 -23
  85. package/dist/elements/DocumentHeader/Tabs/tabs/index.js +5 -23
  86. package/dist/elements/DocumentHeader/index.d.ts +1 -0
  87. package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
  88. package/dist/elements/DocumentHeader/index.js +12 -71
  89. package/dist/elements/DraggableSortable/DraggableSortableItem/index.d.ts +1 -1
  90. package/dist/elements/DraggableSortable/DraggableSortableItem/index.d.ts.map +1 -1
  91. package/dist/elements/DraggableSortable/DraggableSortableItem/index.js +7 -66
  92. package/dist/elements/DraggableSortable/DraggableSortableItem/types.d.ts +1 -1
  93. package/dist/elements/DraggableSortable/DraggableSortableItem/types.d.ts.map +1 -1
  94. package/dist/elements/DraggableSortable/DraggableSortableItem/types.js +2 -5
  95. package/dist/elements/DraggableSortable/index.d.ts +1 -1
  96. package/dist/elements/DraggableSortable/index.d.ts.map +1 -1
  97. package/dist/elements/DraggableSortable/index.js +15 -66
  98. package/dist/elements/DraggableSortable/types.js +2 -5
  99. package/dist/elements/DraggableSortable/useDraggableSortable/index.d.ts +1 -1
  100. package/dist/elements/DraggableSortable/useDraggableSortable/index.d.ts.map +1 -1
  101. package/dist/elements/DraggableSortable/useDraggableSortable/index.js +4 -14
  102. package/dist/elements/DraggableSortable/useDraggableSortable/types.js +2 -5
  103. package/dist/elements/Drawer/index.d.ts +1 -1
  104. package/dist/elements/Drawer/index.d.ts.map +1 -1
  105. package/dist/elements/Drawer/index.js +34 -94
  106. package/dist/elements/Drawer/types.js +2 -5
  107. package/dist/elements/Drawer/useDrawerSlug.js +10 -20
  108. package/dist/elements/Dropzone/index.js +20 -35
  109. package/dist/elements/DuplicateDocument/index.d.ts +1 -1
  110. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  111. package/dist/elements/DuplicateDocument/index.js +35 -84
  112. package/dist/elements/DuplicateDocument/types.js +2 -5
  113. package/dist/elements/EditMany/index.d.ts +1 -1
  114. package/dist/elements/EditMany/index.d.ts.map +1 -1
  115. package/dist/elements/EditMany/index.js +77 -132
  116. package/dist/elements/EditMany/types.js +2 -5
  117. package/dist/elements/EditUpload/index.d.ts.map +1 -1
  118. package/dist/elements/EditUpload/index.js +74 -127
  119. package/dist/elements/ErrorPill/index.d.ts +1 -1
  120. package/dist/elements/ErrorPill/index.d.ts.map +1 -1
  121. package/dist/elements/ErrorPill/index.js +7 -22
  122. package/dist/elements/ErrorPill/types.js +2 -5
  123. package/dist/elements/FieldSelect/index.js +23 -79
  124. package/dist/elements/FileDetails/FileMeta/index.d.ts +1 -1
  125. package/dist/elements/FileDetails/FileMeta/index.d.ts.map +1 -1
  126. package/dist/elements/FileDetails/FileMeta/index.js +19 -75
  127. package/dist/elements/FileDetails/FileMeta/types.js +2 -5
  128. package/dist/elements/FileDetails/index.d.ts +1 -1
  129. package/dist/elements/FileDetails/index.d.ts.map +1 -1
  130. package/dist/elements/FileDetails/index.js +15 -30
  131. package/dist/elements/FileDetails/types.js +2 -5
  132. package/dist/elements/GenerateConfirmation/index.d.ts +1 -1
  133. package/dist/elements/GenerateConfirmation/index.d.ts.map +1 -1
  134. package/dist/elements/GenerateConfirmation/index.js +23 -37
  135. package/dist/elements/GenerateConfirmation/types.js +2 -5
  136. package/dist/elements/GetFilterOptions/index.d.ts +1 -1
  137. package/dist/elements/GetFilterOptions/index.d.ts.map +1 -1
  138. package/dist/elements/GetFilterOptions/index.js +18 -33
  139. package/dist/elements/Gutter/index.js +5 -56
  140. package/dist/elements/Hamburger/index.js +18 -33
  141. package/dist/elements/Header/index.d.ts.map +1 -1
  142. package/dist/elements/Header/index.js +40 -95
  143. package/dist/elements/HydrateClientUser/index.d.ts +1 -1
  144. package/dist/elements/HydrateClientUser/index.js +6 -16
  145. package/dist/elements/IDLabel/index.js +5 -20
  146. package/dist/elements/ListControls/getTextFieldsToBeSearched.js +6 -16
  147. package/dist/elements/ListControls/index.d.ts +1 -1
  148. package/dist/elements/ListControls/index.d.ts.map +1 -1
  149. package/dist/elements/ListControls/index.js +54 -104
  150. package/dist/elements/ListControls/types.d.ts +1 -1
  151. package/dist/elements/ListControls/types.d.ts.map +1 -1
  152. package/dist/elements/ListControls/types.js +2 -5
  153. package/dist/elements/ListDrawer/DrawerContent.d.ts +1 -1
  154. package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  155. package/dist/elements/ListDrawer/DrawerContent.js +74 -129
  156. package/dist/elements/ListDrawer/index.d.ts +1 -1
  157. package/dist/elements/ListDrawer/index.d.ts.map +1 -1
  158. package/dist/elements/ListDrawer/index.js +33 -100
  159. package/dist/elements/ListDrawer/types.d.ts +1 -1
  160. package/dist/elements/ListDrawer/types.d.ts.map +1 -1
  161. package/dist/elements/ListDrawer/types.js +2 -5
  162. package/dist/elements/ListSelection/index.js +11 -62
  163. package/dist/elements/Loading/index.d.ts +1 -1
  164. package/dist/elements/Loading/index.d.ts.map +1 -1
  165. package/dist/elements/Loading/index.js +29 -55
  166. package/dist/elements/LoadingOverlay/index.d.ts +1 -1
  167. package/dist/elements/LoadingOverlay/index.d.ts.map +1 -1
  168. package/dist/elements/LoadingOverlay/index.js +25 -87
  169. package/dist/elements/LoadingOverlay/reducer.d.ts +1 -1
  170. package/dist/elements/LoadingOverlay/reducer.d.ts.map +1 -1
  171. package/dist/elements/LoadingOverlay/reducer.js +6 -24
  172. package/dist/elements/LoadingOverlay/types.js +2 -5
  173. package/dist/elements/Localizer/LocalizerLabel/index.js +15 -30
  174. package/dist/elements/Localizer/index.d.ts.map +1 -1
  175. package/dist/elements/Localizer/index.js +35 -101
  176. package/dist/elements/Logout/index.d.ts +1 -0
  177. package/dist/elements/Logout/index.d.ts.map +1 -1
  178. package/dist/elements/Logout/index.js +19 -36
  179. package/dist/elements/Nav/NavHamburger/index.js +8 -23
  180. package/dist/elements/Nav/NavToggler/index.d.ts.map +1 -1
  181. package/dist/elements/Nav/NavToggler/index.js +14 -28
  182. package/dist/elements/Nav/NavWrapper/index.js +8 -23
  183. package/dist/elements/Nav/context.d.ts.map +1 -1
  184. package/dist/elements/Nav/context.js +21 -82
  185. package/dist/elements/Nav/index.d.ts.map +1 -1
  186. package/dist/elements/Nav/index.js +37 -51
  187. package/dist/elements/NavGroup/index.d.ts.map +1 -1
  188. package/dist/elements/NavGroup/index.js +24 -79
  189. package/dist/elements/Pagination/ClickableArrow/index.d.ts +1 -1
  190. package/dist/elements/Pagination/ClickableArrow/index.d.ts.map +1 -1
  191. package/dist/elements/Pagination/ClickableArrow/index.js +7 -22
  192. package/dist/elements/Pagination/ClickableArrow/types.js +2 -5
  193. package/dist/elements/Pagination/Page/index.d.ts +1 -1
  194. package/dist/elements/Pagination/Page/index.d.ts.map +1 -1
  195. package/dist/elements/Pagination/Page/index.js +4 -19
  196. package/dist/elements/Pagination/Page/types.js +2 -5
  197. package/dist/elements/Pagination/Separator/index.js +4 -19
  198. package/dist/elements/Pagination/index.d.ts +1 -1
  199. package/dist/elements/Pagination/index.d.ts.map +1 -1
  200. package/dist/elements/Pagination/index.js +28 -43
  201. package/dist/elements/Pagination/types.js +2 -5
  202. package/dist/elements/PerPage/index.js +28 -83
  203. package/dist/elements/Pill/index.d.ts +1 -1
  204. package/dist/elements/Pill/index.d.ts.map +1 -1
  205. package/dist/elements/Pill/index.js +17 -40
  206. package/dist/elements/Pill/types.js +2 -5
  207. package/dist/elements/Popup/PopupButtonList/index.d.ts +1 -1
  208. package/dist/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
  209. package/dist/elements/Popup/PopupButtonList/index.js +11 -75
  210. package/dist/elements/Popup/PopupTrigger/index.d.ts +1 -1
  211. package/dist/elements/Popup/PopupTrigger/index.d.ts.map +1 -1
  212. package/dist/elements/Popup/PopupTrigger/index.js +6 -21
  213. package/dist/elements/Popup/PopupTrigger/types.d.ts +1 -1
  214. package/dist/elements/Popup/PopupTrigger/types.js +2 -5
  215. package/dist/elements/Popup/index.d.ts +1 -1
  216. package/dist/elements/Popup/index.d.ts.map +1 -1
  217. package/dist/elements/Popup/index.js +30 -80
  218. package/dist/elements/Popup/types.js +2 -5
  219. package/dist/elements/PreviewButton/index.js +22 -73
  220. package/dist/elements/PreviewSizes/index.js +24 -80
  221. package/dist/elements/Publish/index.js +23 -79
  222. package/dist/elements/PublishMany/index.d.ts +1 -1
  223. package/dist/elements/PublishMany/index.d.ts.map +1 -1
  224. package/dist/elements/PublishMany/index.js +44 -98
  225. package/dist/elements/PublishMany/types.js +2 -5
  226. package/dist/elements/ReactSelect/ClearIndicator/index.d.ts +1 -1
  227. package/dist/elements/ReactSelect/ClearIndicator/index.d.ts.map +1 -1
  228. package/dist/elements/ReactSelect/ClearIndicator/index.js +7 -22
  229. package/dist/elements/ReactSelect/Control/index.d.ts +1 -1
  230. package/dist/elements/ReactSelect/Control/index.d.ts.map +1 -1
  231. package/dist/elements/ReactSelect/Control/index.js +6 -22
  232. package/dist/elements/ReactSelect/MultiValue/index.d.ts +1 -1
  233. package/dist/elements/ReactSelect/MultiValue/index.d.ts.map +1 -1
  234. package/dist/elements/ReactSelect/MultiValue/index.js +8 -23
  235. package/dist/elements/ReactSelect/MultiValueLabel/index.d.ts +1 -1
  236. package/dist/elements/ReactSelect/MultiValueLabel/index.d.ts.map +1 -1
  237. package/dist/elements/ReactSelect/MultiValueLabel/index.js +8 -23
  238. package/dist/elements/ReactSelect/MultiValueRemove/index.d.ts +1 -1
  239. package/dist/elements/ReactSelect/MultiValueRemove/index.d.ts.map +1 -1
  240. package/dist/elements/ReactSelect/MultiValueRemove/index.js +12 -27
  241. package/dist/elements/ReactSelect/SingleValue/index.d.ts +1 -1
  242. package/dist/elements/ReactSelect/SingleValue/index.d.ts.map +1 -1
  243. package/dist/elements/ReactSelect/SingleValue/index.js +5 -20
  244. package/dist/elements/ReactSelect/ValueContainer/index.d.ts +1 -1
  245. package/dist/elements/ReactSelect/ValueContainer/index.d.ts.map +1 -1
  246. package/dist/elements/ReactSelect/ValueContainer/index.js +8 -23
  247. package/dist/elements/ReactSelect/index.d.ts +1 -1
  248. package/dist/elements/ReactSelect/index.d.ts.map +1 -1
  249. package/dist/elements/ReactSelect/index.js +45 -60
  250. package/dist/elements/ReactSelect/types.d.ts +2 -2
  251. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  252. package/dist/elements/ReactSelect/types.js +2 -5
  253. package/dist/elements/RenderCustomComponent/index.js +5 -20
  254. package/dist/elements/RenderCustomComponent/types.js +2 -5
  255. package/dist/elements/RenderTitle/index.d.ts +1 -1
  256. package/dist/elements/RenderTitle/index.d.ts.map +1 -1
  257. package/dist/elements/RenderTitle/index.js +12 -26
  258. package/dist/elements/RenderTitle/types.d.ts +1 -3
  259. package/dist/elements/RenderTitle/types.d.ts.map +1 -1
  260. package/dist/elements/RenderTitle/types.js +2 -5
  261. package/dist/elements/Save/index.js +16 -72
  262. package/dist/elements/SaveDraft/index.js +24 -80
  263. package/dist/elements/SearchFilter/index.d.ts +1 -1
  264. package/dist/elements/SearchFilter/index.d.ts.map +1 -1
  265. package/dist/elements/SearchFilter/index.js +31 -86
  266. package/dist/elements/SearchFilter/types.js +2 -5
  267. package/dist/elements/SelectAll/index.js +13 -28
  268. package/dist/elements/SelectRow/index.js +10 -25
  269. package/dist/elements/ShimmerEffect/index.js +12 -71
  270. package/dist/elements/SortColumn/index.d.ts +1 -1
  271. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  272. package/dist/elements/SortColumn/index.js +27 -90
  273. package/dist/elements/SortColumn/types.js +2 -5
  274. package/dist/elements/SortComplex/index.d.ts +1 -1
  275. package/dist/elements/SortComplex/index.d.ts.map +1 -1
  276. package/dist/elements/SortComplex/index.js +35 -90
  277. package/dist/elements/SortComplex/types.js +2 -5
  278. package/dist/elements/Status/index.d.ts.map +1 -1
  279. package/dist/elements/Status/index.js +56 -110
  280. package/dist/elements/StayLoggedIn/index.d.ts +1 -1
  281. package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
  282. package/dist/elements/StayLoggedIn/index.js +21 -34
  283. package/dist/elements/StayLoggedIn/types.js +2 -5
  284. package/dist/elements/StepNav/SetStepNav.d.ts +2 -2
  285. package/dist/elements/StepNav/SetStepNav.d.ts.map +1 -1
  286. package/dist/elements/StepNav/SetStepNav.js +6 -16
  287. package/dist/elements/StepNav/index.d.ts +1 -1
  288. package/dist/elements/StepNav/index.d.ts.map +1 -1
  289. package/dist/elements/StepNav/index.js +27 -93
  290. package/dist/elements/StepNav/types.js +2 -5
  291. package/dist/elements/Table/TableCellProvider/index.js +9 -32
  292. package/dist/elements/Table/index.d.ts +1 -1
  293. package/dist/elements/Table/index.d.ts.map +1 -1
  294. package/dist/elements/Table/index.js +15 -38
  295. package/dist/elements/Table/types.js +2 -5
  296. package/dist/elements/TableColumns/buildColumns.d.ts +3 -3
  297. package/dist/elements/TableColumns/buildColumns.d.ts.map +1 -1
  298. package/dist/elements/TableColumns/buildColumns.js +7 -16
  299. package/dist/elements/TableColumns/columnReducer.d.ts +1 -1
  300. package/dist/elements/TableColumns/columnReducer.d.ts.map +1 -1
  301. package/dist/elements/TableColumns/columnReducer.js +2 -12
  302. package/dist/elements/TableColumns/index.d.ts +3 -3
  303. package/dist/elements/TableColumns/index.d.ts.map +1 -1
  304. package/dist/elements/TableColumns/index.js +24 -86
  305. package/dist/elements/Thumbnail/index.d.ts +1 -1
  306. package/dist/elements/Thumbnail/index.d.ts.map +1 -1
  307. package/dist/elements/Thumbnail/index.js +12 -68
  308. package/dist/elements/Thumbnail/types.js +2 -5
  309. package/dist/elements/ThumbnailCard/index.d.ts +1 -1
  310. package/dist/elements/ThumbnailCard/index.d.ts.map +1 -1
  311. package/dist/elements/ThumbnailCard/index.js +13 -28
  312. package/dist/elements/ThumbnailCard/types.d.ts +1 -1
  313. package/dist/elements/ThumbnailCard/types.js +2 -5
  314. package/dist/elements/Tooltip/index.d.ts +1 -1
  315. package/dist/elements/Tooltip/index.d.ts.map +1 -1
  316. package/dist/elements/Tooltip/index.js +14 -65
  317. package/dist/elements/Tooltip/types.d.ts +1 -1
  318. package/dist/elements/Tooltip/types.js +2 -5
  319. package/dist/elements/Translation/index.js +7 -58
  320. package/dist/elements/UnpublishMany/index.d.ts +1 -1
  321. package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
  322. package/dist/elements/UnpublishMany/index.js +45 -99
  323. package/dist/elements/UnpublishMany/types.js +2 -5
  324. package/dist/elements/Upload/index.d.ts +1 -1
  325. package/dist/elements/Upload/index.d.ts.map +1 -1
  326. package/dist/elements/Upload/index.js +55 -127
  327. package/dist/elements/Upload/types.d.ts +1 -2
  328. package/dist/elements/Upload/types.d.ts.map +1 -1
  329. package/dist/elements/Upload/types.js +2 -5
  330. package/dist/elements/ViewDescription/index.d.ts +1 -1
  331. package/dist/elements/ViewDescription/index.d.ts.map +1 -1
  332. package/dist/elements/ViewDescription/index.js +12 -27
  333. package/dist/elements/ViewDescription/types.js +4 -19
  334. package/dist/elements/WhereBuilder/Condition/Date/index.d.ts +2 -3
  335. package/dist/elements/WhereBuilder/Condition/Date/index.d.ts.map +1 -1
  336. package/dist/elements/WhereBuilder/Condition/Date/index.js +6 -22
  337. package/dist/elements/WhereBuilder/Condition/Date/types.d.ts +1 -1
  338. package/dist/elements/WhereBuilder/Condition/Date/types.d.ts.map +1 -1
  339. package/dist/elements/WhereBuilder/Condition/Date/types.js +2 -5
  340. package/dist/elements/WhereBuilder/Condition/Number/index.d.ts +1 -1
  341. package/dist/elements/WhereBuilder/Condition/Number/index.d.ts.map +1 -1
  342. package/dist/elements/WhereBuilder/Condition/Number/index.js +7 -22
  343. package/dist/elements/WhereBuilder/Condition/Number/types.js +2 -5
  344. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts +1 -1
  345. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  346. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +32 -88
  347. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.d.ts +1 -1
  348. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.d.ts.map +1 -1
  349. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.js +5 -15
  350. package/dist/elements/WhereBuilder/Condition/Relationship/types.js +2 -5
  351. package/dist/elements/WhereBuilder/Condition/Select/index.d.ts +1 -1
  352. package/dist/elements/WhereBuilder/Condition/Select/index.d.ts.map +1 -1
  353. package/dist/elements/WhereBuilder/Condition/Select/index.js +15 -30
  354. package/dist/elements/WhereBuilder/Condition/Select/types.js +2 -5
  355. package/dist/elements/WhereBuilder/Condition/Text/index.d.ts +1 -1
  356. package/dist/elements/WhereBuilder/Condition/Text/index.d.ts.map +1 -1
  357. package/dist/elements/WhereBuilder/Condition/Text/index.js +7 -22
  358. package/dist/elements/WhereBuilder/Condition/Text/types.js +2 -5
  359. package/dist/elements/WhereBuilder/Condition/index.d.ts +1 -1
  360. package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  361. package/dist/elements/WhereBuilder/Condition/index.js +47 -103
  362. package/dist/elements/WhereBuilder/Condition/types.d.ts +1 -1
  363. package/dist/elements/WhereBuilder/Condition/types.d.ts.map +1 -1
  364. package/dist/elements/WhereBuilder/Condition/types.js +2 -5
  365. package/dist/elements/WhereBuilder/field-types.js +2 -12
  366. package/dist/elements/WhereBuilder/index.d.ts +1 -1
  367. package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
  368. package/dist/elements/WhereBuilder/index.js +43 -98
  369. package/dist/elements/WhereBuilder/reducer.d.ts +1 -1
  370. package/dist/elements/WhereBuilder/reducer.d.ts.map +1 -1
  371. package/dist/elements/WhereBuilder/reducer.js +2 -12
  372. package/dist/elements/WhereBuilder/transformWhereQuery.js +6 -12
  373. package/dist/elements/WhereBuilder/types.js +2 -5
  374. package/dist/elements/WhereBuilder/validateWhereQuery.js +4 -14
  375. package/dist/exports/assets.js +3 -26
  376. package/dist/exports/elements.d.ts +55 -48
  377. package/dist/exports/elements.d.ts.map +1 -1
  378. package/dist/exports/elements.js +52 -245
  379. package/dist/exports/forms.d.ts +40 -39
  380. package/dist/exports/forms.d.ts.map +1 -1
  381. package/dist/exports/forms.js +36 -157
  382. package/dist/exports/graphics.d.ts +2 -2
  383. package/dist/exports/graphics.d.ts.map +1 -1
  384. package/dist/exports/graphics.js +3 -26
  385. package/dist/exports/hooks.d.ts +11 -9
  386. package/dist/exports/hooks.d.ts.map +1 -1
  387. package/dist/exports/hooks.js +18 -54
  388. package/dist/exports/icons.d.ts +17 -17
  389. package/dist/exports/icons.d.ts.map +1 -1
  390. package/dist/exports/icons.js +18 -81
  391. package/dist/exports/index.d.ts +9 -9
  392. package/dist/exports/index.d.ts.map +1 -1
  393. package/dist/exports/index.js +10 -27
  394. package/dist/exports/providers.d.ts +25 -26
  395. package/dist/exports/providers.d.ts.map +1 -1
  396. package/dist/exports/providers.js +22 -115
  397. package/dist/exports/templates.d.ts +2 -2
  398. package/dist/exports/templates.d.ts.map +1 -1
  399. package/dist/exports/templates.js +3 -21
  400. package/dist/exports/types.d.ts +2 -1
  401. package/dist/exports/types.d.ts.map +1 -1
  402. package/dist/exports/types.js +2 -5
  403. package/dist/exports/utilities.d.ts +13 -13
  404. package/dist/exports/utilities.d.ts.map +1 -1
  405. package/dist/exports/utilities.js +11 -61
  406. package/dist/forms/Error/index.js +11 -26
  407. package/dist/forms/FieldDescription/index.d.ts +1 -1
  408. package/dist/forms/FieldDescription/index.d.ts.map +1 -1
  409. package/dist/forms/FieldDescription/index.js +9 -24
  410. package/dist/forms/FieldDescription/types.js +2 -5
  411. package/dist/forms/FieldPathProvider/index.d.ts.map +1 -1
  412. package/dist/forms/FieldPathProvider/index.js +7 -30
  413. package/dist/forms/Form/buildFieldSchemaMap.js +14 -14
  414. package/dist/forms/Form/context.d.ts +2 -2
  415. package/dist/forms/Form/context.d.ts.map +1 -1
  416. package/dist/forms/Form/context.js +17 -67
  417. package/dist/forms/Form/createNestedFieldPath.js +5 -15
  418. package/dist/forms/Form/errorMessages.js +2 -12
  419. package/dist/forms/Form/fieldReducer.d.ts +2 -1
  420. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  421. package/dist/forms/Form/fieldReducer.js +26 -38
  422. package/dist/forms/Form/getDataByPath.d.ts +1 -1
  423. package/dist/forms/Form/getDataByPath.d.ts.map +1 -1
  424. package/dist/forms/Form/getDataByPath.js +5 -14
  425. package/dist/forms/Form/getSiblingData.d.ts +1 -2
  426. package/dist/forms/Form/getSiblingData.d.ts.map +1 -1
  427. package/dist/forms/Form/getSiblingData.js +7 -21
  428. package/dist/forms/Form/index.d.ts +1 -1
  429. package/dist/forms/Form/index.d.ts.map +1 -1
  430. package/dist/forms/Form/index.js +123 -177
  431. package/dist/forms/Form/initContextState.d.ts +1 -1
  432. package/dist/forms/Form/initContextState.d.ts.map +1 -1
  433. package/dist/forms/Form/initContextState.js +2 -12
  434. package/dist/forms/Form/mergeServerFormState.d.ts +1 -1
  435. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  436. package/dist/forms/Form/mergeServerFormState.js +5 -15
  437. package/dist/forms/Form/reduceFieldsToValues.d.ts +1 -2
  438. package/dist/forms/Form/reduceFieldsToValues.d.ts.map +1 -1
  439. package/dist/forms/Form/reduceFieldsToValues.js +5 -14
  440. package/dist/forms/Form/rows.d.ts +1 -1
  441. package/dist/forms/Form/rows.d.ts.map +1 -1
  442. package/dist/forms/Form/rows.js +3 -21
  443. package/dist/forms/Form/types.d.ts +2 -23
  444. package/dist/forms/Form/types.d.ts.map +1 -1
  445. package/dist/forms/Form/types.js +2 -5
  446. package/dist/forms/Label/index.js +9 -24
  447. package/dist/forms/NullifyField/index.d.ts.map +1 -1
  448. package/dist/forms/NullifyField/index.js +16 -72
  449. package/dist/forms/ReadOnlyProvider/index.d.ts +7 -0
  450. package/dist/forms/ReadOnlyProvider/index.d.ts.map +1 -0
  451. package/dist/forms/ReadOnlyProvider/index.js +15 -0
  452. package/dist/forms/RenderFields/RenderField.d.ts +3 -0
  453. package/dist/forms/RenderFields/RenderField.d.ts.map +1 -1
  454. package/dist/forms/RenderFields/RenderField.js +27 -23
  455. package/dist/forms/RenderFields/index.d.ts +1 -1
  456. package/dist/forms/RenderFields/index.d.ts.map +1 -1
  457. package/dist/forms/RenderFields/index.js +16 -29
  458. package/dist/forms/RenderFields/types.d.ts +3 -1
  459. package/dist/forms/RenderFields/types.d.ts.map +1 -1
  460. package/dist/forms/RenderFields/types.js +2 -5
  461. package/dist/forms/RowLabel/index.d.ts +1 -1
  462. package/dist/forms/RowLabel/index.d.ts.map +1 -1
  463. package/dist/forms/RowLabel/index.js +13 -28
  464. package/dist/forms/RowLabel/types.d.ts +1 -2
  465. package/dist/forms/RowLabel/types.d.ts.map +1 -1
  466. package/dist/forms/RowLabel/types.js +4 -19
  467. package/dist/forms/Submit/index.d.ts +1 -1
  468. package/dist/forms/Submit/index.d.ts.map +1 -1
  469. package/dist/forms/Submit/index.js +11 -62
  470. package/dist/forms/WatchChildErrors/buildPathSegments.d.ts +1 -1
  471. package/dist/forms/WatchChildErrors/buildPathSegments.d.ts.map +1 -1
  472. package/dist/forms/WatchChildErrors/buildPathSegments.js +2 -12
  473. package/dist/forms/WatchChildErrors/getFieldStateFromPaths.d.ts +1 -1
  474. package/dist/forms/WatchChildErrors/getFieldStateFromPaths.js +2 -12
  475. package/dist/forms/WatchChildErrors/getNestedFieldState.d.ts +1 -2
  476. package/dist/forms/WatchChildErrors/getNestedFieldState.d.ts.map +1 -1
  477. package/dist/forms/WatchChildErrors/getNestedFieldState.js +5 -14
  478. package/dist/forms/WatchChildErrors/index.d.ts +1 -1
  479. package/dist/forms/WatchChildErrors/index.d.ts.map +1 -1
  480. package/dist/forms/WatchChildErrors/index.js +11 -26
  481. package/dist/forms/fields/Array/ArrayRow.d.ts +3 -4
  482. package/dist/forms/fields/Array/ArrayRow.d.ts.map +1 -1
  483. package/dist/forms/fields/Array/ArrayRow.js +24 -39
  484. package/dist/forms/fields/Array/index.d.ts +1 -1
  485. package/dist/forms/fields/Array/index.d.ts.map +1 -1
  486. package/dist/forms/fields/Array/index.js +59 -115
  487. package/dist/forms/fields/Array/types.d.ts +1 -1
  488. package/dist/forms/fields/Array/types.d.ts.map +1 -1
  489. package/dist/forms/fields/Array/types.js +2 -5
  490. package/dist/forms/fields/Blocks/BlockRow.d.ts +3 -4
  491. package/dist/forms/fields/Blocks/BlockRow.d.ts.map +1 -1
  492. package/dist/forms/fields/Blocks/BlockRow.js +27 -42
  493. package/dist/forms/fields/Blocks/BlocksDrawer/BlockSearch/index.js +10 -25
  494. package/dist/forms/fields/Blocks/BlocksDrawer/index.d.ts +1 -1
  495. package/dist/forms/fields/Blocks/BlocksDrawer/index.d.ts.map +1 -1
  496. package/dist/forms/fields/Blocks/BlocksDrawer/index.js +30 -85
  497. package/dist/forms/fields/Blocks/BlocksDrawer/types.d.ts +1 -1
  498. package/dist/forms/fields/Blocks/BlocksDrawer/types.d.ts.map +1 -1
  499. package/dist/forms/fields/Blocks/BlocksDrawer/types.js +2 -5
  500. package/dist/forms/fields/Blocks/RowActions.d.ts +1 -1
  501. package/dist/forms/fields/Blocks/RowActions.d.ts.map +1 -1
  502. package/dist/forms/fields/Blocks/RowActions.js +13 -27
  503. package/dist/forms/fields/Blocks/SectionTitle/index.d.ts +1 -1
  504. package/dist/forms/fields/Blocks/SectionTitle/index.d.ts.map +1 -1
  505. package/dist/forms/fields/Blocks/SectionTitle/index.js +10 -25
  506. package/dist/forms/fields/Blocks/SectionTitle/types.d.ts +1 -1
  507. package/dist/forms/fields/Blocks/SectionTitle/types.js +2 -5
  508. package/dist/forms/fields/Blocks/index.d.ts +1 -1
  509. package/dist/forms/fields/Blocks/index.d.ts.map +1 -1
  510. package/dist/forms/fields/Blocks/index.js +78 -133
  511. package/dist/forms/fields/Blocks/types.d.ts +1 -1
  512. package/dist/forms/fields/Blocks/types.d.ts.map +1 -1
  513. package/dist/forms/fields/Blocks/types.js +2 -5
  514. package/dist/forms/fields/Checkbox/Input.js +11 -34
  515. package/dist/forms/fields/Checkbox/index.d.ts +1 -1
  516. package/dist/forms/fields/Checkbox/index.d.ts.map +1 -1
  517. package/dist/forms/fields/Checkbox/index.js +19 -75
  518. package/dist/forms/fields/Checkbox/types.d.ts +1 -1
  519. package/dist/forms/fields/Checkbox/types.d.ts.map +1 -1
  520. package/dist/forms/fields/Checkbox/types.js +2 -5
  521. package/dist/forms/fields/Code/index.d.ts +1 -1
  522. package/dist/forms/fields/Code/index.d.ts.map +1 -1
  523. package/dist/forms/fields/Code/index.js +15 -71
  524. package/dist/forms/fields/Code/types.d.ts +1 -1
  525. package/dist/forms/fields/Code/types.d.ts.map +1 -1
  526. package/dist/forms/fields/Code/types.js +2 -5
  527. package/dist/forms/fields/Collapsible/index.d.ts +1 -1
  528. package/dist/forms/fields/Collapsible/index.d.ts.map +1 -1
  529. package/dist/forms/fields/Collapsible/index.js +31 -87
  530. package/dist/forms/fields/Collapsible/types.d.ts +1 -1
  531. package/dist/forms/fields/Collapsible/types.d.ts.map +1 -1
  532. package/dist/forms/fields/Collapsible/types.js +2 -5
  533. package/dist/forms/fields/ConfirmPassword/index.d.ts +1 -1
  534. package/dist/forms/fields/ConfirmPassword/index.d.ts.map +1 -1
  535. package/dist/forms/fields/ConfirmPassword/index.js +19 -75
  536. package/dist/forms/fields/ConfirmPassword/types.js +2 -5
  537. package/dist/forms/fields/DateTime/index.d.ts +1 -1
  538. package/dist/forms/fields/DateTime/index.d.ts.map +1 -1
  539. package/dist/forms/fields/DateTime/index.js +18 -74
  540. package/dist/forms/fields/DateTime/types.d.ts +1 -1
  541. package/dist/forms/fields/DateTime/types.d.ts.map +1 -1
  542. package/dist/forms/fields/DateTime/types.js +2 -5
  543. package/dist/forms/fields/Email/index.d.ts +1 -1
  544. package/dist/forms/fields/Email/index.d.ts.map +1 -1
  545. package/dist/forms/fields/Email/index.js +19 -83
  546. package/dist/forms/fields/Email/types.d.ts +1 -1
  547. package/dist/forms/fields/Email/types.d.ts.map +1 -1
  548. package/dist/forms/fields/Email/types.js +2 -5
  549. package/dist/forms/fields/Group/index.d.ts +1 -1
  550. package/dist/forms/fields/Group/index.d.ts.map +1 -1
  551. package/dist/forms/fields/Group/index.js +32 -88
  552. package/dist/forms/fields/Group/provider.js +7 -69
  553. package/dist/forms/fields/Group/types.d.ts +1 -1
  554. package/dist/forms/fields/Group/types.d.ts.map +1 -1
  555. package/dist/forms/fields/Group/types.js +2 -5
  556. package/dist/forms/fields/HiddenInput/index.d.ts +1 -1
  557. package/dist/forms/fields/HiddenInput/index.d.ts.map +1 -1
  558. package/dist/forms/fields/HiddenInput/index.js +8 -64
  559. package/dist/forms/fields/HiddenInput/types.js +2 -5
  560. package/dist/forms/fields/JSON/index.d.ts +1 -1
  561. package/dist/forms/fields/JSON/index.d.ts.map +1 -1
  562. package/dist/forms/fields/JSON/index.js +20 -76
  563. package/dist/forms/fields/JSON/types.d.ts +1 -1
  564. package/dist/forms/fields/JSON/types.d.ts.map +1 -1
  565. package/dist/forms/fields/JSON/types.js +2 -5
  566. package/dist/forms/fields/Number/index.d.ts +1 -1
  567. package/dist/forms/fields/Number/index.d.ts.map +1 -1
  568. package/dist/forms/fields/Number/index.js +26 -82
  569. package/dist/forms/fields/Number/types.d.ts +1 -1
  570. package/dist/forms/fields/Number/types.d.ts.map +1 -1
  571. package/dist/forms/fields/Number/types.js +2 -5
  572. package/dist/forms/fields/Password/index.d.ts +1 -1
  573. package/dist/forms/fields/Password/index.d.ts.map +1 -1
  574. package/dist/forms/fields/Password/index.js +15 -79
  575. package/dist/forms/fields/Password/types.d.ts +1 -1
  576. package/dist/forms/fields/Password/types.d.ts.map +1 -1
  577. package/dist/forms/fields/Password/types.js +2 -5
  578. package/dist/forms/fields/Point/index.d.ts +1 -1
  579. package/dist/forms/fields/Point/index.d.ts.map +1 -1
  580. package/dist/forms/fields/Point/index.js +24 -80
  581. package/dist/forms/fields/Point/types.d.ts +1 -1
  582. package/dist/forms/fields/Point/types.d.ts.map +1 -1
  583. package/dist/forms/fields/Point/types.js +2 -5
  584. package/dist/forms/fields/RadioGroup/Radio/index.d.ts +1 -1
  585. package/dist/forms/fields/RadioGroup/Radio/index.d.ts.map +1 -1
  586. package/dist/forms/fields/RadioGroup/Radio/index.js +13 -28
  587. package/dist/forms/fields/RadioGroup/index.d.ts +1 -1
  588. package/dist/forms/fields/RadioGroup/index.d.ts.map +1 -1
  589. package/dist/forms/fields/RadioGroup/index.js +23 -79
  590. package/dist/forms/fields/RadioGroup/types.d.ts +1 -1
  591. package/dist/forms/fields/RadioGroup/types.d.ts.map +1 -1
  592. package/dist/forms/fields/RadioGroup/types.js +2 -5
  593. package/dist/forms/fields/Relationship/AddNew/index.d.ts +1 -1
  594. package/dist/forms/fields/Relationship/AddNew/index.d.ts.map +1 -1
  595. package/dist/forms/fields/Relationship/AddNew/index.js +43 -99
  596. package/dist/forms/fields/Relationship/AddNew/types.d.ts +1 -1
  597. package/dist/forms/fields/Relationship/AddNew/types.d.ts.map +1 -1
  598. package/dist/forms/fields/Relationship/AddNew/types.js +2 -5
  599. package/dist/forms/fields/Relationship/AddNew/useRelatedCollections.js +6 -16
  600. package/dist/forms/fields/Relationship/createRelationMap.d.ts +1 -1
  601. package/dist/forms/fields/Relationship/createRelationMap.d.ts.map +1 -1
  602. package/dist/forms/fields/Relationship/createRelationMap.js +2 -12
  603. package/dist/forms/fields/Relationship/findOptionsByValue.d.ts +2 -2
  604. package/dist/forms/fields/Relationship/findOptionsByValue.d.ts.map +1 -1
  605. package/dist/forms/fields/Relationship/findOptionsByValue.js +2 -12
  606. package/dist/forms/fields/Relationship/index.d.ts +1 -1
  607. package/dist/forms/fields/Relationship/index.d.ts.map +1 -1
  608. package/dist/forms/fields/Relationship/index.js +64 -120
  609. package/dist/forms/fields/Relationship/optionsReducer.d.ts +1 -1
  610. package/dist/forms/fields/Relationship/optionsReducer.d.ts.map +1 -1
  611. package/dist/forms/fields/Relationship/optionsReducer.js +7 -17
  612. package/dist/forms/fields/Relationship/select-components/MultiValueLabel/index.d.ts +1 -1
  613. package/dist/forms/fields/Relationship/select-components/MultiValueLabel/index.d.ts.map +1 -1
  614. package/dist/forms/fields/Relationship/select-components/MultiValueLabel/index.js +21 -72
  615. package/dist/forms/fields/Relationship/select-components/SingleValue/index.d.ts +1 -1
  616. package/dist/forms/fields/Relationship/select-components/SingleValue/index.d.ts.map +1 -1
  617. package/dist/forms/fields/Relationship/select-components/SingleValue/index.js +22 -73
  618. package/dist/forms/fields/Relationship/types.d.ts +1 -1
  619. package/dist/forms/fields/Relationship/types.d.ts.map +1 -1
  620. package/dist/forms/fields/Relationship/types.js +2 -5
  621. package/dist/forms/fields/RichText/index.d.ts +1 -1
  622. package/dist/forms/fields/RichText/index.d.ts.map +1 -1
  623. package/dist/forms/fields/RichText/index.js +2 -12
  624. package/dist/forms/fields/RichText/types.d.ts +1 -1
  625. package/dist/forms/fields/RichText/types.d.ts.map +1 -1
  626. package/dist/forms/fields/RichText/types.js +2 -5
  627. package/dist/forms/fields/Row/index.d.ts +1 -1
  628. package/dist/forms/fields/Row/index.d.ts.map +1 -1
  629. package/dist/forms/fields/Row/index.js +11 -26
  630. package/dist/forms/fields/Row/provider.js +7 -69
  631. package/dist/forms/fields/Row/types.d.ts +1 -1
  632. package/dist/forms/fields/Row/types.d.ts.map +1 -1
  633. package/dist/forms/fields/Row/types.js +2 -5
  634. package/dist/forms/fields/Select/index.d.ts +1 -1
  635. package/dist/forms/fields/Select/index.d.ts.map +1 -1
  636. package/dist/forms/fields/Select/index.js +24 -88
  637. package/dist/forms/fields/Select/types.d.ts +1 -1
  638. package/dist/forms/fields/Select/types.d.ts.map +1 -1
  639. package/dist/forms/fields/Select/types.js +2 -5
  640. package/dist/forms/fields/Tabs/Tab/index.d.ts +1 -1
  641. package/dist/forms/fields/Tabs/Tab/index.d.ts.map +1 -1
  642. package/dist/forms/fields/Tabs/Tab/index.js +13 -64
  643. package/dist/forms/fields/Tabs/index.d.ts +1 -1
  644. package/dist/forms/fields/Tabs/index.d.ts.map +1 -1
  645. package/dist/forms/fields/Tabs/index.js +35 -91
  646. package/dist/forms/fields/Tabs/provider.js +7 -69
  647. package/dist/forms/fields/Tabs/types.d.ts +1 -1
  648. package/dist/forms/fields/Tabs/types.d.ts.map +1 -1
  649. package/dist/forms/fields/Tabs/types.js +2 -5
  650. package/dist/forms/fields/Text/Input.d.ts +18 -0
  651. package/dist/forms/fields/Text/Input.d.ts.map +1 -0
  652. package/dist/forms/fields/Text/Input.js +62 -0
  653. package/dist/forms/fields/Text/index.d.ts +1 -1
  654. package/dist/forms/fields/Text/index.d.ts.map +1 -1
  655. package/dist/forms/fields/Text/index.js +44 -129
  656. package/dist/forms/fields/Text/types.d.ts +4 -4
  657. package/dist/forms/fields/Text/types.d.ts.map +1 -1
  658. package/dist/forms/fields/Text/types.js +2 -5
  659. package/dist/forms/fields/Textarea/Input.d.ts +11 -0
  660. package/dist/forms/fields/Textarea/Input.d.ts.map +1 -0
  661. package/dist/forms/fields/Textarea/Input.js +43 -0
  662. package/dist/forms/fields/Textarea/index.d.ts +1 -1
  663. package/dist/forms/fields/Textarea/index.d.ts.map +1 -1
  664. package/dist/forms/fields/Textarea/index.js +39 -104
  665. package/dist/forms/fields/Textarea/types.d.ts +1 -1
  666. package/dist/forms/fields/Textarea/types.d.ts.map +1 -1
  667. package/dist/forms/fields/Textarea/types.js +2 -5
  668. package/dist/forms/fields/UI/index.js +2 -12
  669. package/dist/forms/fields/Upload/Input.d.ts +15 -1
  670. package/dist/forms/fields/Upload/Input.d.ts.map +1 -1
  671. package/dist/forms/fields/Upload/Input.js +127 -2
  672. package/dist/forms/fields/Upload/index.d.ts +1 -1
  673. package/dist/forms/fields/Upload/index.d.ts.map +1 -1
  674. package/dist/forms/fields/Upload/index.js +32 -180
  675. package/dist/forms/fields/Upload/types.d.ts +1 -1
  676. package/dist/forms/fields/Upload/types.d.ts.map +1 -1
  677. package/dist/forms/fields/Upload/types.js +2 -5
  678. package/dist/forms/fields/getFilterOptionsQuery.js +2 -12
  679. package/dist/forms/fields/index.js +50 -65
  680. package/dist/forms/fields/shared.d.ts +5 -5
  681. package/dist/forms/fields/shared.d.ts.map +1 -1
  682. package/dist/forms/fields/shared.js +7 -21
  683. package/dist/forms/useField/index.d.ts +1 -1
  684. package/dist/forms/useField/index.d.ts.map +1 -1
  685. package/dist/forms/useField/index.js +30 -41
  686. package/dist/forms/useField/types.d.ts +2 -2
  687. package/dist/forms/useField/types.d.ts.map +1 -1
  688. package/dist/forms/useField/types.js +2 -5
  689. package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.d.ts +1 -2
  690. package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
  691. package/dist/forms/utilities/buildStateFromSchema/addFieldStatePromise.js +22 -33
  692. package/dist/forms/utilities/buildStateFromSchema/buildStateFromSchema.spec.js +11 -20
  693. package/dist/forms/utilities/buildStateFromSchema/index.d.ts +1 -2
  694. package/dist/forms/utilities/buildStateFromSchema/index.d.ts.map +1 -1
  695. package/dist/forms/utilities/buildStateFromSchema/index.js +4 -14
  696. package/dist/forms/utilities/buildStateFromSchema/iterateFields.d.ts +2 -3
  697. package/dist/forms/utilities/buildStateFromSchema/iterateFields.d.ts.map +1 -1
  698. package/dist/forms/utilities/buildStateFromSchema/iterateFields.js +8 -16
  699. package/dist/forms/withCondition/WatchCondition.js +7 -57
  700. package/dist/forms/withCondition/index.js +8 -23
  701. package/dist/graphics/Account/Default/index.js +7 -22
  702. package/dist/graphics/Account/Gravatar/index.js +10 -25
  703. package/dist/graphics/Account/index.js +15 -30
  704. package/dist/graphics/DefaultBlockImage/index.js +11 -62
  705. package/dist/graphics/ExternalLink/index.js +5 -20
  706. package/dist/graphics/File/index.js +7 -22
  707. package/dist/graphics/Icon/index.d.ts.map +1 -1
  708. package/dist/graphics/Icon/index.js +15 -33
  709. package/dist/graphics/Logo/index.js +15 -30
  710. package/dist/graphics/Search/index.js +6 -21
  711. package/dist/hooks/useAdminThumbnail.d.ts.map +1 -1
  712. package/dist/hooks/useAdminThumbnail.js +6 -15
  713. package/dist/hooks/useDebounce.js +6 -16
  714. package/dist/hooks/useDebouncedCallback.js +10 -15
  715. package/dist/hooks/useDebouncedEffect.js +6 -16
  716. package/dist/hooks/useDelay.js +7 -58
  717. package/dist/hooks/useDelayedRender.js +11 -62
  718. package/dist/hooks/useHotkey.d.ts.map +1 -1
  719. package/dist/hooks/useHotkey.js +11 -20
  720. package/dist/hooks/useIntersect.d.ts +1 -1
  721. package/dist/hooks/useIntersect.js +7 -17
  722. package/dist/hooks/usePayloadAPI.d.ts +1 -1
  723. package/dist/hooks/usePayloadAPI.js +17 -32
  724. package/dist/hooks/useResize.js +5 -15
  725. package/dist/hooks/useThrottledEffect.d.ts +1 -1
  726. package/dist/hooks/useThrottledEffect.js +5 -15
  727. package/dist/hooks/useThumbnail.js +8 -18
  728. package/dist/hooks/useUseAsTitle.js +6 -16
  729. package/dist/icons/Calendar/index.js +8 -23
  730. package/dist/icons/Check/index.js +6 -21
  731. package/dist/icons/Chevron/index.js +5 -20
  732. package/dist/icons/CloseMenu/index.js +6 -21
  733. package/dist/icons/CodeBlock/index.js +5 -20
  734. package/dist/icons/Copy/index.js +6 -21
  735. package/dist/icons/DragHandle/index.js +10 -25
  736. package/dist/icons/Edit/index.js +7 -22
  737. package/dist/icons/Line/index.js +5 -20
  738. package/dist/icons/Link/index.js +6 -21
  739. package/dist/icons/LogOut/index.js +7 -22
  740. package/dist/icons/Menu/index.js +7 -22
  741. package/dist/icons/MinimizeMaximize/index.js +12 -63
  742. package/dist/icons/More/index.js +7 -22
  743. package/dist/icons/Plus/index.js +6 -21
  744. package/dist/icons/Search/index.js +6 -21
  745. package/dist/icons/Swap/index.js +8 -23
  746. package/dist/icons/X/index.js +6 -21
  747. package/dist/index.d.ts +1 -1
  748. package/dist/index.d.ts.map +1 -1
  749. package/dist/index.js +2 -19
  750. package/dist/providers/ActionsProvider/SetViewActions/index.d.ts +6 -0
  751. package/dist/providers/ActionsProvider/SetViewActions/index.d.ts.map +1 -0
  752. package/dist/providers/ActionsProvider/SetViewActions/index.js +18 -0
  753. package/dist/providers/ActionsProvider/index.d.ts +3 -2
  754. package/dist/providers/ActionsProvider/index.d.ts.map +1 -1
  755. package/dist/providers/ActionsProvider/index.js +15 -74
  756. package/dist/providers/Auth/index.d.ts +1 -1
  757. package/dist/providers/Auth/index.d.ts.map +1 -1
  758. package/dist/providers/Auth/index.js +58 -133
  759. package/dist/providers/Auth/types.js +2 -5
  760. package/dist/providers/ClientFunction/index.js +14 -40
  761. package/dist/providers/ComponentMapProvider/index.d.ts +5 -1
  762. package/dist/providers/ComponentMapProvider/index.d.ts.map +1 -1
  763. package/dist/providers/ComponentMapProvider/index.js +20 -67
  764. package/dist/providers/Config/index.js +6 -65
  765. package/dist/providers/DocumentEvents/index.d.ts +1 -1
  766. package/dist/providers/DocumentEvents/index.d.ts.map +1 -1
  767. package/dist/providers/DocumentEvents/index.js +7 -66
  768. package/dist/providers/DocumentEvents/types.d.ts +1 -1
  769. package/dist/providers/DocumentEvents/types.d.ts.map +1 -1
  770. package/dist/providers/DocumentEvents/types.js +2 -5
  771. package/dist/providers/DocumentInfo/index.d.ts +1 -8
  772. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  773. package/dist/providers/DocumentInfo/index.js +48 -130
  774. package/dist/providers/DocumentInfo/types.d.ts +5 -5
  775. package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
  776. package/dist/providers/DocumentInfo/types.js +2 -5
  777. package/dist/providers/EditDepth/index.js +5 -67
  778. package/dist/providers/FormQueryParams/index.d.ts +6 -15
  779. package/dist/providers/FormQueryParams/index.d.ts.map +1 -1
  780. package/dist/providers/FormQueryParams/index.js +41 -69
  781. package/dist/providers/FormQueryParams/types.d.ts +16 -0
  782. package/dist/providers/FormQueryParams/types.d.ts.map +1 -0
  783. package/dist/providers/FormQueryParams/types.js +3 -0
  784. package/dist/providers/ListInfo/index.d.ts +1 -1
  785. package/dist/providers/ListInfo/index.d.ts.map +1 -1
  786. package/dist/providers/ListInfo/index.js +9 -68
  787. package/dist/providers/ListInfo/types.d.ts +1 -1
  788. package/dist/providers/ListInfo/types.d.ts.map +1 -1
  789. package/dist/providers/ListInfo/types.js +2 -5
  790. package/dist/providers/Locale/index.d.ts.map +1 -1
  791. package/dist/providers/Locale/index.js +53 -103
  792. package/dist/providers/OperationProvider/index.js +5 -67
  793. package/dist/providers/Params/index.d.ts +1 -1
  794. package/dist/providers/Params/index.d.ts.map +1 -1
  795. package/dist/providers/Params/index.js +9 -67
  796. package/dist/providers/Portal/index.js +4 -19
  797. package/dist/providers/Preferences/index.d.ts.map +1 -1
  798. package/dist/providers/Preferences/index.js +25 -89
  799. package/dist/providers/Root/index.d.ts +3 -2
  800. package/dist/providers/Root/index.d.ts.map +1 -1
  801. package/dist/providers/Root/index.js +38 -81
  802. package/dist/providers/SearchParams/index.d.ts +1 -1
  803. package/dist/providers/SearchParams/index.d.ts.map +1 -1
  804. package/dist/providers/SearchParams/index.js +34 -106
  805. package/dist/providers/SearchParams/types.d.ts +4 -17
  806. package/dist/providers/SearchParams/types.d.ts.map +1 -1
  807. package/dist/providers/SearchParams/types.js +2 -5
  808. package/dist/providers/SelectionProvider/index.js +23 -90
  809. package/dist/providers/Theme/index.d.ts.map +1 -1
  810. package/dist/providers/Theme/index.js +11 -73
  811. package/dist/providers/Theme/types.js +2 -5
  812. package/dist/providers/Theme/utilities.d.ts +1 -1
  813. package/dist/providers/Theme/utilities.d.ts.map +1 -1
  814. package/dist/providers/Theme/utilities.js +3 -21
  815. package/dist/providers/Translation/index.d.ts +1 -6
  816. package/dist/providers/Translation/index.d.ts.map +1 -1
  817. package/dist/providers/Translation/index.js +12 -69
  818. package/dist/templates/Default/NavHamburger/index.js +7 -22
  819. package/dist/templates/Default/Wrapper/index.js +7 -22
  820. package/dist/templates/Default/index.d.ts +1 -1
  821. package/dist/templates/Default/index.d.ts.map +1 -1
  822. package/dist/templates/Default/index.js +17 -68
  823. package/dist/templates/Default/types.js +2 -5
  824. package/dist/templates/Minimal/index.d.ts +1 -1
  825. package/dist/templates/Minimal/index.d.ts.map +1 -1
  826. package/dist/templates/Minimal/index.js +6 -21
  827. package/dist/templates/Minimal/types.js +2 -5
  828. package/dist/utilities/api.js +4 -19
  829. package/dist/utilities/arraysHaveSameStrings.js +2 -12
  830. package/dist/utilities/buildComponentMap/index.d.ts +9 -9
  831. package/dist/utilities/buildComponentMap/index.d.ts.map +1 -1
  832. package/dist/utilities/buildComponentMap/index.js +59 -47
  833. package/dist/utilities/buildComponentMap/mapActions.d.ts +7 -0
  834. package/dist/utilities/buildComponentMap/mapActions.d.ts.map +1 -0
  835. package/dist/utilities/buildComponentMap/mapActions.js +39 -0
  836. package/dist/utilities/buildComponentMap/mapFields.d.ts +3 -6
  837. package/dist/utilities/buildComponentMap/mapFields.d.ts.map +1 -1
  838. package/dist/utilities/buildComponentMap/mapFields.js +48 -118
  839. package/dist/utilities/buildComponentMap/types.d.ts +15 -2
  840. package/dist/utilities/buildComponentMap/types.d.ts.map +1 -1
  841. package/dist/utilities/buildComponentMap/types.js +2 -5
  842. package/dist/utilities/buildFieldSchemaMap/index.d.ts +1 -1
  843. package/dist/utilities/buildFieldSchemaMap/index.d.ts.map +1 -1
  844. package/dist/utilities/buildFieldSchemaMap/index.js +5 -15
  845. package/dist/utilities/buildFieldSchemaMap/traverseFields.d.ts +1 -1
  846. package/dist/utilities/buildFieldSchemaMap/traverseFields.d.ts.map +1 -1
  847. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +9 -19
  848. package/dist/utilities/buildFieldSchemaMap/types.js +2 -5
  849. package/dist/utilities/canUseDOM.js +2 -12
  850. package/dist/utilities/findLocaleFromCode.js +4 -12
  851. package/dist/utilities/formatDate/getSupportedDateLocale.js +2 -12
  852. package/dist/utilities/formatDate/index.js +10 -69
  853. package/dist/utilities/formatDocTitle.d.ts +1 -2
  854. package/dist/utilities/formatDocTitle.d.ts.map +1 -1
  855. package/dist/utilities/formatDocTitle.js +6 -16
  856. package/dist/utilities/formatFields.js +3 -13
  857. package/dist/utilities/getFormState.d.ts +2 -3
  858. package/dist/utilities/getFormState.d.ts.map +1 -1
  859. package/dist/utilities/getFormState.js +2 -12
  860. package/dist/utilities/getOffsetTop.js +2 -12
  861. package/dist/utilities/getRequestLanguage.d.ts +1 -1
  862. package/dist/utilities/getRequestLanguage.d.ts.map +1 -1
  863. package/dist/utilities/getRequestLanguage.js +2 -12
  864. package/dist/utilities/getSupportedMonacoLocale.js +2 -12
  865. package/dist/utilities/groupNavItems.js +7 -25
  866. package/dist/utilities/scrollToID.js +2 -12
  867. package/dist/utilities/setsAreEqual.js +2 -12
  868. package/dist/utilities/withMergedProps/index.js +23 -21
  869. package/package.json +10 -8
  870. package/src/index.ts +1 -1
  871. package/dist/forms/FieldPathProvider/index.scss +0 -12
  872. package/dist/forms/FieldPathProvider/types.d.ts +0 -7
  873. package/dist/forms/FieldPathProvider/types.d.ts.map +0 -1
  874. package/dist/forms/FieldPathProvider/types.js +0 -6
  875. package/dist/forms/Form/buildInitialState.d.ts +0 -3
  876. package/dist/forms/Form/buildInitialState.d.ts.map +0 -1
  877. package/dist/forms/Form/buildInitialState.js +0 -26
  878. package/dist/providers/Auth/HydrateClientUser/index.d.ts +0 -7
  879. package/dist/providers/Auth/HydrateClientUser/index.d.ts.map +0 -1
  880. package/dist/providers/Auth/HydrateClientUser/index.js +0 -28
  881. package/dist/providers/CustomProvider/index.d.ts +0 -5
  882. package/dist/providers/CustomProvider/index.d.ts.map +0 -1
  883. package/dist/providers/CustomProvider/index.js +0 -38
  884. package/dist/providers/DocumentInfo/SetDocumentInfo/index.d.ts +0 -4
  885. package/dist/providers/DocumentInfo/SetDocumentInfo/index.d.ts.map +0 -1
  886. package/dist/providers/DocumentInfo/SetDocumentInfo/index.js +0 -34
  887. package/dist/views/Global/RenderCustomView.d.ts +0 -2
  888. package/dist/views/Global/RenderCustomView.d.ts.map +0 -1
  889. package/dist/views/Global/RenderCustomView.js +0 -3
@@ -1,110 +1,56 @@
1
1
  'use client';
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- Object.defineProperty(exports, "default", {
7
- enumerable: true,
8
- get: function() {
9
- return _default;
10
- }
11
- });
12
- const _deepequal = /*#__PURE__*/ _interop_require_default(require("deep-equal"));
13
- const _navigation = require("next/navigation");
14
- const _objecttoformdata = require("object-to-formdata");
15
- const _utilities = require("payload/utilities");
16
- const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
17
- const _reacttoastify = require("react-toastify");
18
- const _useDebouncedEffect = require("../../hooks/useDebouncedEffect");
19
- const _useThrottledEffect = /*#__PURE__*/ _interop_require_default(require("../../hooks/useThrottledEffect"));
20
- const _Auth = require("../../providers/Auth");
21
- const _Config = require("../../providers/Config");
22
- const _DocumentInfo = require("../../providers/DocumentInfo");
23
- const _Locale = require("../../providers/Locale");
24
- const _OperationProvider = require("../../providers/OperationProvider");
25
- const _Translation = require("../../providers/Translation");
26
- const _api = require("../../utilities/api");
27
- const _getFormState = require("../../utilities/getFormState");
28
- const _context = require("./context");
29
- const _errorMessages = /*#__PURE__*/ _interop_require_default(require("./errorMessages"));
30
- const _fieldReducer = require("./fieldReducer");
31
- const _getDataByPath = /*#__PURE__*/ _interop_require_default(require("./getDataByPath"));
32
- const _getSiblingData = /*#__PURE__*/ _interop_require_default(require("./getSiblingData"));
33
- const _initContextState = /*#__PURE__*/ _interop_require_default(require("./initContextState"));
34
- const _mergeServerFormState = require("./mergeServerFormState");
35
- const _reduceFieldsToValues = /*#__PURE__*/ _interop_require_default(require("./reduceFieldsToValues"));
36
- function _interop_require_default(obj) {
37
- return obj && obj.__esModule ? obj : {
38
- default: obj
39
- };
40
- }
41
- function _getRequireWildcardCache(nodeInterop) {
42
- if (typeof WeakMap !== "function") return null;
43
- var cacheBabelInterop = new WeakMap();
44
- var cacheNodeInterop = new WeakMap();
45
- return (_getRequireWildcardCache = function(nodeInterop) {
46
- return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
47
- })(nodeInterop);
48
- }
49
- function _interop_require_wildcard(obj, nodeInterop) {
50
- if (!nodeInterop && obj && obj.__esModule) {
51
- return obj;
52
- }
53
- if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
54
- return {
55
- default: obj
56
- };
57
- }
58
- var cache = _getRequireWildcardCache(nodeInterop);
59
- if (cache && cache.has(obj)) {
60
- return cache.get(obj);
61
- }
62
- var newObj = {
63
- __proto__: null
64
- };
65
- var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
66
- for(var key in obj){
67
- if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
68
- var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
69
- if (desc && (desc.get || desc.set)) {
70
- Object.defineProperty(newObj, key, desc);
71
- } else {
72
- newObj[key] = obj[key];
73
- }
74
- }
75
- }
76
- newObj.default = obj;
77
- if (cache) {
78
- cache.set(obj, newObj);
79
- }
80
- return newObj;
81
- }
2
+ /* eslint-disable jsx-a11y/no-noninteractive-element-interactions */ import isDeepEqual from 'deep-equal';
3
+ import { useRouter } from 'next/navigation.js';
4
+ import { serialize } from 'object-to-formdata';
5
+ import { wait } from 'payload/utilities';
6
+ import QueryString from 'qs';
7
+ import React, { useCallback, useEffect, useReducer, useRef, useState } from 'react';
8
+ import { toast } from 'react-toastify';
9
+ import { useDebouncedEffect } from '../../hooks/useDebouncedEffect.js';
10
+ import useThrottledEffect from '../../hooks/useThrottledEffect.js';
11
+ import { useAuth } from '../../providers/Auth/index.js';
12
+ import { useConfig } from '../../providers/Config/index.js';
13
+ import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
14
+ import { useFormQueryParams } from '../../providers/FormQueryParams/index.js';
15
+ import { useLocale } from '../../providers/Locale/index.js';
16
+ import { useOperation } from '../../providers/OperationProvider/index.js';
17
+ import { useTranslation } from '../../providers/Translation/index.js';
18
+ import { requests } from '../../utilities/api.js';
19
+ import { getFormState } from '../../utilities/getFormState.js';
20
+ import { FormContext, FormFieldsContext, FormWatchContext, ModifiedContext, ProcessingContext, SubmittedContext } from './context.js';
21
+ import errorMessages from './errorMessages.js';
22
+ import { fieldReducer } from './fieldReducer.js';
23
+ import getDataByPathFunc from './getDataByPath.js';
24
+ import getSiblingDataFunc from './getSiblingData.js';
25
+ import initContextState from './initContextState.js';
26
+ import { mergeServerFormState } from './mergeServerFormState.js';
27
+ import reduceFieldsToValues from './reduceFieldsToValues.js';
82
28
  const baseClass = 'form';
83
29
  const Form = (props)=>{
84
- const { id, getDocPreferences } = (0, _DocumentInfo.useDocumentInfo)();
30
+ const { id, collectionSlug, getDocPreferences, globalSlug } = useDocumentInfo();
85
31
  const { action, children, className, disableSuccessStatus, disabled, // fields: fieldsFromProps = collection?.fields || global?.fields,
86
32
  beforeSubmit, handleResponse, initialState, onChange, onSubmit, onSuccess, redirect, submitted: submittedFromProps, uuid, waitForAutocomplete } = props;
87
33
  const method = 'method' in props ? props.method : undefined;
88
- const router = (0, _navigation.useRouter)();
89
- const { code: locale } = (0, _Locale.useLocale)();
90
- const { i18n, t } = (0, _Translation.useTranslation)();
91
- const { refreshCookie, user } = (0, _Auth.useAuth)();
92
- const operation = (0, _OperationProvider.useOperation)();
93
- const config = (0, _Config.useConfig)();
34
+ const router = useRouter();
35
+ const { code: locale } = useLocale();
36
+ const { i18n, t } = useTranslation();
37
+ const { refreshCookie, user } = useAuth();
38
+ const operation = useOperation();
39
+ const { formQueryParams } = useFormQueryParams();
40
+ const config = useConfig();
94
41
  const { routes: { api: apiRoute }, serverURL } = config;
95
- const [modified, setModified] = (0, _react.useState)(false);
96
- const [processing, setProcessing] = (0, _react.useState)(false);
97
- const [submitted, setSubmitted] = (0, _react.useState)(false);
98
- const formRef = (0, _react.useRef)(null);
99
- const contextRef = (0, _react.useRef)({});
100
- const { collectionSlug, globalSlug } = (0, _DocumentInfo.useDocumentInfo)();
101
- const fieldsReducer = (0, _react.useReducer)(_fieldReducer.fieldReducer, {}, ()=>initialState);
42
+ const [modified, setModified] = useState(false);
43
+ const [processing, setProcessing] = useState(false);
44
+ const [submitted, setSubmitted] = useState(false);
45
+ const formRef = useRef(null);
46
+ const contextRef = useRef({});
47
+ const fieldsReducer = useReducer(fieldReducer, {}, ()=>initialState);
102
48
  /**
103
49
  * `fields` is the current, up-to-date state/data of all fields in the form. It can be modified by using dispatchFields,
104
50
  * which calls the fieldReducer, which then updates the state.
105
51
  */ const [fields, dispatchFields] = fieldsReducer;
106
52
  contextRef.current.fields = fields;
107
- const validateForm = (0, _react.useCallback)(async ()=>{
53
+ const validateForm = useCallback(async ()=>{
108
54
  const validatedFieldState = {};
109
55
  let isValid = true;
110
56
  const dataFromContext = contextRef.current.getData();
@@ -140,7 +86,7 @@ const Form = (props)=>{
140
86
  validatedFieldState[path] = validatedField;
141
87
  });
142
88
  await Promise.all(validationPromises);
143
- if (!(0, _deepequal.default)(contextRef.current.fields, validatedFieldState)) {
89
+ if (!isDeepEqual(contextRef.current.fields, validatedFieldState)) {
144
90
  dispatchFields({
145
91
  type: 'REPLACE_STATE',
146
92
  state: validatedFieldState
@@ -155,8 +101,8 @@ const Form = (props)=>{
155
101
  dispatchFields,
156
102
  config
157
103
  ]);
158
- const submit = (0, _react.useCallback)(async (options = {}, e)=>{
159
- const { action: actionToUse = action, method: methodToUse = method, overrides = {}, skipValidation } = options;
104
+ const submit = useCallback(async (options = {}, e)=>{
105
+ const { action: actionArg, method: methodToUse = method, overrides = {}, skipValidation } = options;
160
106
  if (disabled) {
161
107
  if (e) {
162
108
  e.preventDefault();
@@ -169,7 +115,7 @@ const Form = (props)=>{
169
115
  }
170
116
  setProcessing(true);
171
117
  setSubmitted(true);
172
- if (waitForAutocomplete) await (0, _utilities.wait)(100);
118
+ if (waitForAutocomplete) await wait(100);
173
119
  // Execute server side validations
174
120
  if (Array.isArray(beforeSubmit)) {
175
121
  let revalidatedFormState;
@@ -192,14 +138,14 @@ const Form = (props)=>{
192
138
  const isValid = skipValidation ? true : await contextRef.current.validateForm();
193
139
  // If not valid, prevent submission
194
140
  if (!isValid) {
195
- _reacttoastify.toast.error(t('error:correctInvalidFields'));
141
+ toast.error(t('error:correctInvalidFields'));
196
142
  setProcessing(false);
197
143
  return;
198
144
  }
199
145
  // If submit handler comes through via props, run that
200
146
  if (onSubmit) {
201
147
  const data = {
202
- ...(0, _reduceFieldsToValues.default)(fields, true),
148
+ ...reduceFieldsToValues(fields, true),
203
149
  ...overrides
204
150
  };
205
151
  onSubmit(fields, data);
@@ -207,15 +153,18 @@ const Form = (props)=>{
207
153
  const formData = contextRef.current.createFormData(overrides);
208
154
  try {
209
155
  let res;
210
- if (typeof actionToUse === 'string') {
211
- res = await _api.requests[methodToUse.toLowerCase()](actionToUse, {
156
+ const actionEndpoint = actionArg || (typeof action === 'string' ? `${action}${QueryString.stringify(formQueryParams, {
157
+ addQueryPrefix: true
158
+ })}` : null);
159
+ if (actionEndpoint) {
160
+ res = await requests[methodToUse.toLowerCase()](actionEndpoint, {
212
161
  body: formData,
213
162
  headers: {
214
163
  'Accept-Language': i18n.language
215
164
  }
216
165
  });
217
- } else if (typeof actionToUse === 'function') {
218
- res = await actionToUse(formData);
166
+ } else if (typeof action === 'function') {
167
+ res = await action(formData);
219
168
  }
220
169
  setModified(false);
221
170
  if (typeof handleResponse === 'function') {
@@ -231,23 +180,9 @@ const Form = (props)=>{
231
180
  setSubmitted(false);
232
181
  if (typeof onSuccess === 'function') onSuccess(json);
233
182
  if (redirect) {
234
- // const destination = {
235
- // pathname: redirect,
236
- // state: {},
237
- // }
238
- // if (typeof json === 'object' && json.message && !disableSuccessStatus) {
239
- // destination.state = {
240
- // status: [
241
- // {
242
- // message: json.message,
243
- // type: 'success',
244
- // },
245
- // ],
246
- // }
247
- // }
248
183
  router.push(redirect);
249
184
  } else if (!disableSuccessStatus) {
250
- _reacttoastify.toast.success(json.message || t('general:submissionSuccessful'), {
185
+ toast.success(json.message || t('general:submissionSuccessful'), {
251
186
  autoClose: 3000
252
187
  });
253
188
  }
@@ -257,7 +192,7 @@ const Form = (props)=>{
257
192
  } // triggers rerender of all components that subscribe to form
258
193
  ;
259
194
  if (json.message) {
260
- _reacttoastify.toast.error(json.message);
195
+ toast.error(json.message);
261
196
  return;
262
197
  }
263
198
  if (Array.isArray(json.errors)) {
@@ -300,16 +235,16 @@ const Form = (props)=>{
300
235
  });
301
236
  });
302
237
  nonFieldErrors.forEach((err)=>{
303
- _reacttoastify.toast.error(err.message || t('error:unknown'));
238
+ toast.error(err.message || t('error:unknown'));
304
239
  });
305
240
  return;
306
241
  }
307
- const message = _errorMessages.default?.[res.status] || res?.statusText || t('error:unknown');
308
- _reacttoastify.toast.error(message);
242
+ const message = errorMessages?.[res.status] || res?.statusText || t('error:unknown');
243
+ toast.error(message);
309
244
  }
310
245
  } catch (err) {
311
246
  setProcessing(false);
312
- _reacttoastify.toast.error(err);
247
+ toast.error(err);
313
248
  }
314
249
  }, [
315
250
  action,
@@ -326,15 +261,16 @@ const Form = (props)=>{
326
261
  t,
327
262
  i18n,
328
263
  waitForAutocomplete,
329
- beforeSubmit
264
+ beforeSubmit,
265
+ formQueryParams
330
266
  ]);
331
- const getFields = (0, _react.useCallback)(()=>contextRef.current.fields, []);
332
- const getField = (0, _react.useCallback)((path)=>contextRef.current.fields[path], []);
333
- const getData = (0, _react.useCallback)(()=>(0, _reduceFieldsToValues.default)(contextRef.current.fields, true), []);
334
- const getSiblingData = (0, _react.useCallback)((path)=>(0, _getSiblingData.default)(contextRef.current.fields, path), []);
335
- const getDataByPath = (0, _react.useCallback)((path)=>(0, _getDataByPath.default)(contextRef.current.fields, path), []);
336
- const createFormData = (0, _react.useCallback)((overrides = {})=>{
337
- const data = (0, _reduceFieldsToValues.default)(contextRef.current.fields, true);
267
+ const getFields = useCallback(()=>contextRef.current.fields, []);
268
+ const getField = useCallback((path)=>contextRef.current.fields[path], []);
269
+ const getData = useCallback(()=>reduceFieldsToValues(contextRef.current.fields, true), []);
270
+ const getSiblingData = useCallback((path)=>getSiblingDataFunc(contextRef.current.fields, path), []);
271
+ const getDataByPath = useCallback((path)=>getDataByPathFunc(contextRef.current.fields, path), []);
272
+ const createFormData = useCallback((overrides = {})=>{
273
+ const data = reduceFieldsToValues(contextRef.current.fields, true);
338
274
  const file = data?.file;
339
275
  if (file) {
340
276
  delete data.file;
@@ -348,38 +284,45 @@ const Form = (props)=>{
348
284
  file
349
285
  };
350
286
  // nullAsUndefineds is important to allow uploads and relationship fields to clear themselves
351
- const formData = (0, _objecttoformdata.serialize)(dataToSerialize, {
287
+ const formData = serialize(dataToSerialize, {
352
288
  indices: true,
353
289
  nullsAsUndefineds: false
354
290
  });
355
291
  return formData;
356
292
  }, []);
357
- const reset = (0, _react.useCallback)(async (fieldSchema, data)=>{
358
- const preferences = await getDocPreferences();
359
- // const state = await buildStateFromSchema({
360
- // id,
361
- // // TODO: fix this
362
- // // @ts-ignore-next-line
363
- // config,
364
- // data,
365
- // fieldSchema,
366
- // locale,
367
- // operation,
368
- // preferences,
369
- // t,
370
- // user,
371
- // })
293
+ const reset = useCallback(async (data)=>{
294
+ const newState = await getFormState({
295
+ apiRoute,
296
+ body: {
297
+ id,
298
+ collectionSlug,
299
+ data,
300
+ globalSlug,
301
+ operation,
302
+ schemaPath: collectionSlug || globalSlug
303
+ },
304
+ serverURL
305
+ });
372
306
  contextRef.current = {
373
- ..._initContextState.default
307
+ ...initContextState
374
308
  };
375
309
  setModified(false);
376
- // dispatchFields({ state, type: 'REPLACE_STATE' })
310
+ dispatchFields({
311
+ type: 'REPLACE_STATE',
312
+ state: newState
313
+ });
377
314
  }, [
378
- getDocPreferences
315
+ apiRoute,
316
+ collectionSlug,
317
+ dispatchFields,
318
+ globalSlug,
319
+ id,
320
+ operation,
321
+ serverURL
379
322
  ]);
380
- const replaceState = (0, _react.useCallback)((state)=>{
323
+ const replaceState = useCallback((state)=>{
381
324
  contextRef.current = {
382
- ..._initContextState.default
325
+ ...initContextState
383
326
  };
384
327
  setModified(false);
385
328
  dispatchFields({
@@ -389,8 +332,8 @@ const Form = (props)=>{
389
332
  }, [
390
333
  dispatchFields
391
334
  ]);
392
- const getFieldStateByPath = (0, _react.useCallback)(async ({ data, path })=>{
393
- const fieldSchema = await (0, _getFormState.getFormState)({
335
+ const getFieldStateByPath = useCallback(async ({ data, path })=>{
336
+ const fieldSchema = await getFormState({
394
337
  apiRoute,
395
338
  body: {
396
339
  collectionSlug,
@@ -410,7 +353,7 @@ const Form = (props)=>{
410
353
  globalSlug,
411
354
  serverURL
412
355
  ]);
413
- const addFieldRow = (0, _react.useCallback)(async ({ data, path, rowIndex })=>{
356
+ const addFieldRow = useCallback(async ({ data, path, rowIndex })=>{
414
357
  const subFieldState = await getFieldStateByPath({
415
358
  data,
416
359
  path
@@ -426,7 +369,7 @@ const Form = (props)=>{
426
369
  getFieldStateByPath,
427
370
  dispatchFields
428
371
  ]);
429
- const removeFieldRow = (0, _react.useCallback)(({ path, rowIndex })=>{
372
+ const removeFieldRow = useCallback(({ path, rowIndex })=>{
430
373
  dispatchFields({
431
374
  type: 'REMOVE_ROW',
432
375
  path,
@@ -435,7 +378,7 @@ const Form = (props)=>{
435
378
  }, [
436
379
  dispatchFields
437
380
  ]);
438
- const replaceFieldRow = (0, _react.useCallback)(async ({ data, path, rowIndex })=>{
381
+ const replaceFieldRow = useCallback(async ({ data, path, rowIndex })=>{
439
382
  const subFieldState = await getFieldStateByPath({
440
383
  data,
441
384
  path
@@ -471,15 +414,15 @@ const Form = (props)=>{
471
414
  contextRef.current.removeFieldRow = removeFieldRow;
472
415
  contextRef.current.replaceFieldRow = replaceFieldRow;
473
416
  contextRef.current.uuid = uuid;
474
- (0, _react.useEffect)(()=>{
417
+ useEffect(()=>{
475
418
  if (typeof submittedFromProps === 'boolean') setSubmitted(submittedFromProps);
476
419
  }, [
477
420
  submittedFromProps
478
421
  ]);
479
- (0, _react.useEffect)(()=>{
422
+ useEffect(()=>{
480
423
  if (initialState) {
481
424
  contextRef.current = {
482
- ..._initContextState.default
425
+ ...initContextState
483
426
  };
484
427
  dispatchFields({
485
428
  type: 'REPLACE_STATE',
@@ -490,12 +433,12 @@ const Form = (props)=>{
490
433
  initialState,
491
434
  dispatchFields
492
435
  ]);
493
- (0, _useThrottledEffect.default)(()=>{
436
+ useThrottledEffect(()=>{
494
437
  refreshCookie();
495
438
  }, 15000, [
496
439
  fields
497
440
  ]);
498
- (0, _react.useEffect)(()=>{
441
+ useEffect(()=>{
499
442
  contextRef.current = {
500
443
  ...contextRef.current
501
444
  } // triggers rerender of all components that subscribe to form
@@ -508,7 +451,7 @@ const Form = (props)=>{
508
451
  className,
509
452
  baseClass
510
453
  ].filter(Boolean).join(' ');
511
- (0, _useDebouncedEffect.useDebouncedEffect)(()=>{
454
+ useDebouncedEffect(()=>{
512
455
  const executeOnChange = async ()=>{
513
456
  if (Array.isArray(onChange)) {
514
457
  let revalidatedFormState;
@@ -519,7 +462,7 @@ const Form = (props)=>{
519
462
  });
520
463
  revalidatedFormState = result;
521
464
  }, Promise.resolve());
522
- const { changed, newState } = (0, _mergeServerFormState.mergeServerFormState)(fields, revalidatedFormState);
465
+ const { changed, newState } = mergeServerFormState(fields, revalidatedFormState);
523
466
  if (changed) {
524
467
  dispatchFields({
525
468
  type: 'REPLACE_STATE',
@@ -529,37 +472,40 @@ const Form = (props)=>{
529
472
  }
530
473
  }
531
474
  };
532
- executeOnChange() // eslint-disable-line @typescript-eslint/no-floating-promises
475
+ void executeOnChange() // eslint-disable-line @typescript-eslint/no-floating-promises
533
476
  ;
534
477
  }, 150, [
535
478
  fields,
536
479
  dispatchFields,
537
480
  onChange
538
481
  ]);
539
- return /*#__PURE__*/ _react.default.createElement("form", {
540
- action: action,
482
+ const actionString = typeof action === 'string' ? `${action}${QueryString.stringify(formQueryParams, {
483
+ addQueryPrefix: true
484
+ })}` : '';
485
+ return /*#__PURE__*/ React.createElement("form", {
486
+ action: method ? actionString : action,
541
487
  className: classes,
542
488
  method: method,
543
489
  noValidate: true,
544
490
  onSubmit: (e)=>contextRef.current.submit({}, e),
545
491
  ref: formRef
546
- }, /*#__PURE__*/ _react.default.createElement(_context.FormContext.Provider, {
492
+ }, /*#__PURE__*/ React.createElement(FormContext.Provider, {
547
493
  value: contextRef.current
548
- }, /*#__PURE__*/ _react.default.createElement(_context.FormWatchContext.Provider, {
494
+ }, /*#__PURE__*/ React.createElement(FormWatchContext.Provider, {
549
495
  value: {
550
496
  fields,
551
497
  ...contextRef.current
552
498
  }
553
- }, /*#__PURE__*/ _react.default.createElement(_context.SubmittedContext.Provider, {
499
+ }, /*#__PURE__*/ React.createElement(SubmittedContext.Provider, {
554
500
  value: submitted
555
- }, /*#__PURE__*/ _react.default.createElement(_context.ProcessingContext.Provider, {
501
+ }, /*#__PURE__*/ React.createElement(ProcessingContext.Provider, {
556
502
  value: processing
557
- }, /*#__PURE__*/ _react.default.createElement(_context.ModifiedContext.Provider, {
503
+ }, /*#__PURE__*/ React.createElement(ModifiedContext.Provider, {
558
504
  value: modified
559
- }, /*#__PURE__*/ _react.default.createElement(_context.FormFieldsContext.Provider, {
505
+ }, /*#__PURE__*/ React.createElement(FormFieldsContext.Provider, {
560
506
  value: fieldsReducer
561
507
  }, children)))))));
562
508
  };
563
- const _default = Form;
509
+ export default Form;
564
510
 
565
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3Jtcy9Gb3JtL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgRmllbGQgfSBmcm9tICdwYXlsb2FkL3R5cGVzJ1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1ub25pbnRlcmFjdGl2ZS1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IGlzRGVlcEVxdWFsIGZyb20gJ2RlZXAtZXF1YWwnXG5pbXBvcnQgeyB1c2VSb3V0ZXIgfSBmcm9tICduZXh0L25hdmlnYXRpb24nXG5pbXBvcnQgeyBzZXJpYWxpemUgfSBmcm9tICdvYmplY3QtdG8tZm9ybWRhdGEnXG5pbXBvcnQgeyB3YWl0IH0gZnJvbSAncGF5bG9hZC91dGlsaXRpZXMnXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVkdWNlciwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tICdyZWFjdC10b2FzdGlmeSdcblxuaW1wb3J0IHR5cGUge1xuICBDb250ZXh0IGFzIEZvcm1Db250ZXh0VHlwZSxcbiAgRm9ybVN0YXRlLFxuICBHZXREYXRhQnlQYXRoLFxuICBQcm9wcyxcbiAgU3VibWl0T3B0aW9ucyxcbn0gZnJvbSAnLi90eXBlcydcblxuaW1wb3J0IHsgdXNlRGVib3VuY2VkRWZmZWN0IH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRGVib3VuY2VkRWZmZWN0J1xuaW1wb3J0IHVzZVRocm90dGxlZEVmZmVjdCBmcm9tICcuLi8uLi9ob29rcy91c2VUaHJvdHRsZWRFZmZlY3QnXG5pbXBvcnQgeyB1c2VBdXRoIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0F1dGgnXG5pbXBvcnQgeyB1c2VDb25maWcgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvQ29uZmlnJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0RvY3VtZW50SW5mbydcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Mb2NhbGUnXG5pbXBvcnQgeyB1c2VPcGVyYXRpb24gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvT3BlcmF0aW9uUHJvdmlkZXInXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9UcmFuc2xhdGlvbidcbmltcG9ydCB7IHJlcXVlc3RzIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2FwaSdcbmltcG9ydCB7IGdldEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9nZXRGb3JtU3RhdGUnXG5pbXBvcnQge1xuICBGb3JtQ29udGV4dCxcbiAgRm9ybUZpZWxkc0NvbnRleHQsXG4gIEZvcm1XYXRjaENvbnRleHQsXG4gIE1vZGlmaWVkQ29udGV4dCxcbiAgUHJvY2Vzc2luZ0NvbnRleHQsXG4gIFN1Ym1pdHRlZENvbnRleHQsXG59IGZyb20gJy4vY29udGV4dCdcbmltcG9ydCBlcnJvck1lc3NhZ2VzIGZyb20gJy4vZXJyb3JNZXNzYWdlcydcbmltcG9ydCB7IGZpZWxkUmVkdWNlciB9IGZyb20gJy4vZmllbGRSZWR1Y2VyJ1xuaW1wb3J0IGdldERhdGFCeVBhdGhGdW5jIGZyb20gJy4vZ2V0RGF0YUJ5UGF0aCdcbmltcG9ydCBnZXRTaWJsaW5nRGF0YUZ1bmMgZnJvbSAnLi9nZXRTaWJsaW5nRGF0YSdcbmltcG9ydCBpbml0Q29udGV4dFN0YXRlIGZyb20gJy4vaW5pdENvbnRleHRTdGF0ZSdcbmltcG9ydCB7IG1lcmdlU2VydmVyRm9ybVN0YXRlIH0gZnJvbSAnLi9tZXJnZVNlcnZlckZvcm1TdGF0ZSdcbmltcG9ydCByZWR1Y2VGaWVsZHNUb1ZhbHVlcyBmcm9tICcuL3JlZHVjZUZpZWxkc1RvVmFsdWVzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZm9ybSdcblxuY29uc3QgRm9ybTogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgaWQsIGdldERvY1ByZWZlcmVuY2VzIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuXG4gIGNvbnN0IHtcbiAgICBhY3Rpb24sXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc2FibGVTdWNjZXNzU3RhdHVzLFxuICAgIGRpc2FibGVkLFxuICAgIC8vIGZpZWxkczogZmllbGRzRnJvbVByb3BzID0gY29sbGVjdGlvbj8uZmllbGRzIHx8IGdsb2JhbD8uZmllbGRzLFxuICAgIGJlZm9yZVN1Ym1pdCxcbiAgICBoYW5kbGVSZXNwb25zZSxcbiAgICBpbml0aWFsU3RhdGUsIC8vIGZ1bGx5IGZvcm1lZCBpbml0aWFsIGZpZWxkIHN0YXRlXG4gICAgb25DaGFuZ2UsXG4gICAgb25TdWJtaXQsXG4gICAgb25TdWNjZXNzLFxuICAgIHJlZGlyZWN0LFxuICAgIHN1Ym1pdHRlZDogc3VibWl0dGVkRnJvbVByb3BzLFxuICAgIHV1aWQsXG4gICAgd2FpdEZvckF1dG9jb21wbGV0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgbWV0aG9kID0gJ21ldGhvZCcgaW4gcHJvcHMgPyBwcm9wcy5tZXRob2QgOiB1bmRlZmluZWRcblxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyByZWZyZXNoQ29va2llLCB1c2VyIH0gPSB1c2VBdXRoKClcbiAgY29uc3Qgb3BlcmF0aW9uID0gdXNlT3BlcmF0aW9uKClcblxuICBjb25zdCBjb25maWcgPSB1c2VDb25maWcoKVxuICBjb25zdCB7XG4gICAgcm91dGVzOiB7IGFwaTogYXBpUm91dGUgfSxcbiAgICBzZXJ2ZXJVUkwsXG4gIH0gPSBjb25maWdcblxuICBjb25zdCBbbW9kaWZpZWQsIHNldE1vZGlmaWVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcHJvY2Vzc2luZywgc2V0UHJvY2Vzc2luZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3N1Ym1pdHRlZCwgc2V0U3VibWl0dGVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBmb3JtUmVmID0gdXNlUmVmPEhUTUxGb3JtRWxlbWVudD4obnVsbClcbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7fSBhcyBGb3JtQ29udGV4dFR5cGUpXG4gIGNvbnN0IHsgY29sbGVjdGlvblNsdWcsIGdsb2JhbFNsdWcgfSA9IHVzZURvY3VtZW50SW5mbygpXG5cbiAgY29uc3QgZmllbGRzUmVkdWNlciA9IHVzZVJlZHVjZXIoZmllbGRSZWR1Y2VyLCB7fSwgKCkgPT4gaW5pdGlhbFN0YXRlKVxuICAvKipcbiAgICogYGZpZWxkc2AgaXMgdGhlIGN1cnJlbnQsIHVwLXRvLWRhdGUgc3RhdGUvZGF0YSBvZiBhbGwgZmllbGRzIGluIHRoZSBmb3JtLiBJdCBjYW4gYmUgbW9kaWZpZWQgYnkgdXNpbmcgZGlzcGF0Y2hGaWVsZHMsXG4gICAqIHdoaWNoIGNhbGxzIHRoZSBmaWVsZFJlZHVjZXIsIHdoaWNoIHRoZW4gdXBkYXRlcyB0aGUgc3RhdGUuXG4gICAqL1xuICBjb25zdCBbZmllbGRzLCBkaXNwYXRjaEZpZWxkc10gPSBmaWVsZHNSZWR1Y2VyXG5cbiAgY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcyA9IGZpZWxkc1xuXG4gIGNvbnN0IHZhbGlkYXRlRm9ybSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB2YWxpZGF0ZWRGaWVsZFN0YXRlID0ge31cbiAgICBsZXQgaXNWYWxpZCA9IHRydWVcblxuICAgIGNvbnN0IGRhdGFGcm9tQ29udGV4dCA9IGNvbnRleHRSZWYuY3VycmVudC5nZXREYXRhKClcbiAgICBjb25zdCBkYXRhID0gZGF0YUZyb21Db250ZXh0XG5cbiAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBPYmplY3QuZW50cmllcyhjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzKS5tYXAoXG4gICAgICBhc3luYyAoW3BhdGgsIGZpZWxkXSkgPT4ge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGaWVsZCA9IHtcbiAgICAgICAgICAuLi5maWVsZCxcbiAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWVsZC5wYXNzZXNDb25kaXRpb24gIT09IGZhbHNlKSB7XG4gICAgICAgICAgbGV0IHZhbGlkYXRpb25SZXN1bHQ6IGJvb2xlYW4gfCBzdHJpbmcgPSB0cnVlXG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkLnZhbGlkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWVUb1ZhbGlkYXRlID0gZmllbGQudmFsdWVcblxuICAgICAgICAgICAgaWYgKGZpZWxkPy5yb3dzICYmIEFycmF5LmlzQXJyYXkoZmllbGQucm93cykpIHtcbiAgICAgICAgICAgICAgdmFsdWVUb1ZhbGlkYXRlID0gY29udGV4dFJlZi5jdXJyZW50LmdldERhdGFCeVBhdGgocGF0aClcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IGZpZWxkLnZhbGlkYXRlKHZhbHVlVG9WYWxpZGF0ZSwge1xuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgICAgIHNpYmxpbmdEYXRhOiBjb250ZXh0UmVmLmN1cnJlbnQuZ2V0U2libGluZ0RhdGEocGF0aCksXG4gICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsaWRhdGlvblJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlZEZpZWxkLmVycm9yTWVzc2FnZSA9IHZhbGlkYXRpb25SZXN1bHRcbiAgICAgICAgICAgIHZhbGlkYXRlZEZpZWxkLnZhbGlkID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhbGlkYXRlZEZpZWxkU3RhdGVbcGF0aF0gPSB2YWxpZGF0ZWRGaWVsZFxuICAgICAgfSxcbiAgICApXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpXG5cbiAgICBpZiAoIWlzRGVlcEVxdWFsKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIHZhbGlkYXRlZEZpZWxkU3RhdGUpKSB7XG4gICAgICBkaXNwYXRjaEZpZWxkcyh7IHR5cGU6ICdSRVBMQUNFX1NUQVRFJywgc3RhdGU6IHZhbGlkYXRlZEZpZWxkU3RhdGUgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gaXNWYWxpZFxuICB9LCBbaWQsIHVzZXIsIG9wZXJhdGlvbiwgdCwgZGlzcGF0Y2hGaWVsZHMsIGNvbmZpZ10pXG5cbiAgY29uc3Qgc3VibWl0ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG9wdGlvbnM6IFN1Ym1pdE9wdGlvbnMgPSB7fSwgZSk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBhY3Rpb246IGFjdGlvblRvVXNlID0gYWN0aW9uLFxuICAgICAgICBtZXRob2Q6IG1ldGhvZFRvVXNlID0gbWV0aG9kLFxuICAgICAgICBvdmVycmlkZXMgPSB7fSxcbiAgICAgICAgc2tpcFZhbGlkYXRpb24sXG4gICAgICB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGUpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIH1cblxuICAgICAgc2V0UHJvY2Vzc2luZyh0cnVlKVxuICAgICAgc2V0U3VibWl0dGVkKHRydWUpXG5cbiAgICAgIGlmICh3YWl0Rm9yQXV0b2NvbXBsZXRlKSBhd2FpdCB3YWl0KDEwMClcblxuICAgICAgLy8gRXhlY3V0ZSBzZXJ2ZXIgc2lkZSB2YWxpZGF0aW9uc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYmVmb3JlU3VibWl0KSkge1xuICAgICAgICBsZXQgcmV2YWxpZGF0ZWRGb3JtU3RhdGU6IEZvcm1TdGF0ZVxuXG4gICAgICAgIGF3YWl0IGJlZm9yZVN1Ym1pdC5yZWR1Y2UoYXN5bmMgKHByaW9yT25DaGFuZ2UsIGJlZm9yZVN1Ym1pdEZuKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcHJpb3JPbkNoYW5nZVxuXG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYmVmb3JlU3VibWl0Rm4oe1xuICAgICAgICAgICAgZm9ybVN0YXRlOiBmaWVsZHMsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldmFsaWRhdGVkRm9ybVN0YXRlID0gcmVzdWx0XG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBPYmplY3QuZW50cmllcyhyZXZhbGlkYXRlZEZvcm1TdGF0ZSkuZXZlcnkoKFssIGZpZWxkXSkgPT4gZmllbGQudmFsaWQpXG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgICAgc2V0UHJvY2Vzc2luZyhmYWxzZSlcbiAgICAgICAgICByZXR1cm4gZGlzcGF0Y2hGaWVsZHMoeyB0eXBlOiAnUkVQTEFDRV9TVEFURScsIHN0YXRlOiByZXZhbGlkYXRlZEZvcm1TdGF0ZSB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzVmFsaWQgPSBza2lwVmFsaWRhdGlvbiA/IHRydWUgOiBhd2FpdCBjb250ZXh0UmVmLmN1cnJlbnQudmFsaWRhdGVGb3JtKClcblxuICAgICAgLy8gSWYgbm90IHZhbGlkLCBwcmV2ZW50IHN1Ym1pc3Npb25cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICB0b2FzdC5lcnJvcih0KCdlcnJvcjpjb3JyZWN0SW52YWxpZEZpZWxkcycpKVxuICAgICAgICBzZXRQcm9jZXNzaW5nKGZhbHNlKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBJZiBzdWJtaXQgaGFuZGxlciBjb21lcyB0aHJvdWdoIHZpYSBwcm9wcywgcnVuIHRoYXRcbiAgICAgIGlmIChvblN1Ym1pdCkge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgIC4uLnJlZHVjZUZpZWxkc1RvVmFsdWVzKGZpZWxkcywgdHJ1ZSksXG4gICAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICB9XG5cbiAgICAgICAgb25TdWJtaXQoZmllbGRzLCBkYXRhKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IGNvbnRleHRSZWYuY3VycmVudC5jcmVhdGVGb3JtRGF0YShvdmVycmlkZXMpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCByZXNcblxuICAgICAgICBpZiAodHlwZW9mIGFjdGlvblRvVXNlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJlcyA9IGF3YWl0IHJlcXVlc3RzW21ldGhvZFRvVXNlLnRvTG93ZXJDYXNlKCldKGFjdGlvblRvVXNlLCB7XG4gICAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvblRvVXNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmVzID0gYXdhaXQgYWN0aW9uVG9Vc2UoZm9ybURhdGEpXG4gICAgICAgIH1cblxuICAgICAgICBzZXRNb2RpZmllZChmYWxzZSlcblxuICAgICAgICBpZiAodHlwZW9mIGhhbmRsZVJlc3BvbnNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaGFuZGxlUmVzcG9uc2UocmVzKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgc2V0UHJvY2Vzc2luZyhmYWxzZSlcblxuICAgICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJylcbiAgICAgICAgY29uc3QgaXNKU09OID0gY29udGVudFR5cGUgJiYgY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpICE9PSAtMVxuXG4gICAgICAgIGxldCBqc29uOiBhbnkgPSB7fVxuXG4gICAgICAgIGlmIChpc0pTT04pIGpzb24gPSBhd2FpdCByZXMuanNvbigpXG5cbiAgICAgICAgaWYgKHJlcy5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICBzZXRTdWJtaXR0ZWQoZmFsc2UpXG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uU3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykgb25TdWNjZXNzKGpzb24pXG5cbiAgICAgICAgICBpZiAocmVkaXJlY3QpIHtcbiAgICAgICAgICAgIC8vIGNvbnN0IGRlc3RpbmF0aW9uID0ge1xuICAgICAgICAgICAgLy8gICBwYXRobmFtZTogcmVkaXJlY3QsXG4gICAgICAgICAgICAvLyAgIHN0YXRlOiB7fSxcbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgLy8gaWYgKHR5cGVvZiBqc29uID09PSAnb2JqZWN0JyAmJiBqc29uLm1lc3NhZ2UgJiYgIWRpc2FibGVTdWNjZXNzU3RhdHVzKSB7XG4gICAgICAgICAgICAvLyAgIGRlc3RpbmF0aW9uLnN0YXRlID0ge1xuICAgICAgICAgICAgLy8gICAgIHN0YXR1czogW1xuICAgICAgICAgICAgLy8gICAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICBtZXNzYWdlOiBqc29uLm1lc3NhZ2UsXG4gICAgICAgICAgICAvLyAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIC8vICAgICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgXSxcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICByb3V0ZXIucHVzaChyZWRpcmVjdClcbiAgICAgICAgICB9IGVsc2UgaWYgKCFkaXNhYmxlU3VjY2Vzc1N0YXR1cykge1xuICAgICAgICAgICAgdG9hc3Quc3VjY2Vzcyhqc29uLm1lc3NhZ2UgfHwgdCgnZ2VuZXJhbDpzdWJtaXNzaW9uU3VjY2Vzc2Z1bCcpLCB7IGF1dG9DbG9zZTogMzAwMCB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0UmVmLmN1cnJlbnQgPSB7IC4uLmNvbnRleHRSZWYuY3VycmVudCB9IC8vIHRyaWdnZXJzIHJlcmVuZGVyIG9mIGFsbCBjb21wb25lbnRzIHRoYXQgc3Vic2NyaWJlIHRvIGZvcm1cbiAgICAgICAgICBpZiAoanNvbi5tZXNzYWdlKSB7XG4gICAgICAgICAgICB0b2FzdC5lcnJvcihqc29uLm1lc3NhZ2UpXG5cbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGpzb24uZXJyb3JzKSkge1xuICAgICAgICAgICAgY29uc3QgW2ZpZWxkRXJyb3JzLCBub25GaWVsZEVycm9yc10gPSBqc29uLmVycm9ycy5yZWR1Y2UoXG4gICAgICAgICAgICAgIChbZmllbGRFcnJzLCBub25GaWVsZEVycnNdLCBlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdGaWVsZEVycnMgPSBbXVxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld05vbkZpZWxkRXJycyA9IFtdXG5cbiAgICAgICAgICAgICAgICBpZiAoZXJyPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICBuZXdOb25GaWVsZEVycnMucHVzaChlcnIpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXJyPy5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgZXJyLmRhdGEuZm9yRWFjaCgoZGF0YUVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhRXJyb3I/LmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgbmV3RmllbGRFcnJzLnB1c2goZGF0YUVycm9yKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIG5ld05vbkZpZWxkRXJycy5wdXNoKGRhdGFFcnJvcilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgWy4uLmZpZWxkRXJycywgLi4ubmV3RmllbGRFcnJzXSxcbiAgICAgICAgICAgICAgICAgIFsuLi5ub25GaWVsZEVycnMsIC4uLm5ld05vbkZpZWxkRXJyc10sXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBbW10sIFtdXSxcbiAgICAgICAgICAgIClcblxuICAgICAgICAgICAgZmllbGRFcnJvcnMuZm9yRWFjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGRpc3BhdGNoRmllbGRzKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnVVBEQVRFJyxcbiAgICAgICAgICAgICAgICAuLi4oY29udGV4dFJlZi5jdXJyZW50Py5maWVsZHM/LltlcnIuZmllbGRdIHx8IHt9KSxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2U6IGVyci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIHBhdGg6IGVyci5maWVsZCxcbiAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICBub25GaWVsZEVycm9ycy5mb3JFYWNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgdG9hc3QuZXJyb3IoZXJyLm1lc3NhZ2UgfHwgdCgnZXJyb3I6dW5rbm93bicpKVxuICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yTWVzc2FnZXM/LltyZXMuc3RhdHVzXSB8fCByZXM/LnN0YXR1c1RleHQgfHwgdCgnZXJyb3I6dW5rbm93bicpXG5cbiAgICAgICAgICB0b2FzdC5lcnJvcihtZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgc2V0UHJvY2Vzc2luZyhmYWxzZSlcblxuICAgICAgICB0b2FzdC5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhY3Rpb24sXG4gICAgICBkaXNhYmxlU3VjY2Vzc1N0YXR1cyxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzcGF0Y2hGaWVsZHMsXG4gICAgICBmaWVsZHMsXG4gICAgICBoYW5kbGVSZXNwb25zZSxcbiAgICAgIG1ldGhvZCxcbiAgICAgIG9uU3VibWl0LFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgcmVkaXJlY3QsXG4gICAgICByb3V0ZXIsXG4gICAgICB0LFxuICAgICAgaTE4bixcbiAgICAgIHdhaXRGb3JBdXRvY29tcGxldGUsXG4gICAgICBiZWZvcmVTdWJtaXQsXG4gICAgXSxcbiAgKVxuXG4gIGNvbnN0IGdldEZpZWxkcyA9IHVzZUNhbGxiYWNrKCgpID0+IGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIFtdKVxuXG4gIGNvbnN0IGdldEZpZWxkID0gdXNlQ2FsbGJhY2soKHBhdGg6IHN0cmluZykgPT4gY29udGV4dFJlZi5jdXJyZW50LmZpZWxkc1twYXRoXSwgW10pXG5cbiAgY29uc3QgZ2V0RGF0YSA9IHVzZUNhbGxiYWNrKCgpID0+IHJlZHVjZUZpZWxkc1RvVmFsdWVzKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIHRydWUpLCBbXSlcblxuICBjb25zdCBnZXRTaWJsaW5nRGF0YSA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXRoOiBzdHJpbmcpID0+IGdldFNpYmxpbmdEYXRhRnVuYyhjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzLCBwYXRoKSxcbiAgICBbXSxcbiAgKVxuICBjb25zdCBnZXREYXRhQnlQYXRoID0gdXNlQ2FsbGJhY2s8R2V0RGF0YUJ5UGF0aD4oXG4gICAgKHBhdGg6IHN0cmluZykgPT4gZ2V0RGF0YUJ5UGF0aEZ1bmMoY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcywgcGF0aCksXG4gICAgW10sXG4gIClcblxuICBjb25zdCBjcmVhdGVGb3JtRGF0YSA9IHVzZUNhbGxiYWNrKChvdmVycmlkZXM6IGFueSA9IHt9KSA9PiB7XG4gICAgY29uc3QgZGF0YSA9IHJlZHVjZUZpZWxkc1RvVmFsdWVzKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIHRydWUpXG5cbiAgICBjb25zdCBmaWxlID0gZGF0YT8uZmlsZVxuXG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIGRlbGV0ZSBkYXRhLmZpbGVcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhV2l0aE92ZXJyaWRlcyA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAuLi5vdmVycmlkZXMsXG4gICAgfVxuXG4gICAgY29uc3QgZGF0YVRvU2VyaWFsaXplID0ge1xuICAgICAgX3BheWxvYWQ6IEpTT04uc3RyaW5naWZ5KGRhdGFXaXRoT3ZlcnJpZGVzKSxcbiAgICAgIGZpbGUsXG4gICAgfVxuXG4gICAgLy8gbnVsbEFzVW5kZWZpbmVkcyBpcyBpbXBvcnRhbnQgdG8gYWxsb3cgdXBsb2FkcyBhbmQgcmVsYXRpb25zaGlwIGZpZWxkcyB0byBjbGVhciB0aGVtc2VsdmVzXG4gICAgY29uc3QgZm9ybURhdGEgPSBzZXJpYWxpemUoZGF0YVRvU2VyaWFsaXplLCB7IGluZGljZXM6IHRydWUsIG51bGxzQXNVbmRlZmluZWRzOiBmYWxzZSB9KVxuXG4gICAgcmV0dXJuIGZvcm1EYXRhXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlc2V0ID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGZpZWxkU2NoZW1hOiBGaWVsZFtdLCBkYXRhOiB1bmtub3duKSA9PiB7XG4gICAgICBjb25zdCBwcmVmZXJlbmNlcyA9IGF3YWl0IGdldERvY1ByZWZlcmVuY2VzKClcbiAgICAgIC8vIGNvbnN0IHN0YXRlID0gYXdhaXQgYnVpbGRTdGF0ZUZyb21TY2hlbWEoe1xuICAgICAgLy8gICBpZCxcbiAgICAgIC8vICAgLy8gVE9ETzogZml4IHRoaXNcbiAgICAgIC8vICAgLy8gQHRzLWlnbm9yZS1uZXh0LWxpbmVcbiAgICAgIC8vICAgY29uZmlnLFxuICAgICAgLy8gICBkYXRhLFxuICAgICAgLy8gICBmaWVsZFNjaGVtYSxcbiAgICAgIC8vICAgbG9jYWxlLFxuICAgICAgLy8gICBvcGVyYXRpb24sXG4gICAgICAvLyAgIHByZWZlcmVuY2VzLFxuICAgICAgLy8gICB0LFxuICAgICAgLy8gICB1c2VyLFxuICAgICAgLy8gfSlcbiAgICAgIGNvbnRleHRSZWYuY3VycmVudCA9IHsgLi4uaW5pdENvbnRleHRTdGF0ZSB9IGFzIEZvcm1Db250ZXh0VHlwZVxuICAgICAgc2V0TW9kaWZpZWQoZmFsc2UpXG4gICAgICAvLyBkaXNwYXRjaEZpZWxkcyh7IHN0YXRlLCB0eXBlOiAnUkVQTEFDRV9TVEFURScgfSlcbiAgICB9LFxuICAgIFtnZXREb2NQcmVmZXJlbmNlc10sXG4gIClcblxuICBjb25zdCByZXBsYWNlU3RhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoc3RhdGU6IEZvcm1TdGF0ZSkgPT4ge1xuICAgICAgY29udGV4dFJlZi5jdXJyZW50ID0geyAuLi5pbml0Q29udGV4dFN0YXRlIH0gYXMgRm9ybUNvbnRleHRUeXBlXG4gICAgICBzZXRNb2RpZmllZChmYWxzZSlcbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFUExBQ0VfU1RBVEUnLCBzdGF0ZSB9KVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoRmllbGRzXSxcbiAgKVxuXG4gIGNvbnN0IGdldEZpZWxkU3RhdGVCeVBhdGggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoeyBkYXRhLCBwYXRoIH0pID0+IHtcbiAgICAgIGNvbnN0IGZpZWxkU2NoZW1hID0gYXdhaXQgZ2V0Rm9ybVN0YXRlKHtcbiAgICAgICAgYXBpUm91dGUsXG4gICAgICAgIGJvZHk6IHtcbiAgICAgICAgICBjb2xsZWN0aW9uU2x1ZyxcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGdsb2JhbFNsdWcsXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICBUdXJuczogJ2FycmF5RmllbGQuMC5ncm91cDEyM2ZpZWxkLmFycmF5RmllbGQuMC50ZXh0RmllbGQnXG4gICAgICAgICAgICBJbnRvOiAnYXJyYXlGaWVsZC5ncm91cDEyM2ZpZWxkLmFycmF5RmllbGQudGV4dEZpZWxkJ1xuICAgICAgICAgICovXG4gICAgICAgICAgc2NoZW1hUGF0aDogYCR7Y29sbGVjdGlvblNsdWcgfHwgZ2xvYmFsU2x1Z30uJHtwYXRofWAucmVwbGFjZSgvXFwuXFxkK1xcLi9nLCAnLicpLFxuICAgICAgICB9LFxuICAgICAgICBzZXJ2ZXJVUkwsXG4gICAgICB9KVxuICAgICAgcmV0dXJuIGZpZWxkU2NoZW1hXG4gICAgfSxcbiAgICBbYXBpUm91dGUsIGNvbGxlY3Rpb25TbHVnLCBnbG9iYWxTbHVnLCBzZXJ2ZXJVUkxdLFxuICApXG5cbiAgY29uc3QgYWRkRmllbGRSb3c6IEZvcm1Db250ZXh0VHlwZVsnYWRkRmllbGRSb3cnXSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7IGRhdGEsIHBhdGgsIHJvd0luZGV4IH0pID0+IHtcbiAgICAgIGNvbnN0IHN1YkZpZWxkU3RhdGUgPSBhd2FpdCBnZXRGaWVsZFN0YXRlQnlQYXRoKHsgZGF0YSwgcGF0aCB9KVxuXG4gICAgICBkaXNwYXRjaEZpZWxkcyh7XG4gICAgICAgIHR5cGU6ICdBRERfUk9XJyxcbiAgICAgICAgYmxvY2tUeXBlOiBkYXRhPy5ibG9ja1R5cGUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHJvd0luZGV4LFxuICAgICAgICBzdWJGaWVsZFN0YXRlLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtnZXRGaWVsZFN0YXRlQnlQYXRoLCBkaXNwYXRjaEZpZWxkc10sXG4gIClcblxuICBjb25zdCByZW1vdmVGaWVsZFJvdzogRm9ybUNvbnRleHRUeXBlWydyZW1vdmVGaWVsZFJvdyddID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgcGF0aCwgcm93SW5kZXggfSkgPT4ge1xuICAgICAgZGlzcGF0Y2hGaWVsZHMoeyB0eXBlOiAnUkVNT1ZFX1JPVycsIHBhdGgsIHJvd0luZGV4IH0pXG4gICAgfSxcbiAgICBbZGlzcGF0Y2hGaWVsZHNdLFxuICApXG5cbiAgY29uc3QgcmVwbGFjZUZpZWxkUm93OiBGb3JtQ29udGV4dFR5cGVbJ3JlcGxhY2VGaWVsZFJvdyddID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHsgZGF0YSwgcGF0aCwgcm93SW5kZXggfSkgPT4ge1xuICAgICAgY29uc3Qgc3ViRmllbGRTdGF0ZSA9IGF3YWl0IGdldEZpZWxkU3RhdGVCeVBhdGgoeyBkYXRhLCBwYXRoIH0pXG5cbiAgICAgIGRpc3BhdGNoRmllbGRzKHtcbiAgICAgICAgdHlwZTogJ1JFUExBQ0VfUk9XJyxcbiAgICAgICAgYmxvY2tUeXBlOiBkYXRhPy5ibG9ja1R5cGUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHJvd0luZGV4LFxuICAgICAgICBzdWJGaWVsZFN0YXRlLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFtnZXRGaWVsZFN0YXRlQnlQYXRoLCBkaXNwYXRjaEZpZWxkc10sXG4gIClcblxuICBjb250ZXh0UmVmLmN1cnJlbnQuc3VibWl0ID0gc3VibWl0XG4gIGNvbnRleHRSZWYuY3VycmVudC5nZXRGaWVsZHMgPSBnZXRGaWVsZHNcbiAgY29udGV4dFJlZi5jdXJyZW50LmdldEZpZWxkID0gZ2V0RmllbGRcbiAgY29udGV4dFJlZi5jdXJyZW50LmdldERhdGEgPSBnZXREYXRhXG4gIGNvbnRleHRSZWYuY3VycmVudC5nZXRTaWJsaW5nRGF0YSA9IGdldFNpYmxpbmdEYXRhXG4gIGNvbnRleHRSZWYuY3VycmVudC5nZXREYXRhQnlQYXRoID0gZ2V0RGF0YUJ5UGF0aFxuICBjb250ZXh0UmVmLmN1cnJlbnQudmFsaWRhdGVGb3JtID0gdmFsaWRhdGVGb3JtXG4gIGNvbnRleHRSZWYuY3VycmVudC5jcmVhdGVGb3JtRGF0YSA9IGNyZWF0ZUZvcm1EYXRhXG4gIGNvbnRleHRSZWYuY3VycmVudC5zZXRNb2RpZmllZCA9IHNldE1vZGlmaWVkXG4gIGNvbnRleHRSZWYuY3VycmVudC5zZXRQcm9jZXNzaW5nID0gc2V0UHJvY2Vzc2luZ1xuICBjb250ZXh0UmVmLmN1cnJlbnQuc2V0U3VibWl0dGVkID0gc2V0U3VibWl0dGVkXG4gIGNvbnRleHRSZWYuY3VycmVudC5kaXNhYmxlZCA9IGRpc2FibGVkXG4gIGNvbnRleHRSZWYuY3VycmVudC5mb3JtUmVmID0gZm9ybVJlZlxuICBjb250ZXh0UmVmLmN1cnJlbnQucmVzZXQgPSByZXNldFxuICBjb250ZXh0UmVmLmN1cnJlbnQucmVwbGFjZVN0YXRlID0gcmVwbGFjZVN0YXRlXG4gIGNvbnRleHRSZWYuY3VycmVudC5kaXNwYXRjaEZpZWxkcyA9IGRpc3BhdGNoRmllbGRzXG4gIGNvbnRleHRSZWYuY3VycmVudC5hZGRGaWVsZFJvdyA9IGFkZEZpZWxkUm93XG4gIGNvbnRleHRSZWYuY3VycmVudC5yZW1vdmVGaWVsZFJvdyA9IHJlbW92ZUZpZWxkUm93XG4gIGNvbnRleHRSZWYuY3VycmVudC5yZXBsYWNlRmllbGRSb3cgPSByZXBsYWNlRmllbGRSb3dcbiAgY29udGV4dFJlZi5jdXJyZW50LnV1aWQgPSB1dWlkXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodHlwZW9mIHN1Ym1pdHRlZEZyb21Qcm9wcyA9PT0gJ2Jvb2xlYW4nKSBzZXRTdWJtaXR0ZWQoc3VibWl0dGVkRnJvbVByb3BzKVxuICB9LCBbc3VibWl0dGVkRnJvbVByb3BzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGNvbnRleHRSZWYuY3VycmVudCA9IHsgLi4uaW5pdENvbnRleHRTdGF0ZSB9IGFzIEZvcm1Db250ZXh0VHlwZVxuICAgICAgZGlzcGF0Y2hGaWVsZHMoeyB0eXBlOiAnUkVQTEFDRV9TVEFURScsIHN0YXRlOiBpbml0aWFsU3RhdGUgfSlcbiAgICB9XG4gIH0sIFtpbml0aWFsU3RhdGUsIGRpc3BhdGNoRmllbGRzXSlcblxuICB1c2VUaHJvdHRsZWRFZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgcmVmcmVzaENvb2tpZSgpXG4gICAgfSxcbiAgICAxNTAwMCxcbiAgICBbZmllbGRzXSxcbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29udGV4dFJlZi5jdXJyZW50ID0geyAuLi5jb250ZXh0UmVmLmN1cnJlbnQgfSAvLyB0cmlnZ2VycyByZXJlbmRlciBvZiBhbGwgY29tcG9uZW50cyB0aGF0IHN1YnNjcmliZSB0byBmb3JtXG4gICAgc2V0TW9kaWZpZWQoZmFsc2UpXG4gIH0sIFtsb2NhbGVdKVxuXG4gIGNvbnN0IGNsYXNzZXMgPSBbY2xhc3NOYW1lLCBiYXNlQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcblxuICB1c2VEZWJvdW5jZWRFZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgZXhlY3V0ZU9uQ2hhbmdlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvbkNoYW5nZSkpIHtcbiAgICAgICAgICBsZXQgcmV2YWxpZGF0ZWRGb3JtU3RhdGU6IEZvcm1TdGF0ZVxuXG4gICAgICAgICAgYXdhaXQgb25DaGFuZ2UucmVkdWNlKGFzeW5jIChwcmlvck9uQ2hhbmdlLCBvbkNoYW5nZUZuKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBwcmlvck9uQ2hhbmdlXG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9uQ2hhbmdlRm4oe1xuICAgICAgICAgICAgICBmb3JtU3RhdGU6IGZpZWxkcyxcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHJldmFsaWRhdGVkRm9ybVN0YXRlID0gcmVzdWx0XG4gICAgICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpXG5cbiAgICAgICAgICBjb25zdCB7IGNoYW5nZWQsIG5ld1N0YXRlIH0gPSBtZXJnZVNlcnZlckZvcm1TdGF0ZShmaWVsZHMsIHJldmFsaWRhdGVkRm9ybVN0YXRlKVxuXG4gICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFUExBQ0VfU1RBVEUnLCBvcHRpbWl6ZTogZmFsc2UsIHN0YXRlOiBuZXdTdGF0ZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBleGVjdXRlT25DaGFuZ2UoKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIH0sXG4gICAgMTUwLFxuICAgIFtmaWVsZHMsIGRpc3BhdGNoRmllbGRzLCBvbkNoYW5nZV0sXG4gIClcblxuICByZXR1cm4gKFxuICAgIDxmb3JtXG4gICAgICBhY3Rpb249e2FjdGlvbn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3Nlc31cbiAgICAgIG1ldGhvZD17bWV0aG9kfVxuICAgICAgbm9WYWxpZGF0ZVxuICAgICAgb25TdWJtaXQ9eyhlKSA9PiBjb250ZXh0UmVmLmN1cnJlbnQuc3VibWl0KHt9LCBlKX1cbiAgICAgIHJlZj17Zm9ybVJlZn1cbiAgICA+XG4gICAgICA8Rm9ybUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHRSZWYuY3VycmVudH0+XG4gICAgICAgIDxGb3JtV2F0Y2hDb250ZXh0LlByb3ZpZGVyXG4gICAgICAgICAgdmFsdWU9e3tcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIC4uLmNvbnRleHRSZWYuY3VycmVudCxcbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFN1Ym1pdHRlZENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3N1Ym1pdHRlZH0+XG4gICAgICAgICAgICA8UHJvY2Vzc2luZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3Byb2Nlc3Npbmd9PlxuICAgICAgICAgICAgICA8TW9kaWZpZWRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXttb2RpZmllZH0+XG4gICAgICAgICAgICAgICAgPEZvcm1GaWVsZHNDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtmaWVsZHNSZWR1Y2VyfT5cbiAgICAgICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgICAgICA8L0Zvcm1GaWVsZHNDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgICA8L01vZGlmaWVkQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICAgIDwvUHJvY2Vzc2luZ0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgPC9TdWJtaXR0ZWRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICA8L0Zvcm1XYXRjaENvbnRleHQuUHJvdmlkZXI+XG4gICAgICA8L0Zvcm1Db250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZm9ybT5cbiAgKVxufVxuXG5leHBvcnQgZGVmYXVsdCBGb3JtXG4iXSwibmFtZXMiOlsiYmFzZUNsYXNzIiwiRm9ybSIsInByb3BzIiwiaWQiLCJnZXREb2NQcmVmZXJlbmNlcyIsInVzZURvY3VtZW50SW5mbyIsImFjdGlvbiIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGlzYWJsZVN1Y2Nlc3NTdGF0dXMiLCJkaXNhYmxlZCIsImJlZm9yZVN1Ym1pdCIsImhhbmRsZVJlc3BvbnNlIiwiaW5pdGlhbFN0YXRlIiwib25DaGFuZ2UiLCJvblN1Ym1pdCIsIm9uU3VjY2VzcyIsInJlZGlyZWN0Iiwic3VibWl0dGVkIiwic3VibWl0dGVkRnJvbVByb3BzIiwidXVpZCIsIndhaXRGb3JBdXRvY29tcGxldGUiLCJtZXRob2QiLCJ1bmRlZmluZWQiLCJyb3V0ZXIiLCJ1c2VSb3V0ZXIiLCJjb2RlIiwibG9jYWxlIiwidXNlTG9jYWxlIiwiaTE4biIsInQiLCJ1c2VUcmFuc2xhdGlvbiIsInJlZnJlc2hDb29raWUiLCJ1c2VyIiwidXNlQXV0aCIsIm9wZXJhdGlvbiIsInVzZU9wZXJhdGlvbiIsImNvbmZpZyIsInVzZUNvbmZpZyIsInJvdXRlcyIsImFwaSIsImFwaVJvdXRlIiwic2VydmVyVVJMIiwibW9kaWZpZWQiLCJzZXRNb2RpZmllZCIsInVzZVN0YXRlIiwicHJvY2Vzc2luZyIsInNldFByb2Nlc3NpbmciLCJzZXRTdWJtaXR0ZWQiLCJmb3JtUmVmIiwidXNlUmVmIiwiY29udGV4dFJlZiIsImNvbGxlY3Rpb25TbHVnIiwiZ2xvYmFsU2x1ZyIsImZpZWxkc1JlZHVjZXIiLCJ1c2VSZWR1Y2VyIiwiZmllbGRSZWR1Y2VyIiwiZmllbGRzIiwiZGlzcGF0Y2hGaWVsZHMiLCJjdXJyZW50IiwidmFsaWRhdGVGb3JtIiwidXNlQ2FsbGJhY2siLCJ2YWxpZGF0ZWRGaWVsZFN0YXRlIiwiaXNWYWxpZCIsImRhdGFGcm9tQ29udGV4dCIsImdldERhdGEiLCJkYXRhIiwidmFsaWRhdGlvblByb21pc2VzIiwiT2JqZWN0IiwiZW50cmllcyIsIm1hcCIsInBhdGgiLCJmaWVsZCIsInZhbGlkYXRlZEZpZWxkIiwidmFsaWQiLCJwYXNzZXNDb25kaXRpb24iLCJ2YWxpZGF0aW9uUmVzdWx0IiwidmFsaWRhdGUiLCJ2YWx1ZVRvVmFsaWRhdGUiLCJ2YWx1ZSIsInJvd3MiLCJBcnJheSIsImlzQXJyYXkiLCJnZXREYXRhQnlQYXRoIiwic2libGluZ0RhdGEiLCJnZXRTaWJsaW5nRGF0YSIsImVycm9yTWVzc2FnZSIsIlByb21pc2UiLCJhbGwiLCJpc0RlZXBFcXVhbCIsInR5cGUiLCJzdGF0ZSIsInN1Ym1pdCIsIm9wdGlvbnMiLCJlIiwiYWN0aW9uVG9Vc2UiLCJtZXRob2RUb1VzZSIsIm92ZXJyaWRlcyIsInNraXBWYWxpZGF0aW9uIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJ3YWl0IiwicmV2YWxpZGF0ZWRGb3JtU3RhdGUiLCJyZWR1Y2UiLCJwcmlvck9uQ2hhbmdlIiwiYmVmb3JlU3VibWl0Rm4iLCJyZXN1bHQiLCJmb3JtU3RhdGUiLCJyZXNvbHZlIiwiZXZlcnkiLCJ0b2FzdCIsImVycm9yIiwicmVkdWNlRmllbGRzVG9WYWx1ZXMiLCJmb3JtRGF0YSIsImNyZWF0ZUZvcm1EYXRhIiwicmVzIiwicmVxdWVzdHMiLCJ0b0xvd2VyQ2FzZSIsImJvZHkiLCJoZWFkZXJzIiwibGFuZ3VhZ2UiLCJjb250ZW50VHlwZSIsImdldCIsImlzSlNPTiIsImluZGV4T2YiLCJqc29uIiwic3RhdHVzIiwicHVzaCIsInN1Y2Nlc3MiLCJtZXNzYWdlIiwiYXV0b0Nsb3NlIiwiZXJyb3JzIiwiZmllbGRFcnJvcnMiLCJub25GaWVsZEVycm9ycyIsImZpZWxkRXJycyIsIm5vbkZpZWxkRXJycyIsImVyciIsIm5ld0ZpZWxkRXJycyIsIm5ld05vbkZpZWxkRXJycyIsImZvckVhY2giLCJkYXRhRXJyb3IiLCJlcnJvck1lc3NhZ2VzIiwic3RhdHVzVGV4dCIsImdldEZpZWxkcyIsImdldEZpZWxkIiwiZ2V0U2libGluZ0RhdGFGdW5jIiwiZ2V0RGF0YUJ5UGF0aEZ1bmMiLCJmaWxlIiwiZGF0YVdpdGhPdmVycmlkZXMiLCJkYXRhVG9TZXJpYWxpemUiLCJfcGF5bG9hZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXJpYWxpemUiLCJpbmRpY2VzIiwibnVsbHNBc1VuZGVmaW5lZHMiLCJyZXNldCIsImZpZWxkU2NoZW1hIiwicHJlZmVyZW5jZXMiLCJpbml0Q29udGV4dFN0YXRlIiwicmVwbGFjZVN0YXRlIiwiZ2V0RmllbGRTdGF0ZUJ5UGF0aCIsImdldEZvcm1TdGF0ZSIsInNjaGVtYVBhdGgiLCJyZXBsYWNlIiwiYWRkRmllbGRSb3ciLCJyb3dJbmRleCIsInN1YkZpZWxkU3RhdGUiLCJibG9ja1R5cGUiLCJyZW1vdmVGaWVsZFJvdyIsInJlcGxhY2VGaWVsZFJvdyIsInVzZUVmZmVjdCIsInVzZVRocm90dGxlZEVmZmVjdCIsImNsYXNzZXMiLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsInVzZURlYm91bmNlZEVmZmVjdCIsImV4ZWN1dGVPbkNoYW5nZSIsIm9uQ2hhbmdlRm4iLCJjaGFuZ2VkIiwibmV3U3RhdGUiLCJtZXJnZVNlcnZlckZvcm1TdGF0ZSIsIm9wdGltaXplIiwiZm9ybSIsIm5vVmFsaWRhdGUiLCJyZWYiLCJGb3JtQ29udGV4dCIsIlByb3ZpZGVyIiwiRm9ybVdhdGNoQ29udGV4dCIsIlN1Ym1pdHRlZENvbnRleHQiLCJQcm9jZXNzaW5nQ29udGV4dCIsIk1vZGlmaWVkQ29udGV4dCIsIkZvcm1GaWVsZHNDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7K0JBeWxCQTs7O2VBQUE7OztrRUFybEJ3Qjs0QkFDRTtrQ0FDQTsyQkFDTDsrREFDdUQ7K0JBQ3REO29DQVVhOzJFQUNKO3NCQUNQO3dCQUNFOzhCQUNNO3dCQUNOO21DQUNHOzZCQUNFO3FCQUNOOzhCQUNJO3lCQVF0QjtzRUFDbUI7OEJBQ0c7c0VBQ0M7dUVBQ0M7eUVBQ0Y7c0NBQ1E7NkVBQ0o7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWpDLE1BQU1BLFlBQVk7QUFFbEIsTUFBTUMsT0FBd0IsQ0FBQ0M7SUFDN0IsTUFBTSxFQUFFQyxFQUFFLEVBQUVDLGlCQUFpQixFQUFFLEdBQUdDLElBQUFBLDZCQUFlO0lBRWpELE1BQU0sRUFDSkMsTUFBTSxFQUNOQyxRQUFRLEVBQ1JDLFNBQVMsRUFDVEMsb0JBQW9CLEVBQ3BCQyxRQUFRLEVBQ1Isa0VBQWtFO0lBQ2xFQyxZQUFZLEVBQ1pDLGNBQWMsRUFDZEMsWUFB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
511
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9mb3Jtcy9Gb3JtL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcbmltcG9ydCB0eXBlIHsgRmllbGQsIEZvcm1TdGF0ZSB9IGZyb20gJ3BheWxvYWQvdHlwZXMnXG5cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLW5vbmludGVyYWN0aXZlLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgaXNEZWVwRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCdcbmltcG9ydCB7IHVzZVJvdXRlciB9IGZyb20gJ25leHQvbmF2aWdhdGlvbi5qcydcbmltcG9ydCB7IHNlcmlhbGl6ZSB9IGZyb20gJ29iamVjdC10by1mb3JtZGF0YSdcbmltcG9ydCB7IHdhaXQgfSBmcm9tICdwYXlsb2FkL3V0aWxpdGllcydcbmltcG9ydCBRdWVyeVN0cmluZyBmcm9tICdxcydcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWR1Y2VyLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB0b2FzdCB9IGZyb20gJ3JlYWN0LXRvYXN0aWZ5J1xuXG5pbXBvcnQgdHlwZSB7IENvbnRleHQgYXMgRm9ybUNvbnRleHRUeXBlLCBHZXREYXRhQnlQYXRoLCBQcm9wcywgU3VibWl0T3B0aW9ucyB9IGZyb20gJy4vdHlwZXMuanMnXG5cbmltcG9ydCB7IHVzZURlYm91bmNlZEVmZmVjdCB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZURlYm91bmNlZEVmZmVjdC5qcydcbmltcG9ydCB1c2VUaHJvdHRsZWRFZmZlY3QgZnJvbSAnLi4vLi4vaG9va3MvdXNlVGhyb3R0bGVkRWZmZWN0LmpzJ1xuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9BdXRoL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlQ29uZmlnIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0NvbmZpZy9pbmRleC5qcydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9Eb2N1bWVudEluZm8vaW5kZXguanMnXG5pbXBvcnQgeyB1c2VGb3JtUXVlcnlQYXJhbXMgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvRm9ybVF1ZXJ5UGFyYW1zL2luZGV4LmpzJ1xuaW1wb3J0IHsgdXNlTG9jYWxlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL0xvY2FsZS9pbmRleC5qcydcbmltcG9ydCB7IHVzZU9wZXJhdGlvbiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9PcGVyYXRpb25Qcm92aWRlci9pbmRleC5qcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL1RyYW5zbGF0aW9uL2luZGV4LmpzJ1xuaW1wb3J0IHsgcmVxdWVzdHMgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvYXBpLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2dldEZvcm1TdGF0ZS5qcydcbmltcG9ydCB7XG4gIEZvcm1Db250ZXh0LFxuICBGb3JtRmllbGRzQ29udGV4dCxcbiAgRm9ybVdhdGNoQ29udGV4dCxcbiAgTW9kaWZpZWRDb250ZXh0LFxuICBQcm9jZXNzaW5nQ29udGV4dCxcbiAgU3VibWl0dGVkQ29udGV4dCxcbn0gZnJvbSAnLi9jb250ZXh0LmpzJ1xuaW1wb3J0IGVycm9yTWVzc2FnZXMgZnJvbSAnLi9lcnJvck1lc3NhZ2VzLmpzJ1xuaW1wb3J0IHsgZmllbGRSZWR1Y2VyIH0gZnJvbSAnLi9maWVsZFJlZHVjZXIuanMnXG5pbXBvcnQgZ2V0RGF0YUJ5UGF0aEZ1bmMgZnJvbSAnLi9nZXREYXRhQnlQYXRoLmpzJ1xuaW1wb3J0IGdldFNpYmxpbmdEYXRhRnVuYyBmcm9tICcuL2dldFNpYmxpbmdEYXRhLmpzJ1xuaW1wb3J0IGluaXRDb250ZXh0U3RhdGUgZnJvbSAnLi9pbml0Q29udGV4dFN0YXRlLmpzJ1xuaW1wb3J0IHsgbWVyZ2VTZXJ2ZXJGb3JtU3RhdGUgfSBmcm9tICcuL21lcmdlU2VydmVyRm9ybVN0YXRlLmpzJ1xuaW1wb3J0IHJlZHVjZUZpZWxkc1RvVmFsdWVzIGZyb20gJy4vcmVkdWNlRmllbGRzVG9WYWx1ZXMuanMnXG5cbmNvbnN0IGJhc2VDbGFzcyA9ICdmb3JtJ1xuXG5jb25zdCBGb3JtOiBSZWFjdC5GQzxQcm9wcz4gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBpZCwgY29sbGVjdGlvblNsdWcsIGdldERvY1ByZWZlcmVuY2VzLCBnbG9iYWxTbHVnIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuXG4gIGNvbnN0IHtcbiAgICBhY3Rpb24sXG4gICAgY2hpbGRyZW4sXG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc2FibGVTdWNjZXNzU3RhdHVzLFxuICAgIGRpc2FibGVkLFxuICAgIC8vIGZpZWxkczogZmllbGRzRnJvbVByb3BzID0gY29sbGVjdGlvbj8uZmllbGRzIHx8IGdsb2JhbD8uZmllbGRzLFxuICAgIGJlZm9yZVN1Ym1pdCxcbiAgICBoYW5kbGVSZXNwb25zZSxcbiAgICBpbml0aWFsU3RhdGUsIC8vIGZ1bGx5IGZvcm1lZCBpbml0aWFsIGZpZWxkIHN0YXRlXG4gICAgb25DaGFuZ2UsXG4gICAgb25TdWJtaXQsXG4gICAgb25TdWNjZXNzLFxuICAgIHJlZGlyZWN0LFxuICAgIHN1Ym1pdHRlZDogc3VibWl0dGVkRnJvbVByb3BzLFxuICAgIHV1aWQsXG4gICAgd2FpdEZvckF1dG9jb21wbGV0ZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgbWV0aG9kID0gJ21ldGhvZCcgaW4gcHJvcHMgPyBwcm9wcy5tZXRob2QgOiB1bmRlZmluZWRcblxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxuXG4gIGNvbnN0IHsgY29kZTogbG9jYWxlIH0gPSB1c2VMb2NhbGUoKVxuICBjb25zdCB7IGkxOG4sIHQgfSA9IHVzZVRyYW5zbGF0aW9uKClcbiAgY29uc3QgeyByZWZyZXNoQ29va2llLCB1c2VyIH0gPSB1c2VBdXRoKClcbiAgY29uc3Qgb3BlcmF0aW9uID0gdXNlT3BlcmF0aW9uKClcbiAgY29uc3QgeyBmb3JtUXVlcnlQYXJhbXMgfSA9IHVzZUZvcm1RdWVyeVBhcmFtcygpXG5cbiAgY29uc3QgY29uZmlnID0gdXNlQ29uZmlnKClcbiAgY29uc3Qge1xuICAgIHJvdXRlczogeyBhcGk6IGFwaVJvdXRlIH0sXG4gICAgc2VydmVyVVJMLFxuICB9ID0gY29uZmlnXG5cbiAgY29uc3QgW21vZGlmaWVkLCBzZXRNb2RpZmllZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Byb2Nlc3NpbmcsIHNldFByb2Nlc3NpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzdWJtaXR0ZWQsIHNldFN1Ym1pdHRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgZm9ybVJlZiA9IHVzZVJlZjxIVE1MRm9ybUVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNvbnRleHRSZWYgPSB1c2VSZWYoe30gYXMgRm9ybUNvbnRleHRUeXBlKVxuXG4gIGNvbnN0IGZpZWxkc1JlZHVjZXIgPSB1c2VSZWR1Y2VyKGZpZWxkUmVkdWNlciwge30sICgpID0+IGluaXRpYWxTdGF0ZSlcbiAgLyoqXG4gICAqIGBmaWVsZHNgIGlzIHRoZSBjdXJyZW50LCB1cC10by1kYXRlIHN0YXRlL2RhdGEgb2YgYWxsIGZpZWxkcyBpbiB0aGUgZm9ybS4gSXQgY2FuIGJlIG1vZGlmaWVkIGJ5IHVzaW5nIGRpc3BhdGNoRmllbGRzLFxuICAgKiB3aGljaCBjYWxscyB0aGUgZmllbGRSZWR1Y2VyLCB3aGljaCB0aGVuIHVwZGF0ZXMgdGhlIHN0YXRlLlxuICAgKi9cbiAgY29uc3QgW2ZpZWxkcywgZGlzcGF0Y2hGaWVsZHNdID0gZmllbGRzUmVkdWNlclxuXG4gIGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMgPSBmaWVsZHNcblxuICBjb25zdCB2YWxpZGF0ZUZvcm0gPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdmFsaWRhdGVkRmllbGRTdGF0ZSA9IHt9XG4gICAgbGV0IGlzVmFsaWQgPSB0cnVlXG5cbiAgICBjb25zdCBkYXRhRnJvbUNvbnRleHQgPSBjb250ZXh0UmVmLmN1cnJlbnQuZ2V0RGF0YSgpXG4gICAgY29uc3QgZGF0YSA9IGRhdGFGcm9tQ29udGV4dFxuXG4gICAgY29uc3QgdmFsaWRhdGlvblByb21pc2VzID0gT2JqZWN0LmVudHJpZXMoY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcykubWFwKFxuICAgICAgYXN5bmMgKFtwYXRoLCBmaWVsZF0pID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGVkRmllbGQgPSB7XG4gICAgICAgICAgLi4uZmllbGQsXG4gICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmllbGQucGFzc2VzQ29uZGl0aW9uICE9PSBmYWxzZSkge1xuICAgICAgICAgIGxldCB2YWxpZGF0aW9uUmVzdWx0OiBib29sZWFuIHwgc3RyaW5nID0gdHJ1ZVxuXG4gICAgICAgICAgaWYgKHR5cGVvZiBmaWVsZC52YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbGV0IHZhbHVlVG9WYWxpZGF0ZSA9IGZpZWxkLnZhbHVlXG5cbiAgICAgICAgICAgIGlmIChmaWVsZD8ucm93cyAmJiBBcnJheS5pc0FycmF5KGZpZWxkLnJvd3MpKSB7XG4gICAgICAgICAgICAgIHZhbHVlVG9WYWxpZGF0ZSA9IGNvbnRleHRSZWYuY3VycmVudC5nZXREYXRhQnlQYXRoKHBhdGgpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCBmaWVsZC52YWxpZGF0ZSh2YWx1ZVRvVmFsaWRhdGUsIHtcbiAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgb3BlcmF0aW9uLFxuICAgICAgICAgICAgICBzaWJsaW5nRGF0YTogY29udGV4dFJlZi5jdXJyZW50LmdldFNpYmxpbmdEYXRhKHBhdGgpLFxuICAgICAgICAgICAgICB0LFxuICAgICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkYXRpb25SZXN1bHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZWRGaWVsZC5lcnJvck1lc3NhZ2UgPSB2YWxpZGF0aW9uUmVzdWx0XG4gICAgICAgICAgICB2YWxpZGF0ZWRGaWVsZC52YWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YWxpZGF0ZWRGaWVsZFN0YXRlW3BhdGhdID0gdmFsaWRhdGVkRmllbGRcbiAgICAgIH0sXG4gICAgKVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodmFsaWRhdGlvblByb21pc2VzKVxuXG4gICAgaWYgKCFpc0RlZXBFcXVhbChjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzLCB2YWxpZGF0ZWRGaWVsZFN0YXRlKSkge1xuICAgICAgZGlzcGF0Y2hGaWVsZHMoeyB0eXBlOiAnUkVQTEFDRV9TVEFURScsIHN0YXRlOiB2YWxpZGF0ZWRGaWVsZFN0YXRlIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVmFsaWRcbiAgfSwgW2lkLCB1c2VyLCBvcGVyYXRpb24sIHQsIGRpc3BhdGNoRmllbGRzLCBjb25maWddKVxuXG4gIGNvbnN0IHN1Ym1pdCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChvcHRpb25zOiBTdWJtaXRPcHRpb25zID0ge30sIGUpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWN0aW9uOiBhY3Rpb25BcmcsXG4gICAgICAgIG1ldGhvZDogbWV0aG9kVG9Vc2UgPSBtZXRob2QsXG4gICAgICAgIG92ZXJyaWRlcyA9IHt9LFxuICAgICAgICBza2lwVmFsaWRhdGlvbixcbiAgICAgIH0gPSBvcHRpb25zXG5cbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgfVxuXG4gICAgICBzZXRQcm9jZXNzaW5nKHRydWUpXG4gICAgICBzZXRTdWJtaXR0ZWQodHJ1ZSlcblxuICAgICAgaWYgKHdhaXRGb3JBdXRvY29tcGxldGUpIGF3YWl0IHdhaXQoMTAwKVxuXG4gICAgICAvLyBFeGVjdXRlIHNlcnZlciBzaWRlIHZhbGlkYXRpb25zXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShiZWZvcmVTdWJtaXQpKSB7XG4gICAgICAgIGxldCByZXZhbGlkYXRlZEZvcm1TdGF0ZTogRm9ybVN0YXRlXG5cbiAgICAgICAgYXdhaXQgYmVmb3JlU3VibWl0LnJlZHVjZShhc3luYyAocHJpb3JPbkNoYW5nZSwgYmVmb3JlU3VibWl0Rm4pID0+IHtcbiAgICAgICAgICBhd2FpdCBwcmlvck9uQ2hhbmdlXG5cbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBiZWZvcmVTdWJtaXRGbih7XG4gICAgICAgICAgICBmb3JtU3RhdGU6IGZpZWxkcyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV2YWxpZGF0ZWRGb3JtU3RhdGUgPSByZXN1bHRcbiAgICAgICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpXG5cbiAgICAgICAgY29uc3QgaXNWYWxpZCA9IE9iamVjdC5lbnRyaWVzKHJldmFsaWRhdGVkRm9ybVN0YXRlKS5ldmVyeSgoWywgZmllbGRdKSA9PiBmaWVsZC52YWxpZClcblxuICAgICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgICBzZXRQcm9jZXNzaW5nKGZhbHNlKVxuICAgICAgICAgIHJldHVybiBkaXNwYXRjaEZpZWxkcyh7IHR5cGU6ICdSRVBMQUNFX1NUQVRFJywgc3RhdGU6IHJldmFsaWRhdGVkRm9ybVN0YXRlIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNWYWxpZCA9IHNraXBWYWxpZGF0aW9uID8gdHJ1ZSA6IGF3YWl0IGNvbnRleHRSZWYuY3VycmVudC52YWxpZGF0ZUZvcm0oKVxuXG4gICAgICAvLyBJZiBub3QgdmFsaWQsIHByZXZlbnQgc3VibWlzc2lvblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIHRvYXN0LmVycm9yKHQoJ2Vycm9yOmNvcnJlY3RJbnZhbGlkRmllbGRzJykpXG4gICAgICAgIHNldFByb2Nlc3NpbmcoZmFsc2UpXG5cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIHN1Ym1pdCBoYW5kbGVyIGNvbWVzIHRocm91Z2ggdmlhIHByb3BzLCBydW4gdGhhdFxuICAgICAgaWYgKG9uU3VibWl0KSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgLi4ucmVkdWNlRmllbGRzVG9WYWx1ZXMoZmllbGRzLCB0cnVlKSxcbiAgICAgICAgICAuLi5vdmVycmlkZXMsXG4gICAgICAgIH1cblxuICAgICAgICBvblN1Ym1pdChmaWVsZHMsIGRhdGEpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gY29udGV4dFJlZi5jdXJyZW50LmNyZWF0ZUZvcm1EYXRhKG92ZXJyaWRlcylcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHJlc1xuICAgICAgICBjb25zdCBhY3Rpb25FbmRwb2ludCA9XG4gICAgICAgICAgYWN0aW9uQXJnIHx8XG4gICAgICAgICAgKHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGAke2FjdGlvbn0ke1F1ZXJ5U3RyaW5nLnN0cmluZ2lmeShmb3JtUXVlcnlQYXJhbXMsIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSl9YFxuICAgICAgICAgICAgOiBudWxsKVxuXG4gICAgICAgIGlmIChhY3Rpb25FbmRwb2ludCkge1xuICAgICAgICAgIHJlcyA9IGF3YWl0IHJlcXVlc3RzW21ldGhvZFRvVXNlLnRvTG93ZXJDYXNlKCldKGFjdGlvbkVuZHBvaW50LCB7XG4gICAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ0FjY2VwdC1MYW5ndWFnZSc6IGkxOG4ubGFuZ3VhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJlcyA9IGF3YWl0IGFjdGlvbihmb3JtRGF0YSlcbiAgICAgICAgfVxuXG4gICAgICAgIHNldE1vZGlmaWVkKGZhbHNlKVxuXG4gICAgICAgIGlmICh0eXBlb2YgaGFuZGxlUmVzcG9uc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBoYW5kbGVSZXNwb25zZShyZXMpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBzZXRQcm9jZXNzaW5nKGZhbHNlKVxuXG4gICAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKVxuICAgICAgICBjb25zdCBpc0pTT04gPSBjb250ZW50VHlwZSAmJiBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgIT09IC0xXG5cbiAgICAgICAgbGV0IGpzb246IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fVxuXG4gICAgICAgIGlmIChpc0pTT04pIGpzb24gPSBhd2FpdCByZXMuanNvbigpXG5cbiAgICAgICAgaWYgKHJlcy5zdGF0dXMgPCA0MDApIHtcbiAgICAgICAgICBzZXRTdWJtaXR0ZWQoZmFsc2UpXG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uU3VjY2VzcyA9PT0gJ2Z1bmN0aW9uJykgb25TdWNjZXNzKGpzb24pXG5cbiAgICAgICAgICBpZiAocmVkaXJlY3QpIHtcbiAgICAgICAgICAgIHJvdXRlci5wdXNoKHJlZGlyZWN0KVxuICAgICAgICAgIH0gZWxzZSBpZiAoIWRpc2FibGVTdWNjZXNzU3RhdHVzKSB7XG4gICAgICAgICAgICB0b2FzdC5zdWNjZXNzKGpzb24ubWVzc2FnZSB8fCB0KCdnZW5lcmFsOnN1Ym1pc3Npb25TdWNjZXNzZnVsJyksIHsgYXV0b0Nsb3NlOiAzMDAwIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnRleHRSZWYuY3VycmVudCA9IHsgLi4uY29udGV4dFJlZi5jdXJyZW50IH0gLy8gdHJpZ2dlcnMgcmVyZW5kZXIgb2YgYWxsIGNvbXBvbmVudHMgdGhhdCBzdWJzY3JpYmUgdG8gZm9ybVxuICAgICAgICAgIGlmIChqc29uLm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHRvYXN0LmVycm9yKGpzb24ubWVzc2FnZSlcblxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbi5lcnJvcnMpKSB7XG4gICAgICAgICAgICBjb25zdCBbZmllbGRFcnJvcnMsIG5vbkZpZWxkRXJyb3JzXSA9IGpzb24uZXJyb3JzLnJlZHVjZShcbiAgICAgICAgICAgICAgKFtmaWVsZEVycnMsIG5vbkZpZWxkRXJyc10sIGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpZWxkRXJycyA9IFtdXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9uRmllbGRFcnJzID0gW11cblxuICAgICAgICAgICAgICAgIGlmIChlcnI/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgIG5ld05vbkZpZWxkRXJycy5wdXNoKGVycilcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlcnI/LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICBlcnIuZGF0YS5mb3JFYWNoKChkYXRhRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFFcnJvcj8uZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBuZXdGaWVsZEVycnMucHVzaChkYXRhRXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgbmV3Tm9uRmllbGRFcnJzLnB1c2goZGF0YUVycm9yKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBbLi4uZmllbGRFcnJzLCAuLi5uZXdGaWVsZEVycnNdLFxuICAgICAgICAgICAgICAgICAgWy4uLm5vbkZpZWxkRXJycywgLi4ubmV3Tm9uRmllbGRFcnJzXSxcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFtbXSwgW11dLFxuICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICBmaWVsZEVycm9ycy5mb3JFYWNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgZGlzcGF0Y2hGaWVsZHMoe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdVUERBVEUnLFxuICAgICAgICAgICAgICAgIC4uLihjb250ZXh0UmVmLmN1cnJlbnQ/LmZpZWxkcz8uW2Vyci5maWVsZF0gfHwge30pLFxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZTogZXJyLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgcGF0aDogZXJyLmZpZWxkLFxuICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIG5vbkZpZWxkRXJyb3JzLmZvckVhY2goKGVycikgPT4ge1xuICAgICAgICAgICAgICB0b2FzdC5lcnJvcihlcnIubWVzc2FnZSB8fCB0KCdlcnJvcjp1bmtub3duJykpXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3JNZXNzYWdlcz8uW3Jlcy5zdGF0dXNdIHx8IHJlcz8uc3RhdHVzVGV4dCB8fCB0KCdlcnJvcjp1bmtub3duJylcblxuICAgICAgICAgIHRvYXN0LmVycm9yKG1lc3NhZ2UpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBzZXRQcm9jZXNzaW5nKGZhbHNlKVxuXG4gICAgICAgIHRvYXN0LmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGFjdGlvbixcbiAgICAgIGRpc2FibGVTdWNjZXNzU3RhdHVzLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBkaXNwYXRjaEZpZWxkcyxcbiAgICAgIGZpZWxkcyxcbiAgICAgIGhhbmRsZVJlc3BvbnNlLFxuICAgICAgbWV0aG9kLFxuICAgICAgb25TdWJtaXQsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICByZWRpcmVjdCxcbiAgICAgIHJvdXRlcixcbiAgICAgIHQsXG4gICAgICBpMThuLFxuICAgICAgd2FpdEZvckF1dG9jb21wbGV0ZSxcbiAgICAgIGJlZm9yZVN1Ym1pdCxcbiAgICAgIGZvcm1RdWVyeVBhcmFtcyxcbiAgICBdLFxuICApXG5cbiAgY29uc3QgZ2V0RmllbGRzID0gdXNlQ2FsbGJhY2soKCkgPT4gY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcywgW10pXG5cbiAgY29uc3QgZ2V0RmllbGQgPSB1c2VDYWxsYmFjaygocGF0aDogc3RyaW5nKSA9PiBjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzW3BhdGhdLCBbXSlcblxuICBjb25zdCBnZXREYXRhID0gdXNlQ2FsbGJhY2soKCkgPT4gcmVkdWNlRmllbGRzVG9WYWx1ZXMoY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcywgdHJ1ZSksIFtdKVxuXG4gIGNvbnN0IGdldFNpYmxpbmdEYXRhID0gdXNlQ2FsbGJhY2soXG4gICAgKHBhdGg6IHN0cmluZykgPT4gZ2V0U2libGluZ0RhdGFGdW5jKGNvbnRleHRSZWYuY3VycmVudC5maWVsZHMsIHBhdGgpLFxuICAgIFtdLFxuICApXG4gIGNvbnN0IGdldERhdGFCeVBhdGggPSB1c2VDYWxsYmFjazxHZXREYXRhQnlQYXRoPihcbiAgICAocGF0aDogc3RyaW5nKSA9PiBnZXREYXRhQnlQYXRoRnVuYyhjb250ZXh0UmVmLmN1cnJlbnQuZmllbGRzLCBwYXRoKSxcbiAgICBbXSxcbiAgKVxuXG4gIGNvbnN0IGNyZWF0ZUZvcm1EYXRhID0gdXNlQ2FsbGJhY2soKG92ZXJyaWRlczogYW55ID0ge30pID0+IHtcbiAgICBjb25zdCBkYXRhID0gcmVkdWNlRmllbGRzVG9WYWx1ZXMoY29udGV4dFJlZi5jdXJyZW50LmZpZWxkcywgdHJ1ZSlcblxuICAgIGNvbnN0IGZpbGUgPSBkYXRhPy5maWxlXG5cbiAgICBpZiAoZmlsZSkge1xuICAgICAgZGVsZXRlIGRhdGEuZmlsZVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGFXaXRoT3ZlcnJpZGVzID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhVG9TZXJpYWxpemUgPSB7XG4gICAgICBfcGF5bG9hZDogSlNPTi5zdHJpbmdpZnkoZGF0YVdpdGhPdmVycmlkZXMpLFxuICAgICAgZmlsZSxcbiAgICB9XG5cbiAgICAvLyBudWxsQXNVbmRlZmluZWRzIGlzIGltcG9ydGFudCB0byBhbGxvdyB1cGxvYWRzIGFuZCByZWxhdGlvbnNoaXAgZmllbGRzIHRvIGNsZWFyIHRoZW1zZWx2ZXNcbiAgICBjb25zdCBmb3JtRGF0YSA9IHNlcmlhbGl6ZShkYXRhVG9TZXJpYWxpemUsIHsgaW5kaWNlczogdHJ1ZSwgbnVsbHNBc1VuZGVmaW5lZHM6IGZhbHNlIH0pXG5cbiAgICByZXR1cm4gZm9ybURhdGFcbiAgfSwgW10pXG5cbiAgY29uc3QgcmVzZXQgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoZGF0YTogdW5rbm93bikgPT4ge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSBhd2FpdCBnZXRGb3JtU3RhdGUoe1xuICAgICAgICBhcGlSb3V0ZSxcbiAgICAgICAgYm9keToge1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgZ2xvYmFsU2x1ZyxcbiAgICAgICAgICBvcGVyYXRpb24sXG4gICAgICAgICAgc2NoZW1hUGF0aDogY29sbGVjdGlvblNsdWcgfHwgZ2xvYmFsU2x1ZyxcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmVyVVJMLFxuICAgICAgfSlcblxuICAgICAgY29udGV4dFJlZi5jdXJyZW50ID0geyAuLi5pbml0Q29udGV4dFN0YXRlIH0gYXMgRm9ybUNvbnRleHRUeXBlXG4gICAgICBzZXRNb2RpZmllZChmYWxzZSlcbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFUExBQ0VfU1RBVEUnLCBzdGF0ZTogbmV3U3RhdGUgfSlcbiAgICB9LFxuICAgIFthcGlSb3V0ZSwgY29sbGVjdGlvblNsdWcsIGRpc3BhdGNoRmllbGRzLCBnbG9iYWxTbHVnLCBpZCwgb3BlcmF0aW9uLCBzZXJ2ZXJVUkxdLFxuICApXG5cbiAgY29uc3QgcmVwbGFjZVN0YXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKHN0YXRlOiBGb3JtU3RhdGUpID0+IHtcbiAgICAgIGNvbnRleHRSZWYuY3VycmVudCA9IHsgLi4uaW5pdENvbnRleHRTdGF0ZSB9IGFzIEZvcm1Db250ZXh0VHlwZVxuICAgICAgc2V0TW9kaWZpZWQoZmFsc2UpXG4gICAgICBkaXNwYXRjaEZpZWxkcyh7IHR5cGU6ICdSRVBMQUNFX1NUQVRFJywgc3RhdGUgfSlcbiAgICB9LFxuICAgIFtkaXNwYXRjaEZpZWxkc10sXG4gIClcblxuICBjb25zdCBnZXRGaWVsZFN0YXRlQnlQYXRoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHsgZGF0YSwgcGF0aCB9KSA9PiB7XG4gICAgICBjb25zdCBmaWVsZFNjaGVtYSA9IGF3YWl0IGdldEZvcm1TdGF0ZSh7XG4gICAgICAgIGFwaVJvdXRlLFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgY29sbGVjdGlvblNsdWcsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBnbG9iYWxTbHVnLFxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAgVHVybnM6ICdhcnJheUZpZWxkLjAuZ3JvdXAxMjNmaWVsZC5hcnJheUZpZWxkLjAudGV4dEZpZWxkJ1xuICAgICAgICAgICAgSW50bzogJ2FycmF5RmllbGQuZ3JvdXAxMjNmaWVsZC5hcnJheUZpZWxkLnRleHRGaWVsZCdcbiAgICAgICAgICAqL1xuICAgICAgICAgIHNjaGVtYVBhdGg6IGAke2NvbGxlY3Rpb25TbHVnIHx8IGdsb2JhbFNsdWd9LiR7cGF0aH1gLnJlcGxhY2UoL1xcLlxcZCtcXC4vZywgJy4nKSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmVyVVJMLFxuICAgICAgfSlcbiAgICAgIHJldHVybiBmaWVsZFNjaGVtYVxuICAgIH0sXG4gICAgW2FwaVJvdXRlLCBjb2xsZWN0aW9uU2x1ZywgZ2xvYmFsU2x1Zywgc2VydmVyVVJMXSxcbiAgKVxuXG4gIGNvbnN0IGFkZEZpZWxkUm93OiBGb3JtQ29udGV4dFR5cGVbJ2FkZEZpZWxkUm93J10gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoeyBkYXRhLCBwYXRoLCByb3dJbmRleCB9KSA9PiB7XG4gICAgICBjb25zdCBzdWJGaWVsZFN0YXRlID0gYXdhaXQgZ2V0RmllbGRTdGF0ZUJ5UGF0aCh7IGRhdGEsIHBhdGggfSlcblxuICAgICAgZGlzcGF0Y2hGaWVsZHMoe1xuICAgICAgICB0eXBlOiAnQUREX1JPVycsXG4gICAgICAgIGJsb2NrVHlwZTogZGF0YT8uYmxvY2tUeXBlLFxuICAgICAgICBwYXRoLFxuICAgICAgICByb3dJbmRleCxcbiAgICAgICAgc3ViRmllbGRTdGF0ZSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZ2V0RmllbGRTdGF0ZUJ5UGF0aCwgZGlzcGF0Y2hGaWVsZHNdLFxuICApXG5cbiAgY29uc3QgcmVtb3ZlRmllbGRSb3c6IEZvcm1Db250ZXh0VHlwZVsncmVtb3ZlRmllbGRSb3cnXSA9IHVzZUNhbGxiYWNrKFxuICAgICh7IHBhdGgsIHJvd0luZGV4IH0pID0+IHtcbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFTU9WRV9ST1cnLCBwYXRoLCByb3dJbmRleCB9KVxuICAgIH0sXG4gICAgW2Rpc3BhdGNoRmllbGRzXSxcbiAgKVxuXG4gIGNvbnN0IHJlcGxhY2VGaWVsZFJvdzogRm9ybUNvbnRleHRUeXBlWydyZXBsYWNlRmllbGRSb3cnXSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jICh7IGRhdGEsIHBhdGgsIHJvd0luZGV4IH0pID0+IHtcbiAgICAgIGNvbnN0IHN1YkZpZWxkU3RhdGUgPSBhd2FpdCBnZXRGaWVsZFN0YXRlQnlQYXRoKHsgZGF0YSwgcGF0aCB9KVxuXG4gICAgICBkaXNwYXRjaEZpZWxkcyh7XG4gICAgICAgIHR5cGU6ICdSRVBMQUNFX1JPVycsXG4gICAgICAgIGJsb2NrVHlwZTogZGF0YT8uYmxvY2tUeXBlLFxuICAgICAgICBwYXRoLFxuICAgICAgICByb3dJbmRleCxcbiAgICAgICAgc3ViRmllbGRTdGF0ZSxcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZ2V0RmllbGRTdGF0ZUJ5UGF0aCwgZGlzcGF0Y2hGaWVsZHNdLFxuICApXG5cbiAgY29udGV4dFJlZi5jdXJyZW50LnN1Ym1pdCA9IHN1Ym1pdFxuICBjb250ZXh0UmVmLmN1cnJlbnQuZ2V0RmllbGRzID0gZ2V0RmllbGRzXG4gIGNvbnRleHRSZWYuY3VycmVudC5nZXRGaWVsZCA9IGdldEZpZWxkXG4gIGNvbnRleHRSZWYuY3VycmVudC5nZXREYXRhID0gZ2V0RGF0YVxuICBjb250ZXh0UmVmLmN1cnJlbnQuZ2V0U2libGluZ0RhdGEgPSBnZXRTaWJsaW5nRGF0YVxuICBjb250ZXh0UmVmLmN1cnJlbnQuZ2V0RGF0YUJ5UGF0aCA9IGdldERhdGFCeVBhdGhcbiAgY29udGV4dFJlZi5jdXJyZW50LnZhbGlkYXRlRm9ybSA9IHZhbGlkYXRlRm9ybVxuICBjb250ZXh0UmVmLmN1cnJlbnQuY3JlYXRlRm9ybURhdGEgPSBjcmVhdGVGb3JtRGF0YVxuICBjb250ZXh0UmVmLmN1cnJlbnQuc2V0TW9kaWZpZWQgPSBzZXRNb2RpZmllZFxuICBjb250ZXh0UmVmLmN1cnJlbnQuc2V0UHJvY2Vzc2luZyA9IHNldFByb2Nlc3NpbmdcbiAgY29udGV4dFJlZi5jdXJyZW50LnNldFN1Ym1pdHRlZCA9IHNldFN1Ym1pdHRlZFxuICBjb250ZXh0UmVmLmN1cnJlbnQuZGlzYWJsZWQgPSBkaXNhYmxlZFxuICBjb250ZXh0UmVmLmN1cnJlbnQuZm9ybVJlZiA9IGZvcm1SZWZcbiAgY29udGV4dFJlZi5jdXJyZW50LnJlc2V0ID0gcmVzZXRcbiAgY29udGV4dFJlZi5jdXJyZW50LnJlcGxhY2VTdGF0ZSA9IHJlcGxhY2VTdGF0ZVxuICBjb250ZXh0UmVmLmN1cnJlbnQuZGlzcGF0Y2hGaWVsZHMgPSBkaXNwYXRjaEZpZWxkc1xuICBjb250ZXh0UmVmLmN1cnJlbnQuYWRkRmllbGRSb3cgPSBhZGRGaWVsZFJvd1xuICBjb250ZXh0UmVmLmN1cnJlbnQucmVtb3ZlRmllbGRSb3cgPSByZW1vdmVGaWVsZFJvd1xuICBjb250ZXh0UmVmLmN1cnJlbnQucmVwbGFjZUZpZWxkUm93ID0gcmVwbGFjZUZpZWxkUm93XG4gIGNvbnRleHRSZWYuY3VycmVudC51dWlkID0gdXVpZFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBzdWJtaXR0ZWRGcm9tUHJvcHMgPT09ICdib29sZWFuJykgc2V0U3VibWl0dGVkKHN1Ym1pdHRlZEZyb21Qcm9wcylcbiAgfSwgW3N1Ym1pdHRlZEZyb21Qcm9wc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjb250ZXh0UmVmLmN1cnJlbnQgPSB7IC4uLmluaXRDb250ZXh0U3RhdGUgfSBhcyBGb3JtQ29udGV4dFR5cGVcbiAgICAgIGRpc3BhdGNoRmllbGRzKHsgdHlwZTogJ1JFUExBQ0VfU1RBVEUnLCBzdGF0ZTogaW5pdGlhbFN0YXRlIH0pXG4gICAgfVxuICB9LCBbaW5pdGlhbFN0YXRlLCBkaXNwYXRjaEZpZWxkc10pXG5cbiAgdXNlVGhyb3R0bGVkRWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIHJlZnJlc2hDb29raWUoKVxuICAgIH0sXG4gICAgMTUwMDAsXG4gICAgW2ZpZWxkc10sXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnRleHRSZWYuY3VycmVudCA9IHsgLi4uY29udGV4dFJlZi5jdXJyZW50IH0gLy8gdHJpZ2dlcnMgcmVyZW5kZXIgb2YgYWxsIGNvbXBvbmVudHMgdGhhdCBzdWJzY3JpYmUgdG8gZm9ybVxuICAgIHNldE1vZGlmaWVkKGZhbHNlKVxuICB9LCBbbG9jYWxlXSlcblxuICBjb25zdCBjbGFzc2VzID0gW2NsYXNzTmFtZSwgYmFzZUNsYXNzXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpXG5cbiAgdXNlRGVib3VuY2VkRWZmZWN0KFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGVPbkNoYW5nZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob25DaGFuZ2UpKSB7XG4gICAgICAgICAgbGV0IHJldmFsaWRhdGVkRm9ybVN0YXRlOiBGb3JtU3RhdGVcblxuICAgICAgICAgIGF3YWl0IG9uQ2hhbmdlLnJlZHVjZShhc3luYyAocHJpb3JPbkNoYW5nZSwgb25DaGFuZ2VGbikgPT4ge1xuICAgICAgICAgICAgYXdhaXQgcHJpb3JPbkNoYW5nZVxuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvbkNoYW5nZUZuKHtcbiAgICAgICAgICAgICAgZm9ybVN0YXRlOiBmaWVsZHMsXG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICByZXZhbGlkYXRlZEZvcm1TdGF0ZSA9IHJlc3VsdFxuICAgICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgICAgICAgY29uc3QgeyBjaGFuZ2VkLCBuZXdTdGF0ZSB9ID0gbWVyZ2VTZXJ2ZXJGb3JtU3RhdGUoZmllbGRzLCByZXZhbGlkYXRlZEZvcm1TdGF0ZSlcblxuICAgICAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgICAgICBkaXNwYXRjaEZpZWxkcyh7IHR5cGU6ICdSRVBMQUNFX1NUQVRFJywgb3B0aW1pemU6IGZhbHNlLCBzdGF0ZTogbmV3U3RhdGUgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdm9pZCBleGVjdXRlT25DaGFuZ2UoKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgIH0sXG4gICAgMTUwLFxuICAgIFtmaWVsZHMsIGRpc3BhdGNoRmllbGRzLCBvbkNoYW5nZV0sXG4gIClcblxuICBjb25zdCBhY3Rpb25TdHJpbmcgPVxuICAgIHR5cGVvZiBhY3Rpb24gPT09ICdzdHJpbmcnXG4gICAgICA/IGAke2FjdGlvbn0ke1F1ZXJ5U3RyaW5nLnN0cmluZ2lmeShmb3JtUXVlcnlQYXJhbXMsIHsgYWRkUXVlcnlQcmVmaXg6IHRydWUgfSl9YFxuICAgICAgOiAnJ1xuXG4gIHJldHVybiAoXG4gICAgPGZvcm1cbiAgICAgIGFjdGlvbj17bWV0aG9kID8gYWN0aW9uU3RyaW5nIDogYWN0aW9ufVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2VzfVxuICAgICAgbWV0aG9kPXttZXRob2R9XG4gICAgICBub1ZhbGlkYXRlXG4gICAgICBvblN1Ym1pdD17KGUpID0+IGNvbnRleHRSZWYuY3VycmVudC5zdWJtaXQoe30sIGUpfVxuICAgICAgcmVmPXtmb3JtUmVmfVxuICAgID5cbiAgICAgIDxGb3JtQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFJlZi5jdXJyZW50fT5cbiAgICAgICAgPEZvcm1XYXRjaENvbnRleHQuUHJvdmlkZXJcbiAgICAgICAgICB2YWx1ZT17e1xuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgLi4uY29udGV4dFJlZi5jdXJyZW50LFxuICAgICAgICAgIH19XG4gICAgICAgID5cbiAgICAgICAgICA8U3VibWl0dGVkQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17c3VibWl0dGVkfT5cbiAgICAgICAgICAgIDxQcm9jZXNzaW5nQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17cHJvY2Vzc2luZ30+XG4gICAgICAgICAgICAgIDxNb2RpZmllZENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e21vZGlmaWVkfT5cbiAgICAgICAgICAgICAgICA8Rm9ybUZpZWxkc0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2ZpZWxkc1JlZHVjZXJ9PlxuICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgIDwvRm9ybUZpZWxkc0NvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgICAgICAgIDwvTW9kaWZpZWRDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgICAgICAgPC9Qcm9jZXNzaW5nQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgICAgICA8L1N1Ym1pdHRlZENvbnRleHQuUHJvdmlkZXI+XG4gICAgICAgIDwvRm9ybVdhdGNoQ29udGV4dC5Qcm92aWRlcj5cbiAgICAgIDwvRm9ybUNvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9mb3JtPlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm1cbiJdLCJuYW1lcyI6WyJpc0RlZXBFcXVhbCIsInVzZVJvdXRlciIsInNlcmlhbGl6ZSIsIndhaXQiLCJRdWVyeVN0cmluZyIsIlJlYWN0IiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJ1c2VSZWR1Y2VyIiwidXNlUmVmIiwidXNlU3RhdGUiLCJ0b2FzdCIsInVzZURlYm91bmNlZEVmZmVjdCIsInVzZVRocm90dGxlZEVmZmVjdCIsInVzZUF1dGgiLCJ1c2VDb25maWciLCJ1c2VEb2N1bWVudEluZm8iLCJ1c2VGb3JtUXVlcnlQYXJhbXMiLCJ1c2VMb2NhbGUiLCJ1c2VPcGVyYXRpb24iLCJ1c2VUcmFuc2xhdGlvbiIsInJlcXVlc3RzIiwiZ2V0Rm9ybVN0YXRlIiwiRm9ybUNvbnRleHQiLCJGb3JtRmllbGRzQ29udGV4dCIsIkZvcm1XYXRjaENvbnRleHQiLCJNb2RpZmllZENvbnRleHQiLCJQcm9jZXNzaW5nQ29udGV4dCIsIlN1Ym1pdHRlZENvbnRleHQiLCJlcnJvck1lc3NhZ2VzIiwiZmllbGRSZWR1Y2VyIiwiZ2V0RGF0YUJ5UGF0aEZ1bmMiLCJnZXRTaWJsaW5nRGF0YUZ1bmMiLCJpbml0Q29udGV4dFN0YXRlIiwibWVyZ2VTZXJ2ZXJGb3JtU3RhdGUiLCJyZWR1Y2VGaWVsZHNUb1ZhbHVlcyIsImJhc2VDbGFzcyIsIkZvcm0iLCJwcm9wcyIsImlkIiwiY29sbGVjdGlvblNsdWciLCJnZXREb2NQcmVmZXJlbmNlcyIsImdsb2JhbFNsdWciLCJhY3Rpb24iLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsImRpc2FibGVTdWNjZXNzU3RhdHVzIiwiZGlzYWJsZWQiLCJiZWZvcmVTdWJtaXQiLCJoYW5kbGVSZXNwb25zZSIsImluaXRpYWxTdGF0ZSIsIm9uQ2hhbmdlIiwib25TdWJtaXQiLCJvblN1Y2Nlc3MiLCJyZWRpcmVjdCIsInN1Ym1pdHRlZCIsInN1Ym1pdHRlZEZyb21Qcm9wcyIsInV1aWQiLCJ3YWl0Rm9yQXV0b2NvbXBsZXRlIiwibWV0aG9kIiwidW5kZWZpbmVkIiwicm91dGVyIiwiY29kZSIsImxvY2FsZSIsImkxOG4iLCJ0IiwicmVmcmVzaENvb2tpZSIsInVzZXIiLCJvcGVyYXRpb24iLCJmb3JtUXVlcnlQYXJhbXMiLCJjb25maWciLCJyb3V0ZXMiLCJhcGkiLCJhcGlSb3V0ZSIsInNlcnZlclVSTCIsIm1vZGlmaWVkIiwic2V0TW9kaWZpZWQiLCJwcm9jZXNzaW5nIiwic2V0UHJvY2Vzc2luZyIsInNldFN1Ym1pdHRlZCIsImZvcm1SZWYiLCJjb250ZXh0UmVmIiwiZmllbGRzUmVkdWNlciIsImZpZWxkcyIsImRpc3BhdGNoRmllbGRzIiwiY3VycmVudCIsInZhbGlkYXRlRm9ybSIsInZhbGlkYXRlZEZpZWxkU3RhdGUiLCJpc1ZhbGlkIiwiZGF0YUZyb21Db250ZXh0IiwiZ2V0RGF0YSIsImRhdGEiLCJ2YWxpZGF0aW9uUHJvbWlzZXMiLCJPYmplY3QiLCJlbnRyaWVzIiwibWFwIiwicGF0aCIsImZpZWxkIiwidmFsaWRhdGVkRmllbGQiLCJ2YWxpZCIsInBhc3Nlc0NvbmRpdGlvbiIsInZhbGlkYXRpb25SZXN1bHQiLCJ2YWxpZGF0ZSIsInZhbHVlVG9WYWxpZGF0ZSIsInZhbHVlIiwicm93cyIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGFCeVBhdGgiLCJzaWJsaW5nRGF0YSIsImdldFNpYmxpbmdEYXRhIiwiZXJyb3JNZXNzYWdlIiwiUHJvbWlzZSIsImFsbCIsInR5cGUiLCJzdGF0ZSIsInN1Ym1pdCIsIm9wdGlvbnMiLCJlIiwiYWN0aW9uQXJnIiwibWV0aG9kVG9Vc2UiLCJvdmVycmlkZXMiLCJza2lwVmFsaWRhdGlvbiIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwicmV2YWxpZGF0ZWRGb3JtU3RhdGUiLCJyZWR1Y2UiLCJwcmlvck9uQ2hhbmdlIiwiYmVmb3JlU3VibWl0Rm4iLCJyZXN1bHQiLCJmb3JtU3RhdGUiLCJyZXNvbHZlIiwiZXZlcnkiLCJlcnJvciIsImZvcm1EYXRhIiwiY3JlYXRlRm9ybURhdGEiLCJyZXMiLCJhY3Rpb25FbmRwb2ludCIsInN0cmluZ2lmeSIsImFkZFF1ZXJ5UHJlZml4IiwidG9Mb3dlckNhc2UiLCJib2R5IiwiaGVhZGVycyIsImxhbmd1YWdlIiwiY29udGVudFR5cGUiLCJnZXQiLCJpc0pTT04iLCJpbmRleE9mIiwianNvbiIsInN0YXR1cyIsInB1c2giLCJzdWNjZXNzIiwibWVzc2FnZSIsImF1dG9DbG9zZSIsImVycm9ycyIsImZpZWxkRXJyb3JzIiwibm9uRmllbGRFcnJvcnMiLCJmaWVsZEVycnMiLCJub25GaWVsZEVycnMiLCJlcnIiLCJuZXdGaWVsZEVycnMiLCJuZXdOb25GaWVsZEVycnMiLCJmb3JFYWNoIiwiZGF0YUVycm9yIiwic3RhdHVzVGV4dCIsImdldEZpZWxkcyIsImdldEZpZWxkIiwiZmlsZSIsImRhdGFXaXRoT3ZlcnJpZGVzIiwiZGF0YVRvU2VyaWFsaXplIiwiX3BheWxvYWQiLCJKU09OIiwiaW5kaWNlcyIsIm51bGxzQXNVbmRlZmluZWRzIiwicmVzZXQiLCJuZXdTdGF0ZSIsInNjaGVtYVBhdGgiLCJyZXBsYWNlU3RhdGUiLCJnZXRGaWVsZFN0YXRlQnlQYXRoIiwiZmllbGRTY2hlbWEiLCJyZXBsYWNlIiwiYWRkRmllbGRSb3ciLCJyb3dJbmRleCIsInN1YkZpZWxkU3RhdGUiLCJibG9ja1R5cGUiLCJyZW1vdmVGaWVsZFJvdyIsInJlcGxhY2VGaWVsZFJvdyIsImNsYXNzZXMiLCJmaWx0ZXIiLCJCb29sZWFuIiwiam9pbiIsImV4ZWN1dGVPbkNoYW5nZSIsIm9uQ2hhbmdlRm4iLCJjaGFuZ2VkIiwib3B0aW1pemUiLCJhY3Rpb25TdHJpbmciLCJmb3JtIiwibm9WYWxpZGF0ZSIsInJlZiIsIlByb3ZpZGVyIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUdBLGtFQUFrRSxHQUNsRSxPQUFPQSxpQkFBaUIsYUFBWTtBQUNwQyxTQUFTQyxTQUFTLFFBQVEscUJBQW9CO0FBQzlDLFNBQVNDLFNBQVMsUUFBUSxxQkFBb0I7QUFDOUMsU0FBU0MsSUFBSSxRQUFRLG9CQUFtQjtBQUN4QyxPQUFPQyxpQkFBaUIsS0FBSTtBQUM1QixPQUFPQyxTQUFTQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsVUFBVSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxRQUFPO0FBQ25GLFNBQVNDLEtBQUssUUFBUSxp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