@syncfusion/ej2-calendars 21.2.8 → 21.2.10-11964

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 (467) hide show
  1. package/CHANGELOG.md +1237 -1235
  2. package/README.md +178 -178
  3. package/dist/ej2-calendars.umd.min.js +1 -10
  4. package/dist/ej2-calendars.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-calendars.es2015.js +54 -50
  6. package/dist/es6/ej2-calendars.es2015.js.map +1 -1
  7. package/dist/es6/ej2-calendars.es5.js +131 -126
  8. package/dist/es6/ej2-calendars.es5.js.map +1 -1
  9. package/helpers/e2e/calendarHelper.js +13 -13
  10. package/helpers/e2e/datepickerHelper.js +13 -13
  11. package/helpers/e2e/daterangepickerHelper.js +13 -13
  12. package/helpers/e2e/datetimepickerHelper.js +13 -13
  13. package/helpers/e2e/index.js +3 -3
  14. package/helpers/e2e/timepickerHelper.js +13 -13
  15. package/license +10 -10
  16. package/package.json +86 -86
  17. package/src/calendar/calendar-model.d.ts +277 -277
  18. package/src/calendar/calendar.d.ts +19 -20
  19. package/src/calendar/calendar.js +27 -28
  20. package/src/common/maskplaceholder-model.d.ts +36 -36
  21. package/src/common/maskplaceholder.js +19 -19
  22. package/src/datepicker/datepicker-model.d.ts +284 -284
  23. package/src/datepicker/datepicker.d.ts +11 -11
  24. package/src/datepicker/datepicker.js +35 -30
  25. package/src/daterangepicker/daterangepicker-model.d.ts +423 -423
  26. package/src/daterangepicker/daterangepicker.d.ts +1 -2
  27. package/src/daterangepicker/daterangepicker.js +22 -22
  28. package/src/datetimepicker/datetimepicker-model.d.ts +446 -446
  29. package/src/datetimepicker/datetimepicker.d.ts +1 -1
  30. package/src/datetimepicker/datetimepicker.js +20 -20
  31. package/src/maskbase/masked-date-time.d.ts +2 -0
  32. package/src/maskbase/masked-date-time.js +7 -4
  33. package/src/timepicker/timepicker-model.d.ts +329 -329
  34. package/src/timepicker/timepicker.d.ts +3 -4
  35. package/src/timepicker/timepicker.js +23 -25
  36. package/styles/bootstrap-dark.css +1000 -1052
  37. package/styles/bootstrap-dark.scss +20 -5
  38. package/styles/bootstrap.css +1002 -1055
  39. package/styles/bootstrap.scss +20 -5
  40. package/styles/bootstrap4.css +987 -1048
  41. package/styles/bootstrap4.scss +20 -5
  42. package/styles/bootstrap5-dark.css +990 -1071
  43. package/styles/bootstrap5-dark.scss +20 -5
  44. package/styles/bootstrap5.css +990 -1071
  45. package/styles/bootstrap5.scss +20 -5
  46. package/styles/calendar/_all.scss +2 -2
  47. package/styles/calendar/_bds-definition.scss +273 -0
  48. package/styles/calendar/_bigger.scss +1156 -0
  49. package/styles/calendar/_bootstrap-dark-definition.scss +238 -228
  50. package/styles/calendar/_bootstrap-definition.scss +238 -228
  51. package/styles/calendar/_bootstrap4-definition.scss +238 -228
  52. package/styles/calendar/_bootstrap5-definition.scss +258 -250
  53. package/styles/calendar/_bootstrap5.3-definition.scss +260 -0
  54. package/styles/calendar/_fabric-dark-definition.scss +202 -192
  55. package/styles/calendar/_fabric-definition.scss +200 -190
  56. package/styles/calendar/_fluent-definition.scss +264 -252
  57. package/styles/calendar/_fluent2-definition.scss +294 -0
  58. package/styles/calendar/_fusionnew-definition.scss +260 -250
  59. package/styles/calendar/_highcontrast-definition.scss +199 -189
  60. package/styles/calendar/_highcontrast-light-definition.scss +202 -192
  61. package/styles/calendar/_layout.scss +582 -741
  62. package/styles/calendar/_material-dark-definition.scss +204 -194
  63. package/styles/calendar/_material-definition.scss +199 -189
  64. package/styles/calendar/_material3-dark-definition.scss +1 -0
  65. package/styles/calendar/_material3-definition.scss +196 -0
  66. package/styles/calendar/_tailwind-definition.scss +271 -262
  67. package/styles/calendar/_tailwind4-definition.scss +262 -0
  68. package/styles/calendar/_theme.scss +721 -533
  69. package/styles/calendar/bootstrap-dark.css +120 -373
  70. package/styles/calendar/bootstrap-dark.scss +1 -1
  71. package/styles/calendar/bootstrap.css +119 -372
  72. package/styles/calendar/bootstrap.scss +1 -1
  73. package/styles/calendar/bootstrap4.css +119 -372
  74. package/styles/calendar/bootstrap4.scss +1 -1
  75. package/styles/calendar/bootstrap5-dark.css +121 -393
  76. package/styles/calendar/bootstrap5-dark.scss +1 -1
  77. package/styles/calendar/bootstrap5.css +121 -393
  78. package/styles/calendar/bootstrap5.scss +1 -1
  79. package/styles/calendar/fabric-dark.css +121 -375
  80. package/styles/calendar/fabric-dark.scss +1 -1
  81. package/styles/calendar/fabric.css +124 -379
  82. package/styles/calendar/fabric.scss +1 -1
  83. package/styles/calendar/fluent-dark.css +139 -421
  84. package/styles/calendar/fluent-dark.scss +1 -1
  85. package/styles/calendar/fluent.css +139 -421
  86. package/styles/calendar/fluent.scss +1 -1
  87. package/styles/calendar/fluent2.css +1747 -0
  88. package/styles/calendar/fluent2.scss +5 -0
  89. package/styles/calendar/highcontrast-light.css +120 -373
  90. package/styles/calendar/highcontrast-light.scss +1 -1
  91. package/styles/calendar/highcontrast.css +124 -379
  92. package/styles/calendar/highcontrast.scss +1 -1
  93. package/styles/calendar/icons/_bds.scss +13 -0
  94. package/styles/calendar/icons/_bootstrap-dark.scss +13 -13
  95. package/styles/calendar/icons/_bootstrap.scss +13 -13
  96. package/styles/calendar/icons/_bootstrap4.scss +13 -13
  97. package/styles/calendar/icons/_bootstrap5.3.scss +13 -0
  98. package/styles/calendar/icons/_bootstrap5.scss +13 -13
  99. package/styles/calendar/icons/_fabric-dark.scss +13 -13
  100. package/styles/calendar/icons/_fabric.scss +13 -13
  101. package/styles/calendar/icons/_fluent.scss +13 -13
  102. package/styles/calendar/icons/_fluent2.scss +13 -0
  103. package/styles/calendar/icons/_fusionnew.scss +13 -13
  104. package/styles/calendar/icons/_highcontrast-light.scss +13 -13
  105. package/styles/calendar/icons/_highcontrast.scss +13 -13
  106. package/styles/calendar/icons/_material-dark.scss +13 -13
  107. package/styles/calendar/icons/_material.scss +13 -13
  108. package/styles/calendar/icons/_material3-dark.scss +1 -0
  109. package/styles/calendar/icons/_material3.scss +13 -13
  110. package/styles/calendar/icons/_tailwind.scss +13 -13
  111. package/styles/calendar/icons/_tailwind4.scss +13 -0
  112. package/styles/calendar/material-dark.css +121 -377
  113. package/styles/calendar/material-dark.scss +1 -1
  114. package/styles/calendar/material.css +122 -378
  115. package/styles/calendar/material.scss +1 -1
  116. package/styles/calendar/material3-dark.css +638 -0
  117. package/styles/calendar/material3-dark.scss +6 -0
  118. package/styles/calendar/material3.css +694 -0
  119. package/styles/calendar/material3.scss +6 -0
  120. package/styles/calendar/tailwind-dark.css +122 -426
  121. package/styles/calendar/tailwind-dark.scss +1 -1
  122. package/styles/calendar/tailwind.css +122 -426
  123. package/styles/calendar/tailwind.scss +1 -1
  124. package/styles/datepicker/_all.scss +2 -2
  125. package/styles/datepicker/_bds-definition.scss +105 -0
  126. package/styles/datepicker/_bigger.scss +82 -0
  127. package/styles/datepicker/_bootstrap-dark-definition.scss +97 -37
  128. package/styles/datepicker/_bootstrap-definition.scss +96 -34
  129. package/styles/datepicker/_bootstrap4-definition.scss +101 -40
  130. package/styles/datepicker/_bootstrap5-definition.scss +107 -46
  131. package/styles/datepicker/_bootstrap5.3-definition.scss +108 -0
  132. package/styles/datepicker/_fabric-dark-definition.scss +98 -37
  133. package/styles/datepicker/_fabric-definition.scss +95 -34
  134. package/styles/datepicker/_fluent-definition.scss +107 -46
  135. package/styles/datepicker/_fluent2-definition.scss +118 -0
  136. package/styles/datepicker/_fusionnew-definition.scss +107 -46
  137. package/styles/datepicker/_highcontrast-definition.scss +96 -35
  138. package/styles/datepicker/_highcontrast-light-definition.scss +99 -38
  139. package/styles/datepicker/_layout.scss +459 -260
  140. package/styles/datepicker/_material-dark-definition.scss +103 -42
  141. package/styles/datepicker/_material-definition.scss +100 -39
  142. package/styles/datepicker/_material3-dark-definition.scss +1 -0
  143. package/styles/datepicker/_material3-definition.scss +97 -0
  144. package/styles/datepicker/_tailwind-definition.scss +105 -44
  145. package/styles/datepicker/_tailwind4-definition.scss +108 -0
  146. package/styles/datepicker/_theme.scss +48 -54
  147. package/styles/datepicker/bootstrap-dark.css +288 -45
  148. package/styles/datepicker/bootstrap-dark.scss +1 -1
  149. package/styles/datepicker/bootstrap.css +288 -45
  150. package/styles/datepicker/bootstrap.scss +1 -1
  151. package/styles/datepicker/bootstrap4.css +287 -47
  152. package/styles/datepicker/bootstrap4.scss +1 -1
  153. package/styles/datepicker/bootstrap5-dark.css +285 -44
  154. package/styles/datepicker/bootstrap5-dark.scss +1 -1
  155. package/styles/datepicker/bootstrap5.css +285 -44
  156. package/styles/datepicker/bootstrap5.scss +1 -1
  157. package/styles/datepicker/fabric-dark.css +281 -45
  158. package/styles/datepicker/fabric-dark.scss +1 -1
  159. package/styles/datepicker/fabric.css +281 -45
  160. package/styles/datepicker/fabric.scss +1 -1
  161. package/styles/datepicker/fluent-dark.css +284 -44
  162. package/styles/datepicker/fluent-dark.scss +1 -1
  163. package/styles/datepicker/fluent.css +284 -44
  164. package/styles/datepicker/fluent.scss +1 -1
  165. package/styles/datepicker/fluent2.css +1617 -0
  166. package/styles/datepicker/fluent2.scss +7 -0
  167. package/styles/datepicker/highcontrast-light.css +286 -44
  168. package/styles/datepicker/highcontrast-light.scss +1 -1
  169. package/styles/datepicker/highcontrast.css +286 -44
  170. package/styles/datepicker/highcontrast.scss +1 -1
  171. package/styles/datepicker/icons/_bds.scss +52 -0
  172. package/styles/datepicker/icons/_bootstrap-dark.scss +49 -52
  173. package/styles/datepicker/icons/_bootstrap.scss +50 -52
  174. package/styles/datepicker/icons/_bootstrap4.scss +52 -56
  175. package/styles/datepicker/icons/_bootstrap5.3.scss +52 -0
  176. package/styles/datepicker/icons/_bootstrap5.scss +52 -56
  177. package/styles/datepicker/icons/_fabric-dark.scss +43 -52
  178. package/styles/datepicker/icons/_fabric.scss +43 -52
  179. package/styles/datepicker/icons/_fluent.scss +52 -56
  180. package/styles/datepicker/icons/_fluent2.scss +52 -0
  181. package/styles/datepicker/icons/_fusionnew.scss +52 -56
  182. package/styles/datepicker/icons/_highcontrast-light.scss +50 -52
  183. package/styles/datepicker/icons/_highcontrast.scss +50 -52
  184. package/styles/datepicker/icons/_material-dark.scss +59 -86
  185. package/styles/datepicker/icons/_material.scss +59 -86
  186. package/styles/datepicker/icons/_material3-dark.scss +1 -0
  187. package/styles/datepicker/icons/_material3.scss +50 -56
  188. package/styles/datepicker/icons/_tailwind.scss +52 -56
  189. package/styles/datepicker/icons/_tailwind4.scss +52 -0
  190. package/styles/datepicker/material-dark.css +278 -60
  191. package/styles/datepicker/material-dark.scss +1 -1
  192. package/styles/datepicker/material.css +231 -96
  193. package/styles/datepicker/material.scss +1 -1
  194. package/styles/datepicker/material3-dark.css +491 -0
  195. package/styles/datepicker/material3-dark.scss +8 -0
  196. package/styles/datepicker/material3.css +547 -0
  197. package/styles/datepicker/material3.scss +8 -0
  198. package/styles/datepicker/tailwind-dark.css +284 -50
  199. package/styles/datepicker/tailwind-dark.scss +1 -1
  200. package/styles/datepicker/tailwind.css +284 -50
  201. package/styles/datepicker/tailwind.scss +1 -1
  202. package/styles/daterangepicker/_all.scss +2 -2
  203. package/styles/daterangepicker/_bds-definition.scss +294 -0
  204. package/styles/daterangepicker/_bigger.scss +971 -0
  205. package/styles/daterangepicker/_bootstrap-dark-definition.scss +258 -193
  206. package/styles/daterangepicker/_bootstrap-definition.scss +258 -193
  207. package/styles/daterangepicker/_bootstrap4-definition.scss +268 -203
  208. package/styles/daterangepicker/_bootstrap5-definition.scss +296 -231
  209. package/styles/daterangepicker/_bootstrap5.3-definition.scss +298 -0
  210. package/styles/daterangepicker/_fabric-dark-definition.scss +261 -196
  211. package/styles/daterangepicker/_fabric-definition.scss +258 -193
  212. package/styles/daterangepicker/_fluent-definition.scss +313 -240
  213. package/styles/daterangepicker/_fluent2-definition.scss +305 -0
  214. package/styles/daterangepicker/_fusionnew-definition.scss +295 -230
  215. package/styles/daterangepicker/_highcontrast-definition.scss +258 -193
  216. package/styles/daterangepicker/_highcontrast-light-definition.scss +261 -196
  217. package/styles/daterangepicker/_layout.scss +806 -821
  218. package/styles/daterangepicker/_material-dark-definition.scss +266 -201
  219. package/styles/daterangepicker/_material-definition.scss +266 -201
  220. package/styles/daterangepicker/_material3-dark-definition.scss +1 -0
  221. package/styles/daterangepicker/_material3-definition.scss +262 -0
  222. package/styles/daterangepicker/_tailwind-definition.scss +287 -222
  223. package/styles/daterangepicker/_tailwind4-definition.scss +308 -0
  224. package/styles/daterangepicker/_theme.scss +428 -435
  225. package/styles/daterangepicker/bootstrap-dark.css +387 -474
  226. package/styles/daterangepicker/bootstrap-dark.scss +1 -1
  227. package/styles/daterangepicker/bootstrap.css +387 -473
  228. package/styles/daterangepicker/bootstrap.scss +1 -1
  229. package/styles/daterangepicker/bootstrap4.css +386 -477
  230. package/styles/daterangepicker/bootstrap4.scss +1 -1
  231. package/styles/daterangepicker/bootstrap5-dark.css +392 -483
  232. package/styles/daterangepicker/bootstrap5-dark.scss +1 -1
  233. package/styles/daterangepicker/bootstrap5.css +392 -483
  234. package/styles/daterangepicker/bootstrap5.scss +1 -1
  235. package/styles/daterangepicker/fabric-dark.css +387 -468
  236. package/styles/daterangepicker/fabric-dark.scss +1 -1
  237. package/styles/daterangepicker/fabric.css +388 -469
  238. package/styles/daterangepicker/fabric.scss +1 -1
  239. package/styles/daterangepicker/fluent-dark.css +396 -504
  240. package/styles/daterangepicker/fluent-dark.scss +1 -1
  241. package/styles/daterangepicker/fluent.css +396 -504
  242. package/styles/daterangepicker/fluent.scss +1 -1
  243. package/styles/daterangepicker/fluent2.css +1998 -0
  244. package/styles/daterangepicker/fluent2.scss +7 -0
  245. package/styles/daterangepicker/highcontrast-light.css +389 -470
  246. package/styles/daterangepicker/highcontrast-light.scss +1 -1
  247. package/styles/daterangepicker/highcontrast.css +389 -470
  248. package/styles/daterangepicker/highcontrast.scss +1 -1
  249. package/styles/daterangepicker/icons/_bds.scss +74 -0
  250. package/styles/daterangepicker/icons/_bootstrap-dark.scss +61 -65
  251. package/styles/daterangepicker/icons/_bootstrap.scss +69 -65
  252. package/styles/daterangepicker/icons/_bootstrap4.scss +75 -74
  253. package/styles/daterangepicker/icons/_bootstrap5.3.scss +74 -0
  254. package/styles/daterangepicker/icons/_bootstrap5.scss +74 -72
  255. package/styles/daterangepicker/icons/_fabric-dark.scss +69 -65
  256. package/styles/daterangepicker/icons/_fabric.scss +69 -65
  257. package/styles/daterangepicker/icons/_fluent.scss +74 -72
  258. package/styles/daterangepicker/icons/_fluent2.scss +91 -0
  259. package/styles/daterangepicker/icons/_fusionnew.scss +74 -72
  260. package/styles/daterangepicker/icons/_highcontrast-light.scss +69 -65
  261. package/styles/daterangepicker/icons/_highcontrast.scss +69 -65
  262. package/styles/daterangepicker/icons/_material-dark.scss +85 -99
  263. package/styles/daterangepicker/icons/_material.scss +85 -99
  264. package/styles/daterangepicker/icons/_material3-dark.scss +1 -0
  265. package/styles/daterangepicker/icons/_material3.scss +90 -99
  266. package/styles/daterangepicker/icons/_tailwind.scss +74 -72
  267. package/styles/daterangepicker/icons/_tailwind4.scss +74 -0
  268. package/styles/daterangepicker/material-dark.css +388 -487
  269. package/styles/daterangepicker/material-dark.scss +1 -1
  270. package/styles/daterangepicker/material.css +344 -560
  271. package/styles/daterangepicker/material.scss +1 -1
  272. package/styles/daterangepicker/material3-dark.css +888 -0
  273. package/styles/daterangepicker/material3-dark.scss +8 -0
  274. package/styles/daterangepicker/material3.css +944 -0
  275. package/styles/daterangepicker/material3.scss +8 -0
  276. package/styles/daterangepicker/tailwind-dark.css +388 -476
  277. package/styles/daterangepicker/tailwind-dark.scss +1 -1
  278. package/styles/daterangepicker/tailwind.css +388 -476
  279. package/styles/daterangepicker/tailwind.scss +1 -1
  280. package/styles/datetimepicker/_all.scss +2 -2
  281. package/styles/datetimepicker/_bds-definition.scss +65 -0
  282. package/styles/datetimepicker/_bigger.scss +105 -0
  283. package/styles/datetimepicker/_bootstrap-dark-definition.scss +60 -55
  284. package/styles/datetimepicker/_bootstrap-definition.scss +59 -54
  285. package/styles/datetimepicker/_bootstrap4-definition.scss +65 -60
  286. package/styles/datetimepicker/_bootstrap5-definition.scss +65 -60
  287. package/styles/datetimepicker/_bootstrap5.3-definition.scss +65 -0
  288. package/styles/datetimepicker/_fabric-dark-definition.scss +60 -55
  289. package/styles/datetimepicker/_fabric-definition.scss +57 -52
  290. package/styles/datetimepicker/_fluent-definition.scss +65 -60
  291. package/styles/datetimepicker/_fluent2-definition.scss +65 -0
  292. package/styles/datetimepicker/_fusionnew-definition.scss +65 -60
  293. package/styles/datetimepicker/_highcontrast-definition.scss +57 -52
  294. package/styles/datetimepicker/_highcontrast-light-definition.scss +60 -55
  295. package/styles/datetimepicker/_layout.scss +179 -195
  296. package/styles/datetimepicker/_material-dark-definition.scss +64 -59
  297. package/styles/datetimepicker/_material-definition.scss +62 -57
  298. package/styles/datetimepicker/_material3-dark-definition.scss +1 -0
  299. package/styles/datetimepicker/_material3-definition.scss +61 -0
  300. package/styles/datetimepicker/_tailwind-definition.scss +65 -60
  301. package/styles/datetimepicker/_tailwind4-definition.scss +70 -0
  302. package/styles/datetimepicker/_theme.scss +95 -70
  303. package/styles/datetimepicker/bootstrap-dark.css +29 -42
  304. package/styles/datetimepicker/bootstrap-dark.scss +1 -1
  305. package/styles/datetimepicker/bootstrap.css +29 -42
  306. package/styles/datetimepicker/bootstrap.scss +1 -1
  307. package/styles/datetimepicker/bootstrap4.css +29 -42
  308. package/styles/datetimepicker/bootstrap4.scss +1 -1
  309. package/styles/datetimepicker/bootstrap5-dark.css +29 -42
  310. package/styles/datetimepicker/bootstrap5-dark.scss +1 -1
  311. package/styles/datetimepicker/bootstrap5.css +29 -42
  312. package/styles/datetimepicker/bootstrap5.scss +1 -1
  313. package/styles/datetimepicker/fabric-dark.css +29 -42
  314. package/styles/datetimepicker/fabric-dark.scss +1 -1
  315. package/styles/datetimepicker/fabric.css +29 -42
  316. package/styles/datetimepicker/fabric.scss +1 -1
  317. package/styles/datetimepicker/fluent-dark.css +29 -42
  318. package/styles/datetimepicker/fluent-dark.scss +1 -1
  319. package/styles/datetimepicker/fluent.css +29 -42
  320. package/styles/datetimepicker/fluent.scss +1 -1
  321. package/styles/datetimepicker/fluent2.css +1373 -0
  322. package/styles/datetimepicker/fluent2.scss +8 -0
  323. package/styles/datetimepicker/highcontrast-light.css +29 -42
  324. package/styles/datetimepicker/highcontrast-light.scss +1 -1
  325. package/styles/datetimepicker/highcontrast.css +29 -42
  326. package/styles/datetimepicker/highcontrast.scss +1 -1
  327. package/styles/datetimepicker/icons/_bds.scss +11 -0
  328. package/styles/datetimepicker/icons/_bootstrap-dark.scss +11 -11
  329. package/styles/datetimepicker/icons/_bootstrap.scss +11 -11
  330. package/styles/datetimepicker/icons/_bootstrap4.scss +11 -11
  331. package/styles/datetimepicker/icons/_bootstrap5.3.scss +11 -0
  332. package/styles/datetimepicker/icons/_bootstrap5.scss +11 -11
  333. package/styles/datetimepicker/icons/_fabric-dark.scss +11 -11
  334. package/styles/datetimepicker/icons/_fabric.scss +11 -11
  335. package/styles/datetimepicker/icons/_fluent.scss +11 -11
  336. package/styles/datetimepicker/icons/_fluent2.scss +11 -0
  337. package/styles/datetimepicker/icons/_fusionnew.scss +11 -11
  338. package/styles/datetimepicker/icons/_highcontrast-light.scss +11 -11
  339. package/styles/datetimepicker/icons/_highcontrast.scss +11 -11
  340. package/styles/datetimepicker/icons/_material-dark.scss +31 -53
  341. package/styles/datetimepicker/icons/_material.scss +40 -62
  342. package/styles/datetimepicker/icons/_material3-dark.scss +1 -0
  343. package/styles/datetimepicker/icons/_material3.scss +11 -11
  344. package/styles/datetimepicker/icons/_tailwind.scss +11 -11
  345. package/styles/datetimepicker/icons/_tailwind4.scss +11 -0
  346. package/styles/datetimepicker/material-dark.css +29 -67
  347. package/styles/datetimepicker/material-dark.scss +1 -1
  348. package/styles/datetimepicker/material.css +29 -67
  349. package/styles/datetimepicker/material.scss +1 -1
  350. package/styles/datetimepicker/material3-dark.css +252 -0
  351. package/styles/datetimepicker/material3-dark.scss +9 -0
  352. package/styles/datetimepicker/material3.css +308 -0
  353. package/styles/datetimepicker/material3.scss +9 -0
  354. package/styles/datetimepicker/tailwind-dark.css +29 -43
  355. package/styles/datetimepicker/tailwind-dark.scss +1 -1
  356. package/styles/datetimepicker/tailwind.css +29 -43
  357. package/styles/datetimepicker/tailwind.scss +1 -1
  358. package/styles/fabric-dark.css +1002 -1056
  359. package/styles/fabric-dark.scss +20 -5
  360. package/styles/fabric.css +1003 -1060
  361. package/styles/fabric.scss +20 -5
  362. package/styles/fluent-dark.css +1024 -1133
  363. package/styles/fluent-dark.scss +20 -5
  364. package/styles/fluent.css +1024 -1133
  365. package/styles/fluent.scss +20 -5
  366. package/styles/fluent2.css +3549 -0
  367. package/styles/fluent2.scss +20 -0
  368. package/styles/highcontrast-light.css +1010 -1057
  369. package/styles/highcontrast-light.scss +20 -5
  370. package/styles/highcontrast.css +1009 -1060
  371. package/styles/highcontrast.scss +20 -5
  372. package/styles/material-dark.css +967 -1116
  373. package/styles/material-dark.scss +20 -5
  374. package/styles/material.css +833 -1208
  375. package/styles/material.scss +20 -5
  376. package/styles/material3-dark.css +2354 -0
  377. package/styles/material3-dark.scss +22 -0
  378. package/styles/material3.css +2410 -0
  379. package/styles/material3.scss +22 -0
  380. package/styles/tailwind-dark.css +988 -1106
  381. package/styles/tailwind-dark.scss +20 -5
  382. package/styles/tailwind.css +988 -1106
  383. package/styles/tailwind.scss +20 -5
  384. package/styles/timepicker/_all.scss +2 -2
  385. package/styles/timepicker/_bds-definition.scss +84 -0
  386. package/styles/timepicker/_bigger.scss +92 -0
  387. package/styles/timepicker/_bootstrap-dark-definition.scss +80 -52
  388. package/styles/timepicker/_bootstrap-definition.scss +77 -49
  389. package/styles/timepicker/_bootstrap4-definition.scss +85 -57
  390. package/styles/timepicker/_bootstrap5-definition.scss +86 -58
  391. package/styles/timepicker/_bootstrap5.3-definition.scss +85 -0
  392. package/styles/timepicker/_fabric-dark-definition.scss +80 -52
  393. package/styles/timepicker/_fabric-definition.scss +77 -49
  394. package/styles/timepicker/_fluent-definition.scss +86 -58
  395. package/styles/timepicker/_fluent2-definition.scss +84 -0
  396. package/styles/timepicker/_fusionnew-definition.scss +86 -58
  397. package/styles/timepicker/_highcontrast-definition.scss +77 -49
  398. package/styles/timepicker/_highcontrast-light-definition.scss +80 -52
  399. package/styles/timepicker/_layout.scss +227 -202
  400. package/styles/timepicker/_material-dark-definition.scss +84 -56
  401. package/styles/timepicker/_material-definition.scss +81 -53
  402. package/styles/timepicker/_material3-dark-definition.scss +1 -0
  403. package/styles/timepicker/_material3-definition.scss +83 -0
  404. package/styles/timepicker/_tailwind-definition.scss +84 -56
  405. package/styles/timepicker/_tailwind4-definition.scss +92 -0
  406. package/styles/timepicker/_theme.scss +134 -100
  407. package/styles/timepicker/bootstrap-dark.css +102 -42
  408. package/styles/timepicker/bootstrap-dark.scss +1 -1
  409. package/styles/timepicker/bootstrap.css +102 -42
  410. package/styles/timepicker/bootstrap.scss +1 -1
  411. package/styles/timepicker/bootstrap4.css +102 -42
  412. package/styles/timepicker/bootstrap4.scss +1 -1
  413. package/styles/timepicker/bootstrap5-dark.css +102 -42
  414. package/styles/timepicker/bootstrap5-dark.scss +1 -1
  415. package/styles/timepicker/bootstrap5.css +102 -42
  416. package/styles/timepicker/bootstrap5.scss +1 -1
  417. package/styles/timepicker/fabric-dark.css +102 -42
  418. package/styles/timepicker/fabric-dark.scss +1 -1
  419. package/styles/timepicker/fabric.css +102 -42
  420. package/styles/timepicker/fabric.scss +1 -1
  421. package/styles/timepicker/fluent-dark.css +102 -42
  422. package/styles/timepicker/fluent-dark.scss +1 -1
  423. package/styles/timepicker/fluent.css +102 -42
  424. package/styles/timepicker/fluent.scss +1 -1
  425. package/styles/timepicker/fluent2.css +1470 -0
  426. package/styles/timepicker/fluent2.scss +6 -0
  427. package/styles/timepicker/highcontrast-light.css +102 -42
  428. package/styles/timepicker/highcontrast-light.scss +1 -1
  429. package/styles/timepicker/highcontrast.css +102 -42
  430. package/styles/timepicker/highcontrast.scss +1 -1
  431. package/styles/timepicker/icons/_bds.scss +24 -0
  432. package/styles/timepicker/icons/_bootstrap-dark.scss +23 -11
  433. package/styles/timepicker/icons/_bootstrap.scss +24 -12
  434. package/styles/timepicker/icons/_bootstrap4.scss +24 -12
  435. package/styles/timepicker/icons/_bootstrap5.3.scss +24 -0
  436. package/styles/timepicker/icons/_bootstrap5.scss +24 -12
  437. package/styles/timepicker/icons/_fabric-dark.scss +24 -12
  438. package/styles/timepicker/icons/_fabric.scss +24 -12
  439. package/styles/timepicker/icons/_fluent.scss +24 -12
  440. package/styles/timepicker/icons/_fluent2.scss +24 -0
  441. package/styles/timepicker/icons/_fusionnew.scss +24 -12
  442. package/styles/timepicker/icons/_highcontrast-light.scss +24 -12
  443. package/styles/timepicker/icons/_highcontrast.scss +24 -12
  444. package/styles/timepicker/icons/_material-dark.scss +37 -40
  445. package/styles/timepicker/icons/_material.scss +39 -42
  446. package/styles/timepicker/icons/_material3-dark.scss +1 -0
  447. package/styles/timepicker/icons/_material3.scss +24 -12
  448. package/styles/timepicker/icons/_tailwind.scss +24 -12
  449. package/styles/timepicker/icons/_tailwind4.scss +24 -0
  450. package/styles/timepicker/material-dark.css +100 -58
  451. package/styles/timepicker/material-dark.scss +1 -1
  452. package/styles/timepicker/material.css +100 -58
  453. package/styles/timepicker/material.scss +1 -1
  454. package/styles/timepicker/material3-dark.css +349 -0
  455. package/styles/timepicker/material3-dark.scss +7 -0
  456. package/styles/timepicker/material3.css +405 -0
  457. package/styles/timepicker/material3.scss +7 -0
  458. package/styles/timepicker/tailwind-dark.css +102 -43
  459. package/styles/timepicker/tailwind-dark.scss +1 -1
  460. package/styles/timepicker/tailwind.css +102 -43
  461. package/styles/timepicker/tailwind.scss +1 -1
  462. package/.eslintrc.json +0 -259
  463. package/dist/ej2-calendars.min.js +0 -10
  464. package/dist/global/ej2-calendars.min.js +0 -11
  465. package/dist/global/ej2-calendars.min.js.map +0 -1
  466. package/dist/global/index.d.ts +0 -14
  467. package/tslint.json +0 -111
@@ -1 +0,0 @@
1
- {"version":3,"file":"ej2-calendars.min.js","sources":["../../src/calendar/calendar.js","../../src/calendar/islamic.js","../../src/datepicker/datepicker.js","../../src/daterangepicker/daterangepicker.js","../../src/timepicker/timepicker.js","../../src/datetimepicker/datetimepicker.js","../../src/maskbase/masked-date-time.js","../../src/global.js"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-unused-expressions */\nimport { Component, EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined, throwError } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar OTHERDECADE = 'e-other-year';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar DAYHEADERLONG = 'e-calendar-day-header-lg';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n __extends(CalendarBase, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarBaseModel} options - Specifies the CalendarBase model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function CalendarBase(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.effect = '';\n _this.isPopupClicked = false;\n _this.isDateSelected = true;\n _this.isTodayClicked = false;\n _this.preventChange = false;\n _this.isAngular = false;\n _this.previousDates = false;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.render = function () {\n this.rangeValidation(this.min, this.max);\n this.calendarEleCopy = this.element.cloneNode(true);\n if (this.calendarMode === 'Islamic') {\n if (+(this.min.setSeconds(0)) === +new Date(1900, 0, 1, 0, 0, 0)) {\n this.min = new Date(1944, 2, 18);\n }\n if (+this.max === +new Date(2099, 11, 31)) {\n this.max = new Date(2069, 10, 16);\n }\n }\n this.globalize = new Internationalization(this.locale);\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.todayDisabled = false;\n this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add(ROOT);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.element.classList.add(DEVICE);\n }\n attributes(this.element, {\n 'data-role': 'calendar'\n });\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(ROOT);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n if (Browser.isDevice) {\n this.calendarElement.classList.add(DEVICE);\n }\n attributes(this.calendarElement, {\n 'data-role': 'calendar'\n });\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.createHeader();\n this.createContent();\n this.wireEvents();\n };\n CalendarBase.prototype.rangeValidation = function (min, max) {\n if (isNullOrUndefined(min)) {\n this.setProperties({ min: new Date(1900, 0, 1) }, true);\n }\n if (isNullOrUndefined(max)) {\n this.setProperties({ max: new Date(2099, 11, 31) }, true);\n }\n };\n CalendarBase.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n altUpArrow: 'alt+uparrow',\n spacebar: 'space',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow'\n };\n return this.defaultKeyConfigs;\n };\n CalendarBase.prototype.validateDate = function (value) {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(this.max))) }, true);\n this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n this.currentDate = new Date(this.checkValue(value));\n }\n };\n CalendarBase.prototype.setOverlayIndex = function (popupWrapper, popupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(popupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(popupElement.style.zIndex, 10) ? parseInt(popupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n CalendarBase.prototype.minMaxUpdate = function (value) {\n if (!(+this.min <= +this.max)) {\n this.setProperties({ min: this.min }, true);\n addClass([this.element], OVERLAY);\n }\n else {\n removeClass([this.element], OVERLAY);\n }\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n this.currentDate = new Date(this.checkValue(value));\n }\n else {\n if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n else {\n if (+this.currentDate < +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n }\n }\n };\n CalendarBase.prototype.createHeader = function () {\n var ariaPrevAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'previous month'\n };\n var ariaNextAttrs = {\n 'aria-disabled': 'false',\n 'aria-label': 'next month'\n };\n var ariaTitleAttrs = {\n 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n };\n this.headerElement = this.createElement('div', { className: HEADER });\n var iconContainer = this.createElement('div', { className: ICONCONTAINER });\n this.previousIcon = this.createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n rippleEffect(this.previousIcon, {\n duration: 400,\n selector: '.e-prev',\n isCenterRipple: true\n });\n attributes(this.previousIcon, ariaPrevAttrs);\n this.nextIcon = this.createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n rippleEffect(this.nextIcon, {\n selector: '.e-next',\n duration: 400,\n isCenterRipple: true\n });\n if (this.getModuleName() === 'daterangepicker') {\n attributes(this.previousIcon, { tabIndex: '-1' });\n attributes(this.nextIcon, { tabIndex: '-1' });\n }\n attributes(this.nextIcon, ariaNextAttrs);\n this.headerTitleElement = this.createElement('div', { className: '' + LINK + ' ' + TITLE });\n attributes(this.headerTitleElement, ariaTitleAttrs);\n this.headerElement.appendChild(this.headerTitleElement);\n this.previousIcon.appendChild(this.createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n this.nextIcon.appendChild(this.createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n iconContainer.appendChild(this.previousIcon);\n iconContainer.appendChild(this.nextIcon);\n this.headerElement.appendChild(iconContainer);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.headerElement);\n }\n else {\n this.calendarElement.appendChild(this.headerElement);\n }\n this.adjustLongHeaderSize();\n };\n CalendarBase.prototype.createContent = function () {\n this.contentElement = this.createElement('div', { className: CONTENT });\n this.table = this.createElement('table', { attrs: { tabIndex: '0', 'role': 'grid', 'aria-activedescendant': '', 'aria-labelledby': this.element.id } });\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.contentElement);\n }\n else {\n this.calendarElement.appendChild(this.contentElement);\n }\n this.contentElement.appendChild(this.table);\n this.createContentHeader();\n this.createContentBody();\n if (this.showTodayButton) {\n this.createContentFooter();\n }\n };\n CalendarBase.prototype.getCultureValues = function () {\n var culShortNames = [];\n var cldrObj;\n var dayFormat = 'days.stand-alone.' + this.dayHeaderFormat.toLowerCase();\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrObj = (getValue(dayFormat, getDefaultDateObject()));\n }\n else {\n cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n }\n if (!isNullOrUndefined(cldrObj)) {\n for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n var obj = _a[_i];\n culShortNames.push(getValue(obj, cldrObj));\n }\n }\n return culShortNames;\n };\n CalendarBase.prototype.toCapitalize = function (text) {\n return !isNullOrUndefined(text) && text.length ? text[0].toUpperCase() + text.slice(1) : text;\n };\n CalendarBase.prototype.createContentHeader = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n }\n }\n var daysCount = 6;\n var html = '';\n if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: 0 }, true);\n }\n this.tableHeadElement = this.createElement('thead', { className: WEEKHEADER });\n if (this.weekNumber) {\n html += '<th class=\"e-week-number\"></th>';\n if (this.getModuleName() === 'calendar') {\n addClass([this.element], '' + WEEKNUMBER);\n }\n else {\n addClass([this.calendarElement], '' + WEEKNUMBER);\n }\n }\n // eslint-disable-next-line max-len\n var shortNames = this.getCultureValues().length > 0 && this.getCultureValues() ? this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek) : null;\n if (!isNullOrUndefined(shortNames)) {\n for (var days = 0; days <= daysCount; days++) {\n html += '<th class=\"\">' + this.toCapitalize(shortNames[days]) + '</th>';\n }\n }\n html = '<tr>' + html + '</tr>';\n this.tableHeadElement.innerHTML = html;\n this.table.appendChild(this.tableHeadElement);\n };\n CalendarBase.prototype.createContentBody = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n detach(this.element.querySelectorAll('.e-content tbody')[0]);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n }\n }\n switch (this.start) {\n case 'Year':\n this.renderYears();\n break;\n case 'Decade':\n this.renderDecades();\n break;\n default:\n this.renderMonths();\n }\n };\n CalendarBase.prototype.updateFooter = function () {\n this.todayElement.textContent = this.l10.getConstant('today');\n this.todayElement.setAttribute('aria-label', this.l10.getConstant('today'));\n };\n CalendarBase.prototype.createContentFooter = function () {\n if (this.showTodayButton) {\n var minimum = new Date(+this.min);\n var maximum = new Date(+this.max);\n var l10nLocale = { today: 'Today' };\n this.globalize = new Internationalization(this.locale);\n this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n this.todayElement = this.createElement('button', { attrs: { role: 'button' } });\n rippleEffect(this.todayElement);\n this.updateFooter();\n addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n addClass([this.todayElement], DISABLED);\n }\n this.footer = this.createElement('div', { className: FOOTER });\n this.footer.appendChild(this.todayElement);\n if (this.getModuleName() === 'calendar') {\n this.element.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.calendarElement.appendChild(this.footer);\n }\n if (!this.todayElement.classList.contains(DISABLED)) {\n EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n }\n }\n };\n CalendarBase.prototype.wireEvents = function (id, ref, keyConfig, moduleName) {\n EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n if (this.getModuleName() === 'calendar') {\n this.keyboardModule = new KeyboardEvents(this.element, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n else {\n this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n eventName: 'keydown',\n keyAction: this.keyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n };\n CalendarBase.prototype.dateWireEvents = function (id, ref, keyConfig, moduleName) {\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, keyConfig);\n this.serverModuleName = moduleName;\n };\n CalendarBase.prototype.todayButtonClick = function (e, value, isCustomDate) {\n if (this.showTodayButton) {\n if (this.currentView() === this.depth) {\n this.effect = '';\n }\n else {\n this.effect = 'e-zoomin';\n }\n if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.navigateTo(this.depth, new Date(this.checkValue(value)), isCustomDate);\n }\n else {\n this.navigateTo('Month', new Date(this.checkValue(value)), isCustomDate);\n }\n }\n };\n CalendarBase.prototype.resetCalendar = function () {\n this.calendarElement && detach(this.calendarElement);\n this.tableBodyElement && detach(this.tableBodyElement);\n this.table && detach(this.table);\n this.tableHeadElement && detach(this.tableHeadElement);\n this.nextIcon && detach(this.nextIcon);\n this.previousIcon && detach(this.previousIcon);\n this.footer && detach(this.footer);\n this.todayElement = null;\n this.renderDayCellArgs = null;\n this.calendarElement = this.tableBodyElement = this.footer = this.tableHeadElement =\n this.nextIcon = this.previousIcon = this.table = null;\n };\n CalendarBase.prototype.keyActionHandle = function (e, value, multiSelection) {\n var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedDate;\n if (multiSelection) {\n if (!isNullOrUndefined(focusedDate) && +value === parseInt(focusedDate.getAttribute('id').split('_')[0], 10)) {\n selectedDate = focusedDate;\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n }\n else {\n selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n }\n var view = this.getViewNumber(this.currentView());\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n this.effect = '';\n switch (e.action) {\n case 'moveLeft':\n this.keyboardNavigate(-1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveRight':\n this.keyboardNavigate(1, view, e, this.max, this.min);\n e.preventDefault();\n break;\n case 'moveUp':\n if (view === 0) {\n this.keyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n }\n else {\n this.keyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n e.preventDefault();\n break;\n case 'moveDown':\n if (view === 0) {\n this.keyboardNavigate(7, view, e, this.max, this.min);\n }\n else {\n this.keyboardNavigate(4, view, e, this.max, this.min);\n }\n e.preventDefault();\n break;\n case 'select':\n if (e.target === this.todayElement) {\n this.todayButtonClick(e, value);\n }\n else {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n if (levelRestrict) {\n // eslint-disable-next-line radix\n var d = new Date(parseInt('' + (element).id, 0));\n this.selectDate(e, d, (element));\n }\n else {\n this.contentClick(null, --view, (element), value);\n }\n }\n }\n break;\n case 'controlUp':\n this.title();\n e.preventDefault();\n break;\n case 'controlDown':\n if (!isNullOrUndefined(focusedDate) && !levelRestrict || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n e.preventDefault();\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n detach(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n e.preventDefault();\n break;\n case 'pageUp':\n this.addMonths(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'pageDown':\n this.addMonths(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageUp':\n this.addYears(this.currentDate, -1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'shiftPageDown':\n this.addYears(this.currentDate, 1);\n this.navigateTo('Month', this.currentDate);\n e.preventDefault();\n break;\n case 'controlHome':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n e.preventDefault();\n break;\n case 'controlEnd':\n this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n e.preventDefault();\n break;\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.keyboardNavigate = function (number, currentView, e, max, min) {\n var date = new Date(this.checkValue(this.currentDate));\n switch (currentView) {\n case 2:\n this.addYears(this.currentDate, number);\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n case 1:\n this.addMonths(this.currentDate, number);\n if (this.calendarMode === 'Gregorian') {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n else {\n if (this.isMonthYearRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n else {\n this.currentDate = date;\n }\n }\n break;\n case 0:\n this.addDay(this.currentDate, number, e, max, min);\n if (this.isMinMaxRange(this.currentDate)) {\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n else {\n this.currentDate = date;\n }\n break;\n }\n };\n /**\n * Initialize the event handler\n *\n * @param {Date} value - Specifies value of date.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.preRender = function (value) {\n var _this = this;\n this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n this.navigateNextHandler = this.navigateNext.bind(this);\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.navigateHandler = function (e) {\n _this.triggerNavigate(e);\n };\n };\n CalendarBase.prototype.minMaxDate = function (localDate) {\n var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n if (+currentDate === +minDate || +currentDate === +maxDate) {\n if (+localDate < +this.min) {\n localDate = new Date(+this.min);\n }\n if (+localDate > +this.max) {\n localDate = new Date(+this.max);\n }\n }\n return localDate;\n };\n CalendarBase.prototype.renderMonths = function (e, value, isCustomDate) {\n var numCells = this.weekNumber ? 8 : 7;\n var tdEles;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(this.currentDate, value, null, null, isCustomDate, e);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n this.createContentHeader();\n if (this.calendarMode === 'Gregorian') {\n this.renderTemplate(tdEles, numCells, MONTH, e, value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(tdEles, numCells, MONTH, e, value);\n }\n };\n CalendarBase.prototype.renderDays = function (currentDate, value, multiSelection, values, isTodayDate, e) {\n var tdEles = [];\n var cellsCount = 42;\n var todayDate = isTodayDate ? new Date(+currentDate) : this.getDate(new Date(), this.timezone);\n var localDate = new Date(this.checkValue(currentDate));\n var minMaxDate;\n var currentMonth = localDate.getMonth();\n this.titleUpdate(currentDate, 'days');\n var d = localDate;\n localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n while (localDate.getDay() !== this.firstDayOfWeek) {\n this.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.createElement('td', { className: CELL });\n var weekAnchor = this.createElement('span');\n if (day % 7 === 0 && this.weekNumber) {\n // 6 days are added to get Last day of the week and 3 days are added to get middle day of the week.\n var numberOfDays = this.weekRule === 'FirstDay' ? 6 : (this.weekRule === 'FirstFourDayWeek' ? 3 : 0);\n var finalDate = new Date(localDate.getFullYear(), localDate.getMonth(), (localDate.getDate() + numberOfDays));\n weekAnchor.textContent = '' + this.getWeek(finalDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.dayCell(localDate);\n var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, { format: 'd', type: 'date', skeleton: 'yMd' });\n var disabled = (this.min > localDate) || (this.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n if (currentMonth !== localDate.getMonth()) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.renderDayCellArgs;\n this.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n var selectDate = new Date(this.checkValue(value));\n var argsDate = new Date(this.checkValue(argument.date));\n if (multiSelection) {\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd' }));\n var tempDateString = +new Date(this.globalize.formatDate(values[index], { type: 'date', skeleton: 'yMd' }));\n if (localDateString === tempDateString) {\n values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (selectDate && +selectDate === +argsDate) {\n this.setProperties({ value: null }, true);\n }\n }\n if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.renderDayCellArgs.date === +this.todayDate) {\n this.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n // to set the value as null while setting the disabled date onProperty change.\n // if (args.isDisabled && +this.value === +args.date) {\n // this.setProperties({ value: null }, true);\n // }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var currentTarget = void 0;\n if (!isNullOrUndefined(e) && e.type === 'click') {\n currentTarget = e.currentTarget;\n }\n if (multiSelection && !isNullOrUndefined(values) && !disabledCls) {\n for (var tempValue = 0; tempValue < values.length; tempValue++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(localDate, formatOptions);\n var tempDateString = this.globalize.formatDate(values[tempValue], formatOptions);\n if ((localDateString === tempDateString && this.getDateVal(localDate, values[tempValue]))\n || (this.getDateVal(localDate, value))) {\n addClass([tdEle], SELECTED);\n }\n if (!isNullOrUndefined(currentTarget) && currentTarget.innerText === tdEle.innerText &&\n this.previousDates && tdEle.classList.contains(SELECTED) && currentTarget.classList.contains(SELECTED)) {\n removeClass([tdEle], SELECTED);\n this.previousDates = false;\n var copyValues = this.copyValues(values);\n for (var i = 0; i < copyValues.length; i++) {\n var type_1 = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions_1 = { format: null, type: 'date', skeleton: 'short', calendar: type_1 };\n var localDateString_1 = this.globalize.formatDate(date, formatOptions_1);\n var tempDateString_1 = this.globalize.formatDate(copyValues[i], formatOptions_1);\n if (localDateString_1 === tempDateString_1) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n values.splice(index, 1);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (values.length <= 0) {\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!disabledCls && this.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n if (!isNullOrUndefined(date) && date.getFullYear() === todayDate.getFullYear() && date.getMonth() === todayDate.getMonth()\n && date.getDate() === todayDate.getDate()) {\n addClass([tdEle], TODAY);\n }\n tdEles.push(this.renderDayCellArgs.element);\n localDate = new Date(+minMaxDate);\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n return tdEles;\n };\n CalendarBase.prototype.updateFocus = function (otherMonth, disabled, localDate, tableElement, currentDate) {\n if (currentDate.getDate() === localDate.getDate() && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n else {\n // eslint-disable-next-line radix\n if (currentDate >= this.max && parseInt(tableElement.id, 0) === +this.max && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n // eslint-disable-next-line radix\n if (currentDate <= this.min && parseInt(tableElement.id, 0) === +this.min && !otherMonth && !disabled) {\n addClass([tableElement], FOCUSEDDATE);\n }\n }\n };\n CalendarBase.prototype.renderYears = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date(this.checkValue(this.currentDate));\n var mon = curDate.getMonth();\n var yr = curDate.getFullYear();\n var localDate = curDate;\n var curYrs = localDate.getFullYear();\n var minYr = new Date(this.checkValue(this.min)).getFullYear();\n var minMonth = new Date(this.checkValue(this.min)).getMonth();\n var maxYr = new Date(this.checkValue(this.max)).getFullYear();\n var maxMonth = new Date(this.checkValue(this.max)).getMonth();\n localDate.setMonth(0);\n this.titleUpdate(this.currentDate, 'months');\n localDate.setDate(1);\n for (var month = 0; month < 12; ++month) {\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n var localMonth = (value && (value).getMonth() === localDate.getMonth());\n var select = (value && (value).getFullYear() === yr && localMonth);\n dayLink.textContent = this.toCapitalize(this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'MMM'\n }));\n if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n localDate.setDate(1);\n localDate.setMonth(localDate.getMonth() + 1);\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, YEAR, e, value);\n };\n CalendarBase.prototype.renderDecades = function (e, value) {\n this.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date(this.checkValue(this.currentDate));\n localDate.setMonth(0);\n localDate.setDate(1);\n var localYr = localDate.getFullYear();\n var startYr = new Date(localDate.setFullYear((localYr - localYr % 10)));\n var endYr = new Date(localDate.setFullYear((localYr - localYr % 10 + (10 - 1))));\n var startFullYr = startYr.getFullYear();\n var endFullYr = endYr.getFullYear();\n var startHdrYr = this.globalize.formatDate(startYr, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n var endHdrYr = this.globalize.formatDate(endYr, { format: null, type: 'dateTime', skeleton: 'y' });\n this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n var startYear = start.getFullYear();\n for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n var year = startYear + rowIterator;\n localDate.setFullYear(year);\n var tdEle = this.dayCell(localDate);\n var dayLink = this.createElement('span');\n dayLink.textContent = this.globalize.formatDate(localDate, {\n format: null, type: 'dateTime', skeleton: 'y'\n });\n if ((year < startFullYr) || (year > endFullYr)) {\n addClass([tdEle], OTHERDECADE);\n if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n }\n else if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n year > new Date(this.checkValue(this.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.clickHandler, this);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n CalendarBase.prototype.dayCell = function (localDate) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: type };\n var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var value;\n if (!isNullOrUndefined(date)) {\n value = date.valueOf();\n }\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false' }\n };\n return this.createElement('td', attrs);\n };\n CalendarBase.prototype.firstDay = function (date) {\n var collection = this.currentView() !== 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '');\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.lastDay = function (date, view) {\n var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n if (view !== 2) {\n var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n if (timeOffset) {\n lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n }\n return this.findLastDay(lastDate);\n }\n else {\n return this.findLastDay(this.firstDay(lastDate));\n }\n };\n CalendarBase.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n CalendarBase.prototype.findLastDay = function (date) {\n var collection = this.currentView() === 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '') :\n this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n if (collection.length) {\n for (var i = collection.length - 1; i >= 0; i--) {\n if (!collection[i].classList.contains(DISABLED)) {\n // eslint-disable-next-line radix\n date = new Date(parseInt(collection[i].id, 0));\n break;\n }\n }\n }\n return date;\n };\n CalendarBase.prototype.removeTableHeadElement = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n else {\n if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n detach(this.tableHeadElement);\n }\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n var view = this.getViewNumber(this.currentView());\n var trEle;\n this.tableBodyElement = this.createElement('tbody');\n this.table.appendChild(this.tableBodyElement);\n removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.contentElement, this.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowIterator = 0;\n for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n trEle = this.createElement('tr');\n for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n addClass([elements[rowIterator].children[0]], [LINK]);\n rippleEffect(elements[rowIterator].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowIterator]);\n if (this.weekNumber && rowIterator === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].\n classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.weekNumber) {\n if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowIterator = rowIterator + 0;\n this.tableBodyElement.appendChild(trEle);\n }\n this.table.querySelector('tbody').className = this.effect;\n if (this.calendarMode === 'Gregorian') {\n this.iconHandler();\n }\n else {\n this.islamicModule.islamicIconHandler();\n }\n if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n this.navigateHandler(e);\n }\n this.setAriaActiveDescendant();\n };\n CalendarBase.prototype.clickHandler = function (e, value) {\n this.clickEventEmitter(e);\n var eve = e.currentTarget;\n var view = this.getViewNumber(this.currentView());\n if (eve.classList.contains(OTHERMONTH)) {\n this.contentClick(e, 0, null, value);\n }\n else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.contentClick(e, 1, null, value);\n }\n else if (2 === view) {\n this.contentClick(e, 1, null, value);\n }\n else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n this.selectDate(e, this.getIdValue(e, null), null);\n }\n else {\n this.contentClick(e, 0, eve, value);\n }\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n // Content click event handler required for extended components\n CalendarBase.prototype.clickEventEmitter = function (e) {\n e.preventDefault();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.contentClick = function (e, view, element, value) {\n var currentView = this.getViewNumber(this.currentView());\n var d = this.getIdValue(e, element);\n switch (view) {\n case 0:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n detach(this.tableBodyElement);\n this.currentDate = d;\n this.effect = ZOOMIN;\n this.renderMonths(e);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setMonth(d.getMonth());\n if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n this.currentDate.setDate(0);\n }\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.currentDate = d;\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderMonths(e);\n }\n break;\n case 1:\n if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n this.selectDate(e, d, null);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n this.currentDate.setFullYear(d.getFullYear());\n }\n else {\n this.islamicPreviousHeader = this.headerElement.textContent;\n var islamicDate = this.islamicModule.getIslamicDate(d);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, islamicDate.month, 1);\n }\n this.effect = ZOOMIN;\n detach(this.tableBodyElement);\n this.renderYears(e);\n }\n }\n };\n CalendarBase.prototype.switchView = function (view, e, multiSelection, isCustomDate) {\n switch (view) {\n case 0:\n detach(this.tableBodyElement);\n this.renderMonths(e, null, isCustomDate);\n break;\n case 1:\n detach(this.tableBodyElement);\n this.renderYears(e);\n break;\n case 2:\n detach(this.tableBodyElement);\n this.renderDecades(e);\n }\n };\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n CalendarBase.prototype.getModuleName = function () {\n return 'calendar';\n };\n /**\n *\n * @returns {void}\n * @deprecated\n */\n CalendarBase.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n return modules;\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n CalendarBase.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarBaseModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarBaseModel} oldProp - Returns the previous property value of the component.\n * @param {boolean} multiSelection - - Specifies whether multiple date selection is enabled or not.\n * @param {Date[]} values - Specifies the dates.\n * @returns {void}\n * @private\n */\n CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp, multiSelection, values) {\n this.effect = '';\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'enableRtl':\n if (newProp.enableRtl) {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.add('e-rtl');\n }\n else {\n this.calendarElement.classList.add('e-rtl');\n }\n }\n else {\n if (this.getModuleName() === 'calendar') {\n this.element.classList.remove('e-rtl');\n }\n else {\n this.calendarElement.classList.remove('e-rtl');\n }\n }\n break;\n case 'dayHeaderFormat':\n this.getCultureValues();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n }\n this.adjustLongHeaderSize();\n break;\n case 'min':\n case 'max':\n this.rangeValidation(this.min, this.max);\n if (prop === 'min') {\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(newProp.min))) }, true);\n }\n else {\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(newProp.max))) }, true);\n }\n this.setProperties({ start: this.currentView() }, true);\n if (this.tableBodyElement) {\n detach(this.tableBodyElement);\n }\n this.minMaxUpdate();\n if (multiSelection) {\n this.validateValues(multiSelection, values);\n }\n if (this.getModuleName() !== 'datepicker') {\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentBody();\n }\n if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n else {\n if ((this.footer) && (this.todayElement) && this.todayElement.classList.contains('e-disabled')) {\n removeClass([this.todayElement], DISABLED);\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = null;\n this.createContentFooter();\n }\n }\n break;\n case 'start':\n case 'depth':\n case 'weekNumber':\n case 'firstDayOfWeek':\n case 'weekRule':\n this.checkView();\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n if (this.getModuleName() !== 'datepicker') {\n this.createContentHeader();\n this.createContentBody();\n }\n else if (this.calendarElement) {\n this.createContentHeader();\n this.createContentBody();\n }\n this.l10.setLocale(this.locale);\n this.updateFooter();\n break;\n case 'showTodayButton':\n if (newProp.showTodayButton) {\n this.createContentFooter();\n }\n else {\n if (!isNullOrUndefined(this.todayElement) && !isNullOrUndefined(this.footer)) {\n detach(this.todayElement);\n detach(this.footer);\n this.todayElement = this.footer = undefined;\n }\n }\n this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n break;\n }\n }\n };\n /**\n * values property updated with considered disabled dates of the calendar.\n *\n * @param {boolean} multiSelection - Specifies whether multiple date selection is enabled.\n * @param {Date[]} values - Specifies the dates to validate.\n * @returns {void}\n */\n CalendarBase.prototype.validateValues = function (multiSelection, values) {\n if (multiSelection && !isNullOrUndefined(values) && values.length > 0) {\n var copyValues = this.copyValues(values);\n for (var skipIndex = 0; skipIndex < copyValues.length; skipIndex++) {\n var tempValue = copyValues[skipIndex];\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var tempValueString = void 0;\n if (this.calendarMode === 'Gregorian') {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'date', skeleton: 'yMd' });\n }\n else {\n tempValueString = this.globalize.formatDate(tempValue, { type: 'dateTime', skeleton: 'full', calendar: 'islamic' });\n }\n var minFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var minStringValue = this.globalize.formatDate(this.min, minFormatOption);\n var minString = minStringValue;\n var maxFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n var maxStringValue = this.globalize.formatDate(this.max, maxFormatOption);\n var maxString = maxStringValue;\n if (+new Date(tempValueString) < +new Date(minString) ||\n +new Date(tempValueString) > +new Date(maxString)) {\n copyValues.splice(skipIndex, 1);\n skipIndex = -1;\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n };\n CalendarBase.prototype.setValueUpdate = function () {\n if (!isNullOrUndefined(this.tableBodyElement)) {\n detach(this.tableBodyElement);\n this.setProperties({ start: this.currentView() }, true);\n this.createContentBody();\n }\n };\n CalendarBase.prototype.copyValues = function (values) {\n var copyValues = [];\n if (!isNullOrUndefined(values) && values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n copyValues.push(new Date(+values[index]));\n }\n }\n return copyValues;\n };\n CalendarBase.prototype.titleUpdate = function (date, view) {\n var globalize = new Internationalization(this.locale);\n var dayFormatOptions;\n var monthFormatOptions;\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n if (this.calendarMode === 'Gregorian') {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM', calendar: type });\n monthFormatOptions = globalize.formatDate(date, {\n format: null, type: 'dateTime', skeleton: 'y', calendar: type\n });\n }\n else {\n dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'MMMM y', calendar: type });\n monthFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'y', calendar: type });\n }\n switch (view) {\n case 'days':\n this.headerTitleElement.textContent = this.toCapitalize(dayFormatOptions);\n break;\n case 'months':\n this.headerTitleElement.textContent = monthFormatOptions;\n }\n };\n CalendarBase.prototype.setActiveDescendant = function () {\n var id;\n var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var title;\n var view = this.currentView();\n if (view === 'Month') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full', calendar: type });\n }\n else if (view === 'Year') {\n if (type !== 'islamic') {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'yMMMM', calendar: type });\n }\n else {\n title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'GyMMM', calendar: type });\n }\n }\n else {\n title = this.globalize.formatDate(this.currentDate, {\n format: null, type: 'date', skeleton: 'y', calendar: type\n });\n }\n if (selectedEle || focusedEle) {\n if (!isNullOrUndefined(selectedEle)) {\n selectedEle.setAttribute('aria-selected', 'true');\n }\n (focusedEle || selectedEle).setAttribute('aria-label', title);\n id = (focusedEle || selectedEle).getAttribute('id');\n }\n return id;\n };\n CalendarBase.prototype.iconHandler = function () {\n new Date(this.checkValue(this.currentDate)).setDate(1);\n switch (this.currentView()) {\n case 'Month':\n this.previousIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Year':\n this.previousIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n break;\n case 'Decade':\n this.previousIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n this.nextIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n }\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n CalendarBase.prototype.destroy = function () {\n if (this.getModuleName() === 'calendar' && this.element) {\n removeClass([this.element], [ROOT]);\n }\n else {\n if (this.calendarElement && this.element) {\n removeClass([this.element], [ROOT]);\n }\n }\n if (this.getModuleName() === 'calendar' && this.element) {\n if (!isNullOrUndefined(this.headerTitleElement)) {\n EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n }\n if (this.todayElement) {\n EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n }\n this.previousIconHandler(true);\n this.nextIconHandler(true);\n this.keyboardModule.destroy();\n this.element.removeAttribute('data-role');\n if (!isNullOrUndefined(this.calendarEleCopy.getAttribute('tabindex'))) {\n this.element.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.element.removeAttribute('tabindex');\n }\n }\n if (this.element) {\n this.element.innerHTML = '';\n }\n this.todayElement = null;\n this.tableBodyElement = null;\n this.renderDayCellArgs = null;\n this.headerElement = null;\n this.nextIcon = null;\n this.table = null;\n this.tableHeadElement = null;\n this.previousIcon = null;\n this.headerTitleElement = null;\n this.footer = null;\n this.contentElement = null;\n _super.prototype.destroy.call(this);\n };\n CalendarBase.prototype.title = function (e) {\n var currentView = this.getViewNumber(this.currentView());\n this.effect = ZOOMIN;\n this.switchView(++currentView, e);\n };\n CalendarBase.prototype.getViewNumber = function (stringVal) {\n if (stringVal === 'Month') {\n return 0;\n }\n else if (stringVal === 'Year') {\n return 1;\n }\n else {\n return 2;\n }\n };\n CalendarBase.prototype.navigateTitle = function (e) {\n e.preventDefault();\n this.title(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.previous = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, -1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, -10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigatePrevious = function (e) {\n e.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.previous();\n }\n else {\n this.islamicModule.islamicPrevious();\n }\n this.triggerNavigate(e);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n CalendarBase.prototype.next = function () {\n this.effect = '';\n var currentView = this.getViewNumber(this.currentView());\n switch (this.currentView()) {\n case 'Month':\n this.addMonths(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Year':\n this.addYears(this.currentDate, 1);\n this.switchView(currentView);\n break;\n case 'Decade':\n this.addYears(this.currentDate, 10);\n this.switchView(currentView);\n break;\n }\n };\n CalendarBase.prototype.navigateNext = function (eve) {\n eve.preventDefault();\n if (this.calendarMode === 'Gregorian') {\n this.next();\n }\n else {\n this.islamicModule.islamicNext();\n }\n this.triggerNavigate(eve);\n if (this.getModuleName() === 'calendar') {\n this.table.focus();\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n */\n CalendarBase.prototype.navigateTo = function (view, date, isCustomDate) {\n if (+date >= +this.min && +date <= +this.max) {\n this.currentDate = date;\n }\n if (+date <= +this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n if (+date >= +this.max) {\n this.currentDate = new Date(this.checkValue(this.max));\n }\n if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n view = this.depth;\n }\n }\n this.switchView(this.getViewNumber(view), null, null, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n */\n CalendarBase.prototype.currentView = function () {\n if (this.contentElement.classList.contains(YEAR)) {\n return 'Year';\n }\n else if (this.contentElement.classList.contains(DECADE)) {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n CalendarBase.prototype.getDateVal = function (date, value) {\n return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n CalendarBase.prototype.getCultureObjects = function (ld, c) {\n var gregorianFormat = '.dates.calendars.gregorian.days.format.' + this.dayHeaderFormat.toLowerCase();\n var islamicFormat = '.dates.calendars.islamic.days.format.' + this.dayHeaderFormat.toLowerCase();\n var mainVal = 'main.';\n if (this.calendarMode === 'Gregorian') {\n return getValue(mainVal + '' + this.locale + gregorianFormat, ld);\n }\n else {\n return getValue('main.' + '' + this.locale + islamicFormat, ld);\n }\n };\n CalendarBase.prototype.getWeek = function (d) {\n var currentDate = new Date(this.checkValue(d)).valueOf();\n var date = new Date(d.getFullYear(), 0, 1).valueOf();\n return Math.ceil((((currentDate - date) + dayMilliSeconds) / dayMilliSeconds) / 7);\n };\n CalendarBase.prototype.setStartDate = function (date, time) {\n var tzOffset = date.getTimezoneOffset();\n var d = new Date(date.getTime() + time);\n var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n };\n CalendarBase.prototype.addMonths = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setMonth(date.getMonth() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year, (islamicDate.month) + i, 1);\n }\n };\n CalendarBase.prototype.addYears = function (date, i) {\n if (this.calendarMode === 'Gregorian') {\n var day = date.getDate();\n date.setDate(1);\n date.setFullYear(date.getFullYear() + i);\n date.setDate(Math.min(day, this.getMaxDays(date)));\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n this.currentDate = this.islamicModule.toGregorian(islamicDate.year + i, (islamicDate.month), 1);\n }\n };\n CalendarBase.prototype.getIdValue = function (e, element) {\n var eve;\n if (e) {\n eve = e.currentTarget;\n }\n else {\n eve = element;\n }\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: type };\n // eslint-disable-next-line radix\n var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n var date = this.globalize.parseDate(dateString, dateFormatOptions);\n var value = date.valueOf() - date.valueOf() % 1000;\n return new Date(value);\n //return this.globalize.parseDate(dateString, dateFormatOptions);\n };\n CalendarBase.prototype.adjustLongHeaderSize = function () {\n removeClass([this.element], DAYHEADERLONG);\n if (this.dayHeaderFormat === 'Wide') {\n addClass([this.getModuleName() === 'calendar' ? this.element : this.calendarElement], DAYHEADERLONG);\n }\n };\n CalendarBase.prototype.selectDate = function (e, date, node, multiSelection, values) {\n var element = node || e.currentTarget;\n this.isDateSelected = false;\n if (this.currentView() === 'Decade') {\n this.setDateDecade(this.currentDate, date.getFullYear());\n }\n else if (this.currentView() === 'Year') {\n this.setDateYear(this.currentDate, date);\n }\n else {\n if (multiSelection && !this.checkPresentDate(date, values)) {\n var copyValues = this.copyValues(values);\n if (!isNullOrUndefined(values) && copyValues.length > 0) {\n copyValues.push(new Date(this.checkValue(date)));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: values[values.length - 1] }, true);\n }\n else {\n this.setProperties({ values: [new Date(this.checkValue(date))] }, true);\n }\n }\n else {\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n }\n this.currentDate = new Date(this.checkValue(date));\n }\n var tableBodyElement = closest(element, '.' + ROOT);\n if (isNullOrUndefined(tableBodyElement)) {\n tableBodyElement = this.tableBodyElement;\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n }\n if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n }\n if (multiSelection) {\n var copyValues = this.copyValues(values);\n var collection = Array.prototype.slice.call(this.tableBodyElement.querySelectorAll('td'));\n for (var index = 0; index < collection.length; index++) {\n var tempElement = tableBodyElement.querySelectorAll('td' + '.' + FOCUSEDDATE)[0];\n var selectedElement = tableBodyElement.querySelectorAll('td' + '.' + SELECTED)[0];\n if (collection[index] === tempElement) {\n removeClass([collection[index]], FOCUSEDDATE);\n }\n if (collection[index] === selectedElement &&\n !this.checkPresentDate(new Date(parseInt(selectedElement.getAttribute('id').split('_')[0], 10)), values)) {\n removeClass([collection[index]], SELECTED);\n }\n }\n if (element.classList.contains(SELECTED)) {\n removeClass([element], SELECTED);\n for (var i = 0; i < copyValues.length; i++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n var localDateString = this.globalize.formatDate(date, formatOptions);\n var tempDateString = this.globalize.formatDate(copyValues[i], formatOptions);\n if (localDateString === tempDateString) {\n var index = copyValues.indexOf(copyValues[i]);\n copyValues.splice(index, 1);\n addClass([element], FOCUSEDDATE);\n }\n }\n this.setProperties({ values: copyValues }, true);\n }\n else {\n addClass([element], SELECTED);\n }\n }\n else {\n addClass([element], SELECTED);\n }\n this.isDateSelected = true;\n };\n CalendarBase.prototype.checkPresentDate = function (dates, values) {\n var previousValue = false;\n if (!isNullOrUndefined(values)) {\n for (var checkPrevious = 0; checkPrevious < values.length; checkPrevious++) {\n var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n var localDateString = this.globalize.formatDate(dates, {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n var tempDateString = this.globalize.formatDate(values[checkPrevious], {\n format: null, type: 'date', skeleton: 'short', calendar: type\n });\n if (localDateString === tempDateString) {\n previousValue = true;\n }\n }\n }\n return previousValue;\n };\n CalendarBase.prototype.setAriaActiveDescendant = function () {\n attributes(this.table, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n };\n CalendarBase.prototype.previousIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n addClass([this.previousIcon], '' + DISABLED);\n addClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n removeClass([this.previousIcon], '' + DISABLED);\n removeClass([this.previousIcon], '' + OVERLAY);\n this.previousIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.renderDayCellEvent = function (args) {\n extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n CalendarBase.prototype.navigatedEvent = function (eve) {\n extend(this.navigatedArgs, { name: 'navigated', event: eve });\n this.trigger('navigated', this.navigatedArgs);\n };\n CalendarBase.prototype.triggerNavigate = function (event) {\n this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n this.navigatedEvent(event);\n };\n CalendarBase.prototype.nextIconHandler = function (disabled) {\n if (disabled) {\n if (!isNullOrUndefined(this.previousIcon)) {\n EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n addClass([this.nextIcon], DISABLED);\n addClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'true');\n }\n }\n else {\n EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n removeClass([this.nextIcon], DISABLED);\n removeClass([this.nextIcon], OVERLAY);\n this.nextIcon.setAttribute('aria-disabled', 'false');\n }\n };\n CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n var start = endDate.getFullYear();\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (startDate.getFullYear() > end) {\n result = 1;\n }\n else if (startDate.getFullYear() < start) {\n result = -1;\n }\n return result;\n };\n CalendarBase.prototype.isMinMaxRange = function (date) {\n return +date >= +this.min && +date <= +this.max;\n };\n CalendarBase.prototype.isMonthYearRange = function (date) {\n if (this.calendarMode === 'Gregorian') {\n return date.getMonth() >= this.min.getMonth()\n && date.getFullYear() >= this.min.getFullYear()\n && date.getMonth() <= this.max.getMonth()\n && date.getFullYear() <= this.max.getFullYear();\n }\n else {\n var islamicDate = this.islamicModule.getIslamicDate(date);\n return islamicDate.month >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).month\n && islamicDate.year >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).year\n && islamicDate.month <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).month\n && islamicDate.year <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).year;\n }\n };\n CalendarBase.prototype.compareYear = function (start, end) {\n return this.compare(start, end, 0);\n };\n CalendarBase.prototype.compareDecade = function (start, end) {\n return this.compare(start, end, 10);\n };\n CalendarBase.prototype.shiftArray = function (array, i) {\n return array.slice(i).concat(array.slice(0, i));\n };\n CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n var column = i;\n var value = new Date(+date);\n if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n while (this.findNextTD(new Date(+date), column, max, min)) {\n column += i;\n }\n var rangeValue = new Date(value.setDate(value.getDate() + column));\n column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n }\n date.setDate(date.getDate() + column);\n };\n CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n var value = new Date(date.setDate(date.getDate() + column));\n var collection = [];\n var isDisabled = false;\n if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n var tdEles = void 0;\n if (this.calendarMode === 'Gregorian') {\n tdEles = this.renderDays(value);\n }\n else {\n tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n }\n collection = tdEles.filter(function (element) {\n return element.classList.contains(DISABLED);\n });\n }\n else {\n collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n }\n if (+value <= (+(max)) && +value >= (+(min))) {\n if (collection.length) {\n for (var i = 0; i < collection.length; i++) {\n // eslint-disable-next-line radix\n isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n if (isDisabled) {\n break;\n }\n }\n }\n }\n return isDisabled;\n };\n CalendarBase.prototype.getMaxDays = function (d) {\n var date;\n var tmpDate = new Date(this.checkValue(d));\n date = 28;\n var month = tmpDate.getMonth();\n while (tmpDate.getMonth() === month) {\n ++date;\n tmpDate.setDate(date);\n }\n return date - 1;\n };\n CalendarBase.prototype.setDateDecade = function (date, year) {\n date.setFullYear(year);\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.setDateYear = function (date, value) {\n date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n if (value.getMonth() !== date.getMonth()) {\n date.setDate(0);\n this.currentDate = new Date(this.checkValue(value));\n }\n this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n };\n CalendarBase.prototype.compareMonth = function (start, end) {\n var result;\n if (start.getFullYear() > end.getFullYear()) {\n result = 1;\n }\n else if (start.getFullYear() < end.getFullYear()) {\n result = -1;\n }\n else {\n result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n }\n return result;\n };\n CalendarBase.prototype.checkValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n CalendarBase.prototype.checkView = function () {\n if (this.start !== 'Decade' && this.start !== 'Year') {\n this.setProperties({ start: 'Month' }, true);\n }\n if (this.depth !== 'Decade' && this.depth !== 'Year') {\n this.setProperties({ depth: 'Month' }, true);\n }\n if (this.getViewNumber(this.depth) > this.getViewNumber(this.start)) {\n this.setProperties({ depth: 'Month' }, true);\n }\n };\n CalendarBase.prototype.getDate = function (date, timezone) {\n if (timezone) {\n date = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n }\n return date;\n };\n __decorate([\n Property(new Date(1900, 0, 1))\n ], CalendarBase.prototype, \"min\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"cssClass\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], CalendarBase.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], CalendarBase.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], CalendarBase.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"weekNumber\", void 0);\n __decorate([\n Property('FirstDay')\n ], CalendarBase.prototype, \"weekRule\", void 0);\n __decorate([\n Property(true)\n ], CalendarBase.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], CalendarBase.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], CalendarBase.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], CalendarBase.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], CalendarBase.prototype, \"renderDayCell\", void 0);\n CalendarBase = __decorate([\n NotifyPropertyChanges\n ], CalendarBase);\n return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n * <div id=\"calendar\"/>\n * ```\n * ```typescript\n * <script>\n * var calendarObj = new Calendar({ value: new Date() });\n * calendarObj.appendTo(\"#calendar\");\n * </script>\n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n __extends(Calendar, _super);\n /**\n * Initialized new instance of Calendar Class.\n * Constructor for creating the widget\n *\n * @param {CalendarModel} options - Specifies the Calendar model.\n * @param {string | HTMLElement} element - Specifies the element to render as component.\n * @private\n */\n function Calendar(options, element) {\n return _super.call(this, options, element) || this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.render = function () {\n if (this.calendarMode === 'Islamic' && this.islamicModule === undefined) {\n throwError('Requires the injectable Islamic modules to render Calendar in Islamic mode');\n }\n if (this.isMultiSelection && typeof this.values === 'object' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var tempValues = [];\n var copyValues = [];\n for (var limit = 0; limit < this.values.length; limit++) {\n if (tempValues.indexOf(+this.values[limit]) === -1) {\n tempValues.push(+this.values[limit]);\n copyValues.push(this.values[limit]);\n }\n }\n this.setProperties({ values: copyValues }, true);\n for (var index = 0; index < this.values.length; index++) {\n if (!this.checkDateValue(this.values[index])) {\n if (typeof (this.values[index]) === 'string' && this.checkDateValue(new Date(this.checkValue(this.values[index])))) {\n var copyDate = new Date(this.checkValue(this.values[index]));\n this.values.splice(index, 1);\n this.values.splice(index, 0, copyDate);\n }\n else {\n this.values.splice(index, 1);\n }\n }\n }\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n this.previousValues = this.values.length;\n }\n this.validateDate();\n this.minMaxUpdate();\n if (this.getModuleName() === 'calendar') {\n this.setEnable(this.enabled);\n this.setClass(this.cssClass);\n }\n _super.prototype.render.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n }\n this.setTimeZone(this.serverTimezoneOffset);\n }\n this.renderComplete();\n };\n Calendar.prototype.setEnable = function (enable) {\n if (!enable) {\n addClass([this.element], DISABLED);\n }\n else {\n removeClass([this.element], DISABLED);\n }\n };\n Calendar.prototype.setClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCssClass) && oldCssClass !== '') {\n removeClass([this.element], oldCssClass.split(' '));\n }\n if (!isNullOrUndefined(newCssClass)) {\n addClass([this.element], newCssClass.split(' '));\n }\n };\n Calendar.prototype.isDayLightSaving = function () {\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n Calendar.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var serverTimezoneDiff = offsetValue;\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date(this.value.getTime() + (timeZoneDiff * 60 * 60 * 1000));\n }\n };\n Calendar.prototype.formResetHandler = function () {\n this.setProperties({ value: null }, true);\n };\n Calendar.prototype.validateDate = function () {\n if (typeof this.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(this.checkValue(this.value))) }, true); // persist the value property.\n }\n _super.prototype.validateDate.call(this, this.value);\n if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n this.currentDate = new Date(this.checkValue(this.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n };\n Calendar.prototype.minMaxUpdate = function () {\n if (this.getModuleName() === 'calendar') {\n if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n }\n if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.min);\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n _super.prototype.minMaxUpdate.call(this, this.max);\n }\n }\n }\n else {\n _super.prototype.minMaxUpdate.call(this, this.value);\n }\n };\n Calendar.prototype.generateTodayVal = function (value) {\n var tempValue = new Date();\n if (!isNullOrUndefined(this.timezone)) {\n tempValue = _super.prototype.getDate.call(this, tempValue, this.timezone);\n }\n if (value && isNullOrUndefined(this.timezone)) {\n tempValue.setHours(value.getHours());\n tempValue.setMinutes(value.getMinutes());\n tempValue.setSeconds(value.getSeconds());\n tempValue.setMilliseconds(value.getMilliseconds());\n }\n else {\n tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n }\n return tempValue;\n };\n Calendar.prototype.todayButtonClick = function (e) {\n if (this.showTodayButton) {\n var tempValue = this.generateTodayVal(this.value);\n this.setProperties({ value: tempValue }, true);\n this.isTodayClicked = true;\n this.todayButtonEvent = e;\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (!_super.prototype.checkPresentDate.call(this, tempValue, this.values)) {\n copyValues.push(tempValue);\n this.setProperties({ values: copyValues });\n }\n }\n _super.prototype.todayButtonClick.call(this, e, new Date(+this.value));\n }\n };\n Calendar.prototype.keyActionHandle = function (e) {\n _super.prototype.keyActionHandle.call(this, e, this.value, this.isMultiSelection);\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n Calendar.prototype.preRender = function () {\n var _this = this;\n this.changeHandler = function (e) {\n _this.triggerChange(e);\n };\n this.checkView();\n _super.prototype.preRender.call(this, this.value);\n };\n /**\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.createContent = function () {\n this.previousDate = this.value;\n this.previousDateTime = this.value;\n _super.prototype.createContent.call(this);\n };\n Calendar.prototype.minMaxDate = function (localDate) {\n return _super.prototype.minMaxDate.call(this, localDate);\n };\n Calendar.prototype.renderMonths = function (e, value, isCustomDate) {\n _super.prototype.renderMonths.call(this, e, this.value, isCustomDate);\n };\n Calendar.prototype.renderDays = function (currentDate, value, isMultiSelect, values, isCustomDate, e) {\n var tempDays = _super.prototype.renderDays.call(this, currentDate, this.value, this.isMultiSelection, this.values, isCustomDate, e);\n if (this.isMultiSelection) {\n _super.prototype.validateValues.call(this, this.isMultiSelection, this.values);\n }\n return tempDays;\n };\n Calendar.prototype.renderYears = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderYears.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderYears(e, this.value);\n }\n };\n Calendar.prototype.renderDecades = function (e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderDecades.call(this, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderDecade(e, this.value);\n }\n };\n Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n if (this.calendarMode === 'Gregorian') {\n _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n }\n else {\n this.islamicModule.islamicRenderTemplate(elements, count, classNm, e, this.value);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n };\n Calendar.prototype.clickHandler = function (e) {\n var eve = e.currentTarget;\n this.isPopupClicked = true;\n if (eve.classList.contains(OTHERMONTH)) {\n if (this.isMultiSelection) {\n var copyValues = this.copyValues(this.values);\n if (copyValues.toString().indexOf(this.getIdValue(e, null).toString()) === -1) {\n copyValues.push(this.getIdValue(e, null));\n this.setProperties({ values: copyValues }, true);\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n else {\n this.previousDates = true;\n }\n }\n else {\n this.setProperties({ value: this.getIdValue(e, null) }, true);\n }\n }\n var storeView = this.currentView();\n _super.prototype.clickHandler.call(this, e, this.value);\n if (this.isMultiSelection && this.currentDate !== this.value &&\n !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0]) && storeView === 'Year') {\n this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n }\n };\n Calendar.prototype.switchView = function (view, e, isMultiSelection, isCustomDate) {\n _super.prototype.switchView.call(this, view, e, this.isMultiSelection, isCustomDate);\n };\n /**\n * To get component name\n *\n * @returns {string} Return the component name.\n * @private\n */\n Calendar.prototype.getModuleName = function () {\n _super.prototype.getModuleName.call(this);\n return 'calendar';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n Calendar.prototype.getPersistData = function () {\n _super.prototype.getPersistData.call(this);\n var keyEntity = ['value', 'values'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Called internally if any of the property value changed.\n *\n * @param {CalendarModel} newProp - Returns the dynamic property value of the component.\n * @param {CalendarModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n this.effect = '';\n this.rangeValidation(this.min, this.max);\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n if (this.isDateSelected) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: new Date(this.checkValue(newProp.value)) }, true);\n }\n else {\n newProp.value = new Date(this.checkValue(newProp.value));\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: oldProp.value }, true);\n }\n this.update();\n }\n break;\n case 'values':\n if (this.isDateSelected) {\n if (typeof newProp.values === 'string' || typeof newProp.values === 'number') {\n this.setProperties({ values: null }, true);\n }\n else {\n var copyValues = this.copyValues(this.values);\n for (var index = 0; index < copyValues.length; index++) {\n var tempDate = copyValues[index];\n if (this.checkDateValue(tempDate) && !_super.prototype.checkPresentDate.call(this, tempDate, copyValues)) {\n copyValues.push(tempDate);\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.values.length > 0) {\n this.setProperties({ value: newProp.values[newProp.values.length - 1] }, true);\n }\n }\n this.validateValues(this.isMultiSelection, this.values);\n this.update();\n }\n break;\n case 'isMultiSelection':\n if (this.isDateSelected) {\n this.setProperties({ isMultiSelection: newProp.isMultiSelection }, true);\n this.update();\n }\n break;\n case 'enabled':\n this.setEnable(this.enabled);\n break;\n case 'cssClass':\n if (this.getModuleName() === 'calendar') {\n this.setClass(newProp.cssClass, oldProp.cssClass);\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp, this.isMultiSelection, this.values);\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n /**\n * Destroys the widget.\n *\n * @returns {void}\n */\n Calendar.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n if (this.getModuleName() === 'calendar') {\n var form = closest(this.element, 'form');\n if (form) {\n EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n }\n }\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.navigateTo = function (view, date, isCustomDate) {\n this.minMaxUpdate();\n _super.prototype.navigateTo.call(this, view, date, isCustomDate);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n * @deprecated\n */\n Calendar.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * This method is used to add the single or multiple dates to the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates to be added to the values property of the Calendar.\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.addDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number') {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && (dates).length > 0) {\n var tempDates = dates;\n for (var i = 0; i < tempDates.length; i++) {\n if (this.checkDateValue(tempDates[i]) && !_super.prototype.checkPresentDate.call(this, tempDates[i], copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push(tempDates[i]);\n }\n else {\n copyValues = [new Date(+tempDates[i])];\n }\n }\n }\n }\n else {\n if (this.checkDateValue(dates) && !_super.prototype.checkPresentDate.call(this, dates, copyValues)) {\n if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n copyValues.push((dates));\n }\n else {\n copyValues = [new Date(+dates)];\n }\n }\n }\n this.setProperties({ values: copyValues }, true);\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.validateValues(this.isMultiSelection, copyValues);\n this.update();\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * This method is used to remove the single or multiple dates from the values property of the Calendar.\n *\n * @param {Date | Date[]} dates - Specifies the date or dates which need to be removed from the values property of the Calendar.\n * @returns {void}\n * @deprecated\n */\n Calendar.prototype.removeDate = function (dates) {\n if (typeof dates !== 'string' && typeof dates !== 'number' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n var copyValues = this.copyValues(this.values);\n if (typeof dates === 'object' && ((dates).length > 0)) {\n var tempDates = dates;\n for (var index = 0; index < tempDates.length; index++) {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +tempDates[index]) {\n copyValues.splice(i, 1);\n }\n }\n }\n }\n else {\n for (var i = 0; i < copyValues.length; i++) {\n if (+copyValues[i] === +dates) {\n copyValues.splice(i, 1);\n }\n }\n }\n this.setProperties({ values: copyValues }, false);\n this.update();\n if (this.isMultiSelection) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler();\n }\n };\n /**\n * To set custom today date in calendar\n *\n * @param {Date} date - Specifies date value to be set.\n * @private\n * @returns {void}\n */\n Calendar.prototype.setTodayDate = function (date) {\n var todayDate = new Date(+date);\n this.setProperties({ value: todayDate }, true);\n _super.prototype.todayButtonClick.call(this, null, todayDate, true);\n };\n Calendar.prototype.update = function () {\n this.validateDate();\n this.minMaxUpdate();\n _super.prototype.setValueUpdate.call(this);\n };\n Calendar.prototype.selectDate = function (e, date, element) {\n _super.prototype.selectDate.call(this, e, date, element, this.isMultiSelection, this.values);\n if (this.isMultiSelection && !isNullOrUndefined(this.values) && this.values.length > 0) {\n this.setProperties({ value: this.values[this.values.length - 1] }, true);\n }\n this.changedArgs = { value: this.value, values: this.values };\n this.changeHandler(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Calendar.prototype.changeEvent = function (e) {\n if ((this.value && this.value.valueOf()) !== (this.previousDate && +this.previousDate.valueOf())\n || this.isMultiSelection) {\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = new Date(+this.value);\n }\n };\n Calendar.prototype.triggerChange = function (e) {\n if (!isNullOrUndefined(this.todayButtonEvent) && this.isTodayClicked) {\n e = this.todayButtonEvent;\n this.isTodayClicked = false;\n }\n this.changedArgs.event = e || null;\n this.changedArgs.isInteracted = !isNullOrUndefined(e);\n if (!isNullOrUndefined(this.value)) {\n this.setProperties({ value: this.value }, true);\n }\n // eslint-disable-next-line use-isnan\n if (!this.isMultiSelection && +this.value !== Number.NaN && (!isNullOrUndefined(this.value) &&\n !isNullOrUndefined(this.previousDate) || this.previousDate === null\n && !isNaN(+this.value))) {\n this.changeEvent(e);\n }\n else if (!isNullOrUndefined(this.values) && this.previousValues !== this.values.length) {\n this.changeEvent(e);\n this.previousValues = this.values.length;\n }\n };\n __decorate([\n Property(null)\n ], Calendar.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Calendar.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], Calendar.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Event()\n ], Calendar.prototype, \"change\", void 0);\n Calendar = __decorate([\n NotifyPropertyChanges\n ], Calendar);\n return Calendar;\n}(CalendarBase));\nexport { Calendar };\n","/**\n *\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, addClass, attributes, HijriParser } from '@syncfusion/ej2-base';\nimport { getUniqueID } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar dayMilliSeconds = 86400000;\nvar minDecade = 2060;\nvar maxDecade = 2069;\nvar Islamic = /** @class */ (function () {\n function Islamic(instance) {\n this.calendarInstance = instance;\n }\n Islamic.prototype.getModuleName = function () {\n return 'islamic';\n };\n Islamic.prototype.islamicTitleUpdate = function (date, view) {\n var globalize = new Internationalization(this.calendarInstance.locale);\n switch (view) {\n case 'days':\n this.calendarInstance.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', format: 'MMMMyyyy', calendar: 'islamic' });\n break;\n case 'months':\n this.calendarInstance.headerTitleElement.textContent = globalize.formatDate(date, { type: 'dateTime', format: 'yyyy', calendar: 'islamic' });\n }\n };\n Islamic.prototype.islamicRenderDays = function (currentDate, value, multiSelection, values) {\n var tdEles = [];\n var cellsCount = 42;\n var localDate = new Date(this.islamicInValue(currentDate));\n var minMaxDate;\n this.islamicTitleUpdate(currentDate, 'days');\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = this.toGregorian(islamicDate.year, islamicDate.month, 1);\n var currentMonth = islamicDate.month;\n localDate = gregorianObject;\n while (localDate.getDay() !== this.calendarInstance.firstDayOfWeek) {\n this.calendarInstance.setStartDate(localDate, -1 * dayMilliSeconds);\n }\n for (var day = 0; day < cellsCount; ++day) {\n var weekEle = this.calendarInstance.createElement('td', { className: CELL });\n var weekAnchor = this.calendarInstance.createElement('span');\n if (day % 7 === 0 && this.calendarInstance.weekNumber) {\n weekAnchor.textContent = '' + this.calendarInstance.getWeek(localDate);\n weekEle.appendChild(weekAnchor);\n addClass([weekEle], '' + WEEKNUMBER);\n tdEles.push(weekEle);\n }\n minMaxDate = new Date(+localDate);\n localDate = this.calendarInstance.minMaxDate(localDate);\n var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: 'islamic' };\n var date = this.calendarInstance.globalize.parseDate(this.calendarInstance.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n var tdEle = this.islamicDayCell(localDate);\n var title = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'full', calendar: 'islamic' });\n var dayLink = this.calendarInstance.createElement('span');\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'd', calendar: 'islamic' });\n var disabled = (this.calendarInstance.min > localDate) || (this.calendarInstance.max < localDate);\n if (disabled) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n }\n else {\n dayLink.setAttribute('title', '' + title);\n }\n var hijriMonthObject = this.getIslamicDate(localDate);\n if (currentMonth !== hijriMonthObject.month) {\n addClass([tdEle], OTHERMONTH);\n }\n if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n addClass([tdEle], WEEKEND);\n }\n tdEle.appendChild(dayLink);\n this.calendarInstance.renderDayCellArgs = {\n date: localDate,\n isDisabled: false,\n element: tdEle,\n isOutOfRange: disabled\n };\n var argument = this.calendarInstance.renderDayCellArgs;\n this.calendarInstance.renderDayCellEvent(argument);\n if (argument.isDisabled) {\n if (this.calendarInstance.isMultiSelection) {\n if (!isNullOrUndefined(this.calendarInstance.values) && this.calendarInstance.values.length > 0) {\n for (var index = 0; index < values.length; index++) {\n var localDateString = +new Date(this.calendarInstance.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd', calendar: 'islamic' }));\n var tempDateString = +new Date(this.calendarInstance.globalize.formatDate(this.calendarInstance.values[index], { type: 'date', skeleton: 'yMd', calendar: 'islamic' }));\n if (localDateString === tempDateString) {\n this.calendarInstance.values.splice(index, 1);\n index = -1;\n }\n }\n }\n }\n else if (value && +value === +argument.date) {\n this.calendarInstance.setProperties({ value: null }, true);\n }\n }\n if (this.calendarInstance.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n addClass([tdEle], DISABLED);\n addClass([tdEle], OVERLAY);\n if (+this.calendarInstance.renderDayCellArgs.date === +this.calendarInstance.todayDate) {\n this.calendarInstance.todayDisabled = true;\n }\n }\n var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n var disabledCls = tdEle.classList.contains(DISABLED);\n if (!disabledCls) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n if (this.calendarInstance.isMultiSelection && !isNullOrUndefined(this.calendarInstance.values) &&\n !otherMnthBool && !disabledCls) {\n for (var tempValue = 0; tempValue < this.calendarInstance.values.length; tempValue++) {\n var localDateString = this.calendarInstance.globalize.formatDate(localDate, { type: 'date', skeleton: 'short', calendar: 'islamic' });\n var tempDateString = this.calendarInstance.globalize.formatDate(this.calendarInstance.values[tempValue], { type: 'date', skeleton: 'short', calendar: 'islamic' });\n if (localDateString === tempDateString &&\n this.calendarInstance.getDateVal(localDate, this.calendarInstance.values[tempValue])) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n if (this.calendarInstance.values.length <= 0) {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n }\n else if (!otherMnthBool && !disabledCls && this.calendarInstance.getDateVal(localDate, value)) {\n addClass([tdEle], SELECTED);\n }\n else {\n this.calendarInstance.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n }\n if (date.getDate() === new Date().getDate() && date.getMonth() === new Date().getMonth()) {\n if (date.getFullYear() === new Date().getFullYear()) {\n addClass([tdEle], TODAY);\n }\n }\n localDate = new Date(+minMaxDate);\n tdEles.push(this.calendarInstance.renderDayCellArgs.element);\n this.calendarInstance.addDay(localDate, 1, null, this.calendarInstance.max, this.calendarInstance.min);\n }\n return tdEles;\n };\n Islamic.prototype.islamicIconHandler = function () {\n new Date(this.islamicInValue(this.calendarInstance.currentDate)).setDate(1);\n var date = new Date(this.islamicInValue(this.calendarInstance.currentDate));\n switch (this.calendarInstance.currentView()) {\n case 'Month':\n {\n var prevMonthCompare = this.islamicCompareMonth(date, this.calendarInstance.min) < 1;\n var nextMonthCompare = this.islamicCompareMonth(date, this.calendarInstance.max) > -1;\n this.calendarInstance.previousIconHandler(prevMonthCompare);\n this.calendarInstance.nextIconHandler(nextMonthCompare);\n }\n break;\n case 'Year':\n {\n var prevYearCompare = this.hijriCompareYear(date, this.calendarInstance.min) < 1;\n var nextYearCompare = this.hijriCompareYear(date, this.calendarInstance.max) > -1;\n this.calendarInstance.previousIconHandler(prevYearCompare);\n this.calendarInstance.nextIconHandler(nextYearCompare);\n }\n break;\n case 'Decade': {\n var startIslamicYear = 1361;\n var gregorianValue = HijriParser.toGregorian(startIslamicYear, 1, 1);\n var prevDecadeCompare = this.hijriCompareDecade(date, this.calendarInstance.min) < 1;\n var nextDecadeCompare = this.hijriCompareDecade(date, this.calendarInstance.max) > -1;\n prevDecadeCompare = HijriParser.toGregorian(this.calendarInstance.headerTitleElement.textContent.split('-')[0].trim(), 1, 1).getFullYear() === gregorianValue.getFullYear() ? true : prevDecadeCompare;\n this.calendarInstance.previousIconHandler(prevDecadeCompare);\n this.calendarInstance.nextIconHandler(nextDecadeCompare);\n }\n }\n };\n Islamic.prototype.islamicNext = function () {\n this.calendarInstance.effect = '';\n var view = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n var islamicDate = this.getIslamicDate(this.calendarInstance.currentDate);\n switch (this.calendarInstance.currentView()) {\n case 'Year':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year + 1, islamicDate.month, 1);\n this.calendarInstance.switchView(view);\n break;\n case 'Month':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year, islamicDate.month + 1, 1);\n this.calendarInstance.switchView(view);\n break;\n case 'Decade':\n this.calendarInstance.nextIconClicked = true;\n if (islamicDate.year - this.calendarInstance.headerElement.textContent.split('-')[0].trim() === 1) {\n islamicDate.year = islamicDate.year - this.calendarInstance.headerElement.textContent.split('-')[0].trim() === 1 ? islamicDate.year + 1 : islamicDate.year;\n }\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year + 10, islamicDate.month, 1);\n this.calendarInstance.switchView(view);\n break;\n }\n };\n Islamic.prototype.islamicPrevious = function () {\n var currentView = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n this.calendarInstance.effect = '';\n var islamicDate = this.getIslamicDate(this.calendarInstance.currentDate);\n switch (this.calendarInstance.currentView()) {\n case 'Month':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year, islamicDate.month - 1, 1);\n this.calendarInstance.switchView(currentView);\n break;\n case 'Year':\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year - 1, islamicDate.month, 1);\n this.calendarInstance.switchView(currentView);\n break;\n case 'Decade':\n this.calendarInstance.previousIconClicked = true;\n this.calendarInstance.currentDate = this.toGregorian(islamicDate.year - 10, islamicDate.month - 1, 1);\n this.calendarInstance.switchView(currentView);\n break;\n }\n };\n Islamic.prototype.islamicRenderYears = function (e, value) {\n this.calendarInstance.removeTableHeadElement();\n var numCells = 4;\n var tdEles = [];\n var valueUtil = isNullOrUndefined(value);\n var curDate = new Date(this.islamicInValue(this.calendarInstance.currentDate));\n var localDate = curDate;\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject;\n var mon = islamicDate.month;\n var yr = islamicDate.year;\n var curYrs = islamicDate.year;\n var minYr = (this.getIslamicDate(this.calendarInstance.min)).year;\n var minMonth = (this.getIslamicDate(this.calendarInstance.min)).month;\n var maxYr = (this.getIslamicDate(this.calendarInstance.max)).year;\n var maxMonth = (this.getIslamicDate(this.calendarInstance.max)).month;\n this.islamicTitleUpdate(this.calendarInstance.currentDate, 'months');\n for (var month = 1; month <= 12; ++month) {\n var islamicDate_1 = this.getIslamicDate(localDate);\n var gregorianObject_1 = HijriParser.toGregorian(islamicDate_1.year, month, 1);\n localDate = gregorianObject_1;\n var tdEle = this.islamicDayCell(localDate);\n var dayLink = this.calendarInstance.createElement('span');\n var localMonth = (value &&\n (this.getIslamicDate(value)).month === (this.getIslamicDate(localDate)).month);\n var select = (value && (this.getIslamicDate(value)).year === yr && localMonth);\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'dateTime', format: 'MMM', calendar: 'islamic' });\n if ((this.calendarInstance.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.calendarInstance.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n addClass([tdEle], DISABLED);\n }\n else if (!valueUtil && select) {\n addClass([tdEle], SELECTED);\n }\n else {\n if ((this.getIslamicDate(localDate)).month === mon &&\n (this.getIslamicDate(this.calendarInstance.currentDate)).month === mon) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n tdEle.appendChild(dayLink);\n tdEles.push(tdEle);\n }\n this.islamicRenderTemplate(tdEles, numCells, YEAR, e, value);\n };\n Islamic.prototype.islamicRenderDecade = function (e, value) {\n this.calendarInstance.removeTableHeadElement();\n var numCells = 4;\n var yearCell = 12;\n var tdEles = [];\n var localDate = new Date(this.islamicInValue(this.calendarInstance.currentDate));\n var islamicDate = this.getIslamicDate(localDate);\n var gregorianObject = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject;\n var localYr = localDate.getFullYear();\n var startYr = new Date(this.islamicInValue((localYr - localYr % 10)));\n var endYr = new Date(this.islamicInValue((localYr - localYr % 10 + (10 - 1))));\n var startFullYr = startYr.getFullYear();\n var endFullYr = endYr.getFullYear();\n var startHdrYr = this.calendarInstance.globalize.formatDate(startYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n var endHdrYr = this.calendarInstance.globalize.formatDate(endYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n if (this.calendarInstance.locale === 'ar') {\n startHdrYr = Number(startHdrYr.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) { return String.fromCharCode(d.charCodeAt(0) - 1632 + 48); }));\n endHdrYr = Number(endHdrYr.replace(/[٠١٢٣٤٥٦٧٨٩]/g, function (d) { return String.fromCharCode(d.charCodeAt(0) - 1632 + 48); }));\n }\n var splityear = this.calendarInstance.headerElement.textContent.split('-');\n if ((!isNullOrUndefined(e) && (splityear[0] !== startHdrYr) && e.action === 'home') || (!isNullOrUndefined(e) && e.type === 'keydown' && e.action === 'end')) {\n startHdrYr = this.calendarInstance.headerElement.textContent.split('-')[0].trim();\n endHdrYr = this.calendarInstance.headerElement.textContent.split('-')[1].trim();\n }\n if (this.calendarInstance.islamicPreviousHeader) {\n startHdrYr = this.calendarInstance.islamicPreviousHeader.split('-')[0].trim();\n endHdrYr = this.calendarInstance.islamicPreviousHeader.split('-')[1].trim();\n this.calendarInstance.islamicPreviousHeader = null;\n }\n if (this.calendarInstance.previousIconClicked) {\n // eslint-disable-next-line no-var\n for (var i = 0; i <= splityear.length; i++) {\n endHdrYr = endHdrYr - splityear[i] === 2 || splityear[i]\n - endHdrYr === 2 ? (parseInt(endHdrYr, 10) + 1).toString() :\n endHdrYr - splityear[i] === 3 || splityear[i] - endHdrYr === 3 ?\n (parseInt(endHdrYr, 10) + 2).toString() : endHdrYr - splityear[i] === 4 ||\n splityear[i] - endHdrYr === 4 ? (parseInt(endHdrYr, 10) + 3).toString() :\n endHdrYr - splityear[i] === 5 || splityear[i] - endHdrYr === 5 ?\n (parseInt(endHdrYr, 10) + 4).toString() : endHdrYr;\n if (endHdrYr - splityear[i] === 0 || splityear[i] - endHdrYr === 0) {\n endHdrYr = (parseInt(endHdrYr, 10) - 1).toString();\n }\n }\n if (endHdrYr - splityear[i] === 8 || splityear[i] - endHdrYr === 8) {\n endHdrYr = (parseInt(endHdrYr, 10) - 9).toString();\n startHdrYr = (parseInt(endHdrYr, 10) - 9).toString();\n }\n if (endHdrYr - splityear[i] === 7 || splityear[i] - endHdrYr === 7) {\n endHdrYr = (parseInt(endHdrYr, 10) - 8).toString();\n startHdrYr = (parseInt(endHdrYr, 10) - 9).toString();\n }\n startHdrYr = endHdrYr - startHdrYr === 10\n ? (parseInt(startHdrYr, 10) + 1).toString() : endHdrYr - startHdrYr === 11\n ? (parseInt(startHdrYr, 10) + 2).toString() : endHdrYr - startHdrYr === 12\n ? (parseInt(startHdrYr, 10) + 3).toString() : startHdrYr;\n if (endHdrYr - startHdrYr === 8) {\n startHdrYr = (parseInt(startHdrYr, 10) - 1).toString();\n }\n }\n if (this.calendarInstance.nextIconClicked) {\n for (var i_1 = 0; i_1 <= splityear.length; i_1++) {\n if (startHdrYr - splityear[i_1] === 0 || splityear[i_1] - startHdrYr === 0) {\n startHdrYr = (parseInt(startHdrYr, 10) + 1).toString();\n }\n if (startHdrYr - splityear[i_1] === 2 && startHdrYr > splityear[i_1].trim()) {\n startHdrYr = (parseInt(startHdrYr, 10) - 1).toString();\n }\n if (splityear[i_1] - startHdrYr === 1 && startHdrYr < splityear[i_1].trim()) {\n startHdrYr = (parseInt(startHdrYr, 10) + 2).toString();\n }\n }\n if (startHdrYr - this.calendarInstance.headerTitleElement.textContent.split('-')[1].trim() > 1) {\n startHdrYr = (parseInt(this.calendarInstance.headerTitleElement.textContent.split('-')[1].trim(), 10) + 1).toString();\n endHdrYr = (parseInt(startHdrYr, 10) + 9).toString();\n }\n endHdrYr = endHdrYr - startHdrYr === 10 ? (parseInt(endHdrYr, 10) - 1).toString() : endHdrYr;\n endHdrYr = endHdrYr - startHdrYr === 7\n ? (parseInt(endHdrYr, 10) + 2).toString() : endHdrYr - startHdrYr === 8\n ? (parseInt(endHdrYr, 10) + 1).toString() : endHdrYr;\n }\n if (this.calendarInstance.locale === 'ar') {\n var startHeaderYear = this.calendarInstance.globalize.formatDate(startYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n var endHeaderYear = this.calendarInstance.globalize.formatDate(endYr, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n this.calendarInstance.headerTitleElement.textContent = startHeaderYear + ' - ' + (endHeaderYear);\n }\n else {\n this.calendarInstance.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n }\n this.calendarInstance.nextIconClicked = this.calendarInstance.previousIconClicked = false;\n var year = (parseInt(startHdrYr, 10) - 2).toString();\n startFullYr = Math.round(parseInt(startHdrYr, 10) * 0.97 + 622);\n endFullYr = Math.round(parseInt(endHdrYr, 10) * 0.97 + 622);\n var startYear = Math.round(parseInt(year, 10) * 0.97 + 622);\n for (var rowCount = 1; rowCount <= yearCell; ++rowCount) {\n var year_1 = startYear + rowCount;\n localDate.setFullYear(year_1);\n localDate.setDate(1);\n localDate.setMonth(0);\n if ((this.getIslamicDate(localDate).year - islamicDate.year) > 1) {\n localDate.setMonth(1);\n rowCount = rowCount - 1;\n localDate.setFullYear(localDate.getFullYear() - 1);\n }\n islamicDate = this.getIslamicDate(localDate);\n var gregorianObject_2 = HijriParser.toGregorian(islamicDate.year, 1, 1);\n localDate = gregorianObject_2;\n if (islamicDate.year === parseInt(startHdrYr, 10) - 1 || islamicDate.year >= startHdrYr &&\n islamicDate.year <= endFullYr || islamicDate.year === parseInt(endHdrYr, 10) + 1) {\n var tdEle = this.islamicDayCell(localDate);\n attributes(tdEle, { 'role': 'gridcell' });\n var dayLink = this.calendarInstance.createElement('span');\n dayLink.textContent = this.calendarInstance.globalize.formatDate(localDate, { type: 'dateTime', format: 'y', calendar: 'islamic' });\n if (islamicDate.year === parseInt(startHdrYr, 10) - 1 || (year_1 < startFullYr) ||\n (year_1 > endFullYr) && islamicDate.year !== parseInt(endHdrYr, 10)) {\n addClass([tdEle], OTHERMONTH);\n }\n else if (year_1 < new Date(this.islamicInValue(this.calendarInstance.min)).getFullYear()\n || year_1 > new Date(this.islamicInValue(this.calendarInstance.max)).getFullYear()) {\n addClass([tdEle], DISABLED);\n }\n else if (!isNullOrUndefined(value) &&\n (this.getIslamicDate(localDate)).year ===\n (this.getIslamicDate(value)).year) {\n addClass([tdEle], SELECTED);\n }\n else {\n if (localDate.getFullYear() === this.calendarInstance.currentDate.getFullYear() &&\n !tdEle.classList.contains(DISABLED)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n }\n if (!tdEle.classList.contains(DISABLED)) {\n EventHandler.add(tdEle, 'click', this.calendarInstance.clickHandler, this.calendarInstance);\n }\n tdEle.appendChild(dayLink);\n if ((!isNullOrUndefined(e) && e.action === 'home' && islamicDate.year.toString() === startHdrYr) || (!isNullOrUndefined(e) && e.action === 'end' && islamicDate.year.toString() === endHdrYr)) {\n addClass([tdEle], FOCUSEDDATE);\n }\n tdEles.push(tdEle);\n }\n }\n this.islamicRenderTemplate(tdEles, numCells, 'e-decade', e, value);\n };\n Islamic.prototype.islamicDayCell = function (localDate) {\n var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: 'islamic' };\n var formatDate = this.calendarInstance.globalize.formatDate(localDate, dateFormatOptions);\n var date = this.calendarInstance.globalize.parseDate(formatDate, dateFormatOptions);\n var value = date.valueOf();\n var attrs = {\n className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false', 'role': 'gridcell' }\n };\n return this.calendarInstance.createElement('td', attrs);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Islamic.prototype.islamicRenderTemplate = function (elements, count, classNm, e, value) {\n var view = this.calendarInstance.getViewNumber(this.calendarInstance.currentView());\n var trEle;\n this.calendarInstance.tableBodyElement = this.calendarInstance.createElement('tbody');\n this.calendarInstance.table.appendChild(this.calendarInstance.tableBodyElement);\n removeClass([this.calendarInstance.contentElement, this.calendarInstance.headerElement], [MONTH, DECADE, YEAR]);\n addClass([this.calendarInstance.contentElement, this.calendarInstance.headerElement], [classNm]);\n var weekNumCell = 41;\n var numberCell = 35;\n var otherMonthCell = 6;\n var row = count;\n var rowCount = 0;\n for (var dayCell = 0; dayCell < Math.round(elements.length / count); ++dayCell) {\n trEle = this.calendarInstance.createElement('tr', { attrs: { 'role': 'row' } });\n for (rowCount = 0 + rowCount; rowCount < row; rowCount++) {\n if (!elements[rowCount].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowCount].children[0])) {\n addClass([elements[rowCount].children[0]], [LINK]);\n rippleEffect(elements[rowCount].children[0], {\n duration: 600,\n isCenterRipple: true\n });\n }\n trEle.appendChild(elements[rowCount]);\n if (this.calendarInstance.weekNumber &&\n rowCount === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (!this.calendarInstance.weekNumber\n && rowCount === otherMonthCell && elements[otherMonthCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n if (this.calendarInstance.weekNumber) {\n if (rowCount === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n else {\n if (rowCount === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n addClass([trEle], OTHERMONTHROW);\n }\n }\n }\n row = row + count;\n rowCount = rowCount + 0;\n this.calendarInstance.tableBodyElement.appendChild(trEle);\n }\n this.calendarInstance.table.querySelector('tbody').className = this.calendarInstance.effect;\n this.islamicIconHandler();\n if (view !== this.calendarInstance.getViewNumber(this.calendarInstance.currentView())\n || (view === 0 && view !== this.calendarInstance.getViewNumber(this.calendarInstance.currentView()))) {\n this.calendarInstance.navigateHandler(e);\n }\n this.calendarInstance.setAriaActiveDescendant();\n this.calendarInstance.changedArgs = { value: this.calendarInstance.value, values: this.calendarInstance.values };\n this.calendarInstance.changeHandler();\n };\n Islamic.prototype.islamicCompareMonth = function (start, end) {\n var hijriStart = (this.getIslamicDate(start));\n var hijriEnd = (this.getIslamicDate(end));\n var result;\n if (hijriStart.year > hijriEnd.year) {\n result = 1;\n }\n else if (hijriStart.year < hijriEnd.year) {\n result = -1;\n }\n else {\n result = hijriStart.month === hijriEnd.month ? 0 : hijriStart.month > hijriEnd.month ? 1 : -1;\n }\n return result;\n };\n Islamic.prototype.islamicCompare = function (startDate, endDate, modifier) {\n var hijriStart = this.getIslamicDate(startDate);\n var hijriEnd = this.getIslamicDate(endDate);\n var start = hijriEnd.year;\n var end;\n var result;\n end = start;\n result = 0;\n if (modifier) {\n start = start - start % modifier;\n end = start - start % modifier + modifier - 1;\n }\n if (hijriStart.year > end) {\n result = 1;\n }\n else if ((this.calendarInstance.currentView() === 'Decade') && hijriStart.year < start &&\n !((startDate.getFullYear() >= minDecade && startDate.getFullYear() <= maxDecade))) {\n result = -1;\n }\n else if (hijriStart.year < start && (this.calendarInstance.currentView() === 'Year')) {\n result = -1;\n }\n return result;\n };\n Islamic.prototype.getIslamicDate = function (date) {\n return (HijriParser.getHijriDate(date));\n };\n Islamic.prototype.toGregorian = function (year, month, date) {\n return HijriParser.toGregorian(year, month, date);\n };\n Islamic.prototype.hijriCompareYear = function (start, end) {\n return this.islamicCompare(start, end, 0);\n };\n Islamic.prototype.hijriCompareDecade = function (start, end) {\n return this.islamicCompare(start, end, 10);\n };\n Islamic.prototype.destroy = function () {\n this.calendarInstance = null;\n };\n Islamic.prototype.islamicInValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n return Islamic;\n}());\nexport { Islamic };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path='../calendar/calendar-model.d.ts'/>\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, extend, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { detach, addClass, removeClass, closest, attributes } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar CLEARICON = 'e-clear-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar OFFSETVALUE = 4;\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar NONEDIT = 'e-non-edit';\nvar containerAttr = ['title', 'class', 'style'];\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * <input id='datepicker'/>\n * ```\n * ```typescript\n * <script>\n * let datePickerObject:DatePicker = new DatePicker({ value: new Date() });\n * datePickerObject.appendTo('#datepicker');\n * </script>\n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n __extends(DatePicker, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {DatePickerModel} options - Specifies the DatePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DatePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isDateIconClicked = false;\n _this.isAltKeyPressed = false;\n _this.isInteracted = true;\n _this.invalidValueString = null;\n _this.checkPreviousValue = null;\n _this.maskedDateValue = '';\n _this.isAngular = false;\n _this.preventChange = false;\n _this.isIconClicked = false;\n _this.isDynamicValueChanged = false;\n _this.moduleName = _this.getModuleName();\n _this.isFocused = false;\n _this.datepickerOptions = options;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.render = function () {\n this.initialize();\n this.bindEvents();\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n this.setTimeZone(this.serverTimezoneOffset);\n };\n DatePicker.prototype.setTimeZone = function (offsetValue) {\n if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n var serverTimezoneDiff = offsetValue;\n var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n this.updateInput();\n }\n };\n DatePicker.prototype.isDayLightSaving = function () {\n var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n };\n DatePicker.prototype.setAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.updateIconState();\n };\n DatePicker.prototype.updateIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n else {\n addClass([this.inputWrapper.container], [NONEDIT]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [NONEDIT]);\n }\n };\n DatePicker.prototype.initialize = function () {\n this.checkInvalidValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.createInput();\n this.updateHtmlAttributeToWrapper();\n this.setAllowEdit();\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInput(true);\n this.updateInputValue(this.maskedDateValue);\n }\n else if (!this.enableMask) {\n this.updateInput(true);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNullOrUndefined(this.value) ? new Date(+this.value) : null;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputValueCopy = this.value;\n };\n DatePicker.prototype.createInput = function () {\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-expanded': 'false',\n 'role': 'combobox', 'autocomplete': 'off', 'autocorrect': 'off',\n 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-invalid': 'false'\n };\n if (this.getModuleName() === 'datepicker') {\n var l10nLocale = { placeholder: this.placeholder };\n this.globalize = new Internationalization(this.locale);\n this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n var isBindClearAction = this.enableMask ? false : true;\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n floatLabelType: this.floatLabelType,\n bindClearAction: isBindClearAction,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n }, this.createElement);\n this.setWidth(this.width);\n if (this.inputElement.name !== '') {\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n }\n else {\n this.inputElement.setAttribute('name', '' + this.element.id);\n }\n attributes(this.inputElement, ariaAttrs);\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n addClass([this.inputWrapper.container], DATEWRAPPER);\n };\n DatePicker.prototype.updateInput = function (isDynamic) {\n if (isDynamic === void 0) { isDynamic = false; }\n var formatOptions;\n if (this.value && !this.isCalendar()) {\n this.disabledDates(isDynamic);\n }\n if (isNaN(+new Date(this.checkValue(this.value)))) {\n this.setProperties({ value: null }, true);\n }\n if (this.strictMode) {\n //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n _super.prototype.validateDate.call(this);\n this.minMaxUpdates();\n _super.prototype.minMaxUpdate.call(this);\n }\n if (!isNullOrUndefined(this.value)) {\n var dateValue = this.value;\n var dateString = void 0;\n var tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(this.value, {\n format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateString = this.globalize.formatDate(this.value, formatOptions);\n }\n if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n this.updateInputValue(dateString);\n }\n else {\n var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n if (!this.strictMode && value) {\n this.updateInputValue(dateString);\n }\n }\n }\n if (isNullOrUndefined(this.value) && this.strictMode) {\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n else {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.updateInputValue(this.invalidValueString);\n }\n this.changedArgs = { value: this.value };\n this.errorClass();\n this.updateIconState();\n };\n DatePicker.prototype.minMaxUpdates = function () {\n if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.min }, true);\n this.changedArgs = { value: this.value };\n }\n else {\n if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n this.setProperties({ value: this.max }, true);\n this.changedArgs = { value: this.value };\n }\n }\n };\n DatePicker.prototype.checkStringValue = function (val) {\n var returnDate = null;\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatOptions));\n if (isNullOrUndefined(returnDate) && (this.getModuleName() === 'datetimepicker')) {\n returnDate = this.checkDateValue(this.globalize.parseDate(val, formatDateTime));\n }\n return returnDate;\n };\n DatePicker.prototype.checkInvalidValue = function (value) {\n if (!(value instanceof Date) && !isNullOrUndefined(value)) {\n var valueDate = null;\n var valueString = value;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n var formatOptions = null;\n var formatDateTime = null;\n if (this.getModuleName() === 'datetimepicker') {\n var culture = new Internationalization(this.locale);\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n }\n else {\n formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n var invalid = false;\n if (typeof valueString !== 'string') {\n valueString = null;\n invalid = true;\n }\n else {\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n valueDate = this.checkStringValue(valueString);\n if (!valueDate) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || (/^[a-zA-Z0-9- ]*$/).test(valueString) || isNaN(+new Date(this.checkValue(valueString)))) {\n invalid = true;\n }\n else {\n valueDate = new Date(valueString);\n }\n }\n }\n if (invalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n }\n else {\n this.setProperties({ value: valueDate }, true);\n }\n }\n };\n DatePicker.prototype.bindInputEvent = function () {\n if (!isNullOrUndefined(this.formatString) || this.enableMask) {\n if (this.enableMask || this.formatString.indexOf('y') === -1) {\n EventHandler.add(this.inputElement, 'input', this.inputHandler, this);\n }\n else {\n EventHandler.remove(this.inputElement, 'input', this.inputHandler);\n }\n }\n };\n DatePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler, this);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n this.bindInputEvent();\n // To prevent the twice triggering.\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.resetFormHandler, this);\n }\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardModules = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DatePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Home':\n case 'End':\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n if (e.code !== 'Delete') {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n DatePicker.prototype.unBindEvents = function () {\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateIconHandler);\n }\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.enableMask) {\n EventHandler.remove(this.inputElement, 'keydown', this.keydownHandler);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n };\n DatePicker.prototype.resetFormHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var value = this.inputElement.getAttribute('value');\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n value = '';\n this.inputValueCopy = null;\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: this.inputValueCopy }, true);\n this.restoreValue();\n if (this.inputElement) {\n this.updateInputValue(value);\n this.errorClass();\n }\n }\n };\n DatePicker.prototype.restoreValue = function () {\n this.currentDate = this.value ? this.value : new Date();\n this.previousDate = this.value;\n this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.globalize.formatDate(this.inputValueCopy, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n });\n };\n DatePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n DatePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n DatePicker.prototype.resetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n this.clear(e);\n };\n DatePicker.prototype.mouseUpHandler = function (e) {\n if (this.enableMask) {\n e.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n if (!this.enableMask) {\n this.updateInputValue('');\n }\n var clearedArgs = {\n event: event\n };\n this.trigger('cleared', clearedArgs);\n this.invalidValueString = '';\n this.updateInput();\n this.popupUpdate();\n this.changeEvent(event);\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n DatePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.interopAdaptor.invokeMethodAsync('OnDateIconClick');\n };\n DatePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n DatePicker.prototype.dateIconHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n this.inputElement.blur();\n }\n e.preventDefault();\n if (!this.readonly) {\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.isDateIconClicked = true;\n this.show(null, e);\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n addClass(this.inputWrapper.buttons, ACTIVE);\n }\n }\n this.isIconClicked = false;\n };\n DatePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (!isNullOrUndefined(this.htmlAttributes[\"\" + key])) {\n if (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.inputWrapper.container.getAttribute(key);\n if (!isNullOrUndefined(setStyle)) {\n if (setStyle.charAt(setStyle.length - 1) === ';') {\n setStyle = setStyle + this.htmlAttributes[\"\" + key];\n }\n else {\n setStyle = setStyle + ';' + this.htmlAttributes[\"\" + key];\n }\n }\n else {\n setStyle = this.htmlAttributes[\"\" + key];\n }\n this.inputWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n }\n };\n DatePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttr.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n DatePicker.prototype.updateCssClass = function (newCssClass, oldCssClass) {\n if (!isNullOrUndefined(oldCssClass)) {\n oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newCssClass)) {\n newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newCssClass, [this.inputWrapper.container], oldCssClass);\n if (this.popupWrapper) {\n Input.setCssClass(newCssClass, [this.popupWrapper], oldCssClass);\n }\n };\n DatePicker.prototype.calendarKeyActionHandle = function (e) {\n switch (e.action) {\n case 'escape':\n if (this.isCalendar()) {\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[this.index].blur();\n }\n break;\n case 'enter':\n if (!this.isCalendar()) {\n this.show(null, e);\n }\n else {\n if (+this.value !== +this.currentDate && !this.isCalendar()) {\n this.inputWrapper.container.children[this.index].focus();\n }\n }\n if (this.getModuleName() === 'datetimepicker') {\n this.inputElement.focus();\n }\n break;\n case 'tab':\n this.hide(e);\n }\n };\n DatePicker.prototype.inputFocusHandler = function () {\n this.isFocused = true;\n if (!this.enabled) {\n return;\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n var focusArguments = {\n model: this\n };\n this.isDateIconClicked = false;\n this.trigger('focus', focusArguments);\n this.updateIconState();\n if (this.openOnFocus && !this.isIconClicked) {\n this.show();\n }\n };\n DatePicker.prototype.inputHandler = function () {\n this.isPopupClicked = false;\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n DatePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.strictModeUpdate();\n if (this.inputElement.value === '' && isNullOrUndefined(this.value)) {\n this.invalidValueString = null;\n this.updateInputValue('');\n }\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n this.errorClass();\n if (this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.getModuleName() === 'datepicker') {\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n if (this.isCalendar()) {\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: this.calendarKeyActionHandle.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n this.isPopupClicked = false;\n };\n DatePicker.prototype.documentHandler = function (e) {\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(e.target) && e.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(e.target)))) && e.type !== 'touchstart') {\n e.preventDefault();\n }\n var target = e.target;\n if (!(closest(target, '.e-datepicker.e-popup-wrapper')) && !isNullOrUndefined(this.inputWrapper)\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && (!target.classList.contains('e-day'))) {\n this.hide(e);\n this.focusOut();\n }\n else if (closest(target, '.e-datepicker.e-popup-wrapper')) {\n // Fix for close the popup when select the previously selected value.\n if (target.classList.contains('e-day')\n && !isNullOrUndefined(e.target.parentElement)\n && e.target.parentElement.classList.contains('e-selected')\n && closest(target, '.e-content')\n && closest(target, '.e-content').classList.contains('e-' + this.depth.toLowerCase())) {\n this.hide(e);\n }\n else if (closest(target, '.e-footer-container')\n && target.classList.contains('e-today')\n && target.classList.contains('e-btn')\n && (+new Date(+this.value) === +_super.prototype.generateTodayVal.call(this, this.value))) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.inputKeyActionHandle = function (e) {\n var clickedView = this.currentView();\n switch (e.action) {\n case 'altUpArrow':\n this.isAltKeyPressed = false;\n this.hide(e);\n this.inputElement.focus();\n break;\n case 'altDownArrow':\n this.isAltKeyPressed = true;\n this.strictModeUpdate();\n this.updateInput();\n this.changeTrigger(e);\n if (this.getModuleName() === 'datepicker') {\n this.show(null, e);\n }\n break;\n case 'escape':\n this.hide(e);\n break;\n case 'enter':\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (!this.isCalendar() && document.activeElement === this.inputElement) {\n this.hide(e);\n }\n if (this.isCalendar()) {\n e.preventDefault();\n e.stopPropagation();\n }\n break;\n case 'tab':\n case 'shiftTab':\n {\n var start = this.inputElement.selectionStart;\n var end = this.inputElement.selectionEnd;\n if (this.enableMask && !this.popupObj && !this.readonly) {\n var length_1 = this.inputElement.value.length;\n if ((start === 0 && end === length_1) || (end !== length_1 && e.action === 'tab') || (start !== 0 && e.action === 'shiftTab')) {\n e.preventDefault();\n }\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n start = this.inputElement.selectionStart;\n end = this.inputElement.selectionEnd;\n }\n this.strictModeUpdate();\n this.updateInput();\n this.popupUpdate();\n this.changeTrigger(e);\n this.errorClass();\n if (this.enableMask) {\n this.inputElement.selectionStart = start;\n this.inputElement.selectionEnd = end;\n }\n this.hide(e);\n break;\n }\n default:\n this.defaultAction(e);\n // Fix for close the popup when select the previously selected value.\n if (e.action === 'select' && clickedView === this.depth) {\n this.hide(e);\n }\n }\n };\n DatePicker.prototype.defaultAction = function (e) {\n this.previousDate = ((!isNullOrUndefined(this.value) && new Date(+this.value)) || null);\n if (this.isCalendar()) {\n _super.prototype.keyActionHandle.call(this, e);\n if (this.isCalendar()) {\n attributes(this.inputElement, {\n 'aria-activedescendant': '' + this.setActiveDescendant()\n });\n }\n }\n };\n DatePicker.prototype.popupUpdate = function () {\n if ((isNullOrUndefined(this.value)) && (!isNullOrUndefined(this.previousDate)) ||\n (+this.value !== +this.previousDate)) {\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [SELECTED]);\n }\n }\n if (!isNullOrUndefined(this.value)) {\n if ((+this.value >= +this.min) && (+this.value <= +this.max)) {\n var targetdate = new Date(this.checkValue(this.value));\n _super.prototype.navigateTo.call(this, 'Month', targetdate);\n }\n }\n }\n };\n DatePicker.prototype.strictModeUpdate = function () {\n var format;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n format = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else {\n format = isNullOrUndefined(this.formatString) ? this.formatString : this.formatString.replace('dd', 'd');\n }\n if (!isNullOrUndefined(format)) {\n var len = format.split('M').length - 1;\n if (len < 3) {\n format = format.replace('MM', 'M');\n }\n }\n var dateOptions;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n dateOptions = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n dateOptions = formatOptions;\n }\n var date;\n if (typeof this.inputElement.value === 'string') {\n this.inputElement.value = this.inputElement.value.trim();\n }\n if ((this.getModuleName() === 'datetimepicker')) {\n if (this.checkDateValue(this.globalize.parseDate(this.inputElement.value, dateOptions))) {\n date = this.globalize.parseDate(this.inputElement.value.toLocaleUpperCase(), dateOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.parseDate(this.inputElement.value, formatOptions);\n }\n }\n else {\n date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n date = (!isNullOrUndefined(date) && isNaN(+date)) ? null : date;\n if (!isNullOrUndefined(this.formatString) && this.inputElement.value !== '' && this.strictMode) {\n if ((this.isPopupClicked || (!this.isPopupClicked && this.inputElement.value === this.previousElementValue))\n && this.formatString.indexOf('y') === -1) {\n date.setFullYear(this.value.getFullYear());\n }\n }\n }\n // EJ2-35061 - To prevent change event from triggering twice when using strictmode and format property\n if ((this.getModuleName() === 'datepicker') && (this.value && !isNaN(+this.value)) && date) {\n date.setHours(this.value.getHours(), this.value.getMinutes(), this.value.getSeconds(), this.value.getMilliseconds());\n }\n if (this.strictMode && date) {\n this.updateInputValue(this.globalize.formatDate(date, dateOptions));\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n else if (!this.strictMode) {\n if (this.inputElement.value !== this.previousElementValue) {\n this.setProperties({ value: date }, true);\n }\n }\n if (this.strictMode && !date && this.inputElement.value === (this.enableMask ? this.maskedDateValue : '')) {\n this.setProperties({ value: null }, true);\n }\n if (isNaN(+this.value)) {\n this.setProperties({ value: null }, true);\n }\n if (isNullOrUndefined(this.value)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n };\n DatePicker.prototype.createCalendar = function () {\n var _this = this;\n this.popupWrapper = this.createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (Browser.isDevice) {\n this.modelHeader();\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-date-modal';\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n document.body.appendChild(this.modal);\n }\n //this.calendarElement represent the Calendar object from the Calendar class.\n this.calendarElement.querySelector('table tbody').className = '';\n this.popupObj = new Popup(this.popupWrapper, {\n content: this.calendarElement,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n offsetY: OFFSETVALUE,\n targetType: 'container',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n open: function () {\n if (_this.getModuleName() !== 'datetimepicker') {\n if (document.activeElement !== _this.inputElement) {\n _this.defaultKeyConfigs = extend(_this.defaultKeyConfigs, _this.keyConfigs);\n _this.calendarElement.children[1].firstElementChild.focus();\n _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n eventName: 'keydown',\n keyAction: _this.calendarKeyActionHandle.bind(_this),\n keyConfigs: _this.defaultKeyConfigs\n });\n }\n }\n }, close: function () {\n if (_this.isDateIconClicked) {\n _this.inputWrapper.container.children[_this.index].focus();\n }\n if (_this.value) {\n _this.disabledDates();\n }\n if (_this.popupObj) {\n _this.popupObj.destroy();\n }\n _this.resetCalendar();\n detach(_this.popupWrapper);\n _this.popupObj = _this.popupWrapper = null;\n _this.preventArgs = null;\n _this.calendarKeyboardModules = null;\n _this.setAriaAttributes();\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n this.popupObj.element.className += ' ' + this.cssClass;\n this.setAriaAttributes();\n };\n DatePicker.prototype.setAriaDisabled = function () {\n if (!this.enabled) {\n this.inputElement.setAttribute('aria-disabled', 'true');\n this.inputElement.tabIndex = -1;\n }\n else {\n this.inputElement.setAttribute('aria-disabled', 'false');\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n };\n DatePicker.prototype.modelHeader = function () {\n var dateOptions;\n var modelHeader = this.createElement('div', { className: 'e-model-header' });\n var yearHeading = this.createElement('h1', { className: 'e-model-year' });\n var h2 = this.createElement('div');\n var daySpan = this.createElement('span', { className: 'e-model-day' });\n var monthSpan = this.createElement('span', { className: 'e-model-month' });\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'y', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'y', skeleton: 'dateTime', calendar: 'islamic' };\n }\n yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'E', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'E', skeleton: 'dateTime', calendar: 'islamic' };\n }\n daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions) + ', ';\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime' };\n }\n else {\n dateOptions = { format: 'MMM d', skeleton: 'dateTime', calendar: 'islamic' };\n }\n monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n modelHeader.appendChild(yearHeading);\n h2.appendChild(daySpan);\n h2.appendChild(monthSpan);\n modelHeader.appendChild(h2);\n this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n };\n DatePicker.prototype.changeTrigger = function (event) {\n if (this.inputElement.value !== this.previousElementValue) {\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n if (this.isDynamicValueChanged && this.isCalendar()) {\n this.popupUpdate();\n }\n this.changedArgs.value = this.value;\n this.changedArgs.event = event || null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = !isNullOrUndefined(event);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.changedArgs);\n }\n this.previousElementValue = this.inputElement.value;\n this.previousDate = !isNaN(+new Date(this.checkValue(this.value))) ? new Date(this.checkValue(this.value)) : null;\n this.isInteracted = true;\n }\n }\n };\n DatePicker.prototype.navigatedEvent = function () {\n this.trigger('navigated', this.navigatedArgs);\n };\n DatePicker.prototype.changeEvent = function (event) {\n if (!this.isIconClicked) {\n this.selectCalendar(event);\n }\n if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n this.changedArgs.event = event ? event : null;\n this.changedArgs.element = this.element;\n this.changedArgs.isInteracted = this.isInteracted;\n if (!this.isDynamicValueChanged) {\n this.trigger('change', this.changedArgs);\n }\n this.previousDate = this.value && new Date(+this.value);\n if (!this.isDynamicValueChanged) {\n this.hide(event);\n }\n this.previousElementValue = this.inputElement.value;\n this.errorClass();\n }\n else if (event) {\n this.hide(event);\n }\n };\n DatePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n DatePicker.prototype.selectCalendar = function (e) {\n var date;\n var tempFormat;\n var formatOptions;\n if (this.getModuleName() === 'datetimepicker') {\n tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n }\n else {\n tempFormat = this.formatString;\n }\n if (this.value) {\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n if (!isNullOrUndefined(date)) {\n this.updateInputValue(date);\n if (this.enableMask) {\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n }\n }\n };\n DatePicker.prototype.isCalendar = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n return true;\n }\n return false;\n };\n DatePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Shows the Calendar.\n *\n * @returns {void}\n * @deprecated\n */\n DatePicker.prototype.show = function (type, e) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n var prevent_1 = true;\n var outOfRange = void 0;\n if (!isNullOrUndefined(this.value) && !(+this.value >= +new Date(this.checkValue(this.min))\n && +this.value <= +new Date(this.checkValue(this.max)))) {\n outOfRange = new Date(this.checkValue(this.value));\n this.setProperties({ 'value': null }, true);\n }\n else {\n outOfRange = this.value || null;\n }\n if (!this.isCalendar()) {\n _super.prototype.render.call(this);\n this.setProperties({ 'value': outOfRange || null }, true);\n this.previousDate = outOfRange;\n this.createCalendar();\n }\n if (Browser.isDevice) {\n this.mobilePopupWrapper = this.createElement('div', { className: 'e-datepick-mob-popup-wrap' });\n document.body.appendChild(this.mobilePopupWrapper);\n }\n this.preventArgs = {\n preventDefault: function () {\n prevent_1 = false;\n },\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n appendTo: Browser.isDevice ? this.mobilePopupWrapper : document.body\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (prevent_1 && !_this.preventArgs.cancel) {\n addClass(_this.inputWrapper.buttons, ACTIVE);\n _this.preventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupObj.refreshPosition(_this.inputElement);\n var openAnimation = {\n name: 'FadeIn',\n duration: Browser.isDevice ? 0 : OPENDURATION\n };\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _super.prototype.setOverlayIndex.call(_this, _this.mobilePopupWrapper, _this.popupObj.element, _this.modal, Browser.isDevice);\n _this.setAriaAttributes();\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.popupObj = null;\n }\n if (!isNullOrUndefined(_this.inputElement) && _this.inputElement.value === '') {\n if (!isNullOrUndefined(_this.tableBodyElement) && _this.tableBodyElement.querySelectorAll('td.e-selected').length > 0) {\n addClass([_this.tableBodyElement.querySelector('td.e-selected')], FOCUSEDDATE);\n removeClass(_this.tableBodyElement.querySelectorAll('td.e-selected'), SELECTED);\n }\n }\n EventHandler.add(document, 'mousedown touchstart', _this.documentHandler, _this);\n });\n }\n };\n /**\n * Hide the Calendar.\n *\n * @returns {void}\n * @deprecated\n */\n DatePicker.prototype.hide = function (event) {\n var _this = this;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var prevent_2 = true;\n this.preventArgs = {\n preventDefault: function () {\n prevent_2 = false;\n },\n popup: this.popupObj,\n event: event || null,\n cancel: false\n };\n removeClass(this.inputWrapper.buttons, ACTIVE);\n removeClass([document.body], OVERFLOW);\n var eventArgs = this.preventArgs;\n if (this.isCalendar()) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.closeEventCallback(prevent_2, eventArgs);\n });\n }\n else {\n this.closeEventCallback(prevent_2, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n DatePicker.prototype.closeEventCallback = function (prevent, eventArgs) {\n this.preventArgs = eventArgs;\n if (this.isCalendar() && (prevent && !this.preventArgs.cancel)) {\n this.popupObj.hide();\n this.isAltKeyPressed = false;\n this.keyboardModule.destroy();\n removeClass(this.inputWrapper.buttons, ACTIVE);\n }\n this.setAriaAttributes();\n if (Browser.isDevice && this.modal) {\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(this.mobilePopupWrapper) && (prevent && (isNullOrUndefined(this.preventArgs) || !this.preventArgs.cancel))) {\n this.mobilePopupWrapper.remove();\n this.mobilePopupWrapper = null;\n }\n }\n EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n /* eslint-disable jsdoc/require-param */\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DatePicker.prototype.focusIn = function (triggerEvent) {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n /* eslint-enable jsdoc/require-param */\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DatePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.blur();\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the DatePicker.\n *\n * @returns {string}\n * @deprecated\n */\n DatePicker.prototype.currentView = function () {\n var currentView;\n if (this.calendarElement) {\n // calls the Calendar currentView public method\n currentView = _super.prototype.currentView.call(this);\n }\n return currentView;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Navigates to specified month or year or decade view of the DatePicker.\n *\n * @param {string} view - Specifies the view of the calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns {void}\n * @deprecated\n */\n DatePicker.prototype.navigateTo = function (view, date) {\n if (this.calendarElement) {\n // calls the Calendar navigateTo public method\n _super.prototype.navigateTo.call(this, view, date);\n }\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DatePicker.prototype.destroy = function () {\n this.unBindEvents();\n _super.prototype.destroy.call(this);\n if (!isNullOrUndefined(this.keyboardModules)) {\n this.keyboardModules.destroy();\n }\n if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n _super.prototype.destroy.call(this);\n }\n var ariaAttrs = {\n 'aria-atomic': 'true', 'aria-disabled': 'true',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (!isNullOrUndefined(this.inputElementCopy.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n this.ensureInputAttribute();\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObj = this.popupWrapper = null;\n this.keyboardModule.destroy();\n }\n if (this.ngTag === null) {\n if (this.inputElement) {\n if (!isNullOrUndefined(this.inputWrapper)) {\n this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n }\n removeClass([this.inputElement], [INPUTROOT]);\n }\n removeClass([this.element], [ROOT]);\n if (!isNullOrUndefined(this.inputWrapper)) {\n detach(this.inputWrapper.container);\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n }\n this.inputWrapper = null;\n this.keyboardModules = null;\n };\n DatePicker.prototype.ensureInputAttribute = function () {\n var prop = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n prop[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < prop.length; i++) {\n if (isNullOrUndefined(this.inputElementCopy.getAttribute(prop[i]))) {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(prop[i]);\n }\n else {\n if (prop[i].toLowerCase() === 'value') {\n this.inputElement.value = this.inputElementCopy.getAttribute(prop[i]);\n }\n this.inputElement.setAttribute(prop[i], this.inputElementCopy.getAttribute(prop[i]));\n }\n }\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n DatePicker.prototype.preRender = function () {\n this.inputElementCopy = this.element.cloneNode(true);\n removeClass([this.inputElementCopy], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.formElement = closest(this.inputElement, 'form');\n this.index = this.showClearButton ? 2 : 1;\n this.ngTag = null;\n if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.ngTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n if (this.element.getAttribute('id')) {\n if (this.ngTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datepicker');\n if (this.ngTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n }\n if (this.ngTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.defaultKeyConfigs = this.getDefaultKeyConfig();\n this.checkHtmlAttributes(false);\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n _super.prototype.preRender.call(this);\n };\n DatePicker.prototype.getDefaultKeyConfig = function () {\n this.defaultKeyConfigs = {\n altUpArrow: 'alt+uparrow',\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n controlUp: 'ctrl+38',\n controlDown: 'ctrl+40',\n moveDown: 'downarrow',\n moveUp: 'uparrow',\n moveLeft: 'leftarrow',\n moveRight: 'rightarrow',\n select: 'enter',\n home: 'home',\n end: 'end',\n pageUp: 'pageup',\n pageDown: 'pagedown',\n shiftPageUp: 'shift+pageup',\n shiftPageDown: 'shift+pagedown',\n controlHome: 'ctrl+home',\n controlEnd: 'ctrl+end',\n shiftTab: 'shift+tab',\n tab: 'tab'\n };\n return this.defaultKeyConfigs;\n };\n DatePicker.prototype.validationAttribute = function (target, inputElement) {\n var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n inputElement.setAttribute('name', nameAttribute);\n target.removeAttribute('name');\n var attribute = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attribute.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n continue;\n }\n var attr = target.getAttribute(attribute[i]);\n inputElement.setAttribute(attribute[i], attr);\n target.removeAttribute(attribute[i]);\n }\n };\n DatePicker.prototype.checkFormat = function () {\n var culture = new Internationalization(this.locale);\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (this.format.skeleton !== '' && !isNullOrUndefined(this.format.skeleton)) {\n var skeletonString = this.format.skeleton;\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'dateTime' });\n }\n else {\n this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'date' });\n }\n }\n else {\n if (this.getModuleName() === 'datetimepicker') {\n this.formatString = this.dateTimeFormat;\n }\n else {\n this.formatString = null;\n }\n }\n }\n else {\n this.formatString = null;\n }\n };\n DatePicker.prototype.checkHtmlAttributes = function (dynamic) {\n this.globalize = new Internationalization(this.locale);\n this.checkFormat();\n this.checkView();\n var attributes = dynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n var options;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n };\n }\n else {\n options = {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n };\n }\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n }\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['enabled'] === undefined)) || dynamic)) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !dynamic);\n }\n break;\n case 'readonly':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['readonly'] === undefined)) || dynamic)) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !dynamic);\n }\n break;\n case 'placeholder':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['placeholder'] === undefined)) || dynamic)) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !dynamic);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'value':\n if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['value'] === undefined)) || dynamic)) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), !dynamic);\n }\n break;\n case 'min':\n if ((+this.min === +new Date(1900, 0, 1)) || dynamic) {\n var min = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(min), {}), !dynamic);\n }\n break;\n case 'max':\n if ((+this.max === +new Date(2099, 11, 31)) || dynamic) {\n var max = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, this.globalize.parseDate(max), {}), !dynamic);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DatePicker.prototype.getModuleName = function () {\n return 'datepicker';\n };\n DatePicker.prototype.disabledDates = function (isDynamic) {\n if (isDynamic === void 0) { isDynamic = false; }\n var formatOptions;\n var globalize;\n var valueCopy = this.checkDateValue(this.value) ? new Date(+this.value) : new Date(this.checkValue(this.value));\n var previousValCopy = this.previousDate;\n //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n this.minMaxUpdates();\n if (!isDynamic || (isDynamic && !isNullOrUndefined(this.renderDayCell))) {\n _super.prototype.render.call(this);\n }\n this.previousDate = previousValCopy;\n var date = valueCopy && +(valueCopy);\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n if (!this.strictMode) {\n if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n this.setProperties({ value: valueCopy }, true);\n }\n }\n if (!isNullOrUndefined(this.calendarElement) && !isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n if (!this.strictMode) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n }\n }\n var inputVal;\n if (this.getModuleName() === 'datetimepicker') {\n if (this.calendarMode === 'Gregorian') {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n globalize = this.globalize.formatDate(valueCopy, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n inputVal = globalize;\n }\n else {\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n inputVal = this.globalize.formatDate(valueCopy, formatOptions);\n }\n if (!this.popupObj) {\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n }\n };\n DatePicker.prototype.setAriaAttributes = function () {\n if (this.isCalendar()) {\n Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n attributes(this.inputElement, { 'aria-owns': this.inputElement.id + '_options' });\n if (this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': '' + this.setActiveDescendant() });\n }\n }\n else {\n Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n this.inputElement.removeAttribute('aria-owns');\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DatePicker.prototype.errorClass = function () {\n var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n var isDisabledDate = this.calendarElement &&\n this.calendarElement.querySelectorAll(dateIdString)[0] &&\n this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n if ((!isNullOrUndefined(this.value) && !isNullOrUndefined(this.min) &&\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n !isNullOrUndefined(this.max) && !(new Date(this.value).setMilliseconds(0) >= new Date(this.min).setMilliseconds(0)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n && new Date(this.value).setMilliseconds(0) <= new Date(this.max).setMilliseconds(0)))\n || (!this.strictMode && this.inputElement.value !== '' && this.inputElement.value !== this.maskedDateValue && isNullOrUndefined(this.value) || isDisabledDate)) {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else if (!isNullOrUndefined(this.inputWrapper)) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DatePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DatePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.isInteracted = false;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n this.previousElementValue = this.inputElement.value;\n if (isNullOrUndefined(this.value)) {\n if (this.enableMask) {\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n this.updateInputValue('');\n }\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.updateInput(true);\n if (+this.previousDate !== +this.value) {\n this.changeTrigger(null);\n }\n this.isInteracted = true;\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'format':\n this.checkFormat();\n this.bindInputEvent();\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'allowEdit':\n this.setAllowEdit();\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n this.setAriaDisabled();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'start':\n case 'depth':\n this.checkView();\n if (this.calendarElement) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n this.index = this.showClearButton ? 2 : 1;\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n this.bindInputEvent();\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n default:\n if (this.calendarElement && this.isCalendar()) {\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n }\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property({})\n ], DatePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"values\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DatePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(1000)\n ], DatePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], DatePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DatePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DatePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DatePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DatePicker.prototype, \"destroyed\", void 0);\n DatePicker = __decorate([\n NotifyPropertyChanges\n ], DatePicker);\n return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path='../calendar/calendar-model.d.ts'/>\nimport { Property, EventHandler, Internationalization, NotifyPropertyChanges, detach, getUniqueID } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Event, Browser, L10n, ChildProperty } from '@syncfusion/ej2-base';\nimport { addClass, createElement, remove, closest, select, prepend, removeClass, attributes, Collection } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, formatUnit, setValue, rippleEffect, merge, extend } from '@syncfusion/ej2-base';\nimport { CalendarBase } from '../calendar/calendar';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase } from '@syncfusion/ej2-lists';\nvar DATERANGEWRAPPER = 'e-date-range-wrapper';\nvar INPUTCONTAINER = 'e-input-group';\nvar DATERANGEICON = 'e-input-group-icon e-range-icon e-icons';\nvar POPUP = 'e-popup';\nvar LEFTCALENDER = 'e-left-calendar';\nvar RIGHTCALENDER = 'e-right-calendar';\nvar LEFTCONTAINER = 'e-left-container';\nvar RIGHTCONTAINER = 'e-right-container';\nvar ROOT = 'e-daterangepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar STARTENDCONTAINER = 'e-start-end';\nvar STARTDATE = 'e-start-date';\nvar ENDDATE = 'e-end-date';\nvar STARTBUTTON = 'e-start-btn';\nvar INPUTFOCUS = 'e-input-focus';\nvar ENDBUTTON = 'e-end-btn';\nvar RANGEHOVER = 'e-range-hover';\nvar OTHERMONTH = 'e-other-month';\nvar STARTLABEL = 'e-start-label';\nvar ENDLABEL = 'e-end-label';\nvar DISABLED = 'e-disabled';\nvar SELECTED = 'e-selected';\nvar CALENDAR = 'e-calendar';\nvar NEXTICON = 'e-next';\nvar PREVICON = 'e-prev';\nvar HEADER = 'e-header';\nvar TITLE = 'e-title';\nvar ICONCONTAINER = 'e-icon-container';\nvar RANGECONTAINER = 'e-date-range-container';\nvar RANGEHEADER = 'e-range-header';\nvar PRESETS = 'e-presets';\nvar FOOTER = 'e-footer';\nvar RANGEBORDER = 'e-range-border';\nvar TODAY = 'e-today';\nvar FOCUSDATE = 'e-focused-date';\nvar CONTENT = 'e-content';\nvar DAYSPAN = 'e-day-span';\nvar WEEKNUMBER = 'e-week-number';\nvar DATEDISABLED = 'e-date-disabled';\nvar ICONDISABLED = 'e-icon-disabled';\nvar CALENDARCONTAINER = 'e-calendar-container';\nvar SEPARATOR = 'e-separator';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar DEVICE = 'e-device';\nvar OVERLAY = 'e-overlay';\nvar CHANGEICON = 'e-change-icon e-icons';\nvar LISTCLASS = 'e-list-item';\nvar RTL = 'e-rtl';\nvar HOVER = 'e-hover';\nvar OVERFLOW = 'e-range-overflow';\nvar OFFSETVALUE = 4;\nvar PRIMARY = 'e-primary';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar ZOOMIN = 'e-zoomin';\nvar NONEDITABLE = 'e-non-edit';\nvar DAYHEADERLONG = 'e-daterange-day-header-lg';\nvar HIDDENELEMENT = 'e-daterange-hidden';\nvar wrapperAttr = ['title', 'class', 'style'];\nvar Presets = /** @class */ (function (_super) {\n __extends(Presets, _super);\n function Presets() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property()\n ], Presets.prototype, \"label\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"start\", void 0);\n __decorate([\n Property()\n ], Presets.prototype, \"end\", void 0);\n return Presets;\n}(ChildProperty));\nexport { Presets };\n/**\n * Represents the DateRangePicker component that allows user to select the date range from the calendar\n * or entering the range through the input element.\n * ```html\n * <input id=\"daterangepicker\"/>\n * ```\n * ```typescript\n * <script>\n * var dateRangePickerObj = new DateRangePicker({ startDate: new Date(\"05/07/2017\"), endDate: new Date(\"10/07/2017\") });\n * dateRangePickerObj.appendTo(\"#daterangepicker\");\n * </script>\n * ```\n */\nvar DateRangePicker = /** @class */ (function (_super) {\n __extends(DateRangePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DateRangePickerModel} options - Specifies the DateRangePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DateRangePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.isCustomRange = false;\n _this.isCustomWindow = false;\n _this.presetsItem = [];\n _this.liCollections = [];\n _this.previousEleValue = '';\n _this.isKeyPopup = false;\n _this.dateDisabled = false;\n _this.isRangeIconClicked = false;\n _this.isMaxDaysClicked = false;\n _this.disabledDays = [];\n _this.preventBlur = false;\n _this.preventFocus = false;\n _this.invalidValueString = null;\n _this.isAngular = false;\n _this.preventChange = false;\n _this.dateRangeOptions = options;\n return _this;\n }\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DateRangePicker.prototype.render = function () {\n this.initialize();\n this.setProperties({ startDate: this.startValue }, true);\n this.setProperties({ endDate: this.endValue }, true);\n this.setModelValue();\n this.setDataAttribute(false);\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n };\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n DateRangePicker.prototype.preRender = function () {\n this.keyInputConfigs = {\n altDownArrow: 'alt+downarrow',\n escape: 'escape',\n enter: 'enter',\n tab: 'tab',\n altRightArrow: 'alt+rightarrow',\n altLeftArrow: 'alt+leftarrow',\n moveUp: 'uparrow',\n moveDown: 'downarrow',\n spacebar: 'space'\n };\n this.defaultConstant = {\n placeholder: this.placeholder,\n startLabel: 'Start Date',\n endLabel: 'End Date',\n customRange: 'Custom Range',\n applyText: 'Apply',\n cancelText: 'Cancel',\n selectedDays: 'Selected Days',\n days: 'days'\n };\n /**\n * Mobile View\n */\n this.isMobile = window.matchMedia('(max-width:550px)').matches;\n this.inputElement = this.element;\n this.angularTag = null;\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [ROOT, CONTROL, LIBRARY]);\n this.updateHtmlAttributeToElement();\n if (this.element.getAttribute('id')) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n this.element.id = getUniqueID('ej2-datetimepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n this.checkInvalidRange(this.value);\n if (!this.invalidValueString && (typeof (this.value) === 'string')) {\n var rangeArray = this.value.split(' ' + this.separator + ' ');\n this.value = [new Date(rangeArray[0]), new Date(rangeArray[1])];\n }\n this.initProperty();\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n _super.prototype.preRender.call(this);\n this.navNextFunction = this.navNextMonth.bind(this);\n this.navPrevFunction = this.navPrevMonth.bind(this);\n this.deviceNavNextFunction = this.deviceNavNext.bind(this);\n this.deviceNavPrevFunction = this.deviceNavPrevious.bind(this);\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n this.formElement = closest(this.element, 'form');\n };\n DateRangePicker.prototype.updateValue = function () {\n if (this.value && this.value.length > 0) {\n if (this.value[0] instanceof Date && !isNaN(+this.value[0])) {\n this.setProperties({ startDate: this.value[0] }, true);\n this.startValue = this.value[0];\n }\n else if (typeof this.value[0] === 'string') {\n if (+this.value[0] === 0 || isNaN(+(new Date(this.checkValue(this.value[0]))))) {\n this.startValue = null;\n this.setValue();\n }\n else {\n this.setProperties({ startDate: new Date(this.checkValue(this.value[0])) }, true);\n this.startValue = new Date(this.checkValue(this.value[0]));\n }\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value[1] instanceof Date && !isNaN(+this.value[1])) {\n this.setProperties({ endDate: this.value[1] }, true);\n this.endValue = this.value[1];\n }\n else if (typeof this.value[1] === 'string') {\n if (+this.value[0] === 0 || isNaN(+(new Date(this.checkValue(this.value[0]))))) {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n else {\n this.setProperties({ endDate: new Date(this.checkValue(this.value[1])) }, true);\n this.endValue = new Date(this.checkValue(this.value[1]));\n this.setValue();\n }\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (this.value && this.value.start) {\n if (this.value.start instanceof Date && !isNaN(+this.value.start)) {\n this.setProperties({ startDate: this.value.start }, true);\n this.startValue = this.value.start;\n }\n else if (typeof this.value.start === 'string') {\n this.setProperties({ startDate: new Date(this.checkValue(this.value.start)) }, true);\n this.startValue = new Date(this.checkValue(this.value.start));\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (this.value.end instanceof Date && !isNaN(+this.value.end)) {\n this.setProperties({ endDate: this.value.end }, true);\n this.endValue = this.value.end;\n }\n else if (typeof this.value.end === 'string') {\n this.setProperties({ endDate: new Date(this.checkValue(this.value.end)) }, true);\n this.endValue = new Date(this.checkValue(this.value.end));\n this.setValue();\n }\n else {\n this.setProperties({ endDate: null }, true);\n this.endValue = null;\n this.setValue();\n }\n }\n else if (isNullOrUndefined(this.value)) {\n this.endValue = this.checkDateValue(new Date(this.checkValue(this.endDate)));\n this.startValue = this.checkDateValue(new Date(this.checkValue(this.startDate)));\n this.setValue();\n }\n };\n DateRangePicker.prototype.initProperty = function () {\n this.globalize = new Internationalization(this.locale);\n this.checkFormat();\n this.checkView();\n if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n }\n this.updateValue();\n };\n DateRangePicker.prototype.checkFormat = function () {\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (this.format.skeleton !== '' && !isNullOrUndefined(this.format.skeleton)) {\n var skeletonString = this.format.skeleton;\n this.formatString = this.globalize.getDatePattern({ skeleton: skeletonString, type: 'date' });\n }\n else {\n this.formatString = null;\n }\n }\n else {\n this.formatString = null;\n }\n };\n DateRangePicker.prototype.initialize = function () {\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.checkHtmlAttributes(false);\n merge(this.defaultKeyConfigs, { shiftTab: 'shift+tab', tab: 'tab' });\n var start = this.checkDateValue(new Date(this.checkValue(this.startValue)));\n this.setProperties({ startDate: start }, true); // persist the value propeerty.\n this.setProperties({ endValue: this.checkDateValue(new Date(this.checkValue(this.endValue))) }, true);\n this.setValue();\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(this.max))) }, true);\n this.l10n = new L10n('daterangepicker', this.defaultConstant, this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.processPresets();\n this.createInput();\n this.updateHtmlAttributeToWrapper();\n this.setRangeAllowEdit();\n this.bindEvents();\n };\n DateRangePicker.prototype.setDataAttribute = function (isDynamic) {\n var attributes = {};\n if (!isDynamic) {\n for (var i = 0; i < this.element.attributes.length; i++) {\n attributes[this.element.attributes[i].name] =\n this.element.getAttribute(this.element.attributes[i].name);\n }\n }\n else {\n attributes = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (pro.indexOf('data') === 0) {\n this.firstHiddenChild.setAttribute(pro, attributes[\"\" + pro]);\n this.secondHiddenChild.setAttribute(pro, attributes[\"\" + pro]);\n }\n }\n };\n DateRangePicker.prototype.setRangeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.updateClearIconState();\n };\n DateRangePicker.prototype.updateClearIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [NONEDITABLE]);\n }\n else {\n addClass([this.inputWrapper.container], [NONEDITABLE]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [NONEDITABLE]);\n }\n };\n DateRangePicker.prototype.validationAttribute = function (element, input) {\n var name = element.getAttribute('name') ? element.getAttribute('name') : element.getAttribute('id');\n input.setAttribute('name', name);\n element.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(element.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = element.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n element.removeAttribute(attributes[i]);\n }\n };\n DateRangePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValue = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValue !== '') {\n addClass([this.inputWrapper.container], updatedClassValue.split(' '));\n }\n }\n else if (key === 'style') {\n var dateRangeStyle = this.inputWrapper.container.getAttribute(key);\n dateRangeStyle = !isNullOrUndefined(dateRangeStyle) ? (dateRangeStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputWrapper.container.setAttribute(key, dateRangeStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n DateRangePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n DateRangePicker.prototype.updateCssClass = function (cssNewClass, cssOldClass) {\n if (!isNullOrUndefined(cssOldClass)) {\n cssOldClass = (cssOldClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(cssNewClass)) {\n cssNewClass = (cssNewClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(cssNewClass, [this.inputWrapper.container], cssOldClass);\n if (this.popupWrapper) {\n Input.setCssClass(cssNewClass, [this.popupWrapper], cssOldClass);\n }\n };\n DateRangePicker.prototype.processPresets = function () {\n this.presetsItem = [];\n var i = 0;\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n for (var _i = 0, _a = this.presets; _i < _a.length; _i++) {\n var range = _a[_i];\n var id = range.label.replace(/\\s+/g, '') + '_' + (++i);\n if (typeof range.end === 'string') {\n this.presetsItem.push({\n id: id, text: range.label, end: new Date(this.checkValue(range.end)), start: new Date(this.checkValue(range.start))\n });\n }\n else {\n this.presetsItem.push({ id: id, text: range.label, start: range.start, end: range.end });\n }\n }\n var startDate = isNullOrUndefined(this.startValue) ? null : new Date(+this.startValue);\n var endDate = isNullOrUndefined(this.endValue) ? null : new Date(+this.endValue);\n this.presetsItem.push({ id: 'custom_range', text: this.l10n.getConstant('customRange'), start: startDate, end: endDate });\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.isCustomRange = true;\n this.activeIndex = this.presetsItem.length - 1;\n }\n }\n };\n DateRangePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n if (!this.isMobile) {\n this.keyInputConfigs = extend(this.keyInputConfigs, this.keyConfigs);\n this.inputKeyboardModule = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputHandler.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n if (this.enabled) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.tabIndex = -1;\n }\n };\n DateRangePicker.prototype.unBindEvents = function () {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.inputKeyboardModule)) {\n this.inputKeyboardModule.destroy();\n }\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n this.inputElement.tabIndex = -1;\n };\n DateRangePicker.prototype.updateHiddenInput = function () {\n if (this.firstHiddenChild && this.secondHiddenChild) {\n var format = { type: 'datetime', skeleton: 'yMd' };\n if (typeof this.startDate === 'string') {\n this.startDate = this.globalize.parseDate(this.startDate, format);\n }\n if (typeof this.endDate === 'string') {\n this.endDate = this.globalize.parseDate(this.endDate, format);\n }\n this.firstHiddenChild.value = (this.startDate && this.globalize.formatDate(this.startDate, format))\n || (this.inputElement.value);\n this.secondHiddenChild.value = (this.endDate && this.globalize.formatDate(this.endDate, format)) ||\n (this.inputElement.value);\n this.dispatchEvent(this.firstHiddenChild, 'focusout');\n this.dispatchEvent(this.firstHiddenChild, 'change');\n }\n };\n DateRangePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n this.updateHiddenInput();\n };\n DateRangePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.resetHandler, this);\n }\n };\n DateRangePicker.prototype.resetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.valueType = this.value;\n e.preventDefault();\n this.clear();\n var clearedArgs = {\n event: e\n };\n this.setProperties({ endDate: this.checkDateValue(this.endValue) }, true);\n this.setProperties({ startDate: this.checkDateValue(this.startValue) }, true);\n this.trigger('cleared', clearedArgs);\n this.changeTrigger(e);\n this.clearRange();\n this.hide(e);\n if (closest(this.element, 'form')) {\n var element = this.firstHiddenChild;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n DateRangePicker.prototype.restoreValue = function () {\n this.previousEleValue = this.inputElement.value;\n this.previousStartValue = this.startValue;\n this.previousEndValue = this.endValue;\n this.valueType = null;\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n this.setValue();\n this.setModelValue();\n };\n DateRangePicker.prototype.formResetHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.formElement && (e.target === this.formElement) && !this.inputElement.disabled) {\n var val = this.inputElement.getAttribute('value');\n if (!isNullOrUndefined(this.startCopy)) {\n if (!isNullOrUndefined(this.value) && !isNullOrUndefined(this.value.start)) {\n this.setProperties({ value: { start: this.startCopy, end: this.endCopy } }, true);\n this.startValue = this.value.start;\n this.endValue = this.value.end;\n }\n else {\n this.setProperties({ value: [this.startCopy, this.endCopy] }, true);\n this.startValue = this.value[0];\n this.endValue = this.value[1];\n }\n this.setProperties({ startDate: this.startValue, endDate: this.endValue }, true);\n }\n else {\n this.setProperties({ value: null, startDate: null, endDate: null }, true);\n this.startValue = this.endValue = null;\n }\n if (this.element.tagName === 'EJS-DATERANGEPICKER') {\n this.setProperties({ value: null, startDate: null, endDate: null }, true);\n val = '';\n this.startValue = this.endValue = null;\n this.inputElement.setAttribute('value', '');\n }\n this.restoreValue();\n if (this.inputElement) {\n Input.setValue(val, this.inputElement, this.floatLabelType, this.showClearButton);\n this.errorClass();\n }\n }\n };\n DateRangePicker.prototype.clear = function () {\n if (this.startValue !== null) {\n this.startValue = null;\n }\n if (this.endValue !== null) {\n this.endValue = null;\n }\n if (this.value && this.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n if (this.value !== null && this.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n if (!(isNullOrUndefined(this.applyButton))) {\n this.applyButton.disabled = this.applyButton.element.disabled = true;\n }\n this.removeSelection();\n };\n DateRangePicker.prototype.rangeIconHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.isMobile) {\n this.inputElement.setAttribute('readonly', '');\n }\n e.preventDefault();\n this.targetElement = null;\n if (this.isPopupOpen() && document.body.contains(this.popupObj.element)) {\n this.applyFunction(e);\n }\n else {\n this.isRangeIconClicked = true;\n this.inputWrapper.container.children[0].focus();\n this.show(null, e);\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.isRangeIconClicked = false;\n this.calendarFocus();\n this.isRangeIconClicked = true;\n }\n }\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateRangePicker.prototype.checkHtmlAttributes = function (isDynamic) {\n this.globalize = new Internationalization(this.locale);\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['startDate', 'endDate', 'minDays', 'maxDays', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder',\n 'type', 'value'];\n var format = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['enabled'] === undefined)) || isDynamic) {\n var disabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ enabled: !disabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === 'true' || this.inputElement.getAttribute(prop) === '' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.dateRangeOptions) || (this.dateRangeOptions['value'] === undefined)) || isDynamic) {\n var value = this.inputElement.getAttribute(prop);\n this.setProperties(setValue(prop, value, {}), !isDynamic);\n }\n break;\n case 'style':\n this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n break;\n case 'min':\n if ((isNullOrUndefined(this.min) || +this.min === +new Date(1900, 0, 1)) || isDynamic) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), !isDynamic);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n break;\n case 'max':\n if ((isNullOrUndefined(this.max) || +this.max === +new Date(2099, 11, 31)) || isDynamic) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.setProperties(setValue(prop, dateValue, {}), !isDynamic);\n }\n break;\n case 'startDate':\n if (isNullOrUndefined(this.startDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.startValue = dateValue;\n this.setValue();\n }\n break;\n case 'endDate':\n if (isNullOrUndefined(this.endDate)) {\n var dateValue = this.globalize.parseDate(this.inputElement.getAttribute(prop), format);\n this.endValue = dateValue;\n this.setValue();\n }\n break;\n case 'minDays':\n if (isNullOrUndefined(this.minDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'maxDays':\n if (isNullOrUndefined(this.maxDays)) {\n this.setProperties(setValue(prop, parseInt(this.inputElement.getAttribute(prop), 10), {}), true);\n }\n break;\n case 'type':\n if (this.inputElement.getAttribute(prop) !== 'text') {\n this.inputElement.setAttribute('type', 'text');\n }\n break;\n }\n }\n }\n };\n DateRangePicker.prototype.createPopup = function () {\n for (var i = 0; i < this.presetsItem.length; i++) {\n if ((i !== (this.presetsItem.length - 1)) && this.presetsItem[i].id === 'custom_range') {\n this.presetsItem.splice(i, 1);\n }\n }\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n for (var i = 0; i <= this.presetsItem.length - 2; i++) {\n var startDate = this.presetsItem[i].start;\n var endDate = this.presetsItem[i].end;\n if (this.startValue && this.endValue) {\n if ((+new Date(startDate.setHours(0, 0, 0, 0)) === +new Date(this.startValue.setHours(0, 0, 0, 0))) &&\n (+new Date(endDate.setHours(0, 0, 0, 0)) === +new Date(this.endValue.setHours(0, 0, 0, 0)))) {\n this.activeIndex = i;\n this.isCustomRange = false;\n }\n }\n }\n this.popupWrapper = createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.adjustLongHeaderWidth();\n var isPreset = (!this.isCustomRange || this.isMobile);\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && isPreset) {\n this.isCustomWindow = false;\n this.createPresets();\n this.listRippleEffect();\n this.renderPopup();\n }\n else {\n this.isCustomWindow = true;\n this.renderControl();\n }\n };\n DateRangePicker.prototype.renderControl = function () {\n this.createControl();\n this.bindCalendarEvents();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) &&\n !isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n this.updateHeader();\n };\n DateRangePicker.prototype.clearCalendarEvents = function () {\n if (this.leftCalPrevIcon && this.leftCalNextIcon && this.rightCalPrevIcon && this.rightCalNextIcon) {\n EventHandler.clearEvents(this.leftCalPrevIcon);\n EventHandler.clearEvents(this.leftCalNextIcon);\n EventHandler.clearEvents(this.rightCalPrevIcon);\n EventHandler.clearEvents(this.rightCalNextIcon);\n }\n };\n DateRangePicker.prototype.updateNavIcons = function () {\n _super.prototype.iconHandler.call(this);\n };\n DateRangePicker.prototype.calendarIconEvent = function () {\n this.clearCalendarEvents();\n if (this.leftCalPrevIcon && !this.leftCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.leftCalNextIcon && !this.leftCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.leftCalNextIcon, 'mousedown', this.navNextFunction);\n }\n if (this.rightCalPrevIcon && !this.rightCalPrevIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalPrevIcon, 'mousedown', this.navPrevFunction);\n }\n if (this.rightCalNextIcon && !this.rightCalNextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.rightCalNextIcon, 'mousedown', this.navNextFunction);\n }\n };\n DateRangePicker.prototype.bindCalendarEvents = function () {\n if (!this.isMobile) {\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.headerTitleElement = this.popupObj.element.querySelector('.' + RIGHTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.headerTitleElement = this.popupObj.element.querySelector('.' + LEFTCALENDER + ' .' + HEADER + ' .' + TITLE);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.leftKeyboardModule = new KeyboardEvents(this.leftCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n this.rightKeyboardModule = new KeyboardEvents(this.rightCalendar, {\n eventName: 'keydown',\n keyAction: this.keyInputHandler.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n }\n else {\n this.deviceCalendarEvent();\n EventHandler.add(this.startButton.element, 'click', this.deviceHeaderClick, this);\n EventHandler.add(this.endButton.element, 'click', this.deviceHeaderClick, this);\n }\n if (this.start === this.depth) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.calendarIconRipple = function () {\n rippleEffect(this.leftCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.leftCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalPrevIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.rightCalNextIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n };\n DateRangePicker.prototype.deviceCalendarEvent = function () {\n EventHandler.clearEvents(this.nextIcon);\n EventHandler.clearEvents(this.previousIcon);\n rippleEffect(this.nextIcon, { selector: '.e-prev', duration: 400, isCenterRipple: true });\n rippleEffect(this.previousIcon, { selector: '.e-next', duration: 400, isCenterRipple: true });\n if (this.nextIcon && !this.nextIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.nextIcon, 'mousedown', this.deviceNavNextFunction);\n }\n if (this.previousIcon && !this.previousIcon.classList.contains(DISABLED)) {\n EventHandler.add(this.previousIcon, 'mousedown', this.deviceNavPrevFunction);\n }\n };\n DateRangePicker.prototype.deviceNavNext = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigateNext(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.deviceNavPrevious = function (e) {\n var calendar = closest(e.target, '.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n this.navigatePrevious(e);\n this.deviceNavigation();\n };\n DateRangePicker.prototype.updateDeviceCalendar = function (calendar) {\n if (calendar) {\n this.previousIcon = calendar.querySelector('.' + PREVICON);\n this.nextIcon = calendar.querySelector('.' + NEXTICON);\n this.calendarElement = calendar;\n this.deviceCalendar = calendar;\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n }\n };\n DateRangePicker.prototype.deviceHeaderClick = function (event) {\n var element = event.currentTarget;\n if (element.classList.contains(STARTBUTTON) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.classList.remove(ACTIVE);\n this.startButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + STARTDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.startValue);\n remove(this.tableBodyElement);\n this.createContentBody();\n this.deviceNavigation();\n }\n this.removeClassDisabled();\n }\n else if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n var calendar = this.popupObj.element.querySelector('.' + CALENDAR);\n this.updateDeviceCalendar(calendar);\n if (isNullOrUndefined(this.calendarElement.querySelector('.' + ENDDATE + ':not(.e-other-month)'))) {\n this.currentDate = new Date(+this.endValue);\n remove(this.tableBodyElement);\n this.createContentBody();\n this.deviceNavigation();\n }\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n this.selectableDates();\n }\n };\n DateRangePicker.prototype.inputFocusHandler = function () {\n if (!this.enabled) {\n return;\n }\n this.preventBlur = false;\n var focusArguments = {\n model: this\n };\n if (!this.preventFocus) {\n this.trigger('focus', focusArguments);\n }\n this.updateClearIconState();\n this.updateHiddenInput();\n if (this.openOnFocus && !this.preventFocus) {\n this.preventFocus = true;\n this.show();\n }\n else {\n this.preventFocus = true;\n }\n };\n DateRangePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (!this.preventBlur) {\n var value = this.inputElement.value;\n if (!isNullOrUndefined(this.presetsItem)) {\n if (this.presetsItem.length > 0 && this.previousEleValue !== this.inputElement.value) {\n this.activeIndex = this.presetsItem.length - 1;\n this.isCustomRange = true;\n }\n }\n if (!isNullOrUndefined(value) && value.trim() !== '') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length > 1) {\n this.invalidValueString = null;\n var dateOptions = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n var start = new Date(range[0]);\n var end = new Date(range[1]);\n var startDate = this.getStartEndDate(start, false, range, dateOptions);\n var endDate = this.getStartEndDate(end, true, range, dateOptions);\n if (!isNullOrUndefined(startDate) && !isNaN(+startDate) && !isNullOrUndefined(endDate) && !isNaN(+endDate)) {\n var prevStartVal = this.startValue;\n this.startValue = startDate;\n var prevEndVal = this.endValue;\n this.endValue = endDate;\n this.setValue();\n this.refreshControl();\n if (value !== this.previousEleValue) {\n this.changeTrigger(e);\n }\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n this.updateHiddenInput();\n // For Mobile mode, when a value is present and choose another range and click on console\n // when popup is open, two startvalues and end values are updated in the popup.\n if (this.isMobile && this.isPopupOpen()) {\n this.startValue = prevStartVal;\n this.endValue = prevEndVal;\n }\n return;\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n else {\n if (!this.strictMode) {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n if (!this.strictMode) {\n if (isNullOrUndefined(this.popupObj)) {\n this.currentDate = null;\n }\n this.previousStartValue = this.previousEndValue = null;\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(value) && value.trim() === '') {\n this.startValue = null;\n this.endValue = null;\n }\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.updateInput();\n }\n this.errorClass();\n this.changeTrigger(e);\n if (!this.preventBlur && document.activeElement !== this.inputElement) {\n this.preventFocus = false;\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n }\n this.updateHiddenInput();\n };\n // eslint-disable-next-line @typescript-eslint/tslint/config\n DateRangePicker.prototype.getStartEndDate = function (date, isEnd, range, dateOptions) {\n if (this.depth === 'Month') {\n return this.globalize.parseDate(range[isEnd ? 1 : 0].trim(), dateOptions);\n }\n else if (this.depth === 'Year') {\n return new Date(date.getFullYear(), date.getMonth() + (isEnd ? 1 : 0), isEnd ? 0 : 1);\n }\n else {\n return new Date(date.getFullYear(), isEnd ? 11 : 0, isEnd ? 31 : 1);\n }\n };\n DateRangePicker.prototype.clearRange = function () {\n this.previousStartValue = this.previousEndValue = null;\n this.currentDate = null;\n };\n DateRangePicker.prototype.errorClass = function () {\n var inputStr = this.inputElement.value.trim();\n if (((isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue) && inputStr !== '') ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max))\n || ((this.startValue && this.isDateDisabled(this.startValue))\n || (this.endValue && this.isDateDisabled(this.endValue)))) && inputStr !== '') {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n else {\n if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n }\n }\n };\n DateRangePicker.prototype.keyCalendarUpdate = function (isLeftCalendar, ele, isRemoveFocus) {\n if (isRemoveFocus === void 0) { isRemoveFocus = true; }\n if (isRemoveFocus) {\n this.removeFocusedDate();\n }\n if (isLeftCalendar) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n ele = this.leftCalendar;\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n ele = this.rightCalendar;\n }\n this.updateCalendarElement(ele);\n this.table.focus();\n return ele;\n };\n DateRangePicker.prototype.navInCalendar = function (e, isLeftCalendar, leftLimit, rightLimit, ele) {\n var view = this.getViewNumber(this.currentView());\n var date;\n var min = this.min;\n var max;\n if (!isNullOrUndefined(this.maxDays) && this.isMaxDaysClicked && !isNullOrUndefined(this.startValue)) {\n max = new Date(new Date(+this.startValue).setDate(this.startValue.getDate() + (this.maxDays - 1)));\n }\n else {\n max = this.max;\n }\n switch (e.action) {\n case 'moveRight':\n date = new Date(+this.currentDate);\n this.addDay(date, 1, e, max, min);\n if (isLeftCalendar && +date === +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.keyboardNavigate(1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveLeft':\n date = new Date(+this.currentDate);\n this.addDay(date, -1, e, max, min);\n if (!isLeftCalendar) {\n if (+date === +leftLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n }\n this.keyboardNavigate(-1, view, e, max, min);\n this.keyNavigation(ele, e);\n break;\n case 'moveUp':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, -7, e, max, min);\n if (+date <= +leftLimit && !isLeftCalendar) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.keyboardNavigate(-7, view, e, max, min);\n }\n else {\n this.keyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n }\n this.keyNavigation(ele, e);\n break;\n case 'moveDown':\n if (view === 0) {\n date = new Date(+this.currentDate);\n this.addDay(date, 7, e, max, min);\n if (isLeftCalendar && +date >= +rightLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.keyboardNavigate(7, view, e, max, min);\n }\n else {\n this.keyboardNavigate(4, view, e, this.max, this.min);\n }\n this.keyNavigation(ele, e);\n break;\n case 'home':\n this.currentDate = this.firstDay(this.currentDate);\n remove(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n this.keyNavigation(ele, e);\n break;\n case 'end':\n this.currentDate = this.lastDay(this.currentDate, view);\n remove(this.tableBodyElement);\n if (view === 0) {\n this.renderMonths(e);\n }\n else if (view === 1) {\n this.renderYears(e);\n }\n else {\n this.renderDecades(e);\n }\n this.keyNavigation(ele, e);\n break;\n case 'tab':\n if (this.tabKeyValidation(ele, LEFTCALENDER)) {\n ele = this.keyCalendarUpdate(false, ele, false);\n this.currentDate = this.firstCellToFocus(this.rightCalendar);\n view = this.getViewNumber(this.currentView());\n this.keyboardNavigate(0, view, e, max, min);\n this.keyNavigation(ele, e);\n }\n break;\n case 'shiftTab':\n if (this.tabKeyValidation(ele, RIGHTCALENDER)) {\n ele = this.keyCalendarUpdate(true, ele, false);\n this.currentDate = this.firstCellToFocus(this.leftCalendar);\n this.keyboardNavigate(0, view, e, max, min);\n this.keyNavigation(ele, e);\n }\n break;\n }\n };\n DateRangePicker.prototype.firstCellToFocus = function (calendar) {\n var focusAbleEle = this.getViewNumber(this.currentView()) === 2 ? calendar.children[1].firstElementChild.querySelector('td.e-cell:not(.e-week-number):not(.e-disabled):not(.e-other-year)') : calendar.children[1].firstElementChild.querySelector('td.e-cell:not(.e-week-number):not(.e-disabled):not(.e-other-month)');\n var focusEleID = focusAbleEle && focusAbleEle.id ? focusAbleEle.id.split('_')[0] : null;\n var currentFirstDay = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth(), 1);\n var focusDate = focusEleID ? new Date(+focusEleID) : currentFirstDay;\n return focusDate;\n };\n DateRangePicker.prototype.keyInputHandler = function (e, value) {\n var date;\n var view = this.getViewNumber(this.currentView());\n var rightDateLimit = new Date(this.rightCalCurrentDate.getFullYear(), this.rightCalCurrentDate.getMonth(), 1);\n var leftDateLimit = new Date(this.leftCalCurrentDate.getFullYear(), this.leftCalCurrentDate.getMonth() + 1, 0);\n var ele = closest(e.target, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n var isLeftCalendar = ele.classList.contains(LEFTCALENDER);\n this.updateCalendarElement(ele);\n var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n var focusedDate = ele.querySelector('tr td.' + FOCUSDATE);\n var startDate = ele.querySelector('tr td.' + STARTDATE);\n var endDate = ele.querySelector('tr td.' + ENDDATE);\n var depthValue = this.getViewNumber(this.depth);\n var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n var leftCalendar = closest(e.target, '.' + LEFTCALENDER);\n var rightCalendar = closest(e.target, '.' + RIGHTCALENDER);\n var presetElement = closest(e.target, '.' + PRESETS);\n if (!isNullOrUndefined(focusedDate)) {\n // eslint-disable-next-line no-self-assign\n this.currentDate = this.currentDate;\n }\n else if (!isNullOrUndefined(endDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.endValue);\n }\n else if (!isNullOrUndefined(startDate) && !this.dateDisabled) {\n this.currentDate = new Date(+this.startValue);\n }\n else if (!this.dateDisabled) {\n this.currentDate.setDate(1);\n }\n this.effect = '';\n switch (e.action) {\n case 'altUpArrow':\n if (this.isPopupOpen()) {\n this.hide(e);\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n break;\n case 'select':\n if (levelRestrict) {\n var element = !isNullOrUndefined(focusedDate) ? focusedDate : startDate;\n if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n this.selectRange(null, (element));\n }\n }\n else {\n if (!isNullOrUndefined(selectedDate) && !levelRestrict || !isNullOrUndefined(focusedDate)) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (focusedDate || selectedDate), value);\n }\n }\n e.preventDefault();\n break;\n case 'controlHome':\n {\n var yearDate = new Date(this.currentDate.getFullYear(), 0, 1);\n if (!isLeftCalendar && +yearDate < +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n _super.prototype.navigateTo.call(this, 'Month', new Date(this.currentDate.getFullYear(), 0, 1));\n this.keyNavigation(ele, e);\n }\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else if (!isNullOrUndefined(rightCalendar)) {\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(leftCalendar)) {\n if (this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.cancelButton.element.focus();\n }\n }\n else {\n if (!isNullOrUndefined(rightCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'controlUp':\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n this.calendarNavigation(e, this.calendarElement);\n }\n else {\n this.calendarNavigation(e, this.calendarElement);\n }\n e.preventDefault();\n break;\n case 'controlDown':\n if ((!isNullOrUndefined(selectedDate) || !isNullOrUndefined(focusedDate)) && !levelRestrict) {\n if (!isNullOrUndefined(this.value)) {\n if (this.calendarElement.classList.contains(LEFTCALENDER)) {\n value = this.startDate;\n }\n else {\n value = this.endDate;\n }\n }\n this.controlDown = e;\n this.contentClick(null, --view, (selectedDate || focusedDate), value);\n }\n e.preventDefault();\n break;\n case 'controlEnd':\n {\n var yearDate = new Date(this.currentDate.getFullYear(), 11, 31);\n if (isLeftCalendar && +yearDate > +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n _super.prototype.navigateTo.call(this, 'Month', new Date(this.currentDate.getFullYear(), 11, 31));\n this.keyNavigation(ele, e);\n }\n break;\n case 'pageUp':\n date = new Date(+this.currentDate);\n this.addMonths(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addMonths(this.currentDate, -1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'pageDown':\n date = new Date(+this.currentDate);\n this.addMonths(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addMonths(this.currentDate, 1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageUp':\n date = new Date(+this.currentDate);\n this.addYears(date, -1);\n if (!isLeftCalendar && +date <= +leftDateLimit) {\n ele = this.keyCalendarUpdate(true, ele);\n }\n this.addYears(this.currentDate, -1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftPageDown':\n date = new Date(+this.currentDate);\n this.addYears(date, 1);\n if (isLeftCalendar && +date >= +rightDateLimit) {\n ele = this.keyCalendarUpdate(false, ele);\n }\n this.addYears(this.currentDate, 1);\n _super.prototype.navigateTo.call(this, 'Month', this.currentDate);\n this.keyNavigation(ele, e);\n break;\n case 'shiftTab':\n if (!isNullOrUndefined(this.presetElement)) {\n this.presetElement.setAttribute('tabindex', '0');\n this.presetElement.focus();\n this.removeFocusedDate();\n }\n if (isLeftCalendar) {\n e.preventDefault();\n }\n if (this.tabKeyValidation(ele, RIGHTCALENDER)) {\n this.currentDate = new Date(+this.leftCalCurrentDate);\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n }\n break;\n case 'spacebar':\n if (this.applyButton && !this.applyButton.disabled) {\n this.applyFunction(e);\n }\n break;\n case 'tab':\n if (this.tabKeyValidation(ele, LEFTCALENDER)) {\n this.currentDate = new Date(+this.rightCalCurrentDate);\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n }\n break;\n default:\n this.navInCalendar(e, isLeftCalendar, leftDateLimit, rightDateLimit, ele);\n this.checkMinMaxDays();\n }\n this.presetHeight();\n };\n DateRangePicker.prototype.tabKeyValidation = function (ele, calendarPos) {\n var isLeftCalendar = ele.classList.contains(calendarPos);\n var rightHeader = this.rightCalendar.querySelector('.e-header');\n var leftHeader = this.leftCalendar.querySelector('.e-header');\n var isRightMonth = rightHeader ? rightHeader.classList.contains('e-month') : false;\n var isLeftMonth = leftHeader ? leftHeader.classList.contains('e-month') : false;\n var isRightYear = rightHeader ? rightHeader.classList.contains('e-year') : false;\n var isLeftYear = leftHeader ? leftHeader.classList.contains('e-year') : false;\n var isRightDecade = rightHeader ? rightHeader.classList.contains('e-decade') : false;\n var isLeftDecade = leftHeader ? leftHeader.classList.contains('e-decade') : false;\n return isLeftCalendar && (isLeftMonth || isLeftYear || isLeftDecade) &&\n (isRightMonth || isRightYear || isRightDecade) && !this.isMobile;\n };\n DateRangePicker.prototype.keyNavigation = function (calendar, e) {\n this.bindCalendarCellEvents(calendar);\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n else {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n }\n this.updateNavIcons();\n this.calendarIconEvent();\n this.updateRange([calendar]);\n this.dateDisabled = this.isDateDisabled(this.currentDate);\n e.preventDefault();\n };\n DateRangePicker.prototype.inputHandler = function (e) {\n switch (e.action) {\n case 'altDownArrow':\n if (!this.isPopupOpen()) {\n if (this.inputElement.value === '') {\n this.clear();\n this.changeTrigger(e);\n this.clearRange();\n }\n this.show(null, e);\n this.isRangeIconClicked = false;\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.leftCalendar)) {\n this.calendarFocus();\n }\n }\n this.isKeyPopup = true;\n }\n break;\n case 'escape':\n if (this.isPopupOpen()) {\n this.hide(e);\n }\n break;\n case 'enter':\n if (document.activeElement === this.inputElement) {\n this.inputBlurHandler(e);\n this.hide(e);\n }\n break;\n case 'tab':\n if (document.activeElement === this.inputElement && this.isPopupOpen()) {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n DateRangePicker.prototype.bindCalendarCellEvents = function (calendar) {\n var tdCells;\n if (calendar) {\n tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n }\n else {\n tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n }\n for (var _i = 0, tdCells_1 = tdCells; _i < tdCells_1.length; _i++) {\n var cell = tdCells_1[_i];\n EventHandler.clearEvents(cell);\n var disabledCell = cell.classList.contains(DISABLED) || cell.classList.contains(DATEDISABLED);\n if (!disabledCell && !cell.classList.contains(WEEKNUMBER)) {\n if (!this.isMobile) {\n EventHandler.add(cell, 'mouseover', this.hoverSelection, this);\n }\n EventHandler.add(cell, 'mousedown', this.selectRange, this);\n }\n }\n };\n DateRangePicker.prototype.removeFocusedDate = function () {\n var isDate = !isNullOrUndefined(this.startValue) || !isNullOrUndefined(this.endValue);\n var focusedDate = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' .' + FOCUSDATE);\n for (var _i = 0, focusedDate_1 = focusedDate; _i < focusedDate_1.length; _i++) {\n var ele = focusedDate_1[_i];\n var today = new Date();\n var eleDate = this.getIdValue(null, ele);\n if ((this.depth === 'Month' && this.currentView() === 'Month' &&\n (!ele.classList.contains(TODAY) || (ele.classList.contains(TODAY) && isDate)))\n || (this.depth === 'Year' && this.currentView() === 'Year' &&\n ((!this.isSameMonth(today, eleDate) && !this.isSameYear(today, eleDate)) || isDate))\n || (this.depth === 'Decade' && this.currentView() === 'Decade' &&\n (!this.isSameYear(today, eleDate) || isDate))) {\n ele.classList.remove(FOCUSDATE);\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(ENDDATE)) {\n ele.removeAttribute('aria-label');\n }\n }\n }\n };\n DateRangePicker.prototype.hoverSelection = function (event, element) {\n var currentElement = element || event.currentTarget;\n var currentDate = this.getIdValue(null, currentElement);\n if (!isNullOrUndefined(this.startValue) && +this.startValue >= +this.min && +this.startValue <= +this.max) {\n if ((!this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)\n && isNullOrUndefined(this.endValue) && isNullOrUndefined(this.startValue))\n || (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))) {\n var tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td');\n for (var _i = 0, tdCells_2 = tdCells; _i < tdCells_2.length; _i++) {\n var ele = tdCells_2[_i];\n var isDisabledCell = (!ele.classList.contains(DISABLED) || ele.classList.contains(DATEDISABLED));\n if (!ele.classList.contains(WEEKNUMBER) && isDisabledCell) {\n var eleDate = this.getIdValue(null, ele);\n var startDateValue = new Date(+this.startValue);\n var eleDateValue = new Date(+eleDate);\n if (eleDateValue.setHours(0, 0, 0, 0) >= startDateValue.setHours(0, 0, 0, 0) && +eleDate <= +currentDate) {\n addClass([ele], RANGEHOVER);\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.isSameStartEnd = function (startVal, endVal) {\n var isSame = false;\n if (this.depth === 'Month') {\n if ((startVal).setHours(0, 0, 0, 0) === (endVal).setHours(0, 0, 0, 0)) {\n isSame = true;\n }\n }\n else if (this.depth === 'Year') {\n if ((startVal.getFullYear() === endVal.getFullYear()) &&\n (startVal.getMonth() === endVal.getMonth())) {\n isSame = true;\n }\n }\n else if (this.depth === 'Decade') {\n if (startVal.getFullYear() === endVal.getFullYear()) {\n isSame = true;\n }\n }\n return isSame;\n };\n DateRangePicker.prototype.updateRange = function (elementCollection) {\n if (!isNullOrUndefined(this.startValue)) {\n for (var _i = 0, elementCollection_1 = elementCollection; _i < elementCollection_1.length; _i++) {\n var calendar = elementCollection_1[_i];\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n for (var _a = 0, tdCells_3 = tdCells; _a < tdCells_3.length; _a++) {\n var ele = tdCells_3[_a];\n if (!ele.classList.contains(WEEKNUMBER) && !ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n var eleDateValue = this.getIdValue(null, ele);\n if (!isNullOrUndefined(this.endValue)) {\n if (this.currentView() === this.depth &&\n +eleDateValue.setHours(0, 0, 0, 0) >= +new Date(+this.startValue).setHours(0, 0, 0, 0)\n && +eleDateValue.setHours(0, 0, 0, 0) <= +new Date(+this.endValue).setHours(0, 0, 0, 0) &&\n !this.isSameStartEnd(new Date(+this.startValue), new Date(+this.endValue)) &&\n +new Date(+this.startValue).setHours(0, 0, 0, 0) >= +this.min\n && +new Date(+this.endValue).setHours(0, 0, 0, 0) <= +this.max\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], RANGEHOVER);\n }\n }\n else {\n removeClass([ele], [RANGEHOVER]);\n }\n if (ele.classList.contains(SELECTED) && ele.classList.contains(ENDDATE) &&\n (+eleDateValue !== +this.endValue)) {\n removeClass([ele], [SELECTED]);\n removeClass([ele], [ENDDATE]);\n }\n if (ele.classList.contains(RANGEHOVER) && (+eleDateValue > +this.endValue)) {\n removeClass([ele], [RANGEHOVER]);\n }\n if (!ele.classList.contains(OTHERMONTH)) {\n var startDateValue = new Date(+this.startValue);\n var eleDateValue_1 = new Date(+eleDate);\n if (this.currentView() === this.depth &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +startDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) >= +startDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, true);\n }\n var endDateValue = new Date(+this.endValue);\n if (this.currentView() === 'Year') {\n eleDateValue_1 = new Date(eleDateValue_1.getFullYear(), eleDateValue_1.getMonth() + 1, 0);\n }\n else if (this.currentView() === 'Decade') {\n eleDateValue_1 = new Date(eleDateValue_1.getFullYear(), 11, 31);\n }\n if (this.currentView() === this.depth &&\n !isNullOrUndefined(this.endValue) &&\n +eleDateValue_1.setHours(0, 0, 0, 0) === +endDateValue.setHours(0, 0, 0, 0)\n && +eleDateValue_1.setHours(0, 0, 0, 0) <= +endDateValue.setHours(0, 0, 0, 0) &&\n +this.startValue >= +this.min\n && !this.inputWrapper.container.classList.contains('e-error')\n && !(this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue))) {\n addClass([ele], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(ele, this.startValue, false);\n }\n if (+eleDate === +this.startValue && !isNullOrUndefined(this.endValue) && +eleDate === +this.endValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n }\n }\n }\n }\n };\n DateRangePicker.prototype.checkMinMaxDays = function () {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n if (!this.isMobile) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + LEFTCALENDER));\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + RIGHTCALENDER));\n }\n else {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n }\n };\n DateRangePicker.prototype.rangeArgs = function (e) {\n var inputValue;\n var range;\n var startDate = !isNullOrUndefined(this.startValue) ?\n this.globalize.formatDate(this.startValue, {\n format: this.formatString, type: 'date', skeleton: 'yMd'\n }) : null;\n var endDate = !isNullOrUndefined(this.endValue) ?\n this.globalize.formatDate(this.endValue, {\n format: this.formatString, type: 'date', skeleton: 'yMd'\n }) : null;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n inputValue = startDate + ' ' + this.separator + ' ' + endDate;\n range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n }\n else {\n inputValue = '';\n range = 0;\n }\n var args = {\n value: this.value,\n startDate: this.startValue,\n endDate: this.endValue,\n daySpan: range,\n event: e || null,\n element: this.element,\n isInteracted: !isNullOrUndefined(e),\n text: inputValue\n };\n return args;\n };\n DateRangePicker.prototype.otherMonthSelect = function (ele, isStartDate, sameDate) {\n var value = +this.getIdValue(null, ele);\n var dateIdString = '*[id^=\"/id\"]:not(.e-other-month)'.replace('/id', '' + value);\n var tdCell = this.popupObj && this.popupObj.element.querySelector(dateIdString);\n if (!isNullOrUndefined(tdCell)) {\n if (isStartDate) {\n addClass([tdCell], [STARTDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.startValue, true);\n }\n else {\n addClass([tdCell], [ENDDATE, SELECTED]);\n this.addSelectedAttributes(tdCell, this.endValue, true);\n }\n if (sameDate) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n }\n };\n DateRangePicker.prototype.selectRange = function (event, element) {\n var leftCalendar;\n var rightCalendar;\n if (event) {\n event.preventDefault();\n }\n var date = isNullOrUndefined(event) ? this.getIdValue(null, element)\n : this.getIdValue(event, null);\n var y = date.getFullYear();\n var m = date.getMonth();\n var firstDay = new Date(y, m, 1);\n var lastDay = new Date(y, m + 1, 0);\n var firstMonth = new Date(y, 0, 1);\n var lastMonth = new Date(y, 11, 31);\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n if (!this.isMobile || this.isMobile && !this.endButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n }\n else if (this.isMobile && this.startButton.element.classList.contains(ACTIVE)) {\n this.removeSelection();\n }\n var ele = element || event.currentTarget;\n if (isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.previousStartValue)) {\n date.setHours(this.previousStartValue.getHours());\n date.setMinutes(this.previousStartValue.getMinutes());\n date.setSeconds(this.previousStartValue.getSeconds());\n }\n this.startValue = (this.depth === 'Month') ? new Date(this.checkValue(date)) :\n (this.depth === 'Year') ? firstDay : firstMonth;\n this.endValue = null;\n this.setValue();\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n this.applyButton.disabled = true;\n this.applyButton.element.disabled = true;\n if (this.isMobile) {\n this.endButton.element.classList.add(ACTIVE);\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.removeAttribute('disabled');\n this.selectableDates();\n }\n this.trigger('select', this.rangeArgs(event));\n }\n else {\n if (+date === +this.startValue || +date > +this.startValue) {\n if (+date === +this.startValue && !isNullOrUndefined(this.minDays) && this.minDays > 1) {\n return;\n }\n this.endValue = null;\n this.setValue();\n if (this.isMobile || element) {\n this.hoverSelection(event, element);\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n date.setHours(this.previousEndValue.getHours());\n date.setMinutes(this.previousEndValue.getMinutes());\n date.setSeconds(this.previousEndValue.getSeconds());\n }\n this.endValue = (this.depth === 'Month') ? new Date(this.checkValue(date)) :\n (this.depth === 'Year') ? lastDay : lastMonth;\n this.setValue();\n var endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n if (this.isMobile) {\n this.startButton.element.classList.remove(ACTIVE);\n this.endButton.element.classList.add(ACTIVE);\n for (var _i = 0, endEle_1 = endEle; _i < endEle_1.length; _i++) {\n var ele_1 = endEle_1[_i];\n ele_1.removeAttribute('aria-label');\n if (!ele_1.classList.contains(STARTDATE)) {\n ele_1.setAttribute('aria-selected', 'false');\n removeClass([ele_1], [ENDDATE, SELECTED]);\n }\n else {\n this.addSelectedAttributes(ele_1, this.startValue, true);\n removeClass([ele_1], [ENDDATE]);\n }\n }\n }\n addClass([ele], ENDDATE);\n if (+this.endValue === +this.startValue) {\n this.addSelectedAttributes(ele, this.endValue, false, true);\n }\n else {\n this.addSelectedAttributes(ele, this.endValue, false);\n }\n if (ele.classList.contains(OTHERMONTH)) {\n if (+this.endValue === +this.startValue) {\n this.otherMonthSelect(ele, false, true);\n }\n else {\n this.otherMonthSelect(ele, false);\n }\n }\n endEle = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, endEle_2 = endEle; _a < endEle_2.length; _a++) {\n var ele_2 = endEle_2[_a];\n if (ele_2.classList.contains(STARTDATE)) {\n removeClass([ele_2], [RANGEHOVER]);\n }\n }\n this.applyButton.disabled = false;\n this.applyButton.element.disabled = false;\n if (!this.isMobile) {\n this.removeClassDisabled();\n }\n if (!isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n this.trigger('select', this.rangeArgs(event));\n }\n else if (+date < +this.startValue) {\n this.removeClassDisabled();\n this.startValue = (this.depth === 'Month') ? new Date(this.checkValue(date)) :\n (this.depth === 'Year') ? firstDay : firstMonth;\n this.setValue();\n this.removeSelectedAttributes();\n removeClass(this.popupObj.element.querySelectorAll('.' + STARTDATE), [STARTDATE, SELECTED]);\n addClass([ele], STARTDATE);\n this.addSelectedAttributes(ele, this.startValue, true);\n if (ele.classList.contains(OTHERMONTH)) {\n this.otherMonthSelect(ele, true);\n }\n this.checkMinMaxDays();\n }\n }\n if (event) {\n leftCalendar = closest(event.target, '.' + LEFTCALENDER);\n }\n if (!isNullOrUndefined(leftCalendar)) {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (event) {\n rightCalendar = event && closest(event.target, '.' + RIGHTCALENDER);\n }\n if (!isNullOrUndefined(rightCalendar)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n addClass([ele], SELECTED);\n this.calendarIconEvent();\n this.updateHeader();\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.selectableDates = function () {\n if (!isNullOrUndefined(this.startValue)) {\n var tdCells = this.calendarElement.querySelectorAll('.' + CALENDAR + ' td');\n var isStartDate = false;\n if (this.currentView() === this.depth) {\n for (var _i = 0, tdCells_4 = tdCells; _i < tdCells_4.length; _i++) {\n var ele = tdCells_4[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n if (!ele.classList.contains(DISABLED)) {\n var eleDate = this.getIdValue(null, ele);\n if (+eleDate < +this.startValue) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n continue;\n }\n else {\n break;\n }\n }\n }\n if (ele.classList.contains(STARTDATE) && !ele.classList.contains(OTHERMONTH)) {\n isStartDate = true;\n break;\n }\n }\n if (isStartDate) {\n if (!this.previousIcon.classList.contains(DISABLED)) {\n addClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n else {\n for (var _a = 0, tdCells_5 = tdCells; _a < tdCells_5.length; _a++) {\n var ele = tdCells_5[_a];\n var startMonth = this.startValue.getMonth();\n var startYear = this.startValue.getFullYear();\n var element = this.getIdValue(null, ele);\n if (!this.startButton.element.classList.contains(ACTIVE) && ((this.currentView() === 'Year' &&\n (element.getMonth() < startMonth) && (element.getFullYear() <= startYear))\n || (this.currentView() === 'Decade' && (element.getMonth() <= startMonth) &&\n (element.getFullYear() < startYear)))) {\n addClass([ele], [DISABLED]);\n }\n else {\n break;\n }\n }\n if (tdCells[0].classList.contains(DISABLED)) {\n this.previousIconHandler(true);\n }\n else if (tdCells[tdCells.length - 1].classList.contains(DISABLED)) {\n this.nextIconHandler(true);\n }\n }\n }\n };\n DateRangePicker.prototype.updateMinMaxDays = function (calendar) {\n if ((!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) ||\n (this.isMobile && this.endButton.element.classList.contains(ACTIVE))) {\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) || (!isNullOrUndefined(this.maxDays) && this.maxDays > 0)) {\n var startValueSelected = this.removeTimeValueFromDate(this.startValue);\n var minDate = new Date(new Date(+startValueSelected).setDate(startValueSelected.getDate() + (this.minDays - 1)));\n var maxDate = new Date(new Date(+startValueSelected).setDate(startValueSelected.getDate() + (this.maxDays - 1)));\n minDate = (!isNullOrUndefined(this.minDays) && this.minDays > 0) ? minDate : null;\n maxDate = (!isNullOrUndefined(this.maxDays) && this.maxDays > 0) ? maxDate : null;\n if (this.currentView() === 'Year') {\n minDate = isNullOrUndefined(minDate) ? null : new Date(minDate.getFullYear(), minDate.getMonth(), 0);\n maxDate = isNullOrUndefined(maxDate) ? null : new Date(maxDate.getFullYear(), maxDate.getMonth(), 1);\n }\n else if (this.currentView() === 'Decade') {\n minDate = isNullOrUndefined(minDate) ? null : new Date(minDate.getFullYear() - 1, 11, 1);\n maxDate = isNullOrUndefined(maxDate) ? null : new Date(maxDate.getFullYear(), 0, 1);\n }\n var tdCells = calendar.querySelectorAll('.' + CALENDAR + ' td');\n var maxEle = void 0;\n for (var _i = 0, tdCells_6 = tdCells; _i < tdCells_6.length; _i++) {\n var ele = tdCells_6[_i];\n if (!ele.classList.contains(STARTDATE) && !ele.classList.contains(WEEKNUMBER)) {\n var eleDate = this.getIdValue(null, ele);\n eleDate = this.removeTimeValueFromDate(eleDate);\n if (!isNullOrUndefined(minDate) && +eleDate === +minDate && ele.classList.contains(DISABLED)) {\n minDate.setDate(minDate.getDate() + 1);\n }\n if (!ele.classList.contains(DISABLED)) {\n if (+eleDate <= +startValueSelected) {\n continue;\n }\n if (!isNullOrUndefined(minDate) && +eleDate < +minDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.clearEvents(ele);\n }\n if (!isNullOrUndefined(maxDate) && +eleDate > +maxDate) {\n addClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n this.isMaxDaysClicked = true;\n EventHandler.clearEvents(ele);\n if (isNullOrUndefined(maxEle) && !ele.classList.contains(OTHERMONTH)) {\n maxEle = ele;\n }\n }\n }\n }\n }\n if (!isNullOrUndefined(maxEle)) {\n if (this.isMobile) {\n if (!this.nextIcon.classList.contains(DISABLED)) {\n addClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n var calendar_1 = closest(maxEle, '.' + RIGHTCALENDER);\n calendar_1 = isNullOrUndefined(calendar_1) ? this.leftCalendar : calendar_1;\n var isLeftCalendar = calendar_1.classList.contains(LEFTCALENDER);\n if (!isLeftCalendar) {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (!this.rightCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.leftCalNextIcon.classList.contains(DISABLED)) {\n addClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (!this.rightCalPrevIcon.classList.contains(DISABLED)) {\n addClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n }\n }\n }\n }\n else {\n this.isMaxDaysClicked = false;\n }\n };\n DateRangePicker.prototype.removeTimeValueFromDate = function (value) {\n var dateValue = new Date(value.getFullYear(), value.getMonth(), value.getDate());\n return dateValue;\n };\n DateRangePicker.prototype.removeClassDisabled = function () {\n var tdCells = this.popupObj.element.querySelectorAll('.' + CALENDAR + ' td' + '.' + DATEDISABLED);\n for (var _i = 0, tdCells_7 = tdCells; _i < tdCells_7.length; _i++) {\n var ele = tdCells_7[_i];\n if (ele.classList.contains(DATEDISABLED)) {\n removeClass([ele], [DATEDISABLED, DISABLED, OVERLAY]);\n EventHandler.add(ele, 'click', this.selectRange, this);\n if (!this.isMobile) {\n EventHandler.add(ele, 'mouseover', this.hoverSelection, this);\n }\n }\n }\n if (this.isMobile) {\n if (this.nextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.nextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.previousIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.previousIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n else {\n if (this.rightCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.rightCalPrevIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.rightCalPrevIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n if (this.leftCalNextIcon.classList.contains(ICONDISABLED)) {\n removeClass([this.leftCalNextIcon], [ICONDISABLED, DISABLED, OVERLAY]);\n }\n }\n };\n DateRangePicker.prototype.updateHeader = function () {\n var format = { type: 'date', skeleton: 'yMMMd' };\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = range.toString() + ' ' + this.l10n.getConstant('days');\n }\n else {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n if (!this.isMobile) {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n if (!isNullOrUndefined(this.startValue)) {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.textContent = this.globalize.formatDate(this.startValue, format);\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n this.endButton.element.textContent = this.globalize.formatDate(this.endValue, format);\n }\n else {\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n }\n }\n if ((this.isDateDisabled(this.startValue) || this.isDateDisabled(this.endValue)) ||\n ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue))\n && +this.startValue > +this.endValue))) {\n if (!this.isMobile) {\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n this.popupObj.element.querySelector('.' + STARTLABEL).textContent = this.l10n.getConstant('startLabel');\n this.popupObj.element.querySelector('.' + ENDLABEL).textContent = this.l10n.getConstant('endLabel');\n }\n else {\n this.startButton.element.textContent = this.l10n.getConstant('startLabel');\n this.endButton.element.textContent = this.l10n.getConstant('endLabel');\n this.popupObj.element.querySelector('.' + DAYSPAN).textContent = this.l10n.getConstant('selectedDays');\n }\n }\n if (this.popupObj.element.querySelector('#custom_range')) {\n this.popupObj.element.querySelector('#custom_range').textContent =\n this.l10n.getConstant('customRange') !== '' ? this.l10n.getConstant('customRange') : 'Custom Range';\n }\n };\n DateRangePicker.prototype.removeSelection = function () {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.removeSelectedAttributes();\n if (this.popupObj) {\n if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [STARTDATE, ENDDATE, SELECTED]);\n }\n if (this.popupObj.element.querySelectorAll('.' + FOCUSDATE).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + FOCUSDATE), FOCUSDATE);\n }\n if (this.popupObj.element.querySelectorAll('.' + RANGEHOVER).length > 0) {\n removeClass(this.popupObj.element.querySelectorAll('.' + RANGEHOVER), [RANGEHOVER]);\n }\n }\n };\n DateRangePicker.prototype.addSelectedAttributes = function (ele, date, isStartDate, sameDate) {\n if (ele) {\n var title = this.globalize.formatDate(date, { type: 'date', skeleton: 'full' });\n if (!isNullOrUndefined(sameDate) && sameDate) {\n ele.setAttribute('aria-label', 'The current start and end date is ' + '' + title);\n }\n else {\n ele.setAttribute('aria-label', 'The current ' + (isStartDate ? 'start' : 'end') + ' date is ' + '' + title);\n }\n ele.setAttribute('aria-selected', 'true');\n }\n };\n DateRangePicker.prototype.removeSelectedAttributes = function () {\n if (this.popupObj) {\n var start = this.popupObj.element.querySelectorAll('.' + STARTDATE);\n for (var _i = 0, start_1 = start; _i < start_1.length; _i++) {\n var ele = start_1[_i];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n var end = this.popupObj.element.querySelectorAll('.' + ENDDATE);\n for (var _a = 0, end_1 = end; _a < end_1.length; _a++) {\n var ele = end_1[_a];\n ele.setAttribute('aria-selected', 'false');\n ele.removeAttribute('aria-label');\n }\n }\n };\n DateRangePicker.prototype.updateCalendarElement = function (calendar) {\n if (calendar.classList.contains(LEFTCALENDER)) {\n this.calendarElement = this.leftCalendar;\n this.currentDate = this.leftCalCurrentDate;\n this.previousIcon = this.leftCalPrevIcon;\n this.nextIcon = this.leftCalNextIcon;\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.currentDate = this.rightCalCurrentDate;\n this.previousIcon = this.rightCalPrevIcon;\n this.nextIcon = this.rightCalNextIcon;\n }\n this.contentElement = calendar.querySelector('.' + CONTENT);\n this.tableBodyElement = select('.' + CONTENT + ' tbody', calendar);\n this.table = calendar.querySelector('.' + CONTENT).getElementsByTagName('table')[0];\n this.headerTitleElement = calendar.querySelector('.' + HEADER + ' .' + TITLE);\n this.headerElement = calendar.querySelector('.' + HEADER);\n };\n DateRangePicker.prototype.navPrevMonth = function (e) {\n e.preventDefault();\n var ele = closest(e.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(e.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigatePrevious(e);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.deviceNavigation = function (ele) {\n this.deviceCalendarEvent();\n this.updateRange([this.popupObj.element.querySelector('.' + CALENDAR)]);\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.updateMinMaxDays(this.popupObj.element.querySelector('.' + CALENDAR));\n }\n if (this.endButton.element.classList.contains(ACTIVE)) {\n this.selectableDates();\n }\n if (this.currentView() === this.depth) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n };\n DateRangePicker.prototype.updateControl = function (calendar, customDate) {\n if (customDate === void 0) { customDate = null; }\n if (calendar.classList.contains(RIGHTCALENDER)) {\n this.rightCalCurrentDate = new Date(+(customDate ? customDate : this.currentDate));\n }\n else {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n }\n this.calendarIconEvent();\n if ((((this.depth === 'Month')\n && this.leftCalendar.querySelector('.e-content').classList.contains('e-month')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-month'))\n || ((this.depth === 'Year')\n && this.leftCalendar.querySelector('.e-content').classList.contains('e-year')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-year'))\n || ((this.depth === 'Decade')\n && this.leftCalendar.querySelector('.e-content').classList.contains('e-decade')\n && this.rightCalendar.querySelector('.e-content').classList.contains('e-decade')))\n || this.isMobile) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.updateRange([calendar]);\n };\n DateRangePicker.prototype.navNextMonth = function (event) {\n event.preventDefault();\n var ele = closest(event.target, '.' + LEFTCALENDER);\n ele = isNullOrUndefined(ele) ? closest(event.target, '.' + RIGHTCALENDER) : ele;\n this.updateCalendarElement(ele);\n this.navigateNext(event);\n if (!isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.updateMinMaxDays(ele);\n }\n this.updateControl(ele);\n };\n DateRangePicker.prototype.isPopupOpen = function () {\n if (!isNullOrUndefined(this.popupObj) && this.popupObj.element.classList.contains(POPUP)) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.createRangeHeader = function () {\n var labelContainer = this.createElement('div', { className: STARTENDCONTAINER });\n if (!this.isMobile) {\n var startLabel = this.createElement('a', { className: STARTLABEL });\n var endLabel = this.createElement('a', { className: ENDLABEL });\n var changeIcon = this.createElement('span', { className: CHANGEICON });\n attributes(startLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'Start Date', 'role': 'button' });\n attributes(endLabel, { 'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'End Date', 'role': 'button' });\n labelContainer.appendChild(startLabel);\n labelContainer.appendChild(changeIcon);\n labelContainer.appendChild(endLabel);\n startLabel.textContent = this.l10n.getConstant('startLabel');\n endLabel.textContent = this.l10n.getConstant('endLabel');\n }\n else {\n var endBtn = this.createElement('button', { className: ENDBUTTON });\n var startBtn = this.createElement('button', { className: STARTBUTTON });\n this.startButton = new Button({ content: this.l10n.getConstant('startLabel') }, startBtn);\n this.endButton = new Button({ content: this.l10n.getConstant('endLabel') }, endBtn);\n labelContainer.appendChild(startBtn);\n labelContainer.appendChild(endBtn);\n }\n return labelContainer;\n };\n DateRangePicker.prototype.disableInput = function () {\n if (this.strictMode) {\n if (!isNullOrUndefined(this.previousStartValue) && !isNullOrUndefined(this.previousEndValue)) {\n this.startValue = this.previousStartValue;\n this.endValue = this.previousEndValue;\n this.setValue();\n this.updateInput();\n }\n }\n else {\n this.updateInput();\n this.clearRange();\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n this.errorClass();\n }\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n this.bindEvents();\n };\n DateRangePicker.prototype.validateMinMax = function () {\n this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n if (!(this.min <= this.max)) {\n this.disableInput();\n return;\n }\n if (!isNullOrUndefined(this.minDays) && !isNullOrUndefined(this.maxDays)) {\n if (this.maxDays > 0 && this.minDays > 0 && (this.minDays > this.maxDays)) {\n this.maxDays = null;\n }\n }\n if (!isNullOrUndefined(this.minDays) && this.minDays < 0) {\n this.minDays = null;\n }\n if (!isNullOrUndefined(this.maxDays) && this.maxDays < 0) {\n this.maxDays = null;\n }\n };\n DateRangePicker.prototype.validateRangeStrict = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (+this.startValue <= +this.min) {\n this.startValue = this.min;\n this.setValue();\n }\n else if (+this.startValue >= +this.min && +this.startValue >= +this.max) {\n this.startValue = this.max;\n }\n }\n if (!isNullOrUndefined(this.endValue)) {\n if (+this.endValue > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else if (+this.endValue < +this.min) {\n this.endValue = this.min;\n this.setValue();\n }\n }\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateRange = function () {\n this.validateMinMaxDays();\n };\n DateRangePicker.prototype.validateMinMaxDays = function () {\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n var range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if ((!isNullOrUndefined(this.minDays) && this.minDays > 0) && !(range >= this.minDays)) {\n if (this.strictMode) {\n var date = new Date(+this.startValue);\n date.setDate(date.getDate() + (this.minDays - 1));\n if (+date > +this.max) {\n this.endValue = this.max;\n this.setValue();\n }\n else {\n this.endValue = date;\n this.setValue();\n }\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n if ((!isNullOrUndefined(this.maxDays) && this.maxDays > 0) && !(range <= this.maxDays)) {\n if (this.strictMode) {\n this.endValue = new Date(+this.startValue);\n this.endValue.setDate(this.endValue.getDate() + (this.maxDays - 1));\n this.setValue();\n }\n else {\n this.startValue = null;\n this.endValue = null;\n this.setValue();\n }\n }\n }\n };\n DateRangePicker.prototype.renderCalendar = function () {\n this.calendarElement = this.createElement('div');\n this.calendarElement.classList.add(CALENDAR);\n if (this.enableRtl) {\n this.calendarElement.classList.add(RTL);\n }\n attributes(this.calendarElement, { 'data-role': 'calendar' });\n _super.prototype.createHeader.call(this);\n _super.prototype.createContent.call(this);\n };\n DateRangePicker.prototype.isSameMonth = function (start, end) {\n if (start.getMonth() === end.getMonth() && start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.isSameYear = function (start, end) {\n if (start.getFullYear() === end.getFullYear()) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.isSameDecade = function (start, end) {\n var startYear = start.getFullYear();\n var endYear = end.getFullYear();\n if ((startYear - (startYear % 10)) === (endYear - (endYear % 10))) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.startMonthCurrentDate = function () {\n if (this.isSameMonth(this.min, this.max) || +this.currentDate > +this.max || this.isSameMonth(this.currentDate, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (this.currentDate < this.min) {\n this.currentDate = new Date(this.checkValue(this.min));\n }\n };\n DateRangePicker.prototype.selectNextMonth = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameMonth(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() + 1);\n return;\n }\n if ((!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setDate(1);\n var month = this.currentDate.getMonth() + 1;\n this.currentDate.setMonth(month);\n }\n };\n DateRangePicker.prototype.selectNextYear = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameYear(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n this.currentDate.setMonth(0);\n var yr = this.currentDate.getFullYear() + 1;\n this.currentDate.setFullYear(yr);\n return;\n }\n if ((!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setMonth(0);\n this.currentDate.setFullYear(this.currentDate.getFullYear() + 1);\n }\n };\n DateRangePicker.prototype.selectNextDecade = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) && !this.isSameDecade(this.endValue, this.currentDate)\n && !this.isDateDisabled(this.endValue) && !this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(+this.endValue);\n }\n else {\n var decyr = this.currentDate.getFullYear() + 10;\n this.currentDate.setFullYear(decyr);\n return;\n }\n if (((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)\n || (!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.currentDate.setFullYear(this.currentDate.getFullYear() + 10);\n }\n };\n DateRangePicker.prototype.selectStartMonth = function () {\n if (!isNullOrUndefined(this.startValue)) {\n if (!isNullOrUndefined(this.max) && this.isSameMonth(this.startValue, this.max)) {\n this.currentDate = new Date(+this.max);\n this.currentDate.setDate(1);\n this.currentDate.setMonth(this.currentDate.getMonth() - 1);\n }\n else if (!(this.startValue >= this.min && this.startValue <= this.max)\n || this.isDateDisabled(this.startValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n else {\n this.currentDate = new Date(+this.startValue);\n }\n }\n else {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n this.startMonthCurrentDate();\n }\n if ((!isNullOrUndefined(this.endValue) && +this.endValue > +this.max)\n || (!isNullOrUndefined(this.startValue) && +this.startValue < +this.min)\n || ((!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) && +this.startValue > +this.endValue)) {\n this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n }\n this.startMonthCurrentDate();\n };\n DateRangePicker.prototype.createCalendar = function () {\n var calendarContainer = this.createElement('div', { className: CALENDARCONTAINER });\n if (!this.isMobile) {\n this.selectStartMonth();\n this.renderCalendar();\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.calendarElement.classList.add(LEFTCALENDER);\n this.leftCalPrevIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + PREVICON);\n this.leftCalNextIcon = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + NEXTICON);\n this.leftTitle = this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalNextIcon);\n this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER).appendChild(this.leftCalPrevIcon);\n prepend([this.leftCalPrevIcon], this.calendarElement.querySelector('.' + LEFTCALENDER + ' .' + HEADER));\n this.leftCalendar = this.calendarElement;\n var leftContainer = this.createElement('div', { className: LEFTCONTAINER });\n var rightContainer = this.createElement('div', { className: RIGHTCONTAINER });\n leftContainer.appendChild(this.leftCalendar);\n calendarContainer.appendChild(leftContainer);\n if (!this.isMobile) {\n EventHandler.add(this.leftTitle, 'click', this.leftNavTitle, this);\n }\n if (this.start === 'Month') {\n this.selectNextMonth();\n }\n if (this.start === 'Year') {\n this.selectNextYear();\n }\n if (this.start === 'Decade') {\n this.selectNextDecade();\n }\n this.renderCalendar();\n this.rightCalCurrentDate = new Date(+this.currentDate);\n addClass([this.calendarElement], RIGHTCALENDER);\n this.rightCalendar = this.calendarElement;\n removeClass([this.leftCalendar && this.leftCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n removeClass([this.rightCalendar && this.rightCalendar.querySelector('.e-content tbody')], 'e-zoomin');\n this.rightCalPrevIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + PREVICON);\n this.rightCalNextIcon = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + NEXTICON);\n this.rightTitle = this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + TITLE);\n remove(this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('table').setAttribute('tabindex', '0');\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalNextIcon);\n this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER).appendChild(this.rightCalPrevIcon);\n prepend([this.rightCalPrevIcon], this.calendarElement.querySelector('.' + RIGHTCALENDER + ' .' + HEADER));\n rightContainer.appendChild(this.rightCalendar);\n calendarContainer.appendChild(rightContainer);\n if (!this.isMobile) {\n EventHandler.add(this.rightTitle, 'click', this.rightNavTitle, this);\n }\n }\n else {\n if (!isNullOrUndefined(this.startValue)) {\n this.currentDate = new Date(+this.startValue);\n }\n _super.prototype.validateDate.call(this);\n _super.prototype.minMaxUpdate.call(this);\n _super.prototype.render.call(this);\n var prevIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + PREVICON);\n var nextIcon = this.calendarElement.querySelector('.' + CALENDAR + ' .' + NEXTICON);\n remove(this.calendarElement.querySelector('.' + CALENDAR + ' .' + ICONCONTAINER));\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(nextIcon);\n this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER).appendChild(prevIcon);\n prepend([prevIcon], this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER));\n this.deviceCalendar = this.calendarElement;\n calendarContainer.appendChild(this.calendarElement);\n this.headerTitleElement = this.calendarElement.querySelector('.' + CALENDAR + ' .' + HEADER + ' .' + TITLE);\n }\n return calendarContainer;\n };\n DateRangePicker.prototype.leftNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.leftCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.calendarNavigation = function (e, element) {\n this.table = element.querySelector('table');\n this.headerTitleElement = element.querySelector('.e-title');\n this.tableBodyElement = element.querySelector('tbody');\n this.tableHeadElement = element.querySelector('thead');\n this.contentElement = element.querySelector('.e-content');\n this.updateCalendarElement(element);\n _super.prototype.navigateTitle.call(this, e);\n this.updateNavIcons();\n };\n DateRangePicker.prototype.rightNavTitle = function (e) {\n if (this.isPopupOpen()) {\n this.calendarElement = this.rightCalendar;\n this.calendarNavigation(e, this.calendarElement);\n }\n };\n DateRangePicker.prototype.clickEventEmitter = function (e) {\n if (!this.isMobile) {\n if (closest(e.target, '.e-calendar.e-left-calendar')) {\n this.calendarElement = this.leftCalendar;\n this.updateCalendarElement(this.leftCalendar);\n }\n else {\n this.calendarElement = this.rightCalendar;\n this.updateCalendarElement(this.rightCalendar);\n }\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the current view of the Calendar.\n *\n * @returns {string}\n * @private\n * @hidden\n */\n DateRangePicker.prototype.currentView = function () {\n return _super.prototype.currentView.call(this);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n DateRangePicker.prototype.getCalendarView = function (view) {\n if (view === 'Year') {\n return 'Year';\n }\n else if (view === 'Decade') {\n return 'Decade';\n }\n else {\n return 'Month';\n }\n };\n DateRangePicker.prototype.navigatedEvent = function (e) {\n this.trigger('navigated', this.navigatedArgs);\n if (!isNullOrUndefined(this.popupObj)) {\n var element = void 0;\n var view = this.getCalendarView(this.currentView());\n if (this.isMobile) {\n if (view === this.depth) {\n this.bindCalendarCellEvents();\n this.deviceNavigation();\n this.removeFocusedDate();\n this.checkMinMaxDays();\n }\n else {\n this.selectableDates();\n }\n }\n else {\n if (!this.isMobile && view === this.depth) {\n element = this.calendarElement.classList.contains('e-left-calendar') ? this.leftCalendar : this.rightCalendar;\n if (element === this.leftCalendar && ((e && !e.currentTarget.children[0].classList.contains('e-icons'))\n || (!isNullOrUndefined(this.controlDown)))) {\n this.leftCalCurrentDate = new Date(+this.currentDate);\n this.effect = '';\n this.currentDate = this.leftCalCurrentDate;\n this.updateCalendarElement(this.leftCalendar);\n this.updateControl(this.leftCalendar);\n this.updateCalendarElement(this.rightCalendar);\n _super.prototype.navigateTo.call(this, view, this.rightCalCurrentDate);\n var customDate = this.rightCalCurrentDate ? this.rightCalCurrentDate : this.currentDate;\n this.updateControl(this.rightCalendar, customDate);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.controlDown = null;\n }\n else if (e && !e.currentTarget.children[0].classList.contains('e-icons')\n || (!isNullOrUndefined(this.controlDown))) {\n this.rightCalCurrentDate = new Date(+this.currentDate);\n this.effect = '';\n this.currentDate = this.rightCalCurrentDate;\n this.updateCalendarElement(this.rightCalendar);\n this.updateControl(this.rightCalendar);\n this.updateCalendarElement(this.leftCalendar);\n if (this.startValue && isNullOrUndefined(this.endValue)) {\n if (view === 'Month' && this.startValue.getMonth() < this.rightCalCurrentDate.getMonth() &&\n this.startValue.getFullYear() <= this.rightCalCurrentDate.getFullYear()) {\n _super.prototype.navigateTo.call(this, view, new Date(+this.startValue));\n }\n else if (view === 'Year' && this.startValue.getFullYear() < this.rightCalCurrentDate.getFullYear()) {\n _super.prototype.navigateTo.call(this, view, new Date(+this.startValue));\n }\n else {\n _super.prototype.navigateTo.call(this, view, this.leftCalCurrentDate);\n }\n }\n else {\n _super.prototype.navigateTo.call(this, view, this.leftCalCurrentDate);\n }\n this.updateControl(this.leftCalendar);\n this.updateNavIcons();\n this.calendarIconEvent();\n this.calendarIconRipple();\n this.controlDown = null;\n }\n this.checkMinMaxDays();\n }\n else {\n this.updateNavIcons();\n this.calendarIconEvent();\n }\n }\n }\n };\n DateRangePicker.prototype.createControl = function () {\n var controlContainer = this.createElement('div', { className: RANGECONTAINER });\n var headerContainer = this.createElement('div', { className: RANGEHEADER });\n var labelContainer = this.createRangeHeader();\n headerContainer.appendChild(labelContainer);\n var daySpan = this.createElement('div', { className: DAYSPAN });\n attributes(daySpan, { 'aria-label': 'Selected Days' });\n daySpan.textContent = this.l10n.getConstant('selectedDays');\n headerContainer.appendChild(daySpan);\n var separator = this.createElement('div', { className: SEPARATOR });\n var calendarContainer = this.createCalendar();\n controlContainer.appendChild(headerContainer);\n controlContainer.appendChild(separator);\n controlContainer.appendChild(calendarContainer);\n var footerSection = this.createElement('div', { className: FOOTER });\n var cancelBtn = this.createElement('button', { className: CANCEL + ' ' + FLAT + ' ' + CSS });\n var applyBtn = this.createElement('button');\n addClass([applyBtn], [APPLY, FLAT, PRIMARY, CSS]);\n footerSection.appendChild(applyBtn);\n footerSection.appendChild(cancelBtn);\n var enable = !isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue);\n this.cancelButton = new Button({ content: this.l10n.getConstant('cancelText') }, cancelBtn);\n this.applyButton = new Button({ content: this.l10n.getConstant('applyText'), disabled: !enable }, applyBtn);\n EventHandler.add(applyBtn, 'click', this.applyFunction, this);\n EventHandler.add(cancelBtn, 'click', this.cancelFunction, this);\n this.popupWrapper.appendChild(controlContainer);\n if (!this.isMobile) {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.createPresets();\n this.listRippleEffect();\n addClass([controlContainer], RANGEBORDER);\n addClass([this.popupWrapper], 'e-preset-wrapper');\n var presets = this.popupWrapper.querySelector('.' + PRESETS);\n presets.style.height = this.popupWrapper.querySelector('.' + RANGECONTAINER).getBoundingClientRect().height + 'px';\n }\n }\n this.popupWrapper.appendChild(footerSection);\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n this.renderPopup();\n };\n DateRangePicker.prototype.cancelFunction = function (eve) {\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n eve.preventDefault();\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.startValue = null;\n this.endValue = null;\n this.removeSelection();\n this.hide(eve);\n };\n DateRangePicker.prototype.deviceHeaderUpdate = function () {\n if (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.endButton.element.setAttribute('disabled', '');\n this.startButton.element.classList.add(ACTIVE);\n }\n else if (!isNullOrUndefined(this.startValue)) {\n this.startButton.element.classList.add(ACTIVE);\n }\n };\n DateRangePicker.prototype.applyFunction = function (eve) {\n var isValueChanged = false;\n if (eve.type !== 'touchstart') {\n eve.preventDefault();\n }\n if (this.closeEventArgs && this.closeEventArgs.cancel) {\n this.startValue = this.popupWrapper.querySelector('.e-start-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-start-date'));\n this.endValue = this.popupWrapper.querySelector('.e-end-date') &&\n this.getIdValue(null, this.popupWrapper.querySelector('.e-end-date'));\n this.setValue();\n }\n if (document.activeElement !== this.inputElement) {\n this.preventFocus = true;\n this.inputElement.focus();\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n if (eve.type !== 'touchstart' &&\n this.closeEventArgs && !this.closeEventArgs.cancel) {\n eve.preventDefault();\n }\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n this.previousEleValue = this.inputElement.value;\n Input.setValue(this.rangeArgs(eve).text, this.inputElement, this.floatLabelType, this.showClearButton);\n if (+this.initStartDate !== +this.startValue || +this.initEndDate !== +this.endValue) {\n isValueChanged = true;\n }\n this.changeTrigger(eve);\n this.hide(eve ? eve : null);\n this.errorClass();\n isValueChanged = true;\n }\n else {\n this.hide(eve ? eve : null);\n }\n if (!(closest(eve.target, '.' + INPUTCONTAINER))\n && (!isValueChanged)) {\n this.focusOut();\n }\n if (!this.isMobile) {\n this.isKeyPopup = false;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.children[1].focus();\n this.keyInputConfigs = extend(this.keyInputConfigs, this.keyConfigs);\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyConfigs: this.keyInputConfigs,\n keyAction: this.popupKeyActionHandle.bind(this)\n });\n }\n }\n };\n DateRangePicker.prototype.onMouseClick = function (event, item) {\n if (event.type === 'touchstart') {\n return;\n }\n var target = item || event.target;\n var li = closest(target, '.' + LISTCLASS);\n var isClick = li && li.classList.contains(ACTIVE);\n if (li && li.classList.contains(LISTCLASS)) {\n this.setListSelection(li, event);\n }\n this.preventFocus = true;\n this.inputElement.focus();\n if (!this.isMobile) {\n this.preventFocus = true;\n if (li && li.classList.contains(LISTCLASS) && li.getAttribute('id') === 'custom_range') {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (!isClick && event.type === 'keydown') {\n this.inputElement.focus();\n }\n }\n }\n };\n DateRangePicker.prototype.onMouseOver = function (event) {\n var li = closest(event.target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS) && !li.classList.contains(HOVER)) {\n addClass([li], HOVER);\n }\n };\n DateRangePicker.prototype.onMouseLeave = function (event) {\n var item = closest(event.target, '.' + HOVER);\n if (!isNullOrUndefined(item)) {\n removeClass([item], HOVER);\n }\n };\n DateRangePicker.prototype.setListSelection = function (li, event) {\n if (li && (!li.classList.contains(ACTIVE) || (this.isMobile && li.classList.contains(ACTIVE)))) {\n if (this.isMobile && li.classList.contains(ACTIVE)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n var values_1 = this.presetsItem[this.activeIndex];\n if (values_1.id === 'custom_range') {\n this.renderCustomPopup();\n return;\n }\n return;\n }\n this.removeListSelection();\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n addClass([li], ACTIVE);\n li.setAttribute('aria-selected', 'true');\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.renderCustomPopup();\n }\n else {\n this.applyPresetRange(values, event);\n }\n }\n };\n DateRangePicker.prototype.removeListSelection = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n if (!isNullOrUndefined(item)) {\n removeClass([item], ACTIVE);\n item.removeAttribute('aria-selected');\n }\n };\n DateRangePicker.prototype.setValue = function () {\n this.modelValue = [this.startValue, this.endValue];\n };\n DateRangePicker.prototype.applyPresetRange = function (values, e) {\n this.hide(null);\n this.presetsItem[this.presetsItem.length - 1].start = null;\n this.presetsItem[this.presetsItem.length - 1].end = null;\n this.startValue = values.start;\n this.endValue = values.end;\n this.setValue();\n this.refreshControl();\n this.trigger('select', this.rangeArgs(e));\n this.changeTrigger(e);\n this.previousEleValue = this.inputElement.value;\n this.isCustomRange = false;\n this.leftCalendar = this.rightCalendar = null;\n if (this.isKeyPopup) {\n this.isRangeIconClicked = false;\n this.inputElement.focus();\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.showPopup = function (element, event) {\n this.presetHeight();\n if (this.zIndex === 1000) {\n this.popupObj.show(null, this.element);\n }\n else {\n this.popupObj.show(null, null);\n }\n if (this.isMobile) {\n this.popupObj.refreshPosition();\n }\n };\n DateRangePicker.prototype.renderCustomPopup = function () {\n this.isCustomWindow = true;\n this.popupObj.hide();\n this.popupWrapper = this.createElement('div', { id: this.element.id + '_popup', className: ROOT + ' ' + POPUP });\n this.renderControl();\n this.openEventArgs.appendTo.appendChild(this.popupWrapper);\n this.showPopup();\n this.isCustomRange = true;\n if (!this.isMobile) {\n this.calendarFocus();\n }\n };\n DateRangePicker.prototype.listRippleEffect = function () {\n for (var _i = 0, _a = this.liCollections; _i < _a.length; _i++) {\n var li = _a[_i];\n rippleEffect(li);\n }\n };\n DateRangePicker.prototype.createPresets = function () {\n if (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label)) {\n this.presetElement = this.createElement('div', { className: PRESETS, attrs: { 'tabindex': '0' } });\n var listTag = ListBase.createList(this.createElement, this.presetsItem, null, true);\n attributes(listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options', 'tabindex': '0' });\n this.presetElement.appendChild(listTag);\n this.popupWrapper.appendChild(this.presetElement);\n var customElement = this.presetElement.querySelector('#custom_range');\n if (!isNullOrUndefined(customElement)) {\n customElement.textContent = this.l10n.getConstant('customRange') !== '' ? this.l10n.getConstant('customRange')\n : 'Custom Range';\n }\n this.liCollections = this.presetElement.querySelectorAll('.' + LISTCLASS);\n this.wireListEvents();\n if (this.isMobile) {\n this.presetElement.style.width = this.inputWrapper.container.getBoundingClientRect().width + 'px';\n }\n if (!isNullOrUndefined(this.activeIndex) && this.activeIndex > -1) {\n addClass([this.liCollections[this.activeIndex]], ACTIVE);\n }\n }\n };\n DateRangePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.presetElement, 'click', this.onMouseClick, this);\n if (!this.isMobile) {\n EventHandler.add(this.presetElement, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.presetElement, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateRangePicker.prototype.unWireListEvents = function () {\n if (!isNullOrUndefined(this.presetElement)) {\n EventHandler.remove(this.presetElement, 'click touchstart', this.onMouseClick);\n if (!this.isMobile) {\n EventHandler.remove(this.presetElement, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.presetElement, 'mouseout', this.onMouseLeave);\n }\n }\n };\n DateRangePicker.prototype.renderPopup = function () {\n var _this = this;\n this.popupWrapper.classList.add('e-control');\n var popupWidth = this.popupWrapper.getBoundingClientRect().width;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass.trim() !== '') {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (this.isMobile && this.isCustomWindow) {\n this.modal = this.createElement('div');\n document.body.appendChild(this.modal);\n }\n this.popupObj = new Popup(this.popupWrapper, {\n relateTo: this.isMobile && this.isCustomWindow ? document.body :\n (!isNullOrUndefined(this.targetElement) ? this.targetElement : this.inputWrapper.container),\n position: (this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'left', Y: 'bottom' } : { X: 'center', Y: 'center' }) :\n this.enableRtl ? { X: 'left', Y: 'bottom' } : { X: 'right', Y: 'bottom' }),\n offsetX: this.isMobile || this.enableRtl ? 0 : -popupWidth,\n offsetY: OFFSETVALUE,\n collision: this.isMobile ?\n (!isUndefined(this.presets[0].start && this.presets[0].end && this.presets[0].label) && !this.isCustomWindow ?\n { X: 'fit' } : { X: 'fit', Y: 'fit' }) : { X: 'fit', Y: 'flip' },\n targetType: this.isMobile && this.isCustomWindow ? 'container' : 'relative',\n enableRtl: this.enableRtl,\n zIndex: this.zIndex,\n open: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'true', 'aria-owns': _this.inputElement.id + '_options' });\n if (_this.value) {\n attributes(_this.inputElement, { 'aria-activedescendant': _this.inputElement.id });\n }\n else {\n _this.inputElement.removeAttribute('aria-activedescendant');\n }\n addClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (!_this.isMobile) {\n if (_this.cancelButton) {\n _this.btnKeyboardModule = new KeyboardEvents(_this.cancelButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { tab: 'tab', altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n _this.btnKeyboardModule = new KeyboardEvents(_this.applyButton.element, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n }\n if (!isNullOrUndefined(_this.leftCalendar)) {\n if (!_this.isRangeIconClicked) {\n _this.calendarFocus();\n }\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.keyInputConfigs = extend(_this.keyInputConfigs, _this.keyConfigs);\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.presetKeyActionHandler.bind(_this),\n keyConfigs: _this.keyInputConfigs\n });\n _this.presetKeyboardModule = new KeyboardEvents(_this.presetElement, {\n eventName: 'keydown',\n keyAction: _this.popupKeyActionHandle.bind(_this),\n keyConfigs: { altRightArrow: 'alt+rightarrow', altLeftArrow: 'alt+leftarrow' }\n });\n if (isNullOrUndefined(_this.leftCalendar)) {\n _this.preventBlur = true;\n _this.presetElement.focus();\n }\n else {\n _this.presetElement.setAttribute('tabindex', '-1');\n }\n }\n _this.popupKeyBoardHandler();\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.add(document, 'keydown', _this.popupCloseHandler, _this);\n }\n },\n close: function () {\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n _this.inputElement.removeAttribute('aria-owns');\n _this.inputElement.removeAttribute('aria-activedescendant');\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n if (_this.isRangeIconClicked) {\n _this.inputWrapper.container.children[1].focus();\n }\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label)) {\n _this.unWireListEvents();\n }\n if (!isNullOrUndefined(_this.popupObj)) {\n if (!isNullOrUndefined(_this.popupObj.element.parentElement)) {\n detach(_this.popupObj.element);\n }\n _this.popupObj.destroy();\n _this.popupObj = null;\n }\n if (_this.isMobile && !Browser.isDevice) {\n EventHandler.remove(document, 'keydown', _this.popupCloseHandler);\n }\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (this.isMobile) {\n this.popupObj.element.classList.add(DEVICE);\n if (!this.isMobile) {\n this.popupObj.element.classList.add('e-bigger');\n }\n }\n if (this.isMobile && this.isCustomWindow) {\n addClass([this.modal], [DEVICE, ROOT, 'e-range-modal']);\n document.body.className += ' ' + OVERFLOW;\n this.modal.style.display = 'block';\n }\n EventHandler.add(document, 'mousedown touchstart', this.documentHandler, this);\n };\n DateRangePicker.prototype.popupCloseHandler = function (e) {\n switch (e.keyCode) {\n case 27:\n this.hide(e);\n break;\n }\n };\n DateRangePicker.prototype.calendarFocus = function () {\n var startDate = this.popupObj && this.popupObj.element.querySelector('.' + STARTDATE);\n if (startDate) {\n var ele = closest(startDate, '.' + RIGHTCALENDER);\n ele = isNullOrUndefined(ele) ? this.leftCalendar : ele;\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n ele.children[1].firstElementChild.focus();\n }\n addClass([startDate], FOCUSDATE);\n }\n else {\n if (this.isRangeIconClicked) {\n this.inputWrapper.container.focus();\n }\n else {\n this.preventBlur = true;\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n };\n DateRangePicker.prototype.presetHeight = function () {\n var presets = this.popupObj && this.popupObj.element.querySelector('.' + PRESETS);\n var rangeContainer = this.popupObj && this.popupObj.element.querySelector('.' + RANGECONTAINER);\n if (!isNullOrUndefined(presets) && !isNullOrUndefined(rangeContainer)) {\n presets.style.height = rangeContainer.getBoundingClientRect().height + 'px';\n }\n };\n DateRangePicker.prototype.presetKeyActionHandler = function (e) {\n switch (e.action) {\n case 'moveDown':\n this.listMoveDown(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'moveUp':\n this.listMoveUp(e);\n this.setScrollPosition();\n e.preventDefault();\n break;\n case 'enter':\n {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(this.leftCalendar) && !isNullOrUndefined(actItem)) {\n if (isNullOrUndefined(hvrItem) || (!isNullOrUndefined(actItem) && actItem === hvrItem)) {\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(actItem);\n var values = this.presetsItem[this.activeIndex];\n if (values.id === 'custom_range') {\n this.calendarFocus();\n actItem.classList.remove(HOVER);\n e.preventDefault();\n return;\n }\n }\n }\n if (!isNullOrUndefined(hvrItem) || !isNullOrUndefined(actItem)) {\n this.onMouseClick(e, hvrItem || actItem);\n }\n e.preventDefault();\n }\n break;\n case 'tab':\n if (this.leftCalendar) {\n var item = this.getHoverLI();\n if (!isNullOrUndefined(item)) {\n item.classList.remove(HOVER);\n }\n }\n else {\n this.hide(e);\n e.preventDefault();\n }\n break;\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.listMoveDown = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.nextElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n else {\n addClass([this.liCollections[0]], HOVER);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateRangePicker.prototype.listMoveUp = function (e) {\n var hvrItem = this.getHoverLI();\n var actItem = this.getActiveLI();\n if (!isNullOrUndefined(hvrItem)) {\n var li = hvrItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n removeClass([hvrItem], HOVER);\n addClass([li], HOVER);\n }\n }\n else if (!isNullOrUndefined(actItem)) {\n var li = actItem.previousElementSibling;\n if (!isNullOrUndefined(li) && li.classList.contains(LISTCLASS)) {\n addClass([li], HOVER);\n }\n }\n };\n DateRangePicker.prototype.getHoverLI = function () {\n var item = this.presetElement.querySelector('.' + HOVER);\n return item;\n };\n DateRangePicker.prototype.getActiveLI = function () {\n var item = this.presetElement.querySelector('.' + ACTIVE);\n return item;\n };\n DateRangePicker.prototype.popupKeyBoardHandler = function () {\n this.popupKeyboardModule = new KeyboardEvents(this.popupWrapper, {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: { escape: 'escape' }\n });\n this.keyInputConfigs = extend(this.keyInputConfigs, this.keyConfigs);\n this.popupKeyboardModule = new KeyboardEvents(this.inputWrapper.container.children[1], {\n eventName: 'keydown',\n keyAction: this.popupKeyActionHandle.bind(this),\n keyConfigs: this.keyInputConfigs\n });\n };\n DateRangePicker.prototype.setScrollPosition = function () {\n var listHeight = this.presetElement.getBoundingClientRect().height;\n var hover = this.presetElement.querySelector('.' + HOVER);\n var active = this.presetElement.querySelector('.' + ACTIVE);\n var element = !isNullOrUndefined(hover) ? hover : active;\n if (!isNullOrUndefined(element)) {\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.presetElement.scrollTop = nextEle ? (height - (listHeight / 2 + liHeight / 2)) : height;\n }\n else {\n this.presetElement.scrollTop = 0;\n }\n }\n };\n DateRangePicker.prototype.popupKeyActionHandle = function (e) {\n var presetElement = closest(e.target, '.' + PRESETS);\n switch (e.action) {\n case 'escape':\n if (this.isPopupOpen()) {\n if (this.isKeyPopup) {\n this.inputElement.focus();\n this.isKeyPopup = false;\n }\n this.hide(e);\n }\n else {\n this.inputWrapper.container.children[1].blur();\n }\n break;\n case 'enter':\n if (!this.isPopupOpen()) {\n this.show(null, e);\n }\n else {\n this.inputWrapper.container.children[1].focus();\n }\n break;\n case 'tab':\n this.hide(e);\n break;\n case 'altRightArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.cancelButton.element.focus();\n }\n else {\n if (document.activeElement === this.cancelButton.element && this.applyButton.element.disabled !== true) {\n this.applyButton.element.focus();\n }\n else {\n this.leftCalendar.children[1].firstElementChild.focus();\n }\n }\n e.preventDefault();\n break;\n case 'altLeftArrow':\n if (!isNullOrUndefined(presetElement)) {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n else {\n if (document.activeElement === this.applyButton.element && this.applyButton.element.disabled !== true) {\n this.cancelButton.element.focus();\n }\n else {\n if (!isNullOrUndefined(this.presetElement) && (document.activeElement === this.cancelButton.element)) {\n this.presetElement.focus();\n }\n else {\n this.rightCalendar.children[1].firstElementChild.focus();\n }\n }\n }\n e.preventDefault();\n break;\n }\n };\n DateRangePicker.prototype.documentHandler = function (e) {\n if (isNullOrUndefined(this.popupObj)) {\n return;\n }\n var target = e.target;\n if (!this.inputWrapper.container.contains(target) ||\n (!isNullOrUndefined(this.popupObj) && !closest(target, '[id=\"' + this.popupWrapper.id + '\"]') && e.type !== 'mousedown')) {\n if (e.type !== 'touchstart' && ((e.type === 'mousedown') ||\n this.closeEventArgs && !this.closeEventArgs.cancel)) {\n e.preventDefault();\n }\n }\n if ((isNullOrUndefined(this.targetElement) ||\n (!isNullOrUndefined(this.targetElement) && !(target === this.targetElement))) &&\n !(closest(target, '[id=\"' + this.popupWrapper.id + '\"]'))\n && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n && !(closest(target, '.e-daterangepicker.e-popup') && (!target.classList.contains('e-day')))) {\n this.preventBlur = false;\n if (this.isPopupOpen() && document.body.contains(this.popupObj.element)) {\n this.applyFunction(e);\n if (!this.isMobile) {\n this.isRangeIconClicked = false;\n }\n }\n }\n };\n DateRangePicker.prototype.createInput = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n this.inputWrapper = Input.createInput({\n floatLabelType: this.floatLabelType,\n element: this.inputElement,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [DATERANGEICON]\n }, this.createElement);\n attributes(this.inputElement, {\n 'tabindex': '0', 'aria-expanded': 'false', 'role': 'combobox',\n 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false'\n });\n Input.addAttributes({ 'aria-label': 'select' }, this.inputWrapper.buttons[0]);\n if (!isNullOrUndefined(this.placeholder) && this.placeholder.trim() !== '') {\n Input.addAttributes({ 'aria-placeholder': this.placeholder }, this.inputElement);\n }\n this.setEleWidth(this.width);\n addClass([this.inputWrapper.container], DATERANGEWRAPPER);\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.inputElement.type === 'hidden') {\n this.inputWrapper.container.style.display = 'none';\n }\n this.refreshControl();\n this.previousEleValue = this.inputElement.value;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.startCopy = this.startDate;\n this.endCopy = this.endDate;\n };\n DateRangePicker.prototype.setEleWidth = function (width) {\n if (typeof width === 'string') {\n this.inputWrapper.container.style.width = (this.width);\n }\n else if (typeof width === 'number') {\n this.inputWrapper.container.style.width = formatUnit(this.width);\n }\n else {\n this.inputWrapper.container.style.width = '100%';\n }\n };\n DateRangePicker.prototype.adjustLongHeaderWidth = function () {\n if (this.dayHeaderFormat === 'Wide') {\n addClass([this.popupWrapper], DAYHEADERLONG);\n }\n };\n DateRangePicker.prototype.refreshControl = function () {\n this.validateMinMax();\n if (this.strictMode) {\n this.validateRangeStrict();\n }\n var isDisabled = this.disabledDates();\n if (this.strictMode && (isDisabled)) {\n this.startValue = this.previousStartValue;\n this.setProperties({ startDate: this.startValue }, true);\n this.endValue = this.previousEndValue;\n this.setProperties({ endDate: this.endValue }, true);\n this.setValue();\n }\n this.updateInput();\n if (!this.strictMode) {\n this.validateRange();\n }\n if (!this.strictMode && (isDisabled)) {\n this.clearRange();\n }\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue) &&\n !isDisabled && !isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n this.errorClass();\n this.previousStartValue = isNullOrUndefined(this.startValue) || isNaN(+this.startValue) ? null : new Date(+this.startValue);\n this.previousEndValue = isNullOrUndefined(this.endValue) || isNaN(+this.endValue) ? null : new Date(+this.endValue);\n };\n DateRangePicker.prototype.updateInput = function () {\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n var formatOption = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n var startDate = this.globalize.formatDate(this.startValue, formatOption);\n var endDate = this.globalize.formatDate(this.endValue, formatOption);\n Input.setValue(startDate + ' ' + this.separator + ' ' + endDate, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousStartValue = new Date(+this.startValue);\n this.previousEndValue = new Date(+this.endValue);\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n Input.setValue(this.invalidValueString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n };\n DateRangePicker.prototype.checkInvalidRange = function (value) {\n if (!isNullOrUndefined(value)) {\n var invalid = false;\n var startinvalue = void 0;\n var endinvalue = void 0;\n var startString = null;\n var endString = null;\n var valueString = null;\n var startObject = false;\n var endObject = false;\n var invalidobject = false;\n if (typeof (value) === 'string') {\n var range = value.split(' ' + this.separator + ' ');\n if (range.length === 2) {\n startString = range[0];\n endString = range[1];\n }\n else {\n invalid = true;\n valueString = value;\n }\n }\n else {\n if (value.length > 0) {\n startinvalue = value[0];\n endinvalue = value[1];\n }\n else {\n startinvalue = value.start;\n endinvalue = value.end;\n }\n if (!(startinvalue instanceof Date) && typeof (startinvalue) !== 'object') {\n startString = this.getstringvalue(startinvalue);\n }\n else if (startinvalue instanceof Date) {\n startObject = true;\n }\n else if (!isNullOrUndefined(startinvalue)) {\n invalidobject = true;\n }\n if (!(endinvalue instanceof Date) && typeof (endinvalue) !== 'object') {\n endString = this.getstringvalue(endinvalue);\n }\n else if (endinvalue instanceof Date) {\n endObject = true;\n }\n else if (!isNullOrUndefined(endinvalue)) {\n invalidobject = true;\n }\n }\n if ((isNullOrUndefined(startString) && !startObject && !isNullOrUndefined(endString)) ||\n (!isNullOrUndefined(startString) && !endObject && isNullOrUndefined(endString))) {\n invalid = true;\n }\n if (invalidobject) {\n startString = endString = valueString = null;\n invalid = true;\n }\n if (startString) {\n invalid = invalid || this.checkInvalidValue(startString);\n }\n if (endString) {\n invalid = invalid || this.checkInvalidValue(endString);\n }\n if (invalid) {\n if (startObject && !invalidobject) {\n startString = startinvalue.toLocaleDateString();\n }\n if (endObject && !invalidobject) {\n endString = endinvalue.toLocaleDateString();\n }\n if (!isNullOrUndefined(startString) && !isNullOrUndefined(endString)) {\n valueString = startString + ' ' + this.separator + ' ' + endString;\n }\n else if (!isNullOrUndefined(startString)) {\n valueString = startString;\n }\n else if (!isNullOrUndefined(endString)) {\n valueString = endString;\n }\n this.invalidValueString = valueString;\n this.setProperties({ value: null }, true);\n this.setProperties({ startValue: null }, true);\n this.setProperties({ endValue: null }, true);\n this.startDate = null;\n this.endDate = null;\n }\n }\n };\n DateRangePicker.prototype.getstringvalue = function (value) {\n var stringValue = null;\n if (!isNullOrUndefined(value) && (typeof value === 'number')) {\n stringValue = (value).toString();\n }\n else if (!isNullOrUndefined(value) && (typeof value === 'string')) {\n stringValue = '' + value;\n }\n return stringValue;\n };\n DateRangePicker.prototype.checkInvalidValue = function (value) {\n var valueString = value;\n var invalid = false;\n var formatOpt = null;\n formatOpt = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n if (typeof valueString !== 'string') {\n invalid = true;\n }\n else {\n var globalize = new Internationalization(this.locale);\n if (!this.checkDateValue(globalize.parseDate(valueString, formatOpt))) {\n var extISOStr = null;\n var basISOString = null;\n // eslint-disable-next-line\n extISOStr = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOStr.test(valueString) && !basISOString.test(valueString))\n || (/^[a-zA-Z0-9- ]*$/).test(valueString) || isNaN(+new Date(this.checkValue(valueString)))) {\n invalid = true;\n }\n }\n }\n return invalid;\n };\n DateRangePicker.prototype.isDateDisabled = function (date) {\n if (isNullOrUndefined(date)) {\n return false;\n }\n var value = new Date(+date);\n if (+value < +this.min || +value > +this.max) {\n return true;\n }\n this.virtualRenderCellArgs = {\n date: value,\n isDisabled: false\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n return true;\n }\n return false;\n };\n DateRangePicker.prototype.disabledDateRender = function () {\n this.disabledDays = [];\n this.disabledDayCnt = null;\n var localDate = new Date(+this.startValue);\n var count = 0;\n while (+localDate <= +this.endValue && +this.endValue <= +this.max) {\n this.virtualRenderCellArgs = {\n date: localDate,\n isDisabled: false\n };\n var args = this.virtualRenderCellArgs;\n this.virtualRenderCellEvent(args);\n if (args.isDisabled) {\n this.disabledDays.push(new Date(+args.date));\n if (+localDate > +this.startValue && +localDate < +this.endValue) {\n count++;\n }\n }\n this.addDay(localDate, 1, null, this.max, this.min);\n }\n this.disabledDayCnt = count;\n };\n DateRangePicker.prototype.virtualRenderCellEvent = function (args) {\n extend(this.virtualRenderCellArgs, { name: 'renderDayCell' });\n this.trigger('renderDayCell', args);\n };\n DateRangePicker.prototype.disabledDates = function () {\n var isStartDisabled = false;\n var isEndDisabled = false;\n if (!isNullOrUndefined(this.endValue) && !isNullOrUndefined(this.startValue)) {\n isStartDisabled = this.isDateDisabled(this.startValue);\n isEndDisabled = this.isDateDisabled(this.endValue);\n if (!this.isPopupOpen()) {\n this.currentDate = null;\n }\n this.setValue();\n }\n return (isStartDisabled || isEndDisabled);\n };\n DateRangePicker.prototype.setModelValue = function () {\n if (!this.value && this.startDate === null && this.endDate === null) {\n this.setProperties({ value: null }, true);\n }\n else if (this.value === null || this.value.start === null) {\n if (this.value === null) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n else if (this.value.start === null) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n else {\n if ((this.value && this.value.length > 0) ||\n this.valueType && this.valueType.length > 0) {\n if (+this.startDate !== +this.value[0] || +this.endDate !== +this.value[1]) {\n this.setProperties({ value: [this.startDate, this.endDate] }, true);\n }\n if (this.value && this.value[0] == null && this.value[1] == null) {\n this.setProperties({ value: null }, true);\n }\n }\n else {\n if ((this.value && this.value.start)) {\n this.setProperties({ value: { start: this.startDate, end: this.endDate } }, true);\n }\n }\n }\n this.createHiddenInput();\n };\n /**\n * To dispatch the event manually\n *\n * @param {HTMLElement} element - Specifies the element to dispatch the event.\n * @param {string} type - Specifies the name of the event.\n * @returns {void}\n */\n DateRangePicker.prototype.dispatchEvent = function (element, type) {\n var evt = document.createEvent('HTMLEvents');\n evt.initEvent(type, false, true);\n element.dispatchEvent(evt);\n this.firstHiddenChild.dispatchEvent(evt);\n };\n DateRangePicker.prototype.changeTrigger = function (e) {\n if (+this.initStartDate !== +this.startValue || +this.initEndDate !== +this.endValue) {\n this.setProperties({ endDate: this.checkDateValue(this.endValue) }, true);\n this.setProperties({ startDate: this.checkDateValue(this.startValue) }, true);\n this.setModelValue();\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', this.rangeArgs(e));\n }\n }\n this.previousEleValue = this.inputElement.value;\n this.initStartDate = this.checkDateValue(this.startValue);\n this.initEndDate = this.checkDateValue(this.endValue);\n };\n /**\n * This method is used to navigate to the month/year/decade view of the Calendar.\n *\n * @param {string} view - Specifies the view of the Calendar.\n * @param {Date} date - Specifies the focused date in a view.\n * @returns {void}\n * @hidden\n */\n DateRangePicker.prototype.navigateTo = function (view, date) {\n if (this.isPopupOpen()) {\n if (view.toLowerCase() === 'month') {\n view = 'Month';\n }\n else if (view.toLowerCase() === 'year') {\n view = 'Year';\n }\n else if (view.toLowerCase() === 'decade') {\n view = 'Decade';\n }\n else {\n return;\n }\n if (this.getViewNumber(view) < this.getViewNumber(this.depth)) {\n view = this.depth;\n }\n if (this.isMobile) {\n _super.prototype.navigateTo.call(this, view, date);\n }\n else {\n if (date < this.min) {\n date = new Date(+this.min);\n }\n else if (date >= this.max) {\n date = new Date(+this.max);\n }\n if (view === 'Month' && this.isSameMonth(date, this.max)) {\n date = new Date(this.max.getFullYear(), this.max.getMonth() - 1, this.min.getDate());\n }\n else if (view === 'Year' && this.isSameYear(date, this.max)) {\n date = new Date((this.max.getFullYear() - 1), this.max.getMonth(), this.max.getDate());\n }\n else if (view === 'Decade' && this.isSameDecade(date, this.max)) {\n date = new Date((this.max.getFullYear() - 10), this.max.getMonth(), this.max.getDate());\n }\n this.leftCalCurrentDate = date;\n this.navigate(this.leftCalendar, this.leftCalCurrentDate, view);\n if (view === 'Month') {\n date = new Date(this.currentDate.setMonth(this.currentDate.getMonth() + 1));\n }\n else if (view === 'Year') {\n date = new Date(this.currentDate.setFullYear(this.currentDate.getFullYear() + 1));\n }\n else {\n date = new Date(this.currentDate.setFullYear(this.currentDate.getFullYear() + 10));\n }\n this.rightCalCurrentDate = date;\n this.navigate(this.rightCalendar, this.rightCalCurrentDate, view);\n this.leftKeyboardModule = this.rightKeyboardModule = null;\n this.updateNavIcons();\n }\n if (this.currentView() === this.depth) {\n this.bindCalendarCellEvents();\n }\n this.removeFocusedDate();\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n }\n };\n DateRangePicker.prototype.navigate = function (calendar, date, view) {\n this.calendarElement = calendar;\n this.table = calendar.querySelector('table');\n this.tableBodyElement = calendar.querySelector('tbody');\n this.headerTitleElement = calendar.querySelector('.e-title');\n this.tableHeadElement = calendar.querySelector('thead');\n this.contentElement = calendar.querySelector('.e-content');\n this.previousIcon = calendar.querySelector('.e-prev');\n this.nextIcon = calendar.querySelector('.e-next');\n this.effect = ZOOMIN;\n _super.prototype.navigateTo.call(this, view, date);\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.inputElement.focus();\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.focusOut = function () {\n var isBlur = this.preventBlur;\n if (document.activeElement === this.inputElement) {\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n this.preventBlur = false;\n this.inputElement.blur();\n this.preventBlur = isBlur;\n }\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.destroy = function () {\n this.unBindEvents();\n this.hide(null);\n var ariaAttrs = {\n 'tabindex': '0', 'aria-expanded': 'false', 'role': 'combobox',\n 'autocomplete': 'off', 'aria-disabled': !this.enabled ? 'true' : 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'aria-invalid': 'false', 'spellcheck': 'false'\n };\n if (this.inputElement) {\n removeClass([this.inputElement], [ROOT]);\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n Input.removeAttributes(ariaAttrs, this.inputElement);\n if (!isNullOrUndefined(this.cloneElement.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n this.ensureInputAttribute();\n this.inputElement.classList.remove('e-input');\n if (!isNullOrUndefined(this.inputWrapper)) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.rangeIconHandler);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n detach(this.inputWrapper.container);\n }\n }\n if (!isNullOrUndefined(this.inputKeyboardModule) && !this.isMobile) {\n this.inputKeyboardModule.destroy();\n }\n if (this.popupObj) {\n if (!this.isMobile) {\n this.clearCalendarEvents();\n }\n }\n _super.prototype.destroy.call(this);\n this.inputWrapper = this.popupWrapper = this.popupObj = this.cloneElement = this.presetElement = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n if ((!isNullOrUndefined(this.firstHiddenChild))\n && (!isNullOrUndefined(this.secondHiddenChild))) {\n detach(this.firstHiddenChild);\n detach(this.secondHiddenChild);\n this.firstHiddenChild = this.secondHiddenChild = null;\n this.inputElement.setAttribute('name', this.element.getAttribute('data-name'));\n this.inputElement.removeAttribute('data-name');\n }\n this.closeEventArgs = null;\n this.leftCalendar = null;\n this.rightTitle = null;\n this.leftTitle = null;\n this.openEventArgs = null;\n this.leftCalNextIcon = null;\n this.rightCalendar = null;\n this.closeEventArgs = null;\n this.rightCalPrevIcon = null;\n this.leftCalPrevIcon = null;\n this.popupKeyboardModule = null;\n this.cancelButton = null;\n this.applyButton = null;\n this.calendarElement = null;\n this.leftKeyboardModule = null;\n this.rightCalNextIcon = null;\n this.leftCalNextIcon = null;\n this.btnKeyboardModule = null;\n this.rightKeyboardModule = null;\n this.leftKeyboardModule = null;\n this.presetKeyboardModule = null;\n this.liCollections = null;\n this.popupObj = null;\n this.popupWrapper = null;\n };\n DateRangePicker.prototype.ensureInputAttribute = function () {\n var attr = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n attr[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < attr.length; i++) {\n if (isNullOrUndefined(this.cloneElement.getAttribute(attr[i]))) {\n if (attr[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n this.inputElement.removeAttribute(attr[i]);\n }\n else {\n if (attr[i].toLowerCase() === 'value') {\n this.inputElement.value = this.cloneElement.getAttribute(attr[i]);\n }\n this.inputElement.setAttribute(attr[i], this.cloneElement.getAttribute(attr[i]));\n }\n }\n };\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DateRangePicker.prototype.getModuleName = function () {\n return 'daterangepicker';\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Return the properties that are maintained upon browser refresh.\n *\n * @returns {string}\n */\n DateRangePicker.prototype.getPersistData = function () {\n var keyEntity = ['startDate', 'endDate', 'value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Return the selected range and day span in the DateRangePicker.\n *\n * @returns {Object}\n */\n DateRangePicker.prototype.getSelectedRange = function () {\n var range;\n if (!isNullOrUndefined(this.startValue) && !isNullOrUndefined(this.endValue)) {\n range = (Math.round(Math.abs((this.removeTimeValueFromDate(this.startValue).getTime() -\n this.removeTimeValueFromDate(this.endValue).getTime()) / (1000 * 60 * 60 * 24))) + 1);\n if (!isNullOrUndefined(this.renderDayCellArgs) && this.renderDayCellArgs.isDisabled) {\n this.disabledDateRender();\n }\n if (!isNullOrUndefined(this.disabledDayCnt)) {\n range = range - this.disabledDayCnt;\n this.disabledDayCnt = null;\n }\n }\n else {\n range = 0;\n }\n return { startDate: this.startValue, endDate: this.endValue, daySpan: range };\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * To open the Popup container in the DateRangePicker component.\n *\n * @param {HTMLElement} element - Specifies element.\n * @returns {void}\n */\n DateRangePicker.prototype.show = function (element, event) {\n var _this = this;\n if (this.isMobile && this.popupObj) {\n this.popupObj.refreshPosition();\n }\n if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n return;\n }\n else {\n if (!this.isPopupOpen()) {\n if (element) {\n this.targetElement = element;\n }\n this.createPopup();\n if (this.isMobile || Browser.isDevice) {\n this.mobileRangePopupWrap = this.createElement('div', { className: 'e-daterangepick-mob-popup-wrap' });\n document.body.appendChild(this.mobileRangePopupWrap);\n }\n this.openEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null,\n appendTo: this.isMobile || Browser.isDevice ? this.mobileRangePopupWrap : document.body\n };\n var eventArgs = this.openEventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.openEventArgs = eventArgs;\n if (!_this.openEventArgs.cancel) {\n _this.openEventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.showPopup(element, event);\n var isPreset = (!_this.isCustomRange || (_this.isMobile && _this.isCustomRange));\n if (!isUndefined(_this.presets[0].start && _this.presets[0].end && _this.presets[0].label) && isPreset) {\n _this.setScrollPosition();\n }\n _this.checkMinMaxDays();\n if ((_this.isMobile) && (!isNullOrUndefined(_this.startDate)) && (isNullOrUndefined(_this.endDate))) {\n _this.endButton.element.classList.add(ACTIVE);\n _this.startButton.element.classList.remove(ACTIVE);\n _this.endButton.element.removeAttribute('disabled');\n _this.selectableDates();\n }\n _super.prototype.setOverlayIndex.call(_this, _this.mobileRangePopupWrap, _this.popupObj.element, _this.modal, \n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.isMobile || Browser.isDevice);\n }\n });\n }\n }\n };\n /**\n * To close the Popup container in the DateRangePicker component.\n *\n * @returns {void}\n */\n DateRangePicker.prototype.hide = function (event) {\n var _this = this;\n if (this.popupObj) {\n if (isNullOrUndefined(this.previousEndValue) && isNullOrUndefined(this.previousStartValue)) {\n this.clearRange();\n }\n else {\n if (!isNullOrUndefined(this.previousStartValue)) {\n this.startValue = new Date(this.checkValue(this.previousStartValue));\n this.setValue();\n this.currentDate = new Date(this.checkValue(this.startValue));\n }\n else {\n this.startValue = null;\n this.setValue();\n }\n if (!isNullOrUndefined(this.previousEndValue)) {\n this.endValue = new Date(this.checkValue(this.previousEndValue));\n this.setValue();\n }\n else {\n this.endValue = null;\n this.setValue();\n }\n }\n if (this.isPopupOpen()) {\n this.closeEventArgs = {\n cancel: false,\n popup: this.popupObj,\n date: this.inputElement.value,\n model: this,\n event: event ? event : null\n };\n var eventArgs = this.closeEventArgs;\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.closeEventArgs = eventArgs;\n if (!_this.closeEventArgs.cancel) {\n if (_this.isMobile) {\n if (!isNullOrUndefined(_this.startButton) && !isNullOrUndefined(_this.endButton)) {\n EventHandler.remove(_this.startButton.element, 'click touchstart', _this.deviceHeaderClick);\n EventHandler.remove(_this.endButton.element, 'click touchstart', _this.deviceHeaderClick);\n }\n }\n if (_this.popupObj) {\n _this.popupObj.hide();\n if (_this.preventBlur) {\n _this.inputElement.focus();\n addClass([_this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n if (!_this.isMobile) {\n if (!isNullOrUndefined(_this.leftKeyboardModule) && !isNullOrUndefined(_this.rightKeyboardModule)) {\n _this.leftKeyboardModule.destroy();\n _this.rightKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(_this.presetElement)) {\n _this.presetKeyboardModule.destroy();\n }\n if (!isNullOrUndefined(_this.cancelButton)) {\n _this.btnKeyboardModule.destroy();\n }\n }\n _this.targetElement = null;\n removeClass([document.body], OVERFLOW);\n EventHandler.remove(document, 'mousedown touchstart', _this.documentHandler);\n if (_this.isMobile && _this.modal) {\n _this.modal.style.display = 'none';\n _this.modal.outerHTML = '';\n _this.modal = null;\n }\n if (_this.isMobile || Browser.isDevice) {\n if (!isNullOrUndefined(_this.mobileRangePopupWrap)) {\n _this.mobileRangePopupWrap.remove();\n _this.mobileRangePopupWrap = null;\n }\n }\n _this.isKeyPopup = _this.dateDisabled = false;\n }\n else {\n removeClass([_this.inputWrapper.buttons[0]], ACTIVE);\n }\n _this.updateClearIconState();\n _this.updateHiddenInput();\n if (_this.isMobile && _this.allowEdit && !_this.readonly) {\n _this.inputElement.removeAttribute('readonly');\n }\n });\n }\n }\n else {\n this.updateClearIconState();\n this.updateHiddenInput();\n if (this.isMobile && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n DateRangePicker.prototype.setLocale = function () {\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.updateInput();\n this.updateHiddenInput();\n this.changeTrigger();\n };\n DateRangePicker.prototype.refreshChange = function () {\n this.checkView();\n this.refreshControl();\n this.changeTrigger();\n };\n DateRangePicker.prototype.setDate = function () {\n Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n this.refreshChange();\n };\n DateRangePicker.prototype.enableInput = function () {\n if (+this.min <= +this.max) {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.element.hasAttribute('disabled')) {\n this.bindEvents();\n }\n }\n };\n DateRangePicker.prototype.clearModelvalue = function (newProp, oldProp) {\n this.setProperties({ startDate: null }, true);\n this.setProperties({ endDate: null }, true);\n if (oldProp.value && oldProp.value.length > 0) {\n this.setProperties({ value: null }, true);\n }\n else if (oldProp.value && oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n else if (oldProp.value && !oldProp.value.start) {\n this.setProperties({ value: { start: null, end: null } }, true);\n }\n this.updateValue();\n this.setDate();\n };\n DateRangePicker.prototype.createHiddenInput = function () {\n if (isNullOrUndefined(this.firstHiddenChild) && isNullOrUndefined(this.secondHiddenChild)) {\n this.firstHiddenChild = this.createElement('input');\n this.secondHiddenChild = this.createElement('input');\n }\n if (!isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n this.inputElement.setAttribute('data-name', this.inputElement.getAttribute('name'));\n this.inputElement.removeAttribute('name');\n }\n attributes(this.firstHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name'), 'class': HIDDENELEMENT\n });\n attributes(this.secondHiddenChild, {\n 'type': 'text', 'name': this.inputElement.getAttribute('data-name'), 'class': HIDDENELEMENT\n });\n var format = { type: 'datetime', skeleton: 'yMd' };\n this.firstHiddenChild.value = this.startDate && this.globalize.formatDate(this.startDate, format);\n this.secondHiddenChild.value = this.endDate && this.globalize.formatDate(this.endDate, format);\n this.inputElement.parentElement.appendChild(this.firstHiddenChild);\n this.inputElement.parentElement.appendChild(this.secondHiddenChild);\n };\n DateRangePicker.prototype.setMinMaxDays = function () {\n if (this.isPopupOpen()) {\n this.removeClassDisabled();\n this.checkMinMaxDays();\n if (this.isMobile) {\n this.selectableDates();\n }\n if (!this.strictMode && (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue))) {\n this.removeSelection();\n }\n else {\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n }\n this.updateHeader();\n }\n };\n // eslint-disable-next-line @typescript-eslint/tslint/config\n DateRangePicker.prototype.getStartEndValue = function (date, isEnd) {\n if (this.depth === 'Month') {\n return this.checkDateValue(new Date(this.checkValue(date)));\n }\n else if (this.depth === 'Year') {\n return new Date(date.getFullYear(), date.getMonth() + (isEnd ? 1 : 0), isEnd ? 0 : 1);\n }\n else {\n return new Date(date.getFullYear(), isEnd ? 11 : 0, isEnd ? 31 : 1);\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DateRangePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DateRangePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n DateRangePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var format = { format: this.formatString, type: 'date', skeleton: 'yMd' };\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n var openPopup = ['maxDays', 'minDays', 'value'];\n if (openPopup.indexOf(prop) < 0) {\n this.hide(null);\n }\n switch (prop) {\n case 'width':\n this.setEleWidth(this.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'separator':\n this.previousEleValue = this.inputElement.value;\n this.setProperties({ separator: newProp.separator }, true);\n this.updateInput();\n this.changeTrigger();\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n this.setProperties({ placeholder: newProp.placeholder }, true);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n this.setRangeAllowEdit();\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n Input.setEnabled(this.enabled, this.inputElement);\n if (this.enabled) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.tabIndex = -1;\n }\n break;\n case 'allowEdit':\n this.setRangeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkFormat();\n this.updateInput();\n this.changeTrigger();\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.inputElement);\n this.setLocale();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.setDataAttribute(true);\n this.checkHtmlAttributes(true);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'startDate':\n if (typeof newProp.startDate === 'string') {\n newProp.startDate = this.globalize.parseDate(newProp.startDate, format);\n }\n if (+this.initStartDate !== +newProp.startDate) {\n this.startValue = this.getStartEndValue(newProp.startDate, false);\n this.setDate();\n this.setValue();\n }\n break;\n case 'endDate':\n if (typeof newProp.endDate === 'string') {\n newProp.endDate = this.globalize.parseDate(newProp.endDate, format);\n }\n if (+this.initEndDate !== +newProp.endDate) {\n this.endValue = this.getStartEndValue(newProp.endDate, true);\n this.setDate();\n this.setValue();\n }\n break;\n case 'value':\n this.invalidValueString = null;\n this.checkInvalidRange(newProp.value);\n if (typeof (newProp.value) === 'string') {\n if (!this.invalidValueString) {\n var rangeArray = newProp.value.split(' ' + this.separator + ' ');\n this.value = [new Date(rangeArray[0]), new Date(rangeArray[1])];\n this.updateValue();\n this.setDate();\n }\n else {\n this.clearModelvalue(newProp, oldProp);\n }\n }\n else {\n if ((!isNullOrUndefined(newProp.value) && newProp.value.length > 0)\n || !isNullOrUndefined(newProp.value) && newProp.value.start) {\n this.valueType = newProp.value;\n if (newProp.value[0] === null || (newProp.value.start === null)) {\n if (newProp.value.length === 1 || (newProp.value.start)) {\n this.clearModelvalue(newProp, oldProp);\n }\n else if (newProp.value[1] === null ||\n (newProp.value.start === null)) {\n this.clearModelvalue(newProp, oldProp);\n }\n }\n else if ((+this.initStartDate !== +newProp.value[0]\n || +this.initEndDate !== +newProp.value[1]) ||\n (+this.initStartDate !== +(newProp.value.start\n || +this.initEndDate !== +newProp.value.start))) {\n if (newProp.value.length === 1) {\n this.modelValue = newProp.value;\n }\n else if (newProp.value.start) {\n this.modelValue = newProp.value;\n }\n this.updateValue();\n this.setDate();\n }\n }\n else {\n if (isNullOrUndefined(this.value)\n || newProp.value.start == null) {\n this.valueType = newProp.value;\n this.startValue = null;\n this.endValue = null;\n this.clearModelvalue(newProp, oldProp);\n }\n }\n }\n if (this.isPopupOpen()) {\n if (isNullOrUndefined(this.startValue) && isNullOrUndefined(this.endValue)) {\n this.removeSelection();\n if (this.isMobile) {\n this.deviceHeaderUpdate();\n }\n return;\n }\n if (this.isMobile) {\n this.navigate(this.deviceCalendar, this.startValue, this.currentView());\n this.deviceHeaderUpdate();\n }\n else {\n this.navigate(this.leftCalendar, this.startValue, this.currentView());\n this.updateControl(this.leftCalendar);\n this.navigate(this.rightCalendar, this.endValue, this.currentView());\n this.updateControl(this.rightCalendar);\n }\n this.updateRange((this.isMobile ? [this.calendarElement] : [this.leftCalendar, this.rightCalendar]));\n this.updateHeader();\n this.applyButton.disabled = this.applyButton.element.disabled = false;\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n break;\n case 'minDays':\n this.setProperties({ minDays: newProp.minDays }, true);\n this.refreshChange();\n this.setMinMaxDays();\n break;\n case 'maxDays':\n this.setProperties({ maxDays: newProp.maxDays }, true);\n this.refreshChange();\n this.setMinMaxDays();\n break;\n case 'min':\n this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(newProp.min))) }, true);\n this.previousEleValue = this.inputElement.value;\n this.enableInput();\n this.refreshChange();\n break;\n case 'max':\n this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(newProp.max))) }, true);\n this.enableInput();\n this.refreshChange();\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.refreshChange();\n break;\n case 'presets':\n this.setProperties({ presets: newProp.presets }, true);\n this.processPresets();\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'start':\n this.setProperties({ start: newProp.start }, true);\n this.refreshChange();\n break;\n case 'depth':\n this.setProperties({ depth: newProp.depth }, true);\n this.refreshChange();\n break;\n }\n }\n };\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"value\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateRangePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateRangePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"locale\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Property('Gregorian')\n ], DateRangePicker.prototype, \"calendarMode\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"navigated\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"renderDayCell\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"startDate\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"endDate\", void 0);\n __decorate([\n Collection([{}], Presets)\n ], DateRangePicker.prototype, \"presets\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"width\", void 0);\n __decorate([\n Property(1000)\n ], DateRangePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateRangePicker.prototype, \"depth\", void 0);\n __decorate([\n Property('')\n ], DateRangePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property('-')\n ], DateRangePicker.prototype, \"separator\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"minDays\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"maxDays\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], DateRangePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], DateRangePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property('Never')\n ], DateRangePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], DateRangePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], DateRangePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateRangePicker.prototype, \"blur\", void 0);\n DateRangePicker = __decorate([\n NotifyPropertyChanges\n ], DateRangePicker);\n return DateRangePicker;\n}(CalendarBase));\nexport { DateRangePicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { remove, addClass, detach, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, extend, getUniqueID, ChildProperty } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar TIMEICON = 'e-time-icon';\nvar CLEARICON = 'e-clear-icon';\nvar FOCUS = 'e-input-focus';\nvar LISTCLASS = 'e-list-item';\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nvar OVERFLOW = 'e-time-overflow';\nvar OFFSETVAL = 4;\nvar EDITABLE = 'e-non-edit';\nvar wrapperAttributes = ['title', 'class', 'style'];\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var TimePickerBase;\n(function (TimePickerBase) {\n // eslint-disable-next-line max-len, jsdoc/require-jsdoc\n function createListItems(createdEl, min, max, globalize, timeFormat, step) {\n var formatOptions;\n if (this.calendarMode === 'Gregorian') {\n formatOptions = { format: timeFormat, type: 'time' };\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n formatOptions = { format: timeFormat, type: 'time', calendar: 'islamic' };\n }\n var start;\n var interval = step * 60000;\n var listItems = [];\n var timeCollections = [];\n start = +(min.setMilliseconds(0));\n var end = +(max.setMilliseconds(0));\n while (end >= start) {\n timeCollections.push(start);\n listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n start += interval;\n }\n var listTag = ListBase.createList(createdEl, listItems, null, true);\n return { collection: timeCollections, list: listTag };\n }\n TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\nvar TimeMaskPlaceholder = /** @class */ (function (_super) {\n __extends(TimeMaskPlaceholder, _super);\n function TimeMaskPlaceholder() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('day')\n ], TimeMaskPlaceholder.prototype, \"day\", void 0);\n __decorate([\n Property('month')\n ], TimeMaskPlaceholder.prototype, \"month\", void 0);\n __decorate([\n Property('year')\n ], TimeMaskPlaceholder.prototype, \"year\", void 0);\n __decorate([\n Property('day of the week')\n ], TimeMaskPlaceholder.prototype, \"dayOfTheWeek\", void 0);\n __decorate([\n Property('hour')\n ], TimeMaskPlaceholder.prototype, \"hour\", void 0);\n __decorate([\n Property('minute')\n ], TimeMaskPlaceholder.prototype, \"minute\", void 0);\n __decorate([\n Property('second')\n ], TimeMaskPlaceholder.prototype, \"second\", void 0);\n return TimeMaskPlaceholder;\n}(ChildProperty));\nexport { TimeMaskPlaceholder };\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * <input id='timepicker' type='text'/>\n * <script>\n * var timePickerObj = new TimePicker({ value: new Date() });\n * timePickerObj.appendTo('#timepicker');\n * </script>\n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n __extends(TimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {TimePickerModel} options - Specifies the TimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function TimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.liCollections = [];\n _this.timeCollections = [];\n _this.disableItemCollection = [];\n _this.invalidValueString = null;\n _this.isAngular = false;\n _this.preventChange = false;\n _this.maskedDateValue = '';\n _this.moduleName = _this.getModuleName();\n _this.timeOptions = options;\n return _this;\n }\n /**\n * Initialize the event handler\n *\n * @returns {void}\n * @private\n */\n TimePicker.prototype.preRender = function () {\n this.keyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [ROOT, CONTROL, LIBRARY]);\n this.inputElement = this.element;\n this.angularTag = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n this.angularTag = this.element.tagName;\n this.inputElement = this.createElement('input');\n this.element.appendChild(this.inputElement);\n }\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n this.openPopupEventArgs = {\n appendTo: document.body\n };\n };\n // element creation\n TimePicker.prototype.render = function () {\n this.initialize();\n this.createInputElement();\n this.updateHtmlAttributeToWrapper();\n this.setTimeAllowEdit();\n this.setEnable();\n this.validateInterval();\n this.bindEvents();\n this.validateDisable();\n this.setValue(this.getFormattedValue(this.value));\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.anchor = this.inputElement;\n this.inputElement.setAttribute('value', this.inputElement.value);\n this.inputEleValue = this.getDateObject(this.inputElement.value);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n };\n TimePicker.prototype.setTimeAllowEdit = function () {\n if (this.allowEdit) {\n if (!this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n else {\n attributes(this.inputElement, { 'readonly': '' });\n }\n this.clearIconState();\n };\n TimePicker.prototype.clearIconState = function () {\n if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n if (this.inputElement.value === '') {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n else {\n addClass([this.inputWrapper.container], [EDITABLE]);\n }\n }\n else if (this.inputWrapper) {\n removeClass([this.inputWrapper.container], [EDITABLE]);\n }\n };\n TimePicker.prototype.validateDisable = function () {\n this.setMinMax(this.initMin, this.initMax);\n if (!isNullOrUndefined(this.value)) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupWrapper = this.popupObj = null;\n }\n if ((!isNaN(+this.value) && this.value !== null)) {\n if (!this.valueIsDisable(this.value)) {\n //disable value given in value property so reset the date based on current date\n if (this.strictMode) {\n this.resetState();\n }\n this.initValue = null;\n this.initMax = this.getDateObject(this.initMax);\n this.initMin = this.getDateObject(this.initMin);\n this.timeCollections = this.liCollections = [];\n this.setMinMax(this.initMin, this.initMax);\n }\n }\n };\n TimePicker.prototype.validationAttribute = function (target, input) {\n var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n input.setAttribute('name', name);\n target.removeAttribute('name');\n var attributes = ['required', 'aria-required', 'form'];\n for (var i = 0; i < attributes.length; i++) {\n if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n continue;\n }\n var attr = target.getAttribute(attributes[i]);\n input.setAttribute(attributes[i], attr);\n target.removeAttribute(attributes[i]);\n }\n };\n TimePicker.prototype.initialize = function () {\n this.globalize = new Internationalization(this.locale);\n this.defaultCulture = new Internationalization('en');\n this.checkTimeFormat();\n this.checkInvalidValue(this.value);\n // persist the value property.\n this.setProperties({ value: this.checkDateValue(new Date(this.checkInValue(this.value))) }, true);\n this.setProperties({ min: this.checkDateValue(new Date(this.checkInValue(this.min))) }, true);\n this.setProperties({ max: this.checkDateValue(new Date(this.checkInValue(this.max))) }, true);\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(this.scrollTo))) }, true);\n if (this.angularTag !== null) {\n this.validationAttribute(this.element, this.inputElement);\n }\n this.updateHtmlAttributeToElement();\n this.checkAttributes(false); //check the input element attributes\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('timepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n this.initValue = this.checkDateValue(this.value);\n this.initMin = this.checkDateValue(this.min);\n this.initMax = this.checkDateValue(this.max);\n this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n if (this.angularTag !== null) {\n this.inputElement.id = this.element.getAttribute('id') + '_input';\n }\n }\n else {\n //for angular case\n this.element.id = getUniqueID('ej2_timepicker');\n if (this.angularTag !== null) {\n attributes(this.inputElement, { 'id': this.element.id + '_input' });\n }\n }\n if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n attributes(this.inputElement, { 'name': this.element.id });\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.checkTimeFormat = function () {\n if (this.format) {\n if (typeof this.format === 'string') {\n this.formatString = this.format;\n }\n else if (!isNullOrUndefined(this.format.skeleton) && this.format.skeleton !== '') {\n var skeletonString = this.format.skeleton;\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: skeletonString });\n }\n else {\n this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: 'short' });\n }\n }\n else {\n this.formatString = null;\n }\n };\n TimePicker.prototype.checkDateValue = function (value) {\n return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n };\n TimePicker.prototype.createInputElement = function () {\n var updatedCssClassesValue = this.cssClass;\n var isBindClearAction = this.enableMask ? false : true;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassesValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n this.inputWrapper = Input.createInput({\n element: this.inputElement,\n bindClearAction: isBindClearAction,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassesValue,\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton\n },\n buttons: [' e-input-group-icon e-time-icon e-icons']\n }, this.createElement);\n this.inputWrapper.container.style.width = this.setWidth(this.width);\n attributes(this.inputElement, {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'false', 'aria-invalid': 'false'\n });\n if (!this.isNullOrEmpty(this.inputStyle)) {\n Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n }\n addClass([this.inputWrapper.container], WRAPPERCLASS);\n };\n TimePicker.prototype.getCldrDateTimeFormat = function () {\n var culture = new Internationalization(this.locale);\n var cldrTime;\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.cldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.checkInvalidValue = function (value) {\n var isInvalid = false;\n if (typeof value !== 'object' && !isNullOrUndefined(value)) {\n var valueString = value;\n if (typeof valueString === 'string') {\n valueString = valueString.trim();\n }\n var valueExpression = null;\n var valueExp = null;\n if (typeof value === 'number') {\n valueString = value.toString();\n }\n else if (typeof value === 'string') {\n if (!(/^[a-zA-Z0-9- ]*$/).test(value)) {\n valueExpression = this.setCurrentDate(this.getDateObject(value));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n }));\n if (isNullOrUndefined(valueExpression)) {\n valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n }));\n }\n }\n }\n }\n valueExp = this.globalize.parseDate(valueString, {\n format: this.getCldrDateTimeFormat(), type: 'datetime'\n });\n valueExpression = (!isNullOrUndefined(valueExp) && valueExp instanceof Date && !isNaN(+valueExp)) ? valueExp : null;\n if (isNullOrUndefined(valueExpression) && valueString.replace(/\\s/g, '').length) {\n var extISOString = null;\n var basicISOString = null;\n // eslint-disable-next-line\n extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n // eslint-disable-next-line\n basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n || ((/^[a-zA-Z0-9- ]*$/).test(value)) || isNaN(+new Date('' + valueString))) {\n isInvalid = true;\n }\n else {\n valueExpression = new Date('' + valueString);\n }\n }\n if (isInvalid) {\n if (!this.strictMode) {\n this.invalidValueString = valueString;\n }\n this.setProperties({ value: null }, true);\n this.initValue = null;\n }\n else {\n this.setProperties({ value: valueExpression }, true);\n this.initValue = this.value;\n }\n }\n };\n TimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this.enableMask) {\n modules.push({ args: [this], member: 'MaskedDateTime' });\n }\n return modules;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimePicker.prototype.cldrFormat = function (type) {\n var cldrDateTimeString;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTimeString = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTimeString = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTimeString;\n };\n // destroy function\n TimePicker.prototype.destroy = function () {\n this.hide();\n this.unBindEvents();\n var ariaAttribute = {\n 'aria-autocomplete': 'list', 'tabindex': '0',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-disabled': 'true', 'aria-invalid': 'false'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n if (this.angularTag === null) {\n this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n }\n if (!isNullOrUndefined(this.cloneElement.getAttribute('tabindex'))) {\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.inputElement.removeAttribute('tabindex');\n }\n this.ensureInputAttribute();\n this.enableElement([this.inputElement]);\n this.inputElement.classList.remove('e-input');\n if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n Input.setEnabled(true, this.inputElement, this.floatLabelType);\n }\n }\n if (this.inputWrapper.container) {\n detach(this.inputWrapper.container);\n }\n this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n this.liCollections = this.timeCollections = this.disableItemCollection = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n _super.prototype.destroy.call(this);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n this.rippleFn = null;\n this.openPopupEventArgs = null;\n this.selectedElement = null;\n this.listTag = null;\n this.liCollections = null;\n };\n TimePicker.prototype.ensureInputAttribute = function () {\n var propertyList = [];\n for (var i = 0; i < this.inputElement.attributes.length; i++) {\n propertyList[i] = this.inputElement.attributes[i].name;\n }\n for (var i = 0; i < propertyList.length; i++) {\n if (!isNullOrUndefined(this.cloneElement.getAttribute(propertyList[i]))) {\n this.inputElement.setAttribute(propertyList[i], this.cloneElement.getAttribute(propertyList[i]));\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = this.cloneElement.getAttribute(propertyList[i]);\n }\n }\n else {\n this.inputElement.removeAttribute(propertyList[i]);\n if (propertyList[i].toLowerCase() === 'value') {\n this.inputElement.value = '';\n }\n }\n }\n };\n //popup creation\n TimePicker.prototype.popupCreation = function () {\n this.popupWrapper = this.createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.popupWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.generateList();\n append([this.listWrapper], this.popupWrapper);\n }\n this.addSelection();\n this.renderPopup();\n detach(this.popupWrapper);\n };\n TimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n TimePicker.prototype.generateList = function () {\n this.createListItems();\n this.wireListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n TimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n this.popupObj = new Popup(this.popupWrapper, {\n width: this.setPopupWidth(this.width),\n zIndex: this.zIndex,\n targetType: 'relative',\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n enableRtl: this.enableRtl,\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n offsetY: OFFSETVAL,\n open: function () {\n _this.popupWrapper.style.visibility = 'visible';\n addClass([_this.inputWrapper.buttons[0]], SELECTED);\n }, close: function () {\n removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n _this.unWireListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObj.element);\n _this.popupObj.destroy();\n _this.popupWrapper.innerHTML = '';\n _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n if (!Browser.isDevice) {\n this.popupObj.collision = { X: 'none', Y: 'flip' };\n }\n this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n };\n //util function\n TimePicker.prototype.getFormattedValue = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n }\n };\n TimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = !this.isNullOrEmpty(this.initValue);\n if (this.checkDateValue(dateValue)) {\n var date = value ? this.initValue.getDate() : DAY;\n var month = value ? this.initValue.getMonth() : MONTH;\n var year = value ? this.initValue.getFullYear() : YEAR;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n }\n }\n return null;\n };\n TimePicker.prototype.updateHtmlAttributeToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassesValue = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassesValue !== '') {\n addClass([this.inputWrapper.container], updatedClassesValue.split(' '));\n }\n }\n else if (key === 'style') {\n var timeStyle = this.inputWrapper.container.getAttribute(key);\n timeStyle = !isNullOrUndefined(timeStyle) ? (timeStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputWrapper.container.setAttribute(key, timeStyle);\n }\n else {\n this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n TimePicker.prototype.updateHtmlAttributeToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttributes.indexOf(key) < 0) {\n this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n TimePicker.prototype.updateCssClass = function (cssClassNew, cssClassOld) {\n if (!isNullOrUndefined(cssClassOld)) {\n cssClassOld = (cssClassOld.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(cssClassNew)) {\n cssClassNew = (cssClassNew.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(cssClassNew, [this.inputWrapper.container], cssClassOld);\n if (this.popupWrapper) {\n Input.setCssClass(cssClassNew, [this.popupWrapper], cssClassOld);\n }\n };\n TimePicker.prototype.removeErrorClass = function () {\n removeClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'false' });\n };\n TimePicker.prototype.checkErrorState = function (val) {\n var value = this.getDateObject(val);\n if ((this.validateState(value) && !this.invalidValueString) ||\n (this.enableMask && this.inputElement.value === this.maskedDateValue)) {\n this.removeErrorClass();\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n attributes(this.inputElement, { 'aria-invalid': 'true' });\n }\n };\n TimePicker.prototype.validateInterval = function () {\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.enableElement([this.inputWrapper.buttons[0]]);\n }\n else {\n this.disableTimeIcon();\n }\n };\n TimePicker.prototype.disableTimeIcon = function () {\n this.disableElement([this.inputWrapper.buttons[0]]);\n this.hide();\n };\n TimePicker.prototype.disableElement = function (element) {\n addClass(element, DISABLED);\n };\n TimePicker.prototype.enableElement = function (element) {\n removeClass(element, DISABLED);\n };\n TimePicker.prototype.selectInputText = function () {\n this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n };\n TimePicker.prototype.setCursorToEnd = function () {\n this.inputElement.setSelectionRange((this.inputElement).value.length, (this.inputElement).value.length);\n };\n TimePicker.prototype.getMeridianText = function () {\n var meridian;\n if (this.locale === 'en' || this.locale === 'en-US') {\n meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n }\n else {\n var gregorianFormat = '.dates.calendars.gregorian.dayPeriods.format.abbreviated';\n var mainVal = 'main.';\n meridian = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n }\n return meridian;\n };\n TimePicker.prototype.getCursorSelection = function () {\n var input = (this.inputElement);\n var start = 0;\n var end = 0;\n if (!isNaN(input.selectionStart)) {\n start = input.selectionStart;\n end = input.selectionEnd;\n }\n return { start: Math.abs(start), end: Math.abs(end) };\n };\n TimePicker.prototype.getActiveElement = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n return this.popupWrapper.querySelectorAll('.' + SELECTED);\n }\n else {\n return null;\n }\n };\n TimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n TimePicker.prototype.setWidth = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n }\n else {\n width = '100%';\n }\n return width;\n };\n TimePicker.prototype.setPopupWidth = function (width) {\n width = this.setWidth(width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n TimePicker.prototype.setScrollPosition = function () {\n var element = this.selectedElement;\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n TimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextEle = element.nextElementSibling;\n var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n var liHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.setScrollTo = function () {\n var element;\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.popupWrapper.scrollTop = 0;\n }\n };\n TimePicker.prototype.getText = function () {\n return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n };\n TimePicker.prototype.getValue = function (value) {\n return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n format: this.cldrTimeFormat(), type: 'time'\n });\n };\n TimePicker.prototype.cldrDateFormat = function () {\n var cldrDate;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n }\n return cldrDate;\n };\n TimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.formatString)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n TimePicker.prototype.dateToNumeric = function () {\n var cldrTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n }\n else {\n cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n }\n return cldrTime;\n };\n TimePicker.prototype.getExactDateTime = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n else {\n return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n }\n };\n TimePicker.prototype.setValue = function (value) {\n var time = this.checkValue(value);\n if (!this.strictMode && !this.validateState(time)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n if (this.isNullOrEmpty(time)) {\n this.initValue = null;\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.initValue = this.compareFormatChange(time);\n }\n }\n this.updateInput(true, this.initValue);\n };\n TimePicker.prototype.compareFormatChange = function (value) {\n if (isNullOrUndefined(value)) {\n return null;\n }\n return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n };\n TimePicker.prototype.updatePlaceHolder = function () {\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n };\n //event related functions\n TimePicker.prototype.updateInputValue = function (value) {\n Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n };\n TimePicker.prototype.preventEventBubbling = function (e) {\n e.preventDefault();\n this.interopAdaptor.invokeMethodAsync('OnTimeIconClick');\n };\n TimePicker.prototype.popupHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n e.preventDefault();\n if (this.isPopupOpen()) {\n this.closePopup(0, e);\n }\n else {\n this.inputElement.focus();\n this.show(e);\n }\n };\n TimePicker.prototype.mouseDownHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.readonly) {\n this.inputElement.setSelectionRange(0, 0);\n EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n }\n };\n TimePicker.prototype.mouseUpHandler = function (event) {\n if (!this.readonly) {\n event.preventDefault();\n if (this.enableMask) {\n event.preventDefault();\n this.notify('setMaskSelection', {\n module: 'MaskedDateTime'\n });\n return;\n }\n else {\n EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n var curPos = this.getCursorSelection();\n if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n if (this.inputElement.value.length > 0) {\n this.cursorDetails = this.focusSelection();\n }\n this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n }\n }\n }\n };\n TimePicker.prototype.focusSelection = function () {\n var regex = new RegExp('^[a-zA-Z0-9]+$');\n var split = this.inputElement.value.split('');\n split.push(' ');\n var curPos = this.getCursorSelection();\n var start = 0;\n var end = 0;\n var isSeparator = false;\n if (!this.isTextSelected) {\n for (var i = 0; i < split.length; i++) {\n if (!regex.test(split[i])) {\n end = i;\n isSeparator = true;\n }\n if (isSeparator) {\n if (curPos.start >= start && curPos.end <= end) {\n // eslint-disable-next-line no-self-assign\n end = end;\n this.isTextSelected = true;\n break;\n }\n else {\n start = i + 1;\n isSeparator = false;\n }\n }\n }\n }\n else {\n start = curPos.start;\n end = curPos.end;\n this.isTextSelected = false;\n }\n return { start: start, end: end };\n };\n TimePicker.prototype.inputHandler = function (event) {\n if (!this.readonly && this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'home':\n case 'end':\n case 'up':\n case 'down':\n if (!this.isPopupOpen()) {\n this.popupCreation();\n this.popupObj.destroy();\n this.popupObj = this.popupWrapper = null;\n }\n if (this.enableMask && !this.readonly && !this.isPopupOpen()) {\n event.preventDefault();\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: event\n });\n }\n if (!this.enableMask || this.isPopupOpen()) {\n this.keyHandler(event);\n }\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.updateValue(this.valueWithMinutes, event);\n }\n else {\n this.updateValue(this.inputElement.value, event);\n }\n this.hide();\n this.isNavigate = false;\n if (this.isPopupOpen()) {\n event.stopPropagation();\n }\n break;\n case 'open':\n this.show(event);\n break;\n case 'escape':\n this.updateInputValue(this.objToString(this.value));\n if (this.enableMask) {\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.previousState(this.value);\n this.hide();\n break;\n case 'close':\n this.hide();\n break;\n case 'right':\n case 'left':\n case 'tab':\n case 'shiftTab':\n if (!this.isPopupOpen() && this.enableMask && !this.readonly) {\n if ((this.inputElement.selectionStart === 0 && this.inputElement.selectionEnd === this.inputElement.value.length) ||\n (this.inputElement.selectionEnd !== this.inputElement.value.length && event.action === 'tab') ||\n (this.inputElement.selectionStart !== 0 && event.action === 'shiftTab') || (event.action === 'left' || event.action === 'right')) {\n event.preventDefault();\n }\n this.notify('keyDownHandler', { module: 'MaskedDateTime',\n e: event\n });\n }\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n TimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n this.setSelection(li, event);\n if (li && li.classList.contains(LISTCLASS)) {\n this.hide();\n }\n };\n TimePicker.prototype.closePopup = function (delay, e) {\n var _this = this;\n if (this.isPopupOpen() && this.popupWrapper) {\n var args = {\n popup: this.popupObj,\n event: e || null,\n cancel: false,\n name: 'open'\n };\n removeClass([document.body], OVERFLOW);\n this.trigger('close', args, function (args) {\n if (!args.cancel) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: delay ? delay : 0\n };\n _this.popupObj.hide(new Animation(animModel));\n removeClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'false' });\n _this.inputElement.removeAttribute('aria-owns');\n _this.inputElement.removeAttribute('aria-activedescendant');\n EventHandler.remove(document, 'mousedown touchstart', _this.documentClickHandler);\n }\n if (Browser.isDevice && _this.modal) {\n _this.modal.style.display = 'none';\n _this.modal.outerHTML = '';\n _this.modal = null;\n }\n if (Browser.isDevice) {\n if (!isNullOrUndefined(_this.mobileTimePopupWrap)) {\n _this.mobileTimePopupWrap.remove();\n _this.mobileTimePopupWrap = null;\n }\n }\n if (Browser.isDevice && _this.allowEdit && !_this.readonly) {\n _this.inputElement.removeAttribute('readonly');\n }\n });\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n }\n };\n TimePicker.prototype.disposeServerPopup = function () {\n if (this.popupWrapper) {\n this.popupWrapper.style.visibility = 'hidden';\n this.popupWrapper.style.top = '-9999px';\n this.popupWrapper.style.left = '-9999px';\n this.popupWrapper.style.width = '0px';\n this.popupWrapper.style.height = '0px';\n }\n };\n TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n if (this.checkDateValue(this.valueWithMinutes) === null) {\n this.initValue = this.valueWithMinutes = null;\n }\n this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n this.initValue = this.valueWithMinutes = this.compareFormatChange(this.inputElement.value);\n this.prevValue = this.inputElement.value;\n if (+this.prevDate !== +this.value) {\n this.changeEvent(event);\n }\n }\n else {\n if (!isNavigation) {\n if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n }\n }\n else {\n var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n if (+this.prevDate !== +value) {\n this.valueProcess(event, value);\n }\n }\n }\n };\n TimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setHover(currentLi, HOVER);\n };\n TimePicker.prototype.setHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeHover(className);\n addClass([li], className);\n if (className === NAVIGATION) {\n li.setAttribute('aria-selected', 'true');\n }\n }\n };\n TimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li)) {\n this.checkValue(li.getAttribute('data-value'));\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime', navigated: true\n });\n }\n this.selectedElement = li;\n this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.checkValueChange(event, true);\n }\n };\n TimePicker.prototype.onMouseLeave = function () {\n this.removeHover(HOVER);\n };\n TimePicker.prototype.scrollHandler = function () {\n if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n return;\n }\n else {\n this.hide();\n }\n };\n TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n if (isNullOrUndefined(this.checkDateValue(minVal))) {\n this.initMin = this.getDateObject('12:00:00 AM');\n }\n if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n this.initMax = this.getDateObject('11:59:59 PM');\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n }\n else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n this.disableTimeIcon();\n }\n if (this.strictMode) {\n dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n }\n this.checkErrorState(dateVal);\n return dateVal;\n };\n TimePicker.prototype.valueIsDisable = function (value) {\n if (this.disableItemCollection.length > 0) {\n if (this.disableItemCollection.length === this.timeCollections.length) {\n return false;\n }\n var time = value instanceof Date ? this.objToString(value) : value;\n for (var index = 0; index < this.disableItemCollection.length; index++) {\n if (time === this.disableItemCollection[index]) {\n return false;\n }\n }\n }\n return true;\n };\n TimePicker.prototype.validateState = function (val) {\n if (!this.strictMode) {\n if (this.valueIsDisable(val)) {\n var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n this.setCurrentDate(this.getDateObject(val));\n var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n return false;\n }\n }\n else {\n if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n return false;\n }\n }\n }\n else {\n return false;\n }\n }\n return true;\n };\n TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n var minValue = this.createDateObj(this.getFormattedValue(minimum));\n var value = this.createDateObj(this.getFormattedValue(val));\n if (this.strictMode) {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n this.initValue = this.getDateObject(maxValue);\n this.updateInputValue(this.getValue(this.initValue));\n if (this.enableMask) {\n this.createMask();\n }\n return this.inputElement.value;\n }\n else if (+minValue >= +value) {\n return this.getDateObject(minValue);\n }\n else if (+value >= +maxValue || +minValue === +maxValue) {\n return this.getDateObject(maxValue);\n }\n }\n else {\n if (+minValue > +maxValue) {\n this.disableTimeIcon();\n if (!isNaN(+this.createDateObj(dateVal))) {\n return dateVal;\n }\n }\n }\n return dateVal;\n };\n TimePicker.prototype.bindEvents = function () {\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.popupHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n EventHandler.add(this.inputElement, 'input', this.inputEventHandler, this);\n if (this.enableMask) {\n EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n }\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n if (!Browser.isDevice) {\n this.keyConfigure = extend(this.keyConfigure, this.keyConfigs);\n this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n keyAction: this.inputHandler.bind(this),\n keyConfigs: this.keyConfigure,\n eventName: 'keydown'\n });\n if (this.showClearButton && this.inputElement) {\n EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n }\n }\n };\n TimePicker.prototype.keydownHandler = function (e) {\n switch (e.code) {\n case 'Delete':\n if (this.enableMask && !this.popupObj && !this.readonly) {\n this.notify('keyDownHandler', {\n module: 'MaskedDateTime',\n e: e\n });\n }\n break;\n default:\n break;\n }\n };\n TimePicker.prototype.formResetHandler = function () {\n if (!this.enabled) {\n return;\n }\n if (!this.inputElement.disabled) {\n var timeValue = this.inputElement.getAttribute('value');\n var val = this.checkDateValue(this.inputEleValue);\n if (this.element.tagName === 'EJS-TIMEPICKER') {\n val = null;\n timeValue = '';\n this.inputElement.setAttribute('value', '');\n }\n this.setProperties({ value: val }, true);\n this.prevDate = this.value;\n this.valueWithMinutes = this.value;\n this.initValue = this.value;\n if (this.inputElement) {\n this.updateInputValue(timeValue);\n if (this.enableMask) {\n if (!timeValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n this.createMask();\n }\n this.checkErrorState(timeValue);\n this.prevValue = this.inputElement.value;\n }\n }\n };\n TimePicker.prototype.inputChangeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.stopPropagation();\n };\n TimePicker.prototype.inputEventHandler = function () {\n if (this.enableMask) {\n this.notify('inputHandler', {\n module: 'MaskedDateTime'\n });\n }\n };\n TimePicker.prototype.unBindEvents = function () {\n if (this.inputWrapper) {\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n }\n EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n EventHandler.remove(this.inputElement, 'input', this.inputEventHandler);\n if (this.inputEvent) {\n this.inputEvent.destroy();\n }\n EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n if (this.showClearButton && !isNullOrUndefined(this.inputWrapper) && !isNullOrUndefined(this.inputWrapper.clearButton)) {\n EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n }\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n TimePicker.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.inputWrapper.clearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n }\n };\n TimePicker.prototype.raiseClearedEvent = function (e) {\n var clearedArgs = {\n event: e\n };\n this.trigger('cleared', clearedArgs);\n };\n TimePicker.prototype.clearHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n e.preventDefault();\n if (!isNullOrUndefined(this.value)) {\n this.clear(e);\n }\n else {\n this.resetState();\n this.raiseClearedEvent(e);\n }\n if (this.popupWrapper) {\n this.popupWrapper.scrollTop = 0;\n }\n if (this.enableMask) {\n this.notify('clearHandler', {\n module: 'MaskedDateTime'\n });\n }\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n TimePicker.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.initValue = null;\n this.resetState();\n this.raiseClearedEvent(event);\n this.changeEvent(event);\n };\n TimePicker.prototype.setZIndex = function () {\n if (this.popupObj) {\n this.popupObj.zIndex = this.zIndex;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'style':\n this.inputStyle = this.inputElement.getAttribute(prop);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.initValue = value;\n this.updateInput(false, this.initValue);\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n TimePicker.prototype.setCurrentDate = function (value) {\n if (isNullOrUndefined(this.checkDateValue(value))) {\n return null;\n }\n return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n };\n TimePicker.prototype.getTextFormat = function () {\n var time = 0;\n if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n time = 1;\n }\n else if (this.cldrTimeFormat().indexOf('a') < 0) {\n var strArray = this.cldrTimeFormat().split(' ');\n for (var i = 0; i < strArray.length; i++) {\n if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n time = i;\n break;\n }\n }\n }\n return time;\n };\n TimePicker.prototype.updateValue = function (value, event) {\n var val;\n if (this.isNullOrEmpty(value)) {\n this.resetState();\n }\n else {\n val = this.checkValue(value);\n if (this.strictMode) {\n // this case set previous value to the text box when set invalid date\n var inputVal = (val === null && value.trim().length > 0) ?\n this.previousState(this.prevDate) : this.inputElement.value;\n this.updateInputValue(inputVal);\n if (this.enableMask) {\n if (!inputVal) {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(val) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(val) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n }\n this.checkValueChange(event, typeof value === 'string' ? false : true);\n };\n TimePicker.prototype.previousState = function (date) {\n var value = this.getDateObject(date);\n for (var i = 0; i < this.timeCollections.length; i++) {\n if (+value === this.timeCollections[i]) {\n this.activeIndex = i;\n this.selectedElement = this.liCollections[i];\n this.valueWithMinutes = new Date(this.timeCollections[i]);\n break;\n }\n }\n return this.prevValue;\n };\n TimePicker.prototype.resetState = function () {\n this.removeSelection();\n Input.setValue('', this.inputElement, this.floatLabelType, false);\n this.valueWithMinutes = this.activeIndex = null;\n if (!this.strictMode) {\n this.checkErrorState(null);\n }\n };\n TimePicker.prototype.objToString = function (val) {\n if (isNullOrUndefined(this.checkDateValue(val))) {\n return null;\n }\n else {\n return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n }\n };\n TimePicker.prototype.checkValue = function (value) {\n if (!this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.validateValue(date, value);\n }\n this.resetState();\n return this.valueWithMinutes = null;\n };\n TimePicker.prototype.validateValue = function (date, value) {\n var time;\n var val = this.validateMinMax(value, this.min, this.max);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = this.objToString(this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = this.objToString(this.valueWithMinutes);\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n var value_1 = val.trim().length > 0 ? val : '';\n this.updateInputValue(value_1);\n if (this.enableMask) {\n if (!value_1) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n else {\n this.updateInputValue(time);\n if (this.enableMask) {\n if (time === '') {\n this.updateInputValue(this.maskedDateValue);\n }\n if (isNullOrUndefined(time) && value !== this.maskedDateValue) {\n this.createMask();\n }\n if (isNullOrUndefined(time) && value === this.maskedDateValue) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n }\n return time;\n };\n TimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n TimePicker.prototype.findNextElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var timeVal = null;\n var count = this.liCollections.length;\n var collections = this.timeCollections;\n if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n if (event.action === 'home') {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(collections.length - 1, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < count; i++) {\n if (+value < this.timeCollections[i]) {\n var index = this.validLiElement(i);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === count - 1) {\n var index = this.validLiElement(0);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n else {\n for (var i = count - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n var index = this.validLiElement(i, true);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n else if (i === 0) {\n var index = this.validLiElement(count - 1);\n timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n this.activeIndex = index;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n }\n else {\n this.selectNextItem(event);\n }\n };\n TimePicker.prototype.selectNextItem = function (event) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n };\n TimePicker.prototype.elementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value))) {\n this.checkValue(value);\n }\n };\n TimePicker.prototype.validLiElement = function (index, backward) {\n var elementIndex = null;\n var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n var isCheck = true;\n if (items.length) {\n if (backward) {\n for (var i = index; i >= 0; i--) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === 0) {\n if (isCheck) {\n index = i = items.length;\n isCheck = false;\n }\n }\n }\n }\n else {\n for (var i = index; i <= items.length - 1; i++) {\n if (!items[i].classList.contains(DISABLED)) {\n elementIndex = i;\n break;\n }\n else if (i === items.length - 1) {\n if (isCheck) {\n index = i = -1;\n isCheck = false;\n }\n }\n }\n }\n }\n return elementIndex;\n };\n TimePicker.prototype.keyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0 || !isNullOrUndefined(this.inputWrapper)\n && this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n return;\n }\n var count = this.timeCollections.length;\n if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n var index = this.validLiElement(0, event.action === 'down' ? false : true);\n this.activeIndex = index;\n this.selectedElement = this.liCollections[index];\n this.elementValue(new Date(this.timeCollections[index]));\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n this.findNextElement(event);\n }\n }\n else {\n var nextItem = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n false : true);\n nextItem = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n var index = this.validLiElement(0);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n else if (event.action === 'end') {\n var index = this.validLiElement(count - 1, true);\n this.activeIndex = index;\n nextItem = this.timeCollections[index];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.elementValue(new Date(nextItem));\n }\n this.isNavigate = true;\n this.setHover(this.selectedElement, NAVIGATION);\n this.setActiveDescendant();\n this.selectInputText();\n if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setScrollPosition();\n }\n };\n TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n };\n TimePicker.prototype.getCultureDateObject = function (ld, c) {\n return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n };\n TimePicker.prototype.wireListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n TimePicker.prototype.unWireListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n if (!Browser.isDevice) {\n EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n }\n }\n };\n TimePicker.prototype.valueProcess = function (event, value) {\n var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n if (+this.prevDate !== +result) {\n this.initValue = result;\n this.changeEvent(event);\n }\n };\n TimePicker.prototype.changeEvent = function (e) {\n this.addSelection();\n this.updateInput(true, this.initValue);\n var eventArgs = {\n event: (e || null),\n value: this.value,\n text: (this.inputElement).value,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n this.invalidValueString = null;\n this.checkErrorState(this.value);\n };\n TimePicker.prototype.updateInput = function (isUpdate, date) {\n if (isUpdate) {\n this.prevValue = this.getValue(date);\n }\n this.prevDate = this.valueWithMinutes = date;\n if ((typeof date !== 'number') || (this.value && +new Date(+this.value).setMilliseconds(0)) !== +date) {\n this.setProperties({ value: date }, true);\n if (this.enableMask) {\n this.createMask();\n }\n }\n if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n this.checkErrorState(this.invalidValueString);\n this.updateInputValue(this.invalidValueString);\n }\n this.clearIconState();\n };\n TimePicker.prototype.setActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n TimePicker.prototype.removeSelection = function () {\n this.removeHover(HOVER);\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n if (items.length) {\n removeClass(items, SELECTED);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.removeHover = function (className) {\n var hoveredItem = this.getHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n if (className === NAVIGATION) {\n hoveredItem[0].removeAttribute('aria-selected');\n }\n }\n };\n TimePicker.prototype.getHoverItem = function (className) {\n var hoveredItem;\n if (!isNullOrUndefined(this.popupWrapper)) {\n hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n TimePicker.prototype.setActiveClass = function () {\n if (!isNullOrUndefined(this.popupWrapper)) {\n var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if ((this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes))) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n };\n TimePicker.prototype.addSelection = function () {\n this.selectedElement = null;\n this.removeSelection();\n this.setActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], SELECTED);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n TimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n TimePicker.prototype.createDateObj = function (val) {\n var formatStr = null;\n var today = this.globalize.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n var value = null;\n if (typeof val === 'string') {\n if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n today = this.defaultCulture.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n if (isNullOrUndefined(value)) {\n value = this.timeParse(today, val);\n }\n }\n else {\n value = this.timeParse(today, val);\n }\n }\n else if (val instanceof Date) {\n value = val;\n }\n return value;\n };\n TimePicker.prototype.timeParse = function (today, val) {\n var value;\n value = this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n });\n value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n }) : value;\n value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n return value;\n };\n TimePicker.prototype.createListItems = function () {\n var _this = this;\n this.listWrapper = this.createElement('div', { className: CONTENT, attrs: { 'tabindex': '-1' } });\n var start;\n var interval = this.step * 60000;\n var listItems = [];\n this.timeCollections = [];\n this.disableItemCollection = [];\n start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n var end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n while (end >= start) {\n this.timeCollections.push(start);\n listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n start += interval;\n }\n var listBaseOptions = {\n itemCreated: function (args) {\n var eventArgs = {\n element: args.item,\n text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n };\n _this.trigger('itemRender', eventArgs, function (eventArgs) {\n if (eventArgs.isDisabled) {\n eventArgs.element.classList.add(DISABLED);\n }\n if (eventArgs.element.classList.contains(DISABLED)) {\n _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n }\n });\n }\n };\n this.listTag = ListBase.createList(this.createElement, listItems, listBaseOptions, true);\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options', 'tabindex': '0' });\n append([this.listTag], this.listWrapper);\n };\n TimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObj.element && this.popupObj.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + this.popupObj.element.id + '\"]')) && target !== this.inputElement\n && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n target !== (this.inputWrapper && this.inputWrapper.container)) {\n if (this.isPopupOpen()) {\n this.hide();\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement)\n && (target === this.popupWrapper);\n }\n }\n };\n TimePicker.prototype.setEnableRtl = function () {\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n if (this.popupObj) {\n this.popupObj.enableRtl = this.enableRtl;\n this.popupObj.dataBind();\n }\n };\n TimePicker.prototype.setEnable = function () {\n Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n if (this.enabled) {\n removeClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'false' });\n this.inputElement.setAttribute('tabindex', this.tabIndex);\n }\n else {\n this.hide();\n addClass([this.inputWrapper.container], DISABLED);\n attributes(this.inputElement, { 'aria-disabled': 'true' });\n this.inputElement.tabIndex = -1;\n }\n };\n TimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.initMin = this.checkDateValue(new Date(this.checkInValue(date.min)));\n this.setProperties({ min: this.initMin }, true);\n }\n else {\n this.initMax = this.checkDateValue(new Date(this.checkInValue(date.max)));\n this.setProperties({ max: this.initMax }, true);\n }\n if (this.inputElement.value === '') {\n this.validateMinMax(this.value, this.min, this.max);\n }\n else {\n this.checkValue(this.inputElement.value);\n }\n this.checkValueChange(null, false);\n };\n TimePicker.prototype.inputBlurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isPreventBlur && this.isPopupOpen()) {\n this.inputElement.focus();\n return;\n }\n this.closePopup(0, e);\n if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue('');\n }\n }\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n if (this.getText() !== this.inputElement.value) {\n this.updateValue((this.inputElement).value, e);\n }\n else if (this.inputElement.value.trim().length === 0) {\n this.resetState();\n }\n this.cursorDetails = null;\n this.isNavigate = false;\n if (this.inputElement.value === '') {\n this.invalidValueString = null;\n }\n };\n /**\n * Focuses out the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [FOCUS]);\n var blurArguments = {\n model: this\n };\n this.trigger('blur', blurArguments);\n }\n };\n TimePicker.prototype.isPopupOpen = function () {\n if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n return true;\n }\n return false;\n };\n TimePicker.prototype.inputFocusHandler = function () {\n if (!this.enabled) {\n return;\n }\n var focusArguments = {\n model: this\n };\n if (!this.readonly && !Browser.isDevice && !this.enableMask) {\n this.selectInputText();\n }\n if (this.enableMask && !this.inputElement.value && this.placeholder) {\n if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n this.updateInputValue(this.maskedDateValue);\n this.inputElement.selectionStart = 0;\n this.inputElement.selectionEnd = this.inputElement.value.length;\n }\n }\n this.trigger('focus', focusArguments);\n this.clearIconState();\n if (this.openOnFocus) {\n this.show();\n }\n };\n /**\n * Focused the TimePicker textbox element.\n *\n * @returns {void}\n */\n TimePicker.prototype.focusIn = function () {\n if (document.activeElement !== this.inputElement && this.enabled) {\n this.inputElement.focus();\n }\n };\n /**\n * Hides the TimePicker popup.\n *\n * @returns {void}\n * @deprecated\n */\n TimePicker.prototype.hide = function () {\n this.closePopup(100, null);\n this.clearIconState();\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Opens the popup to show the list items.\n *\n * @returns {void}\n * @deprecated\n */\n TimePicker.prototype.show = function (event) {\n var _this = this;\n if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n return;\n }\n else {\n this.popupCreation();\n if (Browser.isDevice && this.listWrapper) {\n this.modal = this.createElement('div');\n this.modal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n document.body.appendChild(this.modal);\n }\n if (Browser.isDevice) {\n this.mobileTimePopupWrap = this.createElement('div', { className: 'e-timepicker-mob-popup-wrap' });\n document.body.appendChild(this.mobileTimePopupWrap);\n }\n this.openPopupEventArgs = {\n popup: this.popupObj || null,\n cancel: false,\n event: event || null,\n name: 'open',\n appendTo: Browser.isDevice ? this.mobileTimePopupWrap : document.body\n };\n var eventArgs = this.openPopupEventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.openPopupEventArgs = eventArgs;\n if (!_this.openPopupEventArgs.cancel && !_this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n _this.openPopupEventArgs.appendTo.appendChild(_this.popupWrapper);\n _this.popupAlignment(_this.openPopupEventArgs);\n _this.setScrollPosition();\n if (!Browser.isDevice) {\n _this.inputElement.focus();\n }\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION\n };\n _this.popupObj.refreshPosition(_this.anchor);\n if (_this.zIndex === 1000) {\n _this.popupObj.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObj.show(new Animation(openAnimation), null);\n }\n _this.setActiveDescendant();\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n addClass([_this.inputWrapper.container], FOCUS);\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n _this.setOverlayIndex(_this.mobileTimePopupWrap, _this.popupObj.element, _this.modal, Browser.isDevice);\n }\n else {\n _this.popupObj.destroy();\n _this.popupWrapper = _this.listTag = undefined;\n _this.liCollections = _this.timeCollections = _this.disableItemCollection = [];\n _this.popupObj = null;\n }\n });\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n TimePicker.prototype.setOverlayIndex = function (popupWrapper, timePopupElement, modal, isDevice) {\n if (isDevice && !isNullOrUndefined(timePopupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n var index = parseInt(timePopupElement.style.zIndex, 10) ? parseInt(timePopupElement.style.zIndex, 10) : 1000;\n modal.style.zIndex = (index - 1).toString();\n popupWrapper.style.zIndex = index.toString();\n }\n };\n TimePicker.prototype.formatValues = function (type) {\n var value;\n if (typeof type === 'number') {\n value = formatUnit(type);\n }\n else if (typeof type === 'string') {\n value = (type.match(/px|%|em/)) ? type : isNaN(parseInt(type, 10)) ? type : formatUnit(type);\n }\n return value;\n };\n TimePicker.prototype.popupAlignment = function (args) {\n args.popup.position.X = this.formatValues(args.popup.position.X);\n args.popup.position.Y = this.formatValues(args.popup.position.Y);\n if (!isNaN(parseFloat(args.popup.position.X)) || !isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.targetType = 'container';\n }\n if (!isNaN(parseFloat(args.popup.position.X))) {\n this.popupObj.offsetX = parseFloat(args.popup.position.X);\n }\n if (!isNaN(parseFloat(args.popup.position.Y))) {\n this.popupObj.offsetY = parseFloat(args.popup.position.Y);\n }\n if (!Browser.isDevice) {\n switch (args.popup.position.X) {\n case 'left':\n break;\n case 'right':\n args.popup.offsetX = this.containerStyle.width;\n break;\n case 'center':\n args.popup.offsetX = -(this.containerStyle.width / 2);\n break;\n }\n switch (args.popup.position.Y) {\n case 'top':\n break;\n case 'bottom':\n break;\n case 'center':\n args.popup.offsetY = -(this.containerStyle.height / 2);\n break;\n }\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.inputWrapper.container;\n this.anchor = this.inputElement;\n this.popupObj.targetType = 'relative';\n }\n }\n else {\n if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n this.popupObj.relateTo = this.anchor = document.body;\n this.popupObj.offsetY = 0;\n this.popupObj.targetType = 'container';\n this.popupObj.collision = { X: 'fit', Y: 'fit' };\n }\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained upon browser refresh.\n *\n * @returns {string}\n */\n TimePicker.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * To get component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TimePicker.prototype.getModuleName = function () {\n return 'timepicker';\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {TimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {TimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n if (this.readonly) {\n this.hide();\n }\n this.setTimeAllowEdit();\n break;\n case 'enabled':\n this.setProperties({ enabled: newProp.enabled }, true);\n this.setEnable();\n break;\n case 'allowEdit':\n this.setTimeAllowEdit();\n break;\n case 'enableRtl':\n this.setProperties({ enableRtl: newProp.enableRtl }, true);\n this.setEnableRtl();\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'zIndex':\n this.setProperties({ zIndex: newProp.zIndex }, true);\n this.setZIndex();\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n this.bindClearEvent();\n break;\n case 'locale':\n this.setProperties({ locale: newProp.locale }, true);\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.updatePlaceHolder();\n this.setValue(this.value);\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'width':\n setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkTimeFormat();\n this.setValue(this.value);\n if (this.enableMask) {\n this.createMask();\n if (!this.value) {\n this.updateInputValue(this.maskedDateValue);\n }\n }\n break;\n case 'value':\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n if (!this.invalidValueString) {\n if (typeof newProp.value === 'string') {\n this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n newProp.value = this.value;\n }\n else {\n if ((newProp.value && +new Date(+newProp.value).setMilliseconds(0)) !== +this.value) {\n newProp.value = this.checkDateValue(new Date('' + newProp.value));\n }\n }\n this.initValue = newProp.value;\n newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n }\n else {\n this.updateInputValue(this.invalidValueString);\n this.checkErrorState(this.invalidValueString);\n }\n if (this.enableMask && isNullOrUndefined(newProp.value)) {\n this.updateInputValue(this.maskedDateValue);\n this.checkErrorState(this.maskedDateValue);\n }\n this.checkValueChange(null, false);\n if (this.isPopupOpen()) {\n this.setScrollPosition();\n }\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n if (newProp.strictMode) {\n this.checkErrorState(null);\n }\n this.setProperties({ strictMode: newProp.strictMode }, true);\n this.checkValue((this.inputElement).value);\n this.checkValueChange(null, false);\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo)))) {\n if (this.popupWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n this.updateInputValue(this.maskedDateValue);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.updateInputValue('');\n }\n }\n break;\n }\n }\n };\n TimePicker.prototype.checkInValue = function (inValue) {\n if (inValue instanceof Date) {\n return (inValue.toUTCString());\n }\n else {\n return ('' + inValue);\n }\n };\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"format\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"readonly\", void 0);\n __decorate([\n Property({})\n ], TimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('Never')\n ], TimePicker.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(1000)\n ], TimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(30)\n ], TimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(null)\n ], TimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(true)\n ], TimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], TimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], TimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"itemRender\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TimePicker.prototype, \"focus\", void 0);\n TimePicker = __decorate([\n NotifyPropertyChanges\n ], TimePicker);\n return TimePicker;\n}(Component));\nexport { TimePicker };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///<reference path='../datepicker/datepicker-model.d.ts'/>\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = 'e-list-item';\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * <input id=\"dateTimePicker\"/>\n * ```\n * ```typescript\n * <script>\n * let dateTimePickerObject:DateTimePicker = new DateTimePicker({ value: new Date() });\n * dateTimePickerObject.appendTo(\"#dateTimePicker\");\n * </script>\n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n __extends(DateTimePicker, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {DateTimePickerModel} options - Specifies the DateTimePicker model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function DateTimePicker(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.valueWithMinutes = null;\n _this.scrollInvoked = false;\n _this.moduleName = _this.getModuleName();\n _this.dateTimeOptions = options;\n return _this;\n }\n DateTimePicker.prototype.focusHandler = function () {\n if (!this.enabled) {\n return;\n }\n addClass([this.inputWrapper.container], INPUTFOCUS);\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusIn = function () {\n _super.prototype.focusIn.call(this);\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.focusOut = function () {\n if (document.activeElement === this.inputElement) {\n this.inputElement.blur();\n removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n };\n DateTimePicker.prototype.blurHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n // IE popup closing issue when click over the scrollbar\n if (this.isTimePopupOpen() && this.isPreventBlur) {\n this.inputElement.focus();\n return;\n }\n removeClass([this.inputWrapper.container], INPUTFOCUS);\n var blurArguments = {\n model: this\n };\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n this.trigger('blur', blurArguments);\n };\n /**\n * To destroy the widget.\n *\n * @returns {void}\n */\n DateTimePicker.prototype.destroy = function () {\n if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n this.popupObject.destroy();\n detach(this.dateTimeWrapper);\n this.dateTimeWrapper = undefined;\n this.liCollections = this.timeCollections = [];\n if (!isNullOrUndefined(this.rippleFn)) {\n this.rippleFn();\n }\n }\n var ariaAttribute = {\n 'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n 'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n 'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n };\n if (this.inputElement) {\n Input.removeAttributes(ariaAttribute, this.inputElement);\n }\n if (this.isCalendar()) {\n if (this.popupWrapper) {\n detach(this.popupWrapper);\n }\n this.popupObject = this.popupWrapper = null;\n this.keyboardHandler.destroy();\n }\n this.unBindInputEvents();\n this.liCollections = null;\n this.rippleFn = null;\n this.selectedElement = null;\n this.listTag = null;\n this.timeIcon = null;\n this.popupObject = null;\n this.preventArgs = null;\n this.keyboardModule = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * To Initialize the control rendering.\n *\n * @returns {void}\n * @private\n */\n DateTimePicker.prototype.render = function () {\n this.timekeyConfigure = {\n enter: 'enter',\n escape: 'escape',\n end: 'end',\n tab: 'tab',\n home: 'home',\n down: 'downarrow',\n up: 'uparrow',\n left: 'leftarrow',\n right: 'rightarrow',\n open: 'alt+downarrow',\n close: 'alt+uparrow'\n };\n this.valueWithMinutes = null;\n this.previousDateTime = null;\n this.isPreventBlur = false;\n this.cloneElement = this.element.cloneNode(true);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n this.initValue = this.value;\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n _super.prototype.updateHtmlAttributeToElement.call(this);\n this.checkAttributes(false);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('datetimepicker', localeText, this.locale);\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n _super.prototype.render.call(this);\n this.createInputElement();\n _super.prototype.updateHtmlAttributeToWrapper.call(this);\n this.bindInputEvents();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n this.setValue(true);\n if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(this.scrollTo))) }, true);\n this.previousDateTime = this.value && new Date(+this.value);\n if (this.element.tagName === 'EJS-DATETIMEPICKER') {\n this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n this.element.removeAttribute('tabindex');\n if (!this.enabled) {\n this.inputElement.tabIndex = -1;\n }\n }\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n this.renderComplete();\n };\n DateTimePicker.prototype.setValue = function (isDynamic) {\n if (isDynamic === void 0) { isDynamic = false; }\n this.initValue = this.validateMinMaxRange(this.value);\n if (!this.strictMode && this.isDateObject(this.initValue)) {\n var value = this.validateMinMaxRange(this.initValue);\n Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: value }, true);\n }\n else {\n if (isNullOrUndefined(this.value)) {\n this.initValue = null;\n this.setProperties({ value: null }, true);\n }\n }\n this.valueWithMinutes = this.value;\n _super.prototype.updateInput.call(this, isDynamic);\n };\n DateTimePicker.prototype.validateMinMaxRange = function (value) {\n var result = value;\n if (this.isDateObject(value)) {\n result = this.validateValue(value);\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n }\n }\n this.checkValidState(result);\n return result;\n };\n DateTimePicker.prototype.checkValidState = function (value) {\n this.isValidState = true;\n if (!this.strictMode) {\n if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n this.isValidState = false;\n }\n }\n this.checkErrorState();\n };\n DateTimePicker.prototype.checkErrorState = function () {\n if (this.isValidState) {\n removeClass([this.inputWrapper.container], ERROR);\n }\n else {\n addClass([this.inputWrapper.container], ERROR);\n }\n attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n DateTimePicker.prototype.validateValue = function (value) {\n var dateVal = value;\n if (this.strictMode) {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = this.max;\n }\n else if (+value < +this.min) {\n dateVal = this.min;\n }\n else if (+value > +this.max) {\n dateVal = this.max;\n }\n }\n else {\n if (+this.min > +this.max) {\n this.disablePopupButton(true);\n dateVal = value;\n }\n }\n return dateVal;\n };\n DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n if (isDisable) {\n addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n this.hide();\n }\n else {\n removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n }\n };\n DateTimePicker.prototype.getFormattedValue = function (value) {\n var dateOptions;\n if (!isNullOrUndefined(value)) {\n if (this.calendarMode === 'Gregorian') {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n }\n else {\n dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n }\n return this.globalize.formatDate(value, dateOptions);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.isDateObject = function (value) {\n return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n };\n DateTimePicker.prototype.createInputElement = function () {\n removeClass([this.inputElement], DATEPICKERROOT);\n removeClass([this.inputWrapper.container], DATEWRAPPER);\n addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n addClass([this.inputElement], ROOT);\n this.renderTimeIcon();\n };\n DateTimePicker.prototype.renderTimeIcon = function () {\n this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n };\n DateTimePicker.prototype.bindInputEvents = function () {\n EventHandler.add(this.timeIcon, 'mousedown', this.timeHandler, this);\n EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateHandler, this);\n EventHandler.add(this.inputElement, 'blur', this.blurHandler, this);\n EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n eventName: 'keydown',\n keyAction: this.inputKeyAction.bind(this),\n keyConfigs: this.defaultKeyConfigs\n });\n };\n DateTimePicker.prototype.unBindInputEvents = function () {\n EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n if (this.inputElement) {\n EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n }\n if (this.keyboardHandler) {\n this.keyboardHandler.destroy();\n }\n };\n DateTimePicker.prototype.cldrTimeFormat = function () {\n var cldrTime;\n if (this.isNullOrEmpty(this.timeFormat)) {\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n }\n else {\n cldrTime = this.timeFormat;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.cldrDateTimeFormat = function () {\n var cldrTime;\n var culture = new Internationalization(this.locale);\n var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n if (this.isNullOrEmpty(this.formatString)) {\n cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n }\n else {\n cldrTime = this.formatString;\n }\n return cldrTime;\n };\n DateTimePicker.prototype.getCldrFormat = function (type) {\n var cldrDateTime;\n if (this.locale === 'en' || this.locale === 'en-US') {\n cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n }\n else {\n cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n }\n return cldrDateTime;\n };\n DateTimePicker.prototype.isNullOrEmpty = function (value) {\n if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n return true;\n }\n else {\n return false;\n }\n };\n DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n if (this.calendarMode === 'Gregorian') {\n return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n }\n else {\n return getValue('main.' + '' + this.locale + '.dates.calendars.islamic.timeFormats.short', ld);\n }\n };\n DateTimePicker.prototype.timeHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n this.isIconClicked = true;\n if (Browser.isDevice) {\n this.inputElement.setAttribute('readonly', '');\n }\n if (e.currentTarget === this.timeIcon) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n else {\n this.inputElement.focus();\n this.popupCreation('time', e);\n addClass([this.inputWrapper.container], [INPUTFOCUS]);\n }\n }\n this.isIconClicked = false;\n };\n DateTimePicker.prototype.dateHandler = function (e) {\n if (!this.enabled) {\n return;\n }\n if (e.currentTarget === this.inputWrapper.buttons[0]) {\n e.preventDefault();\n }\n if (this.enabled && !this.readonly) {\n if (this.isTimePopupOpen()) {\n this.closePopup(e);\n }\n if (!isNullOrUndefined(this.popupWrapper)) {\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.show = function (type, e) {\n if ((this.enabled && this.readonly) || !this.enabled) {\n return;\n }\n else {\n if (type === 'time' && !this.dateTimeWrapper) {\n if (this.isDatePopupOpen()) {\n this.hide(e);\n }\n this.popupCreation('time', e);\n }\n else if (!this.popupObj) {\n if (this.isTimePopupOpen()) {\n this.hide(e);\n }\n _super.prototype.show.call(this);\n this.popupCreation('date', e);\n }\n }\n };\n DateTimePicker.prototype.toggle = function (e) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n this.show('time', null);\n }\n else if (this.isTimePopupOpen()) {\n this.hide(e);\n _super.prototype.show.call(this, null, e);\n this.popupCreation('date', null);\n }\n else {\n this.show(null, e);\n }\n };\n DateTimePicker.prototype.listCreation = function () {\n var dateObject;\n if (this.calendarMode === 'Gregorian') {\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.cldrDateTimeFormat(), type: 'datetime'\n });\n }\n else {\n dateObject = this.globalize.parseDate(this.inputElement.value, {\n format: this.cldrDateTimeFormat(), type: 'datetime', calendar: 'islamic'\n });\n }\n var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n dateObject : new Date() : this.value;\n this.valueWithMinutes = value;\n this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n var min = this.startTime(value);\n var max = this.endTime(value);\n var listDetails = TimePickerBase.createListItems(this.createElement, min, max, this.globalize, this.cldrTimeFormat(), this.step);\n this.timeCollections = listDetails.collection;\n this.listTag = listDetails.list;\n attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n append([listDetails.list], this.listWrapper);\n this.wireTimeListEvents();\n var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n };\n DateTimePicker.prototype.popupCreation = function (type, e) {\n if (Browser.isDevice) {\n this.element.setAttribute('readonly', 'readonly');\n }\n if (type === 'date') {\n if (!this.readonly && this.popupWrapper) {\n addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n attributes(this.popupWrapper, { 'id': this.element.id + '_datepopup' });\n }\n }\n else {\n if (!this.readonly) {\n this.dateTimeWrapper = createElement('div', {\n className: ROOT + ' ' + POPUP,\n attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n });\n if (!isNullOrUndefined(this.cssClass)) {\n this.dateTimeWrapper.className += ' ' + this.cssClass;\n }\n if (!isNullOrUndefined(this.step) && this.step > 0) {\n this.listCreation();\n append([this.listWrapper], this.dateTimeWrapper);\n }\n document.body.appendChild(this.dateTimeWrapper);\n this.addTimeSelection();\n this.renderPopup();\n this.setTimeScrollPosition();\n this.openPopup(e);\n this.popupObject.refreshPosition(this.inputElement);\n }\n }\n };\n DateTimePicker.prototype.openPopup = function (e) {\n var _this = this;\n this.preventArgs = {\n cancel: false,\n popup: this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n this.trigger('open', eventArgs, function (eventArgs) {\n _this.preventArgs = eventArgs;\n if (!_this.preventArgs.cancel && !_this.readonly) {\n var openAnimation = {\n name: 'FadeIn',\n duration: ANIMATIONDURATION\n };\n if (_this.zIndex === 1000) {\n _this.popupObject.show(new Animation(openAnimation), _this.element);\n }\n else {\n _this.popupObject.show(new Animation(openAnimation), null);\n }\n addClass([_this.inputWrapper.container], [ICONANIMATION]);\n attributes(_this.inputElement, { 'aria-expanded': 'true' });\n attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n }\n });\n };\n DateTimePicker.prototype.documentClickHandler = function (event) {\n var target = event.target;\n if ((!isNullOrUndefined(this.popupObject) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n (this.popupObject.element && this.popupObject.element.contains(target)))) && event.type !== 'touchstart') {\n event.preventDefault();\n }\n if (!(closest(target, '[id=\"' + (this.popupObject && this.popupObject.element.id + '\"]'))) && target !== this.inputElement\n && target !== this.timeIcon && !isNullOrUndefined(this.inputWrapper) && target !== this.inputWrapper.container) {\n if (this.isTimePopupOpen()) {\n this.hide(event);\n this.focusOut();\n }\n }\n else if (target !== this.inputElement) {\n if (!Browser.isDevice) {\n this.isPreventBlur = ((document.activeElement === this.inputElement) && (Browser.isIE || Browser.info.name === 'edge')\n && target === this.popupObject.element);\n }\n }\n };\n DateTimePicker.prototype.isTimePopupOpen = function () {\n return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n };\n DateTimePicker.prototype.isDatePopupOpen = function () {\n return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n };\n DateTimePicker.prototype.renderPopup = function () {\n var _this = this;\n this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n if (Browser.isDevice) {\n this.timeModal = createElement('div');\n this.timeModal.className = '' + ROOT + ' e-time-modal';\n document.body.className += ' ' + OVERFLOW;\n this.timeModal.style.display = 'block';\n document.body.appendChild(this.timeModal);\n }\n var offset = 4;\n this.popupObject = new Popup(this.dateTimeWrapper, {\n width: this.setPopupWidth(),\n zIndex: this.zIndex,\n targetType: 'container',\n collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n enableRtl: this.enableRtl,\n offsetY: offset,\n open: function () {\n _this.dateTimeWrapper.style.visibility = 'visible';\n addClass([_this.timeIcon], ACTIVE);\n if (!Browser.isDevice) {\n _this.timekeyConfigure = extend(_this.timekeyConfigure, _this.keyConfigs);\n _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n keyAction: _this.timeKeyActionHandle.bind(_this),\n keyConfigs: _this.timekeyConfigure,\n eventName: 'keydown'\n });\n }\n }, close: function () {\n removeClass([_this.timeIcon], ACTIVE);\n _this.unWireTimeListEvents();\n _this.inputElement.removeAttribute('aria-activedescendant');\n remove(_this.popupObject.element);\n _this.popupObject.destroy();\n _this.dateTimeWrapper.innerHTML = '';\n _this.listWrapper = _this.dateTimeWrapper = undefined;\n if (_this.inputEvent) {\n _this.inputEvent.destroy();\n }\n }, targetExitViewport: function () {\n if (!Browser.isDevice) {\n _this.hide();\n }\n }\n });\n this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n };\n DateTimePicker.prototype.setDimension = function (width) {\n if (typeof width === 'number') {\n width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n // eslint-disable-next-line no-self-assign\n width = width;\n }\n else {\n width = '100%';\n }\n return width;\n };\n DateTimePicker.prototype.setPopupWidth = function () {\n var width = this.setDimension(this.width);\n if (width.indexOf('%') > -1) {\n var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n width = inputWidth.toString() + 'px';\n }\n return width;\n };\n DateTimePicker.prototype.wireTimeListEvents = function () {\n EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n };\n DateTimePicker.prototype.unWireTimeListEvents = function () {\n if (this.listWrapper) {\n EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n if (!Browser.isDevice) {\n EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n }\n }\n };\n DateTimePicker.prototype.onMouseOver = function (event) {\n var currentLi = closest(event.target, '.' + LISTCLASS);\n this.setTimeHover(currentLi, HOVER);\n };\n DateTimePicker.prototype.onMouseLeave = function () {\n this.removeTimeHover(HOVER);\n };\n DateTimePicker.prototype.setTimeHover = function (li, className) {\n if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n this.removeTimeHover(className);\n addClass([li], className);\n }\n };\n DateTimePicker.prototype.getPopupHeight = function () {\n var height = parseInt(POPUPDIMENSION, 10);\n var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n return popupHeight > height ? height : popupHeight;\n };\n DateTimePicker.prototype.changeEvent = function (e) {\n _super.prototype.changeEvent.call(this, e);\n if ((this.value && this.value.valueOf()) !== (this.previousDateTime && +this.previousDateTime.valueOf())) {\n this.valueWithMinutes = this.value;\n this.setInputValue('date');\n this.previousDateTime = this.value && new Date(+this.value);\n }\n };\n DateTimePicker.prototype.updateValue = function (e) {\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs = {\n value: this.value, event: e || null,\n isInteracted: !isNullOrUndefined(e),\n element: this.element\n };\n this.addTimeSelection();\n this.trigger('change', this.changedArgs);\n this.previousDateTime = this.previousDate = this.value;\n }\n };\n DateTimePicker.prototype.setTimeScrollPosition = function () {\n var popupElement = this.selectedElement;\n if (!isNullOrUndefined(popupElement)) {\n this.findScrollTop(popupElement);\n }\n else if (this.dateTimeWrapper && this.checkDateValue(this.scrollTo)) {\n this.setScrollTo();\n }\n };\n DateTimePicker.prototype.findScrollTop = function (element) {\n var listHeight = this.getPopupHeight();\n var nextElement = element.nextElementSibling;\n var height = nextElement ? nextElement.offsetTop : element.offsetTop;\n var lineHeight = element.getBoundingClientRect().height;\n if ((height + element.offsetTop) > listHeight) {\n this.dateTimeWrapper.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setScrollTo = function () {\n var element;\n var items = this.dateTimeWrapper.querySelectorAll('.' + LISTCLASS);\n if (items.length >= 0) {\n this.scrollInvoked = true;\n var initialTime = this.timeCollections[0];\n var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n if (!isNullOrUndefined(element)) {\n this.findScrollTop(element);\n }\n else {\n this.dateTimeWrapper.scrollTop = 0;\n }\n };\n DateTimePicker.prototype.setInputValue = function (type) {\n if (type === 'date') {\n this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n this.setProperties({ value: this.getFullDateTime() }, true);\n }\n else {\n var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n this.previousElementValue = this.inputElement.value;\n this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n if (this.enableMask) {\n this.createMask();\n }\n }\n this.updateIconState();\n };\n DateTimePicker.prototype.getFullDateTime = function () {\n var value = null;\n if (this.isDateObject(this.valueWithMinutes)) {\n value = this.combineDateTime(this.valueWithMinutes);\n }\n else {\n value = this.previousDate;\n }\n return this.validateMinMaxRange(value);\n };\n DateTimePicker.prototype.createMask = function () {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n };\n DateTimePicker.prototype.combineDateTime = function (value) {\n if (this.isDateObject(value)) {\n var day = this.previousDate.getDate();\n var month = this.previousDate.getMonth();\n var year = this.previousDate.getFullYear();\n var hour = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n return new Date(year, month, day, hour, minutes, seconds);\n }\n else {\n return this.previousDate;\n }\n };\n DateTimePicker.prototype.onMouseClick = function (event) {\n var target = event.target;\n var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n if (li && li.classList.contains(LISTCLASS)) {\n this.timeValue = li.getAttribute('data-value');\n this.hide(event);\n }\n this.setSelection(li, event);\n };\n DateTimePicker.prototype.setSelection = function (li, event) {\n if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n this.selectedElement = li;\n var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n this.activeIndex = index;\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n this.updateValue(event);\n }\n };\n DateTimePicker.prototype.setTimeActiveClass = function () {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n if (!isNullOrUndefined(collections)) {\n var items = collections.querySelectorAll('.' + LISTCLASS);\n if (items.length) {\n for (var i = 0; i < items.length; i++) {\n if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n items[i].setAttribute('aria-selected', 'true');\n this.selectedElement = items[i];\n this.activeIndex = i;\n this.setTimeActiveDescendant();\n break;\n }\n }\n }\n }\n };\n DateTimePicker.prototype.setTimeActiveDescendant = function () {\n if (!isNullOrUndefined(this.selectedElement) && this.value) {\n attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n }\n else {\n this.inputElement.removeAttribute('aria-activedescendant');\n }\n };\n DateTimePicker.prototype.addTimeSelection = function () {\n this.selectedElement = null;\n this.removeTimeSelection();\n this.setTimeActiveClass();\n if (!isNullOrUndefined(this.selectedElement)) {\n addClass([this.selectedElement], ACTIVE);\n this.selectedElement.setAttribute('aria-selected', 'true');\n }\n };\n DateTimePicker.prototype.removeTimeSelection = function () {\n this.removeTimeHover(HOVER);\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n if (items.length) {\n removeClass(items, ACTIVE);\n items[0].removeAttribute('aria-selected');\n }\n }\n };\n DateTimePicker.prototype.removeTimeHover = function (className) {\n var hoveredItem = this.getTimeHoverItem(className);\n if (hoveredItem && hoveredItem.length) {\n removeClass(hoveredItem, className);\n }\n };\n DateTimePicker.prototype.getTimeHoverItem = function (className) {\n var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n var hoveredItem;\n if (!isNullOrUndefined(collections)) {\n hoveredItem = collections.querySelectorAll('.' + className);\n }\n return hoveredItem;\n };\n DateTimePicker.prototype.isValidLI = function (li) {\n return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n };\n DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n var day = value.getDate();\n var month = value.getMonth();\n var year = value.getFullYear();\n var hours = value.getHours();\n var minutes = value.getMinutes();\n var seconds = value.getSeconds();\n var milliseconds = value.getMilliseconds();\n if (range) {\n if (method === 'starttime') {\n return new Date(year, month, day, 0, 0, 0);\n }\n else {\n return new Date(year, month, day, 23, 59, 59);\n }\n }\n else {\n return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n }\n };\n DateTimePicker.prototype.startTime = function (date) {\n var tempStartValue;\n var start;\n var tempMin = this.min;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n start = false;\n tempStartValue = this.min;\n }\n else if (+value < +this.max && +value > +this.min) {\n start = true;\n tempStartValue = value;\n }\n else if (+value >= +this.max) {\n start = true;\n tempStartValue = this.max;\n }\n return this.calculateStartEnd(tempStartValue, start, 'starttime');\n };\n DateTimePicker.prototype.endTime = function (date) {\n var tempEndValue;\n var end;\n var tempMax = this.max;\n var value = date === null ? new Date() : date;\n if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n end = false;\n tempEndValue = this.max;\n }\n else if (+value < +this.max && +value > +this.min) {\n end = true;\n tempEndValue = value;\n }\n else if (+value <= +this.min) {\n end = true;\n tempEndValue = this.min;\n }\n return this.calculateStartEnd(tempEndValue, end, 'endtime');\n };\n DateTimePicker.prototype.hide = function (e) {\n var _this = this;\n if (this.popupObj || this.dateTimeWrapper) {\n this.preventArgs = {\n cancel: false,\n popup: this.popupObj || this.popupObject,\n event: e || null\n };\n var eventArgs = this.preventArgs;\n if (isNullOrUndefined(this.popupObj)) {\n this.trigger('close', eventArgs, function (eventArgs) {\n _this.dateTimeCloseEventCallback(e, eventArgs);\n });\n }\n else {\n this.dateTimeCloseEventCallback(e, eventArgs);\n }\n }\n else {\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n }\n };\n DateTimePicker.prototype.dateTimeCloseEventCallback = function (e, eventArgs) {\n this.preventArgs = eventArgs;\n if (!this.preventArgs.cancel) {\n if (this.isDatePopupOpen()) {\n _super.prototype.hide.call(this, e);\n }\n else if (this.isTimePopupOpen()) {\n this.closePopup(e);\n removeClass([document.body], OVERFLOW);\n if (Browser.isDevice && this.timeModal) {\n this.timeModal.style.display = 'none';\n this.timeModal.outerHTML = '';\n this.timeModal = null;\n }\n this.setTimeActiveDescendant();\n }\n }\n if (Browser.isDevice && this.allowEdit && !this.readonly) {\n this.inputElement.removeAttribute('readonly');\n }\n this.setAllowEdit();\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n DateTimePicker.prototype.closePopup = function (e) {\n if (this.isTimePopupOpen() && this.popupObject) {\n var animModel = {\n name: 'FadeOut',\n duration: ANIMATIONDURATION,\n delay: 0\n };\n this.popupObject.hide(new Animation(animModel));\n this.inputWrapper.container.classList.remove(ICONANIMATION);\n attributes(this.inputElement, { 'aria-expanded': 'false' });\n this.inputElement.removeAttribute('aria-owns');\n EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n }\n };\n DateTimePicker.prototype.preRender = function () {\n this.checkFormat();\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.preRender.call(this);\n removeClass([this.inputElementCopy], [ROOT]);\n };\n DateTimePicker.prototype.getProperty = function (date, val) {\n if (val === 'min') {\n this.setProperties({ min: this.validateValue(date.min) }, true);\n }\n else {\n this.setProperties({ max: this.validateValue(date.max) }, true);\n }\n };\n DateTimePicker.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n var value;\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n switch (prop) {\n case 'name':\n this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n break;\n case 'step':\n this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === '' ||\n this.inputElement.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['min'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ min: value }, !isDynamic);\n }\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n this.inputElement.getAttribute(prop) === 'true' ||\n this.inputElement.getAttribute(prop) === '' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['value'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ value: value }, !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['max'] === undefined)) || isDynamic) {\n value = new Date(this.inputElement.getAttribute(prop));\n if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n this.setProperties({ max: value }, !isDynamic);\n }\n }\n break;\n }\n }\n }\n };\n DateTimePicker.prototype.requiredModules = function () {\n var modules = [];\n if (this) {\n modules.push({ args: [this], member: 'islamic' });\n }\n if (this.enableMask) {\n modules.push(this.maskedDateModule());\n }\n return modules;\n };\n DateTimePicker.prototype.maskedDateModule = function () {\n var modules = { args: [this], member: 'MaskedDateTime' };\n return modules;\n };\n DateTimePicker.prototype.getTimeActiveElement = function () {\n if (!isNullOrUndefined(this.dateTimeWrapper)) {\n return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n }\n else {\n return null;\n }\n };\n DateTimePicker.prototype.createDateObj = function (val) {\n return val instanceof Date ? val : null;\n };\n DateTimePicker.prototype.getDateObject = function (text) {\n if (!this.isNullOrEmpty(text)) {\n var dateValue = this.createDateObj(text);\n var value = this.valueWithMinutes;\n var status_1 = !isNullOrUndefined(value);\n if (this.checkDateValue(dateValue)) {\n var date = status_1 ? value.getDate() : DAY;\n var month = status_1 ? value.getMonth() : MONTH;\n var year = status_1 ? value.getFullYear() : YEAR;\n var hour = status_1 ? value.getHours() : HOUR;\n var minute = status_1 ? value.getMinutes() : MINUTE;\n var second = status_1 ? value.getSeconds() : SECOND;\n var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n if (!this.scrollInvoked) {\n return new Date(year, month, date, hour, minute, second, millisecond);\n }\n else {\n this.scrollInvoked = false;\n return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds(), dateValue.getMilliseconds());\n }\n }\n }\n return null;\n };\n DateTimePicker.prototype.findNextTimeElement = function (event) {\n var textVal = (this.inputElement).value;\n var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n this.getDateObject(this.valueWithMinutes);\n var dateTimeVal = null;\n var listCount = this.liCollections.length;\n if (!isNullOrUndefined(this.activeIndex) || !isNullOrUndefined(this.checkDateValue(value))) {\n if (event.action === 'home') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n this.activeIndex = 0;\n }\n else if (event.action === 'end') {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n this.activeIndex = this.timeCollections.length - 1;\n }\n else {\n if (event.action === 'down') {\n for (var i = 0; i < listCount; i++) {\n if (+value < this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n else {\n for (var i = listCount - 1; i >= 0; i--) {\n if (+value > this.timeCollections[i]) {\n dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n this.activeIndex = i;\n break;\n }\n }\n }\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n }\n };\n DateTimePicker.prototype.setTimeValue = function (date, value) {\n var dateString;\n var time;\n var val = this.validateMinMaxRange(value);\n var newval = this.createDateObj(val);\n if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n time = new Date(+this.valueWithMinutes);\n }\n else {\n if (this.strictMode) {\n //for strict mode case, when value not present within a range. Reset the nearest range value.\n date = newval;\n }\n this.valueWithMinutes = this.checkDateValue(date);\n time = new Date(+this.valueWithMinutes);\n }\n if (this.calendarMode === 'Gregorian') {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd'\n });\n }\n else {\n dateString = this.globalize.formatDate(time, {\n format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n });\n }\n if (!this.strictMode && isNullOrUndefined(time)) {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n return time;\n };\n DateTimePicker.prototype.timeElementValue = function (value) {\n if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n var date = value instanceof Date ? value : this.getDateObject(value);\n return this.setTimeValue(date, value);\n }\n return null;\n };\n DateTimePicker.prototype.timeKeyHandler = function (event) {\n if (isNullOrUndefined(this.step) || this.step <= 0) {\n return;\n }\n var listCount = this.timeCollections.length;\n if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n if (this.liCollections.length > 0) {\n if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n this.activeIndex = 0;\n this.selectedElement = this.liCollections[0];\n this.timeElementValue(new Date(this.timeCollections[0]));\n }\n else {\n this.findNextTimeElement(event);\n }\n }\n }\n else {\n var nextItemValue = void 0;\n if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n nextItemValue = isNullOrUndefined(this.timeCollections[index]) ?\n this.timeCollections[0] : this.timeCollections[index];\n }\n else if (event.action === 'home') {\n this.activeIndex = 0;\n nextItemValue = this.timeCollections[0];\n }\n else if (event.action === 'end') {\n this.activeIndex = listCount - 1;\n nextItemValue = this.timeCollections[listCount - 1];\n }\n this.selectedElement = this.liCollections[this.activeIndex];\n this.timeElementValue(new Date(nextItemValue));\n }\n this.isNavigate = true;\n this.setTimeHover(this.selectedElement, NAVIGATION);\n this.setTimeActiveDescendant();\n if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n this.setTimeScrollPosition();\n }\n };\n DateTimePicker.prototype.timeKeyActionHandle = function (event) {\n if (this.enabled) {\n if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n event.preventDefault();\n }\n switch (event.action) {\n case 'up':\n case 'down':\n case 'home':\n case 'end':\n this.timeKeyHandler(event);\n break;\n case 'enter':\n if (this.isNavigate) {\n this.selectedElement = this.liCollections[this.activeIndex];\n this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n this.setInputValue('time');\n if (+this.previousDateTime !== +this.value) {\n this.changedArgs.value = this.value;\n this.addTimeSelection();\n this.previousDateTime = this.value;\n }\n }\n else {\n this.updateValue(event);\n }\n this.hide(event);\n addClass([this.inputWrapper.container], INPUTFOCUS);\n this.isNavigate = false;\n event.stopPropagation();\n break;\n case 'escape':\n this.hide(event);\n break;\n default:\n this.isNavigate = false;\n break;\n }\n }\n };\n DateTimePicker.prototype.inputKeyAction = function (event) {\n switch (event.action) {\n case 'altDownArrow':\n this.strictModeUpdate();\n this.updateInput();\n this.toggle(event);\n break;\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {DateTimePickerModel} newProp - Returns the dynamic property value of the component.\n * @param {DateTimePickerModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @deprecated\n */\n DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.isDynamicValueChanged = true;\n this.invalidValueString = null;\n this.checkInvalidValue(newProp.value);\n newProp.value = this.value;\n newProp.value = this.validateValue(newProp.value);\n if (this.enableMask) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n }\n this.valueWithMinutes = newProp.value;\n this.setProperties({ value: newProp.value }, true);\n if (this.popupObj) {\n this.popupUpdate();\n }\n this.previousDateTime = new Date(this.inputElement.value);\n this.updateInput();\n this.changeTrigger(null);\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n if (this.enableMask && this.value) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n }\n break;\n case 'min':\n case 'max':\n this.getProperty(newProp, prop);\n this.updateInput();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n break;\n case 'cssClass':\n if (!isNullOrUndefined(oldProp.cssClass)) {\n oldProp.cssClass = (oldProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(newProp.cssClass)) {\n newProp.cssClass = (newProp.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n Input.setCssClass(newProp.cssClass, [this.inputWrapper.container], oldProp.cssClass);\n if (this.dateTimeWrapper) {\n Input.setCssClass(newProp.cssClass, [this.dateTimeWrapper], oldProp.cssClass);\n }\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n this.dateTimeFormat = this.cldrDateTimeFormat();\n _super.prototype.updateInput.call(this);\n break;\n case 'htmlAttributes':\n this.updateHtmlAttributeToElement();\n this.updateHtmlAttributeToWrapper();\n this.checkAttributes(true);\n break;\n case 'format':\n this.setProperties({ format: newProp.format }, true);\n this.checkFormat();\n this.dateTimeFormat = this.formatString;\n this.setValue();\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n if (!this.value) {\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.inputElement);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.inputElement);\n if (!this.enabled) {\n this.inputElement.tabIndex = -1;\n }\n break;\n case 'strictMode':\n this.invalidValueString = null;\n this.updateInput();\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.inputElement);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputWrapper);\n Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n }\n break;\n case 'scrollTo':\n if (this.checkDateValue(new Date(this.checkValue(newProp.scrollTo)))) {\n if (this.dateTimeWrapper) {\n this.setScrollTo();\n }\n this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(newProp.scrollTo))) }, true);\n }\n else {\n this.setProperties({ scrollTo: null }, true);\n }\n break;\n case 'enableMask':\n if (this.enableMask) {\n this.notify('createMask', {\n module: 'MaskedDateTime'\n });\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n else {\n if (this.inputElement.value === this.maskedDateValue) {\n this.maskedDateValue = '';\n Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n }\n }\n break;\n default:\n _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n break;\n }\n if (!this.isDynamicValueChanged) {\n this.hide(null);\n }\n this.isDynamicValueChanged = false;\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n DateTimePicker.prototype.getModuleName = function () {\n return 'datetimepicker';\n };\n DateTimePicker.prototype.restoreValue = function () {\n this.previousDateTime = this.previousDate;\n this.currentDate = this.value ? this.value : new Date();\n this.valueWithMinutes = this.value;\n this.previousDate = this.value;\n this.previousElementValue = this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n this.getFormattedValue(this.inputValueCopy);\n };\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"timeFormat\", void 0);\n __decorate([\n Property(30)\n ], DateTimePicker.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"scrollTo\", void 0);\n __decorate([\n Property(1000)\n ], DateTimePicker.prototype, \"zIndex\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"keyConfigs\", void 0);\n __decorate([\n Property({})\n ], DateTimePicker.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"allowEdit\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"isMultiSelection\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"values\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"placeholder\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"strictMode\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"serverTimezoneOffset\", void 0);\n __decorate([\n Property(new Date(1900, 0, 1))\n ], DateTimePicker.prototype, \"min\", void 0);\n __decorate([\n Property(new Date(2099, 11, 31))\n ], DateTimePicker.prototype, \"max\", void 0);\n __decorate([\n Property(null)\n ], DateTimePicker.prototype, \"firstDayOfWeek\", void 0);\n __decorate([\n Property('Gregorian')\n ], DateTimePicker.prototype, \"calendarMode\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"start\", void 0);\n __decorate([\n Property('Month')\n ], DateTimePicker.prototype, \"depth\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"weekNumber\", void 0);\n __decorate([\n Property(true)\n ], DateTimePicker.prototype, \"showTodayButton\", void 0);\n __decorate([\n Property('Short')\n ], DateTimePicker.prototype, \"dayHeaderFormat\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"openOnFocus\", void 0);\n __decorate([\n Property(false)\n ], DateTimePicker.prototype, \"enableMask\", void 0);\n __decorate([\n Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n ], DateTimePicker.prototype, \"maskPlaceholder\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"close\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"cleared\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], DateTimePicker.prototype, \"destroyed\", void 0);\n DateTimePicker = __decorate([\n NotifyPropertyChanges\n ], DateTimePicker);\n return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","import { L10n, getValue, getDefaultDateObject, cldrData } from '@syncfusion/ej2-base';\nvar ARROWLEFT = 'ArrowLeft';\nvar ARROWRIGHT = 'ArrowRight';\nvar ARROWUP = 'ArrowUp';\nvar ARROWDOWN = 'ArrowDown';\nvar TAB = 'Tab';\nvar SHIFTTAB = 'shiftTab';\nvar END = 'End';\nvar HOME = 'Home';\nvar MaskedDateTime = /** @class */ (function () {\n function MaskedDateTime(parent) {\n this.mask = '';\n this.defaultConstant = {\n day: 'day',\n month: 'month',\n year: 'year',\n hour: 'hour',\n minute: 'minute',\n second: 'second',\n dayOfTheWeek: 'day of the week'\n };\n this.hiddenMask = '';\n this.validCharacters = 'dMyhmHfasz';\n this.isDayPart = false;\n this.isMonthPart = false;\n this.isYearPart = false;\n this.isHourPart = false;\n this.isMinutePart = false;\n this.isSecondsPart = false;\n this.isMilliSecondsPart = false;\n this.monthCharacter = '';\n this.periodCharacter = '';\n this.isHiddenMask = false;\n this.isComplete = false;\n this.isNavigate = false;\n this.navigated = false;\n this.formatRegex = /EEEEE|EEEE|EEE|EE|E|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|HH|H|hh|h|mm|m|fff|ff|f|aa|a|ss|s|zzzz|zzz|zz|z|'[^']*'|'[^']*'/g;\n this.isDeletion = false;\n this.isShortYear = false;\n this.isDeleteKey = false;\n this.isDateZero = false;\n this.isMonthZero = false;\n this.isYearZero = false;\n this.dayTypeCount = 0;\n this.monthTypeCount = 0;\n this.hourTypeCount = 0;\n this.minuteTypeCount = 0;\n this.secondTypeCount = 0;\n this.parent = parent;\n this.dateformat = this.getCulturedFormat();\n this.maskDateValue = this.parent.value != null ? new Date(+this.parent.value) : new Date();\n this.maskDateValue.setMonth(0);\n this.maskDateValue.setHours(0);\n this.maskDateValue.setMinutes(0);\n this.maskDateValue.setSeconds(0);\n this.previousDate = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n this.removeEventListener();\n this.addEventListener();\n }\n MaskedDateTime.prototype.getModuleName = function () {\n return 'MaskedDateTime';\n };\n MaskedDateTime.prototype.addEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.on('createMask', this.createMask, this);\n this.parent.on('setMaskSelection', this.validCharacterCheck, this);\n this.parent.on('inputHandler', this.maskInputHandler, this);\n this.parent.on('keyDownHandler', this.maskKeydownHandler, this);\n this.parent.on('clearHandler', this.clearHandler, this);\n };\n MaskedDateTime.prototype.removeEventListener = function () {\n if (this.parent.isDestroyed) {\n return;\n }\n this.parent.off('createMask', this.createMask);\n this.parent.off('setMaskSelection', this.validCharacterCheck);\n this.parent.off('inputHandler', this.maskInputHandler);\n this.parent.off('keyDownHandler', this.maskKeydownHandler);\n this.parent.off('clearHandler', this.clearHandler);\n };\n MaskedDateTime.prototype.createMask = function (navigated) {\n if (navigated === void 0) { navigated = false; }\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = false;\n this.dateformat = this.getCulturedFormat();\n if (this.parent.maskPlaceholder.day) {\n this.defaultConstant['day'] = this.parent.maskPlaceholder.day;\n }\n if (this.parent.maskPlaceholder.month) {\n this.defaultConstant['month'] = this.parent.maskPlaceholder.month;\n }\n if (this.parent.maskPlaceholder.year) {\n this.defaultConstant['year'] = this.parent.maskPlaceholder.year;\n }\n if (this.parent.maskPlaceholder.hour) {\n this.defaultConstant['hour'] = this.parent.maskPlaceholder.hour;\n }\n if (this.parent.maskPlaceholder.minute) {\n this.defaultConstant['minute'] = this.parent.maskPlaceholder.minute;\n }\n if (this.parent.maskPlaceholder.second) {\n this.defaultConstant['second'] = this.parent.maskPlaceholder.second;\n }\n if (this.parent.maskPlaceholder.dayOfTheWeek) {\n this.defaultConstant['dayOfTheWeek'] = this.parent.maskPlaceholder.dayOfTheWeek.toString();\n }\n this.getCUltureMaskFormat();\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.mask = this.previousValue = inputValue;\n this.parent.maskedDateValue = this.mask;\n if (this.parent.value) {\n this.navigated = navigated;\n this.setDynamicValue();\n }\n };\n MaskedDateTime.prototype.getCUltureMaskFormat = function () {\n this.l10n = new L10n(this.parent.moduleName, this.defaultConstant, this.parent.locale);\n this.objectString = Object.keys(this.defaultConstant);\n for (var i = 0; i < this.objectString.length; i++) {\n this.defaultConstant[this.objectString[i].toString()] =\n this.l10n.getConstant(this.objectString[i].toString());\n }\n };\n MaskedDateTime.prototype.validCharacterCheck = function () {\n var start = this.parent.inputElement.selectionStart;\n for (var i = start, j = start - 1; i < this.hiddenMask.length || j >= 0; i++, j--) {\n if (i < this.hiddenMask.length && this.validCharacters.indexOf(this.hiddenMask[i]) !== -1) {\n this.setSelection(this.hiddenMask[i]);\n return;\n }\n if (j >= 0 && this.validCharacters.indexOf(this.hiddenMask[j]) !== -1) {\n this.setSelection(this.hiddenMask[j]);\n return;\n }\n }\n };\n MaskedDateTime.prototype.setDynamicValue = function () {\n this.maskDateValue = new Date(+this.parent.value);\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = true;\n this.updateValue();\n this.validCharacterCheck();\n };\n MaskedDateTime.prototype.setSelection = function (validChar) {\n var start = -1;\n var end = 0;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === validChar) {\n end = i + 1;\n if (start === -1) {\n start = i;\n }\n }\n }\n if (start < 0) {\n start = 0;\n }\n this.parent.inputElement.setSelectionRange(start, end);\n };\n MaskedDateTime.prototype.maskKeydownHandler = function (args) {\n this.dayTypeCount = this.monthTypeCount = this.hourTypeCount = this.minuteTypeCount = this.secondTypeCount = 0;\n if (args.e.key === 'Delete') {\n this.isDeleteKey = true;\n return;\n }\n if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWLEFT || args.e.key === ARROWRIGHT\n || args.e.key === SHIFTTAB || args.e.key === TAB || args.e.action === SHIFTTAB ||\n args.e.key === END || args.e.key === HOME)) {\n var start = this.parent.inputElement.selectionStart;\n var end = this.parent.inputElement.selectionEnd;\n var length_1 = this.parent.inputElement.value.length;\n if ((start === 0 && end === length_1) && (args.e.key === TAB || args.e.action === SHIFTTAB)) {\n var index = args.e.action === SHIFTTAB ? end : 0;\n this.parent.inputElement.selectionStart = this.parent.inputElement.selectionEnd = index;\n }\n if (args.e.key === END || args.e.key === HOME) {\n var range = args.e.key === END ? length_1 : 0;\n this.parent.inputElement.selectionStart = this.parent.inputElement.selectionEnd = range;\n }\n this.navigateSelection(args.e.key === ARROWLEFT || args.e.action === SHIFTTAB || args.e.key === END ? true : false);\n }\n if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWUP || args.e.key === ARROWDOWN)) {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n this.dateAlteration(args.e.key === ARROWDOWN ? true : false);\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.inputElement.value = inputValue;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (formatText === this.hiddenMask[i]) {\n start = i;\n break;\n }\n }\n this.parent.inputElement.selectionStart = start;\n this.validCharacterCheck();\n }\n };\n MaskedDateTime.prototype.isPersist = function () {\n var isPersist = this.parent.isFocused || this.navigated;\n return isPersist;\n };\n MaskedDateTime.prototype.differenceCheck = function () {\n var start = this.parent.inputElement.selectionStart;\n var inputValue = this.parent.inputElement.value;\n var previousVal = this.previousValue.substring(0, start + this.previousValue.length - inputValue.length);\n var newVal = inputValue.substring(0, start);\n var newDateValue = new Date(+this.maskDateValue);\n var maxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (previousVal.indexOf(newVal) === 0 && (newVal.length === 0 ||\n this.previousHiddenMask[newVal.length - 1] !== this.previousHiddenMask[newVal.length])) {\n for (var i = newVal.length; i < previousVal.length; i++) {\n if (this.previousHiddenMask[i] !== '' && this.validCharacters.indexOf(this.previousHiddenMask[i]) >= 0) {\n this.isDeletion = this.handleDeletion(this.previousHiddenMask[i], false);\n }\n }\n if (this.isDeletion) {\n return;\n }\n }\n switch (this.previousHiddenMask[start - 1]) {\n case 'd':\n {\n var date = (this.isDayPart && newDateValue.getDate().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getDate() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.isDateZero = (newVal[start - 1] === '0');\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(date)) {\n return;\n }\n for (var i = 0; date > maxDate; i++) {\n date = parseInt(date.toString().slice(1), 10);\n }\n if (date >= 1) {\n newDateValue.setDate(date);\n this.isNavigate = date.toString().length === 2;\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n if (newDateValue.getMonth() !== this.maskDateValue.getMonth()) {\n return;\n }\n this.isDayPart = true;\n this.dayTypeCount = this.dayTypeCount + 1;\n }\n else {\n this.isDayPart = false;\n this.dayTypeCount = this.isDateZero ? this.dayTypeCount + 1 : this.dayTypeCount;\n }\n break;\n }\n case 'M':\n {\n var month = void 0;\n if (newDateValue.getMonth().toString().length < 2 && !this.isPersist()) {\n month = (this.isMonthPart ? (newDateValue.getMonth() + 1) * 10 : 0) + parseInt(newVal[start - 1], 10);\n }\n else {\n month = parseInt(newVal[start - 1], 10);\n }\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n this.isMonthZero = (newVal[start - 1] === '0');\n if (!isNaN(month)) {\n while (month > 12) {\n month = parseInt(month.toString().slice(1), 10);\n }\n if (month >= 1) {\n newDateValue.setMonth(month - 1);\n this.isNavigate = month.toString().length === 2;\n if (newDateValue.getMonth() !== month - 1) {\n newDateValue.setDate(1);\n newDateValue.setMonth(month - 1);\n }\n if (this.isDayPart) {\n var previousMaxDate = new Date(this.previousDate.getFullYear(), this.previousDate.getMonth() + 1, 0).getDate();\n var currentMaxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (this.previousDate.getDate() === previousMaxDate && currentMaxDate <= previousMaxDate) {\n newDateValue.setDate(currentMaxDate);\n }\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n this.isMonthPart = true;\n this.monthTypeCount = this.monthTypeCount + 1;\n }\n else {\n newDateValue.setMonth(0);\n this.isMonthPart = false;\n this.monthTypeCount = this.isMonthZero ? this.monthTypeCount + 1 : this.monthTypeCount;\n }\n }\n else {\n var monthString = (this.getCulturedValue('months[stand-alone].wide'));\n var monthValue = Object.keys(monthString);\n this.monthCharacter += newVal[start - 1].toLowerCase();\n while (this.monthCharacter.length > 0) {\n var i = 1;\n for (var _i = 0, monthValue_1 = monthValue; _i < monthValue_1.length; _i++) {\n var months = monthValue_1[_i];\n if (monthString[i].toLowerCase().indexOf(this.monthCharacter) === 0) {\n newDateValue.setMonth(i - 1);\n this.isMonthPart = true;\n this.maskDateValue = newDateValue;\n return;\n }\n i++;\n }\n this.monthCharacter = this.monthCharacter.substring(1, this.monthCharacter.length);\n }\n }\n break;\n }\n case 'y':\n {\n var year = (this.isYearPart && (newDateValue.getFullYear().toString().length < 4\n && !this.isShortYear) ? newDateValue.getFullYear() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.isShortYear = false;\n this.isYearZero = (newVal[start - 1] === '0');\n if (isNaN(year)) {\n return;\n }\n while (year > 9999) {\n year = parseInt(year.toString().slice(1), 10);\n }\n if (year < 1) {\n this.isYearPart = false;\n }\n else {\n newDateValue.setFullYear(year);\n if (year.toString().length === 4) {\n this.isNavigate = true;\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n this.isYearPart = true;\n }\n break;\n }\n case 'h':\n this.hour = (this.isHourPart && (newDateValue.getHours() % 12 || 12).toString().length < 2\n && !this.isPersist() ? (newDateValue.getHours() % 12 || 12) * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(this.hour)) {\n return;\n }\n while (this.hour > 12) {\n this.hour = parseInt(this.hour.toString().slice(1), 10);\n }\n newDateValue.setHours(Math.floor(newDateValue.getHours() / 12) * 12 + (this.hour % 12));\n this.isNavigate = this.hour.toString().length === 2;\n this.isHourPart = true;\n this.hourTypeCount = this.hourTypeCount + 1;\n break;\n case 'H':\n this.hour = (this.isHourPart && newDateValue.getHours().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getHours() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(this.hour)) {\n return;\n }\n for (var i = 0; this.hour > 23; i++) {\n this.hour = parseInt(this.hour.toString().slice(1), 10);\n }\n newDateValue.setHours(this.hour);\n this.isNavigate = this.hour.toString().length === 2;\n this.isHourPart = true;\n this.hourTypeCount = this.hourTypeCount + 1;\n break;\n case 'm':\n {\n var minutes = (this.isMinutePart && newDateValue.getMinutes().toString().length < 2\n && !this.isPersist() ? newDateValue.getMinutes() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(minutes)) {\n return;\n }\n for (var i = 0; minutes > 59; i++) {\n minutes = parseInt(minutes.toString().slice(1), 10);\n }\n newDateValue.setMinutes(minutes);\n this.isNavigate = minutes.toString().length === 2;\n this.isMinutePart = true;\n this.minuteTypeCount = this.minuteTypeCount + 1;\n break;\n }\n case 's':\n {\n var seconds = (this.isSecondsPart && newDateValue.getSeconds().toString().length < 2 &&\n !this.isPersist() ? newDateValue.getSeconds() * 10 : 0) + parseInt(newVal[start - 1], 10);\n this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n this.navigated = this.navigated ? false : this.navigated;\n if (isNaN(seconds)) {\n return;\n }\n for (var i = 0; seconds > 59; i++) {\n seconds = parseInt(seconds.toString().slice(1), 10);\n }\n newDateValue.setSeconds(seconds);\n this.isNavigate = seconds.toString().length === 2;\n this.isSecondsPart = true;\n this.secondTypeCount = this.secondTypeCount + 1;\n break;\n }\n case 'a':\n {\n this.periodCharacter += newVal[start - 1].toLowerCase();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var periodString = (this.getCulturedValue('dayPeriods.format.wide'));\n var periodkeys = Object.keys(periodString);\n for (var i = 0; this.periodCharacter.length > 0; i++) {\n if ((periodString[periodkeys[0]].toLowerCase().indexOf(this.periodCharacter) === 0\n && newDateValue.getHours() >= 12) || (periodString[periodkeys[1]].toLowerCase().\n indexOf(this.periodCharacter) === 0 && newDateValue.getHours() < 12)) {\n newDateValue.setHours((newDateValue.getHours() + 12) % 24);\n this.maskDateValue = newDateValue;\n }\n this.periodCharacter = this.periodCharacter.substring(1, this.periodCharacter.length);\n }\n break;\n }\n default:\n break;\n }\n this.maskDateValue = newDateValue;\n };\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n MaskedDateTime.prototype.formatCheck = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n function formatValueSpecifier(formattext) {\n var result;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysAbbreviated = proxy.getCulturedValue('days[stand-alone].abbreviated');\n var dayKeyAbbreviated = Object.keys(daysAbbreviated);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysWide = (proxy.getCulturedValue('days[stand-alone].wide'));\n var dayKeyWide = Object.keys(daysWide);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var daysNarrow = (proxy.getCulturedValue('days[stand-alone].narrow'));\n var dayKeyNarrow = Object.keys(daysNarrow);\n var monthAbbreviated = (proxy.getCulturedValue('months[stand-alone].abbreviated'));\n var monthWide = (proxy.getCulturedValue('months[stand-alone].wide'));\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var periodString = (proxy.getCulturedValue('dayPeriods.format.wide'));\n var periodkeys = Object.keys(periodString);\n var milliseconds;\n var dateOptions;\n switch (formattext) {\n case 'ddd':\n case 'dddd':\n case 'd':\n result = proxy.isDayPart ? proxy.maskDateValue.getDate().toString() : proxy.defaultConstant['day'].toString();\n result = proxy.zeroCheck(proxy.isDateZero, proxy.isDayPart, result);\n if (proxy.dayTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.dayTypeCount = 0;\n }\n break;\n case 'dd':\n result = proxy.isDayPart ? proxy.roundOff(proxy.maskDateValue.getDate(), 2) : proxy.defaultConstant['day'].toString();\n result = proxy.zeroCheck(proxy.isDateZero, proxy.isDayPart, result);\n if (proxy.dayTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.dayTypeCount = 0;\n }\n break;\n case 'E':\n case 'EE':\n case 'EEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysAbbreviated[dayKeyAbbreviated[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'EEEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysWide[dayKeyWide[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'EEEEE':\n result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysNarrow[dayKeyNarrow[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n break;\n case 'M':\n result = proxy.isMonthPart ? (proxy.maskDateValue.getMonth() + 1).toString() : proxy.defaultConstant['month'].toString();\n result = proxy.zeroCheck(proxy.isMonthZero, proxy.isMonthPart, result);\n if (proxy.monthTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.monthTypeCount = 0;\n }\n break;\n case 'MM':\n result = proxy.isMonthPart ? proxy.roundOff(proxy.maskDateValue.getMonth() + 1, 2) : proxy.defaultConstant['month'].toString();\n result = proxy.zeroCheck(proxy.isMonthZero, proxy.isMonthPart, result);\n if (proxy.monthTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.monthTypeCount = 0;\n }\n break;\n case 'MMM':\n result = proxy.isMonthPart ? monthAbbreviated[proxy.maskDateValue.getMonth() + 1] : proxy.defaultConstant['month'].toString();\n break;\n case 'MMMM':\n result = proxy.isMonthPart ? monthWide[proxy.maskDateValue.getMonth() + 1] : proxy.defaultConstant['month'].toString();\n break;\n case 'yy':\n result = proxy.isYearPart ? proxy.roundOff(proxy.maskDateValue.getFullYear() % 100, 2) : proxy.defaultConstant['year'].toString();\n result = proxy.zeroCheck(proxy.isYearZero, proxy.isYearPart, result);\n if (proxy.isYearPart) {\n proxy.isNavigate = proxy.isShortYear = (proxy.maskDateValue.getFullYear() % 100).toString().length === 2;\n }\n break;\n case 'y':\n case 'yyyy':\n result = proxy.isYearPart ? proxy.roundOff(proxy.maskDateValue.getFullYear(), 4) : proxy.defaultConstant['year'].toString();\n result = proxy.zeroCheck(proxy.isYearZero, proxy.isYearPart, result);\n break;\n case 'h':\n result = proxy.isHourPart ? (proxy.maskDateValue.getHours() % 12 || 12).toString() : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'hh':\n result = proxy.isHourPart ? proxy.roundOff(proxy.maskDateValue.getHours() % 12 || 12, 2) : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'H':\n result = proxy.isHourPart ? proxy.maskDateValue.getHours().toString() : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'HH':\n result = proxy.isHourPart ? proxy.roundOff(proxy.maskDateValue.getHours(), 2) : proxy.defaultConstant['hour'].toString();\n if (proxy.hourTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.hourTypeCount = 0;\n }\n break;\n case 'm':\n result = proxy.isMinutePart ? proxy.maskDateValue.getMinutes().toString() : proxy.defaultConstant['minute'].toString();\n if (proxy.minuteTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.minuteTypeCount = 0;\n }\n break;\n case 'mm':\n result = proxy.isMinutePart ? proxy.roundOff(proxy.maskDateValue.getMinutes(), 2) : proxy.defaultConstant['minute'].toString();\n if (proxy.minuteTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.minuteTypeCount = 0;\n }\n break;\n case 's':\n result = proxy.isSecondsPart ? proxy.maskDateValue.getSeconds().toString() : proxy.defaultConstant['second'].toString();\n if (proxy.secondTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.secondTypeCount = 0;\n }\n break;\n case 'ss':\n result = proxy.isSecondsPart ? proxy.roundOff(proxy.maskDateValue.getSeconds(), 2) : proxy.defaultConstant['second'].toString();\n if (proxy.secondTypeCount === 2) {\n proxy.isNavigate = true;\n proxy.secondTypeCount = 0;\n }\n break;\n case 'f':\n result = Math.floor(proxy.maskDateValue.getMilliseconds() / 100).toString();\n break;\n case 'ff':\n milliseconds = proxy.maskDateValue.getMilliseconds();\n if (proxy.maskDateValue.getMilliseconds() > 99) {\n milliseconds = Math.floor(proxy.maskDateValue.getMilliseconds() / 10);\n }\n result = proxy.roundOff(milliseconds, 2);\n break;\n case 'fff':\n result = proxy.roundOff(proxy.maskDateValue.getMilliseconds(), 3);\n break;\n case 'a':\n case 'aa':\n result = proxy.maskDateValue.getHours() < 12 ? periodString[periodkeys[0]] : periodString[periodkeys[1]];\n break;\n case 'z':\n case 'zz':\n case 'zzz':\n case 'zzzz':\n dateOptions = {\n format: formattext,\n type: 'dateTime', skeleton: 'yMd', calendar: proxy.parent.calendarMode\n };\n result = proxy.parent.globalize.formatDate(proxy.maskDateValue, dateOptions);\n break;\n }\n result = result !== undefined ? result : formattext.slice(1, formattext.length - 1);\n if (proxy.isHiddenMask) {\n var hiddenChar = '';\n for (var i = 0; i < result.length; i++) {\n hiddenChar += formattext[0];\n }\n return hiddenChar;\n }\n else {\n return result;\n }\n }\n return formatValueSpecifier;\n };\n MaskedDateTime.prototype.maskInputHandler = function () {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n this.differenceCheck();\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isDateZero = this.isMonthZero = this.isYearZero = false;\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.inputElement.value = inputValue;\n this.parent.inputElement.value = inputValue;\n for (var i = 0; i < this.hiddenMask.length; i++) {\n if (formatText === this.hiddenMask[i]) {\n start = i;\n break;\n }\n }\n this.parent.inputElement.selectionStart = start;\n this.validCharacterCheck();\n if ((this.isNavigate || this.isDeletion) && !this.isDeleteKey) {\n var isbackward = this.isNavigate ? false : true;\n this.isNavigate = this.isDeletion = false;\n this.navigateSelection(isbackward);\n }\n if (this.isDeleteKey) {\n this.isDeletion = false;\n }\n this.isDeleteKey = false;\n };\n MaskedDateTime.prototype.navigateSelection = function (isbackward) {\n var start = this.parent.inputElement.selectionStart;\n var end = this.parent.inputElement.selectionEnd;\n var formatIndex = isbackward ? start - 1 : end + 1;\n this.navigated = true;\n while (formatIndex < this.hiddenMask.length && formatIndex >= 0) {\n if (this.validCharacters.indexOf(this.hiddenMask[formatIndex]) >= 0) {\n this.setSelection(this.hiddenMask[formatIndex]);\n break;\n }\n formatIndex = formatIndex + (isbackward ? -1 : 1);\n }\n };\n MaskedDateTime.prototype.roundOff = function (val, count) {\n var valueText = val.toString();\n var length = count - valueText.length;\n var result = '';\n for (var i = 0; i < length; i++) {\n result += '0';\n }\n return result + valueText;\n };\n MaskedDateTime.prototype.zeroCheck = function (isZero, isDayPart, resultValue) {\n var result = resultValue;\n if (isZero && !isDayPart) {\n result = '0';\n }\n return result;\n };\n MaskedDateTime.prototype.handleDeletion = function (format, isSegment) {\n switch (format) {\n case 'd':\n this.isDayPart = isSegment;\n break;\n case 'M':\n this.isMonthPart = isSegment;\n if (!isSegment) {\n this.maskDateValue.setMonth(0);\n this.monthCharacter = '';\n }\n break;\n case 'y':\n this.isYearPart = isSegment;\n break;\n case 'H':\n case 'h':\n this.isHourPart = isSegment;\n if (!isSegment) {\n this.periodCharacter = '';\n }\n break;\n case 'm':\n this.isMinutePart = isSegment;\n break;\n case 's':\n this.isSecondsPart = isSegment;\n break;\n default:\n return false;\n }\n return true;\n };\n MaskedDateTime.prototype.dateAlteration = function (isDecrement) {\n var start = this.parent.inputElement.selectionStart;\n var formatText = '';\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n formatText = this.hiddenMask[start];\n }\n else {\n return;\n }\n var newDateValue = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n this.previousDate = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n var incrementValue = isDecrement ? -1 : 1;\n switch (formatText) {\n case 'd':\n newDateValue.setDate(newDateValue.getDate() + incrementValue);\n break;\n case 'M':\n {\n var newMonth = newDateValue.getMonth() + incrementValue;\n newDateValue.setDate(1);\n newDateValue.setMonth(newMonth);\n if (this.isDayPart) {\n var previousMaxDate = new Date(this.previousDate.getFullYear(), this.previousDate.getMonth() + 1, 0).getDate();\n var currentMaxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n if (this.previousDate.getDate() === previousMaxDate && currentMaxDate <= previousMaxDate) {\n newDateValue.setDate(currentMaxDate);\n }\n else {\n newDateValue.setDate(this.previousDate.getDate());\n }\n }\n else {\n newDateValue.setDate(this.previousDate.getDate());\n }\n this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n break;\n }\n case 'y':\n newDateValue.setFullYear(newDateValue.getFullYear() + incrementValue);\n break;\n case 'H':\n case 'h':\n newDateValue.setHours(newDateValue.getHours() + incrementValue);\n break;\n case 'm':\n newDateValue.setMinutes(newDateValue.getMinutes() + incrementValue);\n break;\n case 's':\n newDateValue.setSeconds(newDateValue.getSeconds() + incrementValue);\n break;\n case 'a':\n newDateValue.setHours((newDateValue.getHours() + 12) % 24);\n break;\n default:\n break;\n }\n this.maskDateValue = newDateValue.getFullYear() > 0 ? newDateValue : this.maskDateValue;\n if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n this.handleDeletion(this.hiddenMask[start], true);\n }\n };\n MaskedDateTime.prototype.getCulturedValue = function (format) {\n var locale = this.parent.locale;\n var result;\n if (locale === 'en' || locale === 'en-US') {\n result = getValue(format, getDefaultDateObject());\n }\n else {\n result = getValue('main.' + '' + locale + ('.dates.calendars.gregorian.' + format), cldrData);\n }\n return result;\n };\n MaskedDateTime.prototype.getCulturedFormat = function () {\n var formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.moduleName === 'datepicker') {\n formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.format && this.parent.formatString) {\n formatString = this.parent.formatString;\n }\n }\n if (this.parent.moduleName === 'datetimepicker') {\n formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n if (this.parent.dateTimeFormat) {\n formatString = this.parent.dateTimeFormat;\n }\n }\n if (this.parent.moduleName === 'timepicker') {\n formatString = this.parent.cldrTimeFormat();\n }\n return formatString;\n };\n MaskedDateTime.prototype.clearHandler = function () {\n this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = false;\n this.updateValue();\n };\n MaskedDateTime.prototype.updateValue = function () {\n this.monthCharacter = this.periodCharacter = '';\n var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = true;\n this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n this.isHiddenMask = false;\n this.previousHiddenMask = this.hiddenMask;\n this.previousValue = inputValue;\n this.parent.updateInputValue(inputValue);\n };\n MaskedDateTime.prototype.destroy = function () {\n this.removeEventListener();\n };\n return MaskedDateTime;\n}());\nexport { MaskedDateTime };\n","import * as index from './index';\nindex.Calendar.Inject(index.Islamic);\nindex.DatePicker.Inject(index.Islamic, index.MaskedDateTime);\nindex.TimePicker.Inject(index.MaskedDateTime);\nindex.DateTimePicker.Inject(index.Islamic, index.MaskedDateTime);\nexport * from './index';\n"],"names":["__extends","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","this","constructor","prototype","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","OTHERMONTH","ROOT","DISABLED","OVERLAY","SELECTED","FOCUSEDDATE","CalendarBase","_super","options","element","_this","call","effect","isPopupClicked","isDateSelected","isTodayClicked","preventChange","isAngular","previousDates","render","rangeValidation","min","max","calendarEleCopy","cloneNode","calendarMode","setSeconds","Date","globalize","Internationalization","locale","isNullOrUndefined","firstDayOfWeek","setProperties","getFirstDayOfWeek","todayDisabled","todayDate","setHours","getModuleName","classList","add","enableRtl","Browser","isDevice","attributes","data-role","tabIndex","hasAttribute","getAttribute","setAttribute","calendarElement","createElement","closest","disabled","enabled","createHeader","createContent","wireEvents","getDefaultKeyConfig","defaultKeyConfigs","controlUp","controlDown","moveDown","moveUp","moveLeft","moveRight","select","home","end","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","altUpArrow","spacebar","altRightArrow","altLeftArrow","validateDate","value","checkDateValue","checkValue","currentDate","setOverlayIndex","popupWrapper","popupElement","modal","index","parseInt","style","zIndex","toString","minMaxUpdate","removeClass","addClass","ariaPrevAttrs","aria-disabled","aria-label","ariaNextAttrs","ariaTitleAttrs","aria-atomic","aria-live","headerElement","className","iconContainer","previousIcon","attrs","type","rippleEffect","duration","selector","isCenterRipple","nextIcon","headerTitleElement","appendChild","adjustLongHeaderSize","contentElement","table","role","aria-activedescendant","aria-labelledby","id","createContentHeader","createContentBody","showTodayButton","createContentFooter","getCultureValues","cldrObj","culShortNames","dayFormat","dayHeaderFormat","toLowerCase","getValue","getDefaultDateObject","getCultureObjects","cldrData","_i","_a","keys","obj","push","toCapitalize","text","toUpperCase","slice","querySelectorAll","detach","html","tableHeadElement","weekNumber","shortNames","shiftArray","days","innerHTML","start","renderYears","renderDecades","renderMonths","updateFooter","todayElement","textContent","l10","getConstant","minimum","maximum","l10nLocale","today","L10n","footer","contains","EventHandler","todayButtonClick","ref","keyConfig","moduleName","navigateTitle","extend","keyConfigs","keyboardModule","KeyboardEvents","eventName","keyAction","keyActionHandle","bind","dateWireEvents","serverModuleName","e","isCustomDate","currentView","depth","getViewNumber","navigateTo","resetCalendar","tableBodyElement","renderDayCellArgs","multiSelection","selectedDate","focusedDate","querySelector","split","view","depthValue","levelRestrict","action","keyboardNavigate","preventDefault","selectDate","contentClick","title","firstDay","lastDay","addMonths","addYears","getFullYear","focus","number","date","isMonthYearRange","addDay","isMinMaxRange","preRender","navigatePreviousHandler","navigatePrevious","navigateNextHandler","navigateNext","navigateHandler","triggerNavigate","minMaxDate","localDate","minDate","maxDate","tdEles","numCells","renderDays","islamicModule","islamicRenderDays","renderTemplate","islamicRenderTemplate","values","isTodayDate","getDate","timezone","currentMonth","getMonth","titleUpdate","getHours","getMinutes","getSeconds","getMilliseconds","getDay","setStartDate","day","weekEle","weekAnchor","numberOfDays","weekRule","finalDate","getWeek","dateFormatOptions","skeleton","parseDate","formatDate","tdEle","dayCell","dayLink","format","isDisabled","isOutOfRange","argument","renderDayCellEvent","argsDate","localDateString","tempDateString","splice","otherMnthBool","disabledCls","clickHandler","currentTarget","getDateVal","tempValue","formatOptions","calendar","innerText","copyValues","formatOptions_1","indexOf","updateFocus","otherMonth","tableElement","removeTableHeadElement","valueUtil","curDate","mon","yr","curYrs","minYr","minMonth","maxYr","maxMonth","setMonth","setDate","month","localMonth","localYr","startYr","setFullYear","endYr","startFullYr","endFullYr","startHdrYr","endHdrYr","startYear","rowIterator","year","valueOf","getUniqueID","aria-selected","collection","lastDate","timeOffset","Math","abs","getTimezoneOffset","findLastDay","isNaN","elements","count","classNm","trEle","row","children","otherMonthCell","iconHandler","islamicIconHandler","setAriaActiveDescendant","clickEventEmitter","eve","getIdValue","islamicPreviousHeader","islamicDate","getIslamicDate","toGregorian","switchView","requiredModules","modules","args","member","getPersistData","keyEntity","addOnPersist","onPropertyChanged","newProp","oldProp","prop","remove","validateValues","checkView","setLocale","undefined","skipIndex","tempValueString","minFormatOption","minString","maxFormatOption","maxString","setValueUpdate","dayFormatOptions","monthFormatOptions","setActiveDescendant","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","destroy","removeAttribute","stringVal","previous","islamicPrevious","next","islamicNext","ld","gregorianFormat","islamicFormat","ceil","time","tzOffset","getTime","tzOffsetDiff","setTime","getMaxDays","dateString","node","setDateDecade","setDateYear","checkPresentDate","tempElement","selectedElement","dates","previousValue","checkPrevious","name","trigger","navigatedEvent","navigatedArgs","event","compare","startDate","endDate","modifier","result","array","concat","column","findNextTD","rangeValue","filter","tmpDate","inValue","toUTCString","toLocaleString","timeZone","Property","Event","NotifyPropertyChanges","Component","Calendar","throwError","isMultiSelection","tempValues","limit","copyDate","previousValues","setEnable","setClass","cssClass","form","formResetHandler","setTimeZone","serverTimezoneOffset","renderComplete","enable","newCssClass","oldCssClass","replace","trim","isDayLightSaving","secondOffset","firstOffset","offsetValue","timeZoneDiff","changedArgs","generateTodayVal","setMinutes","setMilliseconds","todayButtonEvent","changeHandler","triggerChange","previousDate","previousDateTime","isMultiSelect","tempDays","islamicRenderYears","islamicRenderDecade","storeView","update","tempDate","addDate","tempDates","removeDate","setTodayDate","changeEvent","isInteracted","Number","NaN","Islamic","instance","calendarInstance","islamicTitleUpdate","islamicInValue","gregorianObject","islamicDayCell","prevMonthCompare","islamicCompareMonth","nextMonthCompare","prevYearCompare","hijriCompareYear","nextYearCompare","gregorianValue","HijriParser","prevDecadeCompare","hijriCompareDecade","nextDecadeCompare","nextIconClicked","previousIconClicked","islamicDate_1","String","fromCharCode","charCodeAt","splityear","i_1","startHeaderYear","endHeaderYear","round","rowCount","year_1","hijriStart","hijriEnd","islamicCompare","getHijriDate","containerAttr","DatePicker","isDateIconClicked","isAltKeyPressed","invalidValueString","checkPreviousValue","maskedDateValue","isIconClicked","isDynamicValueChanged","isFocused","datepickerOptions","initialize","bindEvents","Input","calculateWidth","inputElement","inputWrapper","container","buttons","getElementsByClassName","floatLabelType","updateInput","setAllowEdit","allowEdit","readonly","updateIconState","checkInvalidValue","enableMask","notify","module","createInput","updateHtmlAttributeToWrapper","placeholder","updateInputValue","previousElementValue","inputValueCopy","ariaAttrs","aria-expanded","autocomplete","autocorrect","autocapitalize","spellcheck","aria-invalid","l10n","updatedCssClassValues","isBindClearAction","bindClearAction","properties","showClearButton","INPUTWRAPPER","setWidth","width","addAttributes","isDynamic","isCalendar","disabledDates","strictMode","minMaxUpdates","dateValue","tempFormat","formatString","dateTimeFormat","errorClass","checkStringValue","val","returnDate","formatDateTime","culture","getDatePattern","valueDate","valueString","invalid","basicISOString","test","bindInputEvent","inputHandler","dateIconHandler","mouseUpHandler","inputFocusHandler","inputBlurHandler","keydownHandler","inputChangeHandler","clearButton","resetHandler","formElement","resetFormHandler","keyboardModules","inputKeyActionHandle","code","popupObj","unBindEvents","tagName","restoreValue","stopPropagation","bindClearEvent","clear","clearedArgs","popupUpdate","keyupEvent","document","createEvent","initEvent","dispatchEvent","preventEventBubbling","interopAdaptor","invokeMethodAsync","setValue","blur","hide","show","htmlAttributes","updatedClassValues","setStyle","charAt","updateHtmlAttributeToElement","updateCssClass","setCssClass","calendarKeyActionHandle","selectionStart","selectionEnd","focusArguments","model","openOnFocus","strictModeUpdate","changeTrigger","activeElement","blurArguments","calendarKeyboardModules","firstElementChild","documentHandler","parentElement","focusOut","clickedView","length_1","defaultAction","targetdate","dateOptions","toLocaleUpperCase","createCalendar","modelHeader","body","display","Popup","content","relateTo","position","X","Y","offsetY","targetType","collision","open","close","preventArgs","setAriaAttributes","targetExitViewport","setAriaDisabled","yearHeading","h2","daySpan","monthSpan","insertBefore","selectCalendar","formatUnit","match","prevent_1","outOfRange","mobilePopupWrapper","popup","cancel","appendTo","eventArgs","refreshPosition","openAnimation","Animation","prevent_2","closeEventCallback","prevent","outerHTML","focusIn","triggerEvent","removeAttributes","inputElementCopy","ensureInputAttribute","ngTag","insertAdjacentElement","validationAttribute","checkHtmlAttributes","altDownArrow","escape","enter","shiftTab","tab","nameAttribute","attribute","attr","checkFormat","skeletonString","dynamic","attributes_1","valueCopy","previousValCopy","renderDayCell","dateIdString","inputVal","aria-owns","isDisabledDate","setPlaceholder","setReadonly","setEnabled","setEnableRtl","setClearButton","removeFloating","addFloating","hour","minute","second","dayOfTheWeek","LEFTCALENDER","RIGHTCALENDER","ACTIVE","STARTDATE","ENDDATE","RANGEHOVER","CALENDAR","FOCUSDATE","DAYSPAN","DATEDISABLED","ICONDISABLED","LISTCLASS","HOVER","wrapperAttr","Presets","apply","ChildProperty","DateRangePicker","isCustomRange","isCustomWindow","presetsItem","liCollections","previousEleValue","isKeyPopup","dateDisabled","isRangeIconClicked","isMaxDaysClicked","disabledDays","preventBlur","preventFocus","dateRangeOptions","startValue","endValue","setModelValue","setDataAttribute","keyInputConfigs","defaultConstant","startLabel","endLabel","customRange","applyText","cancelText","selectedDays","isMobile","window","matchMedia","matches","angularTag","cloneElement","checkInvalidRange","rangeArray","separator","initProperty","navNextFunction","navNextMonth","navPrevFunction","navPrevMonth","deviceNavNextFunction","deviceNavNext","deviceNavPrevFunction","deviceNavPrevious","initStartDate","initEndDate","updateValue","merge","processPresets","setRangeAllowEdit","pro","firstHiddenChild","secondHiddenChild","updateClearIconState","input","updatedClassValue","dateRangeStyle","cssNewClass","cssOldClass","isUndefined","presets","label","range","activeIndex","rangeIconHandler","inputKeyboardModule","updateHiddenInput","valueType","clearRange","previousStartValue","previousEndValue","startCopy","endCopy","applyButton","removeSelection","targetElement","isPopupOpen","applyFunction","leftCalendar","calendarFocus","minDays","maxDays","createPopup","adjustLongHeaderWidth","isPreset","createPresets","listRippleEffect","renderPopup","renderControl","createControl","bindCalendarEvents","updateRange","rightCalendar","disabledDateRender","updateHeader","clearCalendarEvents","leftCalPrevIcon","leftCalNextIcon","rightCalPrevIcon","rightCalNextIcon","clearEvents","updateNavIcons","calendarIconEvent","deviceCalendarEvent","startButton","deviceHeaderClick","endButton","calendarIconRipple","leftKeyboardModule","keyInputHandler","rightKeyboardModule","bindCalendarCellEvents","removeFocusedDate","updateDeviceCalendar","deviceNavigation","deviceCalendar","getElementsByTagName","removeClassDisabled","updateMinMaxDays","selectableDates","getStartEndDate","prevStartVal","prevEndVal","refreshControl","isEnd","inputStr","isDateDisabled","keyCalendarUpdate","isLeftCalendar","ele","isRemoveFocus","leftCalCurrentDate","rightCalCurrentDate","updateCalendarElement","navInCalendar","leftLimit","rightLimit","keyNavigation","tabKeyValidation","firstCellToFocus","focusAbleEle","focusEleID","currentFirstDay","rightDateLimit","leftDateLimit","presetElement","selectRange","yearDate","cancelButton","calendarNavigation","checkMinMaxDays","presetHeight","calendarPos","rightHeader","leftHeader","isRightMonth","isLeftMonth","isRightYear","isLeftYear","isRightDecade","isLeftDecade","tdCells","tdCells_1","cell","hoverSelection","isDate","focusedDate_1","eleDate","isSameMonth","isSameYear","currentElement","tdCells_2","isDisabledCell","startDateValue","isSameStartEnd","startVal","endVal","isSame","elementCollection","elementCollection_1","tdCells_3","eleDateValue","eleDateValue_1","addSelectedAttributes","endDateValue","rangeArgs","inputValue","removeTimeValueFromDate","otherMonthSelect","isStartDate","sameDate","tdCell","y","m","firstMonth","lastMonth","endEle","endEle_1","ele_1","endEle_2","ele_2","removeSelectedAttributes","tdCells_4","tdCells_5","startMonth","startValueSelected","maxEle","tdCells_6","calendar_1","tdCells_7","disabledDayCnt","start_1","end_1","updateControl","customDate","createRangeHeader","labelContainer","endBtn","startBtn","Button","changeIcon","disableInput","validateMinMax","validateRangeStrict","validateMinMaxDays","validateRange","renderCalendar","isSameDecade","endYear","startMonthCurrentDate","selectNextMonth","selectNextYear","selectNextDecade","decyr","selectStartMonth","calendarContainer","prevIcon","prepend","leftTitle","leftContainer","rightContainer","leftNavTitle","rightTitle","rightNavTitle","getCalendarView","controlContainer","headerContainer","footerSection","cancelBtn","CANCEL","applyBtn","cancelFunction","height","getBoundingClientRect","deviceHeaderUpdate","isValueChanged","closeEventArgs","popupKeyboardModule","popupKeyActionHandle","onMouseClick","item","li","isClick","setListSelection","onMouseOver","onMouseLeave","renderCustomPopup","removeListSelection","applyPresetRange","modelValue","showPopup","openEventArgs","tabindex","listTag","ListBase","createList","aria-hidden","customElement","wireListEvents","unWireListEvents","popupWidth","offsetX","btnKeyboardModule","presetKeyboardModule","presetKeyActionHandler","popupKeyBoardHandler","popupCloseHandler","keyCode","rangeContainer","listMoveDown","setScrollPosition","listMoveUp","hvrItem","getHoverLI","actItem","getActiveLI","nextElementSibling","previousElementSibling","listHeight","hover","active","nextEle","offsetTop","liHeight","scrollTop","updatedCssClassValue","aria-placeholder","setEleWidth","formatOption","startinvalue","endinvalue","startString","endString","startObject","endObject","invalidobject","getstringvalue","toLocaleDateString","stringValue","formatOpt","basISOString","virtualRenderCellArgs","virtualRenderCellEvent","isStartDisabled","isEndDisabled","createHiddenInput","evt","navigate","isBlur","getSelectedRange","mobileRangePopupWrap","refreshChange","enableInput","clearModelvalue","class","setMinMaxDays","getStartEndValue","Collection","DAY","MONTH","YEAR","FOCUS","wrapperAttributes","TimePickerBase","createListItems","createdEl","timeFormat","step","interval","listItems","timeCollections","list","TimeMaskPlaceholder","TimePicker","disableItemCollection","timeOptions","keyConfigure","down","up","left","right","openPopupEventArgs","createInputElement","setTimeAllowEdit","validateInterval","validateDisable","getFormattedValue","checkErrorState","anchor","inputEleValue","getDateObject","clearIconState","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","defaultCulture","checkTimeFormat","checkInValue","scrollTo","checkAttributes","localeText","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","prevDate","updatedCssClassesValue","aria-autocomplete","isNullOrEmpty","inputStyle","getCldrDateTimeFormat","dateFormat","cldrFormat","isInvalid","valueExpression","valueExp","setCurrentDate","getCultureTimeObject","ariaAttribute","enableElement","rippleFn","propertyList","generateList","append","listWrapper","addSelection","getPopupHeight","popupHeight","rippleModel","containerStyle","setPopupWidth","visibility","maxHeight","createDateObj","updatedClassesValue","timeStyle","cssClassNew","cssClassOld","removeErrorClass","validateState","disableTimeIcon","disableElement","selectInputText","setSelectionRange","setCursorToEnd","getMeridianText","meridian","getCursorSelection","getActiveElement","parseFloat","setScrollTo","findScrollTop","items","initialTime","scrollTime","getText","cldrTimeFormat","cldrDateFormat","getCultureDateObject","dateToNumeric","getExactDateTime","compareFormatChange","updatePlaceHolder","popupHandler","closePopup","mouseDownHandler","curPos","cursorDetails","focusSelection","regex","RegExp","isSeparator","keyHandler","objToString","createMask","previousState","setSelection","delay","animModel","documentClickHandler","mobileTimePopupWrap","disposeServerPopup","top","checkValueChange","isNavigation","valueProcess","prevValue","currentLi","setHover","isValidLI","removeHover","navigated","scrollHandler","minVal","maxVal","dateVal","strictOperation","maxValue","minValue","inputEventHandler","clearHandler","inputEvent","timeValue","raiseClearedEvent","setZIndex","dataBind","getTextFormat","strArray","validateValue","newval","value_1","findNextElement","textVal","timeVal","collections","selectNextItem","validLiElement","elementValue","backward","elementIndex","isCheck","nextItem","isUpdate","hoveredItem","getHoverItem","setActiveClass","timeParse","listBaseOptions","itemCreated","isIE","info","getProperty","popupAlignment","timePopupElement","formatValues","setStyleAttribute","HOUR","MINUTE","SECOND","MILLISECOND","DateTimePicker","scrollInvoked","dateTimeOptions","focusHandler","blurHandler","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timeIcon","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isValidState","isDisable","renderTimeIcon","appendSpan","timeHandler","dateHandler","inputKeyAction","getCldrFormat","isDatePopupOpen","toggle","listCreation","dateObject","startTime","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","timeKeyActionHandle","unWireTimeListEvents","setDimension","setTimeHover","removeTimeHover","setInputValue","nextElement","lineHeight","getFullDateTime","tempVal","combineDateTime","minutes","seconds","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","method","hours","milliseconds","tempStartValue","tempMin","tempEndValue","tempMax","getUTCFullYear","dateTimeCloseEventCallback","maskedDateModule","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","MaskedDateTime","parent","mask","hiddenMask","validCharacters","isDayPart","isMonthPart","isYearPart","isHourPart","isMinutePart","isSecondsPart","isMilliSecondsPart","monthCharacter","periodCharacter","isHiddenMask","isComplete","formatRegex","isDeletion","isShortYear","isDeleteKey","isDateZero","isMonthZero","isYearZero","dayTypeCount","monthTypeCount","hourTypeCount","minuteTypeCount","secondTypeCount","dateformat","getCulturedFormat","maskDateValue","removeEventListener","addEventListener","isDestroyed","on","validCharacterCheck","maskInputHandler","maskKeydownHandler","off","maskPlaceholder","getCUltureMaskFormat","formatCheck","previousHiddenMask","setDynamicValue","objectString","j","validChar","altKey","ctrlKey","navigateSelection","formatText","dateAlteration","isPersist","differenceCheck","previousVal","substring","newVal","newDateValue","handleDeletion","monthString","getCulturedValue","monthValue","monthValue_1","previousMaxDate","currentMaxDate","floor","periodString","periodkeys","formatValueSpecifier","formattext","daysAbbreviated","proxy","dayKeyAbbreviated","daysWide","dayKeyWide","daysNarrow","dayKeyNarrow","monthAbbreviated","monthWide","zeroCheck","roundOff","hiddenChar","isbackward","formatIndex","valueText","isZero","resultValue","isSegment","isDecrement","incrementValue","newMonth","index.Calendar","Inject","index.Islamic","index.DatePicker","index.MaskedDateTime","index.TimePicker","index.DateTimePicker"],"mappings":"wEAAA,IAAIA,GAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HjB,GAAvHkB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOf,OAAOoB,yBAAyBP,EAAQC,GAAOC,CACrH,IAAuB,gBAAZM,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASV,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIQ,GAAIX,EAAWM,OAAS,EAAGK,GAAK,EAAGA,KAASzB,EAAIc,EAAWW,MAAIJ,GAAKH,EAAI,EAAIlB,EAAEqB,GAAKH,EAAI,EAAIlB,EAAEe,EAAQC,EAAKK,GAAKrB,EAAEe,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKnB,OAAOwB,eAAeX,EAAQC,EAAKK,GAAIA,GAW5DM,EAAa,gBAEbC,EAAO,aAcPC,EAAW,aACXC,EAAU,YAGVC,EAAW,aACXC,EAAc,iBAoBdC,EAA8B,SAAUC,GAUxC,QAASD,GAAaE,EAASC,GAC3B,GAAIC,GAAQH,EAAOI,KAAK7B,KAAM0B,EAASC,IAAY3B,IAQnD,OAPA4B,GAAME,OAAS,GACfF,EAAMG,gBAAiB,EACvBH,EAAMI,gBAAiB,EACvBJ,EAAMK,gBAAiB,EACvBL,EAAMM,eAAgB,EACtBN,EAAMO,WAAY,EAClBP,EAAMQ,eAAgB,EACfR,EAg6DX,MAl7DAvC,GAAUmC,EAAcC,GA0BxBD,EAAatB,UAAUmC,OAAS,WAC5BrC,KAAKsC,gBAAgBtC,KAAKuC,IAAKvC,KAAKwC,KACpCxC,KAAKyC,gBAAkBzC,KAAK2B,QAAQe,WAAU,GACpB,YAAtB1C,KAAK2C,gBACC3C,KAAKuC,IAAIK,WAAW,KAAS,GAAIC,MAAK,KAAM,EAAG,EAAG,EAAG,EAAG,KAC1D7C,KAAKuC,IAAM,GAAIM,MAAK,KAAM,EAAG,MAE5B7C,KAAKwC,MAAS,GAAIK,MAAK,KAAM,GAAI,MAClC7C,KAAKwC,IAAM,GAAIK,MAAK,KAAM,GAAI,MAGtC7C,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,SAC3CC,oBAAkBjD,KAAKkD,iBAAmBlD,KAAKkD,eAAiB,GAAKlD,KAAKkD,eAAiB,IAC3FlD,KAAKmD,eAAgBD,eAAgBlD,KAAK8C,UAAUM,sBAAuB,GAE/EpD,KAAKqD,eAAgB,EACrBrD,KAAKsD,UAAY,GAAIT,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,IAC1B,aAAzBvD,KAAKwD,iBACLxD,KAAK2B,QAAQ8B,UAAUC,IAAIvC,GACvBnB,KAAK2D,WACL3D,KAAK2B,QAAQ8B,UAAUC,IAnF7B,SAqFME,UAAQC,UACR7D,KAAK2B,QAAQ8B,UAAUC,IAxF1B,YA0FDI,aAAW9D,KAAK2B,SACZoC,YAAa,aAEjB/D,KAAKgE,SAAWhE,KAAK2B,QAAQsC,aAAa,YAAcjE,KAAK2B,QAAQuC,aAAa,YAAc,IAChGlE,KAAK2B,QAAQwC,aAAa,WAAYnE,KAAKgE,YAG3ChE,KAAKoE,gBAAkBpE,KAAKqE,cAAc,OAC1CrE,KAAKoE,gBAAgBX,UAAUC,IAAIvC,GAC/BnB,KAAK2D,WACL3D,KAAKoE,gBAAgBX,UAAUC,IAlGrC,SAoGME,UAAQC,UACR7D,KAAKoE,gBAAgBX,UAAUC,IAvGlC,YAyGDI,aAAW9D,KAAKoE,iBACZL,YAAa,eAGhBd,oBAAkBqB,UAAQtE,KAAK2B,QAAS,cAAgB2C,UAAQtE,KAAK2B,QAAS,YAAY4C,WAC3FvE,KAAKwE,SAAU,GAEnBxE,KAAKyE,eACLzE,KAAK0E,gBACL1E,KAAK2E,cAETnD,EAAatB,UAAUoC,gBAAkB,SAAUC,EAAKC,GAChDS,oBAAkBV,IAClBvC,KAAKmD,eAAgBZ,IAAK,GAAIM,MAAK,KAAM,EAAG,KAAM,GAElDI,oBAAkBT,IAClBxC,KAAKmD,eAAgBX,IAAK,GAAIK,MAAK,KAAM,GAAI,MAAO,IAG5DrB,EAAatB,UAAU0E,oBAAsB,WAsBzC,MArBA5E,MAAK6E,mBACDC,UAAW,UACXC,YAAa,UACbC,SAAU,YACVC,OAAQ,UACRC,SAAU,YACVC,UAAW,aACXC,OAAQ,QACRC,KAAM,OACNC,IAAK,MACLC,OAAQ,SACRC,SAAU,WACVC,YAAa,eACbC,cAAe,iBACfC,YAAa,YACbC,WAAY,WACZC,WAAY,cACZC,SAAU,QACVC,cAAe,iBACfC,aAAc,iBAEXhG,KAAK6E,mBAEhBrD,EAAatB,UAAU+F,aAAe,SAAUC,GAC5ClG,KAAKmD,eAAgBZ,IAAKvC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAKuC,SAAU,GACtFvC,KAAKmD,eAAgBX,IAAKxC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAKwC,SAAU,GACtFxC,KAAKqG,YAAcrG,KAAKqG,YAAcrG,KAAKqG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,KAC1FN,oBAAkBiD,IAAUlG,KAAKuC,KAAOvC,KAAKwC,KAAO0D,GAASlG,KAAKuC,KAAO2D,GAASlG,KAAKwC,MACxFxC,KAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWF,MAGpD1E,EAAatB,UAAUoG,gBAAkB,SAAUC,EAAcC,EAAcC,EAAO5C,GAClF,GAAIA,IAAaZ,oBAAkBuD,KAAkBvD,oBAAkBwD,KAAWxD,oBAAkBsD,GAAe,CAC/G,GAAIG,GAAQC,SAASH,EAAaI,MAAMC,OAAQ,IAAMF,SAASH,EAAaI,MAAMC,OAAQ,IAAM,GAChGJ,GAAMG,MAAMC,QAAUH,EAAQ,GAAGI,WACjCP,EAAaK,MAAMC,OAASH,EAAMI,aAG1CtF,EAAatB,UAAU6G,aAAe,SAAUb,IACrClG,KAAKuC,MAAQvC,KAAKwC,IAKrBwE,eAAahH,KAAK2B,SAAUN,IAJ5BrB,KAAKmD,eAAgBZ,IAAKvC,KAAKuC,MAAO,GACtC0E,YAAUjH,KAAK2B,SAAUN,IAK7BrB,KAAKuC,IAAMU,oBAAkBjD,KAAKuC,QAAWvC,KAAKuC,IAAOvC,KAAKuC,IAAM,GAAIM,MAAK,KAAM,EAAG,GAAK7C,KAAKuC,IAChGvC,KAAKwC,IAAMS,oBAAkBjD,KAAKwC,QAAWxC,KAAKwC,IAAOxC,KAAKwC,IAAM,GAAIK,MAAK,KAAM,GAAI,IAAM7C,KAAKwC,KAC7FxC,KAAKuC,MAAQvC,KAAKwC,KAAO0D,IAAUA,IAAUlG,KAAKwC,MAAQ0D,IAAUlG,KAAKuC,IAC1EvC,KAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWF,KAGvClG,KAAKuC,MAAQvC,KAAKwC,MAAQ0D,IAAUlG,KAAKqG,aAAerG,KAAKwC,IAC9DxC,KAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWpG,KAAKwC,OAG5CxC,KAAKqG,aAAerG,KAAKuC,MAC1BvC,KAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWpG,KAAKuC,QAKjEf,EAAatB,UAAUuE,aAAe,WAClC,GAAIyC,IACAC,gBAAiB,QACjBC,aAAc,kBAEdC,GACAF,gBAAiB,QACjBC,aAAc,cAEdE,GACAC,cAAe,OAAQC,YAAa,YAAaJ,aAAc,QAEnEpH,MAAKyH,cAAgBzH,KAAKqE,cAAc,OAASqD,UAtM5C,YAuML,IAAIC,GAAgB3H,KAAKqE,cAAc,OAASqD,UA5LpC,oBA6LZ1H,MAAK4H,aAAe5H,KAAKqE,cAAc,UAAYqD,UAjM5C,SAiMsEG,OAASC,KAAM,YAC5FC,eAAa/H,KAAK4H,cACdI,SAAU,IACVC,SAAU,UACVC,gBAAgB,IAEpBpE,aAAW9D,KAAK4H,aAAcV,GAC9BlH,KAAKmI,SAAWnI,KAAKqE,cAAc,UAAYqD,UAvMxC,SAuMkEG,OAASC,KAAM,YACxFC,eAAa/H,KAAKmI,UACdF,SAAU,UACVD,SAAU,IACVE,gBAAgB,IAES,oBAAzBlI,KAAKwD,kBACLM,aAAW9D,KAAK4H,cAAgB5D,SAAU,OAC1CF,aAAW9D,KAAKmI,UAAYnE,SAAU,QAE1CF,aAAW9D,KAAKmI,SAAUd,GAC1BrH,KAAKoI,mBAAqBpI,KAAKqE,cAAc,OAASqD,UAAW,kBACjE5D,aAAW9D,KAAKoI,mBAAoBd,GACpCtH,KAAKyH,cAAcY,YAAYrI,KAAKoI,oBACpCpI,KAAK4H,aAAaS,YAAYrI,KAAKqE,cAAc,QAAUqD,UAAW,8BACtE1H,KAAKmI,SAASE,YAAYrI,KAAKqE,cAAc,QAAUqD,UAAW,+BAClEC,EAAcU,YAAYrI,KAAK4H,cAC/BD,EAAcU,YAAYrI,KAAKmI,UAC/BnI,KAAKyH,cAAcY,YAAYV,GACF,aAAzB3H,KAAKwD,gBACLxD,KAAK2B,QAAQ0G,YAAYrI,KAAKyH,eAG9BzH,KAAKoE,gBAAgBiE,YAAYrI,KAAKyH,eAE1CzH,KAAKsI,wBAET9G,EAAatB,UAAUwE,cAAgB,WACnC1E,KAAKuI,eAAiBvI,KAAKqE,cAAc,OAASqD,UAzO5C,cA0ON1H,KAAKwI,MAAQxI,KAAKqE,cAAc,SAAWwD,OAAS7D,SAAU,IAAKyE,KAAQ,OAAQC,wBAAyB,GAAIC,kBAAmB3I,KAAK2B,QAAQiH,MACnH,aAAzB5I,KAAKwD,gBACLxD,KAAK2B,QAAQ0G,YAAYrI,KAAKuI,gBAG9BvI,KAAKoE,gBAAgBiE,YAAYrI,KAAKuI,gBAE1CvI,KAAKuI,eAAeF,YAAYrI,KAAKwI,OACrCxI,KAAK6I,sBACL7I,KAAK8I,oBACD9I,KAAK+I,iBACL/I,KAAKgJ,uBAGbxH,EAAatB,UAAU+I,iBAAmB,WACtC,GACIC,GADAC,KAEAC,EAAY,oBAAsBpJ,KAAKqJ,gBAAgBC,aAO3D,IALIJ,EADgB,OAAhBlJ,KAAKgD,QAAmC,UAAhBhD,KAAKgD,OAClBuG,WAASH,EAAWI,0BAGpBxJ,KAAKyJ,kBAAkBC,WAAU,GAAK1J,KAAKgD,SAErDC,oBAAkBiG,GACnB,IAAK,GAAIS,GAAK,EAAGC,EAAKnK,OAAOoK,KAAKX,GAAUS,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC9D,GAAIG,GAAMF,EAAGD,EACbR,GAAcY,KAAKR,WAASO,EAAKZ,IAGzC,MAAOC,IAEX3H,EAAatB,UAAU8J,aAAe,SAAUC,GAC5C,OAAQhH,oBAAkBgH,IAASA,EAAKtJ,OAASsJ,EAAK,GAAGC,cAAgBD,EAAKE,MAAM,GAAKF,GAE7FzI,EAAatB,UAAU2I,oBAAsB,WACZ,aAAzB7I,KAAKwD,gBACAP,oBAAkBjD,KAAK2B,QAAQyI,iBAAiB,6BAA6B,KAC9EC,SAAOrK,KAAK2B,QAAQyI,iBAAiB,6BAA6B,IAIjEnH,oBAAkBjD,KAAKoE,gBAAgBgG,iBAAiB,6BAA6B,KACtFC,SAAOrK,KAAKoE,gBAAgBgG,iBAAiB,6BAA6B,GAGlF,IACIE,GAAO,IACPtK,KAAKkD,eAAiB,GAAKlD,KAAKkD,eAAiB,IACjDlD,KAAKmD,eAAgBD,eAAgB,IAAK,GAE9ClD,KAAKuK,iBAAmBvK,KAAKqE,cAAc,SAAWqD,UAxQ7C,kBAyQL1H,KAAKwK,aACLF,GAAQ,kCACqB,aAAzBtK,KAAKwD,gBACLyD,YAAUjH,KAAK2B,SApRd,iBAuRDsF,YAAUjH,KAAKoE,iBAvRd,iBA2RT,IAAIqG,GAAazK,KAAKiJ,mBAAmBtI,OAAS,GAAKX,KAAKiJ,mBAAqBjJ,KAAK0K,WAAa1K,KAAKiJ,mBAAmBtI,OAAS,GAAKX,KAAKiJ,mBAAsBjJ,KAAKkD,gBAAkB,IAC3L,KAAKD,oBAAkBwH,GACnB,IAAK,GAAIE,GAAO,EAAGA,GAlBP,EAkB0BA,IAClCL,GAAQ,iBAAmBtK,KAAKgK,aAAaS,EAAWE,IAAS,OAGzEL,GAAO,OAASA,EAAO,QACvBtK,KAAKuK,iBAAiBK,UAAYN,EAClCtK,KAAKwI,MAAMH,YAAYrI,KAAKuK,mBAEhC/I,EAAatB,UAAU4I,kBAAoB,WAWvC,OAV6B,aAAzB9I,KAAKwD,gBACAP,oBAAkBjD,KAAK2B,QAAQyI,iBAAiB,oBAAoB,KACrEC,SAAOrK,KAAK2B,QAAQyI,iBAAiB,oBAAoB,IAIxDnH,oBAAkBjD,KAAKoE,gBAAgBgG,iBAAiB,oBAAoB,KAC7EC,SAAOrK,KAAKoE,gBAAgBgG,iBAAiB,oBAAoB,IAGjEpK,KAAK6K,OACT,IAAK,OACD7K,KAAK8K,aACL,MACJ,KAAK,SACD9K,KAAK+K,eACL,MACJ,SACI/K,KAAKgL,iBAGjBxJ,EAAatB,UAAU+K,aAAe,WAClCjL,KAAKkL,aAAaC,YAAcnL,KAAKoL,IAAIC,YAAY,SACrDrL,KAAKkL,aAAa/G,aAAa,aAAcnE,KAAKoL,IAAIC,YAAY,WAEtE7J,EAAatB,UAAU8I,oBAAsB,WACzC,GAAIhJ,KAAK+I,gBAAiB,CACtB,GAAIuC,GAAU,GAAIzI,OAAM7C,KAAKuC,KACzBgJ,EAAU,GAAI1I,OAAM7C,KAAKwC,KACzBgJ,GAAeC,MAAO,QAC1BzL,MAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAC/ChD,KAAKoL,IAAM,GAAIM,QAAK1L,KAAKwD,gBAAiBgI,EAAYxL,KAAKgD,QAC3DhD,KAAKkL,aAAelL,KAAKqE,cAAc,UAAYwD,OAASY,KAAM,YAClEV,eAAa/H,KAAKkL,cAClBlL,KAAKiL,eACLhE,YAAUjH,KAAKkL,eA9TjB,QAPE,UAQD,SAEG,YADJ,WA6TU,GAAIrI,MAAKyI,EAAQ/H,SAAS,EAAG,EAAG,EAAG,MAAQvD,KAAKsD,YACnDtD,KAAKsD,YAAc,GAAIT,MAAK0I,EAAQhI,SAAS,EAAG,EAAG,EAAG,MAAUvD,KAAmB,eACpFiH,YAAUjH,KAAKkL,cAAe9J,GAElCpB,KAAK2L,OAAS3L,KAAKqE,cAAc,OAASqD,UApUzC,uBAqUD1H,KAAK2L,OAAOtD,YAAYrI,KAAKkL,cACA,aAAzBlL,KAAKwD,iBACLxD,KAAK2B,QAAQ0G,YAAYrI,KAAK2L,QAEL,eAAzB3L,KAAKwD,iBACLxD,KAAKoE,gBAAgBiE,YAAYrI,KAAK2L,QAEb,mBAAzB3L,KAAKwD,iBACLxD,KAAKoE,gBAAgBiE,YAAYrI,KAAK2L,QAErC3L,KAAKkL,aAAazH,UAAUmI,SAASxK,IACtCyK,eAAanI,IAAI1D,KAAKkL,aAAc,QAASlL,KAAK8L,iBAAkB9L,QAIhFwB,EAAatB,UAAUyE,WAAa,SAAUiE,EAAImD,EAAKC,EAAWC,GAC9DJ,eAAanI,IAAI1D,KAAKoI,mBAAoB,QAASpI,KAAKkM,cAAelM,MACvEA,KAAK6E,kBAAoBsH,SAAOnM,KAAK6E,kBAAmB7E,KAAKoM,YAChC,aAAzBpM,KAAKwD,gBACLxD,KAAKqM,eAAiB,GAAIC,kBAAetM,KAAK2B,SAC1C4K,UAAW,UACXC,UAAWxM,KAAKyM,gBAAgBC,KAAK1M,MACrCoM,WAAYpM,KAAK6E,oBAIrB7E,KAAKqM,eAAiB,GAAIC,kBAAetM,KAAKoE,iBAC1CmI,UAAW,UACXC,UAAWxM,KAAKyM,gBAAgBC,KAAK1M,MACrCoM,WAAYpM,KAAK6E,qBAI7BrD,EAAatB,UAAUyM,eAAiB,SAAU/D,EAAImD,EAAKC,EAAWC,GAClEjM,KAAK6E,kBAAoB7E,KAAK4E,sBAC9B5E,KAAK6E,kBAAoBsH,SAAOnM,KAAK6E,kBAAmBmH,GACxDhM,KAAK4M,iBAAmBX,GAE5BzK,EAAatB,UAAU4L,iBAAmB,SAAUe,EAAG3G,EAAO4G,GACtD9M,KAAK+I,kBACD/I,KAAK+M,gBAAkB/M,KAAKgN,MAC5BhN,KAAK8B,OAAS,GAGd9B,KAAK8B,OAAS,WAEd9B,KAAKiN,cAAcjN,KAAK6K,QAAU7K,KAAKiN,cAAcjN,KAAKgN,OAC1DhN,KAAKkN,WAAWlN,KAAKgN,MAAO,GAAInK,MAAK7C,KAAKoG,WAAWF,IAAS4G,GAG9D9M,KAAKkN,WAAW,QAAS,GAAIrK,MAAK7C,KAAKoG,WAAWF,IAAS4G,KAIvEtL,EAAatB,UAAUiN,cAAgB,WACnCnN,KAAKoE,iBAAmBiG,SAAOrK,KAAKoE,iBACpCpE,KAAKoN,kBAAoB/C,SAAOrK,KAAKoN,kBACrCpN,KAAKwI,OAAS6B,SAAOrK,KAAKwI,OAC1BxI,KAAKuK,kBAAoBF,SAAOrK,KAAKuK,kBACrCvK,KAAKmI,UAAYkC,SAAOrK,KAAKmI,UAC7BnI,KAAK4H,cAAgByC,SAAOrK,KAAK4H,cACjC5H,KAAK2L,QAAUtB,SAAOrK,KAAK2L,QAC3B3L,KAAKkL,aAAe,KACpBlL,KAAKqN,kBAAoB,KACzBrN,KAAKoE,gBAAkBpE,KAAKoN,iBAAmBpN,KAAK2L,OAAS3L,KAAKuK,iBAC9DvK,KAAKmI,SAAWnI,KAAK4H,aAAe5H,KAAKwI,MAAQ,MAEzDhH,EAAatB,UAAUuM,gBAAkB,SAAUI,EAAG3G,EAAOoH,GACzD,GACIC,GADAC,EAAcxN,KAAKoN,iBAAiBK,cAAc,uBAO9CF,GALJD,EACKrK,oBAAkBuK,KAAiBtH,IAAUS,SAAS6G,EAAYtJ,aAAa,MAAMwJ,MAAM,KAAK,GAAI,IAItF1N,KAAKoN,iBAAiBK,cAAc,oBAHpCD,EAOJxN,KAAKoN,iBAAiBK,cAAc,mBAEvD,IAAIE,GAAO3N,KAAKiN,cAAcjN,KAAK+M,eAC/Ba,EAAa5N,KAAKiN,cAAcjN,KAAKgN,OACrCa,EAAiBF,IAASC,GAAc5N,KAAKiN,cAAcjN,KAAK6K,QAAU+C,CAE9E,QADA5N,KAAK8B,OAAS,GACN+K,EAAEiB,QACN,IAAK,WACD9N,KAAK+N,kBAAkB,EAAGJ,EAAMd,EAAG7M,KAAKwC,IAAKxC,KAAKuC,KAClDsK,EAAEmB,gBACF,MACJ,KAAK,YACDhO,KAAK+N,iBAAiB,EAAGJ,EAAMd,EAAG7M,KAAKwC,IAAKxC,KAAKuC,KACjDsK,EAAEmB,gBACF,MACJ,KAAK,SACY,IAATL,EACA3N,KAAK+N,kBAAkB,EAAGJ,EAAMd,EAAG7M,KAAKwC,IAAKxC,KAAKuC,KAGlDvC,KAAK+N,kBAAkB,EAAGJ,EAAMd,EAAG7M,KAAKwC,IAAKxC,KAAKuC,KAEtDsK,EAAEmB,gBACF,MACJ,KAAK,WACY,IAATL,EACA3N,KAAK+N,iBAAiB,EAAGJ,EAAMd,EAAG7M,KAAKwC,IAAKxC,KAAKuC,KAGjDvC,KAAK+N,iBAAiB,EAAGJ,EAAMd,EAAG7M,KAAKwC,IAAKxC,KAAKuC,KAErDsK,EAAEmB,gBACF,MACJ,KAAK,SACD,GAAInB,EAAEvM,SAAWN,KAAKkL,aAClBlL,KAAK8L,iBAAiBe,EAAG3G,OAExB,CACD,GAAIvE,GAAWsB,oBAAkBuK,GAA6BD,EAAdC,CAChD,KAAKvK,oBAAkBtB,KAAaA,EAAQ8B,UAAUmI,SAASxK,GAC3D,GAAIyM,EAAe,CAEf,GAAItO,GAAI,GAAIsD,MAAK8D,SAAS,GAAK,EAAUiC,GAAI,GAC7C5I,MAAKiO,WAAWpB,EAAGtN,SAGnBS,MAAKkO,aAAa,OAAQP,IAAiBzH,GAIvD,KACJ,KAAK,YACDlG,KAAKmO,QACLtB,EAAEmB,gBACF,MACJ,KAAK,eACI/K,oBAAkBuK,IAAiBK,KAAkB5K,oBAAkBsK,IAAkBM,IAC1F7N,KAAKkO,aAAa,OAAQP,EAAOH,GAAeD,EAAerH,GAEnE2G,EAAEmB,gBACF,MACJ,KAAK,OACDhO,KAAKqG,YAAcrG,KAAKoO,SAASpO,KAAKqG,aACtCgE,SAAOrK,KAAKoN,kBACC,IAATO,EACA3N,KAAKgL,aAAa6B,GAEJ,IAATc,EACL3N,KAAK8K,YAAY+B,GAGjB7M,KAAK+K,cAAc8B,GAEvBA,EAAEmB,gBACF,MACJ,KAAK,MACDhO,KAAKqG,YAAcrG,KAAKqO,QAAQrO,KAAKqG,YAAasH,GAClDtD,SAAOrK,KAAKoN,kBACC,IAATO,EACA3N,KAAKgL,aAAa6B,GAEJ,IAATc,EACL3N,KAAK8K,YAAY+B,GAGjB7M,KAAK+K,cAAc8B,GAEvBA,EAAEmB,gBACF,MACJ,KAAK,SACDhO,KAAKsO,UAAUtO,KAAKqG,aAAc,GAClCrG,KAAKkN,WAAW,QAASlN,KAAKqG,aAC9BwG,EAAEmB,gBACF,MACJ,KAAK,WACDhO,KAAKsO,UAAUtO,KAAKqG,YAAa,GACjCrG,KAAKkN,WAAW,QAASlN,KAAKqG,aAC9BwG,EAAEmB,gBACF,MACJ,KAAK,cACDhO,KAAKuO,SAASvO,KAAKqG,aAAc,GACjCrG,KAAKkN,WAAW,QAASlN,KAAKqG,aAC9BwG,EAAEmB,gBACF,MACJ,KAAK,gBACDhO,KAAKuO,SAASvO,KAAKqG,YAAa,GAChCrG,KAAKkN,WAAW,QAASlN,KAAKqG,aAC9BwG,EAAEmB,gBACF,MACJ,KAAK,cACDhO,KAAKkN,WAAW,QAAS,GAAIrK,MAAK7C,KAAKqG,YAAYmI,cAAe,EAAG,IACrE3B,EAAEmB,gBACF,MACJ,KAAK,aACDhO,KAAKkN,WAAW,QAAS,GAAIrK,MAAK7C,KAAKqG,YAAYmI,cAAe,GAAI,KACtE3B,EAAEmB,iBAGmB,aAAzBhO,KAAKwD,iBACLxD,KAAKwI,MAAMiG,SAGnBjN,EAAatB,UAAU6N,iBAAmB,SAAUW,EAAQ3B,EAAaF,EAAGrK,EAAKD,GAC7E,GAAIoM,GAAO,GAAI9L,MAAK7C,KAAKoG,WAAWpG,KAAKqG,aACzC,QAAQ0G,GACJ,IAAK,GACD/M,KAAKuO,SAASvO,KAAKqG,YAAaqI,GAC5B1O,KAAK4O,iBAAiB5O,KAAKqG,cAC3BgE,SAAOrK,KAAKoN,kBACZpN,KAAK+K,cAAc8B,IAGnB7M,KAAKqG,YAAcsI,CAEvB,MACJ,KAAK,GACD3O,KAAKsO,UAAUtO,KAAKqG,YAAaqI,GAC7B1O,KAAK2C,aACD3C,KAAK4O,iBAAiB5O,KAAKqG,cAC3BgE,SAAOrK,KAAKoN,kBACZpN,KAAK8K,YAAY+B,IAGjB7M,KAAKqG,YAAcsI,CAY3B,MACJ,KAAK,GACD3O,KAAK6O,OAAO7O,KAAKqG,YAAaqI,EAAQ7B,EAAGrK,EAAKD,GAC1CvC,KAAK8O,cAAc9O,KAAKqG,cACxBgE,SAAOrK,KAAKoN,kBACZpN,KAAKgL,aAAa6B,IAGlB7M,KAAKqG,YAAcsI,IAanCnN,EAAatB,UAAU6O,UAAY,SAAU7I,GACzC,GAAItE,GAAQ5B,IACZA,MAAKgP,wBAA0BhP,KAAKiP,iBAAiBvC,KAAK1M,MAC1DA,KAAKkP,oBAAsBlP,KAAKmP,aAAazC,KAAK1M,MAClDA,KAAK6E,kBAAoB7E,KAAK4E,sBAC9B5E,KAAKoP,gBAAkB,SAAUvC,GAC7BjL,EAAMyN,gBAAgBxC,KAG9BrL,EAAatB,UAAUoP,WAAa,SAAUC,GAC1C,GAAIlJ,GAAc,GAAIxD,MAAK,GAAIA,OAAM0M,GAAWhM,SAAS,EAAG,EAAG,EAAG,IAC9DiM,EAAU,GAAI3M,MAAK,GAAIA,OAAM7C,KAAKuC,KAAKgB,SAAS,EAAG,EAAG,EAAG,IACzDkM,EAAU,GAAI5M,MAAK,GAAIA,OAAM7C,KAAKwC,KAAKe,SAAS,EAAG,EAAG,EAAG,GAS7D,QARK8C,IAAiBmJ,IAAYnJ,IAAiBoJ,KAC1CF,GAAavP,KAAKuC,MACnBgN,EAAY,GAAI1M,OAAM7C,KAAKuC,OAE1BgN,GAAavP,KAAKwC,MACnB+M,EAAY,GAAI1M,OAAM7C,KAAKwC,OAG5B+M,GAEX/N,EAAatB,UAAU8K,aAAe,SAAU6B,EAAG3G,EAAO4G,GACtD,GACI4C,GADAC,EAAW3P,KAAKwK,WAAa,EAAI,CAGjCkF,GADsB,cAAtB1P,KAAK2C,aACI3C,KAAK4P,WAAW5P,KAAKqG,YAAaH,EAAO,KAAM,KAAM4G,EAAcD,GAGnE7M,KAAK6P,cAAcC,kBAAkB9P,KAAKqG,YAAaH,GAEpElG,KAAK6I,sBACqB,cAAtB7I,KAAK2C,aACL3C,KAAK+P,eAAeL,EAAQC,EA3nB5B,UA2nB6C9C,EAAG3G,GAGhDlG,KAAK6P,cAAcG,sBAAsBN,EAAQC,EA9nBjD,UA8nBkE9C,EAAG3G,IAG7E1E,EAAatB,UAAU0P,WAAa,SAAUvJ,EAAaH,EAAOoH,EAAgB2C,EAAQC,EAAarD,GACnG,GAIIyC,GAJAI,KAEApM,EAAY4M,EAAc,GAAIrN,OAAMwD,GAAerG,KAAKmQ,QAAQ,GAAItN,MAAQ7C,KAAKoQ,UACjFb,EAAY,GAAI1M,MAAK7C,KAAKoG,WAAWC,IAErCgK,EAAed,EAAUe,UAC7BtQ,MAAKuQ,YAAYlK,EAAa,OAC9B,IAAI9G,GAAIgQ,CAER,KADAA,EAAY,GAAI1M,MAAKtD,EAAEiP,cAAejP,EAAE+Q,WAAY,EAAG/Q,EAAEiR,WAAYjR,EAAEkR,aAAclR,EAAEmR,aAAcnR,EAAEoR,mBAChGpB,EAAUqB,WAAa5Q,KAAKkD,gBAC/BlD,KAAK6Q,aAAatB,GAAW,MAEjC,KAAK,GAAIuB,GAAM,EAAGA,EAXD,KAWqBA,EAAK,CACvC,GAAIC,GAAU/Q,KAAKqE,cAAc,MAAQqD,UA7nB1C,WA8nBKsJ,EAAahR,KAAKqE,cAAc,OACpC,IAAIyM,EAAM,GAAM,GAAK9Q,KAAKwK,WAAY,CAElC,GAAIyG,GAAiC,aAAlBjR,KAAKkR,SAA0B,EAAuB,qBAAlBlR,KAAKkR,SAAkC,EAAI,EAC9FC,EAAY,GAAItO,MAAK0M,EAAUf,cAAee,EAAUe,WAAaf,EAAUY,UAAYc,EAC/FD,GAAW7F,YAAc,GAAKnL,KAAKoR,QAAQD,GAC3CJ,EAAQ1I,YAAY2I,GACpB/J,YAAU8J,GA5oBT,iBA6oBDrB,EAAO3F,KAAKgH,GAEhBzB,EAAa,GAAIzM,OAAM0M,GACvBA,EAAYvP,KAAKsP,WAAWC,EAC5B,IAAI8B,IAAsBvJ,KAAM,WAAYwJ,SAAU,QAClD3C,EAAO3O,KAAK8C,UAAUyO,UAAUvR,KAAK8C,UAAU0O,WAAWjC,EAAW8B,GAAoBA,GACzFI,EAAQzR,KAAK0R,QAAQnC,GACrBpB,EAAQnO,KAAK8C,UAAU0O,WAAWjC,GAAazH,KAAM,OAAQwJ,SAAU,SACvEK,EAAU3R,KAAKqE,cAAc,OACjCsN,GAAQxG,YAAcnL,KAAK8C,UAAU0O,WAAWjC,GAAaqC,OAAQ,IAAK9J,KAAM,OAAQwJ,SAAU,OAClG,IAAI/M,GAAYvE,KAAKuC,IAAMgN,GAAevP,KAAKwC,IAAM+M,CACjDhL,IACA0C,YAAUwK,GAAQrQ,GAClB6F,YAAUwK,GAAQpQ,IAGlBsQ,EAAQxN,aAAa,QAAS,GAAKgK,GAEnCkC,IAAiBd,EAAUe,YAC3BrJ,YAAUwK,GAAQvQ,GAEK,IAAvBqO,EAAUqB,UAAyC,IAAvBrB,EAAUqB,UACtC3J,YAAUwK,GApqBZ,aAsqBFA,EAAMpJ,YAAYsJ,GAClB3R,KAAKqN,mBACDsB,KAAMY,EACNsC,YAAY,EACZlQ,QAAS8P,EACTK,aAAcvN,EAElB,IAAIwN,GAAW/R,KAAKqN,iBAEpB,IADArN,KAAKgS,mBAAmBD,GACpBA,EAASF,WAAY,CACrB,GAAI5D,GAAa,GAAIpL,MAAK7C,KAAKoG,WAAWF,IACtC+L,EAAW,GAAIpP,MAAK7C,KAAKoG,WAAW2L,EAASpD,MACjD,IAAIrB,GACA,IAAKrK,oBAAkBgN,IAAWA,EAAOtP,OAAS,EAC9C,IAAS+F,EAAQ,EAAGA,EAAQuJ,EAAOtP,OAAQ+F,KACnCwL,GAAmB,GAAIrP,MAAK7C,KAAK8C,UAAU0O,WAAWO,EAASpD,MAAQ7G,KAAM,OAAQwJ,SAAU,aAC/Fa,GAAkB,GAAItP,MAAK7C,KAAK8C,UAAU0O,WAAWvB,EAAOvJ,IAAUoB,KAAM,OAAQwJ,SAAU,YAE9FrB,EAAOmC,OAAO1L,EAAO,GACrBA,GAAS,OAKhBuH,KAAeA,IAAgBgE,GACpCjS,KAAKmD,eAAgB+C,MAAO,OAAQ,GAGxClG,KAAKqN,kBAAkBwE,aAAeJ,EAAMhO,UAAUmI,SAAStK,KAC/D2F,YAAUwK,GAAQrQ,GAClB6F,YAAUwK,GAAQpQ,IACbrB,KAAKqN,kBAAkBsB,OAAU3O,KAAKsD,YACvCtD,KAAKqD,eAAgB,GAG7B,IAAIgP,GAAgBZ,EAAMhO,UAAUmI,SAAS1K,GACzCoR,EAAcb,EAAMhO,UAAUmI,SAASxK,EACtCkR,IACDzG,eAAanI,IAAI+N,EAAO,QAASzR,KAAKuS,aAAcvS,KAOxD,IAAIwS,OAAgB,EAIpB,IAHKvP,oBAAkB4J,IAAiB,UAAXA,EAAE/E,OAC3B0K,EAAgB3F,EAAE2F,gBAElBlF,GAAmBrK,oBAAkBgN,IAAYqC,GAoC3CA,GAAetS,KAAKyS,WAAWlD,EAAWrJ,IAChDe,YAAUwK,GAAQnQ,OArC4C,CAC9D,IAAK,GAAIoR,GAAY,EAAGA,EAAYzC,EAAOtP,OAAQ+R,IAAa,CAC5D,GACIC,IAAkBf,OAAQ,KAAM9J,KAAM,OAAQwJ,SAAU,QAASsB,SADnC,cAAtB5S,KAAK2C,aAAgC,YAAc,WAE3DuP,EAAkBlS,KAAK8C,UAAU0O,WAAWjC,EAAWoD,GACvDR,EAAiBnS,KAAK8C,UAAU0O,WAAWvB,EAAOyC,GAAYC,EAKlE,KAJKT,IAAoBC,GAAkBnS,KAAKyS,WAAWlD,EAAWU,EAAOyC,KACrE1S,KAAKyS,WAAWlD,EAAWrJ,KAC/Be,YAAUwK,GAAQnQ,IAEjB2B,oBAAkBuP,IAAkBA,EAAcK,YAAcpB,EAAMoB,WACvE7S,KAAKoC,eAAiBqP,EAAMhO,UAAUmI,SAAStK,IAAakR,EAAc/O,UAAUmI,SAAStK,GAAW,CACxG0F,eAAayK,GAAQnQ,GACrBtB,KAAKoC,eAAgB,CAErB,KAAK,GADD0Q,GAAa9S,KAAK8S,WAAW7C,GACxBjP,EAAI,EAAGA,EAAI8R,EAAWnS,OAAQK,IAAK,CACxC,GACI+R,IAAoBnB,OAAQ,KAAM9J,KAAM,OAAQwJ,SAAU,QAASsB,SADnC,cAAtB5S,KAAK2C,aAAgC,YAAc,UAIjE,IAFwB3C,KAAK8C,UAAU0O,WAAW7C,EAAMoE,KACjC/S,KAAK8C,UAAU0O,WAAWsB,EAAW9R,GAAI+R,GACpB,CACxC,GAAIrM,GAAQoM,EAAWE,QAAQF,EAAW9R,GAC1C8R,GAAWV,OAAO1L,EAAO,GACzBuJ,EAAOmC,OAAO1L,EAAO,IAG7B1G,KAAKmD,eAAgB8M,OAAQ6C,IAAc,OAG3C9S,MAAKiT,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAOpL,GAGnE4J,EAAOtP,QAAU,GACjBX,KAAKiT,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAOpL,GAMvErG,KAAKiT,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAOpL,GAC1DpD,oBAAkB0L,IAASA,EAAKH,gBAAkBlL,EAAUkL,eAAiBG,EAAK2B,aAAehN,EAAUgN,YACzG3B,EAAKwB,YAAc7M,EAAU6M,WAChClJ,YAAUwK,GA5vBd,WA8vBA/B,EAAO3F,KAAK/J,KAAKqN,kBAAkB1L,SACnC4N,EAAY,GAAI1M,OAAMyM,GACtBtP,KAAK6O,OAAOU,EAAW,EAAG,KAAMvP,KAAKwC,IAAKxC,KAAKuC,KAEnD,MAAOmN,IAEXlO,EAAatB,UAAU+S,YAAc,SAAUC,EAAY3O,EAAUgL,EAAW4D,EAAc9M,GACtFA,EAAY8J,YAAcZ,EAAUY,WAAc+C,GAAe3O,GAK7D8B,GAAerG,KAAKwC,KAAOmE,SAASwM,EAAavK,GAAI,MAAQ5I,KAAKwC,MAAQ0Q,IAAe3O,GACzF0C,YAAUkM,GAAe5R,GAGzB8E,GAAerG,KAAKuC,KAAOoE,SAASwM,EAAavK,GAAI,MAAQ5I,KAAKuC,MAAQ2Q,IAAe3O,GACzF0C,YAAUkM,GAAe5R,IAT7B0F,YAAUkM,GAAe5R,IAajCC,EAAatB,UAAU4K,YAAc,SAAU+B,EAAG3G,GAC9ClG,KAAKoT,wBACL,IACI1D,MACA2D,EAAYpQ,oBAAkBiD,GAC9BoN,EAAU,GAAIzQ,MAAK7C,KAAKoG,WAAWpG,KAAKqG,cACxCkN,EAAMD,EAAQhD,WACdkD,EAAKF,EAAQ9E,cACbe,EAAY+D,EACZG,EAASlE,EAAUf,cACnBkF,EAAQ,GAAI7Q,MAAK7C,KAAKoG,WAAWpG,KAAKuC,MAAMiM,cAC5CmF,EAAW,GAAI9Q,MAAK7C,KAAKoG,WAAWpG,KAAKuC,MAAM+N,WAC/CsD,EAAQ,GAAI/Q,MAAK7C,KAAKoG,WAAWpG,KAAKwC,MAAMgM,cAC5CqF,EAAW,GAAIhR,MAAK7C,KAAKoG,WAAWpG,KAAKwC,MAAM8N,UACnDf,GAAUuE,SAAS,GACnB9T,KAAKuQ,YAAYvQ,KAAKqG,YAAa,UACnCkJ,EAAUwE,QAAQ,EAClB,KAAK,GAAIC,GAAQ,EAAGA,EAAQ,KAAMA,EAAO,CACrC,GAAIvC,GAAQzR,KAAK0R,QAAQnC,GACrBoC,EAAU3R,KAAKqE,cAAc,QAC7B4P,EAAc/N,GAAS,EAAQoK,aAAef,EAAUe,WACxDlL,EAAUc,GAAS,EAAQsI,gBAAkBgF,GAAMS,CACvDtC,GAAQxG,YAAcnL,KAAKgK,aAAahK,KAAK8C,UAAU0O,WAAWjC,GAC9DqC,OAAQ,KAAM9J,KAAM,WAAYwJ,SAAU,SAEzCtR,KAAKuC,MAAQkR,EAASC,GAAUM,EAAQL,GAAYF,IAAWC,IAAa1T,KAAKwC,MAAQiR,EAASG,GAAUI,EAAQH,GAAYJ,GAAUG,GAC3I3M,YAAUwK,GAAQrQ,IAEZiS,GAAajO,EACnB6B,YAAUwK,GAAQnQ,GAGdiO,EAAUe,aAAeiD,GAAOvT,KAAKqG,YAAYiK,aAAeiD,GAChEtM,YAAUwK,GAAQlQ,GAG1BgO,EAAUwE,QAAQ,GAClBxE,EAAUuE,SAASvE,EAAUe,WAAa,GACrCmB,EAAMhO,UAAUmI,SAASxK,IAC1ByK,eAAanI,IAAI+N,EAAO,QAASzR,KAAKuS,aAAcvS,MAExDyR,EAAMpJ,YAAYsJ,GAClBjC,EAAO3F,KAAK0H,GAEhBzR,KAAK+P,eAAeL,EA1CL,EAryBZ,SA+0ByC7C,EAAG3G,IAEnD1E,EAAatB,UAAU6K,cAAgB,SAAU8B,EAAG3G,GAChDlG,KAAKoT,wBACL,IAEI1D,MACAH,EAAY,GAAI1M,MAAK7C,KAAKoG,WAAWpG,KAAKqG,aAC9CkJ,GAAUuE,SAAS,GACnBvE,EAAUwE,QAAQ,EAClB,IAAIG,GAAU3E,EAAUf,cACpB2F,EAAU,GAAItR,MAAK0M,EAAU6E,YAAaF,EAAUA,EAAU,KAC9DG,EAAQ,GAAIxR,MAAK0M,EAAU6E,YAAaF,EAAUA,EAAU,OAC5DI,EAAcH,EAAQ3F,cACtB+F,EAAYF,EAAM7F,cAClBgG,EAAaxU,KAAK8C,UAAU0O,WAAW2C,GACvCvC,OAAQ,KAAM9J,KAAM,WAAYwJ,SAAU,MAE1CmD,EAAWzU,KAAK8C,UAAU0O,WAAW6C,GAASzC,OAAQ,KAAM9J,KAAM,WAAYwJ,SAAU,KAC5FtR,MAAKoI,mBAAmB+C,YAAcqJ,EAAa,OAGnD,KAAK,GADDE,GADQ,GAAI7R,MAAKqR,EAAWA,EAAU,GAAM,EAAG,EAAG,GAChC1F,cACbmG,EAAc,EAAGA,EAjBX,KAiBqCA,EAAa,CAC7D,GAAIC,GAAOF,EAAYC,CACvBpF,GAAU6E,YAAYQ,EACtB,IAAInD,GAAQzR,KAAK0R,QAAQnC,GACrBoC,EAAU3R,KAAKqE,cAAc,OACjCsN,GAAQxG,YAAcnL,KAAK8C,UAAU0O,WAAWjC,GAC5CqC,OAAQ,KAAM9J,KAAM,WAAYwJ,SAAU,MAEzCsD,EAAON,GAAiBM,EAAOL,GAChCtN,YAAUwK,GAp3BR,gBAq3BGxO,oBAAkBiD,IAAUqJ,EAAUf,gBAAkB,EAAQA,eACjEvH,YAAUwK,GAAQnQ,IAElBsT,EAAO,GAAI/R,MAAK7C,KAAKoG,WAAWpG,KAAKuC,MAAMiM,eAC3CoG,EAAO,GAAI/R,MAAK7C,KAAKoG,WAAWpG,KAAKwC,MAAMgM,gBAC3CvH,YAAUwK,GAAQrQ,IAGjBwT,EAAO,GAAI/R,MAAK7C,KAAKoG,WAAWpG,KAAKuC,MAAMiM,eAChDoG,EAAO,GAAI/R,MAAK7C,KAAKoG,WAAWpG,KAAKwC,MAAMgM,cAC3CvH,YAAUwK,GAAQrQ,GAEZ6B,oBAAkBiD,IAAUqJ,EAAUf,gBAAkB,EAAQA,cAIlEe,EAAUf,gBAAkBxO,KAAKqG,YAAYmI,eAAkBiD,EAAMhO,UAAUmI,SAASxK,IACxF6F,YAAUwK,GAAQlQ,GAJtB0F,YAAUwK,GAAQnQ,GAOjBmQ,EAAMhO,UAAUmI,SAASxK,IAC1ByK,eAAanI,IAAI+N,EAAO,QAASzR,KAAKuS,aAAcvS,MAExDyR,EAAMpJ,YAAYsJ,GAClBjC,EAAO3F,KAAK0H,GAEhBzR,KAAK+P,eAAeL,EAtDL,EAsDuB,WAAY7C,EAAG3G,IAEzD1E,EAAatB,UAAUwR,QAAU,SAAUnC,GACvC,GAGIrJ,GAFAmL,GAAsBC,SAAU,OAAQxJ,KAAM,WAAY8K,SAD5B,cAAtB5S,KAAK2C,aAAgC,YAAc,WAE3DgM,EAAO3O,KAAK8C,UAAUyO,UAAUvR,KAAK8C,UAAU0O,WAAWjC,EAAW8B,GAAoBA,EAExFpO,qBAAkB0L,KACnBzI,EAAQyI,EAAKkG,UAEjB,IAAIhN,IACAH,UAj4BD,SAi4BkBG,OAASe,GAAM,GAAKkM,cAAY,GAAK5O,GAAQ6O,gBAAiB,SAEnF,OAAO/U,MAAKqE,cAAc,KAAMwD,IAEpCrG,EAAatB,UAAUkO,SAAW,SAAUO,GACxC,GAAIqG,GAAoC,WAAvBhV,KAAK+M,cAA6B/M,KAAKoN,iBAAiBhD,iBAAiB,WAAkBlJ,GACxGlB,KAAKoN,iBAAiBhD,iBAAiB,uBAC3C,IAAI4K,EAAWrU,OACX,IAAK,GAAIK,GAAI,EAAGA,EAAIgU,EAAWrU,OAAQK,IACnC,IAAKgU,EAAWhU,GAAGyC,UAAUmI,SAASxK,GAAW,CAE7CuN,EAAO,GAAI9L,MAAK8D,SAASqO,EAAWhU,GAAG4H,GAAI,GAC3C,OAIZ,MAAO+F,IAEXnN,EAAatB,UAAUmO,QAAU,SAAUM,EAAMhB,GAC7C,GAAIsH,GAAW,GAAIpS,MAAK8L,EAAKH,cAAeG,EAAK2B,WAAa,EAAG,EACjE,IAAa,IAAT3C,EAAY,CACZ,GAAIuH,GAAaC,KAAKC,IAAIH,EAASI,oBAAsBrV,KAAKoO,SAASO,GAAM0G,oBAI7E,OAHIH,IACAD,EAAS1R,SAASvD,KAAKoO,SAASO,GAAM6B,WAAc0E,EAAa,IAE9DlV,KAAKsV,YAAYL,GAGxB,MAAOjV,MAAKsV,YAAYtV,KAAKoO,SAAS6G,KAG9CzT,EAAatB,UAAUiG,eAAiB,SAAUD,GAC9C,OAASjD,oBAAkBiD,IAAUA,YAAiBrD,QAAS0S,OAAOrP,GAAUA,EAAQ,MAE5F1E,EAAatB,UAAUoV,YAAc,SAAU3G,GAC3C,GAAIqG,GAAoC,WAAvBhV,KAAK+M,cAA6B/M,KAAKoN,iBAAiBhD,iBAAiB,wBACtFpK,KAAKoN,iBAAiBhD,iBAAiB,WAAkBlJ,EAC7D,IAAI8T,EAAWrU,OACX,IAAK,GAAIK,GAAIgU,EAAWrU,OAAS,EAAGK,GAAK,EAAGA,IACxC,IAAKgU,EAAWhU,GAAGyC,UAAUmI,SAASxK,GAAW,CAE7CuN,EAAO,GAAI9L,MAAK8D,SAASqO,EAAWhU,GAAG4H,GAAI,GAC3C,OAIZ,MAAO+F,IAEXnN,EAAatB,UAAUkT,uBAAyB,WACf,aAAzBpT,KAAKwD,gBACAP,oBAAkBjD,KAAK2B,QAAQyI,iBAAiB,0BAA0B,KAC3EC,SAAOrK,KAAKuK,kBAIXtH,oBAAkBjD,KAAKoE,gBAAgBgG,iBAAiB,0BAA0B,KACnFC,SAAOrK,KAAKuK,mBAKxB/I,EAAatB,UAAU6P,eAAiB,SAAUyF,EAAUC,EAAOC,EAAS7I,EAAG3G,GAC3E,GACIyP,GADAhI,EAAO3N,KAAKiN,cAAcjN,KAAK+M,cAEnC/M,MAAKoN,iBAAmBpN,KAAKqE,cAAc,SAC3CrE,KAAKwI,MAAMH,YAAYrI,KAAKoN,kBAC5BpG,eAAahH,KAAKuI,eAAgBvI,KAAKyH,gBAr9BnC,UACC,WAFF,WAu9BHR,YAAUjH,KAAKuI,eAAgBvI,KAAKyH,gBAAiBiO,GAMrD,KAAK,GAFDE,GAAMH,EACNd,EAAc,EACTjD,EAAU,EAAGA,EAAU8D,EAAS7U,OAAS8U,IAAS/D,EAAS,CAEhE,IADAiE,EAAQ3V,KAAKqE,cAAc,MACtBsQ,EAAc,EAAIA,EAAaA,EAAciB,EAAKjB,IAC9Ca,EAASb,GAAalR,UAAUmI,SAAS,kBAAqB3I,oBAAkBuS,EAASb,GAAakB,SAAS,MAChH5O,YAAUuO,EAASb,GAAakB,SAAS,KA/8BlD,UAg9BS9N,eAAayN,EAASb,GAAakB,SAAS,IACxC7N,SAAU,IACVE,gBAAgB,KAGxByN,EAAMtN,YAAYmN,EAASb,IACvB3U,KAAKwK,YAA8BsL,IAAhBnB,GAAsCa,EAASM,GAAoBrS,UAAUmI,SAAS1K,IACzG+F,YAAU0O,GA19BV,iBA49BC3V,KAAKwK,YAjBG,IAiBWmK,GAAkCa,EAjB7C,GAkBT/R,UAAUmI,SAAS1K,IACnB+F,YAAU0O,GA99BV,gBAg+BA3V,KAAKwK,WAvBC,KAwBFmK,GAA+Ba,EAxB7B,IAwBmD/R,UAAUmI,SAAS1K,IACxE+F,YAAU0O,GAl+Bd,gBA08BK,KA4BDhB,GAA8Ba,EA5B7B,IA4BkD/R,UAAUmI,SAAS1K,IACtE+F,YAAU0O,GAv+Bd,eA2+BRC,IAAYH,EACZd,GAA4B,EAC5B3U,KAAKoN,iBAAiB/E,YAAYsN,GAEtC3V,KAAKwI,MAAMiF,cAAc,SAAS/F,UAAY1H,KAAK8B,OACzB,cAAtB9B,KAAK2C,aACL3C,KAAK+V,cAGL/V,KAAK6P,cAAcmG,sBAEnBrI,IAAS3N,KAAKiN,cAAcjN,KAAK+M,gBAA4B,IAATY,GAAcA,IAAS3N,KAAKiN,cAAcjN,KAAK+M,iBACnG/M,KAAKoP,gBAAgBvC,GAEzB7M,KAAKiW,2BAETzU,EAAatB,UAAUqS,aAAe,SAAU1F,EAAG3G,GAC/ClG,KAAKkW,kBAAkBrJ,EACvB,IAAIsJ,GAAMtJ,EAAE2F,cACR7E,EAAO3N,KAAKiN,cAAcjN,KAAK+M,cAC/BoJ,GAAI1S,UAAUmI,SAAS1K,GACvBlB,KAAKkO,aAAarB,EAAG,EAAG,KAAM3G,GAEzByH,IAAS3N,KAAKiN,cAAcjN,KAAKgN,QAAUhN,KAAKiN,cAAcjN,KAAK6K,QAAU7K,KAAKiN,cAAcjN,KAAKgN,OAC1GhN,KAAKkO,aAAarB,EAAG,EAAG,KAAM3G,GAEzB,IAAMyH,EACX3N,KAAKkO,aAAarB,EAAG,EAAG,KAAM3G,GAExBiQ,EAAI1S,UAAUmI,SAAS1K,IAAwB,IAATyM,EAI5C3N,KAAKkO,aAAarB,EAAG,EAAGsJ,EAAKjQ,GAH7BlG,KAAKiO,WAAWpB,EAAG7M,KAAKoW,WAAWvJ,EAAG,MAAO,MAKpB,aAAzB7M,KAAKwD,iBACLxD,KAAKwI,MAAMiG,SAInBjN,EAAatB,UAAUgW,kBAAoB,SAAUrJ,GACjDA,EAAEmB,kBAGNxM,EAAatB,UAAUgO,aAAe,SAAUrB,EAAGc,EAAMhM,EAASuE,GAC9D,GAAI6G,GAAc/M,KAAKiN,cAAcjN,KAAK+M,eACtCxN,EAAIS,KAAKoW,WAAWvJ,EAAGlL,EAC3B,QAAQgM,GACJ,IAAK,GACGZ,IAAgB/M,KAAKiN,cAAcjN,KAAKgN,QAAUhN,KAAKiN,cAAcjN,KAAK6K,QAAU7K,KAAKiN,cAAcjN,KAAKgN,QAC5G3C,SAAOrK,KAAKoN,kBACZpN,KAAKqG,YAAc9G,EACnBS,KAAK8B,OAzhCZ,WA0hCO9B,KAAKgL,aAAa6B,KAGQ,cAAtB7M,KAAK2C,cACL3C,KAAKqG,YAAYyN,SAASvU,EAAE+Q,YACxB/Q,EAAE+Q,WAAa,GAAKtQ,KAAKqG,YAAYiK,aAAe/Q,EAAE+Q,YACtDtQ,KAAKqG,YAAY0N,QAAQ,GAE7B/T,KAAKqG,YAAY+N,YAAY7U,EAAEiP,gBAG/BxO,KAAKqG,YAAc9G,EAEvBS,KAAK8B,OAviCZ,WAwiCOuI,SAAOrK,KAAKoN,kBACZpN,KAAKgL,aAAa6B,GAEtB,MACJ,KAAK,GACD,GAAIE,IAAgB/M,KAAKiN,cAAcjN,KAAKgN,QAAUhN,KAAKiN,cAAcjN,KAAK6K,QAAU7K,KAAKiN,cAAcjN,KAAKgN,OAC5GhN,KAAKiO,WAAWpB,EAAGtN,EAAG,UAErB,CACD,GAA0B,cAAtBS,KAAK2C,aACL3C,KAAKqG,YAAY+N,YAAY7U,EAAEiP,mBAE9B,CACDxO,KAAKqW,sBAAwBrW,KAAKyH,cAAc0D,WAChD,IAAImL,GAActW,KAAK6P,cAAc0G,eAAehX,EACpDS,MAAKqG,YAAcrG,KAAK6P,cAAc2G,YAAYF,EAAY1B,KAAM0B,EAAYtC,MAAO,GAE3FhU,KAAK8B,OAzjCZ,WA0jCOuI,SAAOrK,KAAKoN,kBACZpN,KAAK8K,YAAY+B,MAIjCrL,EAAatB,UAAUuW,WAAa,SAAU9I,EAAMd,EAAGS,EAAgBR,GACnE,OAAQa,GACJ,IAAK,GACDtD,SAAOrK,KAAKoN,kBACZpN,KAAKgL,aAAa6B,EAAG,KAAMC,EAC3B,MACJ,KAAK,GACDzC,SAAOrK,KAAKoN,kBACZpN,KAAK8K,YAAY+B,EACjB,MACJ,KAAK,GACDxC,SAAOrK,KAAKoN,kBACZpN,KAAK+K,cAAc8B,KAS/BrL,EAAatB,UAAUsD,cAAgB,WACnC,MAAO,YAOXhC,EAAatB,UAAUwW,gBAAkB,WACrC,GAAIC,KAIJ,OAHI3W,OACA2W,EAAQ5M,MAAO6M,MAAO5W,MAAO6W,OAAQ,YAElCF,GAQXnV,EAAatB,UAAU4W,eAAiB,WACpC,GAAIC,IAAa,QACjB,OAAO/W,MAAKgX,aAAaD,IAa7BvV,EAAatB,UAAU+W,kBAAoB,SAAUC,EAASC,EAAS7J,EAAgB2C,GACnFjQ,KAAK8B,OAAS,EACd,KAAK,GAAI6H,GAAK,EAAGC,EAAKnK,OAAOoK,KAAKqN,GAAUvN,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC9D,GAAIyN,GAAOxN,EAAGD,EACd,QAAQyN,GACJ,IAAK,YACGF,EAAQvT,UACqB,aAAzB3D,KAAKwD,gBACLxD,KAAK2B,QAAQ8B,UAAUC,IAAI,SAG3B1D,KAAKoE,gBAAgBX,UAAUC,IAAI,SAIV,aAAzB1D,KAAKwD,gBACLxD,KAAK2B,QAAQ8B,UAAU4T,OAAO,SAG9BrX,KAAKoE,gBAAgBX,UAAU4T,OAAO,QAG9C,MACJ,KAAK,kBACDrX,KAAKiJ,mBACwB,eAAzBjJ,KAAKwD,gBACLxD,KAAK6I,sBAEA7I,KAAKoE,iBACVpE,KAAK6I,sBAET7I,KAAKsI,sBACL,MACJ,KAAK,MACL,IAAK,MACDtI,KAAKsC,gBAAgBtC,KAAKuC,IAAKvC,KAAKwC,KACvB,QAAT4U,EACApX,KAAKmD,eAAgBZ,IAAKvC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAW8Q,EAAQ3U,SAAU,GAGzFvC,KAAKmD,eAAgBX,IAAKxC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAW8Q,EAAQ1U,SAAU,GAE7FxC,KAAKmD,eAAgB0H,MAAO7K,KAAK+M,gBAAiB,GAC9C/M,KAAKoN,kBACL/C,SAAOrK,KAAKoN,kBAEhBpN,KAAK+G,eACDuG,GACAtN,KAAKsX,eAAehK,EAAgB2C,GAEX,eAAzBjQ,KAAKwD,gBACLxD,KAAK8I,oBAEA9I,KAAKoE,iBACVpE,KAAK8I,qBAEJ9I,KAAKsD,UAAYtD,KAAKuC,KAAOvC,KAAKwC,IAAMxC,KAAKsD,YAAetD,aAAiBA,KAAkB,cAChGqK,SAAOrK,KAAKkL,cACZb,SAAOrK,KAAK2L,QACZ3L,KAAKkL,aAAelL,KAAK2L,OAAS,KAClC3L,KAAKgJ,uBAGAhJ,aAAiBA,mBAAsBA,KAAKkL,aAAazH,UAAUmI,SAAS,gBAC7E5E,eAAahH,KAAKkL,cAAe9J,GACjCiJ,SAAOrK,KAAKkL,cACZb,SAAOrK,KAAK2L,QACZ3L,KAAKkL,aAAelL,KAAK2L,OAAS,KAClC3L,KAAKgJ,sBAGb,MACJ,KAAK,QACL,IAAK,QACL,IAAK,aACL,IAAK,iBACL,IAAK,WACDhJ,KAAKuX,YACwB,eAAzBvX,KAAKwD,iBACLxD,KAAK6I,sBACL7I,KAAK8I,qBAEA9I,KAAKoE,kBACVpE,KAAK6I,sBACL7I,KAAK8I,oBAET,MACJ,KAAK,SACD9I,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAClB,eAAzBhD,KAAKwD,iBACLxD,KAAK6I,sBACL7I,KAAK8I,qBAEA9I,KAAKoE,kBACVpE,KAAK6I,sBACL7I,KAAK8I,qBAET9I,KAAKoL,IAAIoM,UAAUxX,KAAKgD,QACxBhD,KAAKiL,cACL,MACJ,KAAK,kBACGiM,EAAQnO,gBACR/I,KAAKgJ,sBAGA/F,oBAAkBjD,KAAKkL,eAAkBjI,oBAAkBjD,KAAK2L,UACjEtB,SAAOrK,KAAKkL,cACZb,SAAOrK,KAAK2L,QACZ3L,KAAKkL,aAAelL,KAAK2L,WAAS8L,IAG1CzX,KAAKmD,eAAgB4F,gBAAiBmO,EAAQnO,kBAAmB,MAYjFvH,EAAatB,UAAUoX,eAAiB,SAAUhK,EAAgB2C,GAC9D,GAAI3C,IAAmBrK,oBAAkBgN,IAAWA,EAAOtP,OAAS,EAAG,CAEnE,IAAK,GADDmS,GAAa9S,KAAK8S,WAAW7C,GACxByH,EAAY,EAAGA,EAAY5E,EAAWnS,OAAQ+W,IAAa,CAChE,GAAIhF,GAAYI,EAAW4E,GACvB5P,EAA8B,cAAtB9H,KAAK2C,aAAgC,YAAc,UAC3DgV,MAAkB,EAElBA,GADsB,cAAtB3X,KAAK2C,aACa3C,KAAK8C,UAAU0O,WAAWkB,GAAa5K,KAAM,OAAQwJ,SAAU,QAG/DtR,KAAK8C,UAAU0O,WAAWkB,GAAa5K,KAAM,WAAYwJ,SAAU,OAAQsB,SAAU,WAE3G,IAAIgF,IAAoB9P,KAAM,OAAQwJ,SAAU,MAAOsB,SAAU9K,GAE7D+P,EADiB7X,KAAK8C,UAAU0O,WAAWxR,KAAKuC,IAAKqV,GAErDE,GAAoBhQ,KAAM,OAAQwJ,SAAU,MAAOsB,SAAU9K,GAE7DiQ,EADiB/X,KAAK8C,UAAU0O,WAAWxR,KAAKwC,IAAKsV,KAEpD,GAAIjV,MAAK8U,IAAoB,GAAI9U,MAAKgV,KACtC,GAAIhV,MAAK8U,IAAoB,GAAI9U,MAAKkV,MACvCjF,EAAWV,OAAOsF,EAAW,GAC7BA,GAAa,GAGrB1X,KAAKmD,eAAgB8M,OAAQ6C,IAAc,KAGnDtR,EAAatB,UAAU8X,eAAiB,WAC/B/U,oBAAkBjD,KAAKoN,oBACxB/C,SAAOrK,KAAKoN,kBACZpN,KAAKmD,eAAgB0H,MAAO7K,KAAK+M,gBAAiB,GAClD/M,KAAK8I,sBAGbtH,EAAatB,UAAU4S,WAAa,SAAU7C,GAC1C,GAAI6C,KACJ,KAAK7P,oBAAkBgN,IAAWA,EAAOtP,OAAS,EAC9C,IAAK,GAAI+F,GAAQ,EAAGA,EAAQuJ,EAAOtP,OAAQ+F,IACvCoM,EAAW/I,KAAK,GAAIlH,OAAMoN,EAAOvJ,IAGzC,OAAOoM,IAEXtR,EAAatB,UAAUqQ,YAAc,SAAU5B,EAAMhB,GACjD,GACIsK,GACAC,EAFApV,EAAY,GAAIC,wBAAqB/C,KAAKgD,QAG1C8E,EAA8B,cAAtB9H,KAAK2C,aAAgC,YAAc,SAW/D,QAV0B,cAAtB3C,KAAK2C,cACLsV,EAAmBnV,EAAU0O,WAAW7C,GAAQ7G,KAAM,WAAYwJ,SAAU,QAASsB,SAAU9K,IAC/FoQ,EAAqBpV,EAAU0O,WAAW7C,GACtCiD,OAAQ,KAAM9J,KAAM,WAAYwJ,SAAU,IAAKsB,SAAU9K,MAI7DmQ,EAAmBnV,EAAU0O,WAAW7C,GAAQ7G,KAAM,WAAY8J,OAAQ,SAAUgB,SAAU9K,IAC9FoQ,EAAqBpV,EAAU0O,WAAW7C,GAAQ7G,KAAM,WAAY8J,OAAQ,IAAKgB,SAAU9K,KAEvF6F,GACJ,IAAK,OACD3N,KAAKoI,mBAAmB+C,YAAcnL,KAAKgK,aAAaiO,EACxD,MACJ,KAAK,SACDjY,KAAKoI,mBAAmB+C,YAAc+M,IAGlD1W,EAAatB,UAAUiY,oBAAsB,WACzC,GAAIvP,GAIAuF,EAHAiK,EAAapY,KAAKoN,iBAAiBK,cAAc,wBACjD4K,EAAcrY,KAAKoN,iBAAiBK,cAAc,oBAClD3F,EAA8B,cAAtB9H,KAAK2C,aAAgC,YAAc,UAE3DgL,EAAO3N,KAAK+M,aAwBhB,OAtBIoB,GADS,UAATR,EACQ3N,KAAK8C,UAAU0O,WAAWxR,KAAKqG,aAAeyB,KAAM,OAAQwJ,SAAU,OAAQsB,SAAU9K,IAElF,SAAT6F,EACQ,YAAT7F,EACQ9H,KAAK8C,UAAU0O,WAAWxR,KAAKqG,aAAeyB,KAAM,OAAQwJ,SAAU,QAASsB,SAAU9K,IAGzF9H,KAAK8C,UAAU0O,WAAWxR,KAAKqG,aAAeyB,KAAM,OAAQwJ,SAAU,QAASsB,SAAU9K,IAI7F9H,KAAK8C,UAAU0O,WAAWxR,KAAKqG,aACnCuL,OAAQ,KAAM9J,KAAM,OAAQwJ,SAAU,IAAKsB,SAAU9K,KAGzDuQ,GAAeD,KACVnV,oBAAkBoV,IACnBA,EAAYlU,aAAa,gBAAiB,SAE7CiU,GAAcC,GAAalU,aAAa,aAAcgK,GACvDvF,GAAMwP,GAAcC,GAAanU,aAAa,OAE3C0E,GAEXpH,EAAatB,UAAU6V,YAAc,WAEjC,OADA,GAAIlT,MAAK7C,KAAKoG,WAAWpG,KAAKqG,cAAc0N,QAAQ,GAC5C/T,KAAK+M,eACT,IAAK,QACD/M,KAAKsY,oBAAoBtY,KAAKuY,aAAa,GAAI1V,MAAK7C,KAAKoG,WAAWpG,KAAKqG,cAAerG,KAAKuC,KAAO,GACpGvC,KAAKwY,gBAAgBxY,KAAKuY,aAAa,GAAI1V,MAAK7C,KAAKoG,WAAWpG,KAAKqG,cAAerG,KAAKwC,MAAQ,EACjG,MACJ,KAAK,OACDxC,KAAKsY,oBAAoBtY,KAAKyY,YAAY,GAAI5V,MAAK7C,KAAKoG,WAAWpG,KAAKqG,cAAerG,KAAKuC,KAAO,GACnGvC,KAAKwY,gBAAgBxY,KAAKyY,YAAY,GAAI5V,MAAK7C,KAAKoG,WAAWpG,KAAKqG,cAAerG,KAAKwC,MAAQ,EAChG,MACJ,KAAK,SACDxC,KAAKsY,oBAAoBtY,KAAK0Y,cAAc,GAAI7V,MAAK7C,KAAKoG,WAAWpG,KAAKqG,cAAerG,KAAKuC,KAAO,GACrGvC,KAAKwY,gBAAgBxY,KAAK0Y,cAAc,GAAI7V,MAAK7C,KAAKoG,WAAWpG,KAAKqG,cAAerG,KAAKwC,MAAQ,KAQ9GhB,EAAatB,UAAUyY,QAAU,WACA,aAAzB3Y,KAAKwD,iBAAkCxD,KAAK2B,QAC5CqF,eAAahH,KAAK2B,UAAWR,IAGzBnB,KAAKoE,iBAAmBpE,KAAK2B,SAC7BqF,eAAahH,KAAK2B,UAAWR,IAGR,aAAzBnB,KAAKwD,iBAAkCxD,KAAK2B,UACvCsB,oBAAkBjD,KAAKoI,qBACxByD,eAAawL,OAAOrX,KAAKoI,mBAAoB,QAASpI,KAAKkM,eAE3DlM,KAAKkL,cACLW,eAAawL,OAAOrX,KAAKkL,aAAc,QAASlL,KAAK8L,kBAEzD9L,KAAKsY,qBAAoB,GACzBtY,KAAKwY,iBAAgB,GACrBxY,KAAKqM,eAAesM,UACpB3Y,KAAK2B,QAAQiX,gBAAgB,aACxB3V,oBAAkBjD,KAAKyC,gBAAgByB,aAAa,aAIrDlE,KAAK2B,QAAQiX,gBAAgB,YAH7B5Y,KAAK2B,QAAQwC,aAAa,WAAYnE,KAAKgE,WAM/ChE,KAAK2B,UACL3B,KAAK2B,QAAQiJ,UAAY,IAE7B5K,KAAKkL,aAAe,KACpBlL,KAAKoN,iBAAmB,KACxBpN,KAAKqN,kBAAoB,KACzBrN,KAAKyH,cAAgB,KACrBzH,KAAKmI,SAAW,KAChBnI,KAAKwI,MAAQ,KACbxI,KAAKuK,iBAAmB,KACxBvK,KAAK4H,aAAe,KACpB5H,KAAKoI,mBAAqB,KAC1BpI,KAAK2L,OAAS,KACd3L,KAAKuI,eAAiB,KACtB9G,EAAOvB,UAAUyY,QAAQ9W,KAAK7B,OAElCwB,EAAatB,UAAUiO,MAAQ,SAAUtB,GACrC,GAAIE,GAAc/M,KAAKiN,cAAcjN,KAAK+M,cAC1C/M,MAAK8B,OAx5CA,WAy5CL9B,KAAKyW,aAAa1J,EAAaF,IAEnCrL,EAAatB,UAAU+M,cAAgB,SAAU4L,GAC7C,MAAkB,UAAdA,EACO,EAEY,SAAdA,EACE,EAGA,GAGfrX,EAAatB,UAAUgM,cAAgB,SAAUW,GAC7CA,EAAEmB,iBACFhO,KAAKmO,MAAMtB,GACkB,aAAzB7M,KAAKwD,iBACLxD,KAAKwI,MAAMiG,SAGnBjN,EAAatB,UAAU4Y,SAAW,WAC9B9Y,KAAK8B,OAAS,EACd,IAAIiL,GAAc/M,KAAKiN,cAAcjN,KAAK+M,cAC1C,QAAQ/M,KAAK+M,eACT,IAAK,QACD/M,KAAKsO,UAAUtO,KAAKqG,aAAc,GAClCrG,KAAKyW,WAAW1J,EAChB,MACJ,KAAK,OACD/M,KAAKuO,SAASvO,KAAKqG,aAAc,GACjCrG,KAAKyW,WAAW1J,EAChB,MACJ,KAAK,SACD/M,KAAKuO,SAASvO,KAAKqG,aAAc,IACjCrG,KAAKyW,WAAW1J,KAI5BvL,EAAatB,UAAU+O,iBAAmB,SAAUpC,GAChDA,EAAEmB,iBACwB,cAAtBhO,KAAK2C,aACL3C,KAAK8Y,WAGL9Y,KAAK6P,cAAckJ,kBAEvB/Y,KAAKqP,gBAAgBxC,GACQ,aAAzB7M,KAAKwD,iBACLxD,KAAKwI,MAAMiG,SAGnBjN,EAAatB,UAAU8Y,KAAO,WAC1BhZ,KAAK8B,OAAS,EACd,IAAIiL,GAAc/M,KAAKiN,cAAcjN,KAAK+M,cAC1C,QAAQ/M,KAAK+M,eACT,IAAK,QACD/M,KAAKsO,UAAUtO,KAAKqG,YAAa,GACjCrG,KAAKyW,WAAW1J,EAChB,MACJ,KAAK,OACD/M,KAAKuO,SAASvO,KAAKqG,YAAa,GAChCrG,KAAKyW,WAAW1J,EAChB,MACJ,KAAK,SACD/M,KAAKuO,SAASvO,KAAKqG,YAAa,IAChCrG,KAAKyW,WAAW1J,KAI5BvL,EAAatB,UAAUiP,aAAe,SAAUgH,GAC5CA,EAAInI,iBACsB,cAAtBhO,KAAK2C,aACL3C,KAAKgZ,OAGLhZ,KAAK6P,cAAcoJ,cAEvBjZ,KAAKqP,gBAAgB8G,GACQ,aAAzBnW,KAAKwD,iBACLxD,KAAKwI,MAAMiG,SAWnBjN,EAAatB,UAAUgN,WAAa,SAAUS,EAAMgB,EAAM7B,IACjD6B,IAAS3O,KAAKuC,MAAQoM,IAAS3O,KAAKwC,MACrCxC,KAAKqG,YAAcsI,IAElBA,IAAS3O,KAAKuC,MACfvC,KAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWpG,KAAKuC,QAEhDoM,IAAS3O,KAAKwC,MACfxC,KAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWpG,KAAKwC,OAEhDxC,KAAKiN,cAAcjN,KAAKgN,QAAUhN,KAAKiN,cAAcU,KACjD3N,KAAKiN,cAAcjN,KAAKgN,QAAUhN,KAAKiN,cAAcjN,KAAK6K,QACxD7K,KAAKiN,cAAcjN,KAAKgN,SAAWhN,KAAKiN,cAAcU,MACzDA,EAAO3N,KAAKgN,OAGpBhN,KAAKyW,WAAWzW,KAAKiN,cAAcU,GAAO,KAAM,KAAMb,IAQ1DtL,EAAatB,UAAU6M,YAAc,WACjC,MAAI/M,MAAKuI,eAAe9E,UAAUmI,SAjiD/B,UAkiDQ,OAEF5L,KAAKuI,eAAe9E,UAAUmI,SAliDlC,YAmiDM,SAGA,SAIfpK,EAAatB,UAAUuS,WAAa,SAAU9D,EAAMzI,GAChD,OAASjD,oBAAkBiD,IAAUyI,EAAKwB,YAAc,EAAQA,WACzDxB,EAAK2B,aAAe,EAAQA,YAAc3B,EAAKH,gBAAkB,EAAQA,eAGpFhN,EAAatB,UAAUuJ,kBAAoB,SAAUyP,EAAIzY,GACrD,GAAI0Y,GAAkB,0CAA4CnZ,KAAKqJ,gBAAgBC,cACnF8P,EAAgB,wCAA0CpZ,KAAKqJ,gBAAgBC,aAEnF,OAA0B,cAAtBtJ,KAAK2C,aACE4G,WAFG,QAEqBvJ,KAAKgD,OAASmW,EAAiBD,GAGvD3P,WAAS,QAAevJ,KAAKgD,OAASoW,EAAeF,IAGpE1X,EAAatB,UAAUkR,QAAU,SAAU7R,GACvC,GAAI8G,GAAc,GAAIxD,MAAK7C,KAAKoG,WAAW7G,IAAIsV,UAC3ClG,EAAO,GAAI9L,MAAKtD,EAAEiP,cAAe,EAAG,GAAGqG,SAC3C,OAAOM,MAAKkE,MAAQhT,EAAcsI,EAniDpB,OAAA,MAmiDkE,IAEpFnN,EAAatB,UAAU2Q,aAAe,SAAUlC,EAAM2K,GAClD,GAAIC,GAAW5K,EAAK0G,oBAChB9V,EAAI,GAAIsD,MAAK8L,EAAK6K,UAAYF,GAC9BG,EAAela,EAAE8V,oBAAsBkE,CAC3C5K,GAAK+K,QAAQna,EAAEia,UAxiDG,IAwiDSC,IAE/BjY,EAAatB,UAAUoO,UAAY,SAAUK,EAAM3N,GAC/C,GAA0B,cAAtBhB,KAAK2C,aAA8B,CACnC,GAAImO,GAAMnC,EAAKwB,SACfxB,GAAKoF,QAAQ,GACbpF,EAAKmF,SAASnF,EAAK2B,WAAatP,GAChC2N,EAAKoF,QAAQoB,KAAK5S,IAAIuO,EAAK9Q,KAAK2Z,WAAWhL,SAE1C,CACD,GAAI2H,GAActW,KAAK6P,cAAc0G,eAAe5H,EACpD3O,MAAKqG,YAAcrG,KAAK6P,cAAc2G,YAAYF,EAAY1B,KAAO0B,QAAqBtV,EAAG,KAGrGQ,EAAatB,UAAUqO,SAAW,SAAUI,EAAM3N,GAC9C,GAA0B,cAAtBhB,KAAK2C,aAA8B,CACnC,GAAImO,GAAMnC,EAAKwB,SACfxB,GAAKoF,QAAQ,GACbpF,EAAKyF,YAAYzF,EAAKH,cAAgBxN,GACtC2N,EAAKoF,QAAQoB,KAAK5S,IAAIuO,EAAK9Q,KAAK2Z,WAAWhL,SAE1C,CACD,GAAI2H,GAActW,KAAK6P,cAAc0G,eAAe5H,EACpD3O,MAAKqG,YAAcrG,KAAK6P,cAAc2G,YAAYF,EAAY1B,KAAO5T,EAAIsV,QAAoB,KAGrG9U,EAAatB,UAAUkW,WAAa,SAAUvJ,EAAGlL,GAC7C,GAAIwU,EAEAA,GADAtJ,EACMA,EAAE2F,cAGF7Q,CAEV,IACI0P,IAAsBvJ,KAAM,WAAYwJ,SAAU,OAAQsB,SAD5B,cAAtB5S,KAAK2C,aAAgC,YAAc,WAG3DiX,EAAa5Z,KAAK8C,UAAU0O,WAAW,GAAI3O,MAAK8D,SAAS,GAAKwP,EAAIjS,aAAa,MAAO,IAAKmN,GAC3F1C,EAAO3O,KAAK8C,UAAUyO,UAAUqI,EAAYvI,GAC5CnL,EAAQyI,EAAKkG,UAAYlG,EAAKkG,UAAY,GAC9C,OAAO,IAAIhS,MAAKqD,IAGpB1E,EAAatB,UAAUoI,qBAAuB,WAC1CtB,eAAahH,KAAK2B,SAtlDN,4BAulDiB,SAAzB3B,KAAKqJ,iBACLpC,YAAmC,aAAzBjH,KAAKwD,gBAAiCxD,KAAK2B,QAAU3B,KAAKoE,iBAxlD5D,6BA2lDhB5C,EAAatB,UAAU+N,WAAa,SAAUpB,EAAG8B,EAAMkL,EAAMvM,EAAgB2C,GACzE,GAAItO,GAAUkY,GAAQhN,EAAE2F,aAExB,IADAxS,KAAKgC,gBAAiB,EACK,WAAvBhC,KAAK+M,cACL/M,KAAK8Z,cAAc9Z,KAAKqG,YAAasI,EAAKH,mBAEzC,IAA2B,SAAvBxO,KAAK+M,cACV/M,KAAK+Z,YAAY/Z,KAAKqG,YAAasI,OAElC,CACD,GAAIrB,IAAmBtN,KAAKga,iBAAiBrL,EAAMsB,GAAS,CACpD6C,EAAa9S,KAAK8S,WAAW7C,IAC5BhN,oBAAkBgN,IAAW6C,EAAWnS,OAAS,GAClDmS,EAAW/I,KAAK,GAAIlH,MAAK7C,KAAKoG,WAAWuI,KACzC3O,KAAKmD,eAAgB8M,OAAQ6C,IAAc,GAC3C9S,KAAKmD,eAAgB+C,MAAO+J,EAAOA,EAAOtP,OAAS,KAAM,IAGzDX,KAAKmD,eAAgB8M,QAAS,GAAIpN,MAAK7C,KAAKoG,WAAWuI,OAAW,OAItE3O,MAAKmD,eAAgB+C,MAAO,GAAIrD,MAAK7C,KAAKoG,WAAWuI,MAAU,EAEnE3O,MAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWuI,IAEhD,GAAIvB,GAAmB9I,UAAQ3C,EAAS,IAAMR,EAU9C,IATI8B,oBAAkBmK,KAClBA,EAAmBpN,KAAKoN,kBAEvBE,GAAmBrK,oBAAkBmK,EAAiBK,cAAc,IAAMnM,KAC3E0F,eAAaoG,EAAiBK,cAAc,IAAMnM,IAAYA,GAE7DgM,GAAmBrK,oBAAkBmK,EAAiBK,cAAc,IAAMlM,KAC3EyF,eAAaoG,EAAiBK,cAAc,IAAMlM,IAAeA,GAEjE+L,EAAgB,CAGhB,IAAK,GAFDwF,GAAa9S,KAAK8S,WAAW7C,GAC7B+E,EAAapV,MAAMM,UAAUiK,MAAMtI,KAAK7B,KAAKoN,iBAAiBhD,iBAAiB,OAC1E1D,EAAQ,EAAGA,EAAQsO,EAAWrU,OAAQ+F,IAAS,CACpD,GAAIuT,GAAc7M,EAAiBhD,iBAAiB,MAAa7I,GAAa,GAC1E2Y,EAAkB9M,EAAiBhD,iBAAiB,MAAa9I,GAAU,EAC3E0T,GAAWtO,KAAWuT,GACtBjT,eAAagO,EAAWtO,IAASnF,GAEjCyT,EAAWtO,KAAWwT,GACrBla,KAAKga,iBAAiB,GAAInX,MAAK8D,SAASuT,EAAgBhW,aAAa,MAAMwJ,MAAM,KAAK,GAAI,KAAMuC,IACjGjJ,eAAagO,EAAWtO,IAASpF,GAGzC,GAAIK,EAAQ8B,UAAUmI,SAAStK,GAAW,CACtC0F,eAAarF,GAAUL,EACvB,KAAK,GAAIN,GAAI,EAAGA,EAAI8R,EAAWnS,OAAQK,IAAK,CACxC,GACI2R,IAAkBf,OAAQ,KAAM9J,KAAM,OAAQwJ,SAAU,QAASsB,SADnC,cAAtB5S,KAAK2C,aAAgC,YAAc,UAI/D,IAFsB3C,KAAK8C,UAAU0O,WAAW7C,EAAMgE,KACjC3S,KAAK8C,UAAU0O,WAAWsB,EAAW9R,GAAI2R,GACtB,CAChCjM,EAAQoM,EAAWE,QAAQF,EAAW9R,GAC1C8R,GAAWV,OAAO1L,EAAO,GACzBO,YAAUtF,GAAUJ,IAG5BvB,KAAKmD,eAAgB8M,OAAQ6C,IAAc,OAG3C7L,aAAUtF,GAAUL,OAIxB2F,aAAUtF,GAAUL,EAExBtB,MAAKgC,gBAAiB,GAE1BR,EAAatB,UAAU8Z,iBAAmB,SAAUG,EAAOlK,GACvD,GAAImK,IAAgB,CACpB,KAAKnX,oBAAkBgN,GACnB,IAAK,GAAIoK,GAAgB,EAAGA,EAAgBpK,EAAOtP,OAAQ0Z,IAAiB,CACxE,GAAIvS,GAA8B,cAAtB9H,KAAK2C,aAAgC,YAAc,SACzC3C,MAAK8C,UAAU0O,WAAW2I,GAC5CvI,OAAQ,KAAM9J,KAAM,OAAQwJ,SAAU,QAASsB,SAAU9K,MAExC9H,KAAK8C,UAAU0O,WAAWvB,EAAOoK,IAClDzI,OAAQ,KAAM9J,KAAM,OAAQwJ,SAAU,QAASsB,SAAU9K,MAGzDsS,GAAgB,GAI5B,MAAOA,IAEX5Y,EAAatB,UAAU+V,wBAA0B,WAC7CnS,aAAW9D,KAAKwI,OACZE,wBAAyB,GAAK1I,KAAKmY,yBAG3C3W,EAAatB,UAAUoY,oBAAsB,SAAU/T,GAC/CA,EACKtB,oBAAkBjD,KAAK4H,gBACxBiE,eAAawL,OAAOrX,KAAK4H,aAAc,QAAS5H,KAAKgP,yBACrD/H,YAAUjH,KAAK4H,cAAe,GAAKxG,GACnC6F,YAAUjH,KAAK4H,cAAe,GAAKvG,GACnCrB,KAAK4H,aAAazD,aAAa,gBAAiB,UAIpD0H,eAAanI,IAAI1D,KAAK4H,aAAc,QAAS5H,KAAKgP,yBAClDhI,eAAahH,KAAK4H,cAAe,GAAKxG,GACtC4F,eAAahH,KAAK4H,cAAe,GAAKvG,GACtCrB,KAAK4H,aAAazD,aAAa,gBAAiB,WAGxD3C,EAAatB,UAAU8R,mBAAqB,SAAU4E,GAClDzK,SAAOnM,KAAKqN,mBAAqBiN,KAAM,kBACvCta,KAAKua,QAAQ,gBAAiB3D,IAElCpV,EAAatB,UAAUsa,eAAiB,SAAUrE,GAC9ChK,SAAOnM,KAAKya,eAAiBH,KAAM,YAAaI,MAAOvE,IACvDnW,KAAKua,QAAQ,YAAava,KAAKya,gBAEnCjZ,EAAatB,UAAUmP,gBAAkB,SAAUqL,GAC/C1a,KAAKya,eAAkB9M,KAAM3N,KAAK+M,cAAe4B,KAAM3O,KAAKqG,aAC5DrG,KAAKwa,eAAeE,IAExBlZ,EAAatB,UAAUsY,gBAAkB,SAAUjU,GAC3CA,EACKtB,oBAAkBjD,KAAK4H,gBACxBiE,eAAawL,OAAOrX,KAAKmI,SAAU,QAASnI,KAAKkP,qBACjDjI,YAAUjH,KAAKmI,UAAW/G,GAC1B6F,YAAUjH,KAAKmI,UAAW9G,GAC1BrB,KAAKmI,SAAShE,aAAa,gBAAiB,UAIhD0H,eAAanI,IAAI1D,KAAKmI,SAAU,QAASnI,KAAKkP,qBAC9ClI,eAAahH,KAAKmI,UAAW/G,GAC7B4F,eAAahH,KAAKmI,UAAW9G,GAC7BrB,KAAKmI,SAAShE,aAAa,gBAAiB,WAGpD3C,EAAatB,UAAUya,QAAU,SAAUC,EAAWC,EAASC,GAC3D,GACIxV,GACAyV,EAFAlQ,EAAQgQ,EAAQrM,aAepB,OAZAlJ,GAAMuF,EACNkQ,EAAS,EACLD,IAEAxV,GADAuF,GAAgBA,EAAQiQ,GACVjQ,EAAQiQ,EAAWA,EAAW,GAE5CF,EAAUpM,cAAgBlJ,EAC1ByV,EAAS,EAEJH,EAAUpM,cAAgB3D,IAC/BkQ,GAAU,GAEPA,GAEXvZ,EAAatB,UAAU4O,cAAgB,SAAUH,GAC7C,OAAQA,IAAS3O,KAAKuC,MAAQoM,IAAS3O,KAAKwC,KAEhDhB,EAAatB,UAAU0O,iBAAmB,SAAUD,GAChD,GAA0B,cAAtB3O,KAAK2C,aACL,MAAOgM,GAAK2B,YAActQ,KAAKuC,IAAI+N,YAC5B3B,EAAKH,eAAiBxO,KAAKuC,IAAIiM,eAC/BG,EAAK2B,YAActQ,KAAKwC,IAAI8N,YAC5B3B,EAAKH,eAAiBxO,KAAKwC,IAAIgM,aAGtC,IAAI8H,GAActW,KAAK6P,cAAc0G,eAAe5H,EACpD,OAAO2H,GAAYtC,OAAUhU,KAAK6P,cAAc0G,eAAe,GAAI1T,MAAK,KAAM,EAAG,KAAMmR,OAChFsC,EAAY1B,MAAS5U,KAAK6P,cAAc0G,eAAe,GAAI1T,MAAK,KAAM,EAAG,KAAM+R,MAC/E0B,EAAYtC,OAAUhU,KAAK6P,cAAc0G,eAAe,GAAI1T,MAAK,KAAM,EAAG,KAAMmR,OAChFsC,EAAY1B,MAAS5U,KAAK6P,cAAc0G,eAAe,GAAI1T,MAAK,KAAM,EAAG,KAAM+R,MAG9FpT,EAAatB,UAAUuY,YAAc,SAAU5N,EAAOvF,GAClD,MAAOtF,MAAK2a,QAAQ9P,EAAOvF,EAAK,IAEpC9D,EAAatB,UAAUwY,cAAgB,SAAU7N,EAAOvF,GACpD,MAAOtF,MAAK2a,QAAQ9P,EAAOvF,EAAK,KAEpC9D,EAAatB,UAAUwK,WAAa,SAAUsQ,EAAOha,GACjD,MAAOga,GAAM7Q,MAAMnJ,GAAGia,OAAOD,EAAM7Q,MAAM,EAAGnJ,KAEhDQ,EAAatB,UAAU2O,OAAS,SAAUF,EAAM3N,EAAG6L,EAAGrK,EAAKD,GACvD,GAAI2Y,GAASla,EACTkF,EAAQ,GAAIrD,OAAM8L,EACtB,KAAK1L,oBAAkBjD,KAAKoN,oBAAsBnK,oBAAkB4J,GAAI,CACpE,KAAO7M,KAAKmb,WAAW,GAAItY,OAAM8L,GAAOuM,EAAQ1Y,EAAKD,IACjD2Y,GAAUla,CAEd,IAAIoa,GAAa,GAAIvY,MAAKqD,EAAM6N,QAAQ7N,EAAMiK,UAAY+K,GAC1DA,IAAWE,GAAc5Y,IAAQ4Y,GAAc7Y,EAAO2Y,IAAWla,EAAIA,EAAIA,EAAIA,EAAIka,EAErFvM,EAAKoF,QAAQpF,EAAKwB,UAAY+K,IAElC1Z,EAAatB,UAAUib,WAAa,SAAUxM,EAAMuM,EAAQ1Y,EAAKD,GAC7D,GAAI2D,GAAQ,GAAIrD,MAAK8L,EAAKoF,QAAQpF,EAAKwB,UAAY+K,IAC/ClG,KACAnD,GAAa,CACjB,MAAM5O,oBAAkBiD,IAAUA,EAAMoK,gBAAkBrN,oBAAkBjD,KAAKqG,cAAgBrG,KAAKqG,YAAYiK,YAAa,CAQ3H0E,GAN0B,cAAtBhV,KAAK2C,aACI3C,KAAK4P,WAAW1J,GAGhBlG,KAAK6P,cAAcC,kBAAkB9P,KAAKqG,YAAaH,IAEhDmV,OAAO,SAAU1Z,GACjC,MAAOA,GAAQ8B,UAAUmI,SAASxK,SAItC4T,GAAahV,KAAKoN,iBAAiBhD,iBAAiB,MAAQhJ,EAEhE,KAAK8E,QAAsBA,OACnB8O,EAAWrU,OACX,IAAK,GAAIK,GAAI,EAAGA,EAAIgU,EAAWrU,UAE3BkR,GAAe3L,IAAW,GAAIrD,MAAK8D,SAASqO,EAAWhU,GAAG4H,GAAI,KAF3B5H,KAS/C,MAAO6Q,IAEXrQ,EAAatB,UAAUyZ,WAAa,SAAUpa,GAC1C,GAAIoP,GACA2M,EAAU,GAAIzY,MAAK7C,KAAKoG,WAAW7G,GACvCoP,GAAO,EAEP,KADA,GAAIqF,GAAQsH,EAAQhL,WACbgL,EAAQhL,aAAe0D,KACxBrF,EACF2M,EAAQvH,QAAQpF,EAEpB,OAAOA,GAAO,GAElBnN,EAAatB,UAAU4Z,cAAgB,SAAUnL,EAAMiG,GACnDjG,EAAKyF,YAAYQ,GACjB5U,KAAKmD,eAAgB+C,MAAO,GAAIrD,MAAK7C,KAAKoG,WAAWuI,MAAU,IAEnEnN,EAAatB,UAAU6Z,YAAc,SAAUpL,EAAMzI,GACjDyI,EAAKyF,YAAYlO,EAAMsI,cAAetI,EAAMoK,WAAY3B,EAAKwB,WACzDjK,EAAMoK,aAAe3B,EAAK2B,aAC1B3B,EAAKoF,QAAQ,GACb/T,KAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWF,KAEhDlG,KAAKmD,eAAgB+C,MAAO,GAAIrD,MAAK7C,KAAKoG,WAAWuI,MAAU,IAEnEnN,EAAatB,UAAUqY,aAAe,SAAU1N,EAAOvF,GAWnD,MATIuF,GAAM2D,cAAgBlJ,EAAIkJ,cACjB,EAEJ3D,EAAM2D,cAAgBlJ,EAAIkJ,eACrB,EAGD3D,EAAMyF,aAAehL,EAAIgL,WAAa,EAAIzF,EAAMyF,WAAahL,EAAIgL,WAAa,GAAK,GAIpG9O,EAAatB,UAAUkG,WAAa,SAAUmV,GAC1C,MAAIA,aAAmB1Y,MACX0Y,EAAQC,cAGR,GAAKD,GAGrB/Z,EAAatB,UAAUqX,UAAY,WACZ,WAAfvX,KAAK6K,OAAqC,SAAf7K,KAAK6K,OAChC7K,KAAKmD,eAAgB0H,MAAO,UAAW,GAExB,WAAf7K,KAAKgN,OAAqC,SAAfhN,KAAKgN,OAChChN,KAAKmD,eAAgB6J,MAAO,UAAW,GAEvChN,KAAKiN,cAAcjN,KAAKgN,OAAShN,KAAKiN,cAAcjN,KAAK6K,QACzD7K,KAAKmD,eAAgB6J,MAAO,UAAW,IAG/CxL,EAAatB,UAAUiQ,QAAU,SAAUxB,EAAMyB,GAI7C,MAHIA,KACAzB,EAAO,GAAI9L,MAAK8L,EAAK8M,eAAe,SAAWC,SAAUtL,MAEtDzB,GAEXvO,GACIub,WAAS,GAAI9Y,MAAK,KAAM,EAAG,KAC5BrB,EAAatB,UAAW,UAAO,IAClCE,GACIub,YAAS,IACVna,EAAatB,UAAW,cAAW,IACtCE,GACIub,WAAS,OACVna,EAAatB,UAAW,eAAY,IACvCE,GACIub,WAAS,GAAI9Y,MAAK,KAAM,GAAI,MAC7BrB,EAAatB,UAAW,UAAO,IAClCE,GACIub,WAAS,OACVna,EAAatB,UAAW,qBAAkB,IAC7CE,GACIub,WAAS,cACVna,EAAatB,UAAW,mBAAgB,IAC3CE,GACIub,WAAS,UACVna,EAAatB,UAAW,YAAS,IACpCE,GACIub,WAAS,UACVna,EAAatB,UAAW,YAAS,IACpCE,GACIub,YAAS,IACVna,EAAatB,UAAW,iBAAc,IACzCE,GACIub,WAAS,aACVna,EAAatB,UAAW,eAAY,IACvCE,GACIub,YAAS,IACVna,EAAatB,UAAW,sBAAmB,IAC9CE,GACIub,WAAS,UACVna,EAAatB,UAAW,sBAAmB,IAC9CE,GACIub,YAAS,IACVna,EAAatB,UAAW,wBAAqB,IAChDE,GACIub,WAAS,OACVna,EAAatB,UAAW,iBAAc,IACzCE,GACIub,WAAS,OACVna,EAAatB,UAAW,2BAAwB,IACnDE,GACIwb,WACDpa,EAAatB,UAAW,cAAW,IACtCE,GACIwb,WACDpa,EAAatB,UAAW,gBAAa,IACxCE,GACIwb,WACDpa,EAAatB,UAAW,gBAAa,IACxCE,GACIwb,WACDpa,EAAatB,UAAW,oBAAiB,IAC5CsB,EAAepB,GACXyb,yBACDra,IAELsa,aAcEC,EAA0B,SAAUta,GAUpC,QAASsa,GAASra,EAASC,GACvB,MAAOF,GAAOI,KAAK7B,KAAM0B,EAASC,IAAY3B,KA4hBlD,MAtiBAX,GAAU0c,EAAUta,GAkBpBsa,EAAS7b,UAAUmC,OAAS,WAIxB,GAH0B,YAAtBrC,KAAK2C,kBAAqD8U,KAAvBzX,KAAK6P,eACxCmM,aAAW,8EAEXhc,KAAKic,kBAA2C,gBAAhBjc,MAAKiQ,SAAwBhN,oBAAkBjD,KAAKiQ,SAAWjQ,KAAKiQ,OAAOtP,OAAS,EAAG,CAGvH,IAAK,GAFDub,MACApJ,KACKqJ,EAAQ,EAAGA,EAAQnc,KAAKiQ,OAAOtP,OAAQwb,KACK,IAA7CD,EAAWlJ,SAAShT,KAAKiQ,OAAOkM,MAChCD,EAAWnS,MAAM/J,KAAKiQ,OAAOkM,IAC7BrJ,EAAW/I,KAAK/J,KAAKiQ,OAAOkM,IAGpCnc,MAAKmD,eAAgB8M,OAAQ6C,IAAc,EAC3C,KAAK,GAAIpM,GAAQ,EAAGA,EAAQ1G,KAAKiQ,OAAOtP,OAAQ+F,IAC5C,IAAK1G,KAAKmG,eAAenG,KAAKiQ,OAAOvJ,IACjC,GAAoC,gBAAxB1G,MAAKiQ,OAAOvJ,IAAwB1G,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAKiQ,OAAOvJ,MAAW,CAChH,GAAI0V,GAAW,GAAIvZ,MAAK7C,KAAKoG,WAAWpG,KAAKiQ,OAAOvJ,IACpD1G,MAAKiQ,OAAOmC,OAAO1L,EAAO,GAC1B1G,KAAKiQ,OAAOmC,OAAO1L,EAAO,EAAG0V,OAG7Bpc,MAAKiQ,OAAOmC,OAAO1L,EAAO,EAItC1G,MAAKmD,eAAgB+C,MAAOlG,KAAKiQ,OAAOjQ,KAAKiQ,OAAOtP,OAAS,KAAM,GACnEX,KAAKqc,eAAiBrc,KAAKiQ,OAAOtP,OAStC,GAPAX,KAAKiG,eACLjG,KAAK+G,eACwB,aAAzB/G,KAAKwD,kBACLxD,KAAKsc,UAAUtc,KAAKwE,SACpBxE,KAAKuc,SAASvc,KAAKwc,WAEvB/a,EAAOvB,UAAUmC,OAAOR,KAAK7B,MACA,aAAzBA,KAAKwD,gBAAgC,CACrC,GAAIiZ,GAAOnY,UAAQtE,KAAK2B,QAAS,OAC7B8a,IACA5Q,eAAanI,IAAI+Y,EAAM,QAASzc,KAAK0c,iBAAiBhQ,KAAK1M,OAE/DA,KAAK2c,YAAY3c,KAAK4c,sBAE1B5c,KAAK6c,kBAETd,EAAS7b,UAAUoc,UAAY,SAAUQ,GAChCA,EAID9V,eAAahH,KAAK2B,SAAUP,GAH5B6F,YAAUjH,KAAK2B,SAAUP,IAMjC2a,EAAS7b,UAAUqc,SAAW,SAAUQ,EAAaC,GAC5C/Z,oBAAkB+Z,KACnBA,EAAeA,EAAYC,QAAQ,OAAQ,KAAMC,QAEhDja,oBAAkB8Z,KACnBA,EAAeA,EAAYE,QAAQ,OAAQ,KAAMC,QAEhDja,oBAAkB+Z,IAAgC,KAAhBA,GACnChW,eAAahH,KAAK2B,SAAUqb,EAAYtP,MAAM,MAE7CzK,oBAAkB8Z,IACnB9V,YAAUjH,KAAK2B,SAAUob,EAAYrP,MAAM,OAGnDqO,EAAS7b,UAAUid,iBAAmB,WAClC,GAAIC,GAAe,GAAIva,MAAK7C,KAAKkG,MAAMsI,cAAe,EAAG,GAAG6G,oBACxDgI,EAAc,GAAIxa,MAAK7C,KAAKkG,MAAMsI,cAAe,EAAG,GAAG6G,mBAC3D,OAAQrV,MAAKkG,MAAMmP,oBAAsBF,KAAK3S,IAAI6a,EAAaD,IAEnErB,EAAS7b,UAAUyc,YAAc,SAAUW,GACvC,IAAKra,oBAAkBjD,KAAK4c,uBAAyB5c,KAAKkG,MAAO,CAC7D,GAEIqX,GAFqBD,GACA,GAAIza,OAAOwS,oBAAsB,EAE1DkI,GAAevd,KAAKmd,mBAAqBI,IAAiBA,EAC1Dvd,KAAKkG,MAAQ,GAAIrD,MAAK7C,KAAKkG,MAAMsT,UAA4B,GAAf+D,EAAoB,GAAK,OAG/ExB,EAAS7b,UAAUwc,iBAAmB,WAClC1c,KAAKmD,eAAgB+C,MAAO,OAAQ,IAExC6V,EAAS7b,UAAU+F,aAAe,WACJ,gBAAfjG,MAAKkG,OACZlG,KAAKmD,eAAgB+C,MAAOlG,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAKkG,WAAY,GAE9FzE,EAAOvB,UAAU+F,aAAapE,KAAK7B,KAAMA,KAAKkG,QACzCjD,oBAAkBjD,KAAKkG,QAAUlG,KAAKuC,KAAOvC,KAAKwC,KAAOxC,KAAKkG,OAASlG,KAAKuC,KAAOvC,KAAKkG,OAASlG,KAAKwC,MACvGxC,KAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWpG,KAAKkG,SAEjDqP,OAAOvV,KAAKkG,QACZlG,KAAKmD,eAAgB+C,MAAO,OAAQ,IAG5C6V,EAAS7b,UAAU6G,aAAe,WACD,aAAzB/G,KAAKwD,mBACAP,oBAAkBjD,KAAKkG,QAAUlG,KAAKkG,OAASlG,KAAKuC,KAAOvC,KAAKuC,KAAOvC,KAAKwC,KAC7ExC,KAAKmD,eAAgB+C,MAAOlG,KAAKuC,MAAO,GACxCvC,KAAKwd,aAAgBtX,MAAOlG,KAAKkG,SAG5BjD,oBAAkBjD,KAAKkG,QAAUlG,KAAKkG,OAASlG,KAAKwC,KAAOxC,KAAKuC,KAAOvC,KAAKwC,MAC7ExC,KAAKmD,eAAgB+C,MAAOlG,KAAKwC,MAAO,GACxCxC,KAAKwd,aAAgBtX,MAAOlG,KAAKkG,SAIhB,aAAzBlG,KAAKwD,iBAAmCP,oBAAkBjD,KAAKkG,OAW/DzE,EAAOvB,UAAU6G,aAAalF,KAAK7B,KAAMA,KAAKkG,QAVzCjD,oBAAkBjD,KAAKkG,QAAUlG,KAAKkG,MAAQlG,KAAKuC,KAAOvC,KAAKuC,KAAOvC,KAAKwC,IAC5Ef,EAAOvB,UAAU6G,aAAalF,KAAK7B,KAAMA,KAAKuC,MAGzCU,oBAAkBjD,KAAKkG,QAAUlG,KAAKkG,MAAQlG,KAAKwC,KAAOxC,KAAKuC,KAAOvC,KAAKwC,KAC5Ef,EAAOvB,UAAU6G,aAAalF,KAAK7B,KAAMA,KAAKwC,MAQ9DuZ,EAAS7b,UAAUud,iBAAmB,SAAUvX,GAC5C,GAAIwM,GAAY,GAAI7P,KAapB,OAZKI,qBAAkBjD,KAAKoQ,YACxBsC,EAAYjR,EAAOvB,UAAUiQ,QAAQtO,KAAK7B,KAAM0S,EAAW1S,KAAKoQ,WAEhElK,GAASjD,oBAAkBjD,KAAKoQ,WAChCsC,EAAUnP,SAAS2C,EAAMsK,YACzBkC,EAAUgL,WAAWxX,EAAMuK,cAC3BiC,EAAU9P,WAAWsD,EAAMwK,cAC3BgC,EAAUiL,gBAAgBzX,EAAMyK,oBAGhC+B,EAAY,GAAI7P,MAAK6P,EAAUlE,cAAekE,EAAUpC,WAAYoC,EAAUvC,UAAW,EAAG,EAAG,EAAG,GAE/FuC,GAEXqJ,EAAS7b,UAAU4L,iBAAmB,SAAUe,GAC5C,GAAI7M,KAAK+I,gBAAiB,CACtB,GAAI2J,GAAY1S,KAAKyd,iBAAiBzd,KAAKkG,MAI3C,IAHAlG,KAAKmD,eAAgB+C,MAAOwM,IAAa,GACzC1S,KAAKiC,gBAAiB,EACtBjC,KAAK4d,iBAAmB/Q,EACpB7M,KAAKic,iBAAkB,CACvB,GAAInJ,GAAa9S,KAAK8S,WAAW9S,KAAKiQ,OACjCxO,GAAOvB,UAAU8Z,iBAAiBnY,KAAK7B,KAAM0S,EAAW1S,KAAKiQ,UAC9D6C,EAAW/I,KAAK2I,GAChB1S,KAAKmD,eAAgB8M,OAAQ6C,KAGrCrR,EAAOvB,UAAU4L,iBAAiBjK,KAAK7B,KAAM6M,EAAG,GAAIhK,OAAM7C,KAAKkG,UAGvE6V,EAAS7b,UAAUuM,gBAAkB,SAAUI,GAC3CpL,EAAOvB,UAAUuM,gBAAgB5K,KAAK7B,KAAM6M,EAAG7M,KAAKkG,MAAOlG,KAAKic,mBAQpEF,EAAS7b,UAAU6O,UAAY,WAC3B,GAAInN,GAAQ5B,IACZA,MAAK6d,cAAgB,SAAUhR,GAC3BjL,EAAMkc,cAAcjR,IAExB7M,KAAKuX,YACL9V,EAAOvB,UAAU6O,UAAUlN,KAAK7B,KAAMA,KAAKkG,QAM/C6V,EAAS7b,UAAUwE,cAAgB,WAC/B1E,KAAK+d,aAAe/d,KAAKkG,MACzBlG,KAAKge,iBAAmBhe,KAAKkG,MAC7BzE,EAAOvB,UAAUwE,cAAc7C,KAAK7B,OAExC+b,EAAS7b,UAAUoP,WAAa,SAAUC,GACtC,MAAO9N,GAAOvB,UAAUoP,WAAWzN,KAAK7B,KAAMuP,IAElDwM,EAAS7b,UAAU8K,aAAe,SAAU6B,EAAG3G,EAAO4G,GAClDrL,EAAOvB,UAAU8K,aAAanJ,KAAK7B,KAAM6M,EAAG7M,KAAKkG,MAAO4G,IAE5DiP,EAAS7b,UAAU0P,WAAa,SAAUvJ,EAAaH,EAAO+X,EAAehO,EAAQnD,EAAcD,GAC/F,GAAIqR,GAAWzc,EAAOvB,UAAU0P,WAAW/N,KAAK7B,KAAMqG,EAAarG,KAAKkG,MAAOlG,KAAKic,iBAAkBjc,KAAKiQ,OAAQnD,EAAcD,EAIjI,OAHI7M,MAAKic,kBACLxa,EAAOvB,UAAUoX,eAAezV,KAAK7B,KAAMA,KAAKic,iBAAkBjc,KAAKiQ,QAEpEiO,GAEXnC,EAAS7b,UAAU4K,YAAc,SAAU+B,GACb,cAAtB7M,KAAK2C,aACLlB,EAAOvB,UAAU4K,YAAYjJ,KAAK7B,KAAM6M,EAAG7M,KAAKkG,OAGhDlG,KAAK6P,cAAcsO,mBAAmBtR,EAAG7M,KAAKkG,QAGtD6V,EAAS7b,UAAU6K,cAAgB,SAAU8B,GACf,cAAtB7M,KAAK2C,aACLlB,EAAOvB,UAAU6K,cAAclJ,KAAK7B,KAAM6M,EAAG7M,KAAKkG,OAGlDlG,KAAK6P,cAAcuO,oBAAoBvR,EAAG7M,KAAKkG,QAGvD6V,EAAS7b,UAAU6P,eAAiB,SAAUyF,EAAUC,EAAOC,EAAS7I,GAC1C,cAAtB7M,KAAK2C,aACLlB,EAAOvB,UAAU6P,eAAelO,KAAK7B,KAAMwV,EAAUC,EAAOC,EAAS7I,EAAG7M,KAAKkG,OAG7ElG,KAAK6P,cAAcG,sBAAsBwF,EAAUC,EAAOC,EAAS7I,EAAG7M,KAAKkG,OAE/ElG,KAAKwd,aAAgBtX,MAAOlG,KAAKkG,MAAO+J,OAAQjQ,KAAKiQ,QACrDjQ,KAAK6d,iBAET9B,EAAS7b,UAAUqS,aAAe,SAAU1F,GACxC,GAAIsJ,GAAMtJ,EAAE2F,aAEZ,IADAxS,KAAK+B,gBAAiB,EAClBoU,EAAI1S,UAAUmI,SAAS1K,GACvB,GAAIlB,KAAKic,iBAAkB,CACvB,GAAInJ,GAAa9S,KAAK8S,WAAW9S,KAAKiQ,SACsC,IAAxE6C,EAAWhM,WAAWkM,QAAQhT,KAAKoW,WAAWvJ,EAAG,MAAM/F,aACvDgM,EAAW/I,KAAK/J,KAAKoW,WAAWvJ,EAAG,OACnC7M,KAAKmD,eAAgB8M,OAAQ6C,IAAc,GAC3C9S,KAAKmD,eAAgB+C,MAAOlG,KAAKiQ,OAAOjQ,KAAKiQ,OAAOtP,OAAS,KAAM,IAGnEX,KAAKoC,eAAgB,MAIzBpC,MAAKmD,eAAgB+C,MAAOlG,KAAKoW,WAAWvJ,EAAG,QAAS,EAGhE,IAAIwR,GAAYre,KAAK+M,aACrBtL,GAAOvB,UAAUqS,aAAa1Q,KAAK7B,KAAM6M,EAAG7M,KAAKkG,OAC7ClG,KAAKic,kBAAoBjc,KAAKqG,cAAgBrG,KAAKkG,QAClDjD,oBAAkBjD,KAAKoN,iBAAiBhD,iBAAiB,IAAM7I,GAAa,KAAqB,SAAd8c,GACpFre,KAAKoN,iBAAiBhD,iBAAiB,IAAM7I,GAAa,GAAGkC,UAAU4T,OAAO9V,IAGtFwa,EAAS7b,UAAUuW,WAAa,SAAU9I,EAAMd,EAAGoP,EAAkBnP,GACjErL,EAAOvB,UAAUuW,WAAW5U,KAAK7B,KAAM2N,EAAMd,EAAG7M,KAAKic,iBAAkBnP,IAQ3EiP,EAAS7b,UAAUsD,cAAgB,WAE/B,MADA/B,GAAOvB,UAAUsD,cAAc3B,KAAK7B,MAC7B,YAQX+b,EAAS7b,UAAU4W,eAAiB,WAChCrV,EAAOvB,UAAU4W,eAAejV,KAAK7B,KACrC,IAAI+W,IAAa,QAAS,SAC1B,OAAO/W,MAAKgX,aAAaD,IAW7BgF,EAAS7b,UAAU+W,kBAAoB,SAAUC,EAASC,GACtDnX,KAAK8B,OAAS,GACd9B,KAAKsC,gBAAgBtC,KAAKuC,IAAKvC,KAAKwC,IACpC,KAAK,GAAImH,GAAK,EAAGC,EAAKnK,OAAOoK,KAAKqN,GAAUvN,EAAKC,EAAGjJ,OAAQgJ,IAExD,OADWC,EAAGD,IAEV,IAAK,QACG3J,KAAKgC,iBACwB,gBAAlBkV,GAAQhR,MACflG,KAAKmD,eAAgB+C,MAAO,GAAIrD,MAAK7C,KAAKoG,WAAW8Q,EAAQhR,UAAW,GAGxEgR,EAAQhR,MAAQ,GAAIrD,MAAK7C,KAAKoG,WAAW8Q,EAAQhR,QAEjDqP,OAAOvV,KAAKkG,QACZlG,KAAKmD,eAAgB+C,MAAOiR,EAAQjR,QAAS,GAEjDlG,KAAKse,SAET,MACJ,KAAK,SACD,GAAIte,KAAKgC,eAAgB,CACrB,GAA8B,gBAAnBkV,GAAQjH,QAAiD,gBAAnBiH,GAAQjH,OACrDjQ,KAAKmD,eAAgB8M,OAAQ,OAAQ,OAEpC,CAED,IAAK,GADD6C,GAAa9S,KAAK8S,WAAW9S,KAAKiQ,QAC7BvJ,EAAQ,EAAGA,EAAQoM,EAAWnS,OAAQ+F,IAAS,CACpD,GAAI6X,GAAWzL,EAAWpM,EACtB1G,MAAKmG,eAAeoY,KAAc9c,EAAOvB,UAAU8Z,iBAAiBnY,KAAK7B,KAAMue,EAAUzL,IACzFA,EAAW/I,KAAKwU,GAGxBve,KAAKmD,eAAgB8M,OAAQ6C,IAAc,GACvC9S,KAAKiQ,OAAOtP,OAAS,GACrBX,KAAKmD,eAAgB+C,MAAOgR,EAAQjH,OAAOiH,EAAQjH,OAAOtP,OAAS,KAAM,GAGjFX,KAAKsX,eAAetX,KAAKic,iBAAkBjc,KAAKiQ,QAChDjQ,KAAKse,SAET,KACJ,KAAK,mBACGte,KAAKgC,iBACLhC,KAAKmD,eAAgB8Y,iBAAkB/E,EAAQ+E,mBAAoB,GACnEjc,KAAKse,SAET,MACJ,KAAK,UACDte,KAAKsc,UAAUtc,KAAKwE,QACpB,MACJ,KAAK,WAC4B,aAAzBxE,KAAKwD,iBACLxD,KAAKuc,SAASrF,EAAQsF,SAAUrF,EAAQqF,SAE5C,MACJ,SACI/a,EAAOvB,UAAU+W,kBAAkBpV,KAAK7B,KAAMkX,EAASC,EAASnX,KAAKic,iBAAkBjc,KAAKiQ,QAGxGjQ,KAAKkC,cAAgBlC,KAAKmC,WAAanC,KAAKkC,eAAiBlC,KAAKkC,cAAgBlC,KAAKkC,eAO3F6Z,EAAS7b,UAAUyY,QAAU,WAEzB,GADAlX,EAAOvB,UAAUyY,QAAQ9W,KAAK7B,MACD,aAAzBA,KAAKwD,gBAAgC,CACrC,GAAIiZ,GAAOnY,UAAQtE,KAAK2B,QAAS,OAC7B8a,IACA5Q,eAAawL,OAAOoF,EAAM,QAASzc,KAAK0c,iBAAiBhQ,KAAK1M,SAa1E+b,EAAS7b,UAAUgN,WAAa,SAAUS,EAAMgB,EAAM7B,GAClD9M,KAAK+G,eACLtF,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM2N,EAAMgB,EAAM7B,IASvDiP,EAAS7b,UAAU6M,YAAc,WAC7B,MAAOtL,GAAOvB,UAAU6M,YAAYlL,KAAK7B,OAU7C+b,EAAS7b,UAAUse,QAAU,SAAUrE,GACnC,GAAqB,gBAAVA,IAAuC,gBAAVA,GAAoB,CACxD,GAAIrH,GAAa9S,KAAK8S,WAAW9S,KAAKiQ,OACtC,IAAqB,gBAAVkK,IAAsB,EAAQxZ,OAAS,EAE9C,IAAK,GADD8d,GAAYtE,EACPnZ,EAAI,EAAGA,EAAIyd,EAAU9d,OAAQK,IAC9BhB,KAAKmG,eAAesY,EAAUzd,MAAQS,EAAOvB,UAAU8Z,iBAAiBnY,KAAK7B,KAAMye,EAAUzd,GAAI8R,MAC5F7P,oBAAkB6P,IAAeA,EAAWnS,OAAS,EACtDmS,EAAW/I,KAAK0U,EAAUzd,IAG1B8R,GAAc,GAAIjQ,OAAM4b,EAAUzd,UAM1ChB,MAAKmG,eAAegU,KAAW1Y,EAAOvB,UAAU8Z,iBAAiBnY,KAAK7B,KAAMma,EAAOrH,MAC9E7P,oBAAkB6P,IAAeA,EAAWnS,OAAS,EACtDmS,EAAW/I,QAGX+I,GAAc,GAAIjQ,OAAMsX,IAIpCna,MAAKmD,eAAgB8M,OAAQ6C,IAAc,GACvC9S,KAAKic,kBACLjc,KAAKmD,eAAgB+C,MAAOlG,KAAKiQ,OAAOjQ,KAAKiQ,OAAOtP,OAAS,KAAM,GAEvEX,KAAKsX,eAAetX,KAAKic,iBAAkBnJ,GAC3C9S,KAAKse,SACLte,KAAKwd,aAAgBtX,MAAOlG,KAAKkG,MAAO+J,OAAQjQ,KAAKiQ,QACrDjQ,KAAK6d,kBAUb9B,EAAS7b,UAAUwe,WAAa,SAAUvE,GACtC,GAAqB,gBAAVA,IAAuC,gBAAVA,KAAuBlX,oBAAkBjD,KAAKiQ,SAAWjQ,KAAKiQ,OAAOtP,OAAS,EAAG,CACrH,GAAImS,GAAa9S,KAAK8S,WAAW9S,KAAKiQ,OACtC,IAAqB,gBAAVkK,IAAuB,EAAQxZ,OAAS,EAE/C,IAAK,GADD8d,GAAYtE,EACPzT,EAAQ,EAAGA,EAAQ+X,EAAU9d,OAAQ+F,IAC1C,IAAS1F,EAAI,EAAGA,EAAI8R,EAAWnS,OAAQK,KAC9B8R,EAAW9R,KAAQyd,EAAU/X,IAC9BoM,EAAWV,OAAOpR,EAAG,OAMjC,KAAK,GAAIA,GAAI,EAAGA,EAAI8R,EAAWnS,OAAQK,KAC9B8R,EAAW9R,KAAQmZ,GACpBrH,EAAWV,OAAOpR,EAAG,EAIjChB,MAAKmD,eAAgB8M,OAAQ6C,IAAc,GAC3C9S,KAAKse,SACDte,KAAKic,kBACLjc,KAAKmD,eAAgB+C,MAAOlG,KAAKiQ,OAAOjQ,KAAKiQ,OAAOtP,OAAS,KAAM,GAEvEX,KAAKwd,aAAgBtX,MAAOlG,KAAKkG,MAAO+J,OAAQjQ,KAAKiQ,QACrDjQ,KAAK6d,kBAUb9B,EAAS7b,UAAUye,aAAe,SAAUhQ,GACxC,GAAIrL,GAAY,GAAIT,OAAM8L,EAC1B3O,MAAKmD,eAAgB+C,MAAO5C,IAAa,GACzC7B,EAAOvB,UAAU4L,iBAAiBjK,KAAK7B,KAAM,KAAMsD,GAAW,IAElEyY,EAAS7b,UAAUoe,OAAS,WACxBte,KAAKiG,eACLjG,KAAK+G,eACLtF,EAAOvB,UAAU8X,eAAenW,KAAK7B,OAEzC+b,EAAS7b,UAAU+N,WAAa,SAAUpB,EAAG8B,EAAMhN,GAC/CF,EAAOvB,UAAU+N,WAAWpM,KAAK7B,KAAM6M,EAAG8B,EAAMhN,EAAS3B,KAAKic,iBAAkBjc,KAAKiQ,QACjFjQ,KAAKic,mBAAqBhZ,oBAAkBjD,KAAKiQ,SAAWjQ,KAAKiQ,OAAOtP,OAAS,GACjFX,KAAKmD,eAAgB+C,MAAOlG,KAAKiQ,OAAOjQ,KAAKiQ,OAAOtP,OAAS,KAAM,GAEvEX,KAAKwd,aAAgBtX,MAAOlG,KAAKkG,MAAO+J,OAAQjQ,KAAKiQ,QACrDjQ,KAAK6d,cAAchR,IAGvBkP,EAAS7b,UAAU0e,YAAc,SAAU/R,KAClC7M,KAAKkG,OAASlG,KAAKkG,MAAM2O,cAAgB7U,KAAK+d,eAAiB/d,KAAK+d,aAAalJ,YAC/E7U,KAAKic,oBACJjc,KAAKmC,WAAanC,KAAKkC,cACvBlC,KAAKkC,eAAgB,EAGrBlC,KAAKua,QAAQ,SAAUva,KAAKwd,aAEhCxd,KAAK+d,aAAe,GAAIlb,OAAM7C,KAAKkG,SAG3C6V,EAAS7b,UAAU4d,cAAgB,SAAUjR,IACpC5J,oBAAkBjD,KAAK4d,mBAAqB5d,KAAKiC,iBAClD4K,EAAI7M,KAAK4d,iBACT5d,KAAKiC,gBAAiB,GAE1BjC,KAAKwd,YAAY9C,MAAQ7N,GAAK,KAC9B7M,KAAKwd,YAAYqB,cAAgB5b,oBAAkB4J,GAC9C5J,oBAAkBjD,KAAKkG,QACxBlG,KAAKmD,eAAgB+C,MAAOlG,KAAKkG,QAAS,GAGzClG,KAAKic,mBAAqBjc,KAAKkG,QAAU4Y,OAAOC,MAAS9b,oBAAkBjD,KAAKkG,QAChFjD,oBAAkBjD,KAAK+d,iBAAuC,OAAtB/d,KAAK+d,cAC1CxI,OAAOvV,KAAKkG,QAGVjD,oBAAkBjD,KAAKiQ,SAAWjQ,KAAKqc,iBAAmBrc,KAAKiQ,OAAOtP,SAC5EX,KAAK4e,YAAY/R,GACjB7M,KAAKqc,eAAiBrc,KAAKiQ,OAAOtP,QAJlCX,KAAK4e,YAAY/R,IAOzBzM,GACIub,WAAS,OACVI,EAAS7b,UAAW,YAAS,IAChCE,GACIub,WAAS,OACVI,EAAS7b,UAAW,aAAU,IACjCE,GACIub,YAAS,IACVI,EAAS7b,UAAW,uBAAoB,IAC3CE,GACIwb,WACDG,EAAS7b,UAAW,aAAU,IACjC6b,EAAW3b,GACPyb,yBACDE,IAELva,GCphFEwd,EAAyB,WACzB,QAASA,GAAQC,GACbjf,KAAKkf,iBAAmBD,EA+gB5B,MA7gBAD,GAAQ9e,UAAUsD,cAAgB,WAC9B,MAAO,WAEXwb,EAAQ9e,UAAUif,mBAAqB,SAAUxQ,EAAMhB,GACnD,GAAI7K,GAAY,GAAIC,wBAAqB/C,KAAKkf,iBAAiBlc,OAC/D,QAAQ2K,GACJ,IAAK,OACD3N,KAAKkf,iBAAiB9W,mBAAmB+C,YAAcrI,EAAU0O,WAAW7C,GAAQ7G,KAAM,WAAY8J,OAAQ,WAAYgB,SAAU,WACpI,MACJ,KAAK,SACD5S,KAAKkf,iBAAiB9W,mBAAmB+C,YAAcrI,EAAU0O,WAAW7C,GAAQ7G,KAAM,WAAY8J,OAAQ,OAAQgB,SAAU,cAG5IoM,EAAQ9e,UAAU4P,kBAAoB,SAAUzJ,EAAaH,EAAOoH,EAAgB2C,GAChF,GAGIX,GAHAI,KAEAH,EAAY,GAAI1M,MAAK7C,KAAKof,eAAe/Y,GAE7CrG,MAAKmf,mBAAmB9Y,EAAa,OACrC,IAAIiQ,GAActW,KAAKuW,eAAehH,GAClC8P,EAAkBrf,KAAKwW,YAAYF,EAAY1B,KAAM0B,EAAYtC,MAAO,GACxE3D,EAAeiG,EAAYtC,KAE/B,KADAzE,EAAY8P,EACL9P,EAAUqB,WAAa5Q,KAAKkf,iBAAiBhc,gBAChDlD,KAAKkf,iBAAiBrO,aAAatB,GAAW,MAElD,KAAK,GAAIuB,GAAM,EAAGA,EAXD,KAWqBA,EAAK,CACvC,GAAIC,GAAU/Q,KAAKkf,iBAAiB7a,cAAc,MAAQqD,UAnC3D,WAoCKsJ,EAAahR,KAAKkf,iBAAiB7a,cAAc,OACjDyM,GAAM,GAAM,GAAK9Q,KAAKkf,iBAAiB1U,aACvCwG,EAAW7F,YAAc,GAAKnL,KAAKkf,iBAAiB9N,QAAQ7B,GAC5DwB,EAAQ1I,YAAY2I,GACpB/J,YAAU8J,GA9CT,iBA+CDrB,EAAO3F,KAAKgH,IAEhBzB,EAAa,GAAIzM,OAAM0M,GACvBA,EAAYvP,KAAKkf,iBAAiB5P,WAAWC,EAC7C,IAAI8B,IAAsBvJ,KAAM,WAAYwJ,SAAU,OAAQsB,SAAU,WACpEjE,EAAO3O,KAAKkf,iBAAiBpc,UAAUyO,UAAUvR,KAAKkf,iBAAiBpc,UAAU0O,WAAWjC,EAAW8B,GAAoBA,GAC3HI,EAAQzR,KAAKsf,eAAe/P,GAC5BpB,EAAQnO,KAAKkf,iBAAiBpc,UAAU0O,WAAWjC,GAAazH,KAAM,OAAQwJ,SAAU,OAAQsB,SAAU,YAC1GjB,EAAU3R,KAAKkf,iBAAiB7a,cAAc,OAClDsN,GAAQxG,YAAcnL,KAAKkf,iBAAiBpc,UAAU0O,WAAWjC,GAAazH,KAAM,OAAQwJ,SAAU,IAAKsB,SAAU,WACrH,IAAIrO,GAAYvE,KAAKkf,iBAAiB3c,IAAMgN,GAAevP,KAAKkf,iBAAiB1c,IAAM+M,CACnFhL,IACA0C,YAAUwK,GA9DX,cA+DCxK,YAAUwK,GA9DZ,cAiEEE,EAAQxN,aAAa,QAAS,GAAKgK,GAGnCkC,IADmBrQ,KAAKuW,eAAehH,GACLyE,OAClC/M,YAAUwK,GA1ET,iBA4EsB,IAAvBlC,EAAUqB,UAAyC,IAAvBrB,EAAUqB,UACtC3J,YAAUwK,GAvEZ,aAyEFA,EAAMpJ,YAAYsJ,GAClB3R,KAAKkf,iBAAiB7R,mBAClBsB,KAAMY,EACNsC,YAAY,EACZlQ,QAAS8P,EACTK,aAAcvN,EAElB,IAAIwN,GAAW/R,KAAKkf,iBAAiB7R,iBAErC,IADArN,KAAKkf,iBAAiBlN,mBAAmBD,GACrCA,EAASF,WACT,GAAI7R,KAAKkf,iBAAiBjD,kBACtB,IAAKhZ,oBAAkBjD,KAAKkf,iBAAiBjP,SAAWjQ,KAAKkf,iBAAiBjP,OAAOtP,OAAS,EAC1F,IAAK,GAAI+F,GAAQ,EAAGA,EAAQuJ,EAAOtP,OAAQ+F,KACnCwL,GAAmB,GAAIrP,MAAK7C,KAAKkf,iBAAiBpc,UAAU0O,WAAWO,EAASpD,MAAQ7G,KAAM,OAAQwJ,SAAU,MAAOsB,SAAU,iBACjIT,GAAkB,GAAItP,MAAK7C,KAAKkf,iBAAiBpc,UAAU0O,WAAWxR,KAAKkf,iBAAiBjP,OAAOvJ,IAAUoB,KAAM,OAAQwJ,SAAU,MAAOsB,SAAU,gBAEtJ5S,KAAKkf,iBAAiBjP,OAAOmC,OAAO1L,EAAO,GAC3CA,GAAS,OAKhBR,KAAUA,IAAW6L,EAASpD,MACnC3O,KAAKkf,iBAAiB/b,eAAgB+C,MAAO,OAAQ,EAGzDlG,MAAKkf,iBAAiB7R,kBAAkBwE,aAAeJ,EAAMhO,UAAUmI,SAjGxE,gBAkGC3E,YAAUwK,GAtGX,cAuGCxK,YAAUwK,GAtGZ,cAuGOzR,KAAKkf,iBAAiB7R,kBAAkBsB,OAAU3O,KAAKkf,iBAAiB5b,YACzEtD,KAAKkf,iBAAiB7b,eAAgB,GAG9C,IAAIgP,GAAgBZ,EAAMhO,UAAUmI,SAhH/B,iBAiHD0G,EAAcb,EAAMhO,UAAUmI,SA7G/B,aAiHH,IAHK0G,GACDzG,eAAanI,IAAI+N,EAAO,QAASzR,KAAKkf,iBAAiB3M,aAAcvS,KAAKkf,mBAE1Elf,KAAKkf,iBAAiBjD,kBAAqBhZ,oBAAkBjD,KAAKkf,iBAAiBjP,SAClFoC,GAAkBC,EAgBbD,GAAkBC,IAAetS,KAAKkf,iBAAiBzM,WAAWlD,EAAWrJ,GAInFlG,KAAKkf,iBAAiBjM,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAOpL,GAHhFY,YAAUwK,GA/HX,kBA8GiC,CAChC,IAAK,GAAIiB,GAAY,EAAGA,EAAY1S,KAAKkf,iBAAiBjP,OAAOtP,OAAQ+R,IAAa,CAClF,GAAIR,GAAkBlS,KAAKkf,iBAAiBpc,UAAU0O,WAAWjC,GAAazH,KAAM,OAAQwJ,SAAU,QAASsB,SAAU,YACrHT,EAAiBnS,KAAKkf,iBAAiBpc,UAAU0O,WAAWxR,KAAKkf,iBAAiBjP,OAAOyC,IAAc5K,KAAM,OAAQwJ,SAAU,QAASsB,SAAU,WAClJV,KAAoBC,GACpBnS,KAAKkf,iBAAiBzM,WAAWlD,EAAWvP,KAAKkf,iBAAiBjP,OAAOyC,IACzEzL,YAAUwK,GApHnB,cAuHSzR,KAAKkf,iBAAiBjM,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAOpL,GAGpFrG,KAAKkf,iBAAiBjP,OAAOtP,QAAU,GACvCX,KAAKkf,iBAAiBjM,YAAYZ,EAAeC,EAAa/C,EAAWkC,EAAOpL,GASpFsI,EAAKwB,aAAc,GAAItN,OAAOsN,WAAaxB,EAAK2B,cAAe,GAAIzN,OAAOyN,YACtE3B,EAAKH,iBAAkB,GAAI3L,OAAO2L,eAClCvH,YAAUwK,GAnIlB,WAsIAlC,EAAY,GAAI1M,OAAMyM,GACtBI,EAAO3F,KAAK/J,KAAKkf,iBAAiB7R,kBAAkB1L,SACpD3B,KAAKkf,iBAAiBrQ,OAAOU,EAAW,EAAG,KAAMvP,KAAKkf,iBAAiB1c,IAAKxC,KAAKkf,iBAAiB3c,KAEtG,MAAOmN,IAEXsP,EAAQ9e,UAAU8V,mBAAqB,WACnC,GAAInT,MAAK7C,KAAKof,eAAepf,KAAKkf,iBAAiB7Y,cAAc0N,QAAQ,EACzE,IAAIpF,GAAO,GAAI9L,MAAK7C,KAAKof,eAAepf,KAAKkf,iBAAiB7Y,aAC9D,QAAQrG,KAAKkf,iBAAiBnS,eAC1B,IAAK,QAEG,GAAIwS,GAAmBvf,KAAKwf,oBAAoB7Q,EAAM3O,KAAKkf,iBAAiB3c,KAAO,EAC/Ekd,EAAmBzf,KAAKwf,oBAAoB7Q,EAAM3O,KAAKkf,iBAAiB1c,MAAQ,CACpFxC,MAAKkf,iBAAiB5G,oBAAoBiH,GAC1Cvf,KAAKkf,iBAAiB1G,gBAAgBiH,EAE1C,MACJ,KAAK,OAEG,GAAIC,GAAkB1f,KAAK2f,iBAAiBhR,EAAM3O,KAAKkf,iBAAiB3c,KAAO,EAC3Eqd,EAAkB5f,KAAK2f,iBAAiBhR,EAAM3O,KAAKkf,iBAAiB1c,MAAQ,CAChFxC,MAAKkf,iBAAiB5G,oBAAoBoH,GAC1C1f,KAAKkf,iBAAiB1G,gBAAgBoH,EAE1C,MACJ,KAAK,SACD,GACIC,GAAiBC,cAAYtJ,YADV,KACwC,EAAG,GAC9DuJ,EAAoB/f,KAAKggB,mBAAmBrR,EAAM3O,KAAKkf,iBAAiB3c,KAAO,EAC/E0d,EAAoBjgB,KAAKggB,mBAAmBrR,EAAM3O,KAAKkf,iBAAiB1c,MAAQ,CACpFud,GAAoBD,cAAYtJ,YAAYxW,KAAKkf,iBAAiB9W,mBAAmB+C,YAAYuC,MAAM,KAAK,GAAGwP,OAAQ,EAAG,GAAG1O,gBAAkBqR,EAAerR,eAAuBuR,EACrL/f,KAAKkf,iBAAiB5G,oBAAoByH,GAC1C/f,KAAKkf,iBAAiB1G,gBAAgByH,KAIlDjB,EAAQ9e,UAAU+Y,YAAc,WAC5BjZ,KAAKkf,iBAAiBpd,OAAS,EAC/B,IAAI6L,GAAO3N,KAAKkf,iBAAiBjS,cAAcjN,KAAKkf,iBAAiBnS,eACjEuJ,EAActW,KAAKuW,eAAevW,KAAKkf,iBAAiB7Y,YAC5D,QAAQrG,KAAKkf,iBAAiBnS,eAC1B,IAAK,OACD/M,KAAKkf,iBAAiB7Y,YAAcrG,KAAKwW,YAAYF,EAAY1B,KAAO,EAAG0B,EAAYtC,MAAO,GAC9FhU,KAAKkf,iBAAiBzI,WAAW9I,EACjC,MACJ,KAAK,QACD3N,KAAKkf,iBAAiB7Y,YAAcrG,KAAKwW,YAAYF,EAAY1B,KAAM0B,EAAYtC,MAAQ,EAAG,GAC9FhU,KAAKkf,iBAAiBzI,WAAW9I,EACjC,MACJ,KAAK,SACD3N,KAAKkf,iBAAiBgB,iBAAkB,EACpC5J,EAAY1B,KAAO5U,KAAKkf,iBAAiBzX,cAAc0D,YAAYuC,MAAM,KAAK,GAAGwP,QAAW,IAC5F5G,EAAY1B,KAAO0B,EAAY1B,KAAO5U,KAAKkf,iBAAiBzX,cAAc0D,YAAYuC,MAAM,KAAK,GAAGwP,QAAW,EAAI5G,EAAY1B,KAAO,EAAI0B,EAAY1B,MAE1J5U,KAAKkf,iBAAiB7Y,YAAcrG,KAAKwW,YAAYF,EAAY1B,KAAO,GAAI0B,EAAYtC,MAAO,GAC/FhU,KAAKkf,iBAAiBzI,WAAW9I,KAI7CqR,EAAQ9e,UAAU6Y,gBAAkB,WAChC,GAAIhM,GAAc/M,KAAKkf,iBAAiBjS,cAAcjN,KAAKkf,iBAAiBnS,cAC5E/M,MAAKkf,iBAAiBpd,OAAS,EAC/B,IAAIwU,GAActW,KAAKuW,eAAevW,KAAKkf,iBAAiB7Y,YAC5D,QAAQrG,KAAKkf,iBAAiBnS,eAC1B,IAAK,QACD/M,KAAKkf,iBAAiB7Y,YAAcrG,KAAKwW,YAAYF,EAAY1B,KAAM0B,EAAYtC,MAAQ,EAAG,GAC9FhU,KAAKkf,iBAAiBzI,WAAW1J,EACjC,MACJ,KAAK,OACD/M,KAAKkf,iBAAiB7Y,YAAcrG,KAAKwW,YAAYF,EAAY1B,KAAO,EAAG0B,EAAYtC,MAAO,GAC9FhU,KAAKkf,iBAAiBzI,WAAW1J,EACjC,MACJ,KAAK,SACD/M,KAAKkf,iBAAiBiB,qBAAsB,EAC5CngB,KAAKkf,iBAAiB7Y,YAAcrG,KAAKwW,YAAYF,EAAY1B,KAAO,GAAI0B,EAAYtC,MAAQ,EAAG,GACnGhU,KAAKkf,iBAAiBzI,WAAW1J,KAI7CiS,EAAQ9e,UAAUie,mBAAqB,SAAUtR,EAAG3G,GAChDlG,KAAKkf,iBAAiB9L,wBACtB,IACI1D,MACA2D,EAAYpQ,oBAAkBiD,GAE9BqJ,EADU,GAAI1M,MAAK7C,KAAKof,eAAepf,KAAKkf,iBAAiB7Y,cAE7DiQ,EAActW,KAAKuW,eAAehH,EAEtCA,GADsBuQ,cAAYtJ,YAAYF,EAAY1B,KAAM,EAAG,EAEnE,IAAIrB,GAAM+C,EAAYtC,MAClBR,EAAK8C,EAAY1B,KACjBnB,EAAS6C,EAAY1B,KACrBlB,EAAS1T,KAAKuW,eAAevW,KAAKkf,iBAAiB3c,KAAMqS,KACzDjB,EAAY3T,KAAKuW,eAAevW,KAAKkf,iBAAiB3c,KAAMyR,MAC5DJ,EAAS5T,KAAKuW,eAAevW,KAAKkf,iBAAiB1c,KAAMoS,KACzDf,EAAY7T,KAAKuW,eAAevW,KAAKkf,iBAAiB1c,KAAMwR,KAChEhU,MAAKmf,mBAAmBnf,KAAKkf,iBAAiB7Y,YAAa,SAC3D,KAAK,GAAI2N,GAAQ,EAAGA,GAAS,KAAMA,EAAO,CACtC,GAAIoM,GAAgBpgB,KAAKuW,eAAehH,EAExCA,GADwBuQ,cAAYtJ,YAAY4J,EAAcxL,KAAMZ,EAAO,EAE3E,IAAIvC,GAAQzR,KAAKsf,eAAe/P,GAC5BoC,EAAU3R,KAAKkf,iBAAiB7a,cAAc,QAC9C4P,EAAc/N,GACblG,KAAKuW,eAAerQ,GAAQ8N,QAAWhU,KAAKuW,eAAehH,GAAYyE,MACxE5O,EAAUc,GAAUlG,KAAKuW,eAAerQ,GAAQ0O,OAASpB,GAAMS,CACnEtC,GAAQxG,YAAcnL,KAAKkf,iBAAiBpc,UAAU0O,WAAWjC,GAAazH,KAAM,WAAY8J,OAAQ,MAAOgB,SAAU,YACpH5S,KAAKkf,iBAAiB3c,MAAQkR,EAASC,GAAUM,EAAQL,GAAYF,IAAWC,IAAa1T,KAAKkf,iBAAiB1c,MAAQiR,EAASG,GAAUI,EAAQH,GAAYJ,GAAUG,GAC7K3M,YAAUwK,GA1PX,eA4PO4B,GAAajO,EACnB6B,YAAUwK,GAzPX,cA4PMzR,KAAKuW,eAAehH,GAAYyE,QAAUT,GAC1CvT,KAAKuW,eAAevW,KAAKkf,iBAAiB7Y,aAAc2N,QAAUT,GACnEtM,YAAUwK,GA7PZ,kBAgQDA,EAAMhO,UAAUmI,SArQlB,eAsQCC,eAAanI,IAAI+N,EAAO,QAASzR,KAAKkf,iBAAiB3M,aAAcvS,KAAKkf,kBAE9EzN,EAAMpJ,YAAYsJ,GAClBjC,EAAO3F,KAAK0H,GAEhBzR,KAAKgQ,sBAAsBN,EA5CZ,EAlOZ,SA8QgD7C,EAAG3G,IAE1D8Y,EAAQ9e,UAAUke,oBAAsB,SAAUvR,EAAG3G,GACjDlG,KAAKkf,iBAAiB9L,wBACtB,IAEI1D,MACAH,EAAY,GAAI1M,MAAK7C,KAAKof,eAAepf,KAAKkf,iBAAiB7Y,cAC/DiQ,EAActW,KAAKuW,eAAehH,GAGlC2E,GADJ3E,EADsBuQ,cAAYtJ,YAAYF,EAAY1B,KAAM,EAAG,IAE3CpG,cACpB2F,EAAU,GAAItR,MAAK7C,KAAKof,eAAgBlL,EAAUA,EAAU,KAC5DG,EAAQ,GAAIxR,MAAK7C,KAAKof,eAAgBlL,EAAUA,EAAU,OAC1DI,EAAcH,EAAQ3F,cACtB+F,EAAYF,EAAM7F,cAClBgG,EAAaxU,KAAKkf,iBAAiBpc,UAAU0O,WAAW2C,GAAWrM,KAAM,WAAY8J,OAAQ,IAAKgB,SAAU,YAC5G6B,EAAWzU,KAAKkf,iBAAiBpc,UAAU0O,WAAW6C,GAASvM,KAAM,WAAY8J,OAAQ,IAAKgB,SAAU,WACvE,QAAjC5S,KAAKkf,iBAAiBlc,SACtBwR,EAAasK,OAAOtK,EAAWyI,QAAQ,gBAAiB,SAAU1d,GAAK,MAAO8gB,QAAOC,aAAa/gB,EAAEghB,WAAW,GAAK,KAAO,OAC3H9L,EAAWqK,OAAOrK,EAASwI,QAAQ,gBAAiB,SAAU1d,GAAK,MAAO8gB,QAAOC,aAAa/gB,EAAEghB,WAAW,GAAK,KAAO,OAE3H,IAAIC,GAAYxgB,KAAKkf,iBAAiBzX,cAAc0D,YAAYuC,MAAM,IAUtE,MATMzK,oBAAkB4J,IAAO2T,EAAU,KAAOhM,GAA4B,SAAb3H,EAAEiB,SAAwB7K,oBAAkB4J,IAAiB,YAAXA,EAAE/E,MAAmC,QAAb+E,EAAEiB,UACvI0G,EAAaxU,KAAKkf,iBAAiBzX,cAAc0D,YAAYuC,MAAM,KAAK,GAAGwP,OAC3EzI,EAAWzU,KAAKkf,iBAAiBzX,cAAc0D,YAAYuC,MAAM,KAAK,GAAGwP,QAEzEld,KAAKkf,iBAAiB7I,wBACtB7B,EAAaxU,KAAKkf,iBAAiB7I,sBAAsB3I,MAAM,KAAK,GAAGwP,OACvEzI,EAAWzU,KAAKkf,iBAAiB7I,sBAAsB3I,MAAM,KAAK,GAAGwP,OACrEld,KAAKkf,iBAAiB7I,sBAAwB,MAE9CrW,KAAKkf,iBAAiBiB,oBAAqB,CAE3C,IAAK,GAAInf,GAAI,EAAGA,GAAKwf,EAAU7f,OAAQK,KACnCyT,EAAWA,EAAW+L,EAAUxf,IAAO,GAAKwf,EAAUxf,GAChDyT,GAAa,GAAK9N,SAAS8N,EAAU,IAAM,GAAG3N,WAChD2N,EAAW+L,EAAUxf,IAAO,GAAKwf,EAAUxf,GAAKyT,GAAa,GACxD9N,SAAS8N,EAAU,IAAM,GAAG3N,WAAa2N,EAAW+L,EAAUxf,IAAO,GACtEwf,EAAUxf,GAAKyT,GAAa,GAAK9N,SAAS8N,EAAU,IAAM,GAAG3N,WAC7D2N,EAAW+L,EAAUxf,IAAO,GAAKwf,EAAUxf,GAAKyT,GAAa,GACxD9N,SAAS8N,EAAU,IAAM,GAAG3N,WAAa2N,GACvC+L,EAAUxf,IAAO,GAAKwf,EAAUxf,GAAKyT,GAAa,IAC7DA,GAAY9N,SAAS8N,EAAU,IAAM,GAAG3N,WAG5C2N,GAAW+L,EAAUxf,IAAO,GAAKwf,EAAUxf,GAAKyT,GAAa,IAC7DA,GAAY9N,SAAS8N,EAAU,IAAM,GAAG3N,WACxC0N,GAAc7N,SAAS8N,EAAU,IAAM,GAAG3N,YAE1C2N,EAAW+L,EAAUxf,IAAO,GAAKwf,EAAUxf,GAAKyT,GAAa,IAC7DA,GAAY9N,SAAS8N,EAAU,IAAM,GAAG3N,WACxC0N,GAAc7N,SAAS8N,EAAU,IAAM,GAAG3N,YAM1C2N,GAJJD,EAAaC,EAAWD,GAAe,IAChC7N,SAAS6N,EAAY,IAAM,GAAG1N,WAAa2N,EAAWD,GAAe,IACrE7N,SAAS6N,EAAY,IAAM,GAAG1N,WAAa2N,EAAWD,GAAe,IACrE7N,SAAS6N,EAAY,IAAM,GAAG1N,WAAa0N,IACpB,IAC1BA,GAAc7N,SAAS6N,EAAY,IAAM,GAAG1N,YAGpD,GAAI9G,KAAKkf,iBAAiBgB,gBAAiB,CACvC,IAAK,GAAIO,GAAM,EAAGA,GAAOD,EAAU7f,OAAQ8f,IACnCjM,EAAagM,EAAUC,IAAS,GAAKD,EAAUC,GAAOjM,GAAe,IACrEA,GAAc7N,SAAS6N,EAAY,IAAM,GAAG1N,YAE5C0N,EAAagM,EAAUC,IAAS,GAAKjM,EAAagM,EAAUC,GAAKvD,SACjE1I,GAAc7N,SAAS6N,EAAY,IAAM,GAAG1N,YAE5C0Z,EAAUC,GAAOjM,GAAe,GAAKA,EAAagM,EAAUC,GAAKvD,SACjE1I,GAAc7N,SAAS6N,EAAY,IAAM,GAAG1N,WAGhD0N,GAAaxU,KAAKkf,iBAAiB9W,mBAAmB+C,YAAYuC,MAAM,KAAK,GAAGwP,OAAS,IACzF1I,GAAc7N,SAAS3G,KAAKkf,iBAAiB9W,mBAAmB+C,YAAYuC,MAAM,KAAK,GAAGwP,OAAQ,IAAM,GAAGpW,WAC3G2N,GAAY9N,SAAS6N,EAAY,IAAM,GAAG1N,YAG9C2N,GADAA,EAAWA,EAAWD,GAAe,IAAM7N,SAAS8N,EAAU,IAAM,GAAG3N,WAAa2N,GAC9DD,GAAe,GAC9B7N,SAAS8N,EAAU,IAAM,GAAG3N,WAAa2N,EAAWD,GAAe,GACnE7N,SAAS8N,EAAU,IAAM,GAAG3N,WAAa2N,EAEpD,GAAqC,OAAjCzU,KAAKkf,iBAAiBlc,OAAiB,CACvC,GAAI0d,GAAkB1gB,KAAKkf,iBAAiBpc,UAAU0O,WAAW2C,GAAWrM,KAAM,WAAY8J,OAAQ,IAAKgB,SAAU,YACjH+N,EAAgB3gB,KAAKkf,iBAAiBpc,UAAU0O,WAAW6C,GAASvM,KAAM,WAAY8J,OAAQ,IAAKgB,SAAU,WACjH5S,MAAKkf,iBAAiB9W,mBAAmB+C,YAAcuV,EAAkB,YAGzE1gB,MAAKkf,iBAAiB9W,mBAAmB+C,YAAcqJ,EAAa,OAExExU,MAAKkf,iBAAiBgB,gBAAkBlgB,KAAKkf,iBAAiBiB,qBAAsB,CACpF,IAAIvL,IAAQjO,SAAS6N,EAAY,IAAM,GAAG1N,UAC1CwN,GAAca,KAAKyL,MAAiC,IAA3Bja,SAAS6N,EAAY,IAAa,KAC3DD,EAAYY,KAAKyL,MAA+B,IAAzBja,SAAS8N,EAAU,IAAa,IAEvD,KAAK,GADDC,GAAYS,KAAKyL,MAA2B,IAArBja,SAASiO,EAAM,IAAa,KAC9CiM,EAAW,EAAGA,GA3FR,KA2FgCA,EAAU,CACrD,GAAIC,GAASpM,EAAYmM,CAYzB,IAXAtR,EAAU6E,YAAY0M,GACtBvR,EAAUwE,QAAQ,GAClBxE,EAAUuE,SAAS,GACd9T,KAAKuW,eAAehH,GAAWqF,KAAO0B,EAAY1B,KAAQ,IAC3DrF,EAAUuE,SAAS,GACnB+M,GAAsB,EACtBtR,EAAU6E,YAAY7E,EAAUf,cAAgB,IAEpD8H,EAActW,KAAKuW,eAAehH,GAElCA,EADwBuQ,cAAYtJ,YAAYF,EAAY1B,KAAM,EAAG,GAEjE0B,EAAY1B,OAASjO,SAAS6N,EAAY,IAAM,GAAK8B,EAAY1B,MAAQJ,GACzE8B,EAAY1B,MAAQL,GAAa+B,EAAY1B,OAASjO,SAAS8N,EAAU,IAAM,EAAG,CAClF,GAAIhD,GAAQzR,KAAKsf,eAAe/P,EAChCzL,cAAW2N,GAAShJ,KAAQ,YAC5B,IAAIkJ,GAAU3R,KAAKkf,iBAAiB7a,cAAc,OAClDsN,GAAQxG,YAAcnL,KAAKkf,iBAAiBpc,UAAU0O,WAAWjC,GAAazH,KAAM,WAAY8J,OAAQ,IAAKgB,SAAU,YACnH0D,EAAY1B,OAASjO,SAAS6N,EAAY,IAAM,GAAMsM,EAASxM,GAC9DwM,EAASvM,GAAc+B,EAAY1B,OAASjO,SAAS8N,EAAU,IAChExN,YAAUwK,GApYb,iBAsYQqP,EAAS,GAAIje,MAAK7C,KAAKof,eAAepf,KAAKkf,iBAAiB3c,MAAMiM,eACpEsS,EAAS,GAAIje,MAAK7C,KAAKof,eAAepf,KAAKkf,iBAAiB1c,MAAMgM,cACrEvH,YAAUwK,GApYf,cAsYWxO,oBAAkBiD,IACvBlG,KAAKuW,eAAehH,GAAYqF,OAC5B5U,KAAKuW,eAAerQ,GAAQ0O,KAI7BrF,EAAUf,gBAAkBxO,KAAKkf,iBAAiB7Y,YAAYmI,eAC7DiD,EAAMhO,UAAUmI,SA7Y1B,eA8YS3E,YAAUwK,GAzYhB,kBAoYExK,YAAUwK,GArYf,cA6YMA,EAAMhO,UAAUmI,SAjZtB,eAkZKC,eAAanI,IAAI+N,EAAO,QAASzR,KAAKkf,iBAAiB3M,aAAcvS,KAAKkf,kBAE9EzN,EAAMpJ,YAAYsJ,KACZ1O,oBAAkB4J,IAAmB,SAAbA,EAAEiB,QAAqBwI,EAAY1B,KAAK9N,aAAe0N,IAAiBvR,oBAAkB4J,IAAmB,QAAbA,EAAEiB,QAAoBwI,EAAY1B,KAAK9N,aAAe2N,IAChLxN,YAAUwK,GAjZZ,kBAmZF/B,EAAO3F,KAAK0H,IAGpBzR,KAAKgQ,sBAAsBN,EA5IZ,EA4I8B,WAAY7C,EAAG3G,IAEhE8Y,EAAQ9e,UAAUof,eAAiB,SAAU/P,GACzC,GAAI8B,IAAsBC,SAAU,OAAQxJ,KAAM,WAAY8K,SAAU,WACpEpB,EAAaxR,KAAKkf,iBAAiBpc,UAAU0O,WAAWjC,EAAW8B,GAEnEnL,EADOlG,KAAKkf,iBAAiBpc,UAAUyO,UAAUC,EAAYH,GAChDwD,UACbhN,GACAH,UA1ZD,SA0ZkBG,OAASe,GAAM,GAAKkM,cAAY,GAAK5O,GAAQ6O,gBAAiB,QAAStM,KAAQ,YAEpG,OAAOzI,MAAKkf,iBAAiB7a,cAAc,KAAMwD,IAGrDmX,EAAQ9e,UAAU8P,sBAAwB,SAAUwF,EAAUC,EAAOC,EAAS7I,EAAG3G,GAC7E,GACIyP,GADAhI,EAAO3N,KAAKkf,iBAAiBjS,cAAcjN,KAAKkf,iBAAiBnS,cAErE/M,MAAKkf,iBAAiB9R,iBAAmBpN,KAAKkf,iBAAiB7a,cAAc,SAC7ErE,KAAKkf,iBAAiB1W,MAAMH,YAAYrI,KAAKkf,iBAAiB9R,kBAC9DpG,eAAahH,KAAKkf,iBAAiB3W,eAAgBvI,KAAKkf,iBAAiBzX,gBA/arE,UACC,WAFF,WAibHR,YAAUjH,KAAKkf,iBAAiB3W,eAAgBvI,KAAKkf,iBAAiBzX,gBAAiBiO,GAMvF,KAAK,GAFDE,GAAMH,EACNoL,EAAW,EACNnP,EAAU,EAAGA,EAAUyD,KAAKyL,MAAMpL,EAAS7U,OAAS8U,KAAU/D,EAAS,CAE5E,IADAiE,EAAQ3V,KAAKkf,iBAAiB7a,cAAc,MAAQwD,OAASY,KAAQ,SAChEoY,EAAW,EAAIA,EAAUA,EAAWjL,EAAKiL,IACrCrL,EAASqL,GAAUpd,UAAUmI,SAAS,kBAAqB3I,oBAAkBuS,EAASqL,GAAUhL,SAAS,MAC1G5O,YAAUuO,EAASqL,GAAUhL,SAAS,KAhb/C,UAibS9N,eAAayN,EAASqL,GAAUhL,SAAS,IACrC7N,SAAU,IACVE,gBAAgB,KAGxByN,EAAMtN,YAAYmN,EAASqL,IACvB7gB,KAAKkf,iBAAiB1U,YACTsL,IAAb+K,GAAmCrL,EAASM,GAAoBrS,UAAUmI,SApc7E,kBAqcG3E,YAAU0O,GA3bV,iBA6bC3V,KAAKkf,iBAAiB1U,YAlBd,IAmBNqW,GAA+BrL,EAnBzB,GAmBkD/R,UAAUmI,SAxcxE,kBAycG3E,YAAU0O,GA/bV,gBAicA3V,KAAKkf,iBAAiB1U,WAxBhB,KAyBFqW,GAA4BrL,EAzB1B,IAyBgD/R,UAAUmI,SA5cnE,kBA6cO3E,YAAU0O,GAncd,gBA0aK,KA6BDkL,GAA2BrL,EA7B1B,IA6B+C/R,UAAUmI,SAjdjE,kBAkdO3E,YAAU0O,GAxcd,eA4cRC,IAAYH,EACZoL,GAAsB,EACtB7gB,KAAKkf,iBAAiB9R,iBAAiB/E,YAAYsN,GAEvD3V,KAAKkf,iBAAiB1W,MAAMiF,cAAc,SAAS/F,UAAY1H,KAAKkf,iBAAiBpd,OACrF9B,KAAKgW,sBACDrI,IAAS3N,KAAKkf,iBAAiBjS,cAAcjN,KAAKkf,iBAAiBnS,gBACtD,IAATY,GAAcA,IAAS3N,KAAKkf,iBAAiBjS,cAAcjN,KAAKkf,iBAAiBnS,iBACrF/M,KAAKkf,iBAAiB9P,gBAAgBvC,GAE1C7M,KAAKkf,iBAAiBjJ,0BACtBjW,KAAKkf,iBAAiB1B,aAAgBtX,MAAOlG,KAAKkf,iBAAiBhZ,MAAO+J,OAAQjQ,KAAKkf,iBAAiBjP,QACxGjQ,KAAKkf,iBAAiBrB,iBAE1BmB,EAAQ9e,UAAUsf,oBAAsB,SAAU3U,EAAOvF,GACrD,GAAIyb,GAAc/gB,KAAKuW,eAAe1L,GAClCmW,EAAYhhB,KAAKuW,eAAejR,EAWpC,OATIyb,GAAWnM,KAAOoM,EAASpM,KAClB,EAEJmM,EAAWnM,KAAOoM,EAASpM,MACtB,EAGDmM,EAAW/M,QAAUgN,EAAShN,MAAQ,EAAI+M,EAAW/M,MAAQgN,EAAShN,MAAQ,GAAK,GAIpGgL,EAAQ9e,UAAU+gB,eAAiB,SAAUrG,EAAWC,EAASC,GAC7D,GAGIxV,GACAyV,EAJAgG,EAAa/gB,KAAKuW,eAAeqE,GAEjC/P,EADW7K,KAAKuW,eAAesE,GACdjG,IAmBrB,OAhBAtP,GAAMuF,EACNkQ,EAAS,EACLD,IAEAxV,GADAuF,GAAgBA,EAAQiQ,GACVjQ,EAAQiQ,EAAWA,EAAW,GAE5CiG,EAAWnM,KAAOtP,EAClByV,EAAS,EAEqC,WAAxC/a,KAAKkf,iBAAiBnS,eAA+BgU,EAAWnM,KAAO/J,KAC1E+P,EAAUpM,eApfT,MAofuCoM,EAAUpM,eAnfjD,MAofJuM,GAAU,EAELgG,EAAWnM,KAAO/J,GAAkD,SAAxC7K,KAAKkf,iBAAiBnS,gBACvDgO,GAAU,GAEPA,GAEXiE,EAAQ9e,UAAUqW,eAAiB,SAAU5H,GACzC,MAAQmR,eAAYoB,aAAavS,IAErCqQ,EAAQ9e,UAAUsW,YAAc,SAAU5B,EAAMZ,EAAOrF,GACnD,MAAOmR,eAAYtJ,YAAY5B,EAAMZ,EAAOrF,IAEhDqQ,EAAQ9e,UAAUyf,iBAAmB,SAAU9U,EAAOvF,GAClD,MAAOtF,MAAKihB,eAAepW,EAAOvF,EAAK,IAE3C0Z,EAAQ9e,UAAU8f,mBAAqB,SAAUnV,EAAOvF,GACpD,MAAOtF,MAAKihB,eAAepW,EAAOvF,EAAK,KAE3C0Z,EAAQ9e,UAAUyY,QAAU,WACxB3Y,KAAKkf,iBAAmB,MAE5BF,EAAQ9e,UAAUkf,eAAiB,SAAU7D,GACzC,MAAIA,aAAmB1Y,MACX0Y,EAAQC,cAGR,GAAKD,GAGdyD,KC5iBP3f,EAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HjB,GAAvHkB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOf,OAAOoB,yBAAyBP,EAAQC,GAAOC,CACrH,IAAuB,gBAAZM,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASV,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIQ,GAAIX,EAAWM,OAAS,EAAGK,GAAK,EAAGA,KAASzB,EAAIc,EAAWW,MAAIJ,GAAKH,EAAI,EAAIlB,EAAEqB,GAAKH,EAAI,EAAIlB,EAAEe,EAAQC,EAAKK,GAAKrB,EAAEe,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKnB,OAAOwB,eAAeX,EAAQC,EAAKK,GAAIA,GAa5DO,EAAO,eAoBPggB,GAAiB,QAAS,QAAS,SAcnCC,EAA4B,SAAU3f,GAStC,QAAS2f,GAAW1f,EAASC,GACzB,GAAIC,GAAQH,EAAOI,KAAK7B,KAAM0B,EAASC,IAAY3B,IAcnD,OAbA4B,GAAMyf,mBAAoB,EAC1Bzf,EAAM0f,iBAAkB,EACxB1f,EAAMid,cAAe,EACrBjd,EAAM2f,mBAAqB,KAC3B3f,EAAM4f,mBAAqB,KAC3B5f,EAAM6f,gBAAkB,GACxB7f,EAAMO,WAAY,EAClBP,EAAMM,eAAgB,EACtBN,EAAM8f,eAAgB,EACtB9f,EAAM+f,uBAAwB,EAC9B/f,EAAMqK,WAAarK,EAAM4B,gBACzB5B,EAAMggB,WAAY,EAClBhgB,EAAMigB,kBAAoBngB,EACnBE,EAm3DX,MA14DAvC,GAAU+hB,EAAY3f,GA+BtB2f,EAAWlhB,UAAUmC,OAAS,WAC1BrC,KAAK8hB,aACL9hB,KAAK+hB,aACLC,QAAMC,eAAejiB,KAAKkiB,aAAcliB,KAAKmiB,aAAaC,WACrDnf,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,WAE5FT,oBAAkBqB,UAAQtE,KAAK2B,QAAS,cAAgB2C,UAAQtE,KAAK2B,QAAS,YAAY4C,WAC3FvE,KAAKwE,SAAU,GAEnBxE,KAAK6c,iBACL7c,KAAK2c,YAAY3c,KAAK4c,uBAE1BwE,EAAWlhB,UAAUyc,YAAc,SAAUW,GACzC,IAAKra,oBAAkBjD,KAAK4c,uBAAyB5c,KAAKkG,MAAO,CAC7D,GAEIqX,GADqBD,GADA,GAAIza,OAAOwS,oBAAsB,EAG1DkI,GAAevd,KAAKmd,mBAAqBI,IAAiBA,EAC1Dvd,KAAKkG,MAAQ,GAAIrD,MAAM7C,WAAYwZ,UAA4B,GAAf+D,EAAoB,GAAK,KACzEvd,KAAKwiB,gBAGbpB,EAAWlhB,UAAUid,iBAAmB,WACpC,GAAIE,GAAc,GAAIxa,MAAK7C,KAAKkG,MAAMsI,cAAe,EAAG,GAAG6G,oBACvD+H,EAAe,GAAIva,MAAK7C,KAAKkG,MAAMsI,cAAe,EAAG,GAAG6G,mBAC5D,OAAQrV,MAAKkG,MAAMmP,oBAAsBF,KAAK3S,IAAI6a,EAAaD,IAEnEgE,EAAWlhB,UAAUuiB,aAAe,WAC5BziB,KAAK0iB,UACA1iB,KAAK2iB,UACN3iB,KAAKkiB,aAAatJ,gBAAgB,YAItC9U,aAAW9D,KAAKkiB,cAAgBS,SAAY,KAEhD3iB,KAAK4iB,mBAETxB,EAAWlhB,UAAU0iB,gBAAkB,WAC9B5iB,KAAK0iB,YAAa1iB,KAAKmiB,cAAiBniB,KAAK2iB,SAQzC3iB,KAAKmiB,cACVnb,eAAahH,KAAKmiB,aAAaC,YAhG7B,eAwF8B,KAA5BpiB,KAAKkiB,aAAahc,MAClBc,eAAahH,KAAKmiB,aAAaC,YAzFjC,eA4FEnb,YAAUjH,KAAKmiB,aAAaC,YA5F9B,gBAmGVhB,EAAWlhB,UAAU4hB,WAAa,WAC9B9hB,KAAK6iB,kBAAkB7iB,KAAKkG,OACxBlG,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,mBAGhBhjB,KAAKijB,cACLjjB,KAAKkjB,+BACLljB,KAAKyiB,gBACDziB,KAAK8iB,YAAe9iB,KAAKkG,QAASlG,KAAKyhB,iBAA4C,WAAxBzhB,KAAKuiB,gBAAgCviB,KAAKuiB,gBAAmBviB,KAAKmjB,YAIvHnjB,KAAK8iB,YACX9iB,KAAKwiB,aAAY,IAJjBxiB,KAAKwiB,aAAY,GACjBxiB,KAAKojB,iBAAiBpjB,KAAKyhB,kBAK/BzhB,KAAKqjB,qBAAuBrjB,KAAKkiB,aAAahc,MAC9ClG,KAAK+d,aAAgB9a,oBAAkBjD,KAAKkG,OAAiC,KAAxB,GAAIrD,OAAM7C,KAAKkG,OACpElG,KAAKkiB,aAAa/d,aAAa,QAASnE,KAAKkiB,aAAahc,OAC1DlG,KAAKsjB,eAAiBtjB,KAAKkG,OAE/Bkb,EAAWlhB,UAAU+iB,YAAc,WAC/B,GAAIM,IACAhc,cAAe,OAAQic,gBAAiB,QACxC/a,KAAQ,WAAYgb,aAAgB,MAAOC,YAAe,MAC1DC,eAAkB,MAAOC,WAAc,QAASC,eAAgB,QAEpE,IAA6B,eAAzB7jB,KAAKwD,gBAAkC,CACvC,GAAIgI,IAAe2X,YAAanjB,KAAKmjB,YACrCnjB,MAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAC/ChD,KAAK8jB,KAAO,GAAIpY,QAAK,aAAcF,EAAYxL,KAAKgD,QACpDhD,KAAKmD,eAAgBggB,YAAanjB,KAAKmjB,aAAenjB,KAAK8jB,KAAKzY,YAAY,iBAAkB,GAElG,GAAI0Y,GAAwB/jB,KAAKwc,QAC5BvZ,qBAAkBjD,KAAKwc,WAA+B,KAAlBxc,KAAKwc,WAC1CuH,EAAyB/jB,KAAKwc,SAASS,QAAQ,OAAQ,KAAMC,OAEjE,IAAI8G,IAAoBhkB,KAAK8iB,UAC7B9iB,MAAKmiB,aAAeH,QAAMiB,aACtBthB,QAAS3B,KAAKkiB,aACdK,eAAgBviB,KAAKuiB,eACrB0B,gBAAiBD,EACjBE,YACIvB,SAAU3iB,KAAK2iB,SACfQ,YAAanjB,KAAKmjB,YAClB3G,SAAUuH,EACVvf,QAASxE,KAAKwE,QACdb,UAAW3D,KAAK2D,UAChBwgB,gBAAiBnkB,KAAKmkB,iBAE1B9B,SAAU+B,2CACXpkB,KAAKqE,eACRrE,KAAKqkB,SAASrkB,KAAKskB,OACY,KAA3BtkB,KAAKkiB,aAAa5H,KAClBta,KAAKkiB,aAAa/d,aAAa,OAAQ,GAAKnE,KAAKkiB,aAAahe,aAAa,SAG3ElE,KAAKkiB,aAAa/d,aAAa,OAAQ,GAAKnE,KAAK2B,QAAQiH,IAE7D9E,aAAW9D,KAAKkiB,aAAcqB,GACzBvjB,KAAKwE,SAKNxE,KAAKkiB,aAAa/d,aAAa,gBAAiB,SAChDnE,KAAKkiB,aAAa/d,aAAa,WAAYnE,KAAKgE,YALhDhE,KAAKkiB,aAAa/d,aAAa,gBAAiB,QAChDnE,KAAKkiB,aAAale,UAAY,GAMlCge,QAAMuC,eAAgBnd,aAAc,UAAYpH,KAAKmiB,aAAaE,QAAQ,IAC1Epb,YAAUjH,KAAKmiB,aAAaC,WA7LlB,mBA+LdhB,EAAWlhB,UAAUsiB,YAAc,SAAUgC,OACvB,KAAdA,IAAwBA,GAAY,EACxC,IAAI7R,EAaJ,IAZI3S,KAAKkG,QAAUlG,KAAKykB,cACpBzkB,KAAK0kB,cAAcF,GAEnBjP,OAAO,GAAI1S,MAAK7C,KAAKoG,WAAWpG,KAAKkG,UACrClG,KAAKmD,eAAgB+C,MAAO,OAAQ,GAEpClG,KAAK2kB,aAELljB,EAAOvB,UAAU+F,aAAapE,KAAK7B,MACnCA,KAAK4kB,gBACLnjB,EAAOvB,UAAU6G,aAAalF,KAAK7B,QAElCiD,oBAAkBjD,KAAKkG,OAAQ,CAChC,GAAI2e,GAAY7kB,KAAKkG,MACjB0T,MAAa,GACbkL,EAAc7hB,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKglB,eAAzBhlB,KAAK+kB,YAsB9D,IArB6B,mBAAzB/kB,KAAKwD,gBAEDoW,EADsB,cAAtB5Z,KAAK2C,aACQ3C,KAAK8C,UAAU0O,WAAWxR,KAAKkG,OACxC0L,OAAQkT,EAAYhd,KAAM,WAAYwJ,SAAU,QAIvCtR,KAAK8C,UAAU0O,WAAWxR,KAAKkG,OACxC0L,OAAQkT,EAAYhd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,aAMrED,EADsB,cAAtB3S,KAAK2C,cACaiP,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,QAGvDM,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,WAE9FgH,EAAa5Z,KAAK8C,UAAU0O,WAAWxR,KAAKkG,MAAOyM,KAEjDkS,IAAc7kB,KAAKwC,MAAUqiB,IAAc7kB,KAAKuC,IAClDvC,KAAKojB,iBAAiBxJ,OAErB,CACD,GAAI1T,IAAU2e,IAAc7kB,KAAKwC,OAASxC,KAAKkG,SAAalG,KAAKkG,QAAU2e,IAAc7kB,KAAKuC,KACzFvC,KAAK2kB,YAAcze,GACpBlG,KAAKojB,iBAAiBxJ,IAI9B3W,oBAAkBjD,KAAKkG,QAAUlG,KAAK2kB,aACjC3kB,KAAK8iB,YAIN9iB,KAAKojB,iBAAiBpjB,KAAKyhB,iBAC3BzhB,KAAK+iB,OAAO,cACRC,OAAQ,oBALZhjB,KAAKojB,iBAAiB,MASzBpjB,KAAK2kB,YAAc1hB,oBAAkBjD,KAAKkG,QAAUlG,KAAKuhB,oBAC1DvhB,KAAKojB,iBAAiBpjB,KAAKuhB,oBAE/BvhB,KAAKwd,aAAgBtX,MAAOlG,KAAKkG,OACjClG,KAAKilB,aACLjlB,KAAK4iB,mBAETxB,EAAWlhB,UAAU0kB,cAAgB,YAC5B3hB,oBAAkBjD,KAAKkG,QAAUlG,KAAKkG,MAAQlG,KAAKuC,KAAOvC,KAAKuC,KAAOvC,KAAKwC,KAAOxC,KAAK2kB,YACxF3kB,KAAKmD,eAAgB+C,MAAOlG,KAAKuC,MAAO,GACxCvC,KAAKwd,aAAgBtX,MAAOlG,KAAKkG,SAG5BjD,oBAAkBjD,KAAKkG,QAAUlG,KAAKkG,MAAQlG,KAAKwC,KAAOxC,KAAKuC,KAAOvC,KAAKwC,KAAOxC,KAAK2kB,aACxF3kB,KAAKmD,eAAgB+C,MAAOlG,KAAKwC,MAAO,GACxCxC,KAAKwd,aAAgBtX,MAAOlG,KAAKkG,SAI7Ckb,EAAWlhB,UAAUglB,iBAAmB,SAAUC,GAC9C,GAAIC,GAAa,KACbzS,EAAgB,KAChB0S,EAAiB,IACrB,IAA6B,mBAAzBrlB,KAAKwD,gBAAsC,CAC3C,GAAI8hB,GAAU,GAAIviB,wBAAqB/C,KAAKgD,OAClB,eAAtBhD,KAAK2C,cACLgQ,GAAkBf,OAAQ5R,KAAKglB,eAAgBld,KAAM,WAAYwJ,SAAU,OAC3E+T,GAAmBzT,OAAQ0T,EAAQC,gBAAiBjU,SAAU,QAAUxJ,KAAM,cAG9E6K,GAAkBf,OAAQ5R,KAAKglB,eAAgBld,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,WAC5FyS,GAAmBzT,OAAQ0T,EAAQC,gBAAiBjU,SAAU,QAAUxJ,KAAM,WAAY8K,SAAU,gBAKpGD,GADsB,cAAtB3S,KAAK2C,cACaiP,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,QAGvDM,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,UAOlG,OAJAwS,GAAaplB,KAAKmG,eAAenG,KAAK8C,UAAUyO,UAAU4T,EAAKxS,IAC3D1P,oBAAkBmiB,IAAyC,mBAAzBplB,KAAKwD,kBACvC4hB,EAAaplB,KAAKmG,eAAenG,KAAK8C,UAAUyO,UAAU4T,EAAKE,KAE5DD,GAEXhE,EAAWlhB,UAAU2iB,kBAAoB,SAAU3c,GAC/C,KAAMA,YAAiBrD,OAAUI,oBAAkBiD,IAAQ,CACvD,GAAIsf,GAAY,KACZC,EAAcvf,CACG,iBAAVA,KACPuf,EAAcvf,EAAMY,WAIxB,IAA6B,mBAAzB9G,KAAKwD,gBAAsC,CAC3C,GAAI8hB,GAAU,GAAIviB,wBAAqB/C,KAAKgD,OAClB,eAAtBhD,KAAK2C,eACaiP,OAAQ5R,KAAKglB,eAAgBld,KAAM,WAAYwJ,SAAU,QACxDM,OAAQ0T,EAAQC,gBAAiBjU,SAAU,QAAUxJ,KAAM,eAG5D8J,OAAQ5R,KAAKglB,eAAgBld,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,YAEzEhB,OAAQ0T,EAAQC,gBAAiBjU,SAAU,QAAUxJ,KAAM,WAAY8K,SAAU,gBAI9E,cAAtB5S,KAAK2C,cACaiP,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,QAIvDM,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,UAGlG,IAAI8S,IAAU,CACd,IAA2B,gBAAhBD,GACPA,EAAc,KACdC,GAAU,MAOV,IAJ2B,gBAAhBD,KACPA,EAAcA,EAAYvI,UAE9BsI,EAAYxlB,KAAKklB,iBAAiBO,IAClB,CACZ,GACIE,GAAiB,IAIrBA,GAAiB,8IAFF,kJAGIC,KAAKH,KAAiBE,EAAeC,KAAKH,IACtD,mBAAqBG,KAAKH,IAAgBlQ,OAAO,GAAI1S,MAAK7C,KAAKoG,WAAWqf,KAC7EC,GAAU,EAGVF,EAAY,GAAI3iB,MAAK4iB,GAI7BC,GACK1lB,KAAK2kB,aACN3kB,KAAKuhB,mBAAqBkE,GAE9BzlB,KAAKmD,eAAgB+C,MAAO,OAAQ,IAGpClG,KAAKmD,eAAgB+C,MAAOsf,IAAa,KAIrDpE,EAAWlhB,UAAU2lB,eAAiB,WAC7B5iB,oBAAkBjD,KAAK+kB,gBAAiB/kB,KAAK8iB,aAC1C9iB,KAAK8iB,aAAkD,IAApC9iB,KAAK+kB,aAAa/R,QAAQ,KAC7CnH,eAAanI,IAAI1D,KAAKkiB,aAAc,QAASliB,KAAK8lB,aAAc9lB,MAGhE6L,eAAawL,OAAOrX,KAAKkiB,aAAc,QAASliB,KAAK8lB,gBAIjE1E,EAAWlhB,UAAU6hB,WAAa,WAC9BlW,eAAanI,IAAI1D,KAAKmiB,aAAaE,QAAQ,GAAI,uBAAwBriB,KAAK+lB,gBAAiB/lB,MAC7F6L,eAAanI,IAAI1D,KAAKkiB,aAAc,UAAWliB,KAAKgmB,eAAgBhmB,MACpE6L,eAAanI,IAAI1D,KAAKkiB,aAAc,QAASliB,KAAKimB,kBAAmBjmB,MACrE6L,eAAanI,IAAI1D,KAAKkiB,aAAc,OAAQliB,KAAKkmB,iBAAkBlmB,MAC/DA,KAAK8iB,YACLjX,eAAanI,IAAI1D,KAAKkiB,aAAc,UAAWliB,KAAKmmB,eAAgBnmB,MAExEA,KAAK6lB,iBAELha,eAAanI,IAAI1D,KAAKkiB,aAAc,SAAUliB,KAAKomB,mBAAoBpmB,MACnEA,KAAKmkB,iBAAmBnkB,KAAKmiB,aAAakE,aAC1Cxa,eAAanI,IAAI1D,KAAKmiB,aAAakE,YAAa,uBAAwBrmB,KAAKsmB,aAActmB,MAE3FA,KAAKumB,aACL1a,eAAanI,IAAI1D,KAAKumB,YAAa,QAASvmB,KAAKwmB,iBAAkBxmB,MAEvEA,KAAK6E,kBAAoBsH,SAAOnM,KAAK6E,kBAAmB7E,KAAKoM,YAC7DpM,KAAKymB,gBAAkB,GAAIna,kBAAetM,KAAKkiB,cAC3C3V,UAAW,UACXC,UAAWxM,KAAK0mB,qBAAqBha,KAAK1M,MAC1CoM,WAAYpM,KAAK6E,qBAGzBuc,EAAWlhB,UAAUimB,eAAiB,SAAUtZ,GAC5C,OAAQA,EAAE8Z,MACN,IAAK,YACL,IAAK,aACL,IAAK,UACL,IAAK,YACL,IAAK,OACL,IAAK,MACL,IAAK,UACG3mB,KAAK8iB,YAAe9iB,KAAK4mB,UAAa5mB,KAAK2iB,WAC5B,WAAX9V,EAAE8Z,MACF9Z,EAAEmB,iBAENhO,KAAK+iB,OAAO,kBACRC,OAAQ,iBACRnW,EAAGA,OAQvBuU,EAAWlhB,UAAU2mB,aAAe,WAC3B5jB,oBAAkBjD,KAAKmiB,eACxBtW,eAAawL,OAAOrX,KAAKmiB,aAAaE,QAAQ,GAAI,uBAAwBriB,KAAK+lB,iBAEnFla,eAAawL,OAAOrX,KAAKkiB,aAAc,UAAWliB,KAAKgmB,gBACvDna,eAAawL,OAAOrX,KAAKkiB,aAAc,QAASliB,KAAKimB,mBACrDpa,eAAawL,OAAOrX,KAAKkiB,aAAc,OAAQliB,KAAKkmB,kBACpDra,eAAawL,OAAOrX,KAAKkiB,aAAc,SAAUliB,KAAKomB,oBAClDpmB,KAAK8iB,YACLjX,eAAawL,OAAOrX,KAAKkiB,aAAc,UAAWliB,KAAKmmB,gBAEvDnmB,KAAKmkB,iBAAmBnkB,KAAKmiB,aAAakE,aAC1Cxa,eAAawL,OAAOrX,KAAKmiB,aAAakE,YAAa,uBAAwBrmB,KAAKsmB,cAEhFtmB,KAAKumB,aACL1a,eAAawL,OAAOrX,KAAKumB,YAAa,QAASvmB,KAAKwmB,mBAG5DpF,EAAWlhB,UAAUsmB,iBAAmB,WACpC,GAAKxmB,KAAKwE,UAGLxE,KAAKkiB,aAAa3d,SAAU,CAC7B,GAAI2B,GAAQlG,KAAKkiB,aAAahe,aAAa,QACd,oBAAzBlE,KAAK2B,QAAQmlB,SAAyD,uBAAzB9mB,KAAK2B,QAAQmlB,UAC1D5gB,EAAQ,GACRlG,KAAKsjB,eAAiB,KACtBtjB,KAAKkiB,aAAa/d,aAAa,QAAS,KAE5CnE,KAAKmD,eAAgB+C,MAAOlG,KAAKsjB,iBAAkB,GACnDtjB,KAAK+mB,eACD/mB,KAAKkiB,eACLliB,KAAKojB,iBAAiBld,GACtBlG,KAAKilB,gBAIjB7D,EAAWlhB,UAAU6mB,aAAe,WAChC/mB,KAAKqG,YAAcrG,KAAKkG,MAAQlG,KAAKkG,MAAQ,GAAIrD,MACjD7C,KAAK+d,aAAe/d,KAAKkG,MACzBlG,KAAKqjB,qBAAwBpgB,oBAAkBjD,KAAKsjB,gBAAmB,GACnEtjB,KAAK8C,UAAU0O,WAAWxR,KAAKsjB,gBAC3B1R,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,SAGnE8P,EAAWlhB,UAAUkmB,mBAAqB,SAAUvZ,GAC3C7M,KAAKwE,SAGVqI,EAAEma,mBAEN5F,EAAWlhB,UAAU+mB,eAAiB,WAC9BjnB,KAAKmkB,iBAAmBnkB,KAAKmiB,aAAakE,aAC1Cxa,eAAanI,IAAI1D,KAAKmiB,aAAakE,YAAa,uBAAwBrmB,KAAKsmB,aAActmB,OAGnGohB,EAAWlhB,UAAUomB,aAAe,SAAUzZ,GACrC7M,KAAKwE,UAGVqI,EAAEmB,iBACFhO,KAAKknB,MAAMra,KAEfuU,EAAWlhB,UAAU8lB,eAAiB,SAAUnZ,GACxC7M,KAAK8iB,aACLjW,EAAEmB,iBACFhO,KAAK+iB,OAAO,oBACRC,OAAQ,qBAIpB5B,EAAWlhB,UAAUgnB,MAAQ,SAAUxM,GACnC1a,KAAKmD,eAAgB+C,MAAO,OAAQ,GAC/BlG,KAAK8iB,YACN9iB,KAAKojB,iBAAiB,GAE1B,IAAI+D,IACAzM,MAAOA,EAYX,IAVA1a,KAAKua,QAAQ,UAAW4M,GACxBnnB,KAAKuhB,mBAAqB,GAC1BvhB,KAAKwiB,cACLxiB,KAAKonB,cACLpnB,KAAK4e,YAAYlE,GACb1a,KAAK8iB,YACL9iB,KAAK+iB,OAAO,gBACRC,OAAQ,mBAGZ1e,UAAQtE,KAAK2B,QAAS,QAAS,CAC/B,GAAIA,GAAU3B,KAAK2B,QACf0lB,EAAaC,SAASC,YAAY,gBACtCF,GAAWG,UAAU,SAAS,GAAO,GACrC7lB,EAAQ8lB,cAAcJ,KAG9BjG,EAAWlhB,UAAUwnB,qBAAuB,SAAU7a,GAClDA,EAAEmB,iBAEFhO,KAAK2nB,eAAeC,kBAAkB,oBAE1CxG,EAAWlhB,UAAUkjB,iBAAmB,SAAUld,GAC9C8b,QAAM6F,SAAS3hB,EAAOlG,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,kBAEvE/C,EAAWlhB,UAAU6lB,gBAAkB,SAAUlZ,GACxC7M,KAAKwE,UAGVxE,KAAK0hB,eAAgB,EACjB9d,UAAQC,WACR7D,KAAKkiB,aAAa/d,aAAa,WAAY,IAC3CnE,KAAKkiB,aAAa4F,QAEtBjb,EAAEmB,iBACGhO,KAAK2iB,WACF3iB,KAAKykB,aACLzkB,KAAK+nB,KAAKlb,IAGV7M,KAAKqhB,mBAAoB,EACzBrhB,KAAKgoB,KAAK,KAAMnb,GACa,mBAAzB7M,KAAKwD,iBACLxD,KAAKkiB,aAAazT,QAEtBzO,KAAKkiB,aAAazT,QAClBxH,YAAUjH,KAAKmiB,aAAaC,YA7hB3B,kBA8hBDnb,WAASjH,KAAKmiB,aAAaE,QA3hB9B,cA8hBLriB,KAAK0hB,eAAgB,IAEzBN,EAAWlhB,UAAUgjB,6BAA+B,WAChD,IAAKjgB,oBAAkBjD,KAAKioB,gBACxB,IAAK,GAAIte,GAAK,EAAGC,EAAKnK,OAAOoK,KAAK7J,KAAKioB,gBAAiBte,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC1E,GAAIpJ,GAAMqJ,EAAGD,EACb,KAAK1G,oBAAkBjD,KAAKioB,eAAe,GAAK1nB,KACxC4gB,EAAcnO,QAAQzS,IAAQ,EAC9B,GAAY,UAARA,EAAiB,CACjB,GAAI2nB,GAAsBloB,KAAKioB,eAAe,GAAK1nB,GAAK0c,QAAQ,OAAQ,KAAMC,MACnD,MAAvBgL,GACAjhB,YAAUjH,KAAKmiB,aAAaC,WAAY8F,EAAmBxa,MAAM,UAGpE,IAAY,UAARnN,EAAiB,CACtB,GAAI4nB,GAAWnoB,KAAKmiB,aAAaC,UAAUle,aAAa3D,EACnD0C,qBAAkBklB,GASnBA,EAAWnoB,KAAKioB,eAAe,GAAK1nB,GARS,MAAzC4nB,EAASC,OAAOD,EAASxnB,OAAS,GAClCwnB,GAAsBnoB,KAAKioB,eAAe,GAAK1nB,GAG/C4nB,EAAWA,EAAW,IAAMnoB,KAAKioB,eAAe,GAAK1nB,GAM7DP,KAAKmiB,aAAaC,UAAUje,aAAa5D,EAAK4nB,OAG9CnoB,MAAKmiB,aAAaC,UAAUje,aAAa5D,EAAKP,KAAKioB,eAAe,GAAK1nB,MAO/F6gB,EAAWlhB,UAAUmoB,6BAA+B,WAChD,IAAKplB,oBAAkBjD,KAAKioB,gBACxB,IAAK,GAAIte,GAAK,EAAGC,EAAKnK,OAAOoK,KAAK7J,KAAKioB,gBAAiBte,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC1E,GAAIpJ,GAAMqJ,EAAGD,EACTwX,GAAcnO,QAAQzS,GAAO,GAC7BP,KAAKkiB,aAAa/d,aAAa5D,EAAKP,KAAKioB,eAAe,GAAK1nB,MAK7E6gB,EAAWlhB,UAAUooB,eAAiB,SAAUvL,EAAaC,GACpD/Z,oBAAkB+Z,KACnBA,EAAeA,EAAYC,QAAQ,OAAQ,KAAMC,QAEhDja,oBAAkB8Z,KACnBA,EAAeA,EAAYE,QAAQ,OAAQ,KAAMC,QAErD8E,QAAMuG,YAAYxL,GAAc/c,KAAKmiB,aAAaC,WAAYpF,GAC1Dhd,KAAKuG,cACLyb,QAAMuG,YAAYxL,GAAc/c,KAAKuG,cAAeyW,IAG5DoE,EAAWlhB,UAAUsoB,wBAA0B,SAAU3b,GACrD,OAAQA,EAAEiB,QACN,IAAK,SACG9N,KAAKykB,aACLzkB,KAAK+nB,KAAKlb,GAGV7M,KAAKmiB,aAAaC,UAAUvM,SAAS7V,KAAK0G,OAAOohB,MAErD,MACJ,KAAK,QACI9nB,KAAKykB,cAIDzkB,KAAKkG,QAAWlG,KAAKqG,aAAgBrG,KAAKykB,cAC3CzkB,KAAKmiB,aAAaC,UAAUvM,SAAS7V,KAAK0G,OAAO+H,QAJrDzO,KAAKgoB,KAAK,KAAMnb,GAOS,mBAAzB7M,KAAKwD,iBACLxD,KAAKkiB,aAAazT,OAEtB,MACJ,KAAK,MACDzO,KAAK+nB,KAAKlb,KAGtBuU,EAAWlhB,UAAU+lB,kBAAoB,WAErC,GADAjmB,KAAK4hB,WAAY,EACZ5hB,KAAKwE,QAAV,CAGIxE,KAAK8iB,aAAe9iB,KAAKkiB,aAAahc,OAASlG,KAAKmjB,eAChDnjB,KAAKyhB,iBAAoBzhB,KAAKkG,OAAkC,SAAxBlG,KAAKuiB,gBAAqD,UAAxBviB,KAAKuiB,iBAA8BviB,KAAKmjB,cAClHnjB,KAAKojB,iBAAiBpjB,KAAKyhB,iBAC3BzhB,KAAKkiB,aAAauG,eAAiB,EACnCzoB,KAAKkiB,aAAawG,aAAe1oB,KAAKkiB,aAAahc,MAAMvF,QAGjE,IAAIgoB,IACAC,MAAO5oB,KAEXA,MAAKqhB,mBAAoB,EACzBrhB,KAAKua,QAAQ,QAASoO,GACtB3oB,KAAK4iB,kBACD5iB,KAAK6oB,cAAgB7oB,KAAK0hB,eAC1B1hB,KAAKgoB,SAGb5G,EAAWlhB,UAAU4lB,aAAe,WAChC9lB,KAAK+B,gBAAiB,EAClB/B,KAAK8iB,YACL9iB,KAAK+iB,OAAO,gBACRC,OAAQ,oBAIpB5B,EAAWlhB,UAAUgmB,iBAAmB,SAAUrZ,GAC9C,GAAK7M,KAAKwE,QAAV,CAoBA,GAjBAxE,KAAK8oB,mBAC2B,KAA5B9oB,KAAKkiB,aAAahc,OAAgBjD,oBAAkBjD,KAAKkG,SACzDlG,KAAKuhB,mBAAqB,KAC1BvhB,KAAKojB,iBAAiB,KAE1BpjB,KAAKwiB,cACLxiB,KAAKonB,cACLpnB,KAAK+oB,cAAclc,GACf7M,KAAK8iB,YAAc9iB,KAAKyhB,iBAAmBzhB,KAAKmjB,aAAuC,WAAxBnjB,KAAKuiB,iBAChEviB,KAAKkiB,aAAahc,QAAUlG,KAAKyhB,iBAAoBzhB,KAAKkG,OAAkC,SAAxBlG,KAAKuiB,gBAAqD,UAAxBviB,KAAKuiB,iBAA8BviB,KAAKmjB,aAC9InjB,KAAKojB,iBAAiB,KAG9BpjB,KAAKilB,aACDjlB,KAAKykB,cAAgB6C,SAAS0B,gBAAkBhpB,KAAKkiB,cACrDliB,KAAK+nB,KAAKlb,GAEe,eAAzB7M,KAAKwD,gBAAkC,CACvC,GAAIylB,IACAL,MAAO5oB,KAEXA,MAAKua,QAAQ,OAAQ0O,GAErBjpB,KAAKykB,eACLzkB,KAAK6E,kBAAoBsH,SAAOnM,KAAK6E,kBAAmB7E,KAAKoM,YAC7DpM,KAAKkpB,wBAA0B,GAAI5c,kBAAetM,KAAKoE,gBAAgByR,SAAS,GAAGsT,mBAC/E5c,UAAW,UACXC,UAAWxM,KAAKwoB,wBAAwB9b,KAAK1M,MAC7CoM,WAAYpM,KAAK6E,qBAGzB7E,KAAK+B,gBAAiB,IAE1Bqf,EAAWlhB,UAAUkpB,gBAAkB,SAAUvc,GACvC5J,oBAAkBjD,KAAK4mB,WAAc3jB,oBAAkBjD,KAAKmiB,iBAAkBniB,KAAKmiB,aAAaC,UAAUxW,SAASiB,EAAEvM,SAAsB,cAAXuM,EAAE/E,MACnI9H,KAAK4mB,SAASjlB,SAAW3B,KAAK4mB,SAASjlB,QAAQiK,SAASiB,EAAEvM,UAAyB,eAAXuM,EAAE/E,MAC3E+E,EAAEmB,gBAEN,IAAI1N,GAASuM,EAAEvM,MACTgE,WAAQhE,EAAQ,kCAAsC2C,oBAAkBjD,KAAKmiB,eAC1E7d,UAAQhE,EAAQ,oBAA0BN,KAAKmiB,aAAaC,WAC5D9hB,EAAOmD,UAAUmI,SAAS,SAI1BtH,UAAQhE,EAAQ,mCAEjBA,EAAOmD,UAAUmI,SAAS,WACtB3I,oBAAkB4J,EAAEvM,OAAO+oB,gBAC5Bxc,EAAEvM,OAAO+oB,cAAc5lB,UAAUmI,SAAS,eAC1CtH,UAAQhE,EAAQ,eAChBgE,UAAQhE,EAAQ,cAAcmD,UAAUmI,SAAS,KAAO5L,KAAKgN,MAAM1D,eACtEtJ,KAAK+nB,KAAKlb,GAELvI,UAAQhE,EAAQ,wBAClBA,EAAOmD,UAAUmI,SAAS,YAC1BtL,EAAOmD,UAAUmI,SAAS,WACxB,GAAI/I,OAAM7C,KAAKkG,SAAYzE,EAAOvB,UAAUud,iBAAiB5b,KAAK7B,KAAMA,KAAKkG,QAClFlG,KAAK+nB,KAAKlb,KAhBd7M,KAAK+nB,KAAKlb,GACV7M,KAAKspB,aAmBblI,EAAWlhB,UAAUwmB,qBAAuB,SAAU7Z,GAClD,GAAI0c,GAAcvpB,KAAK+M,aACvB,QAAQF,EAAEiB,QACN,IAAK,aACD9N,KAAKshB,iBAAkB,EACvBthB,KAAK+nB,KAAKlb,GACV7M,KAAKkiB,aAAazT,OAClB,MACJ,KAAK,eACDzO,KAAKshB,iBAAkB,EACvBthB,KAAK8oB,mBACL9oB,KAAKwiB,cACLxiB,KAAK+oB,cAAclc,GACU,eAAzB7M,KAAKwD,iBACLxD,KAAKgoB,KAAK,KAAMnb,EAEpB,MACJ,KAAK,SACD7M,KAAK+nB,KAAKlb,EACV,MACJ,KAAK,QACD7M,KAAK8oB,mBACL9oB,KAAKwiB,cACLxiB,KAAKonB,cACLpnB,KAAK+oB,cAAclc,GACnB7M,KAAKilB,aACAjlB,KAAKykB,cAAgB6C,SAAS0B,gBAAkBhpB,KAAKkiB,cACtDliB,KAAK+nB,KAAKlb,GAEV7M,KAAKykB,eACL5X,EAAEmB,iBACFnB,EAAEma,kBAEN,MACJ,KAAK,MACL,IAAK,WAEG,GAAInc,GAAQ7K,KAAKkiB,aAAauG,eAC1BnjB,EAAMtF,KAAKkiB,aAAawG,YAC5B,IAAI1oB,KAAK8iB,aAAe9iB,KAAK4mB,WAAa5mB,KAAK2iB,SAAU,CACrD,GAAI6G,GAAWxpB,KAAKkiB,aAAahc,MAAMvF,QACxB,IAAVkK,GAAevF,IAAQkkB,GAAclkB,IAAQkkB,GAAyB,QAAb3c,EAAEiB,QAAgC,IAAVjD,GAA4B,aAAbgC,EAAEiB,SACnGjB,EAAEmB,iBAENhO,KAAK+iB,OAAO,kBACRC,OAAQ,iBACRnW,EAAGA,IAEPhC,EAAQ7K,KAAKkiB,aAAauG,eAC1BnjB,EAAMtF,KAAKkiB,aAAawG,aAE5B1oB,KAAK8oB,mBACL9oB,KAAKwiB,cACLxiB,KAAKonB,cACLpnB,KAAK+oB,cAAclc,GACnB7M,KAAKilB,aACDjlB,KAAK8iB,aACL9iB,KAAKkiB,aAAauG,eAAiB5d,EACnC7K,KAAKkiB,aAAawG,aAAepjB,GAErCtF,KAAK+nB,KAAKlb,EACV,MAER,SACI7M,KAAKypB,cAAc5c,GAEF,WAAbA,EAAEiB,QAAuByb,IAAgBvpB,KAAKgN,OAC9ChN,KAAK+nB,KAAKlb,KAI1BuU,EAAWlhB,UAAUupB,cAAgB,SAAU5c,GAC3C7M,KAAK+d,cAAkB9a,oBAAkBjD,KAAKkG,QAAU,GAAIrD,OAAM7C,KAAKkG,QAAW,KAC9ElG,KAAKykB,eACLhjB,EAAOvB,UAAUuM,gBAAgB5K,KAAK7B,KAAM6M,GACxC7M,KAAKykB,cACL3gB,aAAW9D,KAAKkiB,cACZxZ,wBAAyB,GAAK1I,KAAKmY,0BAKnDiJ,EAAWlhB,UAAUknB,YAAc,WAC/B,IAAKnkB,oBAAkBjD,KAAKkG,SAAajD,oBAAkBjD,KAAK+d,gBAC1D/d,KAAKkG,QAAWlG,KAAK+d,gBACnB/d,KAAK4mB,UACD5mB,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,eAAgBzJ,OAAS,GAChEqG,cAAYhH,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,gBApyBxD,gBAuyBEnH,oBAAkBjD,KAAKkG,SAClBlG,KAAKkG,QAAUlG,KAAKuC,MAAUvC,KAAKkG,QAAUlG,KAAKwC,KAAM,CAC1D,GAAIknB,GAAa,GAAI7mB,MAAK7C,KAAKoG,WAAWpG,KAAKkG,OAC/CzE,GAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM,QAAS0pB,KAKhEtI,EAAWlhB,UAAU4oB,iBAAmB,WACpC,GAAIlX,GACAe,CAEAf,GADyB,mBAAzB5R,KAAKwD,gBACKP,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKglB,eAAzBhlB,KAAK+kB,aAG7C9hB,oBAAkBjD,KAAK+kB,cAAgB/kB,KAAK+kB,aAAe/kB,KAAK+kB,aAAa9H,QAAQ,KAAM,KAEnGha,oBAAkB2O,IACTA,EAAOlE,MAAM,KAAK/M,OAAS,EAC3B,IACNiR,EAASA,EAAOqL,QAAQ,KAAM,KAGtC,IAAI0M,EAGIA,GAFqB,mBAAzB3pB,KAAKwD,gBACqB,cAAtBxD,KAAK2C,cAEDiP,OAAS3O,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKglB,eAAzBhlB,KAAK+kB,aACrDjd,KAAM,WAAYwJ,SAAU,QAK5BM,OAAS3O,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKglB,eAAzBhlB,KAAK+kB,aACrDjd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,WAMjDD,EADsB,cAAtB3S,KAAK2C,cACaiP,OAAQA,EAAQ9J,KAAM,WAAYwJ,SAAU,QAG5CM,OAAQA,EAAQ9J,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,UAIvF,IAAIjE,EACmC,iBAA5B3O,MAAKkiB,aAAahc,QACzBlG,KAAKkiB,aAAahc,MAAQlG,KAAKkiB,aAAahc,MAAMgX,QAExB,mBAAzBld,KAAKwD,gBACFxD,KAAKmG,eAAenG,KAAK8C,UAAUyO,UAAUvR,KAAKkiB,aAAahc,MAAOyjB,IACtEhb,EAAO3O,KAAK8C,UAAUyO,UAAUvR,KAAKkiB,aAAahc,MAAM0jB,oBAAqBD,IAIzEhX,EADsB,cAAtB3S,KAAK2C,cACamF,KAAM,WAAYwJ,SAAU,QAG5BxJ,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,WAEnEjE,EAAO3O,KAAK8C,UAAUyO,UAAUvR,KAAKkiB,aAAahc,MAAOyM,KAI7DhE,EAAO3O,KAAK8C,UAAUyO,UAAUvR,KAAKkiB,aAAahc,MAAOyjB,GACzDhb,GAAS1L,oBAAkB0L,IAAS4G,OAAO5G,GAAS,KAAOA,GACtD1L,oBAAkBjD,KAAK+kB,eAA6C,KAA5B/kB,KAAKkiB,aAAahc,OAAgBlG,KAAK2kB,aAC3E3kB,KAAK+B,iBAAoB/B,KAAK+B,gBAAkB/B,KAAKkiB,aAAahc,QAAUlG,KAAKqjB,wBAC3C,IAApCrjB,KAAK+kB,aAAa/R,QAAQ,MAC7BrE,EAAKyF,YAAYpU,KAAKkG,MAAMsI,gBAKV,eAAzBxO,KAAKwD,iBAAsCxD,KAAKkG,QAAUqP,OAAOvV,KAAKkG,QAAWyI,GAClFA,EAAKpL,SAASvD,KAAKkG,MAAMsK,WAAYxQ,KAAKkG,MAAMuK,aAAczQ,KAAKkG,MAAMwK,aAAc1Q,KAAKkG,MAAMyK,mBAElG3Q,KAAK2kB,YAAchW,GACnB3O,KAAKojB,iBAAiBpjB,KAAK8C,UAAU0O,WAAW7C,EAAMgb,IAClD3pB,KAAKkiB,aAAahc,QAAUlG,KAAKqjB,sBACjCrjB,KAAKmD,eAAgB+C,MAAOyI,IAAQ,IAGlC3O,KAAK2kB,YACP3kB,KAAKkiB,aAAahc,QAAUlG,KAAKqjB,sBACjCrjB,KAAKmD,eAAgB+C,MAAOyI,IAAQ,GAGxC3O,KAAK2kB,aAAehW,GAAQ3O,KAAKkiB,aAAahc,SAAWlG,KAAK8iB,WAAa9iB,KAAKyhB,gBAAkB,KAClGzhB,KAAKmD,eAAgB+C,MAAO,OAAQ,GAEpCqP,OAAOvV,KAAKkG,QACZlG,KAAKmD,eAAgB+C,MAAO,OAAQ,GAEpCjD,oBAAkBjD,KAAKkG,SACvBlG,KAAKqG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,MAGjE6d,EAAWlhB,UAAU2pB,eAAiB,WAClC,GAAIjoB,GAAQ5B,IACZA,MAAKuG,aAAevG,KAAKqE,cAAc,OAASqD,UAAgBvG,EAAO,qBAClE8B,oBAAkBjD,KAAKwc,YACxBxc,KAAKuG,aAAamB,WAAa,IAAM1H,KAAKwc,UAE1C5Y,UAAQC,WACR7D,KAAK8pB,cACL9pB,KAAKyG,MAAQzG,KAAKqE,cAAc,OAChCrE,KAAKyG,MAAMiB,UAAiBvG,EAAO,gBACnCmmB,SAASyC,KAAKriB,WAAa,mBAC3B1H,KAAKyG,MAAMG,MAAMojB,QAAU,QAC3B1C,SAASyC,KAAK1hB,YAAYrI,KAAKyG,QAGnCzG,KAAKoE,gBAAgBqJ,cAAc,eAAe/F,UAAY,GAC9D1H,KAAK4mB,SAAW,GAAIqD,SAAMjqB,KAAKuG,cAC3B2jB,QAASlqB,KAAKoE,gBACd+lB,SAAUvmB,UAAQC,SAAWyjB,SAASyC,KAAO/pB,KAAKmiB,aAAaC,UAC/DgI,SAAUxmB,UAAQC,UAAawmB,EAAG,SAAUC,EAAG,WAAeD,EAAG,OAAQC,EAAG,UAC5EC,QAh6BM,EAi6BNC,WAAY,YACZ7mB,UAAW3D,KAAK2D,UAChBkD,OAAQ7G,KAAK6G,OACb4jB,UAAW7mB,UAAQC,UAAawmB,EAAG,MAAOC,EAAG,QAAYD,EAAG,OAAQC,EAAG,QACvEI,KAAM,WAC4B,mBAA1B9oB,EAAM4B,iBACF8jB,SAAS0B,gBAAkBpnB,EAAMsgB,eACjCtgB,EAAMiD,kBAAoBsH,SAAOvK,EAAMiD,kBAAmBjD,EAAMwK,YAChExK,EAAMwC,gBAAgByR,SAAS,GAAGsT,kBAAkB1a,QACpD7M,EAAMsnB,wBAA0B,GAAI5c,kBAAe1K,EAAMwC,gBAAgByR,SAAS,GAAGsT,mBACjF5c,UAAW,UACXC,UAAW5K,EAAM4mB,wBAAwB9b,KAAK9K,GAC9CwK,WAAYxK,EAAMiD,oBAEtBjD,EAAMsnB,wBAA0B,GAAI5c,kBAAe1K,EAAMugB,aAAaC,UAAUvM,SAASjU,EAAM8E,QAC3F6F,UAAW,UACXC,UAAW5K,EAAM4mB,wBAAwB9b,KAAK9K,GAC9CwK,WAAYxK,EAAMiD,sBAI/B8lB,MAAO,WACF/oB,EAAMyf,mBACNzf,EAAMugB,aAAaC,UAAUvM,SAASjU,EAAM8E,OAAO+H,QAEnD7M,EAAMsE,OACNtE,EAAM8iB,gBAEN9iB,EAAMglB,UACNhlB,EAAMglB,SAASjO,UAEnB/W,EAAMuL,gBACN9C,SAAOzI,EAAM2E,cACb3E,EAAMglB,SAAWhlB,EAAM2E,aAAe,KACtC3E,EAAMgpB,YAAc,KACpBhpB,EAAMsnB,wBAA0B,KAChCtnB,EAAMipB,qBACPC,mBAAoB,WACdlnB,UAAQC,UACTjC,EAAMmmB,UAIlB/nB,KAAK4mB,SAASjlB,QAAQ+F,WAAa,IAAM1H,KAAKwc,SAC9Cxc,KAAK6qB,qBAETzJ,EAAWlhB,UAAU6qB,gBAAkB,WAC9B/qB,KAAKwE,SAKNxE,KAAKkiB,aAAa/d,aAAa,gBAAiB,SAChDnE,KAAKkiB,aAAa/d,aAAa,WAAYnE,KAAKgE,YALhDhE,KAAKkiB,aAAa/d,aAAa,gBAAiB,QAChDnE,KAAKkiB,aAAale,UAAY,IAOtCod,EAAWlhB,UAAU4pB,YAAc,WAC/B,GAAIH,GACAG,EAAc9pB,KAAKqE,cAAc,OAASqD,UAAW,mBACrDsjB,EAAchrB,KAAKqE,cAAc,MAAQqD,UAAW,iBACpDujB,EAAKjrB,KAAKqE,cAAc,OACxB6mB,EAAUlrB,KAAKqE,cAAc,QAAUqD,UAAW,gBAClDyjB,EAAYnrB,KAAKqE,cAAc,QAAUqD,UAAW,iBAEpDiiB,GADsB,cAAtB3pB,KAAK2C,cACWiP,OAAQ,IAAKN,SAAU,aAGvBM,OAAQ,IAAKN,SAAU,WAAYsB,SAAU,WAEjEoY,EAAY7f,YAAc,GAAKnL,KAAK8C,UAAU0O,WAAWxR,KAAKkG,OAAS,GAAIrD,MAAQ8mB,GAE/EA,EADsB,cAAtB3pB,KAAK2C,cACWiP,OAAQ,IAAKN,SAAU,aAGvBM,OAAQ,IAAKN,SAAU,WAAYsB,SAAU,WAEjEsY,EAAQ/f,YAAmBnL,KAAK8C,UAAU0O,WAAWxR,KAAKkG,OAAS,GAAIrD,MAAQ8mB,GAAe,KAE1FA,EADsB,cAAtB3pB,KAAK2C,cACWiP,OAAQ,QAASN,SAAU,aAG3BM,OAAQ,QAASN,SAAU,WAAYsB,SAAU,WAErEuY,EAAUhgB,YAAc,GAAKnL,KAAK8C,UAAU0O,WAAWxR,KAAKkG,OAAS,GAAIrD,MAAQ8mB,GACjFG,EAAYzhB,YAAY2iB,GACxBC,EAAG5iB,YAAY6iB,GACfD,EAAG5iB,YAAY8iB,GACfrB,EAAYzhB,YAAY4iB,GACxBjrB,KAAKoE,gBAAgBgnB,aAAatB,EAAa9pB,KAAKoE,gBAAgB+kB,oBAExE/H,EAAWlhB,UAAU6oB,cAAgB,SAAUrO,GACvC1a,KAAKkiB,aAAahc,QAAUlG,KAAKqjB,uBAC3BrjB,KAAK+d,cAAgB/d,KAAK+d,aAAalJ,cAAgB7U,KAAKkG,OAASlG,KAAKkG,MAAM2O,aAC9E7U,KAAK2hB,uBAAyB3hB,KAAKykB,cACnCzkB,KAAKonB,cAETpnB,KAAKwd,YAAYtX,MAAQlG,KAAKkG,MAC9BlG,KAAKwd,YAAY9C,MAAQA,GAAS,KAClC1a,KAAKwd,YAAY7b,QAAU3B,KAAK2B,QAChC3B,KAAKwd,YAAYqB,cAAgB5b,oBAAkByX,GAC/C1a,KAAKmC,WAAanC,KAAKkC,cACvBlC,KAAKkC,eAAgB,EAGrBlC,KAAKua,QAAQ,SAAUva,KAAKwd,aAEhCxd,KAAKqjB,qBAAuBrjB,KAAKkiB,aAAahc,MAC9ClG,KAAK+d,aAAgBxI,OAAO,GAAI1S,MAAK7C,KAAKoG,WAAWpG,KAAKkG,SAAmD,KAAxC,GAAIrD,MAAK7C,KAAKoG,WAAWpG,KAAKkG,QACnGlG,KAAK6e,cAAe,IAIhCuC,EAAWlhB,UAAUsa,eAAiB,WAClCxa,KAAKua,QAAQ,YAAava,KAAKya,gBAEnC2G,EAAWlhB,UAAU0e,YAAc,SAAUlE,GACpC1a,KAAK0hB,eACN1hB,KAAKqrB,eAAe3Q,IAElB1a,KAAK+d,cAAgB/d,KAAK+d,aAAalJ,cAAgB7U,KAAKkG,OAASlG,KAAKkG,MAAM2O,YAClF7U,KAAKwd,YAAY9C,MAAQA,GAAgB,KACzC1a,KAAKwd,YAAY7b,QAAU3B,KAAK2B,QAChC3B,KAAKwd,YAAYqB,aAAe7e,KAAK6e,aAChC7e,KAAK2hB,uBACN3hB,KAAKua,QAAQ,SAAUva,KAAKwd,aAEhCxd,KAAK+d,aAAe/d,KAAKkG,OAAS,GAAIrD,OAAM7C,KAAKkG,OAC5ClG,KAAK2hB,uBACN3hB,KAAK+nB,KAAKrN,GAEd1a,KAAKqjB,qBAAuBrjB,KAAKkiB,aAAahc,MAC9ClG,KAAKilB,cAEAvK,GACL1a,KAAK+nB,KAAKrN,IAGlB0G,EAAWlhB,UAAUwW,gBAAkB,WACnC,GAAIC,KAOJ,OANI3W,OACA2W,EAAQ5M,MAAO6M,MAAO5W,MAAO6W,OAAQ,YAErC7W,KAAK8iB,YACLnM,EAAQ5M,MAAO6M,MAAO5W,MAAO6W,OAAQ,mBAElCF,GAEXyK,EAAWlhB,UAAUmrB,eAAiB,SAAUxe,GAC5C,GAAI8B,GACAmW,EACAnS,CAEAmS,GADyB,mBAAzB9kB,KAAKwD,iBACSP,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKglB,eAGjEhlB,KAAK+kB,aAElB/kB,KAAKkG,QACwB,mBAAzBlG,KAAKwD,iBAEDmP,EADsB,cAAtB3S,KAAK2C,cACaiP,OAAQkT,EAAYhd,KAAM,WAAYwJ,SAAU,QAGhDM,OAAQkT,EAAYhd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,WAEvFjE,EAAO3O,KAAK8C,UAAU0O,WAAWxR,KAAKwd,YAAYtX,MAAOyM,KAIrDA,EADsB,cAAtB3S,KAAK2C,cACaiP,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,QAGvDM,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,WAE9FjE,EAAO3O,KAAK8C,UAAU0O,WAAWxR,KAAKwd,YAAYtX,MAAOyM,IAEzD3S,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,oBAIf/f,oBAAkB0L,KACnB3O,KAAKojB,iBAAiBzU,GAClB3O,KAAK8iB,YACL9iB,KAAK+iB,OAAO,oBACRC,OAAQ,qBAKxB5B,EAAWlhB,UAAUukB,WAAa,WAC9B,SAAIzkB,KAAKuG,eAAgBvG,KAAKuG,aAAa9C,UAAUmI,SA9mC1C,qBAmnCfwV,EAAWlhB,UAAUmkB,SAAW,SAAUC,GAElCtkB,KAAKmiB,aAAaC,UAAUxb,MAAM0d,MADjB,gBAAVA,GACmCgH,aAAWtrB,KAAKskB,OAEpC,gBAAVA,GAC+BA,EAAMiH,MAAM,WAAevrB,WAAesrB,aAAWtrB,KAAKskB,OAG3D,QAUlDlD,EAAWlhB,UAAU8nB,KAAO,SAAUlgB,EAAM+E,GACxC,GAAIjL,GAAQ5B,IACZ,MAAKA,KAAKwE,SAAWxE,KAAK2iB,WAAc3iB,KAAKwE,SAAWxE,KAAK4mB,UAA7D,CAII,GAAI4E,IAAY,EACZC,MAAa,EACZxoB,qBAAkBjD,KAAKkG,SAAalG,KAAKkG,QAAU,GAAIrD,MAAK7C,KAAKoG,WAAWpG,KAAKuC,QAC9EvC,KAAKkG,QAAU,GAAIrD,MAAK7C,KAAKoG,WAAWpG,KAAKwC,MAKjDipB,EAAazrB,KAAKkG,OAAS,MAJ3BulB,EAAa,GAAI5oB,MAAK7C,KAAKoG,WAAWpG,KAAKkG,QAC3ClG,KAAKmD,eAAgB+C,MAAS,OAAQ,IAKrClG,KAAKykB,eACNhjB,EAAOvB,UAAUmC,OAAOR,KAAK7B,MAC7BA,KAAKmD,eAAgB+C,MAASulB,GAAc,OAAQ,GACpDzrB,KAAK+d,aAAe0N,EACpBzrB,KAAK6pB,kBAELjmB,UAAQC,WACR7D,KAAK0rB,mBAAqB1rB,KAAKqE,cAAc,OAASqD,UAAW,8BACjE4f,SAASyC,KAAK1hB,YAAYrI,KAAK0rB,qBAEnC1rB,KAAK4qB,aACD5c,eAAgB,WACZwd,GAAY,GAEhBG,MAAO3rB,KAAK4mB,SACZlM,MAAO7N,GAAK,KACZ+e,QAAQ,EACRC,SAAUjoB,UAAQC,SAAW7D,KAAK0rB,mBAAqBpE,SAASyC,KAEpE,IAAI+B,GAAY9rB,KAAK4qB,WACrB5qB,MAAKua,QAAQ,OAAQuR,EAAW,SAAUA,GAEtC,GADAlqB,EAAMgpB,YAAckB,EAChBN,IAAc5pB,EAAMgpB,YAAYgB,OAAQ,CACxC3kB,WAASrF,EAAMugB,aAAaE,QArqCnC,YAsqCOzgB,EAAMgpB,YAAYiB,SAASxjB,YAAYzG,EAAM2E,cAC7C3E,EAAMglB,SAASmF,gBAAgBnqB,EAAMsgB,aACrC,IAAI8J,IACA1R,KAAM,SACNtS,SAAUpE,UAAQC,SAAW,EArqClC,IAuqCsB,OAAjBjC,EAAMiF,OACNjF,EAAMglB,SAASoB,KAAK,GAAIiE,aAAUD,GAAgBpqB,EAAMD,SAGxDC,EAAMglB,SAASoB,KAAK,GAAIiE,aAAUD,GAAgB,MAGtDvqB,EAAOvB,UAAUoG,gBAAgBzE,KAAKD,EAAOA,EAAM8pB,mBAAoB9pB,EAAMglB,SAASjlB,QAASC,EAAM6E,MAAO7C,UAAQC,UACpHjC,EAAMipB,wBAGNjpB,GAAMglB,SAASjO,UACf/W,EAAM2E,aAAe3E,EAAMglB,SAAW,IAErC3jB,qBAAkBrB,EAAMsgB,eAA8C,KAA7BtgB,EAAMsgB,aAAahc,QACxDjD,oBAAkBrB,EAAMwL,mBAAqBxL,EAAMwL,iBAAiBhD,iBAAiB,iBAAiBzJ,OAAS,IAChHsG,YAAUrF,EAAMwL,iBAAiBK,cAAc,kBAprCrD,kBAqrCMzG,cAAYpF,EAAMwL,iBAAiBhD,iBAAiB,iBAtrC7D,eAyrCCyB,eAAanI,IAAI4jB,SAAU,uBAAwB1lB,EAAMwnB,gBAAiBxnB,OAUtFwf,EAAWlhB,UAAU6nB,KAAO,SAAUrN,GAClC,GAAI9Y,GAAQ5B,IACZ,IAAKiD,oBAAkBjD,KAAKuG,cAuBpB3C,UAAQC,UAAY7D,KAAK0iB,YAAc1iB,KAAK2iB,UAC5C3iB,KAAKkiB,aAAatJ,gBAAgB,YAEtC5Y,KAAKyiB,mBA1BkC,CACvC,GAAIyJ,IAAY,CAChBlsB,MAAK4qB,aACD5c,eAAgB,WACZke,GAAY,GAEhBP,MAAO3rB,KAAK4mB,SACZlM,MAAOA,GAAS,KAChBkR,QAAQ,GAEZ5kB,cAAYhH,KAAKmiB,aAAaE,QAttC7B,YAutCDrb,eAAasgB,SAASyC,MAttCnB,kBAutCH,IAAI+B,GAAY9rB,KAAK4qB,WACjB5qB,MAAKykB,aACLzkB,KAAKua,QAAQ,QAASuR,EAAW,SAAUA,GACvClqB,EAAMuqB,mBAAmBD,EAAWJ,KAIxC9rB,KAAKmsB,mBAAmBD,EAAWJ,KAW/C1K,EAAWlhB,UAAUisB,mBAAqB,SAAUC,EAASN,GACzD9rB,KAAK4qB,YAAckB,EACf9rB,KAAKykB,cAAiB2H,IAAYpsB,KAAK4qB,YAAYgB,SACnD5rB,KAAK4mB,SAASmB,OACd/nB,KAAKshB,iBAAkB,EACvBthB,KAAKqM,eAAesM,UACpB3R,cAAYhH,KAAKmiB,aAAaE,QAhvC7B,aAkvCLriB,KAAK6qB,oBACDjnB,UAAQC,UAAY7D,KAAKyG,QACzBzG,KAAKyG,MAAMG,MAAMojB,QAAU,OAC3BhqB,KAAKyG,MAAM4lB,UAAY,GACvBrsB,KAAKyG,MAAQ,MAEb7C,UAAQC,WACHZ,oBAAkBjD,KAAK0rB,sBAAwBU,IAAYnpB,oBAAkBjD,KAAK4qB,cAAiB5qB,KAAK4qB,YAAYgB,SACrH5rB,KAAK0rB,mBAAmBrU,SACxBrX,KAAK0rB,mBAAqB,OAGlC7f,eAAawL,OAAOiQ,SAAU,uBAAwBtnB,KAAKopB,iBACvDxlB,UAAQC,UAAY7D,KAAK0iB,YAAc1iB,KAAK2iB,UAC5C3iB,KAAKkiB,aAAatJ,gBAAgB,YAEtC5Y,KAAKyiB,gBASTrB,EAAWlhB,UAAUosB,QAAU,SAAUC,GACjCjF,SAAS0B,gBAAkBhpB,KAAKkiB,cAAgBliB,KAAKwE,UACrDxE,KAAKkiB,aAAazT,QAClBxH,YAAUjH,KAAKmiB,aAAaC,YAjxCvB,oBA0xCbhB,EAAWlhB,UAAUopB,SAAW,WACxBhC,SAAS0B,gBAAkBhpB,KAAKkiB,eAChClb,eAAahH,KAAKmiB,aAAaC,YA5xC1B,kBA6xCLpiB,KAAKkiB,aAAa4F,SAU1B1G,EAAWlhB,UAAU6M,YAAc,WAC/B,GAAIA,EAKJ,OAJI/M,MAAKoE,kBAEL2I,EAActL,EAAOvB,UAAU6M,YAAYlL,KAAK7B,OAE7C+M,GAWXqU,EAAWlhB,UAAUgN,WAAa,SAAUS,EAAMgB,GAC1C3O,KAAKoE,iBAEL3C,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM2N,EAAMgB,IAQrDyS,EAAWlhB,UAAUyY,QAAU,WAC3B3Y,KAAK6mB,eACLplB,EAAOvB,UAAUyY,QAAQ9W,KAAK7B,MACzBiD,oBAAkBjD,KAAKymB,kBACxBzmB,KAAKymB,gBAAgB9N,UAErB3Y,KAAK4mB,UAAY5mB,KAAK4mB,SAASjlB,QAAQ8B,UAAUmI,SA30CjD,YA40CAnK,EAAOvB,UAAUyY,QAAQ9W,KAAK7B,KAElC,IAAIujB,IACAhc,cAAe,OAAQJ,gBAAiB,OACxCqc,gBAAiB,QAAS/a,KAAQ,WAAYgb,aAAgB,MAC9DC,YAAe,MAAOC,eAAkB,MAAOC,WAAc,QAE7D5jB,MAAKkiB,eACLF,QAAMwK,iBAAiBjJ,EAAWvjB,KAAKkiB,cAClCjf,oBAAkBjD,KAAKysB,iBAAiBvoB,aAAa,aAItDlE,KAAKkiB,aAAatJ,gBAAgB,YAHlC5Y,KAAKkiB,aAAa/d,aAAa,WAAYnE,KAAKgE,UAKpD6H,eAAawL,OAAOrX,KAAKkiB,aAAc,OAAQliB,KAAKkmB,kBACpDra,eAAawL,OAAOrX,KAAKkiB,aAAc,QAASliB,KAAKimB,mBACrDjmB,KAAK0sB,wBAEL1sB,KAAKykB,eACDzkB,KAAKuG,cACL8D,SAAOrK,KAAKuG,cAEhBvG,KAAK4mB,SAAW5mB,KAAKuG,aAAe,KACpCvG,KAAKqM,eAAesM,WAEL,OAAf3Y,KAAK2sB,QACD3sB,KAAKkiB,eACAjf,oBAAkBjD,KAAKmiB,eACxBniB,KAAKmiB,aAAaC,UAAUwK,sBAAsB,WAAY5sB,KAAKkiB,cAEvElb,eAAahH,KAAKkiB,eAx2ClB,aA02CJlb,eAAahH,KAAK2B,UAAWR,IACxB8B,oBAAkBjD,KAAKmiB,eACxB9X,SAAOrK,KAAKmiB,aAAaC,YAG7BpiB,KAAKumB,aACL1a,eAAawL,OAAOrX,KAAKumB,YAAa,QAASvmB,KAAKwmB,kBAExDxmB,KAAKmiB,aAAe,KACpBniB,KAAKymB,gBAAkB,MAE3BrF,EAAWlhB,UAAUwsB,qBAAuB,WAExC,IAAK,GADDtV,MACKpW,EAAI,EAAGA,EAAIhB,KAAKkiB,aAAape,WAAWnD,OAAQK,IACrDoW,EAAKpW,GAAKhB,KAAKkiB,aAAape,WAAW9C,GAAGsZ,IAE9C,KAAStZ,EAAI,EAAGA,EAAIoW,EAAKzW,OAAQK,IACzBiC,oBAAkBjD,KAAKysB,iBAAiBvoB,aAAakT,EAAKpW,MAC5B,UAA1BoW,EAAKpW,GAAGsI,gBACRtJ,KAAKkiB,aAAahc,MAAQ,IAE9BlG,KAAKkiB,aAAatJ,gBAAgBxB,EAAKpW,MAGT,UAA1BoW,EAAKpW,GAAGsI,gBACRtJ,KAAKkiB,aAAahc,MAAQlG,KAAKysB,iBAAiBvoB,aAAakT,EAAKpW,KAEtEhB,KAAKkiB,aAAa/d,aAAaiT,EAAKpW,GAAIhB,KAAKysB,iBAAiBvoB,aAAakT,EAAKpW,OAU5FogB,EAAWlhB,UAAU6O,UAAY,WAC7B/O,KAAKysB,iBAAmBzsB,KAAK2B,QAAQe,WAAU,GAC/CsE,eAAahH,KAAKysB,mBAAoBtrB,EAv5ChC,YADA,UAy5CNnB,KAAKkiB,aAAeliB,KAAK2B,QACzB3B,KAAKumB,YAAcjiB,UAAQtE,KAAKkiB,aAAc,QAC9CliB,KAAK0G,MAAQ1G,KAAKmkB,gBAAkB,EAAI,EACxCnkB,KAAK2sB,MAAQ,KACgB,mBAAzB3sB,KAAK2B,QAAQmlB,SAAyD,uBAAzB9mB,KAAK2B,QAAQmlB,UAC1D9mB,KAAK2sB,MAAQ3sB,KAAK2B,QAAQmlB,QAC1B9mB,KAAKkiB,aAAeliB,KAAKqE,cAAc,SACvCrE,KAAK2B,QAAQ0G,YAAYrI,KAAKkiB,eAE9BliB,KAAK2B,QAAQuC,aAAa,MACP,OAAflE,KAAK2sB,QACL3sB,KAAKkiB,aAAatZ,GAAK5I,KAAK2B,QAAQuC,aAAa,MAAQ,UAIhC,mBAAzBlE,KAAKwD,iBACLxD,KAAK2B,QAAQiH,GAAKkM,cAAY,sBACX,OAAf9U,KAAK2sB,OACL7oB,aAAW9D,KAAKkiB,cAAgBtZ,GAAM5I,KAAK2B,QAAQiH,GAAK,aAI5D5I,KAAK2B,QAAQiH,GAAKkM,cAAY,kBACX,OAAf9U,KAAK2sB,OACL7oB,aAAW9D,KAAKkiB,cAAgBtZ,GAAM5I,KAAK2B,QAAQiH,GAAK,YAIjD,OAAf5I,KAAK2sB,OACL3sB,KAAK6sB,oBAAoB7sB,KAAK2B,QAAS3B,KAAKkiB,cAEhDliB,KAAKqoB,+BACLroB,KAAK6E,kBAAoB7E,KAAK4E,sBAC9B5E,KAAK8sB,qBAAoB,GACzB9sB,KAAKgE,SAAWhE,KAAK2B,QAAQsC,aAAa,YAAcjE,KAAK2B,QAAQuC,aAAa,YAAc,IAChGlE,KAAK2B,QAAQiX,gBAAgB,YAC7BnX,EAAOvB,UAAU6O,UAAUlN,KAAK7B,OAEpCohB,EAAWlhB,UAAU0E,oBAAsB,WAwBvC,MAvBA5E,MAAK6E,mBACDgB,WAAY,cACZknB,aAAc,gBACdC,OAAQ,SACRC,MAAO,QACPnoB,UAAW,UACXC,YAAa,UACbC,SAAU,YACVC,OAAQ,UACRC,SAAU,YACVC,UAAW,aACXC,OAAQ,QACRC,KAAM,OACNC,IAAK,MACLC,OAAQ,SACRC,SAAU,WACVC,YAAa,eACbC,cAAe,iBACfC,YAAa,YACbC,WAAY,WACZsnB,SAAU,YACVC,IAAK,OAEFntB,KAAK6E,mBAEhBuc,EAAWlhB,UAAU2sB,oBAAsB,SAAUvsB,EAAQ4hB,GACzD,GAAIkL,GAAgB9sB,EAAO4D,aAAa,QAAU5D,EAAO4D,aAAa,QAAU5D,EAAO4D,aAAa,KACpGge,GAAa/d,aAAa,OAAQipB,GAClC9sB,EAAOsY,gBAAgB,OAEvB,KAAK,GADDyU,IAAa,WAAY,gBAAiB,QACrCrsB,EAAI,EAAGA,EAAIqsB,EAAU1sB,OAAQK,IAClC,IAAIiC,oBAAkB3C,EAAO4D,aAAampB,EAAUrsB,KAApD,CAGA,GAAIssB,GAAOhtB,EAAO4D,aAAampB,EAAUrsB,GACzCkhB,GAAa/d,aAAakpB,EAAUrsB,GAAIssB,GACxChtB,EAAOsY,gBAAgByU,EAAUrsB,MAGzCogB,EAAWlhB,UAAUqtB,YAAc,WAC/B,GAAIjI,GAAU,GAAIviB,wBAAqB/C,KAAKgD,OAC5C,IAAIhD,KAAK4R,OACL,GAA2B,gBAAhB5R,MAAK4R,OACZ5R,KAAK+kB,aAAe/kB,KAAK4R,WAExB,IAA6B,KAAzB5R,KAAK4R,OAAON,UAAoBrO,oBAAkBjD,KAAK4R,OAAON,UAUtC,mBAAzBtR,KAAKwD,gBACLxD,KAAK+kB,aAAe/kB,KAAKglB,eAGzBhlB,KAAK+kB,aAAe,SAdsD,CAC9E,GAAIyI,GAAiBxtB,KAAK4R,OAAON,QACJ,oBAAzBtR,KAAKwD,gBACLxD,KAAK+kB,aAAeO,EAAQC,gBAAiBjU,SAAUkc,EAAgB1lB,KAAM,aAG7E9H,KAAK+kB,aAAeO,EAAQC,gBAAiBjU,SAAUkc,EAAgB1lB,KAAM,aAarF9H,MAAK+kB,aAAe,MAG5B3D,EAAWlhB,UAAU4sB,oBAAsB,SAAUW,GACjDztB,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAC/ChD,KAAKutB,cACLvtB,KAAKuX,WACL,IAEI7V,GAFAoC,EAAa2pB,EAAUxqB,oBAAkBjD,KAAKioB,mBAAuBxoB,OAAOoK,KAAK7J,KAAKioB,iBACrF,QAAS,MAAO,MAAO,WAAY,WAAY,QAAS,OAAQ,cAAe,OAI5EvmB,GAFqB,mBAAzB1B,KAAKwD,gBACqB,cAAtBxD,KAAK2C,cAEDiP,OAAS3O,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKglB,eAAzBhlB,KAAK+kB,aACrDjd,KAAM,WAAYwJ,SAAU,QAK5BM,OAAS3O,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKglB,eAAzBhlB,KAAK+kB,aACrDjd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,WAK3B,cAAtB5S,KAAK2C,cACOiP,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,QAGvDM,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,UAG5F,KAAK,GAAIjJ,GAAK,EAAG+jB,EAAe5pB,EAAY6F,EAAK+jB,EAAa/sB,OAAQgJ,IAAM,CACxE,GAAIyN,GAAOsW,EAAa/jB,EACxB,KAAK1G,oBAAkBjD,KAAKkiB,aAAahe,aAAakT,IAClD,OAAQA,GACJ,IAAK,WACD,GAAMnU,oBAAkBjD,KAAK6hB,wBAA6DpK,KAAtCzX,KAAK6hB,kBAA2B,SAAqB4L,EAAU,CAC/G,GAAIjpB,GAAmD,aAAzCxE,KAAKkiB,aAAahe,aAAakT,IACA,KAAzCpX,KAAKkiB,aAAahe,aAAakT,IACU,SAAzCpX,KAAKkiB,aAAahe,aAAakT,EACnCpX,MAAKmD,eAAgBqB,QAASA,IAAYipB,GAE9C,KACJ,KAAK,WACD,GAAMxqB,oBAAkBjD,KAAK6hB,wBAA8DpK,KAAvCzX,KAAK6hB,kBAA4B,UAAqB4L,EAAU,CAChH,GAAI9K,GAAoD,aAAzC3iB,KAAKkiB,aAAahe,aAAakT,IACD,KAAzCpX,KAAKkiB,aAAahe,aAAakT,IAAyD,SAAzCpX,KAAKkiB,aAAahe,aAAakT,EAClFpX,MAAKmD,eAAgBwf,SAAUA,IAAa8K,GAEhD,KACJ,KAAK,eACKxqB,oBAAkBjD,KAAK6hB,wBAAiEpK,KAA1CzX,KAAK6hB,kBAA+B,aAAqB4L,IACzGztB,KAAKmD,eAAgBggB,YAAanjB,KAAKkiB,aAAahe,aAAakT,KAAUqW,EAE/E,MACJ,KAAK,QACDztB,KAAKkiB,aAAa/d,aAAa,QAAS,GAAKnE,KAAKkiB,aAAahe,aAAakT,GAC5E,MACJ,KAAK,OACDpX,KAAKkiB,aAAa/d,aAAa,OAAQ,GAAKnE,KAAKkiB,aAAahe,aAAakT,GAC3E,MACJ,KAAK,QACD,GAAMnU,oBAAkBjD,KAAK6hB,wBAA2DpK,KAApCzX,KAAK6hB,kBAAyB,OAAqB4L,EAAU,CAC7G,GAAIvnB,GAAQlG,KAAKkiB,aAAahe,aAAakT,EAC3CpX,MAAKmD,cAAc0kB,WAASzQ,EAAMpX,KAAK8C,UAAUyO,UAAUrL,EAAOxE,QAAgB+rB,GAEtF,KACJ,KAAK,MACD,IAAMztB,KAAKuC,MAAS,GAAIM,MAAK,KAAM,EAAG,IAAO4qB,EAAS,CAClD,GAAIlrB,GAAMvC,KAAKkiB,aAAahe,aAAakT,EACzCpX,MAAKmD,cAAc0kB,WAASzQ,EAAMpX,KAAK8C,UAAUyO,UAAUhP,QAAYkrB,GAE3E,KACJ,KAAK,MACD,IAAMztB,KAAKwC,MAAS,GAAIK,MAAK,KAAM,GAAI,KAAQ4qB,EAAS,CACpD,GAAIjrB,GAAMxC,KAAKkiB,aAAahe,aAAakT,EACzCpX,MAAKmD,cAAc0kB,WAASzQ,EAAMpX,KAAK8C,UAAUyO,UAAU/O,QAAYirB,GAE3E,KACJ,KAAK,OAC4C,SAAzCztB,KAAKkiB,aAAahe,aAAakT,IAC/BpX,KAAKkiB,aAAa/d,aAAa,OAAQ,WAa/Did,EAAWlhB,UAAUsD,cAAgB,WACjC,MAAO,cAEX4d,EAAWlhB,UAAUwkB,cAAgB,SAAUF,OACzB,KAAdA,IAAwBA,GAAY,EACxC,IAAI7R,GAEAgb,EAAY3tB,KAAKmG,eAAenG,KAAKkG,OAAS,GAAIrD,OAAM7C,KAAKkG,OAAS,GAAIrD,MAAK7C,KAAKoG,WAAWpG,KAAKkG,QACpG0nB,EAAkB5tB,KAAK+d,YAE3B/d,MAAK4kB,kBACAJ,GAAcA,IAAcvhB,oBAAkBjD,KAAK6tB,iBACpDpsB,EAAOvB,UAAUmC,OAAOR,KAAK7B,MAEjCA,KAAK+d,aAAe6P,CACpB,IAAIjf,GAAOgf,MACPG,EAAe,eAAe7Q,QAAQ,MAAO,GAAKtO,EACjD3O,MAAK2kB,aACoB,gBAAf3kB,MAAKkG,OAA8C,gBAAflG,MAAKkG,QAAyBlG,KAAKkG,QAAaynB,IAC3F3tB,KAAKmD,eAAgB+C,MAAOynB,IAAa,GAG5C1qB,oBAAkBjD,KAAKoE,kBAAqBnB,oBAAkBjD,KAAKoE,gBAAgBgG,iBAAiB0jB,GAAc,KAC/G9tB,KAAKoE,gBAAgBgG,iBAAiB0jB,GAAc,GAAGrqB,UAAUmI,SAAS,gBACrE5L,KAAK2kB,aACN3kB,KAAKqG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,KAIrE,IAAIwqB,EACyB,oBAAzB/tB,KAAKwD,gBAaLuqB,EAZ0B,cAAtB/tB,KAAK2C,aACO3C,KAAK8C,UAAU0O,WAAWmc,GAClC/b,OAAS3O,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKglB,eAAzBhlB,KAAK+kB,aACrDjd,KAAM,WAAYwJ,SAAU,QAIpBtR,KAAK8C,UAAU0O,WAAWmc,GAClC/b,OAAS3O,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKglB,eAAzBhlB,KAAK+kB,aACrDjd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,aAOjDD,EADsB,cAAtB3S,KAAK2C,cACaiP,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,QAGvDM,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,WAE9Fmb,EAAW/tB,KAAK8C,UAAU0O,WAAWmc,EAAWhb,IAE/C3S,KAAK4mB,WACN5mB,KAAKojB,iBAAiB2K,GAClB/tB,KAAK8iB,aACL9iB,KAAKojB,iBAAiBpjB,KAAKyhB,iBAC3BzhB,KAAK+iB,OAAO,cACRC,OAAQ,sBAKxB5B,EAAWlhB,UAAU2qB,kBAAoB,WACjC7qB,KAAKykB,cACLzC,QAAMuC,eAAgBf,gBAAiB,QAAUxjB,KAAKkiB,cACtDpe,aAAW9D,KAAKkiB,cAAgB8L,YAAahuB,KAAKkiB,aAAatZ,GAAK,aAChE5I,KAAKkG,OACLpC,aAAW9D,KAAKkiB,cAAgBxZ,wBAAyB,GAAK1I,KAAKmY,0BAIvE6J,QAAMuC,eAAgBf,gBAAiB,SAAWxjB,KAAKkiB,cACvDliB,KAAKkiB,aAAatJ,gBAAgB,aAClC5Y,KAAKkiB,aAAatJ,gBAAgB,2BAG1CwI,EAAWlhB,UAAU+kB,WAAa,WAC9B,GAAI6I,GAAe,eAAe7Q,QAAQ,MAAO,KAAOjd,KAAKkG,OACzD+nB,EAAiBjuB,KAAKoE,iBACtBpE,KAAKoE,gBAAgBgG,iBAAiB0jB,GAAc,IACpD9tB,KAAKoE,gBAAgBgG,iBAAiB0jB,GAAc,GAAGrqB,UAAUmI,SAAS,gBACxE3I,oBAAkBjD,KAAKkG,QAAWjD,oBAAkBjD,KAAKuC,MAE1DU,oBAAkBjD,KAAKwC,MAAU,GAAIK,MAAK7C,KAAKkG,OAAOyX,gBAAgB,IAAM,GAAI9a,MAAK7C,KAAKuC,KAAKob,gBAAgB,IAE7G,GAAI9a,MAAK7C,KAAKkG,OAAOyX,gBAAgB,IAAM,GAAI9a,MAAK7C,KAAKwC,KAAKmb,gBAAgB,MAC5E3d,KAAK2kB,YAA0C,KAA5B3kB,KAAKkiB,aAAahc,OAAgBlG,KAAKkiB,aAAahc,QAAUlG,KAAKyhB,iBAAmBxe,oBAAkBjD,KAAKkG,QAAU+nB,GAC/IhnB,YAAUjH,KAAKmiB,aAAaC,WAhrD5B,WAirDAte,aAAW9D,KAAKkiB,cAAgB2B,eAAgB,UAE1C5gB,oBAAkBjD,KAAKmiB,gBAC7Bnb,eAAahH,KAAKmiB,aAAaC,WAprD/B,WAqrDAte,aAAW9D,KAAKkiB,cAAgB2B,eAAgB,YAWxDzC,EAAWlhB,UAAU+W,kBAAoB,SAAUC,EAASC,GACxD,IAAK,GAAIxN,GAAK,EAAGC,EAAKnK,OAAOoK,KAAKqN,GAAUvN,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAE9D,OADWC,EAAGD,IAEV,IAAK,QACD3J,KAAK2hB,uBAAwB,EAC7B3hB,KAAK6e,cAAe,EACpB7e,KAAKuhB,mBAAqB,KAC1BvhB,KAAK6iB,kBAAkB3L,EAAQhR,OAC/BgR,EAAQhR,MAAQlG,KAAKkG,MACrBlG,KAAKqjB,qBAAuBrjB,KAAKkiB,aAAahc,MAC1CjD,oBAAkBjD,KAAKkG,SACnBlG,KAAK8iB,WACL9iB,KAAKojB,iBAAiBpjB,KAAKyhB,iBAG3BzhB,KAAKojB,iBAAiB,IAE1BpjB,KAAKqG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,KAE7DvD,KAAKwiB,aAAY,IACZxiB,KAAK+d,eAAkB/d,KAAKkG,OAC7BlG,KAAK+oB,cAAc,MAEvB/oB,KAAK6e,cAAe,EACpB7e,KAAKkC,cAAgBlC,KAAKmC,WAAanC,KAAKkC,eAAiBlC,KAAKkC,cAAgBlC,KAAKkC,cACnFlC,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,kBAGhB,MACJ,KAAK,SACDhjB,KAAKutB,cACLvtB,KAAK6lB,iBACL7lB,KAAKwiB,cACDxiB,KAAK8iB,aACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,mBAEPhjB,KAAKkG,OACNlG,KAAKojB,iBAAiBpjB,KAAKyhB,iBAGnC,MACJ,KAAK,YACDzhB,KAAKyiB,cACL,MACJ,KAAK,cACDT,QAAMkM,eAAeluB,KAAKmjB,YAAanjB,KAAKkiB,aAC5C,MACJ,KAAK,WACDF,QAAMmM,YAAYnuB,KAAK2iB,SAAU3iB,KAAKkiB,aACtC,MACJ,KAAK,UACDF,QAAMoM,WAAWpuB,KAAKwE,QAASxE,KAAKkiB,cACpCliB,KAAK+qB,iBACL,MACJ,KAAK,iBACD/qB,KAAKqoB,+BACLroB,KAAKkjB,+BACLljB,KAAK8sB,qBAAoB,EACzB,MACJ,KAAK,SACD9sB,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAC/ChD,KAAK8jB,KAAKtM,UAAUxX,KAAKgD,QACzBhD,KAAKmD,eAAgBggB,YAAanjB,KAAK8jB,KAAKzY,YAAY,iBAAkB,GAC1E2W,QAAMkM,eAAeluB,KAAKmjB,YAAanjB,KAAKkiB,cAC5CliB,KAAKwiB,cACDxiB,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,kBAGhB,MACJ,KAAK,YACDhB,QAAMqM,aAAaruB,KAAK2D,WAAY3D,KAAKmiB,aAAaC,WACtD,MACJ,KAAK,QACL,IAAK,QACDpiB,KAAKuX,YACDvX,KAAKoE,iBACL3C,EAAOvB,UAAU+W,kBAAkBpV,KAAK7B,KAAMkX,EAASC,EAE3D,MACJ,KAAK,SACDnX,KAAKmD,eAAgB0D,OAAQqQ,EAAQrQ,SAAU,EAC/C,MACJ,KAAK,WACD7G,KAAKsoB,eAAepR,EAAQsF,SAAUrF,EAAQqF,SAC9C,MACJ,KAAK,kBACDwF,QAAMsM,eAAetuB,KAAKmkB,gBAAiBnkB,KAAKkiB,aAAcliB,KAAKmiB,cACnEniB,KAAKinB,iBACLjnB,KAAK0G,MAAQ1G,KAAKmkB,gBAAkB,EAAI,CACxC,MACJ,KAAK,aACDnkB,KAAKuhB,mBAAqB,KAC1BvhB,KAAKwiB,aACL,MACJ,KAAK,QACDxiB,KAAKqkB,SAASnN,EAAQoN,OACtBtC,QAAMC,eAAejiB,KAAKkiB,aAAcliB,KAAKmiB,aAAaC,WACrDnf,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,SAEjG,MACJ,KAAK,iBACD1D,KAAKuiB,eAAiBrL,EAAQqL,eAC9BP,QAAMuM,eAAevuB,KAAKmiB,cAC1BH,QAAMwM,YAAYxuB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmjB,aAC1DlgB,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,SAEjG,MACJ,KAAK,aACG1D,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,mBAEZhjB,KAAKojB,iBAAiBpjB,KAAKyhB,iBAC3BzhB,KAAK6lB,kBAGD7lB,KAAKkiB,aAAahc,QAAUlG,KAAKyhB,iBACjCzhB,KAAKojB,iBAAiB,GAG9B,MACJ,SACQpjB,KAAKoE,iBAAmBpE,KAAKykB,cAC7BhjB,EAAOvB,UAAU+W,kBAAkBpV,KAAK7B,KAAMkX,EAASC,GAI9DnX,KAAK2hB,uBACN3hB,KAAK+nB,KAAK,MAEd/nB,KAAK2hB,uBAAwB,IAGrCvhB,GACIub,WAAS,OACVyF,EAAWlhB,UAAW,YAAS,IAClCE,GACIub,WAAS,OACVyF,EAAWlhB,UAAW,YAAS,IAClCE,GACIub,WAAS,OACVyF,EAAWlhB,UAAW,eAAY,IACrCE,GACIub,YAAS,IACVyF,EAAWlhB,UAAW,iBAAc,IACvCE,GACIub,WAAS,OACVyF,EAAWlhB,UAAW,aAAU,IACnCE,GACIub,YAAS,IACVyF,EAAWlhB,UAAW,cAAW,IACpCE,GACIub,gBACDyF,EAAWlhB,UAAW,qBAAkB,IAC3CE,GACIub,WAAS,OACVyF,EAAWlhB,UAAW,aAAU,IACnCE,GACIub,YAAS,IACVyF,EAAWlhB,UAAW,uBAAoB,IAC7CE,GACIub,YAAS,IACVyF,EAAWlhB,UAAW,sBAAmB,IAC5CE,GACIub,YAAS,IACVyF,EAAWlhB,UAAW,gBAAa,IACtCE,GACIub,WAAS,OACVyF,EAAWlhB,UAAW,iBAAc,IACvCE,GACIub,YAAS,IACVyF,EAAWlhB,UAAW,wBAAqB,IAC9CE,GACIub,WAAS,MACVyF,EAAWlhB,UAAW,aAAU,IACnCE,GACIub,YAAS,IACVyF,EAAWlhB,UAAW,eAAY,IACrCE,GACIub,WAAS,OACVyF,EAAWlhB,UAAW,kBAAe,IACxCE,GACIub,WAAS,UACVyF,EAAWlhB,UAAW,qBAAkB,IAC3CE,GACIub,WAAS,OACVyF,EAAWlhB,UAAW,2BAAwB,IACjDE,GACIub,YAAS,IACVyF,EAAWlhB,UAAW,kBAAe,IACxCE,GACIub,YAAS,IACVyF,EAAWlhB,UAAW,iBAAc,IACvCE,GACIub,YAAW7K,IAAK,MAAOkD,MAAO,QAASY,KAAM,OAAQ6Z,KAAM,OAAQC,OAAQ,SAAUC,OAAQ,SAAUC,aAAc,qBACtHxN,EAAWlhB,UAAW,sBAAmB,IAC5CE,GACIwb,WACDwF,EAAWlhB,UAAW,WAAQ,IACjCE,GACIwb,WACDwF,EAAWlhB,UAAW,cAAW,IACpCE,GACIwb,WACDwF,EAAWlhB,UAAW,YAAS,IAClCE,GACIwb,WACDwF,EAAWlhB,UAAW,WAAQ,IACjCE,GACIwb,WACDwF,EAAWlhB,UAAW,YAAS,IAClCE,GACIwb,WACDwF,EAAWlhB,UAAW,cAAW,IACpCE,GACIwb,WACDwF,EAAWlhB,UAAW,gBAAa,IACtCkhB,EAAahhB,GACTyb,yBACDuF,IAELrF,GC58DE1c,EAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HjB,GAAvHkB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOf,OAAOoB,yBAAyBP,EAAQC,GAAOC,CACrH,IAAuB,gBAAZM,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASV,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIQ,GAAIX,EAAWM,OAAS,EAAGK,GAAK,EAAGA,KAASzB,EAAIc,EAAWW,MAAIJ,GAAKH,EAAI,EAAIlB,EAAEqB,GAAKH,EAAI,EAAIlB,EAAEe,EAAQC,EAAKK,GAAKrB,EAAEe,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKnB,OAAOwB,eAAeX,EAAQC,EAAKK,GAAIA,GAiB5DiuB,EAAe,kBACfC,EAAgB,mBAGhB3tB,EAAO,oBAIP4tB,EAAS,WAETC,EAAY,eACZC,EAAU,aAIVC,EAAa,gBAIb9tB,EAAW,aAEX+tB,EAAW,aAYXC,EAAY,iBAEZC,EAAU,aAEVC,EAAe,kBACfC,EAAe,kBAMfluB,EAAU,YAEVmuB,EAAY,cAEZC,EAAQ,UAURC,GAAe,QAAS,QAAS,SACjCC,EAAyB,SAAUluB,GAEnC,QAASkuB,KACL,MAAkB,QAAXluB,GAAmBA,EAAOmuB,MAAM5vB,KAAMU,YAAcV,KAW/D,MAbAX,GAAUswB,EAASluB,GAInBrB,GACIub,cACDgU,EAAQzvB,UAAW,YAAS,IAC/BE,GACIub,cACDgU,EAAQzvB,UAAW,YAAS,IAC/BE,GACIub,cACDgU,EAAQzvB,UAAW,UAAO,IACtByvB,GACTE,iBAeEC,EAAiC,SAAUruB,GAS3C,QAASquB,GAAgBpuB,EAASC,GAC9B,GAAIC,GAAQH,EAAOI,KAAK7B,KAAM0B,EAASC,IAAY3B,IAiBnD,OAhBA4B,GAAMmuB,eAAgB,EACtBnuB,EAAMouB,gBAAiB,EACvBpuB,EAAMquB,eACNruB,EAAMsuB,iBACNtuB,EAAMuuB,iBAAmB,GACzBvuB,EAAMwuB,YAAa,EACnBxuB,EAAMyuB,cAAe,EACrBzuB,EAAM0uB,oBAAqB,EAC3B1uB,EAAM2uB,kBAAmB,EACzB3uB,EAAM4uB,gBACN5uB,EAAM6uB,aAAc,EACpB7uB,EAAM8uB,cAAe,EACrB9uB,EAAM2f,mBAAqB,KAC3B3f,EAAMO,WAAY,EAClBP,EAAMM,eAAgB,EACtBN,EAAM+uB,iBAAmBjvB,EAClBE,EAoxIX,MA9yIAvC,GAAUywB,EAAiBruB,GAkC3BquB,EAAgB5vB,UAAUmC,OAAS,WAC/BrC,KAAK8hB,aACL9hB,KAAKmD,eAAgByX,UAAW5a,KAAK4wB,aAAc,GACnD5wB,KAAKmD,eAAgB0X,QAAS7a,KAAK6wB,WAAY,GAC/C7wB,KAAK8wB,gBACL9wB,KAAK+wB,kBAAiB,GAClB/wB,KAAK2B,QAAQsC,aAAa,aAC1BjE,KAAK2B,QAAQwC,aAAa,WAAY,SAE1C6d,QAAMC,eAAejiB,KAAKkiB,aAAcliB,KAAKmiB,aAAaC,WACrDnf,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,WAE5FT,oBAAkBqB,UAAQtE,KAAK2B,QAAS,cAAgB2C,UAAQtE,KAAK2B,QAAS,YAAY4C,WAC3FvE,KAAKwE,SAAU,GAEnBxE,KAAK6c,kBAQTiT,EAAgB5vB,UAAU6O,UAAY,WAgDlC,GA/CA/O,KAAKgxB,iBACDjE,aAAc,gBACdC,OAAQ,SACRC,MAAO,QACPE,IAAK,MACLpnB,cAAe,iBACfC,aAAc,gBACdf,OAAQ,UACRD,SAAU,YACVc,SAAU,SAEd9F,KAAKixB,iBACD9N,YAAanjB,KAAKmjB,YAClB+N,WAAY,aACZC,SAAU,WACVC,YAAa,eACbC,UAAW,QACXC,WAAY,SACZC,aAAc,gBACd5mB,KAAM,QAKV3K,KAAKwxB,SAAWC,OAAOC,WAAW,qBAAqBC,QACvD3xB,KAAKkiB,aAAeliB,KAAK2B,QACzB3B,KAAK4xB,WAAa,KACW,wBAAzB5xB,KAAK2B,QAAQmlB,UACb9mB,KAAK4xB,WAAa5xB,KAAK2B,QAAQmlB,QAC/B9mB,KAAKkiB,aAAeliB,KAAKqE,cAAc,SACvCrE,KAAK2B,QAAQ0G,YAAYrI,KAAKkiB,eAElCliB,KAAK6xB,aAAe7xB,KAAK2B,QAAQe,WAAU,GAC3CsE,eAAahH,KAAK6xB,eAAgB1wB,EAhL5B,YADA,UAkLNnB,KAAKqoB,+BACDroB,KAAK2B,QAAQuC,aAAa,MACF,OAApBlE,KAAK4xB,aACL5xB,KAAKkiB,aAAatZ,GAAK5I,KAAK2B,QAAQuC,aAAa,MAAQ,WAI7DlE,KAAK2B,QAAQiH,GAAKkM,cAAY,sBACN,OAApB9U,KAAK4xB,YACL9tB,aAAW9D,KAAKkiB,cAAgBtZ,GAAM5I,KAAK2B,QAAQiH,GAAK,YAGhE5I,KAAK8xB,kBAAkB9xB,KAAKkG,QACvBlG,KAAKuhB,oBAA+C,gBAAhBvhB,YAA2B,CAChE,GAAI+xB,GAAa/xB,KAAKkG,MAAMwH,MAAM,IAAM1N,KAAKgyB,UAAY,IACzDhyB,MAAKkG,OAAS,GAAIrD,MAAKkvB,EAAW,IAAK,GAAIlvB,MAAKkvB,EAAW,KAE/D/xB,KAAKiyB,eACLjyB,KAAKgE,SAAWhE,KAAK2B,QAAQsC,aAAa,YAAcjE,KAAK2B,QAAQuC,aAAa,YAAc,IAChGlE,KAAK2B,QAAQiX,gBAAgB,YAC7BnX,EAAOvB,UAAU6O,UAAUlN,KAAK7B,MAChCA,KAAKkyB,gBAAkBlyB,KAAKmyB,aAAazlB,KAAK1M,MAC9CA,KAAKoyB,gBAAkBpyB,KAAKqyB,aAAa3lB,KAAK1M,MAC9CA,KAAKsyB,sBAAwBtyB,KAAKuyB,cAAc7lB,KAAK1M,MACrDA,KAAKwyB,sBAAwBxyB,KAAKyyB,kBAAkB/lB,KAAK1M,MACzDA,KAAK0yB,cAAgB1yB,KAAKmG,eAAenG,KAAK4wB,YAC9C5wB,KAAK2yB,YAAc3yB,KAAKmG,eAAenG,KAAK6wB,UAC5C7wB,KAAKumB,YAAcjiB,UAAQtE,KAAK2B,QAAS,SAE7CmuB,EAAgB5vB,UAAU0yB,YAAc,WAChC5yB,KAAKkG,OAASlG,KAAKkG,MAAMvF,OAAS,GAC9BX,KAAKkG,MAAM,YAAcrD,QAAS0S,OAAOvV,KAAKkG,MAAM,KACpDlG,KAAKmD,eAAgByX,UAAW5a,KAAKkG,MAAM,KAAM,GACjDlG,KAAK4wB,WAAa5wB,KAAKkG,MAAM,IAEC,gBAAlBlG,MAAKkG,MAAM,GACA,IAAlBlG,KAAKkG,MAAM,IAAYqP,UAAY1S,MAAK7C,KAAKoG,WAAWpG,KAAKkG,MAAM,OACpElG,KAAK4wB,WAAa,KAClB5wB,KAAK6nB,aAGL7nB,KAAKmD,eAAgByX,UAAW,GAAI/X,MAAK7C,KAAKoG,WAAWpG,KAAKkG,MAAM,OAAQ,GAC5ElG,KAAK4wB,WAAa,GAAI/tB,MAAK7C,KAAKoG,WAAWpG,KAAKkG,MAAM,OAI1DlG,KAAK4wB,WAAa,KAClB5wB,KAAK6nB,YAEL7nB,KAAKkG,MAAM,YAAcrD,QAAS0S,OAAOvV,KAAKkG,MAAM,KACpDlG,KAAKmD,eAAgB0X,QAAS7a,KAAKkG,MAAM,KAAM,GAC/ClG,KAAK6wB,SAAW7wB,KAAKkG,MAAM,IAEG,gBAAlBlG,MAAKkG,MAAM,GACA,IAAlBlG,KAAKkG,MAAM,IAAYqP,UAAY1S,MAAK7C,KAAKoG,WAAWpG,KAAKkG,MAAM,OACpElG,KAAKmD,eAAgB0X,QAAS,OAAQ,GACtC7a,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,aAGL7nB,KAAKmD,eAAgB0X,QAAS,GAAIhY,MAAK7C,KAAKoG,WAAWpG,KAAKkG,MAAM,OAAQ,GAC1ElG,KAAK6wB,SAAW,GAAIhuB,MAAK7C,KAAKoG,WAAWpG,KAAKkG,MAAM,KACpDlG,KAAK6nB,aAIT7nB,KAAKmD,eAAgB0X,QAAS,OAAQ,GACtC7a,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,aAGJ7nB,KAAKkG,OAASlG,KAAKkG,MAAM2E,OAC1B7K,KAAKkG,MAAM2E,gBAAiBhI,QAAS0S,OAAOvV,KAAKkG,MAAM2E,QACvD7K,KAAKmD,eAAgByX,UAAW5a,KAAKkG,MAAM2E,QAAS,GACpD7K,KAAK4wB,WAAa5wB,KAAKkG,MAAM2E,OAEI,gBAArB7K,MAAKkG,MAAM2E,OACvB7K,KAAKmD,eAAgByX,UAAW,GAAI/X,MAAK7C,KAAKoG,WAAWpG,KAAKkG,MAAM2E,UAAW,GAC/E7K,KAAK4wB,WAAa,GAAI/tB,MAAK7C,KAAKoG,WAAWpG,KAAKkG,MAAM2E,UAGtD7K,KAAK4wB,WAAa,KAClB5wB,KAAK6nB,YAEL7nB,KAAKkG,MAAMZ,cAAezC,QAAS0S,OAAOvV,KAAKkG,MAAMZ,MACrDtF,KAAKmD,eAAgB0X,QAAS7a,KAAKkG,MAAMZ,MAAO,GAChDtF,KAAK6wB,SAAW7wB,KAAKkG,MAAMZ,KAEI,gBAAnBtF,MAAKkG,MAAMZ,KACvBtF,KAAKmD,eAAgB0X,QAAS,GAAIhY,MAAK7C,KAAKoG,WAAWpG,KAAKkG,MAAMZ,QAAS,GAC3EtF,KAAK6wB,SAAW,GAAIhuB,MAAK7C,KAAKoG,WAAWpG,KAAKkG,MAAMZ,MACpDtF,KAAK6nB,aAGL7nB,KAAKmD,eAAgB0X,QAAS,OAAQ,GACtC7a,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,aAGJ5kB,oBAAkBjD,KAAKkG,SAC5BlG,KAAK6wB,SAAW7wB,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAK6a,WAClE7a,KAAK4wB,WAAa5wB,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAK4a,aACpE5a,KAAK6nB,aAGbiI,EAAgB5vB,UAAU+xB,aAAe,WACrCjyB,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAC/ChD,KAAKutB,cACLvtB,KAAKuX,aACDtU,oBAAkBjD,KAAKkD,iBAAmBlD,KAAKkD,eAAiB,GAAKlD,KAAKkD,eAAiB,IAC3FlD,KAAKmD,eAAgBD,eAAgBlD,KAAK8C,UAAUM,sBAAuB,GAE/EpD,KAAK4yB,eAET9C,EAAgB5vB,UAAUqtB,YAAc,WACpC,GAAIvtB,KAAK4R,OACL,GAA2B,gBAAhB5R,MAAK4R,OACZ5R,KAAK+kB,aAAe/kB,KAAK4R,WAExB,IAA6B,KAAzB5R,KAAK4R,OAAON,UAAoBrO,oBAAkBjD,KAAK4R,OAAON,UAKnEtR,KAAK+kB,aAAe,SAL0D,CAC9E,GAAIyI,GAAiBxtB,KAAK4R,OAAON,QACjCtR,MAAK+kB,aAAe/kB,KAAK8C,UAAUyiB,gBAAiBjU,SAAUkc,EAAgB1lB,KAAM,aAOxF9H,MAAK+kB,aAAe,MAG5B+K,EAAgB5vB,UAAU4hB,WAAa,WACX,OAApB9hB,KAAK4xB,YACL5xB,KAAK6sB,oBAAoB7sB,KAAK2B,QAAS3B,KAAKkiB,cAEhDliB,KAAK8sB,qBAAoB,GACzB+F,QAAM7yB,KAAK6E,mBAAqBqoB,SAAU,YAAaC,IAAK,OAC5D,IAAItiB,GAAQ7K,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAK4wB,aAC9D5wB,MAAKmD,eAAgByX,UAAW/P,IAAS,GACzC7K,KAAKmD,eAAgB0tB,SAAU7wB,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAK6wB,cAAe,GAChG7wB,KAAK6nB,WACL7nB,KAAKmD,eAAgBZ,IAAKvC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAKuC,SAAU,GACtFvC,KAAKmD,eAAgBX,IAAKxC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAKwC,SAAU,GACtFxC,KAAK8jB,KAAO,GAAIpY,QAAK,kBAAmB1L,KAAKixB,gBAAiBjxB,KAAKgD,QACnEhD,KAAK8jB,KAAKtM,UAAUxX,KAAKgD,QACzBhD,KAAKmD,eAAgBggB,YAAanjB,KAAKmjB,aAAenjB,KAAK8jB,KAAKzY,YAAY,iBAAkB,GAC9FrL,KAAK8yB,iBACL9yB,KAAKijB,cACLjjB,KAAKkjB,+BACLljB,KAAK+yB,oBACL/yB,KAAK+hB,cAET+N,EAAgB5vB,UAAU6wB,iBAAmB,SAAUvM,GACnD,GAAI1gB,KACJ,IAAK0gB,EAOD1gB,EAAa9D,KAAKioB,mBANlB,KAAK,GAAIjnB,GAAI,EAAGA,EAAIhB,KAAK2B,QAAQmC,WAAWnD,OAAQK,IAChD8C,EAAW9D,KAAK2B,QAAQmC,WAAW9C,GAAGsZ,MAClCta,KAAK2B,QAAQuC,aAAalE,KAAK2B,QAAQmC,WAAW9C,GAAGsZ,KAMjE,KAAK,GAAI3Q,GAAK,EAAGC,EAAKnK,OAAOoK,KAAK/F,GAAa6F,EAAKC,EAAGjJ,OAAQgJ,IAAM,CACjE,GAAIqpB,GAAMppB,EAAGD,EACe,KAAxBqpB,EAAIhgB,QAAQ,UACZhT,KAAKizB,iBAAiB9uB,aAAa6uB,EAAKlvB,EAAW,GAAKkvB,IACxDhzB,KAAKkzB,kBAAkB/uB,aAAa6uB,EAAKlvB,EAAW,GAAKkvB,OAIrElD,EAAgB5vB,UAAU6yB,kBAAoB,WACtC/yB,KAAK0iB,UACA1iB,KAAK2iB,UACN3iB,KAAKkiB,aAAatJ,gBAAgB,YAItC9U,aAAW9D,KAAKkiB,cAAgBS,SAAY,KAEhD3iB,KAAKmzB,wBAETrD,EAAgB5vB,UAAUizB,qBAAuB,WACxCnzB,KAAK0iB,YAAa1iB,KAAKmiB,cAAiBniB,KAAK2iB,SAQzC3iB,KAAKmiB,cACVnb,eAAahH,KAAKmiB,aAAaC,YAhUzB,eAwT0B,KAA5BpiB,KAAKkiB,aAAahc,MAClBc,eAAahH,KAAKmiB,aAAaC,YAzT7B,eA4TFnb,YAAUjH,KAAKmiB,aAAaC,YA5T1B,gBAmUd0N,EAAgB5vB,UAAU2sB,oBAAsB,SAAUlrB,EAASyxB,GAC/D,GAAI9Y,GAAO3Y,EAAQuC,aAAa,QAAUvC,EAAQuC,aAAa,QAAUvC,EAAQuC,aAAa,KAC9FkvB,GAAMjvB,aAAa,OAAQmW,GAC3B3Y,EAAQiX,gBAAgB,OAExB,KAAK,GADD9U,IAAc,WAAY,gBAAiB,QACtC9C,EAAI,EAAGA,EAAI8C,EAAWnD,OAAQK,IACnC,IAAIiC,oBAAkBtB,EAAQuC,aAAaJ,EAAW9C,KAAtD,CAGA,GAAIssB,GAAO3rB,EAAQuC,aAAaJ,EAAW9C,GAC3CoyB,GAAMjvB,aAAaL,EAAW9C,GAAIssB,GAClC3rB,EAAQiX,gBAAgB9U,EAAW9C,MAG3C8uB,EAAgB5vB,UAAUgjB,6BAA+B,WACrD,IAAKjgB,oBAAkBjD,KAAKioB,gBACxB,IAAK,GAAIte,GAAK,EAAGC,EAAKnK,OAAOoK,KAAK7J,KAAKioB,gBAAiBte,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC1E,GAAIpJ,GAAMqJ,EAAGD,EACb,IAAI+lB,EAAY1c,QAAQzS,IAAQ,EAC5B,GAAY,UAARA,EAAiB,CACjB,GAAI8yB,GAAqBrzB,KAAKioB,eAAe,GAAK1nB,GAAK0c,QAAQ,OAAQ,KAAMC,MACnD,MAAtBmW,GACApsB,YAAUjH,KAAKmiB,aAAaC,WAAYiR,EAAkB3lB,MAAM,UAGnE,IAAY,UAARnN,EAAiB,CACtB,GAAI+yB,GAAiBtzB,KAAKmiB,aAAaC,UAAUle,aAAa3D,EAC9D+yB,GAAkBrwB,oBAAkBqwB,GAChCtzB,KAAKioB,eAAe,GAAK1nB,GAD0B+yB,EAAiBtzB,KAAKioB,eAAe,GAAK1nB,GAEjGP,KAAKmiB,aAAaC,UAAUje,aAAa5D,EAAK+yB,OAG9CtzB,MAAKmiB,aAAaC,UAAUje,aAAa5D,EAAKP,KAAKioB,eAAe,GAAK1nB,MAM3FuvB,EAAgB5vB,UAAUmoB,6BAA+B,WACrD,IAAKplB,oBAAkBjD,KAAKioB,gBACxB,IAAK,GAAIte,GAAK,EAAGC,EAAKnK,OAAOoK,KAAK7J,KAAKioB,gBAAiBte,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC1E,GAAIpJ,GAAMqJ,EAAGD,EACT+lB,GAAY1c,QAAQzS,GAAO,GAC3BP,KAAKkiB,aAAa/d,aAAa5D,EAAKP,KAAKioB,eAAe,GAAK1nB,MAK7EuvB,EAAgB5vB,UAAUooB,eAAiB,SAAUiL,EAAaC,GACzDvwB,oBAAkBuwB,KACnBA,EAAeA,EAAYvW,QAAQ,OAAQ,KAAMC,QAEhDja,oBAAkBswB,KACnBA,EAAeA,EAAYtW,QAAQ,OAAQ,KAAMC,QAErD8E,QAAMuG,YAAYgL,GAAcvzB,KAAKmiB,aAAaC,WAAYoR,GAC1DxzB,KAAKuG,cACLyb,QAAMuG,YAAYgL,GAAcvzB,KAAKuG,cAAeitB,IAG5D1D,EAAgB5vB,UAAU4yB,eAAiB,WACvC9yB,KAAKiwB,cACL,IAAIjvB,GAAI,CACR,KAAKyyB,cAAYzzB,KAAK0zB,QAAQ,GAAG7oB,OAAS7K,KAAK0zB,QAAQ,GAAGpuB,KAAOtF,KAAK0zB,QAAQ,GAAGC,OAAQ,CACrF,IAAK,GAAIhqB,GAAK,EAAGC,EAAK5J,KAAK0zB,QAAS/pB,EAAKC,EAAGjJ,OAAQgJ,IAAM,CACtD,GAAIiqB,GAAQhqB,EAAGD,GACXf,EAAKgrB,EAAMD,MAAM1W,QAAQ,OAAQ,IAAM,OAASjc,CAC3B,iBAAd4yB,GAAMtuB,IACbtF,KAAKiwB,YAAYlmB,MACbnB,GAAIA,EAAIqB,KAAM2pB,EAAMD,MAAOruB,IAAK,GAAIzC,MAAK7C,KAAKoG,WAAWwtB,EAAMtuB,MAAOuF,MAAO,GAAIhI,MAAK7C,KAAKoG,WAAWwtB,EAAM/oB,UAIhH7K,KAAKiwB,YAAYlmB,MAAOnB,GAAIA,EAAIqB,KAAM2pB,EAAMD,MAAO9oB,MAAO+oB,EAAM/oB,MAAOvF,IAAKsuB,EAAMtuB,MAG1F,GAAIsV,GAAY3X,oBAAkBjD,KAAK4wB,YAAc,KAAO,GAAI/tB,OAAM7C,KAAK4wB,YACvE/V,EAAU5X,oBAAkBjD,KAAK6wB,UAAY,KAAO,GAAIhuB,OAAM7C,KAAK6wB,SACvE7wB,MAAKiwB,YAAYlmB,MAAOnB,GAAI,eAAgBqB,KAAMjK,KAAK8jB,KAAKzY,YAAY,eAAgBR,MAAO+P,EAAWtV,IAAKuV,IAC1G5X,oBAAkBjD,KAAK4wB,aAAgB3tB,oBAAkBjD,KAAK6wB,YAC/D7wB,KAAK+vB,eAAgB,EACrB/vB,KAAK6zB,YAAc7zB,KAAKiwB,YAAYtvB,OAAS,KAIzDmvB,EAAgB5vB,UAAU6hB,WAAa,WACnClW,eAAanI,IAAI1D,KAAKmiB,aAAaE,QAAQ,GAAI,YAAariB,KAAK8zB,iBAAkB9zB,MACnF6L,eAAanI,IAAI1D,KAAKkiB,aAAc,QAASliB,KAAKimB,kBAAmBjmB,MACrE6L,eAAanI,IAAI1D,KAAKkiB,aAAc,OAAQliB,KAAKkmB,iBAAkBlmB,MACnE6L,eAAanI,IAAI1D,KAAKkiB,aAAc,SAAUliB,KAAKomB,mBAAoBpmB,MACnEA,KAAKmkB,iBAAmBnkB,KAAKmiB,aAAakE,aAC1Cxa,eAAanI,IAAI1D,KAAKmiB,aAAakE,YAAa,YAAarmB,KAAKsmB,aAActmB,MAE/EA,KAAKwxB,WACNxxB,KAAKgxB,gBAAkB7kB,SAAOnM,KAAKgxB,gBAAiBhxB,KAAKoM,YACzDpM,KAAK+zB,oBAAsB,GAAIznB,kBAAetM,KAAKkiB,cAC/C3V,UAAW,UACXC,UAAWxM,KAAK8lB,aAAapZ,KAAK1M,MAClCoM,WAAYpM,KAAKgxB,mBAGrBhxB,KAAKumB,aACL1a,eAAanI,IAAI1D,KAAKumB,YAAa,QAASvmB,KAAK0c,iBAAkB1c,MAEnEA,KAAKwE,QACLxE,KAAKkiB,aAAa/d,aAAa,WAAYnE,KAAKgE,UAGhDhE,KAAKkiB,aAAale,UAAY,GAGtC8rB,EAAgB5vB,UAAU2mB,aAAe,WACrChb,eAAawL,OAAOrX,KAAKmiB,aAAaE,QAAQ,GAAI,YAAariB,KAAK8zB,kBACpEjoB,eAAawL,OAAOrX,KAAKkiB,aAAc,OAAQliB,KAAKkmB,kBACpDra,eAAawL,OAAOrX,KAAKkiB,aAAc,QAASliB,KAAKimB,mBACrDpa,eAAawL,OAAOrX,KAAKkiB,aAAc,SAAUliB,KAAKomB,oBAClDpmB,KAAKmkB,iBAAmBnkB,KAAKmiB,aAAakE,aAC1Cxa,eAAawL,OAAOrX,KAAKmiB,aAAakE,YAAa,uBAAwBrmB,KAAKsmB,cAE/EtmB,KAAKwxB,UACDvuB,oBAAkBjD,KAAK+zB,sBACxB/zB,KAAK+zB,oBAAoBpb,UAG7B3Y,KAAKumB,aACL1a,eAAawL,OAAOrX,KAAKumB,YAAa,QAASvmB,KAAK0c,kBAExD1c,KAAKkiB,aAAale,UAAY,GAElC8rB,EAAgB5vB,UAAU8zB,kBAAoB,WAC1C,GAAIh0B,KAAKizB,kBAAoBjzB,KAAKkzB,kBAAmB,CACjD,GAAIthB,IAAW9J,KAAM,WAAYwJ,SAAU,MACb,iBAAnBtR,MAAK4a,YACZ5a,KAAK4a,UAAY5a,KAAK8C,UAAUyO,UAAUvR,KAAK4a,UAAWhJ,IAElC,gBAAjB5R,MAAK6a,UACZ7a,KAAK6a,QAAU7a,KAAK8C,UAAUyO,UAAUvR,KAAK6a,QAASjJ,IAE1D5R,KAAKizB,iBAAiB/sB,MAASlG,KAAK4a,WAAa5a,KAAK8C,UAAU0O,WAAWxR,KAAK4a,UAAWhJ,IACnF5R,KAAKkiB,aAAmB,MAChCliB,KAAKkzB,kBAAkBhtB,MAASlG,KAAK6a,SAAW7a,KAAK8C,UAAU0O,WAAWxR,KAAK6a,QAASjJ,IACnF5R,KAAKkiB,aAAmB,MAC7BliB,KAAKynB,cAAcznB,KAAKizB,iBAAkB,YAC1CjzB,KAAKynB,cAAcznB,KAAKizB,iBAAkB,YAGlDnD,EAAgB5vB,UAAUkmB,mBAAqB,SAAUvZ,GAChD7M,KAAKwE,UAGVqI,EAAEma,kBACFhnB,KAAKg0B,sBAETlE,EAAgB5vB,UAAU+mB,eAAiB,WACnCjnB,KAAKmkB,iBAAmBnkB,KAAKmiB,aAAakE,aAC1Cxa,eAAanI,IAAI1D,KAAKmiB,aAAakE,YAAa,YAAarmB,KAAKsmB,aAActmB,OAGxF8vB,EAAgB5vB,UAAUomB,aAAe,SAAUzZ,GAC/C,GAAK7M,KAAKwE,QAAV,CAGAxE,KAAKi0B,UAAYj0B,KAAKkG,MACtB2G,EAAEmB,iBACFhO,KAAKknB,OACL,IAAIC,IACAzM,MAAO7N,EAQX,IANA7M,KAAKmD,eAAgB0X,QAAS7a,KAAKmG,eAAenG,KAAK6wB,YAAa,GACpE7wB,KAAKmD,eAAgByX,UAAW5a,KAAKmG,eAAenG,KAAK4wB,cAAe,GACxE5wB,KAAKua,QAAQ,UAAW4M,GACxBnnB,KAAK+oB,cAAclc,GACnB7M,KAAKk0B,aACLl0B,KAAK+nB,KAAKlb,GACNvI,UAAQtE,KAAK2B,QAAS,QAAS,CAC/B,GAAIA,GAAU3B,KAAKizB,iBACf5L,EAAaC,SAASC,YAAY,gBACtCF,GAAWG,UAAU,SAAS,GAAO,GACrC7lB,EAAQ8lB,cAAcJ,MAG9ByI,EAAgB5vB,UAAU6mB,aAAe,WACrC/mB,KAAKmwB,iBAAmBnwB,KAAKkiB,aAAahc,MAC1ClG,KAAKm0B,mBAAqBn0B,KAAK4wB,WAC/B5wB,KAAKo0B,iBAAmBp0B,KAAK6wB,SAC7B7wB,KAAKi0B,UAAY,KACjBj0B,KAAK0yB,cAAgB1yB,KAAKmG,eAAenG,KAAK4wB,YAC9C5wB,KAAK2yB,YAAc3yB,KAAKmG,eAAenG,KAAK6wB,UAC5C7wB,KAAK6nB,WACL7nB,KAAK8wB,iBAEThB,EAAgB5vB,UAAUwc,iBAAmB,SAAU7P,GACnD,GAAK7M,KAAKwE,SAGNxE,KAAKumB,aAAgB1Z,EAAEvM,SAAWN,KAAKumB,cAAiBvmB,KAAKkiB,aAAa3d,SAAU,CACpF,GAAI4gB,GAAMnlB,KAAKkiB,aAAahe,aAAa,QACpCjB,qBAAkBjD,KAAKq0B,YAcxBr0B,KAAKmD,eAAgB+C,MAAO,KAAM0U,UAAW,KAAMC,QAAS,OAAQ,GACpE7a,KAAK4wB,WAAa5wB,KAAK6wB,SAAW,OAd7B5tB,oBAAkBjD,KAAKkG,QAAWjD,oBAAkBjD,KAAKkG,MAAM2E,QAMhE7K,KAAKmD,eAAgB+C,OAAQlG,KAAKq0B,UAAWr0B,KAAKs0B,WAAY,GAC9Dt0B,KAAK4wB,WAAa5wB,KAAKkG,MAAM,GAC7BlG,KAAK6wB,SAAW7wB,KAAKkG,MAAM,KAP3BlG,KAAKmD,eAAgB+C,OAAS2E,MAAO7K,KAAKq0B,UAAW/uB,IAAKtF,KAAKs0B,WAAa,GAC5Et0B,KAAK4wB,WAAa5wB,KAAKkG,MAAM2E,MAC7B7K,KAAK6wB,SAAW7wB,KAAKkG,MAAMZ,KAO/BtF,KAAKmD,eAAgByX,UAAW5a,KAAK4wB,WAAY/V,QAAS7a,KAAK6wB,WAAY,IAMlD,wBAAzB7wB,KAAK2B,QAAQmlB,UACb9mB,KAAKmD,eAAgB+C,MAAO,KAAM0U,UAAW,KAAMC,QAAS,OAAQ,GACpEsK,EAAM,GACNnlB,KAAK4wB,WAAa5wB,KAAK6wB,SAAW,KAClC7wB,KAAKkiB,aAAa/d,aAAa,QAAS,KAE5CnE,KAAK+mB,eACD/mB,KAAKkiB,eACLF,QAAM6F,SAAS1C,EAAKnlB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBACjEnkB,KAAKilB,gBAIjB6K,EAAgB5vB,UAAUgnB,MAAQ,WACN,OAApBlnB,KAAK4wB,aACL5wB,KAAK4wB,WAAa,MAEA,OAAlB5wB,KAAK6wB,WACL7wB,KAAK6wB,SAAW,MAEhB7wB,KAAKkG,OAASlG,KAAKkG,MAAM2E,OACzB7K,KAAKmD,eAAgB+C,OAAS2E,MAAO,KAAMvF,IAAK,QAAU,GAE3C,OAAftF,KAAKkG,OAAkBlG,KAAKkG,MAAMvF,OAAS,GAC3CX,KAAKmD,eAAgB+C,MAAO,OAAQ,GAExC8b,QAAM6F,SAAS,GAAI7nB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAC1DlhB,oBAAkBjD,KAAKu0B,eACzBv0B,KAAKu0B,YAAYhwB,SAAWvE,KAAKu0B,YAAY5yB,QAAQ4C,UAAW,GAEpEvE,KAAKw0B,mBAET1E,EAAgB5vB,UAAU4zB,iBAAmB,SAAUjnB,GAC9C7M,KAAKwE,UAGNxE,KAAKwxB,UACLxxB,KAAKkiB,aAAa/d,aAAa,WAAY,IAE/C0I,EAAEmB,iBACFhO,KAAKy0B,cAAgB,KACjBz0B,KAAK00B,eAAiBpN,SAASyC,KAAKne,SAAS5L,KAAK4mB,SAASjlB,SAC3D3B,KAAK20B,cAAc9nB,IAGnB7M,KAAKswB,oBAAqB,EAC1BtwB,KAAKmiB,aAAaC,UAAUvM,SAAS,GAAGpH,QACxCzO,KAAKgoB,KAAK,KAAMnb,GACX7M,KAAKwxB,UACDvuB,oBAAkBjD,KAAK40B,gBACxB50B,KAAKswB,oBAAqB,EAC1BtwB,KAAK60B,gBACL70B,KAAKswB,oBAAqB,GAGlCrpB,YAAUjH,KAAKmiB,aAAaC,YA1nBvB,qBA6nBb0N,EAAgB5vB,UAAU4sB,oBAAsB,SAAUtI,GACtDxkB,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,OAK/C,KAAK,GAJDc,GAAa0gB,EAAYvhB,oBAAkBjD,KAAKioB,mBAAuBxoB,OAAOoK,KAAK7J,KAAKioB,iBACvF,YAAa,UAAW,UAAW,UAAW,MAAO,MAAO,WAAY,WAAY,QAAS,OAAQ,cAClG,OAAQ,SACZrW,GAAWA,OAAQ5R,KAAK+kB,aAAcjd,KAAM,OAAQwJ,SAAU,OACzD3H,EAAK,EAAG+jB,EAAe5pB,EAAY6F,EAAK+jB,EAAa/sB,OAAQgJ,IAAM,CACxE,GAAIyN,GAAOsW,EAAa/jB,EACxB,KAAK1G,oBAAkBjD,KAAKkiB,aAAahe,aAAakT,IAClD,OAAQA,GACJ,IAAK,WACD,GAAKnU,oBAAkBjD,KAAK2wB,uBAA2DlZ,KAArCzX,KAAK2wB,iBAA0B,SAAqBnM,EAAW,CAC7G,GAAIjgB,GAAoD,aAAzCvE,KAAKkiB,aAAahe,aAAakT,IACD,KAAzCpX,KAAKkiB,aAAahe,aAAakT,IAAyD,SAAzCpX,KAAKkiB,aAAahe,aAAakT,EAClFpX,MAAKmD,eAAgBqB,SAAUD,IAAaigB,GAEhD,KACJ,KAAK,WACD,GAAKvhB,oBAAkBjD,KAAK2wB,uBAA4DlZ,KAAtCzX,KAAK2wB,iBAA2B,UAAqBnM,EAAW,CAC9G,GAAI7B,GAAoD,aAAzC3iB,KAAKkiB,aAAahe,aAAakT,IACD,SAAzCpX,KAAKkiB,aAAahe,aAAakT,IAA6D,KAAzCpX,KAAKkiB,aAAahe,aAAakT,EACtFpX,MAAKmD,eAAgBwf,SAAUA,IAAa6B,GAEhD,KACJ,KAAK,eACIvhB,oBAAkBjD,KAAK2wB,uBAA+DlZ,KAAzCzX,KAAK2wB,iBAA8B,aAAqBnM,IACtGxkB,KAAKmD,eAAgBggB,YAAanjB,KAAKkiB,aAAahe,aAAakT,KAAUoN,EAE/E,MACJ,KAAK,QACD,GAAKvhB,oBAAkBjD,KAAK2wB,uBAAyDlZ,KAAnCzX,KAAK2wB,iBAAwB,OAAqBnM,EAAW,CAC3G,GAAIte,GAAQlG,KAAKkiB,aAAahe,aAAakT,EAC3CpX,MAAKmD,cAAc0kB,WAASzQ,EAAMlR,OAAase,GAEnD,KACJ,KAAK,QACDxkB,KAAKkiB,aAAa/d,aAAa,QAAS,GAAKnE,KAAKkiB,aAAahe,aAAakT,GAC5E,MACJ,KAAK,MACD,GAAKnU,oBAAkBjD,KAAKuC,OAASvC,KAAKuC,MAAS,GAAIM,MAAK,KAAM,EAAG,IAAO2hB,EAAW,CAC/EK,EAAY7kB,KAAK8C,UAAUyO,UAAUvR,KAAKkiB,aAAahe,aAAakT,GAAOxF,EAC/E5R,MAAKmD,cAAc0kB,WAASzQ,EAAMyN,OAAiBL,GAEvD,KACJ,KAAK,OACDxkB,KAAKkiB,aAAa/d,aAAa,OAAQ,GAAKnE,KAAKkiB,aAAahe,aAAakT,GAC3E,MACJ,KAAK,MACD,GAAKnU,oBAAkBjD,KAAKwC,OAASxC,KAAKwC,MAAS,GAAIK,MAAK,KAAM,GAAI,KAAQ2hB,EAAW,CACjFK,EAAY7kB,KAAK8C,UAAUyO,UAAUvR,KAAKkiB,aAAahe,aAAakT,GAAOxF,EAC/E5R,MAAKmD,cAAc0kB,WAASzQ,EAAMyN,OAAiBL,GAEvD,KACJ,KAAK,YACD,GAAIvhB,oBAAkBjD,KAAK4a,WAAY,CAC/BiK,EAAY7kB,KAAK8C,UAAUyO,UAAUvR,KAAKkiB,aAAahe,aAAakT,GAAOxF,EAC/E5R,MAAK4wB,WAAa/L,EAClB7kB,KAAK6nB,WAET,KACJ,KAAK,UACD,GAAI5kB,oBAAkBjD,KAAK6a,SAAU,CACjC,GAAIgK,GAAY7kB,KAAK8C,UAAUyO,UAAUvR,KAAKkiB,aAAahe,aAAakT,GAAOxF,EAC/E5R,MAAK6wB,SAAWhM,EAChB7kB,KAAK6nB,WAET,KACJ,KAAK,UACG5kB,oBAAkBjD,KAAK80B,UACvB90B,KAAKmD,cAAc0kB,WAASzQ,EAAMzQ,SAAS3G,KAAKkiB,aAAahe,aAAakT,GAAO,SAAU,EAE/F,MACJ,KAAK,UACGnU,oBAAkBjD,KAAK+0B,UACvB/0B,KAAKmD,cAAc0kB,WAASzQ,EAAMzQ,SAAS3G,KAAKkiB,aAAahe,aAAakT,GAAO,SAAU,EAE/F,MACJ,KAAK,OAC4C,SAAzCpX,KAAKkiB,aAAahe,aAAakT,IAC/BpX,KAAKkiB,aAAa/d,aAAa,OAAQ,WAO/D2rB,EAAgB5vB,UAAU80B,YAAc,WACpC,IAASh0B,EAAI,EAAGA,EAAIhB,KAAKiwB,YAAYtvB,OAAQK,IACpCA,IAAOhB,KAAKiwB,YAAYtvB,OAAS,GAAkC,iBAA3BX,KAAKiwB,YAAYjvB,GAAG4H,IAC7D5I,KAAKiwB,YAAY7d,OAAOpR,EAAG,EAGnChB,MAAK6zB,YAAc7zB,KAAKiwB,YAAYtvB,OAAS,EAC7CX,KAAK+vB,eAAgB,CACrB,KAAK,GAAI/uB,GAAI,EAAGA,GAAKhB,KAAKiwB,YAAYtvB,OAAS,EAAGK,IAAK,CACnD,GAAI4Z,GAAY5a,KAAKiwB,YAAYjvB,GAAG6J,MAChCgQ,EAAU7a,KAAKiwB,YAAYjvB,GAAGsE,GAC9BtF,MAAK4wB,YAAc5wB,KAAK6wB,WAClB,GAAIhuB,MAAK+X,EAAUrX,SAAS,EAAG,EAAG,EAAG,MAAS,GAAIV,MAAK7C,KAAK4wB,WAAWrtB,SAAS,EAAG,EAAG,EAAG,MACzF,GAAIV,MAAKgY,EAAQtX,SAAS,EAAG,EAAG,EAAG,MAAS,GAAIV,MAAK7C,KAAK6wB,SAASttB,SAAS,EAAG,EAAG,EAAG,MACvFvD,KAAK6zB,YAAc7yB,EACnBhB,KAAK+vB,eAAgB,GAIjC/vB,KAAKuG,aAAelC,gBAAc,OAASuE,GAAI5I,KAAK2B,QAAQiH,GAAK,SAAUlB,UAAWvG,EAAO,aAC7FnB,KAAKi1B,uBACL,IAAIC,IAAal1B,KAAK+vB,eAAiB/vB,KAAKwxB,UACvCiC,cAAYzzB,KAAK0zB,QAAQ,GAAG7oB,OAAS7K,KAAK0zB,QAAQ,GAAGpuB,KAAOtF,KAAK0zB,QAAQ,GAAGC,QAAUuB,GACvFl1B,KAAKgwB,gBAAiB,EACtBhwB,KAAKm1B,gBACLn1B,KAAKo1B,mBACLp1B,KAAKq1B,gBAGLr1B,KAAKgwB,gBAAiB,EACtBhwB,KAAKs1B,kBAGbxF,EAAgB5vB,UAAUo1B,cAAgB,WACtCt1B,KAAKu1B,gBACLv1B,KAAKw1B,qBACLx1B,KAAKy1B,YAAaz1B,KAAKwxB,UAAYxxB,KAAKoE,kBAAoBpE,KAAK40B,aAAc50B,KAAK01B,gBAC/EzyB,oBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,aAC5D3tB,oBAAkBjD,KAAKqN,qBAAsBrN,KAAKqN,kBAAkBwE,YACrE7R,KAAK21B,qBAET31B,KAAK41B,gBAET9F,EAAgB5vB,UAAU21B,oBAAsB,WACxC71B,KAAK81B,iBAAmB91B,KAAK+1B,iBAAmB/1B,KAAKg2B,kBAAoBh2B,KAAKi2B,mBAC9EpqB,eAAaqqB,YAAYl2B,KAAK81B,iBAC9BjqB,eAAaqqB,YAAYl2B,KAAK+1B,iBAC9BlqB,eAAaqqB,YAAYl2B,KAAKg2B,kBAC9BnqB,eAAaqqB,YAAYl2B,KAAKi2B,oBAGtCnG,EAAgB5vB,UAAUi2B,eAAiB,WACvC10B,EAAOvB,UAAU6V,YAAYlU,KAAK7B,OAEtC8vB,EAAgB5vB,UAAUk2B,kBAAoB,WAC1Cp2B,KAAK61B,sBACD71B,KAAK81B,kBAAoB91B,KAAK81B,gBAAgBryB,UAAUmI,SAASxK,IACjEyK,eAAanI,IAAI1D,KAAK81B,gBAAiB,YAAa91B,KAAKoyB,iBAEzDpyB,KAAK+1B,kBAAoB/1B,KAAK+1B,gBAAgBtyB,UAAUmI,SAASxK,IACjEyK,eAAanI,IAAI1D,KAAK+1B,gBAAiB,YAAa/1B,KAAKkyB,iBAEzDlyB,KAAKg2B,mBAAqBh2B,KAAKg2B,iBAAiBvyB,UAAUmI,SAASxK,IACnEyK,eAAanI,IAAI1D,KAAKg2B,iBAAkB,YAAah2B,KAAKoyB,iBAE1DpyB,KAAKi2B,mBAAqBj2B,KAAKi2B,iBAAiBxyB,UAAUmI,SAASxK,IACnEyK,eAAanI,IAAI1D,KAAKi2B,iBAAkB,YAAaj2B,KAAKkyB,kBAGlEpC,EAAgB5vB,UAAUs1B,mBAAqB,WACtCx1B,KAAKwxB,UAmBNxxB,KAAKq2B,sBACLxqB,eAAanI,IAAI1D,KAAKs2B,YAAY30B,QAAS,QAAS3B,KAAKu2B,kBAAmBv2B,MAC5E6L,eAAanI,IAAI1D,KAAKw2B,UAAU70B,QAAS,QAAS3B,KAAKu2B,kBAAmBv2B,QApB1EA,KAAKm2B,iBACLn2B,KAAKo2B,oBACLp2B,KAAKy2B,qBACLz2B,KAAKoI,mBAAqBpI,KAAK4mB,SAASjlB,QAAQ8L,cAAc,wCAC9DzN,KAAKoI,mBAAqBpI,KAAK4mB,SAASjlB,QAAQ8L,cAAc,uCAC9DzN,KAAK6E,kBAAoBsH,SAAOnM,KAAK6E,kBAAmB7E,KAAKoM,YAC7DpM,KAAK02B,mBAAqB,GAAIpqB,kBAAetM,KAAK40B,cAC9CroB,UAAW,UACXC,UAAWxM,KAAK22B,gBAAgBjqB,KAAK1M,MACrCoM,WAAYpM,KAAK6E,oBAErB7E,KAAK42B,oBAAsB,GAAItqB,kBAAetM,KAAK01B,eAC/CnpB,UAAW,UACXC,UAAWxM,KAAK22B,gBAAgBjqB,KAAK1M,MACrCoM,WAAYpM,KAAK6E,qBAQrB7E,KAAK6K,QAAU7K,KAAKgN,OACpBhN,KAAK62B,yBAET72B,KAAK82B,qBAEThH,EAAgB5vB,UAAUu2B,mBAAqB,WAC3C1uB,eAAa/H,KAAK81B,iBAAmB7tB,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,IACzFH,eAAa/H,KAAK+1B,iBAAmB9tB,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,IACzFH,eAAa/H,KAAKg2B,kBAAoB/tB,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,IAC1FH,eAAa/H,KAAKi2B,kBAAoBhuB,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,KAE9F4nB,EAAgB5vB,UAAUm2B,oBAAsB,WAC5CxqB,eAAaqqB,YAAYl2B,KAAKmI,UAC9B0D,eAAaqqB,YAAYl2B,KAAK4H,cAC9BG,eAAa/H,KAAKmI,UAAYF,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,IAClFH,eAAa/H,KAAK4H,cAAgBK,SAAU,UAAWD,SAAU,IAAKE,gBAAgB,IAClFlI,KAAKmI,WAAanI,KAAKmI,SAAS1E,UAAUmI,SAASxK,IACnDyK,eAAanI,IAAI1D,KAAKmI,SAAU,YAAanI,KAAKsyB,uBAElDtyB,KAAK4H,eAAiB5H,KAAK4H,aAAanE,UAAUmI,SAASxK,IAC3DyK,eAAanI,IAAI1D,KAAK4H,aAAc,YAAa5H,KAAKwyB,wBAG9D1C,EAAgB5vB,UAAUqyB,cAAgB,SAAU1lB,GAChD,GAAI+F,GAAWtO,UAAQuI,EAAEvM,OAAQ,IAAM6uB,EACvCnvB,MAAK+2B,qBAAqBnkB,GAC1B5S,KAAKmP,aAAatC,GAClB7M,KAAKg3B,oBAETlH,EAAgB5vB,UAAUuyB,kBAAoB,SAAU5lB,GACpD,GAAI+F,GAAWtO,UAAQuI,EAAEvM,OAAQ,IAAM6uB,EACvCnvB,MAAK+2B,qBAAqBnkB,GAC1B5S,KAAKiP,iBAAiBpC,GACtB7M,KAAKg3B,oBAETlH,EAAgB5vB,UAAU62B,qBAAuB,SAAUnkB,GACnDA,IACA5S,KAAK4H,aAAegL,EAASnF,cAAc,WAC3CzN,KAAKmI,SAAWyK,EAASnF,cAAc,WACvCzN,KAAKoE,gBAAkBwO,EACvB5S,KAAKi3B,eAAiBrkB,EACtB5S,KAAKuI,eAAiBqK,EAASnF,cAAc,cAC7CzN,KAAKoN,iBAAmBhI,SAAO,mBAA0BwN,GACzD5S,KAAKwI,MAAQoK,EAASnF,cAAc,cAAeypB,qBAAqB,SAAS,GACjFl3B,KAAKoI,mBAAqBwK,EAASnF,cAAc,sBACjDzN,KAAKyH,cAAgBmL,EAASnF,cAAc,eAGpDqiB,EAAgB5vB,UAAUq2B,kBAAoB,SAAU7b,GAEpD,GADcA,EAAMlI,cACR/O,UAAUmI,SAn2BZ,iBAm2BsC3I,oBAAkBjD,KAAK4wB,YAAa,CAChF5wB,KAAKw2B,UAAU70B,QAAQ8B,UAAU4T,OAAO0X,GACxC/uB,KAAKs2B,YAAY30B,QAAQ8B,UAAUC,IAAIqrB,EACnCnc,GAAW5S,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAM0hB,EACzDnvB,MAAK+2B,qBAAqBnkB,GACtB3P,oBAAkBjD,KAAKoE,gBAAgBqJ,cAAc,wCACrDzN,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAK4wB,YAClCvZ,SAAOrX,KAAKoN,kBACZpN,KAAK8I,oBACL9I,KAAKg3B,oBAETh3B,KAAKm3B,0BAEJ,KAAKl0B,oBAAkBjD,KAAK4wB,cAAgB3tB,oBAAkBjD,KAAK6wB,UAAW,CAC/E7wB,KAAKs2B,YAAY30B,QAAQ8B,UAAU4T,OAAO0X,GAC1C/uB,KAAKw2B,UAAU70B,QAAQ8B,UAAUC,IAAIqrB,EACrC,IAAInc,GAAW5S,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAM0hB,EACzDnvB,MAAK+2B,qBAAqBnkB,GACtB3P,oBAAkBjD,KAAKoE,gBAAgBqJ,cAAc,sCACrDzN,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAK6wB,UAClCxZ,SAAOrX,KAAKoN,kBACZpN,KAAK8I,oBACL9I,KAAKg3B,oBAETh3B,KAAKo3B,iBAAiBp3B,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAM0hB,IAChEnvB,KAAKq3B,oBAGbvH,EAAgB5vB,UAAU+lB,kBAAoB,WAC1C,GAAKjmB,KAAKwE,QAAV,CAGAxE,KAAKywB,aAAc,CACnB,IAAI9H,IACAC,MAAO5oB,KAENA,MAAK0wB,cACN1wB,KAAKua,QAAQ,QAASoO,GAE1B3oB,KAAKmzB,uBACLnzB,KAAKg0B,oBACDh0B,KAAK6oB,cAAgB7oB,KAAK0wB,cAC1B1wB,KAAK0wB,cAAe,EACpB1wB,KAAKgoB,QAGLhoB,KAAK0wB,cAAe,IAG5BZ,EAAgB5vB,UAAUgmB,iBAAmB,SAAUrZ,GACnD,GAAK7M,KAAKwE,QAAV,CAGA,IAAKxE,KAAKywB,YAAa,CACnB,GAAIvqB,GAAQlG,KAAKkiB,aAAahc,KAO9B,IANKjD,oBAAkBjD,KAAKiwB,cACpBjwB,KAAKiwB,YAAYtvB,OAAS,GAAKX,KAAKmwB,mBAAqBnwB,KAAKkiB,aAAahc,QAC3ElG,KAAK6zB,YAAc7zB,KAAKiwB,YAAYtvB,OAAS,EAC7CX,KAAK+vB,eAAgB,IAGxB9sB,oBAAkBiD,IAA2B,KAAjBA,EAAMgX,OAAe,CAClD,GAAI0W,GAAQ1tB,EAAMwH,MAAM,IAAM1N,KAAKgyB,UAAY,IAC/C,IAAI4B,EAAMjzB,OAAS,EAAG,CAClBX,KAAKuhB,mBAAqB,IAC1B,IAAIoI,IAAgB/X,OAAQ5R,KAAK+kB,aAAcjd,KAAM,OAAQwJ,SAAU,OACnEzG,EAAQ,GAAIhI,MAAK+wB,EAAM,IACvBtuB,EAAM,GAAIzC,MAAK+wB,EAAM,IACrBhZ,EAAY5a,KAAKs3B,gBAAgBzsB,GAAO,EAAO+oB,EAAOjK,GACtD9O,EAAU7a,KAAKs3B,gBAAgBhyB,GAAK,EAAMsuB,EAAOjK,EACrD,MAAK1mB,oBAAkB2X,IAAerF,OAAOqF,IAAe3X,oBAAkB4X,IAAatF,OAAOsF,IAAU,CACxG,GAAI0c,GAAev3B,KAAK4wB,UACxB5wB,MAAK4wB,WAAahW,CAClB,IAAI4c,GAAax3B,KAAK6wB,QAOtB,IANA7wB,KAAK6wB,SAAWhW,EAChB7a,KAAK6nB,WACL7nB,KAAKy3B,iBACDvxB,IAAUlG,KAAKmwB,kBACfnwB,KAAK+oB,cAAclc,IAElB7M,KAAKywB,aAAenJ,SAAS0B,gBAAkBhpB,KAAKkiB,aAAc,CACnEliB,KAAK0wB,cAAe,CAChBzH,IACAL,MAAO5oB,KAEXA,MAAKua,QAAQ,OAAQ0O,GASzB,MAPAjpB,MAAKg0B,yBAGDh0B,KAAKwxB,UAAYxxB,KAAK00B,gBACtB10B,KAAK4wB,WAAa2G,EAClBv3B,KAAK6wB,SAAW2G,IAKfx3B,KAAK2kB,aACN3kB,KAAK4wB,WAAa,KAClB5wB,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,gBAKR7nB,MAAK2kB,aACN3kB,KAAK4wB,WAAa,KAClB5wB,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,YAuBjB,GAnBK7nB,KAAK2kB,YAUD1hB,oBAAkBiD,IAA2B,KAAjBA,EAAMgX,SACnCld,KAAK4wB,WAAa,KAClB5wB,KAAK6wB,SAAW,MAEpB7O,QAAM6F,SAAS,GAAI7nB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAChEnkB,KAAKwiB,gBAdDvf,oBAAkBjD,KAAK4mB,YACvB5mB,KAAKqG,YAAc,MAEvBrG,KAAKm0B,mBAAqBn0B,KAAKo0B,iBAAmB,KAClDp0B,KAAK4wB,WAAa,KAClB5wB,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,YAUT7nB,KAAKilB,aACLjlB,KAAK+oB,cAAclc,IACd7M,KAAKywB,aAAenJ,SAAS0B,gBAAkBhpB,KAAKkiB,aAAc,CACnEliB,KAAK0wB,cAAe,CACpB,IAAIzH,IACAL,MAAO5oB,KAEXA,MAAKua,QAAQ,OAAQ0O,IAG7BjpB,KAAKg0B,sBAGTlE,EAAgB5vB,UAAUo3B,gBAAkB,SAAU3oB,EAAM+oB,EAAO9D,EAAOjK,GACtE,MAAmB,UAAf3pB,KAAKgN,MACEhN,KAAK8C,UAAUyO,UAAUqiB,EAAM8D,EAAQ,EAAI,GAAGxa,OAAQyM,GAEzC,SAAf3pB,KAAKgN,MACH,GAAInK,MAAK8L,EAAKH,cAAeG,EAAK2B,YAAconB,EAAQ,EAAI,GAAIA,EAAQ,EAAI,GAG5E,GAAI70B,MAAK8L,EAAKH,cAAekpB,EAAQ,GAAK,EAAGA,EAAQ,GAAK,IAGzE5H,EAAgB5vB,UAAUg0B,WAAa,WACnCl0B,KAAKm0B,mBAAqBn0B,KAAKo0B,iBAAmB,KAClDp0B,KAAKqG,YAAc,MAEvBypB,EAAgB5vB,UAAU+kB,WAAa,WACnC,GAAI0S,GAAW33B,KAAKkiB,aAAahc,MAAMgX,QACjCja,oBAAkBjD,KAAK6wB,WAAa5tB,oBAAkBjD,KAAK4wB,aAA4B,KAAb+G,IACzE10B,oBAAkBjD,KAAK4wB,cAAgB5wB,KAAK4wB,YAAc5wB,KAAKuC,MACxDU,oBAAkBjD,KAAK4wB,cAAgB3tB,oBAAkBjD,KAAK6wB,YAAe7wB,KAAK4wB,YAAc5wB,KAAK6wB,WACtG5tB,oBAAkBjD,KAAK6wB,YAAc7wB,KAAK6wB,UAAY7wB,KAAKwC,KAC/DxC,KAAK4wB,YAAc5wB,KAAK43B,eAAe53B,KAAK4wB,aACzC5wB,KAAK6wB,UAAY7wB,KAAK43B,eAAe53B,KAAK6wB,YAA6B,KAAb8G,GAClE1wB,YAAUjH,KAAKmiB,aAAaC,WA7gC5B,WA8gCAte,aAAW9D,KAAKkiB,cAAgB2B,eAAgB,UAG5C7jB,KAAKmiB,eACLnb,eAAahH,KAAKmiB,aAAaC,WAlhCnC,WAmhCIte,aAAW9D,KAAKkiB,cAAgB2B,eAAgB,YAI5DiM,EAAgB5vB,UAAU23B,kBAAoB,SAAUC,EAAgBC,EAAKC,GAezE,WAdsB,KAAlBA,IAA4BA,GAAgB,GAC5CA,GACAh4B,KAAK82B,oBAELgB,GACA93B,KAAKi4B,mBAAqB,GAAIp1B,OAAM7C,KAAKqG,aACzC0xB,EAAM/3B,KAAK40B,eAGX50B,KAAKk4B,oBAAsB,GAAIr1B,OAAM7C,KAAKqG,aAC1C0xB,EAAM/3B,KAAK01B,eAEf11B,KAAKm4B,sBAAsBJ,GAC3B/3B,KAAKwI,MAAMiG,QACJspB,GAEXjI,EAAgB5vB,UAAUk4B,cAAgB,SAAUvrB,EAAGirB,EAAgBO,EAAWC,EAAYP,GAC1F,GACIppB,GAEAnM,EAHAmL,EAAO3N,KAAKiN,cAAcjN,KAAK+M,eAE/BxK,EAAMvC,KAAKuC,GAQf,QAFIC,EAJCS,oBAAkBjD,KAAK+0B,WAAY/0B,KAAKuwB,kBAAqBttB,oBAAkBjD,KAAK4wB,YAI/E5wB,KAAKwC,IAHL,GAAIK,MAAK,GAAIA,OAAM7C,KAAK4wB,YAAY7c,QAAQ/T,KAAK4wB,WAAWzgB,WAAanQ,KAAK+0B,QAAU,KAK1FloB,EAAEiB,QACN,IAAK,YACDa,EAAO,GAAI9L,OAAM7C,KAAKqG,aACtBrG,KAAK6O,OAAOF,EAAM,EAAG9B,EAAGrK,EAAKD,GACzBu1B,IAAmBnpB,IAAU2pB,IAC7BP,EAAM/3B,KAAK63B,mBAAkB,EAAOE,IAExC/3B,KAAK+N,iBAAiB,EAAGJ,EAAMd,EAAGrK,EAAKD,GACvCvC,KAAKu4B,cAAcR,EAAKlrB,EACxB,MACJ,KAAK,WACD8B,EAAO,GAAI9L,OAAM7C,KAAKqG,aACtBrG,KAAK6O,OAAOF,GAAO,EAAG9B,EAAGrK,EAAKD,GACzBu1B,IACInpB,IAAU0pB,IACXN,EAAM/3B,KAAK63B,mBAAkB,EAAME,IAG3C/3B,KAAK+N,kBAAkB,EAAGJ,EAAMd,EAAGrK,EAAKD,GACxCvC,KAAKu4B,cAAcR,EAAKlrB,EACxB,MACJ,KAAK,SACY,IAATc,GACAgB,EAAO,GAAI9L,OAAM7C,KAAKqG,aACtBrG,KAAK6O,OAAOF,GAAO,EAAG9B,EAAGrK,EAAKD,IACzBoM,IAAS0pB,IAAcP,IACxBC,EAAM/3B,KAAK63B,mBAAkB,EAAME,IAEvC/3B,KAAK+N,kBAAkB,EAAGJ,EAAMd,EAAGrK,EAAKD,IAGxCvC,KAAK+N,kBAAkB,EAAGJ,EAAMd,EAAG7M,KAAKwC,IAAKxC,KAAKuC,KAEtDvC,KAAKu4B,cAAcR,EAAKlrB,EACxB,MACJ,KAAK,WACY,IAATc,GACAgB,EAAO,GAAI9L,OAAM7C,KAAKqG,aACtBrG,KAAK6O,OAAOF,EAAM,EAAG9B,EAAGrK,EAAKD,GACzBu1B,IAAmBnpB,IAAS2pB,IAC5BP,EAAM/3B,KAAK63B,mBAAkB,EAAOE,IAExC/3B,KAAK+N,iBAAiB,EAAGJ,EAAMd,EAAGrK,EAAKD,IAGvCvC,KAAK+N,iBAAiB,EAAGJ,EAAMd,EAAG7M,KAAKwC,IAAKxC,KAAKuC,KAErDvC,KAAKu4B,cAAcR,EAAKlrB,EACxB,MACJ,KAAK,OACD7M,KAAKqG,YAAcrG,KAAKoO,SAASpO,KAAKqG,aACtCgR,SAAOrX,KAAKoN,kBACC,IAATO,EACA3N,KAAKgL,aAAa6B,GAEJ,IAATc,EACL3N,KAAK8K,YAAY+B,GAGjB7M,KAAK+K,cAAc8B,GAEvB7M,KAAKu4B,cAAcR,EAAKlrB,EACxB,MACJ,KAAK,MACD7M,KAAKqG,YAAcrG,KAAKqO,QAAQrO,KAAKqG,YAAasH,GAClD0J,SAAOrX,KAAKoN,kBACC,IAATO,EACA3N,KAAKgL,aAAa6B,GAEJ,IAATc,EACL3N,KAAK8K,YAAY+B,GAGjB7M,KAAK+K,cAAc8B,GAEvB7M,KAAKu4B,cAAcR,EAAKlrB,EACxB,MACJ,KAAK,MACG7M,KAAKw4B,iBAAiBT,EAAKlJ,KAC3BkJ,EAAM/3B,KAAK63B,mBAAkB,EAAOE,GAAK,GACzC/3B,KAAKqG,YAAcrG,KAAKy4B,iBAAiBz4B,KAAK01B,eAC9C/nB,EAAO3N,KAAKiN,cAAcjN,KAAK+M,eAC/B/M,KAAK+N,iBAAiB,EAAGJ,EAAMd,EAAGrK,EAAKD,GACvCvC,KAAKu4B,cAAcR,EAAKlrB,GAE5B,MACJ,KAAK,WACG7M,KAAKw4B,iBAAiBT,EAAKjJ,KAC3BiJ,EAAM/3B,KAAK63B,mBAAkB,EAAME,GAAK,GACxC/3B,KAAKqG,YAAcrG,KAAKy4B,iBAAiBz4B,KAAK40B,cAC9C50B,KAAK+N,iBAAiB,EAAGJ,EAAMd,EAAGrK,EAAKD,GACvCvC,KAAKu4B,cAAcR,EAAKlrB,MAKxCijB,EAAgB5vB,UAAUu4B,iBAAmB,SAAU7lB,GACnD,GAAI8lB,GAA0D,IAA3C14B,KAAKiN,cAAcjN,KAAK+M,eAAuB6F,EAASiD,SAAS,GAAGsT,kBAAkB1b,cAAc,qEAAuEmF,EAASiD,SAAS,GAAGsT,kBAAkB1b,cAAc,sEAC/OkrB,EAAaD,GAAgBA,EAAa9vB,GAAK8vB,EAAa9vB,GAAG8E,MAAM,KAAK,GAAK,KAC/EkrB,EAAkB,GAAI/1B,MAAK7C,KAAKqG,YAAYmI,cAAexO,KAAKqG,YAAYiK,WAAY,EAE5F,OADgBqoB,GAAa,GAAI91B,OAAM81B,GAAcC,GAGzD9I,EAAgB5vB,UAAUy2B,gBAAkB,SAAU9pB,EAAG3G,GACrD,GAAIyI,GACAhB,EAAO3N,KAAKiN,cAAcjN,KAAK+M,eAC/B8rB,EAAiB,GAAIh2B,MAAK7C,KAAKk4B,oBAAoB1pB,cAAexO,KAAKk4B,oBAAoB5nB,WAAY,GACvGwoB,EAAgB,GAAIj2B,MAAK7C,KAAKi4B,mBAAmBzpB,cAAexO,KAAKi4B,mBAAmB3nB,WAAa,EAAG,GACxGynB,EAAMzzB,UAAQuI,EAAEvM,OAAQ,IAAMwuB,GAE9BgJ,GADJC,EAAM90B,oBAAkB80B,GAAO/3B,KAAK40B,aAAemD,GAC1Bt0B,UAAUmI,SAASijB,EAC5C7uB,MAAKm4B,sBAAsBJ,EAC3B,IAAIxqB,GAAevN,KAAKoN,iBAAiBK,cAAc,oBACnDD,EAAcuqB,EAAItqB,cAAc,SAAW2hB,GAC3CxU,EAAYmd,EAAItqB,cAAc,SAAWuhB,GACzCnU,EAAUkd,EAAItqB,cAAc,SAAWwhB,GACvCrhB,EAAa5N,KAAKiN,cAAcjN,KAAKgN,OACrCa,EAAiBF,IAASC,GAAc5N,KAAKiN,cAAcjN,KAAK6K,QAAU+C,EAC1EgnB,EAAetwB,UAAQuI,EAAEvM,OAAQ,IAAMuuB,GACvC6G,EAAgBpxB,UAAQuI,EAAEvM,OAAQ,IAAMwuB,GACxCiK,EAAgBz0B,UAAQuI,EAAEvM,OAAQ,aAetC,QAdK2C,oBAAkBuK,GAIbvK,oBAAkB4X,IAAa7a,KAAKqwB,aAGpCptB,oBAAkB2X,IAAe5a,KAAKqwB,aAGtCrwB,KAAKqwB,cACXrwB,KAAKqG,YAAY0N,QAAQ,GAHzB/T,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAK4wB,YAHlC5wB,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAK6wB,UAHlC7wB,KAAKqG,YAAcrG,KAAKqG,YAW5BrG,KAAK8B,OAAS,GACN+K,EAAEiB,QACN,IAAK,aACG9N,KAAK00B,gBACL10B,KAAK+nB,KAAKlb,GACV7M,KAAK0wB,cAAe,EACpB1wB,KAAKkiB,aAAazT,QAClBxH,YAAUjH,KAAKmiB,aAAaC,YA1rC/B,kBA4rCD,MACJ,KAAK,SACD,GAAIvU,EAAe,CACf,GAAIlM,GAAWsB,oBAAkBuK,GAA6BoN,EAAdpN,CAC3CvK,qBAAkBtB,IAAaA,EAAQ8B,UAAUmI,SAASxK,IAC3DpB,KAAKg5B,YAAY,aAIhB/1B,oBAAkBsK,IAAkBM,IAAkB5K,oBAAkBuK,KACpEvK,oBAAkBjD,KAAKkG,SAEpBA,EADAlG,KAAKoE,gBAAgBX,UAAUmI,SAASijB,GAChC7uB,KAAK4a,UAGL5a,KAAK6a,SAGrB7a,KAAK+E,YAAc8H,EACnB7M,KAAKkO,aAAa,OAAQP,EAAOH,GAAeD,EAAerH,GAGvE2G,GAAEmB,gBACF,MACJ,KAAK,cAEOirB,EAAW,GAAIp2B,MAAK7C,KAAKqG,YAAYmI,cAAe,EAAG,IACtDspB,IAAmBmB,GAAYH,IAChCf,EAAM/3B,KAAK63B,mBAAkB,EAAME,IAEvCt2B,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM,QAAS,GAAI6C,MAAK7C,KAAKqG,YAAYmI,cAAe,EAAG,IAC5FxO,KAAKu4B,cAAcR,EAAKlrB,EAE5B,MACJ,KAAK,gBACI5J,oBAAkB2xB,GAGb3xB,oBAAkByyB,GAUnBzyB,oBAAkB81B,IACnB/4B,KAAKk5B,aAAav3B,QAAQ8M,QAVzBxL,oBAAkBjD,KAAK+4B,eAKxB/4B,KAAKk5B,aAAav3B,QAAQ8M,SAJ1BzO,KAAK+4B,cAActqB,QACnBzO,KAAK82B,qBALT92B,KAAK01B,cAAc7f,SAAS,GAAGsT,kBAAkB1a,QAgBrD5B,EAAEmB,gBACF,MACJ,KAAK,eACI/K,oBAAkB2xB,GASd3xB,oBAAkByyB,IACnB11B,KAAK40B,aAAa/e,SAAS,GAAGsT,kBAAkB1a,SATV,IAAtCzO,KAAKu0B,YAAY5yB,QAAQ4C,SACzBvE,KAAKu0B,YAAY5yB,QAAQ8M,QAGzBzO,KAAKk5B,aAAav3B,QAAQ8M,QAQlC5B,EAAEmB,gBACF,MACJ,KAAK,YACGhO,KAAKoE,gBAAgBX,UAAUmI,SAASijB,GACxC7uB,KAAKm5B,mBAAmBtsB,EAAG7M,KAAKoE,iBAKpCyI,EAAEmB,gBACF,MACJ,KAAK,cACK/K,oBAAkBsK,IAAkBtK,oBAAkBuK,IAAkBK,IACrE5K,oBAAkBjD,KAAKkG,SAEpBA,EADAlG,KAAKoE,gBAAgBX,UAAUmI,SAASijB,GAChC7uB,KAAK4a,UAGL5a,KAAK6a,SAGrB7a,KAAK+E,YAAc8H,EACnB7M,KAAKkO,aAAa,OAAQP,EAAOJ,GAAgBC,EAActH,IAEnE2G,EAAEmB,gBACF,MACJ,KAAK,aAEG,GAAIirB,GAAW,GAAIp2B,MAAK7C,KAAKqG,YAAYmI,cAAe,GAAI,GACxDspB,KAAmBmB,GAAYJ,IAC/Bd,EAAM/3B,KAAK63B,mBAAkB,EAAOE,IAExCt2B,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM,QAAS,GAAI6C,MAAK7C,KAAKqG,YAAYmI,cAAe,GAAI,KAC7FxO,KAAKu4B,cAAcR,EAAKlrB,EAE5B,MACJ,KAAK,SACD8B,EAAO,GAAI9L,OAAM7C,KAAKqG,aACtBrG,KAAKsO,UAAUK,GAAO,IACjBmpB,IAAmBnpB,IAASmqB,IAC7Bf,EAAM/3B,KAAK63B,mBAAkB,EAAME,IAEvC/3B,KAAKsO,UAAUtO,KAAKqG,aAAc,GAClC5E,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM,QAASA,KAAKqG,aACrDrG,KAAKu4B,cAAcR,EAAKlrB,EACxB,MACJ,KAAK,WACD8B,EAAO,GAAI9L,OAAM7C,KAAKqG,aACtBrG,KAAKsO,UAAUK,EAAM,GACjBmpB,IAAmBnpB,IAASkqB,IAC5Bd,EAAM/3B,KAAK63B,mBAAkB,EAAOE,IAExC/3B,KAAKsO,UAAUtO,KAAKqG,YAAa,GACjC5E,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM,QAASA,KAAKqG,aACrDrG,KAAKu4B,cAAcR,EAAKlrB,EACxB,MACJ,KAAK,cACD8B,EAAO,GAAI9L,OAAM7C,KAAKqG,aACtBrG,KAAKuO,SAASI,GAAO,IAChBmpB,IAAmBnpB,IAASmqB,IAC7Bf,EAAM/3B,KAAK63B,mBAAkB,EAAME,IAEvC/3B,KAAKuO,SAASvO,KAAKqG,aAAc,GACjC5E,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM,QAASA,KAAKqG,aACrDrG,KAAKu4B,cAAcR,EAAKlrB,EACxB,MACJ,KAAK,gBACD8B,EAAO,GAAI9L,OAAM7C,KAAKqG,aACtBrG,KAAKuO,SAASI,EAAM,GAChBmpB,IAAmBnpB,IAASkqB,IAC5Bd,EAAM/3B,KAAK63B,mBAAkB,EAAOE,IAExC/3B,KAAKuO,SAASvO,KAAKqG,YAAa,GAChC5E,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM,QAASA,KAAKqG,aACrDrG,KAAKu4B,cAAcR,EAAKlrB,EACxB,MACJ,KAAK,WACI5J,oBAAkBjD,KAAK+4B,iBACxB/4B,KAAK+4B,cAAc50B,aAAa,WAAY,KAC5CnE,KAAK+4B,cAActqB,QACnBzO,KAAK82B,qBAELgB,GACAjrB,EAAEmB,iBAEFhO,KAAKw4B,iBAAiBT,EAAKjJ,KAC3B9uB,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAKi4B,oBAClCj4B,KAAKo4B,cAAcvrB,EAAGirB,EAAgBgB,EAAeD,EAAgBd,GAEzE,MACJ,KAAK,WACG/3B,KAAKu0B,cAAgBv0B,KAAKu0B,YAAYhwB,UACtCvE,KAAK20B,cAAc9nB,EAEvB,MACJ,KAAK,MACG7M,KAAKw4B,iBAAiBT,EAAKlJ,KAC3B7uB,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAKk4B,qBAClCl4B,KAAKo4B,cAAcvrB,EAAGirB,EAAgBgB,EAAeD,EAAgBd,GAEzE,MACJ,SACI/3B,KAAKo4B,cAAcvrB,EAAGirB,EAAgBgB,EAAeD,EAAgBd,GACrE/3B,KAAKo5B,kBAEbp5B,KAAKq5B,gBAETvJ,EAAgB5vB,UAAUs4B,iBAAmB,SAAUT,EAAKuB,GACxD,GAAIxB,GAAiBC,EAAIt0B,UAAUmI,SAAS0tB,GACxCC,EAAcv5B,KAAK01B,cAAcjoB,cAAc,aAC/C+rB,EAAax5B,KAAK40B,aAAannB,cAAc,aAC7CgsB,IAAeF,GAAcA,EAAY91B,UAAUmI,SAAS,WAC5D8tB,IAAcF,GAAaA,EAAW/1B,UAAUmI,SAAS,WACzD+tB,IAAcJ,GAAcA,EAAY91B,UAAUmI,SAAS,UAC3DguB,IAAaJ,GAAaA,EAAW/1B,UAAUmI,SAAS,UACxDiuB,IAAgBN,GAAcA,EAAY91B,UAAUmI,SAAS,YAC7DkuB,IAAeN,GAAaA,EAAW/1B,UAAUmI,SAAS,WAC9D,OAAOksB,KAAmB4B,GAAeE,GAAcE,KAClDL,GAAgBE,GAAeE,KAAmB75B,KAAKwxB,UAEhE1B,EAAgB5vB,UAAUq4B,cAAgB,SAAU3lB,EAAU/F,GAC1D7M,KAAK62B,uBAAuBjkB,GACxBA,EAASnP,UAAUmI,SAASijB,GAC5B7uB,KAAKi4B,mBAAqB,GAAIp1B,OAAM7C,KAAKqG,aAGzCrG,KAAKk4B,oBAAsB,GAAIr1B,OAAM7C,KAAKqG,aAE9CrG,KAAKm2B,iBACLn2B,KAAKo2B,oBACLp2B,KAAKy1B,aAAa7iB,IAClB5S,KAAKqwB,aAAerwB,KAAK43B,eAAe53B,KAAKqG,aAC7CwG,EAAEmB,kBAEN8hB,EAAgB5vB,UAAU4lB,aAAe,SAAUjZ,GAC/C,OAAQA,EAAEiB,QACN,IAAK,eACI9N,KAAK00B,gBAC0B,KAA5B10B,KAAKkiB,aAAahc,QAClBlG,KAAKknB,QACLlnB,KAAK+oB,cAAclc,GACnB7M,KAAKk0B,cAETl0B,KAAKgoB,KAAK,KAAMnb,GAChB7M,KAAKswB,oBAAqB,EACrBtwB,KAAKwxB,UACDvuB,oBAAkBjD,KAAK40B,eACxB50B,KAAK60B,gBAGb70B,KAAKowB,YAAa,EAEtB,MACJ,KAAK,SACGpwB,KAAK00B,eACL10B,KAAK+nB,KAAKlb,EAEd,MACJ,KAAK,QACGya,SAAS0B,gBAAkBhpB,KAAKkiB,eAChCliB,KAAKkmB,iBAAiBrZ,GACtB7M,KAAK+nB,KAAKlb,GAEd,MACJ,KAAK,MACGya,SAAS0B,gBAAkBhpB,KAAKkiB,cAAgBliB,KAAK00B,gBACrD10B,KAAK+nB,KAAKlb,GACVA,EAAEmB,oBAKlB8hB,EAAgB5vB,UAAU22B,uBAAyB,SAAUjkB,GAQzD,IAAK,GAPDmnB,GAOKpwB,EAAK,EAAGqwB,EALbD,EADAnnB,EACUA,EAASxI,iBAAiB,kBAG1BpK,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,kBAEfT,EAAKqwB,EAAUr5B,OAAQgJ,IAAM,CAC/D,GAAIswB,GAAOD,EAAUrwB,EACrBkC,gBAAaqqB,YAAY+D,GACNA,EAAKx2B,UAAUmI,SAASxK,IAAa64B,EAAKx2B,UAAUmI,SAAS0jB,IAC1D2K,EAAKx2B,UAAUmI,SAj6ChC,mBAk6CI5L,KAAKwxB,UACN3lB,eAAanI,IAAIu2B,EAAM,YAAaj6B,KAAKk6B,eAAgBl6B,MAE7D6L,eAAanI,IAAIu2B,EAAM,YAAaj6B,KAAKg5B,YAAah5B,SAIlE8vB,EAAgB5vB,UAAU42B,kBAAoB,WAG1C,IAAK,GAFDqD,IAAUl3B,oBAAkBjD,KAAK4wB,cAAgB3tB,oBAAkBjD,KAAK6wB,UAEnElnB,EAAK,EAAGywB,EADCp6B,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,gBAAwBglB,GACnCzlB,EAAKywB,EAAcz5B,OAAQgJ,IAAM,CAC3E,GAAIouB,GAAMqC,EAAczwB,GACpB8B,EAAQ,GAAI5I,MACZw3B,EAAUr6B,KAAKoW,WAAW,KAAM2hB,IAChB,UAAf/3B,KAAKgN,OAA4C,UAAvBhN,KAAK+M,iBAC9BgrB,EAAIt0B,UAAUmI,SAr7CpB,YAq7CwCmsB,EAAIt0B,UAAUmI,SAr7CtD,YAq7CyEuuB,IAClD,SAAfn6B,KAAKgN,OAA2C,SAAvBhN,KAAK+M,iBAC3B/M,KAAKs6B,YAAY7uB,EAAO4uB,KAAar6B,KAAKu6B,WAAW9uB,EAAO4uB,IAAaF,IAC7D,WAAfn6B,KAAKgN,OAA6C,WAAvBhN,KAAK+M,iBAC9B/M,KAAKu6B,WAAW9uB,EAAO4uB,IAAYF,MACzCpC,EAAIt0B,UAAU4T,OAAO+X,GAChB2I,EAAIt0B,UAAUmI,SAASojB,IAAe+I,EAAIt0B,UAAUmI,SAASqjB,IAC9D8I,EAAInf,gBAAgB,iBAKpCkX,EAAgB5vB,UAAUg6B,eAAiB,SAAUxf,EAAO/Y,GACxD,GAAI64B,GAAiB74B,GAAW+Y,EAAMlI,cAClCnM,EAAcrG,KAAKoW,WAAW,KAAMokB,EACxC,KAAKv3B,oBAAkBjD,KAAK4wB,cAAgB5wB,KAAK4wB,aAAe5wB,KAAKuC,MAAQvC,KAAK4wB,aAAe5wB,KAAKwC,OAC5FxC,KAAK43B,eAAe53B,KAAK6wB,YAAc7wB,KAAK43B,eAAe53B,KAAK4wB,aAC/D3tB,oBAAkBjD,KAAK6wB,WAAa5tB,oBAAkBjD,KAAK4wB,cACzD3tB,oBAAkBjD,KAAK4wB,aAAe3tB,oBAAkBjD,KAAK6wB,WAElE,IAAK,GAAIlnB,GAAK,EAAG8wB,EADHz6B,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,kBACfT,EAAK8wB,EAAU95B,OAAQgJ,IAAM,CAC/D,GAAIouB,GAAM0C,EAAU9wB,GAChB+wB,GAAmB3C,EAAIt0B,UAAUmI,SAASxK,IAAa22B,EAAIt0B,UAAUmI,SAAS0jB,EAClF,KAAKyI,EAAIt0B,UAAUmI,SAx8CtB,kBAw8C8C8uB,EAAgB,CACvD,GAAIL,GAAUr6B,KAAKoW,WAAW,KAAM2hB,GAChC4C,EAAiB,GAAI93B,OAAM7C,KAAK4wB,WACjB,IAAI/tB,OAAMw3B,GACZ92B,SAAS,EAAG,EAAG,EAAG,IAAMo3B,EAAep3B,SAAS,EAAG,EAAG,EAAG,KAAO82B,IAAYh0B,EACzFY,YAAU8wB,GAAM7I,GAGhBloB,eAAa+wB,IAAO7I,OAO5CY,EAAgB5vB,UAAU06B,eAAiB,SAAUC,EAAUC,GAC3D,GAAIC,IAAS,CAiBb,OAhBmB,UAAf/6B,KAAKgN,MACD,EAAWzJ,SAAS,EAAG,EAAG,EAAG,KAAO,EAASA,SAAS,EAAG,EAAG,EAAG,KAC/Dw3B,GAAS,GAGO,SAAf/6B,KAAKgN,MACL6tB,EAASrsB,gBAAkBssB,EAAOtsB,eAClCqsB,EAASvqB,aAAewqB,EAAOxqB,aAChCyqB,GAAS,GAGO,WAAf/6B,KAAKgN,OACN6tB,EAASrsB,gBAAkBssB,EAAOtsB,gBAClCusB,GAAS,GAGVA,GAEXjL,EAAgB5vB,UAAUu1B,YAAc,SAAUuF,GAC9C,IAAK/3B,oBAAkBjD,KAAK4wB,YACxB,IAAK,GAAIjnB,GAAK,EAAGsxB,EAAsBD,EAAmBrxB,EAAKsxB,EAAoBt6B,OAAQgJ,IAGvF,IAAK,GAAIC,GAAK,EAAGsxB,EAFFD,EAAoBtxB,GACZS,iBAAiB,kBACFR,EAAKsxB,EAAUv6B,OAAQiJ,IAAM,CAC/D,GAAImuB,GAAMmD,EAAUtxB,EACpB,KAAKmuB,EAAIt0B,UAAUmI,SAl/CtB,mBAk/C+CmsB,EAAIt0B,UAAUmI,SAASxK,GAAW,CAC1E,GAAIi5B,GAAUr6B,KAAKoW,WAAW,KAAM2hB,GAChCoD,EAAen7B,KAAKoW,WAAW,KAAM2hB,EAuBzC,IAtBK90B,oBAAkBjD,KAAK6wB,UAYxB7pB,eAAa+wB,IAAO7I,IAXhBlvB,KAAK+M,gBAAkB/M,KAAKgN,QAC3BmuB,EAAa53B,SAAS,EAAG,EAAG,EAAG,KAAO,GAAIV,OAAM7C,KAAK4wB,YAAYrtB,SAAS,EAAG,EAAG,EAAG,KAChF43B,EAAa53B,SAAS,EAAG,EAAG,EAAG,KAAO,GAAIV,OAAM7C,KAAK6wB,UAAUttB,SAAS,EAAG,EAAG,EAAG,KACpFvD,KAAK46B,eAAe,GAAI/3B,OAAM7C,KAAK4wB,YAAa,GAAI/tB,OAAM7C,KAAK6wB,aAC/D,GAAIhuB,OAAM7C,KAAK4wB,YAAYrtB,SAAS,EAAG,EAAG,EAAG,KAAOvD,KAAKuC,MACtD,GAAIM,OAAM7C,KAAK6wB,UAAUttB,SAAS,EAAG,EAAG,EAAG,KAAOvD,KAAKwC,MACtDxC,KAAK43B,eAAe53B,KAAK4wB,cAAe5wB,KAAK43B,eAAe53B,KAAK6wB,WACtE5pB,YAAU8wB,GAAM7I,GAMpB6I,EAAIt0B,UAAUmI,SAnhD3B,eAmhDiDmsB,EAAIt0B,UAAUmI,SAASqjB,KACzDkM,IAAkBn7B,KAAK6wB,WACzB7pB,eAAa+wB,IArhD1B,eAshDa/wB,eAAa+wB,IAAO9I,KAEpB8I,EAAIt0B,UAAUmI,SAASsjB,KAAiBiM,GAAgBn7B,KAAK6wB,UAC7D7pB,eAAa+wB,IAAO7I,KAEnB6I,EAAIt0B,UAAUmI,SA/hD1B,iBA+hDgD,CACrC,GAAI+uB,GAAiB,GAAI93B,OAAM7C,KAAK4wB,YAChCwK,EAAiB,GAAIv4B,OAAMw3B,EAC3Br6B,MAAK+M,gBAAkB/M,KAAKgN,QAC3BouB,EAAe73B,SAAS,EAAG,EAAG,EAAG,KAAQo3B,EAAep3B,SAAS,EAAG,EAAG,EAAG,KACvE63B,EAAe73B,SAAS,EAAG,EAAG,EAAG,KAAOo3B,EAAep3B,SAAS,EAAG,EAAG,EAAG,KAC5EvD,KAAK4wB,aAAe5wB,KAAKuC,MACtBvC,KAAKmiB,aAAaC,UAAU3e,UAAUmI,SAAS,aAC9C5L,KAAK43B,eAAe53B,KAAK4wB,cAAe5wB,KAAK43B,eAAe53B,KAAK6wB,YACtE5pB,YAAU8wB,IAAO/I,EApiDlC,eAqiDiBhvB,KAAKq7B,sBAAsBtD,EAAK/3B,KAAK4wB,YAAY,GAErD,IAAI0K,GAAe,GAAIz4B,OAAM7C,KAAK6wB,SACP,UAAvB7wB,KAAK+M,cACLquB,EAAiB,GAAIv4B,MAAKu4B,EAAe5sB,cAAe4sB,EAAe9qB,WAAa,EAAG,GAE3D,WAAvBtQ,KAAK+M,gBACVquB,EAAiB,GAAIv4B,MAAKu4B,EAAe5sB,cAAe,GAAI,KAE5DxO,KAAK+M,gBAAkB/M,KAAKgN,QAC3B/J,oBAAkBjD,KAAK6wB,YACvBuK,EAAe73B,SAAS,EAAG,EAAG,EAAG,KAAQ+3B,EAAa/3B,SAAS,EAAG,EAAG,EAAG,KACrE63B,EAAe73B,SAAS,EAAG,EAAG,EAAG,KAAO+3B,EAAa/3B,SAAS,EAAG,EAAG,EAAG,KAC1EvD,KAAK4wB,aAAe5wB,KAAKuC,MACtBvC,KAAKmiB,aAAaC,UAAU3e,UAAUmI,SAAS,aAC9C5L,KAAK43B,eAAe53B,KAAK4wB,cAAe5wB,KAAK43B,eAAe53B,KAAK6wB,YACtE5pB,YAAU8wB,IAAO9I,EArjDlC,eAsjDiBjvB,KAAKq7B,sBAAsBtD,EAAK/3B,KAAK4wB,YAAY,KAEhDyJ,IAAar6B,KAAK4wB,YAAe3tB,oBAAkBjD,KAAK6wB,YAAcwJ,IAAar6B,KAAK6wB,UACzF7wB,KAAKq7B,sBAAsBtD,EAAK/3B,KAAK6wB,UAAU,GAAO,OAQlFf,EAAgB5vB,UAAUk5B,gBAAkB,aAClCn2B,oBAAkBjD,KAAK80B,UAAY90B,KAAK80B,QAAU,IAAQ7xB,oBAAkBjD,KAAK+0B,UAAY/0B,KAAK+0B,QAAU,KACzG/0B,KAAKwxB,SAKNxxB,KAAKo3B,iBAAiBp3B,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAM0hB,KAJhEnvB,KAAKo3B,iBAAiBp3B,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAMohB,IAChE7uB,KAAKo3B,iBAAiBp3B,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAMqhB,OAO5EgB,EAAgB5vB,UAAUq7B,UAAY,SAAU1uB,GAC5C,GAAI2uB,GACA5H,EACAhZ,EAAa3X,oBAAkBjD,KAAK4wB,YAG/B,KAFL5wB,KAAK8C,UAAU0O,WAAWxR,KAAK4wB,YAC3Bhf,OAAQ5R,KAAK+kB,aAAcjd,KAAM,OAAQwJ,SAAU,QAEvDuJ,EAAW5X,oBAAkBjD,KAAK6wB,UAG7B,KAFL7wB,KAAK8C,UAAU0O,WAAWxR,KAAK6wB,UAC3Bjf,OAAQ5R,KAAK+kB,aAAcjd,KAAM,OAAQwJ,SAAU,OAqB3D,OAnBKrO,qBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,aAM7D4K,EAAa,GACb5H,EAAQ,IANR4H,EAAa5gB,EAAY,IAAM5a,KAAKgyB,UAAY,IAAMnX,EACtD+Y,EAASze,KAAKyL,MAAMzL,KAAKC,KAAKpV,KAAKy7B,wBAAwBz7B,KAAK4wB,YAAYpX,UACxExZ,KAAKy7B,wBAAwBz7B,KAAK6wB,UAAUrX,mBAAuC,IAOvFtT,MAAOlG,KAAKkG,MACZ0U,UAAW5a,KAAK4wB,WAChB/V,QAAS7a,KAAK6wB,SACd3F,QAAS0I,EACTlZ,MAAO7N,GAAK,KACZlL,QAAS3B,KAAK2B,QACdkd,cAAe5b,oBAAkB4J,GACjC5C,KAAMuxB,IAId1L,EAAgB5vB,UAAUw7B,iBAAmB,SAAU3D,EAAK4D,EAAaC,GACrE,GAAI11B,IAASlG,KAAKoW,WAAW,KAAM2hB,GAC/BjK,EAAe,mCAAmC7Q,QAAQ,MAAO,GAAK/W,GACtE21B,EAAS77B,KAAK4mB,UAAY5mB,KAAK4mB,SAASjlB,QAAQ8L,cAAcqgB,EAC7D7qB,qBAAkB44B,KACfF,GACA10B,YAAU40B,IAAU7M,EAlnDrB,eAmnDChvB,KAAKq7B,sBAAsBQ,EAAQ77B,KAAK4wB,YAAY,KAGpD3pB,YAAU40B,IAAU5M,EAtnDrB,eAunDCjvB,KAAKq7B,sBAAsBQ,EAAQ77B,KAAK6wB,UAAU,IAElD+K,GACA57B,KAAKq7B,sBAAsBtD,EAAK/3B,KAAK6wB,UAAU,GAAO,KAIlEf,EAAgB5vB,UAAU84B,YAAc,SAAUte,EAAO/Y,GACrD,GAAIizB,GACAc,CACAhb,IACAA,EAAM1M,gBAEV,IAAIW,GAAO1L,oBAAkByX,GAAS1a,KAAKoW,WAAW,KAAMzU,GACtD3B,KAAKoW,WAAWsE,EAAO,MACzBohB,EAAIntB,EAAKH,cACTutB,EAAIptB,EAAK2B,WACTlC,EAAW,GAAIvL,MAAKi5B,EAAGC,EAAG,GAC1B1tB,EAAU,GAAIxL,MAAKi5B,EAAGC,EAAI,EAAG,GAC7BC,EAAa,GAAIn5B,MAAKi5B,EAAG,EAAG,GAC5BG,EAAY,GAAIp5B,MAAKi5B,EAAG,GAAI,GAC3B74B,qBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,YAKxD5wB,KAAKwxB,UAAYxxB,KAAKs2B,YAAY30B,QAAQ8B,UAAUmI,SAASmjB,IAClE/uB,KAAKw0B,oBALAx0B,KAAKwxB,UAAYxxB,KAAKwxB,WAAaxxB,KAAKw2B,UAAU70B,QAAQ8B,UAAUmI,SAASmjB,KAC9E/uB,KAAKw0B,iBAMb,IAAIuD,GAAMp2B,GAAW+Y,EAAMlI,aAC3B,IAAIvP,oBAAkBjD,KAAK4wB,YAClB3tB,oBAAkBjD,KAAKm0B,sBACxBxlB,EAAKpL,SAASvD,KAAKm0B,mBAAmB3jB,YACtC7B,EAAK+O,WAAW1d,KAAKm0B,mBAAmB1jB,cACxC9B,EAAK/L,WAAW5C,KAAKm0B,mBAAmBzjB,eAE5C1Q,KAAK4wB,WAA6B,UAAf5wB,KAAKgN,MAAqB,GAAInK,MAAK7C,KAAKoG,WAAWuI,IAClD,SAAf3O,KAAKgN,MAAoBoB,EAAW4tB,EACzCh8B,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,WACL5gB,YAAU8wB,GAAM/I,GAChBhvB,KAAKq7B,sBAAsBtD,EAAK/3B,KAAK4wB,YAAY,GAC7CmH,EAAIt0B,UAAUmI,SArqDb,kBAsqDD5L,KAAK07B,iBAAiB3D,GAAK,GAE/B/3B,KAAKo5B,kBACLp5B,KAAKu0B,YAAYhwB,UAAW,EAC5BvE,KAAKu0B,YAAY5yB,QAAQ4C,UAAW,EAChCvE,KAAKwxB,WACLxxB,KAAKw2B,UAAU70B,QAAQ8B,UAAUC,IAAIqrB,GACrC/uB,KAAKs2B,YAAY30B,QAAQ8B,UAAU4T,OAAO0X,GAC1C/uB,KAAKw2B,UAAU70B,QAAQiX,gBAAgB,YACvC5Y,KAAKq3B,mBAETr3B,KAAKua,QAAQ,SAAUva,KAAKu7B,UAAU7gB,QAGtC,KAAK/L,IAAU3O,KAAK4wB,aAAejiB,GAAQ3O,KAAK4wB,WAAY,CACxD,IAAKjiB,IAAU3O,KAAK4wB,aAAe3tB,oBAAkBjD,KAAK80B,UAAY90B,KAAK80B,QAAU,EACjF,MAEJ90B,MAAK6wB,SAAW,KAChB7wB,KAAK6nB,YACD7nB,KAAKwxB,UAAY7vB,IACjB3B,KAAKk6B,eAAexf,EAAO/Y,GAE1BsB,oBAAkBjD,KAAKo0B,oBACxBzlB,EAAKpL,SAASvD,KAAKo0B,iBAAiB5jB,YACpC7B,EAAK+O,WAAW1d,KAAKo0B,iBAAiB3jB,cACtC9B,EAAK/L,WAAW5C,KAAKo0B,iBAAiB1jB,eAE1C1Q,KAAK6wB,SAA2B,UAAf7wB,KAAKgN,MAAqB,GAAInK,MAAK7C,KAAKoG,WAAWuI,IAChD,SAAf3O,KAAKgN,MAAoBqB,EAAU4tB,EACxCj8B,KAAK6nB,UACL,IAAIqU,GAASl8B,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,IAAM6kB,EAC1D,IAAIjvB,KAAKwxB,SAAU,CACfxxB,KAAKs2B,YAAY30B,QAAQ8B,UAAU4T,OAAO0X,GAC1C/uB,KAAKw2B,UAAU70B,QAAQ8B,UAAUC,IAAIqrB,EACrC,KAAK,GAAIplB,GAAK,EAAGwyB,EAAWD,EAAQvyB,EAAKwyB,EAASx7B,OAAQgJ,IAAM,CAC5D,GAAIyyB,GAAQD,EAASxyB,EACrByyB,GAAMxjB,gBAAgB,cACjBwjB,EAAM34B,UAAUmI,SAASojB,IAK1BhvB,KAAKq7B,sBAAsBe,EAAOp8B,KAAK4wB,YAAY,GACnD5pB,eAAao1B,IAASnN,MALtBmN,EAAMj4B,aAAa,gBAAiB,SACpC6C,eAAao1B,IAASnN,EA1sDnC,iBAktDChoB,YAAU8wB,GAAM9I,IACXjvB,KAAK6wB,WAAc7wB,KAAK4wB,WACzB5wB,KAAKq7B,sBAAsBtD,EAAK/3B,KAAK6wB,UAAU,GAAO,GAGtD7wB,KAAKq7B,sBAAsBtD,EAAK/3B,KAAK6wB,UAAU,GAE/CkH,EAAIt0B,UAAUmI,SA7tDjB,oBA8tDQ5L,KAAK6wB,WAAc7wB,KAAK4wB,WACzB5wB,KAAK07B,iBAAiB3D,GAAK,GAAO,GAGlC/3B,KAAK07B,iBAAiB3D,GAAK,GAInC,KAAK,GAAInuB,GAAK,EAAGyyB,EADjBH,EAASl8B,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,IAAM6kB,GAClBrlB,EAAKyyB,EAAS17B,OAAQiJ,IAAM,CAC5D,GAAI0yB,GAAQD,EAASzyB,EACjB0yB,GAAM74B,UAAUmI,SAASojB,IACzBhoB,eAAas1B,IAASpN,IAG9BlvB,KAAKu0B,YAAYhwB,UAAW,EAC5BvE,KAAKu0B,YAAY5yB,QAAQ4C,UAAW,EAC/BvE,KAAKwxB,UACNxxB,KAAKm3B,uBAEJl0B,oBAAkBjD,KAAKqN,oBAAsBrN,KAAKqN,kBAAkBwE,YACrE7R,KAAK21B,qBAET31B,KAAKua,QAAQ,SAAUva,KAAKu7B,UAAU7gB,SAEhC/L,GAAQ3O,KAAK4wB,aACnB5wB,KAAKm3B,sBACLn3B,KAAK4wB,WAA6B,UAAf5wB,KAAKgN,MAAqB,GAAInK,MAAK7C,KAAKoG,WAAWuI,IAClD,SAAf3O,KAAKgN,MAAoBoB,EAAW4tB,EACzCh8B,KAAK6nB,WACL7nB,KAAKu8B,2BACLv1B,cAAYhH,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,IAAM4kB,IAAaA,EAxvDvE,eAyvDC/nB,YAAU8wB,GAAM/I,GAChBhvB,KAAKq7B,sBAAsBtD,EAAK/3B,KAAK4wB,YAAY,GAC7CmH,EAAIt0B,UAAUmI,SA/vDjB,kBAgwDG5L,KAAK07B,iBAAiB3D,GAAK,GAE/B/3B,KAAKo5B,kBAGT1e,KACAka,EAAetwB,UAAQoW,EAAMpa,OAAQ,IAAMuuB,IAE1C5rB,oBAAkB2xB,IAIfla,IACAgb,EAAgBhb,GAASpW,UAAQoW,EAAMpa,OAAQ,IAAMwuB,IAEpD7rB,oBAAkByyB,IACnB11B,KAAK01B,cAAc7f,SAAS,GAAGsT,kBAAkB1a,SAPrDzO,KAAK40B,aAAa/e,SAAS,GAAGsT,kBAAkB1a,QAUpDxH,YAAU8wB,GA/wDH,cAgxDP/3B,KAAKo2B,oBACLp2B,KAAK41B,eACL51B,KAAK82B,qBAEThH,EAAgB5vB,UAAUm3B,gBAAkB,WACxC,IAAKp0B,oBAAkBjD,KAAK4wB,YAAa,CACrC,GAAImJ,GAAU/5B,KAAKoE,gBAAgBgG,iBAAiB,kBAChDuxB,GAAc,CAClB,IAAI37B,KAAK+M,gBAAkB/M,KAAKgN,MAAO,CACnC,IAAK,GAAIrD,GAAK,EAAG6yB,EAAYzC,EAASpwB,EAAK6yB,EAAU77B,OAAQgJ,IAAM,CAE/D,KADIouB,EAAMyE,EAAU7yB,IACXlG,UAAUmI,SAASojB,KAAe+I,EAAIt0B,UAAUmI,SA3wD5D,mBA4wDYmsB,EAAIt0B,UAAUmI,SAASxK,GAAW,CAEnC,IADcpB,KAAKoW,WAAW,KAAM2hB,IACpB/3B,KAAK4wB,WAAY,CAC7B3pB,YAAU8wB,IAAOzI,EAAcluB,EAAUC,IACzCwK,eAAaqqB,YAAY6B,EACzB,UAGA,MAIZ,GAAIA,EAAIt0B,UAAUmI,SAASojB,KAAe+I,EAAIt0B,UAAUmI,SA5yD3D,iBA4yDiF,CAC1E+vB,GAAc,CACd,QAGJA,IACK37B,KAAK4H,aAAanE,UAAUmI,SAASxK,IACtC6F,YAAUjH,KAAK4H,eAAgB2nB,EAAcnuB,EAAUC,SAI9D,CACD,IAAK,GAAIuI,GAAK,EAAG6yB,EAAY1C,EAASnwB,EAAK6yB,EAAU97B,OAAQiJ,IAAM,CAC/D,GAAImuB,GAAM0E,EAAU7yB,GAChB8yB,EAAa18B,KAAK4wB,WAAWtgB,WAC7BoE,EAAY1U,KAAK4wB,WAAWpiB,cAC5B7M,EAAU3B,KAAKoW,WAAW,KAAM2hB,EACpC,IAAK/3B,KAAKs2B,YAAY30B,QAAQ8B,UAAUmI,SAASmjB,MAAoC,SAAvB/uB,KAAK+M,eAC9DpL,EAAQ2O,WAAaosB,GAAgB/6B,EAAQ6M,eAAiBkG,GACpC,WAAvB1U,KAAK+M,eAA+BpL,EAAQ2O,YAAcosB,GACzD/6B,EAAQ6M,cAAgBkG,GAI7B,KAHAzN,aAAU8wB,IAAO32B,IAMrB24B,EAAQ,GAAGt2B,UAAUmI,SAASxK,GAC9BpB,KAAKsY,qBAAoB,GAEpByhB,EAAQA,EAAQp5B,OAAS,GAAG8C,UAAUmI,SAASxK,IACpDpB,KAAKwY,iBAAgB,MAKrCsX,EAAgB5vB,UAAUk3B,iBAAmB,SAAUxkB,GACnD,IAAM3P,oBAAkBjD,KAAK4wB,aAAe3tB,oBAAkBjD,KAAK6wB,WAC9D7wB,KAAKwxB,UAAYxxB,KAAKw2B,UAAU70B,QAAQ8B,UAAUmI,SAASmjB,IAC5D,IAAM9rB,oBAAkBjD,KAAK80B,UAAY90B,KAAK80B,QAAU,IAAQ7xB,oBAAkBjD,KAAK+0B,UAAY/0B,KAAK+0B,QAAU,EAAI,CAClH,GAAI4H,GAAqB38B,KAAKy7B,wBAAwBz7B,KAAK4wB,YACvDphB,EAAU,GAAI3M,MAAK,GAAIA,OAAM85B,GAAoB5oB,QAAQ4oB,EAAmBxsB,WAAanQ,KAAK80B,QAAU,KACxGrlB,EAAU,GAAI5M,MAAK,GAAIA,OAAM85B,GAAoB5oB,QAAQ4oB,EAAmBxsB,WAAanQ,KAAK+0B,QAAU,IAC5GvlB,IAAYvM,oBAAkBjD,KAAK80B,UAAY90B,KAAK80B,QAAU,EAAKtlB,EAAU,KAC7EC,GAAYxM,oBAAkBjD,KAAK+0B,UAAY/0B,KAAK+0B,QAAU,EAAKtlB,EAAU,KAClD,SAAvBzP,KAAK+M,eACLyC,EAAUvM,oBAAkBuM,GAAW,KAAO,GAAI3M,MAAK2M,EAAQhB,cAAegB,EAAQc,WAAY,GAClGb,EAAUxM,oBAAkBwM,GAAW,KAAO,GAAI5M,MAAK4M,EAAQjB,cAAeiB,EAAQa,WAAY,IAEtE,WAAvBtQ,KAAK+M,gBACVyC,EAAUvM,oBAAkBuM,GAAW,KAAO,GAAI3M,MAAK2M,EAAQhB,cAAgB,EAAG,GAAI,GACtFiB,EAAUxM,oBAAkBwM,GAAW,KAAO,GAAI5M,MAAK4M,EAAQjB,cAAe,EAAG,GAIrF,KAAK,GADDouB,OAAS,GACJjzB,EAAK,EAAGkzB,EAFHjqB,EAASxI,iBAAiB,kBAEFT,EAAKkzB,EAAUl8B,OAAQgJ,IAAM,CAC/D,GAAIouB,GAAM8E,EAAUlzB,EACpB,KAAKouB,EAAIt0B,UAAUmI,SAASojB,KAAe+I,EAAIt0B,UAAUmI,SAj1D5D,iBAi1DkF,CAC3E,GAAIyuB,GAAUr6B,KAAKoW,WAAW,KAAM2hB,EAKpC,IAJAsC,EAAUr6B,KAAKy7B,wBAAwBpB,IAClCp3B,oBAAkBuM,KAAa6qB,IAAa7qB,GAAWuoB,EAAIt0B,UAAUmI,SAASxK,IAC/EoO,EAAQuE,QAAQvE,EAAQW,UAAY,IAEnC4nB,EAAIt0B,UAAUmI,SAASxK,GAAW,CACnC,IAAKi5B,IAAYsC,EACb,UAEC15B,oBAAkBuM,KAAa6qB,GAAW7qB,IAC3CvI,YAAU8wB,IAAOzI,EAAcluB,EAAUC,IACzCwK,eAAaqqB,YAAY6B,KAExB90B,oBAAkBwM,KAAa4qB,GAAW5qB,IAC3CxI,YAAU8wB,IAAOzI,EAAcluB,EAAUC,IACzCrB,KAAKuwB,kBAAmB,EACxB1kB,eAAaqqB,YAAY6B,GACrB90B,oBAAkB25B,KAAY7E,EAAIt0B,UAAUmI,SAv3D/D,mBAw3DmBgxB,EAAS7E,MAM7B,IAAK90B,oBAAkB25B,GACnB,GAAI58B,KAAKwxB,SACAxxB,KAAKmI,SAAS1E,UAAUmI,SAASxK,IAClC6F,YAAUjH,KAAKmI,WAAYonB,EAAcnuB,EAAUC,QAGtD,CACD,GAAIy7B,GAAax4B,UAAQs4B,EAAQ,IAAM9N,IACvCgO,EAAa75B,oBAAkB65B,GAAc98B,KAAK40B,aAAekI,GACjCr5B,UAAUmI,SAASijB,IAO1C7uB,KAAKi2B,iBAAiBxyB,UAAUmI,SAASxK,IAC1C6F,YAAUjH,KAAKi2B,mBAAoB1G,EAAcnuB,EAAUC,IAE1DrB,KAAK+1B,gBAAgBtyB,UAAUmI,SAASxK,IACzC6F,YAAUjH,KAAK+1B,kBAAmBxG,EAAcnuB,EAAUC,IAEzDrB,KAAKg2B,iBAAiBvyB,UAAUmI,SAASxK,IAC1C6F,YAAUjH,KAAKg2B,mBAAoBzG,EAAcnuB,EAAUC,KAZ1DrB,KAAKi2B,iBAAiBxyB,UAAUmI,SAASxK,IAC1C6F,YAAUjH,KAAKi2B,mBAAoB1G,EAAcnuB,EAAUC,UAmB/ErB,MAAKuwB,kBAAmB,GAGhCT,EAAgB5vB,UAAUu7B,wBAA0B,SAAUv1B,GAE1D,MADgB,IAAIrD,MAAKqD,EAAMsI,cAAetI,EAAMoK,WAAYpK,EAAMiK,YAG1E2f,EAAgB5vB,UAAUi3B,oBAAsB,WAE5C,IAAK,GAAIxtB,GAAK,EAAGozB,EADH/8B,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,kBAA+BklB,GAC9C3lB,EAAKozB,EAAUp8B,OAAQgJ,IAAM,CAC/D,GAAIouB,GAAMgF,EAAUpzB,EAChBouB,GAAIt0B,UAAUmI,SAAS0jB,KACvBtoB,eAAa+wB,IAAOzI,EAAcluB,EAAUC,IAC5CwK,eAAanI,IAAIq0B,EAAK,QAAS/3B,KAAKg5B,YAAah5B,MAC5CA,KAAKwxB,UACN3lB,eAAanI,IAAIq0B,EAAK,YAAa/3B,KAAKk6B,eAAgBl6B,OAIhEA,KAAKwxB,UACDxxB,KAAKmI,SAAS1E,UAAUmI,SAAS2jB,IACjCvoB,eAAahH,KAAKmI,WAAYonB,EAAcnuB,EAAUC,IAEtDrB,KAAK4H,aAAanE,UAAUmI,SAAS2jB,IACrCvoB,eAAahH,KAAK4H,eAAgB2nB,EAAcnuB,EAAUC,MAI1DrB,KAAKi2B,iBAAiBxyB,UAAUmI,SAAS2jB,IACzCvoB,eAAahH,KAAKi2B,mBAAoB1G,EAAcnuB,EAAUC,IAE9DrB,KAAKg2B,iBAAiBvyB,UAAUmI,SAAS2jB,IACzCvoB,eAAahH,KAAKg2B,mBAAoBzG,EAAcnuB,EAAUC,IAE9DrB,KAAK+1B,gBAAgBtyB,UAAUmI,SAAS2jB,IACxCvoB,eAAahH,KAAK+1B,kBAAmBxG,EAAcnuB,EAAUC,MAIzEyuB,EAAgB5vB,UAAU01B,aAAe,WACrC,GAAIhkB,IAAW9J,KAAM,OAAQwJ,SAAU,QACvC,IAAKrO,oBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,YAU7D5wB,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAM4hB,GAASlkB,YAAcnL,KAAK8jB,KAAKzY,YAAY,oBAVb,CAC1E,GAAIuoB,GAASze,KAAKyL,MAAMzL,KAAKC,KAAKpV,KAAKy7B,wBAAwBz7B,KAAK4wB,YAAYpX,UAC5ExZ,KAAKy7B,wBAAwBz7B,KAAK6wB,UAAUrX,mBAAuC,CAClFvW,qBAAkBjD,KAAKg9B,kBACxBpJ,GAAgB5zB,KAAKg9B,eACrBh9B,KAAKg9B,eAAiB,MAE1Bh9B,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAM4hB,GAASlkB,YAAcyoB,EAAM9sB,WAAa,IAAM9G,KAAK8jB,KAAKzY,YAAY,QAK/GrL,KAAKwxB,UAeDvuB,oBAAkBjD,KAAK4wB,YAIxB5wB,KAAKs2B,YAAY30B,QAAQwJ,YAAcnL,KAAK8jB,KAAKzY,YAAY,cAH7DrL,KAAKs2B,YAAY30B,QAAQwJ,YAAcnL,KAAK8C,UAAU0O,WAAWxR,KAAK4wB,WAAYhf,GAKjF3O,oBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,YAI7D5wB,KAAKw2B,UAAU70B,QAAQwJ,YAAcnL,KAAK8jB,KAAKzY,YAAY,YAH3DrL,KAAKw2B,UAAU70B,QAAQwJ,YAAcnL,KAAK8C,UAAU0O,WAAWxR,KAAK6wB,SAAUjf,KArB7E3O,oBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,YAI7D5wB,KAAK4mB,SAASjlB,QAAQ8L,cAAc,gBAAgBtC,YAAcnL,KAAK8jB,KAAKzY,YAAY,YAHxFrL,KAAK4mB,SAASjlB,QAAQ8L,cAAc,gBAAgBtC,YAAcnL,KAAK8C,UAAU0O,WAAWxR,KAAK6wB,SAAUjf,GAK1G3O,oBAAkBjD,KAAK4wB,YAIxB5wB,KAAK4mB,SAASjlB,QAAQ8L,cAAc,kBAAkBtC,YAAcnL,KAAK8jB,KAAKzY,YAAY,cAH1FrL,KAAK4mB,SAASjlB,QAAQ8L,cAAc,kBAAkBtC,YAAcnL,KAAK8C,UAAU0O,WAAWxR,KAAK4wB,WAAYhf,KAoBlH5R,KAAK43B,eAAe53B,KAAK4wB,aAAe5wB,KAAK43B,eAAe53B,KAAK6wB,YAC/D5tB,oBAAkBjD,KAAK4wB,cAAgB5wB,KAAK4wB,YAAc5wB,KAAKuC,MACzDU,oBAAkBjD,KAAK6wB,YAAc7wB,KAAK6wB,UAAY7wB,KAAKwC,MAC1DS,oBAAkBjD,KAAK4wB,cAAgB3tB,oBAAkBjD,KAAK6wB,YAC5D7wB,KAAK4wB,YAAc5wB,KAAK6wB,YAC/B7wB,KAAKwxB,UAMNxxB,KAAKs2B,YAAY30B,QAAQwJ,YAAcnL,KAAK8jB,KAAKzY,YAAY,cAC7DrL,KAAKw2B,UAAU70B,QAAQwJ,YAAcnL,KAAK8jB,KAAKzY,YAAY,YAC3DrL,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAM4hB,GAASlkB,YAAcnL,KAAK8jB,KAAKzY,YAAY,kBAPvFrL,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAM4hB,GAASlkB,YAAcnL,KAAK8jB,KAAKzY,YAAY,gBACvFrL,KAAK4mB,SAASjlB,QAAQ8L,cAAc,kBAAkBtC,YAAcnL,KAAK8jB,KAAKzY,YAAY,cAC1FrL,KAAK4mB,SAASjlB,QAAQ8L,cAAc,gBAAgBtC,YAAcnL,KAAK8jB,KAAKzY,YAAY,cAQ5FrL,KAAK4mB,SAASjlB,QAAQ8L,cAAc,mBACpCzN,KAAK4mB,SAASjlB,QAAQ8L,cAAc,iBAAiBtC,YACR,KAAzCnL,KAAK8jB,KAAKzY,YAAY,eAAwBrL,KAAK8jB,KAAKzY,YAAY,eAAiB,iBAGjGykB,EAAgB5vB,UAAUs0B,gBAAkB,WACxCx0B,KAAK4wB,WAAa,KAClB5wB,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,WACL7nB,KAAKu8B,2BACDv8B,KAAK4mB,WACD5mB,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,eAAgBzJ,OAAS,GAChEqG,cAAYhH,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,gBAAkB4kB,EAAWC,EAtgEjF,eAwgECjvB,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,IAAMglB,GAAWzuB,OAAS,GACjEqG,cAAYhH,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,IAAMglB,GAAYA,GAErEpvB,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,IAAM8kB,GAAYvuB,OAAS,GAClEqG,cAAYhH,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,IAAM8kB,IAAcA,MAInFY,EAAgB5vB,UAAUm7B,sBAAwB,SAAUtD,EAAKppB,EAAMgtB,EAAaC,GAChF,GAAI7D,EAAK,CACL,GAAI5pB,GAAQnO,KAAK8C,UAAU0O,WAAW7C,GAAQ7G,KAAM,OAAQwJ,SAAU,UACjErO,oBAAkB24B,IAAaA,EAChC7D,EAAI5zB,aAAa,aAAc,qCAA4CgK,GAG3E4pB,EAAI5zB,aAAa,aAAc,gBAAkBw3B,EAAc,QAAU,OAAS,YAAmBxtB,GAEzG4pB,EAAI5zB,aAAa,gBAAiB,UAG1C2rB,EAAgB5vB,UAAUq8B,yBAA2B,WACjD,GAAIv8B,KAAK4mB,SAAU,CAEf,IAAK,GAAIjd,GAAK,EAAGszB,EADLj9B,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,IAAM4kB,GACvBrlB,EAAKszB,EAAQt8B,OAAQgJ,KAC/CouB,EAAMkF,EAAQtzB,IACdxF,aAAa,gBAAiB,SAClC4zB,EAAInf,gBAAgB,aAGxB,KAAK,GAAIhP,GAAK,EAAGszB,EADPl9B,KAAK4mB,SAASjlB,QAAQyI,iBAAiB,IAAM6kB,GACzBrlB,EAAKszB,EAAMv8B,OAAQiJ,IAAM,CACnD,GAAImuB,GAAMmF,EAAMtzB,EAChBmuB,GAAI5zB,aAAa,gBAAiB,SAClC4zB,EAAInf,gBAAgB,iBAIhCkX,EAAgB5vB,UAAUi4B,sBAAwB,SAAUvlB,GACpDA,EAASnP,UAAUmI,SAASijB,IAC5B7uB,KAAKoE,gBAAkBpE,KAAK40B,aAC5B50B,KAAKqG,YAAcrG,KAAKi4B,mBACxBj4B,KAAK4H,aAAe5H,KAAK81B,gBACzB91B,KAAKmI,SAAWnI,KAAK+1B,kBAGrB/1B,KAAKoE,gBAAkBpE,KAAK01B,cAC5B11B,KAAKqG,YAAcrG,KAAKk4B,oBACxBl4B,KAAK4H,aAAe5H,KAAKg2B,iBACzBh2B,KAAKmI,SAAWnI,KAAKi2B,kBAEzBj2B,KAAKuI,eAAiBqK,EAASnF,cAAc,cAC7CzN,KAAKoN,iBAAmBhI,SAAO,mBAA0BwN,GACzD5S,KAAKwI,MAAQoK,EAASnF,cAAc,cAAeypB,qBAAqB,SAAS,GACjFl3B,KAAKoI,mBAAqBwK,EAASnF,cAAc,sBACjDzN,KAAKyH,cAAgBmL,EAASnF,cAAc,cAEhDqiB,EAAgB5vB,UAAUmyB,aAAe,SAAUxlB,GAC/CA,EAAEmB,gBACF,IAAI+pB,GAAMzzB,UAAQuI,EAAEvM,OAAQ,IAAMuuB,EAClCkJ,GAAM90B,oBAAkB80B,GAAOzzB,UAAQuI,EAAEvM,OAAQ,IAAMwuB,GAAiBiJ,EACxE/3B,KAAKm4B,sBAAsBJ,GAC3B/3B,KAAKiP,iBAAiBpC,IACjB5J,oBAAkBjD,KAAK4wB,aAAe3tB,oBAAkBjD,KAAK6wB,WAC9D7wB,KAAKo3B,iBAAiBW,GAE1B/3B,KAAKm9B,cAAcpF,IAGvBjI,EAAgB5vB,UAAU82B,iBAAmB,SAAUe,GACnD/3B,KAAKq2B,sBACLr2B,KAAKy1B,aAAaz1B,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAM0hB,KACxDnvB,KAAKw2B,UAAU70B,QAAQ8B,UAAUmI,SAASmjB,IAC1C/uB,KAAKo3B,iBAAiBp3B,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAM0hB,IAEhEnvB,KAAKw2B,UAAU70B,QAAQ8B,UAAUmI,SAASmjB,IAC1C/uB,KAAKq3B,kBAELr3B,KAAK+M,gBAAkB/M,KAAKgN,OAC5BhN,KAAK62B,yBAET72B,KAAK82B,qBAEThH,EAAgB5vB,UAAUi9B,cAAgB,SAAUvqB,EAAUwqB,OACvC,KAAfA,IAAyBA,EAAa,MACtCxqB,EAASnP,UAAUmI,SAASkjB,GAC5B9uB,KAAKk4B,oBAAsB,GAAIr1B,QAAOu6B,GAA0Bp9B,KAAKqG,cAGrErG,KAAKi4B,mBAAqB,GAAIp1B,OAAM7C,KAAKqG,aAE7CrG,KAAKo2B,qBACiB,UAAfp2B,KAAKgN,OACLhN,KAAK40B,aAAannB,cAAc,cAAchK,UAAUmI,SAAS,YACjE5L,KAAK01B,cAAcjoB,cAAc,cAAchK,UAAUmI,SAAS,YACjD,SAAf5L,KAAKgN,OACHhN,KAAK40B,aAAannB,cAAc,cAAchK,UAAUmI,SAAS,WACjE5L,KAAK01B,cAAcjoB,cAAc,cAAchK,UAAUmI,SAAS,WACrD,WAAf5L,KAAKgN,OACHhN,KAAK40B,aAAannB,cAAc,cAAchK,UAAUmI,SAAS,aACjE5L,KAAK01B,cAAcjoB,cAAc,cAAchK,UAAUmI,SAAS,aACtE5L,KAAKwxB,WACRxxB,KAAK62B,yBAET72B,KAAK82B,oBACL92B,KAAKy1B,aAAa7iB,KAEtBkd,EAAgB5vB,UAAUiyB,aAAe,SAAUzX,GAC/CA,EAAM1M,gBACN,IAAI+pB,GAAMzzB,UAAQoW,EAAMpa,OAAQ,IAAMuuB,EACtCkJ,GAAM90B,oBAAkB80B,GAAOzzB,UAAQoW,EAAMpa,OAAQ,IAAMwuB,GAAiBiJ,EAC5E/3B,KAAKm4B,sBAAsBJ,GAC3B/3B,KAAKmP,aAAauL,IACbzX,oBAAkBjD,KAAK4wB,aAAe3tB,oBAAkBjD,KAAK6wB,WAC9D7wB,KAAKo3B,iBAAiBW,GAE1B/3B,KAAKm9B,cAAcpF,IAEvBjI,EAAgB5vB,UAAUw0B,YAAc,WACpC,QAAKzxB,oBAAkBjD,KAAK4mB,YAAa5mB,KAAK4mB,SAASjlB,QAAQ8B,UAAUmI,SAlpErE,aAupERkkB,EAAgB5vB,UAAUm9B,kBAAoB,WAC1C,GAAIC,GAAiBt9B,KAAKqE,cAAc,OAASqD,UA9oEjC,eA+oEhB,IAAK1H,KAAKwxB,SAYL,CACD,GAAI+L,GAASv9B,KAAKqE,cAAc,UAAYqD,UAvpExC,cAwpEA81B,EAAWx9B,KAAKqE,cAAc,UAAYqD,UA1pExC,eA2pEN1H,MAAKs2B,YAAc,GAAImH,WAASvT,QAASlqB,KAAK8jB,KAAKzY,YAAY,eAAiBmyB,GAChFx9B,KAAKw2B,UAAY,GAAIiH,WAASvT,QAASlqB,KAAK8jB,KAAKzY,YAAY,aAAekyB,GAC5ED,EAAej1B,YAAYm1B,GAC3BF,EAAej1B,YAAYk1B,OAlBX,CAChB,GAAIrM,GAAalxB,KAAKqE,cAAc,KAAOqD,UAxoEtC,kBAyoEDypB,EAAWnxB,KAAKqE,cAAc,KAAOqD,UAxoEtC,gBAyoECg2B,EAAa19B,KAAKqE,cAAc,QAAUqD,UA9mEzC,yBA+mEL5D,cAAWotB,GAAc3pB,cAAe,OAAQC,YAAa,YAAaJ,aAAc,aAAcqB,KAAQ,WAC9G3E,aAAWqtB,GAAY5pB,cAAe,OAAQC,YAAa,YAAaJ,aAAc,WAAYqB,KAAQ,WAC1G60B,EAAej1B,YAAY6oB,GAC3BoM,EAAej1B,YAAYq1B,GAC3BJ,EAAej1B,YAAY8oB,GAC3BD,EAAW/lB,YAAcnL,KAAK8jB,KAAKzY,YAAY,cAC/C8lB,EAAShmB,YAAcnL,KAAK8jB,KAAKzY,YAAY,YAUjD,MAAOiyB,IAEXxN,EAAgB5vB,UAAUy9B,aAAe,WACjC39B,KAAK2kB,WACA1hB,oBAAkBjD,KAAKm0B,qBAAwBlxB,oBAAkBjD,KAAKo0B,oBACvEp0B,KAAK4wB,WAAa5wB,KAAKm0B,mBACvBn0B,KAAK6wB,SAAW7wB,KAAKo0B,iBACrBp0B,KAAK6nB,WACL7nB,KAAKwiB,gBAITxiB,KAAKwiB,cACLxiB,KAAKk0B,aACLl0B,KAAKmD,eAAgByX,UAAW,OAAQ,GACxC5a,KAAKmD,eAAgB0X,QAAS,OAAQ,GACtC7a,KAAK4wB,WAAa,KAClB5wB,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,WACL7nB,KAAKilB,cAETjlB,KAAKmD,eAAgBqB,SAAS,IAAS,GACvCwd,QAAMoM,WAAWpuB,KAAKwE,QAASxE,KAAKkiB,cACpCliB,KAAK+hB,cAET+N,EAAgB5vB,UAAU09B,eAAiB,WAGvC,GAFA59B,KAAKuC,IAAMU,oBAAkBjD,KAAKuC,QAAWvC,KAAKuC,IAAOvC,KAAKuC,IAAM,GAAIM,MAAK,KAAM,EAAG,GAAK7C,KAAKuC,IAChGvC,KAAKwC,IAAMS,oBAAkBjD,KAAKwC,QAAWxC,KAAKwC,IAAOxC,KAAKwC,IAAM,GAAIK,MAAK,KAAM,GAAI,IAAM7C,KAAKwC,MAC5FxC,KAAKuC,KAAOvC,KAAKwC,KAEnB,WADAxC,MAAK29B,cAGJ16B,qBAAkBjD,KAAK80B,UAAa7xB,oBAAkBjD,KAAK+0B,UACxD/0B,KAAK+0B,QAAU,GAAK/0B,KAAK80B,QAAU,GAAM90B,KAAK80B,QAAU90B,KAAK+0B,UAC7D/0B,KAAK+0B,QAAU,OAGlB9xB,oBAAkBjD,KAAK80B,UAAY90B,KAAK80B,QAAU,IACnD90B,KAAK80B,QAAU,OAEd7xB,oBAAkBjD,KAAK+0B,UAAY/0B,KAAK+0B,QAAU,IACnD/0B,KAAK+0B,QAAU,OAGvBjF,EAAgB5vB,UAAU29B,oBAAsB,WACvC56B,oBAAkBjD,KAAK4wB,eACnB5wB,KAAK4wB,aAAe5wB,KAAKuC,KAC1BvC,KAAK4wB,WAAa5wB,KAAKuC,IACvBvC,KAAK6nB,aAEC7nB,KAAK4wB,aAAe5wB,KAAKuC,MAAQvC,KAAK4wB,aAAe5wB,KAAKwC,MAChExC,KAAK4wB,WAAa5wB,KAAKwC,MAG1BS,oBAAkBjD,KAAK6wB,aACnB7wB,KAAK6wB,UAAY7wB,KAAKwC,KACvBxC,KAAK6wB,SAAW7wB,KAAKwC,IACrBxC,KAAK6nB,aAEC7nB,KAAK6wB,UAAY7wB,KAAKuC,MAC5BvC,KAAK6wB,SAAW7wB,KAAKuC,IACrBvC,KAAK6nB,aAGb7nB,KAAK89B,sBAEThO,EAAgB5vB,UAAU69B,cAAgB,WACtC/9B,KAAK89B,sBAEThO,EAAgB5vB,UAAU49B,mBAAqB,WAC3C,IAAK76B,oBAAkBjD,KAAK4wB,cAAgB3tB,oBAAkBjD,KAAK6wB,UAAW,CAC1E,GAAI+C,GAASze,KAAKyL,MAAMzL,KAAKC,KAAKpV,KAAKy7B,wBAAwBz7B,KAAK4wB,YAAYpX,UAC5ExZ,KAAKy7B,wBAAwBz7B,KAAK6wB,UAAUrX,mBAAuC,CACvF,KAAMvW,oBAAkBjD,KAAK80B,UAAY90B,KAAK80B,QAAU,KAAQlB,GAAS5zB,KAAK80B,SAC1E,GAAI90B,KAAK2kB,WAAY,CACjB,GAAIhW,GAAO,GAAI9L,OAAM7C,KAAK4wB,WAC1BjiB,GAAKoF,QAAQpF,EAAKwB,WAAanQ,KAAK80B,QAAU,KACzCnmB,GAAQ3O,KAAKwC,KACdxC,KAAK6wB,SAAW7wB,KAAKwC,IACrBxC,KAAK6nB,aAGL7nB,KAAK6wB,SAAWliB,EAChB3O,KAAK6nB,gBAIT7nB,MAAK4wB,WAAa,KAClB5wB,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,UAGP5kB,qBAAkBjD,KAAK+0B,YAAY/0B,KAAK+0B,QAAU,IAAQnB,GAAS5zB,KAAK+0B,UACtE/0B,KAAK2kB,YACL3kB,KAAK6wB,SAAW,GAAIhuB,OAAM7C,KAAK4wB,YAC/B5wB,KAAK6wB,SAAS9c,QAAQ/T,KAAK6wB,SAAS1gB,WAAanQ,KAAK+0B,QAAU,IAChE/0B,KAAK6nB,aAGL7nB,KAAK4wB,WAAa,KAClB5wB,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,eAKrBiI,EAAgB5vB,UAAU89B,eAAiB,WACvCh+B,KAAKoE,gBAAkBpE,KAAKqE,cAAc,OAC1CrE,KAAKoE,gBAAgBX,UAAUC,IAAIyrB,GAC/BnvB,KAAK2D,WACL3D,KAAKoE,gBAAgBX,UAAUC,IA3uEjC,SA6uEFI,aAAW9D,KAAKoE,iBAAmBL,YAAa,aAChDtC,EAAOvB,UAAUuE,aAAa5C,KAAK7B,MACnCyB,EAAOvB,UAAUwE,cAAc7C,KAAK7B,OAExC8vB,EAAgB5vB,UAAUo6B,YAAc,SAAUzvB,EAAOvF,GACrD,MAAIuF,GAAMyF,aAAehL,EAAIgL,YAAczF,EAAM2D,gBAAkBlJ,EAAIkJ,eAK3EshB,EAAgB5vB,UAAUq6B,WAAa,SAAU1vB,EAAOvF,GACpD,MAAIuF,GAAM2D,gBAAkBlJ,EAAIkJ,eAKpCshB,EAAgB5vB,UAAU+9B,aAAe,SAAUpzB,EAAOvF,GACtD,GAAIoP,GAAY7J,EAAM2D,cAClB0vB,EAAU54B,EAAIkJ,aAClB,OAAKkG,GAAaA,EAAY,IAAUwpB,EAAWA,EAAU,IAKjEpO,EAAgB5vB,UAAUi+B,sBAAwB,WAC1Cn+B,KAAKs6B,YAAYt6B,KAAKuC,IAAKvC,KAAKwC,OAASxC,KAAKqG,aAAerG,KAAKwC,KAAOxC,KAAKs6B,YAAYt6B,KAAKqG,YAAarG,KAAKwC,MACjHxC,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAKwC,KAClCxC,KAAKqG,YAAY0N,QAAQ,GACzB/T,KAAKqG,YAAYyN,SAAS9T,KAAKqG,YAAYiK,WAAa,IAEnDtQ,KAAKqG,YAAcrG,KAAKuC,MAC7BvC,KAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWpG,KAAKuC,QAGzDutB,EAAgB5vB,UAAUk+B,gBAAkB,WACxC,GAAKn7B,oBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,aAAgB5wB,KAAKs6B,YAAYt6B,KAAK6wB,SAAU7wB,KAAKqG,cAC9GrG,KAAK43B,eAAe53B,KAAK6wB,WAAc7wB,KAAK43B,eAAe53B,KAAK4wB,YAMpE,MAFA5wB,MAAKqG,YAAY0N,QAAQ,OACzB/T,MAAKqG,YAAYyN,SAAS9T,KAAKqG,YAAYiK,WAAa,EAG5D,IAPItQ,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAK6wB,WAOhC5tB,oBAAkBjD,KAAK4wB,cAAgB5wB,KAAK4wB,YAAc5wB,KAAKuC,MAC5DU,oBAAkBjD,KAAK6wB,YAAc7wB,KAAK6wB,UAAY7wB,KAAKwC,MAC1DS,oBAAkBjD,KAAK4wB,cAAgB3tB,oBAAkBjD,KAAK6wB,YAAe7wB,KAAK4wB,YAAc5wB,KAAK6wB,SAAW,CACtH7wB,KAAKqG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,IACzDvD,KAAKqG,YAAY0N,QAAQ,EACzB,IAAIC,GAAQhU,KAAKqG,YAAYiK,WAAa,CAC1CtQ,MAAKqG,YAAYyN,SAASE,KAGlC8b,EAAgB5vB,UAAUm+B,eAAiB,WACvC,GAAKp7B,oBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,aAAgB5wB,KAAKu6B,WAAWv6B,KAAK6wB,SAAU7wB,KAAKqG,cAC7GrG,KAAK43B,eAAe53B,KAAK6wB,WAAc7wB,KAAK43B,eAAe53B,KAAK4wB,YAGnE,CACD5wB,KAAKqG,YAAYyN,SAAS,EAC1B,IAAIN,GAAKxT,KAAKqG,YAAYmI,cAAgB,CAE1C,YADAxO,MAAKqG,YAAY+N,YAAYZ,GAL7BxT,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAK6wB,YAQhC5tB,oBAAkBjD,KAAK6wB,YAAc7wB,KAAK6wB,UAAY7wB,KAAKwC,MACvDS,oBAAkBjD,KAAK4wB,cAAgB3tB,oBAAkBjD,KAAK6wB,YAAe7wB,KAAK4wB,YAAc5wB,KAAK6wB,WACtG5tB,oBAAkBjD,KAAK4wB,cAAgB5wB,KAAK4wB,YAAc5wB,KAAKuC,OACpEvC,KAAKqG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,IACzDvD,KAAKqG,YAAYyN,SAAS,GAC1B9T,KAAKqG,YAAY+N,YAAYpU,KAAKqG,YAAYmI,cAAgB,KAGtEshB,EAAgB5vB,UAAUo+B,iBAAmB,WACzC,GAAKr7B,oBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,aAAgB5wB,KAAKi+B,aAAaj+B,KAAK6wB,SAAU7wB,KAAKqG,cAC/GrG,KAAK43B,eAAe53B,KAAK6wB,WAAc7wB,KAAK43B,eAAe53B,KAAK4wB,YAGnE,CACD,GAAI2N,GAAQv+B,KAAKqG,YAAYmI,cAAgB,EAE7C,YADAxO,MAAKqG,YAAY+N,YAAYmqB,GAJ7Bv+B,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAK6wB,YAO/B5tB,oBAAkBjD,KAAK4wB,cAAgB3tB,oBAAkBjD,KAAK6wB,YAAe7wB,KAAK4wB,YAAc5wB,KAAK6wB,WACnG5tB,oBAAkBjD,KAAK6wB,YAAc7wB,KAAK6wB,UAAY7wB,KAAKwC,MAC3DS,oBAAkBjD,KAAK4wB,cAAgB5wB,KAAK4wB,YAAc5wB,KAAKuC,OACpEvC,KAAKqG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,IACzDvD,KAAKqG,YAAY+N,YAAYpU,KAAKqG,YAAYmI,cAAgB,MAGtEshB,EAAgB5vB,UAAUs+B,iBAAmB,WACpCv7B,oBAAkBjD,KAAK4wB,aAexB5wB,KAAKqG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,IACzDvD,KAAKm+B,0BAfAl7B,oBAAkBjD,KAAKwC,MAAQxC,KAAKs6B,YAAYt6B,KAAK4wB,WAAY5wB,KAAKwC,MACvExC,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAKwC,KAClCxC,KAAKqG,YAAY0N,QAAQ,GACzB/T,KAAKqG,YAAYyN,SAAS9T,KAAKqG,YAAYiK,WAAa,IAEjDtQ,KAAK4wB,YAAc5wB,KAAKuC,KAAOvC,KAAK4wB,YAAc5wB,KAAKwC,MAC3DxC,KAAK43B,eAAe53B,KAAK4wB,YAI5B5wB,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAK4wB,YAHlC5wB,KAAKqG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,MAU3DN,oBAAkBjD,KAAK6wB,YAAc7wB,KAAK6wB,UAAY7wB,KAAKwC,MACxDS,oBAAkBjD,KAAK4wB,cAAgB5wB,KAAK4wB,YAAc5wB,KAAKuC,MAC9DU,oBAAkBjD,KAAK4wB,cAAgB3tB,oBAAkBjD,KAAK6wB,YAAe7wB,KAAK4wB,YAAc5wB,KAAK6wB,YAC3G7wB,KAAKqG,YAAc,GAAIxD,OAAK,GAAIA,OAAOU,SAAS,EAAG,EAAG,EAAG,KAE7DvD,KAAKm+B,yBAETrO,EAAgB5vB,UAAU2pB,eAAiB,WACvC,GAAI4U,GAAoBz+B,KAAKqE,cAAc,OAASqD,UAz2EpC,wBA02EhB,IAAK1H,KAAKwxB,SAiDL,CACIvuB,oBAAkBjD,KAAK4wB,cACxB5wB,KAAKqG,YAAc,GAAIxD,OAAM7C,KAAK4wB,aAEtCnvB,EAAOvB,UAAU+F,aAAapE,KAAK7B,MACnCyB,EAAOvB,UAAU6G,aAAalF,KAAK7B,MACnCyB,EAAOvB,UAAUmC,OAAOR,KAAK7B,KAC7B,IAAI0+B,GAAW1+B,KAAKoE,gBAAgBqJ,cAAc,uBAC9CtF,EAAWnI,KAAKoE,gBAAgBqJ,cAAc,sBAClD4J,UAAOrX,KAAKoE,gBAAgBqJ,cAAc,kCAC1CzN,KAAKoE,gBAAgBqJ,cAAc,yBAAgCpF,YAAYF,GAC/EnI,KAAKoE,gBAAgBqJ,cAAc,yBAAgCpF,YAAYq2B,GAC/EC,WAASD,GAAW1+B,KAAKoE,gBAAgBqJ,cAAc,0BACvDzN,KAAKi3B,eAAiBj3B,KAAKoE,gBAC3Bq6B,EAAkBp2B,YAAYrI,KAAKoE,iBACnCpE,KAAKoI,mBAAqBpI,KAAKoE,gBAAgBqJ,cAAc,sCAhE7C,CAChBzN,KAAKw+B,mBACLx+B,KAAKg+B,iBACLh+B,KAAKi4B,mBAAqB,GAAIp1B,OAAM7C,KAAKqG,aACzCrG,KAAKoE,gBAAgBX,UAAUC,IAAImrB,GACnC7uB,KAAK81B,gBAAkB91B,KAAKoE,gBAAgBqJ,cAAc,4BAC1DzN,KAAK+1B,gBAAkB/1B,KAAKoE,gBAAgBqJ,cAAc,4BAC1DzN,KAAK4+B,UAAY5+B,KAAKoE,gBAAgBqJ,cAAc,6BACpD4J,SAAOrX,KAAKoE,gBAAgBqJ,cAAc,uCAC1CzN,KAAKoE,gBAAgBqJ,cAAc,8BAAoCpF,YAAYrI,KAAK+1B,iBACxF/1B,KAAKoE,gBAAgBqJ,cAAc,8BAAoCpF,YAAYrI,KAAK81B,iBACxF6I,WAAS3+B,KAAK81B,iBAAkB91B,KAAKoE,gBAAgBqJ,cAAc,+BACnEzN,KAAK40B,aAAe50B,KAAKoE,eACzB,IAAIy6B,GAAgB7+B,KAAKqE,cAAc,OAASqD,UA55ExC,qBA65EJo3B,EAAiB9+B,KAAKqE,cAAc,OAASqD,UA55ExC,qBA65ETm3B,GAAcx2B,YAAYrI,KAAK40B,cAC/B6J,EAAkBp2B,YAAYw2B,GACzB7+B,KAAKwxB,UACN3lB,eAAanI,IAAI1D,KAAK4+B,UAAW,QAAS5+B,KAAK++B,aAAc/+B,MAE9C,UAAfA,KAAK6K,OACL7K,KAAKo+B,kBAEU,SAAfp+B,KAAK6K,OACL7K,KAAKq+B,iBAEU,WAAfr+B,KAAK6K,OACL7K,KAAKs+B,mBAETt+B,KAAKg+B,iBACLh+B,KAAKk4B,oBAAsB,GAAIr1B,OAAM7C,KAAKqG,aAC1CY,YAAUjH,KAAKoE,iBAAkB0qB,GACjC9uB,KAAK01B,cAAgB11B,KAAKoE,gBAC1B4C,eAAahH,KAAK40B,cAAgB50B,KAAK40B,aAAannB,cAAc,qBAAsB,YACxFzG,eAAahH,KAAK01B,eAAiB11B,KAAK01B,cAAcjoB,cAAc,qBAAsB,YAC1FzN,KAAKg2B,iBAAmBh2B,KAAKoE,gBAAgBqJ,cAAc,6BAC3DzN,KAAKi2B,iBAAmBj2B,KAAKoE,gBAAgBqJ,cAAc,6BAC3DzN,KAAKg/B,WAAah/B,KAAKoE,gBAAgBqJ,cAAc,8BACrD4J,SAAOrX,KAAKoE,gBAAgBqJ,cAAc,wCAC1CzN,KAAKoE,gBAAgBqJ,cAAc,SAAStJ,aAAa,WAAY,KACrEnE,KAAKoE,gBAAgBqJ,cAAc,+BAAqCpF,YAAYrI,KAAKi2B,kBACzFj2B,KAAKoE,gBAAgBqJ,cAAc,+BAAqCpF,YAAYrI,KAAKg2B,kBACzF2I,WAAS3+B,KAAKg2B,kBAAmBh2B,KAAKoE,gBAAgBqJ,cAAc,gCACpEqxB,EAAez2B,YAAYrI,KAAK01B,eAChC+I,EAAkBp2B,YAAYy2B,GACzB9+B,KAAKwxB,UACN3lB,eAAanI,IAAI1D,KAAKg/B,WAAY,QAASh/B,KAAKi/B,cAAej/B,MAoBvE,MAAOy+B,IAEX3O,EAAgB5vB,UAAU6+B,aAAe,SAAUlyB,GAC3C7M,KAAK00B,gBACL10B,KAAKoE,gBAAkBpE,KAAK40B,aAC5B50B,KAAKm5B,mBAAmBtsB,EAAG7M,KAAKoE,mBAGxC0rB,EAAgB5vB,UAAUi5B,mBAAqB,SAAUtsB,EAAGlL,GACxD3B,KAAKwI,MAAQ7G,EAAQ8L,cAAc,SACnCzN,KAAKoI,mBAAqBzG,EAAQ8L,cAAc,YAChDzN,KAAKoN,iBAAmBzL,EAAQ8L,cAAc,SAC9CzN,KAAKuK,iBAAmB5I,EAAQ8L,cAAc,SAC9CzN,KAAKuI,eAAiB5G,EAAQ8L,cAAc,cAC5CzN,KAAKm4B,sBAAsBx2B,GAC3BF,EAAOvB,UAAUgM,cAAcrK,KAAK7B,KAAM6M,GAC1C7M,KAAKm2B,kBAETrG,EAAgB5vB,UAAU++B,cAAgB,SAAUpyB,GAC5C7M,KAAK00B,gBACL10B,KAAKoE,gBAAkBpE,KAAK01B,cAC5B11B,KAAKm5B,mBAAmBtsB,EAAG7M,KAAKoE,mBAGxC0rB,EAAgB5vB,UAAUgW,kBAAoB,SAAUrJ,GAC/C7M,KAAKwxB,WACFltB,UAAQuI,EAAEvM,OAAQ,gCAClBN,KAAKoE,gBAAkBpE,KAAK40B,aAC5B50B,KAAKm4B,sBAAsBn4B,KAAK40B,gBAGhC50B,KAAKoE,gBAAkBpE,KAAK01B,cAC5B11B,KAAKm4B,sBAAsBn4B,KAAK01B,kBAY5C5F,EAAgB5vB,UAAU6M,YAAc,WACpC,MAAOtL,GAAOvB,UAAU6M,YAAYlL,KAAK7B,OAG7C8vB,EAAgB5vB,UAAUg/B,gBAAkB,SAAUvxB,GAClD,MAAa,SAATA,EACO,OAEO,WAATA,EACE,SAGA,SAGfmiB,EAAgB5vB,UAAUsa,eAAiB,SAAU3N,GAEjD,GADA7M,KAAKua,QAAQ,YAAava,KAAKya,gBAC1BxX,oBAAkBjD,KAAK4mB,UAAW,CACnC,GACIjZ,GAAO3N,KAAKk/B,gBAAgBl/B,KAAK+M,cACrC,IAAI/M,KAAKwxB,SACD7jB,IAAS3N,KAAKgN,OACdhN,KAAK62B,yBACL72B,KAAKg3B,mBACLh3B,KAAK82B,oBACL92B,KAAKo5B,mBAGLp5B,KAAKq3B,sBAIT,IAAKr3B,KAAKwxB,UAAY7jB,IAAS3N,KAAKgN,MAkDhChN,KAAKm2B,iBACLn2B,KAAKo2B,wBAnDkC,CAEvC,IADUp2B,KAAKoE,gBAAgBX,UAAUmI,SAAS,mBAAqB5L,KAAK40B,aAAe50B,KAAK01B,iBAChF11B,KAAK40B,gBAAkB/nB,GAAMA,EAAE2F,cAAcqD,SAAS,GAAGpS,UAAUmI,SAAS,aACnF3I,oBAAkBjD,KAAK+E,cAevB8H,IAAMA,EAAE2F,cAAcqD,SAAS,GAAGpS,UAAUmI,SAAS,aACrD3I,oBAAkBjD,KAAK+E,gBAC5B/E,KAAKk4B,oBAAsB,GAAIr1B,OAAM7C,KAAKqG,aAC1CrG,KAAK8B,OAAS,GACd9B,KAAKqG,YAAcrG,KAAKk4B,oBACxBl4B,KAAKm4B,sBAAsBn4B,KAAK01B,eAChC11B,KAAKm9B,cAAcn9B,KAAK01B,eACxB11B,KAAKm4B,sBAAsBn4B,KAAK40B,cAC5B50B,KAAK4wB,YAAc3tB,oBAAkBjD,KAAK6wB,UAC7B,UAATljB,GAAoB3N,KAAK4wB,WAAWtgB,WAAatQ,KAAKk4B,oBAAoB5nB,YAC1EtQ,KAAK4wB,WAAWpiB,eAAiBxO,KAAKk4B,oBAAoB1pB,cAC1D/M,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM2N,EAAM,GAAI9K,OAAM7C,KAAK4wB,aAE9C,SAATjjB,GAAmB3N,KAAK4wB,WAAWpiB,cAAgBxO,KAAKk4B,oBAAoB1pB,cACjF/M,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM2N,EAAM,GAAI9K,OAAM7C,KAAK4wB,aAG5DnvB,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM2N,EAAM3N,KAAKi4B,oBAItDx2B,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM2N,EAAM3N,KAAKi4B,oBAEtDj4B,KAAKm9B,cAAcn9B,KAAK40B,cACxB50B,KAAKm2B,iBACLn2B,KAAKo2B,oBACLp2B,KAAKy2B,qBACLz2B,KAAK+E,YAAc,UA1CyB,CAC5C/E,KAAKi4B,mBAAqB,GAAIp1B,OAAM7C,KAAKqG,aACzCrG,KAAK8B,OAAS,GACd9B,KAAKqG,YAAcrG,KAAKi4B,mBACxBj4B,KAAKm4B,sBAAsBn4B,KAAK40B,cAChC50B,KAAKm9B,cAAcn9B,KAAK40B,cACxB50B,KAAKm4B,sBAAsBn4B,KAAK01B,eAChCj0B,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM2N,EAAM3N,KAAKk4B,oBAClD,IAAIkF,GAAap9B,KAAKk4B,oBAAsBl4B,KAAKk4B,oBAAsBl4B,KAAKqG,WAC5ErG,MAAKm9B,cAAcn9B,KAAK01B,cAAe0H,GACvCp9B,KAAKm2B,iBACLn2B,KAAKo2B,oBACLp2B,KAAKy2B,qBACLz2B,KAAK+E,YAAc,KA+BvB/E,KAAKo5B,qBASrBtJ,EAAgB5vB,UAAUq1B,cAAgB,WACtC,GAAI4J,GAAmBn/B,KAAKqE,cAAc,OAASqD,UA7jFtC,2BA8jFT03B,EAAkBp/B,KAAKqE,cAAc,OAASqD,UA7jFxC,mBA8jFN41B,EAAiBt9B,KAAKq9B,mBAC1B+B,GAAgB/2B,YAAYi1B,EAC5B,IAAIpS,GAAUlrB,KAAKqE,cAAc,OAASqD,UAAW2nB,GACrDvrB,cAAWonB,GAAW9jB,aAAc,kBACpC8jB,EAAQ/f,YAAcnL,KAAK8jB,KAAKzY,YAAY,gBAC5C+zB,EAAgB/2B,YAAY6iB,EAC5B,IAAI8G,GAAYhyB,KAAKqE,cAAc,OAASqD,UAxjFpC,gBAyjFJ+2B,EAAoBz+B,KAAK6pB,gBAC7BsV,GAAiB92B,YAAY+2B,GAC7BD,EAAiB92B,YAAY2pB,GAC7BmN,EAAiB92B,YAAYo2B,EAC7B,IAAIY,GAAgBr/B,KAAKqE,cAAc,OAASqD,UAvkF3C,aAwkFD43B,EAAYt/B,KAAKqE,cAAc,UAAYqD,UAAW63B,0BACtDC,EAAWx/B,KAAKqE,cAAc,SAClC4C,aAAUu4B,IA/jFN,UAWD,SADG,YAEJ,UAojFFH,EAAch3B,YAAYm3B,GAC1BH,EAAch3B,YAAYi3B,EAC1B,IAAIxiB,IAAU7Z,oBAAkBjD,KAAK4wB,cAAgB3tB,oBAAkBjD,KAAK6wB,SAC5E7wB,MAAKk5B,aAAe,GAAIuE,WAASvT,QAASlqB,KAAK8jB,KAAKzY,YAAY,eAAiBi0B,GACjFt/B,KAAKu0B,YAAc,GAAIkJ,WAASvT,QAASlqB,KAAK8jB,KAAKzY,YAAY,aAAc9G,UAAWuY,GAAU0iB,GAClG3zB,eAAanI,IAAI87B,EAAU,QAASx/B,KAAK20B,cAAe30B,MACxD6L,eAAanI,IAAI47B,EAAW,QAASt/B,KAAKy/B,eAAgBz/B,MAC1DA,KAAKuG,aAAa8B,YAAY82B,GACzBn/B,KAAKwxB,UACDiC,cAAYzzB,KAAK0zB,QAAQ,GAAG7oB,OAAS7K,KAAK0zB,QAAQ,GAAGpuB,KAAOtF,KAAK0zB,QAAQ,GAAGC,SAC7E3zB,KAAKm1B,gBACLn1B,KAAKo1B,mBACLnuB,YAAUk4B,GAtlFR,kBAulFFl4B,YAAUjH,KAAKuG,cAAe,oBAChBvG,KAAKuG,aAAakH,cAAc,cACtC7G,MAAM84B,OAAS1/B,KAAKuG,aAAakH,cAAc,2BAAsBkyB,wBAAwBD,OAAS,MAGtH1/B,KAAKuG,aAAa8B,YAAYg3B,GAC1Br/B,KAAKwxB,UACLxxB,KAAK4/B,qBAET5/B,KAAKq1B,eAETvF,EAAgB5vB,UAAUu/B,eAAiB,SAAUtpB,GAC7CmR,SAAS0B,gBAAkBhpB,KAAKkiB,eAChCliB,KAAK0wB,cAAe,EACpB1wB,KAAKkiB,aAAazT,QAClBxH,YAAUjH,KAAKmiB,aAAaC,YAxnFvB,mBA0nFTjM,EAAInI,iBACAhO,KAAKowB,aACLpwB,KAAKkiB,aAAazT,QAClBzO,KAAKowB,YAAa,GAEtBpwB,KAAK4wB,WAAa,KAClB5wB,KAAK6wB,SAAW,KAChB7wB,KAAKw0B,kBACLx0B,KAAK+nB,KAAK5R,IAEd2Z,EAAgB5vB,UAAU0/B,mBAAqB,WACvC38B,oBAAkBjD,KAAK4wB,aAAe3tB,oBAAkBjD,KAAK6wB,WAC7D7wB,KAAKw2B,UAAU70B,QAAQwC,aAAa,WAAY,IAChDnE,KAAKs2B,YAAY30B,QAAQ8B,UAAUC,IAAIqrB,IAEjC9rB,oBAAkBjD,KAAK4wB,aAC7B5wB,KAAKs2B,YAAY30B,QAAQ8B,UAAUC,IAAIqrB,IAG/Ce,EAAgB5vB,UAAUy0B,cAAgB,SAAUxe,GAChD,GAAI0pB,IAAiB,CACJ,gBAAb1pB,EAAIrO,MACJqO,EAAInI,iBAEJhO,KAAK8/B,gBAAkB9/B,KAAK8/B,eAAelU,SAC3C5rB,KAAK4wB,WAAa5wB,KAAKuG,aAAakH,cAAc,kBAC9CzN,KAAKoW,WAAW,KAAMpW,KAAKuG,aAAakH,cAAc,kBAC1DzN,KAAK6wB,SAAW7wB,KAAKuG,aAAakH,cAAc,gBAC5CzN,KAAKoW,WAAW,KAAMpW,KAAKuG,aAAakH,cAAc,gBAC1DzN,KAAK6nB,YAELP,SAAS0B,gBAAkBhpB,KAAKkiB,eAChCliB,KAAK0wB,cAAe,EACpB1wB,KAAKkiB,aAAazT,QAClBxH,YAAUjH,KAAKmiB,aAAaC,YA5pFvB,mBA8pFQ,eAAbjM,EAAIrO,MACJ9H,KAAK8/B,iBAAmB9/B,KAAK8/B,eAAelU,QAC5CzV,EAAInI,iBAEH/K,oBAAkBjD,KAAK4wB,aAAgB3tB,oBAAkBjD,KAAK6wB,UAc/D7wB,KAAK+nB,KAAK5R,GAAY,OAbtBnW,KAAKm0B,mBAAqB,GAAItxB,OAAM7C,KAAK4wB,YACzC5wB,KAAKo0B,iBAAmB,GAAIvxB,OAAM7C,KAAK6wB,UACvC7wB,KAAKmwB,iBAAmBnwB,KAAKkiB,aAAahc,MAC1C8b,QAAM6F,SAAS7nB,KAAKu7B,UAAUplB,GAAKlM,KAAMjK,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,kBACjFnkB,KAAK0yB,gBAAmB1yB,KAAK4wB,aAAe5wB,KAAK2yB,cAAiB3yB,KAAK6wB,WACxEgP,GAAiB,GAErB7/B,KAAK+oB,cAAc5S,GACnBnW,KAAK+nB,KAAK5R,GAAY,MACtBnW,KAAKilB,aACL4a,GAAiB,GAKfv7B,UAAQ6R,EAAI7V,OAAQ,mBACjBu/B,GACL7/B,KAAKspB,WAEJtpB,KAAKwxB,WACNxxB,KAAKowB,YAAa,EACdpwB,KAAKswB,qBACLtwB,KAAKmiB,aAAaC,UAAUvM,SAAS,GAAGpH,QACxCzO,KAAKgxB,gBAAkB7kB,SAAOnM,KAAKgxB,gBAAiBhxB,KAAKoM,YACzDpM,KAAK+/B,oBAAsB,GAAIzzB,kBAAetM,KAAKmiB,aAAaC,UAAUvM,SAAS,IAC/EtJ,UAAW,UACXH,WAAYpM,KAAKgxB,gBACjBxkB,UAAWxM,KAAKggC,qBAAqBtzB,KAAK1M,WAK1D8vB,EAAgB5vB,UAAU+/B,aAAe,SAAUvlB,EAAOwlB,GACtD,GAAmB,eAAfxlB,EAAM5S,KAAV,CAGA,GAAIxH,GAAS4/B,GAAQxlB,EAAMpa,OACvB6/B,EAAK77B,UAAQhE,EAAQ,IAAMkvB,GAC3B4Q,EAAUD,GAAMA,EAAG18B,UAAUmI,SAASmjB,EACtCoR,IAAMA,EAAG18B,UAAUmI,SAAS4jB,IAC5BxvB,KAAKqgC,iBAAiBF,EAAIzlB,GAE9B1a,KAAK0wB,cAAe,EACpB1wB,KAAKkiB,aAAazT,QACbzO,KAAKwxB,WACNxxB,KAAK0wB,cAAe,EAChByP,GAAMA,EAAG18B,UAAUmI,SAAS4jB,IAAwC,iBAA1B2Q,EAAGj8B,aAAa,MAC1DlE,KAAK40B,aAAa/e,SAAS,GAAGsT,kBAAkB1a,QAG3C2xB,GAA0B,YAAf1lB,EAAM5S,MAClB9H,KAAKkiB,aAAazT,WAKlCqhB,EAAgB5vB,UAAUogC,YAAc,SAAU5lB,GAC9C,GAAIylB,GAAK77B,UAAQoW,EAAMpa,OAAQ,IAAMkvB,EACjC2Q,IAAMA,EAAG18B,UAAUmI,SAAS4jB,KAAe2Q,EAAG18B,UAAUmI,SAAS6jB,IACjExoB,YAAUk5B,GAAK1Q,IAGvBK,EAAgB5vB,UAAUqgC,aAAe,SAAU7lB,GAC/C,GAAIwlB,GAAO57B,UAAQoW,EAAMpa,OAAQ,IAAMmvB,EAClCxsB,qBAAkBi9B,IACnBl5B,eAAak5B,GAAOzQ,IAG5BK,EAAgB5vB,UAAUmgC,iBAAmB,SAAUF,EAAIzlB,GACvD,GAAIylB,KAAQA,EAAG18B,UAAUmI,SAASmjB,IAAY/uB,KAAKwxB,UAAY2O,EAAG18B,UAAUmI,SAASmjB,IAAW,CAC5F,GAAI/uB,KAAKwxB,UAAY2O,EAAG18B,UAAUmI,SAASmjB,GAAS,CAGhD,GAFA/uB,KAAK6zB,YAAcj0B,MAAMM,UAAUiK,MAAMtI,KAAK7B,KAAKkwB,eAAeld,QAAQmtB,GAEtD,iBADLngC,KAAKiwB,YAAYjwB,KAAK6zB,aACxBjrB,GAET,WADA5I,MAAKwgC,mBAGT,QAEJxgC,KAAKygC,sBACLzgC,KAAK6zB,YAAcj0B,MAAMM,UAAUiK,MAAMtI,KAAK7B,KAAKkwB,eAAeld,QAAQmtB,GAC1El5B,YAAUk5B,GAAKpR,GACfoR,EAAGh8B,aAAa,gBAAiB,OACjC,IAAI8L,GAASjQ,KAAKiwB,YAAYjwB,KAAK6zB,YACjB,kBAAd5jB,EAAOrH,GACP5I,KAAKwgC,oBAGLxgC,KAAK0gC,iBAAiBzwB,EAAQyK,KAI1CoV,EAAgB5vB,UAAUugC,oBAAsB,WAC5C,GAAIP,GAAOlgC,KAAK+4B,cAActrB,cAAc,YACvCxK,qBAAkBi9B,KACnBl5B,eAAak5B,GAAOnR,GACpBmR,EAAKtnB,gBAAgB,mBAG7BkX,EAAgB5vB,UAAU2nB,SAAW,WACjC7nB,KAAK2gC,YAAc3gC,KAAK4wB,WAAY5wB,KAAK6wB,WAE7Cf,EAAgB5vB,UAAUwgC,iBAAmB,SAAUzwB,EAAQpD,GAC3D7M,KAAK+nB,KAAK,MACV/nB,KAAKiwB,YAAYjwB,KAAKiwB,YAAYtvB,OAAS,GAAGkK,MAAQ,KACtD7K,KAAKiwB,YAAYjwB,KAAKiwB,YAAYtvB,OAAS,GAAG2E,IAAM,KACpDtF,KAAK4wB,WAAa3gB,EAAOpF,MACzB7K,KAAK6wB,SAAW5gB,EAAO3K,IACvBtF,KAAK6nB,WACL7nB,KAAKy3B,iBACLz3B,KAAKua,QAAQ,SAAUva,KAAKu7B,UAAU1uB,IACtC7M,KAAK+oB,cAAclc,GACnB7M,KAAKmwB,iBAAmBnwB,KAAKkiB,aAAahc,MAC1ClG,KAAK+vB,eAAgB,EACrB/vB,KAAK40B,aAAe50B,KAAK01B,cAAgB,KACrC11B,KAAKowB,aACLpwB,KAAKswB,oBAAqB,EAC1BtwB,KAAKkiB,aAAazT,UAI1BqhB,EAAgB5vB,UAAU0gC,UAAY,SAAUj/B,EAAS+Y,GACrD1a,KAAKq5B,eACe,MAAhBr5B,KAAK6G,OACL7G,KAAK4mB,SAASoB,KAAK,KAAMhoB,KAAK2B,SAG9B3B,KAAK4mB,SAASoB,KAAK,KAAM,MAEzBhoB,KAAKwxB,UACLxxB,KAAK4mB,SAASmF,mBAGtB+D,EAAgB5vB,UAAUsgC,kBAAoB,WAC1CxgC,KAAKgwB,gBAAiB,EACtBhwB,KAAK4mB,SAASmB,OACd/nB,KAAKuG,aAAevG,KAAKqE,cAAc,OAASuE,GAAI5I,KAAK2B,QAAQiH,GAAK,SAAUlB,UAAWvG,EAAO,aAClGnB,KAAKs1B,gBACLt1B,KAAK6gC,cAAchV,SAASxjB,YAAYrI,KAAKuG,cAC7CvG,KAAK4gC,YACL5gC,KAAK+vB,eAAgB,EAChB/vB,KAAKwxB,UACNxxB,KAAK60B,iBAGb/E,EAAgB5vB,UAAUk1B,iBAAmB,WACzC,IAAK,GAAIzrB,GAAK,EAAGC,EAAK5J,KAAKkwB,cAAevmB,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC5D,GAAIw2B,GAAKv2B,EAAGD,EACZ5B,gBAAao4B,KAGrBrQ,EAAgB5vB,UAAUi1B,cAAgB,WACtC,IAAK1B,cAAYzzB,KAAK0zB,QAAQ,GAAG7oB,OAAS7K,KAAK0zB,QAAQ,GAAGpuB,KAAOtF,KAAK0zB,QAAQ,GAAGC,OAAQ,CACrF3zB,KAAK+4B,cAAgB/4B,KAAKqE,cAAc,OAASqD,UA5yF/C,YA4yFmEG,OAASi5B,SAAY,MAC1F,IAAIC,GAAUC,WAASC,WAAWjhC,KAAKqE,cAAerE,KAAKiwB,YAAa,MAAM,EAC9EnsB,cAAWi9B,GAAWt4B,KAAQ,UAAWy4B,cAAe,QAASt4B,GAAM5I,KAAK2B,QAAQiH,GAAK,WAAYk4B,SAAY,MACjH9gC,KAAK+4B,cAAc1wB,YAAY04B,GAC/B/gC,KAAKuG,aAAa8B,YAAYrI,KAAK+4B,cACnC,IAAIoI,GAAgBnhC,KAAK+4B,cAActrB,cAAc,gBAChDxK,qBAAkBk+B,KACnBA,EAAch2B,YAAuD,KAAzCnL,KAAK8jB,KAAKzY,YAAY,eAAwBrL,KAAK8jB,KAAKzY,YAAY,eAC1F,gBAEVrL,KAAKkwB,cAAgBlwB,KAAK+4B,cAAc3uB,iBAAiB,IAAMolB,GAC/DxvB,KAAKohC,iBACDphC,KAAKwxB,WACLxxB,KAAK+4B,cAAcnyB,MAAM0d,MAAQtkB,KAAKmiB,aAAaC,UAAUud,wBAAwBrb,MAAQ,OAE5FrhB,oBAAkBjD,KAAK6zB,cAAgB7zB,KAAK6zB,aAAe,GAC5D5sB,YAAUjH,KAAKkwB,cAAclwB,KAAK6zB,cAAe9E,KAI7De,EAAgB5vB,UAAUkhC,eAAiB,WACvCv1B,eAAanI,IAAI1D,KAAK+4B,cAAe,QAAS/4B,KAAKigC,aAAcjgC,MAC5DA,KAAKwxB,WACN3lB,eAAanI,IAAI1D,KAAK+4B,cAAe,YAAa/4B,KAAKsgC,YAAatgC,MACpE6L,eAAanI,IAAI1D,KAAK+4B,cAAe,WAAY/4B,KAAKugC,aAAcvgC,QAG5E8vB,EAAgB5vB,UAAUmhC,iBAAmB,WACpCp+B,oBAAkBjD,KAAK+4B,iBACxBltB,eAAawL,OAAOrX,KAAK+4B,cAAe,mBAAoB/4B,KAAKigC,cAC5DjgC,KAAKwxB,WACN3lB,eAAawL,OAAOrX,KAAK+4B,cAAe,YAAa/4B,KAAKsgC,aAC1Dz0B,eAAawL,OAAOrX,KAAK+4B,cAAe,WAAY/4B,KAAKugC,iBAIrEzQ,EAAgB5vB,UAAUm1B,YAAc,WACpC,GAAIzzB,GAAQ5B,IACZA,MAAKuG,aAAa9C,UAAUC,IAAI,YAChC,IAAI49B,GAAathC,KAAKuG,aAAao5B,wBAAwBrb,KACtDrhB,qBAAkBjD,KAAKwc,WAAsC,KAAzBxc,KAAKwc,SAASU,SACnDld,KAAKuG,aAAamB,WAAa,IAAM1H,KAAKwc,UAE1Cxc,KAAKwxB,UAAYxxB,KAAKgwB,iBACtBhwB,KAAKyG,MAAQzG,KAAKqE,cAAc,OAChCijB,SAASyC,KAAK1hB,YAAYrI,KAAKyG,QAEnCzG,KAAK4mB,SAAW,GAAIqD,SAAMjqB,KAAKuG,cAC3B4jB,SAAUnqB,KAAKwxB,UAAYxxB,KAAKgwB,eAAiB1I,SAASyC,KACpD9mB,oBAAkBjD,KAAKy0B,eAAsCz0B,KAAKmiB,aAAaC,UAAvCpiB,KAAKy0B,cACnDrK,SAAWpqB,KAAKwxB,SACViC,cAAYzzB,KAAK0zB,QAAQ,GAAG7oB,OAAS7K,KAAK0zB,QAAQ,GAAGpuB,KAAOtF,KAAK0zB,QAAQ,GAAGC,QAAW3zB,KAAKgwB,gBAC3D3F,EAAG,SAAUC,EAAG,WAA7CD,EAAG,OAAQC,EAAG,UACpBtqB,KAAK2D,WAAc0mB,EAAG,OAAQC,EAAG,WAAeD,EAAG,QAASC,EAAG,UACnEiX,QAASvhC,KAAKwxB,UAAYxxB,KAAK2D,UAAY,GAAK29B,EAChD/W,QA90FM,EA+0FNE,UAAWzqB,KAAKwxB,SACViC,cAAYzzB,KAAK0zB,QAAQ,GAAG7oB,OAAS7K,KAAK0zB,QAAQ,GAAGpuB,KAAOtF,KAAK0zB,QAAQ,GAAGC,QAAW3zB,KAAKgwB,gBACzE3F,EAAG,MAAOC,EAAG,QAA5BD,EAAG,QAAsCA,EAAG,MAAOC,EAAG,QAChEE,WAAYxqB,KAAKwxB,UAAYxxB,KAAKgwB,eAAiB,YAAc,WACjErsB,UAAW3D,KAAK2D,UAChBkD,OAAQ7G,KAAK6G,OACb6jB,KAAM,WACF5mB,aAAWlC,EAAMsgB,cAAgBsB,gBAAiB,OAAQwK,YAAapsB,EAAMsgB,aAAatZ,GAAK,aAC3FhH,EAAMsE,MACNpC,aAAWlC,EAAMsgB,cAAgBxZ,wBAAyB9G,EAAMsgB,aAAatZ,KAG7EhH,EAAMsgB,aAAatJ,gBAAgB,yBAEvC3R,YAAUrF,EAAMugB,aAAaE,QAAQ,IAAK0M,GACrCntB,EAAM4vB,WACH5vB,EAAMs3B,eACNt3B,EAAM4/B,kBAAoB,GAAIl1B,kBAAe1K,EAAMs3B,aAAav3B,SAC5D4K,UAAW,UACXC,UAAW5K,EAAMo+B,qBAAqBtzB,KAAK9K,GAC3CwK,YAAc+gB,IAAK,MAAOpnB,cAAe,iBAAkBC,aAAc,mBAE7EpE,EAAM4/B,kBAAoB,GAAIl1B,kBAAe1K,EAAM2yB,YAAY5yB,SAC3D4K,UAAW,UACXC,UAAW5K,EAAMo+B,qBAAqBtzB,KAAK9K,GAC3CwK,YAAcrG,cAAe,iBAAkBC,aAAc,oBAGhE/C,oBAAkBrB,EAAMgzB,eACpBhzB,EAAM0uB,oBACP1uB,EAAMizB,gBAGT5xB,oBAAkBrB,EAAMm3B,iBACzBn3B,EAAMovB,gBAAkB7kB,SAAOvK,EAAMovB,gBAAiBpvB,EAAMwK,YAC5DxK,EAAM6/B,qBAAuB,GAAIn1B,kBAAe1K,EAAMm3B,eAClDxsB,UAAW,UACXC,UAAW5K,EAAM8/B,uBAAuBh1B,KAAK9K,GAC7CwK,WAAYxK,EAAMovB,kBAEtBpvB,EAAM6/B,qBAAuB,GAAIn1B,kBAAe1K,EAAMm3B,eAClDxsB,UAAW,UACXC,UAAW5K,EAAMo+B,qBAAqBtzB,KAAK9K,GAC3CwK,YAAcrG,cAAe,iBAAkBC,aAAc,mBAE7D/C,oBAAkBrB,EAAMgzB,eACxBhzB,EAAM6uB,aAAc,EACpB7uB,EAAMm3B,cAActqB,SAGpB7M,EAAMm3B,cAAc50B,aAAa,WAAY,OAGrDvC,EAAM+/B,wBAEN//B,EAAM4vB,WAAa5tB,UAAQC,UAC3BgI,eAAanI,IAAI4jB,SAAU,UAAW1lB,EAAMggC,kBAAmBhgC,IAGvE+oB,MAAO,WACH7mB,aAAWlC,EAAMsgB,cAAgBsB,gBAAiB,UAClD5hB,EAAMsgB,aAAatJ,gBAAgB,aACnChX,EAAMsgB,aAAatJ,gBAAgB,yBACnC5R,eAAapF,EAAMugB,aAAaE,QAAQ,IAAK0M,GACzCntB,EAAM0uB,oBACN1uB,EAAMugB,aAAaC,UAAUvM,SAAS,GAAGpH,QAExCglB,cAAY7xB,EAAM8xB,QAAQ,GAAG7oB,OAASjJ,EAAM8xB,QAAQ,GAAGpuB,KAAO1D,EAAM8xB,QAAQ,GAAGC,QAChF/xB,EAAMy/B,mBAELp+B,oBAAkBrB,EAAMglB,YACpB3jB,oBAAkBrB,EAAMglB,SAASjlB,QAAQ0nB,gBAC1Chf,SAAOzI,EAAMglB,SAASjlB,SAE1BC,EAAMglB,SAASjO,UACf/W,EAAMglB,SAAW,MAEjBhlB,EAAM4vB,WAAa5tB,UAAQC,UAC3BgI,eAAawL,OAAOiQ,SAAU,UAAW1lB,EAAMggC,oBAEpD9W,mBAAoB,WACdlnB,UAAQC,UACTjC,EAAMmmB,UAId/nB,KAAKwxB,WACLxxB,KAAK4mB,SAASjlB,QAAQ8B,UAAUC,IA76F/B,YA86FI1D,KAAKwxB,UACNxxB,KAAK4mB,SAASjlB,QAAQ8B,UAAUC,IAAI,aAGxC1D,KAAKwxB,UAAYxxB,KAAKgwB,iBACtB/oB,YAAUjH,KAAKyG,QAn7Fd,WAm7F+BtF,EAAM,kBACtCmmB,SAASyC,KAAKriB,WAAa,oBAC3B1H,KAAKyG,MAAMG,MAAMojB,QAAU,SAE/Bne,eAAanI,IAAI4jB,SAAU,uBAAwBtnB,KAAKopB,gBAAiBppB,OAE7E8vB,EAAgB5vB,UAAU0hC,kBAAoB,SAAU/0B,GACpD,OAAQA,EAAEg1B,SACN,IAAK,IACD7hC,KAAK+nB,KAAKlb,KAItBijB,EAAgB5vB,UAAU20B,cAAgB,WACtC,GAAIja,GAAY5a,KAAK4mB,UAAY5mB,KAAK4mB,SAASjlB,QAAQ8L,cAAc,IAAMuhB,EAC3E,IAAIpU,EAAW,CACX,GAAImd,GAAMzzB,UAAQsW,EAAW,IAAMkU,EACnCiJ,GAAM90B,oBAAkB80B,GAAO/3B,KAAK40B,aAAemD,EAC/C/3B,KAAKswB,mBACLtwB,KAAKmiB,aAAaC,UAAU3T,SAG5BzO,KAAKywB,aAAc,EACnBsH,EAAIliB,SAAS,GAAGsT,kBAAkB1a,SAEtCxH,YAAU2T,GAAYwU,OAGlBpvB,MAAKswB,mBACLtwB,KAAKmiB,aAAaC,UAAU3T,SAG5BzO,KAAKywB,aAAc,EACnBzwB,KAAK40B,aAAa/e,SAAS,GAAGsT,kBAAkB1a,UAI5DqhB,EAAgB5vB,UAAUm5B,aAAe,WACrC,GAAI3F,GAAU1zB,KAAK4mB,UAAY5mB,KAAK4mB,SAASjlB,QAAQ8L,cAAc,cAC/Dq0B,EAAiB9hC,KAAK4mB,UAAY5mB,KAAK4mB,SAASjlB,QAAQ8L,cAAc,0BACrExK,qBAAkBywB,IAAazwB,oBAAkB6+B,KAClDpO,EAAQ9sB,MAAM84B,OAASoC,EAAenC,wBAAwBD,OAAS,OAG/E5P,EAAgB5vB,UAAUwhC,uBAAyB,SAAU70B,GACzD,OAAQA,EAAEiB,QACN,IAAK,WACD9N,KAAK+hC,aAAal1B,GAClB7M,KAAKgiC,oBACLn1B,EAAEmB,gBACF,MACJ,KAAK,SACDhO,KAAKiiC,WAAWp1B,GAChB7M,KAAKgiC,oBACLn1B,EAAEmB,gBACF,MACJ,KAAK,QAEG,GAAIk0B,GAAUliC,KAAKmiC,aACfC,EAAUpiC,KAAKqiC,aACnB,KAAKp/B,oBAAkBjD,KAAK40B,gBAAkB3xB,oBAAkBm/B,KACxDn/B,oBAAkBi/B,KAAcj/B,oBAAkBm/B,IAAYA,IAAYF,KAC1EliC,KAAK6zB,YAAcj0B,MAAMM,UAAUiK,MAAMtI,KAAK7B,KAAKkwB,eAAeld,QAAQovB,GAExD,iBADLpiC,KAAKiwB,YAAYjwB,KAAK6zB,aACxBjrB,IAIP,MAHA5I,MAAK60B,gBACLuN,EAAQ3+B,UAAU4T,OAAOoY,OACzB5iB,GAAEmB,gBAKT/K,qBAAkBi/B,IAAaj/B,oBAAkBm/B,IAClDpiC,KAAKigC,aAAapzB,EAAGq1B,GAAWE,GAEpCv1B,EAAEmB,gBAEN,MACJ,KAAK,MACD,GAAIhO,KAAK40B,aAAc,CACnB,GAAIsL,GAAOlgC,KAAKmiC,YACXl/B,qBAAkBi9B,IACnBA,EAAKz8B,UAAU4T,OAAOoY,OAI1BzvB,MAAK+nB,KAAKlb,GACVA,EAAEmB,mBAMlB8hB,EAAgB5vB,UAAU6hC,aAAe,SAAUl1B,GAC/C,GAAIq1B,GAAUliC,KAAKmiC,aACfC,EAAUpiC,KAAKqiC,aACnB,IAAKp/B,oBAAkBi/B,GAOlB,GAAKj/B,oBAAkBm/B,GAOxBn7B,YAAUjH,KAAKkwB,cAAc,IAAKT,OAPA,CAC9B0Q,EAAKiC,EAAQE,oBACZr/B,oBAAkBk9B,IAAOA,EAAG18B,UAAUmI,SAAS4jB,IAChDvoB,YAAUk5B,GAAK1Q,OAVU,CAC7B,GAAI0Q,GAAK+B,EAAQI,oBACZr/B,oBAAkBk9B,IAAOA,EAAG18B,UAAUmI,SAAS4jB,KAChDxoB,eAAak7B,GAAUzS,GACvBxoB,YAAUk5B,GAAK1Q,MAc3BK,EAAgB5vB,UAAU+hC,WAAa,SAAUp1B,GAC7C,GAAIq1B,GAAUliC,KAAKmiC,aACfC,EAAUpiC,KAAKqiC,aACnB,IAAKp/B,oBAAkBi/B,IAOlB,IAAKj/B,oBAAkBm/B,GAAU,CAC9BjC,EAAKiC,EAAQG,wBACZt/B,oBAAkBk9B,IAAOA,EAAG18B,UAAUmI,SAAS4jB,IAChDvoB,YAAUk5B,GAAK1Q,QAVU,CAC7B,GAAI0Q,GAAK+B,EAAQK,wBACZt/B,oBAAkBk9B,IAAOA,EAAG18B,UAAUmI,SAAS4jB,KAChDxoB,eAAak7B,GAAUzS,GACvBxoB,YAAUk5B,GAAK1Q,MAU3BK,EAAgB5vB,UAAUiiC,WAAa,WAEnC,MADWniC,MAAK+4B,cAActrB,cAAc,IAAMgiB,IAGtDK,EAAgB5vB,UAAUmiC,YAAc,WAEpC,MADWriC,MAAK+4B,cAActrB,cAAc,cAGhDqiB,EAAgB5vB,UAAUyhC,qBAAuB,WAC7C3hC,KAAK+/B,oBAAsB,GAAIzzB,kBAAetM,KAAKuG,cAC/CgG,UAAW,UACXC,UAAWxM,KAAKggC,qBAAqBtzB,KAAK1M,MAC1CoM,YAAc4gB,OAAQ,YAE1BhtB,KAAKgxB,gBAAkB7kB,SAAOnM,KAAKgxB,gBAAiBhxB,KAAKoM,YACzDpM,KAAK+/B,oBAAsB,GAAIzzB,kBAAetM,KAAKmiB,aAAaC,UAAUvM,SAAS,IAC/EtJ,UAAW,UACXC,UAAWxM,KAAKggC,qBAAqBtzB,KAAK1M,MAC1CoM,WAAYpM,KAAKgxB,mBAGzBlB,EAAgB5vB,UAAU8hC,kBAAoB,WAC1C,GAAIQ,GAAaxiC,KAAK+4B,cAAc4G,wBAAwBD,OACxD+C,EAAQziC,KAAK+4B,cAActrB,cAAc,IAAMgiB,GAC/CiT,EAAS1iC,KAAK+4B,cAActrB,cAAc,aAC1C9L,EAAWsB,oBAAkBw/B,GAAiBC,EAARD,CAC1C,KAAKx/B,oBAAkBtB,GAAU,CAC7B,GAAIghC,GAAUhhC,EAAQ2gC,mBAClB5C,EAASiD,EAAUA,EAAQC,UAAYjhC,EAAQihC,UAC/CC,EAAWlhC,EAAQg+B,wBAAwBD,MAC1CA,GAAS/9B,EAAQihC,UAAaJ,EAC/BxiC,KAAK+4B,cAAc+J,UAAYH,EAAWjD,GAAU8C,EAAa,EAAIK,EAAW,GAAMnD,EAGtF1/B,KAAK+4B,cAAc+J,UAAY,IAI3ChT,EAAgB5vB,UAAU8/B,qBAAuB,SAAUnzB,GACvD,GAAIksB,GAAgBz0B,UAAQuI,EAAEvM,OAAQ,aACtC,QAAQuM,EAAEiB,QACN,IAAK,SACG9N,KAAK00B,eACD10B,KAAKowB,aACLpwB,KAAKkiB,aAAazT,QAClBzO,KAAKowB,YAAa,GAEtBpwB,KAAK+nB,KAAKlb,IAGV7M,KAAKmiB,aAAaC,UAAUvM,SAAS,GAAGiS,MAE5C,MACJ,KAAK,QACI9nB,KAAK00B,cAIN10B,KAAKmiB,aAAaC,UAAUvM,SAAS,GAAGpH,QAHxCzO,KAAKgoB,KAAK,KAAMnb,EAKpB,MACJ,KAAK,MACD7M,KAAK+nB,KAAKlb,EACV,MACJ,KAAK,gBACI5J,oBAAkB81B,GAIfzR,SAAS0B,gBAAkBhpB,KAAKk5B,aAAav3B,UAAiD,IAAtC3B,KAAKu0B,YAAY5yB,QAAQ4C,SACjFvE,KAAKu0B,YAAY5yB,QAAQ8M,QAGzBzO,KAAK40B,aAAa/e,SAAS,GAAGsT,kBAAkB1a,QAPpDzO,KAAKk5B,aAAav3B,QAAQ8M,QAU9B5B,EAAEmB,gBACF,MACJ,KAAK,eACI/K,oBAAkB81B,GAIfzR,SAAS0B,gBAAkBhpB,KAAKu0B,YAAY5yB,UAAiD,IAAtC3B,KAAKu0B,YAAY5yB,QAAQ4C,SAChFvE,KAAKk5B,aAAav3B,QAAQ8M,QAGrBxL,oBAAkBjD,KAAK+4B,gBAAmBzR,SAAS0B,gBAAkBhpB,KAAKk5B,aAAav3B,QAIxF3B,KAAK01B,cAAc7f,SAAS,GAAGsT,kBAAkB1a,QAHjDzO,KAAK+4B,cAActqB,QAR3BzO,KAAK01B,cAAc7f,SAAS,GAAGsT,kBAAkB1a,QAerD5B,EAAEmB,mBAId8hB,EAAgB5vB,UAAUkpB,gBAAkB,SAAUvc,GAClD,IAAI5J,oBAAkBjD,KAAK4mB,UAA3B,CAGA,GAAItmB,GAASuM,EAAEvM,MACVN,MAAKmiB,aAAaC,UAAUxW,SAAStL,KACpC2C,oBAAkBjD,KAAK4mB,WAActiB,UAAQhE,EAAQ,QAAUN,KAAKuG,aAAaqC,GAAK,OAAoB,cAAXiE,EAAE/E,OACpF,eAAX+E,EAAE/E,OAAsC,cAAX+E,EAAE/E,MAC/B9H,KAAK8/B,iBAAmB9/B,KAAK8/B,eAAelU,SAC5C/e,EAAEmB,kBAGL/K,oBAAkBjD,KAAKy0B,iBACtBxxB,oBAAkBjD,KAAKy0B,gBAAoBn0B,IAAWN,KAAKy0B,gBAC3DnwB,UAAQhE,EAAQ,QAAUN,KAAKuG,aAAaqC,GAAK,OAC9CtE,UAAQhE,EAAQ,oBAA0BN,KAAKmiB,aAAaC,WAC5D9d,UAAQhE,EAAQ,gCAAmCA,EAAOmD,UAAUmI,SAAS,WAClF5L,KAAKywB,aAAc,EACfzwB,KAAK00B,eAAiBpN,SAASyC,KAAKne,SAAS5L,KAAK4mB,SAASjlB,WAC3D3B,KAAK20B,cAAc9nB,GACd7M,KAAKwxB,WACNxxB,KAAKswB,oBAAqB,OAK1CR,EAAgB5vB,UAAU+iB,YAAc,WACpC,GAAI8f,GAAuB/iC,KAAKwc,QAC3BvZ,qBAAkBjD,KAAKwc,WAA+B,KAAlBxc,KAAKwc,WAC1CumB,EAAwB/iC,KAAKwc,SAASS,QAAQ,OAAQ,KAAMC,QAEhEld,KAAKmiB,aAAeH,QAAMiB,aACtBV,eAAgBviB,KAAKuiB,eACrB5gB,QAAS3B,KAAKkiB,aACdgC,YACIvB,SAAU3iB,KAAK2iB,SACfQ,YAAanjB,KAAKmjB,YAClB3G,SAAUumB,EACVv+B,QAASxE,KAAKwE,QACdb,UAAW3D,KAAK2D,UAChBwgB,gBAAiBnkB,KAAKmkB,iBAE1B9B,SAhvGQ,4CAivGTriB,KAAKqE,eACRP,aAAW9D,KAAKkiB,cACZ4e,SAAY,IAAKtd,gBAAiB,QAAS/a,KAAQ,WACnDgb,aAAgB,MAAOtc,gBAAkBnH,KAAKwE,QAAmB,QAAT,OACxDkf,YAAe,MAAOC,eAAkB,MAAOC,WAAc,UAEjE5B,QAAMuC,eAAgBnd,aAAc,UAAYpH,KAAKmiB,aAAaE,QAAQ,IACrEpf,oBAAkBjD,KAAKmjB,cAA4C,KAA5BnjB,KAAKmjB,YAAYjG,QACzD8E,QAAMuC,eAAgBye,mBAAoBhjC,KAAKmjB,aAAenjB,KAAKkiB,cAEvEliB,KAAKijC,YAAYjjC,KAAKskB,OACtBrd,YAAUjH,KAAKmiB,aAAaC,WA9vGb,wBA+vGXnf,oBAAkBjD,KAAKkiB,aAAahe,aAAa,UACjDJ,aAAW9D,KAAKkiB,cAAgB5H,KAAQta,KAAK2B,QAAQiH,KAE1B,WAA3B5I,KAAKkiB,aAAapa,OAClB9H,KAAKmiB,aAAaC,UAAUxb,MAAMojB,QAAU,QAEhDhqB,KAAKy3B,iBACLz3B,KAAKmwB,iBAAmBnwB,KAAKkiB,aAAahc,MAC1ClG,KAAKkiB,aAAa/d,aAAa,QAASnE,KAAKkiB,aAAahc,OAC1DlG,KAAKq0B,UAAYr0B,KAAK4a,UACtB5a,KAAKs0B,QAAUt0B,KAAK6a,SAExBiV,EAAgB5vB,UAAU+iC,YAAc,SAAU3e,GAE1CtkB,KAAKmiB,aAAaC,UAAUxb,MAAM0d,MADjB,gBAAVA,GACoCtkB,KAAW,MAEhC,gBAAVskB,GAC8BgH,aAAWtrB,KAAKskB,OAGhB,QAGlDwL,EAAgB5vB,UAAU+0B,sBAAwB,WACjB,SAAzBj1B,KAAKqJ,iBACLpC,YAAUjH,KAAKuG,cA5tGP,8BA+tGhBupB,EAAgB5vB,UAAUu3B,eAAiB,WACvCz3B,KAAK49B,iBACD59B,KAAK2kB,YACL3kB,KAAK69B,qBAET,IAAIhsB,GAAa7R,KAAK0kB,eAClB1kB,MAAK2kB,gBACL3kB,KAAK4wB,WAAa5wB,KAAKm0B,mBACvBn0B,KAAKmD,eAAgByX,UAAW5a,KAAK4wB,aAAc,GACnD5wB,KAAK6wB,SAAW7wB,KAAKo0B,iBACrBp0B,KAAKmD,eAAgB0X,QAAS7a,KAAK6wB,WAAY,GAC/C7wB,KAAK6nB,YAET7nB,KAAKwiB,cACAxiB,KAAK2kB,YACN3kB,KAAK+9B,iBAEJ/9B,KAAK2kB,eACN3kB,KAAKk0B,aAEJjxB,oBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,aAC5D/e,GAAe5O,oBAAkBjD,KAAKqN,qBAAsBrN,KAAKqN,kBAAkBwE,YACpF7R,KAAK21B,qBAET31B,KAAKilB,aACLjlB,KAAKm0B,mBAAqBlxB,oBAAkBjD,KAAK4wB,aAAerb,OAAOvV,KAAK4wB,YAAc,KAAO,GAAI/tB,OAAM7C,KAAK4wB,YAChH5wB,KAAKo0B,iBAAmBnxB,oBAAkBjD,KAAK6wB,WAAatb,OAAOvV,KAAK6wB,UAAY,KAAO,GAAIhuB,OAAM7C,KAAK6wB,WAE9Gf,EAAgB5vB,UAAUsiB,YAAc,WACpC,IAAKvf,oBAAkBjD,KAAK6wB,YAAc5tB,oBAAkBjD,KAAK4wB,YAAa,CAC1E,GAAIsS,IAAiBtxB,OAAQ5R,KAAK+kB,aAAcjd,KAAM,OAAQwJ,SAAU,OACpEsJ,EAAY5a,KAAK8C,UAAU0O,WAAWxR,KAAK4wB,WAAYsS,GACvDroB,EAAU7a,KAAK8C,UAAU0O,WAAWxR,KAAK6wB,SAAUqS,EACvDlhB,SAAM6F,SAASjN,EAAY,IAAM5a,KAAKgyB,UAAY,IAAMnX,EAAS7a,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAC9GnkB,KAAKm0B,mBAAqB,GAAItxB,OAAM7C,KAAK4wB,YACzC5wB,KAAKo0B,iBAAmB,GAAIvxB,OAAM7C,KAAK6wB,WAEtC7wB,KAAK2kB,YAAc1hB,oBAAkBjD,KAAKkG,QAAUlG,KAAKuhB,oBAC1DS,QAAM6F,SAAS7nB,KAAKuhB,mBAAoBvhB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,kBAG7F2L,EAAgB5vB,UAAU4xB,kBAAoB,SAAU5rB,GACpD,IAAKjD,oBAAkBiD,GAAQ,CAC3B,GAAIwf,IAAU,EACVyd,MAAe,GACfC,MAAa,GACbC,EAAc,KACdC,EAAY,KACZ7d,EAAc,KACd8d,GAAc,EACdC,GAAY,EACZC,GAAgB,CACpB,IAAuB,mBAAU,CAC7B,GAAI7P,GAAQ1tB,EAAMwH,MAAM,IAAM1N,KAAKgyB,UAAY,IAC1B,KAAjB4B,EAAMjzB,QACN0iC,EAAczP,EAAM,GACpB0P,EAAY1P,EAAM,KAGlBlO,GAAU,EACVD,EAAcvf,OAIdA,GAAMvF,OAAS,GACfwiC,EAAej9B,EAAM,GACrBk9B,EAAal9B,EAAM,KAGnBi9B,EAAej9B,EAAM2E,MACrBu4B,EAAal9B,EAAMZ,KAEjB69B,YAAwBtgC,OAAmC,mBAGxDsgC,YAAwBtgC,MAC7B0gC,GAAc,EAERtgC,oBAAkBkgC,KACxBM,GAAgB,GANhBJ,EAAcrjC,KAAK0jC,eAAeP,GAQhCC,YAAsBvgC,OAAiC,mBAGpDugC,YAAsBvgC,MAC3B2gC,GAAY,EAENvgC,oBAAkBmgC,KACxBK,GAAgB,GANhBH,EAAYtjC,KAAK0jC,eAAeN,IASnCngC,oBAAkBogC,KAAiBE,IAAgBtgC,oBAAkBqgC,KACpErgC,oBAAkBogC,KAAiBG,GAAavgC,oBAAkBqgC,MACpE5d,GAAU,GAEV+d,IACAJ,EAAcC,EAAY7d,EAAc,KACxCC,GAAU,GAEV2d,IACA3d,EAAUA,GAAW1lB,KAAK6iB,kBAAkBwgB,IAE5CC,IACA5d,EAAUA,GAAW1lB,KAAK6iB,kBAAkBygB,IAE5C5d,IACI6d,IAAgBE,IAChBJ,EAAcF,EAAaQ,sBAE3BH,IAAcC,IACdH,EAAYF,EAAWO,sBAEtB1gC,oBAAkBogC,IAAiBpgC,oBAAkBqgC,GAGhDrgC,oBAAkBogC,GAGlBpgC,oBAAkBqgC,KACxB7d,EAAc6d,GAHd7d,EAAc4d,EAHd5d,EAAc4d,EAAc,IAAMrjC,KAAKgyB,UAAY,IAAMsR,EAQ7DtjC,KAAKuhB,mBAAqBkE,EAC1BzlB,KAAKmD,eAAgB+C,MAAO,OAAQ,GACpClG,KAAKmD,eAAgBytB,WAAY,OAAQ,GACzC5wB,KAAKmD,eAAgB0tB,SAAU,OAAQ,GACvC7wB,KAAK4a,UAAY,KACjB5a,KAAK6a,QAAU,QAI3BiV,EAAgB5vB,UAAUwjC,eAAiB,SAAUx9B,GACjD,GAAI09B,GAAc,IAOlB,OANK3gC,qBAAkBiD,IAA4B,gBAAVA,GAG/BjD,oBAAkBiD,IAA4B,gBAAVA,KAC1C09B,EAAc,GAAK19B,GAHnB09B,EAAc,EAAQ98B,WAKnB88B,GAEX9T,EAAgB5vB,UAAU2iB,kBAAoB,SAAU3c,GACpD,GAAIuf,GAAcvf,EACdwf,GAAU,EACVme,EAAY,IAEhB,IADAA,GAAcjyB,OAAQ5R,KAAK+kB,aAAcjd,KAAM,OAAQwJ,SAAU,OACtC,gBAAhBmU,GACPC,GAAU,MAET,CACD,GAAI5iB,GAAY,GAAIC,wBAAqB/C,KAAKgD,OAC9C,KAAKhD,KAAKmG,eAAerD,EAAUyO,UAAUkU,EAAaoe,IAAa,CACnE,GACIC,GAAe,IAInBA,GAAe,+IAFH,kJAGIle,KAAKH,KAAiBqe,EAAale,KAAKH,IACjD,mBAAqBG,KAAKH,IAAgBlQ,OAAO,GAAI1S,MAAK7C,KAAKoG,WAAWqf,QAC7EC,GAAU,IAItB,MAAOA,IAEXoK,EAAgB5vB,UAAU03B,eAAiB,SAAUjpB,GACjD,GAAI1L,oBAAkB0L,GAClB,OAAO,CAEX,IAAIzI,GAAQ,GAAIrD,OAAM8L,EACtB,KAAKzI,GAASlG,KAAKuC,MAAQ2D,GAASlG,KAAKwC,IACrC,OAAO,CAEXxC,MAAK+jC,uBACDp1B,KAAMzI,EACN2L,YAAY,EAEhB,IAAI+E,GAAO5W,KAAK+jC,qBAEhB,OADA/jC,MAAKgkC,uBAAuBptB,KACxBA,EAAK/E,YAKbie,EAAgB5vB,UAAUy1B,mBAAqB,WAC3C31B,KAAKwwB,gBACLxwB,KAAKg9B,eAAiB,IAGtB,KAFA,GAAIztB,GAAY,GAAI1M,OAAM7C,KAAK4wB,YAC3Bnb,EAAQ,GACJlG,IAAcvP,KAAK6wB,WAAa7wB,KAAK6wB,WAAa7wB,KAAKwC,KAAK,CAChExC,KAAK+jC,uBACDp1B,KAAMY,EACNsC,YAAY,EAEhB,IAAI+E,GAAO5W,KAAK+jC,qBAChB/jC,MAAKgkC,uBAAuBptB,GACxBA,EAAK/E,aACL7R,KAAKwwB,aAAazmB,KAAK,GAAIlH,OAAM+T,EAAKjI,QACjCY,GAAavP,KAAK4wB,aAAerhB,GAAavP,KAAK6wB,UACpDpb,KAGRzV,KAAK6O,OAAOU,EAAW,EAAG,KAAMvP,KAAKwC,IAAKxC,KAAKuC,KAEnDvC,KAAKg9B,eAAiBvnB,GAE1Bqa,EAAgB5vB,UAAU8jC,uBAAyB,SAAUptB,GACzDzK,SAAOnM,KAAK+jC,uBAAyBzpB,KAAM,kBAC3Cta,KAAKua,QAAQ,gBAAiB3D,IAElCkZ,EAAgB5vB,UAAUwkB,cAAgB,WACtC,GAAIuf,IAAkB,EAClBC,GAAgB,CASpB,OARKjhC,qBAAkBjD,KAAK6wB,WAAc5tB,oBAAkBjD,KAAK4wB,cAC7DqT,EAAkBjkC,KAAK43B,eAAe53B,KAAK4wB,YAC3CsT,EAAgBlkC,KAAK43B,eAAe53B,KAAK6wB,UACpC7wB,KAAK00B,gBACN10B,KAAKqG,YAAc,MAEvBrG,KAAK6nB,YAEDoc,GAAmBC,GAE/BpU,EAAgB5vB,UAAU4wB,cAAgB,WACjC9wB,KAAKkG,OAA4B,OAAnBlG,KAAK4a,WAAuC,OAAjB5a,KAAK6a,QAG3B,OAAf7a,KAAKkG,OAAuC,OAArBlG,KAAKkG,MAAM2E,MACpB,OAAf7K,KAAKkG,MACLlG,KAAKmD,eAAgB+C,OAAQlG,KAAK4a,UAAW5a,KAAK6a,WAAY,GAEpC,OAArB7a,KAAKkG,MAAM2E,OAChB7K,KAAKmD,eAAgB+C,OAAS2E,MAAO7K,KAAK4a,UAAWtV,IAAKtF,KAAK6a,WAAa,GAI3E7a,KAAKkG,OAASlG,KAAKkG,MAAMvF,OAAS,GACnCX,KAAKi0B,WAAaj0B,KAAKi0B,UAAUtzB,OAAS,IACrCX,KAAK4a,YAAe5a,KAAKkG,MAAM,KAAOlG,KAAK6a,UAAa7a,KAAKkG,MAAM,IACpElG,KAAKmD,eAAgB+C,OAAQlG,KAAK4a,UAAW5a,KAAK6a,WAAY,GAE9D7a,KAAKkG,OAA0B,MAAjBlG,KAAKkG,MAAM,IAA+B,MAAjBlG,KAAKkG,MAAM,IAClDlG,KAAKmD,eAAgB+C,MAAO,OAAQ,IAInClG,KAAKkG,OAASlG,KAAKkG,MAAM2E,OAC1B7K,KAAKmD,eAAgB+C,OAAS2E,MAAO7K,KAAK4a,UAAWtV,IAAKtF,KAAK6a,WAAa,GAtBpF7a,KAAKmD,eAAgB+C,MAAO,OAAQ,GA0BxClG,KAAKmkC,qBASTrU,EAAgB5vB,UAAUunB,cAAgB,SAAU9lB,EAASmG,GACzD,GAAIs8B,GAAM9c,SAASC,YAAY,aAC/B6c,GAAI5c,UAAU1f,GAAM,GAAO,GAC3BnG,EAAQ8lB,cAAc2c,GACtBpkC,KAAKizB,iBAAiBxL,cAAc2c,IAExCtU,EAAgB5vB,UAAU6oB,cAAgB,SAAUlc,IAC3C7M,KAAK0yB,gBAAmB1yB,KAAK4wB,aAAe5wB,KAAK2yB,cAAiB3yB,KAAK6wB,WACxE7wB,KAAKmD,eAAgB0X,QAAS7a,KAAKmG,eAAenG,KAAK6wB,YAAa,GACpE7wB,KAAKmD,eAAgByX,UAAW5a,KAAKmG,eAAenG,KAAK4wB,cAAe,GACxE5wB,KAAK8wB,gBACD9wB,KAAKmC,WAAanC,KAAKkC,cACvBlC,KAAKkC,eAAgB,EAGrBlC,KAAKua,QAAQ,SAAUva,KAAKu7B,UAAU1uB,KAG9C7M,KAAKmwB,iBAAmBnwB,KAAKkiB,aAAahc,MAC1ClG,KAAK0yB,cAAgB1yB,KAAKmG,eAAenG,KAAK4wB,YAC9C5wB,KAAK2yB,YAAc3yB,KAAKmG,eAAenG,KAAK6wB,WAUhDf,EAAgB5vB,UAAUgN,WAAa,SAAUS,EAAMgB,GACnD,GAAI3O,KAAK00B,cAAe,CACpB,GAA2B,UAAvB/mB,EAAKrE,cACLqE,EAAO,YAEN,IAA2B,SAAvBA,EAAKrE,cACVqE,EAAO,WAEN,CAAA,GAA2B,WAAvBA,EAAKrE,cAIV,MAHAqE,GAAO,SAKP3N,KAAKiN,cAAcU,GAAQ3N,KAAKiN,cAAcjN,KAAKgN,SACnDW,EAAO3N,KAAKgN,OAEZhN,KAAKwxB,SACL/vB,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM2N,EAAMgB,IAGzCA,EAAO3O,KAAKuC,IACZoM,EAAO,GAAI9L,OAAM7C,KAAKuC,KAEjBoM,GAAQ3O,KAAKwC,MAClBmM,EAAO,GAAI9L,OAAM7C,KAAKwC,MAEb,UAATmL,GAAoB3N,KAAKs6B,YAAY3rB,EAAM3O,KAAKwC,KAChDmM,EAAO,GAAI9L,MAAK7C,KAAKwC,IAAIgM,cAAexO,KAAKwC,IAAI8N,WAAa,EAAGtQ,KAAKuC,IAAI4N,WAE5D,SAATxC,GAAmB3N,KAAKu6B,WAAW5rB,EAAM3O,KAAKwC,KACnDmM,EAAO,GAAI9L,MAAM7C,KAAKwC,IAAIgM,cAAgB,EAAIxO,KAAKwC,IAAI8N,WAAYtQ,KAAKwC,IAAI2N,WAE9D,WAATxC,GAAqB3N,KAAKi+B,aAAatvB,EAAM3O,KAAKwC,OACvDmM,EAAO,GAAI9L,MAAM7C,KAAKwC,IAAIgM,cAAgB,GAAKxO,KAAKwC,IAAI8N,WAAYtQ,KAAKwC,IAAI2N,YAEjFnQ,KAAKi4B,mBAAqBtpB,EAC1B3O,KAAKqkC,SAASrkC,KAAK40B,aAAc50B,KAAKi4B,mBAAoBtqB,GAEtDgB,EADS,UAAThB,EACO,GAAI9K,MAAK7C,KAAKqG,YAAYyN,SAAS9T,KAAKqG,YAAYiK,WAAa,IAE1D,SAAT3C,EACE,GAAI9K,MAAK7C,KAAKqG,YAAY+N,YAAYpU,KAAKqG,YAAYmI,cAAgB,IAGvE,GAAI3L,MAAK7C,KAAKqG,YAAY+N,YAAYpU,KAAKqG,YAAYmI,cAAgB,KAElFxO,KAAKk4B,oBAAsBvpB,EAC3B3O,KAAKqkC,SAASrkC,KAAK01B,cAAe11B,KAAKk4B,oBAAqBvqB,GAC5D3N,KAAK02B,mBAAqB12B,KAAK42B,oBAAsB,KACrD52B,KAAKm2B,kBAELn2B,KAAK+M,gBAAkB/M,KAAKgN,OAC5BhN,KAAK62B,yBAET72B,KAAK82B,oBACL92B,KAAKy1B,YAAaz1B,KAAKwxB,UAAYxxB,KAAKoE,kBAAoBpE,KAAK40B,aAAc50B,KAAK01B,kBAG5F5F,EAAgB5vB,UAAUmkC,SAAW,SAAUzxB,EAAUjE,EAAMhB,GAC3D3N,KAAKoE,gBAAkBwO,EACvB5S,KAAKwI,MAAQoK,EAASnF,cAAc,SACpCzN,KAAKoN,iBAAmBwF,EAASnF,cAAc,SAC/CzN,KAAKoI,mBAAqBwK,EAASnF,cAAc,YACjDzN,KAAKuK,iBAAmBqI,EAASnF,cAAc,SAC/CzN,KAAKuI,eAAiBqK,EAASnF,cAAc,cAC7CzN,KAAK4H,aAAegL,EAASnF,cAAc,WAC3CzN,KAAKmI,SAAWyK,EAASnF,cAAc,WACvCzN,KAAK8B,OAvkHA,WAwkHLL,EAAOvB,UAAUgN,WAAWrL,KAAK7B,KAAM2N,EAAMgB,IAOjDmhB,EAAgB5vB,UAAUosB,QAAU,WAC5BhF,SAAS0B,gBAAkBhpB,KAAKkiB,cAAgBliB,KAAKwE,UACrDyC,YAAUjH,KAAKmiB,aAAaC,YA1nHvB,kBA2nHLpiB,KAAKkiB,aAAazT,UAQ1BqhB,EAAgB5vB,UAAUopB,SAAW,WACjC,GAAIgb,GAAStkC,KAAKywB,WACdnJ,UAAS0B,gBAAkBhpB,KAAKkiB,eAChClb,eAAahH,KAAKmiB,aAAaC,YAtoH1B,kBAuoHLpiB,KAAKywB,aAAc,EACnBzwB,KAAKkiB,aAAa4F,OAClB9nB,KAAKywB,YAAc6T,IAQ3BxU,EAAgB5vB,UAAUyY,QAAU,WAChC3Y,KAAK6mB,eACL7mB,KAAK+nB,KAAK,KACV,IAAIxE,IACAud,SAAY,IAAKtd,gBAAiB,QAAS/a,KAAQ,WACnDgb,aAAgB,MAAOtc,gBAAkBnH,KAAKwE,QAAmB,QAAT,OACxDkf,YAAe,MAAOC,eAAkB,MAAOE,eAAgB,QAASD,WAAc,QAEtF5jB,MAAKkiB,eACLlb,eAAahH,KAAKkiB,eAAgB/gB,IAClC0K,eAAawL,OAAOrX,KAAKkiB,aAAc,OAAQliB,KAAKkmB,kBACpDlE,QAAMwK,iBAAiBjJ,EAAWvjB,KAAKkiB,cAClCjf,oBAAkBjD,KAAK6xB,aAAa3tB,aAAa,aAIlDlE,KAAKkiB,aAAatJ,gBAAgB,YAHlC5Y,KAAKkiB,aAAa/d,aAAa,WAAYnE,KAAKgE,UAKpDhE,KAAK0sB,uBACL1sB,KAAKkiB,aAAaze,UAAU4T,OAAO,WAC9BpU,oBAAkBjD,KAAKmiB,gBACxBtW,eAAawL,OAAOrX,KAAKmiB,aAAaE,QAAQ,GAAI,YAAariB,KAAK8zB,kBAC5C,OAApB9zB,KAAK4xB,YACL5xB,KAAKmiB,aAAaC,UAAUiH,cAAchhB,YAAYrI,KAAKkiB,cAE/D7X,SAAOrK,KAAKmiB,aAAaC,aAG5Bnf,oBAAkBjD,KAAK+zB,sBAAyB/zB,KAAKwxB,UACtDxxB,KAAK+zB,oBAAoBpb,UAEzB3Y,KAAK4mB,WACA5mB,KAAKwxB,UACNxxB,KAAK61B,uBAGbp0B,EAAOvB,UAAUyY,QAAQ9W,KAAK7B,MAC9BA,KAAKmiB,aAAeniB,KAAKuG,aAAevG,KAAK4mB,SAAW5mB,KAAK6xB,aAAe7xB,KAAK+4B,cAAgB,KAC7F/4B,KAAKumB,aACL1a,eAAawL,OAAOrX,KAAKumB,YAAa,QAASvmB,KAAK0c,kBAElDzZ,oBAAkBjD,KAAKizB,mBACpBhwB,oBAAkBjD,KAAKkzB,qBAC5B7oB,SAAOrK,KAAKizB,kBACZ5oB,SAAOrK,KAAKkzB,mBACZlzB,KAAKizB,iBAAmBjzB,KAAKkzB,kBAAoB,KACjDlzB,KAAKkiB,aAAa/d,aAAa,OAAQnE,KAAK2B,QAAQuC,aAAa,cACjElE,KAAKkiB,aAAatJ,gBAAgB,cAEtC5Y,KAAK8/B,eAAiB,KACtB9/B,KAAK40B,aAAe,KACpB50B,KAAKg/B,WAAa,KAClBh/B,KAAK4+B,UAAY,KACjB5+B,KAAK6gC,cAAgB,KACrB7gC,KAAK+1B,gBAAkB,KACvB/1B,KAAK01B,cAAgB,KACrB11B,KAAK8/B,eAAiB,KACtB9/B,KAAKg2B,iBAAmB,KACxBh2B,KAAK81B,gBAAkB,KACvB91B,KAAK+/B,oBAAsB,KAC3B//B,KAAKk5B,aAAe,KACpBl5B,KAAKu0B,YAAc,KACnBv0B,KAAKoE,gBAAkB,KACvBpE,KAAK02B,mBAAqB,KAC1B12B,KAAKi2B,iBAAmB,KACxBj2B,KAAK+1B,gBAAkB,KACvB/1B,KAAKwhC,kBAAoB,KACzBxhC,KAAK42B,oBAAsB,KAC3B52B,KAAK02B,mBAAqB,KAC1B12B,KAAKyhC,qBAAuB,KAC5BzhC,KAAKkwB,cAAgB,KACrBlwB,KAAK4mB,SAAW,KAChB5mB,KAAKuG,aAAe,MAExBupB,EAAgB5vB,UAAUwsB,qBAAuB,WAE7C,IAAK,GADDY,MACKtsB,EAAI,EAAGA,EAAIhB,KAAKkiB,aAAape,WAAWnD,OAAQK,IACrDssB,EAAKtsB,GAAKhB,KAAKkiB,aAAape,WAAW9C,GAAGsZ,IAE9C,KAAStZ,EAAI,EAAGA,EAAIssB,EAAK3sB,OAAQK,IACzBiC,oBAAkBjD,KAAK6xB,aAAa3tB,aAAaopB,EAAKtsB,MACxB,UAA1BssB,EAAKtsB,GAAGsI,gBACRtJ,KAAKkiB,aAAahc,MAAQ,IAE9BlG,KAAKkiB,aAAatJ,gBAAgB0U,EAAKtsB,MAGT,UAA1BssB,EAAKtsB,GAAGsI,gBACRtJ,KAAKkiB,aAAahc,MAAQlG,KAAK6xB,aAAa3tB,aAAaopB,EAAKtsB,KAElEhB,KAAKkiB,aAAa/d,aAAampB,EAAKtsB,GAAIhB,KAAK6xB,aAAa3tB,aAAaopB,EAAKtsB,OAUxF8uB,EAAgB5vB,UAAUsD,cAAgB,WACtC,MAAO,mBAQXssB,EAAgB5vB,UAAU4W,eAAiB,WACvC,GAAIC,IAAa,YAAa,UAAW,QACzC,OAAO/W,MAAKgX,aAAaD,IAO7B+Y,EAAgB5vB,UAAUqkC,iBAAmB,WACzC,GAAI3Q,EAeJ,OAdK3wB,qBAAkBjD,KAAK4wB,aAAgB3tB,oBAAkBjD,KAAK6wB,UAY/D+C,EAAQ,GAXRA,EAASze,KAAKyL,MAAMzL,KAAKC,KAAKpV,KAAKy7B,wBAAwBz7B,KAAK4wB,YAAYpX,UACxExZ,KAAKy7B,wBAAwBz7B,KAAK6wB,UAAUrX,mBAAuC,GAClFvW,oBAAkBjD,KAAKqN,oBAAsBrN,KAAKqN,kBAAkBwE,YACrE7R,KAAK21B,qBAEJ1yB,oBAAkBjD,KAAKg9B,kBACxBpJ,GAAgB5zB,KAAKg9B,eACrBh9B,KAAKg9B,eAAiB,QAMrBpiB,UAAW5a,KAAK4wB,WAAY/V,QAAS7a,KAAK6wB,SAAU3F,QAAS0I,IAU1E9D,EAAgB5vB,UAAU8nB,KAAO,SAAUrmB,EAAS+Y,GAChD,GAAI9Y,GAAQ5B,IAIZ,IAHIA,KAAKwxB,UAAYxxB,KAAK4mB,UACtB5mB,KAAK4mB,SAASmF,oBAEb/rB,KAAKwE,SAAWxE,KAAK2iB,WAAc3iB,KAAKwE,SAAWxE,KAAK4mB,UAIpD5mB,KAAK00B,eAAe,CACjB/yB,IACA3B,KAAKy0B,cAAgB9yB,GAEzB3B,KAAKg1B,eACDh1B,KAAKwxB,UAAY5tB,UAAQC,YACzB7D,KAAKwkC,qBAAuBxkC,KAAKqE,cAAc,OAASqD,UAAW,mCACnE4f,SAASyC,KAAK1hB,YAAYrI,KAAKwkC,uBAEnCxkC,KAAK6gC,eACDlV,MAAO3rB,KAAK4mB,UAAY,KACxBgF,QAAQ,EACRjd,KAAM3O,KAAKkiB,aAAahc,MACxB0iB,MAAO5oB,KACP0a,MAAOA,GAAgB,KACvBmR,SAAU7rB,KAAKwxB,UAAY5tB,UAAQC,SAAW7D,KAAKwkC,qBAAuBld,SAASyC,KAEvF,IAAI+B,GAAY9rB,KAAK6gC,aACrB7gC,MAAKua,QAAQ,OAAQuR,EAAW,SAAUA,GAEtC,GADAlqB,EAAMi/B,cAAgB/U,GACjBlqB,EAAMi/B,cAAcjV,OAAQ,CAC7BhqB,EAAMi/B,cAAchV,SAASxjB,YAAYzG,EAAM2E,cAC/C3E,EAAMg/B,UAAUj/B,EAAS+Y,EACzB,IAAIwa,IAAatzB,EAAMmuB,eAAkBnuB,EAAM4vB,UAAY5vB,EAAMmuB,eAC5D0D,cAAY7xB,EAAM8xB,QAAQ,GAAG7oB,OAASjJ,EAAM8xB,QAAQ,GAAGpuB,KAAO1D,EAAM8xB,QAAQ,GAAGC,QAAUuB,GAC1FtzB,EAAMogC,oBAEVpgC,EAAMw3B,kBACDx3B,aAAqBqB,oBAAkBrB,EAAMgZ,YAAgB3X,oBAAkBrB,EAAMiZ,WACtFjZ,EAAM40B,UAAU70B,QAAQ8B,UAAUC,IAAIqrB,GACtCntB,EAAM00B,YAAY30B,QAAQ8B,UAAU4T,OAAO0X,GAC3CntB,EAAM40B,UAAU70B,QAAQiX,gBAAgB,YACxChX,EAAMy1B,mBAEV51B,EAAOvB,UAAUoG,gBAAgBzE,KAAKD,EAAOA,EAAM4iC,qBAAsB5iC,EAAMglB,SAASjlB,QAASC,EAAM6E,MAEvG7E,EAAM4vB,UAAY5tB,UAAQC,eAW9CisB,EAAgB5vB,UAAU6nB,KAAO,SAAUrN,GACvC,GAAI9Y,GAAQ5B,IACZ,IAAIA,KAAK4mB,UAuBL,GAtBI3jB,oBAAkBjD,KAAKo0B,mBAAqBnxB,oBAAkBjD,KAAKm0B,oBACnEn0B,KAAKk0B,cAGAjxB,oBAAkBjD,KAAKm0B,qBAMxBn0B,KAAK4wB,WAAa,KAClB5wB,KAAK6nB,aANL7nB,KAAK4wB,WAAa,GAAI/tB,MAAK7C,KAAKoG,WAAWpG,KAAKm0B,qBAChDn0B,KAAK6nB,WACL7nB,KAAKqG,YAAc,GAAIxD,MAAK7C,KAAKoG,WAAWpG,KAAK4wB,cAMhD3tB,oBAAkBjD,KAAKo0B,mBAKxBp0B,KAAK6wB,SAAW,KAChB7wB,KAAK6nB,aALL7nB,KAAK6wB,SAAW,GAAIhuB,MAAK7C,KAAKoG,WAAWpG,KAAKo0B,mBAC9Cp0B,KAAK6nB,aAOT7nB,KAAK00B,cAAe,CACpB10B,KAAK8/B,gBACDlU,QAAQ,EACRD,MAAO3rB,KAAK4mB,SACZjY,KAAM3O,KAAKkiB,aAAahc,MACxB0iB,MAAO5oB,KACP0a,MAAOA,GAAgB,KAE3B,IAAIoR,GAAY9rB,KAAK8/B,cACrB9/B,MAAKua,QAAQ,QAASuR,EAAW,SAAUA,GACvClqB,EAAMk+B,eAAiBhU,EAClBlqB,EAAMk+B,eAAelU,OA2CtB5kB,eAAapF,EAAMugB,aAAaE,QAAQ,IAAK0M,IA1CzCntB,EAAM4vB,WACDvuB,oBAAkBrB,EAAM00B,cAAiBrzB,oBAAkBrB,EAAM40B,aAClE3qB,eAAawL,OAAOzV,EAAM00B,YAAY30B,QAAS,mBAAoBC,EAAM20B,mBACzE1qB,eAAawL,OAAOzV,EAAM40B,UAAU70B,QAAS,mBAAoBC,EAAM20B,qBAG3E30B,EAAMglB,WACNhlB,EAAMglB,SAASmB,OACXnmB,EAAM6uB,cACN7uB,EAAMsgB,aAAazT,QACnBxH,YAAUrF,EAAMugB,aAAaC,YAx4H5C,oBA24HYxgB,EAAM4vB,WACFvuB,oBAAkBrB,EAAM80B,qBAAwBzzB,oBAAkBrB,EAAMg1B,uBACzEh1B,EAAM80B,mBAAmB/d,UACzB/W,EAAMg1B,oBAAoBje,WAEzB1V,oBAAkBrB,EAAMm3B,gBACzBn3B,EAAM6/B,qBAAqB9oB,UAE1B1V,oBAAkBrB,EAAMs3B,eACzBt3B,EAAM4/B,kBAAkB7oB,WAGhC/W,EAAM6yB,cAAgB,KACtBztB,eAAasgB,SAASyC,MAp3H/B,oBAq3HSle,eAAawL,OAAOiQ,SAAU,uBAAwB1lB,EAAMwnB,iBACxDxnB,EAAM4vB,UAAY5vB,EAAM6E,QACxB7E,EAAM6E,MAAMG,MAAMojB,QAAU,OAC5BpoB,EAAM6E,MAAM4lB,UAAY,GACxBzqB,EAAM6E,MAAQ,OAEd7E,EAAM4vB,UAAY5tB,UAAQC,YACrBZ,oBAAkBrB,EAAM4iC,wBACzB5iC,EAAM4iC,qBAAqBntB,SAC3BzV,EAAM4iC,qBAAuB,OAGrC5iC,EAAMwuB,WAAaxuB,EAAMyuB,cAAe,GAK5CzuB,EAAMuxB,uBACNvxB,EAAMoyB,oBACFpyB,EAAM4vB,UAAY5vB,EAAM8gB,YAAc9gB,EAAM+gB,UAC5C/gB,EAAMsgB,aAAatJ,gBAAgB,mBAM/C5Y,MAAKmzB,uBACLnzB,KAAKg0B,oBACDh0B,KAAKwxB,UAAYxxB,KAAK0iB,YAAc1iB,KAAK2iB,UACzC3iB,KAAKkiB,aAAatJ,gBAAgB,aAK9CkX,EAAgB5vB,UAAUsX,UAAY,WAClCxX,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAC/ChD,KAAK8jB,KAAKtM,UAAUxX,KAAKgD,QACzBhD,KAAKmD,eAAgBggB,YAAanjB,KAAK8jB,KAAKzY,YAAY,iBAAkB,GAC1E2W,QAAMkM,eAAeluB,KAAKmjB,YAAanjB,KAAKkiB,cAC5CliB,KAAKwiB,cACLxiB,KAAKg0B,oBACLh0B,KAAK+oB,iBAET+G,EAAgB5vB,UAAUukC,cAAgB,WACtCzkC,KAAKuX,YACLvX,KAAKy3B,iBACLz3B,KAAK+oB,iBAET+G,EAAgB5vB,UAAU6T,QAAU,WAChCiO,QAAM6F,SAAS,GAAI7nB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAChEnkB,KAAKykC,iBAET3U,EAAgB5vB,UAAUwkC,YAAc,YAC/B1kC,KAAKuC,MAAQvC,KAAKwC,MACnBxC,KAAKmD,eAAgBqB,SAAS,IAAQ,GACtCwd,QAAMoM,WAAWpuB,KAAKwE,QAASxE,KAAKkiB,cAChCliB,KAAK2B,QAAQsC,aAAa,aAC1BjE,KAAK+hB,eAIjB+N,EAAgB5vB,UAAUykC,gBAAkB,SAAUztB,EAASC,GAC3DnX,KAAKmD,eAAgByX,UAAW,OAAQ,GACxC5a,KAAKmD,eAAgB0X,QAAS,OAAQ,GAClC1D,EAAQjR,OAASiR,EAAQjR,MAAMvF,OAAS,EACxCX,KAAKmD,eAAgB+C,MAAO,OAAQ,GAE/BiR,EAAQjR,OAASiR,EAAQjR,MAAM2E,MACpC7K,KAAKmD,eAAgB+C,OAAS2E,MAAO,KAAMvF,IAAK,QAAU,GAErD6R,EAAQjR,QAAUiR,EAAQjR,MAAM2E,OACrC7K,KAAKmD,eAAgB+C,OAAS2E,MAAO,KAAMvF,IAAK,QAAU,GAE9DtF,KAAK4yB,cACL5yB,KAAK+T,WAET+b,EAAgB5vB,UAAUikC,kBAAoB,WACtClhC,oBAAkBjD,KAAKizB,mBAAqBhwB,oBAAkBjD,KAAKkzB,qBACnElzB,KAAKizB,iBAAmBjzB,KAAKqE,cAAc,SAC3CrE,KAAKkzB,kBAAoBlzB,KAAKqE,cAAc,UAE3CpB,oBAAkBjD,KAAKkiB,aAAahe,aAAa,WAClDlE,KAAKkiB,aAAa/d,aAAa,YAAanE,KAAKkiB,aAAahe,aAAa,SAC3ElE,KAAKkiB,aAAatJ,gBAAgB,SAEtC9U,aAAW9D,KAAKizB,kBACZnrB,KAAQ,OAAQwS,KAAQta,KAAKkiB,aAAahe,aAAa,aAAc0gC,MAn8H7D,uBAq8HZ9gC,aAAW9D,KAAKkzB,mBACZprB,KAAQ,OAAQwS,KAAQta,KAAKkiB,aAAahe,aAAa,aAAc0gC,MAt8H7D,sBAw8HZ,IAAIhzB,IAAW9J,KAAM,WAAYwJ,SAAU,MAC3CtR,MAAKizB,iBAAiB/sB,MAAQlG,KAAK4a,WAAa5a,KAAK8C,UAAU0O,WAAWxR,KAAK4a,UAAWhJ,GAC1F5R,KAAKkzB,kBAAkBhtB,MAAQlG,KAAK6a,SAAW7a,KAAK8C,UAAU0O,WAAWxR,KAAK6a,QAASjJ,GACvF5R,KAAKkiB,aAAamH,cAAchhB,YAAYrI,KAAKizB,kBACjDjzB,KAAKkiB,aAAamH,cAAchhB,YAAYrI,KAAKkzB,oBAErDpD,EAAgB5vB,UAAU2kC,cAAgB,WAClC7kC,KAAK00B,gBACL10B,KAAKm3B,sBACLn3B,KAAKo5B,kBACDp5B,KAAKwxB,UACLxxB,KAAKq3B,mBAEJr3B,KAAK2kB,YAAe1hB,oBAAkBjD,KAAK4wB,aAAe3tB,oBAAkBjD,KAAK6wB,UAClF7wB,KAAKw0B,kBAGLx0B,KAAKy1B,YAAaz1B,KAAKwxB,UAAYxxB,KAAKoE,kBAAoBpE,KAAK40B,aAAc50B,KAAK01B,gBAExF11B,KAAK41B,iBAIb9F,EAAgB5vB,UAAU4kC,iBAAmB,SAAUn2B,EAAM+oB,GACzD,MAAmB,UAAf13B,KAAKgN,MACEhN,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWuI,KAEhC,SAAf3O,KAAKgN,MACH,GAAInK,MAAK8L,EAAKH,cAAeG,EAAK2B,YAAconB,EAAQ,EAAI,GAAIA,EAAQ,EAAI,GAG5E,GAAI70B,MAAK8L,EAAKH,cAAekpB,EAAQ,GAAK,EAAGA,EAAQ,GAAK,IAWzE5H,EAAgB5vB,UAAU+W,kBAAoB,SAAUC,EAASC,GAE7D,IAAK,GADDvF,IAAWA,OAAQ5R,KAAK+kB,aAAcjd,KAAM,OAAQwJ,SAAU,OACzD3H,EAAK,EAAGC,EAAKnK,OAAOoK,KAAKqN,GAAUvN,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC9D,GAAIyN,GAAOxN,EAAGD,EAKd,SAJiB,UAAW,UAAW,SACzBqJ,QAAQoE,GAAQ,GAC1BpX,KAAK+nB,KAAK,MAEN3Q,GACJ,IAAK,QACDpX,KAAKijC,YAAYjjC,KAAKskB,OACtBtC,QAAMC,eAAejiB,KAAKkiB,aAAcliB,KAAKmiB,aAAaC,WACrDnf,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,SAEjG,MACJ,KAAK,YACD1D,KAAKmwB,iBAAmBnwB,KAAKkiB,aAAahc,MAC1ClG,KAAKmD,eAAgB6uB,UAAW9a,EAAQ8a,YAAa,GACrDhyB,KAAKwiB,cACLxiB,KAAK+oB,eACL,MACJ,KAAK,cACD/G,QAAMkM,eAAehX,EAAQiM,YAAanjB,KAAKkiB,cAC/CliB,KAAKmD,eAAgBggB,YAAajM,EAAQiM,cAAe,EACzD,MACJ,KAAK,WACDnB,QAAMmM,YAAYnuB,KAAK2iB,SAAU3iB,KAAKkiB,cACtCliB,KAAK+yB,mBACL,MACJ,KAAK,WACD/yB,KAAKsoB,eAAepR,EAAQsF,SAAUrF,EAAQqF,SAC9C,MACJ,KAAK,UACDxc,KAAKmD,eAAgBqB,QAAS0S,EAAQ1S,UAAW,GACjDwd,QAAMoM,WAAWpuB,KAAKwE,QAASxE,KAAKkiB,cAChCliB,KAAKwE,QACLxE,KAAKkiB,aAAa/d,aAAa,WAAYnE,KAAKgE,UAGhDhE,KAAKkiB,aAAale,UAAY,CAElC,MACJ,KAAK,YACDhE,KAAK+yB,mBACL,MACJ,KAAK,YACD/yB,KAAKmD,eAAgBQ,UAAWuT,EAAQvT,YAAa,GACrDqe,QAAMqM,aAAaruB,KAAK2D,WAAY3D,KAAKmiB,aAAaC,WACtD,MACJ,KAAK,SACDpiB,KAAKmD,eAAgB0D,OAAQqQ,EAAQrQ,SAAU,EAC/C,MACJ,KAAK,SACD7G,KAAKmD,eAAgByO,OAAQsF,EAAQtF,SAAU,GAC/C5R,KAAKutB,cACLvtB,KAAKwiB,cACLxiB,KAAK+oB,eACL,MACJ,KAAK,SACD/oB,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAC/ChD,KAAK8jB,KAAKtM,UAAUxX,KAAKgD,QACzBhD,KAAKmD,eAAgBggB,YAAanjB,KAAK8jB,KAAKzY,YAAY,iBAAkB,GAC1E2W,QAAMkM,eAAeluB,KAAKmjB,YAAanjB,KAAKkiB,cAC5CliB,KAAKwX,WACL,MACJ,KAAK,iBACDxX,KAAKqoB,+BACLroB,KAAKkjB,+BACLljB,KAAK+wB,kBAAiB,GACtB/wB,KAAK8sB,qBAAoB,EACzB,MACJ,KAAK,kBACD9K,QAAMsM,eAAetuB,KAAKmkB,gBAAiBnkB,KAAKkiB,aAAcliB,KAAKmiB,cACnEniB,KAAKinB,gBACL,MACJ,KAAK,YACgC,gBAAtB/P,GAAQ0D,YACf1D,EAAQ0D,UAAY5a,KAAK8C,UAAUyO,UAAU2F,EAAQ0D,UAAWhJ,KAE/D5R,KAAK0yB,gBAAmBxb,EAAQ0D,YACjC5a,KAAK4wB,WAAa5wB,KAAK8kC,iBAAiB5tB,EAAQ0D,WAAW,GAC3D5a,KAAK+T,UACL/T,KAAK6nB,WAET,MACJ,KAAK,UAC8B,gBAApB3Q,GAAQ2D,UACf3D,EAAQ2D,QAAU7a,KAAK8C,UAAUyO,UAAU2F,EAAQ2D,QAASjJ,KAE3D5R,KAAK2yB,cAAiBzb,EAAQ2D,UAC/B7a,KAAK6wB,SAAW7wB,KAAK8kC,iBAAiB5tB,EAAQ2D,SAAS,GACvD7a,KAAK+T,UACL/T,KAAK6nB,WAET,MACJ,KAAK,QAGD,GAFA7nB,KAAKuhB,mBAAqB,KAC1BvhB,KAAK8xB,kBAAkB5a,EAAQhR,OACA,gBAAnBgR,SACR,GAAKlX,KAAKuhB,mBAONvhB,KAAK2kC,gBAAgBztB,EAASC,OAPJ,CAC1B,GAAI4a,GAAa7a,EAAQhR,MAAMwH,MAAM,IAAM1N,KAAKgyB,UAAY,IAC5DhyB,MAAKkG,OAAS,GAAIrD,MAAKkvB,EAAW,IAAK,GAAIlvB,MAAKkvB,EAAW,KAC3D/xB,KAAK4yB,cACL5yB,KAAK+T,eAOH9Q,oBAAkBiU,EAAQhR,QAAUgR,EAAQhR,MAAMvF,OAAS,IACzDsC,oBAAkBiU,EAAQhR,QAAUgR,EAAQhR,MAAM2E,OACtD7K,KAAKi0B,UAAY/c,EAAQhR,MACA,OAArBgR,EAAQhR,MAAM,IAAwC,OAAxBgR,EAAQhR,MAAM2E,MACf,IAAzBqM,EAAQhR,MAAMvF,QAAiBuW,EAAQhR,MAAY,MACnDlG,KAAK2kC,gBAAgBztB,EAASC,GAEJ,OAArBD,EAAQhR,MAAM,IACM,OAAxBgR,EAAQhR,MAAM2E,OACf7K,KAAK2kC,gBAAgBztB,EAASC,IAG3BnX,KAAK0yB,gBAAmBxb,EAAQhR,MAAM,KACzClG,KAAK2yB,cAAiBzb,EAAQhR,MAAM,KACtClG,KAAK0yB,iBAAoBxb,EAAQhR,MAAM2E,QACjC7K,KAAK2yB,cAAiBzb,EAAQhR,MAAM2E,SACf,IAAzBqM,EAAQhR,MAAMvF,OACdX,KAAK2gC,WAAazpB,EAAQhR,MAErBgR,EAAQhR,MAAM2E,QACnB7K,KAAK2gC,WAAazpB,EAAQhR,OAE9BlG,KAAK4yB,cACL5yB,KAAK+T,aAIL9Q,oBAAkBjD,KAAKkG,QACG,MAAvBgR,EAAQhR,MAAM2E,SACjB7K,KAAKi0B,UAAY/c,EAAQhR,MACzBlG,KAAK4wB,WAAa,KAClB5wB,KAAK6wB,SAAW,KAChB7wB,KAAK2kC,gBAAgBztB,EAASC,GAI1C,IAAInX,KAAK00B,cAAe,CACpB,GAAIzxB,oBAAkBjD,KAAK4wB,aAAe3tB,oBAAkBjD,KAAK6wB,UAK7D,MAJA7wB,MAAKw0B,uBACDx0B,KAAKwxB,UACLxxB,KAAK4/B,qBAIT5/B,MAAKwxB,UACLxxB,KAAKqkC,SAASrkC,KAAKi3B,eAAgBj3B,KAAK4wB,WAAY5wB,KAAK+M,eACzD/M,KAAK4/B,uBAGL5/B,KAAKqkC,SAASrkC,KAAK40B,aAAc50B,KAAK4wB,WAAY5wB,KAAK+M,eACvD/M,KAAKm9B,cAAcn9B,KAAK40B,cACxB50B,KAAKqkC,SAASrkC,KAAK01B,cAAe11B,KAAK6wB,SAAU7wB,KAAK+M,eACtD/M,KAAKm9B,cAAcn9B,KAAK01B,gBAE5B11B,KAAKy1B,YAAaz1B,KAAKwxB,UAAYxxB,KAAKoE,kBAAoBpE,KAAK40B,aAAc50B,KAAK01B,gBACpF11B,KAAK41B,eACL51B,KAAKu0B,YAAYhwB,SAAWvE,KAAKu0B,YAAY5yB,QAAQ4C,UAAW,EAEpEvE,KAAKkC,cAAgBlC,KAAKmC,WAAanC,KAAKkC,eAAiBlC,KAAKkC,cAAgBlC,KAAKkC,aACvF,MACJ,KAAK,UACDlC,KAAKmD,eAAgB2xB,QAAS5d,EAAQ4d,UAAW,GACjD90B,KAAKykC,gBACLzkC,KAAK6kC,eACL,MACJ,KAAK,UACD7kC,KAAKmD,eAAgB4xB,QAAS7d,EAAQ6d,UAAW,GACjD/0B,KAAKykC,gBACLzkC,KAAK6kC,eACL,MACJ,KAAK,MACD7kC,KAAKmD,eAAgBZ,IAAKvC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAW8Q,EAAQ3U,SAAU,GACzFvC,KAAKmwB,iBAAmBnwB,KAAKkiB,aAAahc,MAC1ClG,KAAK0kC,cACL1kC,KAAKykC,eACL,MACJ,KAAK,MACDzkC,KAAKmD,eAAgBX,IAAKxC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAW8Q,EAAQ1U,SAAU,GACzFxC,KAAK0kC,cACL1kC,KAAKykC,eACL,MACJ,KAAK,aACDzkC,KAAKuhB,mBAAqB,KAC1BvhB,KAAKmD,eAAgBwhB,WAAYzN,EAAQyN,aAAc,GACvD3kB,KAAKykC,eACL,MACJ,KAAK,UACDzkC,KAAKmD,eAAgBuwB,QAASxc,EAAQwc,UAAW,GACjD1zB,KAAK8yB,gBACL,MACJ,KAAK,iBACD9yB,KAAKuiB,eAAiBrL,EAAQqL,eAC9BP,QAAMuM,eAAevuB,KAAKmiB,cAC1BH,QAAMwM,YAAYxuB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmjB,aAC1DlgB,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,SAEjG,MACJ,KAAK,QACD1D,KAAKmD,eAAgB0H,MAAOqM,EAAQrM,QAAS,GAC7C7K,KAAKykC,eACL,MACJ,KAAK,QACDzkC,KAAKmD,eAAgB6J,MAAOkK,EAAQlK,QAAS,GAC7ChN,KAAKykC,mBAKrBrkC,GACIub,WAAS,OACVmU,EAAgB5vB,UAAW,YAAS,IACvCE,GACIub,YAAS,IACVmU,EAAgB5vB,UAAW,wBAAqB,IACnDE,GACIub,WAAS,GAAI9Y,MAAK,KAAM,EAAG,KAC5BitB,EAAgB5vB,UAAW,UAAO,IACrCE,GACIub,WAAS,GAAI9Y,MAAK,KAAM,GAAI,MAC7BitB,EAAgB5vB,UAAW,UAAO,IACrCE,GACIub,WAAS,OACVmU,EAAgB5vB,UAAW,aAAU,IACxCE,GACIub,WAAS,OACVmU,EAAgB5vB,UAAW,qBAAkB,IAChDE,GACIub,YAAS,IACVmU,EAAgB5vB,UAAW,iBAAc,IAC5CE,GACIub,WAAS,cACVmU,EAAgB5vB,UAAW,mBAAgB,IAC9CE,GACIub,YAAS,IACVmU,EAAgB5vB,UAAW,kBAAe,IAC7CE,GACIwb,WACDkU,EAAgB5vB,UAAW,cAAW,IACzCE,GACIwb,WACDkU,EAAgB5vB,UAAW,gBAAa,IAC3CE,GACIwb,WACDkU,EAAgB5vB,UAAW,aAAU,IACxCE,GACIwb,WACDkU,EAAgB5vB,UAAW,cAAW,IACzCE,GACIwb,WACDkU,EAAgB5vB,UAAW,gBAAa,IAC3CE,GACIwb,WACDkU,EAAgB5vB,UAAW,oBAAiB,IAC/CE,GACIub,WAAS,OACVmU,EAAgB5vB,UAAW,gBAAa,IAC3CE,GACIub,WAAS,OACVmU,EAAgB5vB,UAAW,cAAW,IACzCE,GACI2kC,kBAAiBpV,IAClBG,EAAgB5vB,UAAW,cAAW,IACzCE,GACIub,WAAS,KACVmU,EAAgB5vB,UAAW,YAAS,IACvCE,GACIub,WAAS,MACVmU,EAAgB5vB,UAAW,aAAU,IACxCE,GACIub,YAAS,IACVmU,EAAgB5vB,UAAW,sBAAmB,IACjDE,GACIub,YAAS,IACVmU,EAAgB5vB,UAAW,sBAAmB,IACjDE,GACIub,WAAS,UACVmU,EAAgB5vB,UAAW,YAAS,IACvCE,GACIub,WAAS,UACVmU,EAAgB5vB,UAAW,YAAS,IACvCE,GACIub,WAAS,KACVmU,EAAgB5vB,UAAW,eAAY,IAC1CE,GACIub,WAAS,MACVmU,EAAgB5vB,UAAW,gBAAa,IAC3CE,GACIub,WAAS,OACVmU,EAAgB5vB,UAAW,cAAW,IACzCE,GACIub,WAAS,OACVmU,EAAgB5vB,UAAW,cAAW,IACzCE,GACIub,YAAS,IACVmU,EAAgB5vB,UAAW,iBAAc,IAC5CE,GACIub,WAAS,OACVmU,EAAgB5vB,UAAW,iBAAc,IAC5CE,GACIub,WAAS,OACVmU,EAAgB5vB,UAAW,aAAU,IACxCE,GACIub,YAAS,IACVmU,EAAgB5vB,UAAW,cAAW,IACzCE,GACIub,YAAS,IACVmU,EAAgB5vB,UAAW,eAAY,IAC1CE,GACIub,YAAS,IACVmU,EAAgB5vB,UAAW,gBAAa,IAC3CE,GACIub,WAAS,UACVmU,EAAgB5vB,UAAW,qBAAkB,IAChDE,GACIub,WAAS,OACVmU,EAAgB5vB,UAAW,kBAAe,IAC7CE,GACIub,gBACDmU,EAAgB5vB,UAAW,qBAAkB,IAChDE,GACIwb,WACDkU,EAAgB5vB,UAAW,WAAQ,IACtCE,GACIwb,WACDkU,EAAgB5vB,UAAW,YAAS,IACvCE,GACIwb,WACDkU,EAAgB5vB,UAAW,aAAU,IACxCE,GACIwb,WACDkU,EAAgB5vB,UAAW,YAAS,IACvCE,GACIwb,WACDkU,EAAgB5vB,UAAW,WAAQ,IACtC4vB,EAAkB1vB,GACdyb,yBACDiU,IAELtuB,GC36IEnC,EAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,EAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HjB,GAAvHkB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOf,OAAOoB,yBAAyBP,EAAQC,GAAOC,CACrH,IAAuB,gBAAZM,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASV,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIQ,GAAIX,EAAWM,OAAS,EAAGK,GAAK,EAAGA,KAASzB,EAAIc,EAAWW,MAAIJ,GAAKH,EAAI,EAAIlB,EAAEqB,GAAKH,EAAI,EAAIlB,EAAEe,EAAQC,EAAKK,GAAKrB,EAAEe,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKnB,OAAOwB,eAAeX,EAAQC,EAAKK,GAAIA,GAe5DokC,GAAM,GAAIniC,OAAOsN,UACjB80B,GAAQ,GAAIpiC,OAAOyN,WACnB40B,GAAO,GAAIriC,OAAO2L,cAClBrN,EAAO,eAWPgkC,EAAQ,gBAORC,GAAqB,QAAS,QAAS,UAG3C,SAAWC,GAEP,QAASC,GAAgBC,EAAWhjC,EAAKC,EAAKM,EAAW0iC,EAAYC,GAE7DzlC,KAAK2C,YAOT,IAAIkI,GACA66B,EAAkB,IAAPD,EACXE,KACAC,IACJ/6B,IAAUtI,EAAIob,gBAAgB,EAE9B,KADA,GAAIrY,IAAQ9C,EAAImb,gBAAgB,GACzBrY,GAAOuF,GACV+6B,EAAgB77B,KAAKc,GACrB86B,EAAU57B,KAAKjH,EAAU0O,WAAW,GAAI3O,MAAKgI,IAAU+G,OAAQ4zB,EAAY19B,KAAM,UACjF+C,GAAS66B,CAGb,QAAS1wB,WAAY4wB,EAAiBC,KADxB7E,WAASC,WAAWsE,EAAWI,EAAW,MAAM,IAGlEN,EAAeC,gBAAkBA,GAClCD,mBAAmBA,qBACtB,IAAIS,GAAqC,SAAUrkC,GAE/C,QAASqkC,KACL,MAAkB,QAAXrkC,GAAmBA,EAAOmuB,MAAM5vB,KAAMU,YAAcV,KAuB/D,MAzBAX,GAAUymC,EAAqBrkC,GAI/BrB,GACIub,WAAS,QACVmqB,EAAoB5lC,UAAW,UAAO,IACzCE,GACIub,WAAS,UACVmqB,EAAoB5lC,UAAW,YAAS,IAC3CE,GACIub,WAAS,SACVmqB,EAAoB5lC,UAAW,WAAQ,IAC1CE,GACIub,WAAS,oBACVmqB,EAAoB5lC,UAAW,mBAAgB,IAClDE,GACIub,WAAS,SACVmqB,EAAoB5lC,UAAW,WAAQ,IAC1CE,GACIub,WAAS,WACVmqB,EAAoB5lC,UAAW,aAAU,IAC5CE,GACIub,WAAS,WACVmqB,EAAoB5lC,UAAW,aAAU,IACrC4lC,GACTjW,iBAaEkW,EAA4B,SAAUtkC,GAStC,QAASskC,GAAWrkC,EAASC,GACzB,GAAIC,GAAQH,EAAOI,KAAK7B,KAAM0B,EAASC,IAAY3B,IAUnD,OATA4B,GAAMsuB,iBACNtuB,EAAMgkC,mBACNhkC,EAAMokC,yBACNpkC,EAAM2f,mBAAqB,KAC3B3f,EAAMO,WAAY,EAClBP,EAAMM,eAAgB,EACtBN,EAAM6f,gBAAkB,GACxB7f,EAAMqK,WAAarK,EAAM4B,gBACzB5B,EAAMqkC,YAAcvkC,EACbE,EA+1EX,MAl3EAvC,GAAU0mC,EAAYtkC,GA2BtBskC,EAAW7lC,UAAU6O,UAAY,WAC7B/O,KAAKkmC,cACDjZ,MAAO,QACPD,OAAQ,SACR1nB,IAAK,MACL6nB,IAAK,MACL9nB,KAAM,OACN8gC,KAAM,YACNC,GAAI,UACJC,KAAM,YACNC,MAAO,aACP5b,KAAM,gBACNC,MAAO,eAEX3qB,KAAK6xB,aAAe7xB,KAAK2B,QAAQe,WAAU,GAC3CsE,eAAahH,KAAK6xB,eAAgB1wB,EAjI5B,YADA,UAmINnB,KAAKkiB,aAAeliB,KAAK2B,QACzB3B,KAAK4xB,WAAa,KAClB5xB,KAAKumB,YAAcjiB,UAAQtE,KAAK2B,QAAS,QACZ,mBAAzB3B,KAAK2B,QAAQmlB,UACb9mB,KAAK4xB,WAAa5xB,KAAK2B,QAAQmlB,QAC/B9mB,KAAKkiB,aAAeliB,KAAKqE,cAAc,SACvCrE,KAAK2B,QAAQ0G,YAAYrI,KAAKkiB,eAElCliB,KAAKgE,SAAWhE,KAAK2B,QAAQsC,aAAa,YAAcjE,KAAK2B,QAAQuC,aAAa,YAAc,IAChGlE,KAAK2B,QAAQiX,gBAAgB,YAC7B5Y,KAAKumC,oBACD1a,SAAUvE,SAASyC,OAI3Bgc,EAAW7lC,UAAUmC,OAAS,WAC1BrC,KAAK8hB,aACL9hB,KAAKwmC,qBACLxmC,KAAKkjB,+BACLljB,KAAKymC,mBACLzmC,KAAKsc,YACLtc,KAAK0mC,mBACL1mC,KAAK+hB,aACL/hB,KAAK2mC,kBACL3mC,KAAK6nB,SAAS7nB,KAAK4mC,kBAAkB5mC,KAAKkG,SACtClG,KAAK8iB,YAAe9iB,KAAKkG,QAASlG,KAAKyhB,iBAA4C,WAAxBzhB,KAAKuiB,gBAAgCviB,KAAKuiB,gBAAmBviB,KAAKmjB,cAC7HnjB,KAAKojB,iBAAiBpjB,KAAKyhB,iBAC3BzhB,KAAK6mC,gBAAgB7mC,KAAKyhB,kBAE9BzhB,KAAK8mC,OAAS9mC,KAAKkiB,aACnBliB,KAAKkiB,aAAa/d,aAAa,QAASnE,KAAKkiB,aAAahc,OAC1DlG,KAAK+mC,cAAgB/mC,KAAKgnC,cAAchnC,KAAKkiB,aAAahc,OACrDjD,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,WAE5FT,oBAAkBqB,UAAQtE,KAAK2B,QAAS,cAAgB2C,UAAQtE,KAAK2B,QAAS,YAAY4C,WAC3FvE,KAAKwE,SAAU,GAEnBxE,KAAK6c,kBAETkpB,EAAW7lC,UAAUumC,iBAAmB,WAChCzmC,KAAK0iB,UACA1iB,KAAK2iB,UACN3iB,KAAKkiB,aAAatJ,gBAAgB,YAItC9U,aAAW9D,KAAKkiB,cAAgBS,SAAY,KAEhD3iB,KAAKinC,kBAETlB,EAAW7lC,UAAU+mC,eAAiB,WAC7BjnC,KAAK0iB,YAAa1iB,KAAKmiB,cAAiBniB,KAAK2iB,SAQzC3iB,KAAKmiB,cACVnb,eAAahH,KAAKmiB,aAAaC,YAhL5B,eAwK6B,KAA5BpiB,KAAKkiB,aAAahc,MAClBc,eAAahH,KAAKmiB,aAAaC,YAzKhC,eA4KCnb,YAAUjH,KAAKmiB,aAAaC,YA5K7B,gBAmLX2jB,EAAW7lC,UAAUymC,gBAAkB,WACnC3mC,KAAKknC,UAAUlnC,KAAKmnC,QAASnnC,KAAKonC,SAC7BnkC,oBAAkBjD,KAAKkG,SACxBlG,KAAKqnC,gBACLrnC,KAAK4mB,SAASjO,UACd3Y,KAAKuG,aAAevG,KAAK4mB,SAAW,MAElCrR,OAAOvV,KAAKkG,QAAyB,OAAflG,KAAKkG,OACxBlG,KAAKsnC,eAAetnC,KAAKkG,SAEtBlG,KAAK2kB,YACL3kB,KAAKunC,aAETvnC,KAAKwnC,UAAY,KACjBxnC,KAAKonC,QAAUpnC,KAAKgnC,cAAchnC,KAAKonC,SACvCpnC,KAAKmnC,QAAUnnC,KAAKgnC,cAAchnC,KAAKmnC,SACvCnnC,KAAK4lC,gBAAkB5lC,KAAKkwB,iBAC5BlwB,KAAKknC,UAAUlnC,KAAKmnC,QAASnnC,KAAKonC,WAI9CrB,EAAW7lC,UAAU2sB,oBAAsB,SAAUvsB,EAAQ8yB,GACzD,GAAI9Y,GAAOha,EAAO4D,aAAa,QAAU5D,EAAO4D,aAAa,QAAU5D,EAAO4D,aAAa,KAC3FkvB,GAAMjvB,aAAa,OAAQmW,GAC3Bha,EAAOsY,gBAAgB,OAEvB,KAAK,GADD9U,IAAc,WAAY,gBAAiB,QACtC9C,EAAI,EAAGA,EAAI8C,EAAWnD,OAAQK,IACnC,IAAIiC,oBAAkB3C,EAAO4D,aAAaJ,EAAW9C,KAArD,CAGA,GAAIssB,GAAOhtB,EAAO4D,aAAaJ,EAAW9C,GAC1CoyB,GAAMjvB,aAAaL,EAAW9C,GAAIssB,GAClChtB,EAAOsY,gBAAgB9U,EAAW9C,MAG1C+kC,EAAW7lC,UAAU4hB,WAAa,WAC9B9hB,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAC/ChD,KAAKynC,eAAiB,GAAI1kC,wBAAqB,MAC/C/C,KAAK0nC,kBACL1nC,KAAK6iB,kBAAkB7iB,KAAKkG,OAE5BlG,KAAKmD,eAAgB+C,MAAOlG,KAAKmG,eAAe,GAAItD,MAAK7C,KAAK2nC,aAAa3nC,KAAKkG,WAAY,GAC5FlG,KAAKmD,eAAgBZ,IAAKvC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAK2nC,aAAa3nC,KAAKuC,SAAU,GACxFvC,KAAKmD,eAAgBX,IAAKxC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAK2nC,aAAa3nC,KAAKwC,SAAU,GACxFxC,KAAKmD,eAAgBykC,SAAU5nC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAK2nC,aAAa3nC,KAAK4nC,cAAe,GAC1E,OAApB5nC,KAAK4xB,YACL5xB,KAAK6sB,oBAAoB7sB,KAAK2B,QAAS3B,KAAKkiB,cAEhDliB,KAAKqoB,+BACLroB,KAAK6nC,iBAAgB,EACrB,IAAIC,IAAe3kB,YAAanjB,KAAKmjB,YACrCnjB,MAAK8jB,KAAO,GAAIpY,QAAK,aAAco8B,EAAY9nC,KAAKgD,QACpDhD,KAAKmD,eAAgBggB,YAAanjB,KAAKmjB,aAAenjB,KAAK8jB,KAAKzY,YAAY,iBAAkB,GAC9FrL,KAAKwnC,UAAYxnC,KAAKmG,eAAenG,KAAKkG,OAC1ClG,KAAKmnC,QAAUnnC,KAAKmG,eAAenG,KAAKuC,KACxCvC,KAAKonC,QAAUpnC,KAAKmG,eAAenG,KAAKwC,KACxCxC,KAAK+nC,WAAa/nC,KAAKgoC,cAAgBhoC,KAAKioC,gBAAiB,EAC7DjoC,KAAK6zB,YAAc7zB,KAAKkoC,iBAAmBloC,KAAKmoC,SAAW,KACtDllC,oBAAkBjD,KAAK2B,QAAQuC,aAAa,QAO7ClE,KAAK2B,QAAQiH,GAAKkM,cAAY,kBACN,OAApB9U,KAAK4xB,YACL9tB,aAAW9D,KAAKkiB,cAAgBtZ,GAAM5I,KAAK2B,QAAQiH,GAAK,YARpC,OAApB5I,KAAK4xB,aACL5xB,KAAKkiB,aAAatZ,GAAK5I,KAAK2B,QAAQuC,aAAa,MAAQ,UAU7DjB,oBAAkBjD,KAAKkiB,aAAahe,aAAa,UACjDJ,aAAW9D,KAAKkiB,cAAgB5H,KAAQta,KAAK2B,QAAQiH,KAErD5I,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,oBAIpB+iB,EAAW7lC,UAAUwnC,gBAAkB,WACnC,GAAI1nC,KAAK4R,OACL,GAA2B,gBAAhB5R,MAAK4R,OACZ5R,KAAK+kB,aAAe/kB,KAAK4R,WAExB,IAAK3O,oBAAkBjD,KAAK4R,OAAON,WAAsC,KAAzBtR,KAAK4R,OAAON,SAK7DtR,KAAK+kB,aAAe/kB,KAAK8C,UAAUyiB,gBAAiBzd,KAAM,OAAQwJ,SAAU,cALE,CAC9E,GAAIkc,GAAiBxtB,KAAK4R,OAAON,QACjCtR,MAAK+kB,aAAe/kB,KAAK8C,UAAUyiB,gBAAiBzd,KAAM,OAAQwJ,SAAUkc,QAOhFxtB,MAAK+kB,aAAe,MAG5BghB,EAAW7lC,UAAUiG,eAAiB,SAAUD,GAC5C,OAASjD,oBAAkBiD,IAAUA,YAAiBrD,QAAS0S,OAAOrP,GAAUA,EAAQ,MAE5F6/B,EAAW7lC,UAAUsmC,mBAAqB,WACtC,GAAI4B,GAAyBpoC,KAAKwc,SAC9BwH,GAAoBhkB,KAAK8iB,UACxB7f,qBAAkBjD,KAAKwc,WAA+B,KAAlBxc,KAAKwc,WAC1C4rB,EAA0BpoC,KAAKwc,SAASS,QAAQ,OAAQ,KAAMC,QAElEld,KAAKmiB,aAAeH,QAAMiB,aACtBthB,QAAS3B,KAAKkiB,aACd+B,gBAAiBD,EACjBzB,eAAgBviB,KAAKuiB,eACrB2B,YACIvB,SAAU3iB,KAAK2iB,SACfQ,YAAanjB,KAAKmjB,YAClB3G,SAAU4rB,EACV5jC,QAASxE,KAAKwE,QACdb,UAAW3D,KAAK2D,UAChBwgB,gBAAiBnkB,KAAKmkB,iBAE1B9B,SAAU,4CACXriB,KAAKqE,eACRrE,KAAKmiB,aAAaC,UAAUxb,MAAM0d,MAAQtkB,KAAKqkB,SAASrkB,KAAKskB,OAC7DxgB,aAAW9D,KAAKkiB,cACZmmB,oBAAqB,OAAQvH,SAAY,IACzCtd,gBAAiB,QAAS/a,KAAQ,WAAYgb,aAAgB,MAC9DC,YAAe,MAAOC,eAAkB,MAAOC,WAAc,QAC7Dzc,gBAAiB,QAAS0c,eAAgB,UAEzC7jB,KAAKsoC,cAActoC,KAAKuoC,aACzBvmB,QAAMuC,eAAgB3d,MAAS5G,KAAKuoC,YAAcvoC,KAAKkiB,cAE3Djb,YAAUjH,KAAKmiB,aAAaC,WA5UjB,mBA8Uf2jB,EAAW7lC,UAAUsoC,sBAAwB,WACzC,GAEIC,GAFU,GAAI1lC,wBAAqB/C,KAAKgD,QAEnBuiB,gBAAiBjU,SAAU,OAOpD,OANItR,MAAKsoC,cAActoC,KAAK+kB,cACb0jB,EAAa,IAAMzoC,KAAK0oC,WAAW,QAGnC1oC,KAAK+kB,cAIxBghB,EAAW7lC,UAAU2iB,kBAAoB,SAAU3c,GAC/C,GAAIyiC,IAAY,CAChB,IAAqB,gBAAVziC,KAAuBjD,oBAAkBiD,GAAQ,CACxD,GAAIuf,GAAcvf,CACS,iBAAhBuf,KACPA,EAAcA,EAAYvI,OAE9B,IAAI0rB,GAAkB,KAClBC,EAAW,IAuBf,IAtBqB,gBAAV3iC,GACPuf,EAAcvf,EAAMY,WAEE,gBAAVZ,KACP,mBAAqB0f,KAAK1f,KAC3B0iC,EAAkB5oC,KAAK8oC,eAAe9oC,KAAKgnC,cAAc9gC,IACrDjD,oBAAkB2lC,KAClBA,EAAkB5oC,KAAKmG,eAAenG,KAAK8C,UAAUyO,UAAUkU,GAC3D7T,OAAQ5R,KAAKwoC,wBAAyB1gC,KAAM,cAE5C7E,oBAAkB2lC,KAClBA,EAAkB5oC,KAAKmG,eAAenG,KAAK8C,UAAUyO,UAAUkU,GAC3D7T,OAAQ5R,KAAK+kB,aAAcjd,KAAM,WAAYwJ,SAAU,aAM3Eu3B,EAAW7oC,KAAK8C,UAAUyO,UAAUkU,GAChC7T,OAAQ5R,KAAKwoC,wBAAyB1gC,KAAM,aAEhD8gC,GAAoB3lC,oBAAkB4lC,IAAaA,YAAoBhmC,QAAS0S,OAAOszB,GAAaA,EAAW,KAC3G5lC,oBAAkB2lC,IAAoBnjB,EAAYxI,QAAQ,MAAO,IAAItc,OAAQ,CAC7E,GACIglB,GAAiB,IAIrBA,GAAiB,8IAFF,kJAGIC,KAAKH,KAAiBE,EAAeC,KAAKH,IACrD,mBAAqBG,KAAK1f,IAAWqP,OAAO,GAAI1S,MAAK,GAAK4iB,IAC9DkjB,GAAY,EAGZC,EAAkB,GAAI/lC,MAAK,GAAK4iB,GAGpCkjB,GACK3oC,KAAK2kB,aACN3kB,KAAKuhB,mBAAqBkE,GAE9BzlB,KAAKmD,eAAgB+C,MAAO,OAAQ,GACpClG,KAAKwnC,UAAY,OAGjBxnC,KAAKmD,eAAgB+C,MAAO0iC,IAAmB,GAC/C5oC,KAAKwnC,UAAYxnC,KAAKkG,SAIlC6/B,EAAW7lC,UAAUwW,gBAAkB,WACnC,GAAIC,KAIJ,OAHI3W,MAAK8iB,YACLnM,EAAQ5M,MAAO6M,MAAO5W,MAAO6W,OAAQ,mBAElCF,GAGXovB,EAAW7lC,UAAUwoC,WAAa,SAAU5gC,GAQxC,MANoB,OAAhB9H,KAAKgD,QAAmC,UAAhBhD,KAAKgD,OACPuG,WAAS,oBAAqBC,0BAG9BxJ,KAAK+oC,qBAAqBr/B,WAAU,GAAK1J,KAAKgD,SAK5E+iC,EAAW7lC,UAAUyY,QAAU,WAC3B3Y,KAAK+nB,OACL/nB,KAAK6mB,cACL,IAAImiB,IACAX,oBAAqB,OAAQvH,SAAY,IACzCtd,gBAAiB,QAAS/a,KAAQ,WAAYgb,aAAgB,MAC9DC,YAAe,MAAOC,eAAkB,MAAOC,WAAc,QAC7Dzc,gBAAiB,OAAQ0c,eAAgB,QAEzC7jB,MAAKkiB,eACLF,QAAMwK,iBAAiBwc,EAAehpC,KAAKkiB,cACnB,OAApBliB,KAAK4xB,YACL5xB,KAAKmiB,aAAaC,UAAUiH,cAAchhB,YAAYrI,KAAKkiB,cAE1Djf,oBAAkBjD,KAAK6xB,aAAa3tB,aAAa,aAIlDlE,KAAKkiB,aAAatJ,gBAAgB,YAHlC5Y,KAAKkiB,aAAa/d,aAAa,WAAYnE,KAAKgE,UAKpDhE,KAAK0sB,uBACL1sB,KAAKipC,eAAejpC,KAAKkiB,eACzBliB,KAAKkiB,aAAaze,UAAU4T,OAAO,WAC/BpU,oBAAkBjD,KAAK6xB,aAAa3tB,aAAa,cACjD8d,QAAMoM,YAAW,EAAMpuB,KAAKkiB,aAAcliB,KAAKuiB,iBAGnDviB,KAAKmiB,aAAaC,WAClB/X,SAAOrK,KAAKmiB,aAAaC,WAE7BpiB,KAAKmiB,aAAeniB,KAAKuG,aAAevG,KAAK6xB,iBAAepa,GAC5DzX,KAAKkwB,cAAgBlwB,KAAK4lC,gBAAkB5lC,KAAKgmC,yBAC5C/iC,oBAAkBjD,KAAKkpC,WACxBlpC,KAAKkpC,WAETznC,EAAOvB,UAAUyY,QAAQ9W,KAAK7B,MAC1BA,KAAKumB,aACL1a,eAAawL,OAAOrX,KAAKumB,YAAa,QAASvmB,KAAK0c,kBAExD1c,KAAKkpC,SAAW,KAChBlpC,KAAKumC,mBAAqB,KAC1BvmC,KAAKka,gBAAkB,KACvBla,KAAK+gC,QAAU,KACf/gC,KAAKkwB,cAAgB,MAEzB6V,EAAW7lC,UAAUwsB,qBAAuB,WAExC,IAAK,GADDyc,MACKnoC,EAAI,EAAGA,EAAIhB,KAAKkiB,aAAape,WAAWnD,OAAQK,IACrDmoC,EAAanoC,GAAKhB,KAAKkiB,aAAape,WAAW9C,GAAGsZ,IAEtD,KAAStZ,EAAI,EAAGA,EAAImoC,EAAaxoC,OAAQK,IAChCiC,oBAAkBjD,KAAK6xB,aAAa3tB,aAAailC,EAAanoC,MAO/DhB,KAAKkiB,aAAatJ,gBAAgBuwB,EAAanoC,IACT,UAAlCmoC,EAAanoC,GAAGsI,gBAChBtJ,KAAKkiB,aAAahc,MAAQ,MAR9BlG,KAAKkiB,aAAa/d,aAAaglC,EAAanoC,GAAIhB,KAAK6xB,aAAa3tB,aAAailC,EAAanoC,KACtD,UAAlCmoC,EAAanoC,GAAGsI,gBAChBtJ,KAAKkiB,aAAahc,MAAQlG,KAAK6xB,aAAa3tB,aAAailC,EAAanoC,OAYtF+kC,EAAW7lC,UAAUmnC,cAAgB,WACjCrnC,KAAKuG,aAAevG,KAAKqE,cAAc,OACnCqD,UAAWvG,EAAO,WAClB0G,OAASe,GAAM5I,KAAK2B,QAAQiH,GAAK,SAAUhC,MAAS,uBAEnD3D,oBAAkBjD,KAAKwc,YACxBxc,KAAKuG,aAAamB,WAAa,IAAM1H,KAAKwc,WAEzCvZ,oBAAkBjD,KAAKylC,OAASzlC,KAAKylC,KAAO,IAC7CzlC,KAAKopC,eACLC,UAAQrpC,KAAKspC,aAActpC,KAAKuG,eAEpCvG,KAAKupC,eACLvpC,KAAKq1B,cACLhrB,SAAOrK,KAAKuG,eAEhBw/B,EAAW7lC,UAAUspC,eAAiB,WAClC,GAAI9J,GAAS/4B,SAxfA,QAwfyB,IAClC8iC,EAAczpC,KAAKuG,aAAao5B,wBAAwBD,MAC5D,OAAO+J,GAAc/J,EAASA,EAAS+J,GAE3C1D,EAAW7lC,UAAUkpC,aAAe,WAChCppC,KAAKslC,kBACLtlC,KAAKohC,gBACL,IAAIsI,IAAgB1hC,SAAU,IAAKC,SAAU,eAC7CjI,MAAKkpC,SAAWnhC,eAAa/H,KAAKspC,YAAaI,GAC/C1pC,KAAKkwB,cAAgBlwB,KAAKspC,YAAYl/B,iBAAiB,iBAE3D27B,EAAW7lC,UAAUm1B,YAAc,WAC/B,GAAIzzB,GAAQ5B,IACZA,MAAK2pC,eAAiB3pC,KAAKmiB,aAAaC,UAAUud,wBAClD3/B,KAAK4mB,SAAW,GAAIqD,SAAMjqB,KAAKuG,cAC3B+d,MAAOtkB,KAAK4pC,cAAc5pC,KAAKskB,OAC/Bzd,OAAQ7G,KAAK6G,OACb2jB,WAAY,WACZJ,SAAUxmB,UAAQC,UAAawmB,EAAG,SAAUC,EAAG,WAAeD,EAAG,OAAQC,EAAG,UAC5EG,UAAW7mB,UAAQC,UAAawmB,EAAG,MAAOC,EAAG,QAAYD,EAAG,OAAQC,EAAG,QACvE3mB,UAAW3D,KAAK2D,UAChBwmB,SAAUvmB,UAAQC,SAAWyjB,SAASyC,KAAO/pB,KAAKmiB,aAAaC,UAC/DmI,QA1fI,EA2fJG,KAAM,WACF9oB,EAAM2E,aAAaK,MAAMijC,WAAa,UACtC5iC,YAAUrF,EAAMugB,aAAaE,QAAQ,IAzgBtC,aA0gBAsI,MAAO,WACN3jB,eAAapF,EAAMugB,aAAaE,QAAQ,IA3gBzC,YA4gBCzgB,EAAMy/B,mBACNz/B,EAAMsgB,aAAatJ,gBAAgB,yBACnCvB,SAAOzV,EAAMglB,SAASjlB,SACtBC,EAAMglB,SAASjO,UACf/W,EAAM2E,aAAaqE,UAAY,GAC/BhJ,EAAM0nC,YAAc1nC,EAAM2E,aAAe3E,EAAMm/B,YAAUtpB,IAC1DqT,mBAAoB,WACdlnB,UAAQC,UACTjC,EAAMmmB,UAIbnkB,UAAQC,WACT7D,KAAK4mB,SAAS6D,WAAcJ,EAAG,OAAQC,EAAG,SAE9CtqB,KAAK4mB,SAASjlB,QAAQiF,MAAMkjC,UAniBf,SAsiBjB/D,EAAW7lC,UAAU0mC,kBAAoB,SAAU1gC,GAC/C,MAAIjD,qBAAkBjD,KAAKmG,eAAeD,IAC/B,KAGAlG,KAAK8C,UAAU0O,WAAWtL,GAASoL,SAAU,SAAUxJ,KAAM,UAG5Ei+B,EAAW7lC,UAAU8mC,cAAgB,SAAU/8B,GAC3C,IAAKjK,KAAKsoC,cAAcr+B,GAAO,CAC3B,GAAI4a,GAAY7kB,KAAK+pC,cAAc9/B,GAC/B/D,GAASlG,KAAKsoC,cAActoC,KAAKwnC,UACrC,IAAIxnC,KAAKmG,eAAe0e,GAAY,CAChC,GAAIlW,GAAOzI,EAAQlG,KAAKwnC,UAAUr3B,UAAY60B,EAC1ChxB,EAAQ9N,EAAQlG,KAAKwnC,UAAUl3B,WAAa20B,EAC5CrwB,EAAO1O,EAAQlG,KAAKwnC,UAAUh5B,cAAgB02B,CAClD,OAAO,IAAIriC,MAAK+R,EAAMZ,EAAOrF,EAAMkW,EAAUrU,WAAYqU,EAAUpU,aAAcoU,EAAUnU,eAGnG,MAAO,OAEXq1B,EAAW7lC,UAAUgjB,6BAA+B,WAChD,IAAKjgB,oBAAkBjD,KAAKioB,gBACxB,IAAK,GAAIte,GAAK,EAAGC,EAAKnK,OAAOoK,KAAK7J,KAAKioB,gBAAiBte,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC1E,GAAIpJ,GAAMqJ,EAAGD,EACb,IAAIy7B,EAAkBpyB,QAAQzS,IAAQ,EAClC,GAAY,UAARA,EAAiB,CACjB,GAAIypC,GAAuBhqC,KAAKioB,eAAe,GAAK1nB,GAAK0c,QAAQ,OAAQ,KAAMC,MACnD,MAAxB8sB,GACA/iC,YAAUjH,KAAKmiB,aAAaC,WAAY4nB,EAAoBt8B,MAAM,UAGrE,IAAY,UAARnN,EAAiB,CACtB,GAAI0pC,GAAYjqC,KAAKmiB,aAAaC,UAAUle,aAAa3D,EACzD0pC,GAAahnC,oBAAkBgnC,GAC3BjqC,KAAKioB,eAAe,GAAK1nB,GADgB0pC,EAAYjqC,KAAKioB,eAAe,GAAK1nB,GAElFP,KAAKmiB,aAAaC,UAAUje,aAAa5D,EAAK0pC,OAG9CjqC,MAAKmiB,aAAaC,UAAUje,aAAa5D,EAAKP,KAAKioB,eAAe,GAAK1nB,MAM3FwlC,EAAW7lC,UAAUmoB,6BAA+B,WAChD,IAAKplB,oBAAkBjD,KAAKioB,gBACxB,IAAK,GAAIte,GAAK,EAAGC,EAAKnK,OAAOoK,KAAK7J,KAAKioB,gBAAiBte,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC1E,GAAIpJ,GAAMqJ,EAAGD,EACTy7B,GAAkBpyB,QAAQzS,GAAO,GACjCP,KAAKkiB,aAAa/d,aAAa5D,EAAKP,KAAKioB,eAAe,GAAK1nB,MAK7EwlC,EAAW7lC,UAAUooB,eAAiB,SAAU4hB,EAAaC,GACpDlnC,oBAAkBknC,KACnBA,EAAeA,EAAYltB,QAAQ,OAAQ,KAAMC,QAEhDja,oBAAkBinC,KACnBA,EAAeA,EAAYjtB,QAAQ,OAAQ,KAAMC,QAErD8E,QAAMuG,YAAY2hB,GAAclqC,KAAKmiB,aAAaC,WAAY+nB,GAC1DnqC,KAAKuG,cACLyb,QAAMuG,YAAY2hB,GAAclqC,KAAKuG,cAAe4jC,IAG5DpE,EAAW7lC,UAAUkqC,iBAAmB,WACpCpjC,eAAahH,KAAKmiB,aAAaC,WA3mB3B,WA4mBJte,aAAW9D,KAAKkiB,cAAgB2B,eAAgB,WAEpDkiB,EAAW7lC,UAAU2mC,gBAAkB,SAAU1hB,GAC7C,GAAIjf,GAAQlG,KAAKgnC,cAAc7hB,EAC1BnlB,MAAKqqC,cAAcnkC,KAAWlG,KAAKuhB,oBACnCvhB,KAAK8iB,YAAc9iB,KAAKkiB,aAAahc,QAAUlG,KAAKyhB,gBACrDzhB,KAAKoqC,oBAGLnjC,YAAUjH,KAAKmiB,aAAaC,WArnB5B,WAsnBAte,aAAW9D,KAAKkiB,cAAgB2B,eAAgB,WAGxDkiB,EAAW7lC,UAAUwmC,iBAAmB,YAC/BzjC,oBAAkBjD,KAAKylC,OAASzlC,KAAKylC,KAAO,EAC7CzlC,KAAKipC,eAAejpC,KAAKmiB,aAAaE,QAAQ,KAG9CriB,KAAKsqC,mBAGbvE,EAAW7lC,UAAUoqC,gBAAkB,WACnCtqC,KAAKuqC,gBAAgBvqC,KAAKmiB,aAAaE,QAAQ,KAC/CriB,KAAK+nB,QAETge,EAAW7lC,UAAUqqC,eAAiB,SAAU5oC,GAC5CsF,WAAStF,EA1nBF,eA4nBXokC,EAAW7lC,UAAU+oC,cAAgB,SAAUtnC,GAC3CqF,cAAYrF,EA7nBL,eA+nBXokC,EAAW7lC,UAAUsqC,gBAAkB,WACnCxqC,KAAKkiB,aAAauoB,kBAAkB,EAAIzqC,kBAAmBkG,MAAMvF,SAErEolC,EAAW7lC,UAAUwqC,eAAiB,WAClC1qC,KAAKkiB,aAAauoB,kBAAmBzqC,kBAAmBkG,MAAMvF,OAASX,kBAAmBkG,MAAMvF,SAEpGolC,EAAW7lC,UAAUyqC,gBAAkB,WACnC,GAAIC,EACJ,IAAoB,OAAhB5qC,KAAKgD,QAAmC,UAAhBhD,KAAKgD,OAC7B4nC,EAAWrhC,WAAS,yBAA0BC,8BAE7C,CAGDohC,EAAWrhC,WADG,QACqBvJ,KAAKgD,OAFlB,2DAE4C0G,YAEtE,MAAOkhC,IAEX7E,EAAW7lC,UAAU2qC,mBAAqB,WACtC,GAAIzX,GAASpzB,KAAkB,aAC3B6K,EAAQ,EACRvF,EAAM,CAKV,OAJKiQ,OAAM6d,EAAM3K,kBACb5d,EAAQuoB,EAAM3K,eACdnjB,EAAM8tB,EAAM1K,eAEP7d,MAAOsK,KAAKC,IAAIvK,GAAQvF,IAAK6P,KAAKC,IAAI9P,KAEnDygC,EAAW7lC,UAAU4qC,iBAAmB,WACpC,MAAK7nC,qBAAkBjD,KAAKuG,cAIjB,KAHAvG,KAAKuG,aAAa6D,iBAAiB,cAMlD27B,EAAW7lC,UAAUooC,cAAgB,SAAUpiC,GAC3C,SAAIjD,oBAAkBiD,IAA4B,gBAAVA,IAAuC,KAAjBA,EAAMgX,SAOxE6oB,EAAW7lC,UAAUmkB,SAAW,SAAUC,GAUtC,MARIA,GADiB,gBAAVA,GACCgH,aAAWhH,GAEG,gBAAVA,GACHA,EAAMiH,MAAM,WAAcjH,EAAQgH,aAAWhH,GAG9C,QAIhByhB,EAAW7lC,UAAU0pC,cAAgB,SAAUtlB,GAM3C,OALAA,EAAQtkB,KAAKqkB,SAASC,IACZtR,QAAQ,MAAQ,IAEtBsR,GADiBtkB,KAAK2pC,eAAerlB,MAAQymB,WAAWzmB,GAAS,KAC9Cxd,WAAa,MAE7Bwd,GAEXyhB,EAAW7lC,UAAU8hC,kBAAoB,WACrC,GAAIrgC,GAAU3B,KAAKka,eACdjX,qBAAkBtB,GAGd3B,KAAKuG,cAAgBvG,KAAKmG,eAAenG,KAAK4nC,WACnD5nC,KAAKgrC,cAHLhrC,KAAKirC,cAActpC,IAM3BokC,EAAW7lC,UAAU+qC,cAAgB,SAAUtpC,GAC3C,GAAI6gC,GAAaxiC,KAAKwpC,iBAClB7G,EAAUhhC,EAAQ2gC,mBAClB5C,EAASiD,EAAUA,EAAQC,UAAYjhC,EAAQihC,UAC/CC,EAAWlhC,EAAQg+B,wBAAwBD,MAC1CA,GAAS/9B,EAAQihC,UAAaJ,EAC/BxiC,KAAKuG,aAAau8B,UAAYH,EAAWjD,GAAU8C,EAxsB5C,EAwsBwEK,EAxsBxE,GAwsBoGnD,EAG3G1/B,KAAKuG,aAAau8B,UAAY,GAGtCiD,EAAW7lC,UAAU8qC,YAAc,WAC/B,GAAIrpC,EACJ,IAAKsB,oBAAkBjD,KAAKuG,cASxBvG,KAAKuG,aAAau8B,UAAY,MATS,CACvC,GAAIoI,GAAQlrC,KAAKuG,aAAa6D,iBAAiB,eAC/C,IAAI8gC,EAAMvqC,OAAQ,CACd,GAAIwqC,GAAcnrC,KAAK4lC,gBAAgB,GACnCwF,EAAaprC,KAAKgnC,cAAchnC,KAAKmG,eAAenG,KAAK4nC,WAAWpuB,SACxE7X,GAAUupC,EAAM/1B,KAAKyL,OAAOwqB,EAAaD,IAA4B,IAAZnrC,KAAKylC,SAMjExiC,oBAAkBtB,GAInB3B,KAAKuG,aAAau8B,UAAY,EAH9B9iC,KAAKirC,cAActpC,IAM3BokC,EAAW7lC,UAAUmrC,QAAU,WAC3B,MAAQpoC,qBAAkBjD,KAAKmG,eAAenG,KAAKkG,QAAW,GAAKlG,KAAKuJ,SAASvJ,KAAKkG,QAE1F6/B,EAAW7lC,UAAUqJ,SAAW,SAAUrD,GACtC,MAAQjD,qBAAkBjD,KAAKmG,eAAeD,IAAW,KAAOlG,KAAK8C,UAAU0O,WAAWtL,GACtF0L,OAAQ5R,KAAKsrC,iBAAkBxjC,KAAM,UAG7Ci+B,EAAW7lC,UAAUqrC,eAAiB,WAQlC,MANoB,OAAhBvrC,KAAKgD,QAAmC,UAAhBhD,KAAKgD,OACjBuG,WAAS,oBAAqBC,0BAG9BxJ,KAAKwrC,qBAAqB9hC,WAAU,GAAK1J,KAAKgD,SAIlE+iC,EAAW7lC,UAAUorC,eAAiB,WAalC,MAXItrC,MAAKsoC,cAActoC,KAAK+kB,cACJ,OAAhB/kB,KAAKgD,QAAmC,UAAhBhD,KAAKgD,OACjBuG,WAAS,oBAAqBC,0BAG9BxJ,KAAK+oC,qBAAqBr/B,WAAU,GAAK1J,KAAKgD,QAInDhD,KAAK+kB,cAIxBghB,EAAW7lC,UAAUurC,cAAgB,WAQjC,MANoB,OAAhBzrC,KAAKgD,QAAmC,UAAhBhD,KAAKgD,OACjBuG,WAAS,qBAAsBC,0BAG/BD,WAAS,QAAevJ,KAAKgD,OAAS,gDAAiD0G,aAI3Gq8B,EAAW7lC,UAAUwrC,iBAAmB,SAAUxlC,GAC9C,MAAIjD,qBAAkBjD,KAAKmG,eAAeD,IAC/B,KAGAlG,KAAK8C,UAAU0O,WAAWtL,GAAS0L,OAAQ5R,KAAKyrC,gBAAiB3jC,KAAM,UAGtFi+B,EAAW7lC,UAAU2nB,SAAW,SAAU3hB,GACtC,GAAIoT,GAAOtZ,KAAKoG,WAAWF,EACtBlG,MAAK2kB,YAAe3kB,KAAKqqC,cAAc/wB,GAOpCtZ,KAAKsoC,cAAchvB,IACnBtZ,KAAKwnC,UAAY,KACjBxnC,KAAK49B,eAAe59B,KAAKkG,MAAOlG,KAAKuC,IAAKvC,KAAKwC,MAG/CxC,KAAKwnC,UAAYxnC,KAAK2rC,oBAAoBryB,IAXK,OAA/CtZ,KAAKmG,eAAenG,KAAKkoC,oBACzBloC,KAAKwnC,UAAYxnC,KAAKkoC,iBAAmB,MAE7CloC,KAAK49B,eAAe59B,KAAKkG,MAAOlG,KAAKuC,IAAKvC,KAAKwC,MAWnDxC,KAAKwiB,aAAY,EAAMxiB,KAAKwnC,YAEhCzB,EAAW7lC,UAAUyrC,oBAAsB,SAAUzlC,GACjD,MAAIjD,qBAAkBiD,GACX,KAEHA,IAAUlG,KAAKqrC,UAAarrC,KAAKgnC,cAAc9gC,GAASlG,KAAKgnC,cAAchnC,KAAKkG,QAE5F6/B,EAAW7lC,UAAU0rC,kBAAoB,WACrC5pB,QAAMkM,eAAeluB,KAAK8jB,KAAKzY,YAAY,eAAgBrL,KAAKkiB,eAGpE6jB,EAAW7lC,UAAUkjB,iBAAmB,SAAUld,GAC9C8b,QAAM6F,SAAS3hB,EAAOlG,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,kBAEvE4hB,EAAW7lC,UAAUwnB,qBAAuB,SAAU7a,GAClDA,EAAEmB,iBACFhO,KAAK2nB,eAAeC,kBAAkB,oBAE1Cme,EAAW7lC,UAAU2rC,aAAe,SAAUh/B,GACrC7M,KAAKwE,UAGNZ,UAAQC,UACR7D,KAAKkiB,aAAa/d,aAAa,WAAY,IAE/C0I,EAAEmB,iBACEhO,KAAK00B,cACL10B,KAAK8rC,WAAW,EAAGj/B,IAGnB7M,KAAKkiB,aAAazT,QAClBzO,KAAKgoB,KAAKnb,MAGlBk5B,EAAW7lC,UAAU6rC,iBAAmB,WAC/B/rC,KAAKwE,UAGLxE,KAAK2iB,WACN3iB,KAAKkiB,aAAauoB,kBAAkB,EAAG,GACvC5+B,eAAanI,IAAI1D,KAAKkiB,aAAc,UAAWliB,KAAKgmB,eAAgBhmB,SAG5E+lC,EAAW7lC,UAAU8lB,eAAiB,SAAUtL,GAC5C,IAAK1a,KAAK2iB,SAAU,CAEhB,GADAjI,EAAM1M,iBACFhO,KAAK8iB,WAKL,MAJApI,GAAM1M,qBACNhO,MAAK+iB,OAAO,oBACRC,OAAQ,kBAKZnX,gBAAawL,OAAOrX,KAAKkiB,aAAc,UAAWliB,KAAKgmB,eACvD,IAAIgmB,GAAShsC,KAAK6qC,oBACK,KAAjBmB,EAAOnhC,OAAemhC,EAAO1mC,MAAQtF,KAAKkiB,aAAahc,MAAMvF,SAC3DX,KAAKkiB,aAAahc,MAAMvF,OAAS,IACjCX,KAAKisC,cAAgBjsC,KAAKksC,kBAE9BlsC,KAAKkiB,aAAauoB,kBAAkBzqC,KAAKisC,cAAcphC,MAAO7K,KAAKisC,cAAc3mC,QAKjGygC,EAAW7lC,UAAUgsC,eAAiB,WAClC,GAAIC,GAAQ,GAAIC,QAAO,kBACnB1+B,EAAQ1N,KAAKkiB,aAAahc,MAAMwH,MAAM,GAC1CA,GAAM3D,KAAK,IACX,IAAIiiC,GAAShsC,KAAK6qC,qBACdhgC,EAAQ,EACRvF,EAAM,EACN+mC,GAAc,CAClB,IAAKrsC,KAAKioC,eAqBNp9B,EAAQmhC,EAAOnhC,MACfvF,EAAM0mC,EAAO1mC,IACbtF,KAAKioC,gBAAiB,MAtBtB,KAAK,GAAIjnC,GAAI,EAAGA,EAAI0M,EAAM/M,OAAQK,IAK9B,GAJKmrC,EAAMvmB,KAAKlY,EAAM1M,MAClBsE,EAAMtE,EACNqrC,GAAc,GAEdA,EAAa,CACb,GAAIL,EAAOnhC,OAASA,GAASmhC,EAAO1mC,KAAOA,EAAK,CAE5CA,EAAMA,EACNtF,KAAKioC,gBAAiB,CACtB,OAGAp9B,EAAQ7J,EAAI,EACZqrC,GAAc,EAU9B,OAASxhC,MAAOA,EAAOvF,IAAKA,IAEhCygC,EAAW7lC,UAAU4lB,aAAe,SAAUpL,GAC1C,IAAK1a,KAAK2iB,UAAY3iB,KAAKwE,QAIvB,OAHqB,UAAjBkW,EAAM5M,QAAuC,SAAjB4M,EAAM5M,QAAsC,QAAjB4M,EAAM5M,QAC7D4M,EAAM1M,iBAEF0M,EAAM5M,QACV,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,OACI9N,KAAK00B,gBACN10B,KAAKqnC,gBACLrnC,KAAK4mB,SAASjO,UACd3Y,KAAK4mB,SAAW5mB,KAAKuG,aAAe,OAEpCvG,KAAK8iB,YAAe9iB,KAAK2iB,UAAa3iB,KAAK00B,gBAC3Cha,EAAM1M,iBACNhO,KAAK+iB,OAAO,kBACRC,OAAQ,iBACRnW,EAAG6N,KAGN1a,KAAK8iB,aAAc9iB,KAAK00B,eACzB10B,KAAKssC,WAAW5xB,EAEpB,MACJ,KAAK,QACG1a,KAAK+nC,YACL/nC,KAAKka,gBAAkBla,KAAKkwB,cAAclwB,KAAK6zB,aAC/C7zB,KAAKkoC,iBAAmB,GAAIrlC,MAAK7C,KAAK4lC,gBAAgB5lC,KAAK6zB,cAC3D7zB,KAAK4yB,YAAY5yB,KAAKkoC,iBAAkBxtB,IAGxC1a,KAAK4yB,YAAY5yB,KAAKkiB,aAAahc,MAAOwU,GAE9C1a,KAAK+nB,OACL/nB,KAAK+nC,YAAa,EACd/nC,KAAK00B,eACLha,EAAMsM,iBAEV,MACJ,KAAK,OACDhnB,KAAKgoB,KAAKtN,EACV,MACJ,KAAK,SACD1a,KAAKojB,iBAAiBpjB,KAAKusC,YAAYvsC,KAAKkG,QACxClG,KAAK8iB,aACA9iB,KAAKkG,OACNlG,KAAKojB,iBAAiBpjB,KAAKyhB,iBAE/BzhB,KAAKwsC,cAETxsC,KAAKysC,cAAczsC,KAAKkG,OACxBlG,KAAK+nB,MACL,MACJ,KAAK,QACD/nB,KAAK+nB,MACL,MACJ,KAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,WACI/nB,KAAK00B,gBAAiB10B,KAAK8iB,YAAe9iB,KAAK2iB,YACN,IAArC3iB,KAAKkiB,aAAauG,gBAAwBzoB,KAAKkiB,aAAawG,eAAiB1oB,KAAKkiB,aAAahc,MAAMvF,QACrGX,KAAKkiB,aAAawG,eAAiB1oB,KAAKkiB,aAAahc,MAAMvF,QAA2B,QAAjB+Z,EAAM5M,QACtC,IAArC9N,KAAKkiB,aAAauG,gBAAyC,aAAjB/N,EAAM5M,QAA4C,SAAjB4M,EAAM5M,QAAsC,UAAjB4M,EAAM5M,SAC7G4M,EAAM1M,iBAEVhO,KAAK+iB,OAAO,kBAAoBC,OAAQ,iBACpCnW,EAAG6N,IAGX,MACJ,SACI1a,KAAK+nC,YAAa,IAKlChC,EAAW7lC,UAAU+/B,aAAe,SAAUvlB,GAC1C,GAAIpa,GAASoa,EAAMpa,OACf6/B,EAAKngC,KAAKka,gBAAkB5V,UAAQhE,EAAQ,eAChDN,MAAK0sC,aAAavM,EAAIzlB,GAClBylB,GAAMA,EAAG18B,UAAUmI,SA/9Bf,gBAg+BJ5L,KAAK+nB,QAGbge,EAAW7lC,UAAU4rC,WAAa,SAAUa,EAAO9/B,GAC/C,GAAIjL,GAAQ5B,IACZ,IAAIA,KAAK00B,eAAiB10B,KAAKuG,aAAc,CACzC,GAAIqQ,IACA+U,MAAO3rB,KAAK4mB,SACZlM,MAAO7N,GAAK,KACZ+e,QAAQ,EACRtR,KAAM,OAEVtT,gBAAasgB,SAASyC,MAz+BnB,mBA0+BH/pB,KAAKua,QAAQ,QAAS3D,EAAM,SAAUA,GAClC,IAAKA,EAAKgV,OAAQ,CACd,GAAIghB,IACAtyB,KAAM,UACNtS,SA/+BA,GAg/BA2kC,MAAOA,GAAgB,EAE3B/qC,GAAMglB,SAASmB,KAAK,GAAIkE,aAAU2gB,IAClC5lC,eAAapF,EAAMugB,aAAaC,YAz/BhC,gBA0/BAte,aAAWlC,EAAMsgB,cAAgBsB,gBAAiB,UAClD5hB,EAAMsgB,aAAatJ,gBAAgB,aACnChX,EAAMsgB,aAAatJ,gBAAgB,yBACnC/M,eAAawL,OAAOiQ,SAAU,uBAAwB1lB,EAAMirC,sBAE5DjpC,UAAQC,UAAYjC,EAAM6E,QAC1B7E,EAAM6E,MAAMG,MAAMojB,QAAU,OAC5BpoB,EAAM6E,MAAM4lB,UAAY,GACxBzqB,EAAM6E,MAAQ,MAEd7C,UAAQC,WACHZ,oBAAkBrB,EAAMkrC,uBACzBlrC,EAAMkrC,oBAAoBz1B,SAC1BzV,EAAMkrC,oBAAsB,OAGhClpC,UAAQC,UAAYjC,EAAM8gB,YAAc9gB,EAAM+gB,UAC9C/gB,EAAMsgB,aAAatJ,gBAAgB,kBAKvChV,WAAQC,UAAY7D,KAAK0iB,YAAc1iB,KAAK2iB,UAC5C3iB,KAAKkiB,aAAatJ,gBAAgB,aAI9CmtB,EAAW7lC,UAAU6sC,mBAAqB,WAClC/sC,KAAKuG,eACLvG,KAAKuG,aAAaK,MAAMijC,WAAa,SACrC7pC,KAAKuG,aAAaK,MAAMomC,IAAM,UAC9BhtC,KAAKuG,aAAaK,MAAMy/B,KAAO,UAC/BrmC,KAAKuG,aAAaK,MAAM0d,MAAQ,MAChCtkB,KAAKuG,aAAaK,MAAM84B,OAAS,QAGzCqG,EAAW7lC,UAAU+sC,iBAAmB,SAAUvyB,EAAOwyB,GACrD,GAAKltC,KAAK2kB,YAAe3kB,KAAKqqC,cAAcrqC,KAAKkoC,kBAY7C,GAAKgF,EAKA,CACD,GAAIhnC,GAAQlG,KAAKgnC,cAAc,GAAInkC,MAAK7C,KAAK4lC,gBAAgB5lC,KAAK6zB,gBAC7D7zB,KAAKmoC,WAAcjiC,GACpBlG,KAAKmtC,aAAazyB,EAAOxU,QAPxBlG,KAAKotC,YAAcptC,KAAKkiB,aAAahc,OAAUjD,oBAAkBjD,KAAKmG,eAAenG,KAAKkG,UAC3FlG,KAAKmtC,aAAazyB,EAAO1a,KAAK2rC,oBAAoB3rC,KAAKkiB,aAAahc,YAbzB,QAA/ClG,KAAKmG,eAAenG,KAAKkoC,oBACzBloC,KAAKwnC,UAAYxnC,KAAKkoC,iBAAmB,MAE7CloC,KAAKmD,eAAgB+C,MAAOlG,KAAK2rC,oBAAoB3rC,KAAKkiB,aAAahc,SAAU,GACjFlG,KAAKwnC,UAAYxnC,KAAKkoC,iBAAmBloC,KAAK2rC,oBAAoB3rC,KAAKkiB,aAAahc,OACpFlG,KAAKotC,UAAYptC,KAAKkiB,aAAahc,OAC9BlG,KAAKmoC,WAAcnoC,KAAKkG,OACzBlG,KAAK4e,YAAYlE,IAiB7BqrB,EAAW7lC,UAAUogC,YAAc,SAAU5lB,GACzC,GAAI2yB,GAAY/oC,UAAQoW,EAAMpa,OAAQ,eACtCN,MAAKstC,SAASD,EA7jCV,YA+jCRtH,EAAW7lC,UAAUotC,SAAW,SAAUnN,EAAIz4B,GACtC1H,KAAKwE,SAAWxE,KAAKutC,UAAUpN,KAAQA,EAAG18B,UAAUmI,SAASlE,KAC7D1H,KAAKwtC,YAAY9lC,GACjBT,YAAUk5B,GAAKz4B,GAjkCV,iBAkkCDA,GACAy4B,EAAGh8B,aAAa,gBAAiB,UAI7C4hC,EAAW7lC,UAAUwsC,aAAe,SAAUvM,EAAIzlB,GAC1C1a,KAAKutC,UAAUpN,KACfngC,KAAKoG,WAAW+5B,EAAGj8B,aAAa,eAC5BlE,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,iBAAkByqB,WAAW,IAG7CztC,KAAKka,gBAAkBimB,EACvBngC,KAAK6zB,YAAcj0B,MAAMM,UAAUiK,MAAMtI,KAAK7B,KAAKkwB,eAAeld,QAAQmtB,GAC1EngC,KAAKkoC,iBAAmB,GAAIrlC,MAAK7C,KAAK4lC,gBAAgB5lC,KAAK6zB,cAC3D5sB,YAAUjH,KAAKka,iBAplCZ,YAqlCHla,KAAKka,gBAAgB/V,aAAa,gBAAiB,QACnDnE,KAAKitC,iBAAiBvyB,GAAO,KAGrCqrB,EAAW7lC,UAAUqgC,aAAe,WAChCvgC,KAAKwtC,YAzlCD,YA2lCRzH,EAAW7lC,UAAUwtC,cAAgB,WACJ,eAAzB1tC,KAAKwD,iBAAoCI,UAAQC,UAIjD7D,KAAK+nB,QAGbge,EAAW7lC,UAAUgnC,UAAY,SAAUyG,EAAQC,GAC3C3qC,oBAAkBjD,KAAKmG,eAAewnC,MACtC3tC,KAAKmnC,QAAUnnC,KAAKgnC,cAAc,gBAElC/jC,oBAAkBjD,KAAKmG,eAAeynC,MACtC5tC,KAAKonC,QAAUpnC,KAAKgnC,cAAc,iBAI1CjB,EAAW7lC,UAAU09B,eAAiB,SAAUiQ,EAASF,EAAQC,GAC7D,GAAI1nC,GAAQ2nC,YAAmBhrC,MAAOgrC,EAAU7tC,KAAKgnC,cAAc6G,EAYnE,OAXK5qC,qBAAkBjD,KAAKmG,eAAeD,KAGhClG,KAAK+pC,cAAc/pC,KAAK4mC,kBAAkB5mC,KAAKmnC,WACpDnnC,KAAK+pC,cAAc/pC,KAAK4mC,kBAAkB5mC,KAAKonC,WACjDpnC,KAAKsqC,kBAJLuD,EAAU7tC,KAAK8tC,gBAAgB9tC,KAAKmnC,QAASnnC,KAAKonC,QAASyG,EAAS3nC,GAMpElG,KAAK2kB,aACLkpB,EAAU7tC,KAAKsnC,eAAeuG,GAAWA,EAAU,MAEvD7tC,KAAK6mC,gBAAgBgH,GACdA,GAEX9H,EAAW7lC,UAAUonC,eAAiB,SAAUphC,GAC5C,GAAIlG,KAAKgmC,sBAAsBrlC,OAAS,EAAG,CACvC,GAAIX,KAAKgmC,sBAAsBrlC,SAAWX,KAAK4lC,gBAAgBjlC,OAC3D,OAAO,CAGX,KAAK,GADD2Y,GAAOpT,YAAiBrD,MAAO7C,KAAKusC,YAAYrmC,GAASA,EACpDQ,EAAQ,EAAGA,EAAQ1G,KAAKgmC,sBAAsBrlC,OAAQ+F,IAC3D,GAAI4S,IAAStZ,KAAKgmC,sBAAsBt/B,GACpC,OAAO,EAInB,OAAO,GAEXq/B,EAAW7lC,UAAUmqC,cAAgB,SAAUllB,GAC3C,IAAKnlB,KAAK2kB,WAAY,CAClB,IAAI3kB,KAAKsnC,eAAeniB,GAiBpB,OAAO,CAhBP,IAAIjf,GAAkClG,KAAK8oC,eAAe9oC,KAAKgnC,cAAc7hB,IAEzE4oB,EAAW/tC,KAAK8oC,eAAe9oC,KAAKgnC,cAAchnC,KAAKonC,UACvD4G,EAAWhuC,KAAK8oC,eAAe9oC,KAAKgnC,cAAchnC,KAAKmnC,SAC3D,IAAKlkC,oBAAkBjD,KAAKmG,eAAeD,KAMvC,UAA+D,KAA5BlG,KAAKkiB,aAAahc,MACjD,OAAO,MANX,iBACI,OAAO,EAavB,OAAO,GAEX6/B,EAAW7lC,UAAU4tC,gBAAkB,SAAUxiC,EAASC,EAASsiC,EAAS1oB,GACxE,GAAI4oB,GAAW/tC,KAAK+pC,cAAc/pC,KAAK4mC,kBAAkBr7B,IACrDyiC,EAAWhuC,KAAK+pC,cAAc/pC,KAAK4mC,kBAAkBt7B,IACrDpF,EAAQlG,KAAK+pC,cAAc/pC,KAAK4mC,kBAAkBzhB,GACtD,IAAInlB,KAAK2kB,WAAY,CACjB,IAAKqpB,GAAYD,EAOb,MANA/tC,MAAKsqC,kBACLtqC,KAAKwnC,UAAYxnC,KAAKgnC,cAAc+G,GACpC/tC,KAAKojB,iBAAiBpjB,KAAKuJ,SAASvJ,KAAKwnC,YACrCxnC,KAAK8iB,YACL9iB,KAAKwsC,aAEFxsC,KAAKkiB,aAAahc,KAExB,KAAK8nC,IAAa9nC,EACnB,MAAOlG,MAAKgnC,cAAcgH,EAEzB,KAAK9nC,IAAU6nC,IAAaC,IAAcD,EAC3C,MAAO/tC,MAAKgnC,cAAc+G,OAI9B,KAAKC,GAAYD,IACb/tC,KAAKsqC,mBACA/0B,OAAOvV,KAAK+pC,cAAc8D,KAC3B,MAAOA,EAInB,OAAOA,IAEX9H,EAAW7lC,UAAU6hB,WAAa,WAC9BlW,eAAanI,IAAI1D,KAAKmiB,aAAaE,QAAQ,GAAI,YAAariB,KAAK6rC,aAAc7rC,MAC/E6L,eAAanI,IAAI1D,KAAKkiB,aAAc,OAAQliB,KAAKkmB,iBAAkBlmB,MACnE6L,eAAanI,IAAI1D,KAAKkiB,aAAc,QAASliB,KAAKimB,kBAAmBjmB,MACrE6L,eAAanI,IAAI1D,KAAKkiB,aAAc,SAAUliB,KAAKomB,mBAAoBpmB,MACvE6L,eAAanI,IAAI1D,KAAKkiB,aAAc,QAASliB,KAAKiuC,kBAAmBjuC,MACjEA,KAAK8iB,YACLjX,eAAanI,IAAI1D,KAAKkiB,aAAc,UAAWliB,KAAKmmB,eAAgBnmB,MAEpEA,KAAKmkB,iBAAmBnkB,KAAKmiB,aAAakE,aAC1Cxa,eAAanI,IAAI1D,KAAKmiB,aAAakE,YAAa,YAAarmB,KAAKkuC,aAAcluC,MAEhFA,KAAKumB,aACL1a,eAAanI,IAAI1D,KAAKumB,YAAa,QAASvmB,KAAK0c,iBAAkB1c,MAElE4D,UAAQC,WACT7D,KAAKkmC,aAAe/5B,SAAOnM,KAAKkmC,aAAclmC,KAAKoM,YACnDpM,KAAKmuC,WAAa,GAAI7hC,kBAAetM,KAAKmiB,aAAaC,WACnD5V,UAAWxM,KAAK8lB,aAAapZ,KAAK1M,MAClCoM,WAAYpM,KAAKkmC,aACjB35B,UAAW,YAEXvM,KAAKmkB,iBAAmBnkB,KAAKkiB,cAC7BrW,eAAanI,IAAI1D,KAAKkiB,aAAc,YAAaliB,KAAK+rC,iBAAkB/rC,QAIpF+lC,EAAW7lC,UAAUimB,eAAiB,SAAUtZ,GAC5C,OAAQA,EAAE8Z,MACN,IAAK,UACG3mB,KAAK8iB,YAAe9iB,KAAK4mB,UAAa5mB,KAAK2iB,UAC3C3iB,KAAK+iB,OAAO,kBACRC,OAAQ,iBACRnW,EAAGA,MAQvBk5B,EAAW7lC,UAAUwc,iBAAmB,WACpC,GAAK1c,KAAKwE,UAGLxE,KAAKkiB,aAAa3d,SAAU,CAC7B,GAAI6pC,GAAYpuC,KAAKkiB,aAAahe,aAAa,SAC3CihB,EAAMnlB,KAAKmG,eAAenG,KAAK+mC,cACN,oBAAzB/mC,KAAK2B,QAAQmlB,UACb3B,EAAM,KACNipB,EAAY,GACZpuC,KAAKkiB,aAAa/d,aAAa,QAAS,KAE5CnE,KAAKmD,eAAgB+C,MAAOif,IAAO,GACnCnlB,KAAKmoC,SAAWnoC,KAAKkG,MACrBlG,KAAKkoC,iBAAmBloC,KAAKkG,MAC7BlG,KAAKwnC,UAAYxnC,KAAKkG,MAClBlG,KAAKkiB,eACLliB,KAAKojB,iBAAiBgrB,GAClBpuC,KAAK8iB,aACAsrB,GACDpuC,KAAKojB,iBAAiBpjB,KAAKyhB,iBAE/BzhB,KAAKwsC,cAETxsC,KAAK6mC,gBAAgBuH,GACrBpuC,KAAKotC,UAAYptC,KAAKkiB,aAAahc,SAI/C6/B,EAAW7lC,UAAUkmB,mBAAqB,SAAUvZ,GAC3C7M,KAAKwE,SAGVqI,EAAEma,mBAEN+e,EAAW7lC,UAAU+tC,kBAAoB,WACjCjuC,KAAK8iB,YACL9iB,KAAK+iB,OAAO,gBACRC,OAAQ,oBAIpB+iB,EAAW7lC,UAAU2mB,aAAe,WAC5B7mB,KAAKmiB,cACLtW,eAAawL,OAAOrX,KAAKmiB,aAAaE,QAAQ,GAAI,uBAAwBriB,KAAK6rC,cAEnFhgC,eAAawL,OAAOrX,KAAKkiB,aAAc,OAAQliB,KAAKkmB,kBACpDra,eAAawL,OAAOrX,KAAKkiB,aAAc,QAASliB,KAAKimB,mBACrDpa,eAAawL,OAAOrX,KAAKkiB,aAAc,SAAUliB,KAAKomB,oBACtDva,eAAawL,OAAOrX,KAAKkiB,aAAc,QAASliB,KAAKiuC,mBACjDjuC,KAAKmuC,YACLnuC,KAAKmuC,WAAWx1B,UAEpB9M,eAAawL,OAAOrX,KAAKkiB,aAAc,uBAAwBliB,KAAK+rC,mBAChE/rC,KAAKmkB,iBAAoBlhB,oBAAkBjD,KAAKmiB,eAAkBlf,oBAAkBjD,KAAKmiB,aAAakE,cACtGxa,eAAawL,OAAOrX,KAAKmiB,aAAakE,YAAa,uBAAwBrmB,KAAKkuC,cAEhFluC,KAAKumB,aACL1a,eAAawL,OAAOrX,KAAKumB,YAAa,QAASvmB,KAAK0c,mBAG5DqpB,EAAW7lC,UAAU+mB,eAAiB,WAC9BjnB,KAAKmkB,iBAAmBnkB,KAAKmiB,aAAakE,aAC1Cxa,eAAanI,IAAI1D,KAAKmiB,aAAakE,YAAa,YAAarmB,KAAKkuC,aAAcluC,OAGxF+lC,EAAW7lC,UAAUmuC,kBAAoB,SAAUxhC,GAC/C,GAAIsa,IACAzM,MAAO7N,EAEX7M,MAAKua,QAAQ,UAAW4M,IAE5B4e,EAAW7lC,UAAUguC,aAAe,SAAUrhC,GAC1C,GAAK7M,KAAKwE,UAGVqI,EAAEmB,iBACG/K,oBAAkBjD,KAAKkG,QAIxBlG,KAAKunC,aACLvnC,KAAKquC,kBAAkBxhC,IAJvB7M,KAAKknB,MAAMra,GAMX7M,KAAKuG,eACLvG,KAAKuG,aAAau8B,UAAY,GAE9B9iC,KAAK8iB,YACL9iB,KAAK+iB,OAAO,gBACRC,OAAQ,mBAGZ1e,UAAQtE,KAAK2B,QAAS,SAAS,CAC/B,GAAIA,GAAU3B,KAAK2B,QACf0lB,EAAaC,SAASC,YAAY,gBACtCF,GAAWG,UAAU,SAAS,GAAO,GACrC7lB,EAAQ8lB,cAAcJ,KAG9B0e,EAAW7lC,UAAUgnB,MAAQ,SAAUxM,GACnC1a,KAAKmD,eAAgB+C,MAAO,OAAQ,GACpClG,KAAKwnC,UAAY,KACjBxnC,KAAKunC,aACLvnC,KAAKquC,kBAAkB3zB,GACvB1a,KAAK4e,YAAYlE,IAErBqrB,EAAW7lC,UAAUouC,UAAY,WACzBtuC,KAAK4mB,WACL5mB,KAAK4mB,SAAS/f,OAAS7G,KAAK6G,OAC5B7G,KAAK4mB,SAAS2nB,aAGtBxI,EAAW7lC,UAAU2nC,gBAAkB,SAAUrjB,GAI7C,IAAK,GADDte,GACKyD,EAAK,EAAG+jB,EAHAlJ,EAAYvhB,oBAAkBjD,KAAKioB,mBAAuBxoB,OAAOoK,KAAK7J,KAAKioB,iBACvF,OAAQ,WAAY,WAAY,QAAS,OAAQ,QAAS,MAAO,MAAO,eAEjCte,EAAK+jB,EAAa/sB,OAAQgJ,IAAM,CACxE,GAAIyN,GAAOsW,EAAa/jB,EACxB,KAAK1G,oBAAkBjD,KAAKkiB,aAAahe,aAAakT,IAClD,OAAQA,GACJ,IAAK,WACD,GAAKnU,oBAAkBjD,KAAKimC,kBAAiDxuB,KAAhCzX,KAAKimC,YAAqB,SAAqBzhB,EAAW,CACnG,GAAIhgB,GAAmD,aAAzCxE,KAAKkiB,aAAahe,aAAakT,IACA,KAAzCpX,KAAKkiB,aAAahe,aAAakT,IAAyD,SAAzCpX,KAAKkiB,aAAahe,aAAakT,EAClFpX,MAAKmD,eAAgBqB,QAASA,IAAYggB,GAE9C,KACJ,KAAK,QACDxkB,KAAKuoC,WAAavoC,KAAKkiB,aAAahe,aAAakT,EACjD,MACJ,KAAK,WACD,GAAKnU,oBAAkBjD,KAAKimC,kBAAkDxuB,KAAjCzX,KAAKimC,YAAsB,UAAqBzhB,EAAW,CACpG,GAAI7B,GAAoD,aAAzC3iB,KAAKkiB,aAAahe,aAAakT,IACD,KAAzCpX,KAAKkiB,aAAahe,aAAakT,IAAyD,SAAzCpX,KAAKkiB,aAAahe,aAAakT,EAClFpX,MAAKmD,eAAgBwf,SAAUA,IAAa6B,GAEhD,KACJ,KAAK,OACDxkB,KAAKkiB,aAAa/d,aAAa,OAAQnE,KAAKkiB,aAAahe,aAAakT,GACtE,MACJ,KAAK,OACDpX,KAAKylC,KAAO9+B,SAAS3G,KAAKkiB,aAAahe,aAAakT,GAAO,GAC3D,MACJ,KAAK,eACInU,oBAAkBjD,KAAKimC,kBAAqDxuB,KAApCzX,KAAKimC,YAAyB,aAAqBzhB,IAC5FxkB,KAAKmD,eAAgBggB,YAAanjB,KAAKkiB,aAAahe,aAAakT,KAAUoN,EAE/E,MACJ,KAAK,OACIvhB,oBAAkBjD,KAAKimC,kBAA6CxuB,KAA5BzX,KAAKimC,YAAiB,KAAqBzhB,KACpFte,EAAQ,GAAIrD,MAAK7C,KAAKkiB,aAAahe,aAAakT,IAC3CnU,oBAAkBjD,KAAKmG,eAAeD,KACvClG,KAAKmD,eAAgBZ,IAAK2D,IAAUse,GAG5C,MACJ,KAAK,OACIvhB,oBAAkBjD,KAAKimC,kBAA6CxuB,KAA5BzX,KAAKimC,YAAiB,KAAqBzhB,KACpFte,EAAQ,GAAIrD,MAAK7C,KAAKkiB,aAAahe,aAAakT,IAC3CnU,oBAAkBjD,KAAKmG,eAAeD,KACvClG,KAAKmD,eAAgBX,IAAK0D,IAAUse,GAG5C,MACJ,KAAK,SACIvhB,oBAAkBjD,KAAKimC,kBAA+CxuB,KAA9BzX,KAAKimC,YAAmB,OAAqBzhB,KACtFte,EAAQ,GAAIrD,MAAK7C,KAAKkiB,aAAahe,aAAakT,IAC3CnU,oBAAkBjD,KAAKmG,eAAeD,MACvClG,KAAKwnC,UAAYthC,EACjBlG,KAAKwiB,aAAY,EAAOxiB,KAAKwnC,WAC7BxnC,KAAKmD,eAAgB+C,MAAOA,IAAUse,QAQlEuhB,EAAW7lC,UAAU4oC,eAAiB,SAAU5iC,GAC5C,MAAIjD,qBAAkBjD,KAAKmG,eAAeD,IAC/B,KAEJ,GAAIrD,MAAKqiC,EAAMD,EAAOD,EAAK9+B,EAAMsK,WAAYtK,EAAMuK,aAAcvK,EAAMwK,eAElFq1B,EAAW7lC,UAAUsuC,cAAgB,WACjC,GAAIl1B,GAAO,CACX,IAA4C,MAAxCtZ,KAAKsrC,iBAAiB59B,MAAM,KAAK,IAAqD,IAAvC1N,KAAKsrC,iBAAiBt4B,QAAQ,KAC7EsG,EAAO,MAEN,IAAItZ,KAAKsrC,iBAAiBt4B,QAAQ,KAAO,EAE1C,IAAK,GADDy7B,GAAWzuC,KAAKsrC,iBAAiB59B,MAAM,KAClC1M,EAAI,EAAGA,EAAIytC,EAAS9tC,OAAQK,IACjC,GAAIytC,EAASztC,GAAGsI,cAAc0J,QAAQ,MAAQ,EAAG,CAC7CsG,EAAOtY,CACP,OAIZ,MAAOsY,IAEXysB,EAAW7lC,UAAU0yB,YAAc,SAAU1sB,EAAOwU,GAChD,GAAIyK,EACJ,IAAInlB,KAAKsoC,cAAcpiC,GACnBlG,KAAKunC,iBAIL,IADApiB,EAAMnlB,KAAKoG,WAAWF,GAClBlG,KAAK2kB,WAAY,CAEjB,GAAIoJ,GAAoB,OAAR5I,GAAgBjf,EAAMgX,OAAOvc,OAAS,EAClDX,KAAKysC,cAAczsC,KAAKmoC,UAAYnoC,KAAKkiB,aAAahc,KAC1DlG,MAAKojB,iBAAiB2K,GAClB/tB,KAAK8iB,aACAiL,GACD/tB,KAAKojB,iBAAiBpjB,KAAKyhB,iBAE3Bxe,oBAAkBkiB,IAAQjf,IAAUlG,KAAKyhB,iBACzCzhB,KAAKwsC,aAELvpC,oBAAkBkiB,IAAQjf,IAAUlG,KAAKyhB,iBACzCzhB,KAAKojB,iBAAiBpjB,KAAKyhB,kBAK3CzhB,KAAKitC,iBAAiBvyB,EAAwB,gBAAVxU,KAExC6/B,EAAW7lC,UAAUusC,cAAgB,SAAU99B,GAE3C,IAAK,GADDzI,GAAQlG,KAAKgnC,cAAcr4B,GACtB3N,EAAI,EAAGA,EAAIhB,KAAK4lC,gBAAgBjlC,OAAQK,IAC7C,IAAKkF,IAAUlG,KAAK4lC,gBAAgB5kC,GAAI,CACpChB,KAAK6zB,YAAc7yB,EACnBhB,KAAKka,gBAAkBla,KAAKkwB,cAAclvB,GAC1ChB,KAAKkoC,iBAAmB,GAAIrlC,MAAK7C,KAAK4lC,gBAAgB5kC,GACtD,OAGR,MAAOhB,MAAKotC,WAEhBrH,EAAW7lC,UAAUqnC,WAAa,WAC9BvnC,KAAKw0B,kBACLxS,QAAM6F,SAAS,GAAI7nB,KAAKkiB,aAAcliB,KAAKuiB,gBAAgB,GAC3DviB,KAAKkoC,iBAAmBloC,KAAK6zB,YAAc,KACtC7zB,KAAK2kB,YACN3kB,KAAK6mC,gBAAgB,OAG7Bd,EAAW7lC,UAAUqsC,YAAc,SAAUpnB,GACzC,MAAIliB,qBAAkBjD,KAAKmG,eAAegf,IAC/B,KAGAnlB,KAAK8C,UAAU0O,WAAW2T,GAAOvT,OAAQ5R,KAAKsrC,iBAAkBxjC,KAAM,UAGrFi+B,EAAW7lC,UAAUkG,WAAa,SAAUF,GACxC,IAAKlG,KAAKsoC,cAAcpiC,GAAQ,CAC5B,GAAIyI,GAAOzI,YAAiBrD,MAAOqD,EAAQlG,KAAKgnC,cAAc9gC,EAC9D,OAAOlG,MAAK0uC,cAAc//B,EAAMzI,GAGpC,MADAlG,MAAKunC,aACEvnC,KAAKkoC,iBAAmB,MAEnCnC,EAAW7lC,UAAUwuC,cAAgB,SAAU//B,EAAMzI,GACjD,GAAIoT,GACA6L,EAAMnlB,KAAK49B,eAAe13B,EAAOlG,KAAKuC,IAAKvC,KAAKwC,KAChDmsC,EAAS3uC,KAAK+pC,cAAc5kB,EAahC,IAZInlB,KAAK4mC,kBAAkB+H,KAAY3uC,KAAK4mC,kBAAkB5mC,KAAKkG,QAC/DlG,KAAKkoC,iBAAmBjlC,oBAAkB0rC,GAAU,KAAOA,EAC3Dr1B,EAAOtZ,KAAKusC,YAAYvsC,KAAKkoC,oBAGzBloC,KAAK2kB,aAELhW,EAAOggC,GAEX3uC,KAAKkoC,iBAAmBloC,KAAKmG,eAAewI,GAC5C2K,EAAOtZ,KAAKusC,YAAYvsC,KAAKkoC,oBAE5BloC,KAAK2kB,YAAc1hB,oBAAkBqW,GAAO,CAC7C,GAAIs1B,GAAUzpB,EAAIjI,OAAOvc,OAAS,EAAIwkB,EAAM,EAC5CnlB,MAAKojB,iBAAiBwrB,GAClB5uC,KAAK8iB,aACA8rB,GACD5uC,KAAKojB,iBAAiBpjB,KAAKyhB,sBAKnCzhB,MAAKojB,iBAAiB9J,GAClBtZ,KAAK8iB,aACQ,KAATxJ,GACAtZ,KAAKojB,iBAAiBpjB,KAAKyhB,iBAE3Bxe,oBAAkBqW,IAASpT,IAAUlG,KAAKyhB,iBAC1CzhB,KAAKwsC,aAELvpC,oBAAkBqW,IAASpT,IAAUlG,KAAKyhB,iBAC1CzhB,KAAKojB,iBAAiBpjB,KAAKyhB,iBAIvC,OAAOnI,IAEXysB,EAAW7lC,UAAUssC,WAAa,WAC9BxsC,KAAK+iB,OAAO,cACRC,OAAQ,oBAGhB+iB,EAAW7lC,UAAU2uC,gBAAkB,SAAUn0B,GAC7C,GAAIo0B,GAAW9uC,kBAAmBkG,MAC9BA,EAAQjD,oBAAkBjD,KAAKkoC,kBAAoBloC,KAAK+pC,cAAc+E,GACtE9uC,KAAKgnC,cAAchnC,KAAKkoC,kBACxB6G,EAAU,KACVt5B,EAAQzV,KAAKkwB,cAAcvvB,OAC3BquC,EAAchvC,KAAK4lC,eACvB,IAAK3iC,oBAAkBjD,KAAKmG,eAAeD,KAAYjD,oBAAkBjD,KAAK6zB,aAiD1E7zB,KAAKivC,eAAev0B,OAjDoE,CACxF,GAAqB,SAAjBA,EAAM5M,OAAmB,CACrBpH,EAAQ1G,KAAKkvC,eAAe,EAChCH,IAAY/uC,KAAK+pC,cAAc,GAAIlnC,MAAK7C,KAAK4lC,gBAAgBl/B,KAC7D1G,KAAK6zB,YAAcntB,MAElB,IAAqB,QAAjBgU,EAAM5M,OAAkB,CACzBpH,EAAQ1G,KAAKkvC,eAAeF,EAAYruC,OAAS,GAAG,EACxDouC,IAAY/uC,KAAK+pC,cAAc,GAAIlnC,MAAK7C,KAAK4lC,gBAAgBl/B,KAC7D1G,KAAK6zB,YAAcntB,MAGnB,IAAqB,SAAjBgU,EAAM5M,OACN,IAAS9M,EAAI,EAAGA,EAAIyU,EAAOzU,IAAK,CAC5B,IAAKkF,EAAQlG,KAAK4lC,gBAAgB5kC,GAAI,CAC9B0F,EAAQ1G,KAAKkvC,eAAeluC,EAChC+tC,IAAY/uC,KAAK+pC,cAAc,GAAIlnC,MAAK7C,KAAK4lC,gBAAgBl/B,KAC7D1G,KAAK6zB,YAAcntB,CACnB,OAEC,GAAI1F,IAAMyU,EAAQ,EAAG,CAClB/O,EAAQ1G,KAAKkvC,eAAe,EAChCH,IAAY/uC,KAAK+pC,cAAc,GAAIlnC,MAAK7C,KAAK4lC,gBAAgBl/B,KAC7D1G,KAAK6zB,YAAcntB,CACnB,YAKR,KAAK,GAAI1F,GAAIyU,EAAQ,EAAGzU,GAAK,EAAGA,IAAK,CACjC,IAAKkF,EAAQlG,KAAK4lC,gBAAgB5kC,GAAI,CAC9B0F,EAAQ1G,KAAKkvC,eAAeluC,GAAG,EACnC+tC,IAAY/uC,KAAK+pC,cAAc,GAAIlnC,MAAK7C,KAAK4lC,gBAAgBl/B,KAC7D1G,KAAK6zB,YAAcntB,CACnB,OAEC,GAAU,IAAN1F,EAAS,CACd,GAAI0F,GAAQ1G,KAAKkvC,eAAez5B,EAAQ,EACxCs5B,IAAY/uC,KAAK+pC,cAAc,GAAIlnC,MAAK7C,KAAK4lC,gBAAgBl/B,KAC7D1G,KAAK6zB,YAAcntB,CACnB,QAKhB1G,KAAKka,gBAAkBla,KAAKkwB,cAAclwB,KAAK6zB,aAC/C7zB,KAAKmvC,aAAalsC,oBAAkB8rC,GAAW,KAAO,GAAIlsC,MAAKksC,MAMvEhJ,EAAW7lC,UAAU+uC,eAAiB,SAAUv0B,GAC5C,GAAIhU,GAAQ1G,KAAKkvC,eAAe,EAAoB,SAAjBx0B,EAAM5M,OACzC9N,MAAK6zB,YAAcntB,EACnB1G,KAAKka,gBAAkBla,KAAKkwB,cAAcxpB,GAC1C1G,KAAKmvC,aAAa,GAAItsC,MAAK7C,KAAK4lC,gBAAgBl/B,MAEpDq/B,EAAW7lC,UAAUivC,aAAe,SAAUjpC,GACrCjD,oBAAkBjD,KAAKmG,eAAeD,KACvClG,KAAKoG,WAAWF,IAGxB6/B,EAAW7lC,UAAUgvC,eAAiB,SAAUxoC,EAAO0oC,GACnD,GAAIC,GAAe,KACfnE,EAAQjoC,oBAAkBjD,KAAKuG,cAAgBvG,KAAKkwB,cACpDlwB,KAAKuG,aAAa6D,iBAAiB,gBACnCklC,GAAU,CACd,IAAIpE,EAAMvqC,OACN,GAAIyuC,EACA,IAASpuC,EAAI0F,EAAO1F,GAAK,EAAGA,IAAK,CAC7B,IAAKkqC,EAAMlqC,GAAGyC,UAAUmI,SA1mD7B,cA0mDiD,CACxCyjC,EAAeruC,CACf,OAEW,IAANA,GACDsuC,IACA5oC,EAAQ1F,EAAIkqC,EAAMvqC,OAClB2uC,GAAU,OAMtB,KAAK,GAAItuC,GAAI0F,EAAO1F,GAAKkqC,EAAMvqC,OAAS,EAAGK,IAAK,CAC5C,IAAKkqC,EAAMlqC,GAAGyC,UAAUmI,SAxnD7B,cAwnDiD,CACxCyjC,EAAeruC,CACf,OAEKA,IAAMkqC,EAAMvqC,OAAS,GACtB2uC,IACA5oC,EAAQ1F,GAAK,EACbsuC,GAAU,GAM9B,MAAOD,IAEXtJ,EAAW7lC,UAAUosC,WAAa,SAAU5xB,GACxC,KAAIzX,oBAAkBjD,KAAKylC,OAASzlC,KAAKylC,MAAQ,IAAMxiC,oBAAkBjD,KAAKmiB,eACvEniB,KAAKmiB,aAAaE,QAAQ,GAAG5e,UAAUmI,SAzoDvC,eAwoDP,CAIA,GAAI6J,GAAQzV,KAAK4lC,gBAAgBjlC,MACjC,IAAIsC,oBAAkBjD,KAAK8qC,qBAA0D,IAAnC9qC,KAAK8qC,mBAAmBnqC,OACtE,GAAIX,KAAKkwB,cAAcvvB,OAAS,EAC5B,GAAIsC,oBAAkBjD,KAAKkG,QAAUjD,oBAAkBjD,KAAK6zB,aAAc,CAClEntB,EAAQ1G,KAAKkvC,eAAe,EAAoB,SAAjBx0B,EAAM5M,OACzC9N,MAAK6zB,YAAcntB,EACnB1G,KAAKka,gBAAkBla,KAAKkwB,cAAcxpB,GAC1C1G,KAAKmvC,aAAa,GAAItsC,MAAK7C,KAAK4lC,gBAAgBl/B,SAGhD1G,MAAK6uC,gBAAgBn0B,OAIzB1a,MAAK6uC,gBAAgBn0B,OAGxB,CACD,GAAI60B,OAAW,EACf,IAAK70B,EAAMmnB,SAAW,IAAQnnB,EAAMmnB,SAAW,GAAK,CAC5Cn7B,EAA2B,KAAlBgU,EAAMmnB,SAAoC,KAAlBnnB,EAAMmnB,UAAoB7hC,KAAK6zB,cAAgB7zB,KAAK6zB,WACzF7zB,MAAK6zB,YAAcntB,EAAQ1G,KAAK6zB,gBAA0B,EAAI7zB,KAAK6zB,YACnE7zB,KAAK6zB,YAAcntB,EAAQ1G,KAAK6zB,YAAc,EAAKpe,EAAQ,EAAKzV,KAAK6zB,YACrE7zB,KAAK6zB,YAAcntB,EAAQ1G,KAAKkvC,eAAelvC,KAAK6zB,YAAgC,KAAlBnZ,EAAMmnB,SAAoC,KAAlBnnB,EAAMmnB,SAEhG0N,EAAWtsC,oBAAkBjD,KAAK4lC,gBAAgBl/B,IAC9C1G,KAAK4lC,gBAAgB,GAAK5lC,KAAK4lC,gBAAgBl/B,OAElD,IAAqB,SAAjBgU,EAAM5M,OAAmB,CAC1BpH,EAAQ1G,KAAKkvC,eAAe,EAChClvC,MAAK6zB,YAAcntB,EACnB6oC,EAAWvvC,KAAK4lC,gBAAgBl/B,OAE/B,IAAqB,QAAjBgU,EAAM5M,OAAkB,CAC7B,GAAIpH,GAAQ1G,KAAKkvC,eAAez5B,EAAQ,GAAG,EAC3CzV,MAAK6zB,YAAcntB,EACnB6oC,EAAWvvC,KAAK4lC,gBAAgBl/B,GAEpC1G,KAAKka,gBAAkBla,KAAKkwB,cAAclwB,KAAK6zB,aAC/C7zB,KAAKmvC,aAAa,GAAItsC,MAAK0sC,IAE/BvvC,KAAK+nC,YAAa,EAClB/nC,KAAKstC,SAASttC,KAAKka,gBAvrDV,gBAwrDTla,KAAKmY,sBACLnY,KAAKwqC,mBACDxqC,KAAK00B,eAA0C,OAAzB10B,KAAKka,iBAA8BQ,GAAwB,UAAfA,EAAM5S,MACxE9H,KAAKgiC,sBAGb+D,EAAW7lC,UAAU6oC,qBAAuB,SAAU7vB,EAAIzY,GACtD,MAAO8I,YAAS,QAAU9I,EAAI,+CAAgDyY,IAElF6sB,EAAW7lC,UAAUsrC,qBAAuB,SAAUtyB,EAAIzY,GACtD,MAAO8I,YAAS,QAAU9I,EAAI,+CAAgDyY,IAElF6sB,EAAW7lC,UAAUkhC,eAAiB,WAClCv1B,eAAanI,IAAI1D,KAAKspC,YAAa,QAAStpC,KAAKigC,aAAcjgC,MAC1D4D,UAAQC,WACTgI,eAAanI,IAAI1D,KAAKspC,YAAa,YAAatpC,KAAKsgC,YAAatgC,MAClE6L,eAAanI,IAAI1D,KAAKspC,YAAa,WAAYtpC,KAAKugC,aAAcvgC,QAG1E+lC,EAAW7lC,UAAUmhC,iBAAmB,WAChCrhC,KAAKspC,cACLz9B,eAAawL,OAAOrX,KAAKspC,YAAa,QAAStpC,KAAKigC,cAC/Cr8B,UAAQC,WACTgI,eAAawL,OAAOrX,KAAKspC,YAAa,YAAatpC,KAAKsgC,aACxDz0B,eAAawL,OAAOrX,KAAKspC,YAAa,WAAYtpC,KAAKugC,iBAInEwF,EAAW7lC,UAAUitC,aAAe,SAAUzyB,EAAOxU,GACjD,GAAI6U,GAAU9X,oBAAkBjD,KAAKmG,eAAeD,IAAW,KAAOA,GACjElG,KAAKmoC,WAAcptB,IACpB/a,KAAKwnC,UAAYzsB,EACjB/a,KAAK4e,YAAYlE,KAGzBqrB,EAAW7lC,UAAU0e,YAAc,SAAU/R,GACzC7M,KAAKupC,eACLvpC,KAAKwiB,aAAY,EAAMxiB,KAAKwnC,UAC5B,IAAI1b,IACApR,MAAQ7N,GAAK,KACb3G,MAAOlG,KAAKkG,MACZ+D,KAAOjK,kBAAmBkG,MAC1B2Y,cAAe5b,oBAAkB4J,GACjClL,QAAS3B,KAAK2B,QAElBmqB,GAAU5lB,MAAQlG,KAAKkoC,kBAAoBloC,KAAKgnC,cAAchnC,KAAKkiB,aAAahc,OAChFlG,KAAKmoC,SAAWnoC,KAAKkoC,kBAAoBloC,KAAKgnC,cAAchnC,KAAKkiB,aAAahc,OAC1ElG,KAAKmC,WAAanC,KAAKkC,cACvBlC,KAAKkC,eAAgB,EAGrBlC,KAAKua,QAAQ,SAAUuR,GAE3B9rB,KAAKuhB,mBAAqB,KAC1BvhB,KAAK6mC,gBAAgB7mC,KAAKkG,QAE9B6/B,EAAW7lC,UAAUsiB,YAAc,SAAUgtB,EAAU7gC,GAC/C6gC,IACAxvC,KAAKotC,UAAYptC,KAAKuJ,SAASoF,IAEnC3O,KAAKmoC,SAAWnoC,KAAKkoC,iBAAmBv5B,EACnB,gBAATA,KAAuB3O,KAAKkG,QAAU,GAAIrD,OAAM7C,KAAKkG,OAAOyX,gBAAgB,OAAShP,IAC7F3O,KAAKmD,eAAgB+C,MAAOyI,IAAQ,GAChC3O,KAAK8iB,YACL9iB,KAAKwsC,eAGRxsC,KAAK2kB,YAAc1hB,oBAAkBjD,KAAKkG,QAAUlG,KAAKuhB,qBAC1DvhB,KAAK6mC,gBAAgB7mC,KAAKuhB,oBAC1BvhB,KAAKojB,iBAAiBpjB,KAAKuhB,qBAE/BvhB,KAAKinC,kBAETlB,EAAW7lC,UAAUiY,oBAAsB,YAClClV,oBAAkBjD,KAAKka,kBAAoBla,KAAKkG,MACjDpC,aAAW9D,KAAKkiB,cAAgBxZ,wBAAyB1I,KAAKka,gBAAgBhW,aAAa,QAG3FlE,KAAKkiB,aAAatJ,gBAAgB,0BAG1CmtB,EAAW7lC,UAAUs0B,gBAAkB,WAEnC,GADAx0B,KAAKwtC,YA3wDD,YA4wDCvqC,oBAAkBjD,KAAKuG,cAAe,CACvC,GAAI2kC,GAAQlrC,KAAKuG,aAAa6D,iBAAiB,YAC3C8gC,GAAMvqC,SACNqG,cAAYkkC,EAhxDb,YAixDCA,EAAM,GAAGtyB,gBAAgB,oBAIrCmtB,EAAW7lC,UAAUstC,YAAc,SAAU9lC,GACzC,GAAI+nC,GAAczvC,KAAK0vC,aAAahoC,EAChC+nC,IAAeA,EAAY9uC,SAC3BqG,cAAYyoC,EAAa/nC,GAtxDpB,iBAuxDDA,GACA+nC,EAAY,GAAG72B,gBAAgB,mBAI3CmtB,EAAW7lC,UAAUwvC,aAAe,SAAUhoC,GAC1C,GAAI+nC,EAIJ,OAHKxsC,qBAAkBjD,KAAKuG,gBACxBkpC,EAAczvC,KAAKuG,aAAa6D,iBAAiB,IAAM1C,IAEpD+nC,GAEX1J,EAAW7lC,UAAUyvC,eAAiB,WAClC,IAAK1sC,oBAAkBjD,KAAKuG,cAAe,CACvC,GAAI2kC,GAAQlrC,KAAKuG,aAAa6D,iBAAiB,eAC/C,IAAI8gC,EAAMvqC,OACN,IAAK,GAAIK,GAAI,EAAGA,EAAIkqC,EAAMvqC,OAAQK,IAC9B,GAAKhB,KAAK4lC,gBAAgB5kC,MAAQhB,KAAKgnC,cAAchnC,KAAKkoC,kBAAoB,CAC1EgD,EAAMlqC,GAAGmD,aAAa,gBAAiB,QACvCnE,KAAKka,gBAAkBgxB,EAAMlqC,GAC7BhB,KAAK6zB,YAAc7yB,CACnB,UAMpB+kC,EAAW7lC,UAAUqpC,aAAe,WAChCvpC,KAAKka,gBAAkB,KACvBla,KAAKw0B,kBACLx0B,KAAK2vC,iBACA1sC,oBAAkBjD,KAAKka,mBACxBjT,YAAUjH,KAAKka,iBAzzDZ,YA0zDHla,KAAKka,gBAAgB/V,aAAa,gBAAiB,UAG3D4hC,EAAW7lC,UAAUqtC,UAAY,SAAUpN,GACvC,MAAQA,IAAMA,EAAG18B,UAAUmI,SAtzDnB,iBAszD2Cu0B,EAAG18B,UAAUmI,SA3zDzD,eA6zDXm6B,EAAW7lC,UAAU6pC,cAAgB,SAAU5kB,GAC3C,GACI1Z,GAAQzL,KAAK8C,UAAU0O,WAAW,GAAI3O,OAAU+O,OADpC,KACuDN,SAAU,QAASxJ,KAAM,SAC5F5B,EAAQ,IAgBZ,OAfmB,gBAARif,GACHA,EAAIjb,cAAc8I,QAAQ,OAAS,GAAKmS,EAAIjb,cAAc8I,QAAQ,OAAS,GAC3EvH,EAAQzL,KAAKynC,eAAej2B,WAAW,GAAI3O,OAAU+O,OAL7C,KAKgEN,SAAU,QAASxJ,KAAM,SACjG5B,EAAQqP,OAAO,GAAI1S,MAAK4I,EAAQ,IAAM0Z,IAAQ,KAAO,GAAItiB,MAAK,GAAIA,MAAK4I,EAAQ,IAAM0Z,GAAKxH,gBAAgB,IACtG1a,oBAAkBiD,KAClBA,EAAQlG,KAAK4vC,UAAUnkC,EAAO0Z,KAIlCjf,EAAQlG,KAAK4vC,UAAUnkC,EAAO0Z,GAG7BA,YAAetiB,QACpBqD,EAAQif,GAELjf,GAEX6/B,EAAW7lC,UAAU0vC,UAAY,SAAUnkC,EAAO0Z,GAC9C,GAAIjf,EAQJ,OAPAA,GAAQlG,KAAK8C,UAAUyO,UAAU9F,EAAQ,IAAM0Z,GAC3CvT,OAAQ5R,KAAKurC,iBAAmB,IAAMvrC,KAAKsrC,iBAAkBxjC,KAAM,aAEvE5B,EAAQjD,oBAAkBiD,GAASlG,KAAK8C,UAAUyO,UAAU9F,EAAQ,IAAM0Z,GACtEvT,OAAQ5R,KAAKurC,iBAAmB,IAAMvrC,KAAKyrC,gBAAiB3jC,KAAM,aACjE5B,EACLA,EAAQjD,oBAAkBiD,GAASA,EAAQ,GAAIrD,MAAKqD,EAAMyX,gBAAgB,KAG9EooB,EAAW7lC,UAAUolC,gBAAkB,WACnC,GAAI1jC,GAAQ5B,IACZA,MAAKspC,YAActpC,KAAKqE,cAAc,OAASqD,UAn2DzC,YAm2D6DG,OAASi5B,SAAY,OACxF,IAAIj2B,GACA66B,EAAuB,IAAZ1lC,KAAKylC,KAChBE,IACJ3lC,MAAK4lC,mBACL5lC,KAAKgmC,yBACLn7B,GAAU7K,KAAKgnC,cAAchnC,KAAKmnC,SAASxpB,gBAAgB,EAE3D,KADA,GAAIrY,IAAQtF,KAAKgnC,cAAchnC,KAAKonC,SAASzpB,gBAAgB,GACtDrY,GAAOuF,GACV7K,KAAK4lC,gBAAgB77B,KAAKc,GAC1B86B,EAAU57B,KAAK/J,KAAK8C,UAAU0O,WAAW,GAAI3O,MAAKgI,IAAU+G,OAAQ5R,KAAKsrC,iBAAkBxjC,KAAM,UACjG+C,GAAS66B,CAEb,IAAImK,IACAC,YAAa,SAAUl5B,GACnB,GAAIkV,IACAnqB,QAASiV,EAAKspB,KACdj2B,KAAM2M,EAAK3M,KAAM/D,MAAOtE,EAAMolC,cAAcpwB,EAAK3M,MAAO4H,YAAY,EAExEjQ,GAAM2Y,QAAQ,aAAcuR,EAAW,SAAUA,GACzCA,EAAUja,YACVia,EAAUnqB,QAAQ8B,UAAUC,IAp3DrC,cAs3DSooB,EAAUnqB,QAAQ8B,UAAUmI,SAt3DrC,eAu3DShK,EAAMokC,sBAAsBj8B,KAAK+hB,EAAUnqB,QAAQuC,aAAa,kBAKhFlE,MAAK+gC,QAAUC,WAASC,WAAWjhC,KAAKqE,cAAeshC,EAAWkK,GAAiB,GACnF/rC,aAAW9D,KAAK+gC,SAAWt4B,KAAQ,UAAWy4B,cAAe,QAASt4B,GAAM5I,KAAK2B,QAAQiH,GAAK,WAAYk4B,SAAY,MACtHuI,UAAQrpC,KAAK+gC,SAAU/gC,KAAKspC,cAEhCvD,EAAW7lC,UAAU2sC,qBAAuB,SAAUnyB,GAClD,GAAIpa,GAASoa,EAAMpa,MACb2C,qBAAkBjD,KAAK4mB,WAAc3jB,oBAAkBjD,KAAKmiB,iBAAkBniB,KAAKmiB,aAAaC,UAAUxW,SAAStL,IAA0B,cAAfoa,EAAM5S,MACrI9H,KAAK4mB,SAASjlB,SAAW3B,KAAK4mB,SAASjlB,QAAQiK,SAAStL,KAA6B,eAAfoa,EAAM5S,MAC7E4S,EAAM1M,iBAEJ1J,UAAQhE,EAAQ,QAAUN,KAAK4mB,SAASjlB,QAAQiH,GAAK,OAAUtI,IAAWN,KAAKkiB,cAC9E5hB,KAAYN,KAAKmiB,cAAgBniB,KAAKmiB,aAAaE,QAAQ,KAC9D/hB,KAAYN,KAAKmiB,cAAgBniB,KAAKmiB,aAAakE,cACnD/lB,KAAYN,KAAKmiB,cAAgBniB,KAAKmiB,aAAaC,WAM9C9hB,IAAWN,KAAKkiB,eAChBte,UAAQC,WACT7D,KAAKgoC,eAAiBpkC,UAAQmsC,MAA8B,SAAtBnsC,UAAQosC,KAAK11B,OAAqBgN,SAAS0B,gBAAkBhpB,KAAKkiB,cAChG5hB,IAAWN,KAAKuG,eARxBvG,KAAK00B,gBACL10B,KAAK+nB,OACL/nB,KAAKspB,aAUjByc,EAAW7lC,UAAUmuB,aAAe,WAChCrM,QAAMqM,aAAaruB,KAAK2D,WAAY3D,KAAKmiB,aAAaC,YAClDpiB,KAAK4mB,WACL5mB,KAAK4mB,SAASjjB,UAAY3D,KAAK2D,UAC/B3D,KAAK4mB,SAAS2nB,aAGtBxI,EAAW7lC,UAAUoc,UAAY,WAC7B0F,QAAMoM,WAAWpuB,KAAKwE,QAASxE,KAAKkiB,aAAcliB,KAAKuiB,gBACnDviB,KAAKwE,SACLwC,eAAahH,KAAKmiB,aAAaC,WAh6D5B,cAi6DHte,aAAW9D,KAAKkiB,cAAgB/a,gBAAiB,UACjDnH,KAAKkiB,aAAa/d,aAAa,WAAYnE,KAAKgE,YAGhDhE,KAAK+nB,OACL9gB,YAAUjH,KAAKmiB,aAAaC,WAt6DzB,cAu6DHte,aAAW9D,KAAKkiB,cAAgB/a,gBAAiB,SACjDnH,KAAKkiB,aAAale,UAAY,IAGtC+hC,EAAW7lC,UAAU+vC,YAAc,SAAUthC,EAAMwW,GACnC,QAARA,GACAnlB,KAAKmnC,QAAUnnC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAK2nC,aAAah5B,EAAKpM,OACnEvC,KAAKmD,eAAgBZ,IAAKvC,KAAKmnC,UAAW,KAG1CnnC,KAAKonC,QAAUpnC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAK2nC,aAAah5B,EAAKnM,OACnExC,KAAKmD,eAAgBX,IAAKxC,KAAKonC,UAAW,IAEd,KAA5BpnC,KAAKkiB,aAAahc,MAClBlG,KAAK49B,eAAe59B,KAAKkG,MAAOlG,KAAKuC,IAAKvC,KAAKwC,KAG/CxC,KAAKoG,WAAWpG,KAAKkiB,aAAahc,OAEtClG,KAAKitC,iBAAiB,MAAM,IAEhClH,EAAW7lC,UAAUgmB,iBAAmB,SAAUrZ,GAC9C,GAAK7M,KAAKwE,QAAV,CAIA,GAAIxE,KAAKgoC,eAAiBhoC,KAAK00B,cAE3B,WADA10B,MAAKkiB,aAAazT,OAGtBzO,MAAK8rC,WAAW,EAAGj/B,GACf7M,KAAK8iB,YAAc9iB,KAAKyhB,iBAAmBzhB,KAAKmjB,aAAuC,WAAxBnjB,KAAKuiB,iBAChEviB,KAAKkiB,aAAahc,QAAUlG,KAAKyhB,iBAAoBzhB,KAAKkG,OAAkC,SAAxBlG,KAAKuiB,gBAAqD,UAAxBviB,KAAKuiB,iBAA8BviB,KAAKmjB,aAC9InjB,KAAKojB,iBAAiB,KAG9Bpc,eAAahH,KAAKmiB,aAAaC,YAAa+iB,GAC5C,IAAIlc,IACAL,MAAO5oB,KAEXA,MAAKua,QAAQ,OAAQ0O,GACjBjpB,KAAKqrC,YAAcrrC,KAAKkiB,aAAahc,MACrClG,KAAK4yB,YAAa5yB,kBAAmBkG,MAAO2G,GAEG,IAA1C7M,KAAKkiB,aAAahc,MAAMgX,OAAOvc,QACpCX,KAAKunC,aAETvnC,KAAKisC,cAAgB,KACrBjsC,KAAK+nC,YAAa,EACc,KAA5B/nC,KAAKkiB,aAAahc,QAClBlG,KAAKuhB,mBAAqB,QAQlCwkB,EAAW7lC,UAAUopB,SAAW,WAC5B,GAAIhC,SAAS0B,gBAAkBhpB,KAAKkiB,aAAc,CAC9CliB,KAAKkiB,aAAa4F,OAClB9gB,eAAahH,KAAKmiB,aAAaC,YAAa+iB,GAC5C,IAAIlc,IACAL,MAAO5oB,KAEXA,MAAKua,QAAQ,OAAQ0O,KAG7B8c,EAAW7lC,UAAUw0B,YAAc,WAC/B,SAAI10B,KAAKuG,eAAgBvG,KAAKuG,aAAa9C,UAAUmI,SAAS,GAAKzK,KAKvE4kC,EAAW7lC,UAAU+lB,kBAAoB,WACrC,GAAKjmB,KAAKwE,QAAV,CAGA,GAAImkB,IACAC,MAAO5oB,KAENA,MAAK2iB,UAAa/e,UAAQC,UAAa7D,KAAK8iB,YAC7C9iB,KAAKwqC,kBAELxqC,KAAK8iB,aAAe9iB,KAAKkiB,aAAahc,OAASlG,KAAKmjB,eAChDnjB,KAAKyhB,iBAAoBzhB,KAAKkG,OAAkC,SAAxBlG,KAAKuiB,gBAAqD,UAAxBviB,KAAKuiB,iBAA8BviB,KAAKmjB,cAClHnjB,KAAKojB,iBAAiBpjB,KAAKyhB,iBAC3BzhB,KAAKkiB,aAAauG,eAAiB,EACnCzoB,KAAKkiB,aAAawG,aAAe1oB,KAAKkiB,aAAahc,MAAMvF,SAGjEX,KAAKua,QAAQ,QAASoO,GACtB3oB,KAAKinC,iBACDjnC,KAAK6oB,aACL7oB,KAAKgoB,SAQb+d,EAAW7lC,UAAUosB,QAAU,WACvBhF,SAAS0B,gBAAkBhpB,KAAKkiB,cAAgBliB,KAAKwE,SACrDxE,KAAKkiB,aAAazT,SAS1Bs3B,EAAW7lC,UAAU6nB,KAAO,WACxB/nB,KAAK8rC,WAAW,IAAK,MACrB9rC,KAAKinC,kBASTlB,EAAW7lC,UAAU8nB,KAAO,SAAUtN,GAClC,GAAI9Y,GAAQ5B,IACZ,MAAKA,KAAKwE,SAAWxE,KAAK2iB,WAAc3iB,KAAKwE,SAAWxE,KAAKuG,cAA7D,CAIIvG,KAAKqnC,gBACDzjC,UAAQC,UAAY7D,KAAKspC,cACzBtpC,KAAKyG,MAAQzG,KAAKqE,cAAc,OAChCrE,KAAKyG,MAAMiB,UAAiBvG,EAAO,gBACnCmmB,SAASyC,KAAKriB,WAAa,mBAC3B4f,SAASyC,KAAK1hB,YAAYrI,KAAKyG,QAE/B7C,UAAQC,WACR7D,KAAK8sC,oBAAsB9sC,KAAKqE,cAAc,OAASqD,UAAW,gCAClE4f,SAASyC,KAAK1hB,YAAYrI,KAAK8sC,sBAEnC9sC,KAAKumC,oBACD5a,MAAO3rB,KAAK4mB,UAAY,KACxBgF,QAAQ,EACRlR,MAAOA,GAAS,KAChBJ,KAAM,OACNuR,SAAUjoB,UAAQC,SAAW7D,KAAK8sC,oBAAsBxlB,SAASyC,KAErE,IAAI+B,GAAY9rB,KAAKumC,kBACrBvmC,MAAKua,QAAQ,OAAQuR,EAAW,SAAUA,GAEtC,GADAlqB,EAAM2kC,mBAAqBza,EACtBlqB,EAAM2kC,mBAAmB3a,QAAWhqB,EAAMugB,aAAaE,QAAQ,GAAG5e,UAAUmI,SA9jElF,cAwlEKhK,EAAMglB,SAASjO,UACf/W,EAAM2E,aAAe3E,EAAMm/B,YAAUtpB,GACrC7V,EAAMsuB,cAAgBtuB,EAAMgkC,gBAAkBhkC,EAAMokC,yBACpDpkC,EAAMglB,SAAW,SA7BgF,CACjGhlB,EAAM2kC,mBAAmB1a,SAASxjB,YAAYzG,EAAM2E,cACpD3E,EAAMsuC,eAAetuC,EAAM2kC,oBAC3B3kC,EAAMogC,oBACDp+B,UAAQC,UACTjC,EAAMsgB,aAAazT,OAEvB,IAAIud,IACA1R,KAAM,SACNtS,SAhkEA,GAkkEJpG,GAAMglB,SAASmF,gBAAgBnqB,EAAMklC,QAChB,MAAjBllC,EAAMiF,OACNjF,EAAMglB,SAASoB,KAAK,GAAIiE,aAAUD,GAAgBpqB,EAAMD,SAGxDC,EAAMglB,SAASoB,KAAK,GAAIiE,aAAUD,GAAgB,MAEtDpqB,EAAMuW,sBACNrU,aAAWlC,EAAMsgB,cAAgBsB,gBAAiB,SAClD1f,aAAWlC,EAAMsgB,cAAgB8L,YAAapsB,EAAMsgB,aAAatZ,GAAK,aACtE3B,YAAUrF,EAAMugB,aAAaC,WAAY+iB,GACzCt5B,eAAanI,IAAI4jB,SAAU,uBAAwB1lB,EAAMirC,qBAAsBjrC,GAC/EA,EAAM0E,gBAAgB1E,EAAMkrC,oBAAqBlrC,EAAMglB,SAASjlB,QAASC,EAAM6E,MAAO7C,UAAQC,eAY9GkiC,EAAW7lC,UAAUoG,gBAAkB,SAAUC,EAAc4pC,EAAkB1pC,EAAO5C,GACpF,GAAIA,IAAaZ,oBAAkBktC,KAAsBltC,oBAAkBwD,KAAWxD,oBAAkBsD,GAAe,CACnH,GAAIG,GAAQC,SAASwpC,EAAiBvpC,MAAMC,OAAQ,IAAMF,SAASwpC,EAAiBvpC,MAAMC,OAAQ,IAAM,GACxGJ,GAAMG,MAAMC,QAAUH,EAAQ,GAAGI,WACjCP,EAAaK,MAAMC,OAASH,EAAMI,aAG1Ci/B,EAAW7lC,UAAUkwC,aAAe,SAAUtoC,GAC1C,GAAI5B,EAOJ,OANoB,gBAAT4B,GACP5B,EAAQolB,aAAWxjB,GAEE,gBAATA,KACZ5B,EAAS4B,EAAKyjB,MAAM,WAAczjB,EAAOyN,MAAM5O,SAASmB,EAAM,KAAOA,EAAOwjB,aAAWxjB,IAEpF5B,GAEX6/B,EAAW7lC,UAAUgwC,eAAiB,SAAUt5B,GAa5C,GAZAA,EAAK+U,MAAMvB,SAASC,EAAIrqB,KAAKowC,aAAax5B,EAAK+U,MAAMvB,SAASC,GAC9DzT,EAAK+U,MAAMvB,SAASE,EAAItqB,KAAKowC,aAAax5B,EAAK+U,MAAMvB,SAASE,GACzD/U,MAAMw1B,WAAWn0B,EAAK+U,MAAMvB,SAASC,KAAQ9U,MAAMw1B,WAAWn0B,EAAK+U,MAAMvB,SAASE,MACnFtqB,KAAK4mB,SAASuD,SAAWnqB,KAAK8mC,OAASxf,SAASyC,KAChD/pB,KAAK4mB,SAAS4D,WAAa,aAE1BjV,MAAMw1B,WAAWn0B,EAAK+U,MAAMvB,SAASC,MACtCrqB,KAAK4mB,SAAS2a,QAAUwJ,WAAWn0B,EAAK+U,MAAMvB,SAASC,IAEtD9U,MAAMw1B,WAAWn0B,EAAK+U,MAAMvB,SAASE,MACtCtqB,KAAK4mB,SAAS2D,QAAUwgB,WAAWn0B,EAAK+U,MAAMvB,SAASE,IAEtD1mB,UAAQC,SA2BqB,WAA1B+S,EAAK+U,MAAMvB,SAASC,GAA4C,WAA1BzT,EAAK+U,MAAMvB,SAASE,IAC1DtqB,KAAK4mB,SAASuD,SAAWnqB,KAAK8mC,OAASxf,SAASyC,KAChD/pB,KAAK4mB,SAAS2D,QAAU,EACxBvqB,KAAK4mB,SAAS4D,WAAa,YAC3BxqB,KAAK4mB,SAAS6D,WAAcJ,EAAG,MAAOC,EAAG,YA/B1B,CACnB,OAAQ1T,EAAK+U,MAAMvB,SAASC,GACxB,IAAK,OACD,KACJ,KAAK,QACDzT,EAAK+U,MAAM4V,QAAUvhC,KAAK2pC,eAAerlB,KACzC,MACJ,KAAK,SACD1N,EAAK+U,MAAM4V,SAAYvhC,KAAK2pC,eAAerlB,MAAQ,EAG3D,OAAQ1N,EAAK+U,MAAMvB,SAASE,GACxB,IAAK,MAEL,IAAK,SACD,KACJ,KAAK,SACD1T,EAAK+U,MAAMpB,SAAYvqB,KAAK2pC,eAAejK,OAAS,EAG9B,WAA1B9oB,EAAK+U,MAAMvB,SAASC,GAA4C,WAA1BzT,EAAK+U,MAAMvB,SAASE,IAC1DtqB,KAAK4mB,SAASuD,SAAWnqB,KAAKmiB,aAAaC,UAC3CpiB,KAAK8mC,OAAS9mC,KAAKkiB,aACnBliB,KAAK4mB,SAAS4D,WAAa,cAkBvCub,EAAW7lC,UAAU4W,eAAiB,WAClC,GAAIC,IAAa,QACjB,OAAO/W,MAAKgX,aAAaD,IAS7BgvB,EAAW7lC,UAAUsD,cAAgB,WACjC,MAAO,cAUXuiC,EAAW7lC,UAAU+W,kBAAoB,SAAUC,EAASC,GACxD,IAAK,GAAIxN,GAAK,EAAGC,EAAKnK,OAAOoK,KAAKqN,GAAUvN,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC9D,GAAIyN,GAAOxN,EAAGD,EACd,QAAQyN,GACJ,IAAK,cACD4K,QAAMkM,eAAehX,EAAQiM,YAAanjB,KAAKkiB,aAC/C,MACJ,KAAK,WACDF,QAAMmM,YAAYnuB,KAAK2iB,SAAU3iB,KAAKkiB,aAAcliB,KAAKuiB,gBACrDviB,KAAK2iB,UACL3iB,KAAK+nB,OAET/nB,KAAKymC,kBACL,MACJ,KAAK,UACDzmC,KAAKmD,eAAgBqB,QAAS0S,EAAQ1S,UAAW,GACjDxE,KAAKsc,WACL,MACJ,KAAK,YACDtc,KAAKymC,kBACL,MACJ,KAAK,YACDzmC,KAAKmD,eAAgBQ,UAAWuT,EAAQvT,YAAa,GACrD3D,KAAKquB,cACL,MACJ,KAAK,WACDruB,KAAKsoB,eAAepR,EAAQsF,SAAUrF,EAAQqF,SAC9C,MACJ,KAAK,SACDxc,KAAKmD,eAAgB0D,OAAQqQ,EAAQrQ,SAAU,GAC/C7G,KAAKsuC,WACL,MACJ,KAAK,iBACDtuC,KAAKqoB,+BACLroB,KAAKkjB,+BACLljB,KAAK6nC,iBAAgB,EACrB,MACJ,KAAK,MACL,IAAK,MACD7nC,KAAKiwC,YAAY/4B,EAASE,EAC1B,MACJ,KAAK,kBACD4K,QAAMsM,eAAetuB,KAAKmkB,gBAAiBnkB,KAAKkiB,aAAcliB,KAAKmiB,cACnEniB,KAAKinB,gBACL,MACJ,KAAK,SACDjnB,KAAKmD,eAAgBH,OAAQkU,EAAQlU,SAAU,GAC/ChD,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAC/ChD,KAAK8jB,KAAKtM,UAAUxX,KAAKgD,QACzBhD,KAAK4rC,oBACL5rC,KAAK6nB,SAAS7nB,KAAKkG,OACflG,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,kBAGhB,MACJ,KAAK,QACDqtB,oBAAkBrwC,KAAKmiB,aAAaC,WAAakC,MAAStkB,KAAKqkB,SAASnN,EAAQoN,SAChFtkB,KAAK2pC,eAAiB3pC,KAAKmiB,aAAaC,UAAUud,wBAClD3d,QAAMC,eAAejiB,KAAKkiB,aAAcliB,KAAKmiB,aAAaC,WACrDnf,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,SAEjG,MACJ,KAAK,SACD1D,KAAKmD,eAAgByO,OAAQsF,EAAQtF,SAAU,GAC/C5R,KAAK0nC,kBACL1nC,KAAK6nB,SAAS7nB,KAAKkG,OACflG,KAAK8iB,aACL9iB,KAAKwsC,aACAxsC,KAAKkG,OACNlG,KAAKojB,iBAAiBpjB,KAAKyhB,iBAGnC,MACJ,KAAK,QACDzhB,KAAKuhB,mBAAqB,KAC1BvhB,KAAK6iB,kBAAkB3L,EAAQhR,OAC/BgR,EAAQhR,MAAQlG,KAAKkG,MAChBlG,KAAKuhB,oBAcNvhB,KAAKojB,iBAAiBpjB,KAAKuhB,oBAC3BvhB,KAAK6mC,gBAAgB7mC,KAAKuhB,sBAdG,gBAAlBrK,GAAQhR,OACflG,KAAKmD,eAAgB+C,MAAOlG,KAAKmG,eAAe,GAAItD,MAAKqU,EAAQhR,UAAW,GAC5EgR,EAAQhR,MAAQlG,KAAKkG,QAGhBgR,EAAQhR,QAAU,GAAIrD,OAAMqU,EAAQhR,OAAOyX,gBAAgB,OAAS3d,KAAKkG,QAC1EgR,EAAQhR,MAAQlG,KAAKmG,eAAe,GAAItD,MAAK,GAAKqU,EAAQhR,SAGlElG,KAAKwnC,UAAYtwB,EAAQhR,MACzBgR,EAAQhR,MAAQlG,KAAK2rC,oBAAoB3rC,KAAKoG,WAAW8Q,EAAQhR,SAMjElG,KAAK8iB,YAAc7f,oBAAkBiU,EAAQhR,SAC7ClG,KAAKojB,iBAAiBpjB,KAAKyhB,iBAC3BzhB,KAAK6mC,gBAAgB7mC,KAAKyhB,kBAE9BzhB,KAAKitC,iBAAiB,MAAM,GACxBjtC,KAAK00B,eACL10B,KAAKgiC,oBAELhiC,KAAKmC,WAAanC,KAAKkC,gBACvBlC,KAAKkC,eAAgB,GAErBlC,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,kBAGhB,MACJ,KAAK,iBACDhjB,KAAKuiB,eAAiBrL,EAAQqL,eAC9BP,QAAMuM,eAAevuB,KAAKmiB,cAC1BH,QAAMwM,YAAYxuB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmjB,aAC1DlgB,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,SAEjG,MACJ,KAAK,aACD1D,KAAKuhB,mBAAqB,KACtBrK,EAAQyN,YACR3kB,KAAK6mC,gBAAgB,MAEzB7mC,KAAKmD,eAAgBwhB,WAAYzN,EAAQyN,aAAc,GACvD3kB,KAAKoG,WAAYpG,kBAAmBkG,OACpClG,KAAKitC,iBAAiB,MAAM,EAC5B,MACJ,KAAK,WACGjtC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAK2nC,aAAazwB,EAAQ0wB,aACnD5nC,KAAKuG,cACLvG,KAAKgrC,cAEThrC,KAAKmD,eAAgBykC,SAAU5nC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAK2nC,aAAazwB,EAAQ0wB,cAAe,IAGrG5nC,KAAKmD,eAAgBykC,SAAU,OAAQ,EAE3C,MACJ,KAAK,aACG5nC,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,mBAEZhjB,KAAKojB,iBAAiBpjB,KAAKyhB,kBAGvBzhB,KAAKkiB,aAAahc,QAAUlG,KAAKyhB,iBACjCzhB,KAAKojB,iBAAiB,OAO9C2iB,EAAW7lC,UAAUynC,aAAe,SAAUpsB,GAC1C,MAAIA,aAAmB1Y,MACX0Y,EAAQC,cAGR,GAAKD,GAGrBnb,GACIub,WAAS,OACVoqB,EAAW7lC,UAAW,YAAS,IAClCE,GACIub,WAAS,OACVoqB,EAAW7lC,UAAW,eAAY,IACrCE,GACIub,YAAS,IACVoqB,EAAW7lC,UAAW,iBAAc,IACvCE,GACIub,WAAS,OACVoqB,EAAW7lC,UAAW,iBAAc,IACvCE,GACIub,WAAS,OACVoqB,EAAW7lC,UAAW,aAAU,IACnCE,GACIub,YAAS,IACVoqB,EAAW7lC,UAAW,cAAW,IACpCE,GACIub,YAAS,IACVoqB,EAAW7lC,UAAW,eAAY,IACrCE,GACIub,gBACDoqB,EAAW7lC,UAAW,qBAAkB,IAC3CE,GACIub,WAAS,UACVoqB,EAAW7lC,UAAW,qBAAkB,IAC3CE,GACIub,WAAS,OACVoqB,EAAW7lC,UAAW,kBAAe,IACxCE,GACIub,WAAS,MACVoqB,EAAW7lC,UAAW,aAAU,IACnCE,GACIub,YAAS,IACVoqB,EAAW7lC,UAAW,wBAAqB,IAC9CE,GACIub,YAAS,IACVoqB,EAAW7lC,UAAW,sBAAmB,IAC5CE,GACIub,WAAS,KACVoqB,EAAW7lC,UAAW,WAAQ,IACjCE,GACIub,WAAS,OACVoqB,EAAW7lC,UAAW,eAAY,IACrCE,GACIub,WAAS,OACVoqB,EAAW7lC,UAAW,YAAS,IAClCE,GACIub,WAAS,OACVoqB,EAAW7lC,UAAW,UAAO,IAChCE,GACIub,WAAS,OACVoqB,EAAW7lC,UAAW,UAAO,IAChCE,GACIub,YAAS,IACVoqB,EAAW7lC,UAAW,gBAAa,IACtCE,GACIub,YAAS,IACVoqB,EAAW7lC,UAAW,kBAAe,IACxCE,GACIub,YAAS,IACVoqB,EAAW7lC,UAAW,iBAAc,IACvCE,GACIub,YAAW7K,IAAK,MAAOkD,MAAO,QAASY,KAAM,OAAQ6Z,KAAM,OAAQC,OAAQ,SAAUC,OAAQ,SAAUC,aAAc,qBACtHmX,EAAW7lC,UAAW,sBAAmB,IAC5CE,GACIwb,WACDmqB,EAAW7lC,UAAW,aAAU,IACnCE,GACIwb,WACDmqB,EAAW7lC,UAAW,cAAW,IACpCE,GACIwb,WACDmqB,EAAW7lC,UAAW,gBAAa,IACtCE,GACIwb,WACDmqB,EAAW7lC,UAAW,WAAQ,IACjCE,GACIwb,WACDmqB,EAAW7lC,UAAW,iBAAc,IACvCE,GACIwb,WACDmqB,EAAW7lC,UAAW,YAAS,IAClCE,GACIwb,WACDmqB,EAAW7lC,UAAW,cAAW,IACpCE,GACIwb,WACDmqB,EAAW7lC,UAAW,WAAQ,IACjCE,GACIwb,WACDmqB,EAAW7lC,UAAW,YAAS,IAClC6lC,EAAa3lC,GACTyb,yBACDkqB,IAELjqB,aC/+EEzc,EAAwC,WACxC,GAAIC,GAAgB,SAAUC,EAAGC,GAI7B,OAHAF,EAAgBG,OAAOC,iBAChBC,uBAA2BC,QAAS,SAAUL,EAAGC,GAAKD,EAAEI,UAAYH,IACvE,SAAUD,EAAGC,GAAK,IAAK,GAAIK,KAAKL,GAAOA,EAAEM,eAAeD,KAAIN,EAAEM,GAAKL,EAAEK,MACpDN,EAAGC,GAE5B,OAAO,UAAUD,EAAGC,GAEhB,QAASO,KAAOC,KAAKC,YAAcV,EADnCD,EAAcC,EAAGC,GAEjBD,EAAEW,UAAkB,OAANV,EAAaC,OAAOU,OAAOX,IAAMO,EAAGG,UAAYV,EAAEU,UAAW,GAAIH,QAGnFK,GAA0C,SAAUC,EAAYC,EAAQC,EAAKC,GAC7E,GAA2HjB,GAAvHkB,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIH,EAAkB,OAATE,EAAgBA,EAAOf,OAAOoB,yBAAyBP,EAAQC,GAAOC,CACrH,IAAuB,gBAAZM,UAAoD,kBAArBA,SAAQC,SAAyBH,EAAIE,QAAQC,SAASV,EAAYC,EAAQC,EAAKC,OACpH,KAAK,GAAIQ,GAAIX,EAAWM,OAAS,EAAGK,GAAK,EAAGA,KAASzB,EAAIc,EAAWW,MAAIJ,GAAKH,EAAI,EAAIlB,EAAEqB,GAAKH,EAAI,EAAIlB,EAAEe,EAAQC,EAAKK,GAAKrB,EAAEe,EAAQC,KAASK,EAChJ,OAAOH,GAAI,GAAKG,GAAKnB,OAAOwB,eAAeX,EAAQC,EAAKK,GAAIA,GAiB5DokC,IAAM,GAAIniC,OAAOsN,UACjB80B,IAAQ,GAAIpiC,OAAOyN,WACnB40B,IAAO,GAAIriC,OAAO2L,cAClB8hC,IAAO,GAAIztC,OAAO2N,WAClB+/B,IAAS,GAAI1tC,OAAO4N,aACpB+/B,IAAS,GAAI3tC,OAAO6N,aACpB+/B,IAAc,GAAI5tC,OAAO8N,kBACzBxP,GAAO,mBAgCPuvC,GAAgC,SAAUjvC,GAS1C,QAASivC,GAAehvC,EAASC,GAC7B,GAAIC,GAAQH,EAAOI,KAAK7B,KAAM0B,EAASC,IAAY3B,IAKnD,OAJA4B,GAAMsmC,iBAAmB,KACzBtmC,EAAM+uC,eAAgB,EACtB/uC,EAAMqK,WAAarK,EAAM4B,gBACzB5B,EAAMgvC,gBAAkBlvC,EACjBE,EA0+CX,MAx/CAvC,GAAUqxC,EAAgBjvC,GAgB1BivC,EAAexwC,UAAU2wC,aAAe,WAC/B7wC,KAAKwE,SAGVyC,YAAUjH,KAAKmiB,aAAaC,WAhDnB,kBAuDbsuB,EAAexwC,UAAUosB,QAAU,WAC/B7qB,EAAOvB,UAAUosB,QAAQzqB,KAAK7B,OAOlC0wC,EAAexwC,UAAUopB,SAAW,WAC5BhC,SAAS0B,gBAAkBhpB,KAAKkiB,eAChCliB,KAAKkiB,aAAa4F,OAClB9gB,eAAahH,KAAKmiB,aAAaC,YAlE1B,oBAqEbsuB,EAAexwC,UAAU4wC,YAAc,SAAUjkC,GAC7C,GAAK7M,KAAKwE,QAAV,CAIA,GAAIxE,KAAK+wC,mBAAqB/wC,KAAKgoC,cAE/B,WADAhoC,MAAKkiB,aAAazT,OAGtBzH,gBAAahH,KAAKmiB,aAAaC,WA9EtB,gBA+ET,IAAI6G,IACAL,MAAO5oB,KAEPA,MAAK+wC,mBACL/wC,KAAK+nB,KAAKlb,GAEd7M,KAAKua,QAAQ,OAAQ0O,KAOzBynB,EAAexwC,UAAUyY,QAAU,WAC3B3Y,KAAKgxC,aAAehxC,KAAKgxC,YAAYrvC,QAAQ8B,UAAUmI,SA/FvD,aAgGA5L,KAAKgxC,YAAYr4B,UACjBtO,SAAOrK,KAAKixC,iBACZjxC,KAAKixC,oBAAkBx5B,GACvBzX,KAAKkwB,cAAgBlwB,KAAK4lC,mBACrB3iC,oBAAkBjD,KAAKkpC,WACxBlpC,KAAKkpC,WAGb,IAAIF,IACAxhC,YAAa,YAAaD,cAAe,OAAQsc,eAAgB,QACjEH,YAAe,MAAOC,eAAkB,MAAOC,WAAc,QAC7DJ,gBAAiB,QAAS/a,KAAQ,WAAYgb,aAAgB,MAE9DzjB,MAAKkiB,cACLF,QAAMwK,iBAAiBwc,EAAehpC,KAAKkiB,cAE3CliB,KAAKykB,eACDzkB,KAAKuG,cACL8D,SAAOrK,KAAKuG,cAEhBvG,KAAKgxC,YAAchxC,KAAKuG,aAAe,KACvCvG,KAAKkxC,gBAAgBv4B,WAEzB3Y,KAAKmxC,oBACLnxC,KAAKkwB,cAAgB,KACrBlwB,KAAKkpC,SAAW,KAChBlpC,KAAKka,gBAAkB,KACvBla,KAAK+gC,QAAU,KACf/gC,KAAKoxC,SAAW,KAChBpxC,KAAKgxC,YAAc,KACnBhxC,KAAK4qB,YAAc,KACnB5qB,KAAKqM,eAAiB,KACtB5K,EAAOvB,UAAUyY,QAAQ9W,KAAK7B,OAQlC0wC,EAAexwC,UAAUmC,OAAS,WAC9BrC,KAAKqxC,kBACDpkB,MAAO,QACPD,OAAQ,SACR1nB,IAAK,MACL6nB,IAAK,MACL9nB,KAAM,OACN8gC,KAAM,YACNC,GAAI,UACJC,KAAM,YACNC,MAAO,aACP5b,KAAM,gBACNC,MAAO,eAEX3qB,KAAKkoC,iBAAmB,KACxBloC,KAAKge,iBAAmB,KACxBhe,KAAKgoC,eAAgB,EACrBhoC,KAAK6xB,aAAe7xB,KAAK2B,QAAQe,WAAU,GAC3C1C,KAAKglB,eAAiBhlB,KAAKsxC,qBAC3BtxC,KAAKwnC,UAAYxnC,KAAKkG,OACjBjD,oBAAkBqB,UAAQtE,KAAK2B,QAAS,cAAgB2C,UAAQtE,KAAK2B,QAAS,YAAY4C,WAC3FvE,KAAKwE,SAAU,GAEnB/C,EAAOvB,UAAUmoB,6BAA6BxmB,KAAK7B,MACnDA,KAAK6nC,iBAAgB,EACrB,IAAIC,IAAe3kB,YAAanjB,KAAKmjB,YACrCnjB,MAAK8jB,KAAO,GAAIpY,QAAK,iBAAkBo8B,EAAY9nC,KAAKgD,QACxDhD,KAAKmD,eAAgBggB,YAAanjB,KAAKmjB,aAAenjB,KAAK8jB,KAAKzY,YAAY,iBAAkB,GAC9F5J,EAAOvB,UAAUmC,OAAOR,KAAK7B,MAC7BA,KAAKwmC,qBACL/kC,EAAOvB,UAAUgjB,6BAA6BrhB,KAAK7B,MACnDA,KAAKuxC,kBACDvxC,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,mBAGhBhjB,KAAK6nB,UAAS,IACV7nB,KAAK8iB,YAAe9iB,KAAKkG,QAASlG,KAAKyhB,iBAA4C,WAAxBzhB,KAAKuiB,gBAAgCviB,KAAKuiB,gBAAmBviB,KAAKmjB,aAC7HnB,QAAM6F,SAAS7nB,KAAKyhB,gBAAiBzhB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAEtFnkB,KAAKmD,eAAgBykC,SAAU5nC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAWpG,KAAK4nC,cAAe,GAChG5nC,KAAKge,iBAAmBhe,KAAKkG,OAAS,GAAIrD,OAAM7C,KAAKkG,OACxB,uBAAzBlG,KAAK2B,QAAQmlB,UACb9mB,KAAKgE,SAAWhE,KAAK2B,QAAQsC,aAAa,YAAcjE,KAAK2B,QAAQuC,aAAa,YAAc,IAChGlE,KAAK2B,QAAQiX,gBAAgB,YACxB5Y,KAAKwE,UACNxE,KAAKkiB,aAAale,UAAY,IAGtCge,QAAMC,eAAejiB,KAAKkiB,aAAcliB,KAAKmiB,aAAaC,WACrDnf,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,oBAEjG1D,KAAK6c,kBAET6zB,EAAexwC,UAAU2nB,SAAW,SAAUrD,GAG1C,OAFkB,KAAdA,IAAwBA,GAAY,GACxCxkB,KAAKwnC,UAAYxnC,KAAKwxC,oBAAoBxxC,KAAKkG,QAC1ClG,KAAK2kB,YAAc3kB,KAAKyxC,aAAazxC,KAAKwnC,WAAY,CACvD,GAAIthC,GAAQlG,KAAKwxC,oBAAoBxxC,KAAKwnC,UAC1CxlB,SAAM6F,SAAS7nB,KAAK4mC,kBAAkB1gC,GAAQlG,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAC3FnkB,KAAKmD,eAAgB+C,MAAOA,IAAS,OAGjCjD,qBAAkBjD,KAAKkG,SACvBlG,KAAKwnC,UAAY,KACjBxnC,KAAKmD,eAAgB+C,MAAO,OAAQ,GAG5ClG,MAAKkoC,iBAAmBloC,KAAKkG,MAC7BzE,EAAOvB,UAAUsiB,YAAY3gB,KAAK7B,KAAMwkB,IAE5CksB,EAAexwC,UAAUsxC,oBAAsB,SAAUtrC,GACrD,GAAI6U,GAAS7U,CAUb,OATIlG,MAAKyxC,aAAavrC,GAClB6U,EAAS/a,KAAK0uC,cAAcxoC,IAGvBlG,KAAKuC,KAAOvC,KAAKwC,KAClBxC,KAAK0xC,oBAAmB,GAGhC1xC,KAAK2xC,gBAAgB52B,GACdA,GAEX21B,EAAexwC,UAAUyxC,gBAAkB,SAAUzrC,GACjDlG,KAAK4xC,cAAe,EACf5xC,KAAK2kB,iBACY3kB,KAAS,SAAmBA,KAAS,OACnDA,KAAK4xC,cAAe,GAG5B5xC,KAAK6mC,mBAET6J,EAAexwC,UAAU2mC,gBAAkB,WACnC7mC,KAAK4xC,aACL5qC,eAAahH,KAAKmiB,aAAaC,WAnO/B,WAsOAnb,YAAUjH,KAAKmiB,aAAaC,WAtO5B,WAwOJte,aAAW9D,KAAKkiB,cAAgB2B,eAAgB7jB,KAAK4xC,aAAe,QAAU,UAElFlB,EAAexwC,UAAUwuC,cAAgB,SAAUxoC,GAC/C,GAAI2nC,GAAU3nC,CAmBd,OAlBIlG,MAAK2kB,YACA3kB,KAAKuC,KAAOvC,KAAKwC,KAClBxC,KAAK0xC,oBAAmB,GACxB7D,EAAU7tC,KAAKwC,MAET0D,GAASlG,KAAKuC,IACpBsrC,EAAU7tC,KAAKuC,KAET2D,GAASlG,KAAKwC,MACpBqrC,EAAU7tC,KAAKwC,MAIdxC,KAAKuC,KAAOvC,KAAKwC,MAClBxC,KAAK0xC,oBAAmB,GACxB7D,EAAU3nC,GAGX2nC,GAEX6C,EAAexwC,UAAUwxC,mBAAqB,SAAUG,GAChDA,GACA5qC,YAAUjH,KAAKmiB,aAAaE,QAAQ,GAAIriB,KAAKoxC,UAnQ1C,cAoQHpxC,KAAK+nB,QAGL/gB,eAAahH,KAAKmiB,aAAaE,QAAQ,GAAIriB,KAAKoxC,UAvQ7C,eA0QXV,EAAexwC,UAAU0mC,kBAAoB,SAAU1gC,GACnD,GAAIyjB,EACJ,OAAK1mB,qBAAkBiD,GAUZ,MARHyjB,EADsB,cAAtB3pB,KAAK2C,cACWiP,OAAQ5R,KAAKsxC,qBAAsBxpC,KAAM,WAAYwJ,SAAU,QAG/DM,OAAQ5R,KAAKsxC,qBAAsBxpC,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,WAE7F5S,KAAK8C,UAAU0O,WAAWtL,EAAOyjB,KAMhD+mB,EAAexwC,UAAUuxC,aAAe,SAAUvrC,GAC9C,OAASjD,oBAAkBiD,KAAWqP,OAAOrP,IAEjDwqC,EAAexwC,UAAUsmC,mBAAqB,WAC1Cx/B,eAAahH,KAAKkiB,cA9SL,gBA+Sblb,eAAahH,KAAKmiB,aAAaC,WAhTrB,kBAiTVnb,YAAUjH,KAAKmiB,aAAaC,WA/Sd,sBAgTdnb,YAAUjH,KAAKkiB,cAAe/gB,IAC9BnB,KAAK8xC,kBAETpB,EAAexwC,UAAU4xC,eAAiB,WACtC9xC,KAAKoxC,SAAWpvB,QAAM+vB,WAAW3tB,yCAA6CpkB,KAAKmiB,aAAaC,YAEpGsuB,EAAexwC,UAAUqxC,gBAAkB,WACvC1lC,eAAanI,IAAI1D,KAAKoxC,SAAU,YAAapxC,KAAKgyC,YAAahyC,MAC/D6L,eAAanI,IAAI1D,KAAKmiB,aAAaE,QAAQ,GAAI,YAAariB,KAAKiyC,YAAajyC,MAC9E6L,eAAanI,IAAI1D,KAAKkiB,aAAc,OAAQliB,KAAK8wC,YAAa9wC,MAC9D6L,eAAanI,IAAI1D,KAAKkiB,aAAc,QAASliB,KAAK6wC,aAAc7wC,MAChEA,KAAK6E,kBAAoBsH,SAAOnM,KAAK6E,kBAAmB7E,KAAKoM,YAC7DpM,KAAKkxC,gBAAkB,GAAI5kC,kBAAetM,KAAKkiB,cAC3C3V,UAAW,UACXC,UAAWxM,KAAKkyC,eAAexlC,KAAK1M,MACpCoM,WAAYpM,KAAK6E,qBAGzB6rC,EAAexwC,UAAUixC,kBAAoB,WACzCtlC,eAAawL,OAAOrX,KAAKoxC,SAAU,uBAAwBpxC,KAAKgyC,aAChEnmC,eAAawL,OAAOrX,KAAKmiB,aAAaE,QAAQ,GAAI,uBAAwBriB,KAAKiyC,aAC3EjyC,KAAKkiB,eACLrW,eAAawL,OAAOrX,KAAKkiB,aAAc,OAAQliB,KAAK8wC,aACpDjlC,eAAawL,OAAOrX,KAAKkiB,aAAc,QAASliB,KAAK6wC,eAErD7wC,KAAKkxC,iBACLlxC,KAAKkxC,gBAAgBv4B,WAG7B+3B,EAAexwC,UAAUorC,eAAiB,WAatC,MAXItrC,MAAKsoC,cAActoC,KAAKwlC,YACJ,OAAhBxlC,KAAKgD,QAAmC,UAAhBhD,KAAKgD,OACjBuG,WAAS,oBAAqBC,0BAG9BxJ,KAAK+oC,qBAAqBr/B,WAAU,GAAK1J,KAAKgD,QAInDhD,KAAKwlC,YAIxBkL,EAAexwC,UAAUoxC,mBAAqB,WAC1C,GAEI7I,GADU,GAAI1lC,wBAAqB/C,KAAKgD,QACnBuiB,gBAAiBjU,SAAU,OAOpD,OANItR,MAAKsoC,cAActoC,KAAK+kB,cACb0jB,EAAa,IAAMzoC,KAAKmyC,cAAc,QAGtCnyC,KAAK+kB,cAIxB2rB,EAAexwC,UAAUiyC,cAAgB,SAAUrqC,GAQ/C,MANoB,OAAhB9H,KAAKgD,QAAmC,UAAhBhD,KAAKgD,OACbuG,WAAS,oBAAqBC,0BAG9BxJ,KAAK+oC,qBAAqBr/B,WAAU,GAAK1J,KAAKgD,SAItE0tC,EAAexwC,UAAUooC,cAAgB,SAAUpiC,GAC/C,SAAIjD,oBAAkBiD,IAA4B,gBAAVA,IAAuC,KAAjBA,EAAMgX,SAOxEwzB,EAAexwC,UAAU6oC,qBAAuB,SAAU7vB,EAAIzY,GAC1D,MAA0B,cAAtBT,KAAK2C,aACE4G,WAAS,QAAevJ,KAAKgD,OAAS,+CAAgDkW,GAGtF3P,WAAS,QAAevJ,KAAKgD,OAAS,6CAA8CkW,IAGnGw3B,EAAexwC,UAAU8xC,YAAc,SAAUnlC,GACxC7M,KAAKwE,UAGVxE,KAAK0hB,eAAgB,EACjB9d,UAAQC,UACR7D,KAAKkiB,aAAa/d,aAAa,WAAY,IAE3C0I,EAAE2F,gBAAkBxS,KAAKoxC,UACzBvkC,EAAEmB,iBAEFhO,KAAKwE,UAAYxE,KAAK2iB,WAClB3iB,KAAKoyC,mBACL3wC,EAAOvB,UAAU6nB,KAAKlmB,KAAK7B,KAAM6M,GAEjC7M,KAAK+wC,kBACL/wC,KAAK8rC,WAAWj/B,IAGhB7M,KAAKkiB,aAAazT,QAClBzO,KAAKqnC,cAAc,OAAQx6B,GAC3B5F,YAAUjH,KAAKmiB,aAAaC,YA1Y3B,oBA6YTpiB,KAAK0hB,eAAgB,IAEzBgvB,EAAexwC,UAAU+xC,YAAc,SAAUplC,GACxC7M,KAAKwE,UAGNqI,EAAE2F,gBAAkBxS,KAAKmiB,aAAaE,QAAQ,IAC9CxV,EAAEmB,iBAEFhO,KAAKwE,UAAYxE,KAAK2iB,WAClB3iB,KAAK+wC,mBACL/wC,KAAK8rC,WAAWj/B,GAEf5J,oBAAkBjD,KAAKuG,eACxBvG,KAAKqnC,cAAc,OAAQx6B,MAIvC6jC,EAAexwC,UAAU8nB,KAAO,SAAUlgB,EAAM+E,GACvC7M,KAAKwE,SAAWxE,KAAK2iB,WAAc3iB,KAAKwE,UAI5B,SAATsD,GAAoB9H,KAAKixC,gBAMnBjxC,KAAK4mB,WACP5mB,KAAK+wC,mBACL/wC,KAAK+nB,KAAKlb,GAEdpL,EAAOvB,UAAU8nB,KAAKnmB,KAAK7B,MAC3BA,KAAKqnC,cAAc,OAAQx6B,KAVvB7M,KAAKoyC,mBACLpyC,KAAK+nB,KAAKlb,GAEd7M,KAAKqnC,cAAc,OAAQx6B,MAWvC6jC,EAAexwC,UAAUmyC,OAAS,SAAUxlC,GACpC7M,KAAKoyC,mBACL3wC,EAAOvB,UAAU6nB,KAAKlmB,KAAK7B,KAAM6M,GACjC7M,KAAKgoB,KAAK,OAAQ,OAEbhoB,KAAK+wC,mBACV/wC,KAAK+nB,KAAKlb,GACVpL,EAAOvB,UAAU8nB,KAAKnmB,KAAK7B,KAAM,KAAM6M,GACvC7M,KAAKqnC,cAAc,OAAQ,OAG3BrnC,KAAKgoB,KAAK,KAAMnb,IAGxB6jC,EAAexwC,UAAUoyC,aAAe,WACpC,GAAIC,EAEAA,GADsB,cAAtBvyC,KAAK2C,aACQ3C,KAAK8C,UAAUyO,UAAUvR,KAAKkiB,aAAahc,OACpD0L,OAAQ5R,KAAKsxC,qBAAsBxpC,KAAM,aAIhC9H,KAAK8C,UAAUyO,UAAUvR,KAAKkiB,aAAahc,OACpD0L,OAAQ5R,KAAKsxC,qBAAsBxpC,KAAM,WAAY8K,SAAU,WAGvE,IAAI1M,GAAQjD,oBAAkBjD,KAAKkG,OAAqC,KAA5BlG,KAAKkiB,aAAahc,MAC1DqsC,EAAa,GAAI1vC,MAAS7C,KAAKkG,KACnClG,MAAKkoC,iBAAmBhiC,EACxBlG,KAAKspC,YAAcjlC,gBAAc,OAASqD,UA3cpC,YA2cwDG,OAASi5B,SAAY,MACnF,IAAIv+B,GAAMvC,KAAKwyC,UAAUtsC,GACrB1D,EAAMxC,KAAKyyC,QAAQvsC,GACnBwsC,EAAcrN,iBAAeC,gBAAgBtlC,KAAKqE,cAAe9B,EAAKC,EAAKxC,KAAK8C,UAAW9C,KAAKsrC,iBAAkBtrC,KAAKylC,KAC3HzlC,MAAK4lC,gBAAkB8M,EAAY19B,WACnChV,KAAK+gC,QAAU2R,EAAY7M,KAC3B/hC,aAAW9D,KAAK+gC,SAAWt4B,KAAQ,UAAWy4B,cAAe,QAASt4B,GAAM5I,KAAK2B,QAAQiH,GAAK,aAC9FygC,UAAQqJ,EAAY7M,MAAO7lC,KAAKspC,aAChCtpC,KAAK2yC,oBACL,IAAIjJ,IAAgB1hC,SAAU,IAAKC,SAAU,eAC7CjI,MAAKkpC,SAAWnhC,eAAa/H,KAAKspC,YAAaI,GAC/C1pC,KAAKkwB,cAAgBlwB,KAAKspC,YAAYl/B,iBAAiB,iBAE3DsmC,EAAexwC,UAAUmnC,cAAgB,SAAUv/B,EAAM+E,GACjDjJ,UAAQC,UACR7D,KAAK2B,QAAQwC,aAAa,WAAY,YAE7B,SAAT2D,GACK9H,KAAK2iB,UAAY3iB,KAAKuG,eACvBU,YAAUjH,KAAKuG,cAveJ,2BAweXzC,aAAW9D,KAAKuG,cAAgBqC,GAAM5I,KAAK2B,QAAQiH,GAAK,gBAIvD5I,KAAK2iB,WACN3iB,KAAKixC,gBAAkB5sC,gBAAc,OACjCqD,UAAWvG,GAAO,WAClB0G,OAASe,GAAM5I,KAAK2B,QAAQiH,GAAK,aAAchC,MAAS,uCAEvD3D,oBAAkBjD,KAAKwc,YACxBxc,KAAKixC,gBAAgBvpC,WAAa,IAAM1H,KAAKwc,WAE5CvZ,oBAAkBjD,KAAKylC,OAASzlC,KAAKylC,KAAO,IAC7CzlC,KAAKsyC,eACLjJ,UAAQrpC,KAAKspC,aAActpC,KAAKixC,kBAEpC3pB,SAASyC,KAAK1hB,YAAYrI,KAAKixC,iBAC/BjxC,KAAK4yC,mBACL5yC,KAAKq1B,cACLr1B,KAAK6yC,wBACL7yC,KAAK8yC,UAAUjmC,GACf7M,KAAKgxC,YAAYjlB,gBAAgB/rB,KAAKkiB,gBAIlDwuB,EAAexwC,UAAU4yC,UAAY,SAAUjmC,GAC3C,GAAIjL,GAAQ5B,IACZA,MAAK4qB,aACDgB,QAAQ,EACRD,MAAO3rB,KAAKgxC,YACZt2B,MAAO7N,GAAK,KAEhB,IAAIif,GAAY9rB,KAAK4qB,WACrB5qB,MAAKua,QAAQ,OAAQuR,EAAW,SAAUA,GAEtC,GADAlqB,EAAMgpB,YAAckB,GACflqB,EAAMgpB,YAAYgB,SAAWhqB,EAAM+gB,SAAU,CAC9C,GAAIqJ,IACA1R,KAAM,SACNtS,SA9fI,IAggBa,OAAjBpG,EAAMiF,OACNjF,EAAMovC,YAAYhpB,KAAK,GAAIiE,aAAUD,GAAgBpqB,EAAMD,SAG3DC,EAAMovC,YAAYhpB,KAAK,GAAIiE,aAAUD,GAAgB,MAEzD/kB,YAAUrF,EAAMugB,aAAaC,YAhhBzB,gBAihBJte,aAAWlC,EAAMsgB,cAAgBsB,gBAAiB,SAClD1f,aAAWlC,EAAMsgB,cAAgB8L,YAAapsB,EAAMsgB,aAAatZ,GAAK,aACtEiD,eAAanI,IAAI4jB,SAAU,uBAAwB1lB,EAAMirC,qBAAsBjrC,OAI3F8uC,EAAexwC,UAAU2sC,qBAAuB,SAAUnyB,GACtD,GAAIpa,GAASoa,EAAMpa,QACb2C,oBAAkBjD,KAAKgxC,eAAiBhxC,KAAKmiB,aAAaC,UAAUxW,SAAStL,IAA0B,cAAfoa,EAAM5S,MAC/F9H,KAAKgxC,YAAYrvC,SAAW3B,KAAKgxC,YAAYrvC,QAAQiK,SAAStL,KAA6B,eAAfoa,EAAM5S,MACnF4S,EAAM1M,iBAEJ1J,UAAQhE,EAAQ,SAAWN,KAAKgxC,aAAehxC,KAAKgxC,YAAYrvC,QAAQiH,GAAK,QAAWtI,IAAWN,KAAKkiB,cACvG5hB,IAAWN,KAAKoxC,UAAanuC,oBAAkBjD,KAAKmiB,eAAiB7hB,IAAWN,KAAKmiB,aAAaC,UAMhG9hB,IAAWN,KAAKkiB,eAChBte,UAAQC,WACT7D,KAAKgoC,cAAkB1gB,SAAS0B,gBAAkBhpB,KAAKkiB,eAAkBte,UAAQmsC,MAA8B,SAAtBnsC,UAAQosC,KAAK11B,OAC/Fha,IAAWN,KAAKgxC,YAAYrvC,UARnC3B,KAAK+wC,oBACL/wC,KAAK+nB,KAAKrN,GACV1a,KAAKspB,aAUjBonB,EAAexwC,UAAU6wC,gBAAkB,WACvC,SAAQ/wC,KAAKixC,kBAAmBjxC,KAAKixC,gBAAgBxtC,UAAUmI,SAAS,GAAKzK,MAEjFuvC,EAAexwC,UAAUkyC,gBAAkB,WACvC,SAAQpyC,KAAKuG,eAAgBvG,KAAKuG,aAAa9C,UAAUmI,SArjBtC,6BAujBvB8kC,EAAexwC,UAAUm1B,YAAc,WACnC,GAAIzzB,GAAQ5B,IACZA,MAAK2pC,eAAiB3pC,KAAKmiB,aAAaC,UAAUud,wBAC9C/7B,UAAQC,WACR7D,KAAK+yC,UAAY1uC,gBAAc,OAC/BrE,KAAK+yC,UAAUrrC,UAAiBvG,GAAO,gBACvCmmB,SAASyC,KAAKriB,WAAa,mBAC3B1H,KAAK+yC,UAAUnsC,MAAMojB,QAAU,QAC/B1C,SAASyC,KAAK1hB,YAAYrI,KAAK+yC,WAGnC/yC,MAAKgxC,YAAc,GAAI/mB,SAAMjqB,KAAKixC,iBAC9B3sB,MAAOtkB,KAAK4pC,gBACZ/iC,OAAQ7G,KAAK6G,OACb2jB,WAAY,YACZC,UAAW7mB,UAAQC,UAAawmB,EAAG,MAAOC,EAAG,QAAYD,EAAG,OAAQC,EAAG,QACvEH,SAAUvmB,UAAQC,SAAWyjB,SAASyC,KAAO/pB,KAAKmiB,aAAaC,UAC/DgI,SAAUxmB,UAAQC,UAAawmB,EAAG,SAAUC,EAAG,WAAeD,EAAG,OAAQC,EAAG,UAC5E3mB,UAAW3D,KAAK2D,UAChB4mB,QATS,EAUTG,KAAM,WACF9oB,EAAMqvC,gBAAgBrqC,MAAMijC,WAAa,UACzC5iC,YAAUrF,EAAMwvC,UAlkBnB,YAmkBQxtC,UAAQC,WACTjC,EAAMyvC,iBAAmBllC,SAAOvK,EAAMyvC,iBAAkBzvC,EAAMwK,YAC9DxK,EAAMusC,WAAa,GAAI7hC,kBAAe1K,EAAMugB,aAAaC,WACrD5V,UAAW5K,EAAMoxC,oBAAoBtmC,KAAK9K,GAC1CwK,WAAYxK,EAAMyvC,iBAClB9kC,UAAW,cAGpBoe,MAAO,WACN3jB,eAAapF,EAAMwvC,UA5kBtB,YA6kBGxvC,EAAMqxC,uBACNrxC,EAAMsgB,aAAatJ,gBAAgB,yBACnCvB,SAAOzV,EAAMovC,YAAYrvC,SACzBC,EAAMovC,YAAYr4B,UAClB/W,EAAMqvC,gBAAgBrmC,UAAY,GAClChJ,EAAM0nC,YAAc1nC,EAAMqvC,oBAAkBx5B,GACxC7V,EAAMusC,YACNvsC,EAAMusC,WAAWx1B,WAEtBmS,mBAAoB,WACdlnB,UAAQC,UACTjC,EAAMmmB,UAIlB/nB,KAAKgxC,YAAYrvC,QAAQiF,MAAMkjC,UAlmBlB,SAomBjB4G,EAAexwC,UAAUgzC,aAAe,SAAU5uB,GAW9C,MATIA,GADiB,gBAAVA,GACCgH,aAAWhH,GAEG,gBAAVA,GAEJA,EAGA,QAIhBosB,EAAexwC,UAAU0pC,cAAgB,WACrC,GAAItlB,GAAQtkB,KAAKkzC,aAAalzC,KAAKskB,MAKnC,OAJIA,GAAMtR,QAAQ,MAAQ,IAEtBsR,GADiBtkB,KAAK2pC,eAAerlB,MAAQymB,WAAWzmB,GAAS,KAC9Cxd,WAAa,MAE7Bwd,GAEXosB,EAAexwC,UAAUyyC,mBAAqB,WAC1C9mC,eAAanI,IAAI1D,KAAKspC,YAAa,QAAStpC,KAAKigC,aAAcjgC,MAC1D4D,UAAQC,WACTgI,eAAanI,IAAI1D,KAAKspC,YAAa,YAAatpC,KAAKsgC,YAAatgC,MAClE6L,eAAanI,IAAI1D,KAAKspC,YAAa,WAAYtpC,KAAKugC,aAAcvgC,QAG1E0wC,EAAexwC,UAAU+yC,qBAAuB,WACxCjzC,KAAKspC,cACLz9B,eAAawL,OAAOrX,KAAKspC,YAAa,QAAStpC,KAAKigC,cACpDp0B,eAAawL,OAAOiQ,SAAU,uBAAwBtnB,KAAK6sC,sBACtDjpC,UAAQC,WACTgI,eAAanI,IAAI1D,KAAKspC,YAAa,YAAatpC,KAAKsgC,YAAatgC,MAClE6L,eAAanI,IAAI1D,KAAKspC,YAAa,WAAYtpC,KAAKugC,aAAcvgC,SAI9E0wC,EAAexwC,UAAUogC,YAAc,SAAU5lB,GAC7C,GAAI2yB,GAAY/oC,UAAQoW,EAAMpa,OAAQ,eACtCN,MAAKmzC,aAAa9F,EAroBd,YAuoBRqD,EAAexwC,UAAUqgC,aAAe,WACpCvgC,KAAKozC,gBAxoBD,YA0oBR1C,EAAexwC,UAAUizC,aAAe,SAAUhT,EAAIz4B,GAC9C1H,KAAKwE,SAAWxE,KAAKutC,UAAUpN,KAAQA,EAAG18B,UAAUmI,SAASlE,KAC7D1H,KAAKozC,gBAAgB1rC,GACrBT,YAAUk5B,GAAKz4B,KAGvBgpC,EAAexwC,UAAUspC,eAAiB,WACtC,GAAI9J,GAAS/4B,SAxpBA,QAwpByB,IAClC8iC,EAAczpC,KAAKixC,gBAAgBtR,wBAAwBD,MAC/D,OAAO+J,GAAc/J,EAASA,EAAS+J,GAE3CiH,EAAexwC,UAAU0e,YAAc,SAAU/R,GAC7CpL,EAAOvB,UAAU0e,YAAY/c,KAAK7B,KAAM6M,IACnC7M,KAAKkG,OAASlG,KAAKkG,MAAM2O,cAAgB7U,KAAKge,mBAAqBhe,KAAKge,iBAAiBnJ,aAC1F7U,KAAKkoC,iBAAmBloC,KAAKkG,MAC7BlG,KAAKqzC,cAAc,QACnBrzC,KAAKge,iBAAmBhe,KAAKkG,OAAS,GAAIrD,OAAM7C,KAAKkG,SAG7DwqC,EAAexwC,UAAU0yB,YAAc,SAAU/lB,GAC7C7M,KAAKqzC,cAAc,SACdrzC,KAAKge,mBAAsBhe,KAAKkG,QACjClG,KAAKwd,aACDtX,MAAOlG,KAAKkG,MAAOwU,MAAO7N,GAAK,KAC/BgS,cAAe5b,oBAAkB4J,GACjClL,QAAS3B,KAAK2B,SAElB3B,KAAK4yC,mBACL5yC,KAAKua,QAAQ,SAAUva,KAAKwd,aAC5Bxd,KAAKge,iBAAmBhe,KAAK+d,aAAe/d,KAAKkG,QAGzDwqC,EAAexwC,UAAU2yC,sBAAwB,WAC7C,GAAIrsC,GAAexG,KAAKka,eACnBjX,qBAAkBuD,GAGdxG,KAAKixC,iBAAmBjxC,KAAKmG,eAAenG,KAAK4nC,WACtD5nC,KAAKgrC,cAHLhrC,KAAKirC,cAAczkC,IAM3BkqC,EAAexwC,UAAU+qC,cAAgB,SAAUtpC,GAC/C,GAAI6gC,GAAaxiC,KAAKwpC,iBAClB8J,EAAc3xC,EAAQ2gC,mBACtB5C,EAAS4T,EAAcA,EAAY1Q,UAAYjhC,EAAQihC,UACvD2Q,EAAa5xC,EAAQg+B,wBAAwBD,MAC5CA,GAAS/9B,EAAQihC,UAAaJ,EAC/BxiC,KAAKixC,gBAAgBnO,UAAYwQ,EAAe5T,GAAU8C,EAvrBnD,EAurB+E+Q,EAvrB/E,GAurB6G7T,EAGpH1/B,KAAKixC,gBAAgBnO,UAAY,GAGzC4N,EAAexwC,UAAU8qC,YAAc,WACnC,GAAIrpC,GACAupC,EAAQlrC,KAAKixC,gBAAgB7mC,iBAAiB,eAClD,IAAI8gC,EAAMvqC,QAAU,EAAG,CACnBX,KAAK2wC,eAAgB,CACrB,IAAIxF,GAAcnrC,KAAK4lC,gBAAgB,GACnCwF,EAAaprC,KAAKgnC,cAAchnC,KAAKmG,eAAenG,KAAK4nC,WAAWpuB,SACxE7X,GAAUupC,EAAM/1B,KAAKyL,OAAOwqB,EAAaD,IAA4B,IAAZnrC,KAAKylC,YAG9DzlC,MAAKixC,gBAAgBnO,UAAY,CAEhC7/B,qBAAkBtB,GAInB3B,KAAKixC,gBAAgBnO,UAAY,EAHjC9iC,KAAKirC,cAActpC,IAM3B+uC,EAAexwC,UAAUmzC,cAAgB,SAAUvrC,GAC/C,GAAa,SAATA,EACA9H,KAAKkiB,aAAahc,MAAQlG,KAAKqjB,qBAAuBrjB,KAAK4mC,kBAAkB5mC,KAAKwzC,mBAClFxzC,KAAKmD,eAAgB+C,MAAOlG,KAAKwzC,oBAAqB,OAErD,CACD,GAAIC,GAAUzzC,KAAK4mC,kBAAkB,GAAI/jC,MAAK7C,KAAK4lC,gBAAgB5lC,KAAK6zB,cACxE7R,SAAM6F,SAAS4rB,EAASzzC,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBACrEnkB,KAAKqjB,qBAAuBrjB,KAAKkiB,aAAahc,MAC9ClG,KAAKmD,eAAgB+C,MAAO,GAAIrD,MAAK7C,KAAK4lC,gBAAgB5lC,KAAK6zB,gBAAiB,GAC5E7zB,KAAK8iB,YACL9iB,KAAKwsC,aAGbxsC,KAAK4iB,mBAET8tB,EAAexwC,UAAUszC,gBAAkB,WACvC,GAAIttC,GAAQ,IAOZ,OALIA,GADAlG,KAAKyxC,aAAazxC,KAAKkoC,kBACfloC,KAAK0zC,gBAAgB1zC,KAAKkoC,kBAG1BloC,KAAK+d,aAEV/d,KAAKwxC,oBAAoBtrC,IAEpCwqC,EAAexwC,UAAUssC,WAAa,WAClCxsC,KAAK+iB,OAAO,cACRC,OAAQ,oBAGhB0tB,EAAexwC,UAAUwzC,gBAAkB,SAAUxtC,GACjD,GAAIlG,KAAKyxC,aAAavrC,GAAQ,CAC1B,GAAI4K,GAAM9Q,KAAK+d,aAAa5N,UACxB6D,EAAQhU,KAAK+d,aAAazN,WAC1BsE,EAAO5U,KAAK+d,aAAavP,cACzBigB,EAAOvoB,EAAMsK,WACbmjC,EAAUztC,EAAMuK,aAChBmjC,EAAU1tC,EAAMwK,YACpB,OAAO,IAAI7N,MAAK+R,EAAMZ,EAAOlD,EAAK2d,EAAMklB,EAASC,GAGjD,MAAO5zC,MAAK+d,cAGpB2yB,EAAexwC,UAAU+/B,aAAe,SAAUvlB,GAC9C,GAAIpa,GAASoa,EAAMpa,OACf6/B,EAAKngC,KAAKka,gBAAkB5V,UAAQhE,EAAQ,eAC5C6/B,IAAMA,EAAG18B,UAAUmI,SA/vBf,iBAgwBJ5L,KAAKouC,UAAYjO,EAAGj8B,aAAa,cACjClE,KAAK+nB,KAAKrN,IAEd1a,KAAK0sC,aAAavM,EAAIzlB,IAE1Bg2B,EAAexwC,UAAUwsC,aAAe,SAAUvM,EAAIzlB,GAClD,GAAI1a,KAAKutC,UAAUpN,KAAQA,EAAG18B,UAAUmI,SA1wBnC,YA0wBqD,CACtD5L,KAAKka,gBAAkBimB,CACvB,IAAIz5B,GAAQ9G,MAAMM,UAAUiK,MAAMtI,KAAK7B,KAAKkwB,eAAeld,QAAQmtB,EACnEngC,MAAK6zB,YAAcntB,EACnB1G,KAAKkoC,iBAAmB,GAAIrlC,MAAK7C,KAAK4lC,gBAAgB5lC,KAAK6zB,cAC3D5sB,YAAUjH,KAAKka,iBA/wBd,YAgxBDla,KAAKka,gBAAgB/V,aAAa,gBAAiB,QACnDnE,KAAK4yB,YAAYlY,KAGzBg2B,EAAexwC,UAAU2zC,mBAAqB,WAC1C,GAAI7E,GAAc/rC,oBAAkBjD,KAAKixC,iBAAmBjxC,KAAKspC,YAActpC,KAAKixC,eACpF,KAAKhuC,oBAAkB+rC,GAAc,CACjC,GAAI9D,GAAQ8D,EAAY5kC,iBAAiB,eACzC,IAAI8gC,EAAMvqC,OACN,IAAK,GAAIK,GAAI,EAAGA,EAAIkqC,EAAMvqC,OAAQK,IAC9B,GAAIhB,KAAK4lC,gBAAgB5kC,MAAShB,KAAsB,iBAAE,CACtDkrC,EAAMlqC,GAAGmD,aAAa,gBAAiB,QACvCnE,KAAKka,gBAAkBgxB,EAAMlqC,GAC7BhB,KAAK6zB,YAAc7yB,EACnBhB,KAAK8zC,yBACL,UAMpBpD,EAAexwC,UAAU4zC,wBAA0B,YAC1C7wC,oBAAkBjD,KAAKka,kBAAoBla,KAAKkG,MACjDpC,aAAW9D,KAAKkiB,cAAgBxZ,wBAAyB1I,KAAKka,gBAAgBhW,aAAa,QAG3FlE,KAAKkiB,aAAatJ,gBAAgB,0BAG1C83B,EAAexwC,UAAU0yC,iBAAmB,WACxC5yC,KAAKka,gBAAkB,KACvBla,KAAK+zC,sBACL/zC,KAAK6zC,qBACA5wC,oBAAkBjD,KAAKka,mBACxBjT,YAAUjH,KAAKka,iBAlzBd,YAmzBDla,KAAKka,gBAAgB/V,aAAa,gBAAiB,UAG3DusC,EAAexwC,UAAU6zC,oBAAsB,WAE3C,GADA/zC,KAAKozC,gBAtzBD,YAuzBCnwC,oBAAkBjD,KAAKixC,iBAAkB,CAC1C,GAAI/F,GAAQlrC,KAAKixC,gBAAgB7mC,iBAAiB,YAC9C8gC,GAAMvqC,SACNqG,cAAYkkC,EA3zBf,YA4zBGA,EAAM,GAAGtyB,gBAAgB,oBAIrC83B,EAAexwC,UAAUkzC,gBAAkB,SAAU1rC,GACjD,GAAI+nC,GAAczvC,KAAKg0C,iBAAiBtsC,EACpC+nC,IAAeA,EAAY9uC,QAC3BqG,cAAYyoC,EAAa/nC,IAGjCgpC,EAAexwC,UAAU8zC,iBAAmB,SAAUtsC,GAClD,GACI+nC,GADAT,EAAc/rC,oBAAkBjD,KAAKixC,iBAAmBjxC,KAAKspC,YAActpC,KAAKixC,eAKpF,OAHKhuC,qBAAkB+rC,KACnBS,EAAcT,EAAY5kC,iBAAiB,IAAM1C,IAE9C+nC,GAEXiB,EAAexwC,UAAUqtC,UAAY,SAAUpN,GAC3C,MAAQA,IAAMA,EAAG18B,UAAUmI,SA30BnB,iBA20B2Cu0B,EAAG18B,UAAUmI,SAn1BzD,eAq1BX8kC,EAAexwC,UAAU+zC,kBAAoB,SAAU/tC,EAAO0tB,EAAOsgB,GACjE,GAAIpjC,GAAM5K,EAAMiK,UACZ6D,EAAQ9N,EAAMoK,WACdsE,EAAO1O,EAAMsI,cACb2lC,EAAQjuC,EAAMsK,WACdmjC,EAAUztC,EAAMuK,aAChBmjC,EAAU1tC,EAAMwK,aAChB0jC,EAAeluC,EAAMyK,iBACzB,OAAIijB,GACe,cAAXsgB,EACO,GAAIrxC,MAAK+R,EAAMZ,EAAOlD,EAAK,EAAG,EAAG,GAGjC,GAAIjO,MAAK+R,EAAMZ,EAAOlD,EAAK,GAAI,GAAI,IAIvC,GAAIjO,MAAK+R,EAAMZ,EAAOlD,EAAKqjC,EAAOR,EAASC,EAASQ,IAGnE1D,EAAexwC,UAAUsyC,UAAY,SAAU7jC,GAC3C,GAAI0lC,GACAxpC,EACAypC,EAAUt0C,KAAKuC,IACf2D,EAAiB,OAATyI,EAAgB,GAAI9L,MAAS8L,CAezC,QAdMzI,EAAMiK,YAAemkC,EAAQnkC,YAAcjK,EAAMoK,aAAgBgkC,EAAQhkC,aAC1EpK,EAAMsI,gBAAmB8lC,EAAQ9lC,gBAAqB,GAAI3L,MAAKqD,EAAMsI,cAAetI,EAAMoK,WAAYpK,EAAMiK,aAC5G,GAAItN,MAAKyxC,EAAQ9lC,cAAe8lC,EAAQhkC,WAAYgkC,EAAQnkC,YAC7DtF,GAAQ,EACRwpC,EAAiBr0C,KAAKuC,MAEhB2D,GAASlG,KAAKwC,MAAQ0D,GAASlG,KAAKuC,KAC1CsI,GAAQ,EACRwpC,EAAiBnuC,IAEXA,IAAUlG,KAAKwC,MACrBqI,GAAQ,EACRwpC,EAAiBr0C,KAAKwC,KAEnBxC,KAAKi0C,kBAAkBI,EAAgBxpC,EAAO,cAEzD6lC,EAAexwC,UAAUuyC,QAAU,SAAU9jC,GACzC,GAAI4lC,GACAjvC,EACAkvC,EAAUx0C,KAAKwC,IACf0D,EAAiB,OAATyI,EAAgB,GAAI9L,MAAS8L,CAezC,QAdMzI,EAAMiK,YAAeqkC,EAAQrkC,YAAcjK,EAAMoK,aAAgBkkC,EAAQlkC,aAC1EpK,EAAMsI,gBAAmBgmC,EAAQhmC,gBAAoB,GAAI3L,MAAKqD,EAAMuuC,iBAAkBvuC,EAAMoK,WAAYpK,EAAMiK,aAC9G,GAAItN,MAAK2xC,EAAQhmC,cAAegmC,EAAQlkC,WAAYkkC,EAAQrkC,YAC7D7K,GAAM,EACNivC,EAAev0C,KAAKwC,MAEd0D,GAASlG,KAAKwC,MAAQ0D,GAASlG,KAAKuC,KAC1C+C,GAAM,EACNivC,EAAeruC,IAETA,IAAUlG,KAAKuC,MACrB+C,GAAM,EACNivC,EAAev0C,KAAKuC,KAEjBvC,KAAKi0C,kBAAkBM,EAAcjvC,EAAK,YAErDorC,EAAexwC,UAAU6nB,KAAO,SAAUlb,GACtC,GAAIjL,GAAQ5B,IACZ,IAAIA,KAAK4mB,UAAY5mB,KAAKixC,gBAAiB,CACvCjxC,KAAK4qB,aACDgB,QAAQ,EACRD,MAAO3rB,KAAK4mB,UAAY5mB,KAAKgxC,YAC7Bt2B,MAAO7N,GAAK,KAEhB,IAAIif,GAAY9rB,KAAK4qB,WACjB3nB,qBAAkBjD,KAAK4mB,UACvB5mB,KAAKua,QAAQ,QAASuR,EAAW,SAAUA,GACvClqB,EAAM8yC,2BAA2B7nC,EAAGif,KAIxC9rB,KAAK00C,2BAA2B7nC,EAAGif,OAInCloB,WAAQC,UAAY7D,KAAK0iB,YAAc1iB,KAAK2iB,UAC5C3iB,KAAKkiB,aAAatJ,gBAAgB,YAEtC5Y,KAAKyiB,gBAGbiuB,EAAexwC,UAAUw0C,2BAA6B,SAAU7nC,EAAGif,GAC/D9rB,KAAK4qB,YAAckB,EACd9rB,KAAK4qB,YAAYgB,SACd5rB,KAAKoyC,kBACL3wC,EAAOvB,UAAU6nB,KAAKlmB,KAAK7B,KAAM6M,GAE5B7M,KAAK+wC,oBACV/wC,KAAK8rC,WAAWj/B,GAChB7F,eAAasgB,SAASyC,MA16BvB,mBA26BKnmB,UAAQC,UAAY7D,KAAK+yC,YACzB/yC,KAAK+yC,UAAUnsC,MAAMojB,QAAU,OAC/BhqB,KAAK+yC,UAAU1mB,UAAY,GAC3BrsB,KAAK+yC,UAAY,MAErB/yC,KAAK8zC,4BAGTlwC,UAAQC,UAAY7D,KAAK0iB,YAAc1iB,KAAK2iB,UAC5C3iB,KAAKkiB,aAAatJ,gBAAgB,YAEtC5Y,KAAKyiB,gBAGTiuB,EAAexwC,UAAU4rC,WAAa,SAAUj/B,GAC5C,GAAI7M,KAAK+wC,mBAAqB/wC,KAAKgxC,YAAa,CAC5C,GAAIpE,IACAtyB,KAAM,UACNtS,SA97BQ,IA+7BR2kC,MAAO,EAEX3sC,MAAKgxC,YAAYjpB,KAAK,GAAIkE,aAAU2gB,IACpC5sC,KAAKmiB,aAAaC,UAAU3e,UAAU4T,OA58B9B,eA68BRvT,aAAW9D,KAAKkiB,cAAgBsB,gBAAiB,UACjDxjB,KAAKkiB,aAAatJ,gBAAgB,aAClC/M,eAAawL,OAAOiQ,SAAU,uBAAwBtnB,KAAK6sC,wBAGnE6D,EAAexwC,UAAU6O,UAAY,WACjC/O,KAAKutB,cACLvtB,KAAKglB,eAAiBhlB,KAAKsxC,qBAC3B7vC,EAAOvB,UAAU6O,UAAUlN,KAAK7B,MAChCgH,eAAahH,KAAKysB,mBAAoBtrB,MAE1CuvC,EAAexwC,UAAU+vC,YAAc,SAAUthC,EAAMwW,GACvC,QAARA,EACAnlB,KAAKmD,eAAgBZ,IAAKvC,KAAK0uC,cAAc//B,EAAKpM,OAAQ,GAG1DvC,KAAKmD,eAAgBX,IAAKxC,KAAK0uC,cAAc//B,EAAKnM,OAAQ,IAGlEkuC,EAAexwC,UAAU2nC,gBAAkB,SAAUrjB,GAIjD,IAAK,GADDte,GACKyD,EAAK,EAAG+jB,EAHAlJ,EAAYvhB,oBAAkBjD,KAAKioB,mBAAuBxoB,OAAOoK,KAAK7J,KAAKioB,iBACvF,QAAS,OAAQ,OAAQ,WAAY,WAAY,QAAS,MAAO,MAAO,cAAe,QAEhDte,EAAK+jB,EAAa/sB,OAAQgJ,IAAM,CACxE,GAAIyN,GAAOsW,EAAa/jB,EACxB,KAAK1G,oBAAkBjD,KAAKkiB,aAAahe,aAAakT,IAClD,OAAQA,GACJ,IAAK,OACDpX,KAAKkiB,aAAa/d,aAAa,OAAQnE,KAAKkiB,aAAahe,aAAakT,GACtE,MACJ,KAAK,OACDpX,KAAKylC,KAAO9+B,SAAS3G,KAAKkiB,aAAahe,aAAakT,GAAO,GAC3D,MACJ,KAAK,WACD,GAAKnU,oBAAkBjD,KAAK4wC,sBAA0Dn5B,KAArCzX,KAAK4wC,gBAA0B,UAAqBpsB,EAAW,CAC5G,GAAI7B,GAAoD,aAAzC3iB,KAAKkiB,aAAahe,aAAakT,IACD,KAAzCpX,KAAKkiB,aAAahe,aAAakT,IACU,SAAzCpX,KAAKkiB,aAAahe,aAAakT,EACnCpX,MAAKmD,eAAgBwf,SAAUA,IAAa6B,GAEhD,KACJ,KAAK,eACIvhB,oBAAkBjD,KAAK4wC,sBAA6Dn5B,KAAxCzX,KAAK4wC,gBAA6B,aAAqBpsB,IACpGxkB,KAAKmD,eAAgBggB,YAAanjB,KAAKkiB,aAAahe,aAAakT,KAAUoN,EAE/E,MACJ,KAAK,OACIvhB,oBAAkBjD,KAAK4wC,sBAAqDn5B,KAAhCzX,KAAK4wC,gBAAqB,KAAqBpsB,KAC5Fte,EAAQ,GAAIrD,MAAK7C,KAAKkiB,aAAahe,aAAakT,IAC3CpX,KAAKsoC,cAAcpiC,IAAWqP,OAAOrP,IACtClG,KAAKmD,eAAgBZ,IAAK2D,IAAUse,GAG5C,MACJ,KAAK,WACD,GAAKvhB,oBAAkBjD,KAAK4wC,sBAAyDn5B,KAApCzX,KAAK4wC,gBAAyB,SAAqBpsB,EAAW,CAC3G,GAAIhgB,GAAmD,aAAzCxE,KAAKkiB,aAAahe,aAAakT,IACA,SAAzCpX,KAAKkiB,aAAahe,aAAakT,IACU,KAAzCpX,KAAKkiB,aAAahe,aAAakT,EACnCpX,MAAKmD,eAAgBqB,QAASA,IAAYggB,GAE9C,KACJ,KAAK,SACIvhB,oBAAkBjD,KAAK4wC,sBAAuDn5B,KAAlCzX,KAAK4wC,gBAAuB,OAAqBpsB,KAC9Fte,EAAQ,GAAIrD,MAAK7C,KAAKkiB,aAAahe,aAAakT,IAC3CpX,KAAKsoC,cAAcpiC,IAAWqP,OAAOrP,IACtClG,KAAKmD,eAAgB+C,MAAOA,IAAUse,GAG9C,MACJ,KAAK,OACIvhB,oBAAkBjD,KAAK4wC,sBAAqDn5B,KAAhCzX,KAAK4wC,gBAAqB,KAAqBpsB,KAC5Fte,EAAQ,GAAIrD,MAAK7C,KAAKkiB,aAAahe,aAAakT,IAC3CpX,KAAKsoC,cAAcpiC,IAAWqP,OAAOrP,IACtClG,KAAKmD,eAAgBX,IAAK0D,IAAUse,OAQhEksB,EAAexwC,UAAUwW,gBAAkB,WACvC,GAAIC,KAOJ,OANI3W,OACA2W,EAAQ5M,MAAO6M,MAAO5W,MAAO6W,OAAQ,YAErC7W,KAAK8iB,YACLnM,EAAQ5M,KAAK/J,KAAK20C,oBAEfh+B,GAEX+5B,EAAexwC,UAAUy0C,iBAAmB,WAExC,OADgB/9B,MAAO5W,MAAO6W,OAAQ,mBAG1C65B,EAAexwC,UAAU00C,qBAAuB,WAC5C,MAAK3xC,qBAAkBjD,KAAKixC,iBAIjB,KAHAjxC,KAAKixC,gBAAgB7mC,iBAAiB,cAMrDsmC,EAAexwC,UAAU6pC,cAAgB,SAAU5kB,GAC/C,MAAOA,aAAetiB,MAAOsiB,EAAM,MAEvCurB,EAAexwC,UAAU8mC,cAAgB,SAAU/8B,GAC/C,IAAKjK,KAAKsoC,cAAcr+B,GAAO,CAC3B,GAAI4a,GAAY7kB,KAAK+pC,cAAc9/B,GAC/B/D,EAAQlG,KAAKkoC,iBACb2M,GAAY5xC,oBAAkBiD,EAClC,IAAIlG,KAAKmG,eAAe0e,GAAY,CAChC,GAAIlW,GAAOkmC,EAAW3uC,EAAMiK,UAAY60B,GACpChxB,EAAQ6gC,EAAW3uC,EAAMoK,WAAa20B,GACtCrwB,EAAOigC,EAAW3uC,EAAMsI,cAAgB02B,GACxCzW,EAAOomB,EAAW3uC,EAAMsK,WAAa8/B,GACrC5hB,EAASmmB,EAAW3uC,EAAMuK,aAAe8/B,GACzC5hB,EAASkmB,EAAW3uC,EAAMwK,aAAe8/B,GACzCsE,EAAcD,EAAW3uC,EAAMyK,kBAAoB8/B,EACvD,OAAKzwC,MAAK2wC,eAIN3wC,KAAK2wC,eAAgB,EACd,GAAI9tC,MAAK+R,EAAMZ,EAAOrF,EAAMkW,EAAUrU,WAAYqU,EAAUpU,aAAcoU,EAAUnU,aAAcmU,EAAUlU,oBAJ5G,GAAI9N,MAAK+R,EAAMZ,EAAOrF,EAAM8f,EAAMC,EAAQC,EAAQmmB,IAQrE,MAAO,OAEXpE,EAAexwC,UAAU60C,oBAAsB,SAAUr6B,GACrD,GAAIo0B,GAAW9uC,kBAAmBkG,MAC9BA,EAAQjD,oBAAkBjD,KAAKkoC,kBAAoBloC,KAAK+pC,cAAc+E,GACtE9uC,KAAKgnC,cAAchnC,KAAKkoC,kBACxB8M,EAAc,KACdC,EAAYj1C,KAAKkwB,cAAcvvB,MACnC,KAAKsC,oBAAkBjD,KAAK6zB,eAAiB5wB,oBAAkBjD,KAAKmG,eAAeD,IAAS,CACxF,GAAqB,SAAjBwU,EAAM5M,OACNknC,GAAgBh1C,KAAK+pC,cAAc,GAAIlnC,MAAK7C,KAAK4lC,gBAAgB,KACjE5lC,KAAK6zB,YAAc,MAElB,IAAqB,QAAjBnZ,EAAM5M,OACXknC,GAAgBh1C,KAAK+pC,cAAc,GAAIlnC,MAAK7C,KAAK4lC,gBAAgB5lC,KAAK4lC,gBAAgBjlC,OAAS,KAC/FX,KAAK6zB,YAAc7zB,KAAK4lC,gBAAgBjlC,OAAS,MAGjD,IAAqB,SAAjB+Z,EAAM5M,QACN,IAAS9M,EAAI,EAAGA,EAAIi0C,EAAWj0C,IAC3B,IAAKkF,EAAQlG,KAAK4lC,gBAAgB5kC,GAAI,CAClCg0C,GAAgBh1C,KAAK+pC,cAAc,GAAIlnC,MAAK7C,KAAK4lC,gBAAgB5kC,KACjEhB,KAAK6zB,YAAc7yB,CACnB,YAKR,KAAK,GAAIA,GAAIi0C,EAAY,EAAGj0C,GAAK,EAAGA,IAChC,IAAKkF,EAAQlG,KAAK4lC,gBAAgB5kC,GAAI,CAClCg0C,GAAgBh1C,KAAK+pC,cAAc,GAAIlnC,MAAK7C,KAAK4lC,gBAAgB5kC,KACjEhB,KAAK6zB,YAAc7yB,CACnB,OAKhBhB,KAAKka,gBAAkBla,KAAKkwB,cAAclwB,KAAK6zB,aAC/C7zB,KAAKk1C,iBAAiBjyC,oBAAkB+xC,GAAe,KAAO,GAAInyC,MAAKmyC,MAG/EtE,EAAexwC,UAAUi1C,aAAe,SAAUxmC,EAAMzI,GACpD,GAAI0T,GACAN,EACA6L,EAAMnlB,KAAKwxC,oBAAoBtrC,GAC/ByoC,EAAS3uC,KAAK+pC,cAAc5kB,EA+BhC,OA9BInlB,MAAK4mC,kBAAkB+H,MAAc1rC,oBAAkBjD,KAAKkG,OAA8C,KAArClG,KAAK4mC,kBAAkB5mC,KAAKkG,SACjGlG,KAAKkoC,iBAAmBjlC,oBAAkB0rC,GAAU,KAAOA,EAC3Dr1B,EAAO,GAAIzW,OAAM7C,KAAKkoC,oBAGlBloC,KAAK2kB,aAELhW,EAAOggC,GAEX3uC,KAAKkoC,iBAAmBloC,KAAKmG,eAAewI,GAC5C2K,EAAO,GAAIzW,OAAM7C,KAAKkoC,mBAGtBtuB,EADsB,cAAtB5Z,KAAK2C,aACQ3C,KAAK8C,UAAU0O,WAAW8H,GACnC1H,OAAS3O,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKsxC,qBAAzBtxC,KAAK+kB,aACrDjd,KAAM,WAAYwJ,SAAU,QAInBtR,KAAK8C,UAAU0O,WAAW8H,GACnC1H,OAAS3O,oBAAkBjD,KAAK+kB,cAAoC/kB,KAAKsxC,qBAAzBtxC,KAAK+kB,aACrDjd,KAAM,WAAYwJ,SAAU,MAAOsB,SAAU,aAGhD5S,KAAK2kB,YAAc1hB,oBAAkBqW,GACtC0I,QAAM6F,SAASjO,EAAY5Z,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAKrE7K,GAEXo3B,EAAexwC,UAAUg1C,iBAAmB,SAAUhvC,GAClD,IAAKjD,oBAAkBjD,KAAKmG,eAAeD,MAAYlG,KAAKsoC,cAAcpiC,GAAQ,CAC9E,GAAIyI,GAAOzI,YAAiBrD,MAAOqD,EAAQlG,KAAKgnC,cAAc9gC,EAC9D,OAAOlG,MAAKm1C,aAAaxmC,EAAMzI,GAEnC,MAAO,OAEXwqC,EAAexwC,UAAUk1C,eAAiB,SAAU16B,GAChD,KAAIzX,oBAAkBjD,KAAKylC,OAASzlC,KAAKylC,MAAQ,GAAjD,CAGA,GAAIwP,GAAYj1C,KAAK4lC,gBAAgBjlC,MACrC,IAAIsC,oBAAkBjD,KAAK40C,yBAAkE,IAAvC50C,KAAK40C,uBAAuBj0C,OAC1EX,KAAKkwB,cAAcvvB,OAAS,IACxBsC,oBAAkBjD,KAAKkG,QAAUjD,oBAAkBjD,KAAK6zB,cACxD7zB,KAAK6zB,YAAc,EACnB7zB,KAAKka,gBAAkBla,KAAKkwB,cAAc,GAC1ClwB,KAAKk1C,iBAAiB,GAAIryC,MAAK7C,KAAK4lC,gBAAgB,MAGpD5lC,KAAK+0C,oBAAoBr6B,QAIhC,CACD,GAAI26B,OAAgB,EACpB,IAAK36B,EAAMmnB,SAAW,IAAQnnB,EAAMmnB,SAAW,GAAK,CAChD,GAAIn7B,GAA2B,KAAlBgU,EAAMmnB,SAAoC,KAAlBnnB,EAAMmnB,UAAoB7hC,KAAK6zB,cAAgB7zB,KAAK6zB,WACzF7zB,MAAK6zB,YAAcntB,EAAQ1G,KAAK6zB,gBAA8B,EAAI7zB,KAAK6zB,YACvE7zB,KAAK6zB,YAAcntB,EAAQ1G,KAAK6zB,YAAc,EAAKohB,EAAY,EAAKj1C,KAAK6zB,YACzEwhB,EAAgBpyC,oBAAkBjD,KAAK4lC,gBAAgBl/B,IACnD1G,KAAK4lC,gBAAgB,GAAK5lC,KAAK4lC,gBAAgBl/B,OAE7B,SAAjBgU,EAAM5M,QACX9N,KAAK6zB,YAAc,EACnBwhB,EAAgBr1C,KAAK4lC,gBAAgB,IAEf,QAAjBlrB,EAAM5M,SACX9N,KAAK6zB,YAAcohB,EAAY,EAC/BI,EAAgBr1C,KAAK4lC,gBAAgBqP,EAAY,GAErDj1C,MAAKka,gBAAkBla,KAAKkwB,cAAclwB,KAAK6zB,aAC/C7zB,KAAKk1C,iBAAiB,GAAIryC,MAAKwyC,IAEnCr1C,KAAK+nC,YAAa,EAClB/nC,KAAKmzC,aAAanzC,KAAKka,gBArsCd,gBAssCTla,KAAK8zC,2BACD9zC,KAAK+wC,mBAA8C,OAAzB/wC,KAAKka,iBAA8BQ,GAAwB,UAAfA,EAAM5S,MAC5E9H,KAAK6yC,0BAGbnC,EAAexwC,UAAU8yC,oBAAsB,SAAUt4B,GACrD,GAAI1a,KAAKwE,QAIL,OAHqB,UAAjBkW,EAAM5M,QAAuC,SAAjB4M,EAAM5M,QAAsC,QAAjB4M,EAAM5M,QAC7D4M,EAAM1M,iBAEF0M,EAAM5M,QACV,IAAK,KACL,IAAK,OACL,IAAK,OACL,IAAK,MACD9N,KAAKo1C,eAAe16B,EACpB,MACJ,KAAK,QACG1a,KAAK+nC,YACL/nC,KAAKka,gBAAkBla,KAAKkwB,cAAclwB,KAAK6zB,aAC/C7zB,KAAKkoC,iBAAmB,GAAIrlC,MAAK7C,KAAK4lC,gBAAgB5lC,KAAK6zB,cAC3D7zB,KAAKqzC,cAAc,SACdrzC,KAAKge,mBAAsBhe,KAAKkG,QACjClG,KAAKwd,YAAYtX,MAAQlG,KAAKkG,MAC9BlG,KAAK4yC,mBACL5yC,KAAKge,iBAAmBhe,KAAKkG,QAIjClG,KAAK4yB,YAAYlY,GAErB1a,KAAK+nB,KAAKrN,GACVzT,YAAUjH,KAAKmiB,aAAaC,WA5uC/B,iBA6uCGpiB,KAAK+nC,YAAa,EAClBrtB,EAAMsM,iBACN,MACJ,KAAK,SACDhnB,KAAK+nB,KAAKrN,EACV,MACJ,SACI1a,KAAK+nC,YAAa,IAKlC2I,EAAexwC,UAAUgyC,eAAiB,SAAUx3B,GAChD,OAAQA,EAAM5M,QACV,IAAK,eACD9N,KAAK8oB,mBACL9oB,KAAKwiB,cACLxiB,KAAKqyC,OAAO33B,KAYxBg2B,EAAexwC,UAAU+W,kBAAoB,SAAUC,EAASC,GAC5D,IAAK,GAAIxN,GAAK,EAAGC,EAAKnK,OAAOoK,KAAKqN,GAAUvN,EAAKC,EAAGjJ,OAAQgJ,IAAM,CAC9D,GAAIyN,GAAOxN,EAAGD,EACd,QAAQyN,GACJ,IAAK,QACDpX,KAAK2hB,uBAAwB,EAC7B3hB,KAAKuhB,mBAAqB,KAC1BvhB,KAAK6iB,kBAAkB3L,EAAQhR,OAC/BgR,EAAQhR,MAAQlG,KAAKkG,MACrBgR,EAAQhR,MAAQlG,KAAK0uC,cAAcx3B,EAAQhR,OACvClG,KAAK8iB,WACLd,QAAM6F,SAAS7nB,KAAKyhB,gBAAiBzhB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAGlFnC,QAAM6F,SAAS7nB,KAAK4mC,kBAAkB1vB,EAAQhR,OAAQlG,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAEvGnkB,KAAKkoC,iBAAmBhxB,EAAQhR,MAChClG,KAAKmD,eAAgB+C,MAAOgR,EAAQhR,QAAS,GACzClG,KAAK4mB,UACL5mB,KAAKonB,cAETpnB,KAAKge,iBAAmB,GAAInb,MAAK7C,KAAKkiB,aAAahc,OACnDlG,KAAKwiB,cACLxiB,KAAK+oB,cAAc,MACnB/oB,KAAKkC,cAAgBlC,KAAKmC,WAAanC,KAAKkC,eAAiBlC,KAAKkC,cAAgBlC,KAAKkC,cACnFlC,KAAK8iB,YAAc9iB,KAAKkG,OACxBlG,KAAK+iB,OAAO,cACRC,OAAQ,kBAGhB,MACJ,KAAK,MACL,IAAK,MACDhjB,KAAKiwC,YAAY/4B,EAASE,GAC1BpX,KAAKwiB,aACL,MACJ,KAAK,YACDR,QAAMqM,aAAaruB,KAAK2D,WAAY3D,KAAKmiB,aAAaC,WACtD,MACJ,KAAK,WACInf,oBAAkBkU,EAAQqF,YAC3BrF,EAAQqF,SAAYrF,EAAQqF,SAASS,QAAQ,OAAQ,KAAMC,QAE1Dja,oBAAkBiU,EAAQsF,YAC3BtF,EAAQsF,SAAYtF,EAAQsF,SAASS,QAAQ,OAAQ,KAAMC,QAE/D8E,QAAMuG,YAAYrR,EAAQsF,UAAWxc,KAAKmiB,aAAaC,WAAYjL,EAAQqF,UACvExc,KAAKixC,iBACLjvB,QAAMuG,YAAYrR,EAAQsF,UAAWxc,KAAKixC,iBAAkB95B,EAAQqF,SAExE,MACJ,KAAK,SACDxc,KAAK8C,UAAY,GAAIC,wBAAqB/C,KAAKgD,QAC/ChD,KAAK8jB,KAAKtM,UAAUxX,KAAKgD,QACzBhD,KAAKmD,eAAgBggB,YAAanjB,KAAK8jB,KAAKzY,YAAY,iBAAkB,GAC1E2W,QAAMkM,eAAeluB,KAAK8jB,KAAKzY,YAAY,eAAgBrL,KAAKkiB,cAChEliB,KAAKglB,eAAiBhlB,KAAKsxC,qBAC3B7vC,EAAOvB,UAAUsiB,YAAY3gB,KAAK7B,KAClC,MACJ,KAAK,iBACDA,KAAKqoB,+BACLroB,KAAKkjB,+BACLljB,KAAK6nC,iBAAgB,EACrB,MACJ,KAAK,SACD7nC,KAAKmD,eAAgByO,OAAQsF,EAAQtF,SAAU,GAC/C5R,KAAKutB,cACLvtB,KAAKglB,eAAiBhlB,KAAK+kB,aAC3B/kB,KAAK6nB,WACD7nB,KAAK8iB,aACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,mBAEPhjB,KAAKkG,OACN8b,QAAM6F,SAAS7nB,KAAKyhB,gBAAiBzhB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAG1F,MACJ,KAAK,cACDnC,QAAMkM,eAAehX,EAAQiM,YAAanjB,KAAKkiB,aAC/C,MACJ,KAAK,UACDF,QAAMoM,WAAWpuB,KAAKwE,QAASxE,KAAKkiB,cAC/BliB,KAAKwE,UACNxE,KAAKkiB,aAAale,UAAY,EAElC,MACJ,KAAK,aACDhE,KAAKuhB,mBAAqB,KAC1BvhB,KAAKwiB,aACL,MACJ,KAAK,QACDxiB,KAAKqkB,SAASnN,EAAQoN,OACtBtC,QAAMC,eAAejiB,KAAKkiB,aAAcliB,KAAKmiB,aAAaC,WACrDnf,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,mBAEjG,MACJ,KAAK,WACDse,QAAMmM,YAAYnuB,KAAK2iB,SAAU3iB,KAAKkiB,aACtC,MACJ,KAAK,iBACDliB,KAAKuiB,eAAiBrL,EAAQqL,eAC9BP,QAAMuM,eAAevuB,KAAKmiB,cAC1BH,QAAMwM,YAAYxuB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmjB,aAC1DlgB,oBAAkBjD,KAAKmiB,aAAaE,QAAQ,KAAQpf,oBAAkBjD,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,KAA+B,UAAxBtiB,KAAKuiB,gBAC/JviB,KAAKmiB,aAAaC,UAAUE,uBAAuB,yBAAyB,GAAG7e,UAAUC,IAAI,mBAEjG,MACJ,KAAK,WACG1D,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAW8Q,EAAQ0wB,aACjD5nC,KAAKixC,iBACLjxC,KAAKgrC,cAEThrC,KAAKmD,eAAgBykC,SAAU5nC,KAAKmG,eAAe,GAAItD,MAAK7C,KAAKoG,WAAW8Q,EAAQ0wB,cAAe,IAGnG5nC,KAAKmD,eAAgBykC,SAAU,OAAQ,EAE3C,MACJ,KAAK,aACG5nC,KAAK8iB,YACL9iB,KAAK+iB,OAAO,cACRC,OAAQ,mBAEZhB,QAAM6F,SAAS7nB,KAAKyhB,gBAAiBzhB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,kBAG9EnkB,KAAKkiB,aAAahc,QAAUlG,KAAKyhB,kBACjCzhB,KAAKyhB,gBAAkB,GACvBO,QAAM6F,SAAS7nB,KAAKyhB,gBAAiBzhB,KAAKkiB,aAAcliB,KAAKuiB,eAAgBviB,KAAKmkB,iBAG1F,MACJ,SACI1iB,EAAOvB,UAAU+W,kBAAkBpV,KAAK7B,KAAMkX,EAASC,GAG1DnX,KAAK2hB,uBACN3hB,KAAK+nB,KAAK,MAEd/nB,KAAK2hB,uBAAwB,IASrC+uB,EAAexwC,UAAUsD,cAAgB,WACrC,MAAO,kBAEXktC,EAAexwC,UAAU6mB,aAAe,WACpC/mB,KAAKge,iBAAmBhe,KAAK+d,aAC7B/d,KAAKqG,YAAcrG,KAAKkG,MAAQlG,KAAKkG,MAAQ,GAAIrD,MACjD7C,KAAKkoC,iBAAmBloC,KAAKkG,MAC7BlG,KAAK+d,aAAe/d,KAAKkG,MACzBlG,KAAKqjB,qBAAuBrjB,KAAKqjB,qBAAwBpgB,oBAAkBjD,KAAKsjB,gBAAmB,GAC/FtjB,KAAK4mC,kBAAkB5mC,KAAKsjB,iBAEpCljB,IACIub,WAAS,OACV+0B,EAAexwC,UAAW,iBAAc,IAC3CE,IACIub,WAAS,KACV+0B,EAAexwC,UAAW,WAAQ,IACrCE,IACIub,WAAS,OACV+0B,EAAexwC,UAAW,eAAY,IACzCE,IACIub,WAAS,MACV+0B,EAAexwC,UAAW,aAAU,IACvCE,IACIub,WAAS,OACV+0B,EAAexwC,UAAW,YAAS,IACtCE,IACIub,WAAS,OACV+0B,EAAexwC,UAAW,iBAAc,IAC3CE,IACIub,gBACD+0B,EAAexwC,UAAW,qBAAkB,IAC/CE,IACIub,YAAS,IACV+0B,EAAexwC,UAAW,wBAAqB,IAClDE,IACIub,YAAS,IACV+0B,EAAexwC,UAAW,gBAAa,IAC1CE,IACIub,YAAS,IACV+0B,EAAexwC,UAAW,uBAAoB,IACjDE,IACIub,WAAS,OACV+0B,EAAexwC,UAAW,aAAU,IACvCE,IACIub,YAAS,IACV+0B,EAAexwC,UAAW,sBAAmB,IAChDE,IACIub,WAAS,OACV+0B,EAAexwC,UAAW,kBAAe,IAC5CE,IACIub,YAAS,IACV+0B,EAAexwC,UAAW,iBAAc,IAC3CE,IACIub,WAAS,OACV+0B,EAAexwC,UAAW,2BAAwB,IACrDE,IACIub,WAAS,GAAI9Y,MAAK,KAAM,EAAG,KAC5B6tC,EAAexwC,UAAW,UAAO,IACpCE,IACIub,WAAS,GAAI9Y,MAAK,KAAM,GAAI,MAC7B6tC,EAAexwC,UAAW,UAAO,IACpCE,IACIub,WAAS,OACV+0B,EAAexwC,UAAW,qBAAkB,IAC/CE,IACIub,WAAS,cACV+0B,EAAexwC,UAAW,mBAAgB,IAC7CE,IACIub,WAAS,UACV+0B,EAAexwC,UAAW,YAAS,IACtCE,IACIub,WAAS,UACV+0B,EAAexwC,UAAW,YAAS,IACtCE,IACIub,YAAS,IACV+0B,EAAexwC,UAAW,iBAAc,IAC3CE,IACIub,YAAS,IACV+0B,EAAexwC,UAAW,sBAAmB,IAChDE,IACIub,WAAS,UACV+0B,EAAexwC,UAAW,sBAAmB,IAChDE,IACIub,YAAS,IACV+0B,EAAexwC,UAAW,kBAAe,IAC5CE,IACIub,YAAS,IACV+0B,EAAexwC,UAAW,iBAAc,IAC3CE,IACIub,YAAW7K,IAAK,MAAOkD,MAAO,QAASY,KAAM,OAAQ6Z,KAAM,OAAQC,OAAQ,SAAUC,OAAQ,SAAUC,aAAc,qBACtH8hB,EAAexwC,UAAW,sBAAmB,IAChDE,IACIwb,WACD80B,EAAexwC,UAAW,WAAQ,IACrCE,IACIwb,WACD80B,EAAexwC,UAAW,YAAS,IACtCE,IACIwb,WACD80B,EAAexwC,UAAW,cAAW,IACxCE,IACIwb,WACD80B,EAAexwC,UAAW,WAAQ,IACrCE,IACIwb,WACD80B,EAAexwC,UAAW,YAAS,IACtCE,IACIwb,WACD80B,EAAexwC,UAAW,cAAW,IACxCE,IACIwb,WACD80B,EAAexwC,UAAW,gBAAa,IAC1CwwC,EAAiBtwC,IACbyb,yBACD60B,IAELtvB,GC1jDEk0B,GAAgC,WAChC,QAASA,GAAeC,GACpBv1C,KAAKw1C,KAAO,GACZx1C,KAAKixB,iBACDngB,IAAK,MACLkD,MAAO,QACPY,KAAM,OACN6Z,KAAM,OACNC,OAAQ,SACRC,OAAQ,SACRC,aAAc,mBAElB5uB,KAAKy1C,WAAa,GAClBz1C,KAAK01C,gBAAkB,aACvB11C,KAAK21C,WAAY,EACjB31C,KAAK41C,aAAc,EACnB51C,KAAK61C,YAAa,EAClB71C,KAAK81C,YAAa,EAClB91C,KAAK+1C,cAAe,EACpB/1C,KAAKg2C,eAAgB,EACrBh2C,KAAKi2C,oBAAqB,EAC1Bj2C,KAAKk2C,eAAiB,GACtBl2C,KAAKm2C,gBAAkB,GACvBn2C,KAAKo2C,cAAe,EACpBp2C,KAAKq2C,YAAa,EAClBr2C,KAAK+nC,YAAa,EAClB/nC,KAAKytC,WAAY,EACjBztC,KAAKs2C,YAAc,6HACnBt2C,KAAKu2C,YAAa,EAClBv2C,KAAKw2C,aAAc,EACnBx2C,KAAKy2C,aAAc,EACnBz2C,KAAK02C,YAAa,EAClB12C,KAAK22C,aAAc,EACnB32C,KAAK42C,YAAa,EAClB52C,KAAK62C,aAAe,EACpB72C,KAAK82C,eAAiB,EACtB92C,KAAK+2C,cAAgB,EACrB/2C,KAAKg3C,gBAAkB,EACvBh3C,KAAKi3C,gBAAkB,EACvBj3C,KAAKu1C,OAASA,EACdv1C,KAAKk3C,WAAal3C,KAAKm3C,oBACvBn3C,KAAKo3C,cAAqC,MAArBp3C,KAAKu1C,OAAOrvC,MAAgB,GAAIrD,OAAM7C,KAAKu1C,OAAOrvC,OAAS,GAAIrD,MACpF7C,KAAKo3C,cAActjC,SAAS,GAC5B9T,KAAKo3C,cAAc7zC,SAAS,GAC5BvD,KAAKo3C,cAAc15B,WAAW,GAC9B1d,KAAKo3C,cAAcx0C,WAAW,GAC9B5C,KAAK+d,aAAe,GAAIlb,MAAK7C,KAAKo3C,cAAc5oC,cAAexO,KAAKo3C,cAAc9mC,WAAYtQ,KAAKo3C,cAAcjnC,UAAWnQ,KAAKo3C,cAAc5mC,WAAYxQ,KAAKo3C,cAAc3mC,aAAczQ,KAAKo3C,cAAc1mC,cAC/M1Q,KAAKq3C,sBACLr3C,KAAKs3C,mBAgwBT,MA9vBAhC,GAAep1C,UAAUsD,cAAgB,WACrC,MAAO,kBAEX8xC,EAAep1C,UAAUo3C,iBAAmB,WACpCt3C,KAAKu1C,OAAOgC,cAGhBv3C,KAAKu1C,OAAOiC,GAAG,aAAcx3C,KAAKwsC,WAAYxsC,MAC9CA,KAAKu1C,OAAOiC,GAAG,mBAAoBx3C,KAAKy3C,oBAAqBz3C,MAC7DA,KAAKu1C,OAAOiC,GAAG,eAAgBx3C,KAAK03C,iBAAkB13C,MACtDA,KAAKu1C,OAAOiC,GAAG,iBAAkBx3C,KAAK23C,mBAAoB33C,MAC1DA,KAAKu1C,OAAOiC,GAAG,eAAgBx3C,KAAKkuC,aAAcluC,QAEtDs1C,EAAep1C,UAAUm3C,oBAAsB,WACvCr3C,KAAKu1C,OAAOgC,cAGhBv3C,KAAKu1C,OAAOqC,IAAI,aAAc53C,KAAKwsC,YACnCxsC,KAAKu1C,OAAOqC,IAAI,mBAAoB53C,KAAKy3C,qBACzCz3C,KAAKu1C,OAAOqC,IAAI,eAAgB53C,KAAK03C,kBACrC13C,KAAKu1C,OAAOqC,IAAI,iBAAkB53C,KAAK23C,oBACvC33C,KAAKu1C,OAAOqC,IAAI,eAAgB53C,KAAKkuC,gBAEzCoH,EAAep1C,UAAUssC,WAAa,SAAUiB,OAC1B,KAAdA,IAAwBA,GAAY,GACxCztC,KAAK21C,UAAY31C,KAAK41C,YAAc51C,KAAK61C,WAAa71C,KAAK81C,WAAa91C,KAAK+1C,aAAe/1C,KAAKg2C,eAAgB,EACjHh2C,KAAKk3C,WAAal3C,KAAKm3C,oBACnBn3C,KAAKu1C,OAAOsC,gBAAgB/mC,MAC5B9Q,KAAKixB,gBAAqB,IAAIjxB,KAAKu1C,OAAOsC,gBAAgB/mC,KAE1D9Q,KAAKu1C,OAAOsC,gBAAgB7jC,QAC5BhU,KAAKixB,gBAAuB,MAAIjxB,KAAKu1C,OAAOsC,gBAAgB7jC,OAE5DhU,KAAKu1C,OAAOsC,gBAAgBjjC,OAC5B5U,KAAKixB,gBAAsB,KAAIjxB,KAAKu1C,OAAOsC,gBAAgBjjC,MAE3D5U,KAAKu1C,OAAOsC,gBAAgBppB,OAC5BzuB,KAAKixB,gBAAsB,KAAIjxB,KAAKu1C,OAAOsC,gBAAgBppB,MAE3DzuB,KAAKu1C,OAAOsC,gBAAgBnpB,SAC5B1uB,KAAKixB,gBAAwB,OAAIjxB,KAAKu1C,OAAOsC,gBAAgBnpB,QAE7D1uB,KAAKu1C,OAAOsC,gBAAgBlpB,SAC5B3uB,KAAKixB,gBAAwB,OAAIjxB,KAAKu1C,OAAOsC,gBAAgBlpB,QAE7D3uB,KAAKu1C,OAAOsC,gBAAgBjpB,eAC5B5uB,KAAKixB,gBAA8B,aAAIjxB,KAAKu1C,OAAOsC,gBAAgBjpB,aAAa9nB,YAEpF9G,KAAK83C,sBACL,IAAItc,GAAax7B,KAAKk3C,WAAWj6B,QAAQjd,KAAKs2C,YAAat2C,KAAK+3C,cAChE/3C,MAAKo2C,cAAe,EACpBp2C,KAAKy1C,WAAaz1C,KAAKk3C,WAAWj6B,QAAQjd,KAAKs2C,YAAat2C,KAAK+3C,eACjE/3C,KAAKo2C,cAAe,EACpBp2C,KAAKg4C,mBAAqBh4C,KAAKy1C,WAC/Bz1C,KAAKw1C,KAAOx1C,KAAKoa,cAAgBohB,EACjCx7B,KAAKu1C,OAAO9zB,gBAAkBzhB,KAAKw1C,KAC/Bx1C,KAAKu1C,OAAOrvC,QACZlG,KAAKytC,UAAYA,EACjBztC,KAAKi4C,oBAGb3C,EAAep1C,UAAU43C,qBAAuB,WAC5C93C,KAAK8jB,KAAO,GAAIpY,QAAK1L,KAAKu1C,OAAOtpC,WAAYjM,KAAKixB,gBAAiBjxB,KAAKu1C,OAAOvyC,QAC/EhD,KAAKk4C,aAAez4C,OAAOoK,KAAK7J,KAAKixB,gBACrC,KAAK,GAAIjwB,GAAI,EAAGA,EAAIhB,KAAKk4C,aAAav3C,OAAQK,IAC1ChB,KAAKixB,gBAAgBjxB,KAAKk4C,aAAal3C,GAAG8F,YACtC9G,KAAK8jB,KAAKzY,YAAYrL,KAAKk4C,aAAal3C,GAAG8F,aAGvDwuC,EAAep1C,UAAUu3C,oBAAsB,WAE3C,IAAK,GADD5sC,GAAQ7K,KAAKu1C,OAAOrzB,aAAauG,eAC5BznB,EAAI6J,EAAOstC,EAAIttC,EAAQ,EAAG7J,EAAIhB,KAAKy1C,WAAW90C,QAAUw3C,GAAK,EAAGn3C,IAAKm3C,IAAK,CAC/E,GAAIn3C,EAAIhB,KAAKy1C,WAAW90C,SAAgE,IAAtDX,KAAK01C,gBAAgB1iC,QAAQhT,KAAKy1C,WAAWz0C,IAE3E,WADAhB,MAAK0sC,aAAa1sC,KAAKy1C,WAAWz0C,GAGtC,IAAIm3C,GAAK,IAA2D,IAAtDn4C,KAAK01C,gBAAgB1iC,QAAQhT,KAAKy1C,WAAW0C,IAEvD,WADAn4C,MAAK0sC,aAAa1sC,KAAKy1C,WAAW0C,MAK9C7C,EAAep1C,UAAU+3C,gBAAkB,WACvCj4C,KAAKo3C,cAAgB,GAAIv0C,OAAM7C,KAAKu1C,OAAOrvC,OAC3ClG,KAAK21C,UAAY31C,KAAK41C,YAAc51C,KAAK61C,WAAa71C,KAAK81C,WAAa91C,KAAK+1C,aAAe/1C,KAAKg2C,eAAgB,EACjHh2C,KAAK4yB,cACL5yB,KAAKy3C,uBAETnC,EAAep1C,UAAUwsC,aAAe,SAAU0L,GAG9C,IAAK,GAFDvtC,IAAS,EACTvF,EAAM,EACDtE,EAAI,EAAGA,EAAIhB,KAAKy1C,WAAW90C,OAAQK,IACpChB,KAAKy1C,WAAWz0C,KAAOo3C,IACvB9yC,EAAMtE,EAAI,GACK,IAAX6J,IACAA,EAAQ7J,GAIhB6J,GAAQ,IACRA,EAAQ,GAEZ7K,KAAKu1C,OAAOrzB,aAAauoB,kBAAkB5/B,EAAOvF,IAEtDgwC,EAAep1C,UAAUy3C,mBAAqB,SAAU/gC,GAEpD,GADA5W,KAAK62C,aAAe72C,KAAK82C,eAAiB92C,KAAK+2C,cAAgB/2C,KAAKg3C,gBAAkBh3C,KAAKi3C,gBAAkB,EAC1F,WAAfrgC,EAAK/J,EAAEtM,IAEP,YADAP,KAAKy2C,aAAc,EAGvB,MAAM7/B,EAAK/J,EAAEwrC,QAAWzhC,EAAK/J,EAAEyrC,SAxKvB,cAwKoC1hC,EAAK/J,EAAEtM,KAvK1C,eAuK+DqW,EAAK/J,EAAEtM,KAnKxE,aAoKAqW,EAAK/J,EAAEtM,KArKZ,QAqKgCqW,EAAK/J,EAAEtM,KApKlC,aAoKiDqW,EAAK/J,EAAEiB,QAnK7D,QAoKE8I,EAAK/J,EAAEtM,KAnKR,SAmKuBqW,EAAK/J,EAAEtM,KAAe,CAC5C,GAAIsK,GAAQ7K,KAAKu1C,OAAOrzB,aAAauG,eACjCnjB,EAAMtF,KAAKu1C,OAAOrzB,aAAawG,aAC/Bc,EAAWxpB,KAAKu1C,OAAOrzB,aAAahc,MAAMvF,MAC9C,IAAe,IAAVkK,GAAevF,IAAQkkB,IA1K9B,QA0K4C5S,EAAK/J,EAAEtM,KAzK9C,aAyK6DqW,EAAK/J,EAAEiB,QAAsB,CACzF,GAAIpH,GA1KL,aA0KakQ,EAAK/J,EAAEiB,OAAsBxI,EAAM,CAC/CtF,MAAKu1C,OAAOrzB,aAAauG,eAAiBzoB,KAAKu1C,OAAOrzB,aAAawG,aAAehiB,EAEtF,GA5KF,QA4KMkQ,EAAK/J,EAAEtM,KA3KZ,SA2K2BqW,EAAK/J,EAAEtM,IAAc,CAC3C,GAAIqzB,GA7KV,QA6KkBhd,EAAK/J,EAAEtM,IAAcipB,EAAW,CAC5CxpB,MAAKu1C,OAAOrzB,aAAauG,eAAiBzoB,KAAKu1C,OAAOrzB,aAAawG,aAAekL,EAEtF5zB,KAAKu4C,kBAtLD,cAsLmB3hC,EAAK/J,EAAEtM,KAjL3B,aAiLgDqW,EAAK/J,EAAEiB,QAhL5D,QAgLmF8I,EAAK/J,EAAEtM,KAE5F,KAAMqW,EAAK/J,EAAEwrC,QAAWzhC,EAAK/J,EAAEyrC,SAtLzB,YAsLsC1hC,EAAK/J,EAAEtM,KArL3C,cAqL8DqW,EAAK/J,EAAEtM,KAAoB,CAC7F,GAAIsK,GAAQ7K,KAAKu1C,OAAOrzB,aAAauG,eACjC+vB,EAAa,IAC6C,IAA1Dx4C,KAAK01C,gBAAgB1iC,QAAQhT,KAAKy1C,WAAW5qC,MAC7C2tC,EAAax4C,KAAKy1C,WAAW5qC,IAEjC7K,KAAKy4C,eA3LD,cA2LgB7hC,EAAK/J,EAAEtM,IAC3B,IAAIi7B,GAAax7B,KAAKk3C,WAAWj6B,QAAQjd,KAAKs2C,YAAat2C,KAAK+3C,cAChE/3C,MAAKo2C,cAAe,EACpBp2C,KAAKy1C,WAAaz1C,KAAKk3C,WAAWj6B,QAAQjd,KAAKs2C,YAAat2C,KAAK+3C,eACjE/3C,KAAKo2C,cAAe,EACpBp2C,KAAKg4C,mBAAqBh4C,KAAKy1C,WAC/Bz1C,KAAKoa,cAAgBohB,EACrBx7B,KAAKu1C,OAAOrzB,aAAahc,MAAQs1B,CACjC,KAAK,GAAIx6B,GAAI,EAAGA,EAAIhB,KAAKy1C,WAAW90C,OAAQK,IACxC,GAAIw3C,IAAex4C,KAAKy1C,WAAWz0C,GAAI,CACnC6J,EAAQ7J,CACR,OAGRhB,KAAKu1C,OAAOrzB,aAAauG,eAAiB5d,EAC1C7K,KAAKy3C,wBAGbnC,EAAep1C,UAAUw4C,UAAY,WAEjC,MADgB14C,MAAKu1C,OAAO3zB,WAAa5hB,KAAKytC,WAGlD6H,EAAep1C,UAAUy4C,gBAAkB,WACvC,GAAI9tC,GAAQ7K,KAAKu1C,OAAOrzB,aAAauG,eACjC+S,EAAax7B,KAAKu1C,OAAOrzB,aAAahc,MACtC0yC,EAAc54C,KAAKoa,cAAcy+B,UAAU,EAAGhuC,EAAQ7K,KAAKoa,cAAczZ,OAAS66B,EAAW76B,QAC7Fm4C,EAAStd,EAAWqd,UAAU,EAAGhuC,GACjCkuC,EAAe,GAAIl2C,OAAM7C,KAAKo3C,eAC9B3nC,EAAU,GAAI5M,MAAKk2C,EAAavqC,cAAeuqC,EAAazoC,WAAa,EAAG,GAAGH,SACnF,IAAoC,IAAhCyoC,EAAY5lC,QAAQ8lC,KAAoC,IAAlBA,EAAOn4C,QAC7CX,KAAKg4C,mBAAmBc,EAAOn4C,OAAS,KAAOX,KAAKg4C,mBAAmBc,EAAOn4C,SAAU,CACxF,IAASK,EAAI83C,EAAOn4C,OAAQK,EAAI43C,EAAYj4C,OAAQK,IACb,KAA/BhB,KAAKg4C,mBAAmBh3C,IAAahB,KAAK01C,gBAAgB1iC,QAAQhT,KAAKg4C,mBAAmBh3C,KAAO,IACjGhB,KAAKu2C,WAAav2C,KAAKg5C,eAAeh5C,KAAKg4C,mBAAmBh3C,IAAI,GAG1E,IAAIhB,KAAKu2C,WACL,OAGR,OAAQv2C,KAAKg4C,mBAAmBntC,EAAQ,IACpC,IAAK,IAEG,GAAI8D,IAAQ3O,KAAK21C,WAAaoD,EAAa5oC,UAAUrJ,WAAWnG,OAAS,IACpEX,KAAK04C,YAAuC,GAAzBK,EAAa5oC,UAAiB,GAAKxJ,SAASmyC,EAAOjuC,EAAQ,GAAI,GAIvF,IAHA7K,KAAK02C,WAAoC,MAAtBoC,EAAOjuC,EAAQ,GAClC7K,KAAKu1C,OAAO3zB,WAAY5hB,KAAKu1C,OAAO3zB,WAAoB5hB,KAAKu1C,OAAO3zB,UACpE5hB,KAAKytC,WAAYztC,KAAKytC,WAAoBztC,KAAKytC,UAC3Cl4B,MAAM5G,GACN,MAEJ,KAAS3N,EAAI,EAAG2N,EAAOc,EAASzO,IAC5B2N,EAAOhI,SAASgI,EAAK7H,WAAWqD,MAAM,GAAI,GAE9C,IAAIwE,GAAQ,EAAG,CAIX,GAHAoqC,EAAahlC,QAAQpF,GACrB3O,KAAK+nC,WAAwC,IAA3Bp5B,EAAK7H,WAAWnG,OAClCX,KAAK+d,aAAe,GAAIlb,MAAKk2C,EAAavqC,cAAeuqC,EAAazoC,WAAYyoC,EAAa5oC,WAC3F4oC,EAAazoC,aAAetQ,KAAKo3C,cAAc9mC,WAC/C,MAEJtQ,MAAK21C,WAAY,EACjB31C,KAAK62C,aAAe72C,KAAK62C,aAAe,MAGxC72C,MAAK21C,WAAY,EACjB31C,KAAK62C,aAAe72C,KAAK02C,WAAa12C,KAAK62C,aAAe,EAAI72C,KAAK62C,YAEvE,MAER,KAAK,IAEG,GAAI7iC,OAAQ,EAUZ,IARIA,EADA+kC,EAAazoC,WAAWxJ,WAAWnG,OAAS,IAAMX,KAAK04C,aAC9C14C,KAAK41C,YAA8C,IAA/BmD,EAAazoC,WAAa,GAAU,GAAK3J,SAASmyC,EAAOjuC,EAAQ,GAAI,IAG1FlE,SAASmyC,EAAOjuC,EAAQ,GAAI,IAExC7K,KAAKu1C,OAAO3zB,WAAY5hB,KAAKu1C,OAAO3zB,WAAoB5hB,KAAKu1C,OAAO3zB,UACpE5hB,KAAKytC,WAAYztC,KAAKytC,WAAoBztC,KAAKytC,UAC/CztC,KAAK22C,YAAqC,MAAtBmC,EAAOjuC,EAAQ,GAC9B0K,MAAMvB,GA4BN,CACD,GAAIilC,GAAej5C,KAAKk5C,iBAAiB,4BACrCC,EAAa15C,OAAOoK,KAAKovC,EAE7B,KADAj5C,KAAKk2C,gBAAkB4C,EAAOjuC,EAAQ,GAAGvB,cAClCtJ,KAAKk2C,eAAev1C,OAAS,GAAG,CAEnC,IAAK,GADDK,GAAI,EACC2I,EAAK,EAAGyvC,EAAeD,EAAYxvC,EAAKyvC,EAAaz4C,OAAQgJ,IAAM,CAC3DyvC,EAAazvC,EAC1B,IAAkE,IAA9DsvC,EAAYj4C,GAAGsI,cAAc0J,QAAQhT,KAAKk2C,gBAI1C,MAHA6C,GAAajlC,SAAS9S,EAAI,GAC1BhB,KAAK41C,aAAc,OACnB51C,KAAKo3C,cAAgB2B,EAGzB/3C,KAEJhB,KAAKk2C,eAAiBl2C,KAAKk2C,eAAe2C,UAAU,EAAG74C,KAAKk2C,eAAev1C,aA5ChE,CACf,KAAOqT,EAAQ,IACXA,EAAQrN,SAASqN,EAAMlN,WAAWqD,MAAM,GAAI,GAEhD,IAAI6J,GAAS,EAAG,CAOZ,GANA+kC,EAAajlC,SAASE,EAAQ,GAC9BhU,KAAK+nC,WAAyC,IAA5B/zB,EAAMlN,WAAWnG,OAC/Bo4C,EAAazoC,aAAe0D,EAAQ,IACpC+kC,EAAahlC,QAAQ,GACrBglC,EAAajlC,SAASE,EAAQ,IAE9BhU,KAAK21C,UAAW,CAChB,GAAI0D,GAAkB,GAAIx2C,MAAK7C,KAAK+d,aAAavP,cAAexO,KAAK+d,aAAazN,WAAa,EAAG,GAAGH,UACjGmpC,EAAiB,GAAIz2C,MAAKk2C,EAAavqC,cAAeuqC,EAAazoC,WAAa,EAAG,GAAGH,SACtFnQ,MAAK+d,aAAa5N,YAAckpC,GAAmBC,GAAkBD,GACrEN,EAAahlC,QAAQulC,GAG7Bt5C,KAAK+d,aAAe,GAAIlb,MAAKk2C,EAAavqC,cAAeuqC,EAAazoC,WAAYyoC,EAAa5oC,WAC/FnQ,KAAK41C,aAAc,EACnB51C,KAAK82C,eAAiB92C,KAAK82C,eAAiB,MAG5CiC,GAAajlC,SAAS,GACtB9T,KAAK41C,aAAc,EACnB51C,KAAK82C,eAAiB92C,KAAK22C,YAAc32C,KAAK82C,eAAiB,EAAI92C,KAAK82C,eAsBhF,KAER,KAAK,IAEG,GAAIliC,IAAQ5U,KAAK61C,YAAekD,EAAavqC,cAAc1H,WAAWnG,OAAS,IACvEX,KAAKw2C,YAA4C,GAA7BuC,EAAavqC,cAAqB,GAAK7H,SAASmyC,EAAOjuC,EAAQ,GAAI,GAG/F,IAFA7K,KAAKw2C,aAAc,EACnBx2C,KAAK42C,WAAoC,MAAtBkC,EAAOjuC,EAAQ,GAC9B0K,MAAMX,GACN,MAEJ,MAAOA,EAAO,MACVA,EAAOjO,SAASiO,EAAK9N,WAAWqD,MAAM,GAAI,GAE1CyK,GAAO,EACP5U,KAAK61C,YAAa,GAGlBkD,EAAa3kC,YAAYQ,GACM,IAA3BA,EAAK9N,WAAWnG,SAChBX,KAAK+nC,YAAa,GAEtB/nC,KAAK+d,aAAe,GAAIlb,MAAKk2C,EAAavqC,cAAeuqC,EAAazoC,WAAYyoC,EAAa5oC,WAC/FnQ,KAAK61C,YAAa,EAEtB,MAER,KAAK,IAKD,GAJA71C,KAAKyuB,MAAQzuB,KAAK81C,aAAeiD,EAAavoC,WAAa,IAAM,IAAI1J,WAAWnG,OAAS,IACjFX,KAAK04C,YAAqD,IAAtCK,EAAavoC,WAAa,IAAM,IAAW,GAAK7J,SAASmyC,EAAOjuC,EAAQ,GAAI,IACxG7K,KAAKu1C,OAAO3zB,WAAY5hB,KAAKu1C,OAAO3zB,WAAoB5hB,KAAKu1C,OAAO3zB,UACpE5hB,KAAKytC,WAAYztC,KAAKytC,WAAoBztC,KAAKytC,UAC3Cl4B,MAAMvV,KAAKyuB,MACX,MAEJ,MAAOzuB,KAAKyuB,KAAO,IACfzuB,KAAKyuB,KAAO9nB,SAAS3G,KAAKyuB,KAAK3nB,WAAWqD,MAAM,GAAI,GAExD4uC,GAAax1C,SAAoD,GAA3C4R,KAAKokC,MAAMR,EAAavoC,WAAa,IAAYxQ,KAAKyuB,KAAO,IACnFzuB,KAAK+nC,WAA6C,IAAhC/nC,KAAKyuB,KAAK3nB,WAAWnG,OACvCX,KAAK81C,YAAa,EAClB91C,KAAK+2C,cAAgB/2C,KAAK+2C,cAAgB,CAC1C,MACJ,KAAK,IAKD,GAJA/2C,KAAKyuB,MAAQzuB,KAAK81C,YAAciD,EAAavoC,WAAW1J,WAAWnG,OAAS,IACvEX,KAAK04C,YAAwC,GAA1BK,EAAavoC,WAAkB,GAAK7J,SAASmyC,EAAOjuC,EAAQ,GAAI,IACxF7K,KAAKu1C,OAAO3zB,WAAY5hB,KAAKu1C,OAAO3zB,WAAoB5hB,KAAKu1C,OAAO3zB,UACpE5hB,KAAKytC,WAAYztC,KAAKytC,WAAoBztC,KAAKytC,UAC3Cl4B,MAAMvV,KAAKyuB,MACX,MAEJ,KAASztB,EAAI,EAAGhB,KAAKyuB,KAAO,GAAIztB,IAC5BhB,KAAKyuB,KAAO9nB,SAAS3G,KAAKyuB,KAAK3nB,WAAWqD,MAAM,GAAI,GAExD4uC,GAAax1C,SAASvD,KAAKyuB,MAC3BzuB,KAAK+nC,WAA6C,IAAhC/nC,KAAKyuB,KAAK3nB,WAAWnG,OACvCX,KAAK81C,YAAa,EAClB91C,KAAK+2C,cAAgB/2C,KAAK+2C,cAAgB,CAC1C,MACJ,KAAK,IAEG,GAAIpD,IAAW3zC,KAAK+1C,cAAgBgD,EAAatoC,aAAa3J,WAAWnG,OAAS,IAC1EX,KAAK04C,YAA0C,GAA5BK,EAAatoC,aAAoB,GAAK9J,SAASmyC,EAAOjuC,EAAQ,GAAI,GAG7F,IAFA7K,KAAKu1C,OAAO3zB,WAAY5hB,KAAKu1C,OAAO3zB,WAAoB5hB,KAAKu1C,OAAO3zB,UACpE5hB,KAAKytC,WAAYztC,KAAKytC,WAAoBztC,KAAKytC,UAC3Cl4B,MAAMo+B,GACN,MAEJ,KAAS3yC,EAAI,EAAG2yC,EAAU,GAAI3yC,IAC1B2yC,EAAUhtC,SAASgtC,EAAQ7sC,WAAWqD,MAAM,GAAI,GAEpD4uC,GAAar7B,WAAWi2B,GACxB3zC,KAAK+nC,WAA2C,IAA9B4L,EAAQ7sC,WAAWnG,OACrCX,KAAK+1C,cAAe,EACpB/1C,KAAKg3C,gBAAkBh3C,KAAKg3C,gBAAkB,CAC9C,MAER,KAAK,IAEG,GAAIpD,IAAW5zC,KAAKg2C,eAAiB+C,EAAaroC,aAAa5J,WAAWnG,OAAS,IAC9EX,KAAK04C,YAA0C,GAA5BK,EAAaroC,aAAoB,GAAK/J,SAASmyC,EAAOjuC,EAAQ,GAAI,GAG1F,IAFA7K,KAAKu1C,OAAO3zB,WAAY5hB,KAAKu1C,OAAO3zB,WAAoB5hB,KAAKu1C,OAAO3zB,UACpE5hB,KAAKytC,WAAYztC,KAAKytC,WAAoBztC,KAAKytC,UAC3Cl4B,MAAMq+B,GACN,MAEJ,KAAS5yC,EAAI,EAAG4yC,EAAU,GAAI5yC,IAC1B4yC,EAAUjtC,SAASitC,EAAQ9sC,WAAWqD,MAAM,GAAI,GAEpD4uC,GAAan2C,WAAWgxC,GACxB5zC,KAAK+nC,WAA2C,IAA9B6L,EAAQ9sC,WAAWnG,OACrCX,KAAKg2C,eAAgB,EACrBh2C,KAAKi3C,gBAAkBj3C,KAAKi3C,gBAAkB,CAC9C,MAER,KAAK,IAEGj3C,KAAKm2C,iBAAmB2C,EAAOjuC,EAAQ,GAAGvB,aAI1C,KAAK,GAFDkwC,GAAgBx5C,KAAKk5C,iBAAiB,0BACtCO,EAAah6C,OAAOoK,KAAK2vC,GACpBx4C,EAAI,EAAGhB,KAAKm2C,gBAAgBx1C,OAAS,EAAGK,KACoC,IAA5Ew4C,EAAaC,EAAW,IAAInwC,cAAc0J,QAAQhT,KAAKm2C,kBACrD4C,EAAavoC,YAAc,IACI,IADIgpC,EAAaC,EAAW,IAAInwC,cAClE0J,QAAQhT,KAAKm2C,kBAA0B4C,EAAavoC,WAAa,MACjEuoC,EAAax1C,UAAUw1C,EAAavoC,WAAa,IAAM,IACvDxQ,KAAKo3C,cAAgB2B,GAEzB/4C,KAAKm2C,gBAAkBn2C,KAAKm2C,gBAAgB0C,UAAU,EAAG74C,KAAKm2C,gBAAgBx1C,QAO9FX,KAAKo3C,cAAgB2B,GAGzBzD,EAAep1C,UAAU63C,YAAc,WAGnC,QAAS2B,GAAqBC,GAC1B,GAAI5+B,GAeAq5B,EACAzqB,EAdAiwB,EAAkBC,EAAMX,iBAAiB,iCACzCY,EAAoBr6C,OAAOoK,KAAK+vC,GAEhCG,EAAYF,EAAMX,iBAAiB,0BACnCc,EAAav6C,OAAOoK,KAAKkwC,GAEzBE,EAAcJ,EAAMX,iBAAiB,4BACrCgB,EAAez6C,OAAOoK,KAAKowC,GAC3BE,EAAoBN,EAAMX,iBAAiB,mCAC3CkB,EAAaP,EAAMX,iBAAiB,4BAEpCM,EAAgBK,EAAMX,iBAAiB,0BACvCO,EAAah6C,OAAOoK,KAAK2vC,EAG7B,QAAQG,GACJ,IAAK,MACL,IAAK,OACL,IAAK,IACD5+B,EAAS8+B,EAAMlE,UAAYkE,EAAMzC,cAAcjnC,UAAUrJ,WAAa+yC,EAAM5oB,gBAAqB,IAAEnqB,WACnGiU,EAAS8+B,EAAMQ,UAAUR,EAAMnD,WAAYmD,EAAMlE,UAAW56B,GACjC,IAAvB8+B,EAAMhD,eACNgD,EAAM9R,YAAa,EACnB8R,EAAMhD,aAAe,EAEzB,MACJ,KAAK,KACD97B,EAAS8+B,EAAMlE,UAAYkE,EAAMS,SAAST,EAAMzC,cAAcjnC,UAAW,GAAK0pC,EAAM5oB,gBAAqB,IAAEnqB,WAC3GiU,EAAS8+B,EAAMQ,UAAUR,EAAMnD,WAAYmD,EAAMlE,UAAW56B,GACjC,IAAvB8+B,EAAMhD,eACNgD,EAAM9R,YAAa,EACnB8R,EAAMhD,aAAe,EAEzB,MACJ,KAAK,IACL,IAAK,KACL,IAAK,MACD97B,EAAS8+B,EAAMlE,WAAakE,EAAMjE,aAAeiE,EAAMhE,WAAa+D,EAAgBE,EAAkBD,EAAMzC,cAAcxmC,WAAW9J,WAAa+yC,EAAM5oB,gBAA8B,aAAEnqB,UACxL,MACJ,KAAK,OACDiU,EAAS8+B,EAAMlE,WAAakE,EAAMjE,aAAeiE,EAAMhE,WAAakE,EAASC,EAAWH,EAAMzC,cAAcxmC,WAAW9J,WAAa+yC,EAAM5oB,gBAA8B,aAAEnqB,UAC1K,MACJ,KAAK,QACDiU,EAAS8+B,EAAMlE,WAAakE,EAAMjE,aAAeiE,EAAMhE,WAAaoE,EAAWC,EAAaL,EAAMzC,cAAcxmC,WAAW9J,WAAa+yC,EAAM5oB,gBAA8B,aAAEnqB,UAC9K,MACJ,KAAK,IACDiU,EAAS8+B,EAAMjE,aAAeiE,EAAMzC,cAAc9mC,WAAa,GAAGxJ,WAAa+yC,EAAM5oB,gBAAuB,MAAEnqB,WAC9GiU,EAAS8+B,EAAMQ,UAAUR,EAAMlD,YAAakD,EAAMjE,YAAa76B,GAClC,IAAzB8+B,EAAM/C,iBACN+C,EAAM9R,YAAa,EACnB8R,EAAM/C,eAAiB,EAE3B,MACJ,KAAK,KACD/7B,EAAS8+B,EAAMjE,YAAciE,EAAMS,SAAST,EAAMzC,cAAc9mC,WAAa,EAAG,GAAKupC,EAAM5oB,gBAAuB,MAAEnqB,WACpHiU,EAAS8+B,EAAMQ,UAAUR,EAAMlD,YAAakD,EAAMjE,YAAa76B,GAClC,IAAzB8+B,EAAM/C,iBACN+C,EAAM9R,YAAa,EACnB8R,EAAM/C,eAAiB,EAE3B,MACJ,KAAK,MACD/7B,EAAS8+B,EAAMjE,YAAcuE,EAAiBN,EAAMzC,cAAc9mC,WAAa,GAAKupC,EAAM5oB,gBAAuB,MAAEnqB,UACnH,MACJ,KAAK,OACDiU,EAAS8+B,EAAMjE,YAAcwE,EAAUP,EAAMzC,cAAc9mC,WAAa,GAAKupC,EAAM5oB,gBAAuB,MAAEnqB,UAC5G,MACJ,KAAK,KACDiU,EAAS8+B,EAAMhE,WAAagE,EAAMS,SAAST,EAAMzC,cAAc5oC,cAAgB,IAAK,GAAKqrC,EAAM5oB,gBAAsB,KAAEnqB,WACvHiU,EAAS8+B,EAAMQ,UAAUR,EAAMjD,WAAYiD,EAAMhE,WAAY96B,GACzD8+B,EAAMhE,aACNgE,EAAM9R,WAAa8R,EAAMrD,YAA8E,KAA/DqD,EAAMzC,cAAc5oC,cAAgB,KAAK1H,WAAWnG,OAEhG,MACJ,KAAK,IACL,IAAK,OACDoa,EAAS8+B,EAAMhE,WAAagE,EAAMS,SAAST,EAAMzC,cAAc5oC,cAAe,GAAKqrC,EAAM5oB,gBAAsB,KAAEnqB,WACjHiU,EAAS8+B,EAAMQ,UAAUR,EAAMjD,WAAYiD,EAAMhE,WAAY96B,EAC7D,MACJ,KAAK,IACDA,EAAS8+B,EAAM/D,YAAc+D,EAAMzC,cAAc5mC,WAAa,IAAM,IAAI1J,WAAa+yC,EAAM5oB,gBAAsB,KAAEnqB,WACvF,IAAxB+yC,EAAM9C,gBACN8C,EAAM9R,YAAa,EACnB8R,EAAM9C,cAAgB,EAE1B,MACJ,KAAK,KACDh8B,EAAS8+B,EAAM/D,WAAa+D,EAAMS,SAAST,EAAMzC,cAAc5mC,WAAa,IAAM,GAAI,GAAKqpC,EAAM5oB,gBAAsB,KAAEnqB,WAC7F,IAAxB+yC,EAAM9C,gBACN8C,EAAM9R,YAAa,EACnB8R,EAAM9C,cAAgB,EAE1B,MACJ,KAAK,IACDh8B,EAAS8+B,EAAM/D,WAAa+D,EAAMzC,cAAc5mC,WAAW1J,WAAa+yC,EAAM5oB,gBAAsB,KAAEnqB,WAC1E,IAAxB+yC,EAAM9C,gBACN8C,EAAM9R,YAAa,EACnB8R,EAAM9C,cAAgB,EAE1B,MACJ,KAAK,KACDh8B,EAAS8+B,EAAM/D,WAAa+D,EAAMS,SAAST,EAAMzC,cAAc5mC,WAAY,GAAKqpC,EAAM5oB,gBAAsB,KAAEnqB,WAClF,IAAxB+yC,EAAM9C,gBACN8C,EAAM9R,YAAa,EACnB8R,EAAM9C,cAAgB,EAE1B,MACJ,KAAK,IACDh8B,EAAS8+B,EAAM9D,aAAe8D,EAAMzC,cAAc3mC,aAAa3J,WAAa+yC,EAAM5oB,gBAAwB,OAAEnqB,WAC9E,IAA1B+yC,EAAM7C,kBACN6C,EAAM9R,YAAa,EACnB8R,EAAM7C,gBAAkB,EAE5B,MACJ,KAAK,KACDj8B,EAAS8+B,EAAM9D,aAAe8D,EAAMS,SAAST,EAAMzC,cAAc3mC,aAAc,GAAKopC,EAAM5oB,gBAAwB,OAAEnqB,WACtF,IAA1B+yC,EAAM7C,kBACN6C,EAAM9R,YAAa,EACnB8R,EAAM7C,gBAAkB,EAE5B,MACJ,KAAK,IACDj8B,EAAS8+B,EAAM7D,cAAgB6D,EAAMzC,cAAc1mC,aAAa5J,WAAa+yC,EAAM5oB,gBAAwB,OAAEnqB,WAC/E,IAA1B+yC,EAAM5C,kBACN4C,EAAM9R,YAAa,EACnB8R,EAAM5C,gBAAkB,EAE5B,MACJ,KAAK,KACDl8B,EAAS8+B,EAAM7D,cAAgB6D,EAAMS,SAAST,EAAMzC,cAAc1mC,aAAc,GAAKmpC,EAAM5oB,gBAAwB,OAAEnqB,WACvF,IAA1B+yC,EAAM5C,kBACN4C,EAAM9R,YAAa,EACnB8R,EAAM5C,gBAAkB,EAE5B,MACJ,KAAK,IACDl8B,EAAS5F,KAAKokC,MAAMM,EAAMzC,cAAczmC,kBAAoB,KAAK7J,UACjE,MACJ,KAAK,KACDstC,EAAeyF,EAAMzC,cAAczmC,kBAC/BkpC,EAAMzC,cAAczmC,kBAAoB,KACxCyjC,EAAej/B,KAAKokC,MAAMM,EAAMzC,cAAczmC,kBAAoB,KAEtEoK,EAAS8+B,EAAMS,SAASlG,EAAc,EACtC,MACJ,KAAK,MACDr5B,EAAS8+B,EAAMS,SAAST,EAAMzC,cAAczmC,kBAAmB,EAC/D,MACJ,KAAK,IACL,IAAK,KACDoK,EAAS8+B,EAAMzC,cAAc5mC,WAAa,GAAKgpC,EAAaC,EAAW,IAAMD,EAAaC,EAAW,GACrG,MACJ,KAAK,IACL,IAAK,KACL,IAAK,MACL,IAAK,OACD9vB,GACI/X,OAAQ+nC,EACR7xC,KAAM,WAAYwJ,SAAU,MAAOsB,SAAUinC,EAAMtE,OAAO5yC,cAE9DoY,EAAS8+B,EAAMtE,OAAOzyC,UAAU0O,WAAWqoC,EAAMzC,cAAeztB,GAIxE,GADA5O,MAAoBtD,KAAXsD,EAAuBA,EAAS4+B,EAAWxvC,MAAM,EAAGwvC,EAAWh5C,OAAS,GAC7Ek5C,EAAMzD,aAAc,CAEpB,IAAK,GADDmE,GAAa,GACRv5C,EAAI,EAAGA,EAAI+Z,EAAOpa,OAAQK,IAC/Bu5C,GAAcZ,EAAW,EAE7B,OAAOY,GAGP,MAAOx/B,GAhLf,GAAI8+B,GAAQ75C,IAmLZ,OAAO05C,IAEXpE,EAAep1C,UAAUw3C,iBAAmB,WACxC,GAAI7sC,GAAQ7K,KAAKu1C,OAAOrzB,aAAauG,eACjC+vB,EAAa,IAC6C,IAA1Dx4C,KAAK01C,gBAAgB1iC,QAAQhT,KAAKy1C,WAAW5qC,MAC7C2tC,EAAax4C,KAAKy1C,WAAW5qC,IAEjC7K,KAAK24C,iBACL,IAAInd,GAAax7B,KAAKk3C,WAAWj6B,QAAQjd,KAAKs2C,YAAat2C,KAAK+3C,cAChE/3C,MAAKo2C,cAAe,EACpBp2C,KAAKy1C,WAAaz1C,KAAKk3C,WAAWj6B,QAAQjd,KAAKs2C,YAAat2C,KAAK+3C,eACjE/3C,KAAK02C,WAAa12C,KAAK22C,YAAc32C,KAAK42C,YAAa,EACvD52C,KAAKo2C,cAAe,EACpBp2C,KAAKg4C,mBAAqBh4C,KAAKy1C,WAC/Bz1C,KAAKoa,cAAgBohB,EACrBx7B,KAAKu1C,OAAOrzB,aAAahc,MAAQs1B,EACjCx7B,KAAKu1C,OAAOrzB,aAAahc,MAAQs1B,CACjC,KAAK,GAAIx6B,GAAI,EAAGA,EAAIhB,KAAKy1C,WAAW90C,OAAQK,IACxC,GAAIw3C,IAAex4C,KAAKy1C,WAAWz0C,GAAI,CACnC6J,EAAQ7J,CACR,OAKR,GAFAhB,KAAKu1C,OAAOrzB,aAAauG,eAAiB5d,EAC1C7K,KAAKy3C,uBACAz3C,KAAK+nC,YAAc/nC,KAAKu2C,cAAgBv2C,KAAKy2C,YAAa,CAC3D,GAAI+D,IAAax6C,KAAK+nC,UACtB/nC,MAAK+nC,WAAa/nC,KAAKu2C,YAAa,EACpCv2C,KAAKu4C,kBAAkBiC,GAEvBx6C,KAAKy2C,cACLz2C,KAAKu2C,YAAa,GAEtBv2C,KAAKy2C,aAAc,GAEvBnB,EAAep1C,UAAUq4C,kBAAoB,SAAUiC,GACnD,GAAI3vC,GAAQ7K,KAAKu1C,OAAOrzB,aAAauG,eACjCnjB,EAAMtF,KAAKu1C,OAAOrzB,aAAawG,aAC/B+xB,EAAcD,EAAa3vC,EAAQ,EAAIvF,EAAM,CAEjD,KADAtF,KAAKytC,WAAY,EACVgN,EAAcz6C,KAAKy1C,WAAW90C,QAAU85C,GAAe,GAAG,CAC7D,GAAIz6C,KAAK01C,gBAAgB1iC,QAAQhT,KAAKy1C,WAAWgF,KAAiB,EAAG,CACjEz6C,KAAK0sC,aAAa1sC,KAAKy1C,WAAWgF,GAClC,OAEJA,GAA6BD,GAAc,EAAI,IAGvDlF,EAAep1C,UAAUo6C,SAAW,SAAUn1B,EAAK1P,GAI/C,IAAK,GAHDilC,GAAYv1B,EAAIre,WAChBnG,EAAS8U,EAAQilC,EAAU/5C,OAC3Boa,EAAS,GACJ/Z,EAAI,EAAGA,EAAIL,EAAQK,IACxB+Z,GAAU,GAEd,OAAOA,GAAS2/B,GAEpBpF,EAAep1C,UAAUm6C,UAAY,SAAUM,EAAQhF,EAAWiF,GAC9D,GAAI7/B,GAAS6/B,CAIb,OAHID,KAAWhF,IACX56B,EAAS,KAENA,GAEXu6B,EAAep1C,UAAU84C,eAAiB,SAAUpnC,EAAQipC,GACxD,OAAQjpC,GACJ,IAAK,IACD5R,KAAK21C,UAAYkF,CACjB,MACJ,KAAK,IACD76C,KAAK41C,YAAciF,EACdA,IACD76C,KAAKo3C,cAActjC,SAAS,GAC5B9T,KAAKk2C,eAAiB,GAE1B,MACJ,KAAK,IACDl2C,KAAK61C,WAAagF,CAClB,MACJ,KAAK,IACL,IAAK,IACD76C,KAAK81C,WAAa+E,EACbA,IACD76C,KAAKm2C,gBAAkB,GAE3B,MACJ,KAAK,IACDn2C,KAAK+1C,aAAe8E,CACpB,MACJ,KAAK,IACD76C,KAAKg2C,cAAgB6E,CACrB,MACJ,SACI,OAAO,EAEf,OAAO,GAEXvF,EAAep1C,UAAUu4C,eAAiB,SAAUqC,GAChD,GAAIjwC,GAAQ7K,KAAKu1C,OAAOrzB,aAAauG,eACjC+vB,EAAa,EACjB,KAA8D,IAA1Dx4C,KAAK01C,gBAAgB1iC,QAAQhT,KAAKy1C,WAAW5qC,IAAjD,CACI2tC,EAAax4C,KAAKy1C,WAAW5qC,EAKjC,IAAIkuC,GAAe,GAAIl2C,MAAK7C,KAAKo3C,cAAc5oC,cAAexO,KAAKo3C,cAAc9mC,WAAYtQ,KAAKo3C,cAAcjnC,UAAWnQ,KAAKo3C,cAAc5mC,WAAYxQ,KAAKo3C,cAAc3mC,aAAczQ,KAAKo3C,cAAc1mC,aAC9M1Q,MAAK+d,aAAe,GAAIlb,MAAK7C,KAAKo3C,cAAc5oC,cAAexO,KAAKo3C,cAAc9mC,WAAYtQ,KAAKo3C,cAAcjnC,UAAWnQ,KAAKo3C,cAAc5mC,WAAYxQ,KAAKo3C,cAAc3mC,aAAczQ,KAAKo3C,cAAc1mC,aAC/M,IAAIqqC,GAAiBD,GAAe,EAAI,CACxC,QAAQtC,GACJ,IAAK,IACDO,EAAahlC,QAAQglC,EAAa5oC,UAAY4qC,EAC9C,MACJ,KAAK,IAEG,GAAIC,GAAWjC,EAAazoC,WAAayqC,CAGzC,IAFAhC,EAAahlC,QAAQ,GACrBglC,EAAajlC,SAASknC,GAClBh7C,KAAK21C,UAAW,CAChB,GAAI0D,GAAkB,GAAIx2C,MAAK7C,KAAK+d,aAAavP,cAAexO,KAAK+d,aAAazN,WAAa,EAAG,GAAGH,UACjGmpC,EAAiB,GAAIz2C,MAAKk2C,EAAavqC,cAAeuqC,EAAazoC,WAAa,EAAG,GAAGH,SACtFnQ,MAAK+d,aAAa5N,YAAckpC,GAAmBC,GAAkBD,EACrEN,EAAahlC,QAAQulC,GAGrBP,EAAahlC,QAAQ/T,KAAK+d,aAAa5N,eAI3C4oC,GAAahlC,QAAQ/T,KAAK+d,aAAa5N,UAE3CnQ,MAAK+d,aAAe,GAAIlb,MAAKk2C,EAAavqC,cAAeuqC,EAAazoC,WAAYyoC,EAAa5oC,UAC/F,MAER,KAAK,IACD4oC,EAAa3kC,YAAY2kC,EAAavqC,cAAgBusC,EACtD,MACJ,KAAK,IACL,IAAK,IACDhC,EAAax1C,SAASw1C,EAAavoC,WAAauqC,EAChD,MACJ,KAAK,IACDhC,EAAar7B,WAAWq7B,EAAatoC,aAAesqC,EACpD,MACJ,KAAK,IACDhC,EAAan2C,WAAWm2C,EAAaroC,aAAeqqC,EACpD,MACJ,KAAK,IACDhC,EAAax1C,UAAUw1C,EAAavoC,WAAa,IAAM,IAK/DxQ,KAAKo3C,cAAgB2B,EAAavqC,cAAgB,EAAIuqC,EAAe/4C,KAAKo3C,eACZ,IAA1Dp3C,KAAK01C,gBAAgB1iC,QAAQhT,KAAKy1C,WAAW5qC,KAC7C7K,KAAKg5C,eAAeh5C,KAAKy1C,WAAW5qC,IAAQ,KAGpDyqC,EAAep1C,UAAUg5C,iBAAmB,SAAUtnC,GAClD,GAAI5O,GAAShD,KAAKu1C,OAAOvyC,MAQzB,OANe,OAAXA,GAA8B,UAAXA,EACVuG,WAASqI,EAAQpI,0BAGjBD,WAAS,QAAevG,EAAU,8BAAgC4O,EAASlI,aAI5F4rC,EAAep1C,UAAUi3C,kBAAoB,WACzC,GAAIpyB,GAAgB/kB,KAAKk5C,iBAAiB,yCAA0CpyC,UAgBpF,OAf+B,eAA3B9G,KAAKu1C,OAAOtpC,aACZ8Y,EAAgB/kB,KAAKk5C,iBAAiB,yCAA0CpyC,WAC5E9G,KAAKu1C,OAAO3jC,QAAU5R,KAAKu1C,OAAOxwB,eAClCA,EAAe/kB,KAAKu1C,OAAOxwB,eAGJ,mBAA3B/kB,KAAKu1C,OAAOtpC,aACZ8Y,EAAgB/kB,KAAKk5C,iBAAiB,yCAA0CpyC,WAC5E9G,KAAKu1C,OAAOvwB,iBACZD,EAAe/kB,KAAKu1C,OAAOvwB,iBAGJ,eAA3BhlB,KAAKu1C,OAAOtpC,aACZ8Y,EAAe/kB,KAAKu1C,OAAOjK,kBAExBvmB,GAEXuwB,EAAep1C,UAAUguC,aAAe,WACpCluC,KAAK21C,UAAY31C,KAAK41C,YAAc51C,KAAK61C,WAAa71C,KAAK81C,WAAa91C,KAAK+1C,aAAe/1C,KAAKg2C,eAAgB,EACjHh2C,KAAK4yB,eAET0iB,EAAep1C,UAAU0yB,YAAc,WACnC5yB,KAAKk2C,eAAiBl2C,KAAKm2C,gBAAkB,EAC7C,IAAI3a,GAAax7B,KAAKk3C,WAAWj6B,QAAQjd,KAAKs2C,YAAat2C,KAAK+3C,cAChE/3C,MAAKo2C,cAAe,EACpBp2C,KAAKy1C,WAAaz1C,KAAKk3C,WAAWj6B,QAAQjd,KAAKs2C,YAAat2C,KAAK+3C,eACjE/3C,KAAKo2C,cAAe,EACpBp2C,KAAKg4C,mBAAqBh4C,KAAKy1C,WAC/Bz1C,KAAKoa,cAAgBohB,EACrBx7B,KAAKu1C,OAAOnyB,iBAAiBoY,IAEjC8Z,EAAep1C,UAAUyY,QAAU,WAC/B3Y,KAAKq3C,uBAEF/B,WCxzBX2F,GAAeC,OAAOC,GACtBC,EAAiBF,OAAOC,EAAeE,IACvCC,EAAiBJ,OAAOG,IACxBE,GAAqBL,OAAOC,EAAeE"}