angular-three-soba 2.0.0-beta.2 → 2.0.0-beta.21

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 (321) hide show
  1. package/abstractions/billboard/billboard.d.ts +11 -7
  2. package/abstractions/detailed/detailed.d.ts +26 -0
  3. package/abstractions/edges/edges.d.ts +24 -12
  4. package/abstractions/grid/grid.d.ts +50 -0
  5. package/abstractions/index.d.ts +2 -7
  6. package/abstractions/text/text.d.ts +10 -5
  7. package/abstractions/text-3d/text-3d.d.ts +51 -41
  8. package/cameras/camera/camera-content.d.ts +1 -1
  9. package/cameras/camera/camera.d.ts +16 -13
  10. package/cameras/cube-camera/cube-camera.d.ts +50 -23
  11. package/cameras/index.d.ts +0 -1
  12. package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
  13. package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
  14. package/controls/orbit-controls/orbit-controls.d.ts +31 -12
  15. package/esm2022/abstractions/billboard/billboard.mjs +36 -33
  16. package/esm2022/abstractions/detailed/detailed.mjs +64 -0
  17. package/esm2022/abstractions/edges/edges.mjs +58 -63
  18. package/esm2022/abstractions/grid/grid.mjs +180 -0
  19. package/esm2022/abstractions/index.mjs +3 -8
  20. package/esm2022/abstractions/text/text.mjs +123 -124
  21. package/esm2022/abstractions/text-3d/text-3d.mjs +120 -115
  22. package/esm2022/cameras/camera/camera-content.mjs +6 -6
  23. package/esm2022/cameras/camera/camera.mjs +48 -42
  24. package/esm2022/cameras/cube-camera/cube-camera.mjs +129 -99
  25. package/esm2022/cameras/index.mjs +1 -2
  26. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
  27. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
  28. package/esm2022/controls/orbit-controls/orbit-controls.mjs +105 -85
  29. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +5 -0
  30. package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +197 -0
  31. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +31 -0
  32. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +93 -0
  33. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +150 -0
  34. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +66 -0
  35. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +71 -0
  36. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +195 -0
  37. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +272 -0
  38. package/esm2022/gizmos/index.mjs +4 -0
  39. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
  40. package/esm2022/loaders/loader/loader.mjs +92 -87
  41. package/esm2022/loaders/progress/progress.mjs +29 -29
  42. package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
  43. package/esm2022/materials/index.mjs +2 -1
  44. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
  45. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
  46. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +102 -99
  47. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
  48. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
  49. package/esm2022/materials/point-material/point-material.mjs +50 -0
  50. package/esm2022/misc/animations/animations.mjs +36 -32
  51. package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
  52. package/esm2022/misc/caustics/caustics.mjs +387 -0
  53. package/esm2022/misc/decal/decal.mjs +187 -0
  54. package/esm2022/misc/depth-buffer/depth-buffer.mjs +33 -35
  55. package/esm2022/misc/example/example.mjs +160 -0
  56. package/esm2022/misc/fbo/fbo.mjs +35 -35
  57. package/esm2022/misc/html/html-wrapper.mjs +478 -0
  58. package/esm2022/misc/html/html.mjs +304 -0
  59. package/esm2022/misc/index.mjs +10 -1
  60. package/esm2022/misc/sampler/sampler.mjs +142 -0
  61. package/esm2022/misc/shadow/shadow.mjs +111 -0
  62. package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
  63. package/esm2022/misc/trail/trail.mjs +209 -0
  64. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
  65. package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
  66. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
  67. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
  68. package/esm2022/modifiers/index.mjs +2 -0
  69. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
  70. package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
  71. package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
  72. package/esm2022/performances/index.mjs +8 -0
  73. package/esm2022/performances/instances/instances.mjs +220 -0
  74. package/esm2022/performances/instances/position-mesh.mjs +52 -0
  75. package/esm2022/performances/points/points-input.mjs +64 -0
  76. package/esm2022/performances/points/points.mjs +326 -0
  77. package/esm2022/performances/points/position-point.mjs +54 -0
  78. package/esm2022/performances/segments/segment-object.mjs +9 -0
  79. package/esm2022/performances/segments/segments.mjs +182 -0
  80. package/esm2022/shaders/blur-pass/blur-pass.mjs +2 -2
  81. package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
  82. package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
  83. package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
  84. package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
  85. package/esm2022/shaders/grid-material/grid-material.mjs +77 -0
  86. package/esm2022/shaders/index.mjs +6 -3
  87. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
  88. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +2 -2
  89. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +2 -2
  90. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -4
  91. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
  92. package/esm2022/shaders/shader-material/shader-material.mjs +1 -1
  93. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +17 -25
  94. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
  95. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -7
  96. package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
  97. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
  98. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +160 -176
  99. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
  100. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
  101. package/esm2022/staging/backdrop/backdrop.mjs +77 -0
  102. package/esm2022/staging/bb-anchor/bb-anchor.mjs +69 -0
  103. package/esm2022/staging/bounds/bounds.mjs +144 -143
  104. package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
  105. package/esm2022/staging/center/center.mjs +129 -112
  106. package/esm2022/staging/cloud/cloud.mjs +118 -124
  107. package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -134
  108. package/esm2022/staging/environment/assets.mjs +12 -12
  109. package/esm2022/staging/environment/environment-cube.mjs +28 -30
  110. package/esm2022/staging/environment/environment-ground.mjs +17 -19
  111. package/esm2022/staging/environment/environment-input.mjs +98 -85
  112. package/esm2022/staging/environment/environment-map.mjs +33 -33
  113. package/esm2022/staging/environment/environment-portal.mjs +75 -97
  114. package/esm2022/staging/environment/environment.mjs +34 -51
  115. package/esm2022/staging/environment/utils.mjs +37 -15
  116. package/esm2022/staging/float/float.mjs +70 -58
  117. package/esm2022/staging/index.mjs +7 -3
  118. package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
  119. package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
  120. package/esm2022/staging/sky/sky.mjs +85 -80
  121. package/esm2022/staging/sparkles/sparkles.mjs +108 -105
  122. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
  123. package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
  124. package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
  125. package/esm2022/staging/spot-light/spot-light.mjs +51 -64
  126. package/esm2022/staging/spot-light/volumetric-mesh.mjs +67 -70
  127. package/esm2022/staging/stage/stage.mjs +305 -290
  128. package/esm2022/staging/stars/stars.mjs +101 -102
  129. package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
  130. package/esm2022/staging/wireframe/wireframe.mjs +228 -0
  131. package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
  132. package/esm2022/utils/content/content.mjs +15 -0
  133. package/esm2022/utils/index.mjs +2 -0
  134. package/fesm2022/angular-three-soba-abstractions.mjs +514 -1947
  135. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  136. package/fesm2022/angular-three-soba-cameras.mjs +302 -259
  137. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  138. package/fesm2022/angular-three-soba-controls.mjs +104 -83
  139. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  140. package/fesm2022/angular-three-soba-gizmos.mjs +1043 -0
  141. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -0
  142. package/fesm2022/angular-three-soba-loaders.mjs +121 -117
  143. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  144. package/fesm2022/angular-three-soba-materials.mjs +662 -592
  145. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  146. package/fesm2022/angular-three-soba-misc.mjs +2214 -105
  147. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  148. package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
  149. package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
  150. package/fesm2022/angular-three-soba-performances.mjs +956 -0
  151. package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
  152. package/fesm2022/angular-three-soba-shaders.mjs +549 -252
  153. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  154. package/fesm2022/angular-three-soba-staging.mjs +2899 -2563
  155. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  156. package/fesm2022/angular-three-soba-utils.mjs +22 -0
  157. package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
  158. package/gizmos/README.md +3 -0
  159. package/gizmos/gizmo-helper/gizmo-helper.d.ts +69 -0
  160. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +22 -0
  161. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +29 -0
  162. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +33 -0
  163. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +10 -0
  164. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +40 -0
  165. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +30 -0
  166. package/gizmos/index.d.ts +3 -0
  167. package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
  168. package/loaders/loader/loader.d.ts +19 -17
  169. package/loaders/progress/progress.d.ts +1 -1
  170. package/loaders/texture-loader/texture-loader.d.ts +2 -2
  171. package/materials/index.d.ts +1 -0
  172. package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
  173. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
  174. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
  175. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
  176. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
  177. package/materials/point-material/point-material.d.ts +24 -0
  178. package/metadata.json +1 -0
  179. package/misc/animations/animations.d.ts +6 -4
  180. package/misc/caustics/caustics.d.ts +87 -0
  181. package/misc/decal/decal.d.ts +49 -0
  182. package/misc/depth-buffer/depth-buffer.d.ts +2 -2
  183. package/misc/example/example.d.ts +81 -0
  184. package/misc/fbo/fbo.d.ts +2 -2
  185. package/misc/html/html-wrapper.d.ts +559 -0
  186. package/misc/html/html.d.ts +214 -0
  187. package/misc/index.d.ts +9 -0
  188. package/misc/sampler/sampler.d.ts +67 -0
  189. package/misc/shadow/shadow.d.ts +37 -0
  190. package/misc/stats-gl/stats-gl.d.ts +24 -0
  191. package/misc/trail/trail.d.ts +57 -0
  192. package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
  193. package/misc/trail-texture/trail-texture.d.ts +50 -0
  194. package/modifiers/README.md +3 -0
  195. package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
  196. package/modifiers/index.d.ts +1 -0
  197. package/package.json +31 -16
  198. package/performances/README.md +3 -0
  199. package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
  200. package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
  201. package/performances/index.d.ts +7 -0
  202. package/performances/instances/instances.d.ts +79 -0
  203. package/{performance → performances}/instances/position-mesh.d.ts +1 -1
  204. package/performances/points/points-input.d.ts +32 -0
  205. package/performances/points/points.d.ts +92 -0
  206. package/performances/points/position-point.d.ts +11 -0
  207. package/performances/segments/segment-object.d.ts +7 -0
  208. package/performances/segments/segments.d.ts +124 -0
  209. package/shaders/grid-material/grid-material.d.ts +37 -0
  210. package/shaders/index.d.ts +5 -2
  211. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +147 -2
  212. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
  213. package/shaders/shader-material/shader-material.d.ts +2 -2
  214. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
  215. package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
  216. package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
  217. package/shaders/star-field-material/star-field-material.d.ts +11 -1
  218. package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
  219. package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
  220. package/staging/accumulative-shadows/randomized-lights.d.ts +40 -27
  221. package/staging/backdrop/backdrop.d.ts +30 -0
  222. package/staging/bb-anchor/bb-anchor.d.ts +27 -0
  223. package/staging/bounds/bounds.d.ts +100 -24
  224. package/staging/camera-shake/camera-shake.d.ts +30 -19
  225. package/staging/center/center.d.ts +43 -35
  226. package/staging/cloud/cloud.d.ts +26 -23
  227. package/staging/contact-shadows/contact-shadows.d.ts +41 -28
  228. package/staging/environment/assets.d.ts +9 -9
  229. package/staging/environment/environment-cube.d.ts +9 -5
  230. package/staging/environment/environment-ground.d.ts +7 -7
  231. package/staging/environment/environment-input.d.ts +37 -37
  232. package/staging/environment/environment-map.d.ts +10 -5
  233. package/staging/environment/environment-portal.d.ts +10 -5
  234. package/staging/environment/environment.d.ts +0 -4
  235. package/staging/environment/utils.d.ts +2 -2
  236. package/staging/float/float.d.ts +14 -10
  237. package/staging/index.d.ts +6 -2
  238. package/staging/matcap-texture/matcap-texture.d.ts +13 -0
  239. package/staging/normal-texture/normal-texture.d.ts +16 -0
  240. package/staging/sky/sky.d.ts +28 -21
  241. package/staging/sparkles/sparkles.d.ts +36 -22
  242. package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
  243. package/staging/spot-light/shadow-mesh.d.ts +37 -0
  244. package/staging/spot-light/spot-light-input.d.ts +25 -25
  245. package/staging/spot-light/spot-light.d.ts +31 -15
  246. package/staging/spot-light/volumetric-mesh.d.ts +15 -9
  247. package/staging/stage/stage.d.ts +89 -65
  248. package/staging/stars/stars.d.ts +28 -17
  249. package/staging/wireframe/wireframe-input.d.ts +65 -0
  250. package/staging/wireframe/wireframe.d.ts +28 -0
  251. package/utils/README.md +3 -0
  252. package/utils/content/content.d.ts +8 -0
  253. package/utils/index.d.ts +1 -0
  254. package/web-types.json +1 -0
  255. package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
  256. package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
  257. package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
  258. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  259. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
  260. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
  261. package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
  262. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
  263. package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
  264. package/abstractions/line/line-input.d.ts +0 -42
  265. package/abstractions/line/line.d.ts +0 -35
  266. package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
  267. package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
  268. package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
  269. package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
  270. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  271. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
  272. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
  273. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
  274. package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
  275. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
  276. package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
  277. package/esm2022/abstractions/line/line-input.mjs +0 -113
  278. package/esm2022/abstractions/line/line.mjs +0 -165
  279. package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
  280. package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
  281. package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
  282. package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
  283. package/esm2022/performance/detailed/detailed.mjs +0 -61
  284. package/esm2022/performance/index.mjs +0 -7
  285. package/esm2022/performance/instances/instance.mjs +0 -48
  286. package/esm2022/performance/instances/instances.mjs +0 -189
  287. package/esm2022/performance/instances/position-mesh.mjs +0 -52
  288. package/esm2022/performance/stats/stats.mjs +0 -79
  289. package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
  290. package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
  291. package/esm2022/staging/caustics/caustisc.mjs +0 -384
  292. package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
  293. package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -256
  294. package/fesm2022/angular-three-soba-performance.mjs +0 -487
  295. package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
  296. package/performance/README.md +0 -3
  297. package/performance/adaptive/adaptive-dpr.d.ts +0 -8
  298. package/performance/detailed/detailed.d.ts +0 -20
  299. package/performance/index.d.ts +0 -6
  300. package/performance/instances/instance.d.ts +0 -9
  301. package/performance/instances/instances.d.ts +0 -35
  302. package/performance/stats/stats.d.ts +0 -18
  303. package/plugin/generators.json +0 -19
  304. package/plugin/libs/plugin/README.md +0 -11
  305. package/plugin/package.json +0 -9
  306. package/plugin/src/generators/init/compat.d.ts +0 -2
  307. package/plugin/src/generators/init/compat.js +0 -6
  308. package/plugin/src/generators/init/compat.js.map +0 -1
  309. package/plugin/src/generators/init/init.d.ts +0 -4
  310. package/plugin/src/generators/init/init.js +0 -22
  311. package/plugin/src/generators/init/init.js.map +0 -1
  312. package/plugin/src/generators/init/schema.json +0 -6
  313. package/plugin/src/index.d.ts +0 -1
  314. package/plugin/src/index.js +0 -6
  315. package/plugin/src/index.js.map +0 -1
  316. package/staging/caustics/caustisc.d.ts +0 -70
  317. package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
  318. package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
  319. /package/{abstractions → gizmos}/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -0
  320. /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
  321. /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
@@ -1,68 +1,58 @@
1
- import { CUSTOM_ELEMENTS_SCHEMA, Component, InjectionToken, Input, computed, effect, inject, untracked, } from '@angular/core';
2
- import { NgtSignalStore, NgtStore, extend, getLocalState, injectBeforeRender, injectNgtRef, requestAnimationInInjectionContext, } from 'angular-three';
1
+ import { CUSTOM_ELEMENTS_SCHEMA, Component, Input, computed, effect, forwardRef, untracked, } from '@angular/core';
2
+ import { createInjectionToken, extend, getLocalState, injectBeforeRender, injectNgtRef, injectNgtStore, signalStore, } from 'angular-three';
3
3
  import { SoftShadowMaterial } from 'angular-three-soba/shaders';
4
4
  import { Group, Mesh, PlaneGeometry } from 'three';
5
5
  import { ProgressiveLightMap } from './progressive-light-map';
6
6
  import * as i0 from "@angular/core";
7
- extend({ SoftShadowMaterial, Group, Mesh, PlaneGeometry });
8
- export const NGTS_ACCUMULATIVE_SHADOWS_API = new InjectionToken('NgtsAccumulativeShadows API');
9
- class NgtsAccumulativeShadows extends NgtSignalStore {
7
+ extend({ Group, SoftShadowMaterial, Mesh, PlaneGeometry });
8
+ export const [injectNgtsAccumulativeShadowsApi, provideNgtsAccumulativeShadowsApi] = createInjectionToken((shadows) => shadows.api, { isRoot: false, deps: [forwardRef(() => NgtsAccumulativeShadows)] });
9
+ export class NgtsAccumulativeShadows {
10
10
  /** How many frames it can render, more yields cleaner results but takes more time, 40 */
11
- set frames(frames) {
12
- this.set({ frames });
11
+ set _frames(frames) {
12
+ this.inputs.set({ frames });
13
13
  }
14
14
  /** If frames === Infinity blend controls the refresh ratio, 100 */
15
- set blend(blend) {
16
- this.set({ blend });
15
+ set _blend(blend) {
16
+ this.inputs.set({ blend });
17
17
  }
18
18
  /** Can limit the amount of frames rendered if frames === Infinity, usually to get some performance back once a movable scene has settled, Infinity */
19
- set limit(limit) {
20
- this.set({ limit });
19
+ set _limit(limit) {
20
+ this.inputs.set({ limit });
21
21
  }
22
22
  /** Scale of the plane, */
23
- set scale(scale) {
24
- this.set({ scale });
23
+ set _scale(scale) {
24
+ this.inputs.set({ scale });
25
25
  }
26
26
  /** Temporal accumulates shadows over time which is more performant but has a visual regression over instant results, false */
27
- set temporal(temporal) {
28
- this.set({ temporal });
27
+ set _temporal(temporal) {
28
+ this.inputs.set({ temporal });
29
29
  }
30
30
  /** Opacity of the plane, 1 */
31
- set opacity(opacity) {
32
- this.set({ opacity });
31
+ set _opacity(opacity) {
32
+ this.inputs.set({ opacity });
33
33
  }
34
34
  /** Discards alpha pixels, 0.65 */
35
- set alphaTest(alphaTest) {
36
- this.set({ alphaTest });
35
+ set _alphaTest(alphaTest) {
36
+ this.inputs.set({ alphaTest });
37
37
  }
38
38
  /** Shadow color, black */
39
- set color(color) {
40
- this.set({ color });
39
+ set _color(color) {
40
+ this.inputs.set({ color });
41
41
  }
42
42
  /** Colorblend, how much colors turn to black, 0 is black, 2 */
43
- set colorBlend(colorBlend) {
44
- this.set({ colorBlend });
43
+ set _colorBlend(colorBlend) {
44
+ this.inputs.set({ colorBlend });
45
45
  }
46
46
  /** Buffer resolution, 1024 */
47
- set resolution(resolution) {
48
- this.set({ resolution });
47
+ set _resolution(resolution) {
48
+ this.inputs.set({ resolution });
49
49
  }
50
50
  /** Texture tonemapping */
51
- set toneMapped(toneMapped) {
52
- this.set({ toneMapped });
51
+ set _toneMapped(toneMapped) {
52
+ this.inputs.set({ toneMapped });
53
53
  }
54
- #store;
55
- #gl;
56
- #scene;
57
- #camera;
58
- #resolution;
59
- #temporal;
60
- #blend;
61
- #frames;
62
- #opacity;
63
- #alphaTest;
64
54
  constructor() {
65
- super({
55
+ this.inputs = signalStore({
66
56
  frames: 40,
67
57
  limit: Infinity,
68
58
  blend: 20,
@@ -77,33 +67,40 @@ class NgtsAccumulativeShadows extends NgtSignalStore {
77
67
  });
78
68
  this.nullTraverse = () => null;
79
69
  this.Math = Math;
80
- this.#store = inject(NgtStore);
81
- this.#gl = this.#store.select('gl');
82
- this.#scene = this.#store.select('scene');
83
- this.#camera = this.#store.select('camera');
84
- this.#resolution = this.select('resolution');
85
- this.#temporal = this.select('temporal');
86
- this.#blend = this.select('blend');
87
- this.#frames = this.select('frames');
88
- this.#opacity = this.select('opacity');
89
- this.#alphaTest = this.select('alphaTest');
90
- this.accumulativeShadowsScale = this.select('scale');
91
- this.accumulativeShadowsToneMapped = this.select('toneMapped');
92
- this.accumulativeShadowsColor = this.select('color');
93
- this.accumulativeShadowsColorBlend = this.select('colorBlend');
94
- this.meshRef = injectNgtRef();
95
70
  this.accumulativeShadowsRef = injectNgtRef();
96
- this.pLM = computed(() => new ProgressiveLightMap(untracked(this.#gl), untracked(this.#scene), this.#resolution()));
71
+ this.meshRef = injectNgtRef();
72
+ this.store = injectNgtStore();
73
+ this.gl = this.store.select('gl');
74
+ this.scene = this.store.select('scene');
75
+ this.camera = this.store.select('camera');
76
+ this.invalidate = this.store.select('invalidate');
77
+ this.resolution = this.inputs.select('resolution');
78
+ this.alphaTest = this.inputs.select('alphaTest');
79
+ this.opacity = this.inputs.select('opacity');
80
+ this.temporal = this.inputs.select('temporal');
81
+ this.blend = this.inputs.select('blend');
82
+ this.frames = this.inputs.select('frames');
83
+ this.pLM = computed(() => new ProgressiveLightMap(untracked(this.gl), untracked(this.scene), this.resolution()));
84
+ this.scale = this.inputs.select('scale');
85
+ this.toneMapped = this.inputs.select('toneMapped');
86
+ this.color = this.inputs.select('color');
87
+ this.colorBlend = this.inputs.select('colorBlend');
88
+ this.map = computed(() => this.pLM().progressiveLightMap2.texture);
97
89
  this.api = computed(() => {
98
- const pLM = this.pLM();
99
- const alphaTest = this.#alphaTest();
100
- const opacity = this.#opacity();
101
- const camera = this.#camera();
102
- return {
90
+ const [pLM, alphaTest, opacity, camera, temporal, blend, frames] = [
91
+ this.pLM(),
92
+ this.alphaTest(),
93
+ this.opacity(),
94
+ this.camera(),
95
+ this.temporal(),
96
+ this.blend(),
97
+ this.frames(),
98
+ ];
99
+ const api = {
103
100
  lights: new Map(),
104
- temporal: this.#temporal(),
105
- frames: Math.max(2, this.#frames()),
106
- blend: Math.max(2, this.#frames() === Infinity ? this.#blend() : this.#frames()),
101
+ temporal,
102
+ frames: Math.max(2, frames),
103
+ blend: Math.max(2, frames === Infinity ? blend : frames),
107
104
  count: 0,
108
105
  getMesh: () => this.meshRef.nativeElement,
109
106
  reset: () => {
@@ -114,20 +111,20 @@ class NgtsAccumulativeShadows extends NgtSignalStore {
114
111
  const material = this.meshRef.nativeElement.material;
115
112
  material.opacity = 0;
116
113
  material.alphaTest = 0;
117
- this.api().count = 0;
114
+ api.count = 0;
118
115
  },
119
116
  update: (frames = 1) => {
120
117
  if (!this.meshRef.nativeElement)
121
118
  return;
122
119
  // Adapt the opacity-blend ratio to the number of frames
123
120
  const material = this.meshRef.nativeElement.material;
124
- if (!this.api().temporal) {
121
+ if (!api.temporal) {
125
122
  material.opacity = opacity;
126
123
  material.alphaTest = alphaTest;
127
124
  }
128
125
  else {
129
- material.opacity = Math.min(opacity, material.opacity + opacity / this.api().blend);
130
- material.alphaTest = Math.min(alphaTest, material.alphaTest + alphaTest / this.api().blend);
126
+ material.opacity = Math.min(opacity, material.opacity + opacity / api.blend);
127
+ material.alphaTest = Math.min(alphaTest, material.alphaTest + alphaTest / api.blend);
131
128
  }
132
129
  // Switch accumulative lights on
133
130
  this.accumulativeShadowsRef.nativeElement.visible = true;
@@ -135,8 +132,8 @@ class NgtsAccumulativeShadows extends NgtSignalStore {
135
132
  pLM.prepare();
136
133
  // Update the lightmap and the accumulative lights
137
134
  for (let i = 0; i < frames; i++) {
138
- this.api().lights.forEach((light) => light().update());
139
- pLM.update(camera, this.api().blend);
135
+ api.lights.forEach((light) => light().update());
136
+ pLM.update(camera, api.blend);
140
137
  }
141
138
  // Switch lights off
142
139
  this.accumulativeShadowsRef.nativeElement.visible = false;
@@ -144,40 +141,27 @@ class NgtsAccumulativeShadows extends NgtSignalStore {
144
141
  pLM.finish();
145
142
  },
146
143
  };
144
+ return api;
147
145
  });
148
- requestAnimationInInjectionContext(() => {
149
- this.#configure();
150
- this.#resetAndUpdate();
151
- });
152
- injectBeforeRender(this.#onBeforeRender.bind(this));
153
- }
154
- #onBeforeRender() {
155
- const invalidate = this.#store.get('invalidate');
156
- const limit = this.get('limit');
157
- const api = this.api();
158
- if ((api.temporal || api.frames === Infinity) && api.count < api.frames && api.count < limit) {
159
- invalidate();
160
- api.update();
161
- api.count++;
162
- }
146
+ this.configure();
147
+ this.resetAndUpdate();
148
+ this.beforeRender();
163
149
  }
164
- #configure() {
165
- const trigger = computed(() => ({ pLM: this.pLM(), mesh: this.meshRef.nativeElement }));
150
+ configure() {
166
151
  effect(() => {
167
- const { pLM, mesh } = trigger();
152
+ const [pLM, mesh] = [this.pLM(), this.meshRef.nativeElement];
168
153
  if (!mesh)
169
154
  return;
170
155
  pLM.configure(mesh);
171
156
  });
172
157
  }
173
- #resetAndUpdate() {
174
- const trigger = computed(() => ({
175
- state: this.select()(),
176
- objects: getLocalState(this.#store.get('scene')).objects(),
177
- mesh: this.meshRef.nativeElement,
178
- }));
158
+ resetAndUpdate() {
179
159
  effect(() => {
180
- const { mesh } = trigger();
160
+ const [, , mesh] = [
161
+ this.inputs.state(),
162
+ getLocalState(untracked(this.scene)).objects(),
163
+ this.meshRef.nativeElement,
164
+ ];
181
165
  if (!mesh)
182
166
  return;
183
167
  const api = untracked(this.api);
@@ -188,96 +172,96 @@ class NgtsAccumulativeShadows extends NgtSignalStore {
188
172
  api.update(api.blend);
189
173
  });
190
174
  }
191
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAccumulativeShadows, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
192
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.0", type: NgtsAccumulativeShadows, isStandalone: true, selector: "ngts-accumulative-shadows", inputs: { frames: "frames", blend: "blend", limit: "limit", scale: "scale", temporal: "temporal", opacity: "opacity", alphaTest: "alphaTest", color: "color", colorBlend: "colorBlend", resolution: "resolution", toneMapped: "toneMapped" }, providers: [
193
- {
194
- provide: NGTS_ACCUMULATIVE_SHADOWS_API,
195
- useFactory: (shadows) => shadows.api,
196
- deps: [NgtsAccumulativeShadows],
197
- },
198
- ], usesInheritance: true, ngImport: i0, template: `
199
- <ngt-group ngtCompound>
200
- <ngt-group [ref]="accumulativeShadowsRef" [traverse]="nullTraverse">
201
- <ng-content />
202
- </ngt-group>
203
- <ngt-mesh
204
- [ref]="meshRef"
205
- [receiveShadow]="true"
206
- [scale]="accumulativeShadowsScale()"
207
- [rotation]="[-Math.PI / 2, 0, 0]"
208
- >
209
- <ngt-plane-geometry />
210
- <ngt-soft-shadow-material
211
- [transparent]="true"
212
- [depthWrite]="false"
213
- [toneMapped]="accumulativeShadowsToneMapped()"
214
- [color]="accumulativeShadowsColor()"
215
- [blend]="accumulativeShadowsColorBlend()"
216
- [map]="pLM().progressiveLightMap2.texture"
217
- />
218
- </ngt-mesh>
219
- </ngt-group>
220
- `, isInline: true }); }
175
+ beforeRender() {
176
+ injectBeforeRender(() => {
177
+ const [api, limit] = [this.api(), this.inputs.get('limit')];
178
+ if ((api.temporal || api.frames === Infinity) && api.count < api.frames && api.count < limit) {
179
+ this.invalidate();
180
+ api.update();
181
+ api.count++;
182
+ }
183
+ });
184
+ }
185
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsAccumulativeShadows, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
186
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtsAccumulativeShadows, isStandalone: true, selector: "ngts-accumulative-shadows", inputs: { accumulativeShadowsRef: "accumulativeShadowsRef", _frames: ["frames", "_frames"], _blend: ["blend", "_blend"], _limit: ["limit", "_limit"], _scale: ["scale", "_scale"], _temporal: ["temporal", "_temporal"], _opacity: ["opacity", "_opacity"], _alphaTest: ["alphaTest", "_alphaTest"], _color: ["color", "_color"], _colorBlend: ["colorBlend", "_colorBlend"], _resolution: ["resolution", "_resolution"], _toneMapped: ["toneMapped", "_toneMapped"] }, providers: [provideNgtsAccumulativeShadowsApi()], ngImport: i0, template: `
187
+ <ngt-group ngtCompound>
188
+ <ngt-group [traverse]="nullTraverse" [ref]="accumulativeShadowsRef">
189
+ <ng-content />
190
+ </ngt-group>
191
+ <ngt-mesh [receiveShadow]="true" [ref]="meshRef" [scale]="scale()" [rotation]="[-Math.PI / 2, 0, 0]">
192
+ <ngt-plane-geometry />
193
+ <ngt-soft-shadow-material
194
+ [transparent]="true"
195
+ [depthWrite]="false"
196
+ [toneMapped]="toneMapped()"
197
+ [color]="color()"
198
+ [blend]="colorBlend()"
199
+ [map]="map()"
200
+ />
201
+ </ngt-mesh>
202
+ </ngt-group>
203
+ `, isInline: true }); }
221
204
  }
222
- export { NgtsAccumulativeShadows };
223
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.0", ngImport: i0, type: NgtsAccumulativeShadows, decorators: [{
205
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtsAccumulativeShadows, decorators: [{
224
206
  type: Component,
225
207
  args: [{
226
208
  selector: 'ngts-accumulative-shadows',
227
209
  standalone: true,
228
210
  template: `
229
- <ngt-group ngtCompound>
230
- <ngt-group [ref]="accumulativeShadowsRef" [traverse]="nullTraverse">
231
- <ng-content />
232
- </ngt-group>
233
- <ngt-mesh
234
- [ref]="meshRef"
235
- [receiveShadow]="true"
236
- [scale]="accumulativeShadowsScale()"
237
- [rotation]="[-Math.PI / 2, 0, 0]"
238
- >
239
- <ngt-plane-geometry />
240
- <ngt-soft-shadow-material
241
- [transparent]="true"
242
- [depthWrite]="false"
243
- [toneMapped]="accumulativeShadowsToneMapped()"
244
- [color]="accumulativeShadowsColor()"
245
- [blend]="accumulativeShadowsColorBlend()"
246
- [map]="pLM().progressiveLightMap2.texture"
247
- />
248
- </ngt-mesh>
249
- </ngt-group>
250
- `,
251
- providers: [
252
- {
253
- provide: NGTS_ACCUMULATIVE_SHADOWS_API,
254
- useFactory: (shadows) => shadows.api,
255
- deps: [NgtsAccumulativeShadows],
256
- },
257
- ],
211
+ <ngt-group ngtCompound>
212
+ <ngt-group [traverse]="nullTraverse" [ref]="accumulativeShadowsRef">
213
+ <ng-content />
214
+ </ngt-group>
215
+ <ngt-mesh [receiveShadow]="true" [ref]="meshRef" [scale]="scale()" [rotation]="[-Math.PI / 2, 0, 0]">
216
+ <ngt-plane-geometry />
217
+ <ngt-soft-shadow-material
218
+ [transparent]="true"
219
+ [depthWrite]="false"
220
+ [toneMapped]="toneMapped()"
221
+ [color]="color()"
222
+ [blend]="colorBlend()"
223
+ [map]="map()"
224
+ />
225
+ </ngt-mesh>
226
+ </ngt-group>
227
+ `,
228
+ providers: [provideNgtsAccumulativeShadowsApi()],
258
229
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
259
230
  }]
260
- }], ctorParameters: function () { return []; }, propDecorators: { frames: [{
261
- type: Input
262
- }], blend: [{
263
- type: Input
264
- }], limit: [{
265
- type: Input
266
- }], scale: [{
267
- type: Input
268
- }], temporal: [{
269
- type: Input
270
- }], opacity: [{
271
- type: Input
272
- }], alphaTest: [{
273
- type: Input
274
- }], color: [{
275
- type: Input
276
- }], colorBlend: [{
277
- type: Input
278
- }], resolution: [{
279
- type: Input
280
- }], toneMapped: [{
231
+ }], ctorParameters: function () { return []; }, propDecorators: { accumulativeShadowsRef: [{
281
232
  type: Input
233
+ }], _frames: [{
234
+ type: Input,
235
+ args: [{ alias: 'frames' }]
236
+ }], _blend: [{
237
+ type: Input,
238
+ args: [{ alias: 'blend' }]
239
+ }], _limit: [{
240
+ type: Input,
241
+ args: [{ alias: 'limit' }]
242
+ }], _scale: [{
243
+ type: Input,
244
+ args: [{ alias: 'scale' }]
245
+ }], _temporal: [{
246
+ type: Input,
247
+ args: [{ alias: 'temporal' }]
248
+ }], _opacity: [{
249
+ type: Input,
250
+ args: [{ alias: 'opacity' }]
251
+ }], _alphaTest: [{
252
+ type: Input,
253
+ args: [{ alias: 'alphaTest' }]
254
+ }], _color: [{
255
+ type: Input,
256
+ args: [{ alias: 'color' }]
257
+ }], _colorBlend: [{
258
+ type: Input,
259
+ args: [{ alias: 'colorBlend' }]
260
+ }], _resolution: [{
261
+ type: Input,
262
+ args: [{ alias: 'resolution' }]
263
+ }], _toneMapped: [{
264
+ type: Input,
265
+ args: [{ alias: 'toneMapped' }]
282
266
  }] } });
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0aXZlLXNoYWRvd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvYWNjdW11bGF0aXZlLXNoYWRvd3MvYWNjdW11bGF0aXZlLXNoYWRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsY0FBYyxFQUNkLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGNBQWMsRUFDZCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGtDQUFrQyxHQUVyQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQTRCLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUU5RCxNQUFNLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7QUF3QzNELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLElBQUksY0FBYyxDQUMzRCw2QkFBNkIsQ0FDaEMsQ0FBQztBQVFGLE1BbUNhLHVCQUF3QixTQUFRLGNBQTRDO0lBSXJGLHlGQUF5RjtJQUN6RixJQUFhLE1BQU0sQ0FBQyxNQUFjO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxtRUFBbUU7SUFDbkUsSUFBYSxLQUFLLENBQUMsS0FBYTtRQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FB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b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXNCVDtvQkFDRCxTQUFTLEVBQUU7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLDZCQUE2Qjs0QkFDdEMsVUFBVSxFQUFFLENBQUMsT0FBZ0MsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUc7NEJBQzdELElBQUksRUFBRSx5QkFBeUI7eUJBQ2xDO3FCQUNKO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFNZ0IsTUFBTTtzQkFBbEIsS0FBSztnQkFLTyxLQUFLO3NCQUFqQixLQUFLO2dCQUtPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBS08sS0FBSztzQkFBakIsS0FBSztnQkFLTyxRQUFRO3NCQUFwQixLQUFLO2dCQUtPLE9BQU87c0JBQW5CLEtBQUs7Z0JBS08sU0FBUztzQkFBckIsS0FBSztnQkFLTyxLQUFLO3NCQUFqQixLQUFLO2dCQUtPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBS08sVUFBVTtzQkFBdEIsS0FBSztnQkFLTyxVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3Rpb25Ub2tlbixcbiAgICBJbnB1dCxcbiAgICBTaWduYWwsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICB1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBOZ3RTaWduYWxTdG9yZSxcbiAgICBOZ3RTdG9yZSxcbiAgICBleHRlbmQsXG4gICAgZ2V0TG9jYWxTdGF0ZSxcbiAgICBpbmplY3RCZWZvcmVSZW5kZXIsXG4gICAgaW5qZWN0Tmd0UmVmLFxuICAgIHJlcXVlc3RBbmltYXRpb25JbkluamVjdGlvbkNvbnRleHQsXG4gICAgdHlwZSBOZ3RHcm91cCxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBTb2Z0U2hhZG93TWF0ZXJpYWwsIFNvZnRTaGFkb3dNYXRlcmlhbElucHV0cyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCB7IEdyb3VwLCBNZXNoLCBQbGFuZUdlb21ldHJ5IH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NpdmVMaWdodE1hcCB9IGZyb20gJy4vcHJvZ3Jlc3NpdmUtbGlnaHQtbWFwJztcblxuZXh0ZW5kKHsgU29mdFNoYWRvd01hdGVyaWFsLCBHcm91cCwgTWVzaCwgUGxhbmVHZW9tZXRyeSB9KTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c1N0YXRlIHtcbiAgICAvKiogSG93IG1hbnkgZnJhbWVzIGl0IGNhbiByZW5kZXIsIG1vcmUgeWllbGRzIGNsZWFuZXIgcmVzdWx0cyBidXQgdGFrZXMgbW9yZSB0aW1lLCA0MCAqL1xuICAgIGZyYW1lczogbnVtYmVyO1xuICAgIC8qKiBJZiBmcmFtZXMgPT09IEluZmluaXR5IGJsZW5kIGNvbnRyb2xzIHRoZSByZWZyZXNoIHJhdGlvLCAxMDAgKi9cbiAgICBibGVuZDogbnVtYmVyO1xuICAgIC8qKiBDYW4gbGltaXQgdGhlIGFtb3VudCBvZiBmcmFtZXMgcmVuZGVyZWQgaWYgZnJhbWVzID09PSBJbmZpbml0eSwgdXN1YWxseSB0byBnZXQgc29tZSBwZXJmb3JtYW5jZSBiYWNrIG9uY2UgYSBtb3ZhYmxlIHNjZW5lIGhhcyBzZXR0bGVkLCBJbmZpbml0eSAqL1xuICAgIGxpbWl0OiBudW1iZXI7XG4gICAgLyoqIFNjYWxlIG9mIHRoZSBwbGFuZSwgICovXG4gICAgc2NhbGU6IG51bWJlcjtcbiAgICAvKiogVGVtcG9yYWwgYWNjdW11bGF0ZXMgc2hhZG93cyBvdmVyIHRpbWUgd2hpY2ggaXMgbW9yZSBwZXJmb3JtYW50IGJ1dCBoYXMgYSB2aXN1YWwgcmVncmVzc2lvbiBvdmVyIGluc3RhbnQgcmVzdWx0cywgZmFsc2UgICovXG4gICAgdGVtcG9yYWw6IGJvb2xlYW47XG4gICAgLyoqIE9wYWNpdHkgb2YgdGhlIHBsYW5lLCAxICovXG4gICAgb3BhY2l0eTogbnVtYmVyO1xuICAgIC8qKiBEaXNjYXJkcyBhbHBoYSBwaXhlbHMsIDAuNjUgKi9cbiAgICBhbHBoYVRlc3Q6IG51bWJlcjtcbiAgICAvKiogU2hhZG93IGNvbG9yLCBibGFjayAqL1xuICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgLyoqIENvbG9yYmxlbmQsIGhvdyBtdWNoIGNvbG9ycyB0dXJuIHRvIGJsYWNrLCAwIGlzIGJsYWNrLCAyICovXG4gICAgY29sb3JCbGVuZDogbnVtYmVyO1xuICAgIC8qKiBCdWZmZXIgcmVzb2x1dGlvbiwgMTAyNCAqL1xuICAgIHJlc29sdXRpb246IG51bWJlcjtcbiAgICAvKiogVGV4dHVyZSB0b25lbWFwcGluZyAqL1xuICAgIHRvbmVNYXBwZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzTGlnaHRBcGkgPSB7IHVwZGF0ZTogKCkgPT4gdm9pZCB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzQXBpIHtcbiAgICBsaWdodHM6IE1hcDxzdHJpbmcsIFNpZ25hbDxOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0xpZ2h0QXBpPj47XG4gICAgdGVtcG9yYWw6IGJvb2xlYW47XG4gICAgZnJhbWVzOiBudW1iZXI7XG4gICAgYmxlbmQ6IG51bWJlcjtcbiAgICBjb3VudDogbnVtYmVyO1xuICAgIGdldE1lc2g6ICgpID0+IFRIUkVFLk1lc2g8VEhSRUUuUGxhbmVHZW9tZXRyeSwgU29mdFNoYWRvd01hdGVyaWFsSW5wdXRzICYgVEhSRUUuU2hhZGVyTWF0ZXJpYWw+O1xuICAgIHJlc2V0OiAoKSA9PiB2b2lkO1xuICAgIHVwZGF0ZTogKGZyYW1lcz86IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE5HVFNfQUNDVU1VTEFUSVZFX1NIQURPV1NfQVBJID0gbmV3IEluamVjdGlvblRva2VuPFNpZ25hbDxOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0FwaT4+KFxuICAgICdOZ3RzQWNjdW11bGF0aXZlU2hhZG93cyBBUEknXG4pO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgICAgICduZ3RzLWFjY3VtdWxhdGl2ZS1zaGFkb3dzJzogTmd0R3JvdXAgJiBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c1N0YXRlO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLWFjY3VtdWxhdGl2ZS1zaGFkb3dzJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtZ3JvdXAgbmd0Q29tcG91bmQ+XG4gICAgICAgICAgICA8bmd0LWdyb3VwIFtyZWZdPVwiYWNjdW11bGF0aXZlU2hhZG93c1JlZlwiIFt0cmF2ZXJzZV09XCJudWxsVHJhdmVyc2VcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGVudCAvPlxuICAgICAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgICAgICAgICA8bmd0LW1lc2hcbiAgICAgICAgICAgICAgICBbcmVmXT1cIm1lc2hSZWZcIlxuICAgICAgICAgICAgICAgIFtyZWNlaXZlU2hhZG93XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzY2FsZV09XCJhY2N1bXVsYXRpdmVTaGFkb3dzU2NhbGUoKVwiXG4gICAgICAgICAgICAgICAgW3JvdGF0aW9uXT1cIlstTWF0aC5QSSAvIDIsIDAsIDBdXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG4gICAgICAgICAgICAgICAgPG5ndC1zb2Z0LXNoYWRvdy1tYXRlcmlhbFxuICAgICAgICAgICAgICAgICAgICBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZXB0aFdyaXRlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvbmVNYXBwZWRdPVwiYWNjdW11bGF0aXZlU2hhZG93c1RvbmVNYXBwZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJhY2N1bXVsYXRpdmVTaGFkb3dzQ29sb3IoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtibGVuZF09XCJhY2N1bXVsYXRpdmVTaGFkb3dzQ29sb3JCbGVuZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW21hcF09XCJwTE0oKS5wcm9ncmVzc2l2ZUxpZ2h0TWFwMi50ZXh0dXJlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9uZ3QtbWVzaD5cbiAgICAgICAgPC9uZ3QtZ3JvdXA+XG4gICAgYCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdUU19BQ0NVTVVMQVRJVkVfU0hBRE9XU19BUEksXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoc2hhZG93czogTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MpID0+IHNoYWRvd3MuYXBpLFxuICAgICAgICAgICAgZGVwczogW05ndHNBY2N1bXVsYXRpdmVTaGFkb3dzXSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MgZXh0ZW5kcyBOZ3RTaWduYWxTdG9yZTxOZ3RzQWNjdW11bGF0aXZlU2hhZG93c1N0YXRlPiB7XG4gICAgcmVhZG9ubHkgbnVsbFRyYXZlcnNlID0gKCkgPT4gbnVsbDtcbiAgICByZWFkb25seSBNYXRoID0gTWF0aDtcblxuICAgIC8qKiBIb3cgbWFueSBmcmFtZXMgaXQgY2FuIHJlbmRlciwgbW9yZSB5aWVsZHMgY2xlYW5lciByZXN1bHRzIGJ1dCB0YWtlcyBtb3JlIHRpbWUsIDQwICovXG4gICAgQElucHV0KCkgc2V0IGZyYW1lcyhmcmFtZXM6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGZyYW1lcyB9KTtcbiAgICB9XG5cbiAgICAvKiogSWYgZnJhbWVzID09PSBJbmZpbml0eSBibGVuZCBjb250cm9scyB0aGUgcmVmcmVzaCByYXRpbywgMTAwICovXG4gICAgQElucHV0KCkgc2V0IGJsZW5kKGJsZW5kOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBibGVuZCB9KTtcbiAgICB9XG5cbiAgICAvKiogQ2FuIGxpbWl0IHRoZSBhbW91bnQgb2YgZnJhbWVzIHJlbmRlcmVkIGlmIGZyYW1lcyA9PT0gSW5maW5pdHksIHVzdWFsbHkgdG8gZ2V0IHNvbWUgcGVyZm9ybWFuY2UgYmFjayBvbmNlIGEgbW92YWJsZSBzY2VuZSBoYXMgc2V0dGxlZCwgSW5maW5pdHkgKi9cbiAgICBASW5wdXQoKSBzZXQgbGltaXQobGltaXQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGxpbWl0IH0pO1xuICAgIH1cblxuICAgIC8qKiBTY2FsZSBvZiB0aGUgcGxhbmUsICAqL1xuICAgIEBJbnB1dCgpIHNldCBzY2FsZShzY2FsZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2NhbGUgfSk7XG4gICAgfVxuXG4gICAgLyoqIFRlbXBvcmFsIGFjY3VtdWxhdGVzIHNoYWRvd3Mgb3ZlciB0aW1lIHdoaWNoIGlzIG1vcmUgcGVyZm9ybWFudCBidXQgaGFzIGEgdmlzdWFsIHJlZ3Jlc3Npb24gb3ZlciBpbnN0YW50IHJlc3VsdHMsIGZhbHNlICAqL1xuICAgIEBJbnB1dCgpIHNldCB0ZW1wb3JhbCh0ZW1wb3JhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IHRlbXBvcmFsIH0pO1xuICAgIH1cblxuICAgIC8qKiBPcGFjaXR5IG9mIHRoZSBwbGFuZSwgMSAqL1xuICAgIEBJbnB1dCgpIHNldCBvcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG9wYWNpdHkgfSk7XG4gICAgfVxuXG4gICAgLyoqIERpc2NhcmRzIGFscGhhIHBpeGVscywgMC42NSAqL1xuICAgIEBJbnB1dCgpIHNldCBhbHBoYVRlc3QoYWxwaGFUZXN0OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBhbHBoYVRlc3QgfSk7XG4gICAgfVxuXG4gICAgLyoqIFNoYWRvdyBjb2xvciwgYmxhY2sgKi9cbiAgICBASW5wdXQoKSBzZXQgY29sb3IoY29sb3I6IHN0cmluZykge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yIH0pO1xuICAgIH1cblxuICAgIC8qKiBDb2xvcmJsZW5kLCBob3cgbXVjaCBjb2xvcnMgdHVybiB0byBibGFjaywgMCBpcyBibGFjaywgMiAqL1xuICAgIEBJbnB1dCgpIHNldCBjb2xvckJsZW5kKGNvbG9yQmxlbmQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGNvbG9yQmxlbmQgfSk7XG4gICAgfVxuXG4gICAgLyoqIEJ1ZmZlciByZXNvbHV0aW9uLCAxMDI0ICovXG4gICAgQElucHV0KCkgc2V0IHJlc29sdXRpb24ocmVzb2x1dGlvbjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVzb2x1dGlvbiB9KTtcbiAgICB9XG5cbiAgICAvKiogVGV4dHVyZSB0b25lbWFwcGluZyAqL1xuICAgIEBJbnB1dCgpIHNldCB0b25lTWFwcGVkKHRvbmVNYXBwZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0b25lTWFwcGVkIH0pO1xuICAgIH1cblxuICAgIHJlYWRvbmx5ICNzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcmVhZG9ubHkgI2dsID0gdGhpcy4jc3RvcmUuc2VsZWN0KCdnbCcpO1xuICAgIHJlYWRvbmx5ICNzY2VuZSA9IHRoaXMuI3N0b3JlLnNlbGVjdCgnc2NlbmUnKTtcbiAgICByZWFkb25seSAjY2FtZXJhID0gdGhpcy4jc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblxuICAgIHJlYWRvbmx5ICNyZXNvbHV0aW9uID0gdGhpcy5zZWxlY3QoJ3Jlc29sdXRpb24nKTtcbiAgICByZWFkb25seSAjdGVtcG9yYWwgPSB0aGlzLnNlbGVjdCgndGVtcG9yYWwnKTtcbiAgICByZWFkb25seSAjYmxlbmQgPSB0aGlzLnNlbGVjdCgnYmxlbmQnKTtcbiAgICByZWFkb25seSAjZnJhbWVzID0gdGhpcy5zZWxlY3QoJ2ZyYW1lcycpO1xuICAgIHJlYWRvbmx5ICNvcGFjaXR5ID0gdGhpcy5zZWxlY3QoJ29wYWNpdHknKTtcbiAgICByZWFkb25seSAjYWxwaGFUZXN0ID0gdGhpcy5zZWxlY3QoJ2FscGhhVGVzdCcpO1xuXG4gICAgcmVhZG9ubHkgYWNjdW11bGF0aXZlU2hhZG93c1NjYWxlID0gdGhpcy5zZWxlY3QoJ3NjYWxlJyk7XG4gICAgcmVhZG9ubHkgYWNjdW11bGF0aXZlU2hhZG93c1RvbmVNYXBwZWQgPSB0aGlzLnNlbGVjdCgndG9uZU1hcHBlZCcpO1xuICAgIHJlYWRvbmx5IGFjY3VtdWxhdGl2ZVNoYWRvd3NDb2xvciA9IHRoaXMuc2VsZWN0KCdjb2xvcicpO1xuICAgIHJlYWRvbmx5IGFjY3VtdWxhdGl2ZVNoYWRvd3NDb2xvckJsZW5kID0gdGhpcy5zZWxlY3QoJ2NvbG9yQmxlbmQnKTtcblxuICAgIHJlYWRvbmx5IG1lc2hSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuTWVzaDxUSFJFRS5QbGFuZUdlb21ldHJ5LCBTb2Z0U2hhZG93TWF0ZXJpYWxJbnB1dHMgJiBUSFJFRS5TaGFkZXJNYXRlcmlhbD4+KCk7XG4gICAgcmVhZG9ubHkgYWNjdW11bGF0aXZlU2hhZG93c1JlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5Hcm91cD4oKTtcblxuICAgIHJlYWRvbmx5IHBMTSA9IGNvbXB1dGVkKFxuICAgICAgICAoKSA9PiBuZXcgUHJvZ3Jlc3NpdmVMaWdodE1hcCh1bnRyYWNrZWQodGhpcy4jZ2wpLCB1bnRyYWNrZWQodGhpcy4jc2NlbmUpLCB0aGlzLiNyZXNvbHV0aW9uKCkpXG4gICAgKTtcblxuICAgIHJlYWRvbmx5IGFwaSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgcExNID0gdGhpcy5wTE0oKTtcbiAgICAgICAgY29uc3QgYWxwaGFUZXN0ID0gdGhpcy4jYWxwaGFUZXN0KCk7XG4gICAgICAgIGNvbnN0IG9wYWNpdHkgPSB0aGlzLiNvcGFjaXR5KCk7XG4gICAgICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMuI2NhbWVyYSgpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsaWdodHM6IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIHRlbXBvcmFsOiB0aGlzLiN0ZW1wb3JhbCgpLFxuICAgICAgICAgICAgZnJhbWVzOiBNYXRoLm1heCgyLCB0aGlzLiNmcmFtZXMoKSksXG4gICAgICAgICAgICBibGVuZDogTWF0aC5tYXgoMiwgdGhpcy4jZnJhbWVzKCkgPT09IEluZmluaXR5ID8gdGhpcy4jYmxlbmQoKSA6IHRoaXMuI2ZyYW1lcygpKSxcbiAgICAgICAgICAgIGNvdW50OiAwLFxuICAgICAgICAgICAgZ2V0TWVzaDogKCkgPT4gdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICByZXNldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAvLyBDbGVhciBidWZmZXJzLCByZXNldCBvcGFjaXRpZXMsIHNldCBmcmFtZSBjb3VudCB0byAwXG4gICAgICAgICAgICAgICAgcExNLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1lc2hSZWYubmF0aXZlRWxlbWVudC5tYXRlcmlhbDtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5vcGFjaXR5ID0gMDtcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5hbHBoYVRlc3QgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBpKCkuY291bnQgPSAwO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVwZGF0ZTogKGZyYW1lcyA9IDEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgLy8gQWRhcHQgdGhlIG9wYWNpdHktYmxlbmQgcmF0aW8gdG8gdGhlIG51bWJlciBvZiBmcmFtZXNcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRlcmlhbCA9IHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50Lm1hdGVyaWFsO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5hcGkoKS50ZW1wb3JhbCkge1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5vcGFjaXR5ID0gb3BhY2l0eTtcbiAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWwuYWxwaGFUZXN0ID0gYWxwaGFUZXN0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsLm9wYWNpdHkgPSBNYXRoLm1pbihvcGFjaXR5LCBtYXRlcmlhbC5vcGFjaXR5ICsgb3BhY2l0eSAvIHRoaXMuYXBpKCkuYmxlbmQpO1xuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbC5hbHBoYVRlc3QgPSBNYXRoLm1pbihhbHBoYVRlc3QsIG1hdGVyaWFsLmFscGhhVGVzdCArIGFscGhhVGVzdCAvIHRoaXMuYXBpKCkuYmxlbmQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBhY2N1bXVsYXRpdmUgbGlnaHRzIG9uXG4gICAgICAgICAgICAgICAgdGhpcy5hY2N1bXVsYXRpdmVTaGFkb3dzUmVmLm5hdGl2ZUVsZW1lbnQudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gQ29sbGVjdCBzY2VuZSBsaWdodHMgYW5kIG1lc2hlc1xuICAgICAgICAgICAgICAgIHBMTS5wcmVwYXJlKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGxpZ2h0bWFwIGFuZCB0aGUgYWNjdW11bGF0aXZlIGxpZ2h0c1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZnJhbWVzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcGkoKS5saWdodHMuZm9yRWFjaCgobGlnaHQpID0+IGxpZ2h0KCkudXBkYXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICBwTE0udXBkYXRlKGNhbWVyYSwgdGhpcy5hcGkoKS5ibGVuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBsaWdodHMgb2ZmXG4gICAgICAgICAgICAgICAgdGhpcy5hY2N1bXVsYXRpdmVTaGFkb3dzUmVmLm5hdGl2ZUVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgbGlnaHRzIGFuZCBtZXNoZXNcbiAgICAgICAgICAgICAgICBwTE0uZmluaXNoKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGZyYW1lczogNDAsXG4gICAgICAgICAgICBsaW1pdDogSW5maW5pdHksXG4gICAgICAgICAgICBibGVuZDogMjAsXG4gICAgICAgICAgICBzY2FsZTogMTAsXG4gICAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgICAgYWxwaGFUZXN0OiAwLjc1LFxuICAgICAgICAgICAgY29sb3I6ICdibGFjaycsXG4gICAgICAgICAgICBjb2xvckJsZW5kOiAyLFxuICAgICAgICAgICAgcmVzb2x1dGlvbjogMTAyNCxcbiAgICAgICAgICAgIHRvbmVNYXBwZWQ6IHRydWUsXG4gICAgICAgICAgICB0ZW1wb3JhbDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uSW5JbmplY3Rpb25Db250ZXh0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuI2NvbmZpZ3VyZSgpO1xuICAgICAgICAgICAgdGhpcy4jcmVzZXRBbmRVcGRhdGUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcih0aGlzLiNvbkJlZm9yZVJlbmRlci5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICAjb25CZWZvcmVSZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IGludmFsaWRhdGUgPSB0aGlzLiNzdG9yZS5nZXQoJ2ludmFsaWRhdGUnKTtcbiAgICAgICAgY29uc3QgbGltaXQgPSB0aGlzLmdldCgnbGltaXQnKTtcbiAgICAgICAgY29uc3QgYXBpID0gdGhpcy5hcGkoKTtcbiAgICAgICAgaWYgKChhcGkudGVtcG9yYWwgfHwgYXBpLmZyYW1lcyA9PT0gSW5maW5pdHkpICYmIGFwaS5jb3VudCA8IGFwaS5mcmFtZXMgJiYgYXBpLmNvdW50IDwgbGltaXQpIHtcbiAgICAgICAgICAgIGludmFsaWRhdGUoKTtcbiAgICAgICAgICAgIGFwaS51cGRhdGUoKTtcbiAgICAgICAgICAgIGFwaS5jb3VudCsrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2NvbmZpZ3VyZSgpIHtcbiAgICAgICAgY29uc3QgdHJpZ2dlciA9IGNvbXB1dGVkKCgpID0+ICh7IHBMTTogdGhpcy5wTE0oKSwgbWVzaDogdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQgfSkpO1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBwTE0sIG1lc2ggfSA9IHRyaWdnZXIoKTtcbiAgICAgICAgICAgIGlmICghbWVzaCkgcmV0dXJuO1xuICAgICAgICAgICAgcExNLmNvbmZpZ3VyZShtZXNoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgI3Jlc2V0QW5kVXBkYXRlKCkge1xuICAgICAgICBjb25zdCB0cmlnZ2VyID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLnNlbGVjdCgpKCksXG4gICAgICAgICAgICBvYmplY3RzOiBnZXRMb2NhbFN0YXRlKHRoaXMuI3N0b3JlLmdldCgnc2NlbmUnKSkub2JqZWN0cygpLFxuICAgICAgICAgICAgbWVzaDogdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgIH0pKTtcblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBtZXNoIH0gPSB0cmlnZ2VyKCk7XG4gICAgICAgICAgICBpZiAoIW1lc2gpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHVudHJhY2tlZCh0aGlzLmFwaSk7XG4gICAgICAgICAgICAvLyBSZXNldCBpbnRlcm5hbHMsIGJ1ZmZlcnMsIC4uLlxuICAgICAgICAgICAgYXBpLnJlc2V0KCk7XG4gICAgICAgICAgICAvLyBVcGRhdGUgbGlnaHRtYXBcbiAgICAgICAgICAgIGlmICghYXBpLnRlbXBvcmFsICYmIGFwaS5mcmFtZXMgIT09IEluZmluaXR5KSBhcGkudXBkYXRlKGFwaS5ibGVuZCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjdW11bGF0aXZlLXNoYWRvd3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc3RhZ2luZy9zcmMvYWNjdW11bGF0aXZlLXNoYWRvd3MvYWNjdW11bGF0aXZlLXNoYWRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLFNBQVMsR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxHQUVYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBbUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNqRyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBRTlELE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztBQXNDM0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsRUFBRSxpQ0FBaUMsQ0FBQyxHQUFHLG9CQUFvQixDQUN4RyxDQUFDLE9BQWdDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ2pELEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLENBQ3BFLENBQUM7QUEwQkYsTUFBTSxPQUFPLHVCQUF1QjtJQW9CbkMseUZBQXlGO0lBQ3pGLElBQWdDLE9BQU8sQ0FBQyxNQUFjO1FB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QXNCLENBQUM7aUJBQ2pDOzBFQW1CUyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBRzBCLE9BQU87c0JBQXRDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUtLLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUtNLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUtNLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUtTLFNBQVM7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO2dCQUtLLFFBQVE7c0JBQXhDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUtRLFVBQVU7c0JBQTVDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUtFLE1BQU07c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2dCQUtXLFdBQVc7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO2dCQUtNLFdBQVc7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO2dCQUtNLFdBQVc7c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q29tcG9uZW50LFxuXHRJbnB1dCxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0Zm9yd2FyZFJlZixcblx0dW50cmFja2VkLFxuXHR0eXBlIFNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRjcmVhdGVJbmplY3Rpb25Ub2tlbixcblx0ZXh0ZW5kLFxuXHRnZXRMb2NhbFN0YXRlLFxuXHRpbmplY3RCZWZvcmVSZW5kZXIsXG5cdGluamVjdE5ndFJlZixcblx0aW5qZWN0Tmd0U3RvcmUsXG5cdHNpZ25hbFN0b3JlLFxuXHR0eXBlIE5ndEdyb3VwLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IFNvZnRTaGFkb3dNYXRlcmlhbCwgdHlwZSBOZ3RTb2Z0U2hhZG93TWF0ZXJpYWxTdGF0ZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCB7IEdyb3VwLCBNZXNoLCBQbGFuZUdlb21ldHJ5IH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NpdmVMaWdodE1hcCB9IGZyb20gJy4vcHJvZ3Jlc3NpdmUtbGlnaHQtbWFwJztcblxuZXh0ZW5kKHsgR3JvdXAsIFNvZnRTaGFkb3dNYXRlcmlhbCwgTWVzaCwgUGxhbmVHZW9tZXRyeSB9KTtcblxuZXhwb3J0IHR5cGUgTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3NTdGF0ZSA9IHtcblx0LyoqIEhvdyBtYW55IGZyYW1lcyBpdCBjYW4gcmVuZGVyLCBtb3JlIHlpZWxkcyBjbGVhbmVyIHJlc3VsdHMgYnV0IHRha2VzIG1vcmUgdGltZSwgNDAgKi9cblx0ZnJhbWVzOiBudW1iZXI7XG5cdC8qKiBJZiBmcmFtZXMgPT09IEluZmluaXR5IGJsZW5kIGNvbnRyb2xzIHRoZSByZWZyZXNoIHJhdGlvLCAxMDAgKi9cblx0YmxlbmQ6IG51bWJlcjtcblx0LyoqIENhbiBsaW1pdCB0aGUgYW1vdW50IG9mIGZyYW1lcyByZW5kZXJlZCBpZiBmcmFtZXMgPT09IEluZmluaXR5LCB1c3VhbGx5IHRvIGdldCBzb21lIHBlcmZvcm1hbmNlIGJhY2sgb25jZSBhIG1vdmFibGUgc2NlbmUgaGFzIHNldHRsZWQsIEluZmluaXR5ICovXG5cdGxpbWl0OiBudW1iZXI7XG5cdC8qKiBTY2FsZSBvZiB0aGUgcGxhbmUsICAqL1xuXHRzY2FsZTogbnVtYmVyO1xuXHQvKiogVGVtcG9yYWwgYWNjdW11bGF0ZXMgc2hhZG93cyBvdmVyIHRpbWUgd2hpY2ggaXMgbW9yZSBwZXJmb3JtYW50IGJ1dCBoYXMgYSB2aXN1YWwgcmVncmVzc2lvbiBvdmVyIGluc3RhbnQgcmVzdWx0cywgZmFsc2UgICovXG5cdHRlbXBvcmFsOiBib29sZWFuO1xuXHQvKiogT3BhY2l0eSBvZiB0aGUgcGxhbmUsIDEgKi9cblx0b3BhY2l0eTogbnVtYmVyO1xuXHQvKiogRGlzY2FyZHMgYWxwaGEgcGl4ZWxzLCAwLjY1ICovXG5cdGFscGhhVGVzdDogbnVtYmVyO1xuXHQvKiogU2hhZG93IGNvbG9yLCBibGFjayAqL1xuXHRjb2xvcjogc3RyaW5nO1xuXHQvKiogQ29sb3JibGVuZCwgaG93IG11Y2ggY29sb3JzIHR1cm4gdG8gYmxhY2ssIDAgaXMgYmxhY2ssIDIgKi9cblx0Y29sb3JCbGVuZDogbnVtYmVyO1xuXHQvKiogQnVmZmVyIHJlc29sdXRpb24sIDEwMjQgKi9cblx0cmVzb2x1dGlvbjogbnVtYmVyO1xuXHQvKiogVGV4dHVyZSB0b25lbWFwcGluZyAqL1xuXHR0b25lTWFwcGVkOiBib29sZWFuO1xufTtcblxuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcblx0XHQvKipcblx0XHQgKiBAZXh0ZW5kcyBuZ3QtZ3JvdXBcblx0XHQgKi9cblx0XHQnbmd0cy1hY2N1bXVsYXRpdmUtc2hhZG93cyc6IE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzU3RhdGUgJiBOZ3RHcm91cDtcblx0fVxufVxuXG5leHBvcnQgdHlwZSBOZ3RzQWNjdW11bGF0aXZlU2hhZG93c0xpZ2h0QXBpID0geyB1cGRhdGU6ICgpID0+IHZvaWQgfTtcblxuZXhwb3J0IGNvbnN0IFtpbmplY3ROZ3RzQWNjdW11bGF0aXZlU2hhZG93c0FwaSwgcHJvdmlkZU5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzQXBpXSA9IGNyZWF0ZUluamVjdGlvblRva2VuKFxuXHQoc2hhZG93czogTmd0c0FjY3VtdWxhdGl2ZVNoYWRvd3MpID0+IHNoYWRvd3MuYXBpLFxuXHR7IGlzUm9vdDogZmFsc2UsIGRlcHM6IFtmb3J3YXJkUmVmKCgpID0+IE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzKV0gfSxcbik7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtYWNjdW11bGF0aXZlLXNoYWRvd3MnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgbmd0Q29tcG91bmQ+XG5cdFx0XHQ8bmd0LWdyb3VwIFt0cmF2ZXJzZV09XCJudWxsVHJhdmVyc2VcIiBbcmVmXT1cImFjY3VtdWxhdGl2ZVNoYWRvd3NSZWZcIj5cblx0XHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHRcdDwvbmd0LWdyb3VwPlxuXHRcdFx0PG5ndC1tZXNoIFtyZWNlaXZlU2hhZG93XT1cInRydWVcIiBbcmVmXT1cIm1lc2hSZWZcIiBbc2NhbGVdPVwic2NhbGUoKVwiIFtyb3RhdGlvbl09XCJbLU1hdGguUEkgLyAyLCAwLCAwXVwiPlxuXHRcdFx0XHQ8bmd0LXBsYW5lLWdlb21ldHJ5IC8+XG5cdFx0XHRcdDxuZ3Qtc29mdC1zaGFkb3ctbWF0ZXJpYWxcblx0XHRcdFx0XHRbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG5cdFx0XHRcdFx0W2RlcHRoV3JpdGVdPVwiZmFsc2VcIlxuXHRcdFx0XHRcdFt0b25lTWFwcGVkXT1cInRvbmVNYXBwZWQoKVwiXG5cdFx0XHRcdFx0W2NvbG9yXT1cImNvbG9yKClcIlxuXHRcdFx0XHRcdFtibGVuZF09XCJjb2xvckJsZW5kKClcIlxuXHRcdFx0XHRcdFttYXBdPVwibWFwKClcIlxuXHRcdFx0XHQvPlxuXHRcdFx0PC9uZ3QtbWVzaD5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0cHJvdmlkZXJzOiBbcHJvdmlkZU5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzQXBpKCldLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzIHtcblx0cHJpdmF0ZSBpbnB1dHMgPSBzaWduYWxTdG9yZTxOZ3RzQWNjdW11bGF0aXZlU2hhZG93c1N0YXRlPih7XG5cdFx0ZnJhbWVzOiA0MCxcblx0XHRsaW1pdDogSW5maW5pdHksXG5cdFx0YmxlbmQ6IDIwLFxuXHRcdHNjYWxlOiAxMCxcblx0XHRvcGFjaXR5OiAxLFxuXHRcdGFscGhhVGVzdDogMC43NSxcblx0XHRjb2xvcjogJ2JsYWNrJyxcblx0XHRjb2xvckJsZW5kOiAyLFxuXHRcdHJlc29sdXRpb246IDEwMjQsXG5cdFx0dG9uZU1hcHBlZDogdHJ1ZSxcblx0XHR0ZW1wb3JhbDogZmFsc2UsXG5cdH0pO1xuXG5cdG51bGxUcmF2ZXJzZSA9ICgpID0+IG51bGw7XG5cdE1hdGggPSBNYXRoO1xuXG5cdEBJbnB1dCgpIGFjY3VtdWxhdGl2ZVNoYWRvd3NSZWYgPSBpbmplY3ROZ3RSZWY8VEhSRUUuR3JvdXA+KCk7XG5cblx0LyoqIEhvdyBtYW55IGZyYW1lcyBpdCBjYW4gcmVuZGVyLCBtb3JlIHlpZWxkcyBjbGVhbmVyIHJlc3VsdHMgYnV0IHRha2VzIG1vcmUgdGltZSwgNDAgKi9cblx0QElucHV0KHsgYWxpYXM6ICdmcmFtZXMnIH0pIHNldCBfZnJhbWVzKGZyYW1lczogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZnJhbWVzIH0pO1xuXHR9XG5cblx0LyoqIElmIGZyYW1lcyA9PT0gSW5maW5pdHkgYmxlbmQgY29udHJvbHMgdGhlIHJlZnJlc2ggcmF0aW8sIDEwMCAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2JsZW5kJyB9KSBzZXQgX2JsZW5kKGJsZW5kOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBibGVuZCB9KTtcblx0fVxuXG5cdC8qKiBDYW4gbGltaXQgdGhlIGFtb3VudCBvZiBmcmFtZXMgcmVuZGVyZWQgaWYgZnJhbWVzID09PSBJbmZpbml0eSwgdXN1YWxseSB0byBnZXQgc29tZSBwZXJmb3JtYW5jZSBiYWNrIG9uY2UgYSBtb3ZhYmxlIHNjZW5lIGhhcyBzZXR0bGVkLCBJbmZpbml0eSAqL1xuXHRASW5wdXQoeyBhbGlhczogJ2xpbWl0JyB9KSBzZXQgX2xpbWl0KGxpbWl0OiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBsaW1pdCB9KTtcblx0fVxuXG5cdC8qKiBTY2FsZSBvZiB0aGUgcGxhbmUsICAqL1xuXHRASW5wdXQoeyBhbGlhczogJ3NjYWxlJyB9KSBzZXQgX3NjYWxlKHNjYWxlOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBzY2FsZSB9KTtcblx0fVxuXG5cdC8qKiBUZW1wb3JhbCBhY2N1bXVsYXRlcyBzaGFkb3dzIG92ZXIgdGltZSB3aGljaCBpcyBtb3JlIHBlcmZvcm1hbnQgYnV0IGhhcyBhIHZpc3VhbCByZWdyZXNzaW9uIG92ZXIgaW5zdGFudCByZXN1bHRzLCBmYWxzZSAgKi9cblx0QElucHV0KHsgYWxpYXM6ICd0ZW1wb3JhbCcgfSkgc2V0IF90ZW1wb3JhbCh0ZW1wb3JhbDogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHRlbXBvcmFsIH0pO1xuXHR9XG5cblx0LyoqIE9wYWNpdHkgb2YgdGhlIHBsYW5lLCAxICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnb3BhY2l0eScgfSkgc2V0IF9vcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG9wYWNpdHkgfSk7XG5cdH1cblxuXHQvKiogRGlzY2FyZHMgYWxwaGEgcGl4ZWxzLCAwLjY1ICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnYWxwaGFUZXN0JyB9KSBzZXQgX2FscGhhVGVzdChhbHBoYVRlc3Q6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGFscGhhVGVzdCB9KTtcblx0fVxuXG5cdC8qKiBTaGFkb3cgY29sb3IsIGJsYWNrICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnY29sb3InIH0pIHNldCBfY29sb3IoY29sb3I6IHN0cmluZykge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGNvbG9yIH0pO1xuXHR9XG5cblx0LyoqIENvbG9yYmxlbmQsIGhvdyBtdWNoIGNvbG9ycyB0dXJuIHRvIGJsYWNrLCAwIGlzIGJsYWNrLCAyICovXG5cdEBJbnB1dCh7IGFsaWFzOiAnY29sb3JCbGVuZCcgfSkgc2V0IF9jb2xvckJsZW5kKGNvbG9yQmxlbmQ6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGNvbG9yQmxlbmQgfSk7XG5cdH1cblxuXHQvKiogQnVmZmVyIHJlc29sdXRpb24sIDEwMjQgKi9cblx0QElucHV0KHsgYWxpYXM6ICdyZXNvbHV0aW9uJyB9KSBzZXQgX3Jlc29sdXRpb24ocmVzb2x1dGlvbjogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgcmVzb2x1dGlvbiB9KTtcblx0fVxuXG5cdC8qKiBUZXh0dXJlIHRvbmVtYXBwaW5nICovXG5cdEBJbnB1dCh7IGFsaWFzOiAndG9uZU1hcHBlZCcgfSkgc2V0IF90b25lTWFwcGVkKHRvbmVNYXBwZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyB0b25lTWFwcGVkIH0pO1xuXHR9XG5cblx0bWVzaFJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5NZXNoPFRIUkVFLlBsYW5lR2VvbWV0cnksIE5ndFNvZnRTaGFkb3dNYXRlcmlhbFN0YXRlICYgVEhSRUUuU2hhZGVyTWF0ZXJpYWw+PigpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdHByaXZhdGUgc2NlbmUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblx0cHJpdmF0ZSBjYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cdHByaXZhdGUgaW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cblx0cHJpdmF0ZSByZXNvbHV0aW9uID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdyZXNvbHV0aW9uJyk7XG5cdHByaXZhdGUgYWxwaGFUZXN0ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdhbHBoYVRlc3QnKTtcblx0cHJpdmF0ZSBvcGFjaXR5ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdvcGFjaXR5Jyk7XG5cdHByaXZhdGUgdGVtcG9yYWwgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3RlbXBvcmFsJyk7XG5cdHByaXZhdGUgYmxlbmQgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2JsZW5kJyk7XG5cdHByaXZhdGUgZnJhbWVzID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdmcmFtZXMnKTtcblxuXHRwTE0gPSBjb21wdXRlZCgoKSA9PiBuZXcgUHJvZ3Jlc3NpdmVMaWdodE1hcCh1bnRyYWNrZWQodGhpcy5nbCksIHVudHJhY2tlZCh0aGlzLnNjZW5lKSwgdGhpcy5yZXNvbHV0aW9uKCkpKTtcblxuXHRzY2FsZSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnc2NhbGUnKTtcblx0dG9uZU1hcHBlZCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgndG9uZU1hcHBlZCcpO1xuXHRjb2xvciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29sb3InKTtcblx0Y29sb3JCbGVuZCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnY29sb3JCbGVuZCcpO1xuXHRtYXAgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnBMTSgpLnByb2dyZXNzaXZlTGlnaHRNYXAyLnRleHR1cmUpO1xuXG5cdGFwaSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbcExNLCBhbHBoYVRlc3QsIG9wYWNpdHksIGNhbWVyYSwgdGVtcG9yYWwsIGJsZW5kLCBmcmFtZXNdID0gW1xuXHRcdFx0dGhpcy5wTE0oKSxcblx0XHRcdHRoaXMuYWxwaGFUZXN0KCksXG5cdFx0XHR0aGlzLm9wYWNpdHkoKSxcblx0XHRcdHRoaXMuY2FtZXJhKCksXG5cdFx0XHR0aGlzLnRlbXBvcmFsKCksXG5cdFx0XHR0aGlzLmJsZW5kKCksXG5cdFx0XHR0aGlzLmZyYW1lcygpLFxuXHRcdF07XG5cdFx0Y29uc3QgYXBpID0ge1xuXHRcdFx0bGlnaHRzOiBuZXcgTWFwPHN0cmluZywgU2lnbmFsPE5ndHNBY2N1bXVsYXRpdmVTaGFkb3dzTGlnaHRBcGk+PigpLFxuXHRcdFx0dGVtcG9yYWwsXG5cdFx0XHRmcmFtZXM6IE1hdGgubWF4KDIsIGZyYW1lcyksXG5cdFx0XHRibGVuZDogTWF0aC5tYXgoMiwgZnJhbWVzID09PSBJbmZpbml0eSA/IGJsZW5kIDogZnJhbWVzKSxcblx0XHRcdGNvdW50OiAwLFxuXHRcdFx0Z2V0TWVzaDogKCkgPT4gdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRyZXNldDogKCkgPT4ge1xuXHRcdFx0XHRpZiAoIXRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50KSByZXR1cm47XG5cdFx0XHRcdC8vIENsZWFyIGJ1ZmZlcnMsIHJlc2V0IG9wYWNpdGllcywgc2V0IGZyYW1lIGNvdW50IHRvIDBcblx0XHRcdFx0cExNLmNsZWFyKCk7XG5cdFx0XHRcdGNvbnN0IG1hdGVyaWFsID0gdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQubWF0ZXJpYWw7XG5cdFx0XHRcdG1hdGVyaWFsLm9wYWNpdHkgPSAwO1xuXHRcdFx0XHRtYXRlcmlhbC5hbHBoYVRlc3QgPSAwO1xuXHRcdFx0XHRhcGkuY291bnQgPSAwO1xuXHRcdFx0fSxcblx0XHRcdHVwZGF0ZTogKGZyYW1lcyA9IDEpID0+IHtcblx0XHRcdFx0aWYgKCF0aGlzLm1lc2hSZWYubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuXHRcdFx0XHQvLyBBZGFwdCB0aGUgb3BhY2l0eS1ibGVuZCByYXRpbyB0byB0aGUgbnVtYmVyIG9mIGZyYW1lc1xuXHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWVzaFJlZi5uYXRpdmVFbGVtZW50Lm1hdGVyaWFsO1xuXHRcdFx0XHRpZiAoIWFwaS50ZW1wb3JhbCkge1xuXHRcdFx0XHRcdG1hdGVyaWFsLm9wYWNpdHkgPSBvcGFjaXR5O1xuXHRcdFx0XHRcdG1hdGVyaWFsLmFscGhhVGVzdCA9IGFscGhhVGVzdDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRtYXRlcmlhbC5vcGFjaXR5ID0gTWF0aC5taW4ob3BhY2l0eSwgbWF0ZXJpYWwub3BhY2l0eSArIG9wYWNpdHkgLyBhcGkuYmxlbmQpO1xuXHRcdFx0XHRcdG1hdGVyaWFsLmFscGhhVGVzdCA9IE1hdGgubWluKGFscGhhVGVzdCwgbWF0ZXJpYWwuYWxwaGFUZXN0ICsgYWxwaGFUZXN0IC8gYXBpLmJsZW5kKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN3aXRjaCBhY2N1bXVsYXRpdmUgbGlnaHRzIG9uXG5cdFx0XHRcdHRoaXMuYWNjdW11bGF0aXZlU2hhZG93c1JlZi5uYXRpdmVFbGVtZW50LnZpc2libGUgPSB0cnVlO1xuXHRcdFx0XHQvLyBDb2xsZWN0IHNjZW5lIGxpZ2h0cyBhbmQgbWVzaGVzXG5cdFx0XHRcdHBMTS5wcmVwYXJlKCk7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHRoZSBsaWdodG1hcCBhbmQgdGhlIGFjY3VtdWxhdGl2ZSBsaWdodHNcblx0XHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBmcmFtZXM7IGkrKykge1xuXHRcdFx0XHRcdGFwaS5saWdodHMuZm9yRWFjaCgobGlnaHQpID0+IGxpZ2h0KCkudXBkYXRlKCkpO1xuXHRcdFx0XHRcdHBMTS51cGRhdGUoY2FtZXJhLCBhcGkuYmxlbmQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3dpdGNoIGxpZ2h0cyBvZmZcblx0XHRcdFx0dGhpcy5hY2N1bXVsYXRpdmVTaGFkb3dzUmVmLm5hdGl2ZUVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHQvLyBSZXN0b3JlIGxpZ2h0cyBhbmQgbWVzaGVzXG5cdFx0XHRcdHBMTS5maW5pc2goKTtcblx0XHRcdH0sXG5cdFx0fTtcblxuXHRcdHJldHVybiBhcGk7XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuY29uZmlndXJlKCk7XG5cdFx0dGhpcy5yZXNldEFuZFVwZGF0ZSgpO1xuXHRcdHRoaXMuYmVmb3JlUmVuZGVyKCk7XG5cdH1cblxuXHRwcml2YXRlIGNvbmZpZ3VyZSgpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW3BMTSwgbWVzaF0gPSBbdGhpcy5wTE0oKSwgdGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnRdO1xuXHRcdFx0aWYgKCFtZXNoKSByZXR1cm47XG5cdFx0XHRwTE0uY29uZmlndXJlKG1lc2gpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNldEFuZFVwZGF0ZSgpIHtcblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgWywgLCBtZXNoXSA9IFtcblx0XHRcdFx0dGhpcy5pbnB1dHMuc3RhdGUoKSxcblx0XHRcdFx0Z2V0TG9jYWxTdGF0ZSh1bnRyYWNrZWQodGhpcy5zY2VuZSkpLm9iamVjdHMoKSxcblx0XHRcdFx0dGhpcy5tZXNoUmVmLm5hdGl2ZUVsZW1lbnQsXG5cdFx0XHRdO1xuXHRcdFx0aWYgKCFtZXNoKSByZXR1cm47XG5cdFx0XHRjb25zdCBhcGkgPSB1bnRyYWNrZWQodGhpcy5hcGkpO1xuXHRcdFx0Ly8gUmVzZXQgaW50ZXJuYWxzLCBidWZmZXJzLCAuLi5cblx0XHRcdGFwaS5yZXNldCgpO1xuXHRcdFx0Ly8gVXBkYXRlIGxpZ2h0bWFwXG5cdFx0XHRpZiAoIWFwaS50ZW1wb3JhbCAmJiBhcGkuZnJhbWVzICE9PSBJbmZpbml0eSkgYXBpLnVwZGF0ZShhcGkuYmxlbmQpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBiZWZvcmVSZW5kZXIoKSB7XG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IFthcGksIGxpbWl0XSA9IFt0aGlzLmFwaSgpLCB0aGlzLmlucHV0cy5nZXQoJ2xpbWl0JyldO1xuXHRcdFx0aWYgKChhcGkudGVtcG9yYWwgfHwgYXBpLmZyYW1lcyA9PT0gSW5maW5pdHkpICYmIGFwaS5jb3VudCA8IGFwaS5mcmFtZXMgJiYgYXBpLmNvdW50IDwgbGltaXQpIHtcblx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlKCk7XG5cdFx0XHRcdGFwaS51cGRhdGUoKTtcblx0XHRcdFx0YXBpLmNvdW50Kys7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -105,4 +105,4 @@ export class ProgressiveLightMap {
105
105
  this.scene.background = oldBg;
106
106
  }
107
107
  }
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NpdmUtbGlnaHQtbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2FjY3VtdWxhdGl2ZS1zaGFkb3dzL3Byb2dyZXNzaXZlLWxpZ2h0LW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsU0FBUyxPQUFPLENBQUMsTUFBVztJQUN4QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDMUIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLE1BQVc7SUFDM0IsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUM3QixDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLE1BQU0sT0FBTyxtQkFBbUI7SUFpQjVCLFlBQVksUUFBNkIsRUFBRSxLQUFrQixFQUFFLE1BQWMsSUFBSTtRQUM3RSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFcEIsMENBQTBDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FB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ZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNsQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNjYXJkTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmZ1bmN0aW9uIGlzTGlnaHQob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgVEhSRUUuTGlnaHQge1xuICAgIHJldHVybiBvYmplY3QuaXNMaWdodDtcbn1cblxuZnVuY3Rpb24gaXNHZW9tZXRyeShvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBUSFJFRS5NZXNoIHtcbiAgICByZXR1cm4gISFvYmplY3QuZ2VvbWV0cnk7XG59XG5cbi8vIEJhc2VkIG9uIFwiUHJvZ3Jlc3NpdmUgTGlnaHQgTWFwIEFjY3VtdWxhdG9yXCIsIGJ5IFt6YWxvXShodHRwczovL2dpdGh1Yi5jb20vemFsby8pXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NpdmVMaWdodE1hcCB7XG4gICAgcmVuZGVyZXI6IFRIUkVFLldlYkdMUmVuZGVyZXI7XG4gICAgcmVzOiBudW1iZXI7XG4gICAgc2NlbmU6IFRIUkVFLlNjZW5lO1xuICAgIG9iamVjdDogVEhSRUUuTWVzaCB8IG51bGw7XG4gICAgYnVmZmVyMUFjdGl2ZTogYm9vbGVhbjtcbiAgICBwcm9ncmVzc2l2ZUxpZ2h0TWFwMTogVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ7XG4gICAgcHJvZ3Jlc3NpdmVMaWdodE1hcDI6IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0O1xuICAgIGRpc2NhcmRNYXQ6IFRIUkVFLlNoYWRlck1hdGVyaWFsO1xuICAgIHRhcmdldE1hdDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcbiAgICBwcmV2aW91c1NoYWRvd01hcDogeyB2YWx1ZTogVEhSRUUuVGV4dHVyZSB9O1xuICAgIGF2ZXJhZ2luZ1dpbmRvdzogeyB2YWx1ZTogbnVtYmVyIH07XG4gICAgY2xlYXJDb2xvcjogVEhSRUUuQ29sb3I7XG4gICAgY2xlYXJBbHBoYTogbnVtYmVyO1xuICAgIGxpZ2h0czogeyBvYmplY3Q6IFRIUkVFLkxpZ2h0OyBpbnRlbnNpdHk6IG51bWJlciB9W107XG4gICAgbWVzaGVzOiB7IG9iamVjdDogVEhSRUUuTWVzaDsgbWF0ZXJpYWw6IFRIUkVFLk1hdGVyaWFsIHwgVEhSRUUuTWF0ZXJpYWxbXSB9W107XG5cbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlcjogVEhSRUUuV2ViR0xSZW5kZXJlciwgc2NlbmU6IFRIUkVFLlNjZW5lLCByZXM6IG51bWJlciA9IDEwMjQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnJlcyA9IHJlcztcbiAgICAgICAgdGhpcy5zY2VuZSA9IHNjZW5lO1xuICAgICAgICB0aGlzLmJ1ZmZlcjFBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5saWdodHMgPSBbXTtcbiAgICAgICAgdGhpcy5tZXNoZXMgPSBbXTtcbiAgICAgICAgdGhpcy5vYmplY3QgPSBudWxsO1xuICAgICAgICB0aGlzLmNsZWFyQ29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKTtcbiAgICAgICAgdGhpcy5jbGVhckFscGhhID0gMDtcblxuICAgICAgICAvLyBDcmVhdGUgdGhlIFByb2dyZXNzaXZlIExpZ2h0TWFwIFRleHR1cmVcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gLyhBbmRyb2lkfGlQYWR8aVBob25lfGlQb2QpL2cudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSA/IFRIUkVFLkhhbGZGbG9hdFR5cGUgOiBUSFJFRS5GbG9hdFR5cGU7XG4gICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVMaWdodE1hcDEgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQodGhpcy5yZXMsIHRoaXMucmVzLCB7XG4gICAgICAgICAgICB0eXBlOiBmb3JtYXQsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAyID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHRoaXMucmVzLCB0aGlzLnJlcywge1xuICAgICAgICAgICAgdHlwZTogZm9ybWF0LFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJbmplY3Qgc29tZSBzcGljeSBuZXcgbG9naWMgaW50byBhIHN0YW5kYXJkIHBob25nIG1hdGVyaWFsXG4gICAgICAgIHRoaXMuZGlzY2FyZE1hdCA9IG5ldyBEaXNjYXJkTWF0ZXJpYWwoKTtcbiAgICAgICAgdGhpcy50YXJnZXRNYXQgPSBuZXcgVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbCh7IGZvZzogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMucHJldmlvdXNTaGFkb3dNYXAgPSB7IHZhbHVlOiB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxLnRleHR1cmUgfTtcbiAgICAgICAgdGhpcy5hdmVyYWdpbmdXaW5kb3cgPSB7IHZhbHVlOiAxMDAgfTtcbiAgICAgICAgdGhpcy50YXJnZXRNYXQub25CZWZvcmVDb21waWxlID0gKHNoYWRlcikgPT4ge1xuICAgICAgICAgICAgLy8gVmVydGV4IFNoYWRlcjogU2V0IFZlcnRleCBQb3NpdGlvbnMgdG8gdGhlIFVud3JhcHBlZCBVViBQb3NpdGlvbnNcbiAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIgPVxuICAgICAgICAgICAgICAgICd2YXJ5aW5nIHZlYzIgdlV2O1xcbicgK1xuICAgICAgICAgICAgICAgIHNoYWRlci52ZXJ0ZXhTaGFkZXIuc2xpY2UoMCwgLTEpICtcbiAgICAgICAgICAgICAgICAndlV2ID0gdXY7IGdsX1Bvc2l0aW9uID0gdmVjNCgodXYgLSAwLjUpICogMi4wLCAxLjAsIDEuMCk7IH0nO1xuXG4gICAgICAgICAgICAvLyBGcmFnbWVudCBTaGFkZXI6IFNldCBQaXhlbHMgdG8gYXZlcmFnZSBpbiB0aGUgUHJldmlvdXMgZnJhbWUncyBTaGFkb3dzXG4gICAgICAgICAgICBjb25zdCBib2R5U3RhcnQgPSBzaGFkZXIuZnJhZ21lbnRTaGFkZXIuaW5kZXhPZigndm9pZCBtYWluKCkgeycpO1xuICAgICAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyID1cbiAgICAgICAgICAgICAgICAndmFyeWluZyB2ZWMyIHZVdjtcXG4nICtcbiAgICAgICAgICAgICAgICBzaGFkZXIuZnJhZ21lbnRTaGFkZXIuc2xpY2UoMCwgYm9keVN0YXJ0KSArXG4gICAgICAgICAgICAgICAgJ3VuaWZvcm0gc2FtcGxlcjJEIHByZXZpb3VzU2hhZG93TWFwO1xcblx0dW5pZm9ybSBmbG9hdCBhdmVyYWdpbmdXaW5kb3c7XFxuJyArXG4gICAgICAgICAgICAgICAgc2hhZGVyLmZyYWdtZW50U2hhZGVyLnNsaWNlKGJvZHlTdGFydCAtIDEsIC0xKSArXG4gICAgICAgICAgICAgICAgYFxcbnZlYzMgdGV4ZWxPbGQgPSB0ZXh0dXJlMkQocHJldmlvdXNTaGFkb3dNYXAsIHZVdikucmdiO1xuICAgICAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KHRleGVsT2xkLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAvIGF2ZXJhZ2luZ1dpbmRvdyk7XG4gICAgICB9YDtcblxuICAgICAgICAgICAgLy8gU2V0IHRoZSBQcmV2aW91cyBGcmFtZSdzIFRleHR1cmUgQnVmZmVyIGFuZCBBdmVyYWdpbmcgV2luZG93XG4gICAgICAgICAgICAvLyBTZXQgdGhlIFByZXZpb3VzIEZyYW1lJ3MgVGV4dHVyZSBCdWZmZXIgYW5kIEF2ZXJhZ2luZyBXaW5kb3dcbiAgICAgICAgICAgIHNoYWRlci51bmlmb3Jtc1sncHJldmlvdXNTaGFkb3dNYXAnXSA9IHRoaXMucHJldmlvdXNTaGFkb3dNYXA7XG4gICAgICAgICAgICBzaGFkZXIudW5pZm9ybXNbJ2F2ZXJhZ2luZ1dpbmRvdyddID0gdGhpcy5hdmVyYWdpbmdXaW5kb3c7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2V0Q2xlYXJDb2xvcih0aGlzLmNsZWFyQ29sb3IpO1xuICAgICAgICB0aGlzLmNsZWFyQWxwaGEgPSB0aGlzLnJlbmRlcmVyLmdldENsZWFyQWxwaGEoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRDbGVhckNvbG9yKCdibGFjaycsIDEpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAyKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldChudWxsKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRDbGVhckNvbG9yKHRoaXMuY2xlYXJDb2xvciwgdGhpcy5jbGVhckFscGhhKTtcblxuICAgICAgICB0aGlzLmxpZ2h0cyA9IFtdO1xuICAgICAgICB0aGlzLm1lc2hlcyA9IFtdO1xuICAgICAgICB0aGlzLnNjZW5lLnRyYXZlcnNlKChvYmplY3QpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0dlb21ldHJ5KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lc2hlcy5wdXNoKHsgb2JqZWN0LCBtYXRlcmlhbDogb2JqZWN0Lm1hdGVyaWFsIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0xpZ2h0KG9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpZ2h0cy5wdXNoKHsgb2JqZWN0LCBpbnRlbnNpdHk6IG9iamVjdC5pbnRlbnNpdHkgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIHRoaXMubGlnaHRzLmZvckVhY2goKGxpZ2h0KSA9PiAobGlnaHQub2JqZWN0LmludGVuc2l0eSA9IDApKTtcbiAgICAgICAgdGhpcy5tZXNoZXMuZm9yRWFjaCgobWVzaCkgPT4gKG1lc2gub2JqZWN0Lm1hdGVyaWFsID0gdGhpcy5kaXNjYXJkTWF0KSk7XG4gICAgfVxuXG4gICAgZmluaXNoKCkge1xuICAgICAgICB0aGlzLmxpZ2h0cy5mb3JFYWNoKChsaWdodCkgPT4gKGxpZ2h0Lm9iamVjdC5pbnRlbnNpdHkgPSBsaWdodC5pbnRlbnNpdHkpKTtcbiAgICAgICAgdGhpcy5tZXNoZXMuZm9yRWFjaCgobWVzaCkgPT4gKG1lc2gub2JqZWN0Lm1hdGVyaWFsID0gbWVzaC5tYXRlcmlhbCkpO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyZShvYmplY3Q6IFRIUkVFLk1lc2gpIHtcbiAgICAgICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XG4gICAgfVxuXG4gICAgdXBkYXRlKGNhbWVyYTogVEhSRUUuQ2FtZXJhLCBibGVuZFdpbmRvdyA9IDEwMCkge1xuICAgICAgICBpZiAoIXRoaXMub2JqZWN0KSByZXR1cm47XG4gICAgICAgIC8vIFNldCBlYWNoIG9iamVjdCdzIG1hdGVyaWFsIHRvIHRoZSBVViBVbndyYXBwZWQgU3VyZmFjZSBNYXBwaW5nIFZlcnNpb25cbiAgICAgICAgdGhpcy5hdmVyYWdpbmdXaW5kb3cudmFsdWUgPSBibGVuZFdpbmRvdztcbiAgICAgICAgdGhpcy5vYmplY3QubWF0ZXJpYWwgPSB0aGlzLnRhcmdldE1hdDtcbiAgICAgICAgLy8gUGluZy1wb25nIHR3byBzdXJmYWNlIGJ1ZmZlcnMgZm9yIHJlYWRpbmcvd3JpdGluZ1xuICAgICAgICBjb25zdCBhY3RpdmVNYXAgPSB0aGlzLmJ1ZmZlcjFBY3RpdmUgPyB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxIDogdGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMjtcbiAgICAgICAgY29uc3QgaW5hY3RpdmVNYXAgPSB0aGlzLmJ1ZmZlcjFBY3RpdmUgPyB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAyIDogdGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMTtcbiAgICAgICAgLy8gUmVuZGVyIHRoZSBvYmplY3QncyBzdXJmYWNlIG1hcHNcbiAgICAgICAgY29uc3Qgb2xkQmcgPSB0aGlzLnNjZW5lLmJhY2tncm91bmQ7XG4gICAgICAgIHRoaXMuc2NlbmUuYmFja2dyb3VuZCA9IG51bGw7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGFjdGl2ZU1hcCk7XG4gICAgICAgIHRoaXMucHJldmlvdXNTaGFkb3dNYXAudmFsdWUgPSBpbmFjdGl2ZU1hcC50ZXh0dXJlO1xuICAgICAgICB0aGlzLmJ1ZmZlcjFBY3RpdmUgPSAhdGhpcy5idWZmZXIxQWN0aXZlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCBjYW1lcmEpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldChudWxsKTtcbiAgICAgICAgdGhpcy5zY2VuZS5iYWNrZ3JvdW5kID0gb2xkQmc7XG4gICAgfVxufVxuIl19
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3NpdmUtbGlnaHQtbWFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3N0YWdpbmcvc3JjL2FjY3VtdWxhdGl2ZS1zaGFkb3dzL3Byb2dyZXNzaXZlLWxpZ2h0LW1hcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsU0FBUyxPQUFPLENBQUMsTUFBVztJQUMzQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLE1BQVc7SUFDOUIsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQztBQUMxQixDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLE1BQU0sT0FBTyxtQkFBbUI7SUFpQi9CLFlBQVksUUFBNkIsRUFBRSxLQUFrQixFQUFFLE1BQWMsSUFBSTtRQUNoRixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7UUFFcEIsMENBQTBDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FB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LGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDL0IsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlzY2FyZE1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL3NoYWRlcnMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5mdW5jdGlvbiBpc0xpZ2h0KG9iamVjdDogYW55KTogb2JqZWN0IGlzIFRIUkVFLkxpZ2h0IHtcblx0cmV0dXJuIG9iamVjdC5pc0xpZ2h0O1xufVxuXG5mdW5jdGlvbiBpc0dlb21ldHJ5KG9iamVjdDogYW55KTogb2JqZWN0IGlzIFRIUkVFLk1lc2gge1xuXHRyZXR1cm4gISFvYmplY3QuZ2VvbWV0cnk7XG59XG5cbi8vIEJhc2VkIG9uIFwiUHJvZ3Jlc3NpdmUgTGlnaHQgTWFwIEFjY3VtdWxhdG9yXCIsIGJ5IFt6YWxvXShodHRwczovL2dpdGh1Yi5jb20vemFsby8pXG5leHBvcnQgY2xhc3MgUHJvZ3Jlc3NpdmVMaWdodE1hcCB7XG5cdHJlbmRlcmVyOiBUSFJFRS5XZWJHTFJlbmRlcmVyO1xuXHRyZXM6IG51bWJlcjtcblx0c2NlbmU6IFRIUkVFLlNjZW5lO1xuXHRvYmplY3Q6IFRIUkVFLk1lc2ggfCBudWxsO1xuXHRidWZmZXIxQWN0aXZlOiBib29sZWFuO1xuXHRwcm9ncmVzc2l2ZUxpZ2h0TWFwMTogVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQ7XG5cdHByb2dyZXNzaXZlTGlnaHRNYXAyOiBUSFJFRS5XZWJHTFJlbmRlclRhcmdldDtcblx0ZGlzY2FyZE1hdDogVEhSRUUuU2hhZGVyTWF0ZXJpYWw7XG5cdHRhcmdldE1hdDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcblx0cHJldmlvdXNTaGFkb3dNYXA6IHsgdmFsdWU6IFRIUkVFLlRleHR1cmUgfTtcblx0YXZlcmFnaW5nV2luZG93OiB7IHZhbHVlOiBudW1iZXIgfTtcblx0Y2xlYXJDb2xvcjogVEhSRUUuQ29sb3I7XG5cdGNsZWFyQWxwaGE6IG51bWJlcjtcblx0bGlnaHRzOiB7IG9iamVjdDogVEhSRUUuTGlnaHQ7IGludGVuc2l0eTogbnVtYmVyIH1bXTtcblx0bWVzaGVzOiB7IG9iamVjdDogVEhSRUUuTWVzaDsgbWF0ZXJpYWw6IFRIUkVFLk1hdGVyaWFsIHwgVEhSRUUuTWF0ZXJpYWxbXSB9W107XG5cblx0Y29uc3RydWN0b3IocmVuZGVyZXI6IFRIUkVFLldlYkdMUmVuZGVyZXIsIHNjZW5lOiBUSFJFRS5TY2VuZSwgcmVzOiBudW1iZXIgPSAxMDI0KSB7XG5cdFx0dGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuXHRcdHRoaXMucmVzID0gcmVzO1xuXHRcdHRoaXMuc2NlbmUgPSBzY2VuZTtcblx0XHR0aGlzLmJ1ZmZlcjFBY3RpdmUgPSBmYWxzZTtcblx0XHR0aGlzLmxpZ2h0cyA9IFtdO1xuXHRcdHRoaXMubWVzaGVzID0gW107XG5cdFx0dGhpcy5vYmplY3QgPSBudWxsO1xuXHRcdHRoaXMuY2xlYXJDb2xvciA9IG5ldyBUSFJFRS5Db2xvcigpO1xuXHRcdHRoaXMuY2xlYXJBbHBoYSA9IDA7XG5cblx0XHQvLyBDcmVhdGUgdGhlIFByb2dyZXNzaXZlIExpZ2h0TWFwIFRleHR1cmVcblx0XHRjb25zdCBmb3JtYXQgPSAvKEFuZHJvaWR8aVBhZHxpUGhvbmV8aVBvZCkvZy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpID8gVEhSRUUuSGFsZkZsb2F0VHlwZSA6IFRIUkVFLkZsb2F0VHlwZTtcblx0XHR0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHRoaXMucmVzLCB0aGlzLnJlcywge1xuXHRcdFx0dHlwZTogZm9ybWF0LFxuXHRcdH0pO1xuXHRcdHRoaXMucHJvZ3Jlc3NpdmVMaWdodE1hcDIgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQodGhpcy5yZXMsIHRoaXMucmVzLCB7XG5cdFx0XHR0eXBlOiBmb3JtYXQsXG5cdFx0fSk7XG5cblx0XHQvLyBJbmplY3Qgc29tZSBzcGljeSBuZXcgbG9naWMgaW50byBhIHN0YW5kYXJkIHBob25nIG1hdGVyaWFsXG5cdFx0dGhpcy5kaXNjYXJkTWF0ID0gbmV3IERpc2NhcmRNYXRlcmlhbCgpO1xuXHRcdHRoaXMudGFyZ2V0TWF0ID0gbmV3IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwoeyBmb2c6IGZhbHNlIH0pO1xuXHRcdHRoaXMucHJldmlvdXNTaGFkb3dNYXAgPSB7IHZhbHVlOiB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxLnRleHR1cmUgfTtcblx0XHR0aGlzLmF2ZXJhZ2luZ1dpbmRvdyA9IHsgdmFsdWU6IDEwMCB9O1xuXHRcdHRoaXMudGFyZ2V0TWF0Lm9uQmVmb3JlQ29tcGlsZSA9IChzaGFkZXIpID0+IHtcblx0XHRcdC8vIFZlcnRleCBTaGFkZXI6IFNldCBWZXJ0ZXggUG9zaXRpb25zIHRvIHRoZSBVbndyYXBwZWQgVVYgUG9zaXRpb25zXG5cdFx0XHRzaGFkZXIudmVydGV4U2hhZGVyID1cblx0XHRcdFx0J3ZhcnlpbmcgdmVjMiB2VXY7XFxuJyArXG5cdFx0XHRcdHNoYWRlci52ZXJ0ZXhTaGFkZXIuc2xpY2UoMCwgLTEpICtcblx0XHRcdFx0J3ZVdiA9IHV2OyBnbF9Qb3NpdGlvbiA9IHZlYzQoKHV2IC0gMC41KSAqIDIuMCwgMS4wLCAxLjApOyB9JztcblxuXHRcdFx0Ly8gRnJhZ21lbnQgU2hhZGVyOiBTZXQgUGl4ZWxzIHRvIGF2ZXJhZ2UgaW4gdGhlIFByZXZpb3VzIGZyYW1lJ3MgU2hhZG93c1xuXHRcdFx0Y29uc3QgYm9keVN0YXJ0ID0gc2hhZGVyLmZyYWdtZW50U2hhZGVyLmluZGV4T2YoJ3ZvaWQgbWFpbigpIHsnKTtcblx0XHRcdHNoYWRlci5mcmFnbWVudFNoYWRlciA9XG5cdFx0XHRcdCd2YXJ5aW5nIHZlYzIgdlV2O1xcbicgK1xuXHRcdFx0XHRzaGFkZXIuZnJhZ21lbnRTaGFkZXIuc2xpY2UoMCwgYm9keVN0YXJ0KSArXG5cdFx0XHRcdCd1bmlmb3JtIHNhbXBsZXIyRCBwcmV2aW91c1NoYWRvd01hcDtcXG5cdHVuaWZvcm0gZmxvYXQgYXZlcmFnaW5nV2luZG93O1xcbicgK1xuXHRcdFx0XHRzaGFkZXIuZnJhZ21lbnRTaGFkZXIuc2xpY2UoYm9keVN0YXJ0IC0gMSwgLTEpICtcblx0XHRcdFx0YFxcbnZlYzMgdGV4ZWxPbGQgPSB0ZXh0dXJlMkQocHJldmlvdXNTaGFkb3dNYXAsIHZVdikucmdiO1xuICAgICAgICBnbF9GcmFnQ29sb3IucmdiID0gbWl4KHRleGVsT2xkLCBnbF9GcmFnQ29sb3IucmdiLCAxLjAvIGF2ZXJhZ2luZ1dpbmRvdyk7XG4gICAgICB9YDtcblxuXHRcdFx0Ly8gU2V0IHRoZSBQcmV2aW91cyBGcmFtZSdzIFRleHR1cmUgQnVmZmVyIGFuZCBBdmVyYWdpbmcgV2luZG93XG5cdFx0XHQvLyBTZXQgdGhlIFByZXZpb3VzIEZyYW1lJ3MgVGV4dHVyZSBCdWZmZXIgYW5kIEF2ZXJhZ2luZyBXaW5kb3dcblx0XHRcdHNoYWRlci51bmlmb3Jtc1sncHJldmlvdXNTaGFkb3dNYXAnXSA9IHRoaXMucHJldmlvdXNTaGFkb3dNYXA7XG5cdFx0XHRzaGFkZXIudW5pZm9ybXNbJ2F2ZXJhZ2luZ1dpbmRvdyddID0gdGhpcy5hdmVyYWdpbmdXaW5kb3c7XG5cdFx0fTtcblx0fVxuXG5cdGNsZWFyKCkge1xuXHRcdHRoaXMucmVuZGVyZXIuZ2V0Q2xlYXJDb2xvcih0aGlzLmNsZWFyQ29sb3IpO1xuXHRcdHRoaXMuY2xlYXJBbHBoYSA9IHRoaXMucmVuZGVyZXIuZ2V0Q2xlYXJBbHBoYSgpO1xuXHRcdHRoaXMucmVuZGVyZXIuc2V0Q2xlYXJDb2xvcignYmxhY2snLCAxKTtcblx0XHR0aGlzLnJlbmRlcmVyLnNldFJlbmRlclRhcmdldCh0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAxKTtcblx0XHR0aGlzLnJlbmRlcmVyLmNsZWFyKCk7XG5cdFx0dGhpcy5yZW5kZXJlci5zZXRSZW5kZXJUYXJnZXQodGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMik7XG5cdFx0dGhpcy5yZW5kZXJlci5jbGVhcigpO1xuXHRcdHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuXHRcdHRoaXMucmVuZGVyZXIuc2V0Q2xlYXJDb2xvcih0aGlzLmNsZWFyQ29sb3IsIHRoaXMuY2xlYXJBbHBoYSk7XG5cblx0XHR0aGlzLmxpZ2h0cyA9IFtdO1xuXHRcdHRoaXMubWVzaGVzID0gW107XG5cdFx0dGhpcy5zY2VuZS50cmF2ZXJzZSgob2JqZWN0KSA9PiB7XG5cdFx0XHRpZiAoaXNHZW9tZXRyeShvYmplY3QpKSB7XG5cdFx0XHRcdHRoaXMubWVzaGVzLnB1c2goeyBvYmplY3QsIG1hdGVyaWFsOiBvYmplY3QubWF0ZXJpYWwgfSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlzTGlnaHQob2JqZWN0KSkge1xuXHRcdFx0XHR0aGlzLmxpZ2h0cy5wdXNoKHsgb2JqZWN0LCBpbnRlbnNpdHk6IG9iamVjdC5pbnRlbnNpdHkgfSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcmVwYXJlKCkge1xuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKGxpZ2h0KSA9PiAobGlnaHQub2JqZWN0LmludGVuc2l0eSA9IDApKTtcblx0XHR0aGlzLm1lc2hlcy5mb3JFYWNoKChtZXNoKSA9PiAobWVzaC5vYmplY3QubWF0ZXJpYWwgPSB0aGlzLmRpc2NhcmRNYXQpKTtcblx0fVxuXG5cdGZpbmlzaCgpIHtcblx0XHR0aGlzLmxpZ2h0cy5mb3JFYWNoKChsaWdodCkgPT4gKGxpZ2h0Lm9iamVjdC5pbnRlbnNpdHkgPSBsaWdodC5pbnRlbnNpdHkpKTtcblx0XHR0aGlzLm1lc2hlcy5mb3JFYWNoKChtZXNoKSA9PiAobWVzaC5vYmplY3QubWF0ZXJpYWwgPSBtZXNoLm1hdGVyaWFsKSk7XG5cdH1cblxuXHRjb25maWd1cmUob2JqZWN0OiBUSFJFRS5NZXNoKSB7XG5cdFx0dGhpcy5vYmplY3QgPSBvYmplY3Q7XG5cdH1cblxuXHR1cGRhdGUoY2FtZXJhOiBUSFJFRS5DYW1lcmEsIGJsZW5kV2luZG93ID0gMTAwKSB7XG5cdFx0aWYgKCF0aGlzLm9iamVjdCkgcmV0dXJuO1xuXHRcdC8vIFNldCBlYWNoIG9iamVjdCdzIG1hdGVyaWFsIHRvIHRoZSBVViBVbndyYXBwZWQgU3VyZmFjZSBNYXBwaW5nIFZlcnNpb25cblx0XHR0aGlzLmF2ZXJhZ2luZ1dpbmRvdy52YWx1ZSA9IGJsZW5kV2luZG93O1xuXHRcdHRoaXMub2JqZWN0Lm1hdGVyaWFsID0gdGhpcy50YXJnZXRNYXQ7XG5cdFx0Ly8gUGluZy1wb25nIHR3byBzdXJmYWNlIGJ1ZmZlcnMgZm9yIHJlYWRpbmcvd3JpdGluZ1xuXHRcdGNvbnN0IGFjdGl2ZU1hcCA9IHRoaXMuYnVmZmVyMUFjdGl2ZSA/IHRoaXMucHJvZ3Jlc3NpdmVMaWdodE1hcDEgOiB0aGlzLnByb2dyZXNzaXZlTGlnaHRNYXAyO1xuXHRcdGNvbnN0IGluYWN0aXZlTWFwID0gdGhpcy5idWZmZXIxQWN0aXZlID8gdGhpcy5wcm9ncmVzc2l2ZUxpZ2h0TWFwMiA6IHRoaXMucHJvZ3Jlc3NpdmVMaWdodE1hcDE7XG5cdFx0Ly8gUmVuZGVyIHRoZSBvYmplY3QncyBzdXJmYWNlIG1hcHNcblx0XHRjb25zdCBvbGRCZyA9IHRoaXMuc2NlbmUuYmFja2dyb3VuZDtcblx0XHR0aGlzLnNjZW5lLmJhY2tncm91bmQgPSBudWxsO1xuXHRcdHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KGFjdGl2ZU1hcCk7XG5cdFx0dGhpcy5wcmV2aW91c1NoYWRvd01hcC52YWx1ZSA9IGluYWN0aXZlTWFwLnRleHR1cmU7XG5cdFx0dGhpcy5idWZmZXIxQWN0aXZlID0gIXRoaXMuYnVmZmVyMUFjdGl2ZTtcblx0XHR0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCBjYW1lcmEpO1xuXHRcdHRoaXMucmVuZGVyZXIuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuXHRcdHRoaXMuc2NlbmUuYmFja2dyb3VuZCA9IG9sZEJnO1xuXHR9XG59XG4iXX0=