@rocketshow/designer 1.31.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 -9947
  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.31.0.tgz +0 -0
  338. package/rocketshow-designer.d.ts +0 -60
  339. package/rocketshow-designer.metadata.json +0 -1
@@ -1,637 +0,0 @@
1
- import { __decorate, __metadata, __values } from "tslib";
2
- import { HttpClient } from '@angular/common/http';
3
- import { Injectable } from '@angular/core';
4
- import { Subject } from 'rxjs';
5
- import { FixtureCapabilityColor, FixtureCapabilityType } from '../models/fixture-capability';
6
- import { FixtureCapabilityValue } from '../models/fixture-capability-value';
7
- import { FixtureChannelValue } from '../models/fixture-channel-value';
8
- import { Preset } from '../models/preset';
9
- import { AnimationService } from './animation.service';
10
- import { ConfigService } from './config.service';
11
- import { EffectService } from './effect.service';
12
- import { FixtureService } from './fixture.service';
13
- import { ProjectService } from './project.service';
14
- import { UuidService } from './uuid.service';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "./effect.service";
17
- import * as i2 from "./uuid.service";
18
- import * as i3 from "./project.service";
19
- import * as i4 from "./fixture.service";
20
- import * as i5 from "./config.service";
21
- import * as i6 from "@angular/common/http";
22
- import * as i7 from "./animation.service";
23
- var PresetService = /** @class */ (function () {
24
- function PresetService(effectService, uuidService, projectService, fixtureService, configService, http, animationService) {
25
- this.effectService = effectService;
26
- this.uuidService = uuidService;
27
- this.projectService = projectService;
28
- this.fixtureService = fixtureService;
29
- this.configService = configService;
30
- this.http = http;
31
- this.animationService = animationService;
32
- // fires, when the current preview element has changed (scene/preset)
33
- this.previewSelectionChanged = new Subject();
34
- // fires, when the fixture selection has changed
35
- this.fixtureSelectionChanged = new Subject();
36
- // fires, when the fixture selection has changed for settings
37
- this.fixtureSelectionSettingsChanged = new Subject();
38
- // fires, when the selected color has changed. This is required,
39
- // because detectChanges is not enough to trigger different components.
40
- this.fixtureColorChanged = new Subject();
41
- this.liveChangePending = false;
42
- }
43
- PresetService.prototype.getPresetByUuid = function (uuid) {
44
- var e_1, _a;
45
- try {
46
- for (var _b = __values(this.projectService.project.presets), _c = _b.next(); !_c.done; _c = _b.next()) {
47
- var preset = _c.value;
48
- if (preset.uuid === uuid) {
49
- return preset;
50
- }
51
- }
52
- }
53
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
54
- finally {
55
- try {
56
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
57
- }
58
- finally { if (e_1) throw e_1.error; }
59
- }
60
- };
61
- PresetService.prototype.fixtureIsSelected = function (fixture, preset) {
62
- var e_2, _a;
63
- // is the passed fixture selected in the passed/currently selected preset?
64
- if (!preset) {
65
- if (this.selectedPreset) {
66
- preset = this.selectedPreset;
67
- }
68
- else {
69
- return false;
70
- }
71
- }
72
- try {
73
- for (var _b = __values(preset.fixtureUuids), _c = _b.next(); !_c.done; _c = _b.next()) {
74
- var selectedFixtureUuid = _c.value;
75
- if (selectedFixtureUuid === fixture.uuid) {
76
- return true;
77
- }
78
- }
79
- }
80
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
81
- finally {
82
- try {
83
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
84
- }
85
- finally { if (e_2) throw e_2.error; }
86
- }
87
- return false;
88
- };
89
- PresetService.prototype.switchFixtureSelection = function (fixture) {
90
- var e_3, _a;
91
- if (!this.selectedPreset) {
92
- return;
93
- }
94
- // select all fixtures at the specified start channel or unselect them,
95
- // if already selected
96
- if (this.fixtureIsSelected(fixture)) {
97
- for (var i = this.selectedPreset.fixtureUuids.length - 1; i >= 0; i--) {
98
- var projectFixture = this.fixtureService.getFixtureByUuid(this.selectedPreset.fixtureUuids[i]);
99
- if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel) {
100
- this.selectedPreset.fixtureUuids.splice(i, 1);
101
- }
102
- }
103
- }
104
- else {
105
- try {
106
- for (var _b = __values(this.projectService.project.fixtures), _c = _b.next(); !_c.done; _c = _b.next()) {
107
- var projectFixture = _c.value;
108
- if (projectFixture.dmxFirstChannel === fixture.dmxFirstChannel) {
109
- this.selectedPreset.fixtureUuids.push(projectFixture.uuid);
110
- }
111
- }
112
- }
113
- catch (e_3_1) { e_3 = { error: e_3_1 }; }
114
- finally {
115
- try {
116
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
117
- }
118
- finally { if (e_3) throw e_3.error; }
119
- }
120
- }
121
- };
122
- PresetService.prototype.selectAllFixtures = function () {
123
- var e_4, _a;
124
- if (!this.selectedPreset) {
125
- return;
126
- }
127
- try {
128
- for (var _b = __values(this.projectService.project.fixtures), _c = _b.next(); !_c.done; _c = _b.next()) {
129
- var fixture = _c.value;
130
- if (!this.fixtureIsSelected(fixture)) {
131
- this.selectedPreset.fixtureUuids.push(fixture.uuid);
132
- }
133
- }
134
- }
135
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
136
- finally {
137
- try {
138
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
139
- }
140
- finally { if (e_4) throw e_4.error; }
141
- }
142
- };
143
- PresetService.prototype.selectNoFixtures = function () {
144
- if (!this.selectedPreset) {
145
- return;
146
- }
147
- this.selectedPreset.fixtureUuids = [];
148
- };
149
- PresetService.prototype.removeDeletedFixtures = function () {
150
- var e_5, _a;
151
- try {
152
- // after changing the configuration in the fixture pool, we might need to
153
- // delete some fixtures
154
- for (var _b = __values(this.projectService.project.presets), _c = _b.next(); !_c.done; _c = _b.next()) {
155
- var preset = _c.value;
156
- for (var i = preset.fixtureUuids.length - 1; i >= 0; i--) {
157
- var presetFixture = this.fixtureService.getFixtureByUuid(preset.fixtureUuids[i]);
158
- if (!presetFixture) {
159
- preset.fixtureUuids.splice(i, 1);
160
- }
161
- }
162
- }
163
- }
164
- catch (e_5_1) { e_5 = { error: e_5_1 }; }
165
- finally {
166
- try {
167
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
168
- }
169
- finally { if (e_5) throw e_5.error; }
170
- }
171
- };
172
- PresetService.prototype.updateFixtureSelection = function () {
173
- var e_6, _a, e_7, _b;
174
- try {
175
- // after changing the configuration in the fixture pool, we might need to
176
- // select some more fixtures on the same channel as already selected ones
177
- for (var _c = __values(this.projectService.project.presets), _d = _c.next(); !_d.done; _d = _c.next()) {
178
- var preset = _d.value;
179
- for (var i = preset.fixtureUuids.length - 1; i >= 0; i--) {
180
- var presetFixture = this.fixtureService.getFixtureByUuid(preset.fixtureUuids[i]);
181
- try {
182
- for (var _e = (e_7 = void 0, __values(this.projectService.project.fixtures)), _f = _e.next(); !_f.done; _f = _e.next()) {
183
- var projectFixture = _f.value;
184
- if (projectFixture.dmxFirstChannel === presetFixture.dmxFirstChannel && !this.fixtureIsSelected(projectFixture, preset)) {
185
- preset.fixtureUuids.push(projectFixture.uuid);
186
- }
187
- }
188
- }
189
- catch (e_7_1) { e_7 = { error: e_7_1 }; }
190
- finally {
191
- try {
192
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
193
- }
194
- finally { if (e_7) throw e_7.error; }
195
- }
196
- }
197
- }
198
- }
199
- catch (e_6_1) { e_6 = { error: e_6_1 }; }
200
- finally {
201
- try {
202
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
203
- }
204
- finally { if (e_6) throw e_6.error; }
205
- }
206
- };
207
- PresetService.prototype.deleteCapabilityValue = function (preset, capabilityType, color, wheel, profileUuid) {
208
- for (var i = 0; i < preset.fixtureCapabilityValues.length; i++) {
209
- if (this.fixtureService.capabilitiesMatch(preset.fixtureCapabilityValues[i].type, capabilityType, preset.fixtureCapabilityValues[i].color, color, preset.fixtureCapabilityValues[i].wheel, wheel, preset.fixtureCapabilityValues[i].profileUuid, profileUuid)) {
210
- preset.fixtureCapabilityValues.splice(i, 1);
211
- return;
212
- }
213
- }
214
- };
215
- PresetService.prototype.setCapabilityValue = function (preset, capabilityType, valuePercentage, slotNumber, color, wheel, profileUuid) {
216
- // Delete existant properties with this type and set the new value
217
- this.deleteCapabilityValue(preset, capabilityType, color, wheel, profileUuid);
218
- var fixtureCapabilityValue = new FixtureCapabilityValue();
219
- fixtureCapabilityValue.type = capabilityType;
220
- fixtureCapabilityValue.color = color;
221
- fixtureCapabilityValue.wheel = wheel;
222
- fixtureCapabilityValue.valuePercentage = valuePercentage;
223
- fixtureCapabilityValue.slotNumber = slotNumber;
224
- fixtureCapabilityValue.profileUuid = profileUuid;
225
- preset.fixtureCapabilityValues.push(fixtureCapabilityValue);
226
- };
227
- PresetService.prototype.getCapabilityValue = function (preset, capabilityType, color, wheel, profileUuid) {
228
- var e_8, _a;
229
- try {
230
- for (var _b = __values(preset.fixtureCapabilityValues), _c = _b.next(); !_c.done; _c = _b.next()) {
231
- var capabilityValue = _c.value;
232
- if (this.fixtureService.capabilitiesMatch(capabilityValue.type, capabilityType, capabilityValue.color, color, capabilityValue.wheel, wheel, capabilityValue.profileUuid, profileUuid)) {
233
- return capabilityValue;
234
- }
235
- }
236
- }
237
- catch (e_8_1) { e_8 = { error: e_8_1 }; }
238
- finally {
239
- try {
240
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
241
- }
242
- finally { if (e_8) throw e_8.error; }
243
- }
244
- return undefined;
245
- };
246
- PresetService.prototype.deleteChannelValue = function (channelName, profileUuid) {
247
- for (var i = 0; i < this.selectedPreset.fixtureChannelValues.length; i++) {
248
- if (this.selectedPreset.fixtureChannelValues[i].channelName === channelName &&
249
- this.selectedPreset.fixtureChannelValues[i].profileUuid === profileUuid) {
250
- this.selectedPreset.fixtureChannelValues.splice(i, 1);
251
- return;
252
- }
253
- }
254
- };
255
- PresetService.prototype.setChannelValue = function (channelName, profileUuid, value) {
256
- // Delete existant properties with this type and set the new value
257
- this.deleteChannelValue(channelName, profileUuid);
258
- var fixtureChannelValue = new FixtureChannelValue();
259
- fixtureChannelValue.channelName = channelName;
260
- fixtureChannelValue.profileUuid = profileUuid;
261
- fixtureChannelValue.value = value;
262
- this.selectedPreset.fixtureChannelValues.push(fixtureChannelValue);
263
- };
264
- PresetService.prototype.getChannelValue = function (channelName, profileUuid) {
265
- var e_9, _a;
266
- try {
267
- for (var _b = __values(this.selectedPreset.fixtureChannelValues), _c = _b.next(); !_c.done; _c = _b.next()) {
268
- var channelValue = _c.value;
269
- if (channelValue.channelName === channelName && channelValue.profileUuid === profileUuid) {
270
- return channelValue.value;
271
- }
272
- }
273
- }
274
- catch (e_9_1) { e_9 = { error: e_9_1 }; }
275
- finally {
276
- try {
277
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
278
- }
279
- finally { if (e_9) throw e_9.error; }
280
- }
281
- };
282
- PresetService.prototype.getApproximatedColorWheelCapability = function (preset, cachedChannel) {
283
- var e_10, _a;
284
- // return an approximated wheel slot channel capability, if a color or a slot on a different
285
- // wheel has been selected
286
- var colorRed;
287
- var colorGreen;
288
- var colorBlue;
289
- var lowestDiff = Number.MAX_VALUE;
290
- var lowestDiffCapability;
291
- var capabilityValue;
292
- capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Red);
293
- if (capabilityValue) {
294
- colorRed = 255 * capabilityValue.valuePercentage;
295
- }
296
- capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Green);
297
- if (capabilityValue) {
298
- colorGreen = 255 * capabilityValue.valuePercentage;
299
- }
300
- capabilityValue = this.getCapabilityValue(preset, FixtureCapabilityType.ColorIntensity, FixtureCapabilityColor.Blue);
301
- if (capabilityValue) {
302
- colorBlue = 255 * capabilityValue.valuePercentage;
303
- }
304
- if (!colorRed && !colorGreen && !colorBlue) {
305
- // no color found -> search the first color wheel
306
- // TODO
307
- }
308
- if (colorRed !== undefined && colorGreen !== undefined && colorBlue !== undefined) {
309
- try {
310
- for (var _b = __values(cachedChannel.capabilities), _c = _b.next(); !_c.done; _c = _b.next()) {
311
- var capability = _c.value;
312
- if (capability.capability.slotNumber) {
313
- var mixedColor = this.fixtureService.getMixedWheelSlotColor(capability.wheel, capability.capability.slotNumber);
314
- if (mixedColor) {
315
- var diff = Math.abs(mixedColor.red - colorRed) + Math.abs(mixedColor.green - colorGreen) + Math.abs(mixedColor.blue - colorBlue);
316
- if (diff < lowestDiff) {
317
- lowestDiff = diff;
318
- lowestDiffCapability = capability;
319
- }
320
- }
321
- }
322
- }
323
- }
324
- catch (e_10_1) { e_10 = { error: e_10_1 }; }
325
- finally {
326
- try {
327
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
328
- }
329
- finally { if (e_10) throw e_10.error; }
330
- }
331
- }
332
- return lowestDiffCapability;
333
- };
334
- PresetService.prototype.hasCapabilityType = function (type) {
335
- var e_11, _a, e_12, _b, e_13, _c;
336
- try {
337
- // there is at least one channel with at least one intensity capability
338
- for (var _d = __values(this.selectedPreset.fixtureUuids), _e = _d.next(); !_e.done; _e = _d.next()) {
339
- var fixtureUuid = _e.value;
340
- var fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
341
- try {
342
- for (var _f = (e_12 = void 0, __values(fixture.channels)), _g = _f.next(); !_g.done; _g = _f.next()) {
343
- var channel = _g.value;
344
- if (channel.channel) {
345
- try {
346
- for (var _h = (e_13 = void 0, __values(channel.capabilities)), _j = _h.next(); !_j.done; _j = _h.next()) {
347
- var capability = _j.value;
348
- if (capability.capability.type === type) {
349
- return true;
350
- }
351
- }
352
- }
353
- catch (e_13_1) { e_13 = { error: e_13_1 }; }
354
- finally {
355
- try {
356
- if (_j && !_j.done && (_c = _h.return)) _c.call(_h);
357
- }
358
- finally { if (e_13) throw e_13.error; }
359
- }
360
- }
361
- }
362
- }
363
- catch (e_12_1) { e_12 = { error: e_12_1 }; }
364
- finally {
365
- try {
366
- if (_g && !_g.done && (_b = _f.return)) _b.call(_f);
367
- }
368
- finally { if (e_12) throw e_12.error; }
369
- }
370
- }
371
- }
372
- catch (e_11_1) { e_11 = { error: e_11_1 }; }
373
- finally {
374
- try {
375
- if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
376
- }
377
- finally { if (e_11) throw e_11.error; }
378
- }
379
- return false;
380
- };
381
- PresetService.prototype.hasCapabilityDimmer = function () {
382
- return this.hasCapabilityType(FixtureCapabilityType.Intensity);
383
- };
384
- PresetService.prototype.hasCapabilityColor = function () {
385
- // TODO optionally color temperature and color white (see stairville/mh-100)
386
- // one of the profiles has a color intensity
387
- if (this.hasCapabilityType(FixtureCapabilityType.ColorIntensity)) {
388
- return true;
389
- }
390
- return false;
391
- };
392
- PresetService.prototype.hasCapabilityColorOrColorWheel = function () {
393
- // TODO optionally color temperature and color white (see stairville/mh-100)
394
- var e_14, _a, e_15, _b;
395
- // one of the profiles has a color intensity
396
- if (this.hasCapabilityColor()) {
397
- return true;
398
- }
399
- try {
400
- // a color wheel is involved
401
- for (var _c = __values(this.selectedPreset.fixtureUuids), _d = _c.next(); !_d.done; _d = _c.next()) {
402
- var fixtureUuid = _d.value;
403
- var fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
404
- try {
405
- for (var _e = (e_15 = void 0, __values(fixture.channels)), _f = _e.next(); !_f.done; _f = _e.next()) {
406
- var channel = _f.value;
407
- if (channel.colorWheel) {
408
- return true;
409
- }
410
- }
411
- }
412
- catch (e_15_1) { e_15 = { error: e_15_1 }; }
413
- finally {
414
- try {
415
- if (_f && !_f.done && (_b = _e.return)) _b.call(_e);
416
- }
417
- finally { if (e_15) throw e_15.error; }
418
- }
419
- }
420
- }
421
- catch (e_14_1) { e_14 = { error: e_14_1 }; }
422
- finally {
423
- try {
424
- if (_d && !_d.done && (_a = _c.return)) _a.call(_c);
425
- }
426
- finally { if (e_14) throw e_14.error; }
427
- }
428
- return false;
429
- };
430
- PresetService.prototype.hasCapabilityPanTilt = function () {
431
- var hasPan = false;
432
- var hasTilt = false;
433
- // there is at least one pan and one tilt channel
434
- if (this.hasCapabilityType(FixtureCapabilityType.Pan)) {
435
- hasPan = true;
436
- }
437
- if (this.hasCapabilityType(FixtureCapabilityType.Tilt)) {
438
- hasTilt = true;
439
- }
440
- if (hasPan && hasTilt) {
441
- return true;
442
- }
443
- return false;
444
- };
445
- PresetService.prototype.selectPreset = function (index) {
446
- this.effectService.selectedEffect = undefined;
447
- this.selectedPreset = this.projectService.project.presets[index];
448
- this.projectService.project.selectedPresetUuid = this.projectService.project.presets[index].uuid;
449
- this.autoOpenFirstEffect();
450
- this.previewSelectionChanged.next();
451
- this.previewLive();
452
- };
453
- PresetService.prototype.autoOpenFirstEffect = function () {
454
- // open the first effect, if the preset only has one
455
- if (this.selectedPreset && this.selectedPreset.effects.length === 1) {
456
- this.effectService.selectedEffect = this.selectedPreset.effects[0];
457
- }
458
- };
459
- PresetService.prototype.addPreset = function (name) {
460
- var preset = new Preset();
461
- preset.uuid = this.uuidService.getUuid();
462
- preset.name = name || 'New Preset';
463
- // Insert the new preset before the highest currently selected preset
464
- var highestSelectedPresetIndex = 0;
465
- for (var i = 0; i < this.projectService.project.presets.length; i++) {
466
- if (this.selectedPreset === this.projectService.project.presets[i]) {
467
- highestSelectedPresetIndex = i;
468
- break;
469
- }
470
- }
471
- this.projectService.project.presets.splice(highestSelectedPresetIndex, 0, preset);
472
- this.selectPreset(highestSelectedPresetIndex);
473
- };
474
- PresetService.prototype.getSelectedProfiles = function () {
475
- var e_16, _a;
476
- var profiles = [];
477
- if (!this.selectedPreset) {
478
- return profiles;
479
- }
480
- try {
481
- for (var _b = __values(this.selectedPreset.fixtureUuids), _c = _b.next(); !_c.done; _c = _b.next()) {
482
- var fixtureUuid = _c.value;
483
- var fixture = this.fixtureService.getFixtureByUuid(fixtureUuid);
484
- var profile = this.fixtureService.getProfileByUuid(fixture.profileUuid);
485
- if (profiles.indexOf(profile) < 0) {
486
- profiles.push(profile);
487
- }
488
- }
489
- }
490
- catch (e_16_1) { e_16 = { error: e_16_1 }; }
491
- finally {
492
- try {
493
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
494
- }
495
- finally { if (e_16) throw e_16.error; }
496
- }
497
- return profiles;
498
- };
499
- PresetService.prototype.getSelectedProfileChannels = function (selectedProfiles) {
500
- var e_17, _a, e_18, _b;
501
- var _this = this;
502
- var availableChannels = new Map();
503
- var calculatedProfileModes = new Map();
504
- try {
505
- for (var selectedProfiles_1 = __values(selectedProfiles), selectedProfiles_1_1 = selectedProfiles_1.next(); !selectedProfiles_1_1.done; selectedProfiles_1_1 = selectedProfiles_1.next()) {
506
- var profile = selectedProfiles_1_1.value;
507
- var modes = [];
508
- try {
509
- for (var _c = (e_18 = void 0, __values(this.selectedPreset.fixtureUuids)), _d = _c.next(); !_d.done; _d = _c.next()) {
510
- var fixtureUuid = _d.value;
511
- var fixture = this.fixtureService.getCachedFixtureByUuid(fixtureUuid);
512
- if (modes.indexOf(fixture.mode) < 0) {
513
- modes.push(fixture.mode);
514
- }
515
- }
516
- }
517
- catch (e_18_1) { e_18 = { error: e_18_1 }; }
518
- finally {
519
- try {
520
- if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
521
- }
522
- finally { if (e_18) throw e_18.error; }
523
- }
524
- calculatedProfileModes.set(profile, modes);
525
- }
526
- }
527
- catch (e_17_1) { e_17 = { error: e_17_1 }; }
528
- finally {
529
- try {
530
- if (selectedProfiles_1_1 && !selectedProfiles_1_1.done && (_a = selectedProfiles_1.return)) _a.call(selectedProfiles_1);
531
- }
532
- finally { if (e_17) throw e_17.error; }
533
- }
534
- // calculate all required channels from the modes
535
- calculatedProfileModes.forEach(function (modes, profile) {
536
- var e_19, _a, e_20, _b;
537
- var profileChannels = [];
538
- try {
539
- for (var modes_1 = __values(modes), modes_1_1 = modes_1.next(); !modes_1_1.done; modes_1_1 = modes_1.next()) {
540
- var mode = modes_1_1.value;
541
- var channels = _this.fixtureService.getCachedChannels(profile, mode);
542
- var _loop_1 = function (channel) {
543
- // only add the channel, if no channel with the same name has already been added
544
- // (e.g. a fine channel)
545
- if (channel.channel && !profileChannels.find(function (c) { return c.name === channel.name; })) {
546
- profileChannels.push(channel);
547
- }
548
- };
549
- try {
550
- for (var channels_1 = (e_20 = void 0, __values(channels)), channels_1_1 = channels_1.next(); !channels_1_1.done; channels_1_1 = channels_1.next()) {
551
- var channel = channels_1_1.value;
552
- _loop_1(channel);
553
- }
554
- }
555
- catch (e_20_1) { e_20 = { error: e_20_1 }; }
556
- finally {
557
- try {
558
- if (channels_1_1 && !channels_1_1.done && (_b = channels_1.return)) _b.call(channels_1);
559
- }
560
- finally { if (e_20) throw e_20.error; }
561
- }
562
- }
563
- }
564
- catch (e_19_1) { e_19 = { error: e_19_1 }; }
565
- finally {
566
- try {
567
- if (modes_1_1 && !modes_1_1.done && (_a = modes_1.return)) _a.call(modes_1);
568
- }
569
- finally { if (e_19) throw e_19.error; }
570
- }
571
- availableChannels.set(profile, profileChannels);
572
- });
573
- return availableChannels;
574
- };
575
- PresetService.prototype.previewLive = function (compositionName, positionMillis) {
576
- var _this = this;
577
- if (compositionName === void 0) { compositionName = ''; }
578
- if (!this.configService.livePreview) {
579
- return;
580
- }
581
- // collect all changes and delay them to not flood the backend
582
- // (except play events. they need to be delivered always)
583
- if (this.livePreviewTimer && !compositionName) {
584
- this.liveChangePending = true;
585
- return;
586
- }
587
- var position = positionMillis;
588
- if (position === undefined) {
589
- position = Math.round(this.animationService.timeMillis);
590
- }
591
- this.http
592
- .post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(this.projectService.project))
593
- .subscribe();
594
- this.liveChangePending = false;
595
- if (!compositionName) {
596
- this.livePreviewTimer = setTimeout(function () {
597
- _this.livePreviewTimer = undefined;
598
- if (_this.liveChangePending) {
599
- _this.http
600
- .post('preview?positionMillis=' + position + '&compositionName=' + compositionName, JSON.stringify(_this.projectService.project))
601
- .subscribe();
602
- }
603
- }, 50);
604
- }
605
- };
606
- PresetService.prototype.stopPreviewPlay = function () {
607
- if (!this.configService.livePreview) {
608
- return;
609
- }
610
- this.http.post('stop-preview-play', null).subscribe();
611
- };
612
- PresetService.ctorParameters = function () { return [
613
- { type: EffectService },
614
- { type: UuidService },
615
- { type: ProjectService },
616
- { type: FixtureService },
617
- { type: ConfigService },
618
- { type: HttpClient },
619
- { type: AnimationService }
620
- ]; };
621
- PresetService.ɵprov = i0.ɵɵdefineInjectable({ factory: function PresetService_Factory() { return new PresetService(i0.ɵɵinject(i1.EffectService), i0.ɵɵinject(i2.UuidService), i0.ɵɵinject(i3.ProjectService), i0.ɵɵinject(i4.FixtureService), i0.ɵɵinject(i5.ConfigService), i0.ɵɵinject(i6.HttpClient), i0.ɵɵinject(i7.AnimationService)); }, token: PresetService, providedIn: "root" });
622
- PresetService = __decorate([
623
- Injectable({
624
- providedIn: 'root',
625
- }),
626
- __metadata("design:paramtypes", [EffectService,
627
- UuidService,
628
- ProjectService,
629
- FixtureService,
630
- ConfigService,
631
- HttpClient,
632
- AnimationService])
633
- ], PresetService);
634
- return PresetService;
635
- }());
636
- export { PresetService };
637
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Acm9ja2V0c2hvdy9kZXNpZ25lci8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy9wcmVzZXQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM3RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUd0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBSzdDO0lBbUJFLHVCQUNVLGFBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGFBQTRCLEVBQzVCLElBQWdCLEVBQ2hCLGdCQUFrQztRQU5sQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXZCNUMscUVBQXFFO1FBQ3JFLDRCQUF1QixHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRTdELGdEQUFnRDtRQUNoRCw0QkFBdUIsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUU3RCw2REFBNkQ7UUFDN0Qsb0NBQStCLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFckUsZ0VBQWdFO1FBQ2hFLHVFQUF1RTtRQUN2RSx3QkFBbUIsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUd6RCxzQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFVdkIsQ0FBQztJQUVKLHVDQUFlLEdBQWYsVUFBZ0IsSUFBWTs7O1lBQzFCLEtBQXFCLElBQUEsS0FBQSxTQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQSxnQkFBQSw0QkFBRTtnQkFBckQsSUFBTSxNQUFNLFdBQUE7Z0JBQ2YsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLElBQUksRUFBRTtvQkFDeEIsT0FBTyxNQUFNLENBQUM7aUJBQ2Y7YUFDRjs7Ozs7Ozs7O0lBQ0gsQ0FBQztJQUVELHlDQUFpQixHQUFqQixVQUFrQixPQUFnQixFQUFFLE1BQWU7O1FBQ2pELDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN2QixNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQzthQUM5QjtpQkFBTTtnQkFDTCxPQUFPLEtBQUssQ0FBQzthQUNkO1NBQ0Y7O1lBRUQsS0FBa0MsSUFBQSxLQUFBLFNBQUEsTUFBTSxDQUFDLFlBQVksQ0FBQSxnQkFBQSw0QkFBRTtnQkFBbEQsSUFBTSxtQkFBbUIsV0FBQTtnQkFDNUIsSUFBSSxtQkFBbUIsS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFO29CQUN4QyxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGOzs7Ozs7Ozs7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCw4Q0FBc0IsR0FBdEIsVUFBdUIsT0FBZ0I7O1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLE9BQU87U0FDUjtRQUVELHVFQUF1RTtRQUN2RSxzQkFBc0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3JFLElBQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakcsSUFBSSxjQUFjLENBQUMsZUFBZSxLQUFLLE9BQU8sQ0FBQyxlQUFlLEVBQUU7b0JBQzlELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQy9DO2FBQ0Y7U0FDRjthQUFNOztnQkFDTCxLQUE2QixJQUFBLEtBQUEsU0FBQSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUEsZ0JBQUEsNEJBQUU7b0JBQTlELElBQU0sY0FBYyxXQUFBO29CQUN2QixJQUFJLGNBQWMsQ0FBQyxlQUFlLEtBQUssT0FBTyxDQUFDLGVBQWUsRUFBRTt3QkFDOUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDNUQ7aUJBQ0Y7Ozs7Ozs7OztTQUNGO0lBQ0gsQ0FBQztJQUVELHlDQUFpQixHQUFqQjs7UUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixPQUFPO1NBQ1I7O1lBRUQsS0FBc0IsSUFBQSxLQUFBLFNBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFBLGdCQUFBLDRCQUFFO2dCQUF2RCxJQUFNLE9BQU8sV0FBQTtnQkFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDckQ7YUFDRjs7Ozs7Ozs7O0lBQ0gsQ0FBQztJQUVELHdDQUFnQixHQUFoQjtRQUNFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRU0sNkNBQXFCLEdBQTVCOzs7WUFDRSx5RUFBeUU7WUFDekUsdUJBQXVCO1lBQ3ZCLEtBQXFCLElBQUEsS0FBQSxTQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQSxnQkFBQSw0QkFBRTtnQkFBckQsSUFBTSxNQUFNLFdBQUE7Z0JBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDeEQsSUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ25GLElBQUksQ0FBQyxhQUFhLEVBQUU7d0JBQ2xCLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDbEM7aUJBQ0Y7YUFDRjs7Ozs7Ozs7O0lBQ0gsQ0FBQztJQUVNLDhDQUFzQixHQUE3Qjs7O1lBQ0UseUVBQXlFO1lBQ3pFLHlFQUF5RTtZQUN6RSxLQUFxQixJQUFBLEtBQUEsU0FBQSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUEsZ0JBQUEsNEJBQUU7Z0JBQXJELElBQU0sTUFBTSxXQUFBO2dCQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3hELElBQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzt3QkFDbkYsS0FBNkIsSUFBQSxvQkFBQSxTQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQSxDQUFBLGdCQUFBLDRCQUFFOzRCQUE5RCxJQUFNLGNBQWMsV0FBQTs0QkFDdkIsSUFBSSxjQUFjLENBQUMsZUFBZSxLQUFLLGFBQWEsQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxFQUFFO2dDQUN2SCxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQy9DO3lCQUNGOzs7Ozs7Ozs7aUJBQ0Y7YUFDRjs7Ozs7Ozs7O0lBQ0gsQ0FBQztJQUVELDZDQUFxQixHQUFyQixVQUNFLE1BQWMsRUFDZCxjQUFxQyxFQUNyQyxLQUE4QixFQUM5QixLQUFjLEVBQ2QsV0FBb0I7UUFFcEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUQsSUFDRSxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUNuQyxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUN0QyxjQUFjLEVBQ2QsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFDdkMsS0FBSyxFQUNMLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQ3ZDLEtBQUssRUFDTCxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUM3QyxXQUFXLENBQ1osRUFDRDtnQkFDQSxNQUFNLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDNUMsT0FBTzthQUNSO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsMENBQWtCLEdBQWxCLFVBQ0UsTUFBYyxFQUNkLGNBQXFDLEVBQ3JDLGVBQXVCLEVBQ3ZCLFVBQW1CLEVBQ25CLEtBQThCLEVBQzlCLEtBQWMsRUFDZCxXQUFvQjtRQUVwQixrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztRQUU5RSxJQUFNLHNCQUFzQixHQUFHLElBQUksc0JBQXNCLEVBQUUsQ0FBQztRQUM1RCxzQkFBc0IsQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO1FBQzdDLHNCQUFzQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckMsc0JBQXNCLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNyQyxzQkFBc0IsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ3pELHNCQUFzQixDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDL0Msc0JBQXNCLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUVqRCxNQUFNLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELDBDQUFrQixHQUFsQixVQUNFLE1BQWMsRUFDZCxjQUFxQyxFQUNyQyxLQUE4QixFQUM5QixLQUFjLEVBQ2QsV0FBb0I7OztZQUVwQixLQUE4QixJQUFBLEtBQUEsU0FBQSxNQUFNLENBQUMsdUJBQXVCLENBQUEsZ0JBQUEsNEJBQUU7Z0JBQXpELElBQU0sZUFBZSxXQUFBO2dCQUN4QixJQUNFLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQ25DLGVBQWUsQ0FBQyxJQUFJLEVBQ3BCLGNBQWMsRUFDZCxlQUFlLENBQUMsS0FBSyxFQUNyQixLQUFLLEVBQ0wsZUFBZSxDQUFDLEtBQUssRUFDckIsS0FBSyxFQUNMLGVBQWUsQ0FBQyxXQUFXLEVBQzNCLFdBQVcsQ0FDWixFQUNEO29CQUNBLE9BQU8sZUFBZSxDQUFDO2lCQUN4QjthQUNGOzs7Ozs7Ozs7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsMENBQWtCLEdBQWxCLFVBQW1CLFdBQW1CLEVBQUUsV0FBbUI7UUFDekQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3hFLElBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssV0FBVztnQkFDdkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssV0FBVyxFQUN2RTtnQkFDQSxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RELE9BQU87YUFDUjtTQUNGO0lBQ0gsQ0FBQztJQUVELHVDQUFlLEdBQWYsVUFBZ0IsV0FBbUIsRUFBRSxXQUFtQixFQUFFLEtBQWE7UUFDckUsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFbEQsSUFBTSxtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDdEQsbUJBQW1CLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUM5QyxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQzlDLG1CQUFtQixDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsdUNBQWUsR0FBZixVQUFnQixXQUFtQixFQUFFLFdBQW1COzs7WUFDdEQsS0FBMkIsSUFBQSxLQUFBLFNBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQSxnQkFBQSw0QkFBRTtnQkFBaEUsSUFBTSxZQUFZLFdBQUE7Z0JBQ3JCLElBQUksWUFBWSxDQUFDLFdBQVcsS0FBSyxXQUFXLElBQUksWUFBWSxDQUFDLFdBQVcsS0FBSyxXQUFXLEVBQUU7b0JBQ3hGLE9BQU8sWUFBWSxDQUFDLEtBQUssQ0FBQztpQkFDM0I7YUFDRjs7Ozs7Ozs7O0lBQ0gsQ0FBQztJQUVELDJEQUFtQyxHQUFuQyxVQUFvQyxNQUFjLEVBQUUsYUFBbUM7O1FBQ3JGLDRGQUE0RjtRQUM1RiwwQkFBMEI7UUFDMUIsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksVUFBa0IsQ0FBQztRQUN2QixJQUFJLFNBQWlCLENBQUM7UUFDdEIsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxJQUFJLG9CQUE2QyxDQUFDO1FBQ2xELElBQUksZUFBdUMsQ0FBQztRQUU1QyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEgsSUFBSSxlQUFlLEVBQUU7WUFDbkIsUUFBUSxHQUFHLEdBQUcsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDO1NBQ2xEO1FBQ0QsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsY0FBYyxFQUFFLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RILElBQUksZUFBZSxFQUFFO1lBQ25CLFVBQVUsR0FBRyxHQUFHLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQztTQUNwRDtRQUNELGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNySCxJQUFJLGVBQWUsRUFBRTtZQUNuQixTQUFTLEdBQUcsR0FBRyxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUM7U0FDbkQ7UUFFRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzFDLGlEQUFpRDtZQUNqRCxPQUFPO1NBQ1I7UUFFRCxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksVUFBVSxLQUFLLFNBQVMsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFOztnQkFDakYsS0FBeUIsSUFBQSxLQUFBLFNBQUEsYUFBYSxDQUFDLFlBQVksQ0FBQSxnQkFBQSw0QkFBRTtvQkFBaEQsSUFBTSxVQUFVLFdBQUE7b0JBQ25CLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUU7d0JBQ3BDLElBQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNsSCxJQUFJLFVBQVUsRUFBRTs0QkFDZCxJQUFNLElBQUksR0FDUixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQzs0QkFFeEgsSUFBSSxJQUFJLEdBQUcsVUFBVSxFQUFFO2dDQUNyQixVQUFVLEdBQUcsSUFBSSxDQUFDO2dDQUNsQixvQkFBb0IsR0FBRyxVQUFVLENBQUM7NkJBQ25DO3lCQUNGO3FCQUNGO2lCQUNGOzs7Ozs7Ozs7U0FDRjtRQUVELE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVPLHlDQUFpQixHQUF6QixVQUEwQixJQUEyQjs7O1lBQ25ELHVFQUF1RTtZQUN2RSxLQUEwQixJQUFBLEtBQUEsU0FBQSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQSxnQkFBQSw0QkFBRTtnQkFBdkQsSUFBTSxXQUFXLFdBQUE7Z0JBQ3BCLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7O29CQUN4RSxLQUFzQixJQUFBLHFCQUFBLFNBQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQSxDQUFBLGdCQUFBLDRCQUFFO3dCQUFuQyxJQUFNLE9BQU8sV0FBQTt3QkFDaEIsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFOztnQ0FDbkIsS0FBeUIsSUFBQSxxQkFBQSxTQUFBLE9BQU8sQ0FBQyxZQUFZLENBQUEsQ0FBQSxnQkFBQSw0QkFBRTtvQ0FBMUMsSUFBTSxVQUFVLFdBQUE7b0NBQ25CLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFO3dDQUN2QyxPQUFPLElBQUksQ0FBQztxQ0FDYjtpQ0FDRjs7Ozs7Ozs7O3lCQUNGO3FCQUNGOzs7Ozs7Ozs7YUFDRjs7Ozs7Ozs7O1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsMkNBQW1CLEdBQW5CO1FBQ0UsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELDBDQUFrQixHQUFsQjtRQUNFLDRFQUE0RTtRQUU1RSw0Q0FBNEM7UUFDNUMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDaEUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELHNEQUE4QixHQUE5QjtRQUNFLDRFQUE0RTs7UUFFNUUsNENBQTRDO1FBQzVDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUM7U0FDYjs7WUFFRCw0QkFBNEI7WUFDNUIsS0FBMEIsSUFBQSxLQUFBLFNBQUEsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUEsZ0JBQUEsNEJBQUU7Z0JBQXZELElBQU0sV0FBVyxXQUFBO2dCQUNwQixJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDOztvQkFDeEUsS0FBc0IsSUFBQSxxQkFBQSxTQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUEsQ0FBQSxnQkFBQSw0QkFBRTt3QkFBbkMsSUFBTSxPQUFPLFdBQUE7d0JBQ2hCLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTs0QkFDdEIsT0FBTyxJQUFJLENBQUM7eUJBQ2I7cUJBQ0Y7Ozs7Ozs7OzthQUNGOzs7Ozs7Ozs7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCw0Q0FBb0IsR0FBcEI7UUFDRSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXBCLGlEQUFpRDtRQUNqRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNyRCxNQUFNLEdBQUcsSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0RCxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ2hCO1FBRUQsSUFBSSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxvQ0FBWSxHQUFaLFVBQWEsS0FBYTtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7UUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNqRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCwyQ0FBbUIsR0FBbkI7UUFDRSxvREFBb0Q7UUFDcEQsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDbkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEU7SUFDSCxDQUFDO0lBRUQsaUNBQVMsR0FBVCxVQUFVLElBQWE7UUFDckIsSUFBTSxNQUFNLEdBQVcsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNwQyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksWUFBWSxDQUFDO1FBRW5DLHFFQUFxRTtRQUNyRSxJQUFJLDBCQUEwQixHQUFHLENBQUMsQ0FBQztRQUVuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuRSxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNsRSwwQkFBMEIsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLE1BQU07YUFDUDtTQUNGO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEYsSUFBSSxDQUFDLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCwyQ0FBbUIsR0FBbkI7O1FBQ0UsSUFBTSxRQUFRLEdBQXFCLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4QixPQUFPLFFBQVEsQ0FBQztTQUNqQjs7WUFFRCxLQUEwQixJQUFBLEtBQUEsU0FBQSxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQSxnQkFBQSw0QkFBRTtnQkFBdkQsSUFBTSxXQUFXLFdBQUE7Z0JBQ3BCLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ2xFLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUUxRSxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN4QjthQUNGOzs7Ozs7Ozs7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsa0RBQTBCLEdBQTFCLFVBQTJCLGdCQUFrQzs7UUFBN0QsaUJBZ0NDO1FBL0JDLElBQU0saUJBQWlCLEdBQWdELElBQUksR0FBRyxFQUEwQyxDQUFDO1FBRXpILElBQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7O1lBQ3hFLEtBQXNCLElBQUEscUJBQUEsU0FBQSxnQkFBZ0IsQ0FBQSxrREFBQSxnRkFBRTtnQkFBbkMsSUFBTSxPQUFPLDZCQUFBO2dCQUNoQixJQUFNLEtBQUssR0FBa0IsRUFBRSxDQUFDOztvQkFDaEMsS0FBMEIsSUFBQSxxQkFBQSxTQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFBLENBQUEsZ0JBQUEsNEJBQUU7d0JBQXZELElBQU0sV0FBVyxXQUFBO3dCQUNwQixJQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUN4RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDbkMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7eUJBQzFCO3FCQUNGOzs7Ozs7Ozs7Z0JBQ0Qsc0JBQXNCLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQzthQUM1Qzs7Ozs7Ozs7O1FBRUQsaURBQWlEO1FBQ2pELHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxVQUFDLEtBQW9CLEVBQUUsT0FBdUI7O1lBQzNFLElBQU0sZUFBZSxHQUEyQixFQUFFLENBQUM7O2dCQUNuRCxLQUFtQixJQUFBLFVBQUEsU0FBQSxLQUFLLENBQUEsNEJBQUEsK0NBQUU7b0JBQXJCLElBQU0sSUFBSSxrQkFBQTtvQkFDYixJQUFNLFFBQVEsR0FBRyxLQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQzs0Q0FDM0QsT0FBTzt3QkFDaEIsZ0ZBQWdGO3dCQUNoRix3QkFBd0I7d0JBQ3hCLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBQyxDQUFDLElBQUssT0FBQSxDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQXZCLENBQXVCLENBQUMsRUFBRTs0QkFDNUUsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt5QkFDL0I7Ozt3QkFMSCxLQUFzQixJQUFBLDZCQUFBLFNBQUEsUUFBUSxDQUFBLENBQUEsa0NBQUE7NEJBQXpCLElBQU0sT0FBTyxxQkFBQTtvQ0FBUCxPQUFPO3lCQU1qQjs7Ozs7Ozs7O2lCQUNGOzs7Ozs7Ozs7WUFDRCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxpQkFBaUIsQ0FBQztJQUMzQixDQUFDO0lBRUQsbUNBQVcsR0FBWCxVQUFZLGVBQTRCLEVBQUUsY0FBdUI7UUFBakUsaUJBa0NDO1FBbENXLGdDQUFBLEVBQUEsb0JBQTRCO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtZQUNuQyxPQUFPO1NBQ1I7UUFFRCw4REFBOEQ7UUFDOUQseURBQXlEO1FBQ3pELElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7WUFDOUIsT0FBTztTQUNSO1FBRUQsSUFBSSxRQUFRLEdBQUcsY0FBYyxDQUFDO1FBRTlCLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUMxQixRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDekQ7UUFFRCxJQUFJLENBQUMsSUFBSTthQUNOLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxRQUFRLEdBQUcsbUJBQW1CLEdBQUcsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMvSCxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFL0IsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDO2dCQUNqQyxLQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2dCQUNsQyxJQUFJLEtBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDMUIsS0FBSSxDQUFDLElBQUk7eUJBQ04sSUFBSSxDQUFDLHlCQUF5QixHQUFHLFFBQVEsR0FBRyxtQkFBbUIsR0FBRyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO3lCQUMvSCxTQUFTLEVBQUUsQ0FBQztpQkFDaEI7WUFDSCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDUjtJQUNILENBQUM7SUFFRCx1Q0FBZSxHQUFmO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFO1lBQ25DLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hELENBQUM7O2dCQWpkd0IsYUFBYTtnQkFDZixXQUFXO2dCQUNSLGNBQWM7Z0JBQ2QsY0FBYztnQkFDZixhQUFhO2dCQUN0QixVQUFVO2dCQUNFLGdCQUFnQjs7O0lBMUJqQyxhQUFhO1FBSHpCLFVBQVUsQ0FBQztZQUNWLFVBQVUsRUFBRSxNQUFNO1NBQ25CLENBQUM7eUNBcUJ5QixhQUFhO1lBQ2YsV0FBVztZQUNSLGNBQWM7WUFDZCxjQUFjO1lBQ2YsYUFBYTtZQUN0QixVQUFVO1lBQ0UsZ0JBQWdCO09BMUJqQyxhQUFhLENBc2V6Qjt3QkE1ZkQ7Q0E0ZkMsQUF0ZUQsSUFzZUM7U0F0ZVksYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB9IGZyb20gJy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDaGFubmVsIH0gZnJvbSAnLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNoYW5uZWwnO1xuaW1wb3J0IHsgRml4dHVyZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHktdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZU1vZGUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS1tb2RlJztcbmltcG9ydCB7IEZpeHR1cmVQcm9maWxlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtcHJvZmlsZSc7XG5pbXBvcnQgeyBQcmVzZXQgfSBmcm9tICcuLi9tb2RlbHMvcHJlc2V0JztcbmltcG9ydCB7IEFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuL2FuaW1hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVmZmVjdFNlcnZpY2UgfSBmcm9tICcuL2VmZmVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdFNlcnZpY2UgfSBmcm9tICcuL3Byb2plY3Quc2VydmljZSc7XG5pbXBvcnQgeyBVdWlkU2VydmljZSB9IGZyb20gJy4vdXVpZC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByZXNldFNlcnZpY2Uge1xuICBzZWxlY3RlZFByZXNldDogUHJlc2V0O1xuXG4gIC8vIGZpcmVzLCB3aGVuIHRoZSBjdXJyZW50IHByZXZpZXcgZWxlbWVudCBoYXMgY2hhbmdlZCAoc2NlbmUvcHJlc2V0KVxuICBwcmV2aWV3U2VsZWN0aW9uQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gZmlyZXMsIHdoZW4gdGhlIGZpeHR1cmUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkXG4gIGZpeHR1cmVTZWxlY3Rpb25DaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBmaXJlcywgd2hlbiB0aGUgZml4dHVyZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWQgZm9yIHNldHRpbmdzXG4gIGZpeHR1cmVTZWxlY3Rpb25TZXR0aW5nc0NoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIGZpcmVzLCB3aGVuIHRoZSBzZWxlY3RlZCBjb2xvciBoYXMgY2hhbmdlZC4gVGhpcyBpcyByZXF1aXJlZCxcbiAgLy8gYmVjYXVzZSBkZXRlY3RDaGFuZ2VzIGlzIG5vdCBlbm91Z2ggdG8gdHJpZ2dlciBkaWZmZXJlbnQgY29tcG9uZW50cy5cbiAgZml4dHVyZUNvbG9yQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgbGl2ZVByZXZpZXdUaW1lcjogYW55O1xuICBsaXZlQ2hhbmdlUGVuZGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZWZmZWN0U2VydmljZTogRWZmZWN0U2VydmljZSxcbiAgICBwcml2YXRlIHV1aWRTZXJ2aWNlOiBVdWlkU2VydmljZSxcbiAgICBwcml2YXRlIHByb2plY3RTZXJ2aWNlOiBQcm9qZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGZpeHR1cmVTZXJ2aWNlOiBGaXh0dXJlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgYW5pbWF0aW9uU2VydmljZTogQW5pbWF0aW9uU2VydmljZVxuICApIHt9XG5cbiAgZ2V0UHJlc2V0QnlVdWlkKHV1aWQ6IHN0cmluZyk6IFByZXNldCB7XG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMpIHtcbiAgICAgIGlmIChwcmVzZXQudXVpZCA9PT0gdXVpZCkge1xuICAgICAgICByZXR1cm4gcHJlc2V0O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmU6IEZpeHR1cmUsIHByZXNldD86IFByZXNldCk6IGJvb2xlYW4ge1xuICAgIC8vIGlzIHRoZSBwYXNzZWQgZml4dHVyZSBzZWxlY3RlZCBpbiB0aGUgcGFzc2VkL2N1cnJlbnRseSBzZWxlY3RlZCBwcmVzZXQ/XG4gICAgaWYgKCFwcmVzZXQpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICAgIHByZXNldCA9IHRoaXMuc2VsZWN0ZWRQcmVzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzZWxlY3RlZEZpeHR1cmVVdWlkIG9mIHByZXNldC5maXh0dXJlVXVpZHMpIHtcbiAgICAgIGlmIChzZWxlY3RlZEZpeHR1cmVVdWlkID09PSBmaXh0dXJlLnV1aWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoRml4dHVyZVNlbGVjdGlvbihmaXh0dXJlOiBGaXh0dXJlKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0IGFsbCBmaXh0dXJlcyBhdCB0aGUgc3BlY2lmaWVkIHN0YXJ0IGNoYW5uZWwgb3IgdW5zZWxlY3QgdGhlbSxcbiAgICAvLyBpZiBhbHJlYWR5IHNlbGVjdGVkXG4gICAgaWYgKHRoaXMuZml4dHVyZUlzU2VsZWN0ZWQoZml4dHVyZSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBwcm9qZWN0Rml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZCh0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkc1tpXSk7XG4gICAgICAgIGlmIChwcm9qZWN0Rml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmUuZG14Rmlyc3RDaGFubmVsKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LmZpeHR1cmVzKSB7XG4gICAgICAgIGlmIChwcm9qZWN0Rml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmUuZG14Rmlyc3RDaGFubmVsKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMucHVzaChwcm9qZWN0Rml4dHVyZS51dWlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbEZpeHR1cmVzKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMpIHtcbiAgICAgIGlmICghdGhpcy5maXh0dXJlSXNTZWxlY3RlZChmaXh0dXJlKSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcy5wdXNoKGZpeHR1cmUudXVpZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0Tm9GaXh0dXJlcygpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRQcmVzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcyA9IFtdO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZURlbGV0ZWRGaXh0dXJlcygpIHtcbiAgICAvLyBhZnRlciBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgZml4dHVyZSBwb29sLCB3ZSBtaWdodCBuZWVkIHRvXG4gICAgLy8gZGVsZXRlIHNvbWUgZml4dHVyZXNcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cykge1xuICAgICAgZm9yIChsZXQgaSA9IHByZXNldC5maXh0dXJlVXVpZHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcHJlc2V0Rml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChwcmVzZXQuZml4dHVyZVV1aWRzW2ldKTtcbiAgICAgICAgaWYgKCFwcmVzZXRGaXh0dXJlKSB7XG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVVdWlkcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRml4dHVyZVNlbGVjdGlvbigpIHtcbiAgICAvLyBhZnRlciBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgZml4dHVyZSBwb29sLCB3ZSBtaWdodCBuZWVkIHRvXG4gICAgLy8gc2VsZWN0IHNvbWUgbW9yZSBmaXh0dXJlcyBvbiB0aGUgc2FtZSBjaGFubmVsIGFzIGFscmVhZHkgc2VsZWN0ZWQgb25lc1xuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzKSB7XG4gICAgICBmb3IgKGxldCBpID0gcHJlc2V0LmZpeHR1cmVVdWlkcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBwcmVzZXRGaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRGaXh0dXJlQnlVdWlkKHByZXNldC5maXh0dXJlVXVpZHNbaV0pO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2plY3RGaXh0dXJlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcykge1xuICAgICAgICAgIGlmIChwcm9qZWN0Rml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IHByZXNldEZpeHR1cmUuZG14Rmlyc3RDaGFubmVsICYmICF0aGlzLmZpeHR1cmVJc1NlbGVjdGVkKHByb2plY3RGaXh0dXJlLCBwcmVzZXQpKSB7XG4gICAgICAgICAgICBwcmVzZXQuZml4dHVyZVV1aWRzLnB1c2gocHJvamVjdEZpeHR1cmUudXVpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlQ2FwYWJpbGl0eVZhbHVlKFxuICAgIHByZXNldDogUHJlc2V0LFxuICAgIGNhcGFiaWxpdHlUeXBlOiBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUsXG4gICAgY29sb3I/OiBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLFxuICAgIHdoZWVsPzogc3RyaW5nLFxuICAgIHByb2ZpbGVVdWlkPzogc3RyaW5nXG4gICkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZml4dHVyZVNlcnZpY2UuY2FwYWJpbGl0aWVzTWF0Y2goXG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzW2ldLnR5cGUsXG4gICAgICAgICAgY2FwYWJpbGl0eVR5cGUsXG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzW2ldLmNvbG9yLFxuICAgICAgICAgIGNvbG9yLFxuICAgICAgICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlc1tpXS53aGVlbCxcbiAgICAgICAgICB3aGVlbCxcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXNbaV0ucHJvZmlsZVV1aWQsXG4gICAgICAgICAgcHJvZmlsZVV1aWRcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRDYXBhYmlsaXR5VmFsdWUoXG4gICAgcHJlc2V0OiBQcmVzZXQsXG4gICAgY2FwYWJpbGl0eVR5cGU6IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSxcbiAgICB2YWx1ZVBlcmNlbnRhZ2U6IG51bWJlcixcbiAgICBzbG90TnVtYmVyPzogbnVtYmVyLFxuICAgIGNvbG9yPzogRml4dHVyZUNhcGFiaWxpdHlDb2xvcixcbiAgICB3aGVlbD86IHN0cmluZyxcbiAgICBwcm9maWxlVXVpZD86IHN0cmluZ1xuICApIHtcbiAgICAvLyBEZWxldGUgZXhpc3RhbnQgcHJvcGVydGllcyB3aXRoIHRoaXMgdHlwZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWVcbiAgICB0aGlzLmRlbGV0ZUNhcGFiaWxpdHlWYWx1ZShwcmVzZXQsIGNhcGFiaWxpdHlUeXBlLCBjb2xvciwgd2hlZWwsIHByb2ZpbGVVdWlkKTtcblxuICAgIGNvbnN0IGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUgPSBuZXcgRml4dHVyZUNhcGFiaWxpdHlWYWx1ZSgpO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUudHlwZSA9IGNhcGFiaWxpdHlUeXBlO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUuY29sb3IgPSBjb2xvcjtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLndoZWVsID0gd2hlZWw7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS52YWx1ZVBlcmNlbnRhZ2UgPSB2YWx1ZVBlcmNlbnRhZ2U7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS5zbG90TnVtYmVyID0gc2xvdE51bWJlcjtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLnByb2ZpbGVVdWlkID0gcHJvZmlsZVV1aWQ7XG5cbiAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXMucHVzaChmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlKTtcbiAgfVxuXG4gIGdldENhcGFiaWxpdHlWYWx1ZShcbiAgICBwcmVzZXQ6IFByZXNldCxcbiAgICBjYXBhYmlsaXR5VHlwZTogRml4dHVyZUNhcGFiaWxpdHlUeXBlLFxuICAgIGNvbG9yPzogRml4dHVyZUNhcGFiaWxpdHlDb2xvcixcbiAgICB3aGVlbD86IHN0cmluZyxcbiAgICBwcm9maWxlVXVpZD86IHN0cmluZ1xuICApOiBGaXh0dXJlQ2FwYWJpbGl0eVZhbHVlIHtcbiAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHlWYWx1ZSBvZiBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5jYXBhYmlsaXRpZXNNYXRjaChcbiAgICAgICAgICBjYXBhYmlsaXR5VmFsdWUudHlwZSxcbiAgICAgICAgICBjYXBhYmlsaXR5VHlwZSxcbiAgICAgICAgICBjYXBhYmlsaXR5VmFsdWUuY29sb3IsXG4gICAgICAgICAgY29sb3IsXG4gICAgICAgICAgY2FwYWJpbGl0eVZhbHVlLndoZWVsLFxuICAgICAgICAgIHdoZWVsLFxuICAgICAgICAgIGNhcGFiaWxpdHlWYWx1ZS5wcm9maWxlVXVpZCxcbiAgICAgICAgICBwcm9maWxlVXVpZFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHlWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGRlbGV0ZUNoYW5uZWxWYWx1ZShjaGFubmVsTmFtZTogc3RyaW5nLCBwcm9maWxlVXVpZDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXNbaV0uY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxOYW1lICYmXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXNbaV0ucHJvZmlsZVV1aWQgPT09IHByb2ZpbGVVdWlkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRDaGFubmVsVmFsdWUoY2hhbm5lbE5hbWU6IHN0cmluZywgcHJvZmlsZVV1aWQ6IHN0cmluZywgdmFsdWU6IG51bWJlcikge1xuICAgIC8vIERlbGV0ZSBleGlzdGFudCBwcm9wZXJ0aWVzIHdpdGggdGhpcyB0eXBlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZVxuICAgIHRoaXMuZGVsZXRlQ2hhbm5lbFZhbHVlKGNoYW5uZWxOYW1lLCBwcm9maWxlVXVpZCk7XG5cbiAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2hhbm5lbE5hbWU7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IHByb2ZpbGVVdWlkO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMucHVzaChmaXh0dXJlQ2hhbm5lbFZhbHVlKTtcbiAgfVxuXG4gIGdldENoYW5uZWxWYWx1ZShjaGFubmVsTmFtZTogc3RyaW5nLCBwcm9maWxlVXVpZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzKSB7XG4gICAgICBpZiAoY2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID09PSBjaGFubmVsTmFtZSAmJiBjaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPT09IHByb2ZpbGVVdWlkKSB7XG4gICAgICAgIHJldHVybiBjaGFubmVsVmFsdWUudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBwcm94aW1hdGVkQ29sb3JXaGVlbENhcGFiaWxpdHkocHJlc2V0OiBQcmVzZXQsIGNhY2hlZENoYW5uZWw6IENhY2hlZEZpeHR1cmVDaGFubmVsKTogQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHkge1xuICAgIC8vIHJldHVybiBhbiBhcHByb3hpbWF0ZWQgd2hlZWwgc2xvdCBjaGFubmVsIGNhcGFiaWxpdHksIGlmIGEgY29sb3Igb3IgYSBzbG90IG9uIGEgZGlmZmVyZW50XG4gICAgLy8gd2hlZWwgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICBsZXQgY29sb3JSZWQ6IG51bWJlcjtcbiAgICBsZXQgY29sb3JHcmVlbjogbnVtYmVyO1xuICAgIGxldCBjb2xvckJsdWU6IG51bWJlcjtcbiAgICBsZXQgbG93ZXN0RGlmZiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgbGV0IGxvd2VzdERpZmZDYXBhYmlsaXR5OiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eTtcbiAgICBsZXQgY2FwYWJpbGl0eVZhbHVlOiBGaXh0dXJlQ2FwYWJpbGl0eVZhbHVlO1xuXG4gICAgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5nZXRDYXBhYmlsaXR5VmFsdWUocHJlc2V0LCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHksIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuUmVkKTtcbiAgICBpZiAoY2FwYWJpbGl0eVZhbHVlKSB7XG4gICAgICBjb2xvclJlZCA9IDI1NSAqIGNhcGFiaWxpdHlWYWx1ZS52YWx1ZVBlcmNlbnRhZ2U7XG4gICAgfVxuICAgIGNhcGFiaWxpdHlWYWx1ZSA9IHRoaXMuZ2V0Q2FwYWJpbGl0eVZhbHVlKHByZXNldCwgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5LCBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkdyZWVuKTtcbiAgICBpZiAoY2FwYWJpbGl0eVZhbHVlKSB7XG4gICAgICBjb2xvckdyZWVuID0gMjU1ICogY2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICB9XG4gICAgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5nZXRDYXBhYmlsaXR5VmFsdWUocHJlc2V0LCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHksIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuQmx1ZSk7XG4gICAgaWYgKGNhcGFiaWxpdHlWYWx1ZSkge1xuICAgICAgY29sb3JCbHVlID0gMjU1ICogY2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbG9yUmVkICYmICFjb2xvckdyZWVuICYmICFjb2xvckJsdWUpIHtcbiAgICAgIC8vIG5vIGNvbG9yIGZvdW5kIC0+IHNlYXJjaCB0aGUgZmlyc3QgY29sb3Igd2hlZWxcbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICBpZiAoY29sb3JSZWQgIT09IHVuZGVmaW5lZCAmJiBjb2xvckdyZWVuICE9PSB1bmRlZmluZWQgJiYgY29sb3JCbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICBpZiAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnNsb3ROdW1iZXIpIHtcbiAgICAgICAgICBjb25zdCBtaXhlZENvbG9yID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRNaXhlZFdoZWVsU2xvdENvbG9yKGNhcGFiaWxpdHkud2hlZWwsIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5zbG90TnVtYmVyKTtcbiAgICAgICAgICBpZiAobWl4ZWRDb2xvcikge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9XG4gICAgICAgICAgICAgIE1hdGguYWJzKG1peGVkQ29sb3IucmVkIC0gY29sb3JSZWQpICsgTWF0aC5hYnMobWl4ZWRDb2xvci5ncmVlbiAtIGNvbG9yR3JlZW4pICsgTWF0aC5hYnMobWl4ZWRDb2xvci5ibHVlIC0gY29sb3JCbHVlKTtcblxuICAgICAgICAgICAgaWYgKGRpZmYgPCBsb3dlc3REaWZmKSB7XG4gICAgICAgICAgICAgIGxvd2VzdERpZmYgPSBkaWZmO1xuICAgICAgICAgICAgICBsb3dlc3REaWZmQ2FwYWJpbGl0eSA9IGNhcGFiaWxpdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvd2VzdERpZmZDYXBhYmlsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNDYXBhYmlsaXR5VHlwZSh0eXBlOiBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUpOiBib29sZWFuIHtcbiAgICAvLyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhbm5lbCB3aXRoIGF0IGxlYXN0IG9uZSBpbnRlbnNpdHkgY2FwYWJpbGl0eVxuICAgIGZvciAoY29uc3QgZml4dHVyZVV1aWQgb2YgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMpIHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZEZpeHR1cmVCeVV1aWQoZml4dHVyZVV1aWQpO1xuICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgICAgaWYgKGNoYW5uZWwuY2hhbm5lbCkge1xuICAgICAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBjaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgICAgaWYgKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS50eXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYXNDYXBhYmlsaXR5RGltbWVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0NhcGFiaWxpdHlUeXBlKEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHkpO1xuICB9XG5cbiAgaGFzQ2FwYWJpbGl0eUNvbG9yKCk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gb3B0aW9uYWxseSBjb2xvciB0ZW1wZXJhdHVyZSBhbmQgY29sb3Igd2hpdGUgKHNlZSBzdGFpcnZpbGxlL21oLTEwMClcblxuICAgIC8vIG9uZSBvZiB0aGUgcHJvZmlsZXMgaGFzIGEgY29sb3IgaW50ZW5zaXR5XG4gICAgaWYgKHRoaXMuaGFzQ2FwYWJpbGl0eVR5cGUoRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFzQ2FwYWJpbGl0eUNvbG9yT3JDb2xvcldoZWVsKCk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gb3B0aW9uYWxseSBjb2xvciB0ZW1wZXJhdHVyZSBhbmQgY29sb3Igd2hpdGUgKHNlZSBzdGFpcnZpbGxlL21oLTEwMClcblxuICAgIC8vIG9uZSBvZiB0aGUgcHJvZmlsZXMgaGFzIGEgY29sb3IgaW50ZW5zaXR5XG4gICAgaWYgKHRoaXMuaGFzQ2FwYWJpbGl0eUNvbG9yKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGEgY29sb3Igd2hlZWwgaXMgaW52b2x2ZWRcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmVVdWlkIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZVV1aWRzKSB7XG4gICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDYWNoZWRGaXh0dXJlQnlVdWlkKGZpeHR1cmVVdWlkKTtcbiAgICAgIGZvciAoY29uc3QgY2hhbm5lbCBvZiBmaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICAgIGlmIChjaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhhc0NhcGFiaWxpdHlQYW5UaWx0KCk6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNQYW4gPSBmYWxzZTtcbiAgICBsZXQgaGFzVGlsdCA9IGZhbHNlO1xuXG4gICAgLy8gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHBhbiBhbmQgb25lIHRpbHQgY2hhbm5lbFxuICAgIGlmICh0aGlzLmhhc0NhcGFiaWxpdHlUeXBlKEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5QYW4pKSB7XG4gICAgICBoYXNQYW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NhcGFiaWxpdHlUeXBlKEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5UaWx0KSkge1xuICAgICAgaGFzVGlsdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhbiAmJiBoYXNUaWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZWxlY3RQcmVzZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZWZmZWN0U2VydmljZS5zZWxlY3RlZEVmZmVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbaW5kZXhdO1xuICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zZWxlY3RlZFByZXNldFV1aWQgPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1tpbmRleF0udXVpZDtcbiAgICB0aGlzLmF1dG9PcGVuRmlyc3RFZmZlY3QoKTtcbiAgICB0aGlzLnByZXZpZXdTZWxlY3Rpb25DaGFuZ2VkLm5leHQoKTtcbiAgICB0aGlzLnByZXZpZXdMaXZlKCk7XG4gIH1cblxuICBhdXRvT3BlbkZpcnN0RWZmZWN0KCkge1xuICAgIC8vIG9wZW4gdGhlIGZpcnN0IGVmZmVjdCwgaWYgdGhlIHByZXNldCBvbmx5IGhhcyBvbmVcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByZXNldCAmJiB0aGlzLnNlbGVjdGVkUHJlc2V0LmVmZmVjdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmVmZmVjdFNlcnZpY2Uuc2VsZWN0ZWRFZmZlY3QgPSB0aGlzLnNlbGVjdGVkUHJlc2V0LmVmZmVjdHNbMF07XG4gICAgfVxuICB9XG5cbiAgYWRkUHJlc2V0KG5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVzZXQ6IFByZXNldCA9IG5ldyBQcmVzZXQoKTtcbiAgICBwcmVzZXQudXVpZCA9IHRoaXMudXVpZFNlcnZpY2UuZ2V0VXVpZCgpO1xuICAgIHByZXNldC5uYW1lID0gbmFtZSB8fCAnTmV3IFByZXNldCc7XG5cbiAgICAvLyBJbnNlcnQgdGhlIG5ldyBwcmVzZXQgYmVmb3JlIHRoZSBoaWdoZXN0IGN1cnJlbnRseSBzZWxlY3RlZCBwcmVzZXRcbiAgICBsZXQgaGlnaGVzdFNlbGVjdGVkUHJlc2V0SW5kZXggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQcmVzZXQgPT09IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzW2ldKSB7XG4gICAgICAgIGhpZ2hlc3RTZWxlY3RlZFByZXNldEluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMuc3BsaWNlKGhpZ2hlc3RTZWxlY3RlZFByZXNldEluZGV4LCAwLCBwcmVzZXQpO1xuICAgIHRoaXMuc2VsZWN0UHJlc2V0KGhpZ2hlc3RTZWxlY3RlZFByZXNldEluZGV4KTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkUHJvZmlsZXMoKSB7XG4gICAgY29uc3QgcHJvZmlsZXM6IEZpeHR1cmVQcm9maWxlW10gPSBbXTtcblxuICAgIGlmICghdGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuIHByb2ZpbGVzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZml4dHVyZVV1aWQgb2YgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlVXVpZHMpIHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQoZml4dHVyZVV1aWQpO1xuICAgICAgY29uc3QgcHJvZmlsZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0UHJvZmlsZUJ5VXVpZChmaXh0dXJlLnByb2ZpbGVVdWlkKTtcblxuICAgICAgaWYgKHByb2ZpbGVzLmluZGV4T2YocHJvZmlsZSkgPCAwKSB7XG4gICAgICAgIHByb2ZpbGVzLnB1c2gocHJvZmlsZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2ZpbGVzO1xuICB9XG5cbiAgZ2V0U2VsZWN0ZWRQcm9maWxlQ2hhbm5lbHMoc2VsZWN0ZWRQcm9maWxlczogRml4dHVyZVByb2ZpbGVbXSkge1xuICAgIGNvbnN0IGF2YWlsYWJsZUNoYW5uZWxzOiBNYXA8Rml4dHVyZVByb2ZpbGUsIENhY2hlZEZpeHR1cmVDaGFubmVsW10+ID0gbmV3IE1hcDxGaXh0dXJlUHJvZmlsZSwgQ2FjaGVkRml4dHVyZUNoYW5uZWxbXT4oKTtcblxuICAgIGNvbnN0IGNhbGN1bGF0ZWRQcm9maWxlTW9kZXMgPSBuZXcgTWFwPEZpeHR1cmVQcm9maWxlLCBGaXh0dXJlTW9kZVtdPigpO1xuICAgIGZvciAoY29uc3QgcHJvZmlsZSBvZiBzZWxlY3RlZFByb2ZpbGVzKSB7XG4gICAgICBjb25zdCBtb2RlczogRml4dHVyZU1vZGVbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBmaXh0dXJlVXVpZCBvZiB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVVdWlkcykge1xuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDYWNoZWRGaXh0dXJlQnlVdWlkKGZpeHR1cmVVdWlkKTtcbiAgICAgICAgaWYgKG1vZGVzLmluZGV4T2YoZml4dHVyZS5tb2RlKSA8IDApIHtcbiAgICAgICAgICBtb2Rlcy5wdXNoKGZpeHR1cmUubW9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbGN1bGF0ZWRQcm9maWxlTW9kZXMuc2V0KHByb2ZpbGUsIG1vZGVzKTtcbiAgICB9XG5cbiAgICAvLyBjYWxjdWxhdGUgYWxsIHJlcXVpcmVkIGNoYW5uZWxzIGZyb20gdGhlIG1vZGVzXG4gICAgY2FsY3VsYXRlZFByb2ZpbGVNb2Rlcy5mb3JFYWNoKChtb2RlczogRml4dHVyZU1vZGVbXSwgcHJvZmlsZTogRml4dHVyZVByb2ZpbGUpID0+IHtcbiAgICAgIGNvbnN0IHByb2ZpbGVDaGFubmVsczogQ2FjaGVkRml4dHVyZUNoYW5uZWxbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBtb2RlIG9mIG1vZGVzKSB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWxzID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDYWNoZWRDaGFubmVscyhwcm9maWxlLCBtb2RlKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGNoYW5uZWxzKSB7XG4gICAgICAgICAgLy8gb25seSBhZGQgdGhlIGNoYW5uZWwsIGlmIG5vIGNoYW5uZWwgd2l0aCB0aGUgc2FtZSBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWRcbiAgICAgICAgICAvLyAoZS5nLiBhIGZpbmUgY2hhbm5lbClcbiAgICAgICAgICBpZiAoY2hhbm5lbC5jaGFubmVsICYmICFwcm9maWxlQ2hhbm5lbHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjaGFubmVsLm5hbWUpKSB7XG4gICAgICAgICAgICBwcm9maWxlQ2hhbm5lbHMucHVzaChjaGFubmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF2YWlsYWJsZUNoYW5uZWxzLnNldChwcm9maWxlLCBwcm9maWxlQ2hhbm5lbHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF2YWlsYWJsZUNoYW5uZWxzO1xuICB9XG5cbiAgcHJldmlld0xpdmUoY29tcG9zaXRpb25OYW1lOiBzdHJpbmcgPSAnJywgcG9zaXRpb25NaWxsaXM/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnU2VydmljZS5saXZlUHJldmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNvbGxlY3QgYWxsIGNoYW5nZXMgYW5kIGRlbGF5IHRoZW0gdG8gbm90IGZsb29kIHRoZSBiYWNrZW5kXG4gICAgLy8gKGV4Y2VwdCBwbGF5IGV2ZW50cy4gdGhleSBuZWVkIHRvIGJlIGRlbGl2ZXJlZCBhbHdheXMpXG4gICAgaWYgKHRoaXMubGl2ZVByZXZpZXdUaW1lciAmJiAhY29tcG9zaXRpb25OYW1lKSB7XG4gICAgICB0aGlzLmxpdmVDaGFuZ2VQZW5kaW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcG9zaXRpb24gPSBwb3NpdGlvbk1pbGxpcztcblxuICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwb3NpdGlvbiA9IE1hdGgucm91bmQodGhpcy5hbmltYXRpb25TZXJ2aWNlLnRpbWVNaWxsaXMpO1xuICAgIH1cblxuICAgIHRoaXMuaHR0cFxuICAgICAgLnBvc3QoJ3ByZXZpZXc/cG9zaXRpb25NaWxsaXM9JyArIHBvc2l0aW9uICsgJyZjb21wb3NpdGlvbk5hbWU9JyArIGNvbXBvc2l0aW9uTmFtZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0KSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubGl2ZUNoYW5nZVBlbmRpbmcgPSBmYWxzZTtcblxuICAgIGlmICghY29tcG9zaXRpb25OYW1lKSB7XG4gICAgICB0aGlzLmxpdmVQcmV2aWV3VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5saXZlUHJldmlld1RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5saXZlQ2hhbmdlUGVuZGluZykge1xuICAgICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3QoJ3ByZXZpZXc/cG9zaXRpb25NaWxsaXM9JyArIHBvc2l0aW9uICsgJyZjb21wb3NpdGlvbk5hbWU9JyArIGNvbXBvc2l0aW9uTmFtZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgfSwgNTApO1xuICAgIH1cbiAgfVxuXG4gIHN0b3BQcmV2aWV3UGxheSgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnU2VydmljZS5saXZlUHJldmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaHR0cC5wb3N0KCdzdG9wLXByZXZpZXctcGxheScsIG51bGwpLnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=