@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
@@ -9,14 +9,16 @@ var __rest = this && this.__rest || function (s, e) {
9
9
  };
10
10
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
11
11
  import { memo, useRef, useMemo, useState, useEffect, useCallback, useImperativeHandle } from 'react';
12
- import isEqual from 'lodash.isequal';
13
12
  import debounce from 'lodash.debounce';
14
13
  import { Dropdown } from 'primereact/dropdown';
15
14
  import { MultiSelect } from 'primereact/multiselect';
16
15
  import { Skeleton } from 'primereact/skeleton';
17
16
  import { default as classnames, joinCls } from '../../utils/classnames';
17
+ import useControlledState from '../useControlledState';
18
+ import useEventCallback from '../useEventCallback';
18
19
  import { Icons } from '../Icons';
19
20
  import { Spinner } from '../Spinner';
21
+ import { DEFAULT_PREFIX_CLS, DEFAULT_SIZE, DEFAULT_PLACEHOLDER, DEFAULT_CLASSNAME, FILTER_PLACEHOLDER, DEBOUNCE_SCROLL_DELAY, SPINNER_STROKE_WIDTH, SKELETON_LABEL_WIDTH, SKELETON_LABEL_HEIGHT, UNSELECTABLE_ON, DATA_ATTR_SELECTOR, COLOR_PRIMARY_BLACK, COLOR_PRIMARY_BLUE, COLOR_NEGATIVE, COLOR_WHITE, ICON_SIZE_XS, ICON_SIZE_SM, ICON_SIZE_MD } from './constants';
20
22
  var SelectWrapper = /*#__PURE__*/memo(function (props) {
21
23
  var label = props.label,
22
24
  message = props.message,
@@ -34,8 +36,8 @@ var SelectWrapper = /*#__PURE__*/memo(function (props) {
34
36
  return _jsxs("div", {
35
37
  className: classes('wrapper', wrapperCls),
36
38
  children: [label ? loading ? _jsx(Skeleton, {
37
- width: '72px',
38
- height: '18px',
39
+ width: SKELETON_LABEL_WIDTH,
40
+ height: SKELETON_LABEL_HEIGHT,
39
41
  className: classes('label-loading')
40
42
  }) : _jsx("span", {
41
43
  className: classes('label', joinCls(required && classes('label-required'), labelCls)),
@@ -53,20 +55,20 @@ var CustomDropdown = function CustomDropdown(props) {
53
55
  message = props.message,
54
56
  required = props.required,
55
57
  _props$prefixCls = props.prefixCls,
56
- prefixCls = _props$prefixCls === void 0 ? 'select' : _props$prefixCls,
58
+ prefixCls = _props$prefixCls === void 0 ? DEFAULT_PREFIX_CLS : _props$prefixCls,
57
59
  wrapperCls = props.wrapperCls,
58
60
  labelCls = props.labelCls,
59
61
  messageCls = props.messageCls,
60
62
  _props$size = props.size,
61
- size = _props$size === void 0 ? 'large' : _props$size,
63
+ size = _props$size === void 0 ? DEFAULT_SIZE : _props$size,
62
64
  success = props.success,
63
65
  invalid = props.invalid,
64
66
  disabled = props.disabled,
65
67
  editable = props.editable,
66
68
  _props$placeholder = props.placeholder,
67
- placeholder = _props$placeholder === void 0 ? '' : _props$placeholder,
69
+ placeholder = _props$placeholder === void 0 ? DEFAULT_PLACEHOLDER : _props$placeholder,
68
70
  _props$className = props.className,
69
- className = _props$className === void 0 ? '' : _props$className,
71
+ className = _props$className === void 0 ? DEFAULT_CLASSNAME : _props$className,
70
72
  selectedTemplate = props.selectedTemplate,
71
73
  tailTemplate = props.tailTemplate,
72
74
  _onClick = props.onClick,
@@ -100,38 +102,38 @@ var CustomDropdown = function CustomDropdown(props) {
100
102
  return selectRef.current;
101
103
  }
102
104
  };
103
- }, [ref]);
105
+ }, []);
104
106
  useEffect(function () {
105
107
  dataIdRef.current = dataId;
106
108
  }, [dataId]);
109
+ var handleFocus = useEventCallback(function () {
110
+ return onFocus === null || onFocus === void 0 ? void 0 : onFocus();
111
+ });
112
+ var handleBlur = useEventCallback(function () {
113
+ return onBlur === null || onBlur === void 0 ? void 0 : onBlur();
114
+ });
107
115
  useEffect(function () {
108
116
  if (isFocus !== lastFocusRef.current) {
109
117
  lastFocusRef.current = isFocus;
110
118
  if (isFocus) {
111
- onFocus === null || onFocus === void 0 ? void 0 : onFocus();
119
+ handleFocus();
112
120
  } else {
113
- onBlur === null || onBlur === void 0 ? void 0 : onBlur();
121
+ handleBlur();
114
122
  }
115
123
  }
116
- }, [isFocus, onFocus, onBlur]);
124
+ }, [isFocus]);
117
125
  useEffect(function () {
118
- var _findCustomDropdownDataId = function findCustomDropdownDataId(target) {
119
- var _a;
120
- if (!dataIdRef.current) return false;
121
- if (((_a = target === null || target === void 0 ? void 0 : target.dataset) === null || _a === void 0 ? void 0 : _a.selectCustomDropdownId) === dataIdRef.current) return true;
122
- if (target === document.body || target === document) return false;
123
- var parent = target.parentNode || target.parentElement;
124
- if (!parent) return false;
125
- return _findCustomDropdownDataId(parent);
126
- };
127
126
  var removeFocus = function removeFocus(e) {
128
127
  if (isClickInside.current) {
129
128
  isClickInside.current = false;
130
129
  return;
131
130
  }
132
131
  setIsFocus(function (prev) {
132
+ var _a;
133
133
  if (!prev) return false;
134
- return _findCustomDropdownDataId(e.target);
134
+ if (!dataIdRef.current) return false;
135
+ var target = e.target;
136
+ return !!((_a = target === null || target === void 0 ? void 0 : target.closest) === null || _a === void 0 ? void 0 : _a.call(target, "[".concat(DATA_ATTR_SELECTOR, "=\"").concat(dataIdRef.current, "\"]")));
135
137
  });
136
138
  };
137
139
  document.addEventListener('click', removeFocus);
@@ -180,15 +182,14 @@ var CustomDropdown = function CustomDropdown(props) {
180
182
  children: placeholder
181
183
  }), editable ? null : typeof tailTemplate === 'function' ? tailTemplate(isFocus) : _jsx(Icons, {
182
184
  name: 'chevronDown',
183
- color: '#131313',
184
- size: 20,
185
+ color: COLOR_PRIMARY_BLACK,
186
+ size: ICON_SIZE_MD,
185
187
  wrapperCls: classes('custom-tail', isFocus ? classes('custom-tail-focus') : '')
186
188
  })]
187
189
  })
188
190
  });
189
191
  };
190
192
  export var Select = function Select(props) {
191
- var _a;
192
193
  var id = props.id,
193
194
  ref = props.ref,
194
195
  name = props.name,
@@ -196,13 +197,13 @@ export var Select = function Select(props) {
196
197
  message = props.message,
197
198
  required = props.required,
198
199
  _props$prefixCls2 = props.prefixCls,
199
- prefixCls = _props$prefixCls2 === void 0 ? 'select' : _props$prefixCls2,
200
+ prefixCls = _props$prefixCls2 === void 0 ? DEFAULT_PREFIX_CLS : _props$prefixCls2,
200
201
  wrapperCls = props.wrapperCls,
201
202
  labelCls = props.labelCls,
202
203
  messageCls = props.messageCls,
203
204
  value = props.value,
204
205
  _props$size2 = props.size,
205
- size = _props$size2 === void 0 ? 'large' : _props$size2,
206
+ size = _props$size2 === void 0 ? DEFAULT_SIZE : _props$size2,
206
207
  success = props.success,
207
208
  _props$refreshAfterSh = props.refreshAfterShow,
208
209
  refreshAfterShow = _props$refreshAfterSh === void 0 ? true : _props$refreshAfterSh,
@@ -210,43 +211,49 @@ export var Select = function Select(props) {
210
211
  disabled = props.disabled,
211
212
  placeholder = props.placeholder,
212
213
  _props$className2 = props.className,
213
- className = _props$className2 === void 0 ? '' : _props$className2,
214
+ className = _props$className2 === void 0 ? DEFAULT_CLASSNAME : _props$className2,
214
215
  multiple = props.multiple,
215
216
  options = props.options,
216
217
  panelClassName = props.panelClassName,
217
218
  defaultValue = props.defaultValue,
218
219
  _itemTemplate = props.itemTemplate,
219
- _onChange = props.onChange,
220
- _onHide = props.onHide,
221
- _onShow = props.onShow,
220
+ onChange = props.onChange,
221
+ onHide = props.onHide,
222
+ onShow = props.onShow,
222
223
  unselectable = props.unselectable,
223
224
  loading = props.loading,
224
225
  rest = __rest(props, ["id", "ref", "name", "label", "message", "required", "prefixCls", "wrapperCls", "labelCls", "messageCls", "value", "size", "success", "refreshAfterShow", "invalid", "disabled", "placeholder", "className", "multiple", "options", "panelClassName", "defaultValue", "itemTemplate", "onChange", "onHide", "onShow", "unselectable", "loading"]);
225
226
  var classes = classnames(prefixCls);
226
- var _useState5 = useState((_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : null),
227
+ var _useControlledState = useControlledState(defaultValue !== null && defaultValue !== void 0 ? defaultValue : null, value),
228
+ _useControlledState2 = _slicedToArray(_useControlledState, 2),
229
+ selected = _useControlledState2[0],
230
+ setSelected = _useControlledState2[1];
231
+ var _useState5 = useState(false),
227
232
  _useState6 = _slicedToArray(_useState5, 2),
228
- selected = _useState6[0],
229
- setSelected = _useState6[1];
233
+ isOpen = _useState6[0],
234
+ setIsOpen = _useState6[1];
230
235
  var _useState7 = useState(false),
231
236
  _useState8 = _slicedToArray(_useState7, 2),
232
- isOpen = _useState8[0],
233
- setIsOpen = _useState8[1];
237
+ isHover = _useState8[0],
238
+ setIsHover = _useState8[1];
234
239
  var _useState9 = useState(false),
235
240
  _useState10 = _slicedToArray(_useState9, 2),
236
- isHover = _useState10[0],
237
- setIsHover = _useState10[1];
238
- var _useState11 = useState(false),
239
- _useState12 = _slicedToArray(_useState11, 2),
240
- isScrolling = _useState12[0],
241
- setIsScrolling = _useState12[1];
241
+ isScrolling = _useState10[0],
242
+ setIsScrolling = _useState10[1];
242
243
  var selectRef = useRef(null);
243
- var _ref = useRef(null);
244
244
  var selectCls = useMemo(function () {
245
245
  return classes(void 0, joinCls(classes(size), isOpen && classes('show'), success && classes('success'), invalid && classes('invalid'), disabled && classes('disabled'), loading && classes('loading'), (Array.isArray(selected) ? !!selected.length : !!selected) && classes('filled'), className));
246
246
  }, [size, isOpen, success, selected, invalid, disabled, loading, className]);
247
- var debouncedHandleScroll = debounce(function () {
248
- return setIsScrolling(false);
249
- }, 500);
247
+ var debouncedHandleScroll = useMemo(function () {
248
+ return debounce(function () {
249
+ return setIsScrolling(false);
250
+ }, DEBOUNCE_SCROLL_DELAY);
251
+ }, []);
252
+ useEffect(function () {
253
+ return function () {
254
+ return debouncedHandleScroll.cancel();
255
+ };
256
+ }, [debouncedHandleScroll]);
250
257
  var refreshDOM = useCallback(function () {
251
258
  var _a, _b;
252
259
  var ele = (_b = (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.getOverlay) === null || _b === void 0 ? void 0 : _b.call(_a);
@@ -259,14 +266,31 @@ export var Select = function Select(props) {
259
266
  }, 0);
260
267
  }
261
268
  }, []);
269
+ var filterIconProps = useMemo(function () {
270
+ var _a = rest,
271
+ filterIcon = _a.filterIcon,
272
+ filter = _a.filter,
273
+ others = __rest(_a, ["filterIcon", "filter"]);
274
+ var extraProps = filter ? {
275
+ filterIcon: filterIcon !== null && filterIcon !== void 0 ? filterIcon : _jsx(Icons, {
276
+ name: 'search',
277
+ size: ICON_SIZE_MD,
278
+ color: COLOR_PRIMARY_BLACK,
279
+ wrapperCls: classes('filter-icon')
280
+ })
281
+ } : null;
282
+ return Object.assign(Object.assign(Object.assign({}, others), {
283
+ filter: filter
284
+ }), extraProps || {});
285
+ }, [rest.filter, rest.filterIcon]);
262
286
  var SelectComponent = useCallback(function (props) {
263
287
  return multiple ? _jsx(MultiSelect, Object.assign({
264
288
  unselectable: unselectable,
265
289
  showSelectAll: false,
266
290
  checkboxIcon: _jsx(Icons, {
267
291
  name: 'check',
268
- size: 12,
269
- color: '#FEFEFE'
292
+ size: ICON_SIZE_XS,
293
+ color: COLOR_WHITE
270
294
  }),
271
295
  removeIcon: function removeIcon(props) {
272
296
  var _props$iconProps = props.iconProps,
@@ -275,8 +299,8 @@ export var Select = function Select(props) {
275
299
  tabIndex = _props$iconProps.tabIndex;
276
300
  return _jsx(Icons, {
277
301
  name: 'close',
278
- size: 16,
279
- color: '#131313',
302
+ size: ICON_SIZE_SM,
303
+ color: COLOR_PRIMARY_BLACK,
280
304
  tabIndex: tabIndex,
281
305
  wrapperCls: classes('token-remove-icon'),
282
306
  onClick: onClick,
@@ -304,8 +328,8 @@ export var Select = function Select(props) {
304
328
  },
305
329
  children: [_jsx(Icons, {
306
330
  name: 'close',
307
- size: 16,
308
- color: '#AE0000',
331
+ size: ICON_SIZE_SM,
332
+ color: COLOR_NEGATIVE,
309
333
  wrapperCls: classes('panel-header-info-clear-icon')
310
334
  }), "Clear all"]
311
335
  })]
@@ -316,19 +340,14 @@ export var Select = function Select(props) {
316
340
  collapseIcon: multiple ? void 0 : function () {
317
341
  return _jsx(Icons, {
318
342
  name: 'chevronUp',
319
- color: '#131313',
320
- size: 20
343
+ color: COLOR_PRIMARY_BLACK,
344
+ size: ICON_SIZE_MD
321
345
  });
322
346
  }
323
347
  }, props));
324
348
  }, [multiple]);
325
- useEffect(function () {
326
- if (value !== undefined && !isEqual(selected, value)) {
327
- setSelected(value);
328
- }
329
- }, [value]);
330
349
  // @ts-expect-error
331
- useImperativeHandle(ref !== null && ref !== void 0 ? ref : _ref, function () {
350
+ useImperativeHandle(ref, function () {
332
351
  var _a, _b;
333
352
  return multiple ? {
334
353
  props: (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.props,
@@ -396,6 +415,28 @@ export var Select = function Select(props) {
396
415
  }
397
416
  };
398
417
  }, [multiple]);
418
+ var handleChange = useEventCallback(function (e) {
419
+ var emitChange = onChange;
420
+ setSelected(e.value);
421
+ emitChange === null || emitChange === void 0 ? void 0 : emitChange(e);
422
+ });
423
+ var handleHide = useEventCallback(function () {
424
+ setIsOpen(false);
425
+ onHide === null || onHide === void 0 ? void 0 : onHide();
426
+ });
427
+ var handleShow = useEventCallback(function () {
428
+ setIsOpen(true);
429
+ onShow === null || onShow === void 0 ? void 0 : onShow();
430
+ if (!refreshAfterShow) return;
431
+ setTimeout(function () {
432
+ return refreshDOM();
433
+ }, 0);
434
+ });
435
+ var handleScroll = useCallback(function () {
436
+ debouncedHandleScroll.cancel();
437
+ setIsScrolling(true);
438
+ debouncedHandleScroll();
439
+ }, [debouncedHandleScroll]);
399
440
  return _jsx(SelectWrapper, {
400
441
  label: label,
401
442
  message: message,
@@ -408,28 +449,12 @@ export var Select = function Select(props) {
408
449
  invalid: invalid,
409
450
  disabled: disabled,
410
451
  loading: loading,
411
- children: _jsx(SelectComponent, Object.assign({}, function () {
412
- var _a = rest,
413
- filterIcon = _a.filterIcon,
414
- filter = _a.filter,
415
- others = __rest(_a, ["filterIcon", "filter"]);
416
- var extraProps = filter ? {
417
- filterIcon: filterIcon !== null && filterIcon !== void 0 ? filterIcon : _jsx(Icons, {
418
- name: 'search',
419
- size: 20,
420
- color: '#131313',
421
- wrapperCls: classes('filter-icon')
422
- })
423
- } : null;
424
- return Object.assign(Object.assign(Object.assign({}, others), {
425
- filter: filter
426
- }), extraProps || {});
427
- }(), {
452
+ children: _jsx(SelectComponent, Object.assign({}, filterIconProps, {
428
453
  id: id,
429
454
  ref: selectRef,
430
455
  name: name,
431
456
  loading: loading,
432
- filterPlaceholder: 'Search',
457
+ filterPlaceholder: FILTER_PLACEHOLDER,
433
458
  required: required,
434
459
  disabled: disabled,
435
460
  invalid: invalid,
@@ -442,7 +467,7 @@ export var Select = function Select(props) {
442
467
  className: classes('panel-item'),
443
468
  onClick: function onClick() {
444
469
  var _a;
445
- if (!multiple && unselectable === 'on' && option.value === selected) {
470
+ if (!multiple && unselectable === UNSELECTABLE_ON && option.value === selected) {
446
471
  (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.clear();
447
472
  }
448
473
  },
@@ -451,47 +476,29 @@ export var Select = function Select(props) {
451
476
  children: _itemTemplate ? _itemTemplate(option) : option.label
452
477
  }), _jsx(Icons, {
453
478
  name: 'check',
454
- size: 16,
455
- color: '#073387'
479
+ size: ICON_SIZE_SM,
480
+ color: COLOR_PRIMARY_BLUE
456
481
  })]
457
482
  });
458
483
  },
459
484
  loadingIcon: _jsx(Spinner, {
460
485
  className: classes('loading-icon'),
461
- strokeWidth: '4'
486
+ strokeWidth: SPINNER_STROKE_WIDTH
462
487
  }),
463
488
  panelClassName: classes('panel', joinCls(panelClassName, isHover && classes('panel-hover'), isScrolling && classes('panel-scrolling'), rest.appendTo === 'self' && classes('panel-append-self'))),
464
- onChange: function onChange(e) {
465
- setSelected(e.value);
466
- // @ts-expect-error
467
- _onChange === null || _onChange === void 0 ? void 0 : _onChange(e);
468
- },
469
- onHide: function onHide() {
470
- setIsOpen(false);
471
- _onHide === null || _onHide === void 0 ? void 0 : _onHide();
472
- },
473
- onShow: function onShow() {
474
- setIsOpen(true);
475
- _onShow === null || _onShow === void 0 ? void 0 : _onShow();
476
- if (!refreshAfterShow) return;
477
- setTimeout(function () {
478
- return refreshDOM();
479
- }, 0);
480
- },
489
+ onChange: handleChange,
490
+ onHide: handleHide,
491
+ onShow: handleShow,
481
492
  dropdownIcon: function dropdownIcon() {
482
493
  return _jsx(Icons, {
483
494
  name: 'chevronDown',
484
- color: '#131313',
485
- size: 20
495
+ color: COLOR_PRIMARY_BLACK,
496
+ size: ICON_SIZE_MD
486
497
  });
487
498
  },
488
499
  pt: {
489
500
  wrapper: {
490
- onScroll: function onScroll() {
491
- debouncedHandleScroll.cancel();
492
- setIsScrolling(true);
493
- debouncedHandleScroll();
494
- }
501
+ onScroll: handleScroll
495
502
  },
496
503
  panel: {
497
504
  onMouseEnter: function onMouseEnter() {
@@ -513,4 +520,4 @@ export var Select = function Select(props) {
513
520
  };
514
521
  Select.CustomDropdown = CustomDropdown;
515
522
  export default /*#__PURE__*/memo(Select);
516
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC50c3giXSwibmFtZXMiOlsiX19yZXN0IiwicyIsImUiLCJ0IiwicCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpIiwibGVuZ3RoIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwibWVtbyIsInVzZVJlZiIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZUNhbGxiYWNrIiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsImlzRXF1YWwiLCJkZWJvdW5jZSIsIkRyb3Bkb3duIiwiTXVsdGlTZWxlY3QiLCJTa2VsZXRvbiIsImRlZmF1bHQiLCJjbGFzc25hbWVzIiwiam9pbkNscyIsIkljb25zIiwiU3Bpbm5lciIsIlNlbGVjdFdyYXBwZXIiLCJwcm9wcyIsImxhYmVsIiwibWVzc2FnZSIsInJlcXVpcmVkIiwicHJlZml4Q2xzIiwid3JhcHBlckNscyIsImxhYmVsQ2xzIiwibWVzc2FnZUNscyIsInN1Y2Nlc3MiLCJpbnZhbGlkIiwiZGlzYWJsZWQiLCJsb2FkaW5nIiwiY2hpbGRyZW4iLCJjbGFzc2VzIiwiY2xhc3NOYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJDdXN0b21Ecm9wZG93biIsInJlZiIsImRhdGFJZCIsIl9wcm9wcyRwcmVmaXhDbHMiLCJfcHJvcHMkc2l6ZSIsInNpemUiLCJlZGl0YWJsZSIsIl9wcm9wcyRwbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIiwiX3Byb3BzJGNsYXNzTmFtZSIsInNlbGVjdGVkVGVtcGxhdGUiLCJ0YWlsVGVtcGxhdGUiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uQmx1ciIsImlzQ2xpY2tJbnNpZGUiLCJkYXRhSWRSZWYiLCJsYXN0Rm9jdXNSZWYiLCJzZWxlY3RSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWx1ZSIsInNldFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc0ZvY3VzIiwic2V0SXNGb2N1cyIsInNlbGVjdENscyIsImZvY3VzIiwiYmx1ciIsImdldERPTU5vZGUiLCJjdXJyZW50IiwiZmluZEN1c3RvbURyb3Bkb3duRGF0YUlkIiwidGFyZ2V0IiwiX2EiLCJkYXRhc2V0Iiwic2VsZWN0Q3VzdG9tRHJvcGRvd25JZCIsImRvY3VtZW50IiwiYm9keSIsInBhcmVudCIsInBhcmVudE5vZGUiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlRm9jdXMiLCJwcmV2IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjb250ZW50RWRpdGFibGUiLCJhdXRvRm9jdXMiLCJvbklucHV0IiwidmFsIiwiY3VycmVudFRhcmdldCIsImlubmVyVGV4dCIsIm5hbWUiLCJjb2xvciIsIlNlbGVjdCIsImlkIiwiX3Byb3BzJHByZWZpeENsczIiLCJfcHJvcHMkc2l6ZTIiLCJfcHJvcHMkcmVmcmVzaEFmdGVyU2giLCJyZWZyZXNoQWZ0ZXJTaG93IiwiX3Byb3BzJGNsYXNzTmFtZTIiLCJtdWx0aXBsZSIsIm9wdGlvbnMiLCJwYW5lbENsYXNzTmFtZSIsImRlZmF1bHRWYWx1ZSIsIml0ZW1UZW1wbGF0ZSIsIm9uQ2hhbmdlIiwib25IaWRlIiwib25TaG93IiwidW5zZWxlY3RhYmxlIiwicmVzdCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2VsZWN0ZWQiLCJzZXRTZWxlY3RlZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwiaXNIb3ZlciIsInNldElzSG92ZXIiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwiaXNTY3JvbGxpbmciLCJzZXRJc1Njcm9sbGluZyIsIl9yZWYiLCJBcnJheSIsImlzQXJyYXkiLCJkZWJvdW5jZWRIYW5kbGVTY3JvbGwiLCJyZWZyZXNoRE9NIiwiX2IiLCJlbGUiLCJnZXRPdmVybGF5Iiwib3JpZ2luWkluZGV4Iiwic3R5bGUiLCJ6SW5kZXgiLCJ1bmRlZmluZWQiLCJjb25jYXQiLCJwYXJzZUludCIsInNldFRpbWVvdXQiLCJTZWxlY3RDb21wb25lbnQiLCJhc3NpZ24iLCJzaG93U2VsZWN0QWxsIiwiY2hlY2tib3hJY29uIiwicmVtb3ZlSWNvbiIsIl9wcm9wcyRpY29uUHJvcHMiLCJpY29uUHJvcHMiLCJvbktleURvd24iLCJ0YWJJbmRleCIsInBhbmVsSGVhZGVyVGVtcGxhdGUiLCJfYyIsIl9kIiwiX2UiLCJmaWx0ZXJFbGVtZW50Iiwic2VsZWN0ZWROdW0iLCJtZXRhRGF0YSIsInVwZGF0ZU1vZGVsIiwiY29sbGFwc2VJY29uIiwiaGlkZSIsInNob3ciLCJnZXRFbGVtZW50IiwiZ2V0SW5wdXQiLCJjbGVhciIsImdldEZvY3VzSW5wdXQiLCJnZXRWaXJ0dWFsU2Nyb2xsZXIiLCJmaWx0ZXJJY29uIiwiZmlsdGVyIiwib3RoZXJzIiwiZXh0cmFQcm9wcyIsImZpbHRlclBsYWNlaG9sZGVyIiwib3B0aW9uIiwibG9hZGluZ0ljb24iLCJzdHJva2VXaWR0aCIsImFwcGVuZFRvIiwiZHJvcGRvd25JY29uIiwicHQiLCJ3cmFwcGVyIiwib25TY3JvbGwiLCJjYW5jZWwiLCJwYW5lbCIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIm9uVG91Y2hTdGFydCIsIm9uVG91Y2hFbmQiXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJQSxNQUFNLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsTUFBTSxJQUFLLFVBQVVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQ2xELElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUlDLENBQUMsSUFBSUgsQ0FBQyxFQUFFLElBQUlJLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFj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O0VBQ0QsQ0FBQSxDQUNZO0FBRXBCLENBQUM7QUFFRDVCLE1BQU0sQ0FBQ3ZELGNBQWMsR0FBR0EsY0FBYztBQUV0Qyw0QkFBZW5DLElBQUksQ0FBQzBGLE1BQU0sQ0FBQyIsImZpbGUiOiJjb21wb25lbnRzL1NlbGVjdC9TZWxlY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgbWVtbywgdXNlUmVmLCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlSW1wZXJhdGl2ZUhhbmRsZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC5pc2VxdWFsJztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2guZGVib3VuY2UnO1xuaW1wb3J0IHsgRHJvcGRvd24gfSBmcm9tICdwcmltZXJlYWN0L2Ryb3Bkb3duJztcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAncHJpbWVyZWFjdC9tdWx0aXNlbGVjdCc7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJ3ByaW1lcmVhY3Qvc2tlbGV0b24nO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBjbGFzc25hbWVzLCBqb2luQ2xzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gJy4uL0ljb25zJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuLi9TcGlubmVyJztcbmNvbnN0IFNlbGVjdFdyYXBwZXIgPSBtZW1vKHByb3BzID0+IHtcbiAgICBjb25zdCB7IGxhYmVsLCBtZXNzYWdlLCByZXF1aXJlZCwgcHJlZml4Q2xzLCB3cmFwcGVyQ2xzLCBsYWJlbENscywgbWVzc2FnZUNscywgc3VjY2VzcywgaW52YWxpZCwgZGlzYWJsZWQsIGxvYWRpbmcsIGNoaWxkcmVuLCB9ID0gcHJvcHM7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMocHJlZml4Q2xzKTtcbiAgICByZXR1cm4gX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3dyYXBwZXInLCB3cmFwcGVyQ2xzKSwgY2hpbGRyZW46IFtsYWJlbCA/XG4gICAgICAgICAgICAgICAgbG9hZGluZ1xuICAgICAgICAgICAgICAgICAgICA/IF9qc3goU2tlbGV0b24sIHsgd2lkdGg6ICc3MnB4JywgaGVpZ2h0OiAnMThweCcsIGNsYXNzTmFtZTogY2xhc3NlcygnbGFiZWwtbG9hZGluZycpIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX2pzeChcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2xhYmVsJywgam9pbkNscyhyZXF1aXJlZCAmJiBjbGFzc2VzKCdsYWJlbC1yZXF1aXJlZCcpLCBsYWJlbENscykpLCBjaGlsZHJlbjogbGFiZWwgfSlcbiAgICAgICAgICAgICAgICA6IG51bGwsIGNoaWxkcmVuLCBtZXNzYWdlICYmIF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdtZXNzYWdlJywgam9pbkNscyhzdWNjZXNzICYmIGNsYXNzZXMoJ21lc3NhZ2Utc3VjY2VzcycpLCBpbnZhbGlkICYmIGNsYXNzZXMoJ21lc3NhZ2UtZXJyb3InKSwgbWVzc2FnZUNscykpLCBjaGlsZHJlbjogbWVzc2FnZSB9KV0gfSk7XG59KTtcbmNvbnN0IEN1c3RvbURyb3Bkb3duID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgcmVmLCBkYXRhSWQsIGxhYmVsLCBtZXNzYWdlLCByZXF1aXJlZCwgcHJlZml4Q2xzID0gJ3NlbGVjdCcsIHdyYXBwZXJDbHMsIGxhYmVsQ2xzLCBtZXNzYWdlQ2xzLCBzaXplID0gJ2xhcmdlJywgc3VjY2VzcywgaW52YWxpZCwgZGlzYWJsZWQsIGVkaXRhYmxlLCBwbGFjZWhvbGRlciA9ICcnLCBjbGFzc05hbWUgPSAnJywgc2VsZWN0ZWRUZW1wbGF0ZSwgdGFpbFRlbXBsYXRlLCBvbkNsaWNrLCBvbkZvY3VzLCBvbkJsdXIsIH0gPSBwcm9wcztcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhwcmVmaXhDbHMpO1xuICAgIGNvbnN0IGlzQ2xpY2tJbnNpZGUgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IGRhdGFJZFJlZiA9IHVzZVJlZihkYXRhSWQpO1xuICAgIGNvbnN0IGxhc3RGb2N1c1JlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgc2VsZWN0UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtpc0ZvY3VzLCBzZXRJc0ZvY3VzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBzZWxlY3RDbHMgPSB1c2VNZW1vKCgpID0+IGNsYXNzZXModm9pZCAwLCBqb2luQ2xzKGNsYXNzZXMoc2l6ZSksIGNsYXNzZXMoJ2N1c3RvbScpLCBpc0ZvY3VzICYmIGNsYXNzZXMoJ2ZvY3VzJyksIHN1Y2Nlc3MgJiYgY2xhc3Nlcygnc3VjY2VzcycpLCBpbnZhbGlkICYmIGNsYXNzZXMoJ2ludmFsaWQnKSwgZGlzYWJsZWQgJiYgY2xhc3NlcygnZGlzYWJsZWQnKSwgZWRpdGFibGUgJiYgY2xhc3NlcygnZWRpdGFibGUnKSwgY2xhc3NOYW1lKSksIFtzaXplLCBpc0ZvY3VzLCBzdWNjZXNzLCBpbnZhbGlkLCBkaXNhYmxlZCwgZWRpdGFibGUsIGNsYXNzTmFtZV0pO1xuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgICBmb2N1czogKCkgPT4gc2V0SXNGb2N1cyh0cnVlKSxcbiAgICAgICAgYmx1cjogKCkgPT4gc2V0SXNGb2N1cyhmYWxzZSksXG4gICAgICAgIGdldERPTU5vZGU6ICgpID0+IHNlbGVjdFJlZi5jdXJyZW50XG4gICAgfSksIFtyZWZdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBkYXRhSWRSZWYuY3VycmVudCA9IGRhdGFJZDtcbiAgICB9LCBbZGF0YUlkXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGlzRm9jdXMgIT09IGxhc3RGb2N1c1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBsYXN0Rm9jdXNSZWYuY3VycmVudCA9IGlzRm9jdXM7XG4gICAgICAgICAgICBpZiAoaXNGb2N1cykge1xuICAgICAgICAgICAgICAgIG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25Gb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb25CbHVyID09PSBudWxsIHx8IG9uQmx1ciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CbHVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbaXNGb2N1cywgb25Gb2N1cywgb25CbHVyXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZmluZEN1c3RvbURyb3Bkb3duRGF0YUlkID0gKHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKCFkYXRhSWRSZWYuY3VycmVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoKChfYSA9IHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRhcmdldC5kYXRhc2V0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2VsZWN0Q3VzdG9tRHJvcGRvd25JZCkgPT09IGRhdGFJZFJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKHRhcmdldCA9PT0gZG9jdW1lbnQuYm9keSB8fCB0YXJnZXQgPT09IGRvY3VtZW50KVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IHRhcmdldC5wYXJlbnROb2RlIHx8IHRhcmdldC5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgaWYgKCFwYXJlbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGZpbmRDdXN0b21Ecm9wZG93bkRhdGFJZChwYXJlbnQpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZW1vdmVGb2N1cyA9IChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNDbGlja0luc2lkZS5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgaXNDbGlja0luc2lkZS5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0SXNGb2N1cyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXYpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmluZEN1c3RvbURyb3Bkb3duRGF0YUlkKGUudGFyZ2V0KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUZvY3VzKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlRm9jdXMpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gX2pzeChTZWxlY3RXcmFwcGVyLCB7IGxhYmVsOiBsYWJlbCwgbWVzc2FnZTogbWVzc2FnZSwgcmVxdWlyZWQ6IHJlcXVpcmVkLCBwcmVmaXhDbHM6IHByZWZpeENscywgd3JhcHBlckNsczogd3JhcHBlckNscywgbGFiZWxDbHM6IGxhYmVsQ2xzLCBtZXNzYWdlQ2xzOiBtZXNzYWdlQ2xzLCBzdWNjZXNzOiBzdWNjZXNzLCBpbnZhbGlkOiBpbnZhbGlkLCBkaXNhYmxlZDogZGlzYWJsZWQsIGNoaWxkcmVuOiBfanN4cyhcImRpdlwiLCB7IHJlZjogc2VsZWN0UmVmLCBjbGFzc05hbWU6IHNlbGVjdENscywgY29udGVudEVkaXRhYmxlOiAhZGlzYWJsZWQgPyBlZGl0YWJsZSA6IGZhbHNlLCBhdXRvRm9jdXM6IGVkaXRhYmxlLCBcImRhdGEtcGxhY2Vob2xkZXJcIjogcGxhY2Vob2xkZXIsIFwiZGF0YS12YWx1ZVwiOiB2YWx1ZSwgb25DbGljazogKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoIWVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQ2xpY2tJbnNpZGUuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNldElzRm9jdXMocHJldiA9PiAhcHJldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DbGljayhlKTtcbiAgICAgICAgICAgIH0sIG9uSW5wdXQ6IGUgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB2YWwgPSBlLmN1cnJlbnRUYXJnZXQuaW5uZXJUZXh0O1xuICAgICAgICAgICAgICAgIGlmICh2YWwgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQuaW5uZXJUZXh0ID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldFZhbHVlKHZhbCk7XG4gICAgICAgICAgICB9LCBjaGlsZHJlbjogWyFkaXNhYmxlZCAmJiBlZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2Ygc2VsZWN0ZWRUZW1wbGF0ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxlY3RlZFRlbXBsYXRlKGlzRm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdjdXN0b20tcGxhY2Vob2xkZXInKSwgY2hpbGRyZW46IHBsYWNlaG9sZGVyIH0pLCBlZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgdGFpbFRlbXBsYXRlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRhaWxUZW1wbGF0ZShpc0ZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfanN4KEljb25zLCB7IG5hbWU6ICdjaGV2cm9uRG93bicsIGNvbG9yOiAnIzEzMTMxMycsIHNpemU6IDIwLCB3cmFwcGVyQ2xzOiBjbGFzc2VzKCdjdXN0b20tdGFpbCcsIGlzRm9jdXMgPyBjbGFzc2VzKCdjdXN0b20tdGFpbC1mb2N1cycpIDogJycpIH0pXSB9KSB9KTtcbn07XG5leHBvcnQgY29uc3QgU2VsZWN0ID0gcHJvcHMgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCB7IGlkLCByZWYsIG5hbWUsIGxhYmVsLCBtZXNzYWdlLCByZXF1aXJlZCwgcHJlZml4Q2xzID0gJ3NlbGVjdCcsIHdyYXBwZXJDbHMsIGxhYmVsQ2xzLCBtZXNzYWdlQ2xzLCB2YWx1ZSwgc2l6ZSA9ICdsYXJnZScsIHN1Y2Nlc3MsIHJlZnJlc2hBZnRlclNob3cgPSB0cnVlLCBpbnZhbGlkLCBkaXNhYmxlZCwgcGxhY2Vob2xkZXIsIGNsYXNzTmFtZSA9ICcnLCBtdWx0aXBsZSwgb3B0aW9ucywgcGFuZWxDbGFzc05hbWUsIGRlZmF1bHRWYWx1ZSwgaXRlbVRlbXBsYXRlLCBvbkNoYW5nZSwgb25IaWRlLCBvblNob3csIHVuc2VsZWN0YWJsZSwgbG9hZGluZyB9ID0gcHJvcHMsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImlkXCIsIFwicmVmXCIsIFwibmFtZVwiLCBcImxhYmVsXCIsIFwibWVzc2FnZVwiLCBcInJlcXVpcmVkXCIsIFwicHJlZml4Q2xzXCIsIFwid3JhcHBlckNsc1wiLCBcImxhYmVsQ2xzXCIsIFwibWVzc2FnZUNsc1wiLCBcInZhbHVlXCIsIFwic2l6ZVwiLCBcInN1Y2Nlc3NcIiwgXCJyZWZyZXNoQWZ0ZXJTaG93XCIsIFwiaW52YWxpZFwiLCBcImRpc2FibGVkXCIsIFwicGxhY2Vob2xkZXJcIiwgXCJjbGFzc05hbWVcIiwgXCJtdWx0aXBsZVwiLCBcIm9wdGlvbnNcIiwgXCJwYW5lbENsYXNzTmFtZVwiLCBcImRlZmF1bHRWYWx1ZVwiLCBcIml0ZW1UZW1wbGF0ZVwiLCBcIm9uQ2hhbmdlXCIsIFwib25IaWRlXCIsIFwib25TaG93XCIsIFwidW5zZWxlY3RhYmxlXCIsIFwibG9hZGluZ1wiXSk7XG4gICAgY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMocHJlZml4Q2xzKTtcbiAgICBjb25zdCBbc2VsZWN0ZWQsIHNldFNlbGVjdGVkXSA9IHVzZVN0YXRlKChfYSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbCk7XG4gICAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaXNIb3Zlciwgc2V0SXNIb3Zlcl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2lzU2Nyb2xsaW5nLCBzZXRJc1Njcm9sbGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3Qgc2VsZWN0UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IF9yZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3Qgc2VsZWN0Q2xzID0gdXNlTWVtbygoKSA9PiBjbGFzc2VzKHZvaWQgMCwgam9pbkNscyhjbGFzc2VzKHNpemUpLCBpc09wZW4gJiYgY2xhc3Nlcygnc2hvdycpLCBzdWNjZXNzICYmIGNsYXNzZXMoJ3N1Y2Nlc3MnKSwgaW52YWxpZCAmJiBjbGFzc2VzKCdpbnZhbGlkJyksIGRpc2FibGVkICYmIGNsYXNzZXMoJ2Rpc2FibGVkJyksIGxvYWRpbmcgJiYgY2xhc3NlcygnbG9hZGluZycpLCAoQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgPyAhIXNlbGVjdGVkLmxlbmd0aCA6ICEhc2VsZWN0ZWQpICYmIGNsYXNzZXMoJ2ZpbGxlZCcpLCBjbGFzc05hbWUpKSwgW3NpemUsIGlzT3Blbiwgc3VjY2Vzcywgc2VsZWN0ZWQsIGludmFsaWQsIGRpc2FibGVkLCBsb2FkaW5nLCBjbGFzc05hbWVdKTtcbiAgICBjb25zdCBkZWJvdW5jZWRIYW5kbGVTY3JvbGwgPSBkZWJvdW5jZSgoKSA9PiBzZXRJc1Njcm9sbGluZyhmYWxzZSksIDUwMCk7XG4gICAgY29uc3QgcmVmcmVzaERPTSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgZWxlID0gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRPdmVybGF5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgICAgIGlmICghZWxlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBvcmlnaW5aSW5kZXggPSBlbGUuc3R5bGUuekluZGV4O1xuICAgICAgICBpZiAob3JpZ2luWkluZGV4ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZWxlLnN0eWxlLnpJbmRleCA9IGAke3BhcnNlSW50KG9yaWdpblpJbmRleCkgKyAxfWA7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBlbGUuc3R5bGUuekluZGV4ID0gb3JpZ2luWkluZGV4O1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgY29uc3QgU2VsZWN0Q29tcG9uZW50ID0gdXNlQ2FsbGJhY2soKHByb3BzKSA9PiBtdWx0aXBsZVxuICAgICAgICA/IF9qc3goTXVsdGlTZWxlY3QsIE9iamVjdC5hc3NpZ24oeyB1bnNlbGVjdGFibGU6IHVuc2VsZWN0YWJsZSwgc2hvd1NlbGVjdEFsbDogZmFsc2UsIGNoZWNrYm94SWNvbjogX2pzeChJY29ucywgeyBuYW1lOiAnY2hlY2snLCBzaXplOiAxMiwgY29sb3I6ICcjRkVGRUZFJyB9KSwgcmVtb3ZlSWNvbjogcHJvcHMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgb25DbGljaywgb25LZXlEb3duLCB0YWJJbmRleCB9ID0gcHJvcHMuaWNvblByb3BzO1xuICAgICAgICAgICAgICAgIHJldHVybiBfanN4KEljb25zLCB7IG5hbWU6ICdjbG9zZScsIHNpemU6IDE2LCBjb2xvcjogJyMxMzEzMTMnLCB0YWJJbmRleDogdGFiSW5kZXgsIHdyYXBwZXJDbHM6IGNsYXNzZXMoJ3Rva2VuLXJlbW92ZS1pY29uJyksIG9uQ2xpY2s6IG9uQ2xpY2ssIG9uS2V5RG93bjogb25LZXlEb3duIH0pO1xuICAgICAgICAgICAgfSwgcGFuZWxIZWFkZXJUZW1wbGF0ZTogb3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGZpbHRlckVsZW1lbnQsIHByb3BzIH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZE51bSA9IChfZCA9IChfYyA9IChfYiA9IChfYSA9IHByb3BzID09PSBudWxsIHx8IHByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9wcy5tZXRhRGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnByb3BzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudmFsdWUpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sZW5ndGgpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdwYW5lbC1oZWFkZXInKSwgY2hpbGRyZW46IFtfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtaGVhZGVyLWluZm8nKSwgY2hpbGRyZW46IFtfanN4cyhcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3BhbmVsLWhlYWRlci1pbmZvLWNvdW50JyksIGNoaWxkcmVuOiBbc2VsZWN0ZWROdW0sIFwiIHNlbGVjdGVkXCJdIH0pLCBfanN4cyhcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3BhbmVsLWhlYWRlci1pbmZvLWNsZWFyJyksIG9uQ2xpY2s6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy51cGRhdGVNb2RlbChlLCBbXSwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY2hpbGRyZW46IFtfanN4KEljb25zLCB7IG5hbWU6ICdjbG9zZScsIHNpemU6IDE2LCBjb2xvcjogJyNBRTAwMDAnLCB3cmFwcGVyQ2xzOiBjbGFzc2VzKCdwYW5lbC1oZWFkZXItaW5mby1jbGVhci1pY29uJykgfSksIFwiQ2xlYXIgYWxsXCJdIH0pXSB9KSwgKF9lID0gZmlsdGVyRWxlbWVudCA9PT0gbnVsbCB8fCBmaWx0ZXJFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaWx0ZXJFbGVtZW50LnByb3BzKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuY2hpbGRyZW5dIH0pO1xuICAgICAgICAgICAgfSB9LCBwcm9wcykpXG4gICAgICAgIDogX2pzeChEcm9wZG93biwgT2JqZWN0LmFzc2lnbih7IGNvbGxhcHNlSWNvbjogbXVsdGlwbGUgPyB2b2lkIDAgOiAoKSA9PiBfanN4KEljb25zLCB7IG5hbWU6ICdjaGV2cm9uVXAnLCBjb2xvcjogJyMxMzEzMTMnLCBzaXplOiAyMCB9KSB9LCBwcm9wcykpLCBbbXVsdGlwbGVdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhaXNFcXVhbChzZWxlY3RlZCwgdmFsdWUpKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9LCBbdmFsdWVdKTtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYgIT09IG51bGwgJiYgcmVmICE9PSB2b2lkIDAgPyByZWYgOiBfcmVmLCAoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAobXVsdGlwbGUgPyB7XG4gICAgICAgICAgICBwcm9wczogKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wcm9wcyxcbiAgICAgICAgICAgIGZvY3VzOiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBoaWRlOiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhpZGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIHNob3c6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2hvdykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0RWxlbWVudDogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBnZXRJbnB1dDogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRJbnB1dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0T3ZlcmxheTogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRPdmVybGF5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgICBwcm9wczogKF9iID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wcm9wcyxcbiAgICAgICAgICAgIGNsZWFyOiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNsZWFyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBmb2N1czogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgaGlkZTogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oaWRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBzaG93OiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNob3cpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGdldEVsZW1lbnQ6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0RWxlbWVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0SW5wdXQ6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0SW5wdXQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGdldE92ZXJsYXk6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0T3ZlcmxheSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0Rm9jdXNJbnB1dDogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRGb2N1c0lucHV0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBnZXRWaXJ0dWFsU2Nyb2xsZXI6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0VmlydHVhbFNjcm9sbGVyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgIH0pO1xuICAgIH0sIFttdWx0aXBsZV0pO1xuICAgIHJldHVybiAoX2pzeChTZWxlY3RXcmFwcGVyLCB7IGxhYmVsOiBsYWJlbCwgbWVzc2FnZTogbWVzc2FnZSwgcmVxdWlyZWQ6IHJlcXVpcmVkLCBwcmVmaXhDbHM6IHByZWZpeENscywgd3JhcHBlckNsczogd3JhcHBlckNscywgbGFiZWxDbHM6IGxhYmVsQ2xzLCBtZXNzYWdlQ2xzOiBtZXNzYWdlQ2xzLCBzdWNjZXNzOiBzdWNjZXNzLCBpbnZhbGlkOiBpbnZhbGlkLCBkaXNhYmxlZDogZGlzYWJsZWQsIGxvYWRpbmc6IGxvYWRpbmcsIGNoaWxkcmVuOiBfanN4KFNlbGVjdENvbXBvbmVudCwgT2JqZWN0LmFzc2lnbih7fSwgKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IF9hID0gcmVzdCwgeyBmaWx0ZXJJY29uLCBmaWx0ZXIgfSA9IF9hLCBvdGhlcnMgPSBfX3Jlc3QoX2EsIFtcImZpbHRlckljb25cIiwgXCJmaWx0ZXJcIl0pO1xuICAgICAgICAgICAgY29uc3QgZXh0cmFQcm9wcyA9IGZpbHRlciA/IHsgZmlsdGVySWNvbjogZmlsdGVySWNvbiAhPT0gbnVsbCAmJiBmaWx0ZXJJY29uICE9PSB2b2lkIDAgPyBmaWx0ZXJJY29uIDogX2pzeChJY29ucywgeyBuYW1lOiAnc2VhcmNoJywgc2l6ZTogMjAsIGNvbG9yOiAnIzEzMTMxMycsIHdyYXBwZXJDbHM6IGNsYXNzZXMoJ2ZpbHRlci1pY29uJykgfSkgfSA6IG51bGw7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG90aGVycyksIHsgZmlsdGVyIH0pLCAoZXh0cmFQcm9wcyB8fCB7fSkpO1xuICAgICAgICB9KSgpLCB7IGlkOiBpZCwgcmVmOiBzZWxlY3RSZWYsIG5hbWU6IG5hbWUsIGxvYWRpbmc6IGxvYWRpbmcsIGZpbHRlclBsYWNlaG9sZGVyOiAnU2VhcmNoJywgcmVxdWlyZWQ6IHJlcXVpcmVkLCBkaXNhYmxlZDogZGlzYWJsZWQsIGludmFsaWQ6IGludmFsaWQsIG9wdGlvbnM6IG9wdGlvbnMsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgdmFsdWU6IHNlbGVjdGVkID09IG51bGwgPyB1bmRlZmluZWQgOiBzZWxlY3RlZCwgY2xhc3NOYW1lOiBzZWxlY3RDbHMsIGl0ZW1UZW1wbGF0ZTogKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtaXRlbScpLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW11bHRpcGxlICYmIHVuc2VsZWN0YWJsZSA9PT0gJ29uJyAmJiBvcHRpb24udmFsdWUgPT09IHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogW19qc3goXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3BhbmVsLWl0ZW0tbGFiZWwnKSwgY2hpbGRyZW46IGl0ZW1UZW1wbGF0ZSA/IGl0ZW1UZW1wbGF0ZShvcHRpb24pIDogb3B0aW9uLmxhYmVsIH0pLCBfanN4KEljb25zLCB7IG5hbWU6ICdjaGVjaycsIHNpemU6IDE2LCBjb2xvcjogJyMwNzMzODcnIH0pXSB9KTtcbiAgICAgICAgICAgIH0sIGxvYWRpbmdJY29uOiBfanN4KFNwaW5uZXIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdsb2FkaW5nLWljb24nKSwgc3Ryb2tlV2lkdGg6ICc0JyB9KSwgcGFuZWxDbGFzc05hbWU6IGNsYXNzZXMoJ3BhbmVsJywgam9pbkNscyhwYW5lbENsYXNzTmFtZSwgaXNIb3ZlciAmJiBjbGFzc2VzKCdwYW5lbC1ob3ZlcicpLCBpc1Njcm9sbGluZyAmJiBjbGFzc2VzKCdwYW5lbC1zY3JvbGxpbmcnKSwgcmVzdC5hcHBlbmRUbyA9PT0gJ3NlbGYnICYmIGNsYXNzZXMoJ3BhbmVsLWFwcGVuZC1zZWxmJykpKSwgb25DaGFuZ2U6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWQoZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShlKTtcbiAgICAgICAgICAgIH0sIG9uSGlkZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICAgICAgICAgICAgb25IaWRlID09PSBudWxsIHx8IG9uSGlkZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25IaWRlKCk7XG4gICAgICAgICAgICB9LCBvblNob3c6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRJc09wZW4odHJ1ZSk7XG4gICAgICAgICAgICAgICAgb25TaG93ID09PSBudWxsIHx8IG9uU2hvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25TaG93KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWZyZXNoQWZ0ZXJTaG93KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiByZWZyZXNoRE9NKCksIDApO1xuICAgICAgICAgICAgfSwgZHJvcGRvd25JY29uOiAoKSA9PiBfanN4KEljb25zLCB7IG5hbWU6ICdjaGV2cm9uRG93bicsIGNvbG9yOiAnIzEzMTMxMycsIHNpemU6IDIwIH0pLCBwdDoge1xuICAgICAgICAgICAgICAgIHdyYXBwZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgb25TY3JvbGw6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYm91bmNlZEhhbmRsZVNjcm9sbC5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldElzU2Nyb2xsaW5nKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VkSGFuZGxlU2Nyb2xsKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhbmVsOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcjogKCkgPT4gc2V0SXNIb3Zlcih0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlOiAoKSA9PiBzZXRJc0hvdmVyKGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgb25Ub3VjaFN0YXJ0OiAoKSA9PiBzZXRJc0hvdmVyKHRydWUpLFxuICAgICAgICAgICAgICAgICAgICBvblRvdWNoRW5kOiAoKSA9PiBzZXRJc0hvdmVyKGZhbHNlKSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IH0pKSB9KSk7XG59O1xuU2VsZWN0LkN1c3RvbURyb3Bkb3duID0gQ3VzdG9tRHJvcGRvd247XG5leHBvcnQgZGVmYXVsdCBtZW1vKFNlbGVjdCk7IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
523
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC50c3giXSwibmFtZXMiOlsiX19yZXN0IiwicyIsImUiLCJ0IiwicCIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJpIiwibGVuZ3RoIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwibWVtbyIsInVzZVJlZiIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZUVmZmVjdCIsInVzZUNhbGxiYWNrIiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsImRlYm91bmNlIiwiRHJvcGRvd24iLCJNdWx0aVNlbGVjdCIsIlNrZWxldG9uIiwiZGVmYXVsdCIsImNsYXNzbmFtZXMiLCJqb2luQ2xzIiwidXNlQ29udHJvbGxlZFN0YXRlIiwidXNlRXZlbnRDYWxsYmFjayIsIkljb25zIiwiU3Bpbm5lciIsIkRFRkFVTFRfUFJFRklYX0NMUyIsIkRFRkFVTFRfU0laRSIsIkRFRkFVTFRfUExBQ0VIT0xERVIiLCJERUZBVUxUX0NMQVNTTkFNRSIsIkZJTFRFUl9QTEFDRUhPTERFUiIsIkRFQk9VTkNFX1NDUk9MTF9ERUxBWSIsIlNQSU5ORVJfU1RST0tFX1dJRFRIIiwiU0tFTEVUT05fTEFCRUxfV0lEVEgiLCJTS0VMRVRPTl9MQUJFTF9IRUlHSFQiLCJVTlNFTEVDVEFCTEVfT04iLCJEQVRBX0FUVFJfU0VMRUNUT1IiLCJDT0xPUl9QUklNQVJZX0JMQUNLIiwiQ09MT1JfUFJJTUFSWV9CTFVFIiwiQ09MT1JfTkVHQVRJVkUiLCJDT0xPUl9XSElURSIsIklDT05fU0laRV9YUyIsIklDT05fU0laRV9TTSIsIklDT05fU0laRV9NRCIsIlNlbGVjdFdyYXBwZXIiLCJwcm9wcyIsImxhYmVsIiwibWVzc2FnZSIsInJlcXVpcmVkIiwicHJlZml4Q2xzIiwid3JhcHBlckNscyIsImxhYmVsQ2xzIiwibWVzc2FnZUNscyIsInN1Y2Nlc3MiLCJpbnZhbGlkIiwiZGlzYWJsZWQiLCJsb2FkaW5nIiwiY2hpbGRyZW4iLCJjbGFzc2VzIiwiY2xhc3NOYW1lIiwid2lkdGgiLCJoZWlnaHQiLCJDdXN0b21Ecm9wZG93biIsInJlZiIsImRhdGFJZCIsIl9wcm9wcyRwcmVmaXhDbHMiLCJfcHJvcHMkc2l6ZSIsInNpemUiLCJlZGl0YWJsZSIsIl9wcm9wcyRwbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIiwiX3Byb3BzJGNsYXNzTmFtZSIsInNlbGVjdGVkVGVtcGxhdGUiLCJ0YWlsVGVtcGxhdGUiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uQmx1ciIsImlzQ2xpY2tJbnNpZGUiLCJkYXRhSWRSZWYiLCJsYXN0Rm9jdXNSZWYiLCJzZWxlY3RSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWx1ZSIsInNldFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc0ZvY3VzIiwic2V0SXNGb2N1cyIsInNlbGVjdENscyIsImZvY3VzIiwiYmx1ciIsImdldERPTU5vZGUiLCJjdXJyZW50IiwiaGFuZGxlRm9jdXMiLCJoYW5kbGVCbHVyIiwicmVtb3ZlRm9jdXMiLCJwcmV2IiwiX2EiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiY29uY2F0IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNvbnRlbnRFZGl0YWJsZSIsImF1dG9Gb2N1cyIsIm9uSW5wdXQiLCJ2YWwiLCJjdXJyZW50VGFyZ2V0IiwiaW5uZXJUZXh0IiwibmFtZSIsImNvbG9yIiwiU2VsZWN0IiwiaWQiLCJfcHJvcHMkcHJlZml4Q2xzMiIsIl9wcm9wcyRzaXplMiIsIl9wcm9wcyRyZWZyZXNoQWZ0ZXJTaCIsInJlZnJlc2hBZnRlclNob3ciLCJfcHJvcHMkY2xhc3NOYW1lMiIsIm11bHRpcGxlIiwib3B0aW9ucyIsInBhbmVsQ2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiaXRlbVRlbXBsYXRlIiwib25DaGFuZ2UiLCJvbkhpZGUiLCJvblNob3ciLCJ1bnNlbGVjdGFibGUiLCJyZXN0IiwiX3VzZUNvbnRyb2xsZWRTdGF0ZSIsIl91c2VDb250cm9sbGVkU3RhdGUyIiwic2VsZWN0ZWQiLCJzZXRTZWxlY3RlZCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpc0hvdmVyIiwic2V0SXNIb3ZlciIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUxMCIsImlzU2Nyb2xsaW5nIiwic2V0SXNTY3JvbGxpbmciLCJBcnJheSIsImlzQXJyYXkiLCJkZWJvdW5jZWRIYW5kbGVTY3JvbGwiLCJjYW5jZWwiLCJyZWZyZXNoRE9NIiwiX2IiLCJlbGUiLCJnZXRPdmVybGF5Iiwib3JpZ2luWkluZGV4Iiwic3R5bGUiLCJ6SW5kZXgiLCJ1bmRlZmluZWQiLCJwYXJzZUludCIsInNldFRpbWVvdXQiLCJmaWx0ZXJJY29uUHJvcHMiLCJmaWx0ZXJJY29uIiwiZmlsdGVyIiwib3RoZXJzIiwiZXh0cmFQcm9wcyIsImFzc2lnbiIsIlNlbGVjdENvbXBvbmVudCIsInNob3dTZWxlY3RBbGwiLCJjaGVja2JveEljb24iLCJyZW1vdmVJY29uIiwiX3Byb3BzJGljb25Qcm9wcyIsImljb25Qcm9wcyIsIm9uS2V5RG93biIsInRhYkluZGV4IiwicGFuZWxIZWFkZXJUZW1wbGF0ZSIsIl9jIiwiX2QiLCJfZSIsImZpbHRlckVsZW1lbnQiLCJzZWxlY3RlZE51bSIsIm1ldGFEYXRhIiwidXBkYXRlTW9kZWwiLCJjb2xsYXBzZUljb24iLCJoaWRlIiwic2hvdyIsImdldEVsZW1lbnQiLCJnZXRJbnB1dCIsImNsZWFyIiwiZ2V0Rm9jdXNJbnB1dCIsImdldFZpcnR1YWxTY3JvbGxlciIsImhhbmRsZUNoYW5nZSIsImVtaXRDaGFuZ2UiLCJoYW5kbGVIaWRlIiwiaGFuZGxlU2hvdyIsImhhbmRsZVNjcm9sbCIsImZpbHRlclBsYWNlaG9sZGVyIiwib3B0aW9uIiwibG9hZGluZ0ljb24iLCJzdHJva2VXaWR0aCIsImFwcGVuZFRvIiwiZHJvcGRvd25JY29uIiwicHQiLCJ3cmFwcGVyIiwib25TY3JvbGwiLCJwYW5lbCIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIm9uVG91Y2hTdGFydCIsIm9uVG91Y2hFbmQiXSwibWFwcGluZ3MiOiI7QUFBQSxJQUFJQSxNQUFNLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsTUFBTSxJQUFLLFVBQVVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQ2xELElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUlDLENBQUMsSUFBSUgsQ0FBQyxFQUFFLElBQUlJLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUMsSUFBSUYsQ0FBQyxDQUFDTyxPQUFPLENBQUNMLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0VELENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLEdBQUdILENBQUMsQ0FBQ0csQ0FBQyxDQUFDO0VBQ2YsSUFBSUgsQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPSSxNQUFNLENBQUNLLHFCQUFxQixLQUFLLFVBQVUsRUFDL0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFUCxDQUFDLEdBQUdDLE1BQU0sQ0FBQ0sscUJBQXFCLENBQUNULENBQUMsQ0FBQyxFQUFFVSxDQUFDLEdBQUdQLENBQUMsQ0FBQ1EsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtJQUNwRSxJQUFJVCxDQUFDLENBQUNPLE9BQU8sQ0FBQ0wsQ0FBQyxDQUFDTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSU4sTUFBTSxDQUFDQyxTQUFTLENBQUNPLG9CQUFvQixDQUFDTCxJQUFJLENBQUNQLENBQUMsRUFBRUcsQ0FBQyxDQUFDTyxDQUFD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dGVudCI6WyJ2YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsgbWVtbywgdXNlUmVmLCB1c2VNZW1vLCB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjaywgdXNlSW1wZXJhdGl2ZUhhbmRsZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2guZGVib3VuY2UnO1xuaW1wb3J0IHsgRHJvcGRvd24gfSBmcm9tICdwcmltZXJlYWN0L2Ryb3Bkb3duJztcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAncHJpbWVyZWFjdC9tdWx0aXNlbGVjdCc7XG5pbXBvcnQgeyBTa2VsZXRvbiB9IGZyb20gJ3ByaW1lcmVhY3Qvc2tlbGV0b24nO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBjbGFzc25hbWVzLCBqb2luQ2xzIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhc3NuYW1lcyc7XG5pbXBvcnQgdXNlQ29udHJvbGxlZFN0YXRlIGZyb20gJy4uL3VzZUNvbnRyb2xsZWRTdGF0ZSc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB7IEljb25zIH0gZnJvbSAnLi4vSWNvbnMnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4uL1NwaW5uZXInO1xuaW1wb3J0IHsgREVGQVVMVF9QUkVGSVhfQ0xTLCBERUZBVUxUX1NJWkUsIERFRkFVTFRfUExBQ0VIT0xERVIsIERFRkFVTFRfQ0xBU1NOQU1FLCBGSUxURVJfUExBQ0VIT0xERVIsIERFQk9VTkNFX1NDUk9MTF9ERUxBWSwgU1BJTk5FUl9TVFJPS0VfV0lEVEgsIFNLRUxFVE9OX0xBQkVMX1dJRFRILCBTS0VMRVRPTl9MQUJFTF9IRUlHSFQsIFVOU0VMRUNUQUJMRV9PTiwgREFUQV9BVFRSX1NFTEVDVE9SLCBDT0xPUl9QUklNQVJZX0JMQUNLLCBDT0xPUl9QUklNQVJZX0JMVUUsIENPTE9SX05FR0FUSVZFLCBDT0xPUl9XSElURSwgSUNPTl9TSVpFX1hTLCBJQ09OX1NJWkVfU00sIElDT05fU0laRV9NRCwgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5jb25zdCBTZWxlY3RXcmFwcGVyID0gbWVtbyhwcm9wcyA9PiB7XG4gICAgY29uc3QgeyBsYWJlbCwgbWVzc2FnZSwgcmVxdWlyZWQsIHByZWZpeENscywgd3JhcHBlckNscywgbGFiZWxDbHMsIG1lc3NhZ2VDbHMsIHN1Y2Nlc3MsIGludmFsaWQsIGRpc2FibGVkLCBsb2FkaW5nLCBjaGlsZHJlbiwgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKHByZWZpeENscyk7XG4gICAgcmV0dXJuIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCd3cmFwcGVyJywgd3JhcHBlckNscyksIGNoaWxkcmVuOiBbbGFiZWwgP1xuICAgICAgICAgICAgICAgIGxvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgPyBfanN4KFNrZWxldG9uLCB7IHdpZHRoOiBTS0VMRVRPTl9MQUJFTF9XSURUSCwgaGVpZ2h0OiBTS0VMRVRPTl9MQUJFTF9IRUlHSFQsIGNsYXNzTmFtZTogY2xhc3NlcygnbGFiZWwtbG9hZGluZycpIH0pXG4gICAgICAgICAgICAgICAgICAgIDogX2pzeChcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2xhYmVsJywgam9pbkNscyhyZXF1aXJlZCAmJiBjbGFzc2VzKCdsYWJlbC1yZXF1aXJlZCcpLCBsYWJlbENscykpLCBjaGlsZHJlbjogbGFiZWwgfSlcbiAgICAgICAgICAgICAgICA6IG51bGwsIGNoaWxkcmVuLCBtZXNzYWdlICYmIF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdtZXNzYWdlJywgam9pbkNscyhzdWNjZXNzICYmIGNsYXNzZXMoJ21lc3NhZ2Utc3VjY2VzcycpLCBpbnZhbGlkICYmIGNsYXNzZXMoJ21lc3NhZ2UtZXJyb3InKSwgbWVzc2FnZUNscykpLCBjaGlsZHJlbjogbWVzc2FnZSB9KV0gfSk7XG59KTtcbmNvbnN0IEN1c3RvbURyb3Bkb3duID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgcmVmLCBkYXRhSWQsIGxhYmVsLCBtZXNzYWdlLCByZXF1aXJlZCwgcHJlZml4Q2xzID0gREVGQVVMVF9QUkVGSVhfQ0xTLCB3cmFwcGVyQ2xzLCBsYWJlbENscywgbWVzc2FnZUNscywgc2l6ZSA9IERFRkFVTFRfU0laRSwgc3VjY2VzcywgaW52YWxpZCwgZGlzYWJsZWQsIGVkaXRhYmxlLCBwbGFjZWhvbGRlciA9IERFRkFVTFRfUExBQ0VIT0xERVIsIGNsYXNzTmFtZSA9IERFRkFVTFRfQ0xBU1NOQU1FLCBzZWxlY3RlZFRlbXBsYXRlLCB0YWlsVGVtcGxhdGUsIG9uQ2xpY2ssIG9uRm9jdXMsIG9uQmx1ciwgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKHByZWZpeENscyk7XG4gICAgY29uc3QgaXNDbGlja0luc2lkZSA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3QgZGF0YUlkUmVmID0gdXNlUmVmKGRhdGFJZCk7XG4gICAgY29uc3QgbGFzdEZvY3VzUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzZWxlY3RSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW2lzRm9jdXMsIHNldElzRm9jdXNdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHNlbGVjdENscyA9IHVzZU1lbW8oKCkgPT4gY2xhc3Nlcyh2b2lkIDAsIGpvaW5DbHMoY2xhc3NlcyhzaXplKSwgY2xhc3NlcygnY3VzdG9tJyksIGlzRm9jdXMgJiYgY2xhc3NlcygnZm9jdXMnKSwgc3VjY2VzcyAmJiBjbGFzc2VzKCdzdWNjZXNzJyksIGludmFsaWQgJiYgY2xhc3NlcygnaW52YWxpZCcpLCBkaXNhYmxlZCAmJiBjbGFzc2VzKCdkaXNhYmxlZCcpLCBlZGl0YWJsZSAmJiBjbGFzc2VzKCdlZGl0YWJsZScpLCBjbGFzc05hbWUpKSwgW3NpemUsIGlzRm9jdXMsIHN1Y2Nlc3MsIGludmFsaWQsIGRpc2FibGVkLCBlZGl0YWJsZSwgY2xhc3NOYW1lXSk7XG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICAgIGZvY3VzOiAoKSA9PiBzZXRJc0ZvY3VzKHRydWUpLFxuICAgICAgICBibHVyOiAoKSA9PiBzZXRJc0ZvY3VzKGZhbHNlKSxcbiAgICAgICAgZ2V0RE9NTm9kZTogKCkgPT4gc2VsZWN0UmVmLmN1cnJlbnRcbiAgICB9KSwgW10pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRhdGFJZFJlZi5jdXJyZW50ID0gZGF0YUlkO1xuICAgIH0sIFtkYXRhSWRdKTtcbiAgICBjb25zdCBoYW5kbGVGb2N1cyA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4gb25Gb2N1cyA9PT0gbnVsbCB8fCBvbkZvY3VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZvY3VzKCkpO1xuICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IG9uQmx1ciA9PT0gbnVsbCB8fCBvbkJsdXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQmx1cigpKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaXNGb2N1cyAhPT0gbGFzdEZvY3VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGxhc3RGb2N1c1JlZi5jdXJyZW50ID0gaXNGb2N1cztcbiAgICAgICAgICAgIGlmIChpc0ZvY3VzKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZUJsdXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtpc0ZvY3VzXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgcmVtb3ZlRm9jdXMgPSAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQ2xpY2tJbnNpZGUuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIGlzQ2xpY2tJbnNpZGUuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldElzRm9jdXMocHJldiA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGlmICghcHJldilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmICghZGF0YUlkUmVmLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgICAgICAgICAgICByZXR1cm4gISEoKF9hID0gdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFyZ2V0LmNsb3Nlc3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcmdldCwgYFske0RBVEFfQVRUUl9TRUxFQ1RPUn09XCIke2RhdGFJZFJlZi5jdXJyZW50fVwiXWApKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUZvY3VzKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlRm9jdXMpO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gX2pzeChTZWxlY3RXcmFwcGVyLCB7IGxhYmVsOiBsYWJlbCwgbWVzc2FnZTogbWVzc2FnZSwgcmVxdWlyZWQ6IHJlcXVpcmVkLCBwcmVmaXhDbHM6IHByZWZpeENscywgd3JhcHBlckNsczogd3JhcHBlckNscywgbGFiZWxDbHM6IGxhYmVsQ2xzLCBtZXNzYWdlQ2xzOiBtZXNzYWdlQ2xzLCBzdWNjZXNzOiBzdWNjZXNzLCBpbnZhbGlkOiBpbnZhbGlkLCBkaXNhYmxlZDogZGlzYWJsZWQsIGNoaWxkcmVuOiBfanN4cyhcImRpdlwiLCB7IHJlZjogc2VsZWN0UmVmLCBjbGFzc05hbWU6IHNlbGVjdENscywgY29udGVudEVkaXRhYmxlOiAhZGlzYWJsZWQgPyBlZGl0YWJsZSA6IGZhbHNlLCBhdXRvRm9jdXM6IGVkaXRhYmxlLCBcImRhdGEtcGxhY2Vob2xkZXJcIjogcGxhY2Vob2xkZXIsIFwiZGF0YS12YWx1ZVwiOiB2YWx1ZSwgb25DbGljazogKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoIWVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQ2xpY2tJbnNpZGUuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHNldElzRm9jdXMocHJldiA9PiAhcHJldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2sgPT09IG51bGwgfHwgb25DbGljayA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DbGljayhlKTtcbiAgICAgICAgICAgIH0sIG9uSW5wdXQ6IGUgPT4ge1xuICAgICAgICAgICAgICAgIGxldCB2YWwgPSBlLmN1cnJlbnRUYXJnZXQuaW5uZXJUZXh0O1xuICAgICAgICAgICAgICAgIGlmICh2YWwgPT09ICdcXG4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQuaW5uZXJUZXh0ID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNldFZhbHVlKHZhbCk7XG4gICAgICAgICAgICB9LCBjaGlsZHJlbjogWyFkaXNhYmxlZCAmJiBlZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2Ygc2VsZWN0ZWRUZW1wbGF0ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxlY3RlZFRlbXBsYXRlKGlzRm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdjdXN0b20tcGxhY2Vob2xkZXInKSwgY2hpbGRyZW46IHBsYWNlaG9sZGVyIH0pLCBlZGl0YWJsZVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgdGFpbFRlbXBsYXRlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRhaWxUZW1wbGF0ZShpc0ZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfanN4KEljb25zLCB7IG5hbWU6ICdjaGV2cm9uRG93bicsIGNvbG9yOiBDT0xPUl9QUklNQVJZX0JMQUNLLCBzaXplOiBJQ09OX1NJWkVfTUQsIHdyYXBwZXJDbHM6IGNsYXNzZXMoJ2N1c3RvbS10YWlsJywgaXNGb2N1cyA/IGNsYXNzZXMoJ2N1c3RvbS10YWlsLWZvY3VzJykgOiAnJykgfSldIH0pIH0pO1xufTtcbmV4cG9ydCBjb25zdCBTZWxlY3QgPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyBpZCwgcmVmLCBuYW1lLCBsYWJlbCwgbWVzc2FnZSwgcmVxdWlyZWQsIHByZWZpeENscyA9IERFRkFVTFRfUFJFRklYX0NMUywgd3JhcHBlckNscywgbGFiZWxDbHMsIG1lc3NhZ2VDbHMsIHZhbHVlLCBzaXplID0gREVGQVVMVF9TSVpFLCBzdWNjZXNzLCByZWZyZXNoQWZ0ZXJTaG93ID0gdHJ1ZSwgaW52YWxpZCwgZGlzYWJsZWQsIHBsYWNlaG9sZGVyLCBjbGFzc05hbWUgPSBERUZBVUxUX0NMQVNTTkFNRSwgbXVsdGlwbGUsIG9wdGlvbnMsIHBhbmVsQ2xhc3NOYW1lLCBkZWZhdWx0VmFsdWUsIGl0ZW1UZW1wbGF0ZSwgb25DaGFuZ2UsIG9uSGlkZSwgb25TaG93LCB1bnNlbGVjdGFibGUsIGxvYWRpbmcgfSA9IHByb3BzLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJpZFwiLCBcInJlZlwiLCBcIm5hbWVcIiwgXCJsYWJlbFwiLCBcIm1lc3NhZ2VcIiwgXCJyZXF1aXJlZFwiLCBcInByZWZpeENsc1wiLCBcIndyYXBwZXJDbHNcIiwgXCJsYWJlbENsc1wiLCBcIm1lc3NhZ2VDbHNcIiwgXCJ2YWx1ZVwiLCBcInNpemVcIiwgXCJzdWNjZXNzXCIsIFwicmVmcmVzaEFmdGVyU2hvd1wiLCBcImludmFsaWRcIiwgXCJkaXNhYmxlZFwiLCBcInBsYWNlaG9sZGVyXCIsIFwiY2xhc3NOYW1lXCIsIFwibXVsdGlwbGVcIiwgXCJvcHRpb25zXCIsIFwicGFuZWxDbGFzc05hbWVcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJpdGVtVGVtcGxhdGVcIiwgXCJvbkNoYW5nZVwiLCBcIm9uSGlkZVwiLCBcIm9uU2hvd1wiLCBcInVuc2VsZWN0YWJsZVwiLCBcImxvYWRpbmdcIl0pO1xuICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKHByZWZpeENscyk7XG4gICAgY29uc3QgW3NlbGVjdGVkLCBzZXRTZWxlY3RlZF0gPSB1c2VDb250cm9sbGVkU3RhdGUoZGVmYXVsdFZhbHVlICE9PSBudWxsICYmIGRlZmF1bHRWYWx1ZSAhPT0gdm9pZCAwID8gZGVmYXVsdFZhbHVlIDogbnVsbCwgdmFsdWUpO1xuICAgIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2lzSG92ZXIsIHNldElzSG92ZXJdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtpc1Njcm9sbGluZywgc2V0SXNTY3JvbGxpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHNlbGVjdFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBzZWxlY3RDbHMgPSB1c2VNZW1vKCgpID0+IGNsYXNzZXModm9pZCAwLCBqb2luQ2xzKGNsYXNzZXMoc2l6ZSksIGlzT3BlbiAmJiBjbGFzc2VzKCdzaG93JyksIHN1Y2Nlc3MgJiYgY2xhc3Nlcygnc3VjY2VzcycpLCBpbnZhbGlkICYmIGNsYXNzZXMoJ2ludmFsaWQnKSwgZGlzYWJsZWQgJiYgY2xhc3NlcygnZGlzYWJsZWQnKSwgbG9hZGluZyAmJiBjbGFzc2VzKCdsb2FkaW5nJyksIChBcnJheS5pc0FycmF5KHNlbGVjdGVkKSA/ICEhc2VsZWN0ZWQubGVuZ3RoIDogISFzZWxlY3RlZCkgJiYgY2xhc3NlcygnZmlsbGVkJyksIGNsYXNzTmFtZSkpLCBbc2l6ZSwgaXNPcGVuLCBzdWNjZXNzLCBzZWxlY3RlZCwgaW52YWxpZCwgZGlzYWJsZWQsIGxvYWRpbmcsIGNsYXNzTmFtZV0pO1xuICAgIGNvbnN0IGRlYm91bmNlZEhhbmRsZVNjcm9sbCA9IHVzZU1lbW8oKCkgPT4gZGVib3VuY2UoKCkgPT4gc2V0SXNTY3JvbGxpbmcoZmFsc2UpLCBERUJPVU5DRV9TQ1JPTExfREVMQVkpLCBbXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcmV0dXJuICgpID0+IGRlYm91bmNlZEhhbmRsZVNjcm9sbC5jYW5jZWwoKTtcbiAgICB9LCBbZGVib3VuY2VkSGFuZGxlU2Nyb2xsXSk7XG4gICAgY29uc3QgcmVmcmVzaERPTSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgZWxlID0gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRPdmVybGF5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7XG4gICAgICAgIGlmICghZWxlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBvcmlnaW5aSW5kZXggPSBlbGUuc3R5bGUuekluZGV4O1xuICAgICAgICBpZiAob3JpZ2luWkluZGV4ICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZWxlLnN0eWxlLnpJbmRleCA9IGAke3BhcnNlSW50KG9yaWdpblpJbmRleCkgKyAxfWA7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBlbGUuc3R5bGUuekluZGV4ID0gb3JpZ2luWkluZGV4O1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgY29uc3QgZmlsdGVySWNvblByb3BzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGNvbnN0IF9hID0gcmVzdCwgeyBmaWx0ZXJJY29uLCBmaWx0ZXIgfSA9IF9hLCBvdGhlcnMgPSBfX3Jlc3QoX2EsIFtcImZpbHRlckljb25cIiwgXCJmaWx0ZXJcIl0pO1xuICAgICAgICBjb25zdCBleHRyYVByb3BzID0gZmlsdGVyID8geyBmaWx0ZXJJY29uOiBmaWx0ZXJJY29uICE9PSBudWxsICYmIGZpbHRlckljb24gIT09IHZvaWQgMCA/IGZpbHRlckljb24gOiBfanN4KEljb25zLCB7IG5hbWU6ICdzZWFyY2gnLCBzaXplOiBJQ09OX1NJWkVfTUQsIGNvbG9yOiBDT0xPUl9QUklNQVJZX0JMQUNLLCB3cmFwcGVyQ2xzOiBjbGFzc2VzKCdmaWx0ZXItaWNvbicpIH0pIH0gOiBudWxsO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG90aGVycyksIHsgZmlsdGVyIH0pLCAoZXh0cmFQcm9wcyB8fCB7fSkpO1xuICAgIH0sIFtyZXN0LmZpbHRlciwgcmVzdC5maWx0ZXJJY29uXSk7XG4gICAgY29uc3QgU2VsZWN0Q29tcG9uZW50ID0gdXNlQ2FsbGJhY2soKHByb3BzKSA9PiBtdWx0aXBsZVxuICAgICAgICA/IF9qc3goTXVsdGlTZWxlY3QsIE9iamVjdC5hc3NpZ24oeyB1bnNlbGVjdGFibGU6IHVuc2VsZWN0YWJsZSwgc2hvd1NlbGVjdEFsbDogZmFsc2UsIGNoZWNrYm94SWNvbjogX2pzeChJY29ucywgeyBuYW1lOiAnY2hlY2snLCBzaXplOiBJQ09OX1NJWkVfWFMsIGNvbG9yOiBDT0xPUl9XSElURSB9KSwgcmVtb3ZlSWNvbjogcHJvcHMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgb25DbGljaywgb25LZXlEb3duLCB0YWJJbmRleCB9ID0gcHJvcHMuaWNvblByb3BzO1xuICAgICAgICAgICAgICAgIHJldHVybiBfanN4KEljb25zLCB7IG5hbWU6ICdjbG9zZScsIHNpemU6IElDT05fU0laRV9TTSwgY29sb3I6IENPTE9SX1BSSU1BUllfQkxBQ0ssIHRhYkluZGV4OiB0YWJJbmRleCwgd3JhcHBlckNsczogY2xhc3NlcygndG9rZW4tcmVtb3ZlLWljb24nKSwgb25DbGljazogb25DbGljaywgb25LZXlEb3duOiBvbktleURvd24gfSk7XG4gICAgICAgICAgICB9LCBwYW5lbEhlYWRlclRlbXBsYXRlOiBvcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVyRWxlbWVudCwgcHJvcHMgfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTnVtID0gKF9kID0gKF9jID0gKF9iID0gKF9hID0gcHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzLm1ldGFEYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucHJvcHMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi52YWx1ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3BhbmVsLWhlYWRlcicpLCBjaGlsZHJlbjogW19qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdwYW5lbC1oZWFkZXItaW5mbycpLCBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtaGVhZGVyLWluZm8tY291bnQnKSwgY2hpbGRyZW46IFtzZWxlY3RlZE51bSwgXCIgc2VsZWN0ZWRcIl0gfSksIF9qc3hzKFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtaGVhZGVyLWluZm8tY2xlYXInKSwgb25DbGljazogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnVwZGF0ZU1vZGVsKGUsIFtdLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogW19qc3goSWNvbnMsIHsgbmFtZTogJ2Nsb3NlJywgc2l6ZTogSUNPTl9TSVpFX1NNLCBjb2xvcjogQ09MT1JfTkVHQVRJVkUsIHdyYXBwZXJDbHM6IGNsYXNzZXMoJ3BhbmVsLWhlYWRlci1pbmZvLWNsZWFyLWljb24nKSB9KSwgXCJDbGVhciBhbGxcIl0gfSldIH0pLCAoX2UgPSBmaWx0ZXJFbGVtZW50ID09PSBudWxsIHx8IGZpbHRlckVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpbHRlckVsZW1lbnQucHJvcHMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5jaGlsZHJlbl0gfSk7XG4gICAgICAgICAgICB9IH0sIHByb3BzKSlcbiAgICAgICAgOiBfanN4KERyb3Bkb3duLCBPYmplY3QuYXNzaWduKHsgY29sbGFwc2VJY29uOiBtdWx0aXBsZSA/IHZvaWQgMCA6ICgpID0+IF9qc3goSWNvbnMsIHsgbmFtZTogJ2NoZXZyb25VcCcsIGNvbG9yOiBDT0xPUl9QUklNQVJZX0JMQUNLLCBzaXplOiBJQ09OX1NJWkVfTUQgfSkgfSwgcHJvcHMpKSwgW211bHRpcGxlXSk7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAobXVsdGlwbGUgPyB7XG4gICAgICAgICAgICBwcm9wczogKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wcm9wcyxcbiAgICAgICAgICAgIGZvY3VzOiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBoaWRlOiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhpZGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIHNob3c6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2hvdykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0RWxlbWVudDogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBnZXRJbnB1dDogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRJbnB1dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0T3ZlcmxheTogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRPdmVybGF5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgIH0gOiB7XG4gICAgICAgICAgICBwcm9wczogKF9iID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5wcm9wcyxcbiAgICAgICAgICAgIGNsZWFyOiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNsZWFyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBmb2N1czogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgaGlkZTogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oaWRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBzaG93OiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNob3cpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGdldEVsZW1lbnQ6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0RWxlbWVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0SW5wdXQ6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0SW5wdXQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGdldE92ZXJsYXk6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0T3ZlcmxheSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0Rm9jdXNJbnB1dDogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRGb2N1c0lucHV0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBnZXRWaXJ0dWFsU2Nyb2xsZXI6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0VmlydHVhbFNjcm9sbGVyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgIH0pO1xuICAgIH0sIFttdWx0aXBsZV0pO1xuICAgIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgY29uc3QgZW1pdENoYW5nZSA9IG9uQ2hhbmdlO1xuICAgICAgICBzZXRTZWxlY3RlZChlLnZhbHVlKTtcbiAgICAgICAgZW1pdENoYW5nZSA9PT0gbnVsbCB8fCBlbWl0Q2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbWl0Q2hhbmdlKGUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZUhpZGUgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgb25IaWRlID09PSBudWxsIHx8IG9uSGlkZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25IaWRlKCk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU2hvdyA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBzZXRJc09wZW4odHJ1ZSk7XG4gICAgICAgIG9uU2hvdyA9PT0gbnVsbCB8fCBvblNob3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uU2hvdygpO1xuICAgICAgICBpZiAoIXJlZnJlc2hBZnRlclNob3cpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcmVmcmVzaERPTSgpLCAwKTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGRlYm91bmNlZEhhbmRsZVNjcm9sbC5jYW5jZWwoKTtcbiAgICAgICAgc2V0SXNTY3JvbGxpbmcodHJ1ZSk7XG4gICAgICAgIGRlYm91bmNlZEhhbmRsZVNjcm9sbCgpO1xuICAgIH0sIFtkZWJvdW5jZWRIYW5kbGVTY3JvbGxdKTtcbiAgICByZXR1cm4gKF9qc3goU2VsZWN0V3JhcHBlciwgeyBsYWJlbDogbGFiZWwsIG1lc3NhZ2U6IG1lc3NhZ2UsIHJlcXVpcmVkOiByZXF1aXJlZCwgcHJlZml4Q2xzOiBwcmVmaXhDbHMsIHdyYXBwZXJDbHM6IHdyYXBwZXJDbHMsIGxhYmVsQ2xzOiBsYWJlbENscywgbWVzc2FnZUNsczogbWVzc2FnZUNscywgc3VjY2Vzczogc3VjY2VzcywgaW52YWxpZDogaW52YWxpZCwgZGlzYWJsZWQ6IGRpc2FibGVkLCBsb2FkaW5nOiBsb2FkaW5nLCBjaGlsZHJlbjogX2pzeChTZWxlY3RDb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIGZpbHRlckljb25Qcm9wcywgeyBpZDogaWQsIHJlZjogc2VsZWN0UmVmLCBuYW1lOiBuYW1lLCBsb2FkaW5nOiBsb2FkaW5nLCBmaWx0ZXJQbGFjZWhvbGRlcjogRklMVEVSX1BMQUNFSE9MREVSLCByZXF1aXJlZDogcmVxdWlyZWQsIGRpc2FibGVkOiBkaXNhYmxlZCwgaW52YWxpZDogaW52YWxpZCwgb3B0aW9uczogb3B0aW9ucywgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCB2YWx1ZTogc2VsZWN0ZWQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHNlbGVjdGVkLCBjbGFzc05hbWU6IHNlbGVjdENscywgaXRlbVRlbXBsYXRlOiAob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdwYW5lbC1pdGVtJyksIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXVsdGlwbGUgJiYgdW5zZWxlY3RhYmxlID09PSBVTlNFTEVDVEFCTEVfT04gJiYgb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgY2hpbGRyZW46IFtfanN4KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdwYW5lbC1pdGVtLWxhYmVsJyksIGNoaWxkcmVuOiBpdGVtVGVtcGxhdGUgPyBpdGVtVGVtcGxhdGUob3B0aW9uKSA6IG9wdGlvbi5sYWJlbCB9KSwgX2pzeChJY29ucywgeyBuYW1lOiAnY2hlY2snLCBzaXplOiBJQ09OX1NJWkVfU00sIGNvbG9yOiBDT0xPUl9QUklNQVJZX0JMVUUgfSldIH0pO1xuICAgICAgICAgICAgfSwgbG9hZGluZ0ljb246IF9qc3goU3Bpbm5lciwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2xvYWRpbmctaWNvbicpLCBzdHJva2VXaWR0aDogU1BJTk5FUl9TVFJPS0VfV0lEVEggfSksIHBhbmVsQ2xhc3NOYW1lOiBjbGFzc2VzKCdwYW5lbCcsIGpvaW5DbHMocGFuZWxDbGFzc05hbWUsIGlzSG92ZXIgJiYgY2xhc3NlcygncGFuZWwtaG92ZXInKSwgaXNTY3JvbGxpbmcgJiYgY2xhc3NlcygncGFuZWwtc2Nyb2xsaW5nJyksIHJlc3QuYXBwZW5kVG8gPT09ICdzZWxmJyAmJiBjbGFzc2VzKCdwYW5lbC1hcHBlbmQtc2VsZicpKSksIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsIG9uSGlkZTogaGFuZGxlSGlkZSwgb25TaG93OiBoYW5kbGVTaG93LCBkcm9wZG93bkljb246ICgpID0+IF9qc3goSWNvbnMsIHsgbmFtZTogJ2NoZXZyb25Eb3duJywgY29sb3I6IENPTE9SX1BSSU1BUllfQkxBQ0ssIHNpemU6IElDT05fU0laRV9NRCB9KSwgcHQ6IHtcbiAgICAgICAgICAgICAgICB3cmFwcGVyOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uU2Nyb2xsOiBoYW5kbGVTY3JvbGxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBhbmVsOiB7XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcjogKCkgPT4gc2V0SXNIb3Zlcih0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlOiAoKSA9PiBzZXRJc0hvdmVyKGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgb25Ub3VjaFN0YXJ0OiAoKSA9PiBzZXRJc0hvdmVyKHRydWUpLFxuICAgICAgICAgICAgICAgICAgICBvblRvdWNoRW5kOiAoKSA9PiBzZXRJc0hvdmVyKGZhbHNlKSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IH0pKSB9KSk7XG59O1xuU2VsZWN0LkN1c3RvbURyb3Bkb3duID0gQ3VzdG9tRHJvcGRvd247XG5leHBvcnQgZGVmYXVsdCBtZW1vKFNlbGVjdCk7IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9