@1money/react-ui 1.15.3 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/AGENTS.md +393 -0
  2. package/es/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  3. package/es/components/CheckboxGroup/CheckboxGroup.js +94 -91
  4. package/es/components/CheckboxGroup/interface.d.ts +21 -15
  5. package/es/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  6. package/es/components/Flex/Flex.d.ts +5 -0
  7. package/es/components/Flex/Flex.js +50 -0
  8. package/es/components/Flex/constants.d.ts +41 -0
  9. package/es/components/Flex/constants.js +45 -0
  10. package/es/components/Flex/index.d.ts +5 -0
  11. package/es/components/Flex/index.js +6 -0
  12. package/es/components/Flex/interface.d.ts +13 -0
  13. package/es/components/Flex/interface.js +2 -0
  14. package/es/components/Flex/style/Flex.css +1 -0
  15. package/es/components/Flex/style/Flex.scss +70 -0
  16. package/es/components/Flex/style/css.js +2 -0
  17. package/es/components/Flex/style/index.d.ts +1 -0
  18. package/es/components/Flex/style/index.js +2 -0
  19. package/es/components/Form/Form.d.ts +29 -0
  20. package/es/components/Form/Form.js +188 -0
  21. package/es/components/Form/FormItem.d.ts +4 -0
  22. package/es/components/Form/FormItem.js +165 -0
  23. package/es/components/Form/FormItemContent.d.ts +18 -0
  24. package/es/components/Form/FormItemContent.js +146 -0
  25. package/es/components/Form/constants.d.ts +46 -0
  26. package/es/components/Form/constants.js +65 -0
  27. package/es/components/Form/helper.d.ts +120 -0
  28. package/es/components/Form/helper.js +284 -0
  29. package/es/components/Form/index.d.ts +20 -0
  30. package/es/components/Form/index.js +21 -0
  31. package/es/components/Form/interface.d.ts +238 -0
  32. package/es/components/Form/interface.js +2 -0
  33. package/es/components/Form/style/Form.css +1 -0
  34. package/es/components/Form/style/Form.scss +167 -0
  35. package/es/components/Form/style/css.js +2 -0
  36. package/es/components/Form/style/index.d.ts +1 -0
  37. package/es/components/Form/style/index.js +2 -0
  38. package/es/components/Form/useFormItemContext.d.ts +32 -0
  39. package/es/components/Form/useFormItemContext.js +55 -0
  40. package/es/components/Form/useFormItemWatch.d.ts +51 -0
  41. package/es/components/Form/useFormItemWatch.js +69 -0
  42. package/es/components/Form/useValidationTrigger.d.ts +40 -0
  43. package/es/components/Form/useValidationTrigger.js +74 -0
  44. package/es/components/Grid/Col.d.ts +5 -0
  45. package/es/components/Grid/Col.js +97 -0
  46. package/es/components/Grid/Grid.d.ts +12 -0
  47. package/es/components/Grid/Grid.js +12 -0
  48. package/es/components/Grid/Row.d.ts +5 -0
  49. package/es/components/Grid/Row.js +48 -0
  50. package/es/components/Grid/constants.d.ts +55 -0
  51. package/es/components/Grid/constants.js +66 -0
  52. package/es/components/Grid/helper.d.ts +10 -0
  53. package/es/components/Grid/helper.js +44 -0
  54. package/es/components/Grid/index.d.ts +7 -0
  55. package/es/components/Grid/index.js +8 -0
  56. package/es/components/Grid/interface.d.ts +38 -0
  57. package/es/components/Grid/interface.js +2 -0
  58. package/es/components/Grid/style/Grid.css +1 -0
  59. package/es/components/Grid/style/Grid.scss +196 -0
  60. package/es/components/Grid/style/css.js +2 -0
  61. package/es/components/Grid/style/index.d.ts +1 -0
  62. package/es/components/Grid/style/index.js +2 -0
  63. package/es/components/Input/Input.js +72 -74
  64. package/es/components/Input/interface.d.ts +9 -9
  65. package/es/components/InputAmount/InputAmount.js +228 -276
  66. package/es/components/InputAmount/helper.d.ts +46 -0
  67. package/es/components/InputAmount/helper.js +115 -0
  68. package/es/components/InputAmount/style/normal.css +1 -1
  69. package/es/components/InputAmount/style/normal.scss +2 -2
  70. package/es/components/InputAmount/style/primary.css +1 -1
  71. package/es/components/InputAmount/style/primary.scss +2 -2
  72. package/es/components/Message/style/Message.css +1 -1
  73. package/es/components/Message/style/Message.scss +3 -3
  74. package/es/components/ProForm/ProForm.d.ts +33 -0
  75. package/es/components/ProForm/ProForm.js +208 -0
  76. package/es/components/ProForm/ProFormDependency.d.ts +12 -0
  77. package/es/components/ProForm/ProFormDependency.js +61 -0
  78. package/es/components/ProForm/ProFormList.d.ts +19 -0
  79. package/es/components/ProForm/ProFormList.js +348 -0
  80. package/es/components/ProForm/Submitter.d.ts +21 -0
  81. package/es/components/ProForm/Submitter.js +76 -0
  82. package/es/components/ProForm/constants.d.ts +34 -0
  83. package/es/components/ProForm/constants.js +40 -0
  84. package/es/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  85. package/es/components/ProForm/fields/ProFormCheckbox.js +11 -0
  86. package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  87. package/es/components/ProForm/fields/ProFormCheckboxGroup.js +46 -0
  88. package/es/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  89. package/es/components/ProForm/fields/ProFormDigit.js +15 -0
  90. package/es/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  91. package/es/components/ProForm/fields/ProFormMoney.js +10 -0
  92. package/es/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  93. package/es/components/ProForm/fields/ProFormMultiSelect.js +27 -0
  94. package/es/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  95. package/es/components/ProForm/fields/ProFormPassword.js +16 -0
  96. package/es/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  97. package/es/components/ProForm/fields/ProFormRadio.js +13 -0
  98. package/es/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  99. package/es/components/ProForm/fields/ProFormSelect.js +13 -0
  100. package/es/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  101. package/es/components/ProForm/fields/ProFormSwitch.js +11 -0
  102. package/es/components/ProForm/fields/ProFormText.d.ts +6 -0
  103. package/es/components/ProForm/fields/ProFormText.js +15 -0
  104. package/es/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  105. package/es/components/ProForm/fields/ProFormTextArea.js +16 -0
  106. package/es/components/ProForm/fields/createProFormField.d.ts +43 -0
  107. package/es/components/ProForm/fields/createProFormField.js +200 -0
  108. package/es/components/ProForm/fields/index.d.ts +12 -0
  109. package/es/components/ProForm/fields/index.js +13 -0
  110. package/es/components/ProForm/index.d.ts +7 -0
  111. package/es/components/ProForm/index.js +7 -0
  112. package/es/components/ProForm/interface.d.ts +306 -0
  113. package/es/components/ProForm/interface.js +2 -0
  114. package/es/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  115. package/es/components/ProForm/layouts/DrawerForm.js +79 -0
  116. package/es/components/ProForm/layouts/ModalForm.d.ts +16 -0
  117. package/es/components/ProForm/layouts/ModalForm.js +89 -0
  118. package/es/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  119. package/es/components/ProForm/layouts/QueryFilter.js +132 -0
  120. package/es/components/ProForm/layouts/StepsForm.d.ts +13 -0
  121. package/es/components/ProForm/layouts/StepsForm.js +295 -0
  122. package/es/components/ProForm/layouts/index.d.ts +4 -0
  123. package/es/components/ProForm/layouts/index.js +5 -0
  124. package/es/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  125. package/es/components/ProForm/layouts/useOverlayForm.js +143 -0
  126. package/es/components/ProForm/style/ProForm.module.css +1 -0
  127. package/es/components/ProForm/style/ProForm.module.scss +59 -0
  128. package/es/components/ProForm/style/css.js +3 -0
  129. package/es/components/ProForm/style/index.d.ts +1 -0
  130. package/es/components/ProForm/style/index.js +3 -0
  131. package/es/components/ProForm/utils.d.ts +72 -0
  132. package/es/components/ProForm/utils.js +206 -0
  133. package/es/components/RadioGroup/RadioGroup.js +46 -23
  134. package/es/components/RadioGroup/interface.d.ts +3 -1
  135. package/es/components/Select/Select.d.ts +1 -1
  136. package/es/components/Select/Select.js +113 -106
  137. package/es/components/Select/constants.d.ts +18 -0
  138. package/es/components/Select/constants.js +19 -0
  139. package/es/components/Sidebar/Sidebar.js +21 -23
  140. package/es/components/Sidebar/SidebarLogo.d.ts +7 -0
  141. package/es/components/Sidebar/SidebarLogo.js +33 -0
  142. package/es/components/Sidebar/SimplySidebar.d.ts +2 -2
  143. package/es/components/Sidebar/SimplySidebar.js +18 -22
  144. package/es/components/Sidebar/Stepper.js +14 -14
  145. package/es/components/Sidebar/constants.d.ts +16 -0
  146. package/es/components/Sidebar/constants.js +17 -0
  147. package/es/components/Sidebar/style/Sidebar.css +1 -1
  148. package/es/components/Sidebar/style/Sidebar.scss +1 -1
  149. package/es/components/Sidebar/style/SimplySidebar.css +1 -1
  150. package/es/components/Sidebar/style/SimplySidebar.scss +1 -1
  151. package/es/components/Sidebar/style/Stepper.css +1 -1
  152. package/es/components/Sidebar/style/Stepper.scss +11 -1
  153. package/es/components/Space/Space.d.ts +5 -0
  154. package/es/components/Space/Space.js +71 -0
  155. package/es/components/Space/constants.d.ts +33 -0
  156. package/es/components/Space/constants.js +37 -0
  157. package/es/components/Space/index.d.ts +5 -0
  158. package/es/components/Space/index.js +6 -0
  159. package/es/components/Space/interface.d.ts +12 -0
  160. package/es/components/Space/interface.js +2 -0
  161. package/es/components/Space/style/Space.css +1 -0
  162. package/es/components/Space/style/Space.scss +40 -0
  163. package/es/components/Space/style/css.js +2 -0
  164. package/es/components/Space/style/index.d.ts +1 -0
  165. package/es/components/Space/style/index.js +2 -0
  166. package/es/components/Switch/Switch.js +28 -25
  167. package/es/components/Switch/interface.d.ts +9 -4
  168. package/es/components/useControlledState/index.d.ts +14 -0
  169. package/es/components/useControlledState/index.js +32 -0
  170. package/es/components/useEventCallback/index.d.ts +11 -0
  171. package/es/components/useEventCallback/index.js +17 -0
  172. package/es/components/useLayoutEffect/index.d.ts +11 -0
  173. package/es/components/useLayoutEffect/index.js +17 -0
  174. package/es/components/useLayoutState/index.d.ts +13 -0
  175. package/es/components/useLayoutState/index.js +71 -0
  176. package/es/components/useMemoizedFn/index.d.ts +12 -0
  177. package/es/components/useMemoizedFn/index.js +27 -0
  178. package/es/components/usePrevious/index.d.ts +11 -0
  179. package/es/components/usePrevious/index.js +19 -0
  180. package/es/components/useSafeState/index.d.ts +12 -0
  181. package/es/components/useSafeState/index.js +24 -0
  182. package/es/components/useSyncState/index.d.ts +14 -0
  183. package/es/components/useSyncState/index.js +37 -0
  184. package/es/components/useUpdateEffect/index.d.ts +9 -0
  185. package/es/components/useUpdateEffect/index.js +19 -0
  186. package/es/index.css +1 -1
  187. package/es/index.d.ts +32 -2
  188. package/es/index.js +30 -1
  189. package/jest.setup.d.ts +1 -0
  190. package/jest.setup.ts +1 -0
  191. package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  192. package/lib/components/CheckboxGroup/CheckboxGroup.js +92 -89
  193. package/lib/components/CheckboxGroup/interface.d.ts +21 -15
  194. package/lib/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  195. package/lib/components/Flex/Flex.d.ts +5 -0
  196. package/lib/components/Flex/Flex.js +60 -0
  197. package/lib/components/Flex/constants.d.ts +41 -0
  198. package/lib/components/Flex/constants.js +51 -0
  199. package/lib/components/Flex/index.d.ts +5 -0
  200. package/lib/components/Flex/index.js +60 -0
  201. package/lib/components/Flex/interface.d.ts +13 -0
  202. package/lib/components/Flex/interface.js +6 -0
  203. package/lib/components/Flex/style/Flex.css +1 -0
  204. package/lib/components/Flex/style/Flex.scss +70 -0
  205. package/lib/components/Flex/style/css.js +4 -0
  206. package/lib/components/Flex/style/index.d.ts +1 -0
  207. package/lib/components/Flex/style/index.js +4 -0
  208. package/lib/components/Form/Form.d.ts +29 -0
  209. package/lib/components/Form/Form.js +199 -0
  210. package/lib/components/Form/FormItem.d.ts +4 -0
  211. package/lib/components/Form/FormItem.js +176 -0
  212. package/lib/components/Form/FormItemContent.d.ts +18 -0
  213. package/lib/components/Form/FormItemContent.js +156 -0
  214. package/lib/components/Form/constants.d.ts +46 -0
  215. package/lib/components/Form/constants.js +71 -0
  216. package/lib/components/Form/helper.d.ts +120 -0
  217. package/lib/components/Form/helper.js +290 -0
  218. package/lib/components/Form/index.d.ts +20 -0
  219. package/lib/components/Form/index.js +45 -0
  220. package/lib/components/Form/interface.d.ts +238 -0
  221. package/lib/components/Form/interface.js +6 -0
  222. package/lib/components/Form/style/Form.css +1 -0
  223. package/lib/components/Form/style/Form.scss +167 -0
  224. package/lib/components/Form/style/css.js +4 -0
  225. package/lib/components/Form/style/index.d.ts +1 -0
  226. package/lib/components/Form/style/index.js +4 -0
  227. package/lib/components/Form/useFormItemContext.d.ts +32 -0
  228. package/lib/components/Form/useFormItemContext.js +62 -0
  229. package/lib/components/Form/useFormItemWatch.d.ts +51 -0
  230. package/lib/components/Form/useFormItemWatch.js +76 -0
  231. package/lib/components/Form/useValidationTrigger.d.ts +40 -0
  232. package/lib/components/Form/useValidationTrigger.js +81 -0
  233. package/lib/components/Grid/Col.d.ts +5 -0
  234. package/lib/components/Grid/Col.js +107 -0
  235. package/lib/components/Grid/Grid.d.ts +12 -0
  236. package/lib/components/Grid/Grid.js +18 -0
  237. package/lib/components/Grid/Row.d.ts +5 -0
  238. package/lib/components/Grid/Row.js +58 -0
  239. package/lib/components/Grid/constants.d.ts +55 -0
  240. package/lib/components/Grid/constants.js +72 -0
  241. package/lib/components/Grid/helper.d.ts +10 -0
  242. package/lib/components/Grid/helper.js +51 -0
  243. package/lib/components/Grid/index.d.ts +7 -0
  244. package/lib/components/Grid/index.js +62 -0
  245. package/lib/components/Grid/interface.d.ts +38 -0
  246. package/lib/components/Grid/interface.js +6 -0
  247. package/lib/components/Grid/style/Grid.css +1 -0
  248. package/lib/components/Grid/style/Grid.scss +196 -0
  249. package/lib/components/Grid/style/css.js +4 -0
  250. package/lib/components/Grid/style/index.d.ts +1 -0
  251. package/lib/components/Grid/style/index.js +4 -0
  252. package/lib/components/Input/Input.js +71 -73
  253. package/lib/components/Input/interface.d.ts +9 -9
  254. package/lib/components/InputAmount/InputAmount.js +230 -278
  255. package/lib/components/InputAmount/helper.d.ts +46 -0
  256. package/lib/components/InputAmount/helper.js +122 -0
  257. package/lib/components/InputAmount/style/normal.css +1 -1
  258. package/lib/components/InputAmount/style/normal.scss +2 -2
  259. package/lib/components/InputAmount/style/primary.css +1 -1
  260. package/lib/components/InputAmount/style/primary.scss +2 -2
  261. package/lib/components/Message/style/Message.css +1 -1
  262. package/lib/components/Message/style/Message.scss +3 -3
  263. package/lib/components/ProForm/ProForm.d.ts +33 -0
  264. package/lib/components/ProForm/ProForm.js +216 -0
  265. package/lib/components/ProForm/ProFormDependency.d.ts +12 -0
  266. package/lib/components/ProForm/ProFormDependency.js +67 -0
  267. package/lib/components/ProForm/ProFormList.d.ts +19 -0
  268. package/lib/components/ProForm/ProFormList.js +355 -0
  269. package/lib/components/ProForm/Submitter.d.ts +21 -0
  270. package/lib/components/ProForm/Submitter.js +83 -0
  271. package/lib/components/ProForm/constants.d.ts +34 -0
  272. package/lib/components/ProForm/constants.js +46 -0
  273. package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  274. package/lib/components/ProForm/fields/ProFormCheckbox.js +18 -0
  275. package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  276. package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +53 -0
  277. package/lib/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  278. package/lib/components/ProForm/fields/ProFormDigit.js +22 -0
  279. package/lib/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  280. package/lib/components/ProForm/fields/ProFormMoney.js +17 -0
  281. package/lib/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  282. package/lib/components/ProForm/fields/ProFormMultiSelect.js +34 -0
  283. package/lib/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  284. package/lib/components/ProForm/fields/ProFormPassword.js +23 -0
  285. package/lib/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  286. package/lib/components/ProForm/fields/ProFormRadio.js +20 -0
  287. package/lib/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  288. package/lib/components/ProForm/fields/ProFormSelect.js +20 -0
  289. package/lib/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  290. package/lib/components/ProForm/fields/ProFormSwitch.js +18 -0
  291. package/lib/components/ProForm/fields/ProFormText.d.ts +6 -0
  292. package/lib/components/ProForm/fields/ProFormText.js +22 -0
  293. package/lib/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  294. package/lib/components/ProForm/fields/ProFormTextArea.js +23 -0
  295. package/lib/components/ProForm/fields/createProFormField.d.ts +43 -0
  296. package/lib/components/ProForm/fields/createProFormField.js +208 -0
  297. package/lib/components/ProForm/fields/index.d.ts +12 -0
  298. package/lib/components/ProForm/fields/index.js +90 -0
  299. package/lib/components/ProForm/index.d.ts +7 -0
  300. package/lib/components/ProForm/index.js +73 -0
  301. package/lib/components/ProForm/interface.d.ts +306 -0
  302. package/lib/components/ProForm/interface.js +6 -0
  303. package/lib/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  304. package/lib/components/ProForm/layouts/DrawerForm.js +86 -0
  305. package/lib/components/ProForm/layouts/ModalForm.d.ts +16 -0
  306. package/lib/components/ProForm/layouts/ModalForm.js +96 -0
  307. package/lib/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  308. package/lib/components/ProForm/layouts/QueryFilter.js +139 -0
  309. package/lib/components/ProForm/layouts/StepsForm.d.ts +13 -0
  310. package/lib/components/ProForm/layouts/StepsForm.js +302 -0
  311. package/lib/components/ProForm/layouts/index.d.ts +4 -0
  312. package/lib/components/ProForm/layouts/index.js +40 -0
  313. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  314. package/lib/components/ProForm/layouts/useOverlayForm.js +150 -0
  315. package/lib/components/ProForm/style/ProForm.module.css +1 -0
  316. package/lib/components/ProForm/style/ProForm.module.scss +59 -0
  317. package/lib/components/ProForm/style/css.js +4 -0
  318. package/lib/components/ProForm/style/index.d.ts +1 -0
  319. package/lib/components/ProForm/style/index.js +4 -0
  320. package/lib/components/ProForm/utils.d.ts +72 -0
  321. package/lib/components/ProForm/utils.js +213 -0
  322. package/lib/components/RadioGroup/RadioGroup.js +45 -22
  323. package/lib/components/RadioGroup/interface.d.ts +3 -1
  324. package/lib/components/Select/Select.d.ts +1 -1
  325. package/lib/components/Select/Select.js +114 -107
  326. package/lib/components/Select/constants.d.ts +18 -0
  327. package/lib/components/Select/constants.js +25 -0
  328. package/lib/components/Sidebar/Sidebar.js +21 -23
  329. package/lib/components/Sidebar/SidebarLogo.d.ts +7 -0
  330. package/lib/components/Sidebar/SidebarLogo.js +39 -0
  331. package/lib/components/Sidebar/SimplySidebar.d.ts +2 -2
  332. package/lib/components/Sidebar/SimplySidebar.js +17 -21
  333. package/lib/components/Sidebar/Stepper.js +14 -14
  334. package/lib/components/Sidebar/constants.d.ts +16 -0
  335. package/lib/components/Sidebar/constants.js +23 -0
  336. package/lib/components/Sidebar/style/Sidebar.css +1 -1
  337. package/lib/components/Sidebar/style/Sidebar.scss +1 -1
  338. package/lib/components/Sidebar/style/SimplySidebar.css +1 -1
  339. package/lib/components/Sidebar/style/SimplySidebar.scss +1 -1
  340. package/lib/components/Sidebar/style/Stepper.css +1 -1
  341. package/lib/components/Sidebar/style/Stepper.scss +11 -1
  342. package/lib/components/Space/Space.d.ts +5 -0
  343. package/lib/components/Space/Space.js +81 -0
  344. package/lib/components/Space/constants.d.ts +33 -0
  345. package/lib/components/Space/constants.js +43 -0
  346. package/lib/components/Space/index.d.ts +5 -0
  347. package/lib/components/Space/index.js +53 -0
  348. package/lib/components/Space/interface.d.ts +12 -0
  349. package/lib/components/Space/interface.js +6 -0
  350. package/lib/components/Space/style/Space.css +1 -0
  351. package/lib/components/Space/style/Space.scss +40 -0
  352. package/lib/components/Space/style/css.js +4 -0
  353. package/lib/components/Space/style/index.d.ts +1 -0
  354. package/lib/components/Space/style/index.js +4 -0
  355. package/lib/components/Switch/Switch.js +27 -24
  356. package/lib/components/Switch/interface.d.ts +9 -4
  357. package/lib/components/useControlledState/index.d.ts +14 -0
  358. package/lib/components/useControlledState/index.js +39 -0
  359. package/lib/components/useEventCallback/index.d.ts +11 -0
  360. package/lib/components/useEventCallback/index.js +24 -0
  361. package/lib/components/useLayoutEffect/index.d.ts +11 -0
  362. package/lib/components/useLayoutEffect/index.js +23 -0
  363. package/lib/components/useLayoutState/index.d.ts +13 -0
  364. package/lib/components/useLayoutState/index.js +79 -0
  365. package/lib/components/useMemoizedFn/index.d.ts +12 -0
  366. package/lib/components/useMemoizedFn/index.js +33 -0
  367. package/lib/components/usePrevious/index.d.ts +11 -0
  368. package/lib/components/usePrevious/index.js +25 -0
  369. package/lib/components/useSafeState/index.d.ts +12 -0
  370. package/lib/components/useSafeState/index.js +31 -0
  371. package/lib/components/useSyncState/index.d.ts +14 -0
  372. package/lib/components/useSyncState/index.js +44 -0
  373. package/lib/components/useUpdateEffect/index.d.ts +9 -0
  374. package/lib/components/useUpdateEffect/index.js +25 -0
  375. package/lib/index.css +1 -1
  376. package/lib/index.d.ts +32 -2
  377. package/lib/index.js +251 -1
  378. package/package.json +31 -1
@@ -6,14 +6,16 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = exports.InputAmount = void 0;
9
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
10
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
11
  var _jsxRuntime = require("react/jsx-runtime");
11
12
  var _react = require("react");
12
- var _bignumber = _interopRequireDefault(require("bignumber.js"));
13
- var _reactNumberFormat = require("react-number-format");
14
13
  var _skeleton = require("primereact/skeleton");
15
14
  var _Spinner = _interopRequireDefault(require("../Spinner"));
15
+ var _useLatest = _interopRequireDefault(require("../useLatest"));
16
+ var _useEventCallback = _interopRequireDefault(require("../useEventCallback"));
16
17
  var _classnames = _interopRequireWildcard(require("../../utils/classnames"));
18
+ var _helper = require("./helper");
17
19
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
18
20
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
19
21
  var __rest = void 0 && (void 0).__rest || function (s, e) {
@@ -24,84 +26,68 @@ var __rest = void 0 && (void 0).__rest || function (s, e) {
24
26
  }
25
27
  return t;
26
28
  };
27
- var MIN_INPUT_WIDTH = 33;
28
- var normalizeNumberInput = function normalizeNumberInput(val) {
29
- return val.replace(/[\u3002\uff0e\uff61]/g, '.').replace(/[\uFF0C]/g, ',');
30
- };
31
- var calcValueInRange = function calcValueInRange(val, min, max) {
32
- if (val === '' || val === '-' || isNaN(+val)) return val;
33
- var calcVal = val;
34
- var bnVal = (0, _bignumber["default"])(val);
35
- if (typeof min === 'number' || typeof min === 'bigint') {
36
- var minBn = (0, _bignumber["default"])(min);
37
- if (bnVal.lt(minBn)) {
38
- calcVal = '' + min;
39
- }
40
- }
41
- if (typeof max === 'number' || typeof max === 'bigint') {
42
- var maxBn = (0, _bignumber["default"])(max);
43
- if (bnVal.gt(maxBn)) {
44
- calcVal = '' + max;
45
- }
46
- }
47
- return calcVal;
48
- };
49
29
  var InputAmount = exports.InputAmount = function InputAmount(props) {
50
- var value = props.value,
51
- _props$type = props.type,
52
- type = _props$type === void 0 ? 'primary' : _props$type,
53
- maxFractionDigits = props.maxFractionDigits,
54
- children = props.children,
55
- _props$placeholder = props.placeholder,
56
- placeholder = _props$placeholder === void 0 ? '0' : _props$placeholder,
57
- min = props.min,
58
- max = props.max,
59
- _props$size = props.size,
60
- size = _props$size === void 0 ? 'large' : _props$size,
61
- footnote = props.footnote,
62
- footnoteCls = props.footnoteCls,
63
- className = props.className,
64
- wrapperCls = props.wrapperCls,
65
- labelCls = props.labelCls,
66
- _props$prefixCls = props.prefixCls,
67
- prefixCls = _props$prefixCls === void 0 ? 'input-amount' : _props$prefixCls,
68
- messageCls = props.messageCls,
69
- prefixEleCls = props.prefixEleCls,
70
- suffixEleCls = props.suffixEleCls,
71
- invalid = props.invalid,
72
- negative = props.negative,
73
- required = props.required,
74
- loading = props.loading,
75
- success = props.success,
76
- disabled = props.disabled,
77
- readOnly = props.readOnly,
78
- label = props.label,
79
- prefix = props.prefix,
80
- suffix = props.suffix,
81
- currency = props.currency,
82
- message = props.message,
83
- onChange = props.onChange,
84
- _onBlur = props.onBlur,
85
- _onFocus = props.onFocus,
86
- rest = __rest(props, ["value", "type", "maxFractionDigits", "children", "placeholder", "min", "max", "size", "footnote", "footnoteCls", "className", "wrapperCls", "labelCls", "prefixCls", "messageCls", "prefixEleCls", "suffixEleCls", "invalid", "negative", "required", "loading", "success", "disabled", "readOnly", "label", "prefix", "suffix", "currency", "message", "onChange", "onBlur", "onFocus"]);
87
- var classes = (0, _classnames["default"])("".concat(prefixCls, "-").concat(type));
30
+ var _a, _b;
31
+ var type = (_a = props.type) !== null && _a !== void 0 ? _a : _helper.DEFAULT_TYPE;
32
+ var size = type === 'normal' ? (_b = props.size) !== null && _b !== void 0 ? _b : _helper.DEFAULT_SIZE : _helper.DEFAULT_SIZE;
33
+ var footnote = type === 'normal' ? undefined : props.footnote;
34
+ var footnoteCls = type === 'normal' ? undefined : props.footnoteCls;
35
+ var rawBaseProps = Object.assign({}, props);
36
+ delete rawBaseProps.type;
37
+ delete rawBaseProps.size;
38
+ delete rawBaseProps.footnote;
39
+ delete rawBaseProps.footnoteCls;
40
+ var baseProps = rawBaseProps;
41
+ var value = baseProps.value,
42
+ maxFractionDigits = baseProps.maxFractionDigits,
43
+ _baseProps$placeholde = baseProps.placeholder,
44
+ placeholder = _baseProps$placeholde === void 0 ? _helper.DEFAULT_PLACEHOLDER : _baseProps$placeholde,
45
+ min = baseProps.min,
46
+ max = baseProps.max,
47
+ className = baseProps.className,
48
+ wrapperCls = baseProps.wrapperCls,
49
+ labelCls = baseProps.labelCls,
50
+ _baseProps$prefixCls = baseProps.prefixCls,
51
+ prefixCls = _baseProps$prefixCls === void 0 ? _helper.DEFAULT_PREFIX_CLS : _baseProps$prefixCls,
52
+ messageCls = baseProps.messageCls,
53
+ prefixEleCls = baseProps.prefixEleCls,
54
+ suffixEleCls = baseProps.suffixEleCls,
55
+ invalid = baseProps.invalid,
56
+ negative = baseProps.negative,
57
+ required = baseProps.required,
58
+ loading = baseProps.loading,
59
+ success = baseProps.success,
60
+ disabled = baseProps.disabled,
61
+ readOnly = baseProps.readOnly,
62
+ label = baseProps.label,
63
+ prefix = baseProps.prefix,
64
+ suffix = baseProps.suffix,
65
+ currency = baseProps.currency,
66
+ message = baseProps.message,
67
+ onChange = baseProps.onChange,
68
+ onBlur = baseProps.onBlur,
69
+ onFocus = baseProps.onFocus,
70
+ rest = __rest(baseProps, ["value", "maxFractionDigits", "placeholder", "min", "max", "className", "wrapperCls", "labelCls", "prefixCls", "messageCls", "prefixEleCls", "suffixEleCls", "invalid", "negative", "required", "loading", "success", "disabled", "readOnly", "label", "prefix", "suffix", "currency", "message", "onChange", "onBlur", "onFocus"]);
71
+ var cls = (0, _classnames["default"])("".concat(prefixCls, "-").concat(type));
72
+ // ── Refs ──
88
73
  var inputRef = (0, _react.useRef)(null);
89
74
  var fakeEleRef = (0, _react.useRef)(null);
90
75
  var prefixRef = (0, _react.useRef)(null);
91
76
  var suffixRef = (0, _react.useRef)(null);
92
77
  var currencyRef = (0, _react.useRef)(null);
93
78
  var containerRef = (0, _react.useRef)(null);
94
- var inputCaretPositionRef = (0, _react.useRef)(0);
79
+ var caretPosRef = (0, _react.useRef)(0);
95
80
  var ignoreSelectRef = (0, _react.useRef)(false);
96
- var onChangeRef = (0, _react.useRef)(onChange);
81
+ var onChangeRef = (0, _useLatest["default"])(onChange);
82
+ // ── State ──
97
83
  var _useState = (0, _react.useState)(null),
98
84
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
99
- _value = _useState2[0],
100
- setValue = _useState2[1];
101
- var _useState3 = (0, _react.useState)(MIN_INPUT_WIDTH),
85
+ innerValue = _useState2[0],
86
+ setInnerValue = _useState2[1];
87
+ var _useState3 = (0, _react.useState)(_helper.MIN_INPUT_WIDTH),
102
88
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
103
- _width = _useState4[0],
104
- setWidth = _useState4[1];
89
+ inputWidth = _useState4[0],
90
+ setInputWidth = _useState4[1];
105
91
  var _useState5 = (0, _react.useState)(false),
106
92
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
107
93
  isMaxWidth = _useState6[0],
@@ -110,305 +96,271 @@ var InputAmount = exports.InputAmount = function InputAmount(props) {
110
96
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
111
97
  isFocus = _useState8[0],
112
98
  setIsFocus = _useState8[1];
113
- var isFocusRef = (0, _react.useRef)(isFocus);
99
+ var isFocusRef = (0, _useLatest["default"])(isFocus);
100
+ var isUncontrolled = typeof value === 'undefined';
114
101
  var formattedValue = (0, _react.useMemo)(function () {
115
- return (0, _reactNumberFormat.numericFormatter)('' + (_value == null ? '' : _value), {
116
- thousandSeparator: true,
117
- allowNegative: negative
118
- });
119
- }, [_value, negative]);
120
- var valueRef = (0, _react.useRef)({
121
- value: value,
122
- _value: _value,
102
+ return (0, _helper.formatThousands)(innerValue !== null && innerValue !== void 0 ? innerValue : '', negative);
103
+ }, [innerValue, negative]);
104
+ var stateRef = (0, _useLatest["default"])({
105
+ innerValue: innerValue,
123
106
  formattedValue: formattedValue,
124
107
  min: min,
125
108
  max: max,
126
109
  negative: negative,
127
110
  maxFractionDigits: maxFractionDigits
128
111
  });
129
- var changeFocus = (0, _react.useCallback)(function (focus) {
130
- setIsFocus(focus);
131
- isFocusRef.current = focus;
132
- }, []);
133
- var scrollToEnd = (0, _react.useCallback)(function () {
112
+ // ── Helpers ──
113
+ var scrollToEnd = (0, _useEventCallback["default"])(function () {
134
114
  var sticky = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
135
115
  var _a;
136
116
  var input = inputRef.current;
137
117
  if (!input) return;
138
- var len = (_a = input.value) === null || _a === void 0 ? void 0 : _a.length;
139
- var position = input.scrollLeft;
140
- var shouldToEnd = !sticky;
141
- var start = shouldToEnd ? len : inputCaretPositionRef.current;
142
- input.setSelectionRange(start, start);
143
- input.scrollLeft = shouldToEnd ? input.scrollWidth : position;
118
+ if (sticky) {
119
+ input.setSelectionRange(caretPosRef.current, caretPosRef.current);
120
+ } else {
121
+ var len = (_a = input.value) === null || _a === void 0 ? void 0 : _a.length;
122
+ input.setSelectionRange(len, len);
123
+ input.scrollLeft = input.scrollWidth;
124
+ }
144
125
  input.focus();
145
- }, []);
146
- var calcCaretPos = (0, _react.useCallback)(function (val) {
126
+ });
127
+ var calcCaretPos = (0, _useEventCallback["default"])(function (val) {
147
128
  var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
148
129
  var currPos = arguments.length > 2 ? arguments[2] : undefined;
149
130
  var _a, _b;
150
- if (inputRef.current) {
151
- var _valueRef$current = valueRef.current,
152
- _value2 = _valueRef$current._value,
153
- _negative = _valueRef$current.negative,
154
- _formattedValue = _valueRef$current.formattedValue;
155
- var formattedNewVal = (0, _reactNumberFormat.numericFormatter)(val, {
156
- thousandSeparator: true,
157
- allowNegative: _negative
158
- });
159
- var originOffset = val.length - ((_a = _value2 === null || _value2 === void 0 ? void 0 : _value2.length) !== null && _a !== void 0 ? _a : 0);
160
- var position = (_b = currPos !== null && currPos !== void 0 ? currPos : inputRef.current.selectionEnd) !== null && _b !== void 0 ? _b : 0;
161
- var oldPosVal = _formattedValue.slice(0, Math.max(position, 0));
162
- position = oldPosVal.split(',').join('').length;
163
- var posVal = val.slice(0, position + originOffset);
164
- formattedNewVal.split('').reduce(function (acc, _char, ind) {
165
- if (_char === ',') return acc;else acc.push(_char);
166
- if (acc.join('') === posVal) {
167
- position = ind + 1;
168
- return acc;
169
- }
170
- return acc;
171
- }, []);
172
- inputCaretPositionRef.current = position + offset;
131
+ var input = inputRef.current;
132
+ if (!input) return;
133
+ var _stateRef$current = stateRef.current,
134
+ prev = _stateRef$current.innerValue,
135
+ negative = _stateRef$current.negative,
136
+ formattedValue = _stateRef$current.formattedValue;
137
+ var formattedNewVal = (0, _helper.formatThousands)(val, negative);
138
+ var originOffset = val.length - ((_a = prev === null || prev === void 0 ? void 0 : prev.length) !== null && _a !== void 0 ? _a : 0);
139
+ var position = (_b = currPos !== null && currPos !== void 0 ? currPos : input.selectionEnd) !== null && _b !== void 0 ? _b : 0;
140
+ // Map formatted position back to raw position
141
+ position = (0, _helper.stripCommas)(formattedValue.slice(0, Math.max(position, 0))).length;
142
+ // Map raw position forward to formatted position
143
+ var posVal = val.slice(0, position + originOffset);
144
+ formattedNewVal.split('').reduce(function (acc, _char, ind) {
145
+ if (_char === _helper.CHAR_COMMA) return acc;
146
+ acc.push(_char);
147
+ if (acc.join('') === posVal) position = ind + 1;
148
+ return acc;
149
+ }, []);
150
+ caretPosRef.current = position + offset;
151
+ });
152
+ var commitValue = (0, _useEventCallback["default"])(function (val, hasDecimalPoint, e) {
153
+ var _a;
154
+ if (isUncontrolled) {
155
+ setInnerValue(val === '' ? null : val);
156
+ calcCaretPos(val, hasDecimalPoint ? _helper.DECIMAL_POINT_OFFSET : 0, Math.max(caretPosRef.current, 0));
157
+ ignoreSelectRef.current = true;
173
158
  }
174
- }, []);
175
- var handleChange = (0, _react.useCallback)(function (e) {
176
- var _a, _b, _c, _d;
159
+ if (e) (_a = onChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onChangeRef, e, val);
160
+ });
161
+ // ── Event Handlers ──
162
+ var handleChange = (0, _useEventCallback["default"])(function (e) {
163
+ var _a;
177
164
  if (disabled || readOnly) return;
178
- var _valueRef$current2 = valueRef.current,
179
- value = _valueRef$current2.value,
180
- _value = _valueRef$current2._value,
181
- formattedValue = _valueRef$current2.formattedValue,
182
- min = _valueRef$current2.min,
183
- max = _valueRef$current2.max,
184
- negative = _valueRef$current2.negative,
185
- maxFractionDigits = _valueRef$current2.maxFractionDigits;
186
- var val = e.target.value;
187
- if (val != null) val = normalizeNumberInput(val).split(',').join('');
188
- var hasDecimalPoint = !!val && val.endsWith('.');
189
- if (hasDecimalPoint) val = val.slice(0, -1);
190
- if (!negative && (val === null || val === void 0 ? void 0 : val.includes('-'))) return;
191
- var isStandaloneMinus = negative && val === '-';
192
- if (!isStandaloneMinus && isNaN(+val)) return;
193
- if (val === _value && !hasDecimalPoint) return;
194
- if (typeof maxFractionDigits === 'number' || typeof maxFractionDigits === 'bigint') {
195
- var _val$split = val.split('.'),
196
- _val$split2 = (0, _slicedToArray2["default"])(_val$split, 2),
197
- _int = _val$split2[0],
198
- decimal = _val$split2[1];
199
- var maxDecimals = Number(maxFractionDigits);
200
- if (decimal != null && decimal.length > maxDecimals) {
201
- var truncatedDecimals = decimal.slice(0, maxDecimals);
202
- var _formattedValue$split = formattedValue.split('.'),
165
+ var _stateRef$current2 = stateRef.current,
166
+ innerValue = _stateRef$current2.innerValue,
167
+ formattedValue = _stateRef$current2.formattedValue,
168
+ min = _stateRef$current2.min,
169
+ max = _stateRef$current2.max,
170
+ negative = _stateRef$current2.negative,
171
+ maxFractionDigits = _stateRef$current2.maxFractionDigits;
172
+ var parsed = (0, _helper.parseRawInput)((_a = e.target.value) !== null && _a !== void 0 ? _a : '', negative);
173
+ if (!parsed) return;
174
+ var val = parsed.val;
175
+ var hasDecimalPoint = parsed.hasDecimalPoint,
176
+ isStandaloneMinus = parsed.isStandaloneMinus;
177
+ if (val === innerValue && !hasDecimalPoint) return;
178
+ // Enforce fraction digit limit
179
+ if ((0, _helper.isNumericType)(maxFractionDigits)) {
180
+ var _truncateFractionDigi = (0, _helper.truncateFractionDigits)(val, Number(maxFractionDigits)),
181
+ _int = _truncateFractionDigi["int"],
182
+ truncated = _truncateFractionDigi.truncated,
183
+ overflow = _truncateFractionDigi.overflow;
184
+ if (overflow) {
185
+ var _formattedValue$split = formattedValue.split(_helper.CHAR_DOT),
203
186
  _formattedValue$split2 = (0, _slicedToArray2["default"])(_formattedValue$split, 1),
204
187
  oldInt = _formattedValue$split2[0];
205
- if (oldInt.split(',').join('') == _int) return;
206
- val = "".concat(_int, ".").concat(truncatedDecimals);
188
+ if ((0, _helper.stripCommas)(oldInt) === _int) return;
189
+ val = truncated;
207
190
  }
208
191
  }
209
- if (typeof min === 'number' || typeof min === 'bigint' || typeof max === 'number' || typeof max === 'bigint') {
210
- val = calcValueInRange(val, min, max);
192
+ // Clamp to min/max range
193
+ if ((0, _helper.isNumericType)(min) || (0, _helper.isNumericType)(max)) {
194
+ val = (0, _helper.calcValueInRange)(val, min, max);
211
195
  }
196
+ // Normalize the final value
212
197
  if (val !== '') {
213
- if (isStandaloneMinus) {
214
- val = '-';
215
- } else {
216
- var decimals = (_c = (_b = (_a = val.match(/\.(\d+)$/)) === null || _a === void 0 ? void 0 : _a[1]) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0;
217
- var bn = (0, _bignumber["default"])(val);
218
- var normalized = bn.toFixed(decimals);
219
- if (negative && val.trim().startsWith('-') && bn.isZero()) {
220
- normalized = normalized.startsWith('-') ? normalized : "-".concat(normalized);
221
- }
222
- val = "".concat(normalized).concat(hasDecimalPoint ? '.' : '').trim();
223
- }
198
+ val = isStandaloneMinus ? _helper.CHAR_MINUS : (0, _helper.normalizeValue)(val, hasDecimalPoint, negative);
224
199
  }
225
- if (typeof value === 'undefined') {
226
- setValue(val === '' ? null : val);
227
- calcCaretPos(val, hasDecimalPoint ? 2 : 0, Math.max(inputCaretPositionRef.current, 0));
228
- ignoreSelectRef.current = true;
229
- } else {
230
- e.preventDefault();
231
- e.stopPropagation();
232
- }
233
- (_d = onChangeRef.current) === null || _d === void 0 ? void 0 : _d.call(onChangeRef, e, val);
234
- }, [disabled, readOnly]);
235
- var handleSelect = (0, _react.useCallback)(function () {
200
+ commitValue(val, hasDecimalPoint, e);
201
+ });
202
+ var handleSelect = (0, _useEventCallback["default"])(function () {
236
203
  var _a;
237
204
  if (ignoreSelectRef.current) {
238
205
  ignoreSelectRef.current = false;
239
206
  return;
240
207
  }
241
208
  var currPos = (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.selectionEnd;
242
- if (typeof currPos === 'number') inputCaretPositionRef.current = currPos;
243
- }, []);
209
+ if (typeof currPos === 'number') caretPosRef.current = currPos;
210
+ });
211
+ var handleFocus = (0, _useEventCallback["default"])(function (e) {
212
+ setIsFocus(true);
213
+ onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
214
+ });
215
+ var handleBlur = (0, _useEventCallback["default"])(function (e) {
216
+ setIsFocus(false);
217
+ onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
218
+ });
219
+ var handleContainerClick = (0, _useEventCallback["default"])(function (e) {
220
+ var _a;
221
+ if (e.target instanceof HTMLInputElement) return;
222
+ (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
223
+ if (isMaxWidth) scrollToEnd();
224
+ });
225
+ // ── Layout Effects ──
244
226
  (0, _react.useLayoutEffect)(function () {
245
227
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
246
- var containerWidth = (_b = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) !== null && _b !== void 0 ? _b : MIN_INPUT_WIDTH;
228
+ var containerWidth = (_b = (_a = containerRef.current) === null || _a === void 0 ? void 0 : _a.offsetWidth) !== null && _b !== void 0 ? _b : _helper.MIN_INPUT_WIDTH;
247
229
  var prefixWidth = (_d = (_c = prefixRef.current) === null || _c === void 0 ? void 0 : _c.offsetWidth) !== null && _d !== void 0 ? _d : 0;
248
230
  var suffixWidth = (_f = (_e = suffixRef.current) === null || _e === void 0 ? void 0 : _e.offsetWidth) !== null && _f !== void 0 ? _f : 0;
249
231
  var currencyWidth = (_h = (_g = currencyRef.current) === null || _g === void 0 ? void 0 : _g.offsetWidth) !== null && _h !== void 0 ? _h : 0;
250
232
  var fakeWidth = (_k = (_j = fakeEleRef.current) === null || _j === void 0 ? void 0 : _j.offsetWidth) !== null && _k !== void 0 ? _k : 0;
251
- var gapWidth = prefixWidth && suffixWidth && currencyWidth ? 24 : prefixWidth && suffixWidth || prefixWidth && currencyWidth || suffixWidth && currencyWidth ? 16 : prefixWidth || suffixWidth || currencyWidth ? 8 : 0;
233
+ var gapWidth = (0, _helper.calcGapWidth)(!!prefixWidth, !!suffixWidth, !!currencyWidth);
252
234
  var maxWidth = containerWidth - prefixWidth - suffixWidth - currencyWidth - gapWidth;
253
- var isMax = fakeWidth >= maxWidth;
254
- setWidth(Math.min(maxWidth, Math.max(fakeWidth, MIN_INPUT_WIDTH)));
255
- setIsMaxWidth(isMax);
235
+ setInputWidth(Math.min(maxWidth, Math.max(fakeWidth, _helper.MIN_INPUT_WIDTH)));
236
+ setIsMaxWidth(fakeWidth >= maxWidth);
256
237
  if (isFocusRef.current) scrollToEnd(true);
257
- }, [_value, prefix, suffix, currency]);
238
+ }, [innerValue, prefix, suffix, currency, loading]);
258
239
  (0, _react.useLayoutEffect)(function () {
259
- var _a, _b, _c, _d;
260
- var val = typeof value === 'undefined' ? _value : value;
240
+ var _a;
241
+ var val = isUncontrolled ? innerValue : value;
261
242
  var hasDecimalPoint = false;
262
243
  var isStandaloneMinus = false;
263
244
  if (typeof val === 'string') {
264
245
  if (val === '') {
265
246
  val = null;
266
247
  } else {
267
- val = normalizeNumberInput(val).split(',').join('');
268
- hasDecimalPoint = !!val && val.endsWith('.');
269
- if (hasDecimalPoint) val = val.slice(0, -1);
270
- if (!negative) val = val.replace(/-/g, '');
271
- isStandaloneMinus = !!negative && val === '-';
272
- if (!isStandaloneMinus && isNaN(+val)) return;
273
- }
274
- } else if (val !== null && typeof val !== 'number' && typeof val !== 'bigint') return;
275
- if (!negative) {
276
- if (typeof val === 'number') {
277
- val = Math.abs(val);
278
- } else if (typeof val === 'bigint') {
279
- var zero = BigInt(0);
280
- val = val < zero ? -val : val;
248
+ var parsed = (0, _helper.parseRawInput)(val, negative);
249
+ if (!parsed) return;
250
+ val = parsed.val;
251
+ hasDecimalPoint = parsed.hasDecimalPoint;
252
+ isStandaloneMinus = parsed.isStandaloneMinus;
253
+ if (!negative) val = (0, _helper.stripMinus)(val);
281
254
  }
255
+ } else if (val !== null && !(0, _helper.isNumericType)(val)) return;
256
+ // Ensure non-negative when negative is not allowed
257
+ if (!negative && (0, _helper.isNumericType)(val)) {
258
+ val = (0, _helper.absValue)(val);
282
259
  }
283
- if ((typeof val === 'string' || typeof val === 'number') && (typeof maxFractionDigits === 'number' || typeof maxFractionDigits === 'bigint')) {
284
- var _split = ('' + val).split('.'),
285
- _split2 = (0, _slicedToArray2["default"])(_split, 2),
286
- _int2 = _split2[0],
287
- decimal = _split2[1];
288
- var maxDecimals = Number(maxFractionDigits);
289
- if (decimal != null && decimal.length > maxDecimals) {
290
- var truncatedDecimals = decimal.slice(0, maxDecimals);
291
- val = "".concat(_int2, ".").concat(truncatedDecimals);
292
- if (typeof value === 'undefined') {
293
- setValue(val);
260
+ // Enforce fraction digit limit
261
+ if ((typeof val === 'string' || typeof val === 'number') && (0, _helper.isNumericType)(maxFractionDigits)) {
262
+ var _truncateFractionDigi2 = (0, _helper.truncateFractionDigits)("".concat(val), Number(maxFractionDigits)),
263
+ truncated = _truncateFractionDigi2.truncated,
264
+ overflow = _truncateFractionDigi2.overflow;
265
+ if (overflow) {
266
+ if (isUncontrolled) {
267
+ setInnerValue(truncated);
294
268
  } else {
295
- var syntheticEvent = {
269
+ (_a = onChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onChangeRef, {
296
270
  target: inputRef.current
297
- };
298
- (_a = onChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onChangeRef, syntheticEvent, val !== null && val !== void 0 ? val : '');
271
+ }, truncated !== null && truncated !== void 0 ? truncated : '');
299
272
  }
300
273
  return;
301
274
  }
302
275
  }
303
- if (typeof val === 'string' || typeof val === 'number' || typeof val === 'bigint') {
304
- val = calcValueInRange('' + val, min, max);
276
+ // Clamp to min/max range
277
+ if ((0, _helper.isNumericType)(val) || typeof val === 'string') {
278
+ val = (0, _helper.calcValueInRange)("".concat(val), min, max);
305
279
  }
306
280
  if (val === '' || val == null) {
307
- setValue(null);
281
+ setInnerValue(null);
308
282
  } else {
309
- if (isStandaloneMinus) {
310
- val = '-';
311
- } else {
312
- var strVal = '' + val;
313
- var decimals = (_d = (_c = (_b = strVal.match(/\.(\d+)$/)) === null || _b === void 0 ? void 0 : _b[1]) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0;
314
- var bn = (0, _bignumber["default"])(strVal);
315
- var normalized = bn.toFixed(decimals);
316
- if (negative && strVal.trim().startsWith('-') && bn.isZero()) {
317
- normalized = normalized.startsWith('-') ? normalized : "-".concat(normalized);
318
- }
319
- val = "".concat(normalized).concat(hasDecimalPoint ? '.' : '').trim();
320
- }
321
- setValue(val);
283
+ val = isStandaloneMinus ? _helper.CHAR_MINUS : (0, _helper.normalizeValue)("".concat(val), hasDecimalPoint, negative);
284
+ setInnerValue(val);
322
285
  }
323
- calcCaretPos(val !== null && val !== void 0 ? val : '', hasDecimalPoint ? 2 : 0, Math.max(inputCaretPositionRef.current, 0));
286
+ calcCaretPos(val !== null && val !== void 0 ? val : '', hasDecimalPoint ? _helper.DECIMAL_POINT_OFFSET : 0, Math.max(caretPosRef.current, 0));
324
287
  ignoreSelectRef.current = true;
325
288
  }, [value, maxFractionDigits, min, max, negative]);
326
- (0, _react.useEffect)(function () {
327
- onChangeRef.current = onChange;
328
- valueRef.current = {
329
- value: value,
330
- _value: _value,
331
- formattedValue: formattedValue,
332
- min: min,
333
- max: max,
334
- negative: negative,
335
- maxFractionDigits: maxFractionDigits
336
- };
337
- }, [_value, value, formattedValue, min, max, negative, maxFractionDigits, onChange]);
338
- return (0, _jsxRuntime.jsxs)("div", {
339
- className: classes('wrapper', (0, _classnames.joinCls)(wrapperCls, classes(size), invalid && classes('invalid'), success && classes('success'), disabled && classes('disabled'), readOnly && classes('readonly'), _value && classes('filled'))),
340
- children: [label ? loading ? (0, _jsxRuntime.jsx)(_skeleton.Skeleton, {
341
- width: '72px',
342
- height: '18px',
343
- className: classes('label-loading')
344
- }) : (0, _jsxRuntime.jsx)("span", {
345
- className: classes('label', (0, _classnames.joinCls)(required && classes('label-required'), labelCls)),
289
+ // ── Render ──
290
+ var wrapperClassName = cls('wrapper', (0, _classnames.joinCls)(wrapperCls, cls(size), invalid && cls('invalid'), success && cls('success'), disabled && cls('disabled'), readOnly && cls('readonly'), innerValue && cls('filled')));
291
+ var renderLabel = function renderLabel() {
292
+ if (!label) return null;
293
+ if (loading) {
294
+ return (0, _jsxRuntime.jsx)(_skeleton.Skeleton, {
295
+ width: _helper.SKELETON_LABEL_WIDTH,
296
+ height: _helper.SKELETON_LABEL_HEIGHT,
297
+ className: cls('label-loading')
298
+ });
299
+ }
300
+ return (0, _jsxRuntime.jsx)("span", {
301
+ className: cls('label', (0, _classnames.joinCls)(required && cls('label-required'), labelCls)),
346
302
  children: label
347
- }) : null, (0, _jsxRuntime.jsxs)("div", {
303
+ });
304
+ };
305
+ var renderSuffix = function renderSuffix() {
306
+ if (loading) return (0, _jsxRuntime.jsx)(_Spinner["default"], {
307
+ className: cls('suffix-loading'),
308
+ strokeWidth: _helper.SPINNER_STROKE_WIDTH
309
+ });
310
+ if (suffix) return (0, _jsxRuntime.jsx)("span", {
311
+ ref: suffixRef,
312
+ className: cls('suffix', suffixEleCls),
313
+ children: suffix
314
+ });
315
+ return null;
316
+ };
317
+ return (0, _jsxRuntime.jsxs)("div", {
318
+ className: wrapperClassName,
319
+ children: [renderLabel(), (0, _jsxRuntime.jsxs)("div", {
348
320
  ref: containerRef,
349
- className: classes(void 0, (0, _classnames.joinCls)(className, isFocus && classes('focus'))),
350
- onClick: function onClick(e) {
351
- var _a;
352
- if (e.target instanceof HTMLInputElement) return;
353
- (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
354
- if (isMaxWidth) scrollToEnd();
355
- },
321
+ className: cls(void 0, (0, _classnames.joinCls)(className, isFocus && cls('focus'))),
322
+ onClick: handleContainerClick,
356
323
  children: [prefix && (0, _jsxRuntime.jsx)("span", {
357
324
  ref: prefixRef,
358
- className: classes('prefix', prefixEleCls),
325
+ className: cls('prefix', prefixEleCls),
359
326
  children: prefix
360
327
  }), (0, _jsxRuntime.jsx)("div", {
361
- className: classes('element', !isFocus && isMaxWidth ? classes('element-max') : ''),
328
+ className: cls('element', !isFocus && isMaxWidth ? cls('element-max') : ''),
362
329
  children: (0, _jsxRuntime.jsx)("input", Object.assign({}, rest, {
363
330
  ref: inputRef,
364
331
  value: formattedValue,
365
332
  placeholder: placeholder,
366
333
  readOnly: readOnly,
367
334
  disabled: disabled,
368
- style: {
369
- '--input-width': "".concat(_width, "px")
370
- },
335
+ style: (0, _defineProperty2["default"])({}, _helper.CSS_VAR_INPUT_WIDTH, "".concat(inputWidth, "px")),
371
336
  onChange: handleChange,
372
337
  onSelect: handleSelect,
373
- onFocus: function onFocus(e) {
374
- changeFocus(true);
375
- _onFocus === null || _onFocus === void 0 ? void 0 : _onFocus(e);
376
- },
377
- onBlur: function onBlur(e) {
378
- changeFocus(false);
379
- _onBlur === null || _onBlur === void 0 ? void 0 : _onBlur(e);
380
- }
338
+ onFocus: handleFocus,
339
+ onBlur: handleBlur
381
340
  }))
382
341
  }), currency && (0, _jsxRuntime.jsx)("span", {
383
342
  ref: currencyRef,
384
- className: classes('currency'),
343
+ className: cls('currency'),
385
344
  children: currency
386
- }), loading ? (0, _jsxRuntime.jsx)(_Spinner["default"], {
387
- className: classes('suffix-loading'),
388
- strokeWidth: '4'
389
- }) : suffix ? (0, _jsxRuntime.jsx)("span", {
390
- ref: suffixRef,
391
- className: classes('suffix', suffixEleCls),
392
- children: suffix
393
- }) : null, (0, _jsxRuntime.jsx)("span", {
345
+ }), renderSuffix(), (0, _jsxRuntime.jsx)("span", {
394
346
  ref: fakeEleRef,
395
- className: classes('fake'),
347
+ className: cls('fake'),
396
348
  onClick: function onClick(e) {
397
349
  return e.stopPropagation();
398
350
  },
399
351
  children: formattedValue
400
352
  })]
401
353
  }), (message || footnote) && (0, _jsxRuntime.jsxs)("div", {
402
- className: classes('extra'),
354
+ className: cls('extra'),
403
355
  children: [message && (0, _jsxRuntime.jsx)("div", {
404
- className: classes('message', messageCls),
356
+ className: cls('message', messageCls),
405
357
  children: message
406
358
  }), footnote && (0, _jsxRuntime.jsx)("div", {
407
- className: classes('footnote', footnoteCls),
359
+ className: cls('footnote', footnoteCls),
408
360
  children: footnote
409
361
  })]
410
362
  })]
411
363
  });
412
364
  };
413
365
  var _default = exports["default"] = /*#__PURE__*/(0, _react.memo)(InputAmount);
414
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvSW5wdXRBbW91bnQvSW5wdXRBbW91bnQuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL0lucHV0QW1vdW50L0lucHV0QW1vdW50LnRzeCJdLCJuYW1lcyI6WyJfanN4UnVudGltZSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfYmlnbnVtYmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdE51bWJlckZvcm1hdCIsIl9za2VsZXRvbiIsIl9TcGlubmVyIiwiX2NsYXNzbmFtZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiTUlOX0lOUFVUX1dJRFRIIiwibm9ybWFsaXplTnVtYmVySW5wdXQiLCJ2YWwiLCJyZXBsYWNlIiwiY2FsY1ZhbHVlSW5SYW5nZSIsIm1pbiIsIm1heCIsImlzTmFOIiwiY2FsY1ZhbCIsImJuVmFsIiwiQmlnTnVtYmVyIiwibWluQm4iLCJsdCIsIm1heEJuIiwiZ3QiLCJJbnB1dEFtb3VudCIsImV4cG9ydHMiLCJwcm9wcyIsInZhbHVlIiwiX3Byb3BzJHR5cGUiLCJ0eXBlIiwibWF4RnJhY3Rpb25EaWdpdHMiLCJjaGlsZHJlbiIsIl9wcm9wcyRwbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIiwiX3Byb3BzJHNpemUiLCJzaXplIiwiZm9vdG5vdGUiLCJmb290bm90ZUNscyIsImNsYXNzTmFtZSIsIndyYXBwZXJDbHMiLCJsYWJlbENscyIsIl9wcm9wcyRwcmVmaXhDbHMiLCJwcmVmaXhDbHMiLCJtZXNzYWdlQ2xzIiwicHJlZml4RWxlQ2xzIiwic3VmZml4RWxlQ2xzIiwiaW52YWxpZCIsIm5lZ2F0aXZlIiwicmVxdWlyZWQiLCJsb2FkaW5nIiwic3VjY2VzcyIsImRpc2FibGVkIiwicmVhZE9ubHkiLCJsYWJlbCIsInByZWZpeCIsInN1ZmZpeCIsImN1cnJlbmN5IiwibWVzc2FnZSIsIm9uQ2hhbmdlIiwib25CbHVyIiwib25Gb2N1cyIsInJlc3QiLCJjbGFzc2VzIiwiY2xhc3NuYW1lcyIsImNvbmNhdCIsImlucHV0UmVmIiwidXNlUmVmIiwiZmFrZUVsZVJlZiIsInByZWZpeFJlZiIsInN1ZmZpeFJlZiIsImN1cnJlbmN5UmVmIiwiY29udGFpbmVyUmVmIiwiaW5wdXRDYXJldFBvc2l0aW9uUmVmIiwiaWdub3JlU2VsZWN0UmVmIiwib25DaGFuZ2VSZWYiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJfdmFsdWUiLCJzZXRWYWx1ZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiX3dpZHRoIiwic2V0V2lkdGgiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzTWF4V2lkdGgiLCJzZXRJc01heFdpZHRoIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpc0ZvY3VzIiwic2V0SXNGb2N1cyIsImlzRm9jdXNSZWYiLCJmb3JtYXR0ZWRWYWx1ZSIsInVzZU1lbW8iLCJudW1lcmljRm9ybWF0dGVyIiwidGhvdXNhbmRTZXBhcmF0b3IiLCJhbGxvd05lZ2F0aXZlIiwidmFsdWVSZWYiLCJjaGFuZ2VGb2N1cyIsInVzZUNhbGxiYWNrIiwiZm9jdXMiLCJjdXJyZW50Iiwic2Nyb2xsVG9FbmQiLCJzdGlja3kiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJfYSIsImlucHV0IiwibGVuIiwicG9zaXRpb24iLCJzY3JvbGxMZWZ0Iiwic2hvdWxkVG9FbmQiLCJzdGFydCIsInNldFNlbGVjdGlvblJhbmdlIiwic2Nyb2xsV2lkdGgiLCJjYWxjQ2FyZXRQb3MiLCJvZmZzZXQiLCJjdXJyUG9zIiwiX2IiLCJfdmFsdWVSZWYkY3VycmVudCIsImZvcm1hdHRlZE5ld1ZhbCIsIm9yaWdpbk9mZnNldCIsInNlbGVjdGlvbkVuZCIsIm9sZFBvc1ZhbCIsInNsaWNlIiwiTWF0aCIsInNwbGl0Iiwiam9pbiIsInBvc1ZhbCIsInJlZHVjZSIsImFjYyIsImNoYXIiLCJpbmQiLCJwdXNoIiwiaGFuZGxlQ2hhbmdlIiwiX2MiLCJfZCIsIl92YWx1ZVJlZiRjdXJyZW50MiIsInRhcmdldCIsImhhc0RlY2ltYWxQb2ludCIsImVuZHNXaXRoIiwiaW5jbHVkZXMiLCJpc1N0YW5kYWxvbmVNaW51cyIsIl92YWwkc3BsaXQiLCJfdmFsJHNwbGl0MiIsImludCIsImRlY2ltYWwiLCJtYXhEZWNpbWFscyIsIk51bWJlciIsInRydW5jYXRlZERlY2ltYWxzIiwiX2Zvcm1hdHRlZFZhbHVlJHNwbGl0IiwiX2Zvcm1hdHRlZFZhbHVlJHNwbGl0MiIsIm9sZEludCIsImRlY2ltYWxzIiwibWF0Y2giLCJibiIsIm5vcm1hbGl6ZWQiLCJ0b0ZpeGVkIiwidHJpbSIsInN0YXJ0c1dpdGgiLCJpc1plcm8iLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVNlbGVjdCIsInVzZUxheW91dEVmZmVjdCIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiX2oiLCJfayIsImNvbnRhaW5lcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJwcmVmaXhXaWR0aCIsInN1ZmZpeFdpZHRoIiwiY3VycmVuY3lXaWR0aCIsImZha2VXaWR0aCIsImdhcFdpZHRoIiwibWF4V2lkdGgiLCJpc01heCIsImFicyIsInplcm8iLCJCaWdJbnQiLCJfc3BsaXQiLCJfc3BsaXQyIiwic3ludGhldGljRXZlbnQiLCJzdHJWYWwiLCJ1c2VFZmZlY3QiLCJfanN4cyIsImpvaW5DbHMiLCJfanN4IiwiU2tlbGV0b24iLCJ3aWR0aCIsImhlaWdodCIsInJlZiIsIm9uQ2xpY2siLCJIVE1MSW5wdXRFbGVtZW50IiwiYXNzaWduIiwic3R5bGUiLCJvblNlbGVjdCIsIlNwaW5uZXIiLCJzdHJva2VXaWR0aCIsIl9kZWZhdWx0IiwibWVtbyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBV0EsSUFBQUEsV0FBQSxHQUFBQyxPQUFBO0FDWEEsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQUksa0JBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFNBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFFBQUEsR0FBQUgsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQUMsdUJBQUEsQ0FBQVIsT0FBQTtBQUF3RSxTQUFBUyx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQUYsd0JBQUFFLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQs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LFNBQVMsRUFBRXdCLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDMUJ1SSxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRXZOLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUNzTCxlQUFlLENBQUEsQ0FBRTtRQUFBO1FBQUFySSxRQUFBLEVBRWhDK0Q7TUFBYyxDQUFBLENBQ1Y7SUFBQSxDQUFBLENBQ0gsRUFFSixDQUFDckMsT0FBTyxJQUFJckIsUUFBUSxLQUFLLElBQUEwSixnQkFBQSxFQUFBLEtBQUEsRUFBQTtNQUFLeEosU0FBUyxFQUFFd0IsT0FBTyxDQUFDLE9BQU8sQ0FBQztNQUFBL0IsUUFBQSxFQUFBLENBQ3REMEIsT0FBTyxJQUFJLElBQUF1SSxlQUFBLEVBQUEsS0FBQSxFQUFBO1FBQUsxSixTQUFTLEVBQUV3QixPQUFPLENBQUMsU0FBUyxFQUFFbkIsVUFBVSxDQUFDO1FBQUFaLFFBQUEsRUFBRzBCO01BQU8sQ0FBQSxDQUFPLEVBQzFFckIsUUFBUSxJQUFJLElBQUE0SixlQUFBLEVBQUEsS0FBQSxFQUFBO1FBQUsxSixTQUFTLEVBQUV3QixPQUFPLENBQUMsVUFBVSxFQUFFekIsV0FBVyxDQUFDO1FBQUFOLFFBQUEsRUFBR0s7TUFBUSxDQUFBLENBQU87SUFBQSxDQUFBLENBQzNFO0VBQUEsQ0FBQSxDQUVKO0FBQ1IsQ0FBQztBQUFDLElBQUF3SyxRQUFBLEdBQUFuTCxPQUFBLDJCQUVhLElBQUFvTCxXQUFJLEVBQUNyTCxXQUFXLENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9JbnB1dEFtb3VudC9JbnB1dEFtb3VudC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBtZW1vLCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBudW1lcmljRm9ybWF0dGVyIH0gZnJvbSAncmVhY3QtbnVtYmVyLWZvcm1hdCc7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJ3ByaW1lcmVhY3Qvc2tlbGV0b24nO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSAnLi4vU3Bpbm5lcic7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzbmFtZXMsIGpvaW5DbHMgfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc25hbWVzJztcbmNvbnN0IE1JTl9JTlBVVF9XSURUSCA9IDMzO1xuY29uc3Qgbm9ybWFsaXplTnVtYmVySW5wdXQgPSAodmFsKSA9PiB2YWxcbiAgICAucmVwbGFjZSgvW1xcdTMwMDJcXHVmZjBlXFx1ZmY2MV0vZywgJy4nKVxuICAgIC5yZXBsYWNlKC9bXFx1RkYwQ10vZywgJywnKTtcbmNvbnN0IGNhbGNWYWx1ZUluUmFuZ2UgPSAodmFsLCBtaW4sIG1heCkgPT4ge1xuICAgIGlmICh2YWwgPT09ICcnIHx8IHZhbCA9PT0gJy0nIHx8IGlzTmFOKCt2YWwpKVxuICAgICAgICByZXR1cm4gdmFsO1xuICAgIGxldCBjYWxjVmFsID0gdmFsO1xuICAgIGNvbnN0IGJuVmFsID0gQmlnTnVtYmVyKHZhbCk7XG4gICAgaWYgKHR5cGVvZiBtaW4gPT09ICdudW1iZXInIHx8IHR5cGVvZiBtaW4gPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIGNvbnN0IG1pbkJuID0gQmlnTnVtYmVyKG1pbik7XG4gICAgICAgIGlmIChiblZhbC5sdChtaW5CbikpIHtcbiAgICAgICAgICAgIGNhbGNWYWwgPSAnJyArIG1pbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG1heCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG1heCA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgY29uc3QgbWF4Qm4gPSBCaWdOdW1iZXIobWF4KTtcbiAgICAgICAgaWYgKGJuVmFsLmd0KG1heEJuKSkge1xuICAgICAgICAgICAgY2FsY1ZhbCA9ICcnICsgbWF4O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjYWxjVmFsO1xufTtcbmV4cG9ydCBjb25zdCBJbnB1dEFtb3VudCA9IHByb3BzID0+IHtcbiAgICBjb25zdCB7IHZhbHVlLCB0eXBlID0gJ3ByaW1hcnknLCBtYXhGcmFjdGlvbkRpZ2l0cywgY2hpbGRyZW4sIHBsYWNlaG9sZGVyID0gJzAnLCBtaW4sIG1heCwgXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHNpemUgPSAnbGFyZ2UnLCBmb290bm90ZSwgZm9vdG5vdGVDbHMsIGNsYXNzTmFtZSwgd3JhcHBlckNscywgbGFiZWxDbHMsIHByZWZpeENscyA9ICdpbnB1dC1hbW91bnQnLCBtZXNzYWdlQ2xzLCBwcmVmaXhFbGVDbHMsIHN1ZmZpeEVsZUNscywgaW52YWxpZCwgbmVnYXRpdmUsIHJlcXVpcmVkLCBsb2FkaW5nLCBzdWNjZXNzLCBkaXNhYmxlZCwgcmVhZE9ubHksIGxhYmVsLCBwcmVmaXgsIHN1ZmZpeCwgY3VycmVuY3ksIG1lc3NhZ2UsIG9uQ2hhbmdlLCBvbkJsdXIsIG9uRm9jdXMgfSA9IHByb3BzLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJ2YWx1ZVwiLCBcInR5cGVcIiwgXCJtYXhGcmFjdGlvbkRpZ2l0c1wiLCBcImNoaWxkcmVuXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJtaW5cIiwgXCJtYXhcIiwgXCJzaXplXCIsIFwiZm9vdG5vdGVcIiwgXCJmb290bm90ZUNsc1wiLCBcImNsYXNzTmFtZVwiLCBcIndyYXBwZXJDbHNcIiwgXCJsYWJlbENsc1wiLCBcInByZWZpeENsc1wiLCBcIm1lc3NhZ2VDbHNcIiwgXCJwcmVmaXhFbGVDbHNcIiwgXCJzdWZmaXhFbGVDbHNcIiwgXCJpbnZhbGlkXCIsIFwibmVnYXRpdmVcIiwgXCJyZXF1aXJlZFwiLCBcImxvYWRpbmdcIiwgXCJzdWNjZXNzXCIsIFwiZGlzYWJsZWRcIiwgXCJyZWFkT25seVwiLCBcImxhYmVsXCIsIFwicHJlZml4XCIsIFwic3VmZml4XCIsIFwiY3VycmVuY3lcIiwgXCJtZXNzYWdlXCIsIFwib25DaGFuZ2VcIiwgXCJvbkJsdXJcIiwgXCJvbkZvY3VzXCJdKTtcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhgJHtwcmVmaXhDbHN9LSR7dHlwZX1gKTtcbiAgICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBmYWtlRWxlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHByZWZpeFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBzdWZmaXhSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY3VycmVuY3lSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGlucHV0Q2FyZXRQb3NpdGlvblJlZiA9IHVzZVJlZigwKTtcbiAgICBjb25zdCBpZ25vcmVTZWxlY3RSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IG9uQ2hhbmdlUmVmID0gdXNlUmVmKG9uQ2hhbmdlKTtcbiAgICBjb25zdCBbX3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbX3dpZHRoLCBzZXRXaWR0aF0gPSB1c2VTdGF0ZShNSU5fSU5QVVRfV0lEVEgpO1xuICAgIGNvbnN0IFtpc01heFdpZHRoLCBzZXRJc01heFdpZHRoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaXNGb2N1cywgc2V0SXNGb2N1c10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgaXNGb2N1c1JlZiA9IHVzZVJlZihpc0ZvY3VzKTtcbiAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICByZXR1cm4gbnVtZXJpY0Zvcm1hdHRlcignJyArIChfdmFsdWUgPT0gbnVsbCA/ICcnIDogX3ZhbHVlKSwge1xuICAgICAgICAgICAgdGhvdXNhbmRTZXBhcmF0b3I6IHRydWUsXG4gICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiBuZWdhdGl2ZSxcbiAgICAgICAgfSk7XG4gICAgfSwgW192YWx1ZSwgbmVnYXRpdmVdKTtcbiAgICBjb25zdCB2YWx1ZVJlZiA9IHVzZVJlZih7XG4gICAgICAgIHZhbHVlLFxuICAgICAgICBfdmFsdWUsXG4gICAgICAgIGZvcm1hdHRlZFZhbHVlLFxuICAgICAgICBtaW4sXG4gICAgICAgIG1heCxcbiAgICAgICAgbmVnYXRpdmUsXG4gICAgICAgIG1heEZyYWN0aW9uRGlnaXRzLFxuICAgIH0pO1xuICAgIGNvbnN0IGNoYW5nZUZvY3VzID0gdXNlQ2FsbGJhY2soKGZvY3VzKSA9PiB7XG4gICAgICAgIHNldElzRm9jdXMoZm9jdXMpO1xuICAgICAgICBpc0ZvY3VzUmVmLmN1cnJlbnQgPSBmb2N1cztcbiAgICB9LCBbXSk7XG4gICAgY29uc3Qgc2Nyb2xsVG9FbmQgPSB1c2VDYWxsYmFjaygoc3RpY2t5ID0gZmFsc2UpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghaW5wdXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGxlbiA9IChfYSA9IGlucHV0LnZhbHVlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGlucHV0LnNjcm9sbExlZnQ7XG4gICAgICAgIGNvbnN0IHNob3VsZFRvRW5kID0gIXN0aWNreTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBzaG91bGRUb0VuZCA/IGxlbiA6IGlucHV0Q2FyZXRQb3NpdGlvblJlZi5jdXJyZW50O1xuICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgc3RhcnQpO1xuICAgICAgICBpbnB1dC5zY3JvbGxMZWZ0ID0gc2hvdWxkVG9FbmQgPyBpbnB1dC5zY3JvbGxXaWR0aCA6IHBvc2l0aW9uO1xuICAgICAgICBpbnB1dC5mb2N1cygpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBjYWxjQ2FyZXRQb3MgPSB1c2VDYWxsYmFjaygodmFsLCBvZmZzZXQgPSAwLCBjdXJyUG9zKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBjb25zdCB7IF92YWx1ZSwgbmVnYXRpdmUsIGZvcm1hdHRlZFZhbHVlIH0gPSB2YWx1ZVJlZi5jdXJyZW50O1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkTmV3VmFsID0gbnVtZXJpY0Zvcm1hdHRlcih2YWwsIHtcbiAgICAgICAgICAgICAgICB0aG91c2FuZFNlcGFyYXRvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiBuZWdhdGl2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luT2Zmc2V0ID0gdmFsLmxlbmd0aCAtICgoX2EgPSBfdmFsdWUgPT09IG51bGwgfHwgX3ZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdmFsdWUubGVuZ3RoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKTtcbiAgICAgICAgICAgIGxldCBwb3NpdGlvbiA9IChfYiA9IGN1cnJQb3MgIT09IG51bGwgJiYgY3VyclBvcyAhPT0gdm9pZCAwID8gY3VyclBvcyA6IGlucHV0UmVmLmN1cnJlbnQuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwO1xuICAgICAgICAgICAgY29uc3Qgb2xkUG9zVmFsID0gZm9ybWF0dGVkVmFsdWUuc2xpY2UoMCwgTWF0aC5tYXgocG9zaXRpb24sIDApKTtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gb2xkUG9zVmFsLnNwbGl0KCcsJykuam9pbignJykubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgcG9zVmFsID0gdmFsLnNsaWNlKDAsIChwb3NpdGlvbiArIG9yaWdpbk9mZnNldCkpO1xuICAgICAgICAgICAgZm9ybWF0dGVkTmV3VmFsLnNwbGl0KCcnKS5yZWR1Y2UoKGFjYywgY2hhciwgaW5kKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYXIgPT09ICcsJylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFjYy5wdXNoKGNoYXIpO1xuICAgICAgICAgICAgICAgIGlmIChhY2Muam9pbignJykgPT09IHBvc1ZhbCkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IGluZCArIDE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCBbXSk7XG4gICAgICAgICAgICBpbnB1dENhcmV0UG9zaXRpb25SZWYuY3VycmVudCA9IHBvc2l0aW9uICsgb2Zmc2V0O1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgaWYgKGRpc2FibGVkIHx8IHJlYWRPbmx5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBfdmFsdWUsIGZvcm1hdHRlZFZhbHVlLCBtaW4sIG1heCwgbmVnYXRpdmUsIG1heEZyYWN0aW9uRGlnaXRzIH0gPSB2YWx1ZVJlZi5jdXJyZW50O1xuICAgICAgICBsZXQgdmFsID0gZS50YXJnZXQudmFsdWU7XG4gICAgICAgIGlmICh2YWwgIT0gbnVsbClcbiAgICAgICAgICAgIHZhbCA9IG5vcm1hbGl6ZU51bWJlcklucHV0KHZhbCkuc3BsaXQoJywnKS5qb2luKCcnKTtcbiAgICAgICAgY29uc3QgaGFzRGVjaW1hbFBvaW50ID0gISF2YWwgJiYgdmFsLmVuZHNXaXRoKCcuJyk7XG4gICAgICAgIGlmIChoYXNEZWNpbWFsUG9pbnQpXG4gICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMCwgLTEpO1xuICAgICAgICBpZiAoIW5lZ2F0aXZlICYmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWwuaW5jbHVkZXMoJy0nKSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGlzU3RhbmRhbG9uZU1pbnVzID0gbmVnYXRpdmUgJiYgdmFsID09PSAnLSc7XG4gICAgICAgIGlmICghaXNTdGFuZGFsb25lTWludXMgJiYgaXNOYU4oK3ZhbCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh2YWwgPT09IF92YWx1ZSAmJiAhaGFzRGVjaW1hbFBvaW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIG1heEZyYWN0aW9uRGlnaXRzID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4RnJhY3Rpb25EaWdpdHMgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBbaW50LCBkZWNpbWFsXSA9IHZhbC5zcGxpdCgnLicpO1xuICAgICAgICAgICAgY29uc3QgbWF4RGVjaW1hbHMgPSBOdW1iZXIobWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICAgICAgaWYgKGRlY2ltYWwgIT0gbnVsbCAmJiBkZWNpbWFsLmxlbmd0aCA+IG1heERlY2ltYWxzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkRGVjaW1hbHMgPSBkZWNpbWFsLnNsaWNlKDAsIG1heERlY2ltYWxzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBbb2xkSW50LF0gPSBmb3JtYXR0ZWRWYWx1ZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGlmIChvbGRJbnQuc3BsaXQoJywnKS5qb2luKCcnKSA9PSBpbnQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB2YWwgPSBgJHtpbnR9LiR7dHJ1bmNhdGVkRGVjaW1hbHN9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKHR5cGVvZiBtaW4gPT09ICdudW1iZXInIHx8IHR5cGVvZiBtaW4gPT09ICdiaWdpbnQnKSB8fCAodHlwZW9mIG1heCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG1heCA9PT0gJ2JpZ2ludCcpKSB7XG4gICAgICAgICAgICB2YWwgPSBjYWxjVmFsdWVJblJhbmdlKHZhbCwgbWluLCBtYXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgIT09ICcnKSB7XG4gICAgICAgICAgICBpZiAoaXNTdGFuZGFsb25lTWludXMpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IChfYyA9IChfYiA9IChfYSA9IHZhbC5tYXRjaCgvXFwuKFxcZCspJC8pKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbMV0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5sZW5ndGgpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYm4gPSBCaWdOdW1iZXIodmFsKTtcbiAgICAgICAgICAgICAgICBsZXQgbm9ybWFsaXplZCA9IGJuLnRvRml4ZWQoZGVjaW1hbHMpO1xuICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZSAmJiB2YWwudHJpbSgpLnN0YXJ0c1dpdGgoJy0nKSAmJiBibi5pc1plcm8oKSkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5zdGFydHNXaXRoKCctJykgPyBub3JtYWxpemVkIDogYC0ke25vcm1hbGl6ZWR9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsID0gYCR7bm9ybWFsaXplZH0ke2hhc0RlY2ltYWxQb2ludCA/ICcuJyA6ICcnfWAudHJpbSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZSh2YWwgPT09ICcnID8gbnVsbCA6IHZhbCk7XG4gICAgICAgICAgICBjYWxjQ2FyZXRQb3ModmFsLCBoYXNEZWNpbWFsUG9pbnQgPyAyIDogMCwgTWF0aC5tYXgoaW5wdXRDYXJldFBvc2l0aW9uUmVmLmN1cnJlbnQsIDApKTtcbiAgICAgICAgICAgIGlnbm9yZVNlbGVjdFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgKF9kID0gb25DaGFuZ2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmNhbGwob25DaGFuZ2VSZWYsIGUsIHZhbCk7XG4gICAgfSwgW2Rpc2FibGVkLCByZWFkT25seV0pO1xuICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoaWdub3JlU2VsZWN0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlnbm9yZVNlbGVjdFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyclBvcyA9IChfYSA9IGlucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3Rpb25FbmQ7XG4gICAgICAgIGlmICh0eXBlb2YgY3VyclBvcyA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICBpbnB1dENhcmV0UG9zaXRpb25SZWYuY3VycmVudCA9IGN1cnJQb3M7XG4gICAgfSwgW10pO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZywgX2gsIF9qLCBfaztcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSAoX2IgPSAoX2EgPSBjb250YWluZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9mZnNldFdpZHRoKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBNSU5fSU5QVVRfV0lEVEg7XG4gICAgICAgIGNvbnN0IHByZWZpeFdpZHRoID0gKF9kID0gKF9jID0gcHJlZml4UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMDtcbiAgICAgICAgY29uc3Qgc3VmZml4V2lkdGggPSAoX2YgPSAoX2UgPSBzdWZmaXhSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLm9mZnNldFdpZHRoKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiAwO1xuICAgICAgICBjb25zdCBjdXJyZW5jeVdpZHRoID0gKF9oID0gKF9nID0gY3VycmVuY3lSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nLm9mZnNldFdpZHRoKSAhPT0gbnVsbCAmJiBfaCAhPT0gdm9pZCAwID8gX2ggOiAwO1xuICAgICAgICBjb25zdCBmYWtlV2lkdGggPSAoX2sgPSAoX2ogPSBmYWtlRWxlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9qID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfai5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2sgIT09IHZvaWQgMCA/IF9rIDogMDtcbiAgICAgICAgY29uc3QgZ2FwV2lkdGggPSBwcmVmaXhXaWR0aCAmJiBzdWZmaXhXaWR0aCAmJiBjdXJyZW5jeVdpZHRoXG4gICAgICAgICAgICA/IDI0XG4gICAgICAgICAgICA6IChwcmVmaXhXaWR0aCAmJiBzdWZmaXhXaWR0aCkgfHwgKHByZWZpeFdpZHRoICYmIGN1cnJlbmN5V2lkdGgpIHx8IChzdWZmaXhXaWR0aCAmJiBjdXJyZW5jeVdpZHRoKVxuICAgICAgICAgICAgICAgID8gMTZcbiAgICAgICAgICAgICAgICA6IHByZWZpeFdpZHRoIHx8IHN1ZmZpeFdpZHRoIHx8IGN1cnJlbmN5V2lkdGhcbiAgICAgICAgICAgICAgICAgICAgPyA4XG4gICAgICAgICAgICAgICAgICAgIDogMDtcbiAgICAgICAgY29uc3QgbWF4V2lkdGggPSBjb250YWluZXJXaWR0aCAtIHByZWZpeFdpZHRoIC0gc3VmZml4V2lkdGggLSBjdXJyZW5jeVdpZHRoIC0gZ2FwV2lkdGg7XG4gICAgICAgIGNvbnN0IGlzTWF4ID0gZmFrZVdpZHRoID49IG1heFdpZHRoO1xuICAgICAgICBzZXRXaWR0aChNYXRoLm1pbihtYXhXaWR0aCwgTWF0aC5tYXgoZmFrZVdpZHRoLCBNSU5fSU5QVVRfV0lEVEgpKSk7XG4gICAgICAgIHNldElzTWF4V2lkdGgoaXNNYXgpO1xuICAgICAgICBpZiAoaXNGb2N1c1JlZi5jdXJyZW50KVxuICAgICAgICAgICAgc2Nyb2xsVG9FbmQodHJ1ZSk7XG4gICAgfSwgW192YWx1ZSwgcHJlZml4LCBzdWZmaXgsIGN1cnJlbmN5XSk7XG4gICAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBsZXQgdmFsID0gdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyA/IF92YWx1ZSA6IHZhbHVlO1xuICAgICAgICBsZXQgaGFzRGVjaW1hbFBvaW50ID0gZmFsc2U7XG4gICAgICAgIGxldCBpc1N0YW5kYWxvbmVNaW51cyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbCA9IG5vcm1hbGl6ZU51bWJlcklucHV0KHZhbCkuc3BsaXQoJywnKS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICBoYXNEZWNpbWFsUG9pbnQgPSAhIXZhbCAmJiB2YWwuZW5kc1dpdGgoJy4nKTtcbiAgICAgICAgICAgICAgICBpZiAoaGFzRGVjaW1hbFBvaW50KVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgICAgIGlmICghbmVnYXRpdmUpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC8tL2csICcnKTtcbiAgICAgICAgICAgICAgICBpc1N0YW5kYWxvbmVNaW51cyA9ICEhbmVnYXRpdmUgJiYgdmFsID09PSAnLSc7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1N0YW5kYWxvbmVNaW51cyAmJiBpc05hTigrdmFsKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsICE9PSAnYmlnaW50JylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKCFuZWdhdGl2ZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gTWF0aC5hYnModmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgemVybyA9IEJpZ0ludCgwKTtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwgPCB6ZXJvID8gLXZhbCA6IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSAmJlxuICAgICAgICAgICAgKHR5cGVvZiBtYXhGcmFjdGlvbkRpZ2l0cyA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG1heEZyYWN0aW9uRGlnaXRzID09PSAnYmlnaW50JykpIHtcbiAgICAgICAgICAgIGNvbnN0IFtpbnQsIGRlY2ltYWxdID0gKCcnICsgdmFsKS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgY29uc3QgbWF4RGVjaW1hbHMgPSBOdW1iZXIobWF4RnJhY3Rpb25EaWdpdHMpO1xuICAgICAgICAgICAgaWYgKGRlY2ltYWwgIT0gbnVsbCAmJiBkZWNpbWFsLmxlbmd0aCA+IG1heERlY2ltYWxzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkRGVjaW1hbHMgPSBkZWNpbWFsLnNsaWNlKDAsIG1heERlY2ltYWxzKTtcbiAgICAgICAgICAgICAgICB2YWwgPSBgJHtpbnR9LiR7dHJ1bmNhdGVkRGVjaW1hbHN9YDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ludGhldGljRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IGlucHV0UmVmLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IG9uQ2hhbmdlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKG9uQ2hhbmdlUmVmLCBzeW50aGV0aWNFdmVudCwgdmFsICE9PSBudWxsICYmIHZhbCAhPT0gdm9pZCAwID8gdmFsIDogJycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWwgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWwgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgICAgICB2YWwgPSBjYWxjVmFsdWVJblJhbmdlKCcnICsgdmFsLCBtaW4sIG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbCA9PT0gJycgfHwgdmFsID09IG51bGwpIHtcbiAgICAgICAgICAgIHNldFZhbHVlKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzU3RhbmRhbG9uZU1pbnVzKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyVmFsID0gJycgKyB2YWw7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoX2QgPSAoX2MgPSAoX2IgPSBzdHJWYWwubWF0Y2goL1xcLihcXGQrKSQvKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iWzFdKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJuID0gQmlnTnVtYmVyKHN0clZhbCk7XG4gICAgICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWQgPSBibi50b0ZpeGVkKGRlY2ltYWxzKTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmUgJiYgc3RyVmFsLnRyaW0oKS5zdGFydHNXaXRoKCctJykgJiYgYm4uaXNaZXJvKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnLScpID8gbm9ybWFsaXplZCA6IGAtJHtub3JtYWxpemVkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbCA9IGAke25vcm1hbGl6ZWR9JHtoYXNEZWNpbWFsUG9pbnQgPyAnLicgOiAnJ31gLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldFZhbHVlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgY2FsY0NhcmV0UG9zKHZhbCAhPT0gbnVsbCAmJiB2YWwgIT09IHZvaWQgMCA/IHZhbCA6ICcnLCBoYXNEZWNpbWFsUG9pbnQgPyAyIDogMCwgTWF0aC5tYXgoaW5wdXRDYXJldFBvc2l0aW9uUmVmLmN1cnJlbnQsIDApKTtcbiAgICAgICAgaWdub3JlU2VsZWN0UmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgIH0sIFt2YWx1ZSwgbWF4RnJhY3Rpb25EaWdpdHMsIG1pbiwgbWF4LCBuZWdhdGl2ZV0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIG9uQ2hhbmdlUmVmLmN1cnJlbnQgPSBvbkNoYW5nZTtcbiAgICAgICAgdmFsdWVSZWYuY3VycmVudCA9IHtcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgX3ZhbHVlLFxuICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUsXG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICBuZWdhdGl2ZSxcbiAgICAgICAgICAgIG1heEZyYWN0aW9uRGlnaXRzXG4gICAgICAgIH07XG4gICAgfSwgW192YWx1ZSwgdmFsdWUsIGZvcm1hdHRlZFZhbHVlLCBtaW4sIG1heCwgbmVnYXRpdmUsIG1heEZyYWN0aW9uRGlnaXRzLCBvbkNoYW5nZV0pO1xuICAgIHJldHVybiBfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3Nlcygnd3JhcHBlcicsIGpvaW5DbHMod3JhcHBlckNscywgY2xhc3NlcyhzaXplKSwgaW52YWxpZCAmJiBjbGFzc2VzKCdpbnZhbGlkJyksIHN1Y2Nlc3MgJiYgY2xhc3Nlcygnc3VjY2VzcycpLCBkaXNhYmxlZCAmJiBjbGFzc2VzKCdkaXNhYmxlZCcpLCByZWFkT25seSAmJiBjbGFzc2VzKCdyZWFkb25seScpLCBfdmFsdWUgJiYgY2xhc3NlcygnZmlsbGVkJykpKSwgY2hpbGRyZW46IFtsYWJlbFxuICAgICAgICAgICAgICAgID8gbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICA/IF9qc3goU2tlbGV0b24sIHsgd2lkdGg6ICc3MnB4JywgaGVpZ2h0OiAnMThweCcsIGNsYXNzTmFtZTogY2xhc3NlcygnbGFiZWwtbG9hZGluZycpIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX2pzeChcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2xhYmVsJywgam9pbkNscyhyZXF1aXJlZCAmJiBjbGFzc2VzKCdsYWJlbC1yZXF1aXJlZCcpLCBsYWJlbENscykpLCBjaGlsZHJlbjogbGFiZWwgfSlcbiAgICAgICAgICAgICAgICA6IG51bGwsIF9qc3hzKFwiZGl2XCIsIHsgcmVmOiBjb250YWluZXJSZWYsIGNsYXNzTmFtZTogY2xhc3Nlcyh2b2lkIDAsIGpvaW5DbHMoY2xhc3NOYW1lLCBpc0ZvY3VzICYmIGNsYXNzZXMoJ2ZvY3VzJykpKSwgb25DbGljazogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBpbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTWF4V2lkdGgpXG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxUb0VuZCgpO1xuICAgICAgICAgICAgICAgIH0sIGNoaWxkcmVuOiBbcHJlZml4ICYmIF9qc3goXCJzcGFuXCIsIHsgcmVmOiBwcmVmaXhSZWYsIGNsYXNzTmFtZTogY2xhc3NlcygncHJlZml4JywgcHJlZml4RWxlQ2xzKSwgY2hpbGRyZW46IHByZWZpeCB9KSwgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnZWxlbWVudCcsICghaXNGb2N1cyAmJiBpc01heFdpZHRoKSA/IGNsYXNzZXMoJ2VsZW1lbnQtbWF4JykgOiAnJyksIGNoaWxkcmVuOiBfanN4KFwiaW5wdXRcIiwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyByZWY6IGlucHV0UmVmLCB2YWx1ZTogZm9ybWF0dGVkVmFsdWUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgcmVhZE9ubHk6IHJlYWRPbmx5LCBkaXNhYmxlZDogZGlzYWJsZWQsIHN0eWxlOiB7ICctLWlucHV0LXdpZHRoJzogYCR7X3dpZHRofXB4YCB9LCBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLCBvblNlbGVjdDogaGFuZGxlU2VsZWN0LCBvbkZvY3VzOiBlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm9jdXModHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25Gb2N1cyhlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkJsdXI6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGb2N1cyhmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmx1cihlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0pKSB9KSwgY3VycmVuY3kgJiYgX2pzeChcInNwYW5cIiwgeyByZWY6IGN1cnJlbmN5UmVmLCBjbGFzc05hbWU6IGNsYXNzZXMoJ2N1cnJlbmN5JyksIGNoaWxkcmVuOiBjdXJyZW5jeSB9KSwgbG9hZGluZyA/IF9qc3goU3Bpbm5lciwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3N1ZmZpeC1sb2FkaW5nJyksIHN0cm9rZVdpZHRoOiAnNCcgfSkgOiBzdWZmaXggPyBfanN4KFwic3BhblwiLCB7IHJlZjogc3VmZml4UmVmLCBjbGFzc05hbWU6IGNsYXNzZXMoJ3N1ZmZpeCcsIHN1ZmZpeEVsZUNscyksIGNoaWxkcmVuOiBzdWZmaXggfSkgOiBudWxsLCBfanN4KFwic3BhblwiLCB7IHJlZjogZmFrZUVsZVJlZiwgY2xhc3NOYW1lOiBjbGFzc2VzKCdmYWtlJyksIG9uQ2xpY2s6IGUgPT4gZS5zdG9wUHJvcGFnYXRpb24oKSwgY2hpbGRyZW46IGZvcm1hdHRlZFZhbHVlIH0pXSB9KSwgKG1lc3NhZ2UgfHwgZm9vdG5vdGUpICYmIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdleHRyYScpLCBjaGlsZHJlbjogW21lc3NhZ2UgJiYgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnbWVzc2FnZScsIG1lc3NhZ2VDbHMpLCBjaGlsZHJlbjogbWVzc2FnZSB9KSwgZm9vdG5vdGUgJiYgX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnZm9vdG5vdGUnLCBmb290bm90ZUNscyksIGNoaWxkcmVuOiBmb290bm90ZSB9KV0gfSldIH0pO1xufTtcbmV4cG9ydCBkZWZhdWx0IG1lbW8oSW5wdXRBbW91bnQpOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
366
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvSW5wdXRBbW91bnQvSW5wdXRBbW91bnQuanMiLCJjb21wb25lbnRzL3NyYy9jb21wb25lbnRzL0lucHV0QW1vdW50L0lucHV0QW1vdW50LnRzeCJdLCJuYW1lcyI6WyJfanN4UnVudGltZSIsInJlcXVpcmUiLCJfcmVhY3QiLCJfc2tlbGV0b24iLCJfU3Bpbm5lciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTGF0ZXN0IiwiX3VzZUV2ZW50Q2FsbGJhY2siLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX2hlbHBlciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiSW5wdXRBbW91bnQiLCJleHBvcnRzIiwicHJvcHMiLCJfYSIsIl9iIiwidHlwZSIsIkRFRkFVTFRfVFlQRSIsInNpemUiLCJERUZBVUxUX1NJWkUiLCJmb290bm90ZSIsInVuZGVmaW5lZCIsImZvb3Rub3RlQ2xzIiwicmF3QmFzZVByb3BzIiwiYXNzaWduIiwiYmFzZVByb3BzIiwidmFsdWUiLCJtYXhGcmFjdGlvbkRpZ2l0cyIsIl9iYXNlUHJvcHMkcGxhY2Vob2xkZSIsInBsYWNlaG9sZGVyIiwiREVGQVVMVF9QTEFDRUhPTERFUiIsIm1pbiIsIm1heCIsImNsYXNzTmFtZSIsIndyYXBwZXJDbHMiLCJsYWJlbENscyIsIl9iYXNlUHJvcHMkcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwiREVGQVVMVF9QUkVGSVhfQ0xTIiwibWVzc2FnZUNscyIsInByZWZpeEVsZUNscyIsInN1ZmZpeEVsZUNscyIsImludmFsaWQiLCJuZWdhdGl2ZSIsInJlcXVpcmVkIiwibG9hZGluZyIsInN1Y2Nlc3MiLCJkaXNhYmxlZCIsInJlYWRPbmx5IiwibGFiZWwiLCJwcmVmaXgiLCJzdWZmaXgiLCJjdXJyZW5jeSIsIm1lc3NhZ2UiLCJvbkNoYW5nZSIsIm9uQmx1ciIsIm9uRm9jdXMiLCJyZXN0IiwiY2xzIiwiY2xhc3NuYW1lcyIsImNvbmNhdCIsImlucHV0UmVmIiwidXNlUmVmIiwiZmFrZUVsZVJlZiIsInByZWZpeFJlZiIsInN1ZmZpeFJlZiIsImN1cnJlbmN5UmVmIiwiY29udGFpbmVyUmVmIiwiY2FyZXRQb3NSZWYiLCJpZ25vcmVTZWxlY3RSZWYiLCJvbkNoYW5nZVJlZiIsInVzZUxhdGVzdCIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsImlubmVyVmFsdWUiLCJzZXRJbm5lclZhbHVlIiwiX3VzZVN0YXRlMyIsIk1JTl9JTlBVVF9XSURUSCIsIl91c2VTdGF0ZTQiLCJpbnB1dFdpZHRoIiwic2V0SW5wdXRXaWR0aCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNNYXhXaWR0aCIsInNldElzTWF4V2lkdGgiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImlzRm9jdXMiLCJzZXRJc0ZvY3VzIiwiaXNGb2N1c1JlZiIsImlzVW5jb250cm9sbGVkIiwiZm9ybWF0dGVkVmFsdWUiLCJ1c2VNZW1vIiwiZm9ybWF0VGhvdXNhbmRzIiwic3RhdGVSZWYiLCJzY3JvbGxUb0VuZCIsInVzZUV2ZW50Q2FsbGJhY2siLCJzdGlja3kiLCJhcmd1bWVudHMiLCJpbnB1dCIsImN1cnJlbnQiLCJzZXRTZWxlY3Rpb25SYW5nZSIsImxlbiIsInNjcm9sbExlZnQiLCJzY3JvbGxXaWR0aCIsImZvY3VzIiwiY2FsY0NhcmV0UG9zIiwidmFsIiwib2Zmc2V0IiwiY3VyclBvcyIsIl9zdGF0ZVJlZiRjdXJyZW50IiwicHJldiIsImZvcm1hdHRlZE5ld1ZhbCIsIm9yaWdpbk9mZnNldCIsInBvc2l0aW9uIiwic2VsZWN0aW9uRW5kIiwic3RyaXBDb21tYXMiLCJzbGljZSIsIk1hdGgiLCJwb3NWYWwiLCJzcGxpdCIsInJlZHVjZSIsImFjYyIsImNoYXIiLCJpbmQiLCJDSEFSX0NPTU1BIiwicHVzaCIsImpvaW4iLCJjb21taXRWYWx1ZSIsImhhc0RlY2ltYWxQb2ludCIsIkRFQ0lNQUxfUE9JTlRfT0ZGU0VUIiwiaGFuZGxlQ2hhbmdlIiwiX3N0YXRlUmVmJGN1cnJlbnQyIiwicGFyc2VkIiwicGFyc2VSYXdJbnB1dCIsInRhcmdldCIsImlzU3RhbmRhbG9uZU1pbnVzIiwiaXNOdW1lcmljVHlwZSIsIl90cnVuY2F0ZUZyYWN0aW9uRGlnaSIsInRydW5jYXRlRnJhY3Rpb25EaWdpdHMiLCJOdW1iZXIiLCJpbnQiLCJ0cnVuY2F0ZWQiLCJvdmVyZmxvdyIsIl9mb3JtYXR0ZWRWYWx1ZSRzcGxpdCIsIkNIQVJfRE9UIiwiX2Zvcm1hdHRlZFZhbHVlJHNwbGl0MiIsIm9sZEludCIsImNhbGNWYWx1ZUluUmFuZ2UiLCJDSEFSX01JTlVTIiwibm9ybWFsaXplVmFsdWUiLCJoYW5kbGVTZWxlY3QiLCJoYW5kbGVGb2N1cyIsImhhbmRsZUJsdXIiLCJoYW5kbGVDb250YWluZXJDbGljayIsIkhUTUxJbnB1dEVsZW1lbnQiLCJ1c2VMYXlvdXRFZmZlY3QiLCJfYyIsIl9kIiwiX2UiLCJfZiIsIl9nIiwiX2giLCJfaiIsIl9rIiwiY29udGFpbmVyV2lkdGgiLCJvZmZzZXRXaWR0aCIsInByZWZpeFdpZHRoIiwic3VmZml4V2lkdGgiLCJjdXJyZW5jeVdpZHRoIiwiZmFrZVdpZHRoIiwiZ2FwV2lkdGgiLCJjYWxjR2FwV2lkdGgiLCJtYXhXaWR0aCIsInN0cmlwTWludXMiLCJhYnNWYWx1ZSIsIl90cnVuY2F0ZUZyYWN0aW9uRGlnaTIiLCJ3cmFwcGVyQ2xhc3NOYW1lIiwiam9pbkNscyIsInJlbmRlckxhYmVsIiwiX2pzeCIsIlNrZWxldG9uIiwid2lkdGgiLCJTS0VMRVRPTl9MQUJFTF9XSURUSCIsImhlaWdodCIsIlNLRUxFVE9OX0xBQkVMX0hFSUdIVCIsImNoaWxkcmVuIiwicmVuZGVyU3VmZml4IiwiU3Bpbm5lciIsInN0cm9rZVdpZHRoIiwiU1BJTk5FUl9TVFJPS0VfV0lEVEgiLCJyZWYiLCJfanN4cyIsIm9uQ2xpY2siLCJzdHlsZSIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJDU1NfVkFSX0lOUFVUX1dJRFRIIiwib25TZWxlY3QiLCJzdG9wUHJvcGFnYXRpb24iLCJfZGVmYXVsdCIsIm1lbW8iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFXQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUNYQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFELHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBTSxpQkFBQSxHQUFBRixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU8sV0FBQSxHQUFBQyx1QkFBQSxDQUFBUixPQUFBO0FBQ0EsSUFBQVMsT0FBQSxHQUFBVCxPQUFBO0FBd0JrQixTQUFBVSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQUgsd0JBQUFHLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxD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bnB1dEFtb3VudC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBtZW1vLCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlUmVmLCB1c2VMYXlvdXRFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJ3ByaW1lcmVhY3Qvc2tlbGV0b24nO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSAnLi4vU3Bpbm5lcic7XG5pbXBvcnQgdXNlTGF0ZXN0IGZyb20gJy4uL3VzZUxhdGVzdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NuYW1lcywgam9pbkNscyB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHsgTUlOX0lOUFVUX1dJRFRILCBERUNJTUFMX1BPSU5UX09GRlNFVCwgU0tFTEVUT05fTEFCRUxfV0lEVEgsIFNLRUxFVE9OX0xBQkVMX0hFSUdIVCwgU1BJTk5FUl9TVFJPS0VfV0lEVEgsIENTU19WQVJfSU5QVVRfV0lEVEgsIERFRkFVTFRfVFlQRSwgREVGQVVMVF9TSVpFLCBERUZBVUxUX1BMQUNFSE9MREVSLCBERUZBVUxUX1BSRUZJWF9DTFMsIENIQVJfTUlOVVMsIENIQVJfQ09NTUEsIENIQVJfRE9ULCBpc051bWVyaWNUeXBlLCBzdHJpcENvbW1hcywgc3RyaXBNaW51cywgZm9ybWF0VGhvdXNhbmRzLCBjYWxjVmFsdWVJblJhbmdlLCBub3JtYWxpemVWYWx1ZSwgdHJ1bmNhdGVGcmFjdGlvbkRpZ2l0cywgY2FsY0dhcFdpZHRoLCBwYXJzZVJhd0lucHV0LCBhYnNWYWx1ZSwgfSBmcm9tICcuL2hlbHBlcic7XG5leHBvcnQgY29uc3QgSW5wdXRBbW91bnQgPSBwcm9wcyA9PiB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICBjb25zdCB0eXBlID0gKF9hID0gcHJvcHMudHlwZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogREVGQVVMVF9UWVBFO1xuICAgIGNvbnN0IHNpemUgPSB0eXBlID09PSAnbm9ybWFsJ1xuICAgICAgICA/IChfYiA9IHByb3BzLnNpemUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IERFRkFVTFRfU0laRVxuICAgICAgICA6IERFRkFVTFRfU0laRTtcbiAgICBjb25zdCBmb290bm90ZSA9IHR5cGUgPT09ICdub3JtYWwnID8gdW5kZWZpbmVkIDogcHJvcHMuZm9vdG5vdGU7XG4gICAgY29uc3QgZm9vdG5vdGVDbHMgPSB0eXBlID09PSAnbm9ybWFsJyA/IHVuZGVmaW5lZCA6IHByb3BzLmZvb3Rub3RlQ2xzO1xuICAgIGNvbnN0IHJhd0Jhc2VQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BzKTtcbiAgICBkZWxldGUgcmF3QmFzZVByb3BzLnR5cGU7XG4gICAgZGVsZXRlIHJhd0Jhc2VQcm9wcy5zaXplO1xuICAgIGRlbGV0ZSByYXdCYXNlUHJvcHMuZm9vdG5vdGU7XG4gICAgZGVsZXRlIHJhd0Jhc2VQcm9wcy5mb290bm90ZUNscztcbiAgICBjb25zdCBiYXNlUHJvcHMgPSByYXdCYXNlUHJvcHM7XG4gICAgY29uc3QgeyB2YWx1ZSwgbWF4RnJhY3Rpb25EaWdpdHMsIHBsYWNlaG9sZGVyID0gREVGQVVMVF9QTEFDRUhPTERFUiwgbWluLCBtYXgsIGNsYXNzTmFtZSwgd3JhcHBlckNscywgbGFiZWxDbHMsIHByZWZpeENscyA9IERFRkFVTFRfUFJFRklYX0NMUywgbWVzc2FnZUNscywgcHJlZml4RWxlQ2xzLCBzdWZmaXhFbGVDbHMsIGludmFsaWQsIG5lZ2F0aXZlLCByZXF1aXJlZCwgbG9hZGluZywgc3VjY2VzcywgZGlzYWJsZWQsIHJlYWRPbmx5LCBsYWJlbCwgcHJlZml4LCBzdWZmaXgsIGN1cnJlbmN5LCBtZXNzYWdlLCBvbkNoYW5nZSwgb25CbHVyLCBvbkZvY3VzIH0gPSBiYXNlUHJvcHMsIHJlc3QgPSBfX3Jlc3QoYmFzZVByb3BzLCBbXCJ2YWx1ZVwiLCBcIm1heEZyYWN0aW9uRGlnaXRzXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJtaW5cIiwgXCJtYXhcIiwgXCJjbGFzc05hbWVcIiwgXCJ3cmFwcGVyQ2xzXCIsIFwibGFiZWxDbHNcIiwgXCJwcmVmaXhDbHNcIiwgXCJtZXNzYWdlQ2xzXCIsIFwicHJlZml4RWxlQ2xzXCIsIFwic3VmZml4RWxlQ2xzXCIsIFwiaW52YWxpZFwiLCBcIm5lZ2F0aXZlXCIsIFwicmVxdWlyZWRcIiwgXCJsb2FkaW5nXCIsIFwic3VjY2Vzc1wiLCBcImRpc2FibGVkXCIsIFwicmVhZE9ubHlcIiwgXCJsYWJlbFwiLCBcInByZWZpeFwiLCBcInN1ZmZpeFwiLCBcImN1cnJlbmN5XCIsIFwibWVzc2FnZVwiLCBcIm9uQ2hhbmdlXCIsIFwib25CbHVyXCIsIFwib25Gb2N1c1wiXSk7XG4gICAgY29uc3QgY2xzID0gY2xhc3NuYW1lcyhgJHtwcmVmaXhDbHN9LSR7dHlwZX1gKTtcbiAgICAvLyDilIDilIAgUmVmcyDilIDilIBcbiAgICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBmYWtlRWxlUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHByZWZpeFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBzdWZmaXhSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY3VycmVuY3lSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGNhcmV0UG9zUmVmID0gdXNlUmVmKDApO1xuICAgIGNvbnN0IGlnbm9yZVNlbGVjdFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgb25DaGFuZ2VSZWYgPSB1c2VMYXRlc3Qob25DaGFuZ2UpO1xuICAgIC8vIOKUgOKUgCBTdGF0ZSDilIDilIBcbiAgICBjb25zdCBbaW5uZXJWYWx1ZSwgc2V0SW5uZXJWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbaW5wdXRXaWR0aCwgc2V0SW5wdXRXaWR0aF0gPSB1c2VTdGF0ZShNSU5fSU5QVVRfV0lEVEgpO1xuICAgIGNvbnN0IFtpc01heFdpZHRoLCBzZXRJc01heFdpZHRoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaXNGb2N1cywgc2V0SXNGb2N1c10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgaXNGb2N1c1JlZiA9IHVzZUxhdGVzdChpc0ZvY3VzKTtcbiAgICBjb25zdCBpc1VuY29udHJvbGxlZCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCc7XG4gICAgY29uc3QgZm9ybWF0dGVkVmFsdWUgPSB1c2VNZW1vKCgpID0+IGZvcm1hdFRob3VzYW5kcyhpbm5lclZhbHVlICE9PSBudWxsICYmIGlubmVyVmFsdWUgIT09IHZvaWQgMCA/IGlubmVyVmFsdWUgOiAnJywgbmVnYXRpdmUpLCBbaW5uZXJWYWx1ZSwgbmVnYXRpdmVdKTtcbiAgICBjb25zdCBzdGF0ZVJlZiA9IHVzZUxhdGVzdCh7XG4gICAgICAgIGlubmVyVmFsdWUsIGZvcm1hdHRlZFZhbHVlLFxuICAgICAgICBtaW4sIG1heCwgbmVnYXRpdmUsIG1heEZyYWN0aW9uRGlnaXRzLFxuICAgIH0pO1xuICAgIC8vIOKUgOKUgCBIZWxwZXJzIOKUgOKUgFxuICAgIGNvbnN0IHNjcm9sbFRvRW5kID0gdXNlRXZlbnRDYWxsYmFjaygoc3RpY2t5ID0gZmFsc2UpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICghaW5wdXQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmIChzdGlja3kpIHtcbiAgICAgICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKGNhcmV0UG9zUmVmLmN1cnJlbnQsIGNhcmV0UG9zUmVmLmN1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbGVuID0gKF9hID0gaW5wdXQudmFsdWUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sZW5ndGg7XG4gICAgICAgICAgICBpbnB1dC5zZXRTZWxlY3Rpb25SYW5nZShsZW4sIGxlbik7XG4gICAgICAgICAgICBpbnB1dC5zY3JvbGxMZWZ0ID0gaW5wdXQuc2Nyb2xsV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcbiAgICB9KTtcbiAgICBjb25zdCBjYWxjQ2FyZXRQb3MgPSB1c2VFdmVudENhbGxiYWNrKCh2YWwsIG9mZnNldCA9IDAsIGN1cnJQb3MpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dFJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIWlucHV0KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGlubmVyVmFsdWU6IHByZXYsIG5lZ2F0aXZlLCBmb3JtYXR0ZWRWYWx1ZSB9ID0gc3RhdGVSZWYuY3VycmVudDtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkTmV3VmFsID0gZm9ybWF0VGhvdXNhbmRzKHZhbCwgbmVnYXRpdmUpO1xuICAgICAgICBjb25zdCBvcmlnaW5PZmZzZXQgPSB2YWwubGVuZ3RoIC0gKChfYSA9IHByZXYgPT09IG51bGwgfHwgcHJldiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJldi5sZW5ndGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApO1xuICAgICAgICBsZXQgcG9zaXRpb24gPSAoX2IgPSBjdXJyUG9zICE9PSBudWxsICYmIGN1cnJQb3MgIT09IHZvaWQgMCA/IGN1cnJQb3MgOiBpbnB1dC5zZWxlY3Rpb25FbmQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDA7XG4gICAgICAgIC8vIE1hcCBmb3JtYXR0ZWQgcG9zaXRpb24gYmFjayB0byByYXcgcG9zaXRpb25cbiAgICAgICAgcG9zaXRpb24gPSBzdHJpcENvbW1hcyhmb3JtYXR0ZWRWYWx1ZS5zbGljZSgwLCBNYXRoLm1heChwb3NpdGlvbiwgMCkpKS5sZW5ndGg7XG4gICAgICAgIC8vIE1hcCByYXcgcG9zaXRpb24gZm9yd2FyZCB0byBmb3JtYXR0ZWQgcG9zaXRpb25cbiAgICAgICAgY29uc3QgcG9zVmFsID0gdmFsLnNsaWNlKDAsIHBvc2l0aW9uICsgb3JpZ2luT2Zmc2V0KTtcbiAgICAgICAgZm9ybWF0dGVkTmV3VmFsLnNwbGl0KCcnKS5yZWR1Y2UoKGFjYywgY2hhciwgaW5kKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hhciA9PT0gQ0hBUl9DT01NQSlcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgYWNjLnB1c2goY2hhcik7XG4gICAgICAgICAgICBpZiAoYWNjLmpvaW4oJycpID09PSBwb3NWYWwpXG4gICAgICAgICAgICAgICAgcG9zaXRpb24gPSBpbmQgKyAxO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICBjYXJldFBvc1JlZi5jdXJyZW50ID0gcG9zaXRpb24gKyBvZmZzZXQ7XG4gICAgfSk7XG4gICAgY29uc3QgY29tbWl0VmFsdWUgPSB1c2VFdmVudENhbGxiYWNrKCh2YWwsIGhhc0RlY2ltYWxQb2ludCwgZSkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChpc1VuY29udHJvbGxlZCkge1xuICAgICAgICAgICAgc2V0SW5uZXJWYWx1ZSh2YWwgPT09ICcnID8gbnVsbCA6IHZhbCk7XG4gICAgICAgICAgICBjYWxjQ2FyZXRQb3ModmFsLCBoYXNEZWNpbWFsUG9pbnQgPyBERUNJTUFMX1BPSU5UX09GRlNFVCA6IDAsIE1hdGgubWF4KGNhcmV0UG9zUmVmLmN1cnJlbnQsIDApKTtcbiAgICAgICAgICAgIGlnbm9yZVNlbGVjdFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZSlcbiAgICAgICAgICAgIChfYSA9IG9uQ2hhbmdlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKG9uQ2hhbmdlUmVmLCBlLCB2YWwpO1xuICAgIH0pO1xuICAgIC8vIOKUgOKUgCBFdmVudCBIYW5kbGVycyDilIDilIBcbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRpc2FibGVkIHx8IHJlYWRPbmx5KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGlubmVyVmFsdWUsIGZvcm1hdHRlZFZhbHVlLCBtaW4sIG1heCwgbmVnYXRpdmUsIG1heEZyYWN0aW9uRGlnaXRzIH0gPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZVJhd0lucHV0KChfYSA9IGUudGFyZ2V0LnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJywgbmVnYXRpdmUpO1xuICAgICAgICBpZiAoIXBhcnNlZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHsgdmFsIH0gPSBwYXJzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGFzRGVjaW1hbFBvaW50LCBpc1N0YW5kYWxvbmVNaW51cyB9ID0gcGFyc2VkO1xuICAgICAgICBpZiAodmFsID09PSBpbm5lclZhbHVlICYmICFoYXNEZWNpbWFsUG9pbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vIEVuZm9yY2UgZnJhY3Rpb24gZGlnaXQgbGltaXRcbiAgICAgICAgaWYgKGlzTnVtZXJpY1R5cGUobWF4RnJhY3Rpb25EaWdpdHMpKSB7XG4gICAgICAgICAgICBjb25zdCB7IGludCwgdHJ1bmNhdGVkLCBvdmVyZmxvdyB9ID0gdHJ1bmNhdGVGcmFjdGlvbkRpZ2l0cyh2YWwsIE51bWJlcihtYXhGcmFjdGlvbkRpZ2l0cykpO1xuICAgICAgICAgICAgaWYgKG92ZXJmbG93KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW29sZEludF0gPSBmb3JtYXR0ZWRWYWx1ZS5zcGxpdChDSEFSX0RPVCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0cmlwQ29tbWFzKG9sZEludCkgPT09IGludClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHZhbCA9IHRydW5jYXRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDbGFtcCB0byBtaW4vbWF4IHJhbmdlXG4gICAgICAgIGlmIChpc051bWVyaWNUeXBlKG1pbikgfHwgaXNOdW1lcmljVHlwZShtYXgpKSB7XG4gICAgICAgICAgICB2YWwgPSBjYWxjVmFsdWVJblJhbmdlKHZhbCwgbWluLCBtYXgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vcm1hbGl6ZSB0aGUgZmluYWwgdmFsdWVcbiAgICAgICAgaWYgKHZhbCAhPT0gJycpIHtcbiAgICAgICAgICAgIHZhbCA9IGlzU3RhbmRhbG9uZU1pbnVzID8gQ0hBUl9NSU5VUyA6IG5vcm1hbGl6ZVZhbHVlKHZhbCwgaGFzRGVjaW1hbFBvaW50LCBuZWdhdGl2ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWl0VmFsdWUodmFsLCBoYXNEZWNpbWFsUG9pbnQsIGUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVNlbGVjdCA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChpZ25vcmVTZWxlY3RSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgaWdub3JlU2VsZWN0UmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyUG9zID0gKF9hID0gaW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNlbGVjdGlvbkVuZDtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJyUG9zID09PSAnbnVtYmVyJylcbiAgICAgICAgICAgIGNhcmV0UG9zUmVmLmN1cnJlbnQgPSBjdXJyUG9zO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBzZXRJc0ZvY3VzKHRydWUpO1xuICAgICAgICBvbkZvY3VzID09PSBudWxsIHx8IG9uRm9jdXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRm9jdXMoZSk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgc2V0SXNGb2N1cyhmYWxzZSk7XG4gICAgICAgIG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmx1cihlKTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVDb250YWluZXJDbGljayA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZS50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAoX2EgPSBpbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgaWYgKGlzTWF4V2lkdGgpXG4gICAgICAgICAgICBzY3JvbGxUb0VuZCgpO1xuICAgIH0pO1xuICAgIC8vIOKUgOKUgCBMYXlvdXQgRWZmZWN0cyDilIDilIBcbiAgICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2s7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gKF9iID0gKF9hID0gY29udGFpbmVyUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogTUlOX0lOUFVUX1dJRFRIO1xuICAgICAgICBjb25zdCBwcmVmaXhXaWR0aCA9IChfZCA9IChfYyA9IHByZWZpeFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Mub2Zmc2V0V2lkdGgpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDA7XG4gICAgICAgIGNvbnN0IHN1ZmZpeFdpZHRoID0gKF9mID0gKF9lID0gc3VmZml4UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogMDtcbiAgICAgICAgY29uc3QgY3VycmVuY3lXaWR0aCA9IChfaCA9IChfZyA9IGN1cnJlbmN5UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5vZmZzZXRXaWR0aCkgIT09IG51bGwgJiYgX2ggIT09IHZvaWQgMCA/IF9oIDogMDtcbiAgICAgICAgY29uc3QgZmFrZVdpZHRoID0gKF9rID0gKF9qID0gZmFrZUVsZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2oub2Zmc2V0V2lkdGgpICE9PSBudWxsICYmIF9rICE9PSB2b2lkIDAgPyBfayA6IDA7XG4gICAgICAgIGNvbnN0IGdhcFdpZHRoID0gY2FsY0dhcFdpZHRoKCEhcHJlZml4V2lkdGgsICEhc3VmZml4V2lkdGgsICEhY3VycmVuY3lXaWR0aCk7XG4gICAgICAgIGNvbnN0IG1heFdpZHRoID0gY29udGFpbmVyV2lkdGggLSBwcmVmaXhXaWR0aCAtIHN1ZmZpeFdpZHRoIC0gY3VycmVuY3lXaWR0aCAtIGdhcFdpZHRoO1xuICAgICAgICBzZXRJbnB1dFdpZHRoKE1hdGgubWluKG1heFdpZHRoLCBNYXRoLm1heChmYWtlV2lkdGgsIE1JTl9JTlBVVF9XSURUSCkpKTtcbiAgICAgICAgc2V0SXNNYXhXaWR0aChmYWtlV2lkdGggPj0gbWF4V2lkdGgpO1xuICAgICAgICBpZiAoaXNGb2N1c1JlZi5jdXJyZW50KVxuICAgICAgICAgICAgc2Nyb2xsVG9FbmQodHJ1ZSk7XG4gICAgfSwgW2lubmVyVmFsdWUsIHByZWZpeCwgc3VmZml4LCBjdXJyZW5jeSwgbG9hZGluZ10pO1xuICAgIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgbGV0IHZhbCA9IGlzVW5jb250cm9sbGVkID8gaW5uZXJWYWx1ZSA6IHZhbHVlO1xuICAgICAgICBsZXQgaGFzRGVjaW1hbFBvaW50ID0gZmFsc2U7XG4gICAgICAgIGxldCBpc1N0YW5kYWxvbmVNaW51cyA9IGZhbHNlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2YWwgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdmFsID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlUmF3SW5wdXQodmFsLCBuZWdhdGl2ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB2YWwgPSBwYXJzZWQudmFsO1xuICAgICAgICAgICAgICAgIGhhc0RlY2ltYWxQb2ludCA9IHBhcnNlZC5oYXNEZWNpbWFsUG9pbnQ7XG4gICAgICAgICAgICAgICAgaXNTdGFuZGFsb25lTWludXMgPSBwYXJzZWQuaXNTdGFuZGFsb25lTWludXM7XG4gICAgICAgICAgICAgICAgaWYgKCFuZWdhdGl2ZSlcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gc3RyaXBNaW51cyh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCAhPT0gbnVsbCAmJiAhaXNOdW1lcmljVHlwZSh2YWwpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyBFbnN1cmUgbm9uLW5lZ2F0aXZlIHdoZW4gbmVnYXRpdmUgaXMgbm90IGFsbG93ZWRcbiAgICAgICAgaWYgKCFuZWdhdGl2ZSAmJiBpc051bWVyaWNUeXBlKHZhbCkpIHtcbiAgICAgICAgICAgIHZhbCA9IGFic1ZhbHVlKHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5mb3JjZSBmcmFjdGlvbiBkaWdpdCBsaW1pdFxuICAgICAgICBpZiAoKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSAmJlxuICAgICAgICAgICAgaXNOdW1lcmljVHlwZShtYXhGcmFjdGlvbkRpZ2l0cykpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgdHJ1bmNhdGVkLCBvdmVyZmxvdyB9ID0gdHJ1bmNhdGVGcmFjdGlvbkRpZ2l0cyhgJHt2YWx9YCwgTnVtYmVyKG1heEZyYWN0aW9uRGlnaXRzKSk7XG4gICAgICAgICAgICBpZiAob3ZlcmZsb3cpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbmNvbnRyb2xsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SW5uZXJWYWx1ZSh0cnVuY2F0ZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gb25DaGFuZ2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob25DaGFuZ2VSZWYsIHsgdGFyZ2V0OiBpbnB1dFJlZi5jdXJyZW50IH0sIHRydW5jYXRlZCAhPT0gbnVsbCAmJiB0cnVuY2F0ZWQgIT09IHZvaWQgMCA/IHRydW5jYXRlZCA6ICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIENsYW1wIHRvIG1pbi9tYXggcmFuZ2VcbiAgICAgICAgaWYgKGlzTnVtZXJpY1R5cGUodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsID0gY2FsY1ZhbHVlSW5SYW5nZShgJHt2YWx9YCwgbWluLCBtYXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWwgPT09ICcnIHx8IHZhbCA9PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRJbm5lclZhbHVlKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gaXNTdGFuZGFsb25lTWludXMgPyBDSEFSX01JTlVTIDogbm9ybWFsaXplVmFsdWUoYCR7dmFsfWAsIGhhc0RlY2ltYWxQb2ludCwgbmVnYXRpdmUpO1xuICAgICAgICAgICAgc2V0SW5uZXJWYWx1ZSh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGNDYXJldFBvcyh2YWwgIT09IG51bGwgJiYgdmFsICE9PSB2b2lkIDAgPyB2YWwgOiAnJywgaGFzRGVjaW1hbFBvaW50ID8gREVDSU1BTF9QT0lOVF9PRkZTRVQgOiAwLCBNYXRoLm1heChjYXJldFBvc1JlZi5jdXJyZW50LCAwKSk7XG4gICAgICAgIGlnbm9yZVNlbGVjdFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9LCBbdmFsdWUsIG1heEZyYWN0aW9uRGlnaXRzLCBtaW4sIG1heCwgbmVnYXRpdmVdKTtcbiAgICAvLyDilIDilIAgUmVuZGVyIOKUgOKUgFxuICAgIGNvbnN0IHdyYXBwZXJDbGFzc05hbWUgPSBjbHMoJ3dyYXBwZXInLCBqb2luQ2xzKHdyYXBwZXJDbHMsIGNscyhzaXplKSwgaW52YWxpZCAmJiBjbHMoJ2ludmFsaWQnKSwgc3VjY2VzcyAmJiBjbHMoJ3N1Y2Nlc3MnKSwgZGlzYWJsZWQgJiYgY2xzKCdkaXNhYmxlZCcpLCByZWFkT25seSAmJiBjbHMoJ3JlYWRvbmx5JyksIGlubmVyVmFsdWUgJiYgY2xzKCdmaWxsZWQnKSkpO1xuICAgIGNvbnN0IHJlbmRlckxhYmVsID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWxhYmVsKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChsb2FkaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gX2pzeChTa2VsZXRvbiwgeyB3aWR0aDogU0tFTEVUT05fTEFCRUxfV0lEVEgsIGhlaWdodDogU0tFTEVUT05fTEFCRUxfSEVJR0hULCBjbGFzc05hbWU6IGNscygnbGFiZWwtbG9hZGluZycpIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xzKCdsYWJlbCcsIGpvaW5DbHMocmVxdWlyZWQgJiYgY2xzKCdsYWJlbC1yZXF1aXJlZCcpLCBsYWJlbENscykpLCBjaGlsZHJlbjogbGFiZWwgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJTdWZmaXggPSAoKSA9PiB7XG4gICAgICAgIGlmIChsb2FkaW5nKVxuICAgICAgICAgICAgcmV0dXJuIF9qc3goU3Bpbm5lciwgeyBjbGFzc05hbWU6IGNscygnc3VmZml4LWxvYWRpbmcnKSwgc3Ryb2tlV2lkdGg6IFNQSU5ORVJfU1RST0tFX1dJRFRIIH0pO1xuICAgICAgICBpZiAoc3VmZml4KVxuICAgICAgICAgICAgcmV0dXJuIF9qc3goXCJzcGFuXCIsIHsgcmVmOiBzdWZmaXhSZWYsIGNsYXNzTmFtZTogY2xzKCdzdWZmaXgnLCBzdWZmaXhFbGVDbHMpLCBjaGlsZHJlbjogc3VmZml4IH0pO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICAgIHJldHVybiAoX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHdyYXBwZXJDbGFzc05hbWUsIGNoaWxkcmVuOiBbcmVuZGVyTGFiZWwoKSwgX2pzeHMoXCJkaXZcIiwgeyByZWY6IGNvbnRhaW5lclJlZiwgY2xhc3NOYW1lOiBjbHModm9pZCAwLCBqb2luQ2xzKGNsYXNzTmFtZSwgaXNGb2N1cyAmJiBjbHMoJ2ZvY3VzJykpKSwgb25DbGljazogaGFuZGxlQ29udGFpbmVyQ2xpY2ssIGNoaWxkcmVuOiBbcHJlZml4ICYmIChfanN4KFwic3BhblwiLCB7IHJlZjogcHJlZml4UmVmLCBjbGFzc05hbWU6IGNscygncHJlZml4JywgcHJlZml4RWxlQ2xzKSwgY2hpbGRyZW46IHByZWZpeCB9KSksIF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNscygnZWxlbWVudCcsICghaXNGb2N1cyAmJiBpc01heFdpZHRoKSA/IGNscygnZWxlbWVudC1tYXgnKSA6ICcnKSwgY2hpbGRyZW46IF9qc3goXCJpbnB1dFwiLCBPYmplY3QuYXNzaWduKHt9LCByZXN0LCB7IHJlZjogaW5wdXRSZWYsIHZhbHVlOiBmb3JtYXR0ZWRWYWx1ZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCByZWFkT25seTogcmVhZE9ubHksIGRpc2FibGVkOiBkaXNhYmxlZCwgc3R5bGU6IHsgW0NTU19WQVJfSU5QVVRfV0lEVEhdOiBgJHtpbnB1dFdpZHRofXB4YCB9LCBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLCBvblNlbGVjdDogaGFuZGxlU2VsZWN0LCBvbkZvY3VzOiBoYW5kbGVGb2N1cywgb25CbHVyOiBoYW5kbGVCbHVyIH0pKSB9KSwgY3VycmVuY3kgJiYgKF9qc3goXCJzcGFuXCIsIHsgcmVmOiBjdXJyZW5jeVJlZiwgY2xhc3NOYW1lOiBjbHMoJ2N1cnJlbmN5JyksIGNoaWxkcmVuOiBjdXJyZW5jeSB9KSksIHJlbmRlclN1ZmZpeCgpLCBfanN4KFwic3BhblwiLCB7IHJlZjogZmFrZUVsZVJlZiwgY2xhc3NOYW1lOiBjbHMoJ2Zha2UnKSwgb25DbGljazogZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpLCBjaGlsZHJlbjogZm9ybWF0dGVkVmFsdWUgfSldIH0pLCAobWVzc2FnZSB8fCBmb290bm90ZSkgJiYgKF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbHMoJ2V4dHJhJyksIGNoaWxkcmVuOiBbbWVzc2FnZSAmJiBfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbHMoJ21lc3NhZ2UnLCBtZXNzYWdlQ2xzKSwgY2hpbGRyZW46IG1lc3NhZ2UgfSksIGZvb3Rub3RlICYmIF9qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNscygnZm9vdG5vdGUnLCBmb290bm90ZUNscyksIGNoaWxkcmVuOiBmb290bm90ZSB9KV0gfSkpXSB9KSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgbWVtbyhJbnB1dEFtb3VudCk7IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9