@rocketshow/designer 1.32.0 → 1.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (339) hide show
  1. package/esm2022/lib/array-sort-pipe.mjs +30 -0
  2. package/esm2022/lib/designer.component.mjs +605 -0
  3. package/esm2022/lib/designer.module.mjs +183 -0
  4. package/esm2022/lib/designer.service.mjs +14 -0
  5. package/esm2022/lib/effect/effect-curve/effect-curve.component.mjs +569 -0
  6. package/esm2022/lib/effect/effect-pan-tilt/effect-pan-tilt.component.mjs +36 -0
  7. package/esm2022/lib/effect/effect.component.mjs +174 -0
  8. package/esm2022/lib/error-dialog/error-dialog.component.mjs +75 -0
  9. package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +222 -0
  10. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.mjs +147 -0
  11. package/esm2022/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.mjs +213 -0
  12. package/esm2022/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.mjs +78 -0
  13. package/esm2022/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.mjs +119 -0
  14. package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +169 -0
  15. package/esm2022/lib/fixture/fixture-channel/fixture-channel.component.mjs +160 -0
  16. package/esm2022/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.mjs +365 -0
  17. package/esm2022/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.mjs +151 -0
  18. package/esm2022/lib/fixture/fixture-settings/fixture-settings.component.mjs +46 -0
  19. package/esm2022/lib/fixture/fixture.component.mjs +138 -0
  20. package/esm2022/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.mjs +145 -0
  21. package/esm2022/lib/fixture-pool/fixture-pool.component.mjs +589 -0
  22. package/esm2022/lib/intro/intro.component.mjs +95 -0
  23. package/esm2022/lib/master-dimmer/master-dimmer.component.mjs +66 -0
  24. package/esm2022/lib/models/cached-fixture-capability.mjs +9 -0
  25. package/esm2022/lib/models/cached-fixture-channel.mjs +7 -0
  26. package/esm2022/lib/models/cached-fixture.mjs +6 -0
  27. package/esm2022/lib/models/color.mjs +8 -0
  28. package/esm2022/lib/models/composition.mjs +46 -0
  29. package/esm2022/lib/models/effect-curve-profile-channel.mjs +15 -0
  30. package/esm2022/lib/models/effect-curve.mjs +69 -0
  31. package/esm2022/lib/models/effect-pan-tilt.mjs +19 -0
  32. package/esm2022/lib/models/effect.mjs +12 -0
  33. package/esm2022/lib/models/fixture-capability-value.mjs +15 -0
  34. package/esm2022/lib/models/fixture-capability.mjs +84 -0
  35. package/esm2022/lib/models/fixture-channel-value.mjs +11 -0
  36. package/esm2022/lib/models/fixture-channel.mjs +24 -0
  37. package/esm2022/lib/models/fixture-mode.mjs +14 -0
  38. package/esm2022/lib/models/fixture-profile.mjs +70 -0
  39. package/esm2022/lib/models/fixture-wheel-slot.mjs +26 -0
  40. package/esm2022/lib/models/fixture-wheel.mjs +15 -0
  41. package/esm2022/lib/models/fixture.mjs +40 -0
  42. package/esm2022/lib/models/preset-region-scene.mjs +8 -0
  43. package/esm2022/lib/models/preset.mjs +56 -0
  44. package/esm2022/lib/models/project.mjs +68 -0
  45. package/esm2022/lib/models/scene-playback-region.mjs +11 -0
  46. package/esm2022/lib/models/scene.mjs +27 -0
  47. package/esm2022/lib/models/universe.mjs +11 -0
  48. package/esm2022/lib/preset/preset-settings/preset-settings.component.mjs +194 -0
  49. package/esm2022/lib/preset/preset.component.mjs +131 -0
  50. package/esm2022/lib/preview/models/color-changer-3d.mjs +167 -0
  51. package/esm2022/lib/preview/models/fixture-3d.mjs +150 -0
  52. package/esm2022/lib/preview/models/moving-head-3d.mjs +243 -0
  53. package/esm2022/lib/preview/preview.component.mjs +212 -0
  54. package/esm2022/lib/project/project-browser/project-browser.component.mjs +143 -0
  55. package/esm2022/lib/project/project-import/project-import.component.mjs +107 -0
  56. package/esm2022/lib/project/project-save/project-save.component.mjs +178 -0
  57. package/esm2022/lib/project/project-share/project-share.component.mjs +71 -0
  58. package/esm2022/lib/scene/scene-settings/scene-settings.component.mjs +146 -0
  59. package/esm2022/lib/scene/scene.component.mjs +110 -0
  60. package/esm2022/lib/services/animation.service.mjs +16 -0
  61. package/esm2022/lib/services/config.service.mjs +27 -0
  62. package/esm2022/lib/services/effect.service.mjs +14 -0
  63. package/esm2022/lib/services/error-dialog.service.mjs +39 -0
  64. package/esm2022/lib/services/fixture-pool.service.mjs +30 -0
  65. package/esm2022/lib/services/fixture.service.mjs +431 -0
  66. package/esm2022/lib/services/hotkey-target-exclude.service.mjs +24 -0
  67. package/esm2022/lib/services/intro.service.mjs +140 -0
  68. package/esm2022/lib/services/preset.service.mjs +400 -0
  69. package/esm2022/lib/services/preview-mesh.service.mjs +57 -0
  70. package/esm2022/lib/services/preview.service.mjs +496 -0
  71. package/esm2022/lib/services/project-load.service.mjs +149 -0
  72. package/esm2022/lib/services/project.service.mjs +97 -0
  73. package/esm2022/lib/services/scene.service.mjs +164 -0
  74. package/esm2022/lib/services/timeline.service.mjs +726 -0
  75. package/esm2022/lib/services/universe.service.mjs +23 -0
  76. package/esm2022/lib/services/user-ensure-login.service.mjs +38 -0
  77. package/esm2022/lib/services/user.service.mjs +89 -0
  78. package/esm2022/lib/services/uuid.service.mjs +23 -0
  79. package/esm2022/lib/services/warning-dialog.service.mjs +38 -0
  80. package/esm2022/lib/timeline/composition-settings/composition-settings.component.mjs +334 -0
  81. package/esm2022/lib/timeline/timeline-grid/timeline-grid.component.mjs +216 -0
  82. package/esm2022/lib/timeline/timeline.component.mjs +418 -0
  83. package/esm2022/lib/user/user-login/user-login.component.mjs +144 -0
  84. package/esm2022/lib/user/user-register/user-register.component.mjs +220 -0
  85. package/esm2022/lib/wait-dialog/wait-dialog.component.mjs +26 -0
  86. package/esm2022/lib/warning-dialog/warning-dialog.component.mjs +68 -0
  87. package/esm2022/public_api.mjs +7 -0
  88. package/esm2022/rocketshow-designer.mjs +5 -0
  89. package/fesm2022/rocketshow-designer.mjs +10626 -0
  90. package/fesm2022/rocketshow-designer.mjs.map +1 -0
  91. package/index.d.ts +5 -0
  92. package/lib/array-sort-pipe.d.ts +3 -0
  93. package/lib/designer.component.d.ts +15 -12
  94. package/lib/designer.module.d.ts +54 -0
  95. package/lib/designer.service.d.ts +3 -0
  96. package/lib/effect/effect-curve/effect-curve.component.d.ts +4 -1
  97. package/lib/effect/effect-pan-tilt/effect-pan-tilt.component.d.ts +3 -0
  98. package/lib/effect/effect.component.d.ts +3 -0
  99. package/lib/error-dialog/error-dialog.component.d.ts +3 -0
  100. package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +4 -1
  101. package/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.d.ts +3 -0
  102. package/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.d.ts +5 -2
  103. package/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.d.ts +3 -0
  104. package/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.d.ts +3 -0
  105. package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +3 -0
  106. package/lib/fixture/fixture-channel/fixture-channel.component.d.ts +3 -0
  107. package/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.d.ts +3 -0
  108. package/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.d.ts +3 -0
  109. package/lib/fixture/fixture-settings/fixture-settings.component.d.ts +3 -0
  110. package/lib/fixture/fixture.component.d.ts +3 -0
  111. package/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.d.ts +3 -0
  112. package/lib/fixture-pool/fixture-pool.component.d.ts +3 -0
  113. package/lib/intro/intro.component.d.ts +3 -0
  114. package/lib/master-dimmer/master-dimmer.component.d.ts +3 -0
  115. package/lib/preset/preset-settings/preset-settings.component.d.ts +3 -0
  116. package/lib/preset/preset.component.d.ts +3 -0
  117. package/lib/preview/preview.component.d.ts +4 -4
  118. package/lib/project/project-browser/project-browser.component.d.ts +3 -0
  119. package/lib/project/project-import/project-import.component.d.ts +3 -0
  120. package/lib/project/project-save/project-save.component.d.ts +3 -0
  121. package/lib/project/project-share/project-share.component.d.ts +3 -0
  122. package/lib/scene/scene-settings/scene-settings.component.d.ts +3 -0
  123. package/lib/scene/scene.component.d.ts +3 -0
  124. package/lib/services/animation.service.d.ts +3 -0
  125. package/lib/services/config.service.d.ts +3 -0
  126. package/lib/services/effect.service.d.ts +3 -0
  127. package/lib/services/error-dialog.service.d.ts +3 -0
  128. package/lib/services/fixture-pool.service.d.ts +3 -0
  129. package/lib/services/fixture.service.d.ts +3 -0
  130. package/lib/services/hotkey-target-exclude.service.d.ts +3 -0
  131. package/lib/services/intro.service.d.ts +3 -0
  132. package/lib/services/preset.service.d.ts +3 -0
  133. package/lib/services/preview-mesh.service.d.ts +3 -0
  134. package/lib/services/preview.service.d.ts +4 -0
  135. package/lib/services/project-load.service.d.ts +3 -0
  136. package/lib/services/project.service.d.ts +3 -0
  137. package/lib/services/scene.service.d.ts +3 -0
  138. package/lib/services/timeline.service.d.ts +4 -1
  139. package/lib/services/universe.service.d.ts +3 -0
  140. package/lib/services/user-ensure-login.service.d.ts +3 -0
  141. package/lib/services/user.service.d.ts +3 -0
  142. package/lib/services/uuid.service.d.ts +3 -0
  143. package/lib/services/warning-dialog.service.d.ts +3 -0
  144. package/lib/timeline/composition-settings/composition-settings.component.d.ts +3 -0
  145. package/lib/timeline/timeline-grid/timeline-grid.component.d.ts +3 -0
  146. package/lib/timeline/timeline.component.d.ts +3 -0
  147. package/lib/user/user-login/user-login.component.d.ts +3 -0
  148. package/lib/user/user-register/user-register.component.d.ts +3 -0
  149. package/lib/wait-dialog/wait-dialog.component.d.ts +3 -0
  150. package/lib/warning-dialog/warning-dialog.component.d.ts +3 -0
  151. package/package.json +20 -22
  152. package/rocketshow-designer-1.33.0.tgz +0 -0
  153. package/bundles/rocketshow-designer.umd.js +0 -9966
  154. package/bundles/rocketshow-designer.umd.js.map +0 -1
  155. package/bundles/rocketshow-designer.umd.min.js +0 -17
  156. package/bundles/rocketshow-designer.umd.min.js.map +0 -1
  157. package/esm2015/lib/array-sort-pipe.js +0 -28
  158. package/esm2015/lib/designer.component.js +0 -411
  159. package/esm2015/lib/designer.module.js +0 -117
  160. package/esm2015/lib/designer.service.js +0 -16
  161. package/esm2015/lib/effect/effect-curve/effect-curve.component.js +0 -325
  162. package/esm2015/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -30
  163. package/esm2015/lib/effect/effect.component.js +0 -73
  164. package/esm2015/lib/error-dialog/error-dialog.component.js +0 -42
  165. package/esm2015/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -141
  166. package/esm2015/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -128
  167. package/esm2015/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -163
  168. package/esm2015/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -60
  169. package/esm2015/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -87
  170. package/esm2015/lib/fixture/fixture-capability/fixture-capability.component.js +0 -97
  171. package/esm2015/lib/fixture/fixture-channel/fixture-channel.component.js +0 -66
  172. package/esm2015/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -200
  173. package/esm2015/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -31
  174. package/esm2015/lib/fixture/fixture-settings/fixture-settings.component.js +0 -35
  175. package/esm2015/lib/fixture/fixture.component.js +0 -70
  176. package/esm2015/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -128
  177. package/esm2015/lib/fixture-pool/fixture-pool.component.js +0 -331
  178. package/esm2015/lib/intro/intro.component.js +0 -25
  179. package/esm2015/lib/master-dimmer/master-dimmer.component.js +0 -41
  180. package/esm2015/lib/models/cached-fixture-capability.js +0 -9
  181. package/esm2015/lib/models/cached-fixture-channel.js +0 -7
  182. package/esm2015/lib/models/cached-fixture.js +0 -6
  183. package/esm2015/lib/models/color.js +0 -8
  184. package/esm2015/lib/models/composition.js +0 -46
  185. package/esm2015/lib/models/effect-curve-profile-channel.js +0 -15
  186. package/esm2015/lib/models/effect-curve.js +0 -69
  187. package/esm2015/lib/models/effect-pan-tilt.js +0 -19
  188. package/esm2015/lib/models/effect.js +0 -12
  189. package/esm2015/lib/models/fixture-capability-value.js +0 -15
  190. package/esm2015/lib/models/fixture-capability.js +0 -84
  191. package/esm2015/lib/models/fixture-channel-value.js +0 -11
  192. package/esm2015/lib/models/fixture-channel.js +0 -24
  193. package/esm2015/lib/models/fixture-mode.js +0 -14
  194. package/esm2015/lib/models/fixture-profile.js +0 -70
  195. package/esm2015/lib/models/fixture-wheel-slot.js +0 -26
  196. package/esm2015/lib/models/fixture-wheel.js +0 -15
  197. package/esm2015/lib/models/fixture.js +0 -40
  198. package/esm2015/lib/models/preset-region-scene.js +0 -8
  199. package/esm2015/lib/models/preset.js +0 -56
  200. package/esm2015/lib/models/project.js +0 -68
  201. package/esm2015/lib/models/scene-playback-region.js +0 -11
  202. package/esm2015/lib/models/scene.js +0 -27
  203. package/esm2015/lib/models/universe.js +0 -11
  204. package/esm2015/lib/preset/preset-settings/preset-settings.component.js +0 -66
  205. package/esm2015/lib/preset/preset.component.js +0 -85
  206. package/esm2015/lib/preview/models/color-changer-3d.js +0 -167
  207. package/esm2015/lib/preview/models/fixture-3d.js +0 -150
  208. package/esm2015/lib/preview/models/moving-head-3d.js +0 -233
  209. package/esm2015/lib/preview/preview.component.js +0 -242
  210. package/esm2015/lib/project/project-browser/project-browser.component.js +0 -73
  211. package/esm2015/lib/project/project-import/project-import.component.js +0 -89
  212. package/esm2015/lib/project/project-save/project-save.component.js +0 -105
  213. package/esm2015/lib/project/project-share/project-share.component.js +0 -43
  214. package/esm2015/lib/scene/scene-settings/scene-settings.component.js +0 -52
  215. package/esm2015/lib/scene/scene.component.js +0 -56
  216. package/esm2015/lib/services/animation.service.js +0 -17
  217. package/esm2015/lib/services/config.service.js +0 -28
  218. package/esm2015/lib/services/effect.service.js +0 -16
  219. package/esm2015/lib/services/error-dialog.service.js +0 -44
  220. package/esm2015/lib/services/fixture-pool.service.js +0 -34
  221. package/esm2015/lib/services/fixture.service.js +0 -443
  222. package/esm2015/lib/services/hotkey-target-exclude.service.js +0 -26
  223. package/esm2015/lib/services/intro.service.js +0 -144
  224. package/esm2015/lib/services/preset.service.js +0 -416
  225. package/esm2015/lib/services/preview-mesh.service.js +0 -58
  226. package/esm2015/lib/services/preview.service.js +0 -500
  227. package/esm2015/lib/services/project-load.service.js +0 -171
  228. package/esm2015/lib/services/project.service.js +0 -113
  229. package/esm2015/lib/services/scene.service.js +0 -174
  230. package/esm2015/lib/services/timeline.service.js +0 -738
  231. package/esm2015/lib/services/universe.service.js +0 -24
  232. package/esm2015/lib/services/user-ensure-login.service.js +0 -44
  233. package/esm2015/lib/services/user.service.js +0 -93
  234. package/esm2015/lib/services/uuid.service.js +0 -25
  235. package/esm2015/lib/services/warning-dialog.service.js +0 -43
  236. package/esm2015/lib/timeline/composition-settings/composition-settings.component.js +0 -197
  237. package/esm2015/lib/timeline/timeline-grid/timeline-grid.component.js +0 -55
  238. package/esm2015/lib/timeline/timeline.component.js +0 -239
  239. package/esm2015/lib/user/user-login/user-login.component.js +0 -64
  240. package/esm2015/lib/user/user-register/user-register.component.js +0 -89
  241. package/esm2015/lib/wait-dialog/wait-dialog.component.js +0 -16
  242. package/esm2015/lib/warning-dialog/warning-dialog.component.js +0 -42
  243. package/esm2015/public_api.js +0 -7
  244. package/esm2015/rocketshow-designer.js +0 -61
  245. package/esm5/lib/array-sort-pipe.js +0 -31
  246. package/esm5/lib/designer.component.js +0 -468
  247. package/esm5/lib/designer.module.js +0 -120
  248. package/esm5/lib/designer.service.js +0 -17
  249. package/esm5/lib/effect/effect-curve/effect-curve.component.js +0 -386
  250. package/esm5/lib/effect/effect-pan-tilt/effect-pan-tilt.component.js +0 -31
  251. package/esm5/lib/effect/effect.component.js +0 -75
  252. package/esm5/lib/error-dialog/error-dialog.component.js +0 -43
  253. package/esm5/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.js +0 -159
  254. package/esm5/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.js +0 -130
  255. package/esm5/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.js +0 -215
  256. package/esm5/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.js +0 -61
  257. package/esm5/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.js +0 -88
  258. package/esm5/lib/fixture/fixture-capability/fixture-capability.component.js +0 -130
  259. package/esm5/lib/fixture/fixture-channel/fixture-channel.component.js +0 -68
  260. package/esm5/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.js +0 -306
  261. package/esm5/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.js +0 -32
  262. package/esm5/lib/fixture/fixture-settings/fixture-settings.component.js +0 -36
  263. package/esm5/lib/fixture/fixture.component.js +0 -71
  264. package/esm5/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.js +0 -127
  265. package/esm5/lib/fixture-pool/fixture-pool.component.js +0 -430
  266. package/esm5/lib/intro/intro.component.js +0 -26
  267. package/esm5/lib/master-dimmer/master-dimmer.component.js +0 -42
  268. package/esm5/lib/models/cached-fixture-capability.js +0 -11
  269. package/esm5/lib/models/cached-fixture-channel.js +0 -9
  270. package/esm5/lib/models/cached-fixture.js +0 -8
  271. package/esm5/lib/models/color.js +0 -10
  272. package/esm5/lib/models/composition.js +0 -60
  273. package/esm5/lib/models/effect-curve-profile-channel.js +0 -29
  274. package/esm5/lib/models/effect-curve.js +0 -95
  275. package/esm5/lib/models/effect-pan-tilt.js +0 -24
  276. package/esm5/lib/models/effect.js +0 -14
  277. package/esm5/lib/models/fixture-capability-value.js +0 -17
  278. package/esm5/lib/models/fixture-capability.js +0 -86
  279. package/esm5/lib/models/fixture-channel-value.js +0 -13
  280. package/esm5/lib/models/fixture-channel.js +0 -38
  281. package/esm5/lib/models/fixture-mode.js +0 -16
  282. package/esm5/lib/models/fixture-profile.js +0 -114
  283. package/esm5/lib/models/fixture-wheel-slot.js +0 -28
  284. package/esm5/lib/models/fixture-wheel.js +0 -29
  285. package/esm5/lib/models/fixture.js +0 -42
  286. package/esm5/lib/models/preset-region-scene.js +0 -10
  287. package/esm5/lib/models/preset.js +0 -90
  288. package/esm5/lib/models/project.js +0 -122
  289. package/esm5/lib/models/scene-playback-region.js +0 -13
  290. package/esm5/lib/models/scene.js +0 -29
  291. package/esm5/lib/models/universe.js +0 -13
  292. package/esm5/lib/preset/preset-settings/preset-settings.component.js +0 -67
  293. package/esm5/lib/preset/preset.component.js +0 -86
  294. package/esm5/lib/preview/models/color-changer-3d.js +0 -194
  295. package/esm5/lib/preview/models/fixture-3d.js +0 -196
  296. package/esm5/lib/preview/models/moving-head-3d.js +0 -250
  297. package/esm5/lib/preview/preview.component.js +0 -280
  298. package/esm5/lib/project/project-browser/project-browser.component.js +0 -77
  299. package/esm5/lib/project/project-import/project-import.component.js +0 -88
  300. package/esm5/lib/project/project-save/project-save.component.js +0 -120
  301. package/esm5/lib/project/project-share/project-share.component.js +0 -44
  302. package/esm5/lib/scene/scene-settings/scene-settings.component.js +0 -53
  303. package/esm5/lib/scene/scene.component.js +0 -57
  304. package/esm5/lib/services/animation.service.js +0 -18
  305. package/esm5/lib/services/config.service.js +0 -29
  306. package/esm5/lib/services/effect.service.js +0 -17
  307. package/esm5/lib/services/error-dialog.service.js +0 -46
  308. package/esm5/lib/services/fixture-pool.service.js +0 -36
  309. package/esm5/lib/services/fixture.service.js +0 -643
  310. package/esm5/lib/services/hotkey-target-exclude.service.js +0 -27
  311. package/esm5/lib/services/intro.service.js +0 -145
  312. package/esm5/lib/services/preset.service.js +0 -637
  313. package/esm5/lib/services/preview-mesh.service.js +0 -61
  314. package/esm5/lib/services/preview.service.js +0 -754
  315. package/esm5/lib/services/project-load.service.js +0 -185
  316. package/esm5/lib/services/project.service.js +0 -127
  317. package/esm5/lib/services/scene.service.js +0 -251
  318. package/esm5/lib/services/timeline.service.js +0 -845
  319. package/esm5/lib/services/universe.service.js +0 -36
  320. package/esm5/lib/services/user-ensure-login.service.js +0 -45
  321. package/esm5/lib/services/user.service.js +0 -95
  322. package/esm5/lib/services/uuid.service.js +0 -26
  323. package/esm5/lib/services/warning-dialog.service.js +0 -45
  324. package/esm5/lib/timeline/composition-settings/composition-settings.component.js +0 -206
  325. package/esm5/lib/timeline/timeline-grid/timeline-grid.component.js +0 -56
  326. package/esm5/lib/timeline/timeline.component.js +0 -243
  327. package/esm5/lib/user/user-login/user-login.component.js +0 -66
  328. package/esm5/lib/user/user-register/user-register.component.js +0 -91
  329. package/esm5/lib/wait-dialog/wait-dialog.component.js +0 -18
  330. package/esm5/lib/warning-dialog/warning-dialog.component.js +0 -43
  331. package/esm5/public_api.js +0 -7
  332. package/esm5/rocketshow-designer.js +0 -61
  333. package/fesm2015/rocketshow-designer.js +0 -7945
  334. package/fesm2015/rocketshow-designer.js.map +0 -1
  335. package/fesm5/rocketshow-designer.js +0 -9690
  336. package/fesm5/rocketshow-designer.js.map +0 -1
  337. package/rocketshow-designer-1.32.0.tgz +0 -0
  338. package/rocketshow-designer.d.ts +0 -60
  339. package/rocketshow-designer.metadata.json +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"rocketshow-designer.js","sources":["ng://@rocketshow/designer/lib/designer.service.ts","ng://@rocketshow/designer/lib/models/fixture-capability.ts","ng://@rocketshow/designer/lib/models/fixture-channel.ts","ng://@rocketshow/designer/lib/models/fixture-mode.ts","ng://@rocketshow/designer/lib/models/fixture-wheel-slot.ts","ng://@rocketshow/designer/lib/models/fixture-wheel.ts","ng://@rocketshow/designer/lib/models/fixture-profile.ts","ng://@rocketshow/designer/lib/models/cached-fixture.ts","ng://@rocketshow/designer/lib/models/cached-fixture-capability.ts","ng://@rocketshow/designer/lib/models/cached-fixture-channel.ts","ng://@rocketshow/designer/lib/models/color.ts","ng://@rocketshow/designer/lib/models/fixture.ts","ng://@rocketshow/designer/lib/models/scene-playback-region.ts","ng://@rocketshow/designer/lib/models/composition.ts","ng://@rocketshow/designer/lib/models/effect.ts","ng://@rocketshow/designer/lib/models/effect-curve-profile-channel.ts","ng://@rocketshow/designer/lib/models/effect-curve.ts","ng://@rocketshow/designer/lib/models/effect-pan-tilt.ts","ng://@rocketshow/designer/lib/models/fixture-capability-value.ts","ng://@rocketshow/designer/lib/models/fixture-channel-value.ts","ng://@rocketshow/designer/lib/models/preset.ts","ng://@rocketshow/designer/lib/models/scene.ts","ng://@rocketshow/designer/lib/models/project.ts","ng://@rocketshow/designer/lib/services/user.service.ts","ng://@rocketshow/designer/lib/services/uuid.service.ts","ng://@rocketshow/designer/lib/services/project.service.ts","ng://@rocketshow/designer/lib/services/fixture.service.ts","ng://@rocketshow/designer/lib/services/preview-mesh.service.ts","ng://@rocketshow/designer/lib/models/preset-region-scene.ts","ng://@rocketshow/designer/lib/services/animation.service.ts","ng://@rocketshow/designer/lib/services/config.service.ts","ng://@rocketshow/designer/lib/services/effect.service.ts","ng://@rocketshow/designer/lib/services/preset.service.ts","ng://@rocketshow/designer/lib/services/scene.service.ts","ng://@rocketshow/designer/lib/services/timeline.service.ts","ng://@rocketshow/designer/lib/services/universe.service.ts","ng://@rocketshow/designer/lib/services/preview.service.ts","ng://@rocketshow/designer/lib/preview/models/fixture-3d.ts","ng://@rocketshow/designer/lib/preview/models/color-changer-3d.ts","ng://@rocketshow/designer/lib/preview/models/moving-head-3d.ts","ng://@rocketshow/designer/lib/preview/preview.component.ts","ng://@rocketshow/designer/lib/wait-dialog/wait-dialog.component.ts","ng://@rocketshow/designer/lib/services/project-load.service.ts","ng://@rocketshow/designer/lib/warning-dialog/warning-dialog.component.ts","ng://@rocketshow/designer/lib/services/warning-dialog.service.ts","ng://@rocketshow/designer/lib/project/project-browser/project-browser.component.ts","ng://@rocketshow/designer/lib/project/project-import/project-import.component.ts","ng://@rocketshow/designer/lib/project/project-save/project-save.component.ts","ng://@rocketshow/designer/lib/project/project-share/project-share.component.ts","ng://@rocketshow/designer/lib/error-dialog/error-dialog.component.ts","ng://@rocketshow/designer/lib/services/error-dialog.service.ts","ng://@rocketshow/designer/lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component.ts","ng://@rocketshow/designer/lib/fixture-pool/fixture-pool.component.ts","ng://@rocketshow/designer/lib/services/fixture-pool.service.ts","ng://@rocketshow/designer/lib/services/hotkey-target-exclude.service.ts","ng://@rocketshow/designer/lib/services/intro.service.ts","ng://@rocketshow/designer/lib/user/user-login/user-login.component.ts","ng://@rocketshow/designer/lib/user/user-register/user-register.component.ts","ng://@rocketshow/designer/lib/services/user-ensure-login.service.ts","ng://@rocketshow/designer/lib/timeline/composition-settings/composition-settings.component.ts","ng://@rocketshow/designer/lib/timeline/timeline-grid/timeline-grid.component.ts","ng://@rocketshow/designer/lib/timeline/timeline.component.ts","ng://@rocketshow/designer/lib/designer.component.ts","ng://@rocketshow/designer/lib/array-sort-pipe.ts","ng://@rocketshow/designer/lib/effect/effect-curve/effect-curve.component.ts","ng://@rocketshow/designer/lib/effect/effect-pan-tilt/effect-pan-tilt.component.ts","ng://@rocketshow/designer/lib/effect/effect.component.ts","ng://@rocketshow/designer/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.ts","ng://@rocketshow/designer/lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component.ts","ng://@rocketshow/designer/lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component.ts","ng://@rocketshow/designer/lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component.ts","ng://@rocketshow/designer/lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component.ts","ng://@rocketshow/designer/lib/fixture/fixture-capability/fixture-capability.component.ts","ng://@rocketshow/designer/lib/fixture/fixture-channel/fixture-channel.component.ts","ng://@rocketshow/designer/lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component.ts","ng://@rocketshow/designer/lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component.ts","ng://@rocketshow/designer/lib/fixture/fixture-settings/fixture-settings.component.ts","ng://@rocketshow/designer/lib/fixture/fixture.component.ts","ng://@rocketshow/designer/lib/intro/intro.component.ts","ng://@rocketshow/designer/lib/master-dimmer/master-dimmer.component.ts","ng://@rocketshow/designer/lib/preset/preset-settings/preset-settings.component.ts","ng://@rocketshow/designer/lib/preset/preset.component.ts","ng://@rocketshow/designer/lib/scene/scene-settings/scene-settings.component.ts","ng://@rocketshow/designer/lib/scene/scene.component.ts","ng://@rocketshow/designer/lib/designer.module.ts","ng://@rocketshow/designer/public_api.ts","ng://@rocketshow/designer/rocketshow-designer.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class DesignerService {\n constructor() {}\n}\n","export enum FixtureCapabilityType {\n NoFunction = 'NoFunction',\n ShutterStrobe = 'ShutterStrobe',\n StrobeSpeed = 'StrobeSpeed',\n StrobeDuration = 'StrobeDuration',\n Intensity = 'Intensity',\n ColorIntensity = 'ColorIntensity',\n ColorPreset = 'ColorPreset',\n ColorTemperature = 'ColorTemperature',\n Pan = 'Pan',\n PanContinuous = 'PanContinuous',\n Tilt = 'Tilt',\n TiltContinuous = 'TiltContinuous',\n PanTiltSpeed = 'PanTiltSpeed',\n WheelSlot = 'WheelSlot',\n WheelShake = 'WheelShake',\n WheelSlotRotation = 'WheelSlotRotation',\n WheelRotation = 'WheelRotation',\n EffectSpeed = 'EffectSpeed',\n EffectDuration = 'EffectDuration',\n EffectParameter = 'EffectParameter',\n SoundSensitivity = 'SoundSensitivity',\n Focus = 'Focus',\n Zoom = 'Zoom',\n Iris = 'Iris',\n IrisEffect = 'IrisEffect',\n Frost = 'Frost',\n FrostEffect = 'FrostEffect',\n Prism = 'Prism',\n PrismRotation = 'PrismRotation',\n BladeInsertion = 'BladeInsertion',\n BladeRotation = 'BladeRotation',\n BladeSystemRotation = 'BladeSystemRotation',\n Fog = 'Fog',\n FogOutput = 'FogOutput',\n FogType = 'FogType',\n BeamAngle = 'BeamAngle',\n Rotation = 'Rotation',\n Speed = 'Speed',\n Time = 'Time',\n Maintenance = 'Maintenance',\n Generic = 'Generic',\n Effect = 'Effect',\n BeamPosition = 'BeamPosition',\n}\n\nexport enum FixtureCapabilityColor {\n Red = 'Red',\n Green = 'Green',\n Blue = 'Blue',\n Cyan = 'Cyan',\n Magenta = 'Magenta',\n Yellow = 'Yellow',\n Amber = 'Amber',\n White = 'White',\n 'Warm White' = 'Warm White',\n 'Cold White' = 'Cold White',\n UV = 'UV',\n Lime = 'Lime',\n Indigo = 'Indigo',\n}\n\nexport class FixtureCapability {\n type: FixtureCapabilityType;\n angleStart: string;\n angleEnd: string;\n color: FixtureCapabilityColor;\n dmxRange: number[] = [];\n // may be empty. in this case, the channel name points to the wheel\n wheel: any;\n slotNumber: number;\n brightness: string;\n brightnessStart: string;\n brightnessEnd: string;\n comment: string;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.type = FixtureCapabilityType[data.type as string];\n this.angleStart = data.angleStart;\n this.angleEnd = data.angleEnd;\n this.color = data.color;\n if (data.dmxRange) {\n this.dmxRange = data.dmxRange;\n }\n this.wheel = data.wheel;\n this.slotNumber = data.slotNumber;\n this.brightness = data.brightness;\n this.brightnessStart = data.brightnessStart;\n this.brightnessEnd = data.brightnessEnd;\n this.comment = data.comment;\n }\n}\n","import { FixtureCapability } from './fixture-capability';\n\nexport class FixtureChannel {\n fineChannelAliases: string[] = [];\n defaultValue: string | number;\n capability: FixtureCapability;\n capabilities: FixtureCapability[] = [];\n dmxValueResolution: string;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (data.fineChannelAliases) {\n this.fineChannelAliases = data.fineChannelAliases;\n }\n\n this.defaultValue = data.defaultValue;\n this.dmxValueResolution = data.dmxValueResolution;\n\n if (data.capability) {\n this.capability = new FixtureCapability(data.capability);\n } else if (data.capabilities) {\n for (const capability of data.capabilities) {\n this.capabilities.push(new FixtureCapability(capability));\n }\n }\n }\n}\n","export class FixtureMode {\n name: string;\n shortName: string;\n channels: any[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.name = data.name;\n this.shortName = data.shortName;\n\n if (data.channels) {\n this.channels = data.channels;\n }\n }\n}\n","export enum FixtureWheelSlotType {\n Open = 'Open',\n Closed = 'Closed',\n Color = 'Color',\n Gobo = 'Gobo',\n Prism = 'Prism',\n Iris = 'Iris',\n Frost = 'Frost',\n AnimationGoboStart = 'AnimationGoboStart',\n AnimationGoboEnd = 'AnimationGoboEnd',\n}\n\nexport class FixtureWheelSlot {\n type: FixtureWheelSlotType;\n name: string;\n colors: string[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.type = FixtureWheelSlotType[data.type as string];\n this.name = data.name;\n if (data.colors) {\n this.colors = data.colors;\n }\n }\n}\n","import { FixtureWheelSlot } from './fixture-wheel-slot';\n\nexport class FixtureWheel {\n slots: FixtureWheelSlot[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n if (data.slots) {\n for (const slot of data.slots) {\n this.slots.push(new FixtureWheelSlot(slot));\n }\n }\n }\n}\n","import { FixtureChannel } from './fixture-channel';\nimport { FixtureMode } from './fixture-mode';\nimport { FixtureWheel } from './fixture-wheel';\n\nexport enum FixtureCategory {\n Blinder = 'Blinder',\n 'Color Changer' = 'Color Changer',\n Dimmer = 'Dimmer',\n Effect = 'Effect',\n Fan = 'Fan',\n Flower = 'Flower',\n Hazer = 'Hazer',\n Laser = 'Laser',\n Matrix = 'Matrix',\n 'Moving Head' = 'Moving Head',\n 'Pixel Bar' = 'Pixel Bar',\n Scanner = 'Scanner',\n Smoke = 'Smoke',\n Stand = 'Stand',\n Strobe = 'Strobe',\n Other = 'Other',\n 'Barrel Scanner' = 'Barrel Scanner',\n}\n\nexport class FixtureProfile {\n uuid: string;\n name: string;\n\n // set to file, if the profile is not loaded from the backend\n source: string;\n createdFromFile = false;\n manufacturerShortName: string;\n manufacturerName: string;\n categories: FixtureCategory[] = [];\n availableChannels: any = {};\n shortName: string;\n wheels: any = {};\n\n // All available fixture modes\n modes: FixtureMode[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n // metadata\n this.uuid = data.uuid;\n this.name = data.name;\n this.manufacturerName = data.manufacturerName;\n this.manufacturerShortName = data.manufacturerShortName;\n\n if (data.categories) {\n for (const category of data.categories) {\n this.categories.push(FixtureCategory[category as string]);\n }\n } else if (data.mainCategory) {\n this.categories.push(FixtureCategory[data.mainCategory as string]);\n }\n if (data.wheels) {\n for (const property of Object.keys(data.wheels)) {\n const wheel = new FixtureWheel(data.wheels[property]);\n this.wheels[property] = wheel;\n }\n }\n if (data.modes) {\n for (const mode of data.modes) {\n this.modes.push(new FixtureMode(mode));\n }\n }\n if (data.availableChannels) {\n for (const property of Object.keys(data.availableChannels)) {\n const fixtureChannel = new FixtureChannel(data.availableChannels[property]);\n this.availableChannels[property] = fixtureChannel;\n }\n }\n if (data.createdFromFile) {\n this.createdFromFile = data.createdFromFile;\n }\n }\n}\n","import { CachedFixtureChannel } from './cached-fixture-channel';\nimport { Fixture } from './fixture';\nimport { FixtureMode } from './fixture-mode';\nimport { FixtureProfile } from './fixture-profile';\n\nexport class CachedFixture {\n fixture: Fixture;\n profile: FixtureProfile;\n mode: FixtureMode;\n channels: CachedFixtureChannel[] = [];\n}\n","import { FixtureCapability } from './fixture-capability';\nimport { FixtureWheel } from './fixture-wheel';\nimport { FixtureWheelSlot } from './fixture-wheel-slot';\n\nexport class CachedFixtureCapability {\n capability: FixtureCapability;\n\n // the wheel names, if available\n wheelName: string;\n\n // the wheel, if available\n wheel: FixtureWheel;\n\n // the wheel slots, if available\n wheelSlots: FixtureWheelSlot[] = [];\n\n // is this a color wheel?\n wheelIsColor = false;\n\n centerValue: number;\n}\n","import { CachedFixtureCapability } from './cached-fixture-capability';\nimport { FixtureChannel } from './fixture-channel';\nimport { FixtureWheel } from './fixture-wheel';\n\nexport class CachedFixtureChannel {\n // the corresponding channel\n channel: FixtureChannel;\n\n // the name of the channel\n name: string;\n\n // all channel capabilities\n capabilities: CachedFixtureCapability[] = [];\n\n // default value\n defaultValue: number;\n\n // maximum value\n maxValue: number;\n\n // a color wheel, if available\n colorWheel: FixtureWheel;\n}\n","export class Color {\n red: number;\n green: number;\n blue: number;\n\n constructor(red?: number, green?: number, blue?: number) {\n this.red = red;\n this.green = green;\n this.blue = blue;\n }\n}\n","export enum Positioning {\n topFront = 'topFront',\n topBack = 'topBack',\n bottomFront = 'bottomFront',\n bottomBack = 'bottomBack',\n manual = 'manual',\n}\n\nexport class Fixture {\n uuid: string;\n profileUuid: string;\n name: string;\n dmxUniverseUuid: string;\n dmxFirstChannel = 5;\n modeShortName: string;\n positioning: Positioning = Positioning.topFront;\n\n // Only relevant when positioning = manual\n // in CM\n positionX = 0;\n positionY = 0;\n positionZ = 0;\n\n // in DEG\n rotationX = 0;\n rotationY = 0;\n rotationZ = 0;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.profileUuid = data.profileUuid;\n this.name = data.name;\n this.dmxUniverseUuid = data.dmxUniverseUuid;\n this.dmxFirstChannel = data.dmxFirstChannel;\n this.modeShortName = data.modeShortName;\n this.positioning = data.positioning;\n this.positionX = data.positionX;\n this.positionY = data.positionY;\n this.positionZ = data.positionZ;\n this.rotationX = data.rotationX;\n this.rotationY = data.rotationY;\n this.rotationZ = data.rotationZ;\n }\n}\n","export class ScenePlaybackRegion {\n sceneUuid: string;\n startMillis: number;\n endMillis: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.sceneUuid = data.sceneUuid;\n this.startMillis = data.startMillis;\n this.endMillis = data.endMillis;\n }\n}\n","import { ScenePlaybackRegion } from './scene-playback-region';\n\nexport class Composition {\n public uuid: string;\n public name: string;\n\n // none or audio\n public syncType = 'audio';\n\n public audioFileName: string;\n public audioFileInLibrary = false;\n\n public beatsPerMinute = 120;\n public timeSignatureUpper = 4;\n public timeSignatureLower = 4;\n\n public snapToGrid = true;\n\n public tempoGuessed = false;\n\n // time based or musical\n public gridType = 'musical';\n public gridOffsetMillis = 0;\n\n // 1/1, 1/2, 1/4, 1/8, etc.\n public gridResolution = 1;\n\n // if no sync\n public durationMillis = 0;\n\n // Regions, where the scene will be played\n public scenePlaybackRegions: ScenePlaybackRegion[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.name = data.name;\n this.syncType = data.syncType;\n this.audioFileName = data.audioFileName;\n this.audioFileInLibrary = data.audioFileInLibrary;\n this.beatsPerMinute = data.beatsPerMinute;\n this.timeSignatureUpper = data.timeSignatureUpper;\n this.timeSignatureLower = data.timeSignatureLower;\n this.snapToGrid = data.snapToGrid;\n\n // never guess again (and overwrite), when a composition is loaded\n this.tempoGuessed = true;\n\n this.gridType = data.gridType;\n this.gridOffsetMillis = data.gridOffsetMillis;\n this.gridResolution = data.gridResolution;\n this.durationMillis = data.durationMillis;\n\n if (data.scenePlaybackRegions) {\n for (const scenePlaybackRegion of data.scenePlaybackRegions) {\n this.scenePlaybackRegions.push(new ScenePlaybackRegion(scenePlaybackRegion));\n }\n }\n }\n}\n","export abstract class Effect {\n type: string;\n uuid: string;\n visible = true;\n\n constructor(type: string, data?: any) {\n this.type = type;\n\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.visible = data.visible;\n }\n}\n","export class EffectCurveProfileChannels {\n profileUuid: string;\n channels: string[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.profileUuid = data.profileUuid;\n\n if (data.channels) {\n for (const channel of Object.keys(data.channels)) {\n this.channels.push(channel);\n }\n }\n }\n}\n","import { Effect } from './effect';\nimport { EffectCurveProfileChannels } from './effect-curve-profile-channel';\nimport { FixtureCapability } from './fixture-capability';\n\nexport class EffectCurve extends Effect {\n curveType = 'sine';\n\n capabilities: FixtureCapability[] = [];\n channels: EffectCurveProfileChannels[] = [];\n\n lengthMillis = 2500;\n phaseMillis = 0;\n amplitude = 1;\n position = 0.5;\n phasingMillis = 0;\n\n constructor(data?: any) {\n super('curve', data);\n\n if (!data) {\n return;\n }\n\n if (data.capabilities) {\n for (const capability of data.capabilities) {\n this.capabilities.push(new FixtureCapability(capability));\n }\n }\n\n if (data.channels) {\n for (const channel of data.channels) {\n this.channels.push(new EffectCurveProfileChannels(channel));\n }\n }\n\n this.lengthMillis = data.lengthMillis;\n this.phaseMillis = data.phaseMillis;\n this.amplitude = data.amplitude;\n this.position = data.position;\n this.phasingMillis = data.phasingMillis;\n this.curveType = data.curveType;\n }\n\n public getValueAtMillis(timeMillis: number, fixtureIndex?: number): number {\n // Calculate the offset for phasing\n let phasingIndex = 0;\n\n if (fixtureIndex) {\n phasingIndex = fixtureIndex;\n }\n\n const phase = this.phaseMillis + phasingIndex * this.phasingMillis;\n\n // Calculate the value between 0 and 1 according to the curve\n let value = 0;\n\n switch (this.curveType) {\n case 'sine':\n value = this.position + ((this.amplitude / 2) * Math.sin((2 * Math.PI * (timeMillis - phase)) / this.lengthMillis)) / 2;\n break;\n case 'square':\n if (Math.sign(Math.sin((2 * Math.PI * (timeMillis - phase)) / this.lengthMillis) / 2) === -1) {\n value = this.position + this.amplitude / 2;\n } else {\n value = this.position - this.amplitude / 2;\n }\n break;\n case 'triangle':\n // TODO check wikipedia formula\n break;\n case 'sawtooth':\n // TODO\n break;\n case 'reverse-sawtooth':\n // TODO\n break;\n }\n\n return Math.max(Math.min(value, 1), 0);\n }\n}\n","import { Effect } from './effect';\n\nexport class EffectPanTilt extends Effect {\n phasingMillis = 0;\n\n constructor(data?: any) {\n super('pan-tilt', data);\n }\n\n getValueAtMillis(timeMillis: number, fixtureIndex?: number): number {\n // Calculate the offset for phasing\n let phasingIndex = 0;\n\n if (fixtureIndex) {\n phasingIndex = fixtureIndex;\n }\n\n // let phase = this.phaseMillis + phasingIndex * this.phasingMillis;\n\n // Calculate the value according to the curve\n // TODO\n\n return 0;\n }\n}\n","import { FixtureCapabilityColor, FixtureCapabilityType } from './fixture-capability';\n\nexport class FixtureCapabilityValue {\n type: FixtureCapabilityType;\n profileUuid: string;\n\n // value between 0 and 1\n valuePercentage: number;\n\n color: FixtureCapabilityColor;\n wheel: string;\n slotNumber: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n this.type = FixtureCapabilityType[data.type as string];\n this.profileUuid = data.profileUuid;\n\n this.valuePercentage = data.valuePercentage;\n this.color = FixtureCapabilityColor[data.color as string];\n this.wheel = data.wheel;\n this.slotNumber = data.slotNumber;\n }\n}\n","export class FixtureChannelValue {\n channelName: string;\n profileUuid: string;\n value: number;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n this.channelName = data.channelName;\n this.profileUuid = data.profileUuid;\n this.value = data.value;\n }\n}\n","import { Effect } from './effect';\nimport { EffectCurve } from './effect-curve';\nimport { EffectPanTilt } from './effect-pan-tilt';\nimport { FixtureCapabilityValue } from './fixture-capability-value';\nimport { FixtureChannelValue } from './fixture-channel-value';\n\nexport class Preset {\n uuid: string;\n name: string;\n\n // all related fixtures\n fixtureUuids: string[] = [];\n\n // the selected values\n fixtureChannelValues: FixtureChannelValue[] = [];\n fixtureCapabilityValues: FixtureCapabilityValue[] = [];\n\n // all related effects\n effects: Effect[] = [];\n\n // position offset, relative to the scene start\n // (undefined = start/end of the scene itself)\n startMillis: number;\n endMillis: number;\n\n // fading times\n fadeInMillis = 0;\n fadeOutMillis = 0;\n\n // fade in/out outside the start/end times?\n fadeInPre = false;\n fadeOutPost = false;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.name = data.name;\n this.fixtureUuids = data.fixtureUuids;\n if (data.fixtureChannelValues) {\n for (const fixtureChannelValue of data.fixtureChannelValues) {\n this.fixtureChannelValues.push(new FixtureChannelValue(fixtureChannelValue));\n }\n }\n if (data.fixtureCapabilityValues) {\n for (const fixtureCapabilityValue of data.fixtureCapabilityValues) {\n this.fixtureCapabilityValues.push(new FixtureCapabilityValue(fixtureCapabilityValue));\n }\n }\n if (data.effects) {\n for (const effect of data.effects) {\n switch (effect.type) {\n case 'curve':\n this.effects.push(new EffectCurve(effect));\n break;\n case 'pan-tilt':\n this.effects.push(new EffectPanTilt(effect));\n break;\n }\n }\n }\n this.startMillis = data.startMillis;\n this.endMillis = data.endMillis;\n this.fadeInMillis = data.fadeInMillis;\n this.fadeOutMillis = data.fadeOutMillis;\n this.fadeInPre = data.fadeInPre;\n this.fadeOutPost = data.fadeOutPost;\n }\n}\n","import { ScenePlaybackRegion } from './scene-playback-region';\n\nexport class Scene {\n uuid: string;\n name: string;\n\n color = '#fff';\n\n // All contained presets\n presetUuids: string[] = [];\n\n // Fading times\n fadeInMillis = 0;\n fadeOutMillis = 0;\n\n // fade in/out outside the start/end times?\n fadeInPre = false;\n fadeOutPost = false;\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.uuid = data.uuid;\n this.name = data.name;\n this.color = data.color;\n if (data.presetUuids) {\n this.presetUuids = data.presetUuids;\n }\n this.fadeInMillis = data.fadeInMillis;\n this.fadeOutMillis = data.fadeOutMillis;\n this.fadeInPre = data.fadeInPre;\n this.fadeOutPost = data.fadeOutPost;\n }\n}\n","import { Composition } from './composition';\nimport { Fixture } from './fixture';\nimport { FixtureProfile } from './fixture-profile';\nimport { Preset } from './preset';\nimport { Scene } from './scene';\n\nexport class Project {\n public id: number;\n public uuid: string;\n public name: string;\n public shareToken: string;\n\n public stageWidthCm = 600;\n public stageHeightCm = 350;\n public stageDepthCm = 600;\n\n public stageFloorHeightCm = 30;\n public stageCeilingHeightCm = 5;\n public stagePillarWidthCm = 20;\n\n public masterDimmerValue = 1;\n\n public selectedPresetUuid: string;\n public selectedSceneUuids: string[] = [];\n\n // true = show the preset, false = show the selected scene\n public previewPreset = true;\n\n public selectedCompositionUuid: string;\n\n public compositions: Composition[] = [];\n public fixtureProfiles: FixtureProfile[] = [];\n public fixtures: Fixture[] = [];\n public scenes: Scene[] = [];\n public presets: Preset[] = [];\n\n constructor(data?: any) {\n if (!data) {\n return;\n }\n\n this.id = data.id;\n this.uuid = data.uuid;\n this.name = data.name;\n this.shareToken = data.shareToken;\n\n this.stageWidthCm = data.stageWidthCm;\n this.stageHeightCm = data.stageHeightCm;\n this.stageDepthCm = data.stageDepthCm;\n\n this.stageFloorHeightCm = data.stageFloorHeightCm;\n this.stageCeilingHeightCm = data.stageCeilingHeightCm;\n this.stagePillarWidthCm = data.stagePillarWidthCm;\n\n this.masterDimmerValue = data.masterDimmerValue;\n\n this.selectedPresetUuid = data.selectedPresetUuid;\n this.selectedSceneUuids = data.selectedSceneUuids;\n this.previewPreset = data.previewPreset;\n this.selectedCompositionUuid = data.selectedCompositionUuid;\n\n if (data.compositions) {\n for (const composition of data.compositions) {\n this.compositions.push(new Composition(composition));\n }\n }\n\n if (data.fixtureProfiles) {\n for (const fixtureProfile of data.fixtureProfiles) {\n this.fixtureProfiles.push(new FixtureProfile(fixtureProfile));\n }\n }\n\n if (data.fixtures) {\n for (const fixture of data.fixtures) {\n this.fixtures.push(new Fixture(fixture));\n }\n }\n\n if (data.scenes) {\n for (const scene of data.scenes) {\n this.scenes.push(new Scene(scene));\n }\n }\n\n if (data.presets) {\n for (const preset of data.presets) {\n this.presets.push(new Preset(preset));\n }\n }\n }\n}\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../models/project';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserService {\n // the authentication token\n token: string;\n tokenExpiration: Date;\n username: string;\n\n constructor(private http: HttpClient) {\n this.loadFromLocalStorage();\n }\n\n private loadFromLocalStorage() {\n this.token = localStorage.getItem('token');\n this.tokenExpiration = undefined;\n if (localStorage.getItem('tokenExpiration')) {\n this.tokenExpiration = new Date(Date.parse(localStorage.getItem('tokenExpiration')));\n }\n this.username = localStorage.getItem('username');\n }\n\n // register a new user\n register(email: string, username: string, password: string): Observable<any> {\n return this.http.post('register?email=' + email + '&username=' + username + '&password=' + password, null);\n }\n\n // login a user in the api\n login(email: string, password: string): Observable<any> {\n return this.http.post('login?email=' + email + '&password=' + password, null).pipe(\n map((result: any) => {\n this.token = result.token;\n this.username = result.username;\n\n // the token expires one month from now\n this.tokenExpiration = new Date();\n this.tokenExpiration.setDate(this.tokenExpiration.getDate() + 30);\n\n // store to the local storage\n localStorage.setItem('token', this.token);\n localStorage.setItem('tokenExpiration', JSON.stringify(this.tokenExpiration));\n localStorage.setItem('username', this.username);\n\n this.loadFromLocalStorage();\n })\n );\n }\n\n logout() {\n localStorage.removeItem('token');\n localStorage.removeItem('tokenExpiration');\n localStorage.removeItem('username');\n\n this.loadFromLocalStorage();\n }\n\n isLoggedIn(): boolean {\n if (!this.token) {\n return false;\n }\n\n if (new Date() > this.tokenExpiration) {\n this.logout();\n return false;\n }\n\n return true;\n }\n\n getHeaders(): HttpHeaders {\n if (!this.isLoggedIn()) {\n return null;\n }\n\n let headers = new HttpHeaders();\n headers = headers.append('Authorization', this.token);\n return headers;\n }\n\n setAutoLoadProject(project: Project) {\n localStorage.setItem('projectName', project.name);\n if (project.id) {\n localStorage.setItem('projectId', project.id.toString());\n } else {\n localStorage.removeItem('projectId');\n }\n }\n\n getAutoLoadProjectId(): number {\n if (!localStorage.getItem('projectId')) {\n return null;\n }\n return Number.parseInt(localStorage.getItem('projectId'));\n }\n\n getAutoLoadProjectName(): string {\n return localStorage.getItem('projectName');\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UuidService {\n constructor() {}\n\n getUuid(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n // tslint:disable-next-line:no-bitwise\n const r = (Math.random() * 16) | 0;\n\n // tslint:disable-next-line:no-bitwise\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n\n return v.toString(16);\n });\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../models/project';\nimport { UserService } from './user.service';\nimport { UuidService } from './uuid.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectService {\n // the current project\n public project: Project;\n\n constructor(\n private uuidService: UuidService,\n private http: HttpClient,\n private userService: UserService,\n private router: Router,\n private activatedRoute: ActivatedRoute,\n private translateService: TranslateService,\n private toastrService: ToastrService\n ) {\n this.project = new Project();\n this.project.uuid = this.uuidService.getUuid();\n this.project.name = 'New Project';\n }\n\n private saveApi(project: Project): Observable<object> {\n return this.http.post('project', JSON.stringify(project), { headers: this.userService.getHeaders() }).pipe(\n map((response: any) => {\n if (response) {\n project.id = response.id;\n if (response.shareToken) {\n project.shareToken = response.shareToken;\n }\n const queryParams: Params = {\n id: project.id,\n token: project.shareToken,\n };\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }\n return null;\n })\n );\n }\n\n save(project: Project) {\n // tries to save the project and returns, whether it has been saved or not\n this.saveApi(project).subscribe(\n () => {\n const msg = 'designer.project.save-success';\n const title = 'designer.project.save-success-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.success(result[msg], result[title]);\n });\n\n this.userService.setAutoLoadProject(project);\n },\n (response) => {\n const msg = 'designer.project.save-error';\n const title = 'designer.project.save-error-title';\n const error = response && response.error ? response.error.error : 'unknown';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + ' (' + error + ')', result[title]);\n });\n }\n );\n }\n\n getAllProjects(): Observable<Project[]> {\n return this.http.get('projects', { headers: this.userService.getHeaders() }).pipe(\n map((response: any) => {\n const projects: Project[] = [];\n for (const project of response) {\n const projectObject = new Project(project);\n projects.push(projectObject);\n }\n return projects;\n })\n );\n }\n\n deleteProject(project: Project): Observable<any> {\n return this.http.delete('project?id=' + project.id + '&name=' + project.name, { headers: this.userService.getHeaders() });\n }\n\n getProject(id: number, name: string, shareToken?: string): Observable<Project> {\n return this.http.get('project?id=' + id + '&name=' + name + '&token=' + shareToken, { headers: this.userService.getHeaders() }).pipe(\n map((response: any) => {\n const project = new Project(response);\n project.id = id;\n\n return project;\n })\n );\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ToastrService } from 'ngx-toastr';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CachedFixture } from '../models/cached-fixture';\nimport { CachedFixtureCapability } from '../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../models/cached-fixture-channel';\nimport { Color } from '../models/color';\nimport { Fixture } from '../models/fixture';\nimport { FixtureCapability, FixtureCapabilityColor, FixtureCapabilityType } from '../models/fixture-capability';\nimport { FixtureChannel } from '../models/fixture-channel';\nimport { FixtureMode } from '../models/fixture-mode';\nimport { FixtureProfile } from '../models/fixture-profile';\nimport { FixtureWheel } from '../models/fixture-wheel';\nimport { FixtureWheelSlot, FixtureWheelSlotType } from '../models/fixture-wheel-slot';\nimport { ProjectService } from './project.service';\nimport { UuidService } from './uuid.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FixtureService {\n cachedFixtures: CachedFixture[] = [];\n\n // is the side-tab settings currently selected?\n settingsSelection = false;\n\n selectedSettingsFixtures: Fixture[] = [];\n\n constructor(\n private http: HttpClient,\n private projectService: ProjectService,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private uuidService: UuidService\n ) {}\n\n getFixtureByUuid(uuid: string): Fixture {\n for (const fixture of this.projectService.project.fixtures) {\n if (fixture.uuid === uuid) {\n return fixture;\n }\n }\n }\n\n getCachedFixtureByUuid(uuid: string): CachedFixture {\n for (const fixture of this.cachedFixtures) {\n if (fixture.fixture.uuid === uuid) {\n return fixture;\n }\n }\n }\n\n // Get all profiles to search for (only metadata)\n getSearchProfiles(): Observable<FixtureProfile[]> {\n return this.http.get('fixtures').pipe(\n map((response: object[]) => {\n const searchProfiles: FixtureProfile[] = [];\n\n for (const profile of response) {\n searchProfiles.push(new FixtureProfile(profile));\n }\n\n return searchProfiles;\n })\n );\n }\n\n getProfileByUuid(uuid: string): FixtureProfile {\n for (const fixtureProfile of this.projectService.project.fixtureProfiles) {\n if (fixtureProfile.uuid === uuid) {\n return fixtureProfile;\n }\n }\n }\n\n loadProfileByUuid(uuid: string): Observable<void> {\n const loadedProfile = this.getProfileByUuid(uuid);\n\n if (loadedProfile) {\n // This profile is already loaded\n return of(undefined);\n }\n\n // Load the metadata and the profile\n return forkJoin([this.http.get('fixtures?uuid=' + encodeURI(uuid)), this.http.get('fixture?uuid=' + encodeURI(uuid))]).pipe(\n map((result) => {\n const mergedData = { ...result[0][0], ...result[1] };\n const fixtureProfile = new FixtureProfile(mergedData);\n this.projectService.project.fixtureProfiles.push(fixtureProfile);\n })\n );\n }\n\n getRotationAngleDeg(value: string): number {\n // convert a rotation angle value into degrees\n if (value.endsWith('deg')) {\n return Number.parseInt(value.replace('deg', ''));\n } else if (value.endsWith('%')) {\n const perc = Number.parseInt(value.replace('%', ''));\n return (perc / 100) * 360;\n }\n\n return undefined;\n }\n\n getWheelSlotColors(wheel: FixtureWheel, slotNumber: number): string[] {\n let colors: string[] = [];\n const wheelSlots = this.getWheelSlots(wheel, slotNumber);\n\n for (const slot of wheelSlots) {\n if (slot.colors && slot.colors.length > 0) {\n colors = colors.concat(slot.colors);\n }\n }\n\n return colors;\n }\n\n getMixedWheelSlotColor(wheel: FixtureWheel, slotNumber: number): Color {\n const colors = this.getWheelSlotColors(wheel, slotNumber);\n const colorsRgb: Color[] = [];\n\n if (colors.length === 0) {\n return undefined;\n }\n\n for (const color of colors) {\n colorsRgb.push(this.hexToRgb(color));\n }\n\n return this.mixColors(colorsRgb);\n }\n\n private componentToHex(c: number): any {\n const hex = c.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n }\n\n rgbToHex(r: number, g: number, b: number): string {\n return '#' + this.componentToHex(r) + this.componentToHex(g) + this.componentToHex(b);\n }\n\n hexToRgb(hex: string): Color {\n // expand shorthand form (e.g. \"03F\") to full form (e.g. \"0033FF\")\n const shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n hex = hex.replace(shorthandRegex, (m, r, g, b) => {\n return r + r + g + g + b + b;\n });\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? new Color(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) : null;\n }\n\n mixColors(colors: Color[]): Color {\n // mix an array of rgb-colors containing r, g, b values to a new color\n let r = 0;\n let g = 0;\n let b = 0;\n\n for (const color of colors) {\n r += color.red;\n g += color.green;\n b += color.blue;\n }\n\n r /= colors.length;\n g /= colors.length;\n b /= colors.length;\n\n return new Color(r, g, b);\n }\n\n wheelHasSlotType(wheel: FixtureWheel, slotType: FixtureWheelSlotType): boolean {\n for (const slot of wheel.slots) {\n if (slot.type === slotType) {\n return true;\n }\n }\n\n return false;\n }\n\n getWheelByName(profile: FixtureProfile, wheelName: string): FixtureWheel {\n for (const property in profile.wheels) {\n if (property === wheelName) {\n return profile.wheels[property];\n }\n }\n\n // wheel not found\n return undefined;\n }\n\n private getWheelSlots(wheel: FixtureWheel, slotNumber: number): FixtureWheelSlot[] {\n // return one slot or two slots, if they are mixed (e.g. slor number 2.5 returns the slots 2 and 3)\n const slots: FixtureWheelSlot[] = [];\n\n if (!wheel) {\n return slots;\n }\n\n if (slotNumber - Math.floor(slotNumber) > 0) {\n // two slots are set\n const number = Math.floor(slotNumber);\n slots.push(wheel.slots[number - 1]);\n if (number >= 0 && number < wheel.slots.length) {\n slots.push(wheel.slots[number]);\n }\n } else {\n // only one slot is set\n slots.push(wheel.slots[slotNumber - 1]);\n }\n\n return slots;\n }\n\n getModeByFixture(profile: FixtureProfile, fixture: Fixture): FixtureMode {\n for (const mode of profile.modes) {\n if (mode.shortName) {\n if (mode.shortName === fixture.modeShortName) {\n return mode;\n }\n } else {\n if (mode.name === fixture.modeShortName) {\n return mode;\n }\n }\n }\n }\n\n private getFixtureCapability(capability: FixtureCapability, channelName: string, profile: FixtureProfile): CachedFixtureCapability {\n const cachedFixtureCapability = new CachedFixtureCapability();\n cachedFixtureCapability.capability = capability;\n if (capability.slotNumber) {\n // there is a wheel connected to this capability\n if (typeof capability.wheel === 'string') {\n cachedFixtureCapability.wheelName = capability.wheel as string;\n } else if (Array.isArray(capability.wheel)) {\n cachedFixtureCapability.wheelName = capability.wheel[0];\n } else {\n cachedFixtureCapability.wheelName = channelName;\n }\n cachedFixtureCapability.wheel = this.getWheelByName(profile, cachedFixtureCapability.wheelName);\n cachedFixtureCapability.wheelSlots = this.getWheelSlots(cachedFixtureCapability.wheel, capability.slotNumber);\n cachedFixtureCapability.wheelIsColor = this.wheelHasSlotType(cachedFixtureCapability.wheel, FixtureWheelSlotType.Color);\n }\n if (cachedFixtureCapability.capability.dmxRange && cachedFixtureCapability.capability.dmxRange.length === 2) {\n cachedFixtureCapability.centerValue = Math.floor(\n (cachedFixtureCapability.capability.dmxRange[0] + cachedFixtureCapability.capability.dmxRange[1]) / 2\n );\n }\n return cachedFixtureCapability;\n }\n\n private getCapabilitiesByChannel(\n fixtureChannel: FixtureChannel,\n channelName: string,\n profile: FixtureProfile\n ): CachedFixtureCapability[] {\n const capabilites: CachedFixtureCapability[] = [];\n\n if (fixtureChannel.capability) {\n capabilites.push(this.getFixtureCapability(fixtureChannel.capability, channelName, profile));\n } else if (fixtureChannel.capabilities) {\n for (const capability of fixtureChannel.capabilities) {\n capabilites.push(this.getFixtureCapability(capability, channelName, profile));\n }\n }\n\n return capabilites;\n }\n\n private getMaxValueByChannel(fixtureChannel: FixtureChannel): number {\n return Math.pow(256, 1 + fixtureChannel.fineChannelAliases.length) - 1;\n }\n\n private getDefaultValueByChannel(fixtureChannel: FixtureChannel): number {\n if (!fixtureChannel.defaultValue) {\n return undefined;\n }\n\n if (isNaN(fixtureChannel.defaultValue as any) && (fixtureChannel.defaultValue as string).endsWith('%')) {\n // percentage value\n const percentage = Number.parseInt((fixtureChannel.defaultValue as string).replace('%', ''));\n const maxValue = this.getMaxValueByChannel(fixtureChannel);\n return (maxValue / 100) * percentage;\n } else {\n // DMX value\n return Number.parseInt(fixtureChannel.defaultValue as any);\n }\n }\n\n private getColorWheelByChannel(channel: CachedFixtureChannel, profile: FixtureProfile): FixtureWheel {\n for (const channelCapability of channel.capabilities) {\n if (channelCapability.wheelIsColor) {\n return channelCapability.wheel;\n }\n }\n\n return undefined;\n }\n\n // private channelInList(channels: CachedFixtureChannel[], name: string): boolean {\n // for (let channel of channels) {\n // if (channel.channelName === name) {\n // return true;\n // }\n // }\n\n // return false;\n // }\n\n getChannelByName(fixture: CachedFixture, channelName: string): CachedFixtureChannel {\n for (const channel of fixture.channels) {\n if (\n (channel.name && channel.name === channelName) ||\n (channel.channel && channel.channel.fineChannelAliases.indexOf(channelName) > -1)\n ) {\n return channel;\n }\n }\n\n return undefined;\n }\n\n getCachedChannels(profile: FixtureProfile, mode: FixtureMode): CachedFixtureChannel[] {\n const channels: CachedFixtureChannel[] = [];\n\n if (!mode) {\n return channels;\n }\n\n for (const availableChannelName of Object.keys(profile.availableChannels)) {\n const availableChannel: FixtureChannel = profile.availableChannels[availableChannelName];\n\n for (const channel of mode.channels) {\n // check for string channel. It can get creepy for matrix modes\n if (typeof channel === 'string') {\n const modeChannel: string = channel as string;\n\n // don't check the fine channels. only add the coarse channel.\n if (modeChannel === availableChannelName) {\n const cachedFixtureChannel = new CachedFixtureChannel();\n cachedFixtureChannel.channel = availableChannel;\n cachedFixtureChannel.name = availableChannelName;\n cachedFixtureChannel.capabilities = this.getCapabilitiesByChannel(cachedFixtureChannel.channel, availableChannelName, profile);\n const defaultValue = this.getDefaultValueByChannel(cachedFixtureChannel.channel);\n if (defaultValue) {\n cachedFixtureChannel.defaultValue = defaultValue;\n }\n cachedFixtureChannel.maxValue = this.getMaxValueByChannel(cachedFixtureChannel.channel);\n cachedFixtureChannel.colorWheel = this.getColorWheelByChannel(cachedFixtureChannel, profile);\n channels.push(cachedFixtureChannel);\n }\n } else {\n // null may be passed as a placeholder for an undefined channel\n channels.push(new CachedFixtureChannel());\n }\n }\n }\n\n return channels;\n }\n\n updateCachedFixtures() {\n // calculate some frequently used values as a cache to save cpu time\n // afterwards\n this.cachedFixtures = [];\n\n for (const fixture of this.projectService.project.fixtures) {\n const cachedFixture = new CachedFixture();\n\n cachedFixture.fixture = fixture;\n cachedFixture.profile = this.getProfileByUuid(fixture.profileUuid);\n cachedFixture.mode = this.getModeByFixture(cachedFixture.profile, fixture);\n cachedFixture.channels = this.getCachedChannels(cachedFixture.profile, cachedFixture.mode);\n\n this.cachedFixtures.push(cachedFixture);\n }\n }\n\n capabilitiesMatch(\n type1: FixtureCapabilityType,\n type2: FixtureCapabilityType,\n color1: FixtureCapabilityColor,\n color2: FixtureCapabilityColor,\n wheel1: string,\n wheel2: string,\n profileUuid1: string,\n profileUuid2: string\n ): boolean {\n // checks, whether two provided capapabilities match\n return (\n type1 === type2 &&\n (!color1 || color1 === color2) &&\n (!wheel1 || wheel1 === wheel2) &&\n (!profileUuid1 || profileUuid1 === profileUuid2)\n );\n }\n\n settingsFixtureIsSelected(fixture: Fixture): boolean {\n for (const selectedFixture of this.selectedSettingsFixtures) {\n if (selectedFixture === fixture) {\n return true;\n }\n }\n\n return false;\n }\n\n switchSettingsFixtureSelection(fixture: Fixture) {\n if (this.settingsFixtureIsSelected(fixture)) {\n this.selectedSettingsFixtures.splice(this.selectedSettingsFixtures.indexOf(fixture), 1);\n } else {\n this.selectedSettingsFixtures.push(fixture);\n }\n }\n\n getFixtureIconClass(profile: FixtureProfile): string {\n if (!profile) {\n return '';\n }\n if (profile.categories.length === 0) {\n return '';\n }\n if (!profile.categories[0]) {\n return '';\n }\n return profile.categories[0].replace(' ', '-').toLocaleLowerCase();\n }\n\n updateProfiles() {\n return this.http.post('update-profiles', null);\n }\n\n getNextFreeDmxChannel(fixturePool: Fixture[], neededChannels: number): number {\n // get the next free space for this fixture\n let freeChannels = 0;\n\n for (let i = 0; i < 512; i++) {\n let occupiedChannels = 0;\n\n for (const fixture of fixturePool) {\n const mode = this.getModeByFixture(this.getProfileByUuid(fixture.profileUuid), fixture);\n\n if (i >= fixture.dmxFirstChannel && i < fixture.dmxFirstChannel + mode.channels.length) {\n // this channel is already occupied by a fixture -> move forward to the end of the fixture\n if (mode.channels.length > occupiedChannels) {\n occupiedChannels = mode.channels.length - (i - fixture.dmxFirstChannel);\n }\n }\n }\n\n if (occupiedChannels > 0) {\n i += occupiedChannels - 1;\n freeChannels = 0;\n } else {\n freeChannels++;\n }\n\n if (freeChannels === neededChannels) {\n return i - freeChannels + 1;\n }\n }\n\n // no free space left for the needed channels\n return -1;\n }\n\n addFixture(profile: FixtureProfile, fixturePool: Fixture[]): Fixture {\n const fixture = new Fixture();\n\n fixture.uuid = this.uuidService.getUuid();\n fixture.profileUuid = profile.uuid;\n fixture.name = profile.name;\n\n if (profile.modes && profile.modes.length > 0) {\n fixture.modeShortName = profile.modes[0].shortName;\n }\n\n // add the same mode as an existing fixture, if available\n let existingModeShortName: string;\n for (const existingFixture of fixturePool) {\n const existingProfile = this.getProfileByUuid(existingFixture.profileUuid);\n\n if (existingProfile === profile) {\n existingModeShortName = existingFixture.modeShortName;\n break;\n }\n }\n\n if (existingModeShortName) {\n fixture.modeShortName = existingModeShortName;\n } else {\n fixture.modeShortName = profile.modes[0].shortName || profile.modes[0].name;\n }\n\n const mode = this.getModeByFixture(this.getProfileByUuid(fixture.profileUuid), fixture);\n const firstChannel = this.getNextFreeDmxChannel(fixturePool, mode.channels.length);\n\n if (firstChannel >= 0) {\n fixture.dmxFirstChannel = firstChannel;\n fixturePool.push(fixture);\n return fixture;\n } else {\n // no free space anymore\n const msg = 'designer.fixture-pool.no-free-space';\n const title = 'designer.fixture-pool.no-free-space-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title]);\n });\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport * as THREE from 'three';\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PreviewMeshService {\n private loader = new GLTFLoader();\n private cachedMeshes = new Map<string, THREE.Mesh>();\n\n // the observable, if the requested mesh is already being loaded currently\n private cachedObservables = new Map<string, Observable<THREE.Mesh>>();\n\n constructor() {}\n\n private loadScene(name: string): Observable<THREE.Scene> {\n return new Observable((observer) => {\n this.loader.load(\n './assets/designer/models/' + name + '.gltf',\n\n // Called when the resource is loaded\n (gltf: any) => {\n const model = gltf.scene.children[0];\n\n model.position.set(0, 0, 0);\n\n observer.next(gltf.scene);\n observer.complete();\n },\n\n // Called while loading is progressing\n (xhr: any) => {},\n\n // Called when loading has errors\n (error: any) => {\n observer.error(error);\n }\n );\n });\n }\n\n private loadMesh(name: string): Observable<THREE.Mesh> {\n const observable = this.loadScene(name).pipe(\n map((scene: any) => {\n const model = scene.children[0];\n\n model.position.set(0, 0, 0);\n\n this.cachedMeshes.set(name, model);\n this.cachedObservables.delete(name);\n\n return model.clone();\n })\n );\n\n this.cachedObservables.set(name, observable);\n\n return observable;\n }\n\n getMesh(name: string): Observable<THREE.Mesh> {\n if (this.cachedMeshes.get(name)) {\n return of(this.cachedMeshes.get(name).clone());\n }\n\n return this.cachedObservables.get(name) || this.loadMesh(name);\n }\n}\n","import { Preset } from './preset';\nimport { Scene } from './scene';\nimport { ScenePlaybackRegion } from './scene-playback-region';\n\nexport class PresetRegionScene {\n preset: Preset;\n region: ScenePlaybackRegion;\n scene: Scene;\n\n constructor(preset: Preset, region: ScenePlaybackRegion, scene: Scene) {\n this.preset = preset;\n this.region = region;\n this.scene = scene;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AnimationService {\n timeMillis = 0;\n\n constructor() {}\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ConfigService {\n public restUrl: string;\n public enableMediaLibrary = false;\n public loginAvailable = false;\n public shareAvailable = false;\n public menuHeightPx = 0;\n public languageSwitch = false;\n public newProjectTemplate = false;\n public livePreview = false;\n public localProfiles = false;\n public intro = false;\n public uniqueProjectNames = false;\n\n public menuHeightChanged: Subject<void> = new Subject<void>();\n\n constructor() {}\n}\n","import { Injectable } from '@angular/core';\nimport { Effect } from './../models/effect';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class EffectService {\n // The currently selected effect\n selectedEffect: Effect;\n\n constructor() {}\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CachedFixtureCapability } from '../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../models/cached-fixture-channel';\nimport { Fixture } from '../models/fixture';\nimport { FixtureCapabilityColor, FixtureCapabilityType } from '../models/fixture-capability';\nimport { FixtureCapabilityValue } from '../models/fixture-capability-value';\nimport { FixtureChannelValue } from '../models/fixture-channel-value';\nimport { FixtureMode } from '../models/fixture-mode';\nimport { FixtureProfile } from '../models/fixture-profile';\nimport { Preset } from '../models/preset';\nimport { AnimationService } from './animation.service';\nimport { ConfigService } from './config.service';\nimport { EffectService } from './effect.service';\nimport { FixtureService } from './fixture.service';\nimport { ProjectService } from './project.service';\nimport { UuidService } from './uuid.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PresetService {\n selectedPreset: Preset;\n\n // fires, when the current preview element has changed (scene/preset)\n previewSelectionChanged: Subject<void> = new Subject<void>();\n\n // fires, when the fixture selection has changed\n fixtureSelectionChanged: Subject<void> = new Subject<void>();\n\n // fires, when the fixture selection has changed for settings\n fixtureSelectionSettingsChanged: Subject<void> = new Subject<void>();\n\n // fires, when the selected color has changed. This is required,\n // because detectChanges is not enough to trigger different components.\n fixtureColorChanged: Subject<void> = new Subject<void>();\n\n livePreviewTimer: any;\n liveChangePending = false;\n\n constructor(\n private effectService: EffectService,\n private uuidService: UuidService,\n private projectService: ProjectService,\n private fixtureService: FixtureService,\n private configService: ConfigService,\n private http: HttpClient,\n private animationService: AnimationService\n ) {}\n\n getPresetByUuid(uuid: string): Preset {\n for (const preset of this.projectService.project.presets) {\n if (preset.uuid === uuid) {\n return preset;\n }\n }\n }\n\n fixtureIsSelected(fixture: Fixture, preset?: Preset): boolean {\n // is the passed fixture selected in the passed/currently selected preset?\n if (!preset) {\n if (this.selectedPreset) {\n preset = this.selectedPreset;\n } else {\n return false;\n }\n }\n\n for (const selectedFixtureUuid of preset.fixtureUuids) {\n if (selectedFixtureUuid === fixture.uuid) {\n return true;\n }\n }\n\n return false;\n }\n\n switchFixtureSelection(fixture: Fixture) {\n if (!this.selectedPreset) {\n return;\n }\n\n // select all fixtures at the specified start channel or unselect them,\n // if already selected\n if (this.fixtureIsSelected(fixture)) {\n for (let i = this.selectedPreset.fixtureUuids.length - 1; i >= 0; i--) {\n const projectFixture = this.fixtureService.getFixtureByUuid(this.selectedPreset.fixtureUuids[i]);\n if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel) {\n this.selectedPreset.fixtureUuids.splice(i, 1);\n }\n }\n } else {\n for (const projectFixture of this.projectService.project.fixtures) {\n if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel) {\n this.selectedPreset.fixtureUuids.push(projectFixture.uuid);\n }\n }\n }\n }\n\n selectAllFixtures() {\n if (!this.selectedPreset) {\n return;\n }\n\n for (const fixture of this.projectService.project.fixtures) {\n if (!this.fixtureIsSelected(fixture)) {\n this.selectedPreset.fixtureUuids.push(fixture.uuid);\n }\n }\n }\n\n selectNoFixtures() {\n if (!this.selectedPreset) {\n return;\n }\n\n this.selectedPreset.fixtureUuids = [];\n }\n\n public removeDeletedFixtures() {\n // after changing the configuration in the fixture pool, we might need to\n // delete some fixtures\n for (const preset of this.projectService.project.presets) {\n for (let i = preset.fixtureUuids.length - 1; i >= 0; i--) {\n const presetFixture = this.fixtureService.getFixtureByUuid(preset.fixtureUuids[i]);\n if (!presetFixture) {\n preset.fixtureUuids.splice(i, 1);\n }\n }\n }\n }\n\n public updateFixtureSelection() {\n // after changing the configuration in the fixture pool, we might need to\n // select some more fixtures on the same channel as already selected ones\n for (const preset of this.projectService.project.presets) {\n for (let i = preset.fixtureUuids.length - 1; i >= 0; i--) {\n const presetFixture = this.fixtureService.getFixtureByUuid(preset.fixtureUuids[i]);\n for (const projectFixture of this.projectService.project.fixtures) {\n if (projectFixture.dmxFirstChannel === presetFixture.dmxFirstChannel && !this.fixtureIsSelected(projectFixture, preset)) {\n preset.fixtureUuids.push(projectFixture.uuid);\n }\n }\n }\n }\n }\n\n deleteCapabilityValue(\n preset: Preset,\n capabilityType: FixtureCapabilityType,\n color?: FixtureCapabilityColor,\n wheel?: string,\n profileUuid?: string\n ) {\n for (let i = 0; i < preset.fixtureCapabilityValues.length; i++) {\n if (\n this.fixtureService.capabilitiesMatch(\n preset.fixtureCapabilityValues[i].type,\n capabilityType,\n preset.fixtureCapabilityValues[i].color,\n color,\n preset.fixtureCapabilityValues[i].wheel,\n wheel,\n preset.fixtureCapabilityValues[i].profileUuid,\n profileUuid\n )\n ) {\n preset.fixtureCapabilityValues.splice(i, 1);\n return;\n }\n }\n }\n\n setCapabilityValue(\n preset: Preset,\n capabilityType: FixtureCapabilityType,\n valuePercentage: number,\n slotNumber?: number,\n color?: FixtureCapabilityColor,\n wheel?: string,\n profileUuid?: string\n ) {\n // Delete existant properties with this type and set the new value\n this.deleteCapabilityValue(preset, capabilityType, color, wheel, profileUuid);\n\n const fixtureCapabilityValue = new FixtureCapabilityValue();\n fixtureCapabilityValue.type = capabilityType;\n fixtureCapabilityValue.color = color;\n fixtureCapabilityValue.wheel = wheel;\n fixtureCapabilityValue.valuePercentage = valuePercentage;\n fixtureCapabilityValue.slotNumber = slotNumber;\n fixtureCapabilityValue.profileUuid = profileUuid;\n\n preset.fixtureCapabilityValues.push(fixtureCapabilityValue);\n }\n\n getCapabilityValue(\n preset: Preset,\n capabilityType: FixtureCapabilityType,\n color?: FixtureCapabilityColor,\n wheel?: string,\n profileUuid?: string\n ): FixtureCapabilityValue {\n for (const capabilityValue of preset.fixtureCapabilityValues) {\n if (\n this.fixtureService.capabilitiesMatch(\n capabilityValue.type,\n capabilityType,\n capabilityValue.color,\n color,\n capabilityValue.wheel,\n wheel,\n capabilityValue.profileUuid,\n profileUuid\n )\n ) {\n return capabilityValue;\n }\n }\n return undefined;\n }\n\n deleteChannelValue(channelName: string, profileUuid: string) {\n for (let i = 0; i < this.selectedPreset.fixtureChannelValues.length; i++) {\n if (\n this.selectedPreset.fixtureChannelValues[i].channelName === channelName &&\n this.selectedPreset.fixtureChannelValues[i].profileUuid === profileUuid\n ) {\n this.selectedPreset.fixtureChannelValues.splice(i, 1);\n return;\n }\n }\n }\n\n setChannelValue(channelName: string, profileUuid: string, value: number) {\n // Delete existant properties with this type and set the new value\n this.deleteChannelValue(channelName, profileUuid);\n\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = channelName;\n fixtureChannelValue.profileUuid = profileUuid;\n fixtureChannelValue.value = value;\n\n this.selectedPreset.fixtureChannelValues.push(fixtureChannelValue);\n }\n\n getChannelValue(channelName: string, profileUuid: string): number {\n for (const channelValue of this.selectedPreset.fixtureChannelValues) {\n if (channelValue.channelName === channelName && channelValue.profileUuid === profileUuid) {\n return channelValue.value;\n }\n }\n }\n\n getApproximatedColorWheelCapability(preset: Preset, cachedChannel: CachedFixtureChannel): CachedFixtureCapability {\n // return an approximated wheel slot channel capability, if a color or a slot on a different\n // wheel has been selected\n let colorRed: number;\n let colorGreen: number;\n let colorBlue: number;\n let lowestDiff = Number.MAX_VALUE;\n let lowestDiffCapability: CachedFixtureCapability;\n let capabilityValue: FixtureCapabilityValue;\n\n capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Red);\n if (capabilityValue) {\n colorRed = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Green);\n if (capabilityValue) {\n colorGreen = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Blue);\n if (capabilityValue) {\n colorBlue = 255 * capabilityValue.valuePercentage;\n }\n\n if (!colorRed && !colorGreen && !colorBlue) {\n // no color found -> search the first color wheel\n // TODO\n }\n\n if (colorRed !== undefined && colorGreen !== undefined && colorBlue !== undefined) {\n for (const capability of cachedChannel.capabilities) {\n if (capability.capability.slotNumber) {\n const mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);\n if (mixedColor) {\n const diff =\n Math.abs(mixedColor.red - colorRed) + Math.abs(mixedColor.green - colorGreen) + Math.abs(mixedColor.blue - colorBlue);\n\n if (diff < lowestDiff) {\n lowestDiff = diff;\n lowestDiffCapability = capability;\n }\n }\n }\n }\n }\n\n return lowestDiffCapability;\n }\n\n private hasCapabilityType(type: FixtureCapabilityType): boolean {\n // there is at least one channel with at least one intensity capability\n for (const fixtureUuid of this.selectedPreset.fixtureUuids) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);\n for (const channel of fixture.channels) {\n if (channel.channel) {\n for (const capability of channel.capabilities) {\n if (capability.capability.type === type) {\n return true;\n }\n }\n }\n }\n }\n return false;\n }\n\n hasCapabilityDimmer(): boolean {\n return this.hasCapabilityType(FixtureCapabilityType.Intensity);\n }\n\n hasCapabilityColor(): boolean {\n // TODO optionally color temperature and color white (see stairville/mh-100)\n\n // one of the profiles has a color intensity\n if (this.hasCapabilityType(FixtureCapabilityType.ColorIntensity)) {\n return true;\n }\n\n return false;\n }\n\n hasCapabilityColorOrColorWheel(): boolean {\n // TODO optionally color temperature and color white (see stairville/mh-100)\n\n // one of the profiles has a color intensity\n if (this.hasCapabilityColor()) {\n return true;\n }\n\n // a color wheel is involved\n for (const fixtureUuid of this.selectedPreset.fixtureUuids) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);\n for (const channel of fixture.channels) {\n if (channel.colorWheel) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n hasCapabilityPanTilt(): boolean {\n let hasPan = false;\n let hasTilt = false;\n\n // there is at least one pan and one tilt channel\n if (this.hasCapabilityType(FixtureCapabilityType.Pan)) {\n hasPan = true;\n }\n\n if (this.hasCapabilityType(FixtureCapabilityType.Tilt)) {\n hasTilt = true;\n }\n\n if (hasPan && hasTilt) {\n return true;\n }\n\n return false;\n }\n\n selectPreset(index: number) {\n this.effectService.selectedEffect = undefined;\n this.selectedPreset = this.projectService.project.presets[index];\n this.projectService.project.selectedPresetUuid = this.projectService.project.presets[index].uuid;\n this.autoOpenFirstEffect();\n this.previewSelectionChanged.next();\n this.previewLive();\n }\n\n autoOpenFirstEffect() {\n // open the first effect, if the preset only has one\n if (this.selectedPreset && this.selectedPreset.effects.length === 1) {\n this.effectService.selectedEffect = this.selectedPreset.effects[0];\n }\n }\n\n addPreset(name?: string): void {\n const preset: Preset = new Preset();\n preset.uuid = this.uuidService.getUuid();\n preset.name = name || 'New Preset';\n\n // Insert the new preset before the highest currently selected preset\n let highestSelectedPresetIndex = 0;\n\n for (let i = 0; i < this.projectService.project.presets.length; i++) {\n if (this.selectedPreset === this.projectService.project.presets[i]) {\n highestSelectedPresetIndex = i;\n break;\n }\n }\n\n this.projectService.project.presets.splice(highestSelectedPresetIndex, 0, preset);\n this.selectPreset(highestSelectedPresetIndex);\n }\n\n getSelectedProfiles() {\n const profiles: FixtureProfile[] = [];\n\n if (!this.selectedPreset) {\n return profiles;\n }\n\n for (const fixtureUuid of this.selectedPreset.fixtureUuids) {\n const fixture = this.fixtureService.getFixtureByUuid(fixtureUuid);\n const profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n\n if (profiles.indexOf(profile) < 0) {\n profiles.push(profile);\n }\n }\n\n return profiles;\n }\n\n getSelectedProfileChannels(selectedProfiles: FixtureProfile[]) {\n const availableChannels: Map<FixtureProfile, CachedFixtureChannel[]> = new Map<FixtureProfile, CachedFixtureChannel[]>();\n\n const calculatedProfileModes = new Map<FixtureProfile, FixtureMode[]>();\n for (const profile of selectedProfiles) {\n const modes: FixtureMode[] = [];\n for (const fixtureUuid of this.selectedPreset.fixtureUuids) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);\n if (modes.indexOf(fixture.mode) < 0) {\n modes.push(fixture.mode);\n }\n }\n calculatedProfileModes.set(profile, modes);\n }\n\n // calculate all required channels from the modes\n calculatedProfileModes.forEach((modes: FixtureMode[], profile: FixtureProfile) => {\n const profileChannels: CachedFixtureChannel[] = [];\n for (const mode of modes) {\n const channels = this.fixtureService.getCachedChannels(profile, mode);\n for (const channel of channels) {\n // only add the channel, if no channel with the same name has already been added\n // (e.g. a fine channel)\n if (channel.channel && !profileChannels.find((c) => c.name === channel.name)) {\n profileChannels.push(channel);\n }\n }\n }\n availableChannels.set(profile, profileChannels);\n });\n\n return availableChannels;\n }\n\n previewLive(compositionName: string = '', positionMillis?: number) {\n if (!this.configService.livePreview) {\n return;\n }\n\n // collect all changes and delay them to not flood the backend\n // (except play events. they need to be delivered always)\n if (this.livePreviewTimer && !compositionName) {\n this.liveChangePending = true;\n return;\n }\n\n let position = positionMillis;\n\n if (position === undefined) {\n position = Math.round(this.animationService.timeMillis);\n }\n\n this.http\n .post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(this.projectService.project))\n .subscribe();\n\n this.liveChangePending = false;\n\n if (!compositionName) {\n this.livePreviewTimer = setTimeout(() => {\n this.livePreviewTimer = undefined;\n if (this.liveChangePending) {\n this.http\n .post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(this.projectService.project))\n .subscribe();\n }\n }, 50);\n }\n }\n\n stopPreviewPlay() {\n if (!this.configService.livePreview) {\n return;\n }\n\n this.http.post('stop-preview-play', null).subscribe();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { Preset } from '../models/preset';\nimport { Scene } from '../models/scene';\nimport { EffectService } from './effect.service';\nimport { PresetService } from './preset.service';\nimport { ProjectService } from './project.service';\nimport { UuidService } from './uuid.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SceneService {\n selectedScenes: Scene[] = [];\n sceneColors: string[] = ['#945fda', '#61da5f', '#5fc3da', '#dad65f', '#da5f5f', '#246db7'];\n\n multipleSelection = false;\n\n sceneDeleted: Subject<void> = new Subject<void>();\n sceneSelected: Subject<void> = new Subject<void>();\n\n constructor(\n private uuidService: UuidService,\n private effectService: EffectService,\n private presetService: PresetService,\n private projectService: ProjectService\n ) {}\n\n sceneIsSelected(scene: Scene): boolean {\n for (const selectedScene of this.selectedScenes) {\n if (selectedScene.uuid === scene.uuid) {\n return true;\n }\n }\n\n return false;\n }\n\n presetIsSelected(preset: Preset): boolean {\n if (!this.selectedScenes || this.selectedScenes.length !== 1) {\n return false;\n }\n\n for (const uuid of this.selectedScenes[0].presetUuids) {\n if (preset.uuid === uuid) {\n return true;\n }\n }\n\n return false;\n }\n\n switchSceneSelection(scene: Scene) {\n // Select a scene if not yet selected or unselect it otherwise\n if (this.sceneIsSelected(scene)) {\n for (let i = 0; i < this.selectedScenes.length; i++) {\n if (this.selectedScenes[i].uuid === scene.uuid) {\n this.selectedScenes.splice(i, 1);\n return;\n }\n }\n } else {\n this.selectedScenes.push(scene);\n }\n\n this.sceneSelected.next();\n }\n\n selectPresetFromSelectedScene() {\n // select the first preset of the scene, if no preset of the current scene is already\n // selected to make sure, the user does not edit a preset which is not even\n // active in the current scene (and sees no change).\n\n let firstPresetUuid;\n\n // check, whether a preset of the current scene is already selected and do nothing\n // in this case\n for (const scene of this.selectedScenes) {\n for (const presetUuid of scene.presetUuids) {\n firstPresetUuid = presetUuid;\n\n if (presetUuid === this.presetService.selectedPreset.uuid) {\n // a preset of a currently selected scene is already selected -> do nothing\n return;\n }\n }\n }\n\n if (!firstPresetUuid) {\n return;\n }\n\n for (let i = 0; i < this.projectService.project.presets.length; i++) {\n if (this.projectService.project.presets[i].uuid === firstPresetUuid) {\n this.presetService.selectPreset(i);\n break;\n }\n }\n }\n\n selectScene(index: number) {\n this.effectService.selectedEffect = undefined;\n\n if (index >= this.projectService.project.scenes.length) {\n this.selectedScenes = [];\n } else {\n if (this.multipleSelection) {\n this.switchSceneSelection(this.projectService.project.scenes[index]);\n } else {\n this.selectedScenes = [];\n this.selectedScenes.push(this.projectService.project.scenes[index]);\n }\n }\n\n this.selectPresetFromSelectedScene();\n\n // preview the complete scene\n this.projectService.project.previewPreset = false;\n\n this.projectService.project.selectedSceneUuids = [];\n for (const scene of this.selectedScenes) {\n this.projectService.project.selectedSceneUuids.push(scene.uuid);\n }\n this.presetService.previewSelectionChanged.next();\n this.presetService.previewLive();\n\n this.sceneSelected.next();\n }\n\n addScene(name?: string): void {\n const scene: Scene = new Scene();\n scene.uuid = this.uuidService.getUuid();\n scene.name = name || 'New Scene';\n\n if (this.projectService.project.scenes.length < this.sceneColors.length) {\n scene.color = this.sceneColors[this.projectService.project.scenes.length];\n } else {\n scene.color = '#' + Math.random().toString(16).slice(2, 8).toUpperCase();\n }\n\n // Insert the new scene before the highest currently selected scene\n let highestSelectedSceneIndex = 0;\n\n for (let i = 0; i < this.projectService.project.scenes.length; i++) {\n if (this.sceneIsSelected(this.projectService.project.scenes[i])) {\n highestSelectedSceneIndex = i;\n break;\n }\n }\n\n this.projectService.project.scenes.splice(highestSelectedSceneIndex, 0, scene);\n this.selectScene(highestSelectedSceneIndex);\n }\n\n removeScene(scene: Scene): void {\n // remove all playback regions\n for (const composition of this.projectService.project.compositions) {\n for (let i = composition.scenePlaybackRegions.length - 1; i >= 0; i--) {\n const compositionPlaybackRegion = composition.scenePlaybackRegions[i];\n if (compositionPlaybackRegion.sceneUuid === scene.uuid) {\n composition.scenePlaybackRegions.splice(i, 1);\n }\n }\n }\n\n // remove the scene\n this.projectService.project.scenes.splice(this.projectService.project.scenes.indexOf(scene), 1);\n if (this.projectService.project.scenes.length > 0) {\n this.selectScene(0);\n }\n\n this.sceneDeleted.next();\n }\n\n getSceneByUuid(uuid: string): Scene {\n for (const scene of this.projectService.project.scenes) {\n if (scene.uuid === uuid) {\n return scene;\n }\n }\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable, Subject, Subscription, timer } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport WaveSurfer from 'wavesurfer.js';\nimport CursorPlugin from 'wavesurfer.js/dist/plugin/wavesurfer.cursor.min.js';\nimport RegionsPlugin from 'wavesurfer.js/dist/plugin/wavesurfer.regions.min.js';\nimport TimeLinePlugin from 'wavesurfer.js/dist/plugin/wavesurfer.timeline.min.js';\nimport { guess } from 'web-audio-beat-detector';\nimport { Composition } from '../models/composition';\nimport { Preset } from '../models/preset';\nimport { PresetRegionScene } from '../models/preset-region-scene';\nimport { Scene } from '../models/scene';\nimport { ScenePlaybackRegion } from '../models/scene-playback-region';\nimport { ConfigService } from './config.service';\nimport { PresetService } from './preset.service';\nimport { ProjectService } from './project.service';\nimport { SceneService } from './scene.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TimelineService {\n public waveSurfer: WaveSurfer;\n public playState = 'paused';\n\n public zoom = 0;\n private timeUpdateSubscription: Subscription;\n public currentTime: string;\n private timelineClicking = false;\n public selectedPlaybackRegion: ScenePlaybackRegion;\n private intensity = 0.2;\n private intensitySelectedScene = 0.4;\n private intensityHighlighted = 0.8;\n public duration: string;\n public waveSurferReady: Subject<void> = new Subject();\n public detectChanges: Subject<void> = new Subject();\n\n // the current composition\n public selectedComposition: Composition;\n public selectedCompositionIndex: number;\n\n // can we add new compositions based on an external pool and\n // should new compositions not available in this pool be added there?\n public externalCompositionsAvailable = false;\n\n public loadingAudioFile = false;\n\n constructor(\n private sceneService: SceneService,\n private presetService: PresetService,\n private projectService: ProjectService,\n private http: HttpClient,\n private configService: ConfigService\n ) {\n this.presetService.previewSelectionChanged.subscribe(() => {\n this.selectedPlaybackRegion = undefined;\n this.updateRegionSelection();\n });\n this.sceneService.sceneDeleted.subscribe(() => {\n this.redrawAllRegions();\n });\n this.sceneService.sceneSelected.subscribe(() => {\n this.redrawAllRegions();\n });\n }\n\n private redrawAllRegions() {\n // remove all regions from wavesurver\n if (this.waveSurfer) {\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n region.remove();\n }\n }\n\n // draw all regions\n this.drawAllRegions();\n }\n\n private pad(num: number, size: number): string {\n if (!num) {\n num = 0;\n }\n\n let padded: string = num.toString();\n while (padded.length < size) {\n padded = '0' + padded;\n }\n\n return padded;\n }\n\n private msToTime(millis: number, includeMillis: boolean = true): string {\n const ms: number = Math.round(millis % 1000);\n const seconds: number = Math.floor(((millis % 360000) % 60000) / 1000);\n const minutes: number = Math.floor((millis % 3600000) / 60000);\n\n if (includeMillis) {\n return this.pad(minutes, 2) + ':' + this.pad(seconds, 2) + '.' + this.pad(ms, 3);\n } else {\n return this.pad(minutes, 2) + ':' + this.pad(seconds, 2);\n }\n }\n\n private updateCurrentTime() {\n if (!this.waveSurfer) {\n return;\n }\n\n // display the current time\n this.currentTime = this.msToTime(this.waveSurfer.getCurrentTime() * 1000);\n\n if (!this.waveSurfer.timeline.drawer) {\n return;\n }\n\n // draw the current cursor on the timeline\n // TODO redrawing the timeline each update is way to expensive.\n // maybe as a better solution use an element, like the cursor inside Wavesurfer to\n // display the progress?\n let x = 0;\n const duration: number = this.waveSurfer.backend.getDuration();\n const width: number =\n this.waveSurfer.params.fillParent && !this.waveSurfer.params.scrollParent\n ? this.waveSurfer.timeline.drawer.getWidth()\n : this.waveSurfer.timeline.drawer.wrapper.scrollWidth * this.waveSurfer.params.pixelRatio;\n\n x = (width / duration) * this.waveSurfer.getCurrentTime() - 2;\n\n // update the timeline canvas\n this.waveSurfer.timeline.render();\n\n // draw the cursor on the timeline\n this.waveSurfer.timeline.canvases.forEach((canvas, i) => {\n const leftOffset = i * this.waveSurfer.timeline.maxCanvasWidth;\n\n const ctx = canvas.getContext('2d');\n\n ctx.fillStyle = '#fd7e14';\n ctx.beginPath();\n ctx.moveTo(x - 12 - leftOffset, 20);\n ctx.lineTo(x + 12 - leftOffset, 20);\n ctx.lineTo(x - leftOffset, 45);\n ctx.fill();\n });\n }\n\n private startTimeUpdater() {\n this.stopTimeUpdater();\n\n const timeUpdater = timer(0, 40);\n this.timeUpdateSubscription = timeUpdater.subscribe(() => {\n this.updateCurrentTime();\n });\n }\n\n private stopTimeUpdater() {\n if (this.timeUpdateSubscription) {\n this.timeUpdateSubscription.unsubscribe();\n }\n }\n\n formatTimeCallback(seconds: number, pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n return Math.round(seconds / this.selectedComposition.timeSignatureUpper / (60 / this.selectedComposition.beatsPerMinute));\n } else {\n // calculate minutes and seconds from seconds count\n const minutes = parseInt((seconds / 60) as any, 10);\n seconds = parseInt((seconds % 60) as any, 10);\n\n // fill up seconds with zeroes\n const secondsStr = seconds < 10 ? '0' + seconds : seconds;\n return `${minutes}:${secondsStr}`;\n }\n }\n\n timeInterval(pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n const interval = 60 / this.selectedComposition.beatsPerMinute / this.selectedComposition.gridResolution;\n\n if (pxPerSec < 40) {\n return interval * 4;\n } else if (pxPerSec < 80) {\n return interval * 2;\n }\n\n return interval;\n } else {\n if (pxPerSec >= 25) {\n return 1;\n } else if (pxPerSec * 5 >= 25) {\n return 5;\n } else if (pxPerSec * 15 >= 25) {\n return 15;\n }\n\n return Math.ceil(0.5 / pxPerSec) * 60;\n }\n }\n\n primaryLabelInterval(pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n const interval = this.selectedComposition.timeSignatureUpper * this.selectedComposition.gridResolution;\n\n return interval;\n } else {\n if (pxPerSec >= 25) {\n return 10;\n } else if (pxPerSec * 5 >= 25) {\n return 6;\n } else if (pxPerSec * 15 >= 25) {\n return 4;\n }\n\n return 4;\n }\n }\n\n secondaryLabelInterval(pxPerSec: number) {\n if (this.selectedComposition.gridType === 'musical') {\n return 0;\n } else {\n if (pxPerSec >= 25) {\n return 5;\n } else if (pxPerSec * 5 >= 25) {\n return 2;\n } else if (pxPerSec * 15 >= 25) {\n return 2;\n }\n return 2;\n }\n }\n\n private seeekWithTimeline(e: any) {\n // taken from wavesurfer -> drawer -> handleEvent\n const clientX = e.targetTouches ? e.targetTouches[0].clientX : e.clientX;\n const bbox = this.waveSurfer.timeline.wrapper.getBoundingClientRect();\n\n const nominalWidth = this.waveSurfer.timeline.drawer.width;\n const parentWidth = this.waveSurfer.timeline.drawer.getWidth();\n\n let progress: number;\n\n if (!this.waveSurfer.timeline.drawer.params.fillParent && nominalWidth < parentWidth) {\n progress =\n (this.waveSurfer.timeline.drawer.params.rtl ? bbox.right - clientX : clientX - bbox.left) *\n (this.waveSurfer.timeline.drawer.params.pixelRatio / nominalWidth) || 0;\n\n if (progress > 1) {\n progress = 1;\n }\n } else {\n progress =\n ((this.waveSurfer.timeline.drawer.params.rtl ? bbox.right - clientX : clientX - bbox.left) +\n this.waveSurfer.timeline.wrapper.scrollLeft) /\n this.waveSurfer.timeline.wrapper.scrollWidth || 0;\n }\n\n progress = Math.max(progress, 0);\n\n setTimeout(() => {\n this.waveSurfer.seekTo(progress);\n this.detectChanges.next();\n this.presetService.previewLive(this.selectedComposition.name, Math.round(this.waveSurfer.getCurrentTime() * 1000));\n }, 0);\n }\n\n applyZoom(zoom: any) {\n if (zoom < 0 || zoom > 200) {\n return;\n }\n\n this.zoom = zoom;\n if (this.waveSurfer) {\n setTimeout(() => {\n this.waveSurfer.zoom(this.zoom);\n this.updateCurrentTime();\n }, 0);\n }\n }\n\n private isWaveSurferReady(): boolean {\n if (!this.waveSurfer) {\n return false;\n }\n\n if (!this.waveSurfer.isReady) {\n return false;\n }\n\n return true;\n }\n\n addRegion(waveSurferRegion?: any) {\n if (!this.isWaveSurferReady()) {\n return;\n }\n\n if (!this.sceneService.selectedScenes || this.sceneService.selectedScenes.length !== 1) {\n return;\n }\n\n if (!this.selectedComposition) {\n return;\n }\n\n const scenePlaybackRegion: ScenePlaybackRegion = new ScenePlaybackRegion();\n scenePlaybackRegion.sceneUuid = this.sceneService.selectedScenes[0].uuid;\n\n if (waveSurferRegion) {\n scenePlaybackRegion.startMillis = waveSurferRegion.start * 1000;\n scenePlaybackRegion.endMillis = waveSurferRegion.end * 1000;\n } else {\n scenePlaybackRegion.startMillis = (this.waveSurfer.getDuration() * 1000) / 3;\n scenePlaybackRegion.endMillis = ((this.waveSurfer.getDuration() * 1000) / 3) * 2;\n }\n\n this.selectedComposition.scenePlaybackRegions.push(scenePlaybackRegion);\n\n this.selectedPlaybackRegion = scenePlaybackRegion;\n\n if (waveSurferRegion) {\n waveSurferRegion.color =\n 'rgba(' +\n this.hexToRgb(this.sceneService.selectedScenes[0].color).r +\n ', ' +\n this.hexToRgb(this.sceneService.selectedScenes[0].color).g +\n ', ' +\n this.hexToRgb(this.sceneService.selectedScenes[0].color).b +\n ', ' +\n this.intensityHighlighted +\n ')';\n waveSurferRegion.attributes.selectable = true;\n this.connectRegion(waveSurferRegion, this.sceneService.selectedScenes[0], scenePlaybackRegion);\n this.updateRegionSelection();\n } else {\n this.drawRegion(scenePlaybackRegion, this.sceneService.selectedScenes[0]);\n }\n\n this.presetService.previewLive();\n }\n\n private getSnapToGridInterval(): number {\n if (this.selectedComposition.snapToGrid) {\n return 60 / this.selectedComposition.beatsPerMinute / this.selectedComposition.gridResolution;\n }\n\n return undefined;\n }\n\n private getSnapToGridOffset(): number {\n return this.selectedComposition.gridOffsetMillis / 1000;\n }\n\n deleteSelectedComposition() {\n this.projectService.project.compositions.splice(this.selectedCompositionIndex, 1);\n this.selectedComposition = undefined;\n this.selectedCompositionIndex = undefined;\n this.destroyWaveSurfer();\n if (this.projectService.project.compositions.length > 0) {\n this.selectCompositionIndex(0);\n }\n }\n\n destroyWaveSurfer() {\n this.duration = undefined;\n this.loadingAudioFile = false;\n\n if (this.waveSurfer) {\n this.waveSurfer.destroy();\n this.waveSurfer = undefined;\n }\n }\n\n createWaveSurfer() {\n this.destroyWaveSurfer();\n\n if (!this.selectedComposition.audioFileName) {\n return;\n }\n\n this.loadingAudioFile = true;\n\n setTimeout(() => {\n this.waveSurfer = WaveSurfer.create({\n container: '#waveform',\n waveColor: 'white',\n progressColor: 'white',\n // barWidth: 2,\n height: 1,\n interact: false,\n // Use for timelines without sound. Wave will be displayed\n // wrong, but should work for a dummy audio without any waves.\n // duration: 400,\n plugins: [\n CursorPlugin.create({\n // showTime: true,\n opacity: 1,\n color: '#fd7e14',\n hideOnBlur: false /* don't show/hide the cursor on the wave (only on the timeline) */,\n }),\n RegionsPlugin.create({\n dragSelection: {\n slop: 5,\n },\n color: '#fff',\n snapToGridInterval: this.getSnapToGridInterval(),\n snapToGridOffset: this.getSnapToGridOffset(),\n }),\n TimeLinePlugin.create({\n container: '#waveform-timeline',\n primaryFontColor: '#fff',\n secondaryFontColor: '#fff',\n offset: this.getSnapToGridOffset(),\n formatTimeCallback: this.formatTimeCallback.bind(this),\n timeInterval: this.timeInterval.bind(this),\n primaryLabelInterval: this.primaryLabelInterval.bind(this),\n secondaryLabelInterval: this.secondaryLabelInterval.bind(this),\n }),\n ],\n });\n\n let audioFileName: string;\n\n if (this.configService.enableMediaLibrary) {\n // the file name is also used for the real file name\n audioFileName = 'file/get?name=' + this.selectedComposition.audioFileName + '&type=AUDIO';\n } else {\n // the composition uuid and extension is used as the file name\n audioFileName =\n 'composition-files/?file=' +\n this.selectedComposition.uuid +\n '.' +\n this.selectedComposition.audioFileName.substr(this.selectedComposition.audioFileName.lastIndexOf('.') + 1);\n }\n\n this.waveSurfer.load(this.configService.restUrl + audioFileName);\n\n this.waveSurfer.on('ready', () => {\n setTimeout(() => {\n // try guessing the bpm and offset from the file, if necessary\n if (this.selectedComposition.tempoGuessed) {\n // we already guessed the BPM of this file --> don't do it again\n this.loadingAudioFile = false;\n } else {\n // we have not yet guessed the BPM --> do it now\n this.selectedComposition.tempoGuessed = true;\n guess(this.waveSurfer.backend.buffer)\n .then(({ bpm, offset }) => {\n // the bpm and offset could be guessed\n this.selectedComposition.beatsPerMinute = bpm;\n this.selectedComposition.gridOffsetMillis = offset * 1000;\n this.loadingAudioFile = false;\n })\n .catch((err) => {\n // something went wrong\n console.error('Could not detect the BPM from the audio file', err);\n this.loadingAudioFile = false;\n });\n }\n\n this.duration = this.msToTime(this.waveSurfer.getDuration() * 1000);\n this.drawAllRegions();\n\n // scroll wavesurfer in sync with the timeline\n this.waveSurfer.timeline.wrapper.addEventListener('scroll', () => {\n this.waveSurfer.drawer.wrapper.scrollLeft = this.waveSurfer.timeline.wrapper.scrollLeft;\n\n // Set the scroll position of the timeline to the same position as the wavesurfer,\n // because the timeline is larger than wavesurfer and might get out of sync.\n // This way, if wavesurfer cannot scroll any further, we reset the position\n // of the timeline as well.\n this.waveSurfer.timeline.wrapper.scrollLeft = this.waveSurfer.drawer.wrapper.scrollLeft;\n });\n\n // display the cursor also on the timeline\n this.waveSurfer.timeline.wrapper.addEventListener('mouseenter', () => {\n this.waveSurfer.cursor.showCursor();\n });\n this.waveSurfer.timeline.wrapper.addEventListener('mouseleave', () => {\n this.waveSurfer.cursor.hideCursor();\n });\n this.waveSurfer.timeline.wrapper.addEventListener('mousemove', (e: any) => {\n const bbox = this.waveSurfer.container.getBoundingClientRect();\n const x = e.clientX - bbox.left;\n this.waveSurfer.cursor.updateCursorPosition(x, 0);\n });\n\n // hide the cursor on the wave initially. in combination with the param hideOnBlur = false,\n // it will never be displayed on the wave now. we handle it on the timeline only.\n this.waveSurfer.cursor.hideCursor();\n\n // seek on timeline-click\n this.waveSurfer.timeline.wrapper.addEventListener('mousedown', (e: any) => {\n this.timelineClicking = true;\n this.seeekWithTimeline(e);\n });\n\n this.waveSurfer.timeline.wrapper.addEventListener('mousemove', (e: any) => {\n if (this.timelineClicking) {\n this.seeekWithTimeline(e);\n }\n });\n\n this.waveSurfer.timeline.wrapper.addEventListener('mouseup', (e: any) => {\n this.timelineClicking = false;\n });\n\n this.updateCurrentTime();\n\n this.detectChanges.next();\n this.waveSurferReady.next();\n }, 0);\n });\n\n this.waveSurfer.on('error', (error: any) => {\n // could not load the composition --> delete it\n // (this may occur, when the composition has been deleted but the project is not saved afterwards)\n this.deleteSelectedComposition();\n });\n\n this.waveSurfer.on('seek', () => {\n this.updateCurrentTime();\n });\n\n this.waveSurfer.on('play', () => {\n this.startTimeUpdater();\n });\n\n this.waveSurfer.on('pause', () => {\n this.stopTimeUpdater();\n });\n\n this.waveSurfer.on('region-created', (region) => {\n // region created by selection or programmatically\n if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {\n if (!region.data.handled) {\n this.addRegion(region);\n }\n } else {\n if (!region.data.handled) {\n region.remove();\n }\n }\n });\n\n this.waveSurfer.on('region-updated', (region: any) => {\n this.detectChanges.next();\n this.presetService.previewLive();\n });\n }, 0);\n }\n\n private hexToRgb(hex: string) {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n }\n : null;\n }\n\n private updateRegionSelection() {\n if (!this.waveSurfer) {\n return;\n }\n\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n\n // if no scene is set, the region is not valid (e.g. has been created, while\n // no scene has been selected and remove did not work properly)\n if (region.scene) {\n let intensity = this.intensity;\n\n region.drag = false;\n region.resize = false;\n region.attributes.selectable = false;\n\n if (this.sceneService.sceneIsSelected(region.scene)) {\n intensity = this.intensitySelectedScene;\n region.drag = true;\n region.resize = true;\n region.attributes.selectable = true;\n }\n\n region.attributes.selected = false;\n\n if (this.selectedPlaybackRegion && this.selectedPlaybackRegion === region.scenePlaybackRegion) {\n intensity = this.intensityHighlighted;\n region.attributes.selected = true;\n }\n\n region.color =\n 'rgba(' +\n this.hexToRgb(region.scene.color).r +\n ', ' +\n this.hexToRgb(region.scene.color).g +\n ', ' +\n this.hexToRgb(region.scene.color).b +\n ', ' +\n intensity +\n ')';\n region.updateRender();\n }\n }\n }\n\n updateSelectedRegion() {\n if (!this.waveSurfer) {\n return;\n }\n\n if (!this.selectedPlaybackRegion) {\n return;\n }\n\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n\n if (this.selectedPlaybackRegion === region.scenePlaybackRegion) {\n region.start = this.selectedPlaybackRegion.startMillis / 1000;\n region.end = this.selectedPlaybackRegion.endMillis / 1000;\n region.updateRender();\n break;\n }\n }\n }\n\n private setSelectedRegion(scenePlaybackRegion?: ScenePlaybackRegion) {\n if (this.selectedPlaybackRegion && this.selectedPlaybackRegion === scenePlaybackRegion) {\n // No update required\n return;\n }\n\n if (scenePlaybackRegion) {\n this.selectedPlaybackRegion = scenePlaybackRegion;\n }\n\n this.updateRegionSelection();\n }\n\n private getRegionSnapToGridValue(value: number): number {\n // the regions should snap to a grid\n const offset = this.getSnapToGridOffset() || 0;\n const interval = this.getSnapToGridInterval() || 0;\n return Math.round((value - offset) / interval) * interval + offset;\n }\n\n private connectRegion(waveSurferRegion: any, scene: Scene, scenePlaybackRegion: ScenePlaybackRegion, preset?: Preset) {\n waveSurferRegion.scenePlaybackRegion = scenePlaybackRegion;\n waveSurferRegion.scene = scene;\n waveSurferRegion.preset = preset;\n\n waveSurferRegion.on('click', (event) => {\n if (this.sceneService.sceneIsSelected(scene)) {\n this.setSelectedRegion(scenePlaybackRegion);\n }\n });\n\n waveSurferRegion.on('update', () => {\n this.setSelectedRegion(scenePlaybackRegion);\n if (this.selectedComposition.snapToGrid) {\n // update the regions boundaries. they may not snap to grid, if it has been\n // disabled during creation of the region but activated afterwards.\n waveSurferRegion.start = this.getRegionSnapToGridValue(waveSurferRegion.start);\n waveSurferRegion.end = this.getRegionSnapToGridValue(waveSurferRegion.end);\n }\n scenePlaybackRegion.startMillis = waveSurferRegion.start * 1000;\n scenePlaybackRegion.endMillis = waveSurferRegion.end * 1000;\n });\n }\n\n private drawRegion(scenePlaybackRegion: ScenePlaybackRegion, scene: Scene) {\n // draw the regions of the currently selected scene\n if (!this.isWaveSurferReady()) {\n return;\n }\n\n // add the playback region\n const waveSurferRegion = this.waveSurfer.addRegion({\n start: scenePlaybackRegion.startMillis / 1000,\n end: scenePlaybackRegion.endMillis / 1000,\n color: '#fff',\n data: { handled: true },\n });\n this.connectRegion(waveSurferRegion, scene, scenePlaybackRegion);\n\n // TODO show the all presets\n // for (let presetUuid of scene.presetUuids) {\n // const preset = this.presetService.getPresetByUuid(presetUuid);\n\n // let waveSurferRegion = this.timelineService.waveSurfer.addRegion({\n // start: (scenePlaybackRegion.startMillis + (preset.startMillis ? preset.startMillis : 0)) / 1000,\n // end: (scenePlaybackRegion.startMillis\n // + (preset.endMillis ? preset.endMillis : scenePlaybackRegion.endMillis - scenePlaybackRegion.startMillis)) / 1000,\n // color: '#fff',\n // data: { handled: true },\n // // TODO\n // attributes: {\n // preset: true,\n // name: 'Preset 1'\n // }\n // });\n // this.connectRegion(waveSurferRegion, scene, scenePlaybackRegion, preset);\n // }\n\n this.updateRegionSelection();\n }\n\n removeRegion() {\n if (!this.selectedPlaybackRegion) {\n return;\n }\n\n if (this.sceneService.selectedScenes.length !== 1) {\n return;\n }\n\n for (let i = 0; i < this.selectedComposition.scenePlaybackRegions.length; i++) {\n if (this.selectedComposition.scenePlaybackRegions[i] === this.selectedPlaybackRegion) {\n // remove the region from wavesurfer\n for (const key of Object.keys(this.waveSurfer.regions.list)) {\n const region: any = this.waveSurfer.regions.list[key];\n\n if (region.scenePlaybackRegion === this.selectedPlaybackRegion) {\n region.remove();\n }\n }\n\n this.selectedPlaybackRegion = undefined;\n this.selectedComposition.scenePlaybackRegions.splice(i, 1);\n\n return;\n }\n }\n\n this.presetService.previewLive();\n }\n\n getPresetsInTime(timeMillis: number): PresetRegionScene[] {\n // Return all presets which should be active during the specified time\n const activePresets: PresetRegionScene[] = [];\n\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n const scene = this.projectService.project.scenes[sceneIndex];\n\n for (const region of this.selectedComposition.scenePlaybackRegions) {\n if (region.sceneUuid === scene.uuid) {\n for (let presetIndex = this.projectService.project.presets.length - 1; presetIndex >= 0; presetIndex--) {\n for (const presetUuid of scene.presetUuids) {\n if (presetUuid === this.projectService.project.presets[presetIndex].uuid) {\n const preset = this.presetService.getPresetByUuid(presetUuid);\n\n if (preset) {\n let presetStartMillis = preset.startMillis === undefined ? region.startMillis : region.startMillis + preset.startMillis;\n let presetEndMillis = preset.endMillis === undefined ? region.endMillis : region.startMillis + preset.endMillis;\n\n // extend the running time, if fading is done outside the boundaries\n presetStartMillis -= preset.fadeInPre ? preset.fadeInMillis : 0;\n presetEndMillis += preset.fadeOutPost ? preset.fadeOutMillis : 0;\n\n if (presetStartMillis <= timeMillis && presetEndMillis >= timeMillis) {\n activePresets.push(new PresetRegionScene(preset, region, scene));\n }\n }\n }\n }\n }\n }\n }\n }\n\n return activePresets;\n }\n\n drawAllRegions() {\n if (!this.selectedComposition) {\n return;\n }\n\n // draw the regions in the same order as their corresponding scenes, but draw\n // the selected ones last, to make sure they're always clickable.\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n const scene = this.projectService.project.scenes[sceneIndex];\n if (!this.sceneService.sceneIsSelected(scene)) {\n for (const scenePlaybackRegion of this.selectedComposition.scenePlaybackRegions) {\n if (scenePlaybackRegion.sceneUuid === scene.uuid) {\n this.drawRegion(scenePlaybackRegion, scene);\n }\n }\n }\n }\n\n // draw all selected scenes afterwards\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n const scene = this.projectService.project.scenes[sceneIndex];\n\n if (this.sceneService.sceneIsSelected(scene)) {\n for (const scenePlaybackRegion of this.selectedComposition.scenePlaybackRegions) {\n if (scenePlaybackRegion.sceneUuid === scene.uuid) {\n this.drawRegion(scenePlaybackRegion, scene);\n }\n }\n }\n }\n }\n\n updateGrid() {\n if (this.waveSurferReady) {\n this.waveSurfer.timeline.params.offset = this.getSnapToGridOffset();\n\n this.waveSurfer.regions.params.snapToGridInterval = this.getSnapToGridInterval();\n this.waveSurfer.regions.params.snapToGridOffset = this.getSnapToGridOffset();\n }\n this.updateCurrentTime();\n }\n\n getExternalCompositionNames(): Observable<string[]> {\n // get available compositions from an external pool (e.g. Rocket Show)\n return this.http.get('composition/list').pipe(\n map((response: object[]) => {\n const compositionNames: string[] = [];\n\n for (const responseComposition of response) {\n compositionNames.push((responseComposition as any).name);\n }\n\n return compositionNames;\n })\n );\n }\n\n selectCompositionIndex(index: number) {\n this.selectedComposition = this.projectService.project.compositions[index];\n this.selectedCompositionIndex = index;\n this.projectService.project.selectedCompositionUuid = this.selectedComposition.uuid;\n this.createWaveSurfer();\n\n // required to trigger timeline.component.resize()\n this.waveSurferReady.next();\n\n this.applyZoom(0);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Universe } from '../models/universe';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UniverseService {\n universes: Universe[] = [];\n\n constructor() {}\n\n getUniverseByUuid(uuid: string): Universe {\n for (const universe of this.universes) {\n if (universe.uuid === uuid) {\n return universe;\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport * as THREE from 'three';\nimport { CachedFixture } from '../models/cached-fixture';\nimport { EffectCurve } from '../models/effect-curve';\nimport { FixtureCapabilityType } from '../models/fixture-capability';\nimport { FixtureChannelValue } from '../models/fixture-channel-value';\nimport { Preset } from '../models/preset';\nimport { PresetRegionScene } from '../models/preset-region-scene';\nimport { Universe } from '../models/universe';\nimport { FixtureService } from './fixture.service';\nimport { PresetService } from './preset.service';\nimport { ProjectService } from './project.service';\nimport { SceneService } from './scene.service';\nimport { TimelineService } from './timeline.service';\nimport { UniverseService } from './universe.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class PreviewService {\n public doUpdateFixtureSetup: Subject<void> = new Subject();\n\n public scene: THREE.Scene;\n\n private stageMeshes: THREE.Mesh[] = [];\n private stageMaterial = new THREE.MeshStandardMaterial({ color: 0x0d0d0d });\n\n constructor(\n private presetService: PresetService,\n private fixtureService: FixtureService,\n private sceneService: SceneService,\n private timelineService: TimelineService,\n private universeService: UniverseService,\n private projectService: ProjectService\n ) {}\n\n private getAlreadyCalculatedFixture(fixtures: CachedFixture[], fixtureIndex: number): CachedFixture {\n // Has this fixture already been calculated (same universe and dmx start address as a fixture before)\n // --> return it\n for (let i = 0; i < fixtureIndex; i++) {\n const calculatedFixture = fixtures[i];\n\n if (\n calculatedFixture.fixture.dmxUniverseUuid === fixtures[fixtureIndex].fixture.dmxUniverseUuid &&\n calculatedFixture.fixture.dmxFirstChannel === fixtures[fixtureIndex].fixture.dmxFirstChannel\n ) {\n return calculatedFixture;\n }\n }\n\n return undefined;\n }\n\n public getPresets(timeMillis: number): PresetRegionScene[] {\n // Get relevant presets in correct order to process with their corresponding scene, if available\n let presets: PresetRegionScene[] = [];\n\n if (this.timelineService.playState === 'playing') {\n // Only use active presets in current regions\n presets = this.timelineService.getPresetsInTime(timeMillis);\n } else {\n if (this.projectService.project.previewPreset) {\n // Only preview the selected preset\n if (this.presetService.selectedPreset) {\n presets.push(new PresetRegionScene(this.presetService.selectedPreset, undefined, undefined));\n }\n } else {\n // Preview the selected scenes\n for (let sceneIndex = this.projectService.project.scenes.length - 1; sceneIndex >= 0; sceneIndex--) {\n for (const scene of this.sceneService.selectedScenes) {\n if (scene.uuid === this.projectService.project.scenes[sceneIndex].uuid) {\n for (let presetIndex = this.projectService.project.presets.length - 1; presetIndex >= 0; presetIndex--) {\n for (const presetUuid of scene.presetUuids) {\n // Loop over the presets in the preset service to retain the preset order\n if (presetUuid === this.projectService.project.presets[presetIndex].uuid) {\n presets.push(new PresetRegionScene(this.projectService.project.presets[presetIndex], undefined, scene));\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n\n return presets;\n }\n\n private mixChannelValue(\n existingChannelValues: FixtureChannelValue[],\n channelValue: FixtureChannelValue,\n intensityPercentage: number,\n defaultValue: number = 0\n ) {\n let newValue: number = channelValue.value;\n let existingValue: number = defaultValue;\n\n if (intensityPercentage < 1) {\n // We need to mix a possibly existing value (or the default value 0) with the new value (fading)\n\n // Get the existant value for this property\n for (const existingChannelValue of existingChannelValues) {\n if (\n existingChannelValue.channelName === channelValue.channelName &&\n existingChannelValue.profileUuid === channelValue.profileUuid\n ) {\n existingValue = existingChannelValue.value;\n break;\n }\n }\n\n // Mix the existing value with the new value\n newValue = existingValue * (1 - intensityPercentage) + newValue * intensityPercentage;\n }\n\n // Remove the existant value, if available\n for (let i = 0; i < existingChannelValues.length; i++) {\n if (\n existingChannelValues[i].channelName === channelValue.channelName &&\n existingChannelValues[i].profileUuid === channelValue.profileUuid\n ) {\n existingChannelValues.splice(i, 1);\n break;\n }\n }\n\n // Add the new value\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = channelValue.channelName;\n fixtureChannelValue.profileUuid = channelValue.profileUuid;\n fixtureChannelValue.value = newValue;\n existingChannelValues.push(fixtureChannelValue);\n }\n\n // Get the fixture index inside the passed preset (used for chasing)\n private getFixtureIndex(preset: Preset, fixtureUuid: string): number {\n let index = 0;\n const countedDmxChannels: number[] = [];\n\n // Loop over the global fixtures to retain the order\n for (const fixture of this.projectService.project.fixtures) {\n for (const presetFixtureUuid of preset.fixtureUuids) {\n if (presetFixtureUuid === fixture.uuid) {\n if (fixture.uuid === fixtureUuid) {\n return index;\n }\n\n // don't count fixtures on the same channel as already counted ones\n if (!countedDmxChannels.includes(fixture.dmxFirstChannel)) {\n countedDmxChannels.push(fixture.dmxFirstChannel);\n index++;\n }\n break;\n }\n }\n }\n\n // Not found in the preset\n return undefined;\n }\n\n private getPresetIntensity(preset: PresetRegionScene, timeMillis: number): number {\n // When fading is in progress (on preset or scene-level), the current preset does not\n // fully cover underlying values.\n // -> 0 = no covering at all, 1 = fully cover (no fading)\n let intensityPercentageScene = 1;\n let intensityPercentagePreset = 1;\n let intensityPercentage = 1;\n\n if (preset.region && preset.scene) {\n // Fade out is stronger than fade in (if they overlap)\n\n // Take away intensity for scene fading\n const sceneStartMillis = preset.scene.fadeInPre ? preset.region.startMillis - preset.scene.fadeInMillis : preset.region.startMillis;\n const sceneEndMillis = preset.scene.fadeOutPost ? preset.region.endMillis + preset.scene.fadeOutMillis : preset.region.endMillis;\n\n if (timeMillis > sceneEndMillis - preset.scene.fadeOutMillis && timeMillis < sceneEndMillis) {\n // Scene fades out\n intensityPercentageScene = (sceneEndMillis - timeMillis) / preset.scene.fadeOutMillis;\n } else if (timeMillis < sceneStartMillis + preset.scene.fadeInMillis && timeMillis > sceneStartMillis) {\n // Scene fades in\n intensityPercentageScene = (timeMillis - sceneStartMillis) / preset.scene.fadeInMillis;\n }\n }\n\n if (preset.region && preset.preset) {\n // Take away intensity for preset fading\n let presetStartMillis =\n preset.preset.startMillis === undefined ? preset.region.startMillis : preset.region.startMillis + preset.preset.startMillis;\n\n let presetEndMillis =\n preset.preset.endMillis === undefined ? preset.region.endMillis : preset.region.startMillis + preset.preset.endMillis;\n\n // extend the running time, if fading is done outside the boundaries\n presetStartMillis -= preset.preset.fadeInPre ? preset.preset.fadeInMillis : 0;\n presetEndMillis += preset.preset.fadeOutPost ? preset.preset.fadeOutMillis : 0;\n\n if (timeMillis > presetEndMillis - preset.preset.fadeOutMillis && timeMillis < presetEndMillis) {\n // Preset fades out\n intensityPercentagePreset = (presetEndMillis - timeMillis) / preset.preset.fadeOutMillis;\n } else if (timeMillis < presetStartMillis + preset.preset.fadeInMillis && timeMillis > presetStartMillis) {\n // Preset fades in\n intensityPercentagePreset = (timeMillis - presetStartMillis) / preset.preset.fadeInMillis;\n }\n\n intensityPercentage = intensityPercentageScene * intensityPercentagePreset;\n }\n\n return intensityPercentage;\n }\n\n private mixCapabilityValues(\n preset: PresetRegionScene,\n cachedFixture: CachedFixture,\n values: FixtureChannelValue[],\n intensityPercentage: number\n ) {\n let hasColor = false;\n\n // mix the preset capability values\n for (const presetCapabilityValue of preset.preset.fixtureCapabilityValues) {\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.channel) {\n for (const channelCapability of cachedChannel.capabilities) {\n if (\n this.fixtureService.capabilitiesMatch(\n presetCapabilityValue.type,\n channelCapability.capability.type,\n presetCapabilityValue.color,\n channelCapability.capability.color,\n presetCapabilityValue.wheel,\n channelCapability.wheelName,\n presetCapabilityValue.profileUuid,\n cachedFixture.profile.uuid\n )\n ) {\n // the capabilities match -> apply the value, if possible\n if (\n (presetCapabilityValue.type === FixtureCapabilityType.Intensity ||\n presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) &&\n presetCapabilityValue.valuePercentage >= 0\n ) {\n // intensity and colorIntensity (dimmer and color)\n const valuePercentage = presetCapabilityValue.valuePercentage;\n const defaultValue = 0;\n\n // brightness property\n if (cachedChannel.capabilities.length === 1) {\n // the only capability in this channel\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * valuePercentage;\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage, defaultValue);\n\n if (presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) {\n hasColor = true;\n }\n } else {\n // more than one capability in the channel\n if (channelCapability.capability.brightness === 'off' && valuePercentage === 0) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = channelCapability.centerValue;\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage, defaultValue);\n\n if (presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) {\n hasColor = true;\n }\n } else if (\n (channelCapability.capability.brightnessStart === 'dark' || channelCapability.capability.brightnessStart === 'off') &&\n channelCapability.capability.brightnessEnd === 'bright'\n ) {\n const value =\n (channelCapability.capability.dmxRange[1] - channelCapability.capability.dmxRange[0]) * valuePercentage +\n channelCapability.capability.dmxRange[0];\n\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = value;\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage, defaultValue);\n\n if (presetCapabilityValue.type === FixtureCapabilityType.ColorIntensity) {\n hasColor = true;\n }\n }\n }\n } else if (\n (presetCapabilityValue.type === FixtureCapabilityType.Pan || presetCapabilityValue.type === FixtureCapabilityType.Tilt) &&\n presetCapabilityValue.valuePercentage >= 0\n ) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * presetCapabilityValue.valuePercentage;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n } else if (\n presetCapabilityValue.type === FixtureCapabilityType.WheelSlot &&\n channelCapability.capability.slotNumber === presetCapabilityValue.slotNumber\n ) {\n // wheel slot (color, gobo, etc.)\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = channelCapability.centerValue;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n\n // check, whether we just set a color wheel value\n if (channelCapability.wheelIsColor) {\n hasColor = true;\n }\n }\n }\n }\n }\n\n // approximate the color from a color or a different color wheel, if necessary\n if (!hasColor && cachedChannel.colorWheel) {\n const capability = this.presetService.getApproximatedColorWheelCapability(preset.preset, cachedChannel);\n\n if (capability) {\n // we found an approximated color in the available wheel channel\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = capability.centerValue;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n }\n }\n }\n }\n }\n\n private mixChannelValues(\n preset: PresetRegionScene,\n cachedFixture: CachedFixture,\n values: FixtureChannelValue[],\n intensityPercentage: number\n ) {\n // mix the preset channel values\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.channel) {\n for (const channelValue of preset.preset.fixtureChannelValues) {\n if (cachedFixture.profile.uuid === channelValue.profileUuid && cachedChannel.name === channelValue.channelName) {\n this.mixChannelValue(values, channelValue, intensityPercentage);\n }\n }\n }\n }\n }\n\n private mixEffects(\n timeMillis: number,\n fixtureIndex: number,\n preset: PresetRegionScene,\n cachedFixture: CachedFixture,\n values: FixtureChannelValue[],\n intensityPercentage: number\n ) {\n for (const effect of preset.preset.effects) {\n if (effect.visible) {\n // EffectCurve\n if (effect instanceof EffectCurve) {\n const effectCurve = effect as EffectCurve;\n\n // capabilities\n for (const capability of effectCurve.capabilities) {\n for (const cachedChannel of cachedFixture.channels) {\n for (const channelCapability of cachedChannel.capabilities) {\n if (\n this.fixtureService.capabilitiesMatch(\n capability.type,\n channelCapability.capability.type,\n capability.color,\n channelCapability.capability.color,\n null,\n null,\n null,\n null\n )\n ) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * effectCurve.getValueAtMillis(timeMillis, fixtureIndex);\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage);\n }\n }\n }\n }\n\n // channels\n for (const channelProfile of effectCurve.channels) {\n if (channelProfile.profileUuid === cachedFixture.profile.uuid) {\n for (const channel of channelProfile.channels) {\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.name === channel) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.maxValue * effectCurve.getValueAtMillis(timeMillis, fixtureIndex);\n this.mixChannelValue(values, fixtureChannelValue, intensityPercentage);\n }\n }\n }\n\n break;\n }\n }\n }\n\n // TODO other effects (PanTilt, etc.)\n }\n }\n }\n\n // return all fixture uuids with their corresponding channel values\n public getChannelValues(timeMillis: number, presets: PresetRegionScene[]): Map<CachedFixture, FixtureChannelValue[]> {\n // Loop over all relevant presets and calc the property values from the presets (capabilities and effects)\n const calculatedFixtures = new Map<CachedFixture, FixtureChannelValue[]>();\n\n for (let i = 0; i < this.fixtureService.cachedFixtures.length; i++) {\n const cachedFixture = this.fixtureService.cachedFixtures[i];\n\n // all values of the current fixture channels\n let values: FixtureChannelValue[] = [];\n\n const alreadyCalculatedFixture = this.getAlreadyCalculatedFixture(this.fixtureService.cachedFixtures, i);\n\n if (alreadyCalculatedFixture) {\n // only relevant for the preview --> reuse all calculated values\n values = Object.assign([], calculatedFixtures.get(alreadyCalculatedFixture));\n } else {\n // apply the default values\n for (const cachedChannel of cachedFixture.channels) {\n if (cachedChannel.channel) {\n if (cachedChannel.channel.defaultValue) {\n const fixtureChannelValue = new FixtureChannelValue();\n fixtureChannelValue.channelName = cachedChannel.name;\n fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;\n fixtureChannelValue.value = cachedChannel.defaultValue;\n this.mixChannelValue(values, fixtureChannelValue, 1);\n }\n }\n }\n\n for (const preset of presets) {\n // search for this fixture in the preset and get it's preset-specific index (for chasing effects)\n const fixtureIndex = this.getFixtureIndex(preset.preset, cachedFixture.fixture.uuid);\n\n if (fixtureIndex >= 0) {\n // this fixture is also in the preset -> mix the required values (overwrite existing values,\n // if set multiple times)\n const intensityPercentage = this.getPresetIntensity(preset, timeMillis);\n\n this.mixCapabilityValues(preset, cachedFixture, values, intensityPercentage);\n this.mixChannelValues(preset, cachedFixture, values, intensityPercentage);\n this.mixEffects(timeMillis, fixtureIndex, preset, cachedFixture, values, intensityPercentage);\n }\n }\n }\n\n // Store the calculated values for subsequent fixtures on the same DMX address\n calculatedFixtures.set(cachedFixture, values);\n }\n\n return calculatedFixtures;\n }\n\n public setUniverseValues(fixtures: Map<CachedFixture, FixtureChannelValue[]>, masterDimmerValue: number) {\n // TODO only, if monitoring is enabled\n return;\n\n // Reset all DMX universes\n for (const universe of this.universeService.universes) {\n universe.channelValues = [];\n for (let i = 0; i < 512; i++) {\n universe.channelValues.push(0);\n }\n }\n\n // loop over each fixture\n fixtures.forEach((channelValues: FixtureChannelValue[], cachedFixture: CachedFixture) => {\n // TODO Get the correct universe for this fixture\n const universe: Universe = this.universeService.getUniverseByUuid(cachedFixture.fixture.dmxUniverseUuid);\n\n // loop over each channel for this fixture\n for (let channelIndex = 0; channelIndex < cachedFixture.mode.channels.length; channelIndex++) {\n const channelObj = cachedFixture.mode.channels[channelIndex];\n if (typeof channelObj === 'string') {\n const channelName = channelObj;\n // match this mode channel with a channel value\n for (const channelValue of channelValues) {\n const channel = this.fixtureService.getChannelByName(cachedFixture, channelName);\n if (channel && channel.channel) {\n const fineIndex = channel.channel.fineChannelAliases.indexOf(channelName);\n if (channel.name === channelValue.channelName || fineIndex > -1) {\n const universeChannel = cachedFixture.fixture.dmxFirstChannel + channelIndex;\n const dmxValue =\n Math.floor(channelValue.value / Math.pow(256, channel.channel.fineChannelAliases.length - (fineIndex + 1))) % 256;\n // TODO\n break;\n }\n }\n }\n }\n }\n });\n }\n\n public fixtureIsSelected(uuid: string, presets: PresetRegionScene[]): boolean {\n for (const preset of presets) {\n for (const fixtureUuid of preset.preset.fixtureUuids) {\n if (fixtureUuid === uuid) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n public updateFixtureSetup() {\n this.doUpdateFixtureSetup.next();\n }\n\n public updateStage() {\n if (!this.scene) {\n return;\n }\n\n let geometry: any;\n let mesh: any;\n\n // Remove old meshes from the scene\n for (const existingMesh of this.stageMeshes) {\n this.scene.remove(existingMesh);\n existingMesh.geometry.dispose();\n }\n this.stageMeshes = [];\n\n // Floor\n geometry = new THREE.BoxBufferGeometry(\n this.projectService.project.stageWidthCm,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm\n );\n mesh = new THREE.Mesh(geometry.clone(), this.stageMaterial);\n mesh.receiveShadow = false;\n mesh.castShadow = false;\n mesh.position.set(0, this.projectService.project.stageFloorHeightCm / 2, 0);\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar front left\n geometry = new THREE.BoxBufferGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry.clone(), this.stageMaterial);\n mesh.receiveShadow = false;\n mesh.castShadow = false;\n mesh.position.set(\n -this.projectService.project.stageWidthCm / 2 + this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar front right\n geometry = new THREE.BoxBufferGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry.clone(), this.stageMaterial);\n mesh.receiveShadow = false;\n mesh.castShadow = false;\n mesh.position.set(\n this.projectService.project.stageWidthCm / 2 - this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar back left\n geometry = new THREE.BoxBufferGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry.clone(), this.stageMaterial);\n mesh.receiveShadow = false;\n mesh.castShadow = false;\n mesh.position.set(\n -this.projectService.project.stageWidthCm / 2 + this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Pillar back right\n geometry = new THREE.BoxBufferGeometry(\n this.projectService.project.stagePillarWidthCm,\n this.projectService.project.stageHeightCm,\n this.projectService.project.stagePillarWidthCm\n );\n mesh = new THREE.Mesh(geometry.clone(), this.stageMaterial);\n mesh.receiveShadow = false;\n mesh.castShadow = false;\n mesh.position.set(\n this.projectService.project.stageWidthCm / 2 - this.projectService.project.stagePillarWidthCm / 2,\n this.projectService.project.stageHeightCm / 2 + this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + this.projectService.project.stagePillarWidthCm / 2\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n\n // Ceiling\n geometry = new THREE.BoxBufferGeometry(\n this.projectService.project.stageWidthCm,\n this.projectService.project.stageCeilingHeightCm,\n this.projectService.project.stageDepthCm\n );\n mesh = new THREE.Mesh(geometry.clone(), this.stageMaterial);\n mesh.receiveShadow = false;\n mesh.castShadow = false;\n mesh.position.set(\n 0,\n this.projectService.project.stageHeightCm +\n this.projectService.project.stageCeilingHeightCm / 2 +\n this.projectService.project.stageFloorHeightCm,\n 0\n );\n this.scene.add(mesh);\n this.stageMeshes.push(mesh);\n }\n}\n","import * as THREE from 'three';\nimport { CachedFixture } from '../../models/cached-fixture';\nimport { CachedFixtureCapability } from '../../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { Positioning } from '../../models/fixture';\nimport { FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixture-capability';\nimport { FixtureChannelValue } from '../../models/fixture-channel-value';\nimport { FixtureService } from '../../services/fixture.service';\n\nexport abstract class Fixture3d {\n fixture: CachedFixture;\n fixtureHasDimmer = false;\n fixtureHasColorWheel = false;\n fixtureHasColor = false;\n\n scene: any;\n\n colorRed: number;\n colorGreen: number;\n colorBlue: number;\n\n dimmer = 0;\n\n isSelected = false;\n isLoaded = false;\n\n protected selectedMaterial: THREE.MeshLambertMaterial;\n\n constructor(public fixtureService: FixtureService, fixture: CachedFixture, scene: any) {\n this.fixture = fixture;\n this.scene = scene;\n\n // TODO Don't create it for each fixture but pass it from the preview service\n this.selectedMaterial = new THREE.MeshLambertMaterial({\n color: 0xff00ff,\n emissive: 0xff00ff,\n });\n\n // evaluate, various capabilities of this fixture\n for (const cachedChannel of this.fixture.channels) {\n if (cachedChannel.channel) {\n for (const capability of cachedChannel.capabilities) {\n switch (capability.capability.type) {\n case FixtureCapabilityType.Intensity:\n this.fixtureHasDimmer = true;\n break;\n case FixtureCapabilityType.ColorIntensity:\n this.fixtureHasColor = true;\n break;\n }\n }\n\n if (cachedChannel.colorWheel) {\n this.fixtureHasColorWheel = true;\n }\n }\n }\n }\n\n protected getCapabilityInValue(channel: CachedFixtureChannel, value: number): CachedFixtureCapability {\n for (const capability of channel.capabilities) {\n if (\n capability.capability.dmxRange.length === 0 ||\n (value >= capability.capability.dmxRange[0] && value <= capability.capability.dmxRange[1])\n ) {\n return capability;\n }\n }\n\n return undefined;\n }\n\n // Apply the properties of the base fixture to the preview\n updatePreview(channelValues: FixtureChannelValue[], masterDimmerValue: number) {\n // Apply default settings\n if (this.fixtureHasDimmer) {\n this.dimmer = 0;\n } else {\n this.dimmer = 1;\n }\n\n this.colorRed = 255;\n this.colorGreen = 255;\n this.colorBlue = 255;\n\n if (!this.fixtureHasColorWheel && this.fixtureHasColor) {\n this.colorRed = 0;\n this.colorGreen = 0;\n this.colorBlue = 0;\n }\n\n for (const channelValue of channelValues) {\n const channel = this.fixtureService.getChannelByName(this.fixture, channelValue.channelName);\n const capability = this.getCapabilityInValue(channel, channelValue.value);\n\n if (capability) {\n switch (capability.capability.type) {\n case FixtureCapabilityType.Intensity: {\n let valuePercentage: number;\n if (capability.capability.dmxRange.length > 0) {\n valuePercentage =\n (channelValue.value - capability.capability.dmxRange[0]) /\n (capability.capability.dmxRange[1] - capability.capability.dmxRange[0]);\n } else {\n valuePercentage = channelValue.value / channel.maxValue;\n }\n this.dimmer = valuePercentage * masterDimmerValue;\n break;\n }\n case FixtureCapabilityType.ColorIntensity: {\n const valuePercentage = (255 * channelValue.value) / channel.maxValue;\n switch (capability.capability.color) {\n case FixtureCapabilityColor.Red:\n // Round needed for threejs\n this.colorRed = Math.round(valuePercentage);\n break;\n case FixtureCapabilityColor.Green:\n // Round needed for threejs\n this.colorGreen = Math.round(valuePercentage);\n break;\n case FixtureCapabilityColor.Blue:\n // Round needed for threejs\n this.colorBlue = Math.round(valuePercentage);\n break;\n }\n break;\n }\n case FixtureCapabilityType.WheelSlot: {\n const mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);\n if (mixedColor) {\n this.colorRed = Math.round(mixedColor.red);\n this.colorGreen = Math.round(mixedColor.green);\n this.colorBlue = Math.round(mixedColor.blue);\n }\n break;\n }\n }\n }\n }\n }\n\n updatePosition(object: THREE.Object3D) {\n // Update the position\n switch (this.fixture.fixture.positioning) {\n case Positioning.topFront: {\n object.rotation.x = THREE.Math.degToRad(0);\n object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.bottomFront: {\n object.rotation.x = THREE.Math.degToRad(180);\n object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.topBack: {\n object.rotation.x = THREE.Math.degToRad(0);\n object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY - 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.bottomBack: {\n object.rotation.x = THREE.Math.degToRad(180);\n object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY + 13, this.fixture.fixture.positionZ);\n break;\n }\n case Positioning.manual: {\n object.position.set(this.fixture.fixture.positionX, this.fixture.fixture.positionY, this.fixture.fixture.positionZ);\n object.rotation.x = THREE.Math.degToRad(this.fixture.fixture.rotationX);\n object.rotation.y = THREE.Math.degToRad(this.fixture.fixture.rotationY);\n object.rotation.z = THREE.Math.degToRad(this.fixture.fixture.rotationZ);\n break;\n }\n }\n }\n\n destroy() {\n this.selectedMaterial.dispose();\n }\n}\n","import { forkJoin } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport * as THREE from 'three';\nimport { Mesh } from 'three';\nimport { CachedFixture } from '../../models/cached-fixture';\nimport { FixtureChannelValue } from '../../models/fixture-channel-value';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PreviewMeshService } from '../../services/preview-mesh.service';\nimport { Fixture3d } from './fixture-3d';\n\nexport class ColorChanger3d extends Fixture3d {\n private readonly pointLightMaxIntensity: number = 2;\n private readonly spotLightMaxIntensity: number = 5;\n\n private mesh: THREE.Mesh;\n\n private objectGroup: THREE.Object3D = new THREE.Object3D();\n private spotlightGroup: THREE.Object3D = new THREE.Object3D();\n private spotLight: THREE.SpotLight;\n private spotLightHelper: THREE.SpotLightHelper;\n private spotLightBeam: THREE.Mesh;\n\n private pointLight: THREE.PointLight;\n\n private lastSelected: boolean;\n\n private material: THREE.MeshStandardMaterial;\n private atmosphereMaterial: THREE.ShaderMaterial;\n\n private atmosphereMat() {\n const vertexShader = [\n 'varying vec3\tvVertexWorldPosition;',\n 'varying vec3\tvVertexNormal;',\n\n 'void main(){',\n '\tvVertexNormal = normalize(normalMatrix * normal);',\n\n '\tvVertexWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;',\n\n '\t// set gl_Position',\n '\tgl_Position\t= projectionMatrix * modelViewMatrix * vec4(position, 1.0);',\n '}',\n ].join('\\n');\n const fragmentShader = [\n 'uniform vec3\tglowColor;',\n 'uniform float\tcoeficient;',\n 'uniform float\tpower;',\n 'uniform float\topacity;',\n\n 'varying vec3\tvVertexNormal;',\n 'varying vec3\tvVertexWorldPosition;',\n\n 'void main(){',\n '\tvec3 worldCameraToVertex= vVertexWorldPosition - cameraPosition;',\n '\tvec3 viewCameraToVertex\t= (viewMatrix * vec4(worldCameraToVertex, 0.0)).xyz;',\n '\tviewCameraToVertex\t= normalize(viewCameraToVertex);',\n '\tfloat intensity\t\t= pow(coeficient + dot(vVertexNormal, viewCameraToVertex), power);',\n '\tgl_FragColor\t\t= vec4(glowColor, intensity * opacity);',\n '}',\n ].join('\\n');\n\n // create custom material from the shader code above\n // that is within specially labeled script tags\n const material = new THREE.ShaderMaterial({\n uniforms: {\n coeficient: {\n type: 'f',\n value: 0.3,\n },\n power: {\n type: 'f',\n value: 1.3,\n },\n opacity: {\n type: 'f',\n value: 1.0,\n },\n glowColor: {\n type: 'c',\n value: new THREE.Color('white'),\n },\n },\n vertexShader,\n fragmentShader,\n // blending: THREE.AdditiveBlending,\n transparent: true,\n depthWrite: false,\n });\n\n return material;\n }\n\n private createSpotLightBeam() {\n if (this.spotLightBeam) {\n this.spotlightGroup.remove(this.spotLightBeam);\n }\n\n // TODO update the correct angle from the profile\n const beamAngleDegrees = 14;\n const geometry = new THREE.CylinderGeometry(0.8, beamAngleDegrees * 1.2, 100, 64, 20, false);\n geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));\n geometry.applyMatrix(new THREE.Matrix4().makeRotationX(-Math.PI / 2));\n\n this.atmosphereMaterial = this.atmosphereMat();\n this.spotLightBeam = new THREE.Mesh(geometry, this.atmosphereMaterial);\n this.spotLightBeam.position.set(0, -0.02, 0);\n\n this.spotlightGroup.add(this.spotLightBeam);\n this.spotLightBeam.rotation.x = Math.PI / 2;\n }\n\n private createObjects() {\n (this.material as any) = new THREE.MeshLambertMaterial({\n color: 0x0d0d0d,\n emissive: 0x0d0d0d,\n });\n\n this.mesh.material = this.material;\n\n // Add the spotlight\n this.spotLight = new THREE.SpotLight(0xffffff, 1);\n this.spotLight.angle = 0.244;\n this.spotLight.penumbra = 0.5;\n this.spotLight.decay = 2;\n this.spotLight.distance = 60000;\n this.spotLight.castShadow = false;\n this.spotLight.intensity = 10;\n\n this.spotLightHelper = new THREE.SpotLightHelper(this.spotLight);\n // scene.add(this.spotLightHelper);\n\n const spotLightTarget = new THREE.Object3D();\n this.spotLight.target = spotLightTarget;\n\n this.spotlightGroup.add(this.spotLight);\n this.spotlightGroup.add(spotLightTarget);\n this.spotLight.position.set(0, -1.4, 0);\n spotLightTarget.position.set(0, -10, 0);\n\n // Add the point light for the surrounding light\n this.pointLight = new THREE.PointLight(0xffffff, 2, 1000);\n this.spotlightGroup.add(this.pointLight);\n this.pointLight.position.set(0, -1.4, 0);\n\n // Add the light beam\n this.createSpotLightBeam();\n\n this.objectGroup.add(this.spotlightGroup);\n this.objectGroup.add(this.mesh);\n\n // A moving head has about 32 cm in width\n this.objectGroup.scale.multiplyScalar(9);\n\n this.scene.add(this.objectGroup);\n\n this.isLoaded = true;\n }\n\n constructor(fixtureService: FixtureService, previewMeshService: PreviewMeshService, fixture: CachedFixture, scene: any) {\n super(fixtureService, fixture, scene);\n\n forkJoin([previewMeshService.getMesh('color-changer')])\n .pipe(\n map(([colorChanger]) => {\n this.mesh = colorChanger;\n\n this.createObjects();\n })\n )\n .subscribe();\n }\n\n public getObject(): THREE.Object3D {\n return this.objectGroup;\n }\n\n public updatePreview(channelValues: FixtureChannelValue[], masterDimmerValue: number): void {\n super.updatePreview(channelValues, masterDimmerValue);\n\n if (!this.isLoaded) {\n return;\n }\n\n this.updatePosition(this.objectGroup);\n\n // Update the material\n if (this.lastSelected !== this.isSelected) {\n if (this.isSelected) {\n for (const child of this.mesh.children) {\n (child as Mesh).material = this.selectedMaterial;\n }\n } else {\n for (const child of this.mesh.children) {\n (child as Mesh).material = this.material;\n }\n }\n\n this.lastSelected = this.isSelected;\n }\n\n // Update the light helpers\n this.spotLightHelper.update();\n\n // Apply the colors\n const color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');\n\n this.pointLight.color = color;\n\n this.spotLight.color = color;\n (this.spotLightBeam.material as any).uniforms.glowColor.value = color;\n\n // Apply the dimmer value\n // Take the color into account for the beam (don't show a black beam)\n const intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);\n (this.spotLightBeam.material as any).uniforms.opacity.value = Math.min(intensityColor, this.dimmer) * 0.5;\n\n this.spotLight.intensity = this.spotLightMaxIntensity * this.dimmer;\n this.pointLight.intensity = this.pointLightMaxIntensity * this.dimmer;\n }\n\n destroy() {\n this.scene.remove(this.objectGroup);\n this.material.dispose();\n this.atmosphereMaterial.dispose();\n }\n}\n","import { forkJoin } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport * as THREE from 'three';\nimport { CachedFixture } from '../../models/cached-fixture';\nimport { FixtureCapabilityType } from '../../models/fixture-capability';\nimport { FixtureChannelValue } from '../../models/fixture-channel-value';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PreviewMeshService } from '../../services/preview-mesh.service';\nimport { Fixture3d } from './fixture-3d';\n\nexport class MovingHead3d extends Fixture3d {\n private readonly pointLightMaxIntensity: number = 2;\n private readonly spotLightLightMaxIntensity: number = 10;\n\n private pan: number;\n private tilt: number;\n\n private socket: THREE.Mesh;\n private arm: THREE.Mesh;\n private head: THREE.Mesh;\n\n private headGroup: THREE.Object3D = new THREE.Object3D();\n private spotlightGroup: THREE.Object3D = new THREE.Object3D();\n private armGroup: THREE.Object3D = new THREE.Object3D();\n private objectGroup: THREE.Object3D = new THREE.Object3D();\n private spotLight: THREE.SpotLight;\n private spotLightHelper: THREE.SpotLightHelper;\n private spotLightBeam: THREE.Mesh;\n\n private pointLight: THREE.PointLight;\n\n private lastBeamAngleDegrees: number;\n private lastSelected: boolean;\n\n private material: THREE.MeshStandardMaterial;\n private atmosphereMaterial: THREE.ShaderMaterial;\n\n private atmosphereMat() {\n const vertexShader = [\n 'varying vec3\tvVertexWorldPosition;',\n 'varying vec3\tvVertexNormal;',\n\n 'void main(){',\n '\tvVertexNormal = normalize(normalMatrix * normal);',\n\n '\tvVertexWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;',\n\n '\t// set gl_Position',\n '\tgl_Position\t= projectionMatrix * modelViewMatrix * vec4(position, 1.0);',\n '}',\n ].join('\\n');\n const fragmentShader = [\n 'uniform vec3\tglowColor;',\n 'uniform float\tcoeficient;',\n 'uniform float\tpower;',\n 'uniform float\topacity;',\n\n 'varying vec3\tvVertexNormal;',\n 'varying vec3\tvVertexWorldPosition;',\n\n 'void main(){',\n '\tvec3 worldCameraToVertex= vVertexWorldPosition - cameraPosition;',\n '\tvec3 viewCameraToVertex\t= (viewMatrix * vec4(worldCameraToVertex, 0.0)).xyz;',\n '\tviewCameraToVertex\t= normalize(viewCameraToVertex);',\n '\tfloat intensity\t\t= pow(coeficient + dot(vVertexNormal, viewCameraToVertex), power);',\n '\tgl_FragColor\t\t= vec4(glowColor, intensity * opacity);',\n '}',\n ].join('\\n');\n\n // create custom material from the shader code above\n // that is within specially labeled script tags\n const material = new THREE.ShaderMaterial({\n uniforms: {\n coeficient: {\n type: 'f',\n value: 0.3,\n },\n power: {\n type: 'f',\n value: 1.3,\n },\n opacity: {\n type: 'f',\n value: 1.0,\n },\n glowColor: {\n type: 'c',\n value: new THREE.Color('white'),\n },\n },\n vertexShader,\n fragmentShader,\n // blending: THREE.AdditiveBlending,\n transparent: true,\n depthWrite: false,\n });\n\n return material;\n }\n\n private createSpotLightBeam() {\n if (this.spotLightBeam) {\n this.spotlightGroup.remove(this.spotLightBeam);\n }\n\n // TODO update the correct angle from the profile\n const beamAngleDegrees = 14;\n const geometry = new THREE.CylinderGeometry(0.1, beamAngleDegrees * 1.2, 100, 64, 20, false);\n geometry.applyMatrix(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));\n geometry.applyMatrix(new THREE.Matrix4().makeRotationX(-Math.PI / 2));\n\n // var zrak_mat = new THREE.MeshBasicMaterial({ color: 0xffffff, blending: THREE.AdditiveBlending, opacity: 0.1 });\n\n this.atmosphereMaterial = this.atmosphereMat();\n this.spotLightBeam = new THREE.Mesh(geometry, this.atmosphereMaterial);\n this.spotLightBeam.position.set(0, -0.02, 0);\n\n this.spotlightGroup.add(this.spotLightBeam);\n this.spotLightBeam.rotation.x = Math.PI / 2;\n }\n\n private createObjects() {\n (this.material as any) = new THREE.MeshLambertMaterial({\n color: 0x0d0d0d,\n emissive: 0x0d0d0d,\n });\n\n this.socket.material = this.material;\n this.arm.material = this.material;\n this.head.material = this.material;\n\n // Add the head\n this.head.scale.multiplyScalar(0.9);\n this.head.position.set(-0.1, 0, 0);\n const headPivotGroup = new THREE.Object3D();\n headPivotGroup.add(this.head);\n this.headGroup.add(headPivotGroup);\n\n // Add the spotlight\n this.spotLight = new THREE.SpotLight(0xffffff, 1);\n this.spotLight.angle = 0.244;\n this.spotLight.penumbra = 0.5;\n this.spotLight.decay = 2;\n this.spotLight.distance = 60000;\n this.spotLight.castShadow = false;\n this.spotLight.intensity = 10;\n\n this.spotLightHelper = new THREE.SpotLightHelper(this.spotLight);\n // scene.add(this.spotLightHelper);\n\n const spotLightTarget = new THREE.Object3D();\n this.spotLight.target = spotLightTarget;\n\n this.spotlightGroup.add(this.spotLight);\n this.spotlightGroup.add(spotLightTarget);\n this.spotLight.position.set(0, -1.4, 0);\n spotLightTarget.position.set(0, -10, 0);\n\n // Add the point light for the surrounding light\n this.pointLight = new THREE.PointLight(0xffffff, 2, 1000);\n this.spotlightGroup.add(this.pointLight);\n this.pointLight.position.set(0, -1.4, 0);\n\n // Add the light beam\n this.createSpotLightBeam();\n\n this.headGroup.add(this.spotlightGroup);\n\n // Add the arm\n this.armGroup.add(this.headGroup);\n this.headGroup.position.set(0, -0.6, 0);\n this.armGroup.add(this.arm);\n\n // Add the socket\n this.objectGroup.add(this.armGroup);\n this.objectGroup.add(this.socket);\n this.socket.position.set(0, 1.2, 0);\n\n // A moving head has about 32 cm in width\n this.objectGroup.scale.multiplyScalar(9);\n\n this.scene.add(this.objectGroup);\n\n this.isLoaded = true;\n }\n\n constructor(fixtureService: FixtureService, previewMeshService: PreviewMeshService, fixture: CachedFixture, scene: any) {\n super(fixtureService, fixture, scene);\n\n forkJoin([\n previewMeshService.getMesh('moving_head_socket'),\n previewMeshService.getMesh('moving_head_arm'),\n previewMeshService.getMesh('moving_head_head'),\n ])\n .pipe(\n map(([socket, arm, head]) => {\n this.socket = socket;\n this.arm = arm;\n this.head = head;\n\n this.createObjects();\n })\n )\n .subscribe();\n }\n\n public getObject(): THREE.Object3D {\n return this.objectGroup;\n }\n\n public updatePreview(channelValues: FixtureChannelValue[], masterDimmerValue: number): void {\n super.updatePreview(channelValues, masterDimmerValue);\n\n if (!this.isLoaded) {\n return;\n }\n\n // Apply default settings\n let panStart = 0;\n let panEnd = 255;\n\n let tiltStart = 0;\n let tiltEnd = 255;\n\n this.pan = 0;\n this.tilt = 0;\n\n // Apply the known property values\n for (const channelValue of channelValues) {\n const channel = this.fixtureService.getChannelByName(this.fixture, channelValue.channelName);\n const capability = this.getCapabilityInValue(channel, channelValue.value);\n if (capability) {\n switch (capability.capability.type) {\n case FixtureCapabilityType.Pan: {\n panStart = this.fixtureService.getRotationAngleDeg(capability.capability.angleStart) || 0;\n panEnd = this.fixtureService.getRotationAngleDeg(capability.capability.angleEnd) || 540;\n this.pan = channelValue.value / channel.maxValue;\n break;\n }\n case FixtureCapabilityType.Tilt: {\n tiltStart = this.fixtureService.getRotationAngleDeg(capability.capability.angleStart) || 0;\n tiltEnd = this.fixtureService.getRotationAngleDeg(capability.capability.angleEnd) || 2700;\n this.tilt = channelValue.value / channel.maxValue;\n break;\n }\n }\n }\n }\n\n this.updatePosition(this.objectGroup);\n\n // calculate the y/x rotation in radiants based on pan/tilt (0-1) respecting the max pan/tilt\n this.armGroup.rotation.y = THREE.Math.degToRad(panEnd * this.pan + panStart) - THREE.Math.degToRad(panEnd / 2);\n this.headGroup.rotation.x = THREE.Math.degToRad(tiltEnd * this.tilt + tiltStart) - THREE.Math.degToRad(tiltEnd / 2);\n\n // Update the angle (only on change, because it's expensive)\n // TODO update the correct angle from the profile\n const beamAngleDregrees = 14;\n if (this.lastBeamAngleDegrees !== beamAngleDregrees) {\n this.spotLight.angle = THREE.Math.degToRad(beamAngleDregrees);\n this.createSpotLightBeam();\n this.lastBeamAngleDegrees = beamAngleDregrees;\n }\n\n // Update the material\n if (this.lastSelected !== this.isSelected) {\n if (this.isSelected) {\n this.socket.material = this.selectedMaterial;\n this.arm.material = this.selectedMaterial;\n this.head.material = this.selectedMaterial;\n } else {\n this.socket.material = this.material;\n this.arm.material = this.material;\n this.head.material = this.material;\n }\n\n this.lastSelected = this.isSelected;\n }\n\n // Update the light helpers\n this.spotLightHelper.update();\n\n // Apply the colors\n const color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');\n\n this.pointLight.color = color;\n\n this.spotLight.color = color;\n (this.spotLightBeam.material as any).uniforms.glowColor.value = color;\n\n // Apply the dimmer value\n // Take the color into account for the beam (don't show a black beam)\n const intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);\n (this.spotLightBeam.material as any).uniforms.opacity.value = Math.min(intensityColor, this.dimmer);\n\n this.spotLight.intensity = this.spotLightLightMaxIntensity * this.dimmer;\n this.pointLight.intensity = this.pointLightMaxIntensity * this.dimmer;\n\n // this.spotLightBeam.material.uniforms.viewVector.value =\n // new THREE.Vector3().subVectors(this.camera.position, this.spotLightBeam.position);\n }\n\n destroy() {\n this.scene.remove(this.objectGroup);\n this.material.dispose();\n this.atmosphereMaterial.dispose();\n }\n}\n","import { AfterViewInit, Component, ElementRef, HostListener, ViewChild } from '@angular/core';\nimport * as THREE from 'three';\nimport STATS from 'three/examples/js/libs/stats.min';\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';\nimport { FixtureCategory } from '../models/fixture-profile';\nimport { FixtureService } from '../services/fixture.service';\nimport { PreviewMeshService } from '../services/preview-mesh.service';\nimport { PreviewService } from '../services/preview.service';\nimport { ProjectService } from '../services/project.service';\nimport { TimelineService } from '../services/timeline.service';\nimport { Positioning } from './../models/fixture';\nimport { AnimationService } from './../services/animation.service';\nimport { ColorChanger3d } from './models/color-changer-3d';\nimport { Fixture3d } from './models/fixture-3d';\nimport { MovingHead3d } from './models/moving-head-3d';\n\n@Component({\n selector: 'lib-app-preview',\n templateUrl: './preview.component.html',\n styleUrls: ['./preview.component.css'],\n})\nexport class PreviewComponent implements AfterViewInit {\n private renderer: THREE.WebGLRenderer;\n private scene: THREE.Scene;\n private camera: THREE.PerspectiveCamera;\n public controls: OrbitControls;\n\n private stats: any = STATS();\n // private rendererStats = new THREEx.RendererStats();\n\n private fixtures3d: Fixture3d[] = [];\n\n @ViewChild('canvas')\n private canvasRef: ElementRef;\n\n constructor(\n private fixtureService: FixtureService,\n private previewMeshService: PreviewMeshService,\n private animationService: AnimationService,\n private previewService: PreviewService,\n private timelineService: TimelineService,\n private projectService: ProjectService\n ) {\n this.previewService.doUpdateFixtureSetup.subscribe(() => {\n // synchronize the 3d-fixtures to the project fixtures\n this.syncFixtures();\n });\n }\n\n private syncFixtures() {\n // remove all fixtures\n for (const fixture3d of this.fixtures3d) {\n fixture3d.destroy();\n }\n this.fixtures3d = [];\n\n // add all fixtures from the project\n for (const fixture of this.fixtureService.cachedFixtures) {\n switch (fixture.profile.categories[0]) {\n case FixtureCategory['Moving Head']:\n this.fixtures3d.push(new MovingHead3d(this.fixtureService, this.previewMeshService, fixture, this.scene));\n break;\n case FixtureCategory['Color Changer']:\n this.fixtures3d.push(new ColorChanger3d(this.fixtureService, this.previewMeshService, fixture, this.scene));\n break;\n case FixtureCategory['Blinder']:\n this.fixtures3d.push(new ColorChanger3d(this.fixtureService, this.previewMeshService, fixture, this.scene));\n break;\n }\n }\n }\n\n private get canvas(): HTMLCanvasElement {\n return this.canvasRef.nativeElement;\n }\n\n private render() {\n this.renderer.render(this.scene, this.camera);\n }\n\n private updateStagePosition(\n positioning: Positioning,\n xMin: number,\n xMax: number,\n yMin: number,\n yMax: number,\n zMin: number,\n zMax: number\n ) {\n let positionCount = 0; // Number of fixtures in the same position\n let positionIndex = 1;\n\n this.projectService.project.fixtures.forEach((element, index) => {\n if (element.positioning === positioning) {\n positionCount++;\n }\n });\n\n this.projectService.project.fixtures.forEach((element, index) => {\n if (element.positioning === positioning) {\n element.positionX = xMin + ((xMax - xMin) / (positionCount + 1)) * positionIndex;\n element.positionY = yMin + ((yMax - yMin) / (positionCount + 1)) * positionIndex;\n element.positionZ = zMin + ((zMax - zMin) / (positionCount + 1)) * positionIndex;\n\n positionIndex++;\n }\n });\n }\n\n private animate(timeMillis: number) {\n this.stats.begin();\n\n if (this.timelineService.playState === 'playing') {\n // Overwrite the current time with the playing time, if we're in playback mode\n timeMillis = this.timelineService.waveSurfer.getCurrentTime() * 1000;\n }\n\n this.animationService.timeMillis = timeMillis;\n\n // Update the controls\n if (this.controls) {\n this.controls.update();\n }\n\n // Update the positions\n this.updateStagePosition(\n Positioning.topFront,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - 70,\n this.projectService.project.stageDepthCm / 2 - 70\n );\n this.updateStagePosition(\n Positioning.bottomFront,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageDepthCm / 2 - 70,\n this.projectService.project.stageDepthCm / 2 - 70\n );\n this.updateStagePosition(\n Positioning.topBack,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageHeightCm + this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + 70,\n -this.projectService.project.stageDepthCm / 2 + 70\n );\n this.updateStagePosition(\n Positioning.bottomBack,\n -this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageWidthCm / 2,\n this.projectService.project.stageFloorHeightCm,\n this.projectService.project.stageFloorHeightCm,\n -this.projectService.project.stageDepthCm / 2 + 70,\n -this.projectService.project.stageDepthCm / 2 + 70\n );\n\n // Update all fixtures and apply the preview properties, if available\n // TODO Update the fixtures only e.g. 40 times per second according to the \"real\" refresh rate of the DMX interface?\n const presets = this.previewService.getPresets(timeMillis);\n\n const calculatedFixtures = this.previewService.getChannelValues(timeMillis, presets);\n\n for (const fixture3d of this.fixtures3d) {\n // Update the fixture properties\n fixture3d.updatePreview(calculatedFixtures.get(fixture3d.fixture) || [], this.projectService.project.masterDimmerValue);\n\n // Select the fixture, if required\n if (this.fixtureService.settingsSelection) {\n fixture3d.isSelected = this.fixtureService.settingsFixtureIsSelected(fixture3d.fixture.fixture);\n } else {\n fixture3d.isSelected = this.previewService.fixtureIsSelected(fixture3d.fixture.fixture.uuid, presets);\n }\n }\n\n // TODO enable for monitoring the DMX universes\n this.previewService.setUniverseValues(calculatedFixtures, this.projectService.project.masterDimmerValue);\n\n // Update the statistics\n // this.rendererStats.update(this.renderer);\n\n // Render the scene\n this.render();\n\n this.stats.end();\n\n requestAnimationFrame(this.animate.bind(this));\n }\n\n private getAspectRatio(): number {\n const height = this.canvas.clientHeight;\n\n if (height === 0) {\n return 0;\n }\n\n return this.canvas.clientWidth / this.canvas.clientHeight;\n }\n\n @HostListener('window:resize')\n public onResize() {\n this.camera.aspect = this.getAspectRatio();\n this.camera.updateProjectionMatrix();\n this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);\n }\n\n private setupRenderer() {\n this.renderer = new THREE.WebGLRenderer({ antialias: true });\n this.canvas.appendChild(this.renderer.domElement);\n this.renderer.setPixelRatio(devicePixelRatio);\n this.renderer.setSize(this.canvas.clientWidth, this.canvas.clientHeight);\n this.renderer.shadowMap.enabled = false;\n this.renderer.gammaInput = true;\n this.renderer.gammaOutput = true;\n }\n\n private setupCamera() {\n this.camera = new THREE.PerspectiveCamera(35, window.innerWidth / window.innerHeight, 1, 10000);\n this.camera.position.set(-600, 80, 700);\n }\n\n private setupControls() {\n this.controls = new OrbitControls(this.camera, this.renderer.domElement);\n this.controls.enableKeys = false;\n this.controls.rotateSpeed = 0.05;\n this.controls.zoomSpeed = 1.2;\n this.controls.enableDamping = true;\n this.controls.dampingFactor = 0.25;\n this.controls.screenSpacePanning = false;\n this.controls.minDistance = 700;\n // this.controls.zoom = 1000;\n this.controls.maxDistance = 2000;\n this.controls.maxPolarAngle = Math.PI / 2;\n this.controls.target = new THREE.Vector3(0, 200, 0);\n // this.controls.rotation = 100;\n }\n\n private setupFloor() {\n const width = 4000;\n const height = 1;\n\n const geometry = new THREE.BoxGeometry(width, height, width);\n const material = new THREE.MeshStandardMaterial({ color: 0x0d0d0d });\n\n const floor = new THREE.Mesh(geometry.clone(), material);\n floor.receiveShadow = false;\n floor.castShadow = false;\n floor.position.set(0, -height / 2, 0);\n this.scene.add(floor);\n }\n\n private setupStats() {\n // this.rendererStats.domElement.style.position = 'absolute';\n // this.rendererStats.domElement.style.left = '0px';\n // this.rendererStats.domElement.style.bottom = '0px';\n // this.canvas.appendChild(this.rendererStats.domElement);\n\n this.stats.domElement.style.position = 'absolute';\n this.stats.domElement.style.left = '0px';\n this.canvas.appendChild(this.stats.domElement);\n }\n\n private setupScene() {\n // Create a new scene\n this.scene = new THREE.Scene();\n\n this.previewService.scene = this.scene;\n\n // Add a little bit of ambient light\n const ambient = new THREE.AmbientLight(0xffffff, 0.8);\n this.scene.add(ambient);\n\n // Add a floor\n this.setupFloor();\n\n // Create the stage dimensions\n this.previewService.updateStage();\n\n // TODO refine. background light in a color of the fixtures?\n const lights = [];\n lights[0] = new THREE.PointLight(0xffffff, 0.5, 0);\n lights[1] = new THREE.PointLight(0xffffff, 0.5, 0);\n lights[2] = new THREE.PointLight(0xffffff, 0.5, 0);\n\n lights[0].position.set(0, 2000, 0);\n lights[1].position.set(1000, 2000, 1000);\n lights[2].position.set(-1000, -2000, -1000);\n\n this.scene.add(lights[0]);\n this.scene.add(lights[1]);\n this.scene.add(lights[2]);\n\n // Create the stats\n this.setupStats();\n }\n\n ngAfterViewInit(): void {\n this.setupRenderer();\n this.setupCamera();\n this.setupControls();\n this.setupScene();\n\n this.onResize();\n this.animate(null);\n }\n}\n","import { Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'lib-wait-dialog',\n templateUrl: './wait-dialog.component.html',\n styleUrls: ['./wait-dialog.component.css'],\n})\nexport class WaitDialogComponent implements OnInit {\n constructor() {}\n\n ngOnInit() {}\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute, Params, Router } from '@angular/router';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { finalize, map } from 'rxjs/operators';\nimport { Preset } from '../models/preset';\nimport { Project } from '../models/project';\nimport { WaitDialogComponent } from '../wait-dialog/wait-dialog.component';\nimport { FixtureService } from './fixture.service';\nimport { PresetService } from './preset.service';\nimport { PreviewService } from './preview.service';\nimport { ProjectService } from './project.service';\nimport { SceneService } from './scene.service';\nimport { TimelineService } from './timeline.service';\nimport { UuidService } from './uuid.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ProjectLoadService {\n constructor(\n private projectService: ProjectService,\n private previewService: PreviewService,\n private fixtureService: FixtureService,\n private presetService: PresetService,\n private sceneService: SceneService,\n private modalService: BsModalService,\n private uuidService: UuidService,\n private timelineService: TimelineService,\n private router: Router,\n private activatedRoute: ActivatedRoute\n ) {}\n\n private afterLoad() {\n this.fixtureService.updateCachedFixtures();\n this.presetService.removeDeletedFixtures();\n this.previewService.updateFixtureSetup();\n this.presetService.fixtureSelectionChanged.next();\n this.presetService.autoOpenFirstEffect();\n this.previewService.updateStage();\n this.presetService.previewLive();\n this.sceneService.selectPresetFromSelectedScene();\n }\n\n private selectScenesPresetComposition() {\n this.presetService.selectedPreset = this.presetService.getPresetByUuid(this.projectService.project.selectedPresetUuid);\n this.sceneService.selectedScenes = [];\n if (this.projectService.project.selectedSceneUuids) {\n for (const uuid of this.projectService.project.selectedSceneUuids) {\n this.sceneService.selectedScenes.push(this.sceneService.getSceneByUuid(uuid));\n }\n }\n this.timelineService.selectedComposition = undefined;\n this.timelineService.selectedCompositionIndex = undefined;\n this.timelineService.destroyWaveSurfer();\n for (let i = 0; i < this.projectService.project.compositions.length; i++) {\n if (this.projectService.project.compositions[i].uuid === this.projectService.project.selectedCompositionUuid) {\n this.timelineService.selectCompositionIndex(i);\n break;\n }\n }\n }\n\n load(id: number, name: string, shareToken?: string): Observable<void> {\n const ref = this.modalService.show(WaitDialogComponent, { keyboard: false, ignoreBackdropClick: true });\n\n return this.projectService.getProject(id, name, shareToken).pipe(\n map((project) => {\n this.projectService.project = project;\n this.selectScenesPresetComposition();\n this.afterLoad();\n\n const queryParams: Params = {\n id,\n token: project.shareToken,\n };\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }),\n finalize(() => {\n // hide the modal again because of:\n // https://github.com/valor-software/ngx-bootstrap/issues/3711\n setTimeout(() => {\n ref.hide();\n }, 250);\n setTimeout(() => {\n ref.hide();\n }, 500);\n setTimeout(() => {\n ref.hide();\n }, 1500);\n })\n );\n }\n\n new() {\n // create an empty new project\n const project = new Project();\n project.uuid = this.uuidService.getUuid();\n this.projectService.project = project;\n this.projectService.project.shareToken = this.uuidService.getUuid();\n\n // Add a default scene and preset\n const preset = new Preset();\n preset.uuid = this.uuidService.getUuid();\n preset.name = 'New Preset';\n this.projectService.project.presets.push(preset);\n this.presetService.selectPreset(0);\n\n this.sceneService.addScene();\n this.projectService.project.scenes[0].presetUuids.push(preset.uuid);\n\n this.projectService.project.previewPreset = true;\n\n this.sceneService.selectedScenes = [this.projectService.project.scenes[0]];\n this.presetService.selectedPreset = this.projectService.project.presets[0];\n\n this.timelineService.selectedComposition = undefined;\n this.timelineService.selectedCompositionIndex = undefined;\n this.timelineService.destroyWaveSurfer();\n\n this.afterLoad();\n\n const queryParams: Params = {\n id: '',\n token: '',\n };\n this.router.navigate([], {\n relativeTo: this.activatedRoute,\n queryParams,\n queryParamsHandling: 'merge', // remove to replace all query params by provided\n });\n }\n\n template() {\n // load the template project with id 1\n this.load(1, null).subscribe(() => {\n this.projectService.project.id = undefined;\n });\n }\n\n import(data: string) {\n // import a project from a string\n const project = new Project(JSON.parse(data));\n project.id = undefined;\n this.projectService.project = project;\n\n this.selectScenesPresetComposition();\n this.afterLoad();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'lib-app-warning-dialog',\n templateUrl: './warning-dialog.component.html',\n styleUrls: ['./warning-dialog.component.scss'],\n})\nexport class WarningDialogComponent implements OnInit {\n onClose: Subject<number>;\n\n message: string;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.onClose = new Subject();\n }\n\n public ok(): void {\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n public cancel(): void {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { WarningDialogComponent } from '../warning-dialog/warning-dialog.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class WarningDialogService {\n constructor(private modalService: BsModalService, private translateService: TranslateService) {}\n\n // Show a warning dialog and return true, when the user clicked OK\n show(message: string): Observable<boolean> {\n return this.translateService.get(message).pipe(\n map((result) => {\n return result;\n }),\n mergeMap((result) => {\n const fileDialog = this.modalService.show(WarningDialogComponent, { keyboard: false, ignoreBackdropClick: true });\n (fileDialog.content as WarningDialogComponent).message = result;\n\n return (fileDialog.content as WarningDialogComponent).onClose.pipe(\n map((warningResult) => {\n if (warningResult === 1) {\n return true;\n }\n\n return false;\n })\n );\n })\n );\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../../models/project';\nimport { ConfigService } from '../../services/config.service';\nimport { ProjectLoadService } from '../../services/project-load.service';\nimport { ProjectService } from '../../services/project.service';\nimport { UserService } from '../../services/user.service';\nimport { WarningDialogService } from '../../services/warning-dialog.service';\n\n@Component({\n selector: 'lib-project-browser',\n templateUrl: './project-browser.component.html',\n styleUrls: ['./project-browser.component.css'],\n})\nexport class ProjectBrowserComponent implements OnInit {\n projects: Project[] = [];\n loading = true;\n\n constructor(\n private bsModalRef: BsModalRef,\n private projectService: ProjectService,\n private projectLoadService: ProjectLoadService,\n private userService: UserService,\n private warningDialogService: WarningDialogService,\n private configService: ConfigService\n ) {\n this.loadProjects();\n }\n\n private loadProjects() {\n this.projectService.getAllProjects().subscribe((projects) => {\n this.projects = projects;\n this.loading = false;\n });\n }\n\n ngOnInit() {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n openProject(project: Project) {\n this.bsModalRef.hide();\n this.projectLoadService.load(project.id, project.name).subscribe(() => {\n this.userService.setAutoLoadProject(project);\n });\n }\n\n deleteProject(project: Project) {\n this.warningDialogService\n .show('designer.project.delete-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.projectService.deleteProject(project).subscribe((projects) => {\n this.loadProjects();\n });\n }\n })\n )\n .subscribe();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { ToastrService } from 'ngx-toastr';\nimport { map } from 'rxjs/operators';\nimport { ProjectLoadService } from '../../services/project-load.service';\n\n@Component({\n selector: 'lib-project-import',\n templateUrl: './project-import.component.html',\n styleUrls: ['./project-import.component.css'],\n})\nexport class ProjectImportComponent implements OnInit {\n public dropzoneConfig: DropzoneConfigInterface;\n public uploadMessage: string;\n\n constructor(\n public bsModalRef: BsModalRef,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private projectLoadService: ProjectLoadService\n ) {}\n\n ngOnInit() {\n this.dropzoneConfig = {\n url: 'dummy',\n addRemoveLinks: false,\n maxFilesize: 10 /* 10 MB */,\n acceptedFiles: '.rsd',\n timeout: 0,\n accept: (file: any, done: any) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (event: any) => {\n this.projectLoadService.import(event.target.result);\n done('noerr');\n this.bsModalRef.hide();\n });\n reader.readAsText(file);\n },\n previewTemplate: `\n <div style=\"display: none;\">\n <!-- No preview -->\n </div>\n `,\n };\n\n this.translateService\n .get('designer.misc.dropzone-message')\n .pipe(\n map((result) => {\n this.uploadMessage = '<h3 class=\"mb-0\"><i class=\"fa fa-cloud-upload\"></i></h3>' + result;\n })\n )\n .subscribe();\n }\n\n public onUploadError(args: any) {\n if (args[1] === 'noerr') {\n // this error is set in the accept event listener -> everything OK\n return;\n }\n\n const msg = 'designer.misc.toast-upload-error';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n });\n }\n\n ok() {\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport { Project } from '../../models/project';\nimport { ConfigService } from '../../services/config.service';\nimport { ProjectService } from '../../services/project.service';\nimport { WarningDialogService } from '../../services/warning-dialog.service';\n\n@Component({\n selector: 'lib-project-save',\n templateUrl: './project-save.component.html',\n styleUrls: ['./project-save.component.css'],\n})\nexport class ProjectSaveComponent implements OnInit {\n projects: Project[] = [];\n loading = true;\n projectName: string;\n\n constructor(\n private bsModalRef: BsModalRef,\n private projectService: ProjectService,\n private warningDialogService: WarningDialogService,\n private configService: ConfigService\n ) {\n this.loadProjects();\n if (this.projectService.project.name) {\n this.projectName = this.projectService.project.name;\n } else {\n this.projectName = 'New Project';\n }\n }\n\n ngOnInit() {}\n\n private loadProjects() {\n this.projectService.getAllProjects().subscribe((projects) => {\n this.projects = projects;\n this.loading = false;\n });\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n selectProject(project: Project) {\n this.projectService.project.name = project.name;\n }\n\n private existingProject(uuid: string, name: string) {\n for (const project of this.projects) {\n if (project.name === name && project.uuid !== uuid) {\n return true;\n }\n }\n return false;\n }\n\n private doSave() {\n this.projectService.project.name = this.projectName;\n this.projectService.save(this.projectService.project);\n this.bsModalRef.hide();\n }\n\n saveProject() {\n if (this.existingProject(this.projectService.project.uuid, this.projectName) && this.configService.uniqueProjectNames) {\n this.warningDialogService\n .show('designer.project.overwrite-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.doSave();\n }\n })\n )\n .subscribe();\n } else {\n this.doSave();\n }\n }\n\n deleteProject(project: Project) {\n this.warningDialogService\n .show('designer.project.delete-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.projectService.deleteProject(project).subscribe((projects) => {\n this.loadProjects();\n });\n }\n })\n )\n .subscribe();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.saveProject();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-project-share',\n templateUrl: './project-share.component.html',\n styleUrls: ['./project-share.component.css'],\n})\nexport class ProjectShareComponent implements OnInit {\n shareLink: string;\n\n constructor(public bsModalRef: BsModalRef, private projectService: ProjectService) {}\n\n ngOnInit() {\n this.shareLink =\n window.location.host + '/designer?id=' + this.projectService.project.id + '&token=' + this.projectService.project.shareToken;\n }\n\n ok() {\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\n\n@Component({\n selector: 'lib-error-dialog',\n templateUrl: './error-dialog.component.html',\n styleUrls: ['./error-dialog.component.css'],\n})\nexport class ErrorDialogComponent implements OnInit {\n onClose: Subject<number>;\n\n message: string;\n details: string;\n\n constructor(private bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.onClose = new Subject();\n }\n\n public ok(): void {\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n public cancel(): void {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable } from 'rxjs';\nimport { map, mergeMap } from 'rxjs/operators';\nimport { ErrorDialogComponent } from '../error-dialog/error-dialog.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ErrorDialogService {\n constructor(private modalService: BsModalService, private translateService: TranslateService) {}\n\n // Show a warning dialog and return true, when the user clicked OK\n show(message: string, details?: string): Observable<boolean> {\n return this.translateService.get(message).pipe(\n map((result) => {\n return result;\n }),\n mergeMap((result) => {\n const fileDialog = this.modalService.show(ErrorDialogComponent, { keyboard: true, ignoreBackdropClick: false });\n (fileDialog.content as ErrorDialogComponent).message = result;\n (fileDialog.content as ErrorDialogComponent).details = details;\n\n return (fileDialog.content as ErrorDialogComponent).onClose.pipe(\n map((errorResult) => {\n if (errorResult === 1) {\n return true;\n }\n\n return false;\n })\n );\n })\n );\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { FixtureService } from '../../services/fixture.service';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-fixture-pool-create-from-file',\n templateUrl: './fixture-pool-create-from-file.component.html',\n styleUrls: ['./fixture-pool-create-from-file.component.css'],\n})\nexport class FixturePoolCreateFromFileComponent implements OnInit {\n public dropzoneConfig: DropzoneConfigInterface;\n public uploadMessage: string;\n public onClose: Subject<FixtureProfile> = new Subject();\n\n constructor(\n public bsModalRef: BsModalRef,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private fixtureService: FixtureService,\n private projectService: ProjectService\n ) {}\n\n ngOnInit() {\n this.dropzoneConfig = {\n url: 'dummy',\n addRemoveLinks: false,\n maxFilesize: 10 /* 10 MB */,\n acceptedFiles: '.json',\n timeout: 0,\n accept: (file: any, done: any) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (event: any) => {\n // validate the file\n const text = event.target.result;\n const json = JSON.parse(text);\n if (\n json['$schema'].match(\n 'https://raw.githubusercontent.com/OpenLightingProject/open-fixture-library/schema-(.*)/schemas/fixture.json'\n )\n ) {\n // create the metadata from the file. we don't have the corresponding\n // manufacturer-file, therefore we just assume the attributes from the\n // fixture-file.\n const manufacturerShortName = json['manufacturerKey'];\n const manufacturerName = manufacturerShortName;\n const uuid = manufacturerShortName + '/' + json['fixtureKey'];\n const profile = new FixtureProfile(json);\n\n profile.manufacturerShortName = manufacturerShortName;\n profile.manufacturerName = manufacturerName;\n profile.uuid = uuid;\n profile.createdFromFile = true;\n\n // add the profile to the project, if not already added\n const loadedProfile = this.fixtureService.getProfileByUuid(uuid);\n if (!loadedProfile) {\n this.projectService.project.fixtureProfiles.push(profile);\n }\n\n // add a new fixture from this profile\n this.onClose.next(profile);\n this.bsModalRef.hide();\n } else {\n // show an error toast\n const msg = 'designer.fixture-pool.invalid-fixture-profile-file';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n });\n }\n\n done('noerr');\n });\n reader.readAsText(file);\n },\n previewTemplate: `\n <div style=\"display: none;\">\n <!-- No preview -->\n </div>\n `,\n };\n\n this.translateService\n .get('designer.misc.dropzone-message')\n .pipe(\n map((result) => {\n this.uploadMessage = '<h3 class=\"mb-0\"><i class=\"fa fa-cloud-upload\"></i></h3>' + result;\n })\n )\n .subscribe();\n }\n\n public onUploadError(args: any) {\n if (args[1] === 'noerr') {\n // this error is set in the accept event listener -> everything OK\n return;\n }\n\n const msg = 'designer.misc.toast-upload-error';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n });\n }\n\n ok() {\n this.onClose.next(undefined);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(undefined);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject } from 'rxjs';\nimport { catchError, finalize } from 'rxjs/operators';\nimport { Fixture } from '../models/fixture';\nimport { FixtureProfile } from '../models/fixture-profile';\nimport { ConfigService } from '../services/config.service';\nimport { FixtureService } from '../services/fixture.service';\nimport { PresetService } from '../services/preset.service';\nimport { PreviewService } from '../services/preview.service';\nimport { ProjectService } from '../services/project.service';\nimport { UuidService } from '../services/uuid.service';\nimport { FixturePoolCreateFromFileComponent } from './fixture-pool-create-from-file/fixture-pool-create-from-file.component';\n\n@Component({\n selector: 'lib-app-fixture-pool',\n templateUrl: './fixture-pool.component.html',\n styleUrls: ['./fixture-pool.component.css'],\n})\nexport class FixturePoolComponent implements OnInit {\n private profiles: FixtureProfile[];\n public filteredProfiles: FixtureProfile[];\n public loadingProfiles = false;\n\n public fixturePool: Fixture[];\n\n public dmxChannels: number[] = [];\n public selectedFixture: Fixture;\n public selectedFixtureProfile: FixtureProfile;\n public showChannelNumbers = false;\n public channelDragFixture: Fixture;\n public channelDragOffset: number;\n\n public onClose: Subject<number> = new Subject();\n\n public searchExpression: string;\n\n public updatingProfiles: boolean;\n\n constructor(\n public bsModalRef: BsModalRef,\n public fixtureService: FixtureService,\n private uuidService: UuidService,\n public projectService: ProjectService,\n private previewService: PreviewService,\n private translateService: TranslateService,\n private toastrService: ToastrService,\n private presetService: PresetService,\n public configService: ConfigService,\n private modalService: BsModalService\n ) {\n this.fixturePool = [...this.projectService.project.fixtures];\n\n if (this.fixturePool.length > 0) {\n this.selectFixture(this.fixturePool[0]);\n }\n }\n\n ngOnInit() {\n for (let i = 0; i < 512; i++) {\n this.dmxChannels.push(0);\n }\n\n this.loadProfiles();\n }\n\n private loadProfiles() {\n this.loadingProfiles = true;\n\n this.fixtureService.getSearchProfiles().subscribe((profiles) => {\n this.profiles = profiles;\n this.filterProfiles();\n this.loadingProfiles = false;\n });\n }\n\n selectFixture(fixture: Fixture) {\n this.selectedFixtureProfile = undefined;\n if (fixture) {\n this.selectedFixtureProfile = this.fixtureService.getProfileByUuid(fixture.profileUuid);\n }\n this.selectedFixture = fixture;\n }\n\n filterProfiles() {\n if (!this.searchExpression || !this.profiles) {\n this.filteredProfiles = this.profiles;\n return;\n }\n\n this.filteredProfiles = [];\n\n const keywords = this.searchExpression.split(' ');\n\n for (const profile of this.profiles) {\n let foundKeywords = 0;\n\n for (const keyword of keywords) {\n if (\n profile.uuid.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||\n profile.name.toLowerCase().indexOf(keyword.toLowerCase()) !== -1 ||\n profile.manufacturerName.toLowerCase().indexOf(keyword.toLowerCase()) !== -1\n ) {\n foundKeywords++;\n }\n }\n\n if (foundKeywords === keywords.length) {\n this.filteredProfiles.push(profile);\n }\n }\n }\n\n addFixture(searchProfile: FixtureProfile) {\n // Load the profile details, if not already done. There is only a\n // minimal profile passed from the search.\n this.fixtureService.loadProfileByUuid(searchProfile.uuid).subscribe(() => {\n const profile = this.fixtureService.getProfileByUuid(searchProfile.uuid);\n const newFixture = this.fixtureService.addFixture(profile, this.fixturePool);\n this.selectFixture(newFixture);\n });\n }\n\n addCopy(originalFixture: Fixture) {\n const fixture = new Fixture();\n fixture.uuid = this.uuidService.getUuid();\n fixture.profileUuid = originalFixture.profileUuid;\n fixture.name = originalFixture.name;\n fixture.modeShortName = originalFixture.modeShortName;\n fixture.dmxFirstChannel = originalFixture.dmxFirstChannel;\n fixture.dmxUniverseUuid = originalFixture.dmxUniverseUuid;\n\n this.fixturePool.push(fixture);\n this.selectFixture(fixture);\n }\n\n removeFixture(fixture: Fixture) {\n for (let i = 0; i < this.fixturePool.length; i++) {\n if (this.fixturePool[i].uuid === fixture.uuid) {\n if (this.selectedFixture === this.fixturePool[i]) {\n this.selectFixture(undefined);\n }\n this.fixturePool.splice(i, 1);\n break;\n }\n }\n\n if (!this.selectedFixture && this.fixturePool && this.fixturePool.length > 0) {\n this.selectFixture((this.selectedFixture = this.fixturePool[0]));\n }\n\n // remove unused profiles\n for (let i = 0; i < this.projectService.project.fixtureProfiles.length; i++) {\n let profileUsed = false;\n\n for (const fixtureInPool of this.fixturePool) {\n if (fixtureInPool.profileUuid === this.projectService.project.fixtureProfiles[i].uuid) {\n profileUsed = true;\n break;\n }\n }\n\n if (!profileUsed) {\n this.projectService.project.fixtureProfiles.splice(i, 1);\n }\n }\n }\n\n channelOccupied(index: number): boolean {\n for (const fixture of this.fixturePool) {\n const mode = this.fixtureService.getModeByFixture(this.fixtureService.getProfileByUuid(fixture.profileUuid), fixture);\n\n if (index >= fixture.dmxFirstChannel && index < fixture.dmxFirstChannel + mode.channels.length) {\n return true;\n }\n }\n\n return false;\n }\n\n channelOccupiedStart(index: number): boolean {\n for (const fixture of this.fixturePool) {\n if (index === fixture.dmxFirstChannel) {\n return true;\n }\n }\n\n return false;\n }\n\n channelOccupiedEnd(index: number): boolean {\n for (const fixture of this.fixturePool) {\n const mode = this.fixtureService.getModeByFixture(this.fixtureService.getProfileByUuid(fixture.profileUuid), fixture);\n\n if (index === fixture.dmxFirstChannel + mode.channels.length - 1) {\n return true;\n }\n }\n\n return false;\n }\n\n channelOverlapped(index: number): boolean {\n let occupiedFixture: Fixture;\n\n for (const fixture of this.fixturePool) {\n const mode = this.fixtureService.getModeByFixture(this.fixtureService.getProfileByUuid(fixture.profileUuid), fixture);\n\n if (index >= fixture.dmxFirstChannel && index < fixture.dmxFirstChannel + mode.channels.length) {\n if (occupiedFixture) {\n if (occupiedFixture.dmxFirstChannel !== fixture.dmxFirstChannel || occupiedFixture.modeShortName !== fixture.modeShortName) {\n // fixtures are allowed to overlap, if they start at the same channel and\n // use the same mode. otherwise it's not allowed.\n return true;\n }\n } else {\n occupiedFixture = fixture;\n }\n }\n }\n\n return false;\n }\n\n channelMouseDown(event: any) {\n // start dragging\n const selectedIndex = event.target.dataset.index;\n let newSelectedFixture: Fixture;\n\n // find a dragging fixture and select it, but don't change the selection, if the\n // currently selected fixture might also be selected (on overlapped fixtures)\n for (const fixture of this.fixturePool) {\n const mode = this.fixtureService.getModeByFixture(this.fixtureService.getProfileByUuid(fixture.profileUuid), fixture);\n\n if (selectedIndex >= fixture.dmxFirstChannel && selectedIndex <= fixture.dmxFirstChannel + mode.channels.length - 1) {\n if (this.selectedFixture === fixture) {\n newSelectedFixture = fixture;\n break;\n }\n\n if (!newSelectedFixture) {\n newSelectedFixture = fixture;\n }\n }\n }\n\n if (newSelectedFixture) {\n if (newSelectedFixture !== this.selectedFixture) {\n this.selectFixture(newSelectedFixture);\n }\n\n this.channelDragFixture = newSelectedFixture;\n this.channelDragOffset = selectedIndex - newSelectedFixture.dmxFirstChannel;\n }\n }\n\n channelSelected(index: number): boolean {\n if (!this.selectedFixture) {\n return false;\n }\n\n if (index >= this.selectedFixture.dmxFirstChannel) {\n const mode = this.fixtureService.getModeByFixture(\n this.fixtureService.getProfileByUuid(this.selectedFixture.profileUuid),\n this.selectedFixture\n );\n\n if (index < this.selectedFixture.dmxFirstChannel + mode.channels.length) {\n return true;\n }\n }\n\n return false;\n }\n\n // register mouse up globally (e.g. also outside the DMX mapping)\n @HostListener('window:mouseup', ['$event'])\n mouseUp(event: any) {\n // finish dragging\n this.channelDragFixture = undefined;\n this.channelDragOffset = undefined;\n }\n\n channelMouseOver(event: any) {\n // perform dragging\n const selectedIndex = event.target.dataset.index;\n\n if (\n this.channelDragFixture &&\n selectedIndex - this.channelDragOffset >= 0 &&\n selectedIndex -\n this.channelDragOffset +\n this.fixtureService.getModeByFixture(\n this.fixtureService.getProfileByUuid(this.channelDragFixture.profileUuid),\n this.channelDragFixture\n ).channels.length -\n 1 <=\n 511\n ) {\n this.channelDragFixture.dmxFirstChannel = selectedIndex - this.channelDragOffset;\n }\n }\n\n ok() {\n // don't allow OK if overlapping fixtures exist\n for (let i = 0; i < this.dmxChannels.length; i++) {\n if (this.channelOverlapped(i)) {\n const msg = 'designer.fixture-pool.channel-occupied';\n const title = 'designer.fixture-pool.channel-occupied-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title]);\n });\n\n return;\n }\n }\n\n this.projectService.project.fixtures = this.fixturePool;\n\n this.fixtureService.updateCachedFixtures();\n this.presetService.removeDeletedFixtures();\n this.previewService.updateFixtureSetup();\n this.presetService.updateFixtureSelection();\n this.presetService.fixtureSelectionChanged.next();\n this.presetService.previewLive();\n\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n updateProfiles() {\n this.updatingProfiles = true;\n\n // TODO\n this.fixtureService\n .updateProfiles()\n .pipe(\n finalize(() => {\n this.updatingProfiles = false;\n }),\n catchError(() => {\n const msg = 'designer.fixture-pool.profiles-update-error';\n const title = 'designer.fixture-pool.profiles-update-error-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg], result[title]);\n });\n\n return undefined;\n })\n )\n .subscribe(() => {\n this.loadProfiles();\n\n const msg = 'designer.fixture-pool.profiles-updated';\n const title = 'designer.fixture-pool.profiles-updated-title';\n\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.success(result[msg], result[title]);\n });\n });\n }\n\n createFixtureFromProfileFile() {\n const bsModalRef = this.modalService.show(FixturePoolCreateFromFileComponent, { keyboard: true, ignoreBackdropClick: false });\n (bsModalRef.content as FixturePoolCreateFromFileComponent).onClose.subscribe((profile: FixtureProfile) => {\n const newFixture = this.fixtureService.addFixture(profile, this.fixturePool);\n this.selectFixture(newFixture);\n });\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { FixturePoolComponent } from '../fixture-pool/fixture-pool.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FixturePoolService {\n private fixturePoolOpened = false;\n\n constructor(private modalService: BsModalService) {}\n\n open() {\n if (this.fixturePoolOpened) {\n return;\n }\n\n this.fixturePoolOpened = true;\n const bsModalRef = this.modalService.show(FixturePoolComponent, { keyboard: false, ignoreBackdropClick: true, class: 'modal-full' });\n (bsModalRef.content as FixturePoolComponent).onClose.subscribe((result) => {\n this.fixturePoolOpened = false;\n });\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class HotkeyTargetExcludeService {\n constructor() {}\n\n exclude(event: any): boolean {\n // don't react on certain targets (e.g. the user is inside an input field)\n if (!event.target) {\n return false;\n }\n\n if (event.target.nodeName === 'INPUT') {\n return true;\n }\n\n return false;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { ConfigService } from './config.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class IntroService {\n showIntro = false;\n activeStep = 'start';\n positionTopPercentage = 50;\n positionLeftPercentage = 50;\n stylePosition = 'top: calc(50% - 150px); left: calc(50% - 200px);';\n stepChanged: Subject<void> = new Subject<void>();\n\n constructor(private configService: ConfigService) {}\n\n refresh() {\n // called, as soon as the config has been updated\n if (this.configService.intro) {\n if (localStorage.getItem('showIntro')) {\n this.showIntro = localStorage.getItem('showIntro') === 'true';\n } else {\n this.showIntro = true;\n }\n }\n }\n\n setShowIntro(value: boolean) {\n this.showIntro = value;\n if (value) {\n localStorage.setItem('showIntro', 'true');\n } else {\n localStorage.setItem('showIntro', 'false');\n }\n this.stepChanged.next();\n }\n\n reset() {\n this.activeStep = 'start';\n this.setShowIntro(true);\n this.stepChanged.next();\n }\n\n showStep(step: string): boolean {\n if (!this.showIntro) {\n return false;\n }\n\n if (this.activeStep !== step) {\n return false;\n }\n\n return true;\n }\n\n next() {\n switch (this.activeStep) {\n case 'start':\n this.activeStep = 'preview';\n this.positionTopPercentage = 60;\n this.positionLeftPercentage = 40;\n break;\n case 'preview':\n this.activeStep = 'fixtures';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 30;\n break;\n case 'fixtures':\n this.activeStep = 'presets';\n this.positionTopPercentage = 30;\n this.positionLeftPercentage = 50;\n break;\n case 'presets':\n this.activeStep = 'capabilities';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 60;\n break;\n case 'capabilities':\n this.activeStep = 'scenes';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 40;\n break;\n case 'scenes':\n this.activeStep = 'timeline';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 50;\n break;\n case 'timeline':\n this.activeStep = 'finish';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 50;\n break;\n }\n\n this.stepChanged.next();\n }\n\n back() {\n switch (this.activeStep) {\n case 'preview':\n this.activeStep = 'start';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 50;\n break;\n case 'fixtures':\n this.activeStep = 'preview';\n this.positionTopPercentage = 60;\n this.positionLeftPercentage = 40;\n break;\n case 'presets':\n this.activeStep = 'fixtures';\n this.positionTopPercentage = 30;\n this.positionLeftPercentage = 50;\n break;\n case 'capabilities':\n this.activeStep = 'presets';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 30;\n break;\n case 'scenes':\n this.activeStep = 'capabilities';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 60;\n break;\n case 'timeline':\n this.activeStep = 'scenes';\n this.positionTopPercentage = 50;\n this.positionLeftPercentage = 40;\n break;\n case 'finish':\n this.activeStep = 'timeline';\n this.positionTopPercentage = 40;\n this.positionLeftPercentage = 50;\n break;\n }\n\n this.stepChanged.next();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { UserService } from '../../services/user.service';\n\n@Component({\n selector: 'lib-user-login',\n templateUrl: './user-login.component.html',\n styleUrls: ['./user-login.component.css'],\n})\nexport class UserLoginComponent implements OnInit {\n error = '';\n loggingIn = false;\n\n email = '';\n password = '';\n\n // emits, when logged in\n subject: Subject<void>;\n\n constructor(private bsModalRef: BsModalRef, private userService: UserService) {}\n\n ngOnInit() {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n login() {\n this.loggingIn = true;\n this.error = '';\n\n if (!this.email || !this.password) {\n this.error = 'fill-all-fields';\n this.loggingIn = false;\n return;\n }\n\n this.userService.login(this.email, this.password).subscribe(\n () => {\n this.bsModalRef.hide();\n if (this.subject) {\n this.subject.next();\n }\n },\n (response) => {\n if (response.error && response.error.error) {\n this.error = response.error.error;\n } else {\n this.error = 'internal';\n }\n this.loggingIn = false;\n }\n );\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.login();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef, BsModalService } from 'ngx-bootstrap/modal';\nimport { Subject } from 'rxjs';\nimport { UserService } from '../../services/user.service';\nimport { UserLoginComponent } from '../user-login/user-login.component';\n\n@Component({\n selector: 'lib-user-register',\n templateUrl: './user-register.component.html',\n styleUrls: ['./user-register.component.css'],\n})\nexport class UserRegisterComponent implements OnInit {\n error = '';\n registering = false;\n\n username = '';\n email = '';\n password = '';\n passwordRepeat = '';\n\n // emits, when logged in\n subject: Subject<void>;\n\n constructor(private bsModalRef: BsModalRef, private modalService: BsModalService, private userService: UserService) {}\n\n ngOnInit() {}\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n login() {\n this.bsModalRef.hide();\n this.modalService.show(UserLoginComponent, { keyboard: true, ignoreBackdropClick: false, initialState: { subject: this.subject } });\n }\n\n private emailIsValid(email: string): boolean {\n // tslint:disable-next-line:max-line-length\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return re.test(String(email).toLowerCase());\n }\n\n register() {\n this.registering = true;\n this.error = '';\n\n if (!this.username || !this.email || !this.password || !this.passwordRepeat) {\n this.error = 'fill-all-fields';\n this.registering = false;\n return;\n }\n\n if (!this.emailIsValid(this.email)) {\n this.error = 'email-valid';\n this.registering = false;\n return;\n }\n\n if (this.password !== this.passwordRepeat) {\n this.error = 'password-mismatch';\n this.registering = false;\n return;\n }\n\n this.userService.register(this.email, this.username, this.password).subscribe(\n () => {\n // automatically login after registering\n this.userService.login(this.email, this.password).subscribe(() => {\n this.registering = false;\n this.bsModalRef.hide();\n });\n },\n (response) => {\n if (response.error && response.error.error) {\n this.error = response.error.error;\n } else {\n this.error = 'internal';\n }\n this.registering = false;\n }\n );\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.register();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Observable, of, Subject } from 'rxjs';\nimport { UserRegisterComponent } from '../user/user-register/user-register.component';\nimport { ConfigService } from './config.service';\nimport { UserService } from './user.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class UserEnsureLoginService {\n constructor(private userService: UserService, private modalService: BsModalService, private configService: ConfigService) {}\n\n // show the login form and log a user in, if required\n login(): Observable<void> {\n if (this.userService.isLoggedIn()) {\n return of(null);\n }\n\n if (!this.configService.loginAvailable) {\n return of(null);\n }\n\n const subject = new Subject<void>();\n this.modalService.show(UserRegisterComponent, { keyboard: true, ignoreBackdropClick: false, initialState: { subject } });\n return subject;\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Component, HostListener, OnInit } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DropzoneConfigInterface } from 'ngx-dropzone-wrapper';\nimport { ToastrService } from 'ngx-toastr';\nimport { Subject } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { Composition } from '../../models/composition';\nimport { ConfigService } from '../../services/config.service';\nimport { ProjectService } from '../../services/project.service';\nimport { TimelineService } from '../../services/timeline.service';\nimport { WarningDialogService } from '../../services/warning-dialog.service';\n\n@Component({\n selector: 'lib-app-composition-settings',\n templateUrl: './composition-settings.component.html',\n styleUrls: ['./composition-settings.component.css'],\n})\nexport class CompositionSettingsComponent implements OnInit {\n composition: Composition;\n existingCompositionNames: string[] = [];\n\n public onClose: Subject<number> = new Subject();\n\n public dropzoneConfig: DropzoneConfigInterface;\n public uploadMessage: string;\n\n public existingFiles: string[] = [];\n public filteredExistingFiles: string[] = [];\n\n public uploading = false;\n\n constructor(\n public bsModalRef: BsModalRef,\n private timelineService: TimelineService,\n public configService: ConfigService,\n private translateService: TranslateService,\n private http: HttpClient,\n private warningDialogService: WarningDialogService,\n private toastrService: ToastrService,\n private projectService: ProjectService\n ) {}\n\n ngOnInit() {\n const projectId = this.projectService.project.id ? this.projectService.project.id : '';\n this.dropzoneConfig = {\n url: this.configService.restUrl + 'file/upload?compositionUuid=' + this.composition.uuid + '&projectId=' + projectId,\n addRemoveLinks: false,\n maxFilesize: 100 /* 100 MB */,\n acceptedFiles: 'audio/*',\n timeout: 0,\n parallelUploads: 1,\n previewTemplate: `\n <div class=\"dz-preview dz-file-preview\">\n <!-- The attachment details -->\n <div class=\"dz-details\" style=\"text-align: left\">\n <i class=\"fa fa-file-o\"></i> <span data-dz-name></span> <small>\n <span class=\"label label-default file-size\" data-dz-size></span></small>\n </div>\n\n <!--div class=\"mt-5\">\n <span data-dz-errormessage></span>\n </div-->\n\n <div class=\"progress mt-4 mb-1\" style=\"height: 10px\">\n <div class=\"progress-bar progress-bar-striped progress-bar-animated\"\n role=\"progressbar\" style=\"width:0%;\" data-dz-uploadprogress>\n </div>\n </div>\n </div>\n `,\n };\n\n this.translateService\n .get('designer.misc.dropzone-message')\n .pipe(\n map((result) => {\n this.uploadMessage = '<h3 class=\"mb-0\"><i class=\"fa fa-cloud-upload\"></i></h3>' + result;\n })\n )\n .subscribe();\n\n this.loadFiles();\n\n if (this.timelineService.externalCompositionsAvailable) {\n this.timelineService.getExternalCompositionNames().subscribe((compositionNames) => {\n this.existingCompositionNames = compositionNames;\n });\n }\n }\n\n ok() {\n this.onClose.next(1);\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.onClose.next(2);\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n\n private getNameFromFile(data: any): string {\n return data.name;\n }\n\n private loadFiles() {\n if (!this.configService.enableMediaLibrary) {\n return;\n }\n\n this.http\n .get('file/list')\n .pipe(\n map((response: object[]) => {\n this.existingFiles = [];\n\n for (const file of response) {\n // only load audio files\n if ((file as any).audioFile) {\n this.existingFiles.push(this.getNameFromFile((file as any).audioFile));\n }\n }\n\n this.filterExistingFiles();\n })\n )\n .subscribe();\n }\n\n public onUploadError(args: any) {\n const msg = 'designer.misc.toast-upload-error';\n const title = 'designer.misc.toast-upload-error-title';\n this.translateService.get([msg, title]).subscribe((result) => {\n this.toastrService.error(result[msg] + args[1], result[title], { timeOut: 0, extendedTimeOut: 0, enableHtml: true });\n // Hide the preview element\n args[0].previewElement.hidden = true;\n });\n }\n\n public onUploadSuccess(args: any) {\n this.loadFiles();\n\n // allow to guess the bpm of the newly uploaded file\n this.composition.tempoGuessed = false;\n\n // hide the preview element\n args[0].previewElement.hidden = true;\n\n // select this file\n this.composition.audioFileName = args[0].name;\n\n if (this.configService.enableMediaLibrary) {\n // the file has been uploaded to the media library\n this.composition.audioFileInLibrary = true;\n }\n }\n\n public onQueueComplete(args: any) {\n this.uploading = false;\n }\n\n public onAddedFile(args: any) {\n this.uploading = true;\n }\n\n // Filter the existing files\n filterExistingFiles(searchValue?: string) {\n if (!searchValue) {\n this.filteredExistingFiles = this.existingFiles;\n return;\n }\n\n this.filteredExistingFiles = [];\n\n for (const file of this.existingFiles) {\n if (file.toLowerCase().indexOf(searchValue.toLowerCase()) !== -1) {\n this.filteredExistingFiles.push(file);\n }\n }\n }\n\n selectExistingFile(existingFile: string) {\n this.composition.audioFileName = existingFile;\n\n // the file has been selected from the media library\n this.composition.audioFileInLibrary = true;\n }\n\n deleteFile(existingFile: string) {\n this.warningDialogService\n .show('designer.timeline.warning-delete-file')\n .pipe(\n map((result) => {\n if (result) {\n this.http\n .post('file/delete?name=' + existingFile + '&type=AUDIO', undefined)\n .pipe(\n map((response: Response) => {\n this.loadFiles();\n })\n )\n .subscribe();\n }\n })\n )\n .subscribe();\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { TimelineService } from '../../services/timeline.service';\n\n@Component({\n selector: 'lib-app-timeline-grid',\n templateUrl: './timeline-grid.component.html',\n styleUrls: ['./timeline-grid.component.css'],\n})\nexport class TimelineGridComponent implements OnInit {\n public gridType: string;\n public beatsPerMinute: number;\n public timeSignatureUpper: number;\n public timeSignatureLower: number;\n public snapToGrid: boolean;\n public gridOffsetMillis: number;\n public gridResolution: number;\n\n constructor(public bsModalRef: BsModalRef, public timelineService: TimelineService) {\n this.gridType = timelineService.selectedComposition.gridType;\n this.beatsPerMinute = timelineService.selectedComposition.beatsPerMinute;\n this.timeSignatureUpper = timelineService.selectedComposition.timeSignatureUpper;\n this.timeSignatureLower = timelineService.selectedComposition.timeSignatureLower;\n this.snapToGrid = timelineService.selectedComposition.snapToGrid;\n this.gridOffsetMillis = timelineService.selectedComposition.gridOffsetMillis;\n this.gridResolution = timelineService.selectedComposition.gridResolution;\n }\n\n ngOnInit() {}\n\n ok() {\n this.timelineService.selectedComposition.gridType = this.gridType;\n this.timelineService.selectedComposition.beatsPerMinute = this.beatsPerMinute;\n this.timelineService.selectedComposition.timeSignatureUpper = this.timeSignatureUpper;\n this.timelineService.selectedComposition.timeSignatureLower = this.timeSignatureLower;\n this.timelineService.selectedComposition.snapToGrid = this.snapToGrid;\n this.timelineService.selectedComposition.gridOffsetMillis = this.gridOffsetMillis;\n this.timelineService.selectedComposition.gridResolution = this.gridResolution;\n\n this.timelineService.updateGrid();\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostListener, OnInit, ViewChild } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { map } from 'rxjs/operators';\nimport { Composition } from '../models/composition';\nimport { ConfigService } from '../services/config.service';\nimport { HotkeyTargetExcludeService } from '../services/hotkey-target-exclude.service';\nimport { IntroService } from '../services/intro.service';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\nimport { TimelineService } from '../services/timeline.service';\nimport { UuidService } from '../services/uuid.service';\nimport { WarningDialogService } from '../services/warning-dialog.service';\nimport { CompositionSettingsComponent } from './composition-settings/composition-settings.component';\nimport { TimelineGridComponent } from './timeline-grid/timeline-grid.component';\n\n@Component({\n selector: 'lib-app-timeline',\n templateUrl: './timeline.component.html',\n styleUrls: ['./timeline.component.css'],\n})\nexport class TimelineComponent implements OnInit, AfterViewInit {\n @ViewChild('waveWrapper')\n waveWrapper: ElementRef;\n\n @ViewChild('waveElement')\n waveElement: ElementRef;\n\n private lastHeight: number;\n private lastWidth: number;\n\n constructor(\n public timelineService: TimelineService,\n private changeDetectorRef: ChangeDetectorRef,\n private modalService: BsModalService,\n private uuidService: UuidService,\n public projectService: ProjectService,\n private hotkeyTargetExcludeService: HotkeyTargetExcludeService,\n private warningDialogService: WarningDialogService,\n private http: HttpClient,\n private configService: ConfigService,\n private presetService: PresetService,\n public introService: IntroService\n ) {\n this.timelineService.waveSurferReady.subscribe(() => {\n this.onResize();\n });\n this.timelineService.detectChanges.subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnInit() {}\n\n ngAfterViewInit() {}\n\n @HostListener('window:resize')\n public onResize() {\n if (!this.waveElement) {\n return;\n }\n\n // Hide wavesurfer to calculate the height, because it will grow infinitely\n // otherwise\n this.waveElement.nativeElement.style.display = 'none';\n const height = this.waveWrapper.nativeElement.clientHeight;\n this.waveElement.nativeElement.style.display = 'block';\n\n const width = this.waveWrapper.nativeElement.clientWidth;\n\n if (!this.lastHeight || this.lastHeight !== height || !this.lastWidth || this.lastWidth !== width) {\n // Set height and redraw\n if (this.timelineService.waveSurfer) {\n this.timelineService.waveSurfer.setHeight(height);\n }\n\n this.lastHeight = height;\n this.lastWidth = width;\n }\n }\n\n play() {\n this.timelineService.playState = 'playing';\n this.presetService.previewLive(\n this.timelineService.selectedComposition.name,\n Math.round(this.timelineService.waveSurfer.getCurrentTime() * 1000)\n );\n this.timelineService.waveSurfer.play();\n }\n\n pause() {\n this.timelineService.playState = 'paused';\n this.presetService.stopPreviewPlay();\n this.timelineService.waveSurfer.pause();\n }\n\n rewind() {\n this.timelineService.playState = 'paused';\n this.pause();\n this.timelineService.waveSurfer.seekTo(0);\n }\n\n addRegion(waveSurferRegion?: any) {\n this.timelineService.addRegion(waveSurferRegion);\n }\n\n removeRegion() {\n this.timelineService.removeRegion();\n }\n\n openGridSettings() {\n const bsModalRef = this.modalService.show(TimelineGridComponent, { keyboard: true, ignoreBackdropClick: false, class: '' });\n }\n\n private afterDeleteFile() {\n this.timelineService.deleteSelectedComposition();\n }\n\n removeComposition() {\n this.warningDialogService\n .show('designer.timeline.warning-delete-composition')\n .pipe(\n map((result) => {\n if (result) {\n if (this.configService.enableMediaLibrary) {\n // don't delete the file from the library\n this.afterDeleteFile();\n } else {\n // the composition uuid and extension is used as the file name\n this.http\n .post('file/delete?compositionUuid=' + this.timelineService.selectedComposition.uuid, undefined)\n .pipe(\n map((response: Response) => {\n this.afterDeleteFile();\n })\n )\n .subscribe();\n }\n }\n })\n )\n .subscribe();\n }\n\n private openCompositionSettings(compositionIndex?: number, newComposition?: Composition) {\n const editComposition: Composition =\n newComposition || JSON.parse(JSON.stringify(this.projectService.project.compositions[compositionIndex]));\n\n const bsModalRef = this.modalService.show(CompositionSettingsComponent, {\n keyboard: false,\n ignoreBackdropClick: true,\n class: '',\n initialState: { composition: editComposition },\n });\n\n (bsModalRef.content as CompositionSettingsComponent).onClose.subscribe((result) => {\n if (result === 1) {\n // OK has been pressed -> save\n if (newComposition) {\n this.projectService.project.compositions.push(editComposition);\n this.timelineService.selectedCompositionIndex = this.projectService.project.compositions.length - 1;\n\n // create the composition, if externally necessary\n if (this.timelineService.externalCompositionsAvailable) {\n // TODO check, if this composition already exists externally and create it, if not\n // maybe not needed and even confusing?\n }\n } else {\n this.projectService.project.compositions[compositionIndex] = editComposition;\n }\n\n this.selectComposition(this.timelineService.selectedCompositionIndex);\n }\n });\n }\n\n compositionSettings() {\n this.openCompositionSettings(this.timelineService.selectedCompositionIndex);\n }\n\n addComposition() {\n // create a new composition\n const composition = new Composition();\n composition.uuid = this.uuidService.getUuid();\n composition.name = 'New Composition';\n\n this.openCompositionSettings(undefined, composition);\n }\n\n selectComposition(index: number) {\n this.timelineService.selectCompositionIndex(index);\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardEvent(event: KeyboardEvent) {\n if (this.hotkeyTargetExcludeService.exclude(event)) {\n return;\n }\n\n if (!this.timelineService.selectedComposition) {\n return;\n }\n\n if (event.key === ' ') {\n if (this.timelineService.playState === 'paused') {\n this.play();\n } else {\n this.pause();\n }\n\n // prevent checkboxes being toggled, if in focus e.g.\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n setRegionStartMillis(value: any) {\n if (!this.timelineService.selectedPlaybackRegion) {\n return;\n }\n\n if (isNaN(value) || value < 0) {\n return;\n }\n\n this.timelineService.selectedPlaybackRegion.startMillis = +value;\n this.timelineService.updateSelectedRegion();\n }\n\n setRegionEndMillis(value: any) {\n if (!this.timelineService.selectedPlaybackRegion) {\n return;\n }\n\n if (isNaN(value) || value < 0) {\n return;\n }\n\n this.timelineService.selectedPlaybackRegion.endMillis = +value;\n this.timelineService.updateSelectedRegion();\n }\n}\n","import { AfterViewInit, Component, HostListener, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { ToastrService } from 'ngx-toastr';\nimport { map } from 'rxjs/operators';\nimport Split from 'split.js';\nimport { PreviewComponent } from './preview/preview.component';\nimport { ProjectBrowserComponent } from './project/project-browser/project-browser.component';\nimport { ProjectImportComponent } from './project/project-import/project-import.component';\nimport { ProjectSaveComponent } from './project/project-save/project-save.component';\nimport { ProjectShareComponent } from './project/project-share/project-share.component';\nimport { ConfigService } from './services/config.service';\nimport { ErrorDialogService } from './services/error-dialog.service';\nimport { FixturePoolService } from './services/fixture-pool.service';\nimport { FixtureService } from './services/fixture.service';\nimport { HotkeyTargetExcludeService } from './services/hotkey-target-exclude.service';\nimport { IntroService } from './services/intro.service';\nimport { ProjectLoadService } from './services/project-load.service';\nimport { ProjectService } from './services/project.service';\nimport { TimelineService } from './services/timeline.service';\nimport { UserEnsureLoginService } from './services/user-ensure-login.service';\nimport { UserService } from './services/user.service';\nimport { WarningDialogService } from './services/warning-dialog.service';\nimport { TimelineComponent } from './timeline/timeline.component';\nimport { UserRegisterComponent } from './user/user-register/user-register.component';\n\n@Component({\n selector: 'lib-designer',\n templateUrl: './designer.component.html',\n styleUrls: ['./designer.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class DesignerComponent implements OnInit, AfterViewInit {\n @Input()\n set menuHeightPx(value: number) {\n this.configService.menuHeightPx = value;\n this.configService.menuHeightChanged.next();\n }\n\n @Input()\n set externalCompositionsAvailable(value: boolean) {\n this.timelineService.externalCompositionsAvailable = value;\n }\n\n @Input()\n set restUrl(value: string) {\n this.configService.restUrl = value;\n }\n\n @Input()\n set enableMediaLibrary(value: boolean) {\n this.configService.enableMediaLibrary = value;\n }\n\n @Input()\n set loginAvailable(value: boolean) {\n this.configService.loginAvailable = value;\n }\n\n @Input()\n set shareAvailable(value: boolean) {\n this.configService.shareAvailable = value;\n }\n\n @Input()\n set languageSwitch(value: boolean) {\n this.configService.languageSwitch = value;\n }\n\n @Input()\n set newProjectTemplate(value: boolean) {\n this.configService.newProjectTemplate = value;\n }\n\n @Input()\n set livePreview(value: boolean) {\n this.configService.livePreview = value;\n }\n\n @Input()\n set localProfiles(value: boolean) {\n this.configService.localProfiles = value;\n }\n\n @Input()\n set intro(value: boolean) {\n this.configService.intro = value;\n this.introService.refresh();\n }\n\n @Input()\n set uniqueProjectNames(value: boolean) {\n this.configService.uniqueProjectNames = value;\n }\n\n // the size of the menu used in the designer\n private designerMenuSizePx = 20;\n\n private splitGutterSizePx = 13;\n\n public totalMenuHeightPx = 0;\n\n currentTab = 'properties';\n\n @ViewChild(PreviewComponent)\n previewComponent: PreviewComponent;\n\n @ViewChild(TimelineComponent)\n timelineComponent: TimelineComponent;\n\n constructor(\n private translateService: TranslateService,\n private projectService: ProjectService,\n public configService: ConfigService,\n private fixturePoolService: FixturePoolService,\n private hotkeyTargetExcludeService: HotkeyTargetExcludeService,\n private modalService: BsModalService,\n public userService: UserService,\n private userEnsureLoginService: UserEnsureLoginService,\n private toastrService: ToastrService,\n private projectLoadService: ProjectLoadService,\n private warningDialogService: WarningDialogService,\n private errorDialogService: ErrorDialogService,\n private fixtureService: FixtureService,\n private timelineService: TimelineService,\n public introService: IntroService\n ) {\n this.configService.menuHeightChanged.subscribe(() => {\n this.calcTotalMenuHeight();\n });\n }\n\n ngOnInit() {\n if (localStorage.getItem('language')) {\n this.translateService.use(localStorage.getItem('language'));\n } else {\n this.translateService.use('en');\n }\n\n this.calcTotalMenuHeight();\n\n const urlParams = new URLSearchParams(window.location.search);\n const projectId = urlParams.get('id');\n const projectName = urlParams.get('name');\n let shareToken = urlParams.get('token');\n\n if (projectId) {\n // load a project by query param ID\n if (!shareToken) {\n shareToken = '';\n }\n\n this.projectLoadService.load(Number.parseInt(projectId), projectName, shareToken).subscribe(\n () => {},\n (response) => {\n let error = response && response.error ? response.error.error : 'unknown';\n\n let msg = '';\n\n if (error === 'no-permission') {\n msg = 'designer.project.open-no-permission-error';\n error = undefined;\n } else {\n msg = 'designer.project.open-error';\n }\n\n this.errorDialogService.show(msg, error).subscribe(() => {\n this.projectLoadService.new();\n });\n }\n );\n } else if (this.userService.isLoggedIn() && (this.userService.getAutoLoadProjectId() || this.userService.getAutoLoadProjectName())) {\n // restore the last saved project\n this.projectLoadService.load(this.userService.getAutoLoadProjectId(), this.userService.getAutoLoadProjectName()).subscribe(\n () => {},\n (response) => {\n const msg = 'designer.project.open-error';\n const error = response && response.error ? response.error.error : 'unknown';\n\n this.errorDialogService.show(msg, error).subscribe(() => {\n this.projectLoadService.new();\n });\n }\n );\n } else {\n if (this.configService.newProjectTemplate) {\n // load the new project template\n this.projectLoadService.template();\n } else {\n this.projectLoadService.new();\n }\n }\n }\n\n private calcTotalMenuHeight() {\n this.totalMenuHeightPx = this.designerMenuSizePx + this.splitGutterSizePx + this.configService.menuHeightPx;\n }\n\n private onResize() {\n if (this.previewComponent) {\n this.previewComponent.onResize();\n }\n\n if (this.timelineComponent) {\n this.timelineComponent.onResize();\n }\n }\n\n ngAfterViewInit(): void {\n // Set up the splitter\n setTimeout(() => {\n Split(['#row1', '#row2', '#row3'], {\n sizes: [42, 38, 20],\n direction: 'vertical',\n cursor: 'row-resize',\n snapOffset: 0,\n gutterSize: this.splitGutterSizePx,\n onDrag: this.onResize.bind(this),\n });\n\n Split(['#scenes', '#presets', '#preview'], {\n sizes: [15, 15, 70],\n snapOffset: 0,\n gutterSize: this.splitGutterSizePx,\n onDrag: this.onResize.bind(this),\n });\n\n Split(['#capabilities', '#fixtures', '#masterDimmer'], {\n sizes: [74, 18, 8],\n snapOffset: 0,\n gutterSize: this.splitGutterSizePx,\n onDrag: this.onResize.bind(this),\n minSize: 50,\n });\n\n this.onResize();\n });\n }\n\n openTab(tab: string) {\n // open a side tab (e.g. effects, channels, settings, etc.)\n\n if (tab === 'settings') {\n this.fixtureService.settingsSelection = true;\n } else {\n this.fixtureService.settingsSelection = false;\n }\n\n this.currentTab = tab;\n }\n\n openFixturePool() {\n this.fixturePoolService.open();\n }\n\n projectNew() {\n this.warningDialogService\n .show('designer.misc.warning-proceed-unsaved')\n .pipe(\n map((result) => {\n if (result) {\n this.projectLoadService.new();\n }\n })\n )\n .subscribe();\n }\n\n projectOpen() {\n this.warningDialogService\n .show('designer.misc.warning-proceed-unsaved')\n .pipe(\n map((result) => {\n if (result) {\n this.userEnsureLoginService.login().subscribe(() => {\n this.modalService.show(ProjectBrowserComponent, { keyboard: true, ignoreBackdropClick: false });\n });\n }\n })\n )\n .subscribe();\n }\n\n projectSave() {\n if (this.projectService.project.name) {\n // this project has been saved before -> just save it again\n this.projectService.save(this.projectService.project);\n } else {\n // this project has not yet been saved -> show the save as-dialog\n this.userEnsureLoginService.login().subscribe(() => {\n this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });\n });\n }\n }\n\n projectSaveAs() {\n this.userEnsureLoginService.login().subscribe(() => {\n this.modalService.show(ProjectSaveComponent, { keyboard: true, ignoreBackdropClick: false });\n });\n }\n\n userRegister() {\n this.modalService.show(UserRegisterComponent, { keyboard: true, ignoreBackdropClick: false });\n }\n\n projectImport() {\n this.warningDialogService\n .show('designer.misc.warning-proceed-unsaved')\n .pipe(\n map((result) => {\n if (result) {\n this.modalService.show(ProjectImportComponent, { keyboard: true, ignoreBackdropClick: false });\n }\n })\n )\n .subscribe();\n }\n\n projectExport() {\n const json = JSON.stringify(this.projectService.project, null, 2);\n const element = document.createElement('a');\n element.setAttribute('href', 'data:text/json;charset=UTF-8,' + encodeURIComponent(json));\n element.setAttribute('download', this.projectService.project.name + '.rsd');\n element.style.display = 'none';\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n }\n\n projectShare() {\n if (!this.projectService.project.id) {\n // a save is required first\n this.errorDialogService.show('designer.project.share-no-save').subscribe();\n return;\n }\n\n // ignore backdrop click, because selecting the link text will also close the modal\n this.modalService.show(ProjectShareComponent, { keyboard: true, ignoreBackdropClick: true });\n }\n\n @HostListener('document:keydown', ['$event'])\n handleKeyboardEvent(event: any) {\n if (this.hotkeyTargetExcludeService.exclude(event)) {\n return;\n }\n\n if (event.key === 'p') {\n this.openFixturePool();\n\n // prevent checkboxes being toggled, if in focus e.g.\n event.stopPropagation();\n event.preventDefault();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key === 'n') {\n this.projectNew();\n event.stopPropagation();\n event.preventDefault();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key === 's') {\n this.projectSave();\n event.stopPropagation();\n event.preventDefault();\n }\n\n if ((event.ctrlKey || event.metaKey) && event.key === 'o') {\n this.projectOpen();\n event.stopPropagation();\n event.preventDefault();\n }\n }\n\n switchLanguage(language: string) {\n this.translateService.use(language);\n localStorage.setItem('language', language);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'sort',\n})\nexport class ArraySortPipe implements PipeTransform {\n transform(array: any, field: string): any[] {\n if (!Array.isArray(array)) {\n return;\n }\n array.sort((a: any, b: any) => {\n if (a[field] < b[field]) {\n return -1;\n } else if (a[field] > b[field]) {\n return 1;\n } else {\n return 0;\n }\n });\n return array;\n }\n}\n","import { Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Observable, Subscription, timer } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { EffectCurveProfileChannels } from '../../models/effect-curve-profile-channel';\nimport { FixtureCapability, FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixture-capability';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PresetService } from '../../services/preset.service';\nimport { EffectCurve } from './../../models/effect-curve';\nimport { AnimationService } from './../../services/animation.service';\n\n@Component({\n selector: 'lib-app-effect-curve',\n templateUrl: './effect-curve.component.html',\n styleUrls: ['./effect-curve.component.css'],\n})\nexport class EffectCurveComponent implements OnInit {\n private gridUpdateSubscription: Subscription;\n private ctx: any;\n private maxWidth: number;\n private maxHeight: number;\n\n public lengthMillisMin = 20;\n public lengthMillisMax = 8000;\n public amplitudeMin = 0;\n public amplitudeMax = 4;\n public percentageMin = 0;\n public percentageMax = 1;\n public phaseMillisMin = -1000;\n public phaseMillisMax = 1000;\n public phasingMillisMin = 0;\n public phasingMillisMax = 1000;\n\n // the selected capabilities\n public availableCapabilities: FixtureCapability[] = [];\n\n // the selected channels\n public availableChannels: Map<FixtureProfile, CachedFixtureChannel[]> = new Map<FixtureProfile, CachedFixtureChannel[]>();\n public availableProfiles: FixtureProfile[] = [];\n public selectedProfiles: FixtureProfile[] = [];\n\n @Input() curve: EffectCurve;\n\n // whether the effect is currently being edited (open) or not\n @Input()\n set isSelected(value: boolean) {\n if (value) {\n // start the update timer\n if (!this.gridUpdateSubscription) {\n this.gridUpdateSubscription = timer(0, 15).subscribe(() => {\n this.redraw();\n });\n }\n } else {\n // stop the update timer\n if (this.gridUpdateSubscription) {\n this.gridUpdateSubscription.unsubscribe();\n this.gridUpdateSubscription = undefined;\n }\n }\n }\n\n @ViewChild('curveGrid', { static: true }) curveGrid: ElementRef;\n\n constructor(\n public presetService: PresetService,\n private animationService: AnimationService,\n private fixtureService: FixtureService,\n private translate: TranslateService\n ) {\n this.presetService.fixtureSelectionChanged.subscribe(() => {\n this.updateCapabilitiesAndChannels();\n });\n\n this.updateCapabilitiesAndChannels();\n }\n\n ngOnInit() {\n const canvas = this.curveGrid.nativeElement;\n this.ctx = canvas.getContext('2d');\n this.maxWidth = canvas.width;\n this.maxHeight = canvas.height;\n\n this.redraw();\n }\n\n private drawCurrentValue(currMillis: number, radius: number, lineWidth: number, durationMillis: number, maxHeight: number) {\n const currVal = 1 - this.curve.getValueAtMillis(currMillis);\n\n const x = (this.maxWidth * (currMillis % durationMillis)) / durationMillis;\n const y = maxHeight * currVal + lineWidth;\n\n this.ctx.beginPath();\n this.ctx.arc(x, y, radius, 0, 2 * Math.PI, false);\n this.ctx.fillStyle = '#fff';\n this.ctx.fill();\n this.ctx.lineWidth = 1;\n this.ctx.strokeStyle = '#000';\n this.ctx.stroke();\n }\n\n private getPhasingCount(): number {\n let count = 0;\n const countedDmxChannels: number[] = [];\n\n for (const fixtureUuid of this.presetService.selectedPreset.fixtureUuids) {\n const fixture = this.fixtureService.getFixtureByUuid(fixtureUuid);\n\n if (!countedDmxChannels.includes(fixture.dmxFirstChannel)) {\n count++;\n countedDmxChannels.push(fixture.dmxFirstChannel);\n }\n }\n\n return count;\n }\n\n redraw() {\n this.ctx.clearRect(0, 0, this.maxWidth, this.maxHeight);\n this.ctx.fillStyle = '#fff';\n this.ctx.strokeStyle = '#fff';\n\n // the width of the lines\n const width = 3;\n\n this.ctx.lineWidth = width;\n\n let oldX: number;\n let oldY: number;\n\n let step = 50;\n\n if (length < 500) {\n step = 5;\n }\n\n const durationMillis = this.curve.lengthMillis * Math.max(Math.round(4 - this.curve.lengthMillis / 1000), 1);\n const maxHeight = this.maxHeight - width * 2;\n\n // draw the curve\n for (let i = -step * 2; i < durationMillis + step * 2; i += step) {\n const val = 1 - this.curve.getValueAtMillis(i);\n\n // Scale the values to the grid dimensions\n const x = (this.maxWidth * i) / durationMillis;\n const y = maxHeight * val + width;\n\n if (oldY) {\n this.ctx.beginPath();\n this.ctx.moveTo(oldX, oldY);\n this.ctx.lineTo(x, y);\n this.ctx.stroke();\n }\n\n oldX = x;\n oldY = y;\n }\n\n // draw the current value\n this.drawCurrentValue(this.animationService.timeMillis % durationMillis, 5, width, durationMillis, maxHeight);\n\n // draw the phasing values (chase), if required\n let phasingCount = 0;\n\n if (this.curve.phasingMillis > 0 && this.presetService.selectedPreset) {\n phasingCount = this.getPhasingCount();\n }\n\n for (let i = 1; i < phasingCount; i++) {\n this.drawCurrentValue(\n (this.animationService.timeMillis - i * this.curve.phasingMillis) % durationMillis,\n 3,\n width,\n durationMillis,\n maxHeight\n );\n }\n }\n\n private calculateChannelCapabilities() {\n this.availableChannels = this.presetService.getSelectedProfileChannels(this.selectedProfiles);\n }\n\n changeProfileSelection($event: any, profile: FixtureProfile) {\n if (this.selectedProfiles.indexOf(profile) >= 0) {\n this.selectedProfiles.splice(this.selectedProfiles.indexOf(profile), 1);\n } else {\n this.selectedProfiles.push(profile);\n }\n\n this.calculateChannelCapabilities();\n }\n\n private updateCapabilitiesAndChannels() {\n // capabilities\n this.availableCapabilities = [];\n\n if (this.presetService.hasCapabilityDimmer()) {\n const capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.Intensity;\n this.availableCapabilities.push(capability);\n }\n\n if (this.presetService.hasCapabilityColor()) {\n let capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.ColorIntensity;\n capability.color = FixtureCapabilityColor.Red;\n this.availableCapabilities.push(capability);\n\n capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.ColorIntensity;\n capability.color = FixtureCapabilityColor.Green;\n this.availableCapabilities.push(capability);\n\n capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.ColorIntensity;\n capability.color = FixtureCapabilityColor.Blue;\n this.availableCapabilities.push(capability);\n }\n\n if (this.presetService.hasCapabilityPanTilt()) {\n let capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.Pan;\n this.availableCapabilities.push(capability);\n\n capability = new FixtureCapability();\n capability.type = FixtureCapabilityType.Tilt;\n this.availableCapabilities.push(capability);\n }\n\n // calculate all profiles\n this.availableProfiles = this.presetService.getSelectedProfiles();\n\n // select all profiles by default\n this.selectedProfiles = [...this.availableProfiles];\n\n // calculate all channels\n this.calculateChannelCapabilities();\n }\n\n getCapabilityName(capability: FixtureCapability): Observable<string> {\n return this.translate\n .get(['designer.fixtureCapabilityType.' + capability.type, 'designer.fixtureCapabilityColor.' + capability.color])\n .pipe(\n map((result: string) => {\n let name = '';\n name += result['designer.fixtureCapabilityType.' + capability.type];\n\n if (capability.color) {\n name += ', ' + result['designer.fixtureCapabilityColor.' + capability.color];\n } else {\n return name;\n }\n\n return name;\n })\n );\n }\n\n capabilityChecked(capability: FixtureCapability): boolean {\n for (const existingCapability of this.curve.capabilities) {\n if (\n this.fixtureService.capabilitiesMatch(\n existingCapability.type,\n capability.type,\n existingCapability.color,\n capability.color,\n null,\n null,\n null,\n null\n )\n ) {\n return true;\n }\n }\n return false;\n }\n\n toggleCapability(event: any, capability: FixtureCapability) {\n if (event.currentTarget.checked) {\n // add the capability\n this.curve.capabilities.push(capability);\n } else {\n // Remove the channel\n for (let i = 0; i < this.curve.capabilities.length; i++) {\n const existingCapability = this.curve.capabilities[i];\n if (\n this.fixtureService.capabilitiesMatch(\n existingCapability.type,\n capability.type,\n existingCapability.color,\n capability.color,\n null,\n null,\n null,\n null\n )\n ) {\n this.curve.capabilities.splice(i, 1);\n }\n }\n }\n\n this.presetService.previewLive();\n }\n\n getChannelName(profileName: string, channelName: string) {\n if (this.availableProfiles.length > 1) {\n return profileName + ' - ' + channelName;\n }\n\n return channelName;\n }\n\n channelChecked(profile: FixtureProfile, channel: CachedFixtureChannel): boolean {\n for (const profileChannels of this.curve.channels) {\n if (profileChannels.profileUuid === profile.uuid) {\n if (profileChannels.channels.includes(channel.name)) {\n return true;\n }\n\n break;\n }\n }\n\n return false;\n }\n\n toggleChannel(event: any, profile: FixtureProfile, channel: CachedFixtureChannel) {\n // add the profile, if necessary\n let profileContained = false;\n for (const profileChannels of this.curve.channels) {\n if (profileChannels.profileUuid === profile.uuid) {\n profileContained = true;\n break;\n }\n }\n\n if (!profileContained) {\n const profileChannels = new EffectCurveProfileChannels();\n profileChannels.profileUuid = profile.uuid;\n this.curve.channels.push(profileChannels);\n }\n\n // add or delete the channel\n for (const profileChannels of this.curve.channels) {\n if (profileChannels.profileUuid === profile.uuid) {\n const index = profileChannels.channels.indexOf(channel.name);\n\n if (index >= 0) {\n profileChannels.channels.splice(index, 1);\n } else {\n profileChannels.channels.push(channel.name);\n }\n\n break;\n }\n }\n\n this.presetService.previewLive();\n }\n\n setLengthMillis(value: any) {\n if (!isNaN(value) && value >= this.lengthMillisMin && value <= this.lengthMillisMax) {\n this.curve.lengthMillis = +value;\n this.presetService.previewLive();\n }\n }\n\n setAmplitude(value: any) {\n if (!isNaN(value) && value >= this.amplitudeMin && value <= this.amplitudeMax) {\n this.curve.amplitude = +value;\n this.presetService.previewLive();\n }\n }\n\n setPosition(value: any) {\n if (!isNaN(value) && value >= this.percentageMin && value <= this.percentageMax) {\n this.curve.position = +value;\n this.presetService.previewLive();\n }\n }\n\n setPhaseMillis(value: any) {\n if (!isNaN(value) && value >= this.phaseMillisMin && value <= this.phaseMillisMax) {\n this.curve.phaseMillis = +value;\n this.presetService.previewLive();\n }\n }\n\n setPhasingMillis(value: any) {\n if (!isNaN(value) && value >= this.phasingMillisMin && value <= this.phasingMillisMax) {\n this.curve.phasingMillis = +value;\n this.presetService.previewLive();\n }\n }\n}\n","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\n\n@Component({\n selector: 'lib-app-effect-pan-tilt',\n templateUrl: './effect-pan-tilt.component.html',\n styleUrls: ['./effect-pan-tilt.component.css'],\n})\nexport class EffectPanTiltComponent implements OnInit {\n @ViewChild('panTiltGrid') panTiltGrid: ElementRef;\n\n // private line = d3.line();\n private svg;\n private path;\n\n private points = [\n [0, 500],\n [500, 0],\n [1000, 500],\n [500, 1000],\n ];\n\n private dragged = null;\n private selected = this.points[0];\n\n constructor() {}\n\n private redraw() {}\n\n ngOnInit() {}\n}\n","import { Component, OnInit } from '@angular/core';\nimport { map } from 'rxjs/operators';\nimport { Effect } from '../models/effect';\nimport { EffectCurve } from '../models/effect-curve';\nimport { EffectPanTilt } from '../models/effect-pan-tilt';\nimport { EffectService } from '../services/effect.service';\nimport { PresetService } from '../services/preset.service';\nimport { UuidService } from '../services/uuid.service';\nimport { WarningDialogService } from '../services/warning-dialog.service';\n\n@Component({\n selector: 'lib-app-effect',\n templateUrl: './effect.component.html',\n styleUrls: ['./effect.component.css'],\n})\nexport class EffectComponent implements OnInit {\n constructor(\n private uuidService: UuidService,\n public presetService: PresetService,\n public effectService: EffectService,\n private warningDialogService: WarningDialogService\n ) {}\n\n ngOnInit() {}\n\n private addEffect(effect: Effect) {\n this.effectService.selectedEffect = effect;\n\n if (this.presetService.selectedPreset) {\n this.presetService.selectedPreset.effects.push(effect);\n }\n }\n\n addCurveEffect() {\n const effect = new EffectCurve();\n effect.uuid = this.uuidService.getUuid();\n this.addEffect(effect);\n this.presetService.previewLive();\n }\n\n addPanTiltEffect() {\n this.addEffect(new EffectPanTilt());\n }\n\n openEffect(effect: Effect, event: any) {\n if (event) {\n this.effectService.selectedEffect = effect;\n } else {\n if (this.effectService.selectedEffect === effect) {\n this.effectService.selectedEffect = undefined;\n }\n }\n }\n\n deleteEffect(effect: Effect) {\n this.warningDialogService\n .show('designer.effect.delete-warning')\n .pipe(\n map((result) => {\n if (result) {\n this.presetService.selectedPreset.effects.splice(this.presetService.selectedPreset.effects.indexOf(effect), 1);\n this.presetService.previewLive();\n }\n })\n )\n .subscribe();\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { CachedFixtureCapability } from '../../../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../../../models/cached-fixture-channel';\nimport { FixtureProfile } from '../../../models/fixture-profile';\nimport { PresetService } from '../../../services/preset.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-channel',\n templateUrl: './fixture-capability-channel.component.html',\n styleUrls: ['./fixture-capability-channel.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FixtureCapabilityChannelComponent implements OnInit {\n @ViewChild('sliderValue', { static: false }) sliderValue: ElementRef;\n\n selectedCapability: CachedFixtureCapability;\n _channel: CachedFixtureChannel;\n\n rangeMin = 0;\n rangeMax = 0;\n defaultValue = 0;\n value = 0;\n templateValue = 0;\n\n valueSetTimer: any;\n\n @Input()\n profile: FixtureProfile;\n\n @Input()\n set channel(value: CachedFixtureChannel) {\n this._channel = value;\n this.updateChannel();\n }\n\n @Input()\n capabilityIndex: number;\n\n constructor(private presetService: PresetService) {}\n\n private updateChannel() {\n this.selectedCapability = this._channel.capabilities[0];\n\n this.value = this.presetService.getChannelValue(this._channel.name, this.profile.uuid);\n this.calculateTemplateValue();\n\n if (this.value >= 0) {\n for (const capability of this._channel.capabilities) {\n if (capability.capability.dmxRange.length > 0 && capability.centerValue === this.value) {\n this.selectedCapability = capability;\n break;\n }\n }\n }\n\n this.rangeMin = this.getRangeMin();\n this.rangeMax = this.getRangeMax();\n this.defaultValue = this.getDefaultValue();\n }\n\n capabilityHasRange(): boolean {\n if (this._channel.capabilities && this._channel.capabilities.length === 1) {\n return true;\n }\n\n if (this.selectedCapability && this.selectedCapability.capability.angleStart) {\n return true;\n }\n\n return false;\n }\n\n private getRangeMin(): number {\n if (this.selectedCapability.capability.dmxRange.length > 0) {\n return this.selectedCapability.capability.dmxRange[0];\n }\n\n return 0;\n }\n\n private getRangeMax(): number {\n if (this.selectedCapability.capability.dmxRange.length > 0) {\n return this.selectedCapability.capability.dmxRange[1];\n }\n\n return this._channel.maxValue;\n }\n\n ngOnInit() {}\n\n setValue(value: any, ignoreCapabilityRange: boolean = false) {\n if (isNaN(value)) {\n return;\n }\n\n if (!ignoreCapabilityRange && (value < this.getRangeMin() || value > this.getRangeMax())) {\n return;\n }\n\n this.value = value;\n this.calculateTemplateValue();\n\n this.presetService.setChannelValue(this._channel.name, this.profile.uuid, value);\n if (this.sliderValue) {\n // update the value without change detector for performance reasons and only in a specific\n // interval. each value set will trigger a layout/reflow event and slow down the performance\n // TODO use the same technique in the dimmer/pan/tilt/color sliders\n if (!this.valueSetTimer) {\n this.valueSetTimer = setTimeout(() => {\n this.sliderValue.nativeElement.value = this.value;\n this.valueSetTimer = undefined;\n }, 30);\n }\n }\n this.presetService.previewLive();\n }\n\n private calculateTemplateValue() {\n this.templateValue = this.value ? this.value : this.getDefaultValue();\n }\n\n private getDefaultValue(): number {\n if (this._channel.defaultValue) {\n return this._channel.defaultValue;\n }\n\n return 0;\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.setValue(this.getDefaultValue(), true);\n } else {\n this.presetService.deleteChannelValue(this._channel.name, this.profile.uuid);\n this.selectedCapability = this._channel.capabilities[0];\n this.value = undefined;\n this.calculateTemplateValue();\n }\n this.presetService.previewLive();\n }\n\n capabilitySelected() {\n // select the center value of the selected capability\n if (this.capabilityHasRange) {\n this.setValue(this.selectedCapability.capability.dmxRange[0], true);\n } else {\n this.setValue(this.selectedCapability.centerValue, true);\n }\n }\n}\n","import { ChangeDetectorRef, Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CachedFixtureCapability } from '../../../models/cached-fixture-capability';\nimport { CachedFixtureChannel } from '../../../models/cached-fixture-channel';\nimport { FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { FixtureProfile } from '../../../models/fixture-profile';\nimport { FixtureWheel } from '../../../models/fixture-wheel';\nimport { FixtureService } from '../../../services/fixture.service';\nimport { PresetService } from '../../../services/preset.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-color-wheel',\n templateUrl: './fixture-capability-color-wheel.component.html',\n styleUrls: ['./fixture-capability-color-wheel.component.css'],\n})\nexport class FixtureCapabilityColorWheelComponent implements OnInit, OnDestroy {\n _fixtureProfile: FixtureProfile;\n _channel: CachedFixtureChannel;\n wheelName: string;\n wheel: FixtureWheel;\n slotCapabilities: CachedFixtureCapability[];\n\n private colorChangeSubscription: Subscription;\n\n @Input()\n set profile(value: FixtureProfile) {\n this._fixtureProfile = value;\n this.update();\n }\n\n @Input()\n set channel(value: CachedFixtureChannel) {\n this._channel = value;\n this.update();\n }\n\n @Input()\n wheelIndex: number;\n\n @Input()\n showContainer = false;\n\n constructor(public presetService: PresetService, private changeDetectorRef: ChangeDetectorRef, private fixtureService: FixtureService) {}\n\n ngOnInit() {\n this.colorChangeSubscription = this.presetService.fixtureColorChanged.subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnDestroy() {\n this.colorChangeSubscription.unsubscribe();\n }\n\n private update() {\n if (this._fixtureProfile && this._channel) {\n this.wheelName = undefined;\n this.slotCapabilities = [];\n\n // get the wheel name\n for (const capability of this._channel.capabilities) {\n if (capability.wheel) {\n this.wheelName = capability.wheelName;\n break;\n }\n }\n if (!this.wheelName) {\n this.wheelName = this._channel.name;\n }\n\n this.wheel = this.fixtureService.getWheelByName(this._fixtureProfile, this.wheelName);\n\n // calculate all available slots\n for (const capability of this._channel.capabilities) {\n if (capability.capability.type === FixtureCapabilityType.WheelSlot) {\n this.slotCapabilities.push(capability);\n }\n }\n }\n\n this.changeDetectorRef.detectChanges();\n }\n\n getCapabilityColorStyle(capability: CachedFixtureCapability): any {\n let property = 'background-color';\n let value = 'black';\n let colors: string[] = [];\n\n if (capability.wheelSlots) {\n for (const slot of capability.wheelSlots) {\n // calculate the color based on the color wheel slot\n if (slot.colors.length > 0) {\n colors = colors.concat(slot.colors);\n }\n }\n }\n\n if (colors.length > 1) {\n // mixed colors -> gradient\n let colorString: string;\n for (const color of colors) {\n if (colorString) {\n colorString += ', ';\n } else {\n colorString = '';\n }\n colorString += color;\n }\n property = 'background-image';\n value = 'linear-gradient(to bottom right, ' + colorString + ')';\n } else if (colors.length === 1) {\n value = colors[0];\n } else {\n value = '#fff';\n }\n\n const style = {};\n style[property] = value;\n return style;\n }\n\n getCurrentSlotNumber(): number {\n const capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n\n if (capabilityValue) {\n return capabilityValue.slotNumber;\n }\n return undefined;\n }\n\n slotCapabilityIsSelected(slotNumber: number): boolean {\n const selectedSlotNumber = this.getCurrentSlotNumber();\n\n if (selectedSlotNumber >= 0) {\n // a slot is selected\n return selectedSlotNumber === slotNumber;\n } else {\n // no slot is selected and the capability is inactive\n // -> show the approx. color, if a color or a similar slot from a different wheel has been selected\n const approximatedCapability = this.presetService.getApproximatedColorWheelCapability(\n this.presetService.selectedPreset,\n this._channel\n );\n\n if (approximatedCapability) {\n return slotNumber === approximatedCapability.capability.slotNumber;\n } else {\n return false;\n }\n }\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n 1,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n } else {\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n }\n\n this.presetService.previewLive();\n }\n\n selectSlotNumber(slotNumber: number) {\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.WheelSlot,\n undefined,\n slotNumber,\n undefined,\n this.wheelName,\n this._fixtureProfile.uuid\n );\n this.presetService.previewLive();\n }\n}\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { FixtureCapabilityColor, FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { FixtureCapabilityValue } from '../../../models/fixture-capability-value';\nimport { FixtureService } from '../../../services/fixture.service';\nimport { PresetService } from '../../../services/preset.service';\n\ndeclare var iro: any;\n\n@Component({\n selector: 'lib-app-fixture-capability-color',\n templateUrl: './fixture-capability-color.component.html',\n styleUrls: ['./fixture-capability-color.component.css'],\n})\nexport class FixtureCapabilityColorComponent implements OnInit, OnDestroy {\n color = '#ffffff';\n colorPicker: any;\n active = false;\n private colorPickerMounted = false;\n\n // avoid internal updating events\n private updatingColor = false;\n\n private updateSubscription: Subscription;\n\n constructor(private presetService: PresetService, private fixtureService: FixtureService, private changeDetectorRef: ChangeDetectorRef) {\n this.updateSubscription = this.presetService.previewSelectionChanged.subscribe(() => {\n this.update();\n this.changeDetectorRef.detectChanges();\n });\n this.update();\n }\n\n private update() {\n let red: number;\n let green: number;\n let blue: number;\n let capabilityValue: FixtureCapabilityValue;\n capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Red\n );\n if (capabilityValue) {\n red = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Green\n );\n if (capabilityValue) {\n green = 255 * capabilityValue.valuePercentage;\n }\n capabilityValue = this.presetService.getCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Blue\n );\n if (capabilityValue) {\n blue = 255 * capabilityValue.valuePercentage;\n }\n if (red !== undefined && green !== undefined && blue !== undefined) {\n this.active = true;\n } else {\n this.active = false;\n red = 255;\n green = 255;\n blue = 255;\n }\n this.color = this.fixtureService.rgbToHex(red, green, blue);\n this.setPickerColor(red, green, blue);\n }\n\n private setPickerColor(red: number, green: number, blue: number) {\n this.updatingColor = true;\n if (this.colorPicker) {\n this.colorPicker.color.rgb = { r: red, g: green, b: blue };\n }\n this.updatingColor = false;\n }\n\n ngOnDestroy() {\n this.updateSubscription.unsubscribe();\n }\n\n ngOnInit() {\n this.colorPicker = new iro.ColorPicker('#color-picker-container', {\n width: 180,\n color: this.color,\n borderWidth: 1,\n borderColor: '#ffffff',\n sliderMargin: 20,\n });\n\n this.colorPicker.on('color:change', this.changeColor.bind(this));\n\n // mounted may be called, before this callback has been added. use input:start therefore\n this.colorPicker.on('input:start', this.mount.bind(this));\n }\n\n mount() {\n this.colorPickerMounted = true;\n }\n\n private updateFixtureColor(color: any) {\n if (this.presetService.selectedPreset) {\n if (color) {\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n color.rgb.r / 255,\n undefined,\n FixtureCapabilityColor.Red\n );\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n color.rgb.g / 255,\n undefined,\n FixtureCapabilityColor.Green\n );\n this.presetService.setCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n color.rgb.b / 255,\n undefined,\n FixtureCapabilityColor.Blue\n );\n } else {\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Red\n );\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Green\n );\n this.presetService.deleteCapabilityValue(\n this.presetService.selectedPreset,\n FixtureCapabilityType.ColorIntensity,\n FixtureCapabilityColor.Blue\n );\n }\n this.changeDetectorRef.detectChanges();\n this.presetService.fixtureColorChanged.next();\n this.presetService.previewLive();\n }\n }\n\n changeActive(active: boolean) {\n this.active = active;\n\n if (active) {\n this.updateFixtureColor(this.colorPicker.color);\n } else {\n this.updateFixtureColor(undefined);\n this.setPickerColor(255, 255, 255);\n this.color = '#ffffff';\n }\n this.presetService.previewLive();\n }\n\n changeColor(color: any) {\n if (!this.colorPickerMounted || this.updatingColor) {\n return;\n }\n\n this.active = true;\n this.color = color.hexString;\n this.updateFixtureColor(color);\n }\n}\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { PresetService } from '../../../services/preset.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-dimmer',\n templateUrl: './fixture-capability-dimmer.component.html',\n styleUrls: ['./fixture-capability-dimmer.component.css'],\n})\nexport class FixtureCapabilityDimmerComponent implements OnInit {\n constructor(private presetService: PresetService, private changeDetectorRef: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n getValue(): number {\n const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity);\n if (capabilityValue) {\n return capabilityValue.valuePercentage;\n }\n return undefined;\n }\n\n getValueText(): number {\n const value = this.getValue();\n if (value >= 0) {\n return Math.round(value * 100 * 100) / 100;\n }\n return undefined;\n }\n\n setValue(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity, value);\n this.changeDetectorRef.detectChanges();\n this.presetService.previewLive();\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.setValue(1);\n } else {\n this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Intensity);\n this.changeDetectorRef.detectChanges();\n }\n this.presetService.previewLive();\n }\n}\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { FixtureCapabilityType } from '../../../models/fixture-capability';\nimport { PresetService } from '../../../services/preset.service';\n\n@Component({\n selector: 'lib-app-fixture-capability-pan-tilt',\n templateUrl: './fixture-capability-pan-tilt.component.html',\n styleUrls: ['./fixture-capability-pan-tilt.component.css'],\n})\nexport class FixtureCapabilityPanTiltComponent implements OnInit {\n constructor(private presetService: PresetService, private changeDetectorRef: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n getValuePan(): number {\n const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Pan);\n if (capabilityValue) {\n return capabilityValue.valuePercentage;\n }\n return undefined;\n }\n\n getValueTextPan(): number {\n const value = this.getValuePan();\n if (value >= 0) {\n return Math.round(value * 100 * 100) / 100;\n }\n return undefined;\n }\n\n setValuePan(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Pan, value);\n this.changeDetectorRef.detectChanges();\n this.presetService.previewLive();\n }\n\n getValueTilt(): number {\n const capabilityValue = this.presetService.getCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Tilt);\n if (capabilityValue) {\n return capabilityValue.valuePercentage;\n }\n return undefined;\n }\n\n getValueTextTilt(): number {\n const value = this.getValueTilt();\n if (value >= 0) {\n return Math.round(value * 100 * 100) / 100;\n }\n return undefined;\n }\n\n setValueTilt(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.presetService.setCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Tilt, value);\n this.changeDetectorRef.detectChanges();\n this.presetService.previewLive();\n }\n\n changeActive(active: boolean) {\n if (active) {\n this.setValuePan(0.5);\n this.setValueTilt(0.5);\n } else {\n this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Pan);\n this.presetService.deleteCapabilityValue(this.presetService.selectedPreset, FixtureCapabilityType.Tilt);\n this.changeDetectorRef.detectChanges();\n }\n this.presetService.previewLive();\n }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { FixtureWheelSlotType } from '../../models/fixture-wheel-slot';\nimport { FixtureService } from '../../services/fixture.service';\nimport { IntroService } from '../../services/intro.service';\nimport { PresetService } from '../../services/preset.service';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-app-fixture-capability',\n templateUrl: './fixture-capability.component.html',\n styleUrls: ['./fixture-capability.component.css'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FixtureCapabilityComponent implements OnInit, OnDestroy {\n // map containing the profile and the channel name containing the wheel\n colorWheelChannels: Map<FixtureProfile, CachedFixtureChannel> = new Map<FixtureProfile, CachedFixtureChannel>();\n\n private fixtureSelectionChangedSubscription: Subscription;\n private previewSelectionChangedSubscription: Subscription;\n\n constructor(\n public presetService: PresetService,\n private fixtureService: FixtureService,\n private changeDetectorRef: ChangeDetectorRef,\n public projectService: ProjectService,\n public introService: IntroService\n ) {\n this.fixtureSelectionChangedSubscription = this.presetService.fixtureSelectionChanged.subscribe(() => {\n this.update();\n });\n\n this.previewSelectionChangedSubscription = this.presetService.previewSelectionChanged.subscribe(() => {\n this.update();\n });\n\n this.introService.stepChanged.subscribe(() => {\n this.changeDetectorRef.detectChanges();\n });\n }\n\n ngOnInit() {}\n\n ngOnDestroy() {\n this.fixtureSelectionChangedSubscription.unsubscribe();\n this.previewSelectionChangedSubscription.unsubscribe();\n }\n\n private wheelInList(wheels: Map<FixtureProfile, CachedFixtureChannel>, profile: FixtureProfile, channel: CachedFixtureChannel) {\n wheels.forEach((existingChannel: CachedFixtureChannel, existingProfile: FixtureProfile) => {\n if (existingProfile.uuid === profile.uuid && existingChannel.name === channel.name) {\n return true;\n }\n });\n\n return false;\n }\n\n private updateColorWheels() {\n this.colorWheelChannels = new Map<FixtureProfile, CachedFixtureChannel>();\n\n if (!this.presetService.selectedPreset) {\n return;\n }\n\n for (const fixtureUuid of this.presetService.selectedPreset.fixtureUuids) {\n const fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);\n for (const channel of fixture.channels) {\n for (const capability of channel.capabilities) {\n if (capability.wheel && capability.wheelSlots && capability.wheelSlots.length > 0) {\n if (this.fixtureService.wheelHasSlotType(capability.wheel, FixtureWheelSlotType.Color)) {\n // color wheel\n if (!this.wheelInList(this.colorWheelChannels, fixture.profile, channel)) {\n this.colorWheelChannels.set(fixture.profile, channel);\n }\n } else if (this.fixtureService.wheelHasSlotType(capability.wheel, FixtureWheelSlotType.Gobo)) {\n // gobo wheel\n // TODO\n }\n }\n }\n }\n }\n }\n\n private update() {\n this.updateColorWheels();\n this.changeDetectorRef.detectChanges();\n }\n\n isChrome(): boolean {\n if (navigator.appVersion.indexOf('Chrome/') !== -1) {\n return true;\n }\n return false;\n }\n}\n","import { ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { CachedFixtureChannel } from '../../models/cached-fixture-channel';\nimport { FixtureProfile } from '../../models/fixture-profile';\nimport { PresetService } from '../../services/preset.service';\nimport { ProjectService } from '../../services/project.service';\n\n@Component({\n selector: 'lib-app-fixture-channel',\n templateUrl: './fixture-channel.component.html',\n styleUrls: ['./fixture-channel.component.css'],\n})\nexport class FixtureChannelComponent implements OnInit, OnDestroy {\n public channelCapabilities: Map<FixtureProfile, CachedFixtureChannel[]> = new Map<FixtureProfile, CachedFixtureChannel[]>();\n public profiles: FixtureProfile[] = [];\n public selectedProfiles: FixtureProfile[] = [];\n\n private fixtureSelectionChangedSubscription: Subscription;\n private previewSelectionChangedSubscription: Subscription;\n\n constructor(public presetService: PresetService, private changeDetectorRef: ChangeDetectorRef, public projectService: ProjectService) {\n this.fixtureSelectionChangedSubscription = this.presetService.fixtureSelectionChanged.subscribe(() => {\n this.calculateProfiles();\n });\n\n this.previewSelectionChangedSubscription = this.presetService.previewSelectionChanged.subscribe(() => {\n this.calculateProfiles();\n });\n }\n\n ngOnInit() {}\n\n ngOnDestroy() {\n this.fixtureSelectionChangedSubscription.unsubscribe();\n this.previewSelectionChangedSubscription.unsubscribe();\n }\n\n private calculateChannelCapabilities() {\n this.channelCapabilities = this.presetService.getSelectedProfileChannels(this.selectedProfiles);\n\n this.changeDetectorRef.detectChanges();\n }\n\n private calculateProfiles() {\n // calculate all profiels\n this.profiles = this.presetService.getSelectedProfiles();\n\n // select all profiles by default\n this.selectedProfiles = [...this.profiles];\n\n this.calculateChannelCapabilities();\n }\n\n changeProfileSelection($event: any, profile: FixtureProfile) {\n if (this.selectedProfiles.indexOf(profile) >= 0) {\n this.selectedProfiles.splice(this.selectedProfiles.indexOf(profile), 1);\n } else {\n this.selectedProfiles.push(profile);\n }\n\n this.calculateChannelCapabilities();\n }\n\n isChrome(): boolean {\n if (navigator.appVersion.indexOf('Chrome/') !== -1) {\n return true;\n }\n return false;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { Positioning } from '../../../models/fixture';\nimport { FixtureService } from '../../../services/fixture.service';\nimport { PresetService } from '../../../services/preset.service';\n\n@Component({\n selector: 'lib-app-fixture-settings-position',\n templateUrl: './fixture-settings-position.component.html',\n styleUrls: ['./fixture-settings-position.component.css'],\n})\nexport class FixtureSettingsPositionComponent implements OnInit {\n selectUndefinedOptionValue: any = undefined;\n\n selectedPositioning: string = undefined;\n\n positionX = 0;\n positionY = 0;\n positionZ = 0;\n\n positionXMin = -400;\n positionXMax = 400;\n positionYMin = 0;\n positionYMax = 400;\n positionZMin = -400;\n positionZMax = 400;\n\n rotationX = 0;\n rotationY = 0;\n rotationZ = 0;\n\n rotationMin = 0;\n rotationMax = 360;\n\n constructor(public fixtureService: FixtureService, private presetService: PresetService) {\n presetService.fixtureSelectionSettingsChanged.subscribe(() => {\n this.updateSelection();\n });\n }\n\n ngOnInit() {}\n\n private updateSelection() {\n // get all display values for the selected settings fixtures\n this.selectedPositioning = undefined;\n\n this.positionX = undefined;\n this.positionY = undefined;\n this.positionZ = undefined;\n\n this.rotationX = undefined;\n this.rotationY = undefined;\n this.rotationZ = undefined;\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.selectedPositioning) {\n if (this.selectedPositioning !== fixture.positioning) {\n this.selectedPositioning = undefined;\n break;\n }\n } else {\n this.selectedPositioning = fixture.positioning;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.positionX) {\n if (this.positionX !== fixture.positionX) {\n this.positionX = undefined;\n break;\n }\n } else {\n this.positionX = fixture.positionX;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.positionY) {\n if (this.positionY !== fixture.positionY) {\n this.positionY = undefined;\n break;\n }\n } else {\n this.positionY = fixture.positionY;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.positionZ) {\n if (this.positionZ !== fixture.positionZ) {\n this.positionZ = undefined;\n break;\n }\n } else {\n this.positionZ = fixture.positionZ;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.rotationX) {\n if (this.rotationX !== fixture.rotationX) {\n this.rotationX = undefined;\n break;\n }\n } else {\n this.rotationX = fixture.rotationX;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.rotationY) {\n if (this.rotationY !== fixture.rotationY) {\n this.rotationY = undefined;\n break;\n }\n } else {\n this.rotationY = fixture.rotationY;\n }\n }\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (this.rotationZ) {\n if (this.rotationZ !== fixture.rotationZ) {\n this.rotationZ = undefined;\n break;\n }\n } else {\n this.rotationZ = fixture.rotationZ;\n }\n }\n }\n\n changePosition(positioningStr: string) {\n const positioning: Positioning = Positioning[positioningStr];\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n fixture.positioning = positioning;\n }\n }\n\n changePositionManual(position: string, value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (position === 'x') {\n if (value >= this.positionXMin && value <= this.positionXMax) {\n this.positionX = +value;\n }\n } else if (position === 'y') {\n if (value >= this.positionYMin && value <= this.positionYMax) {\n this.positionY = +value;\n }\n } else if (position === 'z') {\n if (value >= this.positionZMin && value <= this.positionZMax) {\n this.positionZ = +value;\n }\n }\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (position === 'x') {\n if (value >= this.positionXMin && value <= this.positionXMax) {\n fixture.positionX = +value;\n }\n } else if (position === 'y') {\n if (value >= this.positionYMin && value <= this.positionYMax) {\n fixture.positionY = +value;\n }\n } else if (position === 'z') {\n if (value >= this.positionZMin && value <= this.positionZMax) {\n fixture.positionZ = +value;\n }\n }\n }\n }\n\n changeRotationManual(rotation: string, value: any) {\n if (isNaN(value) || value < this.rotationMin || value > this.rotationMax) {\n return;\n }\n\n if (rotation === 'x') {\n this.rotationX = +value;\n } else if (rotation === 'y') {\n this.rotationY = +value;\n } else if (rotation === 'z') {\n this.rotationZ = +value;\n }\n\n for (const fixture of this.fixtureService.selectedSettingsFixtures) {\n if (rotation === 'x') {\n fixture.rotationX = +value;\n } else if (rotation === 'y') {\n fixture.rotationY = +value;\n } else if (rotation === 'z') {\n fixture.rotationZ = +value;\n }\n }\n }\n}\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { PreviewService } from '../../../services/preview.service';\nimport { ProjectService } from '../../../services/project.service';\n\n@Component({\n selector: 'lib-app-fixture-settings-stage',\n templateUrl: './fixture-settings-stage.component.html',\n styleUrls: ['./fixture-settings-stage.component.css'],\n})\nexport class FixtureSettingsStageComponent implements OnInit {\n constructor(public projectService: ProjectService, public previewService: PreviewService, private changeDetectorRef: ChangeDetectorRef) {}\n\n ngOnInit() {}\n\n update() {\n this.previewService.updateStage();\n this.changeDetectorRef.detectChanges();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { FixtureService } from '../../services/fixture.service';\nimport { PresetService } from '../../services/preset.service';\n\n@Component({\n selector: 'lib-app-fixture-settings',\n templateUrl: './fixture-settings.component.html',\n styleUrls: ['./fixture-settings.component.css'],\n})\nexport class FixtureSettingsComponent implements OnInit {\n dmxChannels: number[] = [];\n\n constructor(private fixtureService: FixtureService, public presetService: PresetService) {\n for (let i = 0; i < 512; i++) {\n this.dmxChannels.push(0);\n }\n }\n\n ngOnInit() {}\n\n isChrome(): boolean {\n if (navigator.appVersion.indexOf('Chrome/') !== -1) {\n return true;\n }\n return false;\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { Fixture } from '../models/fixture';\nimport { FixturePoolService } from '../services/fixture-pool.service';\nimport { FixtureService } from '../services/fixture.service';\nimport { IntroService } from '../services/intro.service';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\n\n@Component({\n selector: 'lib-app-fixture',\n templateUrl: './fixture.component.html',\n styleUrls: ['./fixture.component.css'],\n})\nexport class FixtureComponent implements OnInit {\n constructor(\n public projectService: ProjectService,\n public presetService: PresetService,\n private fixturePoolService: FixturePoolService,\n public fixtureService: FixtureService,\n public introService: IntroService\n ) {}\n\n ngOnInit() {}\n\n fixtureIsSelected(fixture: Fixture): boolean {\n if (this.fixtureService.settingsSelection) {\n return this.fixtureService.settingsFixtureIsSelected(fixture);\n } else {\n return this.presetService.fixtureIsSelected(fixture);\n }\n }\n\n selectFixture(event: any, fixture: Fixture) {\n if (this.fixtureService.settingsSelection) {\n // select fixtures for the settings\n this.fixtureService.switchSettingsFixtureSelection(fixture);\n this.presetService.fixtureSelectionSettingsChanged.next();\n } else {\n // select fixtures for the current preset\n this.presetService.switchFixtureSelection(fixture);\n this.presetService.fixtureSelectionChanged.next();\n this.presetService.previewLive();\n }\n }\n\n selectAll() {\n this.presetService.selectAllFixtures();\n this.presetService.fixtureSelectionChanged.next();\n }\n\n selectNone() {\n this.presetService.selectNoFixtures();\n this.presetService.fixtureSelectionChanged.next();\n }\n\n openFixturePool() {\n this.fixturePoolService.open();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { IntroService } from '../services/intro.service';\n\n@Component({\n selector: 'lib-app-intro',\n templateUrl: './intro.component.html',\n styleUrls: ['./intro.component.css'],\n})\nexport class IntroComponent implements OnInit {\n constructor(public introService: IntroService) {}\n\n ngOnInit() {}\n\n close() {\n this.introService.setShowIntro(false);\n }\n}\n","import { ChangeDetectorRef, Component, OnInit } from '@angular/core';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\n\n@Component({\n selector: 'lib-app-master-dimmer',\n templateUrl: './master-dimmer.component.html',\n styleUrls: ['./master-dimmer.component.css'],\n})\nexport class MasterDimmerComponent implements OnInit {\n constructor(public projectService: ProjectService, private changeDetectorRef: ChangeDetectorRef, private presetService: PresetService) {}\n\n ngOnInit() {}\n\n setValue(value: any) {\n if (isNaN(value)) {\n return;\n }\n\n if (value < 0 || value > 1) {\n return;\n }\n\n this.projectService.project.masterDimmerValue = value;\n this.changeDetectorRef.detectChanges();\n this.presetService.previewLive();\n }\n\n getValue(): number {\n return Math.round(this.projectService.project.masterDimmerValue * 100 * 100) / 100;\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Preset } from '../../models/preset';\n\n@Component({\n selector: 'lib-preset-settings',\n templateUrl: './preset-settings.component.html',\n styleUrls: ['./preset-settings.component.css'],\n})\nexport class PresetSettingsComponent implements OnInit {\n preset: Preset;\n\n name: string;\n startMillis: number;\n endMillis: number;\n fadeInMillis: number;\n fadeOutMillis: number;\n fadeInPre: boolean;\n fadeOutPost: boolean;\n\n constructor(public bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.name = this.preset.name;\n this.startMillis = this.preset.startMillis;\n this.endMillis = this.preset.endMillis;\n this.fadeInMillis = this.preset.fadeInMillis;\n this.fadeOutMillis = this.preset.fadeOutMillis;\n this.fadeInPre = this.preset.fadeInPre;\n this.fadeOutPost = this.preset.fadeOutPost;\n }\n\n ok() {\n this.preset.name = this.name;\n\n if (this.startMillis === undefined || this.startMillis === null || (this.startMillis as any) === '') {\n this.preset.startMillis = undefined;\n } else if (!isNaN(this.startMillis) && this.startMillis >= 0) {\n this.preset.startMillis = +this.startMillis;\n }\n if (this.endMillis === undefined || this.endMillis === null || (this.endMillis as any) === '') {\n this.preset.endMillis = undefined;\n } else if (!isNaN(this.endMillis) && this.endMillis >= 0) {\n this.preset.endMillis = +this.endMillis;\n }\n if (!isNaN(this.fadeInMillis) && this.fadeInMillis >= 0) {\n this.preset.fadeInMillis = +this.fadeInMillis;\n }\n if (!isNaN(this.fadeOutMillis) && this.fadeOutMillis >= 0) {\n this.preset.fadeOutMillis = +this.fadeOutMillis;\n }\n\n this.preset.fadeInPre = this.fadeInPre;\n this.preset.fadeOutPost = this.fadeOutPost;\n\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Preset } from '../models/preset';\nimport { IntroService } from '../services/intro.service';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\nimport { SceneService } from '../services/scene.service';\nimport { PresetSettingsComponent } from './preset-settings/preset-settings.component';\n\n@Component({\n selector: 'lib-app-preset',\n templateUrl: './preset.component.html',\n styleUrls: ['./preset.component.css'],\n})\nexport class PresetComponent implements OnInit {\n constructor(\n public presetService: PresetService,\n public sceneService: SceneService,\n public projectService: ProjectService,\n public introService: IntroService,\n private modalService: BsModalService\n ) {}\n\n ngOnInit() {}\n\n selectPreset(index: number) {\n this.projectService.project.previewPreset = true;\n this.presetService.selectPreset(index);\n }\n\n enableCheckbox(): boolean {\n return this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1;\n }\n\n activatePreset(active: boolean, index: number) {\n if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {\n const uuid = this.projectService.project.presets[index].uuid;\n\n if (active) {\n // Activate a new uuid\n this.sceneService.selectedScenes[0].presetUuids.push(uuid);\n } else {\n // Remove the uuid\n for (let i = 0; i < this.sceneService.selectedScenes[0].presetUuids.length; i++) {\n if (this.sceneService.selectedScenes[0].presetUuids[i] === uuid) {\n this.sceneService.selectedScenes[0].presetUuids.splice(i, 1);\n return;\n }\n }\n }\n }\n }\n\n addPreset() {\n this.presetService.addPreset();\n\n if (this.sceneService.selectedScenes && this.sceneService.selectedScenes.length === 1) {\n this.sceneService.selectedScenes[0].presetUuids.push(this.presetService.selectedPreset.uuid);\n }\n }\n\n removePreset() {\n if (!this.presetService.selectedPreset) {\n return;\n }\n\n this.projectService.project.presets.splice(this.projectService.project.presets.indexOf(this.presetService.selectedPreset), 1);\n this.presetService.selectPreset(0);\n }\n\n openSettings(preset: Preset) {\n const bsModalRef = this.modalService.show(PresetSettingsComponent, {\n keyboard: true,\n ignoreBackdropClick: false,\n class: '',\n initialState: { preset },\n });\n }\n}\n","import { Component, HostListener, OnInit } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { Scene } from '../../models/scene';\n\n@Component({\n selector: 'lib-scene-settings',\n templateUrl: './scene-settings.component.html',\n styleUrls: ['./scene-settings.component.css'],\n})\nexport class SceneSettingsComponent implements OnInit {\n scene: Scene;\n\n name: string;\n fadeInMillis: number;\n fadeOutMillis: number;\n fadeInPre: boolean;\n fadeOutPost: boolean;\n\n constructor(public bsModalRef: BsModalRef) {}\n\n ngOnInit() {\n this.name = this.scene.name;\n this.fadeInMillis = this.scene.fadeInMillis;\n this.fadeOutMillis = this.scene.fadeOutMillis;\n this.fadeInPre = this.scene.fadeInPre;\n this.fadeOutPost = this.scene.fadeOutPost;\n }\n\n ok() {\n this.scene.name = this.name;\n\n if (!isNaN(this.fadeInMillis) && this.fadeInMillis >= 0) {\n this.scene.fadeInMillis = +this.fadeInMillis;\n }\n if (!isNaN(this.fadeOutMillis) && this.fadeOutMillis >= 0) {\n this.scene.fadeOutMillis = +this.fadeOutMillis;\n }\n\n this.scene.fadeInPre = this.fadeInPre;\n this.scene.fadeOutPost = this.fadeOutPost;\n\n this.bsModalRef.hide();\n }\n\n cancel() {\n this.bsModalRef.hide();\n }\n\n @HostListener('document:keydown.enter', ['$event'])\n handleKeyboardEvent(event: any) {\n this.ok();\n }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { Scene } from '../models/scene';\nimport { IntroService } from '../services/intro.service';\nimport { PresetService } from '../services/preset.service';\nimport { ProjectService } from '../services/project.service';\nimport { SceneService } from '../services/scene.service';\nimport { SceneSettingsComponent } from './scene-settings/scene-settings.component';\n\n@Component({\n selector: 'lib-app-scene',\n templateUrl: './scene.component.html',\n styleUrls: ['./scene.component.css'],\n})\nexport class SceneComponent implements OnInit {\n constructor(\n public sceneService: SceneService,\n public presetService: PresetService,\n public projectService: ProjectService,\n private modalService: BsModalService,\n public introService: IntroService\n ) {}\n\n ngOnInit() {}\n\n selectScene(event: any, index: number) {\n this.sceneService.selectScene(index);\n }\n\n removeScene() {\n if (this.sceneService.selectedScenes.length === 0) {\n return;\n }\n\n this.sceneService.removeScene(this.sceneService.selectedScenes[0]);\n }\n\n openSettings(scene: Scene) {\n const bsModalRef = this.modalService.show(SceneSettingsComponent, {\n keyboard: true,\n ignoreBackdropClick: false,\n class: '',\n initialState: { scene },\n });\n }\n}\n","import { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { NgxBootstrapSliderModule } from 'ngx-bootstrap-slider';\nimport { AccordionModule } from 'ngx-bootstrap/accordion';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TypeaheadModule } from 'ngx-bootstrap/typeahead';\nimport { DropzoneModule } from 'ngx-dropzone-wrapper';\nimport { SortablejsModule } from 'ngx-sortablejs';\nimport { ToastrModule } from 'ngx-toastr';\nimport { ArraySortPipe } from './array-sort-pipe';\nimport { DesignerComponent } from './designer.component';\nimport { EffectCurveComponent } from './effect/effect-curve/effect-curve.component';\nimport { EffectPanTiltComponent } from './effect/effect-pan-tilt/effect-pan-tilt.component';\nimport { EffectComponent } from './effect/effect.component';\nimport { ErrorDialogComponent } from './error-dialog/error-dialog.component';\nimport { FixturePoolCreateFromFileComponent } from './fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component';\nimport { FixturePoolComponent } from './fixture-pool/fixture-pool.component';\nimport { FixtureCapabilityChannelComponent } from './fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component';\nimport { FixtureCapabilityColorWheelComponent } from './fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component';\nimport { FixtureCapabilityColorComponent } from './fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component';\nimport { FixtureCapabilityDimmerComponent } from './fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component';\nimport { FixtureCapabilityPanTiltComponent } from './fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component';\nimport { FixtureCapabilityComponent } from './fixture/fixture-capability/fixture-capability.component';\nimport { FixtureChannelComponent } from './fixture/fixture-channel/fixture-channel.component';\nimport { FixtureSettingsPositionComponent } from './fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component';\nimport { FixtureSettingsStageComponent } from './fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component';\nimport { FixtureSettingsComponent } from './fixture/fixture-settings/fixture-settings.component';\nimport { FixtureComponent } from './fixture/fixture.component';\nimport { IntroComponent } from './intro/intro.component';\nimport { MasterDimmerComponent } from './master-dimmer/master-dimmer.component';\nimport { PresetSettingsComponent } from './preset/preset-settings/preset-settings.component';\nimport { PresetComponent } from './preset/preset.component';\nimport { PreviewComponent } from './preview/preview.component';\nimport { ProjectBrowserComponent } from './project/project-browser/project-browser.component';\nimport { ProjectImportComponent } from './project/project-import/project-import.component';\nimport { ProjectSaveComponent } from './project/project-save/project-save.component';\nimport { ProjectShareComponent } from './project/project-share/project-share.component';\nimport { SceneSettingsComponent } from './scene/scene-settings/scene-settings.component';\nimport { SceneComponent } from './scene/scene.component';\nimport { CompositionSettingsComponent } from './timeline/composition-settings/composition-settings.component';\nimport { TimelineGridComponent } from './timeline/timeline-grid/timeline-grid.component';\nimport { TimelineComponent } from './timeline/timeline.component';\nimport { UserLoginComponent } from './user/user-login/user-login.component';\nimport { UserRegisterComponent } from './user/user-register/user-register.component';\nimport { WaitDialogComponent } from './wait-dialog/wait-dialog.component';\nimport { WarningDialogComponent } from './warning-dialog/warning-dialog.component';\n\n@NgModule({\n declarations: [\n DesignerComponent,\n WarningDialogComponent,\n PreviewComponent,\n EffectCurveComponent,\n EffectPanTiltComponent,\n SceneComponent,\n TimelineComponent,\n FixtureCapabilityColorComponent,\n FixtureComponent,\n FixtureSettingsPositionComponent,\n FixtureCapabilityComponent,\n FixtureSettingsComponent,\n EffectComponent,\n FixturePoolComponent,\n PresetComponent,\n MasterDimmerComponent,\n FixtureCapabilityDimmerComponent,\n TimelineGridComponent,\n CompositionSettingsComponent,\n ArraySortPipe,\n FixtureCapabilityPanTiltComponent,\n FixtureCapabilityChannelComponent,\n FixtureChannelComponent,\n FixtureCapabilityColorWheelComponent,\n UserLoginComponent,\n UserRegisterComponent,\n ProjectBrowserComponent,\n WaitDialogComponent,\n ProjectImportComponent,\n ProjectShareComponent,\n ErrorDialogComponent,\n FixtureSettingsStageComponent,\n IntroComponent,\n PresetSettingsComponent,\n SceneSettingsComponent,\n ProjectSaveComponent,\n FixturePoolCreateFromFileComponent,\n ],\n imports: [\n RouterModule.forRoot([]),\n BrowserModule,\n BrowserAnimationsModule,\n HttpClientModule,\n FormsModule,\n NgxBootstrapSliderModule,\n TranslateModule,\n AccordionModule,\n PopoverModule,\n TypeaheadModule,\n SortablejsModule,\n DropzoneModule,\n ToastrModule.forRoot({\n newestOnTop: true,\n }),\n ],\n exports: [DesignerComponent],\n})\nexport class DesignerModule {}\n","/*\n * Public API Surface of designer\n */\n\nexport * from './lib/designer.service';\nexport * from './lib/designer.component';\nexport * from './lib/designer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n\nexport {ArraySortPipe as ɵbm} from './lib/array-sort-pipe';\nexport {EffectCurveComponent as ɵx} from './lib/effect/effect-curve/effect-curve.component';\nexport {EffectPanTiltComponent as ɵy} from './lib/effect/effect-pan-tilt/effect-pan-tilt.component';\nexport {EffectComponent as ɵbf} from './lib/effect/effect.component';\nexport {ErrorDialogComponent as ɵbx} from './lib/error-dialog/error-dialog.component';\nexport {FixturePoolCreateFromFileComponent as ɵcd} from './lib/fixture-pool/fixture-pool-create-from-file/fixture-pool-create-from-file.component';\nexport {FixturePoolComponent as ɵbg} from './lib/fixture-pool/fixture-pool.component';\nexport {FixtureCapabilityChannelComponent as ɵbo} from './lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component';\nexport {FixtureCapabilityColorWheelComponent as ɵbq} from './lib/fixture/fixture-capability/fixture-capability-color-wheel/fixture-capability-color-wheel.component';\nexport {FixtureCapabilityColorComponent as ɵba} from './lib/fixture/fixture-capability/fixture-capability-color/fixture-capability-color.component';\nexport {FixtureCapabilityDimmerComponent as ɵbj} from './lib/fixture/fixture-capability/fixture-capability-dimmer/fixture-capability-dimmer.component';\nexport {FixtureCapabilityPanTiltComponent as ɵbn} from './lib/fixture/fixture-capability/fixture-capability-pan-tilt/fixture-capability-pan-tilt.component';\nexport {FixtureCapabilityComponent as ɵbd} from './lib/fixture/fixture-capability/fixture-capability.component';\nexport {FixtureChannelComponent as ɵbp} from './lib/fixture/fixture-channel/fixture-channel.component';\nexport {FixtureSettingsPositionComponent as ɵbc} from './lib/fixture/fixture-settings/fixture-settings-position/fixture-settings-position.component';\nexport {FixtureSettingsStageComponent as ɵby} from './lib/fixture/fixture-settings/fixture-settings-stage/fixture-settings-stage.component';\nexport {FixtureSettingsComponent as ɵbe} from './lib/fixture/fixture-settings/fixture-settings.component';\nexport {FixtureComponent as ɵbb} from './lib/fixture/fixture.component';\nexport {IntroComponent as ɵbz} from './lib/intro/intro.component';\nexport {MasterDimmerComponent as ɵbi} from './lib/master-dimmer/master-dimmer.component';\nexport {PresetSettingsComponent as ɵca} from './lib/preset/preset-settings/preset-settings.component';\nexport {PresetComponent as ɵbh} from './lib/preset/preset.component';\nexport {PreviewComponent as ɵa} from './lib/preview/preview.component';\nexport {ProjectBrowserComponent as ɵbt} from './lib/project/project-browser/project-browser.component';\nexport {ProjectImportComponent as ɵbv} from './lib/project/project-import/project-import.component';\nexport {ProjectSaveComponent as ɵcc} from './lib/project/project-save/project-save.component';\nexport {ProjectShareComponent as ɵbw} from './lib/project/project-share/project-share.component';\nexport {SceneSettingsComponent as ɵcb} from './lib/scene/scene-settings/scene-settings.component';\nexport {SceneComponent as ɵz} from './lib/scene/scene.component';\nexport {AnimationService as ɵg} from './lib/services/animation.service';\nexport {ConfigService as ɵk} from './lib/services/config.service';\nexport {EffectService as ɵj} from './lib/services/effect.service';\nexport {ErrorDialogService as ɵv} from './lib/services/error-dialog.service';\nexport {FixturePoolService as ɵs} from './lib/services/fixture-pool.service';\nexport {FixtureService as ɵb} from './lib/services/fixture.service';\nexport {HotkeyTargetExcludeService as ɵp} from './lib/services/hotkey-target-exclude.service';\nexport {IntroService as ɵr} from './lib/services/intro.service';\nexport {PresetService as ɵi} from './lib/services/preset.service';\nexport {PreviewMeshService as ɵf} from './lib/services/preview-mesh.service';\nexport {PreviewService as ɵh} from './lib/services/preview.service';\nexport {ProjectLoadService as ɵu} from './lib/services/project-load.service';\nexport {ProjectService as ɵc} from './lib/services/project.service';\nexport {SceneService as ɵl} from './lib/services/scene.service';\nexport {TimelineService as ɵm} from './lib/services/timeline.service';\nexport {UniverseService as ɵn} from './lib/services/universe.service';\nexport {UserEnsureLoginService as ɵt} from './lib/services/user-ensure-login.service';\nexport {UserService as ɵe} from './lib/services/user.service';\nexport {UuidService as ɵd} from './lib/services/uuid.service';\nexport {WarningDialogService as ɵq} from './lib/services/warning-dialog.service';\nexport {CompositionSettingsComponent as ɵbl} from './lib/timeline/composition-settings/composition-settings.component';\nexport {TimelineGridComponent as ɵbk} from './lib/timeline/timeline-grid/timeline-grid.component';\nexport {TimelineComponent as ɵo} from './lib/timeline/timeline.component';\nexport {UserLoginComponent as ɵbr} from './lib/user/user-login/user-login.component';\nexport {UserRegisterComponent as ɵbs} from './lib/user/user-register/user-register.component';\nexport {WaitDialogComponent as ɵbu} from './lib/wait-dialog/wait-dialog.component';\nexport {WarningDialogComponent as ɵw} from './lib/warning-dialog/warning-dialog.component';"],"names":["THREE.MeshStandardMaterial","THREE.BoxBufferGeometry","THREE.Mesh","THREE.MeshLambertMaterial","THREE.Math","THREE.Object3D","THREE.ShaderMaterial","THREE.Color","THREE.CylinderGeometry","THREE.Matrix4","THREE.SpotLight","THREE.SpotLightHelper","THREE.PointLight","THREE.WebGLRenderer","THREE.PerspectiveCamera","THREE.Vector3","THREE.BoxGeometry","THREE.Scene","THREE.AmbientLight"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAKa,eAAe,GAA5B,MAAa,eAAe;IAC1B;KAAgB;EACjB;;AAFY,eAAe;IAH3B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;;GACW,eAAe,CAE3B;;ACPD,IAAY,qBA4CX;AA5CD,WAAY,qBAAqB;IAC/B,kDAAyB,CAAA;IACzB,wDAA+B,CAAA;IAC/B,oDAA2B,CAAA;IAC3B,0DAAiC,CAAA;IACjC,gDAAuB,CAAA;IACvB,0DAAiC,CAAA;IACjC,oDAA2B,CAAA;IAC3B,8DAAqC,CAAA;IACrC,oCAAW,CAAA;IACX,wDAA+B,CAAA;IAC/B,sCAAa,CAAA;IACb,0DAAiC,CAAA;IACjC,sDAA6B,CAAA;IAC7B,gDAAuB,CAAA;IACvB,kDAAyB,CAAA;IACzB,gEAAuC,CAAA;IACvC,wDAA+B,CAAA;IAC/B,oDAA2B,CAAA;IAC3B,0DAAiC,CAAA;IACjC,4DAAmC,CAAA;IACnC,8DAAqC,CAAA;IACrC,wCAAe,CAAA;IACf,sCAAa,CAAA;IACb,sCAAa,CAAA;IACb,kDAAyB,CAAA;IACzB,wCAAe,CAAA;IACf,oDAA2B,CAAA;IAC3B,wCAAe,CAAA;IACf,wDAA+B,CAAA;IAC/B,0DAAiC,CAAA;IACjC,wDAA+B,CAAA;IAC/B,oEAA2C,CAAA;IAC3C,oCAAW,CAAA;IACX,gDAAuB,CAAA;IACvB,4CAAmB,CAAA;IACnB,gDAAuB,CAAA;IACvB,8CAAqB,CAAA;IACrB,wCAAe,CAAA;IACf,sCAAa,CAAA;IACb,oDAA2B,CAAA;IAC3B,4CAAmB,CAAA;IACnB,0CAAiB,CAAA;IACjB,sDAA6B,CAAA;AAC/B,CAAC,EA5CW,qBAAqB,KAArB,qBAAqB,QA4ChC;AAED,IAAY,sBAcX;AAdD,WAAY,sBAAsB;IAChC,qCAAW,CAAA;IACX,yCAAe,CAAA;IACf,uCAAa,CAAA;IACb,uCAAa,CAAA;IACb,6CAAmB,CAAA;IACnB,2CAAiB,CAAA;IACjB,yCAAe,CAAA;IACf,yCAAe,CAAA;IACf,mDAA2B,CAAA;IAC3B,mDAA2B,CAAA;IAC3B,mCAAS,CAAA;IACT,uCAAa,CAAA;IACb,2CAAiB,CAAA;AACnB,CAAC,EAdW,sBAAsB,KAAtB,sBAAsB,QAcjC;MAEY,iBAAiB;IAc5B,YAAY,IAAU;QATtB,aAAQ,GAAa,EAAE,CAAC;QAUtB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC/B;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;KAC7B;;;MC5FU,cAAc;IAOzB,YAAY,IAAU;QANtB,uBAAkB,GAAa,EAAE,CAAC;QAGlC,iBAAY,GAAwB,EAAE,CAAC;QAIrC,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;SACnD;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAElD,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC1D;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE;YAC5B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;aAC3D;SACF;KACF;;;MC5BU,WAAW;IAKtB,YAAY,IAAU;QAFtB,aAAQ,GAAU,EAAE,CAAC;QAGnB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAEhC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;SAC/B;KACF;;;AChBH,IAAY,oBAUX;AAVD,WAAY,oBAAoB;IAC9B,qCAAa,CAAA;IACb,yCAAiB,CAAA;IACjB,uCAAe,CAAA;IACf,qCAAa,CAAA;IACb,uCAAe,CAAA;IACf,qCAAa,CAAA;IACb,uCAAe,CAAA;IACf,iEAAyC,CAAA;IACzC,6DAAqC,CAAA;AACvC,CAAC,EAVW,oBAAoB,KAApB,oBAAoB,QAU/B;MAEY,gBAAgB;IAK3B,YAAY,IAAU;QAFtB,WAAM,GAAa,EAAE,CAAC;QAGpB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SAC3B;KACF;;;MCzBU,YAAY;IAGvB,YAAY,IAAU;QAFtB,UAAK,GAAuB,EAAE,CAAC;QAG7B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;aAC7C;SACF;KACF;;;ACXH,IAAY,eAkBX;AAlBD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,kDAAiC,CAAA;IACjC,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;IACjB,8BAAW,CAAA;IACX,oCAAiB,CAAA;IACjB,kCAAe,CAAA;IACf,kCAAe,CAAA;IACf,oCAAiB,CAAA;IACjB,8CAA6B,CAAA;IAC7B,0CAAyB,CAAA;IACzB,sCAAmB,CAAA;IACnB,kCAAe,CAAA;IACf,kCAAe,CAAA;IACf,oCAAiB,CAAA;IACjB,kCAAe,CAAA;IACf,oDAAmC,CAAA;AACrC,CAAC,EAlBW,eAAe,KAAf,eAAe,QAkB1B;MAEY,cAAc;IAiBzB,YAAY,IAAU;QAXtB,oBAAe,GAAG,KAAK,CAAC;QAGxB,eAAU,GAAsB,EAAE,CAAC;QACnC,sBAAiB,GAAQ,EAAE,CAAC;QAE5B,WAAM,GAAQ,EAAE,CAAC;;QAGjB,UAAK,GAAkB,EAAE,CAAC;QAGxB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;;QAGD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAC;QAExD,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE;gBACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,QAAkB,CAAC,CAAC,CAAC;aAC3D;SACF;aAAM,IAAI,IAAI,CAAC,YAAY,EAAE;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAsB,CAAC,CAAC,CAAC;SACpE;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC/C,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;aAC/B;SACF;QACD,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;gBAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;aACxC;SACF;QACD,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE;gBAC1D,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC5E,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC;aACnD;SACF;QACD,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;SAC7C;KACF;;;MC1EU,aAAa;IAA1B;QAIE,aAAQ,GAA2B,EAAE,CAAC;KACvC;;;MCNY,uBAAuB;IAApC;;QAUE,eAAU,GAAuB,EAAE,CAAC;;QAGpC,iBAAY,GAAG,KAAK,CAAC;KAGtB;;;MChBY,oBAAoB;IAAjC;;QAQE,iBAAY,GAA8B,EAAE,CAAC;KAU9C;;;MCtBY,KAAK;IAKhB,YAAY,GAAY,EAAE,KAAc,EAAE,IAAa;QACrD,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;;;ACTH,IAAY,WAMX;AAND,WAAY,WAAW;IACrB,oCAAqB,CAAA;IACrB,kCAAmB,CAAA;IACnB,0CAA2B,CAAA;IAC3B,wCAAyB,CAAA;IACzB,gCAAiB,CAAA;AACnB,CAAC,EANW,WAAW,KAAX,WAAW,QAMtB;MAEY,OAAO;IAoBlB,YAAY,IAAU;QAftB,oBAAe,GAAG,CAAC,CAAC;QAEpB,gBAAW,GAAgB,WAAW,CAAC,QAAQ,CAAC;;;QAIhD,cAAS,GAAG,CAAC,CAAC;QACd,cAAS,GAAG,CAAC,CAAC;QACd,cAAS,GAAG,CAAC,CAAC;;QAGd,cAAS,GAAG,CAAC,CAAC;QACd,cAAS,GAAG,CAAC,CAAC;QACd,cAAS,GAAG,CAAC,CAAC;QAGZ,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;KACjC;;;MC9CU,mBAAmB;IAK9B,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;KACjC;;;MCXU,WAAW;IA+BtB,YAAY,IAAU;;QA1Bf,aAAQ,GAAG,OAAO,CAAC;QAGnB,uBAAkB,GAAG,KAAK,CAAC;QAE3B,mBAAc,GAAG,GAAG,CAAC;QACrB,uBAAkB,GAAG,CAAC,CAAC;QACvB,uBAAkB,GAAG,CAAC,CAAC;QAEvB,eAAU,GAAG,IAAI,CAAC;QAElB,iBAAY,GAAG,KAAK,CAAC;;QAGrB,aAAQ,GAAG,SAAS,CAAC;QACrB,qBAAgB,GAAG,CAAC,CAAC;;QAGrB,mBAAc,GAAG,CAAC,CAAC;;QAGnB,mBAAc,GAAG,CAAC,CAAC;;QAGnB,yBAAoB,GAA0B,EAAE,CAAC;QAGtD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAClD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAClD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;;QAGlC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC1C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAE1C,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,KAAK,MAAM,mBAAmB,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC3D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC;aAC9E;SACF;KACF;;;MC7DmB,MAAM;IAK1B,YAAY,IAAY,EAAE,IAAU;QAFpC,YAAO,GAAG,IAAI,CAAC;QAGb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;KAC7B;;;MCdU,0BAA0B;IAIrC,YAAY,IAAU;QAFtB,aAAQ,GAAa,EAAE,CAAC;QAGtB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAEpC,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAChD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC7B;SACF;KACF;;;MCZU,WAAY,SAAQ,MAAM;IAYrC,YAAY,IAAU;QACpB,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAZvB,cAAS,GAAG,MAAM,CAAC;QAEnB,iBAAY,GAAwB,EAAE,CAAC;QACvC,aAAQ,GAAiC,EAAE,CAAC;QAE5C,iBAAY,GAAG,IAAI,CAAC;QACpB,gBAAW,GAAG,CAAC,CAAC;QAChB,cAAS,GAAG,CAAC,CAAC;QACd,aAAQ,GAAG,GAAG,CAAC;QACf,kBAAa,GAAG,CAAC,CAAC;QAKhB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC;aAC3D;SACF;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAC;aAC7D;SACF;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;KACjC;IAEM,gBAAgB,CAAC,UAAkB,EAAE,YAAqB;;QAE/D,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,IAAI,YAAY,EAAE;YAChB,YAAY,GAAG,YAAY,CAAC;SAC7B;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,GAAG,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;;QAGnE,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,QAAQ,IAAI,CAAC,SAAS;YACpB,KAAK,MAAM;gBACT,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACxH,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;oBAC5F,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;iBAC5C;qBAAM;oBACL,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;iBAC5C;gBACD,MAAM;YACR,KAAK,UAAU;;gBAEb,MAAM;YACR,KAAK,UAAU;;gBAEb,MAAM;YACR,KAAK,kBAAkB;;gBAErB,MAAM;SACT;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACxC;;;MC7EU,aAAc,SAAQ,MAAM;IAGvC,YAAY,IAAU;QACpB,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAH1B,kBAAa,GAAG,CAAC,CAAC;KAIjB;IAED,gBAAgB,CAAC,UAAkB,EAAE,YAAqB;;QAExD,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,IAAI,YAAY,EAAE;YAChB,YAAY,GAAG,YAAY,CAAC;SAC7B;;;;QAOD,OAAO,CAAC,CAAC;KACV;;;MCrBU,sBAAsB;IAWjC,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAc,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAEpC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;QAC5C,IAAI,CAAC,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAe,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;KACnC;;;MCxBU,mBAAmB;IAK9B,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;KACzB;;;MCNU,MAAM;IA2BjB,YAAY,IAAU;;QAtBtB,iBAAY,GAAa,EAAE,CAAC;;QAG5B,yBAAoB,GAA0B,EAAE,CAAC;QACjD,4BAAuB,GAA6B,EAAE,CAAC;;QAGvD,YAAO,GAAa,EAAE,CAAC;;QAQvB,iBAAY,GAAG,CAAC,CAAC;QACjB,kBAAa,GAAG,CAAC,CAAC;;QAGlB,cAAS,GAAG,KAAK,CAAC;QAClB,gBAAW,GAAG,KAAK,CAAC;QAGlB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC7B,KAAK,MAAM,mBAAmB,IAAI,IAAI,CAAC,oBAAoB,EAAE;gBAC3D,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,mBAAmB,CAAC,CAAC,CAAC;aAC9E;SACF;QACD,IAAI,IAAI,CAAC,uBAAuB,EAAE;YAChC,KAAK,MAAM,sBAAsB,IAAI,IAAI,CAAC,uBAAuB,EAAE;gBACjE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,sBAAsB,CAAC,CAAC,CAAC;aACvF;SACF;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,QAAQ,MAAM,CAAC,IAAI;oBACjB,KAAK,OAAO;wBACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC3C,MAAM;oBACR,KAAK,UAAU;wBACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC7C,MAAM;iBACT;aACF;SACF;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;KACrC;;;MCnEU,KAAK;IAiBhB,YAAY,IAAU;QAbtB,UAAK,GAAG,MAAM,CAAC;;QAGf,gBAAW,GAAa,EAAE,CAAC;;QAG3B,iBAAY,GAAG,CAAC,CAAC;QACjB,kBAAa,GAAG,CAAC,CAAC;;QAGlB,cAAS,GAAG,KAAK,CAAC;QAClB,gBAAW,GAAG,KAAK,CAAC;QAGlB,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;SACrC;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;KACrC;;;MC5BU,OAAO;IA8BlB,YAAY,IAAU;QAxBf,iBAAY,GAAG,GAAG,CAAC;QACnB,kBAAa,GAAG,GAAG,CAAC;QACpB,iBAAY,GAAG,GAAG,CAAC;QAEnB,uBAAkB,GAAG,EAAE,CAAC;QACxB,yBAAoB,GAAG,CAAC,CAAC;QACzB,uBAAkB,GAAG,EAAE,CAAC;QAExB,sBAAiB,GAAG,CAAC,CAAC;QAGtB,uBAAkB,GAAa,EAAE,CAAC;;QAGlC,kBAAa,GAAG,IAAI,CAAC;QAIrB,iBAAY,GAAkB,EAAE,CAAC;QACjC,oBAAe,GAAqB,EAAE,CAAC;QACvC,aAAQ,GAAc,EAAE,CAAC;QACzB,WAAM,GAAY,EAAE,CAAC;QACrB,YAAO,GAAa,EAAE,CAAC;QAG5B,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;SACR;QAED,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAElC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QAEtC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAClD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACtD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAElD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAEhD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAClD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACxC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,uBAAuB,CAAC;QAE5D,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC3C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;aACtD;SACF;QAED,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,eAAe,EAAE;gBACjD,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;aAC/D;SACF;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;aAC1C;SACF;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;gBAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;aACpC;SACF;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;gBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;aACvC;SACF;KACF;;;ICjFU,WAAW,GAAxB,MAAa,WAAW;IAMtB,YAAoB,IAAgB;QAAhB,SAAI,GAAJ,IAAI,CAAY;QAClC,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAEO,oBAAoB;QAC1B,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;YAC3C,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;SACtF;QACD,IAAI,CAAC,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;KAClD;;IAGD,QAAQ,CAAC,KAAa,EAAE,QAAgB,EAAE,QAAgB;QACxD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC;KAC5G;;IAGD,KAAK,CAAC,KAAa,EAAE,QAAgB;QACnC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,EAAE,IAAI,CAAC,CAAC,IAAI,CAChF,GAAG,CAAC,CAAC,MAAW;YACd,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC1B,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;;YAGhC,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;;YAGlE,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1C,YAAY,CAAC,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9E,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEhD,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAC7B,CAAC,CACH,CAAC;KACH;IAED,MAAM;QACJ,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACjC,YAAY,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC3C,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAEpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,OAAO,KAAK,CAAC;SACd;QAED,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE;YACrC,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;KACb;IAED,UAAU;QACR,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,OAAO,IAAI,CAAC;SACb;QAED,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAChC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACtD,OAAO,OAAO,CAAC;KAChB;IAED,kBAAkB,CAAC,OAAgB;QACjC,YAAY,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,EAAE,EAAE;YACd,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC1D;aAAM;YACL,YAAY,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;SACtC;KACF;IAED,oBAAoB;QAClB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACtC,OAAO,IAAI,CAAC;SACb;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;KAC3D;IAED,sBAAsB;QACpB,OAAO,YAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;KAC5C;EACF;;YAzF2B,UAAU;;;AANzB,WAAW;IAHvB,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAO0B,UAAU;GANzB,WAAW,CA+FvB;;ICnGY,WAAW,GAAxB,MAAa,WAAW;IACtB;KAAgB;IAEhB,OAAO;QACL,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;;YAE/D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;;YAGnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC;YAE1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SACvB,CAAC,CAAC;KACJ;EACF;;AAdY,WAAW;IAHvB,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;;GACW,WAAW,CAcvB;;ICLY,cAAc,GAA3B,MAAa,cAAc;IAIzB,YACU,WAAwB,EACxB,IAAgB,EAChB,WAAwB,EACxB,MAAc,EACd,cAA8B,EAC9B,gBAAkC,EAClC,aAA4B;QAN5B,gBAAW,GAAX,WAAW,CAAa;QACxB,SAAI,GAAJ,IAAI,CAAY;QAChB,gBAAW,GAAX,WAAW,CAAa;QACxB,WAAM,GAAN,MAAM,CAAQ;QACd,mBAAc,GAAd,cAAc,CAAgB;QAC9B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,kBAAa,GAAb,aAAa,CAAe;QAEpC,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC;KACnC;IAEO,OAAO,CAAC,OAAgB;QAC9B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CACxG,GAAG,CAAC,CAAC,QAAa;YAChB,IAAI,QAAQ,EAAE;gBACZ,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC;gBACzB,IAAI,QAAQ,CAAC,UAAU,EAAE;oBACvB,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;iBAC1C;gBACD,MAAM,WAAW,GAAW;oBAC1B,EAAE,EAAE,OAAO,CAAC,EAAE;oBACd,KAAK,EAAE,OAAO,CAAC,UAAU;iBAC1B,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;oBACvB,UAAU,EAAE,IAAI,CAAC,cAAc;oBAC/B,WAAW;oBACX,mBAAmB,EAAE,OAAO;iBAC7B,CAAC,CAAC;aACJ;YACD,OAAO,IAAI,CAAC;SACb,CAAC,CACH,CAAC;KACH;IAED,IAAI,CAAC,OAAgB;;QAEnB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,CAC7B;YACE,MAAM,GAAG,GAAG,+BAA+B,CAAC;YAC5C,MAAM,KAAK,GAAG,qCAAqC,CAAC;YAEpD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;gBACvD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aACxD,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;SAC9C,EACD,CAAC,QAAQ;YACP,MAAM,GAAG,GAAG,6BAA6B,CAAC;YAC1C,MAAM,KAAK,GAAG,mCAAmC,CAAC;YAClD,MAAM,KAAK,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YAE5E,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;gBACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aAC3E,CAAC,CAAC;SACJ,CACF,CAAC;KACH;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAC/E,GAAG,CAAC,CAAC,QAAa;YAChB,MAAM,QAAQ,GAAc,EAAE,CAAC;YAC/B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC3C,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aAC9B;YACD,OAAO,QAAQ,CAAC;SACjB,CAAC,CACH,CAAC;KACH;IAED,aAAa,CAAC,OAAgB;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,OAAO,CAAC,EAAE,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;KAC3H;IAED,UAAU,CAAC,EAAU,EAAE,IAAY,EAAE,UAAmB;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAClI,GAAG,CAAC,CAAC,QAAa;YAChB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;YACtC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;YAEhB,OAAO,OAAO,CAAC;SAChB,CAAC,CACH,CAAC;KACH;EACF;;YAxFwB,WAAW;YAClB,UAAU;YACH,WAAW;YAChB,MAAM;YACE,cAAc;YACZ,gBAAgB;YACnB,aAAa;;;AAX3B,cAAc;IAH1B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAMuB,WAAW;QAClB,UAAU;QACH,WAAW;QAChB,MAAM;QACE,cAAc;QACZ,gBAAgB;QACnB,aAAa;GAX3B,cAAc,CA6F1B;;ICpFY,cAAc,GAA3B,MAAa,cAAc;IAQzB,YACU,IAAgB,EAChB,cAA8B,EAC9B,gBAAkC,EAClC,aAA4B,EAC5B,WAAwB;QAJxB,SAAI,GAAJ,IAAI,CAAY;QAChB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QAZlC,mBAAc,GAAoB,EAAE,CAAC;;QAGrC,sBAAiB,GAAG,KAAK,CAAC;QAE1B,6BAAwB,GAAc,EAAE,CAAC;KAQrC;IAEJ,gBAAgB,CAAC,IAAY;QAC3B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC1D,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE;gBACzB,OAAO,OAAO,CAAC;aAChB;SACF;KACF;IAED,sBAAsB,CAAC,IAAY;QACjC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE;YACzC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE;gBACjC,OAAO,OAAO,CAAC;aAChB;SACF;KACF;;IAGD,iBAAiB;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CACnC,GAAG,CAAC,CAAC,QAAkB;YACrB,MAAM,cAAc,GAAqB,EAAE,CAAC;YAE5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,cAAc,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;aAClD;YAED,OAAO,cAAc,CAAC;SACvB,CAAC,CACH,CAAC;KACH;IAED,gBAAgB,CAAC,IAAY;QAC3B,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,EAAE;YACxE,IAAI,cAAc,CAAC,IAAI,KAAK,IAAI,EAAE;gBAChC,OAAO,cAAc,CAAC;aACvB;SACF;KACF;IAED,iBAAiB,CAAC,IAAY;QAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAElD,IAAI,aAAa,EAAE;;YAEjB,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;SACtB;;QAGD,OAAO,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CACzH,GAAG,CAAC,CAAC,MAAM;YACT,MAAM,UAAU,mCAAQ,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAK,MAAM,CAAC,CAAC,CAAC,CAAE,CAAC;YACrD,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC;YACtD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SAClE,CAAC,CACH,CAAC;KACH;IAED,mBAAmB,CAAC,KAAa;;QAE/B,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;SAClD;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC;SAC3B;QAED,OAAO,SAAS,CAAC;KAClB;IAED,kBAAkB,CAAC,KAAmB,EAAE,UAAkB;QACxD,IAAI,MAAM,GAAa,EAAE,CAAC;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAEzD,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;YAC7B,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACrC;SACF;QAED,OAAO,MAAM,CAAC;KACf;IAED,sBAAsB,CAAC,KAAmB,EAAE,UAAkB;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAY,EAAE,CAAC;QAE9B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YACvB,OAAO,SAAS,CAAC;SAClB;QAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;SACtC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;KAClC;IAEO,cAAc,CAAC,CAAS;QAC9B,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KAC3C;IAED,QAAQ,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QACtC,OAAO,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;KACvF;IAED,QAAQ,CAAC,GAAW;;QAElB,MAAM,cAAc,GAAG,kCAAkC,CAAC;QAC1D,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAC9B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;KAC7G;IAED,SAAS,CAAC,MAAe;;QAEvB,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;YAC1B,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC;YACf,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;YACjB,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC;SACjB;QAED,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;QACnB,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;QACnB,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC;QAEnB,OAAO,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC3B;IAED,gBAAgB,CAAC,KAAmB,EAAE,QAA8B;QAClE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;YAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAC1B,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,cAAc,CAAC,OAAuB,EAAE,SAAiB;QACvD,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE;YACrC,IAAI,QAAQ,KAAK,SAAS,EAAE;gBAC1B,OAAO,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;aACjC;SACF;;QAGD,OAAO,SAAS,CAAC;KAClB;IAEO,aAAa,CAAC,KAAmB,EAAE,UAAkB;;QAE3D,MAAM,KAAK,GAAuB,EAAE,CAAC;QAErC,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,KAAK,CAAC;SACd;QAED,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;;YAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACpC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE;gBAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;aACjC;SACF;aAAM;;YAEL,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;SACzC;QAED,OAAO,KAAK,CAAC;KACd;IAED,gBAAgB,CAAC,OAAuB,EAAE,OAAgB;QACxD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;YAChC,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,aAAa,EAAE;oBAC5C,OAAO,IAAI,CAAC;iBACb;aACF;iBAAM;gBACL,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,aAAa,EAAE;oBACvC,OAAO,IAAI,CAAC;iBACb;aACF;SACF;KACF;IAEO,oBAAoB,CAAC,UAA6B,EAAE,WAAmB,EAAE,OAAuB;QACtG,MAAM,uBAAuB,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAC9D,uBAAuB,CAAC,UAAU,GAAG,UAAU,CAAC;QAChD,IAAI,UAAU,CAAC,UAAU,EAAE;;YAEzB,IAAI,OAAO,UAAU,CAAC,KAAK,KAAK,QAAQ,EAAE;gBACxC,uBAAuB,CAAC,SAAS,GAAG,UAAU,CAAC,KAAe,CAAC;aAChE;iBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBAC1C,uBAAuB,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACzD;iBAAM;gBACL,uBAAuB,CAAC,SAAS,GAAG,WAAW,CAAC;aACjD;YACD,uBAAuB,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,uBAAuB,CAAC,SAAS,CAAC,CAAC;YAChG,uBAAuB,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;YAC9G,uBAAuB,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;SACzH;QACD,IAAI,uBAAuB,CAAC,UAAU,CAAC,QAAQ,IAAI,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3G,uBAAuB,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAC9C,CAAC,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CACtG,CAAC;SACH;QACD,OAAO,uBAAuB,CAAC;KAChC;IAEO,wBAAwB,CAC9B,cAA8B,EAC9B,WAAmB,EACnB,OAAuB;QAEvB,MAAM,WAAW,GAA8B,EAAE,CAAC;QAElD,IAAI,cAAc,CAAC,UAAU,EAAE;YAC7B,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;SAC9F;aAAM,IAAI,cAAc,CAAC,YAAY,EAAE;YACtC,KAAK,MAAM,UAAU,IAAI,cAAc,CAAC,YAAY,EAAE;gBACpD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;aAC/E;SACF;QAED,OAAO,WAAW,CAAC;KACpB;IAEO,oBAAoB,CAAC,cAA8B;QACzD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACxE;IAEO,wBAAwB,CAAC,cAA8B;QAC7D,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YAChC,OAAO,SAAS,CAAC;SAClB;QAED,IAAI,KAAK,CAAC,cAAc,CAAC,YAAmB,CAAC,IAAK,cAAc,CAAC,YAAuB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;;YAEtG,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAE,cAAc,CAAC,YAAuB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;YAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,CAAC;YAC3D,OAAO,CAAC,QAAQ,GAAG,GAAG,IAAI,UAAU,CAAC;SACtC;aAAM;;YAEL,OAAO,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,YAAmB,CAAC,CAAC;SAC5D;KACF;IAEO,sBAAsB,CAAC,OAA6B,EAAE,OAAuB;QACnF,KAAK,MAAM,iBAAiB,IAAI,OAAO,CAAC,YAAY,EAAE;YACpD,IAAI,iBAAiB,CAAC,YAAY,EAAE;gBAClC,OAAO,iBAAiB,CAAC,KAAK,CAAC;aAChC;SACF;QAED,OAAO,SAAS,CAAC;KAClB;;;;;;;;;IAYD,gBAAgB,CAAC,OAAsB,EAAE,WAAmB;QAC1D,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;YACtC,IACE,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;iBAC5C,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EACjF;gBACA,OAAO,OAAO,CAAC;aAChB;SACF;QAED,OAAO,SAAS,CAAC;KAClB;IAED,iBAAiB,CAAC,OAAuB,EAAE,IAAiB;QAC1D,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAE5C,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,QAAQ,CAAC;SACjB;QAED,KAAK,MAAM,oBAAoB,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE;YACzE,MAAM,gBAAgB,GAAmB,OAAO,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;YAEzF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;;gBAEnC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;oBAC/B,MAAM,WAAW,GAAW,OAAiB,CAAC;;oBAG9C,IAAI,WAAW,KAAK,oBAAoB,EAAE;wBACxC,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAC;wBACxD,oBAAoB,CAAC,OAAO,GAAG,gBAAgB,CAAC;wBAChD,oBAAoB,CAAC,IAAI,GAAG,oBAAoB,CAAC;wBACjD,oBAAoB,CAAC,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,CAAC,CAAC;wBAC/H,MAAM,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;wBACjF,IAAI,YAAY,EAAE;4BAChB,oBAAoB,CAAC,YAAY,GAAG,YAAY,CAAC;yBAClD;wBACD,oBAAoB,CAAC,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;wBACxF,oBAAoB,CAAC,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;wBAC7F,QAAQ,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;qBACrC;iBACF;qBAAM;;oBAEL,QAAQ,CAAC,IAAI,CAAC,IAAI,oBAAoB,EAAE,CAAC,CAAC;iBAC3C;aACF;SACF;QAED,OAAO,QAAQ,CAAC;KACjB;IAED,oBAAoB;;;QAGlB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;QAEzB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC1D,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;YAE1C,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC;YAChC,aAAa,CAAC,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACnE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC3E,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;YAE3F,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACzC;KACF;IAED,iBAAiB,CACf,KAA4B,EAC5B,KAA4B,EAC5B,MAA8B,EAC9B,MAA8B,EAC9B,MAAc,EACd,MAAc,EACd,YAAoB,EACpB,YAAoB;;QAGpB,QACE,KAAK,KAAK,KAAK;aACd,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC;aAC7B,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC;aAC7B,CAAC,YAAY,IAAI,YAAY,KAAK,YAAY,CAAC,EAChD;KACH;IAED,yBAAyB,CAAC,OAAgB;QACxC,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,wBAAwB,EAAE;YAC3D,IAAI,eAAe,KAAK,OAAO,EAAE;gBAC/B,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,8BAA8B,CAAC,OAAgB;QAC7C,IAAI,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,EAAE;YAC3C,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;SACzF;aAAM;YACL,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC7C;KACF;IAED,mBAAmB,CAAC,OAAuB;QACzC,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,EAAE,CAAC;SACX;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YACnC,OAAO,EAAE,CAAC;SACX;QACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;YAC1B,OAAO,EAAE,CAAC;SACX;QACD,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC;KACpE;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;KAChD;IAED,qBAAqB,CAAC,WAAsB,EAAE,cAAsB;;QAElE,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAI,gBAAgB,GAAG,CAAC,CAAC;YAEzB,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;gBAExF,IAAI,CAAC,IAAI,OAAO,CAAC,eAAe,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;;oBAEtF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,gBAAgB,EAAE;wBAC3C,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;qBACzE;iBACF;aACF;YAED,IAAI,gBAAgB,GAAG,CAAC,EAAE;gBACxB,CAAC,IAAI,gBAAgB,GAAG,CAAC,CAAC;gBAC1B,YAAY,GAAG,CAAC,CAAC;aAClB;iBAAM;gBACL,YAAY,EAAE,CAAC;aAChB;YAED,IAAI,YAAY,KAAK,cAAc,EAAE;gBACnC,OAAO,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC;aAC7B;SACF;;QAGD,OAAO,CAAC,CAAC,CAAC;KACX;IAED,UAAU,CAAC,OAAuB,EAAE,WAAsB;QACxD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAE9B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1C,OAAO,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;QACnC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAE5B,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;SACpD;;QAGD,IAAI,qBAA6B,CAAC;QAClC,KAAK,MAAM,eAAe,IAAI,WAAW,EAAE;YACzC,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YAE3E,IAAI,eAAe,KAAK,OAAO,EAAE;gBAC/B,qBAAqB,GAAG,eAAe,CAAC,aAAa,CAAC;gBACtD,MAAM;aACP;SACF;QAED,IAAI,qBAAqB,EAAE;YACzB,OAAO,CAAC,aAAa,GAAG,qBAAqB,CAAC;SAC/C;aAAM;YACL,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;SAC7E;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QACxF,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAEnF,IAAI,YAAY,IAAI,CAAC,EAAE;YACrB,OAAO,CAAC,eAAe,GAAG,YAAY,CAAC;YACvC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,OAAO,OAAO,CAAC;SAChB;aAAM;;YAEL,MAAM,GAAG,GAAG,qCAAqC,CAAC;YAClD,MAAM,KAAK,GAAG,2CAA2C,CAAC;YAE1D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;gBACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aACtD,CAAC,CAAC;SACJ;KACF;EACF;;YAreiB,UAAU;YACA,cAAc;YACZ,gBAAgB;YACnB,aAAa;YACf,WAAW;;;AAbvB,cAAc;IAH1B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAUgB,UAAU;QACA,cAAc;QACZ,gBAAgB;QACnB,aAAa;QACf,WAAW;GAbvB,cAAc,CA8e1B;;IC5fY,kBAAkB,GAA/B,MAAa,kBAAkB;IAO7B;QANQ,WAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC1B,iBAAY,GAAG,IAAI,GAAG,EAAsB,CAAC;;QAG7C,sBAAiB,GAAG,IAAI,GAAG,EAAkC,CAAC;KAEtD;IAER,SAAS,CAAC,IAAY;QAC5B,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ;YAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,2BAA2B,GAAG,IAAI,GAAG,OAAO;;YAG5C,CAAC,IAAS;gBACR,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAErC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAE5B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC;aACrB;;YAGD,CAAC,GAAQ,QAAO;;YAGhB,CAAC,KAAU;gBACT,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACvB,CACF,CAAC;SACH,CAAC,CAAC;KACJ;IAEO,QAAQ,CAAC,IAAY;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAC1C,GAAG,CAAC,CAAC,KAAU;YACb,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEhC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE5B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAEpC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC;SACtB,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QAE7C,OAAO,UAAU,CAAC;KACnB;IAED,OAAO,CAAC,IAAY;QAClB,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YAC/B,OAAO,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;SAChD;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAChE;EACF;;AA7DY,kBAAkB;IAH9B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;;GACW,kBAAkB,CA6D9B;;MClEY,iBAAiB;IAK5B,YAAY,MAAc,EAAE,MAA2B,EAAE,KAAY;QACnE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;;;ICRU,gBAAgB,GAA7B,MAAa,gBAAgB;IAG3B;QAFA,eAAU,GAAG,CAAC,CAAC;KAEC;EACjB;;AAJY,gBAAgB;IAH5B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;;GACW,gBAAgB,CAI5B;;ICHY,aAAa,GAA1B,MAAa,aAAa;IAexB;QAbO,uBAAkB,GAAG,KAAK,CAAC;QAC3B,mBAAc,GAAG,KAAK,CAAC;QACvB,mBAAc,GAAG,KAAK,CAAC;QACvB,iBAAY,GAAG,CAAC,CAAC;QACjB,mBAAc,GAAG,KAAK,CAAC;QACvB,uBAAkB,GAAG,KAAK,CAAC;QAC3B,gBAAW,GAAG,KAAK,CAAC;QACpB,kBAAa,GAAG,KAAK,CAAC;QACtB,UAAK,GAAG,KAAK,CAAC;QACd,uBAAkB,GAAG,KAAK,CAAC;QAE3B,sBAAiB,GAAkB,IAAI,OAAO,EAAQ,CAAC;KAE9C;EACjB;;AAhBY,aAAa;IAHzB,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;;GACW,aAAa,CAgBzB;;IChBY,aAAa,GAA1B,MAAa,aAAa;IAIxB;KAAgB;EACjB;;AALY,aAAa;IAHzB,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;;GACW,aAAa,CAKzB;;ICWY,aAAa,GAA1B,MAAa,aAAa;IAmBxB,YACU,aAA4B,EAC5B,WAAwB,EACxB,cAA8B,EAC9B,cAA8B,EAC9B,aAA4B,EAC5B,IAAgB,EAChB,gBAAkC;QANlC,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,kBAAa,GAAb,aAAa,CAAe;QAC5B,SAAI,GAAJ,IAAI,CAAY;QAChB,qBAAgB,GAAhB,gBAAgB,CAAkB;;QAtB5C,4BAAuB,GAAkB,IAAI,OAAO,EAAQ,CAAC;;QAG7D,4BAAuB,GAAkB,IAAI,OAAO,EAAQ,CAAC;;QAG7D,oCAA+B,GAAkB,IAAI,OAAO,EAAQ,CAAC;;;QAIrE,wBAAmB,GAAkB,IAAI,OAAO,EAAQ,CAAC;QAGzD,sBAAiB,GAAG,KAAK,CAAC;KAUtB;IAEJ,eAAe,CAAC,IAAY;QAC1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE;YACxD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;gBACxB,OAAO,MAAM,CAAC;aACf;SACF;KACF;IAED,iBAAiB,CAAC,OAAgB,EAAE,MAAe;;QAEjD,IAAI,CAAC,MAAM,EAAE;YACX,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;aAC9B;iBAAM;gBACL,OAAO,KAAK,CAAC;aACd;SACF;QAED,KAAK,MAAM,mBAAmB,IAAI,MAAM,CAAC,YAAY,EAAE;YACrD,IAAI,mBAAmB,KAAK,OAAO,CAAC,IAAI,EAAE;gBACxC,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,sBAAsB,CAAC,OAAgB;QACrC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,OAAO;SACR;;;QAID,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;YACnC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBACrE,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjG,IAAI,cAAc,CAAC,eAAe,KAAK,OAAO,CAAC,eAAe,EAAE;oBAC9D,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBAC/C;aACF;SACF;aAAM;YACL,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE;gBACjE,IAAI,cAAc,CAAC,eAAe,KAAK,OAAO,CAAC,eAAe,EAAE;oBAC9D,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;iBAC5D;aACF;SACF;KACF;IAED,iBAAiB;QACf,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,OAAO;SACR;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC1D,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE;gBACpC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aACrD;SACF;KACF;IAED,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,OAAO;SACR;QAED,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,EAAE,CAAC;KACvC;IAEM,qBAAqB;;;QAG1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE;YACxD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,aAAa,EAAE;oBAClB,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBAClC;aACF;SACF;KACF;IAEM,sBAAsB;;;QAG3B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE;YACxD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBACxD,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnF,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE;oBACjE,IAAI,cAAc,CAAC,eAAe,KAAK,aAAa,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE;wBACvH,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;qBAC/C;iBACF;aACF;SACF;KACF;IAED,qBAAqB,CACnB,MAAc,EACd,cAAqC,EACrC,KAA8B,EAC9B,KAAc,EACd,WAAoB;QAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,uBAAuB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC9D,IACE,IAAI,CAAC,cAAc,CAAC,iBAAiB,CACnC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,IAAI,EACtC,cAAc,EACd,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,EACvC,KAAK,EACL,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,EACvC,KAAK,EACL,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,WAAW,EAC7C,WAAW,CACZ,EACD;gBACA,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5C,OAAO;aACR;SACF;KACF;IAED,kBAAkB,CAChB,MAAc,EACd,cAAqC,EACrC,eAAuB,EACvB,UAAmB,EACnB,KAA8B,EAC9B,KAAc,EACd,WAAoB;;QAGpB,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;QAE9E,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC5D,sBAAsB,CAAC,IAAI,GAAG,cAAc,CAAC;QAC7C,sBAAsB,CAAC,KAAK,GAAG,KAAK,CAAC;QACrC,sBAAsB,CAAC,KAAK,GAAG,KAAK,CAAC;QACrC,sBAAsB,CAAC,eAAe,GAAG,eAAe,CAAC;QACzD,sBAAsB,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/C,sBAAsB,CAAC,WAAW,GAAG,WAAW,CAAC;QAEjD,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;KAC7D;IAED,kBAAkB,CAChB,MAAc,EACd,cAAqC,EACrC,KAA8B,EAC9B,KAAc,EACd,WAAoB;QAEpB,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC,uBAAuB,EAAE;YAC5D,IACE,IAAI,CAAC,cAAc,CAAC,iBAAiB,CACnC,eAAe,CAAC,IAAI,EACpB,cAAc,EACd,eAAe,CAAC,KAAK,EACrB,KAAK,EACL,eAAe,CAAC,KAAK,EACrB,KAAK,EACL,eAAe,CAAC,WAAW,EAC3B,WAAW,CACZ,EACD;gBACA,OAAO,eAAe,CAAC;aACxB;SACF;QACD,OAAO,SAAS,CAAC;KAClB;IAED,kBAAkB,CAAC,WAAmB,EAAE,WAAmB;QACzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxE,IACE,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW;gBACvE,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,EACvE;gBACA,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtD,OAAO;aACR;SACF;KACF;IAED,eAAe,CAAC,WAAmB,EAAE,WAAmB,EAAE,KAAa;;QAErE,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QAElD,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtD,mBAAmB,CAAC,WAAW,GAAG,WAAW,CAAC;QAC9C,mBAAmB,CAAC,WAAW,GAAG,WAAW,CAAC;QAC9C,mBAAmB,CAAC,KAAK,GAAG,KAAK,CAAC;QAElC,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACpE;IAED,eAAe,CAAC,WAAmB,EAAE,WAAmB;QACtD,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE;YACnE,IAAI,YAAY,CAAC,WAAW,KAAK,WAAW,IAAI,YAAY,CAAC,WAAW,KAAK,WAAW,EAAE;gBACxF,OAAO,YAAY,CAAC,KAAK,CAAC;aAC3B;SACF;KACF;IAED,mCAAmC,CAAC,MAAc,EAAE,aAAmC;;;QAGrF,IAAI,QAAgB,CAAC;QACrB,IAAI,UAAkB,CAAC;QACvB,IAAI,SAAiB,CAAC;QACtB,IAAI,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;QAClC,IAAI,oBAA6C,CAAC;QAClD,IAAI,eAAuC,CAAC;QAE5C,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,CAAC,cAAc,EAAE,sBAAsB,CAAC,GAAG,CAAC,CAAC;QACpH,IAAI,eAAe,EAAE;YACnB,QAAQ,GAAG,GAAG,GAAG,eAAe,CAAC,eAAe,CAAC;SAClD;QACD,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,CAAC,cAAc,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACtH,IAAI,eAAe,EAAE;YACnB,UAAU,GAAG,GAAG,GAAG,eAAe,CAAC,eAAe,CAAC;SACpD;QACD,eAAe,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,CAAC,cAAc,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACrH,IAAI,eAAe,EAAE;YACnB,SAAS,GAAG,GAAG,GAAG,eAAe,CAAC,eAAe,CAAC;SACnD;QAED,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE;;;SAG3C;QAED,IAAI,QAAQ,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,SAAS,KAAK,SAAS,EAAE;YACjF,KAAK,MAAM,UAAU,IAAI,aAAa,CAAC,YAAY,EAAE;gBACnD,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE;oBACpC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;oBAClH,IAAI,UAAU,EAAE;wBACd,MAAM,IAAI,GACR,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;wBAExH,IAAI,IAAI,GAAG,UAAU,EAAE;4BACrB,UAAU,GAAG,IAAI,CAAC;4BAClB,oBAAoB,GAAG,UAAU,CAAC;yBACnC;qBACF;iBACF;aACF;SACF;QAED,OAAO,oBAAoB,CAAC;KAC7B;IAEO,iBAAiB,CAAC,IAA2B;;QAEnD,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;YACxE,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACtC,IAAI,OAAO,CAAC,OAAO,EAAE;oBACnB,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE;wBAC7C,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,EAAE;4BACvC,OAAO,IAAI,CAAC;yBACb;qBACF;iBACF;aACF;SACF;QACD,OAAO,KAAK,CAAC;KACd;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;KAChE;IAED,kBAAkB;;;QAIhB,IAAI,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,cAAc,CAAC,EAAE;YAChE,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;KACd;IAED,8BAA8B;;;QAI5B,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC7B,OAAO,IAAI,CAAC;SACb;;QAGD,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;YACxE,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACtC,IAAI,OAAO,CAAC,UAAU,EAAE;oBACtB,OAAO,IAAI,CAAC;iBACb;aACF;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,oBAAoB;QAClB,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,OAAO,GAAG,KAAK,CAAC;;QAGpB,IAAI,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE;YACrD,MAAM,GAAG,IAAI,CAAC;SACf;QAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE;YACtD,OAAO,GAAG,IAAI,CAAC;SAChB;QAED,IAAI,MAAM,IAAI,OAAO,EAAE;YACrB,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;KACd;IAED,YAAY,CAAC,KAAa;QACxB,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,SAAS,CAAC;QAC9C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QACjG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC3B,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;IAED,mBAAmB;;QAEjB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACnE,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SACpE;KACF;IAED,SAAS,CAAC,IAAa;QACrB,MAAM,MAAM,GAAW,IAAI,MAAM,EAAE,CAAC;QACpC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,YAAY,CAAC;;QAGnC,IAAI,0BAA0B,GAAG,CAAC,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnE,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBAClE,0BAA0B,GAAG,CAAC,CAAC;gBAC/B,MAAM;aACP;SACF;QAED,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,0BAA0B,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAClF,IAAI,CAAC,YAAY,CAAC,0BAA0B,CAAC,CAAC;KAC/C;IAED,mBAAmB;QACjB,MAAM,QAAQ,GAAqB,EAAE,CAAC;QAEtC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,OAAO,QAAQ,CAAC;SACjB;QAED,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAE1E,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACjC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACxB;SACF;QAED,OAAO,QAAQ,CAAC;KACjB;IAED,0BAA0B,CAAC,gBAAkC;QAC3D,MAAM,iBAAiB,GAAgD,IAAI,GAAG,EAA0C,CAAC;QAEzH,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAiC,CAAC;QACxE,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE;YACtC,MAAM,KAAK,GAAkB,EAAE,CAAC;YAChC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;gBAC1D,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;gBACxE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAC1B;aACF;YACD,sBAAsB,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SAC5C;;QAGD,sBAAsB,CAAC,OAAO,CAAC,CAAC,KAAoB,EAAE,OAAuB;YAC3E,MAAM,eAAe,GAA2B,EAAE,CAAC;YACnD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACtE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;;;oBAG9B,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,EAAE;wBAC5E,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;qBAC/B;iBACF;aACF;YACD,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;SACjD,CAAC,CAAC;QAEH,OAAO,iBAAiB,CAAC;KAC1B;IAED,WAAW,CAAC,kBAA0B,EAAE,EAAE,cAAuB;QAC/D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YACnC,OAAO;SACR;;;QAID,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,eAAe,EAAE;YAC7C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,OAAO;SACR;QAED,IAAI,QAAQ,GAAG,cAAc,CAAC;QAE9B,IAAI,QAAQ,KAAK,SAAS,EAAE;YAC1B,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;SACzD;QAED,IAAI,CAAC,IAAI;aACN,IAAI,CAAC,yBAAyB,GAAG,QAAQ,GAAG,mBAAmB,GAAG,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;aAC/H,SAAS,EAAE,CAAC;QAEf,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAE/B,IAAI,CAAC,eAAe,EAAE;YACpB,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC;gBACjC,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;gBAClC,IAAI,IAAI,CAAC,iBAAiB,EAAE;oBAC1B,IAAI,CAAC,IAAI;yBACN,IAAI,CAAC,yBAAyB,GAAG,QAAQ,GAAG,mBAAmB,GAAG,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;yBAC/H,SAAS,EAAE,CAAC;iBAChB;aACF,EAAE,EAAE,CAAC,CAAC;SACR;KACF;IAED,eAAe;QACb,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YACnC,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;KACvD;EACF;;YAld0B,aAAa;YACf,WAAW;YACR,cAAc;YACd,cAAc;YACf,aAAa;YACtB,UAAU;YACE,gBAAgB;;;AA1BjC,aAAa;IAHzB,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAqByB,aAAa;QACf,WAAW;QACR,cAAc;QACd,cAAc;QACf,aAAa;QACtB,UAAU;QACE,gBAAgB;GA1BjC,aAAa,CAsezB;;IChfY,YAAY,GAAzB,MAAa,YAAY;IASvB,YACU,WAAwB,EACxB,aAA4B,EAC5B,aAA4B,EAC5B,cAA8B;QAH9B,gBAAW,GAAX,WAAW,CAAa;QACxB,kBAAa,GAAb,aAAa,CAAe;QAC5B,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QAZxC,mBAAc,GAAY,EAAE,CAAC;QAC7B,gBAAW,GAAa,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAE3F,sBAAiB,GAAG,KAAK,CAAC;QAE1B,iBAAY,GAAkB,IAAI,OAAO,EAAQ,CAAC;QAClD,kBAAa,GAAkB,IAAI,OAAO,EAAQ,CAAC;KAO/C;IAEJ,eAAe,CAAC,KAAY;QAC1B,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE;YAC/C,IAAI,aAAa,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;gBACrC,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,gBAAgB,CAAC,MAAc;QAC7B,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5D,OAAO,KAAK,CAAC;SACd;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YACrD,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;gBACxB,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,oBAAoB,CAAC,KAAY;;QAE/B,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnD,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE;oBAC9C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACjC,OAAO;iBACR;aACF;SACF;aAAM;YACL,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACjC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC3B;IAED,6BAA6B;;;;QAK3B,IAAI,eAAe,CAAC;;;QAIpB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;YACvC,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;gBAC1C,eAAe,GAAG,UAAU,CAAC;gBAE7B,IAAI,UAAU,KAAK,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,EAAE;;oBAEzD,OAAO;iBACR;aACF;SACF;QAED,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO;SACR;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnE,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE;gBACnE,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM;aACP;SACF;KACF;IAED,WAAW,CAAC,KAAa;QACvB,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,SAAS,CAAC;QAE9C,IAAI,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;YACtD,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;SAC1B;aAAM;YACL,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aACtE;iBAAM;gBACL,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;gBACzB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aACrE;SACF;QAED,IAAI,CAAC,6BAA6B,EAAE,CAAC;;QAGrC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC;QAElD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,EAAE,CAAC;QACpD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;YACvC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACjE;QACD,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QAEjC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC3B;IAED,QAAQ,CAAC,IAAa;QACpB,MAAM,KAAK,GAAU,IAAI,KAAK,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,WAAW,CAAC;QAEjC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACvE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC3E;aAAM;YACL,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC1E;;QAGD,IAAI,yBAAyB,GAAG,CAAC,CAAC;QAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClE,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC/D,yBAAyB,GAAG,CAAC,CAAC;gBAC9B,MAAM;aACP;SACF;QAED,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/E,IAAI,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;KAC7C;IAED,WAAW,CAAC,KAAY;;QAEtB,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,EAAE;YAClE,KAAK,IAAI,CAAC,GAAG,WAAW,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;gBACrE,MAAM,yBAAyB,GAAG,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBACtE,IAAI,yBAAyB,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE;oBACtD,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBAC/C;aACF;SACF;;QAGD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAChG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;YACjD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SACrB;QAED,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC1B;IAED,cAAc,CAAC,IAAY;QACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE;YACtD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE;gBACvB,OAAO,KAAK,CAAC;aACd;SACF;KACF;EACF;;YA/JwB,WAAW;YACT,aAAa;YACb,aAAa;YACZ,cAAc;;;AAb7B,YAAY;IAHxB,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAWuB,WAAW;QACT,aAAa;QACb,aAAa;QACZ,cAAc;GAb7B,YAAY,CAyKxB;;IC/JY,eAAe,GAA5B,MAAa,eAAe;IA0B1B,YACU,YAA0B,EAC1B,aAA4B,EAC5B,cAA8B,EAC9B,IAAgB,EAChB,aAA4B;QAJ5B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,SAAI,GAAJ,IAAI,CAAY;QAChB,kBAAa,GAAb,aAAa,CAAe;QA7B/B,cAAS,GAAG,QAAQ,CAAC;QAErB,SAAI,GAAG,CAAC,CAAC;QAGR,qBAAgB,GAAG,KAAK,CAAC;QAEzB,cAAS,GAAG,GAAG,CAAC;QAChB,2BAAsB,GAAG,GAAG,CAAC;QAC7B,yBAAoB,GAAG,GAAG,CAAC;QAE5B,oBAAe,GAAkB,IAAI,OAAO,EAAE,CAAC;QAC/C,kBAAa,GAAkB,IAAI,OAAO,EAAE,CAAC;;;QAQ7C,kCAA6B,GAAG,KAAK,CAAC;QAEtC,qBAAgB,GAAG,KAAK,CAAC;QAS9B,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,SAAS,CAAC;YACnD,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;YACxC,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,SAAS,CAAC;YACvC,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC;YACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACzB,CAAC,CAAC;KACJ;IAEO,gBAAgB;;QAEtB,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC3D,MAAM,MAAM,GAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtD,MAAM,CAAC,MAAM,EAAE,CAAC;aACjB;SACF;;QAGD,IAAI,CAAC,cAAc,EAAE,CAAC;KACvB;IAEO,GAAG,CAAC,GAAW,EAAE,IAAY;QACnC,IAAI,CAAC,GAAG,EAAE;YACR,GAAG,GAAG,CAAC,CAAC;SACT;QAED,IAAI,MAAM,GAAW,GAAG,CAAC,QAAQ,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,MAAM,GAAG,IAAI,EAAE;YAC3B,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC;SACvB;QAED,OAAO,MAAM,CAAC;KACf;IAEO,QAAQ,CAAC,MAAc,EAAE,gBAAyB,IAAI;QAC5D,MAAM,EAAE,GAAW,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC;QACvE,MAAM,OAAO,GAAW,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,OAAO,IAAI,KAAK,CAAC,CAAC;QAE/D,IAAI,aAAa,EAAE;YACjB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SAClF;aAAM;YACL,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;SAC1D;KACF;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;SACR;;QAGD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC;QAE1E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE;YACpC,OAAO;SACR;;;;;QAMD,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,MAAM,QAAQ,GAAW,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC/D,MAAM,KAAK,GACT,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY;cACrE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;cAC1C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,CAAC;QAE9F,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;;QAG9D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;;QAGlC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC;YAE/D,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEpC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;YAC1B,GAAG,CAAC,SAAS,EAAE,CAAC;YAChB,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,EAAE,CAAC,CAAC;YACpC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,EAAE,CAAC,CAAC;YACpC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,EAAE,EAAE,CAAC,CAAC;YAC/B,GAAG,CAAC,IAAI,EAAE,CAAC;SACZ,CAAC,CAAC;KACJ;IAEO,gBAAgB;QACtB,IAAI,CAAC,eAAe,EAAE,CAAC;QAEvB,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC,SAAS,CAAC;YAClD,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B,CAAC,CAAC;KACJ;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC;SAC3C;KACF;IAED,kBAAkB,CAAC,OAAe,EAAE,QAAgB;QAClD,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,KAAK,SAAS,EAAE;YACnD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,IAAI,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,CAAC,CAAC;SAC3H;aAAM;;YAEL,MAAM,OAAO,GAAG,QAAQ,EAAE,OAAO,GAAG,EAAE,GAAU,EAAE,CAAC,CAAC;YACpD,OAAO,GAAG,QAAQ,EAAE,OAAO,GAAG,EAAE,GAAU,EAAE,CAAC,CAAC;;YAG9C,MAAM,UAAU,GAAG,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC;YAC1D,OAAO,GAAG,OAAO,IAAI,UAAU,EAAE,CAAC;SACnC;KACF;IAED,YAAY,CAAC,QAAgB;QAC3B,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,KAAK,SAAS,EAAE;YACnD,MAAM,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;YAExG,IAAI,QAAQ,GAAG,EAAE,EAAE;gBACjB,OAAO,QAAQ,GAAG,CAAC,CAAC;aACrB;iBAAM,IAAI,QAAQ,GAAG,EAAE,EAAE;gBACxB,OAAO,QAAQ,GAAG,CAAC,CAAC;aACrB;YAED,OAAO,QAAQ,CAAC;SACjB;aAAM;YACL,IAAI,QAAQ,IAAI,EAAE,EAAE;gBAClB,OAAO,CAAC,CAAC;aACV;iBAAM,IAAI,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE;gBAC7B,OAAO,CAAC,CAAC;aACV;iBAAM,IAAI,QAAQ,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC9B,OAAO,EAAE,CAAC;aACX;YAED,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;SACvC;KACF;IAED,oBAAoB,CAAC,QAAgB;QACnC,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,KAAK,SAAS,EAAE;YACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;YAEvG,OAAO,QAAQ,CAAC;SACjB;aAAM;YACL,IAAI,QAAQ,IAAI,EAAE,EAAE;gBAClB,OAAO,EAAE,CAAC;aACX;iBAAM,IAAI,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE;gBAC7B,OAAO,CAAC,CAAC;aACV;iBAAM,IAAI,QAAQ,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC9B,OAAO,CAAC,CAAC;aACV;YAED,OAAO,CAAC,CAAC;SACV;KACF;IAED,sBAAsB,CAAC,QAAgB;QACrC,IAAI,IAAI,CAAC,mBAAmB,CAAC,QAAQ,KAAK,SAAS,EAAE;YACnD,OAAO,CAAC,CAAC;SACV;aAAM;YACL,IAAI,QAAQ,IAAI,EAAE,EAAE;gBAClB,OAAO,CAAC,CAAC;aACV;iBAAM,IAAI,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE;gBAC7B,OAAO,CAAC,CAAC;aACV;iBAAM,IAAI,QAAQ,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC9B,OAAO,CAAC,CAAC;aACV;YACD,OAAO,CAAC,CAAC;SACV;KACF;IAEO,iBAAiB,CAAC,CAAM;;QAE9B,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;QACzE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAEtE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAE/D,IAAI,QAAgB,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,YAAY,GAAG,WAAW,EAAE;YACpF,QAAQ;gBACN,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI;qBACrF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAE5E,IAAI,QAAQ,GAAG,CAAC,EAAE;gBAChB,QAAQ,GAAG,CAAC,CAAC;aACd;SACF;aAAM;YACL,QAAQ;gBACN,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,IAAI;oBACvF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU;oBAC3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;SACvD;QAED,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEjC,UAAU,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;SACpH,EAAE,CAAC,CAAC,CAAC;KACP;IAED,SAAS,CAAC,IAAS;QACjB,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,EAAE;YAC1B,OAAO;SACR;QAED,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,UAAU,CAAC;gBACT,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1B,EAAE,CAAC,CAAC,CAAC;SACP;KACF;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;YAC5B,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;KACb;IAED,SAAS,CAAC,gBAAsB;QAC9B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC7B,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YACtF,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7B,OAAO;SACR;QAED,MAAM,mBAAmB,GAAwB,IAAI,mBAAmB,EAAE,CAAC;QAC3E,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEzE,IAAI,gBAAgB,EAAE;YACpB,mBAAmB,CAAC,WAAW,GAAG,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC;YAChE,mBAAmB,CAAC,SAAS,GAAG,gBAAgB,CAAC,GAAG,GAAG,IAAI,CAAC;SAC7D;aAAM;YACL,mBAAmB,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;YAC7E,mBAAmB,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC;SAClF;QAED,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAExE,IAAI,CAAC,sBAAsB,GAAG,mBAAmB,CAAC;QAElD,IAAI,gBAAgB,EAAE;YACpB,gBAAgB,CAAC,KAAK;gBACpB,OAAO;oBACP,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC1D,IAAI;oBACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC1D,IAAI;oBACJ,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC1D,IAAI;oBACJ,IAAI,CAAC,oBAAoB;oBACzB,GAAG,CAAC;YACN,gBAAgB,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;YAC9C,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC;YAC/F,IAAI,CAAC,qBAAqB,EAAE,CAAC;SAC9B;aAAM;YACL,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3E;QAED,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAEO,qBAAqB;QAC3B,IAAI,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE;YACvC,OAAO,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC;SAC/F;QAED,OAAO,SAAS,CAAC;KAClB;IAEO,mBAAmB;QACzB,OAAO,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,GAAG,IAAI,CAAC;KACzD;IAED,yBAAyB;QACvB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;QAClF,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAC1C,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YACvD,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;SAChC;KACF;IAED,iBAAiB;QACf,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAE9B,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;SAC7B;KACF;IAED,gBAAgB;QACd,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE;YAC3C,OAAO;SACR;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,UAAU,CAAC;YACT,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC;gBAClC,SAAS,EAAE,WAAW;gBACtB,SAAS,EAAE,OAAO;gBAClB,aAAa,EAAE,OAAO;;gBAEtB,MAAM,EAAE,CAAC;gBACT,QAAQ,EAAE,KAAK;;;;gBAIf,OAAO,EAAE;oBACP,YAAY,CAAC,MAAM,CAAC;;wBAElB,OAAO,EAAE,CAAC;wBACV,KAAK,EAAE,SAAS;wBAChB,UAAU,EAAE,KAAK;qBAClB,CAAC;oBACF,aAAa,CAAC,MAAM,CAAC;wBACnB,aAAa,EAAE;4BACb,IAAI,EAAE,CAAC;yBACR;wBACD,KAAK,EAAE,MAAM;wBACb,kBAAkB,EAAE,IAAI,CAAC,qBAAqB,EAAE;wBAChD,gBAAgB,EAAE,IAAI,CAAC,mBAAmB,EAAE;qBAC7C,CAAC;oBACF,cAAc,CAAC,MAAM,CAAC;wBACpB,SAAS,EAAE,oBAAoB;wBAC/B,gBAAgB,EAAE,MAAM;wBACxB,kBAAkB,EAAE,MAAM;wBAC1B,MAAM,EAAE,IAAI,CAAC,mBAAmB,EAAE;wBAClC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;wBACtD,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;wBAC1C,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC;wBAC1D,sBAAsB,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;qBAC/D,CAAC;iBACH;aACF,CAAC,CAAC;YAEH,IAAI,aAAqB,CAAC;YAE1B,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;;gBAEzC,aAAa,GAAG,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,GAAG,aAAa,CAAC;aAC3F;iBAAM;;gBAEL,aAAa;oBACX,0BAA0B;wBAC1B,IAAI,CAAC,mBAAmB,CAAC,IAAI;wBAC7B,GAAG;wBACH,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aAC9G;YAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,CAAC;YAEjE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE;gBAC1B,UAAU,CAAC;;oBAET,IAAI,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE;;wBAEzC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;qBAC/B;yBAAM;;wBAEL,IAAI,CAAC,mBAAmB,CAAC,YAAY,GAAG,IAAI,CAAC;wBAC7C,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;6BAClC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE;;4BAEpB,IAAI,CAAC,mBAAmB,CAAC,cAAc,GAAG,GAAG,CAAC;4BAC9C,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAAC;4BAC1D,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;yBAC/B,CAAC;6BACD,KAAK,CAAC,CAAC,GAAG;;4BAET,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC,CAAC;4BACnE,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;yBAC/B,CAAC,CAAC;qBACN;oBAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;oBACpE,IAAI,CAAC,cAAc,EAAE,CAAC;;oBAGtB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE;wBAC1D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC;;;;;wBAMxF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;qBACzF,CAAC,CAAC;;oBAGH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE;wBAC9D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;qBACrC,CAAC,CAAC;oBACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,EAAE;wBAC9D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;qBACrC,CAAC,CAAC;oBACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAM;wBACpE,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,qBAAqB,EAAE,CAAC;wBAC/D,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;wBAChC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBACnD,CAAC,CAAC;;;oBAIH,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;;oBAGpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAM;wBACpE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;wBAC7B,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;qBAC3B,CAAC,CAAC;oBAEH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAM;wBACpE,IAAI,IAAI,CAAC,gBAAgB,EAAE;4BACzB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;yBAC3B;qBACF,CAAC,CAAC;oBAEH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAM;wBAClE,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;qBAC/B,CAAC,CAAC;oBAEH,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAEzB,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;oBAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;iBAC7B,EAAE,CAAC,CAAC,CAAC;aACP,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAU;;;gBAGrC,IAAI,CAAC,yBAAyB,EAAE,CAAC;aAClC,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE;gBACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;aAC1B,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE;gBACzB,IAAI,CAAC,gBAAgB,EAAE,CAAC;aACzB,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE;gBAC1B,IAAI,CAAC,eAAe,EAAE,CAAC;aACxB,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,MAAM;;gBAE1C,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;oBACrF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;wBACxB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;qBACxB;iBACF;qBAAM;oBACL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;wBACxB,MAAM,CAAC,MAAM,EAAE,CAAC;qBACjB;iBACF;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,gBAAgB,EAAE,CAAC,MAAW;gBAC/C,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;gBAC1B,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;aAClC,CAAC,CAAC;SACJ,EAAE,CAAC,CAAC,CAAC;KACP;IAEO,QAAQ,CAAC,GAAW;QAC1B,MAAM,MAAM,GAAG,2CAA2C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO,MAAM;cACT;gBACE,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC1B,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;aAC3B;cACD,IAAI,CAAC;KACV;IAEO,qBAAqB;QAC3B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;SACR;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC3D,MAAM,MAAM,GAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;;YAItD,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;gBAE/B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC;gBACpB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;gBACtB,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;gBAErC,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBACnD,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC;oBACxC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;oBACnB,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;oBACrB,MAAM,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC;iBACrC;gBAED,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;gBAEnC,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB,KAAK,MAAM,CAAC,mBAAmB,EAAE;oBAC7F,SAAS,GAAG,IAAI,CAAC,oBAAoB,CAAC;oBACtC,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC;iBACnC;gBAED,MAAM,CAAC,KAAK;oBACV,OAAO;wBACP,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;wBACnC,IAAI;wBACJ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;wBACnC,IAAI;wBACJ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;wBACnC,IAAI;wBACJ,SAAS;wBACT,GAAG,CAAC;gBACN,MAAM,CAAC,YAAY,EAAE,CAAC;aACvB;SACF;KACF;IAED,oBAAoB;QAClB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAChC,OAAO;SACR;QAED,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC3D,MAAM,MAAM,GAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAEtD,IAAI,IAAI,CAAC,sBAAsB,KAAK,MAAM,CAAC,mBAAmB,EAAE;gBAC9D,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC9D,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC1D,MAAM,CAAC,YAAY,EAAE,CAAC;gBACtB,MAAM;aACP;SACF;KACF;IAEO,iBAAiB,CAAC,mBAAyC;QACjE,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB,KAAK,mBAAmB,EAAE;;YAEtF,OAAO;SACR;QAED,IAAI,mBAAmB,EAAE;YACvB,IAAI,CAAC,sBAAsB,GAAG,mBAAmB,CAAC;SACnD;QAED,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAEO,wBAAwB,CAAC,KAAa;;QAE5C,MAAM,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,IAAI,QAAQ,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC;KACpE;IAEO,aAAa,CAAC,gBAAqB,EAAE,KAAY,EAAE,mBAAwC,EAAE,MAAe;QAClH,gBAAgB,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC3D,gBAAgB,CAAC,KAAK,GAAG,KAAK,CAAC;QAC/B,gBAAgB,CAAC,MAAM,GAAG,MAAM,CAAC;QAEjC,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK;YACjC,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;gBAC5C,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;aAC7C;SACF,CAAC,CAAC;QAEH,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE;YAC5B,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE;;;gBAGvC,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBAC/E,gBAAgB,CAAC,GAAG,GAAG,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;aAC5E;YACD,mBAAmB,CAAC,WAAW,GAAG,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC;YAChE,mBAAmB,CAAC,SAAS,GAAG,gBAAgB,CAAC,GAAG,GAAG,IAAI,CAAC;SAC7D,CAAC,CAAC;KACJ;IAEO,UAAU,CAAC,mBAAwC,EAAE,KAAY;;QAEvE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE;YAC7B,OAAO;SACR;;QAGD,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACjD,KAAK,EAAE,mBAAmB,CAAC,WAAW,GAAG,IAAI;YAC7C,GAAG,EAAE,mBAAmB,CAAC,SAAS,GAAG,IAAI;YACzC,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;;;;;;;;;;;;;;;;;;QAqBjE,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAC9B;IAED,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAChC,OAAO;SACR;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YACjD,OAAO;SACR;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC7E,IAAI,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,sBAAsB,EAAE;;gBAEpF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC3D,MAAM,MAAM,GAAQ,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAEtD,IAAI,MAAM,CAAC,mBAAmB,KAAK,IAAI,CAAC,sBAAsB,EAAE;wBAC9D,MAAM,CAAC,MAAM,EAAE,CAAC;qBACjB;iBACF;gBAED,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;gBACxC,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAE3D,OAAO;aACR;SACF;QAED,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,gBAAgB,CAAC,UAAkB;;QAEjC,MAAM,aAAa,GAAwB,EAAE,CAAC;QAE9C,KAAK,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE;YAClG,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAE7D,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE;gBAClE,IAAI,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE;oBACnC,KAAK,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,WAAW,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE;wBACtG,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;4BAC1C,IAAI,UAAU,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;gCACxE,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;gCAE9D,IAAI,MAAM,EAAE;oCACV,IAAI,iBAAiB,GAAG,MAAM,CAAC,WAAW,KAAK,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;oCACxH,IAAI,eAAe,GAAG,MAAM,CAAC,SAAS,KAAK,SAAS,GAAG,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC;;oCAGhH,iBAAiB,IAAI,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;oCAChE,eAAe,IAAI,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;oCAEjE,IAAI,iBAAiB,IAAI,UAAU,IAAI,eAAe,IAAI,UAAU,EAAE;wCACpE,aAAa,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;qCAClE;iCACF;6BACF;yBACF;qBACF;iBACF;aACF;SACF;QAED,OAAO,aAAa,CAAC;KACtB;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC7B,OAAO;SACR;;;QAID,KAAK,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE;YAClG,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC7D,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;gBAC7C,KAAK,MAAM,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE;oBAC/E,IAAI,mBAAmB,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE;wBAChD,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;qBAC7C;iBACF;aACF;SACF;;QAGD,KAAK,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE;YAClG,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAE7D,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;gBAC5C,KAAK,MAAM,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE;oBAC/E,IAAI,mBAAmB,CAAC,SAAS,KAAK,KAAK,CAAC,IAAI,EAAE;wBAChD,IAAI,CAAC,UAAU,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;qBAC7C;iBACF;aACF;SACF;KACF;IAED,UAAU;QACR,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAEpE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;YACjF,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC9E;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC1B;IAED,2BAA2B;;QAEzB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAC3C,GAAG,CAAC,CAAC,QAAkB;YACrB,MAAM,gBAAgB,GAAa,EAAE,CAAC;YAEtC,KAAK,MAAM,mBAAmB,IAAI,QAAQ,EAAE;gBAC1C,gBAAgB,CAAC,IAAI,CAAE,mBAA2B,CAAC,IAAI,CAAC,CAAC;aAC1D;YAED,OAAO,gBAAgB,CAAC;SACzB,CAAC,CACH,CAAC;KACH;IAED,sBAAsB,CAAC,KAAa;QAClC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,CAAC,wBAAwB,GAAG,KAAK,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;QACpF,IAAI,CAAC,gBAAgB,EAAE,CAAC;;QAGxB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KACnB;EACF;;YA9xByB,YAAY;YACX,aAAa;YACZ,cAAc;YACxB,UAAU;YACD,aAAa;;;AA/B3B,eAAe;IAH3B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCA4BwB,YAAY;QACX,aAAa;QACZ,cAAc;QACxB,UAAU;QACD,aAAa;GA/B3B,eAAe,CAyzB3B;;ICz0BY,eAAe,GAA5B,MAAa,eAAe;IAG1B;QAFA,cAAS,GAAe,EAAE,CAAC;KAEX;IAEhB,iBAAiB,CAAC,IAAY;QAC5B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE;YACrC,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,EAAE;gBAC1B,OAAO,QAAQ,CAAC;aACjB;SACF;KACF;EACF;;AAZY,eAAe;IAH3B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;;GACW,eAAe,CAY3B;;ICEY,cAAc,GAA3B,MAAa,cAAc;IAQzB,YACU,aAA4B,EAC5B,cAA8B,EAC9B,YAA0B,EAC1B,eAAgC,EAChC,eAAgC,EAChC,cAA8B;QAL9B,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,oBAAe,GAAf,eAAe,CAAiB;QAChC,oBAAe,GAAf,eAAe,CAAiB;QAChC,mBAAc,GAAd,cAAc,CAAgB;QAbjC,yBAAoB,GAAkB,IAAI,OAAO,EAAE,CAAC;QAInD,gBAAW,GAAiB,EAAE,CAAC;QAC/B,kBAAa,GAAG,IAAIA,oBAA0B,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;KASxE;IAEI,2BAA2B,CAAC,QAAyB,EAAE,YAAoB;;;QAGjF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;YACrC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEtC,IACE,iBAAiB,CAAC,OAAO,CAAC,eAAe,KAAK,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,eAAe;gBAC5F,iBAAiB,CAAC,OAAO,CAAC,eAAe,KAAK,QAAQ,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,eAAe,EAC5F;gBACA,OAAO,iBAAiB,CAAC;aAC1B;SACF;QAED,OAAO,SAAS,CAAC;KAClB;IAEM,UAAU,CAAC,UAAkB;;QAElC,IAAI,OAAO,GAAwB,EAAE,CAAC;QAEtC,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,KAAK,SAAS,EAAE;;YAEhD,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;SAC7D;aAAM;YACL,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,EAAE;;gBAE7C,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;oBACrC,OAAO,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;iBAC9F;aACF;iBAAM;;gBAEL,KAAK,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,UAAU,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE;oBAClG,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;wBACpD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE;4BACtE,KAAK,IAAI,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,WAAW,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE;gCACtG,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,WAAW,EAAE;;oCAE1C,IAAI,UAAU,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;wCACxE,OAAO,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;wCACxG,MAAM;qCACP;iCACF;6BACF;yBACF;qBACF;iBACF;aACF;SACF;QAED,OAAO,OAAO,CAAC;KAChB;IAEO,eAAe,CACrB,qBAA4C,EAC5C,YAAiC,EACjC,mBAA2B,EAC3B,eAAuB,CAAC;QAExB,IAAI,QAAQ,GAAW,YAAY,CAAC,KAAK,CAAC;QAC1C,IAAI,aAAa,GAAW,YAAY,CAAC;QAEzC,IAAI,mBAAmB,GAAG,CAAC,EAAE;;;YAI3B,KAAK,MAAM,oBAAoB,IAAI,qBAAqB,EAAE;gBACxD,IACE,oBAAoB,CAAC,WAAW,KAAK,YAAY,CAAC,WAAW;oBAC7D,oBAAoB,CAAC,WAAW,KAAK,YAAY,CAAC,WAAW,EAC7D;oBACA,aAAa,GAAG,oBAAoB,CAAC,KAAK,CAAC;oBAC3C,MAAM;iBACP;aACF;;YAGD,QAAQ,GAAG,aAAa,IAAI,CAAC,GAAG,mBAAmB,CAAC,GAAG,QAAQ,GAAG,mBAAmB,CAAC;SACvF;;QAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACrD,IACE,qBAAqB,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,YAAY,CAAC,WAAW;gBACjE,qBAAqB,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,YAAY,CAAC,WAAW,EACjE;gBACA,qBAAqB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACnC,MAAM;aACP;SACF;;QAGD,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtD,mBAAmB,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;QAC3D,mBAAmB,CAAC,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC;QAC3D,mBAAmB,CAAC,KAAK,GAAG,QAAQ,CAAC;QACrC,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KACjD;;IAGO,eAAe,CAAC,MAAc,EAAE,WAAmB;QACzD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,kBAAkB,GAAa,EAAE,CAAC;;QAGxC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE;YAC1D,KAAK,MAAM,iBAAiB,IAAI,MAAM,CAAC,YAAY,EAAE;gBACnD,IAAI,iBAAiB,KAAK,OAAO,CAAC,IAAI,EAAE;oBACtC,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE;wBAChC,OAAO,KAAK,CAAC;qBACd;;oBAGD,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;wBACzD,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;wBACjD,KAAK,EAAE,CAAC;qBACT;oBACD,MAAM;iBACP;aACF;SACF;;QAGD,OAAO,SAAS,CAAC;KAClB;IAEO,kBAAkB,CAAC,MAAyB,EAAE,UAAkB;;;;QAItE,IAAI,wBAAwB,GAAG,CAAC,CAAC;QACjC,IAAI,yBAAyB,GAAG,CAAC,CAAC;QAClC,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAE5B,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE;;;YAIjC,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YACpI,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;YAEjI,IAAI,UAAU,GAAG,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,UAAU,GAAG,cAAc,EAAE;;gBAE3F,wBAAwB,GAAG,CAAC,cAAc,GAAG,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC;aACvF;iBAAM,IAAI,UAAU,GAAG,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,UAAU,GAAG,gBAAgB,EAAE;;gBAErG,wBAAwB,GAAG,CAAC,UAAU,GAAG,gBAAgB,IAAI,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;aACxF;SACF;QAED,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;;YAElC,IAAI,iBAAiB,GACnB,MAAM,CAAC,MAAM,CAAC,WAAW,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YAE9H,IAAI,eAAe,GACjB,MAAM,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;;YAGxH,iBAAiB,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,CAAC;YAC9E,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,CAAC;YAE/E,IAAI,UAAU,GAAG,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,IAAI,UAAU,GAAG,eAAe,EAAE;;gBAE9F,yBAAyB,GAAG,CAAC,eAAe,GAAG,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;aAC1F;iBAAM,IAAI,UAAU,GAAG,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,IAAI,UAAU,GAAG,iBAAiB,EAAE;;gBAExG,yBAAyB,GAAG,CAAC,UAAU,GAAG,iBAAiB,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;aAC3F;YAED,mBAAmB,GAAG,wBAAwB,GAAG,yBAAyB,CAAC;SAC5E;QAED,OAAO,mBAAmB,CAAC;KAC5B;IAEO,mBAAmB,CACzB,MAAyB,EACzB,aAA4B,EAC5B,MAA6B,EAC7B,mBAA2B;QAE3B,IAAI,QAAQ,GAAG,KAAK,CAAC;;QAGrB,KAAK,MAAM,qBAAqB,IAAI,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE;YACzE,KAAK,MAAM,aAAa,IAAI,aAAa,CAAC,QAAQ,EAAE;gBAClD,IAAI,aAAa,CAAC,OAAO,EAAE;oBACzB,KAAK,MAAM,iBAAiB,IAAI,aAAa,CAAC,YAAY,EAAE;wBAC1D,IACE,IAAI,CAAC,cAAc,CAAC,iBAAiB,CACnC,qBAAqB,CAAC,IAAI,EAC1B,iBAAiB,CAAC,UAAU,CAAC,IAAI,EACjC,qBAAqB,CAAC,KAAK,EAC3B,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAClC,qBAAqB,CAAC,KAAK,EAC3B,iBAAiB,CAAC,SAAS,EAC3B,qBAAqB,CAAC,WAAW,EACjC,aAAa,CAAC,OAAO,CAAC,IAAI,CAC3B,EACD;;4BAEA,IACE,CAAC,qBAAqB,CAAC,IAAI,KAAK,qBAAqB,CAAC,SAAS;gCAC7D,qBAAqB,CAAC,IAAI,KAAK,qBAAqB,CAAC,cAAc;gCACrE,qBAAqB,CAAC,eAAe,IAAI,CAAC,EAC1C;;gCAEA,MAAM,eAAe,GAAG,qBAAqB,CAAC,eAAe,CAAC;gCAC9D,MAAM,YAAY,GAAG,CAAC,CAAC;;gCAGvB,IAAI,aAAa,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;;oCAE3C,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;oCACtD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;oCACrD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;oCAC7D,mBAAmB,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,GAAG,eAAe,CAAC;oCACrE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;oCAErF,IAAI,qBAAqB,CAAC,IAAI,KAAK,qBAAqB,CAAC,cAAc,EAAE;wCACvE,QAAQ,GAAG,IAAI,CAAC;qCACjB;iCACF;qCAAM;;oCAEL,IAAI,iBAAiB,CAAC,UAAU,CAAC,UAAU,KAAK,KAAK,IAAI,eAAe,KAAK,CAAC,EAAE;wCAC9E,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;wCACtD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;wCACrD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;wCAC7D,mBAAmB,CAAC,KAAK,GAAG,iBAAiB,CAAC,WAAW,CAAC;wCAC1D,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;wCAErF,IAAI,qBAAqB,CAAC,IAAI,KAAK,qBAAqB,CAAC,cAAc,EAAE;4CACvE,QAAQ,GAAG,IAAI,CAAC;yCACjB;qCACF;yCAAM,IACL,CAAC,iBAAiB,CAAC,UAAU,CAAC,eAAe,KAAK,MAAM,IAAI,iBAAiB,CAAC,UAAU,CAAC,eAAe,KAAK,KAAK;wCAClH,iBAAiB,CAAC,UAAU,CAAC,aAAa,KAAK,QAAQ,EACvD;wCACA,MAAM,KAAK,GACT,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,eAAe;4CACvG,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wCAE3C,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;wCACtD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;wCACrD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;wCAC7D,mBAAmB,CAAC,KAAK,GAAG,KAAK,CAAC;wCAClC,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,YAAY,CAAC,CAAC;wCAErF,IAAI,qBAAqB,CAAC,IAAI,KAAK,qBAAqB,CAAC,cAAc,EAAE;4CACvE,QAAQ,GAAG,IAAI,CAAC;yCACjB;qCACF;iCACF;6BACF;iCAAM,IACL,CAAC,qBAAqB,CAAC,IAAI,KAAK,qBAAqB,CAAC,GAAG,IAAI,qBAAqB,CAAC,IAAI,KAAK,qBAAqB,CAAC,IAAI;gCACtH,qBAAqB,CAAC,eAAe,IAAI,CAAC,EAC1C;gCACA,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;gCACtD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;gCACrD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;gCAC7D,mBAAmB,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,GAAG,qBAAqB,CAAC,eAAe,CAAC;gCAC3F,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;6BACtD;iCAAM,IACL,qBAAqB,CAAC,IAAI,KAAK,qBAAqB,CAAC,SAAS;gCAC9D,iBAAiB,CAAC,UAAU,CAAC,UAAU,KAAK,qBAAqB,CAAC,UAAU,EAC5E;;gCAEA,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;gCACtD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;gCACrD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;gCAC7D,mBAAmB,CAAC,KAAK,GAAG,iBAAiB,CAAC,WAAW,CAAC;gCAC1D,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;;gCAGrD,IAAI,iBAAiB,CAAC,YAAY,EAAE;oCAClC,QAAQ,GAAG,IAAI,CAAC;iCACjB;6BACF;yBACF;qBACF;iBACF;;gBAGD,IAAI,CAAC,QAAQ,IAAI,aAAa,CAAC,UAAU,EAAE;oBACzC,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,mCAAmC,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;oBAExG,IAAI,UAAU,EAAE;;wBAEd,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;wBACtD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;wBACrD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;wBAC7D,mBAAmB,CAAC,KAAK,GAAG,UAAU,CAAC,WAAW,CAAC;wBACnD,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;qBACtD;iBACF;aACF;SACF;KACF;IAEO,gBAAgB,CACtB,MAAyB,EACzB,aAA4B,EAC5B,MAA6B,EAC7B,mBAA2B;;QAG3B,KAAK,MAAM,aAAa,IAAI,aAAa,CAAC,QAAQ,EAAE;YAClD,IAAI,aAAa,CAAC,OAAO,EAAE;gBACzB,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE;oBAC7D,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,WAAW,IAAI,aAAa,CAAC,IAAI,KAAK,YAAY,CAAC,WAAW,EAAE;wBAC9G,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;qBACjE;iBACF;aACF;SACF;KACF;IAEO,UAAU,CAChB,UAAkB,EAClB,YAAoB,EACpB,MAAyB,EACzB,aAA4B,EAC5B,MAA6B,EAC7B,mBAA2B;QAE3B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;YAC1C,IAAI,MAAM,CAAC,OAAO,EAAE;;gBAElB,IAAI,MAAM,YAAY,WAAW,EAAE;oBACjC,MAAM,WAAW,GAAG,MAAqB,CAAC;;oBAG1C,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,YAAY,EAAE;wBACjD,KAAK,MAAM,aAAa,IAAI,aAAa,CAAC,QAAQ,EAAE;4BAClD,KAAK,MAAM,iBAAiB,IAAI,aAAa,CAAC,YAAY,EAAE;gCAC1D,IACE,IAAI,CAAC,cAAc,CAAC,iBAAiB,CACnC,UAAU,CAAC,IAAI,EACf,iBAAiB,CAAC,UAAU,CAAC,IAAI,EACjC,UAAU,CAAC,KAAK,EAChB,iBAAiB,CAAC,UAAU,CAAC,KAAK,EAClC,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,CACL,EACD;oCACA,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;oCACtD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;oCACrD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;oCAC7D,mBAAmB,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;oCAC5G,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;iCACxE;6BACF;yBACF;qBACF;;oBAGD,KAAK,MAAM,cAAc,IAAI,WAAW,CAAC,QAAQ,EAAE;wBACjD,IAAI,cAAc,CAAC,WAAW,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE;4BAC7D,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,QAAQ,EAAE;gCAC7C,KAAK,MAAM,aAAa,IAAI,aAAa,CAAC,QAAQ,EAAE;oCAClD,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,EAAE;wCAClC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;wCACtD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;wCACrD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;wCAC7D,mBAAmB,CAAC,KAAK,GAAG,aAAa,CAAC,QAAQ,GAAG,WAAW,CAAC,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;wCAC5G,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;qCACxE;iCACF;6BACF;4BAED,MAAM;yBACP;qBACF;iBACF;;aAGF;SACF;KACF;;IAGM,gBAAgB,CAAC,UAAkB,EAAE,OAA4B;;QAEtE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAwC,CAAC;QAE3E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAClE,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;;YAG5D,IAAI,MAAM,GAA0B,EAAE,CAAC;YAEvC,MAAM,wBAAwB,GAAG,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAEzG,IAAI,wBAAwB,EAAE;;gBAE5B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,kBAAkB,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;aAC9E;iBAAM;;gBAEL,KAAK,MAAM,aAAa,IAAI,aAAa,CAAC,QAAQ,EAAE;oBAClD,IAAI,aAAa,CAAC,OAAO,EAAE;wBACzB,IAAI,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE;4BACtC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;4BACtD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC;4BACrD,mBAAmB,CAAC,WAAW,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC;4BAC7D,mBAAmB,CAAC,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC;4BACvD,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;yBACtD;qBACF;iBACF;gBAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;;oBAE5B,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAErF,IAAI,YAAY,IAAI,CAAC,EAAE;;;wBAGrB,MAAM,mBAAmB,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;wBAExE,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;wBAC7E,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;wBAC1E,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;qBAC/F;iBACF;aACF;;YAGD,kBAAkB,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;SAC/C;QAED,OAAO,kBAAkB,CAAC;KAC3B;IAEM,iBAAiB,CAAC,QAAmD,EAAE,iBAAyB;;QAErG,OAAO;;QAGP,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE;YACrD,QAAQ,CAAC,aAAa,GAAG,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBAC5B,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAChC;SACF;;QAGD,QAAQ,CAAC,OAAO,CAAC,CAAC,aAAoC,EAAE,aAA4B;;YAElF,MAAM,QAAQ,GAAa,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;;YAGzG,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE;gBAC5F,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC7D,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;oBAClC,MAAM,WAAW,GAAG,UAAU,CAAC;;oBAE/B,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;wBACxC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;wBACjF,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;4BAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;4BAC1E,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,CAAC,WAAW,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;gCAC/D,MAAM,eAAe,GAAG,aAAa,CAAC,OAAO,CAAC,eAAe,GAAG,YAAY,CAAC;gCAC7E,MAAM,QAAQ,GACZ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;;gCAEpH,MAAM;6BACP;yBACF;qBACF;iBACF;aACF;SACF,CAAC,CAAC;KACJ;IAEM,iBAAiB,CAAC,IAAY,EAAE,OAA4B;QACjE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;gBACpD,IAAI,WAAW,KAAK,IAAI,EAAE;oBACxB,OAAO,IAAI,CAAC;iBACb;aACF;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAEM,kBAAkB;QACvB,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;KAClC;IAEM,WAAW;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,OAAO;SACR;QAED,IAAI,QAAa,CAAC;QAClB,IAAI,IAAS,CAAC;;QAGd,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,WAAW,EAAE;YAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAChC,YAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;SACjC;QACD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;;QAGtB,QAAQ,GAAG,IAAIC,iBAAuB,CACpC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,EACxC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CACzC,CAAC;QACF,IAAI,GAAG,IAAIC,IAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAG5B,QAAQ,GAAG,IAAID,iBAAuB,CACpC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,EACzC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAC/C,CAAC;QACF,IAAI,GAAG,IAAIC,IAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,EAClG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9F,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAClG,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAG5B,QAAQ,GAAG,IAAID,iBAAuB,CACpC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,EACzC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAC/C,CAAC;QACF,IAAI,GAAG,IAAIC,IAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,EACjG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9F,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAClG,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAG5B,QAAQ,GAAG,IAAID,iBAAuB,CACpC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,EACzC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAC/C,CAAC;QACF,IAAI,GAAG,IAAIC,IAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,EAClG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9F,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,CACnG,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAG5B,QAAQ,GAAG,IAAID,iBAAuB,CACpC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,EACzC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAC/C,CAAC;QACF,IAAI,GAAG,IAAIC,IAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,EACjG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9F,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC,CACnG,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAG5B,QAAQ,GAAG,IAAID,iBAAuB,CACpC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,EACxC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,oBAAoB,EAChD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CACzC,CAAC;QACF,IAAI,GAAG,IAAIC,IAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,QAAQ,CAAC,GAAG,CACf,CAAC,EACD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa;YACvC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,oBAAoB,GAAG,CAAC;YACpD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAChD,CAAC,CACF,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7B;EACF;;YAxmB0B,aAAa;YACZ,cAAc;YAChB,YAAY;YACT,eAAe;YACf,eAAe;YAChB,cAAc;;;AAd7B,cAAc;IAH1B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAUyB,aAAa;QACZ,cAAc;QAChB,YAAY;QACT,eAAe;QACf,eAAe;QAChB,cAAc;GAd7B,cAAc,CAinB1B;;MC5nBqB,SAAS;IAmB7B,YAAmB,cAA8B,EAAE,OAAsB,EAAE,KAAU;QAAlE,mBAAc,GAAd,cAAc,CAAgB;QAjBjD,qBAAgB,GAAG,KAAK,CAAC;QACzB,yBAAoB,GAAG,KAAK,CAAC;QAC7B,oBAAe,GAAG,KAAK,CAAC;QAQxB,WAAM,GAAG,CAAC,CAAC;QAEX,eAAU,GAAG,KAAK,CAAC;QACnB,aAAQ,GAAG,KAAK,CAAC;QAKf,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;QAGnB,IAAI,CAAC,gBAAgB,GAAG,IAAIC,mBAAyB,CAAC;YACpD,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;;QAGH,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;YACjD,IAAI,aAAa,CAAC,OAAO,EAAE;gBACzB,KAAK,MAAM,UAAU,IAAI,aAAa,CAAC,YAAY,EAAE;oBACnD,QAAQ,UAAU,CAAC,UAAU,CAAC,IAAI;wBAChC,KAAK,qBAAqB,CAAC,SAAS;4BAClC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;4BAC7B,MAAM;wBACR,KAAK,qBAAqB,CAAC,cAAc;4BACvC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;4BAC5B,MAAM;qBACT;iBACF;gBAED,IAAI,aAAa,CAAC,UAAU,EAAE;oBAC5B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;iBAClC;aACF;SACF;KACF;IAES,oBAAoB,CAAC,OAA6B,EAAE,KAAa;QACzE,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE;YAC7C,IACE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;iBAC1C,KAAK,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAC1F;gBACA,OAAO,UAAU,CAAC;aACnB;SACF;QAED,OAAO,SAAS,CAAC;KAClB;;IAGD,aAAa,CAAC,aAAoC,EAAE,iBAAyB;;QAE3E,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjB;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjB;QAED,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,eAAe,EAAE;YACtD,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;SACpB;QAED,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;YAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAE1E,IAAI,UAAU,EAAE;gBACd,QAAQ,UAAU,CAAC,UAAU,CAAC,IAAI;oBAChC,KAAK,qBAAqB,CAAC,SAAS,EAAE;wBACpC,IAAI,eAAuB,CAAC;wBAC5B,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;4BAC7C,eAAe;gCACb,CAAC,YAAY,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;qCACtD,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;yBAC3E;6BAAM;4BACL,eAAe,GAAG,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;yBACzD;wBACD,IAAI,CAAC,MAAM,GAAG,eAAe,GAAG,iBAAiB,CAAC;wBAClD,MAAM;qBACP;oBACD,KAAK,qBAAqB,CAAC,cAAc,EAAE;wBACzC,MAAM,eAAe,GAAG,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,CAAC;wBACtE,QAAQ,UAAU,CAAC,UAAU,CAAC,KAAK;4BACjC,KAAK,sBAAsB,CAAC,GAAG;;gCAE7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gCAC5C,MAAM;4BACR,KAAK,sBAAsB,CAAC,KAAK;;gCAE/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gCAC9C,MAAM;4BACR,KAAK,sBAAsB,CAAC,IAAI;;gCAE9B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;gCAC7C,MAAM;yBACT;wBACD,MAAM;qBACP;oBACD,KAAK,qBAAqB,CAAC,SAAS,EAAE;wBACpC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;wBAClH,IAAI,UAAU,EAAE;4BACd,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;4BAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;4BAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;yBAC9C;wBACD,MAAM;qBACP;iBACF;aACF;SACF;KACF;IAED,cAAc,CAAC,MAAsB;;QAEnC,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW;YACtC,KAAK,WAAW,CAAC,QAAQ,EAAE;gBACzB,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAGC,MAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACzH,MAAM;aACP;YACD,KAAK,WAAW,CAAC,WAAW,EAAE;gBAC5B,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAGA,MAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACzH,MAAM;aACP;YACD,KAAK,WAAW,CAAC,OAAO,EAAE;gBACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAGA,MAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACzH,MAAM;aACP;YACD,KAAK,WAAW,CAAC,UAAU,EAAE;gBAC3B,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAGA,MAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACzH,MAAM;aACP;YACD,KAAK,WAAW,CAAC,MAAM,EAAE;gBACvB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACpH,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAGA,MAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACxE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAGA,MAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACxE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAGA,MAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;gBACxE,MAAM;aACP;SACF;KACF;IAED,OAAO;QACL,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;KACjC;;;MCtKU,cAAe,SAAQ,SAAS;IAoJ3C,YAAY,cAA8B,EAAE,kBAAsC,EAAE,OAAsB,EAAE,KAAU;QACpH,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QApJvB,2BAAsB,GAAW,CAAC,CAAC;QACnC,0BAAqB,GAAW,CAAC,CAAC;QAI3C,gBAAW,GAAmB,IAAIC,QAAc,EAAE,CAAC;QACnD,mBAAc,GAAmB,IAAIA,QAAc,EAAE,CAAC;QAgJ5D,QAAQ,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;aACpD,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;YAEzB,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IA7IO,aAAa;QACnB,MAAM,YAAY,GAAG;YACnB,oCAAoC;YACpC,6BAA6B;YAE7B,cAAc;YACd,oDAAoD;YAEpD,kEAAkE;YAElE,qBAAqB;YACrB,0EAA0E;YAC1E,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,cAAc,GAAG;YACrB,yBAAyB;YACzB,2BAA2B;YAC3B,sBAAsB;YACtB,wBAAwB;YAExB,6BAA6B;YAC7B,oCAAoC;YAEpC,cAAc;YACd,mEAAmE;YACnE,+EAA+E;YAC/E,sDAAsD;YACtD,sFAAsF;YACtF,wDAAwD;YACxD,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;QAIb,MAAM,QAAQ,GAAG,IAAIC,cAAoB,CAAC;YACxC,QAAQ,EAAE;gBACR,UAAU,EAAE;oBACV,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,GAAG;iBACX;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,GAAG;iBACX;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,GAAG;iBACX;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,IAAIC,OAAW,CAAC,OAAO,CAAC;iBAChC;aACF;YACD,YAAY;YACZ,cAAc;;YAEd,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;KACjB;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAChD;;QAGD,MAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAIC,gBAAsB,CAAC,GAAG,EAAE,gBAAgB,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7F,QAAQ,CAAC,WAAW,CAAC,IAAIC,OAAa,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjG,QAAQ,CAAC,WAAW,CAAC,IAAIA,OAAa,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAEtE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAIP,IAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACvE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;KAC7C;IAEO,aAAa;QAClB,IAAI,CAAC,QAAgB,GAAG,IAAIC,mBAAyB,CAAC;YACrD,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;;QAGnC,IAAI,CAAC,SAAS,GAAG,IAAIO,SAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;QAE9B,IAAI,CAAC,eAAe,GAAG,IAAIC,eAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;QAGjE,MAAM,eAAe,GAAG,IAAIN,QAAc,EAAE,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC;QAExC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;QAGxC,IAAI,CAAC,UAAU,GAAG,IAAIO,UAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;QAGzC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;QAGhC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAgBM,SAAS;QACd,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAEM,aAAa,CAAC,aAAoC,EAAE,iBAAyB;QAClF,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAEtD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO;SACR;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;QAGtC,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,UAAU,EAAE;YACzC,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;oBACrC,KAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;iBAClD;aACF;iBAAM;gBACL,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;oBACrC,KAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;iBAC1C;aACF;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;SACrC;;QAGD,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;;QAG9B,MAAM,KAAK,GAAG,IAAIL,OAAW,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;QAE7G,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;QAE9B,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,QAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;;;QAItE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,CAAC,QAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QAE1G,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC;QACpE,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;KACvE;IAED,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;KACnC;;;MCtNU,YAAa,SAAQ,SAAS;IAgLzC,YAAY,cAA8B,EAAE,kBAAsC,EAAE,OAAsB,EAAE,KAAU;QACpH,KAAK,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAhLvB,2BAAsB,GAAW,CAAC,CAAC;QACnC,+BAA0B,GAAW,EAAE,CAAC;QASjD,cAAS,GAAmB,IAAIF,QAAc,EAAE,CAAC;QACjD,mBAAc,GAAmB,IAAIA,QAAc,EAAE,CAAC;QACtD,aAAQ,GAAmB,IAAIA,QAAc,EAAE,CAAC;QAChD,gBAAW,GAAmB,IAAIA,QAAc,EAAE,CAAC;QAqKzD,QAAQ,CAAC;YACP,kBAAkB,CAAC,OAAO,CAAC,oBAAoB,CAAC;YAChD,kBAAkB,CAAC,OAAO,CAAC,iBAAiB,CAAC;YAC7C,kBAAkB,CAAC,OAAO,CAAC,kBAAkB,CAAC;SAC/C,CAAC;aACC,IAAI,CACH,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC;YACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YAEjB,IAAI,CAAC,aAAa,EAAE,CAAC;SACtB,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IAvKO,aAAa;QACnB,MAAM,YAAY,GAAG;YACnB,oCAAoC;YACpC,6BAA6B;YAE7B,cAAc;YACd,oDAAoD;YAEpD,kEAAkE;YAElE,qBAAqB;YACrB,0EAA0E;YAC1E,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,cAAc,GAAG;YACrB,yBAAyB;YACzB,2BAA2B;YAC3B,sBAAsB;YACtB,wBAAwB;YAExB,6BAA6B;YAC7B,oCAAoC;YAEpC,cAAc;YACd,mEAAmE;YACnE,+EAA+E;YAC/E,sDAAsD;YACtD,sFAAsF;YACtF,wDAAwD;YACxD,GAAG;SACJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;;QAIb,MAAM,QAAQ,GAAG,IAAIC,cAAoB,CAAC;YACxC,QAAQ,EAAE;gBACR,UAAU,EAAE;oBACV,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,GAAG;iBACX;gBACD,KAAK,EAAE;oBACL,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,GAAG;iBACX;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,GAAG;iBACX;gBACD,SAAS,EAAE;oBACT,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,IAAIC,OAAW,CAAC,OAAO,CAAC;iBAChC;aACF;YACD,YAAY;YACZ,cAAc;;YAEd,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;KACjB;IAEO,mBAAmB;QACzB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAChD;;QAGD,MAAM,gBAAgB,GAAG,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAIC,gBAAsB,CAAC,GAAG,EAAE,gBAAgB,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7F,QAAQ,CAAC,WAAW,CAAC,IAAIC,OAAa,EAAE,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjG,QAAQ,CAAC,WAAW,CAAC,IAAIA,OAAa,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;;QAItE,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAIP,IAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACvE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAE7C,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;KAC7C;IAEO,aAAa;QAClB,IAAI,CAAC,QAAgB,GAAG,IAAIC,mBAAyB,CAAC;YACrD,KAAK,EAAE,QAAQ;YACf,QAAQ,EAAE,QAAQ;SACnB,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;;QAGnC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,cAAc,GAAG,IAAIE,QAAc,EAAE,CAAC;QAC5C,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;;QAGnC,IAAI,CAAC,SAAS,GAAG,IAAIK,SAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,GAAG,CAAC;QAC9B,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,EAAE,CAAC;QAE9B,IAAI,CAAC,eAAe,GAAG,IAAIC,eAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;QAGjE,MAAM,eAAe,GAAG,IAAIN,QAAc,EAAE,CAAC;QAC7C,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC;QAExC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;QAGxC,IAAI,CAAC,UAAU,GAAG,IAAIO,UAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;QAGzC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;QAGxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;QAG5B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;;QAGpC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;KACtB;IAsBM,SAAS;QACd,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;IAEM,aAAa,CAAC,aAAoC,EAAE,iBAAyB;QAClF,KAAK,CAAC,aAAa,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAEtD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,OAAO;SACR;;QAGD,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,MAAM,GAAG,GAAG,CAAC;QAEjB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,OAAO,GAAG,GAAG,CAAC;QAElB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QACb,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;;QAGd,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;YACxC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;YAC7F,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC1E,IAAI,UAAU,EAAE;gBACd,QAAQ,UAAU,CAAC,UAAU,CAAC,IAAI;oBAChC,KAAK,qBAAqB,CAAC,GAAG,EAAE;wBAC9B,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;wBAC1F,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;wBACxF,IAAI,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;wBACjD,MAAM;qBACP;oBACD,KAAK,qBAAqB,CAAC,IAAI,EAAE;wBAC/B,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;wBAC3F,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;wBAC1F,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;wBAClD,MAAM;qBACP;iBACF;aACF;SACF;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;QAGtC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAGR,MAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAGA,MAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/G,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAGA,MAAU,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,GAAGA,MAAU,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;;;QAIpH,MAAM,iBAAiB,GAAG,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,oBAAoB,KAAK,iBAAiB,EAAE;YACnD,IAAI,CAAC,SAAS,CAAC,KAAK,GAAGA,MAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YAC9D,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,oBAAoB,GAAG,iBAAiB,CAAC;SAC/C;;QAGD,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,UAAU,EAAE;YACzC,IAAI,IAAI,CAAC,UAAU,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAC7C,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC;aAC5C;iBAAM;gBACL,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBACrC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;aACpC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC;SACrC;;QAGD,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;;QAG9B,MAAM,KAAK,GAAG,IAAIG,OAAW,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;QAE7G,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;QAE9B,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,QAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;;;QAItE,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC/E,IAAI,CAAC,aAAa,CAAC,QAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAEpG,IAAI,CAAC,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,MAAM,CAAC;QACzE,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC;;;KAIvE;IAED,OAAO;QACL,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;KACnC;;;IC7RU,gBAAgB,GAA7B,MAAa,gBAAgB;IAc3B,YACU,cAA8B,EAC9B,kBAAsC,EACtC,gBAAkC,EAClC,cAA8B,EAC9B,eAAgC,EAChC,cAA8B;QAL9B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,oBAAe,GAAf,eAAe,CAAiB;QAChC,mBAAc,GAAd,cAAc,CAAgB;QAdhC,UAAK,GAAQ,KAAK,EAAE,CAAC;;QAGrB,eAAU,GAAgB,EAAE,CAAC;QAanC,IAAI,CAAC,cAAc,CAAC,oBAAoB,CAAC,SAAS,CAAC;;YAEjD,IAAI,CAAC,YAAY,EAAE,CAAC;SACrB,CAAC,CAAC;KACJ;IAEO,YAAY;;QAElB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;YACvC,SAAS,CAAC,OAAO,EAAE,CAAC;SACrB;QACD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;;QAGrB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE;YACxD,QAAQ,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;gBACnC,KAAK,eAAe,CAAC,aAAa,CAAC;oBACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC1G,MAAM;gBACR,KAAK,eAAe,CAAC,eAAe,CAAC;oBACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC5G,MAAM;gBACR,KAAK,eAAe,CAAC,SAAS,CAAC;oBAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC5G,MAAM;aACT;SACF;KACF;IAED,IAAY,MAAM;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;KACrC;IAEO,MAAM;QACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;KAC/C;IAEO,mBAAmB,CACzB,WAAwB,EACxB,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY,EACZ,IAAY;QAEZ,IAAI,aAAa,GAAG,CAAC,CAAC;QACtB,IAAI,aAAa,GAAG,CAAC,CAAC;QAEtB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK;YAC1D,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE;gBACvC,aAAa,EAAE,CAAC;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK;YAC1D,IAAI,OAAO,CAAC,WAAW,KAAK,WAAW,EAAE;gBACvC,OAAO,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,aAAa,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC;gBACjF,OAAO,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,aAAa,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC;gBACjF,OAAO,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,KAAK,aAAa,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC;gBAEjF,aAAa,EAAE,CAAC;aACjB;SACF,CAAC,CAAC;KACJ;IAEO,OAAO,CAAC,UAAkB;QAChC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAEnB,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,KAAK,SAAS,EAAE;;YAEhD,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC;SACtE;QAED,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,UAAU,CAAC;;QAG9C,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;SACxB;;QAGD,IAAI,CAAC,mBAAmB,CACtB,WAAW,CAAC,QAAQ,EACpB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAC7C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC1F,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC1F,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,EACjD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,CAClD,CAAC;QACF,IAAI,CAAC,mBAAmB,CACtB,WAAW,CAAC,WAAW,EACvB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAC7C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,EACjD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,CAClD,CAAC;QACF,IAAI,CAAC,mBAAmB,CACtB,WAAW,CAAC,OAAO,EACnB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAC7C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC1F,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC1F,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,EAClD,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,CACnD,CAAC;QACF,IAAI,CAAC,mBAAmB,CACtB,WAAW,CAAC,UAAU,EACtB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAC7C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,EAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAC9C,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,EAClD,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,EAAE,CACnD,CAAC;;;QAIF,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAE3D,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAErF,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;;YAEvC,SAAS,CAAC,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;;YAGxH,IAAI,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;gBACzC,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aACjG;iBAAM;gBACL,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;aACvG;SACF;;QAGD,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;;;;QAMzG,IAAI,CAAC,MAAM,EAAE,CAAC;QAEd,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAEjB,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAChD;IAEO,cAAc;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAExC,IAAI,MAAM,KAAK,CAAC,EAAE;YAChB,OAAO,CAAC,CAAC;SACV;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;KAC3D;IAGM,QAAQ;QACb,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;KAC1E;IAEO,aAAa;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAIM,aAAmB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,GAAG,KAAK,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;KAClC;IAEO,WAAW;QACjB,IAAI,CAAC,MAAM,GAAG,IAAIC,iBAAuB,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAChG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;KACzC;IAEO,aAAa;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;QAC9B,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG,CAAC;;QAEhC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAIC,OAAa,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;;KAErD;IAEO,UAAU;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC;QACnB,MAAM,MAAM,GAAG,CAAC,CAAC;QAEjB,MAAM,QAAQ,GAAG,IAAIC,WAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,IAAIhB,oBAA0B,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAErE,MAAM,KAAK,GAAG,IAAIE,IAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAC;QACzD,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC;QAC5B,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;QACzB,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACvB;IAEO,UAAU;;;;;QAMhB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KAChD;IAEO,UAAU;;QAEhB,IAAI,CAAC,KAAK,GAAG,IAAIe,OAAW,EAAE,CAAC;QAE/B,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;;QAGvC,MAAM,OAAO,GAAG,IAAIC,YAAkB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;;QAGxB,IAAI,CAAC,UAAU,EAAE,CAAC;;QAGlB,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;;QAGlC,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAIN,UAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,GAAG,IAAIA,UAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACnD,MAAM,CAAC,CAAC,CAAC,GAAG,IAAIA,UAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QAEnD,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;QAG1B,IAAI,CAAC,UAAU,EAAE,CAAC;KACnB;IAED,eAAe;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACpB;EACF;;YAlR2B,cAAc;YACV,kBAAkB;YACpB,gBAAgB;YAClB,cAAc;YACb,eAAe;YAChB,cAAc;;AARxC;IADC,SAAS,CAAC,QAAQ,CAAC;8BACD,UAAU;mDAAC;AA4K9B;IADC,YAAY,CAAC,eAAe,CAAC;;;;gDAK7B;AA5LU,gBAAgB;IAL5B,SAAS,CAAC;QACT,QAAQ,EAAE,iBAAiB;QAC3B,4EAAuC;;KAExC,CAAC;qCAgB0B,cAAc;QACV,kBAAkB;QACpB,gBAAgB;QAClB,cAAc;QACb,eAAe;QAChB,cAAc;GApB7B,gBAAgB,CAiS5B;;IC/SY,mBAAmB,GAAhC,MAAa,mBAAmB;IAC9B,iBAAgB;IAEhB,QAAQ,MAAK;EACd;AAJY,mBAAmB;IAL/B,SAAS,CAAC;QACT,QAAQ,EAAE,iBAAiB;QAC3B,wgBAA2C;;KAE5C,CAAC;;GACW,mBAAmB,CAI/B;;ICQY,kBAAkB,GAA/B,MAAa,kBAAkB;IAC7B,YACU,cAA8B,EAC9B,cAA8B,EAC9B,cAA8B,EAC9B,aAA4B,EAC5B,YAA0B,EAC1B,YAA4B,EAC5B,WAAwB,EACxB,eAAgC,EAChC,MAAc,EACd,cAA8B;QAT9B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,kBAAa,GAAb,aAAa,CAAe;QAC5B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,iBAAY,GAAZ,YAAY,CAAgB;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACxB,oBAAe,GAAf,eAAe,CAAiB;QAChC,WAAM,GAAN,MAAM,CAAQ;QACd,mBAAc,GAAd,cAAc,CAAgB;KACpC;IAEI,SAAS;QACf,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,6BAA6B,EAAE,CAAC;KACnD;IAEO,6BAA6B;QACnC,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QACvH,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAAE;YAClD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,kBAAkB,EAAE;gBACjE,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;aAC/E;SACF;QACD,IAAI,CAAC,eAAe,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACrD,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAC1D,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC;QACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxE,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,uBAAuB,EAAE;gBAC5G,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;gBAC/C,MAAM;aACP;SACF;KACF;IAED,IAAI,CAAC,EAAU,EAAE,IAAY,EAAE,UAAmB;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;QAExG,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,IAAI,CAC9D,GAAG,CAAC,CAAC,OAAO;YACV,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC;YACtC,IAAI,CAAC,6BAA6B,EAAE,CAAC;YACrC,IAAI,CAAC,SAAS,EAAE,CAAC;YAEjB,MAAM,WAAW,GAAW;gBAC1B,EAAE;gBACF,KAAK,EAAE,OAAO,CAAC,UAAU;aAC1B,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;gBACvB,UAAU,EAAE,IAAI,CAAC,cAAc;gBAC/B,WAAW;gBACX,mBAAmB,EAAE,OAAO;aAC7B,CAAC,CAAC;SACJ,CAAC,EACF,QAAQ,CAAC;;;YAGP,UAAU,CAAC;gBACT,GAAG,CAAC,IAAI,EAAE,CAAC;aACZ,EAAE,GAAG,CAAC,CAAC;YACR,UAAU,CAAC;gBACT,GAAG,CAAC,IAAI,EAAE,CAAC;aACZ,EAAE,GAAG,CAAC,CAAC;YACR,UAAU,CAAC;gBACT,GAAG,CAAC,IAAI,EAAE,CAAC;aACZ,EAAE,IAAI,CAAC,CAAC;SACV,CAAC,CACH,CAAC;KACH;IAED,GAAG;;QAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;;QAGpE,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,GAAG,YAAY,CAAC;QAC3B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAEnC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;QAEjD,IAAI,CAAC,YAAY,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE3E,IAAI,CAAC,eAAe,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACrD,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAC1D,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,CAAC;QAEzC,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,MAAM,WAAW,GAAW;YAC1B,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,EAAE;SACV,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;YACvB,UAAU,EAAE,IAAI,CAAC,cAAc;YAC/B,WAAW;YACX,mBAAmB,EAAE,OAAO;SAC7B,CAAC,CAAC;KACJ;IAED,QAAQ;;QAEN,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC;YAC3B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;SAC5C,CAAC,CAAC;KACJ;IAED,MAAM,CAAC,IAAY;;QAEjB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC;QAEtC,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;EACF;;YApI2B,cAAc;YACd,cAAc;YACd,cAAc;YACf,aAAa;YACd,YAAY;YACZ,cAAc;YACf,WAAW;YACP,eAAe;YACxB,MAAM;YACE,cAAc;;;AAX7B,kBAAkB;IAH9B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAG0B,cAAc;QACd,cAAc;QACd,cAAc;QACf,aAAa;QACd,YAAY;QACZ,cAAc;QACf,WAAW;QACP,eAAe;QACxB,MAAM;QACE,cAAc;GAX7B,kBAAkB,CAsI9B;;IChJY,sBAAsB,GAAnC,MAAa,sBAAsB;IAKjC,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;KAAI;IAE9C,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;KAC9B;IAEM,EAAE;QACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAEM,MAAM;QACX,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;EACF;;YApBiC,UAAU;;AAiB1C;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;iEAGlD;AAxBU,sBAAsB;IALlC,SAAS,CAAC;QACT,QAAQ,EAAE,wBAAwB;QAClC,o8BAA8C;;KAE/C,CAAC;qCAMgC,UAAU;GAL/B,sBAAsB,CAyBlC;;ICxBY,oBAAoB,GAAjC,MAAa,oBAAoB;IAC/B,YAAoB,YAA4B,EAAU,gBAAkC;QAAxE,iBAAY,GAAZ,YAAY,CAAgB;QAAU,qBAAgB,GAAhB,gBAAgB,CAAkB;KAAI;;IAGhG,IAAI,CAAC,OAAe;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5C,GAAG,CAAC,CAAC,MAAM;YACT,OAAO,MAAM,CAAC;SACf,CAAC,EACF,QAAQ,CAAC,CAAC,MAAM;YACd,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;YACjH,UAAU,CAAC,OAAkC,CAAC,OAAO,GAAG,MAAM,CAAC;YAEhE,OAAQ,UAAU,CAAC,OAAkC,CAAC,OAAO,CAAC,IAAI,CAChE,GAAG,CAAC,CAAC,aAAa;gBAChB,IAAI,aAAa,KAAK,CAAC,EAAE;oBACvB,OAAO,IAAI,CAAC;iBACb;gBAED,OAAO,KAAK,CAAC;aACd,CAAC,CACH,CAAC;SACH,CAAC,CACH,CAAC;KACH;EACF;;YAxBmC,cAAc;YAA4B,gBAAgB;;;AADjF,oBAAoB;IAHhC,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAEkC,cAAc,EAA4B,gBAAgB;GADjF,oBAAoB,CAyBhC;;ICpBY,uBAAuB,GAApC,MAAa,uBAAuB;IAIlC,YACU,UAAsB,EACtB,cAA8B,EAC9B,kBAAsC,EACtC,WAAwB,EACxB,oBAA0C,EAC1C,aAA4B;QAL5B,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,gBAAW,GAAX,WAAW,CAAa;QACxB,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,kBAAa,GAAb,aAAa,CAAe;QATtC,aAAQ,GAAc,EAAE,CAAC;QACzB,YAAO,GAAG,IAAI,CAAC;QAUb,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAEO,YAAY;QAClB,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC,QAAQ;YACtD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;SACtB,CAAC,CAAC;KACJ;IAED,QAAQ,MAAK;IAEb,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,WAAW,CAAC,OAAgB;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;YAC/D,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;SAC9C,CAAC,CAAC;KACJ;IAED,aAAa,CAAC,OAAgB;QAC5B,IAAI,CAAC,oBAAoB;aACtB,IAAI,CAAC,iCAAiC,CAAC;aACvC,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ;oBAC5D,IAAI,CAAC,YAAY,EAAE,CAAC;iBACrB,CAAC,CAAC;aACJ;SACF,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;EACF;;YA5CuB,UAAU;YACN,cAAc;YACV,kBAAkB;YACzB,WAAW;YACF,oBAAoB;YAC3B,aAAa;;AAV3B,uBAAuB;IALnC,SAAS,CAAC;QACT,QAAQ,EAAE,qBAAqB;QAC/B,8vDAA+C;;KAEhD,CAAC;qCAMsB,UAAU;QACN,cAAc;QACV,kBAAkB;QACzB,WAAW;QACF,oBAAoB;QAC3B,aAAa;GAV3B,uBAAuB,CAiDnC;;ICnDY,sBAAsB,GAAnC,MAAa,sBAAsB;IAIjC,YACS,UAAsB,EACrB,gBAAkC,EAClC,aAA4B,EAC5B,kBAAsC;QAHvC,eAAU,GAAV,UAAU,CAAY;QACrB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,kBAAa,GAAb,aAAa,CAAe;QAC5B,uBAAkB,GAAlB,kBAAkB,CAAoB;KAC5C;IAEJ,QAAQ;QACN,IAAI,CAAC,cAAc,GAAG;YACpB,GAAG,EAAE,OAAO;YACZ,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,EAAE;YACf,aAAa,EAAE,MAAM;YACrB,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC,IAAS,EAAE,IAAS;gBAC3B,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAChC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAU;oBAC5C,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACpD,IAAI,CAAC,OAAO,CAAC,CAAC;oBACd,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;iBACxB,CAAC,CAAC;gBACH,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACzB;YACD,eAAe,EAAE;;;;OAIhB;SACF,CAAC;QAEF,IAAI,CAAC,gBAAgB;aAClB,GAAG,CAAC,gCAAgC,CAAC;aACrC,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,CAAC,aAAa,GAAG,0DAA0D,GAAG,MAAM,CAAC;SAC1F,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IAEM,aAAa,CAAC,IAAS;QAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;;YAEvB,OAAO;SACR;QAED,MAAM,GAAG,GAAG,kCAAkC,CAAC;QAC/C,MAAM,KAAK,GAAG,wCAAwC,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;YACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;SACtH,CAAC,CAAC;KACJ;IAED,EAAE;QACA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;EACF;;YAhEsB,UAAU;YACH,gBAAgB;YACnB,aAAa;YACR,kBAAkB;;AA0DhD;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;iEAGlD;AApEU,sBAAsB;IALlC,SAAS,CAAC;QACT,QAAQ,EAAE,oBAAoB;QAC9B,2pBAA8C;;KAE/C,CAAC;qCAMqB,UAAU;QACH,gBAAgB;QACnB,aAAa;QACR,kBAAkB;GARrC,sBAAsB,CAqElC;;ICrEY,oBAAoB,GAAjC,MAAa,oBAAoB;IAK/B,YACU,UAAsB,EACtB,cAA8B,EAC9B,oBAA0C,EAC1C,aAA4B;QAH5B,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;QAC9B,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,kBAAa,GAAb,aAAa,CAAe;QARtC,aAAQ,GAAc,EAAE,CAAC;QACzB,YAAO,GAAG,IAAI,CAAC;QASb,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE;YACpC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC;SACrD;aAAM;YACL,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC;SAClC;KACF;IAED,QAAQ,MAAK;IAEL,YAAY;QAClB,IAAI,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC,SAAS,CAAC,CAAC,QAAQ;YACtD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;SACtB,CAAC,CAAC;KACJ;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,aAAa,CAAC,OAAgB;QAC5B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;KACjD;IAEO,eAAe,CAAC,IAAY,EAAE,IAAY;QAChD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,EAAE;gBAClD,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,KAAK,CAAC;KACd;IAEO,MAAM;QACZ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QACpD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,WAAW;QACT,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;YACrH,IAAI,CAAC,oBAAoB;iBACtB,IAAI,CAAC,oCAAoC,CAAC;iBAC1C,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;gBACT,IAAI,MAAM,EAAE;oBACV,IAAI,CAAC,MAAM,EAAE,CAAC;iBACf;aACF,CAAC,CACH;iBACA,SAAS,EAAE,CAAC;SAChB;aAAM;YACL,IAAI,CAAC,MAAM,EAAE,CAAC;SACf;KACF;IAED,aAAa,CAAC,OAAgB;QAC5B,IAAI,CAAC,oBAAoB;aACtB,IAAI,CAAC,iCAAiC,CAAC;aACvC,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ;oBAC5D,IAAI,CAAC,YAAY,EAAE,CAAC;iBACrB,CAAC,CAAC;aACJ;SACF,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;KACpB;EACF;;YAjFuB,UAAU;YACN,cAAc;YACR,oBAAoB;YAC3B,aAAa;;AA2EtC;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;+DAGlD;AAtFU,oBAAoB;IALhC,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,y+DAA4C;;KAE7C,CAAC;qCAOsB,UAAU;QACN,cAAc;QACR,oBAAoB;QAC3B,aAAa;GAT3B,oBAAoB,CAuFhC;;IC3FY,qBAAqB,GAAlC,MAAa,qBAAqB;IAGhC,YAAmB,UAAsB,EAAU,cAA8B;QAA9D,eAAU,GAAV,UAAU,CAAY;QAAU,mBAAc,GAAd,cAAc,CAAgB;KAAI;IAErF,QAAQ;QACN,IAAI,CAAC,SAAS;YACZ,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC;KAChI;IAED,EAAE;QACA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;EACF;;YAnBgC,UAAU;YAA0B,cAAc;;AAgBjF;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;gEAGlD;AArBU,qBAAqB;IALjC,SAAS,CAAC;QACT,QAAQ,EAAE,mBAAmB;QAC7B,6wBAA6C;;KAE9C,CAAC;qCAI+B,UAAU,EAA0B,cAAc;GAHtE,qBAAqB,CAsBjC;;ICtBY,oBAAoB,GAAjC,MAAa,oBAAoB;IAM/B,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;KAAI;IAE9C,QAAQ;QACN,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;KAC9B;IAEM,EAAE;QACP,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAEM,MAAM;QACX,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;EACF;;YApBiC,UAAU;;AAiB1C;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;+DAGlD;AAzBU,oBAAoB;IALhC,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,w2BAA4C;;KAE7C,CAAC;qCAOgC,UAAU;GAN/B,oBAAoB,CA0BhC;;ICzBY,kBAAkB,GAA/B,MAAa,kBAAkB;IAC7B,YAAoB,YAA4B,EAAU,gBAAkC;QAAxE,iBAAY,GAAZ,YAAY,CAAgB;QAAU,qBAAgB,GAAhB,gBAAgB,CAAkB;KAAI;;IAGhG,IAAI,CAAC,OAAe,EAAE,OAAgB;QACpC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAC5C,GAAG,CAAC,CAAC,MAAM;YACT,OAAO,MAAM,CAAC;SACf,CAAC,EACF,QAAQ,CAAC,CAAC,MAAM;YACd,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/G,UAAU,CAAC,OAAgC,CAAC,OAAO,GAAG,MAAM,CAAC;YAC7D,UAAU,CAAC,OAAgC,CAAC,OAAO,GAAG,OAAO,CAAC;YAE/D,OAAQ,UAAU,CAAC,OAAgC,CAAC,OAAO,CAAC,IAAI,CAC9D,GAAG,CAAC,CAAC,WAAW;gBACd,IAAI,WAAW,KAAK,CAAC,EAAE;oBACrB,OAAO,IAAI,CAAC;iBACb;gBAED,OAAO,KAAK,CAAC;aACd,CAAC,CACH,CAAC;SACH,CAAC,CACH,CAAC;KACH;EACF;;YAzBmC,cAAc;YAA4B,gBAAgB;;;AADjF,kBAAkB;IAH9B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAEkC,cAAc,EAA4B,gBAAgB;GADjF,kBAAkB,CA0B9B;;ICpBY,kCAAkC,GAA/C,MAAa,kCAAkC;IAK7C,YACS,UAAsB,EACrB,gBAAkC,EAClC,aAA4B,EAC5B,cAA8B,EAC9B,cAA8B;QAJ/B,eAAU,GAAV,UAAU,CAAY;QACrB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,mBAAc,GAAd,cAAc,CAAgB;QAPjC,YAAO,GAA4B,IAAI,OAAO,EAAE,CAAC;KAQpD;IAEJ,QAAQ;QACN,IAAI,CAAC,cAAc,GAAG;YACpB,GAAG,EAAE,OAAO;YACZ,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,EAAE;YACf,aAAa,EAAE,OAAO;YACtB,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC,IAAS,EAAE,IAAS;gBAC3B,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;gBAChC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAU;;oBAE5C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;oBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC9B,IACE,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CACnB,6GAA6G,CAC9G,EACD;;;;wBAIA,MAAM,qBAAqB,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;wBACtD,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;wBAC/C,MAAM,IAAI,GAAG,qBAAqB,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;wBAC9D,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;wBAEzC,OAAO,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;wBACtD,OAAO,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;wBAC5C,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;wBACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;;wBAG/B,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;wBACjE,IAAI,CAAC,aAAa,EAAE;4BAClB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;yBAC3D;;wBAGD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;qBACxB;yBAAM;;wBAEL,MAAM,GAAG,GAAG,oDAAoD,CAAC;wBACjE,MAAM,KAAK,GAAG,wCAAwC,CAAC;wBACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;4BACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;yBAC5G,CAAC,CAAC;qBACJ;oBAED,IAAI,CAAC,OAAO,CAAC,CAAC;iBACf,CAAC,CAAC;gBACH,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;aACzB;YACD,eAAe,EAAE;;;;OAIhB;SACF,CAAC;QAEF,IAAI,CAAC,gBAAgB;aAClB,GAAG,CAAC,gCAAgC,CAAC;aACrC,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,CAAC,aAAa,GAAG,0DAA0D,GAAG,MAAM,CAAC;SAC1F,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IAEM,aAAa,CAAC,IAAS;QAC5B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE;;YAEvB,OAAO;SACR;QAED,MAAM,GAAG,GAAG,kCAAkC,CAAC;QAC/C,MAAM,KAAK,GAAG,wCAAwC,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;YACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;SACtH,CAAC,CAAC;KACJ;IAED,EAAE;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,MAAM;QACJ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;EACF;;YAxGsB,UAAU;YACH,gBAAgB;YACnB,aAAa;YACZ,cAAc;YACd,cAAc;;AAiGxC;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;6EAGlD;AA7GU,kCAAkC;IAL9C,SAAS,CAAC;QACT,QAAQ,EAAE,mCAAmC;QAC7C,isBAA6D;;KAE9D,CAAC;qCAOqB,UAAU;QACH,gBAAgB;QACnB,aAAa;QACZ,cAAc;QACd,cAAc;GAV7B,kCAAkC,CA8G9C;;ICzGY,oBAAoB,GAAjC,MAAa,oBAAoB;IAoB/B,YACS,UAAsB,EACtB,cAA8B,EAC7B,WAAwB,EACzB,cAA8B,EAC7B,cAA8B,EAC9B,gBAAkC,EAClC,aAA4B,EAC5B,aAA4B,EAC7B,aAA4B,EAC3B,YAA4B;QAT7B,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAgB;QAC7B,gBAAW,GAAX,WAAW,CAAa;QACzB,mBAAc,GAAd,cAAc,CAAgB;QAC7B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,kBAAa,GAAb,aAAa,CAAe;QAC5B,kBAAa,GAAb,aAAa,CAAe;QAC7B,kBAAa,GAAb,aAAa,CAAe;QAC3B,iBAAY,GAAZ,YAAY,CAAgB;QA3B/B,oBAAe,GAAG,KAAK,CAAC;QAIxB,gBAAW,GAAa,EAAE,CAAC;QAG3B,uBAAkB,GAAG,KAAK,CAAC;QAI3B,YAAO,GAAoB,IAAI,OAAO,EAAE,CAAC;QAkB9C,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE7D,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC;KACF;IAED,QAAQ;QACN,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1B;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAEO,YAAY;QAClB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,SAAS,CAAC,CAAC,QAAQ;YACzD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;SAC9B,CAAC,CAAC;KACJ;IAED,aAAa,CAAC,OAAgB;QAC5B,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QACxC,IAAI,OAAO,EAAE;YACX,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;SACzF;QACD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;KAChC;IAED,cAAc;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC5C,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC;YACtC,OAAO;SACR;QAED,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAElD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE;YACnC,IAAI,aAAa,GAAG,CAAC,CAAC;YAEtB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,IACE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;oBAChE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC;oBAChE,OAAO,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAC5E;oBACA,aAAa,EAAE,CAAC;iBACjB;aACF;YAED,IAAI,aAAa,KAAK,QAAQ,CAAC,MAAM,EAAE;gBACrC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACrC;SACF;KACF;IAED,UAAU,CAAC,aAA6B;;;QAGtC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;YAClE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzE,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7E,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SAChC,CAAC,CAAC;KACJ;IAED,OAAO,CAAC,eAAwB;QAC9B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1C,OAAO,CAAC,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC;QAClD,OAAO,CAAC,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC;QACpC,OAAO,CAAC,aAAa,GAAG,eAAe,CAAC,aAAa,CAAC;QACtD,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC;QAC1D,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC;QAE1D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;KAC7B;IAED,aAAa,CAAC,OAAgB;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;gBAC7C,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;oBAChD,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;iBAC/B;gBACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9B,MAAM;aACP;SACF;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5E,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;SAClE;;QAGD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3E,IAAI,WAAW,GAAG,KAAK,CAAC;YAExB,KAAK,MAAM,aAAa,IAAI,IAAI,CAAC,WAAW,EAAE;gBAC5C,IAAI,aAAa,CAAC,WAAW,KAAK,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;oBACrF,WAAW,GAAG,IAAI,CAAC;oBACnB,MAAM;iBACP;aACF;YAED,IAAI,CAAC,WAAW,EAAE;gBAChB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;aAC1D;SACF;KACF;IAED,eAAe,CAAC,KAAa;QAC3B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAEtH,IAAI,KAAK,IAAI,OAAO,CAAC,eAAe,IAAI,KAAK,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC9F,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,oBAAoB,CAAC,KAAa;QAChC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;YACtC,IAAI,KAAK,KAAK,OAAO,CAAC,eAAe,EAAE;gBACrC,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,kBAAkB,CAAC,KAAa;QAC9B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAEtH,IAAI,KAAK,KAAK,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChE,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,iBAAiB,CAAC,KAAa;QAC7B,IAAI,eAAwB,CAAC;QAE7B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAEtH,IAAI,KAAK,IAAI,OAAO,CAAC,eAAe,IAAI,KAAK,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC9F,IAAI,eAAe,EAAE;oBACnB,IAAI,eAAe,CAAC,eAAe,KAAK,OAAO,CAAC,eAAe,IAAI,eAAe,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa,EAAE;;;wBAG1H,OAAO,IAAI,CAAC;qBACb;iBACF;qBAAM;oBACL,eAAe,GAAG,OAAO,CAAC;iBAC3B;aACF;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,gBAAgB,CAAC,KAAU;;QAEzB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QACjD,IAAI,kBAA2B,CAAC;;;QAIhC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,WAAW,EAAE;YACtC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YAEtH,IAAI,aAAa,IAAI,OAAO,CAAC,eAAe,IAAI,aAAa,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnH,IAAI,IAAI,CAAC,eAAe,KAAK,OAAO,EAAE;oBACpC,kBAAkB,GAAG,OAAO,CAAC;oBAC7B,MAAM;iBACP;gBAED,IAAI,CAAC,kBAAkB,EAAE;oBACvB,kBAAkB,GAAG,OAAO,CAAC;iBAC9B;aACF;SACF;QAED,IAAI,kBAAkB,EAAE;YACtB,IAAI,kBAAkB,KAAK,IAAI,CAAC,eAAe,EAAE;gBAC/C,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;aACxC;YAED,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;YAC7C,IAAI,CAAC,iBAAiB,GAAG,aAAa,GAAG,kBAAkB,CAAC,eAAe,CAAC;SAC7E;KACF;IAED,eAAe,CAAC,KAAa;QAC3B,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAC/C,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,EACtE,IAAI,CAAC,eAAe,CACrB,CAAC;YAEF,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACvE,OAAO,IAAI,CAAC;aACb;SACF;QAED,OAAO,KAAK,CAAC;KACd;;IAID,OAAO,CAAC,KAAU;;QAEhB,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;KACpC;IAED,gBAAgB,CAAC,KAAU;;QAEzB,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;QAEjD,IACE,IAAI,CAAC,kBAAkB;YACvB,aAAa,GAAG,IAAI,CAAC,iBAAiB,IAAI,CAAC;YAC3C,aAAa;gBACX,IAAI,CAAC,iBAAiB;gBACtB,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAClC,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,EACzE,IAAI,CAAC,kBAAkB,CACxB,CAAC,QAAQ,CAAC,MAAM;gBACjB,CAAC;gBACD,GAAG,EACL;YACA,IAAI,CAAC,kBAAkB,CAAC,eAAe,GAAG,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC;SAClF;KACF;IAED,EAAE;;QAEA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAChD,IAAI,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE;gBAC7B,MAAM,GAAG,GAAG,wCAAwC,CAAC;gBACrD,MAAM,KAAK,GAAG,8CAA8C,CAAC;gBAE7D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;oBACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;iBACtD,CAAC,CAAC;gBAEH,OAAO;aACR;SACF;QAED,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;QAExD,IAAI,CAAC,cAAc,CAAC,oBAAoB,EAAE,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,sBAAsB,EAAE,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;QAEjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,MAAM;QACJ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,cAAc;QACZ,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;;QAG7B,IAAI,CAAC,cAAc;aAChB,cAAc,EAAE;aAChB,IAAI,CACH,QAAQ,CAAC;YACP,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;SAC/B,CAAC,EACF,UAAU,CAAC;YACT,MAAM,GAAG,GAAG,6CAA6C,CAAC;YAC1D,MAAM,KAAK,GAAG,mDAAmD,CAAC;YAElE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;gBACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aACtD,CAAC,CAAC;YAEH,OAAO,SAAS,CAAC;SAClB,CAAC,CACH;aACA,SAAS,CAAC;YACT,IAAI,CAAC,YAAY,EAAE,CAAC;YAEpB,MAAM,GAAG,GAAG,wCAAwC,CAAC;YACrD,MAAM,KAAK,GAAG,8CAA8C,CAAC;YAE7D,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;gBACvD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;aACxD,CAAC,CAAC;SACJ,CAAC,CAAC;KACN;IAED,4BAA4B;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kCAAkC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7H,UAAU,CAAC,OAA8C,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAuB;YACnG,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC7E,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;SAChC,CAAC,CAAC;KACJ;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;EACF;;YArVsB,UAAU;YACN,cAAc;YAChB,WAAW;YACT,cAAc;YACb,cAAc;YACZ,gBAAgB;YACnB,aAAa;YACb,aAAa;YACd,aAAa;YACb,cAAc;;AAoOtC;IADC,YAAY,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;mDAK1C;AAiGD;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;+DAGlD;AAzWU,oBAAoB;IALhC,SAAS,CAAC;QACT,QAAQ,EAAE,sBAAsB;QAChC,o1VAA4C;;KAE7C,CAAC;qCAsBqB,UAAU;QACN,cAAc;QAChB,WAAW;QACT,cAAc;QACb,cAAc;QACZ,gBAAgB;QACnB,aAAa;QACb,aAAa;QACd,aAAa;QACb,cAAc;GA9B3B,oBAAoB,CA0WhC;;ICxXY,kBAAkB,GAA/B,MAAa,kBAAkB;IAG7B,YAAoB,YAA4B;QAA5B,iBAAY,GAAZ,YAAY,CAAgB;QAFxC,sBAAiB,GAAG,KAAK,CAAC;KAEkB;IAEpD,IAAI;QACF,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,OAAO;SACR;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACpI,UAAU,CAAC,OAAgC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM;YACpE,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;SAChC,CAAC,CAAC;KACJ;EACF;;YAbmC,cAAc;;;AAHrC,kBAAkB;IAH9B,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAIkC,cAAc;GAHrC,kBAAkB,CAgB9B;;IClBY,0BAA0B,GAAvC,MAAa,0BAA0B;IACrC;KAAgB;IAEhB,OAAO,CAAC,KAAU;;QAEhB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE;YACrC,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;KACd;EACF;;AAfY,0BAA0B;IAHtC,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;;GACW,0BAA0B,CAetC;;ICbY,YAAY,GAAzB,MAAa,YAAY;IAQvB,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAPhD,cAAS,GAAG,KAAK,CAAC;QAClB,eAAU,GAAG,OAAO,CAAC;QACrB,0BAAqB,GAAG,EAAE,CAAC;QAC3B,2BAAsB,GAAG,EAAE,CAAC;QAC5B,kBAAa,GAAG,kDAAkD,CAAC;QACnE,gBAAW,GAAkB,IAAI,OAAO,EAAQ,CAAC;KAEG;IAEpD,OAAO;;QAEL,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YAC5B,IAAI,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;gBACrC,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC;aAC/D;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;aACvB;SACF;KACF;IAED,YAAY,CAAC,KAAc;QACzB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,KAAK,EAAE;YACT,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;SAC3C;aAAM;YACL,YAAY,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;SAC5C;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;IAED,KAAK;QACH,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACnB,OAAO,KAAK,CAAC;SACd;QAED,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;YAC5B,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC;KACb;IAED,IAAI;QACF,QAAQ,IAAI,CAAC,UAAU;YACrB,KAAK,OAAO;gBACV,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC;gBACjC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,cAAc;gBACjB,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;gBAC3B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;gBAC3B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;SACT;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;IAED,IAAI;QACF,QAAQ,IAAI,CAAC,UAAU;YACrB,KAAK,SAAS;gBACZ,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;gBAC1B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,SAAS;gBACZ,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,cAAc;gBACjB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;gBAC5B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC;gBACjC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,UAAU;gBACb,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;gBAC3B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;gBAC7B,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;gBAChC,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;gBACjC,MAAM;SACT;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACzB;EACF;;YA5HoC,aAAa;;;AARrC,YAAY;IAHxB,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCASmC,aAAa;GARrC,YAAY,CAoIxB;;ICjIY,kBAAkB,GAA/B,MAAa,kBAAkB;IAU7B,YAAoB,UAAsB,EAAU,WAAwB;QAAxD,eAAU,GAAV,UAAU,CAAY;QAAU,gBAAW,GAAX,WAAW,CAAa;QAT5E,UAAK,GAAG,EAAE,CAAC;QACX,cAAS,GAAG,KAAK,CAAC;QAElB,UAAK,GAAG,EAAE,CAAC;QACX,aAAQ,GAAG,EAAE,CAAC;KAKkE;IAEhF,QAAQ,MAAK;IAEb,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACjC,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,OAAO;SACR;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CACzD;YACE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,OAAO,EAAE;gBAChB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;aACrB;SACF,EACD,CAAC,QAAQ;YACP,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;gBAC1C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;aACnC;iBAAM;gBACL,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;aACzB;YACD,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SACxB,CACF,CAAC;KACH;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;KACd;EACF;;YAxCiC,UAAU;YAAuB,WAAW;;AAqC5E;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;6DAGlD;AAjDU,kBAAkB;IAL9B,SAAS,CAAC;QACT,QAAQ,EAAE,gBAAgB;QAC1B,43EAA0C;;KAE3C,CAAC;qCAWgC,UAAU,EAAuB,WAAW;GAVjE,kBAAkB,CAkD9B;;ICjDY,qBAAqB,GAAlC,MAAa,qBAAqB;IAYhC,YAAoB,UAAsB,EAAU,YAA4B,EAAU,WAAwB;QAA9F,eAAU,GAAV,UAAU,CAAY;QAAU,iBAAY,GAAZ,YAAY,CAAgB;QAAU,gBAAW,GAAX,WAAW,CAAa;QAXlH,UAAK,GAAG,EAAE,CAAC;QACX,gBAAW,GAAG,KAAK,CAAC;QAEpB,aAAQ,GAAG,EAAE,CAAC;QACd,UAAK,GAAG,EAAE,CAAC;QACX,aAAQ,GAAG,EAAE,CAAC;QACd,mBAAc,GAAG,EAAE,CAAC;KAKkG;IAEtH,QAAQ,MAAK;IAEb,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;KACrI;IAEO,YAAY,CAAC,KAAa;;QAEhC,MAAM,EAAE,GAAG,yJAAyJ,CAAC;QACrK,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;KAC7C;IAED,QAAQ;QACN,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YAC3E,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;YAClC,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;YAC3B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,OAAO;SACR;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,cAAc,EAAE;YACzC,IAAI,CAAC,KAAK,GAAG,mBAAmB,CAAC;YACjC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,OAAO;SACR;QAED,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAC3E;;YAEE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC;gBAC1D,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;gBACzB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;aACxB,CAAC,CAAC;SACJ,EACD,CAAC,QAAQ;YACP,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE;gBAC1C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;aACnC;iBAAM;gBACL,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;aACzB;YACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;SAC1B,CACF,CAAC;KACH;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;EACF;;YAhEiC,UAAU;YAAwB,cAAc;YAAuB,WAAW;;AA6DlH;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;gEAGlD;AA3EU,qBAAqB;IALjC,SAAS,CAAC;QACT,QAAQ,EAAE,mBAAmB;QAC7B,qsIAA6C;;KAE9C,CAAC;qCAagC,UAAU,EAAwB,cAAc,EAAuB,WAAW;GAZvG,qBAAqB,CA4EjC;;IC7EY,sBAAsB,GAAnC,MAAa,sBAAsB;IACjC,YAAoB,WAAwB,EAAU,YAA4B,EAAU,aAA4B;QAApG,gBAAW,GAAX,WAAW,CAAa;QAAU,iBAAY,GAAZ,YAAY,CAAgB;QAAU,kBAAa,GAAb,aAAa,CAAe;KAAI;;IAG5H,KAAK;QACH,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE;YACjC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;YACtC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;SACjB;QAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAQ,CAAC;QACpC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;QACzH,OAAO,OAAO,CAAC;KAChB;EACF;;YAhBkC,WAAW;YAAwB,cAAc;YAAyB,aAAa;;;AAD7G,sBAAsB;IAHlC,UAAU,CAAC;QACV,UAAU,EAAE,MAAM;KACnB,CAAC;qCAEiC,WAAW,EAAwB,cAAc,EAAyB,aAAa;GAD7G,sBAAsB,CAiBlC;;ICRY,4BAA4B,GAAzC,MAAa,4BAA4B;IAcvC,YACS,UAAsB,EACrB,eAAgC,EACjC,aAA4B,EAC3B,gBAAkC,EAClC,IAAgB,EAChB,oBAA0C,EAC1C,aAA4B,EAC5B,cAA8B;QAP/B,eAAU,GAAV,UAAU,CAAY;QACrB,oBAAe,GAAf,eAAe,CAAiB;QACjC,kBAAa,GAAb,aAAa,CAAe;QAC3B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,SAAI,GAAJ,IAAI,CAAY;QAChB,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QApBxC,6BAAwB,GAAa,EAAE,CAAC;QAEjC,YAAO,GAAoB,IAAI,OAAO,EAAE,CAAC;QAKzC,kBAAa,GAAa,EAAE,CAAC;QAC7B,0BAAqB,GAAa,EAAE,CAAC;QAErC,cAAS,GAAG,KAAK,CAAC;KAWrB;IAEJ,QAAQ;QACN,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC;QACvF,IAAI,CAAC,cAAc,GAAG;YACpB,GAAG,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,8BAA8B,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,aAAa,GAAG,SAAS;YACpH,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,GAAG;YAChB,aAAa,EAAE,SAAS;YACxB,OAAO,EAAE,CAAC;YACV,eAAe,EAAE,CAAC;YAClB,eAAe,EAAE;;;;;;;;;;;;;;;;;;OAkBhB;SACF,CAAC;QAEF,IAAI,CAAC,gBAAgB;aAClB,GAAG,CAAC,gCAAgC,CAAC;aACrC,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,CAAC,aAAa,GAAG,0DAA0D,GAAG,MAAM,CAAC;SAC1F,CAAC,CACH;aACA,SAAS,EAAE,CAAC;QAEf,IAAI,CAAC,SAAS,EAAE,CAAC;QAEjB,IAAI,IAAI,CAAC,eAAe,CAAC,6BAA6B,EAAE;YACtD,IAAI,CAAC,eAAe,CAAC,2BAA2B,EAAE,CAAC,SAAS,CAAC,CAAC,gBAAgB;gBAC5E,IAAI,CAAC,wBAAwB,GAAG,gBAAgB,CAAC;aAClD,CAAC,CAAC;SACJ;KACF;IAED,EAAE;QACA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,MAAM;QACJ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;IAEO,eAAe,CAAC,IAAS;QAC/B,OAAO,IAAI,CAAC,IAAI,CAAC;KAClB;IAEO,SAAS;QACf,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;YAC1C,OAAO;SACR;QAED,IAAI,CAAC,IAAI;aACN,GAAG,CAAC,WAAW,CAAC;aAChB,IAAI,CACH,GAAG,CAAC,CAAC,QAAkB;YACrB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YAExB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;;gBAE3B,IAAK,IAAY,CAAC,SAAS,EAAE;oBAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAE,IAAY,CAAC,SAAS,CAAC,CAAC,CAAC;iBACxE;aACF;YAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IAEM,aAAa,CAAC,IAAS;QAC5B,MAAM,GAAG,GAAG,kCAAkC,CAAC;QAC/C,MAAM,KAAK,GAAG,wCAAwC,CAAC;QACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM;YACvD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;;YAErH,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;SACtC,CAAC,CAAC;KACJ;IAEM,eAAe,CAAC,IAAS;QAC9B,IAAI,CAAC,SAAS,EAAE,CAAC;;QAGjB,IAAI,CAAC,WAAW,CAAC,YAAY,GAAG,KAAK,CAAC;;QAGtC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;;QAGrC,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE9C,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;;YAEzC,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC;SAC5C;KACF;IAEM,eAAe,CAAC,IAAS;QAC9B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;KACxB;IAEM,WAAW,CAAC,IAAS;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;KACvB;;IAGD,mBAAmB,CAAC,WAAoB;QACtC,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,aAAa,CAAC;YAChD,OAAO;SACR;QAED,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;YACrC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE;gBAChE,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACvC;SACF;KACF;IAED,kBAAkB,CAAC,YAAoB;QACrC,IAAI,CAAC,WAAW,CAAC,aAAa,GAAG,YAAY,CAAC;;QAG9C,IAAI,CAAC,WAAW,CAAC,kBAAkB,GAAG,IAAI,CAAC;KAC5C;IAED,UAAU,CAAC,YAAoB;QAC7B,IAAI,CAAC,oBAAoB;aACtB,IAAI,CAAC,uCAAuC,CAAC;aAC7C,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,IAAI;qBACN,IAAI,CAAC,mBAAmB,GAAG,YAAY,GAAG,aAAa,EAAE,SAAS,CAAC;qBACnE,IAAI,CACH,GAAG,CAAC,CAAC,QAAkB;oBACrB,IAAI,CAAC,SAAS,EAAE,CAAC;iBAClB,CAAC,CACH;qBACA,SAAS,EAAE,CAAC;aAChB;SACF,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;EACF;;YAnLsB,UAAU;YACJ,eAAe;YAClB,aAAa;YACT,gBAAgB;YAC5B,UAAU;YACM,oBAAoB;YAC3B,aAAa;YACZ,cAAc;;AA8DxC;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;uEAGlD;AAtFU,4BAA4B;IALxC,SAAS,CAAC;QACT,QAAQ,EAAE,8BAA8B;QACxC,uiKAAoD;;KAErD,CAAC;qCAgBqB,UAAU;QACJ,eAAe;QAClB,aAAa;QACT,gBAAgB;QAC5B,UAAU;QACM,oBAAoB;QAC3B,aAAa;QACZ,cAAc;GAtB7B,4BAA4B,CAkMxC;;IC5MY,qBAAqB,GAAlC,MAAa,qBAAqB;IAShC,YAAmB,UAAsB,EAAS,eAAgC;QAA/D,eAAU,GAAV,UAAU,CAAY;QAAS,oBAAe,GAAf,eAAe,CAAiB;QAChF,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAC7D,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,mBAAmB,CAAC,cAAc,CAAC;QACzE,IAAI,CAAC,kBAAkB,GAAG,eAAe,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;QACjF,IAAI,CAAC,kBAAkB,GAAG,eAAe,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;QACjF,IAAI,CAAC,UAAU,GAAG,eAAe,CAAC,mBAAmB,CAAC,UAAU,CAAC;QACjE,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;QAC7E,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,mBAAmB,CAAC,cAAc,CAAC;KAC1E;IAED,QAAQ,MAAK;IAEb,EAAE;QACA,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClE,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9E,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACtF,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACtF,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACtE,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAClF,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC;QAE9E,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;EACF;;YAjCgC,UAAU;YAA0B,eAAe;;AA8BlF;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;gEAGlD;AAzCU,qBAAqB;IALjC,SAAS,CAAC;QACT,QAAQ,EAAE,uBAAuB;QACjC,srHAA6C;;KAE9C,CAAC;qCAU+B,UAAU,EAA0B,eAAe;GATvE,qBAAqB,CA0CjC;;IC9BY,iBAAiB,GAA9B,MAAa,iBAAiB;IAU5B,YACS,eAAgC,EAC/B,iBAAoC,EACpC,YAA4B,EAC5B,WAAwB,EACzB,cAA8B,EAC7B,0BAAsD,EACtD,oBAA0C,EAC1C,IAAgB,EAChB,aAA4B,EAC5B,aAA4B,EAC7B,YAA0B;QAV1B,oBAAe,GAAf,eAAe,CAAiB;QAC/B,sBAAiB,GAAjB,iBAAiB,CAAmB;QACpC,iBAAY,GAAZ,YAAY,CAAgB;QAC5B,gBAAW,GAAX,WAAW,CAAa;QACzB,mBAAc,GAAd,cAAc,CAAgB;QAC7B,+BAA0B,GAA1B,0BAA0B,CAA4B;QACtD,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,SAAI,GAAJ,IAAI,CAAY;QAChB,kBAAa,GAAb,aAAa,CAAe;QAC5B,kBAAa,GAAb,aAAa,CAAe;QAC7B,iBAAY,GAAZ,YAAY,CAAc;QAEjC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC;YAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,SAAS,CAAC;YAC3C,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SACxC,CAAC,CAAC;KACJ;IAED,QAAQ,MAAK;IAEb,eAAe,MAAK;IAGb,QAAQ;QACb,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACrB,OAAO;SACR;;;QAID,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,YAAY,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC;QAEzD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE;;YAEjG,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE;gBACnC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;aACnD;YAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SACxB;KACF;IAED,IAAI;QACF,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,WAAW,CAC5B,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,EAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CACpE,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxC;IAED,KAAK;QACH,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC;QACrC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;KACzC;IAED,MAAM;QACJ,IAAI,CAAC,eAAe,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC3C;IAED,SAAS,CAAC,gBAAsB;QAC9B,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;KAClD;IAED,YAAY;QACV,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;KACrC;IAED,gBAAgB;QACd,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;KAC7H;IAEO,eAAe;QACrB,IAAI,CAAC,eAAe,CAAC,yBAAyB,EAAE,CAAC;KAClD;IAED,iBAAiB;QACf,IAAI,CAAC,oBAAoB;aACtB,IAAI,CAAC,8CAA8C,CAAC;aACpD,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,MAAM,EAAE;gBACV,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;;oBAEzC,IAAI,CAAC,eAAe,EAAE,CAAC;iBACxB;qBAAM;;oBAEL,IAAI,CAAC,IAAI;yBACN,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC;yBAC/F,IAAI,CACH,GAAG,CAAC,CAAC,QAAkB;wBACrB,IAAI,CAAC,eAAe,EAAE,CAAC;qBACxB,CAAC,CACH;yBACA,SAAS,EAAE,CAAC;iBAChB;aACF;SACF,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IAEO,uBAAuB,CAAC,gBAAyB,EAAE,cAA4B;QACrF,MAAM,eAAe,GACnB,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAE3G,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACtE,QAAQ,EAAE,KAAK;YACf,mBAAmB,EAAE,IAAI;YACzB,KAAK,EAAE,EAAE;YACT,YAAY,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE;SAC/C,CAAC,CAAC;QAEF,UAAU,CAAC,OAAwC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM;YAC5E,IAAI,MAAM,KAAK,CAAC,EAAE;;gBAEhB,IAAI,cAAc,EAAE;oBAClB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC/D,IAAI,CAAC,eAAe,CAAC,wBAAwB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;;oBAGpG,IAAI,IAAI,CAAC,eAAe,CAAC,6BAA6B,EAAE;;;qBAGvD;iBACF;qBAAM;oBACL,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,eAAe,CAAC;iBAC9E;gBAED,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;aACvE;SACF,CAAC,CAAC;KACJ;IAED,mBAAmB;QACjB,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;KAC7E;IAED,cAAc;;QAEZ,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;QACtC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC9C,WAAW,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAErC,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;KACtD;IAED,iBAAiB,CAAC,KAAa;QAC7B,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;KACpD;IAGD,mBAAmB,CAAC,KAAoB;QACtC,IAAI,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClD,OAAO;SACR;QAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE;YAC7C,OAAO;SACR;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YACrB,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,KAAK,QAAQ,EAAE;gBAC/C,IAAI,CAAC,IAAI,EAAE,CAAC;aACb;iBAAM;gBACL,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;;YAGD,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;KACF;IAED,oBAAoB,CAAC,KAAU;QAC7B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;YAChD,OAAO;SACR;QAED,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;YAC7B,OAAO;SACR;QAED,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC;QACjE,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;KAC7C;IAED,kBAAkB,CAAC,KAAU;QAC3B,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;YAChD,OAAO;SACR;QAED,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;YAC7B,OAAO;SACR;QAED,IAAI,CAAC,eAAe,CAAC,sBAAsB,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;QAC/D,IAAI,CAAC,eAAe,CAAC,oBAAoB,EAAE,CAAC;KAC7C;EACF;;YAjN2B,eAAe;YACZ,iBAAiB;YACtB,cAAc;YACf,WAAW;YACT,cAAc;YACD,0BAA0B;YAChC,oBAAoB;YACpC,UAAU;YACD,aAAa;YACb,aAAa;YACf,YAAY;;AAnBnC;IADC,SAAS,CAAC,aAAa,CAAC;8BACZ,UAAU;sDAAC;AAGxB;IADC,SAAS,CAAC,aAAa,CAAC;8BACZ,UAAU;sDAAC;AA+BxB;IADC,YAAY,CAAC,eAAe,CAAC;;;;iDAuB7B;AAmHD;IADC,YAAY,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAC;;qCAClB,aAAa;;4DAoBvC;AAjMU,iBAAiB;IAL7B,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,45LAAwC;;KAEzC,CAAC;qCAY0B,eAAe;QACZ,iBAAiB;QACtB,cAAc;QACf,WAAW;QACT,cAAc;QACD,0BAA0B;QAChC,oBAAoB;QACpC,UAAU;QACD,aAAa;QACb,aAAa;QACf,YAAY;GArBxB,iBAAiB,CA4N7B;;ICjNY,iBAAiB,GAA9B,MAAa,iBAAiB;IA8E5B,YACU,gBAAkC,EAClC,cAA8B,EAC/B,aAA4B,EAC3B,kBAAsC,EACtC,0BAAsD,EACtD,YAA4B,EAC7B,WAAwB,EACvB,sBAA8C,EAC9C,aAA4B,EAC5B,kBAAsC,EACtC,oBAA0C,EAC1C,kBAAsC,EACtC,cAA8B,EAC9B,eAAgC,EACjC,YAA0B;QAdzB,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,mBAAc,GAAd,cAAc,CAAgB;QAC/B,kBAAa,GAAb,aAAa,CAAe;QAC3B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,+BAA0B,GAA1B,0BAA0B,CAA4B;QACtD,iBAAY,GAAZ,YAAY,CAAgB;QAC7B,gBAAW,GAAX,WAAW,CAAa;QACvB,2BAAsB,GAAtB,sBAAsB,CAAwB;QAC9C,kBAAa,GAAb,aAAa,CAAe;QAC5B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,yBAAoB,GAApB,oBAAoB,CAAsB;QAC1C,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,oBAAe,GAAf,eAAe,CAAiB;QACjC,iBAAY,GAAZ,YAAY,CAAc;;QA7B3B,uBAAkB,GAAG,EAAE,CAAC;QAExB,sBAAiB,GAAG,EAAE,CAAC;QAExB,sBAAiB,GAAG,CAAC,CAAC;QAE7B,eAAU,GAAG,YAAY,CAAC;QAyBxB,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAC7C,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B,CAAC,CAAC;KACJ;IAhGD,IAAI,YAAY,CAAC,KAAa;QAC5B,IAAI,CAAC,aAAa,CAAC,YAAY,GAAG,KAAK,CAAC;QACxC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;KAC7C;IAGD,IAAI,6BAA6B,CAAC,KAAc;QAC9C,IAAI,CAAC,eAAe,CAAC,6BAA6B,GAAG,KAAK,CAAC;KAC5D;IAGD,IAAI,OAAO,CAAC,KAAa;QACvB,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC;KACpC;IAGD,IAAI,kBAAkB,CAAC,KAAc;QACnC,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,KAAK,CAAC;KAC/C;IAGD,IAAI,cAAc,CAAC,KAAc;QAC/B,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,KAAK,CAAC;KAC3C;IAGD,IAAI,cAAc,CAAC,KAAc;QAC/B,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,KAAK,CAAC;KAC3C;IAGD,IAAI,cAAc,CAAC,KAAc;QAC/B,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,KAAK,CAAC;KAC3C;IAGD,IAAI,kBAAkB,CAAC,KAAc;QACnC,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,KAAK,CAAC;KAC/C;IAGD,IAAI,WAAW,CAAC,KAAc;QAC5B,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK,CAAC;KACxC;IAGD,IAAI,aAAa,CAAC,KAAc;QAC9B,IAAI,CAAC,aAAa,CAAC,aAAa,GAAG,KAAK,CAAC;KAC1C;IAGD,IAAI,KAAK,CAAC,KAAc;QACtB,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,KAAK,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;KAC7B;IAGD,IAAI,kBAAkB,CAAC,KAAc;QACnC,IAAI,CAAC,aAAa,CAAC,kBAAkB,GAAG,KAAK,CAAC;KAC/C;IAuCD,QAAQ;QACN,IAAI,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACpC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;SAC7D;aAAM;YACL,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACjC;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,SAAS,EAAE;;YAEb,IAAI,CAAC,UAAU,EAAE;gBACf,UAAU,GAAG,EAAE,CAAC;aACjB;YAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,SAAS,CACzF,SAAQ,EACR,CAAC,QAAQ;gBACP,IAAI,KAAK,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;gBAE1E,IAAI,GAAG,GAAG,EAAE,CAAC;gBAEb,IAAI,KAAK,KAAK,eAAe,EAAE;oBAC7B,GAAG,GAAG,2CAA2C,CAAC;oBAClD,KAAK,GAAG,SAAS,CAAC;iBACnB;qBAAM;oBACL,GAAG,GAAG,6BAA6B,CAAC;iBACrC;gBAED,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC;oBACjD,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;iBAC/B,CAAC,CAAC;aACJ,CACF,CAAC;SACH;aAAM,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC,EAAE;;YAElI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,sBAAsB,EAAE,CAAC,CAAC,SAAS,CACxH,SAAQ,EACR,CAAC,QAAQ;gBACP,MAAM,GAAG,GAAG,6BAA6B,CAAC;gBAC1C,MAAM,KAAK,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;gBAE5E,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,SAAS,CAAC;oBACjD,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;iBAC/B,CAAC,CAAC;aACJ,CACF,CAAC;SACH;aAAM;YACL,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE;;gBAEzC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,CAAC;aACpC;iBAAM;gBACL,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;aAC/B;SACF;KACF;IAEO,mBAAmB;QACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;KAC7G;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACzB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;SAClC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE;YAC1B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;SACnC;KACF;IAED,eAAe;;QAEb,UAAU,CAAC;YACT,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;gBACjC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;gBACnB,SAAS,EAAE,UAAU;gBACrB,MAAM,EAAE,YAAY;gBACpB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI,CAAC,iBAAiB;gBAClC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;aACjC,CAAC,CAAC;YAEH,KAAK,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE;gBACzC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;gBACnB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI,CAAC,iBAAiB;gBAClC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;aACjC,CAAC,CAAC;YAEH,KAAK,CAAC,CAAC,eAAe,EAAE,WAAW,EAAE,eAAe,CAAC,EAAE;gBACrD,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAClB,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,IAAI,CAAC,iBAAiB;gBAClC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBAChC,OAAO,EAAE,EAAE;aACZ,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,EAAE,CAAC;SACjB,CAAC,CAAC;KACJ;IAED,OAAO,CAAC,GAAW;;QAGjB,IAAI,GAAG,KAAK,UAAU,EAAE;YACtB,IAAI,CAAC,cAAc,CAAC,iBAAiB,GAAG,IAAI,CAAC;SAC9C;aAAM;YACL,IAAI,CAAC,cAAc,CAAC,iBAAiB,GAAG,KAAK,CAAC;SAC/C;QAED,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;KACvB;IAED,eAAe;QACb,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;KAChC;IAED,UAAU;QACR,IAAI,CAAC,oBAAoB;aACtB,IAAI,CAAC,uCAAuC,CAAC;aAC7C,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC;aAC/B;SACF,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IAED,WAAW;QACT,IAAI,CAAC,oBAAoB;aACtB,IAAI,CAAC,uCAAuC,CAAC;aAC7C,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC;oBAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;iBACjG,CAAC,CAAC;aACJ;SACF,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IAED,WAAW;QACT,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,EAAE;;YAEpC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SACvD;aAAM;;YAEL,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC;gBAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;aAC9F,CAAC,CAAC;SACJ;KACF;IAED,aAAa;QACX,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;SAC9F,CAAC,CAAC;KACJ;IAED,YAAY;QACV,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;KAC/F;IAED,aAAa;QACX,IAAI,CAAC,oBAAoB;aACtB,IAAI,CAAC,uCAAuC,CAAC;aAC7C,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,CAAC,CAAC;aAChG;SACF,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;IAED,aAAa;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC5C,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,+BAA+B,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QACzF,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;KACpC;IAED,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE;;YAEnC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC3E,OAAO;SACR;;QAGD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC;KAC9F;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAClD,OAAO;SACR;QAED,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YACrB,IAAI,CAAC,eAAe,EAAE,CAAC;;YAGvB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YACzD,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YACzD,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;YACzD,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,KAAK,CAAC,eAAe,EAAE,CAAC;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;SACxB;KACF;IAED,cAAc,CAAC,QAAgB;QAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACpC,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;KAC5C;EACF;;YA1Q6B,gBAAgB;YAClB,cAAc;YAChB,aAAa;YACP,kBAAkB;YACV,0BAA0B;YACxC,cAAc;YAChB,WAAW;YACC,sBAAsB;YAC/B,aAAa;YACR,kBAAkB;YAChB,oBAAoB;YACtB,kBAAkB;YACtB,cAAc;YACb,eAAe;YACnB,YAAY;;AA3FnC;IADC,KAAK,EAAE;;;qDAIP;AAGD;IADC,KAAK,EAAE;;;sEAGP;AAGD;IADC,KAAK,EAAE;;;gDAGP;AAGD;IADC,KAAK,EAAE;;;2DAGP;AAGD;IADC,KAAK,EAAE;;;uDAGP;AAGD;IADC,KAAK,EAAE;;;uDAGP;AAGD;IADC,KAAK,EAAE;;;uDAGP;AAGD;IADC,KAAK,EAAE;;;2DAGP;AAGD;IADC,KAAK,EAAE;;;oDAGP;AAGD;IADC,KAAK,EAAE;;;sDAGP;AAGD;IADC,KAAK,EAAE;;;8CAIP;AAGD;IADC,KAAK,EAAE;;;2DAGP;AAYD;IADC,SAAS,CAAC,gBAAgB,CAAC;8BACV,gBAAgB;2DAAC;AAGnC;IADC,SAAS,CAAC,iBAAiB,CAAC;8BACV,iBAAiB;4DAAC;AAyOrC;IADC,YAAY,CAAC,kBAAkB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;4DA+B5C;AAnVU,iBAAiB;IAN7B,SAAS,CAAC;QACT,QAAQ,EAAE,cAAc;QACxB,4qXAAwC;QAExC,aAAa,EAAE,iBAAiB,CAAC,IAAI;;KACtC,CAAC;qCAgF4B,gBAAgB;QAClB,cAAc;QAChB,aAAa;QACP,kBAAkB;QACV,0BAA0B;QACxC,cAAc;QAChB,WAAW;QACC,sBAAsB;QAC/B,aAAa;QACR,kBAAkB;QAChB,oBAAoB;QACtB,kBAAkB;QACtB,cAAc;QACb,eAAe;QACnB,YAAY;GA7FxB,iBAAiB,CAyV7B;;ICpXY,aAAa,GAA1B,MAAa,aAAa;IACxB,SAAS,CAAC,KAAU,EAAE,KAAa;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACzB,OAAO;SACR;QACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,CAAM;YACxB,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;gBACvB,OAAO,CAAC,CAAC,CAAC;aACX;iBAAM,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;gBAC9B,OAAO,CAAC,CAAC;aACV;iBAAM;gBACL,OAAO,CAAC,CAAC;aACV;SACF,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;KACd;EACF;AAhBY,aAAa;IAHzB,IAAI,CAAC;QACJ,IAAI,EAAE,MAAM;KACb,CAAC;GACW,aAAa,CAgBzB;;ICHY,oBAAoB,GAAjC,MAAa,oBAAoB;IAgD/B,YACS,aAA4B,EAC3B,gBAAkC,EAClC,cAA8B,EAC9B,SAA2B;QAH5B,kBAAa,GAAb,aAAa,CAAe;QAC3B,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,cAAS,GAAT,SAAS,CAAkB;QA9C9B,oBAAe,GAAG,EAAE,CAAC;QACrB,oBAAe,GAAG,IAAI,CAAC;QACvB,iBAAY,GAAG,CAAC,CAAC;QACjB,iBAAY,GAAG,CAAC,CAAC;QACjB,kBAAa,GAAG,CAAC,CAAC;QAClB,kBAAa,GAAG,CAAC,CAAC;QAClB,mBAAc,GAAG,CAAC,IAAI,CAAC;QACvB,mBAAc,GAAG,IAAI,CAAC;QACtB,qBAAgB,GAAG,CAAC,CAAC;QACrB,qBAAgB,GAAG,IAAI,CAAC;;QAGxB,0BAAqB,GAAwB,EAAE,CAAC;;QAGhD,sBAAiB,GAAgD,IAAI,GAAG,EAA0C,CAAC;QACnH,sBAAiB,GAAqB,EAAE,CAAC;QACzC,qBAAgB,GAAqB,EAAE,CAAC;QA+B7C,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,SAAS,CAAC;YACnD,IAAI,CAAC,6BAA6B,EAAE,CAAC;SACtC,CAAC,CAAC;QAEH,IAAI,CAAC,6BAA6B,EAAE,CAAC;KACtC;;IA9BD,IAAI,UAAU,CAAC,KAAc;QAC3B,IAAI,KAAK,EAAE;;YAET,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;gBAChC,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;oBACnD,IAAI,CAAC,MAAM,EAAE,CAAC;iBACf,CAAC,CAAC;aACJ;SACF;aAAM;;YAEL,IAAI,IAAI,CAAC,sBAAsB,EAAE;gBAC/B,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,CAAC;gBAC1C,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;aACzC;SACF;KACF;IAiBD,QAAQ;QACN,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;QAC5C,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;QAE/B,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAEO,gBAAgB,CAAC,UAAkB,EAAE,MAAc,EAAE,SAAiB,EAAE,cAAsB,EAAE,SAAiB;QACvH,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAE5D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,UAAU,GAAG,cAAc,CAAC,IAAI,cAAc,CAAC;QAC3E,MAAM,CAAC,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QAE1C,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;KACnB;IAEO,eAAe;QACrB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,kBAAkB,GAAa,EAAE,CAAC;QAExC,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,YAAY,EAAE;YACxE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAElE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;gBACzD,KAAK,EAAE,CAAC;gBACR,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;aAClD;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,MAAM;QACJ,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC;;QAG9B,MAAM,KAAK,GAAG,CAAC,CAAC;QAEhB,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;QAE3B,IAAI,IAAY,CAAC;QACjB,IAAI,IAAY,CAAC;QAEjB,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,IAAI,MAAM,GAAG,GAAG,EAAE;YAChB,IAAI,GAAG,CAAC,CAAC;SACV;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7G,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;;QAG7C,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,EAAE;YAChE,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;;YAG/C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,cAAc,CAAC;YAC/C,MAAM,CAAC,GAAG,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC;YAElC,IAAI,IAAI,EAAE;gBACR,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;aACnB;YAED,IAAI,GAAG,CAAC,CAAC;YACT,IAAI,GAAG,CAAC,CAAC;SACV;;QAGD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;;QAG9G,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;YACrE,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;SACvC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE;YACrC,IAAI,CAAC,gBAAgB,CACnB,CAAC,IAAI,CAAC,gBAAgB,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,cAAc,EAClF,CAAC,EACD,KAAK,EACL,cAAc,EACd,SAAS,CACV,CAAC;SACH;KACF;IAEO,4BAA4B;QAClC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;KAC/F;IAED,sBAAsB,CAAC,MAAW,EAAE,OAAuB;QACzD,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC/C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;SACzE;aAAM;YACL,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,4BAA4B,EAAE,CAAC;KACrC;IAEO,6BAA6B;;QAEnC,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;QAEhC,IAAI,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,EAAE;YAC5C,MAAM,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAC3C,UAAU,CAAC,IAAI,GAAG,qBAAqB,CAAC,SAAS,CAAC;YAClD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC7C;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE;YAC3C,IAAI,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACzC,UAAU,CAAC,IAAI,GAAG,qBAAqB,CAAC,cAAc,CAAC;YACvD,UAAU,CAAC,KAAK,GAAG,sBAAsB,CAAC,GAAG,CAAC;YAC9C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE5C,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACrC,UAAU,CAAC,IAAI,GAAG,qBAAqB,CAAC,cAAc,CAAC;YACvD,UAAU,CAAC,KAAK,GAAG,sBAAsB,CAAC,KAAK,CAAC;YAChD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE5C,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACrC,UAAU,CAAC,IAAI,GAAG,qBAAqB,CAAC,cAAc,CAAC;YACvD,UAAU,CAAC,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC;YAC/C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC7C;QAED,IAAI,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,EAAE;YAC7C,IAAI,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACzC,UAAU,CAAC,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC;YAC5C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAE5C,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACrC,UAAU,CAAC,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC;YAC7C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC7C;;QAGD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;;QAGlE,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC;;QAGpD,IAAI,CAAC,4BAA4B,EAAE,CAAC;KACrC;IAED,iBAAiB,CAAC,UAA6B;QAC7C,OAAO,IAAI,CAAC,SAAS;aAClB,GAAG,CAAC,CAAC,iCAAiC,GAAG,UAAU,CAAC,IAAI,EAAE,kCAAkC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;aACjH,IAAI,CACH,GAAG,CAAC,CAAC,MAAc;YACjB,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,IAAI,MAAM,CAAC,iCAAiC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAEpE,IAAI,UAAU,CAAC,KAAK,EAAE;gBACpB,IAAI,IAAI,IAAI,GAAG,MAAM,CAAC,kCAAkC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;aAC9E;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;YAED,OAAO,IAAI,CAAC;SACb,CAAC,CACH,CAAC;KACL;IAED,iBAAiB,CAAC,UAA6B;QAC7C,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;YACxD,IACE,IAAI,CAAC,cAAc,CAAC,iBAAiB,CACnC,kBAAkB,CAAC,IAAI,EACvB,UAAU,CAAC,IAAI,EACf,kBAAkB,CAAC,KAAK,EACxB,UAAU,CAAC,KAAK,EAChB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,CACL,EACD;gBACA,OAAO,IAAI,CAAC;aACb;SACF;QACD,OAAO,KAAK,CAAC;KACd;IAED,gBAAgB,CAAC,KAAU,EAAE,UAA6B;QACxD,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE;;YAE/B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC1C;aAAM;;YAEL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACvD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBACtD,IACE,IAAI,CAAC,cAAc,CAAC,iBAAiB,CACnC,kBAAkB,CAAC,IAAI,EACvB,UAAU,CAAC,IAAI,EACf,kBAAkB,CAAC,KAAK,EACxB,UAAU,CAAC,KAAK,EAChB,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,CACL,EACD;oBACA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACtC;aACF;SACF;QAED,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,cAAc,CAAC,WAAmB,EAAE,WAAmB;QACrD,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,OAAO,WAAW,GAAG,KAAK,GAAG,WAAW,CAAC;SAC1C;QAED,OAAO,WAAW,CAAC;KACpB;IAED,cAAc,CAAC,OAAuB,EAAE,OAA6B;QACnE,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACjD,IAAI,eAAe,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,EAAE;gBAChD,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBACnD,OAAO,IAAI,CAAC;iBACb;gBAED,MAAM;aACP;SACF;QAED,OAAO,KAAK,CAAC;KACd;IAED,aAAa,CAAC,KAAU,EAAE,OAAuB,EAAE,OAA6B;;QAE9E,IAAI,gBAAgB,GAAG,KAAK,CAAC;QAC7B,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACjD,IAAI,eAAe,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,EAAE;gBAChD,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM;aACP;SACF;QAED,IAAI,CAAC,gBAAgB,EAAE;YACrB,MAAM,eAAe,GAAG,IAAI,0BAA0B,EAAE,CAAC;YACzD,eAAe,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAC3C,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC3C;;QAGD,KAAK,MAAM,eAAe,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACjD,IAAI,eAAe,CAAC,WAAW,KAAK,OAAO,CAAC,IAAI,EAAE;gBAChD,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAE7D,IAAI,KAAK,IAAI,CAAC,EAAE;oBACd,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;iBAC3C;qBAAM;oBACL,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;iBAC7C;gBAED,MAAM;aACP;SACF;QAED,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,eAAe,CAAC,KAAU;QACxB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE;YACnF,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,KAAK,CAAC;YACjC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;SAClC;KACF;IAED,YAAY,CAAC,KAAU;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;YAC7E,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;SAClC;KACF;IAED,WAAW,CAAC,KAAU;QACpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,IAAI,IAAI,CAAC,aAAa,EAAE;YAC/E,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;SAClC;KACF;IAED,cAAc,CAAC,KAAU;QACvB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,cAAc,IAAI,KAAK,IAAI,IAAI,CAAC,cAAc,EAAE;YACjF,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;SAClC;KACF;IAED,gBAAgB,CAAC,KAAU;QACzB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,gBAAgB,IAAI,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACrF,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,KAAK,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;SAClC;KACF;EACF;;YA5UyB,aAAa;YACT,gBAAgB;YAClB,cAAc;YACnB,gBAAgB;;AA3B5B;IAAR,KAAK,EAAE;8BAAQ,WAAW;mDAAC;AAI5B;IADC,KAAK,EAAE;;;sDAgBP;AAEyC;IAAzC,SAAS,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;8BAAY,UAAU;uDAAC;AA9CrD,oBAAoB;IALhC,SAAS,CAAC;QACT,QAAQ,EAAE,sBAAsB;QAChC,o7QAA4C;;KAE7C,CAAC;qCAkDwB,aAAa;QACT,gBAAgB;QAClB,cAAc;QACnB,gBAAgB;GApD1B,oBAAoB,CA6XhC;;ICxYY,sBAAsB,GAAnC,MAAa,sBAAsB;IAiBjC;QAVQ,WAAM,GAAG;YACf,CAAC,CAAC,EAAE,GAAG,CAAC;YACR,CAAC,GAAG,EAAE,CAAC,CAAC;YACR,CAAC,IAAI,EAAE,GAAG,CAAC;YACX,CAAC,GAAG,EAAE,IAAI,CAAC;SACZ,CAAC;QAEM,YAAO,GAAG,IAAI,CAAC;QACf,aAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAElB;IAER,MAAM,MAAK;IAEnB,QAAQ,MAAK;EACd;AArB2B;IAAzB,SAAS,CAAC,aAAa,CAAC;8BAAc,UAAU;2DAAC;AADvC,sBAAsB;IALlC,SAAS,CAAC;QACT,QAAQ,EAAE,yBAAyB;QACnC,6JAA+C;;KAEhD,CAAC;;GACW,sBAAsB,CAsBlC;;ICdY,eAAe,GAA5B,MAAa,eAAe;IAC1B,YACU,WAAwB,EACzB,aAA4B,EAC5B,aAA4B,EAC3B,oBAA0C;QAH1C,gBAAW,GAAX,WAAW,CAAa;QACzB,kBAAa,GAAb,aAAa,CAAe;QAC5B,kBAAa,GAAb,aAAa,CAAe;QAC3B,yBAAoB,GAApB,oBAAoB,CAAsB;KAChD;IAEJ,QAAQ,MAAK;IAEL,SAAS,CAAC,MAAc;QAC9B,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,MAAM,CAAC;QAE3C,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;YACrC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACxD;KACF;IAED,cAAc;QACZ,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,gBAAgB;QACd,IAAI,CAAC,SAAS,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;KACrC;IAED,UAAU,CAAC,MAAc,EAAE,KAAU;QACnC,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,MAAM,CAAC;SAC5C;aAAM;YACL,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,KAAK,MAAM,EAAE;gBAChD,IAAI,CAAC,aAAa,CAAC,cAAc,GAAG,SAAS,CAAC;aAC/C;SACF;KACF;IAED,YAAY,CAAC,MAAc;QACzB,IAAI,CAAC,oBAAoB;aACtB,IAAI,CAAC,gCAAgC,CAAC;aACtC,IAAI,CACH,GAAG,CAAC,CAAC,MAAM;YACT,IAAI,MAAM,EAAE;gBACV,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC/G,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;aAClC;SACF,CAAC,CACH;aACA,SAAS,EAAE,CAAC;KAChB;EACF;;YAlDwB,WAAW;YACV,aAAa;YACb,aAAa;YACL,oBAAoB;;AALzC,eAAe;IAL3B,SAAS,CAAC;QACT,QAAQ,EAAE,gBAAgB;QAC1B,mzGAAsC;;KAEvC,CAAC;qCAGuB,WAAW;QACV,aAAa;QACb,aAAa;QACL,oBAAoB;GALzC,eAAe,CAoD3B;;ICvDY,iCAAiC,GAA9C,MAAa,iCAAiC;IA0B5C,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QApBhD,aAAQ,GAAG,CAAC,CAAC;QACb,aAAQ,GAAG,CAAC,CAAC;QACb,iBAAY,GAAG,CAAC,CAAC;QACjB,UAAK,GAAG,CAAC,CAAC;QACV,kBAAa,GAAG,CAAC,CAAC;KAgBkC;IARpD,IAAI,OAAO,CAAC,KAA2B;QACrC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAOO,aAAa;QACnB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvF,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE;YACnB,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;gBACnD,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,WAAW,KAAK,IAAI,CAAC,KAAK,EAAE;oBACtF,IAAI,CAAC,kBAAkB,GAAG,UAAU,CAAC;oBACrC,MAAM;iBACP;aACF;SACF;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;KAC5C;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;YACzE,OAAO,IAAI,CAAC;SACb;QAED,IAAI,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,UAAU,EAAE;YAC5E,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;KACd;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1D,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACvD;QAED,OAAO,CAAC,CAAC;KACV;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1D,OAAO,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACvD;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;KAC/B;IAED,QAAQ,MAAK;IAEb,QAAQ,CAAC,KAAU,EAAE,wBAAiC,KAAK;QACzD,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;YAChB,OAAO;SACR;QAED,IAAI,CAAC,qBAAqB,KAAK,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE;YACxF,OAAO;SACR;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjF,IAAI,IAAI,CAAC,WAAW,EAAE;;;;YAIpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBACvB,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC;oBAC9B,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;oBAClD,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;iBAChC,EAAE,EAAE,CAAC,CAAC;aACR;SACF;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAEO,sBAAsB;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;KACvE;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;YAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;SACnC;QAED,OAAO,CAAC,CAAC;KACV;IAED,YAAY,CAAC,MAAe;QAC1B,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;SAC7C;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7E,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACxD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACvB,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAC/B;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,kBAAkB;;QAEhB,IAAI,IAAI,CAAC,kBAAkB,EAAE;YAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;SACrE;aAAM;YACL,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;SAC1D;KACF;EACF;;YA/GoC,aAAa;;AAzBH;IAA5C,SAAS,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;8BAAc,UAAU;sEAAC;AAcrE;IADC,KAAK,EAAE;8BACC,cAAc;kEAAC;AAGxB;IADC,KAAK,EAAE;8BACW,oBAAoB;qCAApB,oBAAoB;gEAGtC;AAGD;IADC,KAAK,EAAE;;0EACgB;AAxBb,iCAAiC;IAN7C,SAAS,CAAC;QACT,QAAQ,EAAE,oCAAoC;QAC9C,o/FAA0D;QAE1D,eAAe,EAAE,uBAAuB,CAAC,MAAM;;KAChD,CAAC;qCA2BmC,aAAa;GA1BrC,iCAAiC,CAyI7C;;ICtIY,oCAAoC,GAAjD,MAAa,oCAAoC;IA2B/C,YAAmB,aAA4B,EAAU,iBAAoC,EAAU,cAA8B;QAAlH,kBAAa,GAAb,aAAa,CAAe;QAAU,sBAAiB,GAAjB,iBAAiB,CAAmB;QAAU,mBAAc,GAAd,cAAc,CAAgB;QAFrI,kBAAa,GAAG,KAAK,CAAC;KAEmH;IAjBzI,IAAI,OAAO,CAAC,KAAqB;QAC/B,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAGD,IAAI,OAAO,CAAC,KAA2B;QACrC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAUD,QAAQ;QACN,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,SAAS,CAAC;YAC9E,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SACxC,CAAC,CAAC;KACJ;IAED,WAAW;QACT,IAAI,CAAC,uBAAuB,CAAC,WAAW,EAAE,CAAC;KAC5C;IAEO,MAAM;QACZ,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,QAAQ,EAAE;YACzC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC3B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;;YAG3B,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;gBACnD,IAAI,UAAU,CAAC,KAAK,EAAE;oBACpB,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;oBACtC,MAAM;iBACP;aACF;YACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;aACrC;YAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;;YAGtF,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;gBACnD,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,qBAAqB,CAAC,SAAS,EAAE;oBAClE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBACxC;aACF;SACF;QAED,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KACxC;IAED,uBAAuB,CAAC,UAAmC;QACzD,IAAI,QAAQ,GAAG,kBAAkB,CAAC;QAClC,IAAI,KAAK,GAAG,OAAO,CAAC;QACpB,IAAI,MAAM,GAAa,EAAE,CAAC;QAE1B,IAAI,UAAU,CAAC,UAAU,EAAE;YACzB,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,UAAU,EAAE;;gBAExC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC1B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACrC;aACF;SACF;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;;YAErB,IAAI,WAAmB,CAAC;YACxB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,IAAI,WAAW,EAAE;oBACf,WAAW,IAAI,IAAI,CAAC;iBACrB;qBAAM;oBACL,WAAW,GAAG,EAAE,CAAC;iBAClB;gBACD,WAAW,IAAI,KAAK,CAAC;aACtB;YACD,QAAQ,GAAG,kBAAkB,CAAC;YAC9B,KAAK,GAAG,mCAAmC,GAAG,WAAW,GAAG,GAAG,CAAC;SACjE;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;YAC9B,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;SACnB;aAAM;YACL,KAAK,GAAG,MAAM,CAAC;SAChB;QAED,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACxB,OAAO,KAAK,CAAC;KACd;IAED,oBAAoB;QAClB,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAC3D,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,SAAS,EAC/B,SAAS,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAC1B,CAAC;QAEF,IAAI,eAAe,EAAE;YACnB,OAAO,eAAe,CAAC,UAAU,CAAC;SACnC;QACD,OAAO,SAAS,CAAC;KAClB;IAED,wBAAwB,CAAC,UAAkB;QACzC,MAAM,kBAAkB,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAEvD,IAAI,kBAAkB,IAAI,CAAC,EAAE;;YAE3B,OAAO,kBAAkB,KAAK,UAAU,CAAC;SAC1C;aAAM;;;YAGL,MAAM,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,mCAAmC,CACnF,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,IAAI,CAAC,QAAQ,CACd,CAAC;YAEF,IAAI,sBAAsB,EAAE;gBAC1B,OAAO,UAAU,KAAK,sBAAsB,CAAC,UAAU,CAAC,UAAU,CAAC;aACpE;iBAAM;gBACL,OAAO,KAAK,CAAC;aACd;SACF;KACF;IAED,YAAY,CAAC,MAAe;QAC1B,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACnC,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,SAAS,EAC/B,SAAS,EACT,CAAC,EACD,SAAS,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAC1B,CAAC;SACH;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,qBAAqB,CACtC,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,SAAS,EAC/B,SAAS,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAC1B,CAAC;SACH;QAED,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,gBAAgB,CAAC,UAAkB;QACjC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACnC,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,SAAS,EAC/B,SAAS,EACT,UAAU,EACV,SAAS,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAC1B,CAAC;QACF,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;EACF;;YAxJmC,aAAa;YAA6B,iBAAiB;YAA0B,cAAc;;AAjBrI;IADC,KAAK,EAAE;8BACW,cAAc;qCAAd,cAAc;mEAGhC;AAGD;IADC,KAAK,EAAE;8BACW,oBAAoB;qCAApB,oBAAoB;mEAGtC;AAGD;IADC,KAAK,EAAE;;wEACW;AAGnB;IADC,KAAK,EAAE;;2EACc;AAzBX,oCAAoC;IALhD,SAAS,CAAC;QACT,QAAQ,EAAE,wCAAwC;QAClD,0/CAA8D;;KAE/D,CAAC;qCA4BkC,aAAa,EAA6B,iBAAiB,EAA0B,cAAc;GA3B1H,oCAAoC,CAmLhD;;ICpLY,+BAA+B,GAA5C,MAAa,+BAA+B;IAW1C,YAAoB,aAA4B,EAAU,cAA8B,EAAU,iBAAoC;QAAlH,kBAAa,GAAb,aAAa,CAAe;QAAU,mBAAc,GAAd,cAAc,CAAgB;QAAU,sBAAiB,GAAjB,iBAAiB,CAAmB;QAVtI,UAAK,GAAG,SAAS,CAAC;QAElB,WAAM,GAAG,KAAK,CAAC;QACP,uBAAkB,GAAG,KAAK,CAAC;;QAG3B,kBAAa,GAAG,KAAK,CAAC;QAK5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,SAAS,CAAC;YAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SACxC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAEO,MAAM;QACZ,IAAI,GAAW,CAAC;QAChB,IAAI,KAAa,CAAC;QAClB,IAAI,IAAY,CAAC;QACjB,IAAI,eAAuC,CAAC;QAC5C,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACrD,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,cAAc,EACpC,sBAAsB,CAAC,GAAG,CAC3B,CAAC;QACF,IAAI,eAAe,EAAE;YACnB,GAAG,GAAG,GAAG,GAAG,eAAe,CAAC,eAAe,CAAC;SAC7C;QACD,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACrD,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,cAAc,EACpC,sBAAsB,CAAC,KAAK,CAC7B,CAAC;QACF,IAAI,eAAe,EAAE;YACnB,KAAK,GAAG,GAAG,GAAG,eAAe,CAAC,eAAe,CAAC;SAC/C;QACD,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACrD,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,cAAc,EACpC,sBAAsB,CAAC,IAAI,CAC5B,CAAC;QACF,IAAI,eAAe,EAAE;YACnB,IAAI,GAAG,GAAG,GAAG,eAAe,CAAC,eAAe,CAAC;SAC9C;QACD,IAAI,GAAG,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;YAClE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACpB;aAAM;YACL,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,GAAG,GAAG,GAAG,CAAC;YACV,KAAK,GAAG,GAAG,CAAC;YACZ,IAAI,GAAG,GAAG,CAAC;SACZ;QACD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;KACvC;IAEO,cAAc,CAAC,GAAW,EAAE,KAAa,EAAE,IAAY;QAC7D,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;SAC5D;QACD,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;KAC5B;IAED,WAAW;QACT,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC;KACvC;IAED,QAAQ;QACN,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,yBAAyB,EAAE;YAChE,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,SAAS;YACtB,YAAY,EAAE,EAAE;SACjB,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;QAGjE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAC3D;IAED,KAAK;QACH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;KAChC;IAEO,kBAAkB,CAAC,KAAU;QACnC,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;YACrC,IAAI,KAAK,EAAE;gBACT,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACnC,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,cAAc,EACpC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EACjB,SAAS,EACT,sBAAsB,CAAC,GAAG,CAC3B,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACnC,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,cAAc,EACpC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EACjB,SAAS,EACT,sBAAsB,CAAC,KAAK,CAC7B,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACnC,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,cAAc,EACpC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EACjB,SAAS,EACT,sBAAsB,CAAC,IAAI,CAC5B,CAAC;aACH;iBAAM;gBACL,IAAI,CAAC,aAAa,CAAC,qBAAqB,CACtC,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,cAAc,EACpC,sBAAsB,CAAC,GAAG,CAC3B,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,qBAAqB,CACtC,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,cAAc,EACpC,sBAAsB,CAAC,KAAK,CAC7B,CAAC;gBACF,IAAI,CAAC,aAAa,CAAC,qBAAqB,CACtC,IAAI,CAAC,aAAa,CAAC,cAAc,EACjC,qBAAqB,CAAC,cAAc,EACpC,sBAAsB,CAAC,IAAI,CAC5B,CAAC;aACH;YACD,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;YACvC,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;YAC9C,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;SAClC;KACF;IAED,YAAY,CAAC,MAAe;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SACjD;aAAM;YACL,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACnC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;SACxB;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,WAAW,CAAC,KAAU;QACpB,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,EAAE;YAClD,OAAO;SACR;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;KAChC;EACF;;YArJoC,aAAa;YAA0B,cAAc;YAA6B,iBAAiB;;AAX3H,+BAA+B;IAL3C,SAAS,CAAC;QACT,QAAQ,EAAE,kCAAkC;QAC5C,w3BAAwD;;KAEzD,CAAC;qCAYmC,aAAa,EAA0B,cAAc,EAA6B,iBAAiB;GAX3H,+BAA+B,CAgK3C;;ICrKY,gCAAgC,GAA7C,MAAa,gCAAgC;IAC3C,YAAoB,aAA4B,EAAU,iBAAoC;QAA1E,kBAAa,GAAb,aAAa,CAAe;QAAU,sBAAiB,GAAjB,iBAAiB,CAAmB;KAAI;IAElG,QAAQ,MAAK;IAEb,QAAQ;QACN,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;QAClI,IAAI,eAAe,EAAE;YACnB,OAAO,eAAe,CAAC,eAAe,CAAC;SACxC;QACD,OAAO,SAAS,CAAC;KAClB;IAED,YAAY;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;SAC5C;QACD,OAAO,SAAS,CAAC;KAClB;IAED,QAAQ,CAAC,KAAU;QACjB,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;YAChB,OAAO;SACR;QAED,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;YAC1B,OAAO;SACR;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACjH,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,YAAY,CAAC,MAAe;QAC1B,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SAClB;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC;YAC7G,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SACxC;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;EACF;;YA3CoC,aAAa;YAA6B,iBAAiB;;AADnF,gCAAgC;IAL5C,SAAS,CAAC;QACT,QAAQ,EAAE,mCAAmC;QAC7C,k+CAAyD;;KAE1D,CAAC;qCAEmC,aAAa,EAA6B,iBAAiB;GADnF,gCAAgC,CA4C5C;;IC5CY,iCAAiC,GAA9C,MAAa,iCAAiC;IAC5C,YAAoB,aAA4B,EAAU,iBAAoC;QAA1E,kBAAa,GAAb,aAAa,CAAe;QAAU,sBAAiB,GAAjB,iBAAiB,CAAmB;KAAI;IAElG,QAAQ,MAAK;IAEb,WAAW;QACT,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;QAC5H,IAAI,eAAe,EAAE;YACnB,OAAO,eAAe,CAAC,eAAe,CAAC;SACxC;QACD,OAAO,SAAS,CAAC;KAClB;IAED,eAAe;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;SAC5C;QACD,OAAO,SAAS,CAAC;KAClB;IAED,WAAW,CAAC,KAAU;QACpB,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;YAChB,OAAO;SACR;QAED,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;YAC1B,OAAO;SACR;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3G,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,YAAY;QACV,MAAM,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC7H,IAAI,eAAe,EAAE;YACnB,OAAO,eAAe,CAAC,eAAe,CAAC;SACxC;QACD,OAAO,SAAS,CAAC;KAClB;IAED,gBAAgB;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;SAC5C;QACD,OAAO,SAAS,CAAC;KAClB;IAED,YAAY,CAAC,KAAU;QACrB,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;YAChB,OAAO;SACR;QAED,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;YAC1B,OAAO;SACR;QAED,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5G,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,YAAY,CAAC,MAAe;QAC1B,IAAI,MAAM,EAAE;YACV,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;SACxB;aAAM;YACL,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC;YACvG,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;YACxG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SACxC;QACD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;EACF;;YA3EoC,aAAa;YAA6B,iBAAiB;;AADnF,iCAAiC;IAL7C,SAAS,CAAC;QACT,QAAQ,EAAE,qCAAqC;QAC/C,6jFAA2D;;KAE5D,CAAC;qCAEmC,aAAa,EAA6B,iBAAiB;GADnF,iCAAiC,CA4E7C;;ICrEY,0BAA0B,GAAvC,MAAa,0BAA0B;IAOrC,YACS,aAA4B,EAC3B,cAA8B,EAC9B,iBAAoC,EACrC,cAA8B,EAC9B,YAA0B;QAJ1B,kBAAa,GAAb,aAAa,CAAe;QAC3B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,sBAAiB,GAAjB,iBAAiB,CAAmB;QACrC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;;QAVnC,uBAAkB,GAA8C,IAAI,GAAG,EAAwC,CAAC;QAY9G,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,SAAS,CAAC;YAC9F,IAAI,CAAC,MAAM,EAAE,CAAC;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,SAAS,CAAC;YAC9F,IAAI,CAAC,MAAM,EAAE,CAAC;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC;YACtC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;SACxC,CAAC,CAAC;KACJ;IAED,QAAQ,MAAK;IAEb,WAAW;QACT,IAAI,CAAC,mCAAmC,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,CAAC,mCAAmC,CAAC,WAAW,EAAE,CAAC;KACxD;IAEO,WAAW,CAAC,MAAiD,EAAE,OAAuB,EAAE,OAA6B;QAC3H,MAAM,CAAC,OAAO,CAAC,CAAC,eAAqC,EAAE,eAA+B;YACpF,IAAI,eAAe,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,eAAe,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;gBAClF,OAAO,IAAI,CAAC;aACb;SACF,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;KACd;IAEO,iBAAiB;QACvB,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAwC,CAAC;QAE1E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;YACtC,OAAO;SACR;QAED,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,YAAY,EAAE;YACxE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,sBAAsB,CAAC,WAAW,CAAC,CAAC;YACxE,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;gBACtC,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE;oBAC7C,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;wBACjF,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,EAAE;;4BAEtF,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;gCACxE,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;6BACvD;yBACF;6BAAM,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,UAAU,CAAC,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,EAAE;;;yBAG7F;qBACF;iBACF;aACF;SACF;KACF;IAEO,MAAM;QACZ,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KACxC;IAED,QAAQ;QACN,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;YAClD,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;EACF;;YA1EyB,aAAa;YACX,cAAc;YACX,iBAAiB;YACrB,cAAc;YAChB,YAAY;;AAZxB,0BAA0B;IANtC,SAAS,CAAC;QACT,QAAQ,EAAE,4BAA4B;QACtC,ypFAAkD;QAElD,eAAe,EAAE,uBAAuB,CAAC,MAAM;;KAChD,CAAC;qCASwB,aAAa;QACX,cAAc;QACX,iBAAiB;QACrB,cAAc;QAChB,YAAY;GAZxB,0BAA0B,CAkFtC;;ICtFY,uBAAuB,GAApC,MAAa,uBAAuB;IAQlC,YAAmB,aAA4B,EAAU,iBAAoC,EAAS,cAA8B;QAAjH,kBAAa,GAAb,aAAa,CAAe;QAAU,sBAAiB,GAAjB,iBAAiB,CAAmB;QAAS,mBAAc,GAAd,cAAc,CAAgB;QAP7H,wBAAmB,GAAgD,IAAI,GAAG,EAA0C,CAAC;QACrH,aAAQ,GAAqB,EAAE,CAAC;QAChC,qBAAgB,GAAqB,EAAE,CAAC;QAM7C,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,SAAS,CAAC;YAC9F,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,SAAS,CAAC;YAC9F,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC1B,CAAC,CAAC;KACJ;IAED,QAAQ,MAAK;IAEb,WAAW;QACT,IAAI,CAAC,mCAAmC,CAAC,WAAW,EAAE,CAAC;QACvD,IAAI,CAAC,mCAAmC,CAAC,WAAW,EAAE,CAAC;KACxD;IAEO,4BAA4B;QAClC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAEhG,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KACxC;IAEO,iBAAiB;;QAEvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;;QAGzD,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE3C,IAAI,CAAC,4BAA4B,EAAE,CAAC;KACrC;IAED,sBAAsB,CAAC,MAAW,EAAE,OAAuB;QACzD,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAC/C,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;SACzE;aAAM;YACL,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,4BAA4B,EAAE,CAAC;KACrC;IAED,QAAQ;QACN,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;YAClD,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;EACF;;YAjDmC,aAAa;YAA6B,iBAAiB;YAAyB,cAAc;;AARzH,uBAAuB;IALnC,SAAS,CAAC;QACT,QAAQ,EAAE,yBAAyB;QACnC,m4EAA+C;;KAEhD,CAAC;qCASkC,aAAa,EAA6B,iBAAiB,EAAyB,cAAc;GARzH,uBAAuB,CAyDnC;;IC3DY,gCAAgC,GAA7C,MAAa,gCAAgC;IAuB3C,YAAmB,cAA8B,EAAU,aAA4B;QAApE,mBAAc,GAAd,cAAc,CAAgB;QAAU,kBAAa,GAAb,aAAa,CAAe;QAtBvF,+BAA0B,GAAQ,SAAS,CAAC;QAE5C,wBAAmB,GAAW,SAAS,CAAC;QAExC,cAAS,GAAG,CAAC,CAAC;QACd,cAAS,GAAG,CAAC,CAAC;QACd,cAAS,GAAG,CAAC,CAAC;QAEd,iBAAY,GAAG,CAAC,GAAG,CAAC;QACpB,iBAAY,GAAG,GAAG,CAAC;QACnB,iBAAY,GAAG,CAAC,CAAC;QACjB,iBAAY,GAAG,GAAG,CAAC;QACnB,iBAAY,GAAG,CAAC,GAAG,CAAC;QACpB,iBAAY,GAAG,GAAG,CAAC;QAEnB,cAAS,GAAG,CAAC,CAAC;QACd,cAAS,GAAG,CAAC,CAAC;QACd,cAAS,GAAG,CAAC,CAAC;QAEd,gBAAW,GAAG,CAAC,CAAC;QAChB,gBAAW,GAAG,GAAG,CAAC;QAGhB,aAAa,CAAC,+BAA+B,CAAC,SAAS,CAAC;YACtD,IAAI,CAAC,eAAe,EAAE,CAAC;SACxB,CAAC,CAAC;KACJ;IAED,QAAQ,MAAK;IAEL,eAAe;;QAErB,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QAErC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE;YAClE,IAAI,IAAI,CAAC,mBAAmB,EAAE;gBAC5B,IAAI,IAAI,CAAC,mBAAmB,KAAK,OAAO,CAAC,WAAW,EAAE;oBACpD,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;oBACrC,MAAM;iBACP;aACF;iBAAM;gBACL,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC;aAChD;SACF;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE;YAClE,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;oBACxC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;oBAC3B,MAAM;iBACP;aACF;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;aACpC;SACF;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE;YAClE,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;oBACxC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;oBAC3B,MAAM;iBACP;aACF;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;aACpC;SACF;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE;YAClE,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;oBACxC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;oBAC3B,MAAM;iBACP;aACF;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;aACpC;SACF;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE;YAClE,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;oBACxC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;oBAC3B,MAAM;iBACP;aACF;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;aACpC;SACF;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE;YAClE,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;oBACxC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;oBAC3B,MAAM;iBACP;aACF;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;aACpC;SACF;QACD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE;YAClE,IAAI,IAAI,CAAC,SAAS,EAAE;gBAClB,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE;oBACxC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;oBAC3B,MAAM;iBACP;aACF;iBAAM;gBACL,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;aACpC;SACF;KACF;IAED,cAAc,CAAC,cAAsB;QACnC,MAAM,WAAW,GAAgB,WAAW,CAAC,cAAc,CAAC,CAAC;QAE7D,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE;YAClE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;SACnC;KACF;IAED,oBAAoB,CAAC,QAAgB,EAAE,KAAU;QAC/C,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;YAChB,OAAO;SACR;QAED,IAAI,QAAQ,KAAK,GAAG,EAAE;YACpB,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC5D,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;aACzB;SACF;aAAM,IAAI,QAAQ,KAAK,GAAG,EAAE;YAC3B,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC5D,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;aACzB;SACF;aAAM,IAAI,QAAQ,KAAK,GAAG,EAAE;YAC3B,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;gBAC5D,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;aACzB;SACF;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE;YAClE,IAAI,QAAQ,KAAK,GAAG,EAAE;gBACpB,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;oBAC5D,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;iBAC5B;aACF;iBAAM,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAC3B,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;oBAC5D,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;iBAC5B;aACF;iBAAM,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAC3B,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE;oBAC5D,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;iBAC5B;aACF;SACF;KACF;IAED,oBAAoB,CAAC,QAAgB,EAAE,KAAU;QAC/C,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE;YACxE,OAAO;SACR;QAED,IAAI,QAAQ,KAAK,GAAG,EAAE;YACpB,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;SACzB;aAAM,IAAI,QAAQ,KAAK,GAAG,EAAE;YAC3B,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;SACzB;aAAM,IAAI,QAAQ,KAAK,GAAG,EAAE;YAC3B,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;SACzB;QAED,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,wBAAwB,EAAE;YAClE,IAAI,QAAQ,KAAK,GAAG,EAAE;gBACpB,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;aAC5B;iBAAM,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAC3B,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;aAC5B;iBAAM,IAAI,QAAQ,KAAK,GAAG,EAAE;gBAC3B,OAAO,CAAC,SAAS,GAAG,CAAC,KAAK,CAAC;aAC5B;SACF;KACF;EACF;;YA/JoC,cAAc;YAAyB,aAAa;;AAvB5E,gCAAgC;IAL5C,SAAS,CAAC;QACT,QAAQ,EAAE,mCAAmC;QAC7C,i3LAAyD;;KAE1D,CAAC;qCAwBmC,cAAc,EAAyB,aAAa;GAvB5E,gCAAgC,CAsL5C;;ICvLY,6BAA6B,GAA1C,MAAa,6BAA6B;IACxC,YAAmB,cAA8B,EAAS,cAA8B,EAAU,iBAAoC;QAAnH,mBAAc,GAAd,cAAc,CAAgB;QAAS,mBAAc,GAAd,cAAc,CAAgB;QAAU,sBAAiB,GAAjB,iBAAiB,CAAmB;KAAI;IAE1I,QAAQ,MAAK;IAEb,MAAM;QACJ,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;QAClC,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KACxC;EACF;;YARoC,cAAc;YAAyB,cAAc;YAA6B,iBAAiB;;AAD3H,6BAA6B;IALzC,SAAS,CAAC;QACT,QAAQ,EAAE,gCAAgC;QAC1C,8gMAAsD;;KAEvD,CAAC;qCAEmC,cAAc,EAAyB,cAAc,EAA6B,iBAAiB;GAD3H,6BAA6B,CASzC;;ICTY,wBAAwB,GAArC,MAAa,wBAAwB;IAGnC,YAAoB,cAA8B,EAAS,aAA4B;QAAnE,mBAAc,GAAd,cAAc,CAAgB;QAAS,kBAAa,GAAb,aAAa,CAAe;QAFvF,gBAAW,GAAa,EAAE,CAAC;QAGzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC1B;KACF;IAED,QAAQ,MAAK;IAEb,QAAQ;QACN,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE;YAClD,OAAO,IAAI,CAAC;SACb;QACD,OAAO,KAAK,CAAC;KACd;EACF;;YAdqC,cAAc;YAAwB,aAAa;;AAH5E,wBAAwB;IALpC,SAAS,CAAC;QACT,QAAQ,EAAE,0BAA0B;QACpC,m6BAAgD;;KAEjD,CAAC;qCAIoC,cAAc,EAAwB,aAAa;GAH5E,wBAAwB,CAiBpC;;ICbY,gBAAgB,GAA7B,MAAa,gBAAgB;IAC3B,YACS,cAA8B,EAC9B,aAA4B,EAC3B,kBAAsC,EACvC,cAA8B,EAC9B,YAA0B;QAJ1B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,kBAAa,GAAb,aAAa,CAAe;QAC3B,uBAAkB,GAAlB,kBAAkB,CAAoB;QACvC,mBAAc,GAAd,cAAc,CAAgB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;KAC/B;IAEJ,QAAQ,MAAK;IAEb,iBAAiB,CAAC,OAAgB;QAChC,IAAI,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;YACzC,OAAO,IAAI,CAAC,cAAc,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;SAC/D;aAAM;YACL,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;SACtD;KACF;IAED,aAAa,CAAC,KAAU,EAAE,OAAgB;QACxC,IAAI,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE;;YAEzC,IAAI,CAAC,cAAc,CAAC,8BAA8B,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,CAAC,aAAa,CAAC,+BAA+B,CAAC,IAAI,EAAE,CAAC;SAC3D;aAAM;;YAEL,IAAI,CAAC,aAAa,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;SAClC;KACF;IAED,SAAS;QACP,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;KACnD;IAED,UAAU;QACR,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QACtC,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;KACnD;IAED,eAAe;QACb,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC;KAChC;EACF;;YA3C0B,cAAc;YACf,aAAa;YACP,kBAAkB;YACvB,cAAc;YAChB,YAAY;;AANxB,gBAAgB;IAL5B,SAAS,CAAC;QACT,QAAQ,EAAE,iBAAiB;QAC3B,oqEAAuC;;KAExC,CAAC;qCAGyB,cAAc;QACf,aAAa;QACP,kBAAkB;QACvB,cAAc;QAChB,YAAY;GANxB,gBAAgB,CA6C5B;;IClDY,cAAc,GAA3B,MAAa,cAAc;IACzB,YAAmB,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;KAAI;IAEjD,QAAQ,MAAK;IAEb,KAAK;QACH,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KACvC;EACF;;YAPkC,YAAY;;AADlC,cAAc;IAL1B,SAAS,CAAC;QACT,QAAQ,EAAE,eAAe;QACzB,ijDAAqC;;KAEtC,CAAC;qCAEiC,YAAY;GADlC,cAAc,CAQ1B;;ICPY,qBAAqB,GAAlC,MAAa,qBAAqB;IAChC,YAAmB,cAA8B,EAAU,iBAAoC,EAAU,aAA4B;QAAlH,mBAAc,GAAd,cAAc,CAAgB;QAAU,sBAAiB,GAAjB,iBAAiB,CAAmB;QAAU,kBAAa,GAAb,aAAa,CAAe;KAAI;IAEzI,QAAQ,MAAK;IAEb,QAAQ,CAAC,KAAU;QACjB,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE;YAChB,OAAO;SACR;QAED,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE;YAC1B,OAAO;SACR;QAED,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC;QACtD,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;KAClC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,iBAAiB,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;KACpF;EACF;;YArBoC,cAAc;YAA6B,iBAAiB;YAAyB,aAAa;;AAD1H,qBAAqB;IALjC,SAAS,CAAC;QACT,QAAQ,EAAE,uBAAuB;QACjC,o/DAA6C;;KAE9C,CAAC;qCAEmC,cAAc,EAA6B,iBAAiB,EAAyB,aAAa;GAD1H,qBAAqB,CAsBjC;;ICtBY,uBAAuB,GAApC,MAAa,uBAAuB;IAWlC,YAAmB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;KAAI;IAE7C,QAAQ;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;QAC7C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;KAC5C;IAED,EAAE;QACA,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAE7B,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAK,IAAI,CAAC,WAAmB,KAAK,EAAE,EAAE;YACnG,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC;SACrC;aAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE;YAC5D,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;SAC7C;QACD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAK,IAAI,CAAC,SAAiB,KAAK,EAAE,EAAE;YAC7F,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;SACnC;aAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE;YACxD,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;SACzC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;YACvD,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;SAC/C;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;YACzD,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;SACjD;QAED,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAE3C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;EACF;;YA9CgC,UAAU;;AA2CzC;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;kEAGlD;AAxDU,uBAAuB;IALnC,SAAS,CAAC;QACT,QAAQ,EAAE,qBAAqB;QAC/B,kqHAA+C;;KAEhD,CAAC;qCAY+B,UAAU;GAX9B,uBAAuB,CAyDnC;;ICpDY,eAAe,GAA5B,MAAa,eAAe;IAC1B,YACS,aAA4B,EAC5B,YAA0B,EAC1B,cAA8B,EAC9B,YAA0B,EACzB,YAA4B;QAJ7B,kBAAa,GAAb,aAAa,CAAe;QAC5B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,mBAAc,GAAd,cAAc,CAAgB;QAC9B,iBAAY,GAAZ,YAAY,CAAc;QACzB,iBAAY,GAAZ,YAAY,CAAgB;KAClC;IAEJ,QAAQ,MAAK;IAEb,YAAY,CAAC,KAAa;QACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;QACjD,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;KACxC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;KAC1F;IAED,cAAc,CAAC,MAAe,EAAE,KAAa;QAC3C,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YACrF,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;YAE7D,IAAI,MAAM,EAAE;;gBAEV,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5D;iBAAM;;gBAEL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/E,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE;wBAC/D,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBAC7D,OAAO;qBACR;iBACF;aACF;SACF;KACF;IAED,SAAS;QACP,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YACrF,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SAC9F;KACF;IAED,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE;YACtC,OAAO;SACR;QAED,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9H,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;KACpC;IAED,YAAY,CAAC,MAAc;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,uBAAuB,EAAE;YACjE,QAAQ,EAAE,IAAI;YACd,mBAAmB,EAAE,KAAK;YAC1B,KAAK,EAAE,EAAE;YACT,YAAY,EAAE,EAAE,MAAM,EAAE;SACzB,CAAC,CAAC;KACJ;EACF;;YA9DyB,aAAa;YACd,YAAY;YACV,cAAc;YAChB,YAAY;YACX,cAAc;;AAN3B,eAAe;IAL3B,SAAS,CAAC;QACT,QAAQ,EAAE,gBAAgB;QAC1B,swEAAsC;;KAEvC,CAAC;qCAGwB,aAAa;QACd,YAAY;QACV,cAAc;QAChB,YAAY;QACX,cAAc;GAN3B,eAAe,CAgE3B;;ICrEY,sBAAsB,GAAnC,MAAa,sBAAsB;IASjC,YAAmB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;KAAI;IAE7C,QAAQ;QACN,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;QAC5C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC;KAC3C;IAED,EAAE;QACA,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAE5B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;YACvD,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC;SAC9C;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,EAAE;YACzD,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC;SAChD;QAED,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAE1C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAED,MAAM;QACJ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KACxB;IAGD,mBAAmB,CAAC,KAAU;QAC5B,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;EACF;;YAlCgC,UAAU;;AA+BzC;IADC,YAAY,CAAC,wBAAwB,EAAE,CAAC,QAAQ,CAAC,CAAC;;;;iEAGlD;AA1CU,sBAAsB;IALlC,SAAS,CAAC;QACT,QAAQ,EAAE,oBAAoB;QAC9B,gxFAA8C;;KAE/C,CAAC;qCAU+B,UAAU;GAT9B,sBAAsB,CA2ClC;;ICtCY,cAAc,GAA3B,MAAa,cAAc;IACzB,YACS,YAA0B,EAC1B,aAA4B,EAC5B,cAA8B,EAC7B,YAA4B,EAC7B,YAA0B;QAJ1B,iBAAY,GAAZ,YAAY,CAAc;QAC1B,kBAAa,GAAb,aAAa,CAAe;QAC5B,mBAAc,GAAd,cAAc,CAAgB;QAC7B,iBAAY,GAAZ,YAAY,CAAgB;QAC7B,iBAAY,GAAZ,YAAY,CAAc;KAC/B;IAEJ,QAAQ,MAAK;IAEb,WAAW,CAAC,KAAU,EAAE,KAAa;QACnC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;KACtC;IAED,WAAW;QACT,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YACjD,OAAO;SACR;QAED,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;KACpE;IAED,YAAY,CAAC,KAAY;QACvB,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAChE,QAAQ,EAAE,IAAI;YACd,mBAAmB,EAAE,KAAK;YAC1B,KAAK,EAAE,EAAE;YACT,YAAY,EAAE,EAAE,KAAK,EAAE;SACxB,CAAC,CAAC;KACJ;EACF;;YA7BwB,YAAY;YACX,aAAa;YACZ,cAAc;YACf,cAAc;YACf,YAAY;;AANxB,cAAc;IAL1B,SAAS,CAAC;QACT,QAAQ,EAAE,eAAe;QACzB,g8EAAqC;;KAEtC,CAAC;qCAGuB,YAAY;QACX,aAAa;QACZ,cAAc;QACf,cAAc;QACf,YAAY;GANxB,cAAc,CA+B1B;;ICkEY,cAAc,GAA3B,MAAa,cAAc;EAAG;AAAjB,cAAc;IA3D1B,QAAQ,CAAC;QACR,YAAY,EAAE;YACZ,iBAAiB;YACjB,sBAAsB;YACtB,gBAAgB;YAChB,oBAAoB;YACpB,sBAAsB;YACtB,cAAc;YACd,iBAAiB;YACjB,+BAA+B;YAC/B,gBAAgB;YAChB,gCAAgC;YAChC,0BAA0B;YAC1B,wBAAwB;YACxB,eAAe;YACf,oBAAoB;YACpB,eAAe;YACf,qBAAqB;YACrB,gCAAgC;YAChC,qBAAqB;YACrB,4BAA4B;YAC5B,aAAa;YACb,iCAAiC;YACjC,iCAAiC;YACjC,uBAAuB;YACvB,oCAAoC;YACpC,kBAAkB;YAClB,qBAAqB;YACrB,uBAAuB;YACvB,mBAAmB;YACnB,sBAAsB;YACtB,qBAAqB;YACrB,oBAAoB;YACpB,6BAA6B;YAC7B,cAAc;YACd,uBAAuB;YACvB,sBAAsB;YACtB,oBAAoB;YACpB,kCAAkC;SACnC;QACD,OAAO,EAAE;YACP,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,aAAa;YACb,uBAAuB;YACvB,gBAAgB;YAChB,WAAW;YACX,wBAAwB;YACxB,eAAe;YACf,eAAe;YACf,aAAa;YACb,eAAe;YACf,gBAAgB;YAChB,cAAc;YACd,YAAY,CAAC,OAAO,CAAC;gBACnB,WAAW,EAAE,IAAI;aAClB,CAAC;SACH;QACD,OAAO,EAAE,CAAC,iBAAiB,CAAC;KAC7B,CAAC;GACW,cAAc,CAAG;;AC/G9B;;;;ACAA;;;;;;"}