angular-three 0.0.2 → 0.0.4
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.
- package/attributes/README.md +3 -0
- package/attributes/index.d.ts +22 -0
- package/attributes/lib/buffer-attribute/buffer-attribute.d.ts +8 -0
- package/attributes/lib/color-attribute/color-attribute.d.ts +8 -0
- package/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.d.ts +8 -0
- package/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.d.ts +8 -0
- package/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.d.ts +8 -0
- package/attributes/lib/fog-attribute/fog-attribute.d.ts +8 -0
- package/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.d.ts +8 -0
- package/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.d.ts +8 -0
- package/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.d.ts +8 -0
- package/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.d.ts +8 -0
- package/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.d.ts +8 -0
- package/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.d.ts +8 -0
- package/attributes/lib/matrix3-attribute/matrix3-attribute.d.ts +8 -0
- package/attributes/lib/matrix4-attribute/matrix4-attribute.d.ts +8 -0
- package/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.d.ts +8 -0
- package/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.d.ts +8 -0
- package/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.d.ts +8 -0
- package/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.d.ts +8 -0
- package/attributes/lib/value-attribute/value-attribute.d.ts +8 -0
- package/attributes/lib/vector2-attribute/vector2-attribute.d.ts +8 -0
- package/attributes/lib/vector3-attribute/vector3-attribute.d.ts +8 -0
- package/attributes/lib/vector4-attribute/vector4-attribute.d.ts +8 -0
- package/audios/README.md +3 -0
- package/audios/index.d.ts +3 -0
- package/audios/lib/audio/audio.d.ts +49 -0
- package/audios/lib/audio-listener/audio-listener.d.ts +35 -0
- package/audios/lib/positional-audio/positional-audio.d.ts +49 -0
- package/cameras/README.md +3 -0
- package/cameras/index.d.ts +5 -0
- package/cameras/lib/array-camera/array-camera.d.ts +56 -0
- package/cameras/lib/cube-camera/cube-camera.d.ts +36 -0
- package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +54 -0
- package/cameras/lib/perspective-camera/perspective-camera.d.ts +55 -0
- package/cameras/lib/stereo-camera/stereo-camera.d.ts +42 -0
- package/esm2020/attributes/angular-three-attributes.mjs +5 -0
- package/esm2020/attributes/index.mjs +24 -0
- package/esm2020/attributes/lib/buffer-attribute/buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/color-attribute/color-attribute.mjs +25 -0
- package/esm2020/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/fog-attribute/fog-attribute.mjs +25 -0
- package/esm2020/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.mjs +25 -0
- package/esm2020/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.mjs +29 -0
- package/esm2020/attributes/lib/matrix3-attribute/matrix3-attribute.mjs +25 -0
- package/esm2020/attributes/lib/matrix4-attribute/matrix4-attribute.mjs +25 -0
- package/esm2020/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/value-attribute/value-attribute.mjs +27 -0
- package/esm2020/attributes/lib/vector2-attribute/vector2-attribute.mjs +25 -0
- package/esm2020/attributes/lib/vector3-attribute/vector3-attribute.mjs +25 -0
- package/esm2020/attributes/lib/vector4-attribute/vector4-attribute.mjs +25 -0
- package/esm2020/audios/angular-three-audios.mjs +5 -0
- package/esm2020/audios/index.mjs +5 -0
- package/esm2020/audios/lib/audio/audio.mjs +68 -0
- package/esm2020/audios/lib/audio-listener/audio-listener.mjs +65 -0
- package/esm2020/audios/lib/positional-audio/positional-audio.mjs +68 -0
- package/esm2020/cameras/angular-three-cameras.mjs +5 -0
- package/esm2020/cameras/index.mjs +7 -0
- package/esm2020/cameras/lib/array-camera/array-camera.mjs +67 -0
- package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +55 -0
- package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +65 -0
- package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +66 -0
- package/esm2020/cameras/lib/stereo-camera/stereo-camera.mjs +61 -0
- package/esm2020/geometries/angular-three-geometries.mjs +5 -0
- package/esm2020/geometries/index.mjs +25 -0
- package/esm2020/geometries/lib/box-geometry/box-geometry.mjs +25 -0
- package/esm2020/geometries/lib/buffer-geometry/buffer-geometry.mjs +25 -0
- package/esm2020/geometries/lib/capsule-geometry/capsule-geometry.mjs +25 -0
- package/esm2020/geometries/lib/circle-geometry/circle-geometry.mjs +25 -0
- package/esm2020/geometries/lib/cone-geometry/cone-geometry.mjs +25 -0
- package/esm2020/geometries/lib/cylinder-geometry/cylinder-geometry.mjs +25 -0
- package/esm2020/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.mjs +25 -0
- package/esm2020/geometries/lib/edges-geometry/edges-geometry.mjs +25 -0
- package/esm2020/geometries/lib/extrude-geometry/extrude-geometry.mjs +25 -0
- package/esm2020/geometries/lib/icosahedron-geometry/icosahedron-geometry.mjs +25 -0
- package/esm2020/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.mjs +25 -0
- package/esm2020/geometries/lib/lathe-geometry/lathe-geometry.mjs +25 -0
- package/esm2020/geometries/lib/octahedron-geometry/octahedron-geometry.mjs +25 -0
- package/esm2020/geometries/lib/plane-geometry/plane-geometry.mjs +25 -0
- package/esm2020/geometries/lib/polyhedron-geometry/polyhedron-geometry.mjs +25 -0
- package/esm2020/geometries/lib/ring-geometry/ring-geometry.mjs +25 -0
- package/esm2020/geometries/lib/shape-geometry/shape-geometry.mjs +25 -0
- package/esm2020/geometries/lib/sphere-geometry/sphere-geometry.mjs +25 -0
- package/esm2020/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.mjs +25 -0
- package/esm2020/geometries/lib/torus-geometry/torus-geometry.mjs +25 -0
- package/esm2020/geometries/lib/torus-knot-geometry/torus-knot-geometry.mjs +25 -0
- package/esm2020/geometries/lib/tube-geometry/tube-geometry.mjs +25 -0
- package/esm2020/geometries/lib/wireframe-geometry/wireframe-geometry.mjs +25 -0
- package/esm2020/helpers/angular-three-helpers.mjs +5 -0
- package/esm2020/helpers/index.mjs +15 -0
- package/esm2020/helpers/lib/arrow-helper/arrow-helper.mjs +25 -0
- package/esm2020/helpers/lib/axes-helper/axes-helper.mjs +25 -0
- package/esm2020/helpers/lib/box-helper/box-helper.mjs +35 -0
- package/esm2020/helpers/lib/box3-helper/box3-helper.mjs +35 -0
- package/esm2020/helpers/lib/camera-helper/camera-helper.mjs +35 -0
- package/esm2020/helpers/lib/directional-light-helper/directional-light-helper.mjs +35 -0
- package/esm2020/helpers/lib/grid-helper/grid-helper.mjs +25 -0
- package/esm2020/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.mjs +35 -0
- package/esm2020/helpers/lib/plane-helper/plane-helper.mjs +35 -0
- package/esm2020/helpers/lib/point-light-helper/point-light-helper.mjs +35 -0
- package/esm2020/helpers/lib/polar-grid-helper/polar-grid-helper.mjs +25 -0
- package/esm2020/helpers/lib/skeleton-helper/skeleton-helper.mjs +35 -0
- package/esm2020/helpers/lib/spot-light-helper/spot-light-helper.mjs +35 -0
- package/esm2020/index.mjs +39 -2
- package/esm2020/lib/canvas.mjs +229 -0
- package/esm2020/lib/di/resize.mjs +19 -0
- package/esm2020/lib/di/window.mjs +13 -0
- package/esm2020/lib/directives/args.mjs +30 -0
- package/esm2020/lib/directives/cursor.mjs +35 -0
- package/esm2020/lib/directives/repeat.mjs +20 -0
- package/esm2020/lib/events.mjs +53 -0
- package/esm2020/lib/instance.mjs +368 -0
- package/esm2020/lib/pipes/math.mjs +15 -0
- package/esm2020/lib/pipes/pi.mjs +14 -0
- package/esm2020/lib/pipes/radian.mjs +14 -0
- package/esm2020/lib/pipes/side.mjs +22 -0
- package/esm2020/lib/ref.mjs +15 -0
- package/esm2020/lib/services/loader.mjs +45 -0
- package/esm2020/lib/services/resize.mjs +127 -0
- package/esm2020/lib/stores/component-store.mjs +137 -0
- package/esm2020/lib/stores/store.mjs +433 -0
- package/esm2020/lib/types.mjs +2 -0
- package/esm2020/lib/utils/apply-props.mjs +135 -0
- package/esm2020/lib/utils/build-graph.mjs +15 -0
- package/esm2020/lib/utils/camera.mjs +28 -0
- package/esm2020/lib/utils/capitalize.mjs +4 -0
- package/esm2020/lib/utils/check-update.mjs +22 -0
- package/esm2020/lib/utils/events.mjs +353 -0
- package/esm2020/lib/utils/get-instance-local-state.mjs +6 -0
- package/esm2020/lib/utils/inject.mjs +18 -0
- package/esm2020/lib/utils/instance.mjs +35 -0
- package/esm2020/lib/utils/is.mjs +54 -0
- package/esm2020/lib/utils/loop.mjs +139 -0
- package/esm2020/lib/utils/make.mjs +30 -0
- package/esm2020/lib/utils/mutate.mjs +24 -0
- package/esm2020/lib/utils/proxy.mjs +99 -0
- package/esm2020/lib/utils/renderer.mjs +15 -0
- package/esm2020/lights/angular-three-lights.mjs +5 -0
- package/esm2020/lights/index.mjs +11 -0
- package/esm2020/lights/lib/ambient-light/ambient-light.mjs +58 -0
- package/esm2020/lights/lib/ambient-light-probe/ambient-light-probe.mjs +59 -0
- package/esm2020/lights/lib/directional-light/directional-light.mjs +59 -0
- package/esm2020/lights/lib/hemisphere-light/hemisphere-light.mjs +60 -0
- package/esm2020/lights/lib/hemisphere-light-probe/hemisphere-light-probe.mjs +61 -0
- package/esm2020/lights/lib/light-probe/light-probe.mjs +59 -0
- package/esm2020/lights/lib/point-light/point-light.mjs +61 -0
- package/esm2020/lights/lib/rect-area-light/rect-area-light.mjs +61 -0
- package/esm2020/lights/lib/spot-light/spot-light.mjs +64 -0
- package/esm2020/materials/angular-three-materials.mjs +5 -0
- package/esm2020/materials/index.mjs +19 -0
- package/esm2020/materials/lib/line-basic-material/line-basic-material.mjs +76 -0
- package/esm2020/materials/lib/line-dashed-material/line-dashed-material.mjs +79 -0
- package/esm2020/materials/lib/mesh-basic-material/mesh-basic-material.mjs +88 -0
- package/esm2020/materials/lib/mesh-depth-material/mesh-depth-material.mjs +79 -0
- package/esm2020/materials/lib/mesh-distance-material/mesh-distance-material.mjs +79 -0
- package/esm2020/materials/lib/mesh-lambert-material/mesh-lambert-material.mjs +99 -0
- package/esm2020/materials/lib/mesh-matcap-material/mesh-matcap-material.mjs +85 -0
- package/esm2020/materials/lib/mesh-normal-material/mesh-normal-material.mjs +82 -0
- package/esm2020/materials/lib/mesh-phong-material/mesh-phong-material.mjs +102 -0
- package/esm2020/materials/lib/mesh-physical-material/mesh-physical-material.mjs +118 -0
- package/esm2020/materials/lib/mesh-standard-material/mesh-standard-material.mjs +99 -0
- package/esm2020/materials/lib/mesh-toon-material/mesh-toon-material.mjs +95 -0
- package/esm2020/materials/lib/points-material/points-material.mjs +77 -0
- package/esm2020/materials/lib/raw-shader-material/raw-shader-material.mjs +82 -0
- package/esm2020/materials/lib/shader-material/shader-material.mjs +82 -0
- package/esm2020/materials/lib/shadow-material/shadow-material.mjs +73 -0
- package/esm2020/materials/lib/sprite-material/sprite-material.mjs +77 -0
- package/esm2020/objects/angular-three-objects.mjs +5 -0
- package/esm2020/objects/index.mjs +14 -0
- package/esm2020/objects/lib/bone/bone.mjs +54 -0
- package/esm2020/objects/lib/group/group.mjs +54 -0
- package/esm2020/objects/lib/instanced-mesh/instanced-mesh.mjs +63 -0
- package/esm2020/objects/lib/line/line.mjs +58 -0
- package/esm2020/objects/lib/line-loop/line-loop.mjs +58 -0
- package/esm2020/objects/lib/line-segments/line-segments.mjs +58 -0
- package/esm2020/objects/lib/lod/lod.mjs +56 -0
- package/esm2020/objects/lib/mesh/mesh.mjs +58 -0
- package/esm2020/objects/lib/points/points.mjs +58 -0
- package/esm2020/objects/lib/skeleton/skeleton.mjs +40 -0
- package/esm2020/objects/lib/skinned-mesh/skinned-mesh.mjs +62 -0
- package/esm2020/objects/lib/sprite/sprite.mjs +57 -0
- package/esm2020/primitives/angular-three-primitives.mjs +5 -0
- package/esm2020/primitives/index.mjs +3 -0
- package/esm2020/primitives/lib/object-primitive/object-primitive.mjs +54 -0
- package/esm2020/primitives/lib/primitive/primitive.mjs +37 -0
- package/esm2020/stats/angular-three-stats.mjs +5 -0
- package/esm2020/stats/index.mjs +2 -0
- package/esm2020/stats/lib/stats/stats.mjs +54 -0
- package/esm2020/textures/angular-three-textures.mjs +5 -0
- package/esm2020/textures/index.mjs +12 -0
- package/esm2020/textures/lib/canvas-texture/canvas-texture.mjs +25 -0
- package/esm2020/textures/lib/compressed-array-texture/compressed-array-texture.mjs +25 -0
- package/esm2020/textures/lib/compressed-texture/compressed-texture.mjs +25 -0
- package/esm2020/textures/lib/cube-texture/cube-texture.mjs +25 -0
- package/esm2020/textures/lib/data-array-texture/data-array-texture.mjs +25 -0
- package/esm2020/textures/lib/data-texture/data-texture.mjs +25 -0
- package/esm2020/textures/lib/data3-dtexture/data3-dtexture.mjs +25 -0
- package/esm2020/textures/lib/depth-texture/depth-texture.mjs +25 -0
- package/esm2020/textures/lib/framebuffer-texture/framebuffer-texture.mjs +25 -0
- package/esm2020/textures/lib/video-texture/video-texture.mjs +25 -0
- package/fesm2015/angular-three-attributes.mjs +462 -0
- package/fesm2015/angular-three-attributes.mjs.map +1 -0
- package/fesm2015/angular-three-audios.mjs +201 -0
- package/fesm2015/angular-three-audios.mjs.map +1 -0
- package/fesm2015/angular-three-cameras.mjs +304 -0
- package/fesm2015/angular-three-cameras.mjs.map +1 -0
- package/fesm2015/angular-three-geometries.mjs +475 -0
- package/fesm2015/angular-three-geometries.mjs.map +1 -0
- package/fesm2015/angular-three-helpers.mjs +365 -0
- package/fesm2015/angular-three-helpers.mjs.map +1 -0
- package/fesm2015/angular-three-lights.mjs +511 -0
- package/fesm2015/angular-three-lights.mjs.map +1 -0
- package/fesm2015/angular-three-materials.mjs +1402 -0
- package/fesm2015/angular-three-materials.mjs.map +1 -0
- package/fesm2015/angular-three-objects.mjs +630 -0
- package/fesm2015/angular-three-objects.mjs.map +1 -0
- package/fesm2015/angular-three-primitives.mjs +95 -0
- package/fesm2015/angular-three-primitives.mjs.map +1 -0
- package/fesm2015/angular-three-stats.mjs +62 -0
- package/fesm2015/angular-three-stats.mjs.map +1 -0
- package/fesm2015/angular-three-textures.mjs +215 -0
- package/fesm2015/angular-three-textures.mjs.map +1 -0
- package/fesm2015/angular-three.mjs +2448 -10
- package/fesm2015/angular-three.mjs.map +1 -1
- package/fesm2020/angular-three-attributes.mjs +462 -0
- package/fesm2020/angular-three-attributes.mjs.map +1 -0
- package/fesm2020/angular-three-audios.mjs +201 -0
- package/fesm2020/angular-three-audios.mjs.map +1 -0
- package/fesm2020/angular-three-cameras.mjs +304 -0
- package/fesm2020/angular-three-cameras.mjs.map +1 -0
- package/fesm2020/angular-three-geometries.mjs +475 -0
- package/fesm2020/angular-three-geometries.mjs.map +1 -0
- package/fesm2020/angular-three-helpers.mjs +365 -0
- package/fesm2020/angular-three-helpers.mjs.map +1 -0
- package/fesm2020/angular-three-lights.mjs +511 -0
- package/fesm2020/angular-three-lights.mjs.map +1 -0
- package/fesm2020/angular-three-materials.mjs +1402 -0
- package/fesm2020/angular-three-materials.mjs.map +1 -0
- package/fesm2020/angular-three-objects.mjs +630 -0
- package/fesm2020/angular-three-objects.mjs.map +1 -0
- package/fesm2020/angular-three-primitives.mjs +95 -0
- package/fesm2020/angular-three-primitives.mjs.map +1 -0
- package/fesm2020/angular-three-stats.mjs +62 -0
- package/fesm2020/angular-three-stats.mjs.map +1 -0
- package/fesm2020/angular-three-textures.mjs +215 -0
- package/fesm2020/angular-three-textures.mjs.map +1 -0
- package/fesm2020/angular-three.mjs +2462 -10
- package/fesm2020/angular-three.mjs.map +1 -1
- package/geometries/README.md +3 -0
- package/geometries/index.d.ts +23 -0
- package/geometries/lib/box-geometry/box-geometry.d.ts +8 -0
- package/geometries/lib/buffer-geometry/buffer-geometry.d.ts +8 -0
- package/geometries/lib/capsule-geometry/capsule-geometry.d.ts +8 -0
- package/geometries/lib/circle-geometry/circle-geometry.d.ts +8 -0
- package/geometries/lib/cone-geometry/cone-geometry.d.ts +8 -0
- package/geometries/lib/cylinder-geometry/cylinder-geometry.d.ts +8 -0
- package/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.d.ts +8 -0
- package/geometries/lib/edges-geometry/edges-geometry.d.ts +8 -0
- package/geometries/lib/extrude-geometry/extrude-geometry.d.ts +8 -0
- package/geometries/lib/icosahedron-geometry/icosahedron-geometry.d.ts +8 -0
- package/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.d.ts +8 -0
- package/geometries/lib/lathe-geometry/lathe-geometry.d.ts +8 -0
- package/geometries/lib/octahedron-geometry/octahedron-geometry.d.ts +8 -0
- package/geometries/lib/plane-geometry/plane-geometry.d.ts +8 -0
- package/geometries/lib/polyhedron-geometry/polyhedron-geometry.d.ts +8 -0
- package/geometries/lib/ring-geometry/ring-geometry.d.ts +8 -0
- package/geometries/lib/shape-geometry/shape-geometry.d.ts +8 -0
- package/geometries/lib/sphere-geometry/sphere-geometry.d.ts +8 -0
- package/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.d.ts +8 -0
- package/geometries/lib/torus-geometry/torus-geometry.d.ts +8 -0
- package/geometries/lib/torus-knot-geometry/torus-knot-geometry.d.ts +8 -0
- package/geometries/lib/tube-geometry/tube-geometry.d.ts +8 -0
- package/geometries/lib/wireframe-geometry/wireframe-geometry.d.ts +8 -0
- package/helpers/README.md +3 -0
- package/helpers/index.d.ts +13 -0
- package/helpers/lib/arrow-helper/arrow-helper.d.ts +8 -0
- package/helpers/lib/axes-helper/axes-helper.d.ts +8 -0
- package/helpers/lib/box-helper/box-helper.d.ts +8 -0
- package/helpers/lib/box3-helper/box3-helper.d.ts +8 -0
- package/helpers/lib/camera-helper/camera-helper.d.ts +8 -0
- package/helpers/lib/directional-light-helper/directional-light-helper.d.ts +8 -0
- package/helpers/lib/grid-helper/grid-helper.d.ts +8 -0
- package/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.d.ts +8 -0
- package/helpers/lib/plane-helper/plane-helper.d.ts +8 -0
- package/helpers/lib/point-light-helper/point-light-helper.d.ts +8 -0
- package/helpers/lib/polar-grid-helper/polar-grid-helper.d.ts +8 -0
- package/helpers/lib/skeleton-helper/skeleton-helper.d.ts +8 -0
- package/helpers/lib/spot-light-helper/spot-light-helper.d.ts +8 -0
- package/index.d.ts +38 -1
- package/lib/canvas.d.ts +46 -0
- package/lib/di/resize.d.ts +12 -0
- package/lib/di/window.d.ts +1 -0
- package/lib/directives/args.d.ts +19 -0
- package/lib/directives/cursor.d.ts +7 -0
- package/lib/directives/repeat.d.ts +7 -0
- package/lib/events.d.ts +2 -0
- package/lib/instance.d.ts +81 -0
- package/lib/pipes/math.d.ts +7 -0
- package/lib/pipes/pi.d.ts +7 -0
- package/lib/pipes/radian.d.ts +7 -0
- package/lib/pipes/side.d.ts +8 -0
- package/lib/ref.d.ts +5 -0
- package/lib/services/loader.d.ts +11 -0
- package/lib/services/resize.d.ts +19 -0
- package/lib/stores/component-store.d.ts +69 -0
- package/lib/stores/store.d.ts +32 -0
- package/lib/types.d.ts +358 -0
- package/lib/utils/apply-props.d.ts +6 -0
- package/lib/utils/build-graph.d.ts +3 -0
- package/lib/utils/camera.d.ts +4 -0
- package/lib/utils/capitalize.d.ts +1 -0
- package/lib/utils/check-update.d.ts +2 -0
- package/lib/utils/events.d.ts +6 -0
- package/lib/utils/get-instance-local-state.d.ts +2 -0
- package/lib/utils/inject.d.ts +9 -0
- package/lib/utils/instance.d.ts +4 -0
- package/lib/utils/is.d.ts +21 -0
- package/lib/utils/loop.d.ts +32 -0
- package/lib/utils/make.d.ts +4 -0
- package/lib/utils/mutate.d.ts +2 -0
- package/lib/utils/proxy.d.ts +7 -0
- package/lib/utils/renderer.d.ts +3 -0
- package/lights/README.md +3 -0
- package/lights/index.d.ts +9 -0
- package/lights/lib/ambient-light/ambient-light.d.ts +39 -0
- package/lights/lib/ambient-light-probe/ambient-light-probe.d.ts +40 -0
- package/lights/lib/directional-light/directional-light.d.ts +40 -0
- package/lights/lib/hemisphere-light/hemisphere-light.d.ts +41 -0
- package/lights/lib/hemisphere-light-probe/hemisphere-light-probe.d.ts +42 -0
- package/lights/lib/light-probe/light-probe.d.ts +40 -0
- package/lights/lib/point-light/point-light.d.ts +42 -0
- package/lights/lib/rect-area-light/rect-area-light.d.ts +42 -0
- package/lights/lib/spot-light/spot-light.d.ts +45 -0
- package/materials/README.md +3 -0
- package/materials/index.d.ts +17 -0
- package/materials/lib/line-basic-material/line-basic-material.d.ts +55 -0
- package/materials/lib/line-dashed-material/line-dashed-material.d.ts +58 -0
- package/materials/lib/mesh-basic-material/mesh-basic-material.d.ts +67 -0
- package/materials/lib/mesh-depth-material/mesh-depth-material.d.ts +58 -0
- package/materials/lib/mesh-distance-material/mesh-distance-material.d.ts +58 -0
- package/materials/lib/mesh-lambert-material/mesh-lambert-material.d.ts +78 -0
- package/materials/lib/mesh-matcap-material/mesh-matcap-material.d.ts +64 -0
- package/materials/lib/mesh-normal-material/mesh-normal-material.d.ts +61 -0
- package/materials/lib/mesh-phong-material/mesh-phong-material.d.ts +81 -0
- package/materials/lib/mesh-physical-material/mesh-physical-material.d.ts +97 -0
- package/materials/lib/mesh-standard-material/mesh-standard-material.d.ts +78 -0
- package/materials/lib/mesh-toon-material/mesh-toon-material.d.ts +74 -0
- package/materials/lib/points-material/points-material.d.ts +56 -0
- package/materials/lib/raw-shader-material/raw-shader-material.d.ts +68 -0
- package/materials/lib/shader-material/shader-material.d.ts +68 -0
- package/materials/lib/shadow-material/shadow-material.d.ts +52 -0
- package/materials/lib/sprite-material/sprite-material.d.ts +56 -0
- package/objects/README.md +3 -0
- package/objects/index.d.ts +12 -0
- package/objects/lib/bone/bone.d.ts +35 -0
- package/objects/lib/group/group.d.ts +35 -0
- package/objects/lib/instanced-mesh/instanced-mesh.d.ts +44 -0
- package/objects/lib/line/line.d.ts +41 -0
- package/objects/lib/line-loop/line-loop.d.ts +41 -0
- package/objects/lib/line-segments/line-segments.d.ts +41 -0
- package/objects/lib/lod/lod.d.ts +40 -0
- package/objects/lib/mesh/mesh.d.ts +41 -0
- package/objects/lib/points/points.d.ts +41 -0
- package/objects/lib/skeleton/skeleton.d.ts +16 -0
- package/objects/lib/skinned-mesh/skinned-mesh.d.ts +45 -0
- package/objects/lib/sprite/sprite.d.ts +38 -0
- package/package.json +93 -2
- package/primitives/README.md +3 -0
- package/primitives/index.d.ts +2 -0
- package/primitives/lib/object-primitive/object-primitive.d.ts +35 -0
- package/primitives/lib/primitive/primitive.d.ts +10 -0
- package/schematics/src/generators/init/generator.d.ts +1 -1
- package/schematics/src/generators/init/generator.js +4 -4
- package/schematics/src/generators/init/generator.js.map +1 -1
- package/stats/README.md +3 -0
- package/stats/index.d.ts +1 -0
- package/stats/lib/stats/stats.d.ts +16 -0
- package/textures/README.md +3 -0
- package/textures/index.d.ts +10 -0
- package/textures/lib/canvas-texture/canvas-texture.d.ts +8 -0
- package/textures/lib/compressed-array-texture/compressed-array-texture.d.ts +8 -0
- package/textures/lib/compressed-texture/compressed-texture.d.ts +8 -0
- package/textures/lib/cube-texture/cube-texture.d.ts +8 -0
- package/textures/lib/data-array-texture/data-array-texture.d.ts +8 -0
- package/textures/lib/data-texture/data-texture.d.ts +8 -0
- package/textures/lib/data3-dtexture/data3-dtexture.d.ts +8 -0
- package/textures/lib/depth-texture/depth-texture.d.ts +8 -0
- package/textures/lib/framebuffer-texture/framebuffer-texture.d.ts +8 -0
- package/textures/lib/video-texture/video-texture.d.ts +8 -0
- package/esm2020/lib/angular-three.module.mjs +0 -15
- package/lib/angular-three.module.d.ts +0 -7
|
@@ -0,0 +1,433 @@
|
|
|
1
|
+
import { inject, Injectable, NgZone } from '@angular/core';
|
|
2
|
+
import { filter, tap } from 'rxjs';
|
|
3
|
+
import * as THREE from 'three';
|
|
4
|
+
import { injectWindow } from '../di/window';
|
|
5
|
+
import { NgtRef } from '../ref';
|
|
6
|
+
import { applyProps } from '../utils/apply-props';
|
|
7
|
+
import { createDefaultCamera, updateCamera } from '../utils/camera';
|
|
8
|
+
import { checkNeedsUpdate } from '../utils/check-update';
|
|
9
|
+
import { prepare } from '../utils/instance';
|
|
10
|
+
import { is } from '../utils/is';
|
|
11
|
+
import { createLoop } from '../utils/loop';
|
|
12
|
+
import { makeDpr } from '../utils/make';
|
|
13
|
+
import { createRenderer } from '../utils/renderer';
|
|
14
|
+
import { defaultProjector, NgtComponentStore, tapEffect } from './component-store';
|
|
15
|
+
import * as i0 from "@angular/core";
|
|
16
|
+
export const rootStateMap = new Map();
|
|
17
|
+
const { invalidate, advance } = createLoop(rootStateMap);
|
|
18
|
+
const shallowLoose = { objects: 'shallow', strict: false };
|
|
19
|
+
export class NgtStore extends NgtComponentStore {
|
|
20
|
+
constructor() {
|
|
21
|
+
super(...arguments);
|
|
22
|
+
this.parentStore = inject(NgtStore, { optional: true, skipSelf: true });
|
|
23
|
+
this.zone = inject(NgZone);
|
|
24
|
+
this.window = injectWindow();
|
|
25
|
+
this.position = new THREE.Vector3();
|
|
26
|
+
this.defaultTarget = new THREE.Vector3();
|
|
27
|
+
this.tempTarget = new THREE.Vector3();
|
|
28
|
+
this.resize = this.effect(($) => {
|
|
29
|
+
let oldSize = this.read((s) => s.size);
|
|
30
|
+
let oldDpr = this.read((s) => s.viewport?.dpr);
|
|
31
|
+
return $.pipe(tap(() => {
|
|
32
|
+
const { camera, size, viewport, gl } = this.read();
|
|
33
|
+
// Resize camera and renderer on changes to size and pixelratio
|
|
34
|
+
if (size !== oldSize || viewport.dpr !== oldDpr) {
|
|
35
|
+
oldSize = size;
|
|
36
|
+
oldDpr = viewport.dpr;
|
|
37
|
+
// Update camera & renderer
|
|
38
|
+
updateCamera(camera, size);
|
|
39
|
+
gl.setPixelRatio(viewport.dpr);
|
|
40
|
+
gl.setSize(size.width, size.height, size.updateStyle);
|
|
41
|
+
}
|
|
42
|
+
}));
|
|
43
|
+
});
|
|
44
|
+
this.invalidate = this.effect(tap(() => void this.read((s) => s.invalidate)()));
|
|
45
|
+
this.isInit = false;
|
|
46
|
+
this.isConfigured = false;
|
|
47
|
+
this.addInteraction = (interaction) => {
|
|
48
|
+
this.write((state) => ({
|
|
49
|
+
...state,
|
|
50
|
+
internal: {
|
|
51
|
+
...state.internal,
|
|
52
|
+
interaction: [...state.internal.interaction, interaction],
|
|
53
|
+
},
|
|
54
|
+
}));
|
|
55
|
+
};
|
|
56
|
+
this.removeInteraction = (uuid) => {
|
|
57
|
+
this.write((state) => ({
|
|
58
|
+
...state,
|
|
59
|
+
internal: {
|
|
60
|
+
...state.internal,
|
|
61
|
+
interaction: state.internal.interaction.filter((interaction) => interaction.uuid !== uuid),
|
|
62
|
+
},
|
|
63
|
+
}));
|
|
64
|
+
};
|
|
65
|
+
this.setPerformanceCurrent = (current) => {
|
|
66
|
+
this.write((s) => ({ performance: { ...s.performance, current } }));
|
|
67
|
+
};
|
|
68
|
+
this.setEvents = (events) => {
|
|
69
|
+
this.write((s) => ({ events: { ...s.events, ...events } }));
|
|
70
|
+
};
|
|
71
|
+
this.setSize = (width, height, top, left, updateStyle) => {
|
|
72
|
+
const camera = this.read((s) => s.camera);
|
|
73
|
+
const size = { width, height, top: top || 0, left: left || 0, updateStyle };
|
|
74
|
+
this.write((state) => ({
|
|
75
|
+
size,
|
|
76
|
+
viewport: {
|
|
77
|
+
...state.viewport,
|
|
78
|
+
...this.getCurrentViewport(camera, this.defaultTarget, size),
|
|
79
|
+
},
|
|
80
|
+
}));
|
|
81
|
+
};
|
|
82
|
+
this.setCamera = (camera) => {
|
|
83
|
+
this.write((s) => ({
|
|
84
|
+
camera,
|
|
85
|
+
viewport: {
|
|
86
|
+
...s.viewport,
|
|
87
|
+
...this.getCurrentViewport(camera),
|
|
88
|
+
},
|
|
89
|
+
}));
|
|
90
|
+
this.read((s) => s.cameraRef).set(camera);
|
|
91
|
+
};
|
|
92
|
+
this.setDpr = (dpr) => {
|
|
93
|
+
const resolved = makeDpr(dpr, this.window);
|
|
94
|
+
this.write((s) => ({
|
|
95
|
+
viewport: {
|
|
96
|
+
...s.viewport,
|
|
97
|
+
dpr: resolved,
|
|
98
|
+
initialDpr: s.viewport.initialDpr || resolved,
|
|
99
|
+
},
|
|
100
|
+
}));
|
|
101
|
+
};
|
|
102
|
+
this.setFrameloop = (frameloop = 'always') => {
|
|
103
|
+
const clock = this.read((s) => s.clock);
|
|
104
|
+
// if frameloop === "never" clock.elapsedTime is updated using advance(timestamp)
|
|
105
|
+
clock.stop();
|
|
106
|
+
clock.elapsedTime = 0;
|
|
107
|
+
if (frameloop !== 'never') {
|
|
108
|
+
clock.start();
|
|
109
|
+
clock.elapsedTime = 0;
|
|
110
|
+
}
|
|
111
|
+
this.write({ frameloop });
|
|
112
|
+
};
|
|
113
|
+
this.getCurrentViewport = (camera = this.read((s) => s.camera), target = this.defaultTarget, size = this.read((s) => s.size)) => {
|
|
114
|
+
const { width, height, top, left } = size;
|
|
115
|
+
const aspect = width / height;
|
|
116
|
+
if (target instanceof THREE.Vector3)
|
|
117
|
+
this.tempTarget.copy(target);
|
|
118
|
+
else
|
|
119
|
+
this.tempTarget.set(...target);
|
|
120
|
+
const distance = camera.getWorldPosition(this.position).distanceTo(this.tempTarget);
|
|
121
|
+
if (is.orthographic(camera)) {
|
|
122
|
+
return {
|
|
123
|
+
width: width / camera.zoom,
|
|
124
|
+
height: height / camera.zoom,
|
|
125
|
+
top,
|
|
126
|
+
left,
|
|
127
|
+
factor: 1,
|
|
128
|
+
distance,
|
|
129
|
+
aspect,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
const fov = (camera.fov * Math.PI) / 180; // convert vertical fov to radians
|
|
133
|
+
const h = 2 * Math.tan(fov / 2) * distance; // visible height
|
|
134
|
+
const w = h * (width / height);
|
|
135
|
+
return {
|
|
136
|
+
width: w,
|
|
137
|
+
height: h,
|
|
138
|
+
top,
|
|
139
|
+
left,
|
|
140
|
+
factor: width / w,
|
|
141
|
+
distance,
|
|
142
|
+
aspect,
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
get rootStateFactory() {
|
|
147
|
+
let root = this.read((s) => s.previousStateFactory);
|
|
148
|
+
while (root && root().previousStateFactory) {
|
|
149
|
+
root = root().previousStateFactory;
|
|
150
|
+
}
|
|
151
|
+
return root || this.read;
|
|
152
|
+
}
|
|
153
|
+
init() {
|
|
154
|
+
if (!this.isInit) {
|
|
155
|
+
const pointer = new THREE.Vector2();
|
|
156
|
+
const scene = prepare(new THREE.Scene(), this.read, this.rootStateFactory, this.parentStore?.get((s) => s.sceneRef));
|
|
157
|
+
let performanceTimeout;
|
|
158
|
+
this.write({
|
|
159
|
+
ready: false,
|
|
160
|
+
cameraRef: new NgtRef(),
|
|
161
|
+
scene,
|
|
162
|
+
sceneRef: new NgtRef(scene),
|
|
163
|
+
events: { priority: 1, enabled: true, connected: false },
|
|
164
|
+
invalidate: (frames = 1) => invalidate(this.read, frames),
|
|
165
|
+
advance: (timestamp, runGlobalEffects) => advance(timestamp, runGlobalEffects, this.read),
|
|
166
|
+
legacy: false,
|
|
167
|
+
linear: false,
|
|
168
|
+
flat: false,
|
|
169
|
+
controls: null,
|
|
170
|
+
clock: new THREE.Clock(),
|
|
171
|
+
pointer,
|
|
172
|
+
frameloop: 'always',
|
|
173
|
+
performance: {
|
|
174
|
+
current: 1,
|
|
175
|
+
min: 0.5,
|
|
176
|
+
max: 1,
|
|
177
|
+
debounce: 200,
|
|
178
|
+
regress: () => {
|
|
179
|
+
this.zone.runOutsideAngular(() => {
|
|
180
|
+
const state = this.read();
|
|
181
|
+
// Clear timeout
|
|
182
|
+
if (performanceTimeout)
|
|
183
|
+
clearTimeout(performanceTimeout);
|
|
184
|
+
// Set lower bound performance
|
|
185
|
+
if (state.performance.current !== state.performance.min)
|
|
186
|
+
this.setPerformanceCurrent(state.performance.min);
|
|
187
|
+
// Go back to upper bound performance after a while unless something regresses meanwhile
|
|
188
|
+
performanceTimeout = setTimeout(() => this.setPerformanceCurrent(this.read((s) => s.performance)?.max || 1), state.performance.debounce);
|
|
189
|
+
});
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
size: { width: 0, height: 0, top: 0, left: 0, updateStyle: false },
|
|
193
|
+
viewport: {
|
|
194
|
+
initialDpr: 0,
|
|
195
|
+
dpr: 0,
|
|
196
|
+
width: 0,
|
|
197
|
+
height: 0,
|
|
198
|
+
top: 0,
|
|
199
|
+
left: 0,
|
|
200
|
+
aspect: 0,
|
|
201
|
+
distance: 0,
|
|
202
|
+
factor: 0,
|
|
203
|
+
getCurrentViewport: this.getCurrentViewport,
|
|
204
|
+
},
|
|
205
|
+
previousStateFactory: this.parentStore?.read.bind(this.parentStore),
|
|
206
|
+
internal: {
|
|
207
|
+
active: false,
|
|
208
|
+
priority: 0,
|
|
209
|
+
frames: 0,
|
|
210
|
+
lastEvent: null,
|
|
211
|
+
interaction: [],
|
|
212
|
+
hovered: new Map(),
|
|
213
|
+
capturedMap: new Map(),
|
|
214
|
+
animations: new Map(),
|
|
215
|
+
subscribers: [],
|
|
216
|
+
initialClick: [0, 0],
|
|
217
|
+
initialHits: [],
|
|
218
|
+
subscribe: (callback, priority = 0, stateFactory = this.read, obj) => {
|
|
219
|
+
const internal = this.read((s) => s.internal);
|
|
220
|
+
// If this subscription was given a priority, it takes rendering into its own hands
|
|
221
|
+
// For that reason we switch off automatic rendering and increase the manual flag
|
|
222
|
+
// As long as this flag is positive there can be no internal rendering at all
|
|
223
|
+
// because there could be multiple render subscriptions
|
|
224
|
+
internal.priority = internal.priority + (priority > 0 ? 1 : 0);
|
|
225
|
+
internal.subscribers.push({ priority, stateFactory, callback, obj });
|
|
226
|
+
// Register subscriber and sort layers from lowest to highest, meaning,
|
|
227
|
+
// highest priority renders last (on top of the other frames)
|
|
228
|
+
internal.subscribers.sort((a, b) => (a.priority || 0) - (b.priority || 0));
|
|
229
|
+
return () => {
|
|
230
|
+
const internalOnCleanUp = this.read((s) => s.internal);
|
|
231
|
+
if (internalOnCleanUp.subscribers) {
|
|
232
|
+
// Decrease manual flag if this subscription had a priority
|
|
233
|
+
internalOnCleanUp.priority = internalOnCleanUp.priority - (priority > 0 ? 1 : 0);
|
|
234
|
+
// Remove subscriber from list
|
|
235
|
+
internalOnCleanUp.subscribers = internalOnCleanUp.subscribers.filter((s) => s.callback !== callback);
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
setPerformanceCurrent: this.setPerformanceCurrent,
|
|
241
|
+
setEvents: this.setEvents,
|
|
242
|
+
setFrameloop: this.setFrameloop,
|
|
243
|
+
setSize: this.setSize,
|
|
244
|
+
setDpr: this.setDpr,
|
|
245
|
+
setCamera: this.setCamera,
|
|
246
|
+
addInteraction: this.addInteraction,
|
|
247
|
+
removeInteraction: this.removeInteraction,
|
|
248
|
+
});
|
|
249
|
+
this.isInit = true;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
configure(inputs, canvasElement) {
|
|
253
|
+
const { gl: glOptions, size: sizeOptions, camera: cameraOptions, raycaster: raycasterOptions, events, orthographic, lookAt, shadows, linear, flat, legacy, dpr, frameloop, performance, } = inputs;
|
|
254
|
+
const state = this.read();
|
|
255
|
+
// Set up renderer (one time only!)
|
|
256
|
+
let gl = state.gl;
|
|
257
|
+
if (!state.gl) {
|
|
258
|
+
this.write({ gl: (gl = createRenderer(glOptions, canvasElement)) });
|
|
259
|
+
}
|
|
260
|
+
// Set up raycaster (one time only!)
|
|
261
|
+
let raycaster = state.raycaster;
|
|
262
|
+
if (!raycaster) {
|
|
263
|
+
this.write({ raycaster: (raycaster = new THREE.Raycaster()) });
|
|
264
|
+
}
|
|
265
|
+
// Set raycaster options
|
|
266
|
+
const { params, ...options } = raycasterOptions || {};
|
|
267
|
+
if (!is.equ(options, raycaster, shallowLoose)) {
|
|
268
|
+
applyProps(raycaster, { ...options });
|
|
269
|
+
}
|
|
270
|
+
if (!is.equ(params, raycaster.params, shallowLoose)) {
|
|
271
|
+
applyProps(raycaster, {
|
|
272
|
+
params: { ...raycaster.params, ...(params || {}) },
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
// Create default camera (one time only!)
|
|
276
|
+
if (!state.camera) {
|
|
277
|
+
const isCamera = is.camera(cameraOptions);
|
|
278
|
+
let camera = isCamera ? cameraOptions : createDefaultCamera(orthographic, state.size);
|
|
279
|
+
if (!isCamera) {
|
|
280
|
+
if (cameraOptions) {
|
|
281
|
+
applyProps(camera, cameraOptions);
|
|
282
|
+
}
|
|
283
|
+
// Set position.z if position not passed in
|
|
284
|
+
if (!cameraOptions?.position) {
|
|
285
|
+
camera.position.z = 5;
|
|
286
|
+
}
|
|
287
|
+
// Always look at center or passed-in lookAt by default
|
|
288
|
+
if (!cameraOptions?.rotation) {
|
|
289
|
+
if (Array.isArray(lookAt)) {
|
|
290
|
+
camera.lookAt(lookAt[0], lookAt[1], lookAt[2]);
|
|
291
|
+
}
|
|
292
|
+
else if (lookAt instanceof THREE.Vector3) {
|
|
293
|
+
camera.lookAt(lookAt);
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
camera.lookAt(0, 0, 0);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
// Update projection matrix after applying props
|
|
300
|
+
camera.updateProjectionMatrix();
|
|
301
|
+
}
|
|
302
|
+
if (!is.instance(camera)) {
|
|
303
|
+
camera = prepare(camera, this.read, this.rootStateFactory, this.parentStore?.get((s) => s.cameraRef));
|
|
304
|
+
}
|
|
305
|
+
this.write({ camera });
|
|
306
|
+
this.read((s) => s.cameraRef).set(camera);
|
|
307
|
+
}
|
|
308
|
+
// Set up XR (one time only!)
|
|
309
|
+
if (!state.xr) {
|
|
310
|
+
// Handle frame behavior in WebXR
|
|
311
|
+
const handleXRFrame = (timestamp, frame) => {
|
|
312
|
+
const state = this.read();
|
|
313
|
+
if (state.frameloop === 'never')
|
|
314
|
+
return;
|
|
315
|
+
advance(timestamp, true, this.read, frame);
|
|
316
|
+
};
|
|
317
|
+
// Toggle render switching on session
|
|
318
|
+
const handleSessionChange = () => {
|
|
319
|
+
const state = this.read();
|
|
320
|
+
state.gl.xr.enabled = state.gl.xr.isPresenting;
|
|
321
|
+
state.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null);
|
|
322
|
+
if (!state.gl.xr.isPresenting)
|
|
323
|
+
invalidate(this.read);
|
|
324
|
+
};
|
|
325
|
+
// WebXR session manager
|
|
326
|
+
const xr = {
|
|
327
|
+
connect: () => {
|
|
328
|
+
const gl = this.read((s) => s.gl);
|
|
329
|
+
gl.xr.addEventListener('sessionstart', handleSessionChange);
|
|
330
|
+
gl.xr.addEventListener('sessionend', handleSessionChange);
|
|
331
|
+
},
|
|
332
|
+
disconnect: () => {
|
|
333
|
+
const gl = this.read((s) => s.gl);
|
|
334
|
+
gl.xr.removeEventListener('sessionstart', handleSessionChange);
|
|
335
|
+
gl.xr.removeEventListener('sessionend', handleSessionChange);
|
|
336
|
+
},
|
|
337
|
+
};
|
|
338
|
+
// Subscribe to WebXR session events
|
|
339
|
+
if (gl.xr)
|
|
340
|
+
xr.connect();
|
|
341
|
+
this.write({ xr });
|
|
342
|
+
}
|
|
343
|
+
// Set shadowmap
|
|
344
|
+
if (gl.shadowMap) {
|
|
345
|
+
const isBoolean = typeof shadows === 'boolean';
|
|
346
|
+
if ((isBoolean && gl.shadowMap.enabled !== shadows) || !is.equ(shadows, gl.shadowMap, shallowLoose)) {
|
|
347
|
+
const old = gl.shadowMap.enabled;
|
|
348
|
+
gl.shadowMap.enabled = !!shadows;
|
|
349
|
+
if (!isBoolean)
|
|
350
|
+
Object.assign(gl.shadowMap, shadows);
|
|
351
|
+
else
|
|
352
|
+
gl.shadowMap.type = THREE.PCFSoftShadowMap;
|
|
353
|
+
if (old !== gl.shadowMap.enabled)
|
|
354
|
+
checkNeedsUpdate(gl.shadowMap);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// Safely set color management if available.
|
|
358
|
+
// Avoid accessing THREE.ColorManagement to play nice with older versions
|
|
359
|
+
if (is.supportColorManagement()) {
|
|
360
|
+
THREE.ColorManagement.legacyMode = state.legacy;
|
|
361
|
+
}
|
|
362
|
+
const outputEncoding = linear ? THREE.LinearEncoding : THREE.sRGBEncoding;
|
|
363
|
+
const toneMapping = flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping;
|
|
364
|
+
if (gl.outputEncoding !== outputEncoding)
|
|
365
|
+
gl.outputEncoding = outputEncoding;
|
|
366
|
+
if (gl.toneMapping !== toneMapping)
|
|
367
|
+
gl.toneMapping = toneMapping;
|
|
368
|
+
// Update color management state
|
|
369
|
+
if (state.legacy !== legacy)
|
|
370
|
+
this.write({ legacy });
|
|
371
|
+
if (state.linear !== linear)
|
|
372
|
+
this.write({ linear });
|
|
373
|
+
if (state.flat !== flat)
|
|
374
|
+
this.write({ flat });
|
|
375
|
+
// Set gl props
|
|
376
|
+
gl.setClearAlpha(0);
|
|
377
|
+
gl.setPixelRatio(makeDpr(state.viewport.dpr));
|
|
378
|
+
gl.setSize(state.size.width, state.size.height, state.size.updateStyle);
|
|
379
|
+
if (is.obj(glOptions) &&
|
|
380
|
+
!(typeof glOptions === 'function') &&
|
|
381
|
+
!is.glRenderer(glOptions) &&
|
|
382
|
+
!is.equ(glOptions, gl, shallowLoose)) {
|
|
383
|
+
applyProps(gl, glOptions);
|
|
384
|
+
}
|
|
385
|
+
// Store events internally
|
|
386
|
+
if (events && !state.events.handlers) {
|
|
387
|
+
this.write({ events: events(this.read) });
|
|
388
|
+
}
|
|
389
|
+
// Check pixelratio
|
|
390
|
+
if (dpr && state.viewport.dpr !== makeDpr(dpr)) {
|
|
391
|
+
state.setDpr(dpr);
|
|
392
|
+
}
|
|
393
|
+
// Check size, allow it to take on container bounds initially
|
|
394
|
+
const size = computeInitialSize(canvasElement, sizeOptions);
|
|
395
|
+
if (!is.equ(size, state.size, shallowLoose)) {
|
|
396
|
+
state.setSize(size.width, size.height, size.top, size.left);
|
|
397
|
+
}
|
|
398
|
+
// Check frameloop
|
|
399
|
+
if (state.frameloop !== frameloop)
|
|
400
|
+
state.setFrameloop(frameloop);
|
|
401
|
+
// Check performance
|
|
402
|
+
if (performance && !is.equ(performance, state.performance, shallowLoose)) {
|
|
403
|
+
this.write((state) => ({
|
|
404
|
+
performance: { ...state.performance, ...performance },
|
|
405
|
+
}));
|
|
406
|
+
}
|
|
407
|
+
this.write({ ready: true });
|
|
408
|
+
this.resize(this.select(this.select((s) => s.size), this.select((s) => s.viewport.dpr), defaultProjector, { debounce: true }));
|
|
409
|
+
this.invalidate(this.select((s) => s, { debounce: true }));
|
|
410
|
+
this.zone.run(() => {
|
|
411
|
+
this.isConfigured = true;
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
onReady(cb) {
|
|
415
|
+
return this.effect(tapEffect(cb))(this.select((s) => s.ready).pipe(filter((ready) => ready)));
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
NgtStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
|
|
419
|
+
NgtStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtStore });
|
|
420
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtStore, decorators: [{
|
|
421
|
+
type: Injectable
|
|
422
|
+
}] });
|
|
423
|
+
function computeInitialSize(canvas, defaultSize) {
|
|
424
|
+
if (defaultSize) {
|
|
425
|
+
return defaultSize;
|
|
426
|
+
}
|
|
427
|
+
if (is.canvas(canvas) && canvas.parentElement) {
|
|
428
|
+
const { width, height, top, left } = canvas.parentElement.getBoundingClientRect();
|
|
429
|
+
return { width, height, top, left };
|
|
430
|
+
}
|
|
431
|
+
return { width: 0, height: 0, top: 0, left: 0 };
|
|
432
|
+
}
|
|
433
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9saWIvc3RvcmVzL3N0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsTUFBTSxFQUFnQixHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBYWhDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBRW5GLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztBQUNoRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLFVBQVUsQ0FB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LEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDOztxR0ExZVEsUUFBUTt5R0FBUixRQUFROzJGQUFSLFFBQVE7a0JBRHBCLFVBQVU7O0FBOGVYLFNBQVMsa0JBQWtCLENBQUMsTUFBaUQsRUFBRSxXQUFxQjtJQUNoRyxJQUFJLFdBQVcsRUFBRTtRQUNiLE9BQU8sV0FBVyxDQUFDO0tBQ3RCO0lBRUQsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEVBQUU7UUFDM0MsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUVsRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7S0FDdkM7SUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBTdWJzY3JpcHRpb24sIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgaW5qZWN0V2luZG93IH0gZnJvbSAnLi4vZGkvd2luZG93JztcbmltcG9ydCB7IE5ndFJlZiB9IGZyb20gJy4uL3JlZic7XG5pbXBvcnQgdHlwZSB7XG4gICAgTmd0QmVmb3JlUmVuZGVyQ2FsbGJhY2ssXG4gICAgTmd0Q2FtZXJhLFxuICAgIE5ndENhbnZhc0lucHV0cyxcbiAgICBOZ3REcHIsXG4gICAgTmd0RXF1Q29uZmlnLFxuICAgIE5ndEV2ZW50TWFuYWdlcixcbiAgICBOZ3RTaXplLFxuICAgIE5ndFN0YXRlLFxuICAgIE5ndFN0YXRlRmFjdG9yeSxcbiAgICBOZ3RWaWV3cG9ydCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXBwbHlQcm9wcyB9IGZyb20gJy4uL3V0aWxzL2FwcGx5LXByb3BzJztcbmltcG9ydCB7IGNyZWF0ZURlZmF1bHRDYW1lcmEsIHVwZGF0ZUNhbWVyYSB9IGZyb20gJy4uL3V0aWxzL2NhbWVyYSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlIH0gZnJvbSAnLi4vdXRpbHMvY2hlY2stdXBkYXRlJztcbmltcG9ydCB7IHByZXBhcmUgfSBmcm9tICcuLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4uL3V0aWxzL2lzJztcbmltcG9ydCB7IGNyZWF0ZUxvb3AgfSBmcm9tICcuLi91dGlscy9sb29wJztcbmltcG9ydCB7IG1ha2VEcHIgfSBmcm9tICcuLi91dGlscy9tYWtlJztcbmltcG9ydCB7IGNyZWF0ZVJlbmRlcmVyIH0gZnJvbSAnLi4vdXRpbHMvcmVuZGVyZXInO1xuaW1wb3J0IHsgZGVmYXVsdFByb2plY3RvciwgTmd0Q29tcG9uZW50U3RvcmUsIHRhcEVmZmVjdCB9IGZyb20gJy4vY29tcG9uZW50LXN0b3JlJztcblxuZXhwb3J0IGNvbnN0IHJvb3RTdGF0ZU1hcCA9IG5ldyBNYXA8RWxlbWVudCwgTmd0U3RhdGVGYWN0b3J5PigpO1xuY29uc3QgeyBpbnZhbGlkYXRlLCBhZHZhbmNlIH0gPSBjcmVhdGVMb29wKHJvb3RTdGF0ZU1hcCk7XG5cbmNvbnN0IHNoYWxsb3dMb29zZSA9IHsgb2JqZWN0czogJ3NoYWxsb3cnLCBzdHJpY3Q6IGZhbHNlIH0gYXMgTmd0RXF1Q29uZmlnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd0U3RvcmUgZXh0ZW5kcyBOZ3RDb21wb25lbnRTdG9yZTxOZ3RTdGF0ZT4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50U3RvcmUgPSBpbmplY3QoTmd0U3RvcmUsIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgd2luZG93ID0gaW5qZWN0V2luZG93KCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRUYXJnZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVtcFRhcmdldCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cbiAgICBnZXQgcm9vdFN0YXRlRmFjdG9yeSgpOiBOZ3RTdGF0ZUZhY3Rvcnkge1xuICAgICAgICBsZXQgcm9vdCA9IHRoaXMucmVhZCgocykgPT4gcy5wcmV2aW91c1N0YXRlRmFjdG9yeSk7XG4gICAgICAgIHdoaWxlIChyb290ICYmIHJvb3QoKS5wcmV2aW91c1N0YXRlRmFjdG9yeSkge1xuICAgICAgICAgICAgcm9vdCA9IHJvb3QoKS5wcmV2aW91c1N0YXRlRmFjdG9yeTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByb290IHx8IHRoaXMucmVhZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc2l6ZSA9IHRoaXMuZWZmZWN0PGFueT4oKCQpID0+IHtcbiAgICAgICAgbGV0IG9sZFNpemUgPSB0aGlzLnJlYWQoKHMpID0+IHMuc2l6ZSk7XG4gICAgICAgIGxldCBvbGREcHIgPSB0aGlzLnJlYWQoKHMpID0+IHMudmlld3BvcnQ/LmRwcik7XG5cbiAgICAgICAgcmV0dXJuICQucGlwZShcbiAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjYW1lcmEsIHNpemUsIHZpZXdwb3J0LCBnbCB9ID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICAgICAgLy8gUmVzaXplIGNhbWVyYSBhbmQgcmVuZGVyZXIgb24gY2hhbmdlcyB0byBzaXplIGFuZCBwaXhlbHJhdGlvXG4gICAgICAgICAgICAgICAgaWYgKHNpemUgIT09IG9sZFNpemUgfHwgdmlld3BvcnQuZHByICE9PSBvbGREcHIpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkU2l6ZSA9IHNpemU7XG4gICAgICAgICAgICAgICAgICAgIG9sZERwciA9IHZpZXdwb3J0LmRwcjtcbiAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGNhbWVyYSAmIHJlbmRlcmVyXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUNhbWVyYShjYW1lcmEsIHNpemUpO1xuICAgICAgICAgICAgICAgICAgICBnbC5zZXRQaXhlbFJhdGlvKHZpZXdwb3J0LmRwcik7XG4gICAgICAgICAgICAgICAgICAgIGdsLnNldFNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIHNpemUudXBkYXRlU3R5bGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGludmFsaWRhdGUgPSB0aGlzLmVmZmVjdCh0YXAoKCkgPT4gdm9pZCB0aGlzLnJlYWQoKHMpID0+IHMuaW52YWxpZGF0ZSkoKSkpO1xuXG4gICAgaXNJbml0ID0gZmFsc2U7XG4gICAgaXNDb25maWd1cmVkID0gZmFsc2U7XG5cbiAgICBpbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNJbml0KSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludGVyID0gbmV3IFRIUkVFLlZlY3RvcjIoKTtcblxuICAgICAgICAgICAgY29uc3Qgc2NlbmUgPSBwcmVwYXJlKFxuICAgICAgICAgICAgICAgIG5ldyBUSFJFRS5TY2VuZSgpLFxuICAgICAgICAgICAgICAgIHRoaXMucmVhZCxcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3RTdGF0ZUZhY3RvcnksXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRTdG9yZT8uZ2V0KChzKSA9PiBzLnNjZW5lUmVmKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgbGV0IHBlcmZvcm1hbmNlVGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgICAgICAgICAgIHRoaXMud3JpdGUoe1xuICAgICAgICAgICAgICAgIHJlYWR5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBjYW1lcmFSZWY6IG5ldyBOZ3RSZWYoKSxcbiAgICAgICAgICAgICAgICBzY2VuZSxcbiAgICAgICAgICAgICAgICBzY2VuZVJlZjogbmV3IE5ndFJlZihzY2VuZSksXG4gICAgICAgICAgICAgICAgZXZlbnRzOiB7IHByaW9yaXR5OiAxLCBlbmFibGVkOiB0cnVlLCBjb25uZWN0ZWQ6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgaW52YWxpZGF0ZTogKGZyYW1lcyA9IDEpID0+IGludmFsaWRhdGUodGhpcy5yZWFkLCBmcmFtZXMpLFxuICAgICAgICAgICAgICAgIGFkdmFuY2U6ICh0aW1lc3RhbXA6IG51bWJlciwgcnVuR2xvYmFsRWZmZWN0cz86IGJvb2xlYW4pID0+XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UodGltZXN0YW1wLCBydW5HbG9iYWxFZmZlY3RzLCB0aGlzLnJlYWQpLFxuXG4gICAgICAgICAgICAgICAgbGVnYWN5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsaW5lYXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZsYXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xzOiBudWxsLFxuXG4gICAgICAgICAgICAgICAgY2xvY2s6IG5ldyBUSFJFRS5DbG9jaygpLFxuICAgICAgICAgICAgICAgIHBvaW50ZXIsXG5cbiAgICAgICAgICAgICAgICBmcmFtZWxvb3A6ICdhbHdheXMnLFxuXG4gICAgICAgICAgICAgICAgcGVyZm9ybWFuY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudDogMSxcbiAgICAgICAgICAgICAgICAgICAgbWluOiAwLjUsXG4gICAgICAgICAgICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICAgICAgICAgICAgZGVib3VuY2U6IDIwMCxcbiAgICAgICAgICAgICAgICAgICAgcmVncmVzczogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMucmVhZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsZWFyIHRpbWVvdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVyZm9ybWFuY2VUaW1lb3V0KSBjbGVhclRpbWVvdXQocGVyZm9ybWFuY2VUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZXQgbG93ZXIgYm91bmQgcGVyZm9ybWFuY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUucGVyZm9ybWFuY2UuY3VycmVudCAhPT0gc3RhdGUucGVyZm9ybWFuY2UubWluKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFBlcmZvcm1hbmNlQ3VycmVudChzdGF0ZS5wZXJmb3JtYW5jZS5taW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvIGJhY2sgdG8gdXBwZXIgYm91bmQgcGVyZm9ybWFuY2UgYWZ0ZXIgYSB3aGlsZSB1bmxlc3Mgc29tZXRoaW5nIHJlZ3Jlc3NlcyBtZWFud2hpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtYW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLnNldFBlcmZvcm1hbmNlQ3VycmVudCh0aGlzLnJlYWQoKHMpID0+IHMucGVyZm9ybWFuY2UpPy5tYXggfHwgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnBlcmZvcm1hbmNlLmRlYm91bmNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBzaXplOiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgbGVmdDogMCwgdXBkYXRlU3R5bGU6IGZhbHNlIH0sXG4gICAgICAgICAgICAgICAgdmlld3BvcnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERwcjogMCxcbiAgICAgICAgICAgICAgICAgICAgZHByOiAwLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIGFzcGVjdDogMCxcbiAgICAgICAgICAgICAgICAgICAgZGlzdGFuY2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIGZhY3RvcjogMCxcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q3VycmVudFZpZXdwb3J0OiB0aGlzLmdldEN1cnJlbnRWaWV3cG9ydCxcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgcHJldmlvdXNTdGF0ZUZhY3Rvcnk6IHRoaXMucGFyZW50U3RvcmU/LnJlYWQuYmluZCh0aGlzLnBhcmVudFN0b3JlKSxcbiAgICAgICAgICAgICAgICBpbnRlcm5hbDoge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogMCxcbiAgICAgICAgICAgICAgICAgICAgZnJhbWVzOiAwLFxuICAgICAgICAgICAgICAgICAgICBsYXN0RXZlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGludGVyYWN0aW9uOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgaG92ZXJlZDogbmV3IE1hcCgpLFxuICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25zOiBuZXcgTWFwKCksXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbENsaWNrOiBbMCwgMF0sXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxIaXRzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogTmd0QmVmb3JlUmVuZGVyQ2FsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTogbnVtYmVyID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlRmFjdG9yeTogTmd0U3RhdGVGYWN0b3J5ID0gdGhpcy5yZWFkLFxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqPzogVEhSRUUuT2JqZWN0M0QgfCBOZ3RSZWY8VEhSRUUuT2JqZWN0M0Q+XG4gICAgICAgICAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ZXJuYWwgPSB0aGlzLnJlYWQoKHMpID0+IHMuaW50ZXJuYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBzdWJzY3JpcHRpb24gd2FzIGdpdmVuIGEgcHJpb3JpdHksIGl0IHRha2VzIHJlbmRlcmluZyBpbnRvIGl0cyBvd24gaGFuZHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciB0aGF0IHJlYXNvbiB3ZSBzd2l0Y2ggb2ZmIGF1dG9tYXRpYyByZW5kZXJpbmcgYW5kIGluY3JlYXNlIHRoZSBtYW51YWwgZmxhZ1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXMgbG9uZyBhcyB0aGlzIGZsYWcgaXMgcG9zaXRpdmUgdGhlcmUgY2FuIGJlIG5vIGludGVybmFsIHJlbmRlcmluZyBhdCBhbGxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgbXVsdGlwbGUgcmVuZGVyIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsLnByaW9yaXR5ID0gaW50ZXJuYWwucHJpb3JpdHkgKyAocHJpb3JpdHkgPiAwID8gMSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWwuc3Vic2NyaWJlcnMucHVzaCh7IHByaW9yaXR5LCBzdGF0ZUZhY3RvcnksIGNhbGxiYWNrLCBvYmogfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHN1YnNjcmliZXIgYW5kIHNvcnQgbGF5ZXJzIGZyb20gbG93ZXN0IHRvIGhpZ2hlc3QsIG1lYW5pbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBoaWdoZXN0IHByaW9yaXR5IHJlbmRlcnMgbGFzdCAob24gdG9wIG9mIHRoZSBvdGhlciBmcmFtZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbC5zdWJzY3JpYmVycy5zb3J0KChhLCBiKSA9PiAoYS5wcmlvcml0eSB8fCAwKSAtIChiLnByaW9yaXR5IHx8IDApKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnRlcm5hbE9uQ2xlYW5VcCA9IHRoaXMucmVhZCgocykgPT4gcy5pbnRlcm5hbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVybmFsT25DbGVhblVwLnN1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlY3JlYXNlIG1hbnVhbCBmbGFnIGlmIHRoaXMgc3Vic2NyaXB0aW9uIGhhZCBhIHByaW9yaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsT25DbGVhblVwLnByaW9yaXR5ID0gaW50ZXJuYWxPbkNsZWFuVXAucHJpb3JpdHkgLSAocHJpb3JpdHkgPiAwID8gMSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgc3Vic2NyaWJlciBmcm9tIGxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxPbkNsZWFuVXAuc3Vic2NyaWJlcnMgPSBpbnRlcm5hbE9uQ2xlYW5VcC5zdWJzY3JpYmVycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocykgPT4gcy5jYWxsYmFjayAhPT0gY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2V0UGVyZm9ybWFuY2VDdXJyZW50OiB0aGlzLnNldFBlcmZvcm1hbmNlQ3VycmVudCxcbiAgICAgICAgICAgICAgICBzZXRFdmVudHM6IHRoaXMuc2V0RXZlbnRzLFxuICAgICAgICAgICAgICAgIHNldEZyYW1lbG9vcDogdGhpcy5zZXRGcmFtZWxvb3AsXG4gICAgICAgICAgICAgICAgc2V0U2l6ZTogdGhpcy5zZXRTaXplLFxuICAgICAgICAgICAgICAgIHNldERwcjogdGhpcy5zZXREcHIsXG4gICAgICAgICAgICAgICAgc2V0Q2FtZXJhOiB0aGlzLnNldENhbWVyYSxcbiAgICAgICAgICAgICAgICBhZGRJbnRlcmFjdGlvbjogdGhpcy5hZGRJbnRlcmFjdGlvbixcbiAgICAgICAgICAgICAgICByZW1vdmVJbnRlcmFjdGlvbjogdGhpcy5yZW1vdmVJbnRlcmFjdGlvbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5pc0luaXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBhZGRJbnRlcmFjdGlvbiA9IChpbnRlcmFjdGlvbjogVEhSRUUuT2JqZWN0M0QpID0+IHtcbiAgICAgICAgdGhpcy53cml0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICAgIGludGVybmFsOiB7XG4gICAgICAgICAgICAgICAgLi4uc3RhdGUuaW50ZXJuYWwsXG4gICAgICAgICAgICAgICAgaW50ZXJhY3Rpb246IFsuLi5zdGF0ZS5pbnRlcm5hbC5pbnRlcmFjdGlvbiwgaW50ZXJhY3Rpb25dLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbW92ZUludGVyYWN0aW9uID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLndyaXRlKChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS5pbnRlcm5hbCxcbiAgICAgICAgICAgICAgICBpbnRlcmFjdGlvbjogc3RhdGUuaW50ZXJuYWwuaW50ZXJhY3Rpb24uZmlsdGVyKChpbnRlcmFjdGlvbikgPT4gaW50ZXJhY3Rpb24udXVpZCAhPT0gdXVpZCksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2V0UGVyZm9ybWFuY2VDdXJyZW50ID0gKGN1cnJlbnQ6IG51bWJlcikgPT4ge1xuICAgICAgICB0aGlzLndyaXRlKChzKSA9PiAoeyBwZXJmb3JtYW5jZTogeyAuLi5zLnBlcmZvcm1hbmNlLCBjdXJyZW50IH0gfSkpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldEV2ZW50cyA9IChldmVudHM6IFBhcnRpYWw8Tmd0RXZlbnRNYW5hZ2VyPGFueT4+KSA9PiB7XG4gICAgICAgIHRoaXMud3JpdGUoKHMpID0+ICh7IGV2ZW50czogeyAuLi5zLmV2ZW50cywgLi4uZXZlbnRzIH0gfSkpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldFNpemUgPSAod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHRvcD86IG51bWJlciwgbGVmdD86IG51bWJlciwgdXBkYXRlU3R5bGU/OiBib29sZWFuKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbWVyYSA9IHRoaXMucmVhZCgocykgPT4gcy5jYW1lcmEpO1xuICAgICAgICBjb25zdCBzaXplID0geyB3aWR0aCwgaGVpZ2h0LCB0b3A6IHRvcCB8fCAwLCBsZWZ0OiBsZWZ0IHx8IDAsIHVwZGF0ZVN0eWxlIH07XG5cbiAgICAgICAgdGhpcy53cml0ZSgoc3RhdGUpID0+ICh7XG4gICAgICAgICAgICBzaXplLFxuICAgICAgICAgICAgdmlld3BvcnQ6IHtcbiAgICAgICAgICAgICAgICAuLi5zdGF0ZS52aWV3cG9ydCxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldEN1cnJlbnRWaWV3cG9ydChjYW1lcmEsIHRoaXMuZGVmYXVsdFRhcmdldCwgc2l6ZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2V0Q2FtZXJhID0gKGNhbWVyYTogTmd0Q2FtZXJhKSA9PiB7XG4gICAgICAgIHRoaXMud3JpdGUoKHMpID0+ICh7XG4gICAgICAgICAgICBjYW1lcmEsXG4gICAgICAgICAgICB2aWV3cG9ydDoge1xuICAgICAgICAgICAgICAgIC4uLnMudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5nZXRDdXJyZW50Vmlld3BvcnQoY2FtZXJhKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5yZWFkKChzKSA9PiBzLmNhbWVyYVJlZikuc2V0KGNhbWVyYSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2V0RHByID0gKGRwcjogTmd0RHByKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gbWFrZURwcihkcHIsIHRoaXMud2luZG93KTtcbiAgICAgICAgdGhpcy53cml0ZSgocykgPT4gKHtcbiAgICAgICAgICAgIHZpZXdwb3J0OiB7XG4gICAgICAgICAgICAgICAgLi4ucy52aWV3cG9ydCxcbiAgICAgICAgICAgICAgICBkcHI6IHJlc29sdmVkLFxuICAgICAgICAgICAgICAgIGluaXRpYWxEcHI6IHMudmlld3BvcnQuaW5pdGlhbERwciB8fCByZXNvbHZlZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXRGcmFtZWxvb3AgPSAoZnJhbWVsb29wOiAnYWx3YXlzJyB8ICdkZW1hbmQnIHwgJ25ldmVyJyA9ICdhbHdheXMnKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsb2NrID0gdGhpcy5yZWFkKChzKSA9PiBzLmNsb2NrKTtcblxuICAgICAgICAvLyBpZiBmcmFtZWxvb3AgPT09IFwibmV2ZXJcIiBjbG9jay5lbGFwc2VkVGltZSBpcyB1cGRhdGVkIHVzaW5nIGFkdmFuY2UodGltZXN0YW1wKVxuICAgICAgICBjbG9jay5zdG9wKCk7XG4gICAgICAgIGNsb2NrLmVsYXBzZWRUaW1lID0gMDtcblxuICAgICAgICBpZiAoZnJhbWVsb29wICE9PSAnbmV2ZXInKSB7XG4gICAgICAgICAgICBjbG9jay5zdGFydCgpO1xuICAgICAgICAgICAgY2xvY2suZWxhcHNlZFRpbWUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53cml0ZSh7IGZyYW1lbG9vcCB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXRDdXJyZW50Vmlld3BvcnQgPSAoXG4gICAgICAgIGNhbWVyYSA9IHRoaXMucmVhZCgocykgPT4gcy5jYW1lcmEpLFxuICAgICAgICB0YXJnZXQ6IFRIUkVFLlZlY3RvcjMgfCBQYXJhbWV0ZXJzPFRIUkVFLlZlY3RvcjNbJ3NldCddPiA9IHRoaXMuZGVmYXVsdFRhcmdldCxcbiAgICAgICAgc2l6ZSA9IHRoaXMucmVhZCgocykgPT4gcy5zaXplKVxuICAgICk6IE9taXQ8Tmd0Vmlld3BvcnQsICdkcHInIHwgJ2luaXRpYWxEcHInPiA9PiB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgdG9wLCBsZWZ0IH0gPSBzaXplO1xuICAgICAgICBjb25zdCBhc3BlY3QgPSB3aWR0aCAvIGhlaWdodDtcbiAgICAgICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMpIHRoaXMudGVtcFRhcmdldC5jb3B5KHRhcmdldCk7XG4gICAgICAgIGVsc2UgdGhpcy50ZW1wVGFyZ2V0LnNldCguLi50YXJnZXQpO1xuXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gY2FtZXJhLmdldFdvcmxkUG9zaXRpb24odGhpcy5wb3NpdGlvbikuZGlzdGFuY2VUbyh0aGlzLnRlbXBUYXJnZXQpO1xuXG4gICAgICAgIGlmIChpcy5vcnRob2dyYXBoaWMoY2FtZXJhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGggLyBjYW1lcmEuem9vbSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCAvIGNhbWVyYS56b29tLFxuICAgICAgICAgICAgICAgIHRvcCxcbiAgICAgICAgICAgICAgICBsZWZ0LFxuICAgICAgICAgICAgICAgIGZhY3RvcjogMSxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZSxcbiAgICAgICAgICAgICAgICBhc3BlY3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZm92ID0gKGNhbWVyYS5mb3YgKiBNYXRoLlBJKSAvIDE4MDsgLy8gY29udmVydCB2ZXJ0aWNhbCBmb3YgdG8gcmFkaWFuc1xuICAgICAgICBjb25zdCBoID0gMiAqIE1hdGgudGFuKGZvdiAvIDIpICogZGlzdGFuY2U7IC8vIHZpc2libGUgaGVpZ2h0XG4gICAgICAgIGNvbnN0IHcgPSBoICogKHdpZHRoIC8gaGVpZ2h0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiB3LFxuICAgICAgICAgICAgaGVpZ2h0OiBoLFxuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIGZhY3Rvcjogd2lkdGggLyB3LFxuICAgICAgICAgICAgZGlzdGFuY2UsXG4gICAgICAgICAgICBhc3BlY3QsXG4gICAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbmZpZ3VyZShpbnB1dHM6IE5ndENhbnZhc0lucHV0cywgY2FudmFzRWxlbWVudDogSFRNTENhbnZhc0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZ2w6IGdsT3B0aW9ucyxcbiAgICAgICAgICAgIHNpemU6IHNpemVPcHRpb25zLFxuICAgICAgICAgICAgY2FtZXJhOiBjYW1lcmFPcHRpb25zLFxuICAgICAgICAgICAgcmF5Y2FzdGVyOiByYXljYXN0ZXJPcHRpb25zLFxuICAgICAgICAgICAgZXZlbnRzLFxuICAgICAgICAgICAgb3J0aG9ncmFwaGljLFxuICAgICAgICAgICAgbG9va0F0LFxuICAgICAgICAgICAgc2hhZG93cyxcbiAgICAgICAgICAgIGxpbmVhcixcbiAgICAgICAgICAgIGZsYXQsXG4gICAgICAgICAgICBsZWdhY3ksXG4gICAgICAgICAgICBkcHIsXG4gICAgICAgICAgICBmcmFtZWxvb3AsXG4gICAgICAgICAgICBwZXJmb3JtYW5jZSxcbiAgICAgICAgfSA9IGlucHV0cztcblxuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMucmVhZCgpO1xuXG4gICAgICAgIC8vIFNldCB1cCByZW5kZXJlciAob25lIHRpbWUgb25seSEpXG4gICAgICAgIGxldCBnbCA9IHN0YXRlLmdsO1xuICAgICAgICBpZiAoIXN0YXRlLmdsKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlKHsgZ2w6IChnbCA9IGNyZWF0ZVJlbmRlcmVyKGdsT3B0aW9ucywgY2FudmFzRWxlbWVudCkpIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHVwIHJheWNhc3RlciAob25lIHRpbWUgb25seSEpXG4gICAgICAgIGxldCByYXljYXN0ZXIgPSBzdGF0ZS5yYXljYXN0ZXI7XG4gICAgICAgIGlmICghcmF5Y2FzdGVyKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlKHsgcmF5Y2FzdGVyOiAocmF5Y2FzdGVyID0gbmV3IFRIUkVFLlJheWNhc3RlcigpKSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCByYXljYXN0ZXIgb3B0aW9uc1xuICAgICAgICBjb25zdCB7IHBhcmFtcywgLi4ub3B0aW9ucyB9ID0gcmF5Y2FzdGVyT3B0aW9ucyB8fCB7fTtcbiAgICAgICAgaWYgKCFpcy5lcXUob3B0aW9ucywgcmF5Y2FzdGVyLCBzaGFsbG93TG9vc2UpKSB7XG4gICAgICAgICAgICBhcHBseVByb3BzKHJheWNhc3RlciwgeyAuLi5vcHRpb25zIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXMuZXF1KHBhcmFtcywgcmF5Y2FzdGVyLnBhcmFtcywgc2hhbGxvd0xvb3NlKSkge1xuICAgICAgICAgICAgYXBwbHlQcm9wcyhyYXljYXN0ZXIsIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHsgLi4ucmF5Y2FzdGVyLnBhcmFtcywgLi4uKHBhcmFtcyB8fCB7fSkgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGRlZmF1bHQgY2FtZXJhIChvbmUgdGltZSBvbmx5ISlcbiAgICAgICAgaWYgKCFzdGF0ZS5jYW1lcmEpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ2FtZXJhID0gaXMuY2FtZXJhKGNhbWVyYU9wdGlvbnMpO1xuICAgICAgICAgICAgbGV0IGNhbWVyYSA9IGlzQ2FtZXJhID8gKGNhbWVyYU9wdGlvbnMgYXMgTmd0Q2FtZXJhKSA6IGNyZWF0ZURlZmF1bHRDYW1lcmEob3J0aG9ncmFwaGljISwgc3RhdGUuc2l6ZSk7XG4gICAgICAgICAgICBpZiAoIWlzQ2FtZXJhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbWVyYU9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHlQcm9wcyhjYW1lcmEsIGNhbWVyYU9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFNldCBwb3NpdGlvbi56IGlmIHBvc2l0aW9uIG5vdCBwYXNzZWQgaW5cbiAgICAgICAgICAgICAgICBpZiAoIWNhbWVyYU9wdGlvbnM/LnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbWVyYS5wb3NpdGlvbi56ID0gNTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBBbHdheXMgbG9vayBhdCBjZW50ZXIgb3IgcGFzc2VkLWluIGxvb2tBdCBieSBkZWZhdWx0XG4gICAgICAgICAgICAgICAgaWYgKCFjYW1lcmFPcHRpb25zPy5yb3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsb29rQXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW1lcmEubG9va0F0KGxvb2tBdFswXSwgbG9va0F0WzFdLCBsb29rQXRbMl0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvb2tBdCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQobG9va0F0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbWVyYS5sb29rQXQoMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgcHJvamVjdGlvbiBtYXRyaXggYWZ0ZXIgYXBwbHlpbmcgcHJvcHNcbiAgICAgICAgICAgICAgICBjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWlzLmluc3RhbmNlKGNhbWVyYSkpIHtcbiAgICAgICAgICAgICAgICBjYW1lcmEgPSBwcmVwYXJlKFxuICAgICAgICAgICAgICAgICAgICBjYW1lcmEsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290U3RhdGVGYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudFN0b3JlPy5nZXQoKHMpID0+IHMuY2FtZXJhUmVmKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLndyaXRlKHsgY2FtZXJhIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWFkKChzKSA9PiBzLmNhbWVyYVJlZikuc2V0KGNhbWVyYSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdXAgWFIgKG9uZSB0aW1lIG9ubHkhKVxuICAgICAgICBpZiAoIXN0YXRlLnhyKSB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgZnJhbWUgYmVoYXZpb3IgaW4gV2ViWFJcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVhSRnJhbWU6IFhSRnJhbWVSZXF1ZXN0Q2FsbGJhY2sgPSAodGltZXN0YW1wOiBudW1iZXIsIGZyYW1lPzogWFJGcmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmZyYW1lbG9vcCA9PT0gJ25ldmVyJykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGFkdmFuY2UodGltZXN0YW1wLCB0cnVlLCB0aGlzLnJlYWQsIGZyYW1lKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFRvZ2dsZSByZW5kZXIgc3dpdGNoaW5nIG9uIHNlc3Npb25cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5nbC54ci5lbmFibGVkID0gc3RhdGUuZ2wueHIuaXNQcmVzZW50aW5nO1xuXG4gICAgICAgICAgICAgICAgc3RhdGUuZ2wueHIuc2V0QW5pbWF0aW9uTG9vcChzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcgPyBoYW5kbGVYUkZyYW1lIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcpIGludmFsaWRhdGUodGhpcy5yZWFkKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFdlYlhSIHNlc3Npb24gbWFuYWdlclxuICAgICAgICAgICAgY29uc3QgeHIgPSB7XG4gICAgICAgICAgICAgICAgY29ubmVjdDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBnbCA9IHRoaXMucmVhZCgocykgPT4gcy5nbCk7XG4gICAgICAgICAgICAgICAgICAgIGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuICAgICAgICAgICAgICAgICAgICBnbC54ci5hZGRFdmVudExpc3RlbmVyKCdzZXNzaW9uZW5kJywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBkaXNjb25uZWN0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdsID0gdGhpcy5yZWFkKChzKSA9PiBzLmdsKTtcbiAgICAgICAgICAgICAgICAgICAgZ2wueHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbnN0YXJ0JywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgIGdsLnhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25lbmQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIFdlYlhSIHNlc3Npb24gZXZlbnRzXG4gICAgICAgICAgICBpZiAoZ2wueHIpIHhyLmNvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMud3JpdGUoeyB4ciB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNldCBzaGFkb3dtYXBcbiAgICAgICAgaWYgKGdsLnNoYWRvd01hcCkge1xuICAgICAgICAgICAgY29uc3QgaXNCb29sZWFuID0gdHlwZW9mIHNoYWRvd3MgPT09ICdib29sZWFuJztcbiAgICAgICAgICAgIGlmICgoaXNCb29sZWFuICYmIGdsLnNoYWRvd01hcC5lbmFibGVkICE9PSBzaGFkb3dzKSB8fCAhaXMuZXF1KHNoYWRvd3MsIGdsLnNoYWRvd01hcCwgc2hhbGxvd0xvb3NlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9sZCA9IGdsLnNoYWRvd01hcC5lbmFibGVkO1xuICAgICAgICAgICAgICAgIGdsLnNoYWRvd01hcC5lbmFibGVkID0gISFzaGFkb3dzO1xuICAgICAgICAgICAgICAgIGlmICghaXNCb29sZWFuKSBPYmplY3QuYXNzaWduKGdsLnNoYWRvd01hcCwgc2hhZG93cyk7XG4gICAgICAgICAgICAgICAgZWxzZSBnbC5zaGFkb3dNYXAudHlwZSA9IFRIUkVFLlBDRlNvZnRTaGFkb3dNYXA7XG5cbiAgICAgICAgICAgICAgICBpZiAob2xkICE9PSBnbC5zaGFkb3dNYXAuZW5hYmxlZCkgY2hlY2tOZWVkc1VwZGF0ZShnbC5zaGFkb3dNYXApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2FmZWx5IHNldCBjb2xvciBtYW5hZ2VtZW50IGlmIGF2YWlsYWJsZS5cbiAgICAgICAgLy8gQXZvaWQgYWNjZXNzaW5nIFRIUkVFLkNvbG9yTWFuYWdlbWVudCB0byBwbGF5IG5pY2Ugd2l0aCBvbGRlciB2ZXJzaW9uc1xuICAgICAgICBpZiAoaXMuc3VwcG9ydENvbG9yTWFuYWdlbWVudCgpKSB7XG4gICAgICAgICAgICBUSFJFRS5Db2xvck1hbmFnZW1lbnQubGVnYWN5TW9kZSA9IHN0YXRlLmxlZ2FjeTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvdXRwdXRFbmNvZGluZyA9IGxpbmVhciA/IFRIUkVFLkxpbmVhckVuY29kaW5nIDogVEhSRUUuc1JHQkVuY29kaW5nO1xuICAgICAgICBjb25zdCB0b25lTWFwcGluZyA9IGZsYXQgPyBUSFJFRS5Ob1RvbmVNYXBwaW5nIDogVEhSRUUuQUNFU0ZpbG1pY1RvbmVNYXBwaW5nO1xuICAgICAgICBpZiAoZ2wub3V0cHV0RW5jb2RpbmcgIT09IG91dHB1dEVuY29kaW5nKSBnbC5vdXRwdXRFbmNvZGluZyA9IG91dHB1dEVuY29kaW5nO1xuICAgICAgICBpZiAoZ2wudG9uZU1hcHBpbmcgIT09IHRvbmVNYXBwaW5nKSBnbC50b25lTWFwcGluZyA9IHRvbmVNYXBwaW5nO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBjb2xvciBtYW5hZ2VtZW50IHN0YXRlXG4gICAgICAgIGlmIChzdGF0ZS5sZWdhY3kgIT09IGxlZ2FjeSkgdGhpcy53cml0ZSh7IGxlZ2FjeSB9KTtcbiAgICAgICAgaWYgKHN0YXRlLmxpbmVhciAhPT0gbGluZWFyKSB0aGlzLndyaXRlKHsgbGluZWFyIH0pO1xuICAgICAgICBpZiAoc3RhdGUuZmxhdCAhPT0gZmxhdCkgdGhpcy53cml0ZSh7IGZsYXQgfSk7XG5cbiAgICAgICAgLy8gU2V0IGdsIHByb3BzXG4gICAgICAgIGdsLnNldENsZWFyQWxwaGEoMCk7XG4gICAgICAgIGdsLnNldFBpeGVsUmF0aW8obWFrZURwcihzdGF0ZS52aWV3cG9ydC5kcHIpKTtcbiAgICAgICAgZ2wuc2V0U2l6ZShzdGF0ZS5zaXplLndpZHRoLCBzdGF0ZS5zaXplLmhlaWdodCwgc3RhdGUuc2l6ZS51cGRhdGVTdHlsZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXMub2JqKGdsT3B0aW9ucykgJiZcbiAgICAgICAgICAgICEodHlwZW9mIGdsT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgICAgICAgICFpcy5nbFJlbmRlcmVyKGdsT3B0aW9ucykgJiZcbiAgICAgICAgICAgICFpcy5lcXUoZ2xPcHRpb25zLCBnbCwgc2hhbGxvd0xvb3NlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGFwcGx5UHJvcHMoZ2wsIGdsT3B0aW9ucyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdG9yZSBldmVudHMgaW50ZXJuYWxseVxuICAgICAgICBpZiAoZXZlbnRzICYmICFzdGF0ZS5ldmVudHMuaGFuZGxlcnMpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGUoeyBldmVudHM6IGV2ZW50cyh0aGlzLnJlYWQpIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgcGl4ZWxyYXRpb1xuICAgICAgICBpZiAoZHByICYmIHN0YXRlLnZpZXdwb3J0LmRwciAhPT0gbWFrZURwcihkcHIpKSB7XG4gICAgICAgICAgICBzdGF0ZS5zZXREcHIoZHByKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDaGVjayBzaXplLCBhbGxvdyBpdCB0byB0YWtlIG9uIGNvbnRhaW5lciBib3VuZHMgaW5pdGlhbGx5XG4gICAgICAgIGNvbnN0IHNpemUgPSBjb21wdXRlSW5pdGlhbFNpemUoY2FudmFzRWxlbWVudCwgc2l6ZU9wdGlvbnMpO1xuICAgICAgICBpZiAoIWlzLmVxdShzaXplLCBzdGF0ZS5zaXplLCBzaGFsbG93TG9vc2UpKSB7XG4gICAgICAgICAgICBzdGF0ZS5zZXRTaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0LCBzaXplLnRvcCwgc2l6ZS5sZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZyYW1lbG9vcFxuICAgICAgICBpZiAoc3RhdGUuZnJhbWVsb29wICE9PSBmcmFtZWxvb3ApIHN0YXRlLnNldEZyYW1lbG9vcChmcmFtZWxvb3AhKTtcblxuICAgICAgICAvLyBDaGVjayBwZXJmb3JtYW5jZVxuICAgICAgICBpZiAocGVyZm9ybWFuY2UgJiYgIWlzLmVxdShwZXJmb3JtYW5jZSwgc3RhdGUucGVyZm9ybWFuY2UsIHNoYWxsb3dMb29zZSkpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGUoKHN0YXRlKSA9PiAoe1xuICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlOiB7IC4uLnN0YXRlLnBlcmZvcm1hbmNlLCAuLi5wZXJmb3JtYW5jZSB9LFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy53cml0ZSh7IHJlYWR5OiB0cnVlIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZShcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KChzKSA9PiBzLnNpemUpLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0KChzKSA9PiBzLnZpZXdwb3J0LmRwciksXG4gICAgICAgICAgICAgICAgZGVmYXVsdFByb2plY3RvcixcbiAgICAgICAgICAgICAgICB7IGRlYm91bmNlOiB0cnVlIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5pbnZhbGlkYXRlKHRoaXMuc2VsZWN0KChzKSA9PiBzLCB7IGRlYm91bmNlOiB0cnVlIH0pKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzQ29uZmlndXJlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uUmVhZHkoY2I6IFBhcmFtZXRlcnM8dHlwZW9mIHRhcEVmZmVjdD5bMF0pOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZmZlY3QodGFwRWZmZWN0KGNiKSkodGhpcy5zZWxlY3QoKHMpID0+IHMucmVhZHkpLnBpcGUoZmlsdGVyKChyZWFkeSkgPT4gcmVhZHkpKSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlSW5pdGlhbFNpemUoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCB8IFRIUkVFLk9mZnNjcmVlbkNhbnZhcywgZGVmYXVsdFNpemU/OiBOZ3RTaXplKTogTmd0U2l6ZSB7XG4gICAgaWYgKGRlZmF1bHRTaXplKSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0U2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoaXMuY2FudmFzKGNhbnZhcykgJiYgY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB0b3AsIGxlZnQgfSA9IGNhbnZhcy5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIHJldHVybiB7IHdpZHRoLCBoZWlnaHQsIHRvcCwgbGVmdCB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgbGVmdDogMCB9O1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGVJbnB1dCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgUmVuZGVyZXIsIFdlYkdMUmVuZGVyZXIsIFdlYkdMUmVuZGVyZXJQYXJhbWV0ZXJzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0UmVmIH0gZnJvbSAnLi9yZWYnO1xuXG5leHBvcnQgdHlwZSBOZ3RFcXVDb25maWcgPSB7XG4gICAgLyoqIENvbXBhcmUgYXJyYXlzIGJ5IHJlZmVyZW5jZSBlcXVhbGl0eSBhID09PSBiIChkZWZhdWx0KSwgb3IgYnkgc2hhbGxvdyBlcXVhbGl0eSAqL1xuICAgIGFycmF5cz86ICdyZWZlcmVuY2UnIHwgJ3NoYWxsb3cnO1xuICAgIC8qKiBDb21wYXJlIG9iamVjdHMgYnkgcmVmZXJlbmNlIGVxdWFsaXR5IGEgPT09IGIgKGRlZmF1bHQpLCBvciBieSBzaGFsbG93IGVxdWFsaXR5ICovXG4gICAgb2JqZWN0cz86ICdyZWZlcmVuY2UnIHwgJ3NoYWxsb3cnO1xuICAgIC8qKiBJZiB0cnVlIHRoZSBrZXlzIGluIGJvdGggYSBhbmQgYiBtdXN0IG1hdGNoIDE6MSAoZGVmYXVsdCksIGlmIGZhbHNlIGEncyBrZXlzIG11c3QgaW50ZXJzZWN0IGIncyAqL1xuICAgIHN0cmljdD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RPYnNlcnZhYmxlSW5wdXQ8VD4gPSBUIHwgT2JzZXJ2YWJsZUlucHV0PFQ+O1xuXG5leHBvcnQgdHlwZSBOZ3RBbnlSZWNvcmQgPSBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuZXhwb3J0IHR5cGUgTmd0QW55RnVuY3Rpb248VFJldHVybiA9IGFueT4gPSAoLi4uYXJnczogYW55W10pID0+IFRSZXR1cm47XG5leHBvcnQgdHlwZSBOZ3RBbnlDb25zdHJ1Y3RvcjxUT2JqZWN0ID0gYW55PiA9IG5ldyAoLi4uYXJnczogYW55W10pID0+IFRPYmplY3Q7XG5leHBvcnQgdHlwZSBOZ3RBbnlBYnN0cmFjdENvbnN0cnVjdG9yPFRPYmplY3QgPSBhbnk+ID0gYWJzdHJhY3QgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVE9iamVjdDtcbmV4cG9ydCB0eXBlIE5ndEFueUN0b3I8VE9iamVjdCA9IGFueT4gPSBOZ3RBbnlDb25zdHJ1Y3RvcjxUT2JqZWN0PiB8IE5ndEFueUFic3RyYWN0Q29uc3RydWN0b3I8VE9iamVjdD47XG5leHBvcnQgdHlwZSBOZ3RQcm9wZXJ0aWVzPFQ+ID0gUGljazxULCB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgKF86IGFueSkgPT4gYW55ID8gbmV2ZXIgOiBLIH1ba2V5b2YgVF0+O1xuZXhwb3J0IHR5cGUgTmd0Tm9uRnVuY3Rpb25LZXlzPFQ+ID0geyBbSyBpbiBrZXlvZiBUXS0/OiBUW0tdIGV4dGVuZHMgRnVuY3Rpb24gPyBuZXZlciA6IEsgfVtrZXlvZiBUXTtcbmV4cG9ydCB0eXBlIE5ndE92ZXJ3cml0ZTxULCBPPiA9IE9taXQ8VCwgTmd0Tm9uRnVuY3Rpb25LZXlzPE8+PiAmIE87XG5cbmV4cG9ydCB0eXBlIE5ndERwciA9IG51bWJlciB8IFttaW46IG51bWJlciwgbWF4OiBudW1iZXJdO1xuZXhwb3J0IHR5cGUgTmd0U2l6ZSA9IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXI7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXI7IHVwZGF0ZVN0eWxlPzogYm9vbGVhbiB9O1xuZXhwb3J0IHR5cGUgTmd0Vmlld3BvcnQgPSBOZ3RTaXplICYge1xuICAgIC8qKiBUaGUgaW5pdGlhbCBwaXhlbCByYXRpbyAqL1xuICAgIGluaXRpYWxEcHI6IG51bWJlcjtcbiAgICAvKiogQ3VycmVudCBwaXhlbCByYXRpbyAqL1xuICAgIGRwcjogbnVtYmVyO1xuICAgIC8qKiBzaXplLndpZHRoIC8gdmlld3BvcnQud2lkdGggKi9cbiAgICBmYWN0b3I6IG51bWJlcjtcbiAgICAvKiogQ2FtZXJhIGRpc3RhbmNlICovXG4gICAgZGlzdGFuY2U6IG51bWJlcjtcbiAgICAvKiogQ2FtZXJhIGFzcGVjdCByYXRpbzogd2lkdGggLyBoZWlnaHQgKi9cbiAgICBhc3BlY3Q6IG51bWJlcjtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndFBlcmZvcm1hbmNlID0ge1xuICAgIC8qKiBDdXJyZW50IHBlcmZvcm1hbmNlIG5vcm1hbCwgYmV0d2VlbiBtaW4gYW5kIG1heCAqL1xuICAgIGN1cnJlbnQ6IG51bWJlcjtcbiAgICAvKiogSG93IGxvdyB0aGUgcGVyZm9ybWFuY2UgY2FuIGdvLCBiZXR3ZWVuIDAgYW5kIG1heCAqL1xuICAgIG1pbjogbnVtYmVyO1xuICAgIC8qKiBIb3cgaGlnaCB0aGUgcGVyZm9ybWFuY2UgY2FuIGdvLCBiZXR3ZWVuIG1pbiBhbmQgbWF4ICovXG4gICAgbWF4OiBudW1iZXI7XG4gICAgLyoqIFRpbWUgdW50aWwgY3VycmVudCByZXR1cm5zIHRvIG1heCBpbiBtcyAqL1xuICAgIGRlYm91bmNlOiBudW1iZXI7XG4gICAgLyoqIFNldHMgY3VycmVudCB0byBtaW4sIHB1dHMgdGhlIHN5c3RlbSBpbiByZWdyZXNzaW9uICovXG4gICAgcmVncmVzczogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndENhbWVyYSA9IFRIUkVFLk9ydGhvZ3JhcGhpY0NhbWVyYSB8IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhO1xuXG5leHBvcnQgdHlwZSBOZ3REb21FdmVudCA9IFBvaW50ZXJFdmVudCB8IE1vdXNlRXZlbnQgfCBXaGVlbEV2ZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEludGVyc2VjdGlvbkV2ZW50PFRTb3VyY2VFdmVudD4gZXh0ZW5kcyBOZ3RJbnRlcnNlY3Rpb24ge1xuICAgIC8qKiBBbiBhcnJheSBvZiBpbnRlcnNlY3Rpb25zICovXG4gICAgaW50ZXJzZWN0aW9uczogTmd0SW50ZXJzZWN0aW9uW107XG4gICAgLyoqIHZlYzMuc2V0KHBvaW50ZXIueCwgcG9pbnRlci55LCAwKS51bnByb2plY3QoY2FtZXJhKSAqL1xuICAgIHVucHJvamVjdGVkUG9pbnQ6IFRIUkVFLlZlY3RvcjM7XG4gICAgLyoqIE5vcm1hbGl6ZWQgZXZlbnQgY29vcmRpbmF0ZXMgKHg6IFstMSwgMV0sIHk6IFstMSwgMV0pICovXG4gICAgcG9pbnRlcjogVEhSRUUuVmVjdG9yMjtcbiAgICAvKiogZGVsdGEgYmV0d2VlbiBmaXJzdCBjbGljayBhbmQgdGhpcyBldmVudCAqL1xuICAgIGRlbHRhOiBudW1iZXI7XG4gICAgLyoqIHRoZSByYXkgY2FzdGVkIGZyb20gdGhlIGNhbWVyYSAqL1xuICAgIHJheTogVEhSRUUuUmF5O1xuICAgIC8qKiB0aGUgY2FtZXJhIHVzZWQgdG8gcmF5Y2FzdCAqL1xuICAgIGNhbWVyYTogTmd0Q2FtZXJhO1xuICAgIC8qKiBzdG9wUHJvcGFnYXRpb24gd2lsbCBzdG9wIHVuZGVybHlpbmcgaGFuZGxlcnMgZnJvbSBmaXJpbmcgKi9cbiAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7XG4gICAgLyoqIHRoZSBvcmlnaW5hbCBldmVudCAqL1xuICAgIG5hdGl2ZUV2ZW50OiBUU291cmNlRXZlbnQ7XG4gICAgLyoqIGlmIHRoZSBldmVudCB3YXMgc3RvcHBlZCBieSBjYWxsaW5nIHN0b3BQcm9wYWdhdGlvbiAqL1xuICAgIHN0b3BwZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0SW50ZXJzZWN0aW9uIGV4dGVuZHMgVEhSRUUuSW50ZXJzZWN0aW9uIHtcbiAgICAvKiogVGhlIGV2ZW50IHNvdXJjZSAodGhlIG9iamVjdCB3aGljaCByZWdpc3RlcmVkIHRoZSBoYW5kbGVyKSAqL1xuICAgIGV2ZW50T2JqZWN0OiBUSFJFRS5PYmplY3QzRDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RQb2ludGVyQ2FwdHVyZVRhcmdldCB7XG4gICAgaW50ZXJzZWN0aW9uOiBOZ3RJbnRlcnNlY3Rpb247XG4gICAgdGFyZ2V0OiBFbGVtZW50O1xufVxuXG5leHBvcnQgdHlwZSBOZ3RUaHJlZUV2ZW50PFRFdmVudD4gPSBOZ3RJbnRlcnNlY3Rpb25FdmVudDxURXZlbnQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEV2ZW50SGFuZGxlcnMge1xuICAgIGNsaWNrPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuICAgIGNvbnRleHRtZW51PzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuICAgIGRibGNsaWNrPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+KSA9PiB2b2lkO1xuICAgIHBvaW50ZXJ1cD86IChldmVudDogTmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+KSA9PiB2b2lkO1xuICAgIHBvaW50ZXJkb3duPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG4gICAgcG9pbnRlcm92ZXI/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcbiAgICBwb2ludGVyb3V0PzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG4gICAgcG9pbnRlcmVudGVyPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG4gICAgcG9pbnRlcmxlYXZlPzogKGV2ZW50OiBOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4pID0+IHZvaWQ7XG4gICAgcG9pbnRlcm1vdmU/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcbiAgICBwb2ludGVybWlzc2VkPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIHBvaW50ZXJjYW5jZWw/OiAoZXZlbnQ6IE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50PikgPT4gdm9pZDtcbiAgICB3aGVlbD86IChldmVudDogTmd0VGhyZWVFdmVudDxXaGVlbEV2ZW50PikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgTmd0RXZlbnRzID0ge1xuICAgIGNsaWNrOiBFdmVudExpc3RlbmVyO1xuICAgIGNvbnRleHRtZW51OiBFdmVudExpc3RlbmVyO1xuICAgIGRibGNsaWNrOiBFdmVudExpc3RlbmVyO1xuICAgIHdoZWVsOiBFdmVudExpc3RlbmVyO1xuICAgIHBvaW50ZXJkb3duOiBFdmVudExpc3RlbmVyO1xuICAgIHBvaW50ZXJ1cDogRXZlbnRMaXN0ZW5lcjtcbiAgICBwb2ludGVybGVhdmU6IEV2ZW50TGlzdGVuZXI7XG4gICAgcG9pbnRlcm1vdmU6IEV2ZW50TGlzdGVuZXI7XG4gICAgcG9pbnRlcmNhbmNlbDogRXZlbnRMaXN0ZW5lcjtcbiAgICBsb3N0cG9pbnRlcmNhcHR1cmU6IEV2ZW50TGlzdGVuZXI7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RDb25kaXRpb25hbFR5cGU8Q2hpbGQsIFBhcmVudCwgVHJ1dGh5LCBGYWxzeT4gPSBDaGlsZCBleHRlbmRzIFBhcmVudCA/IFRydXRoeSA6IEZhbHN5O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndExvYWRlclByb3RvPFQ+IGV4dGVuZHMgVEhSRUUuTG9hZGVyIHtcbiAgICBsb2FkKFxuICAgICAgICB1cmw6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgICAgICBvbkxvYWQ/OiAocmVzdWx0OiBUKSA9PiB2b2lkLFxuICAgICAgICBvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkLFxuICAgICAgICBvbkVycm9yPzogKGV2ZW50OiBFcnJvckV2ZW50KSA9PiB2b2lkXG4gICAgKTogdW5rbm93bjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RMb2FkZXJFeHRlbnNpb25zIHtcbiAgICAobG9hZGVyOiBUSFJFRS5Mb2FkZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJSZXN1bHQ8VD4gPSBUIGV4dGVuZHMgYW55W10gPyBOZ3RMb2FkZXJQcm90bzxUW251bWJlcl0+IDogTmd0TG9hZGVyUHJvdG88VD47XG5leHBvcnQgdHlwZSBOZ3RCcmFuY2hpbmdSZXR1cm48VCA9IGFueSwgUGFyZW50ID0gYW55LCBDb2VyY2VkID0gYW55PiA9IE5ndENvbmRpdGlvbmFsVHlwZTxULCBQYXJlbnQsIENvZXJjZWQsIFQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndE9iamVjdE1hcCB7XG4gICAgbm9kZXM6IHsgW25hbWU6IHN0cmluZ106IFRIUkVFLk9iamVjdDNEIH07XG4gICAgbWF0ZXJpYWxzOiB7IFtuYW1lOiBzdHJpbmddOiBUSFJFRS5NYXRlcmlhbCB9O1xuICAgIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBJZiAqKlQqKiBjb250YWlucyBhIGNvbnN0cnVjdG9yLCBAc2VlIENvbnN0cnVjdG9yUGFyYW1ldGVycyBtdXN0IGJlIHVzZWQsIG90aGVyd2lzZSAqKlQqKi5cbiAqL1xuZXhwb3J0IHR5cGUgTmd0Tm9kZUFyZ3M8VD4gPSBUIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnkpID0+IGFueSA/IENvbnN0cnVjdG9yUGFyYW1ldGVyczxUPiA6IFQ7XG5cbi8qKlxuICogVHVybiBhbiBpbXBsZW1lbnRhdGlvbiBvZiBUSFJFRS5WZWN0b3IgaW4gdG8gdGhlIHR5cGUgdGhhdCBhbiByM2YgY29tcG9uZW50IHdvdWxkIGFjY2VwdCBhcyBhIHByb3AuXG4gKi9cbnR5cGUgTmd0VmVjdG9yTGlrZTxWZWN0b3JDbGFzcyBleHRlbmRzIFRIUkVFLlZlY3Rvcj4gPVxuICAgIHwgVmVjdG9yQ2xhc3NcbiAgICB8IFBhcmFtZXRlcnM8VmVjdG9yQ2xhc3NbJ3NldCddPlxuICAgIHwgUmVhZG9ubHk8UGFyYW1ldGVyczxWZWN0b3JDbGFzc1snc2V0J10+PlxuICAgIHwgUGFyYW1ldGVyczxWZWN0b3JDbGFzc1snc2V0U2NhbGFyJ10+WzBdO1xuXG5leHBvcnQgdHlwZSBOZ3RWZWN0b3IyID0gTmd0VmVjdG9yTGlrZTxUSFJFRS5WZWN0b3IyPjtcbmV4cG9ydCB0eXBlIE5ndFZlY3RvcjMgPSBOZ3RWZWN0b3JMaWtlPFRIUkVFLlZlY3RvcjM+O1xuZXhwb3J0IHR5cGUgTmd0VmVjdG9yNCA9IE5ndFZlY3Rvckxpa2U8VEhSRUUuVmVjdG9yND47XG5leHBvcnQgdHlwZSBOZ3RMYXllcnMgPSBUSFJFRS5MYXllcnMgfCBQYXJhbWV0ZXJzPFRIUkVFLkxheWVyc1snc2V0J10+WzBdO1xuZXhwb3J0IHR5cGUgTmd0UXVhdGVybmlvbiA9IFRIUkVFLlF1YXRlcm5pb24gfCBQYXJhbWV0ZXJzPFRIUkVFLlF1YXRlcm5pb25bJ3NldCddPjtcbmV4cG9ydCB0eXBlIE5ndEV1bGVyID0gVEhSRUUuRXVsZXIgfCBQYXJhbWV0ZXJzPFRIUkVFLkV1bGVyWydzZXQnXT47XG5leHBvcnQgdHlwZSBOZ3RNYXRyaXg0ID0gVEhSRUUuTWF0cml4NCB8IFBhcmFtZXRlcnM8VEhSRUUuTWF0cml4NFsnc2V0J10+IHwgUmVhZG9ubHk8VEhSRUUuTWF0cml4NFsnc2V0J10+O1xuXG5leHBvcnQgdHlwZSBOZ3RDb2xvciA9IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgVEhSRUUuQ29sb3I+IHwgVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcblxuZXhwb3J0IHR5cGUgTmd0RXh0ZW5kZWRDb2xvcnM8VD4gPSB7XG4gICAgW0sgaW4ga2V5b2YgVF06IFRbS10gZXh0ZW5kcyBUSFJFRS5Db2xvciB8IHVuZGVmaW5lZCA/IE5ndENvbG9yIDogVFtLXTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Tm9kZVByb3BzPFA+IHtcbiAgICBhdHRhY2g/OiBzdHJpbmdbXTtcbiAgICAvKiogQ29uc3RydWN0b3IgYXJndW1lbnRzICovXG4gICAgYXJncz86IE5ndE5vZGVBcmdzPFA+O1xufVxuXG5leHBvcnQgdHlwZSBOZ3ROb2RlPFQsIFA+ID0gTmd0RXh0ZW5kZWRDb2xvcnM8Tmd0T3ZlcndyaXRlPFBhcnRpYWw8VD4sIE5ndE5vZGVQcm9wczxQPj4+O1xuZXhwb3J0IHR5cGUgTmd0T2JqZWN0M0ROb2RlPFQsIFA+ID0gTmd0T3ZlcndyaXRlPFxuICAgIE5ndE5vZGU8VCwgUD4sXG4gICAge1xuICAgICAgICBwb3NpdGlvbj86IE5ndFZlY3RvcjM7XG4gICAgICAgIHVwPzogTmd0VmVjdG9yMztcbiAgICAgICAgc2NhbGU/OiBOZ3RWZWN0b3IzO1xuICAgICAgICByb3RhdGlvbj86IE5ndEV1bGVyO1xuICAgICAgICBtYXRyaXg/OiBOZ3RNYXRyaXg0O1xuICAgICAgICBxdWF0ZXJuaW9uPzogTmd0UXVhdGVybmlvbjtcbiAgICAgICAgbGF5ZXJzPzogTmd0TGF5ZXJzO1xuICAgICAgICBkaXNwb3NlPzogKCgpID0+IHZvaWQpIHwgbnVsbDtcbiAgICB9XG4+ICZcbiAgICBOZ3RFdmVudEhhbmRsZXJzO1xuXG5leHBvcnQgdHlwZSBOZ3RDYW1lcmFXaXRoTWFudWFsID0gTmd0Q2FtZXJhICYgeyBtYW51YWw/OiBib29sZWFuIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0UmVuZGVyU3RhdGUgZXh0ZW5kcyBOZ3RTdGF0ZSB7XG4gICAgZGVsdGE6IG51bWJlcjtcbiAgICBmcmFtZT86IFhSRnJhbWU7XG59XG5cbmV4cG9ydCB0eXBlIE5ndEJlZm9yZVJlbmRlckNhbGxiYWNrPFRPYmplY3QgPSBhbnk+ID0gKHN0YXRlOiBOZ3RSZW5kZXJTdGF0ZSwgb2JqOiBUT2JqZWN0KSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEJlZm9yZVJlbmRlclJlY29yZCB7XG4gICAgb2JqPzogVEhSRUUuT2JqZWN0M0QgfCBOZ3RSZWY7XG4gICAgY2FsbGJhY2s6IE5ndEJlZm9yZVJlbmRlckNhbGxiYWNrPFRIUkVFLk9iamVjdDNEIHwgdW5kZWZpbmVkPjtcbiAgICBwcmlvcml0eT86IG51bWJlcjtcbiAgICBzdGF0ZUZhY3Rvcnk6IE5ndFN0YXRlRmFjdG9yeTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RJbnRlcm5hbFN0YXRlIHtcbiAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgcHJpb3JpdHk6IG51bWJlcjtcbiAgICBmcmFtZXM6IG51bWJlcjtcbiAgICBsYXN0RXZlbnQ6IE5ndERvbUV2ZW50IHwgbnVsbDtcbiAgICBpbnRlcmFjdGlvbjogVEhSRUUuT2JqZWN0M0RbXTtcbiAgICBob3ZlcmVkOiBNYXA8c3RyaW5nLCBOZ3RUaHJlZUV2ZW50PE5ndERvbUV2ZW50Pj47XG4gICAgc3Vic2NyaWJlcnM6IE5ndEJlZm9yZVJlbmRlclJlY29yZFtdO1xuICAgIGNhcHR1cmVkTWFwOiBNYXA8bnVtYmVyLCBNYXA8VEhSRUUuT2JqZWN0M0QsIE5ndFBvaW50ZXJDYXB0dXJlVGFyZ2V0Pj47XG4gICAgaW5pdGlhbENsaWNrOiBbeDogbnVtYmVyLCB5OiBudW1iZXJdO1xuICAgIGluaXRpYWxIaXRzOiBUSFJFRS5PYmplY3QzRFtdO1xuICAgIHN1YnNjcmliZTogKFxuICAgICAgICBjYWxsYmFjazogTmd0QmVmb3JlUmVuZGVyQ2FsbGJhY2ssXG4gICAgICAgIHByaW9yaXR5PzogbnVtYmVyLFxuICAgICAgICBzdGF0ZUZhY3Rvcnk/OiBOZ3RTdGF0ZUZhY3RvcnksXG4gICAgICAgIG9iaj86IFRIUkVFLk9iamVjdDNEIHwgTmd0UmVmXG4gICAgKSA9PiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndFN0YXRlIHtcbiAgICAvKiogVGhlIGZsYWcgdG8gbm90aWZ5IGlmIHRoZSBDYW52YXMgaXMgcmVhZHkgdG8gcmVuZGVyICovXG4gICAgcmVhZHk6IGJvb2xlYW47XG4gICAgLyoqIFRoZSBpbnN0YW5jZSBvZiB0aGUgcmVuZGVyZXIgKi9cbiAgICBnbDogVEhSRUUuV2ViR0xSZW5kZXJlcjtcbiAgICAvKiogRGVmYXVsdCBjYW1lcmEgKi9cbiAgICBjYW1lcmE6IE5ndENhbWVyYVdpdGhNYW51YWwgLyoqIERlZmF1bHQgc2NlbmUgKi87XG4gICAgY2FtZXJhUmVmOiBOZ3RSZWY8Tmd0Q2FtZXJhV2l0aE1hbnVhbD47XG4gICAgc2NlbmU6IFRIUkVFLlNjZW5lO1xuICAgIHNjZW5lUmVmOiBOZ3RSZWY8VEhSRUUuU2NlbmU+O1xuICAgIC8qKiBEZWZhdWx0IHJheWNhc3RlciAqL1xuICAgIHJheWNhc3RlcjogVEhSRUUuUmF5Y2FzdGVyO1xuICAgIC8qKiBEZWZhdWx0IGNsb2NrICovXG4gICAgY2xvY2s6IFRIUkVFLkNsb2NrO1xuICAgIC8qKiBFdmVudCBsYXllciBpbnRlcmZhY2UsIGNvbnRhaW5zIHRoZSBldmVudCBoYW5kbGVyIGFuZCB0aGUgbm9kZSB0aGV5J3JlIGNvbm5lY3RlZCB0byAqL1xuICAgIGV2ZW50czogTmd0RXZlbnRNYW5hZ2VyPGFueT47XG4gICAgLyoqIFhSIGludGVyZmFjZSAqL1xuICAgIHhyOiB7IGNvbm5lY3Q6ICgpID0+IHZvaWQ7IGRpc2Nvbm5lY3Q6ICgpID0+IHZvaWQgfTtcbiAgICAvKiogQ3VycmVudGx5IHVzZWQgY29udHJvbHMgKi9cbiAgICBjb250cm9sczogVEhSRUUuRXZlbnREaXNwYXRjaGVyIHwgbnVsbDtcbiAgICAvKiogTm9ybWFsaXplZCBldmVudCBjb29yZGluYXRlcyAqL1xuICAgIHBvaW50ZXI6IFRIUkVFLlZlY3RvcjI7XG4gICAgLyogV2hldGhlciB0byBlbmFibGUgcjEzOSdzIFRIUkVFLkNvbG9yTWFuYWdlbWVudC5sZWdhY3lNb2RlICovXG4gICAgbGVnYWN5OiBib29sZWFuO1xuICAgIC8qKiBTaG9ydGN1dCB0byBnbC5vdXRwdXRFbmNvZGluZyA9IExpbmVhckVuY29kaW5nICovXG4gICAgbGluZWFyOiBib29sZWFuO1xuICAgIC8qKiBTaG9ydGN1dCB0byBnbC50b25lTWFwcGluZyA9IE5vVG9uZW1hcHBpbmcgKi9cbiAgICBmbGF0OiBib29sZWFuO1xuICAgIC8qKiBSZW5kZXIgbG9vcCBmbGFncyAqL1xuICAgIGZyYW1lbG9vcDogJ2Fsd2F5cycgfCAnZGVtYW5kJyB8ICduZXZlcic7XG4gICAgLyoqIEFkYXB0aXZlIHBlcmZvcm1hbmNlIGludGVyZmFjZSAqL1xuICAgIHBlcmZvcm1hbmNlOiBOZ3RQZXJmb3JtYW5jZTtcbiAgICAvKiogUmVhY3RpdmUgcGl4ZWwtc2l6ZSBvZiB0aGUgY2FudmFzICovXG4gICAgc2l6ZTogTmd0U2l6ZTtcbiAgICAvKiogUmVhY3RpdmUgc2l6ZSBvZiB0aGUgdmlld3BvcnQgaW4gdGhyZWVqcyB1bml0cyAqL1xuICAgIHZpZXdwb3J0OiBOZ3RWaWV3cG9ydCAmIHtcbiAgICAgICAgZ2V0Q3VycmVudFZpZXdwb3J0OiAoXG4gICAgICAgICAgICBjYW1lcmE/OiBOZ3RDYW1lcmEsXG4gICAgICAgICAgICB0YXJnZXQ/OiBUSFJFRS5WZWN0b3IzIHwgUGFyYW1ldGVyczxUSFJFRS5WZWN0b3IzWydzZXQnXT4sXG4gICAgICAgICAgICBzaXplPzogTmd0U2l6ZVxuICAgICAgICApID0+IE9taXQ8Tmd0Vmlld3BvcnQsICdkcHInIHwgJ2luaXRpYWxEcHInPjtcbiAgICB9O1xuICAgIC8qKiBGbGFncyB0aGUgY2FudmFzIGZvciByZW5kZXIsIGJ1dCBkb2Vzbid0IHJlbmRlciBpbiBpdHNlbGYgKi9cbiAgICBpbnZhbGlkYXRlOiAoZnJhbWVzPzogbnVtYmVyKSA9PiB2b2lkO1xuICAgIC8qKiBBZHZhbmNlIChyZW5kZXIpIG9uZSBzdGVwICovXG4gICAgYWR2YW5jZTogKHRpbWVzdGFtcDogbnVtYmVyLCBydW5HbG9iYWxFZmZlY3RzPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgICAvKiogU2hvcnRjdXQgdG8gc2V0dGluZyB0aGUgZXZlbnQgbGF5ZXIgKi9cbiAgICBzZXRFdmVudHM6IChldmVudHM6IFBhcnRpYWw8Tmd0RXZlbnRNYW5hZ2VyPGFueT4+KSA9PiB2b2lkO1xuICAgIC8qKlxuICAgICAqIFNob3J0Y3V0IHRvIG1hbnVhbCBzaXppbmdcbiAgICAgKi9cbiAgICBzZXRTaXplOiAod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHRvcD86IG51bWJlciwgbGVmdD86IG51bWJlciwgdXBkYXRlU3R5bGU/OiBib29sZWFuKSA9PiB2b2lkO1xuICAgIC8qKiBTaG9ydGN1dCB0byBtYW51YWwgc2V0dGluZyB0aGUgcGl4ZWwgcmF0aW8gKi9cbiAgICBzZXREcHI6IChkcHI6IE5ndERwcikgPT4gdm9pZDtcbiAgICAvKiogU2hvcnRjdXQgdG8gZnJhbWVsb29wIGZsYWdzICovXG4gICAgc2V0RnJhbWVsb29wOiAoZnJhbWVsb29wPzogJ2Fsd2F5cycgfCAnZGVtYW5kJyB8ICduZXZlcicpID0+IHZvaWQ7XG4gICAgLyoqIFNob3J0Y3V0IHRvIHNldCBwZXJmb3JtYW5jZS5jdXJyZW50IGZvciBwZXJmb3JtYW5jZSByZWdyZXNzaW5nICovXG4gICAgc2V0UGVyZm9ybWFuY2VDdXJyZW50OiAoY3VycmVudDogbnVtYmVyKSA9PiB2b2lkO1xuICAgIC8qKiBTaG9ydGN1dCB0byBzZXQgdGhlIGN1cnJlbnQgY2FtZXJhICovXG4gICAgc2V0Q2FtZXJhOiAoY2FtZXJhOiBOZ3RDYW1lcmEpID0+IHZvaWQ7XG5cbiAgICAvKiogU2hvcnRjdXQgdG8gYWRkIGFuIG9iamVjdCBhcyBhbiBFdmVudCBpbnRlcmFjdGlvbiAqL1xuICAgIGFkZEludGVyYWN0aW9uKGludGVyYWN0aW9uOiBUSFJFRS5PYmplY3QzRCk6IHZvaWQ7XG5cbiAgICAvKiogU2hvcnRjdXQgdG8gcmVtb3ZlIGFuIG9iamVjdCBVVUlEIGZyb20gcGFydGljaXBhdGluZyBpbiBFdmVudHMgKi9cbiAgICByZW1vdmVJbnRlcmFjdGlvbih1dWlkOiBzdHJpbmcpOiB2b2lkO1xuXG4gICAgLyoqIFdoZW4gdGhlIGNhbnZhcyB3YXMgY2xpY2tlZCBidXQgbm90aGluZyB3YXMgaGl0ICovXG4gICAgb25Qb2ludGVyTWlzc2VkPzogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIC8qIGludGVybmFscyAqL1xuICAgIGludGVybmFsOiBOZ3RJbnRlcm5hbFN0YXRlO1xuICAgIC8qKiBJZiB0aGlzIHN0YXRlIG1vZGVsIGlzIGxheWVyZCAodmlhIGNyZWF0ZVBvcnRhbCkgdGhlbiB0aGlzIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBsYXllciAqL1xuICAgIHByZXZpb3VzU3RhdGVGYWN0b3J5PzogTmd0U3RhdGVGYWN0b3J5O1xufVxuXG5leHBvcnQgdHlwZSBOZ3RTdGF0ZUZhY3RvcnkgPSAoKSA9PiBOZ3RTdGF0ZTtcblxuZXhwb3J0IHR5cGUgTmd0RmlsdGVyRnVuY3Rpb24gPSAoaXRlbXM6IFRIUkVFLkludGVyc2VjdGlvbltdLCBzdGF0ZUZhY3Rvcnk6IE5ndFN0YXRlRmFjdG9yeSkgPT4gVEhSRUUuSW50ZXJzZWN0aW9uW107XG5leHBvcnQgdHlwZSBOZ3RDb21wdXRlRnVuY3Rpb24gPSAoXG4gICAgZXZlbnQ6IE5ndERvbUV2ZW50LFxuICAgIHJvb3RTdGF0ZUZhY3Rvcnk6IE5ndFN0YXRlRmFjdG9yeSxcbiAgICBwcmV2aW91c1N0YXRlRmFjdG9yeT86IE5ndFN0YXRlRmFjdG9yeVxuKSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEV2ZW50TWFuYWdlcjxUVGFyZ2V0PiB7XG4gICAgLyoqIERldGVybWluZXMgaWYgdGhlIGV2ZW50IGxheWVyIGlzIGFjdGl2ZSAqL1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgLyoqIEV2ZW50IGxheWVyIHByaW9yaXR5LCBoaWdoZXIgcHJpb3JpdGl6ZWQgbGF5ZXJzIGNvbWUgZmlyc3QgYW5kIG1heSBzdG9wKC1wcm9wYWdhdGUpIGxvd2VyIGxheWVyICAqL1xuICAgIHByaW9yaXR5OiBudW1iZXI7XG4gICAgLyoqIFRoZSBjb21wdXRlIGZ1bmN0aW9uIG5lZWRzIHRvIHNldCB1cCB0aGUgcmF5Y2FzdGVyIGFuZCBhbiB4eS0gcG9pbnRlciAgKi9cbiAgICBjb21wdXRlPzogTmd0Q29tcHV0ZUZ1bmN0aW9uO1xuICAgIC8qKiBUaGUgZmlsdGVyIGNhbiByZS1vcmRlciBvciByZS1zdHJ1Y3R1cmUgdGhlIGludGVyc2VjdGlvbnMgICovXG4gICAgZmlsdGVyPzogTmd0RmlsdGVyRnVuY3Rpb247XG4gICAgLyoqIFRoZSB0YXJnZXQgbm9kZSB0aGUgZXZlbnQgbGF5ZXIgaXMgdGllZCB0byAqL1xuICAgIGNvbm5lY3RlZD86IFRUYXJnZXQ7XG4gICAgLyoqIEFsbCB0aGUgcG9pbnRlciBldmVudCBoYW5kbGVycyB0aHJvdWdoIHdoaWNoIHRoZSBob3N0IGZvcndhcmRzIG5hdGl2ZSBldmVudHMgKi9cbiAgICBoYW5kbGVycz86IE5ndEV2ZW50cztcbiAgICAvKiogQWxsb3dzIHJlLWNvbm5lY3RpbmcgdG8gYW5vdGhlciB0YXJnZXQgKi9cbiAgICBjb25uZWN0PzogKHRhcmdldDogVFRhcmdldCkgPT4gdm9pZDtcbiAgICAvKiogUmVtb3ZlcyBhbGwgZXhpc3RpbmcgZXZlbnRzIGhhbmRsZXJzIGZyb20gdGhlIHRhcmdldCAqL1xuICAgIGRpc2Nvbm5lY3Q/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBOZ3RBdHRhY2hGdW5jdGlvbjxUQ2hpbGQgPSBhbnksIFRQYXJlbnQgPSBhbnk+ID0gKFxuICAgIHBhcmVudDogTmd0UmVmPFRQYXJlbnQ+LFxuICAgIGNoaWxkOiBOZ3RSZWY8VENoaWxkPixcbiAgICBzdGF0ZUZhY3Rvcnk6IE5ndFN0YXRlRmFjdG9yeVxuKSA9PiB2b2lkIHwgKCgpID0+IHZvaWQpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSB7XG4gICAgLyoqIHRoZSBzdGF0ZSBnZXR0ZXIgb2YgdGhlIGNhbnZhcyB0aGF0IHRoZSBpbnN0YW5jZSBpcyBiZWluZyByZW5kZXJlZCB0byAqL1xuICAgIHN0YXRlRmFjdG9yeTogTmd0U3RhdGVGYWN0b3J5O1xuICAgIHJvb3RGYWN0b3J5OiBOZ3RTdGF0ZUZhY3Rvcnk7XG4gICAgLy8gbm9uLW9iamVjdCAzZFxuICAgIGluc3RhbmNlc1JlZnM6IE5ndFJlZjxOZ3RSZWZbXT47XG4gICAgLy8gb2JqZWN0LTNkXG4gICAgb2JqZWN0c1JlZnM6IE5ndFJlZjxOZ3RSZWZbXT47XG4gICAgcGFyZW50UmVmOiBOZ3RSZWY8Tmd0SW5zdGFuY2VOb2RlPiB8IG51bGw7XG4gICAgaXNQcmltaXRpdmU/OiBib29sZWFuO1xuICAgIGlzUmF3PzogYm9vbGVhbjtcbiAgICBldmVudENvdW50OiBudW1iZXI7XG4gICAgaGFuZGxlcnM6IFBhcnRpYWw8Tmd0RXZlbnRIYW5kbGVycz47XG4gICAgYXJncz86IHVua25vd25bXTtcbiAgICBhdHRhY2g/OiBzdHJpbmdbXSB8ICgoKSA9PiB2b2lkKTtcbiAgICBhdHRhY2hWYWx1ZT86IHVua25vd247XG4gICAgbWVtb2l6ZWQ/OiBOZ3RBbnlSZWNvcmQ7XG59XG5cbmV4cG9ydCB0eXBlIE5ndEluc3RhbmNlTm9kZTxUTm9kZSA9IGFueT4gPSBUTm9kZSAmIHtcbiAgICBfX25ndF9fOiBOZ3RJbnN0YW5jZUxvY2FsU3RhdGU7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xufTtcblxuZXhwb3J0IHR5cGUgTmd0R0xPcHRpb25zID1cbiAgICB8IFJlbmRlcmVyXG4gICAgfCAoKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpID0+IFJlbmRlcmVyKVxuICAgIHwgUGFydGlhbDxOZ3RQcm9wZXJ0aWVzPFdlYkdMUmVuZGVyZXI+IHwgV2ViR0xSZW5kZXJlclBhcmFtZXRlcnM+XG4gICAgfCB1bmRlZmluZWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Q2FudmFzSW5wdXRzIHtcbiAgICAvKiogQSB0aHJlZWpzIHJlbmRlcmVyIGluc3RhbmNlIG9yIHByb3BzIHRoYXQgZ28gaW50byB0aGUgZGVmYXVsdCByZW5kZXJlciAqL1xuICAgIGdsPzogTmd0R0xPcHRpb25zO1xuICAgIC8qKiBEaW1lbnNpb25zIHRvIGZpdCB0aGUgcmVuZGVyZXIgdG8uIFdpbGwgbWVhc3VyZSBjYW52YXMgZGltZW5zaW9ucyBpZiBvbWl0dGVkICovXG4gICAgc2l6ZT86IE5ndFNpemU7XG4gICAgLyoqXG4gICAgICogRW5hYmxlcyBQQ0Zzb2Z0IHNoYWRvd3MuIENhbiBhY2NlcHQgYGdsLnNoYWRvd01hcGAgb3B0aW9ucyBmb3IgZmluZS10dW5pbmcuXG4gICAgICogQHNlZSBodHRwczovL3RocmVlanMub3JnL2RvY3MvI2FwaS9lbi9yZW5kZXJlcnMvV2ViR0xSZW5kZXJlci5zaGFkb3dNYXBcbiAgICAgKi9cbiAgICBzaGFkb3dzPzogYm9vbGVhbiB8IFBhcnRpYWw8VEhSRUUuV2ViR0xTaGFkb3dNYXA+O1xuICAgIC8qKlxuICAgICAqIERpc2FibGVzIHRocmVlIHIxMzkgY29sb3IgbWFuYWdlbWVudC5cbiAgICAgKiBAc2VlIGh0dHBzOi8vdGhyZWVqcy5vcmcvZG9jcy8jbWFudWFsL2VuL2ludHJvZHVjdGlvbi9Db2xvci1tYW5hZ2VtZW50XG4gICAgICovXG4gICAgbGVnYWN5PzogYm9vbGVhbjtcbiAgICAvKiogU3dpdGNoIG9mZiBhdXRvbWF0aWMgc1JHQiBlbmNvZGluZyBhbmQgZ2FtbWEgY29ycmVjdGlvbiAqL1xuICAgIGxpbmVhcj86IGJvb2xlYW47XG4gICAgLyoqIFVzZSBgVEhSRUUuTm9Ub25lTWFwcGluZ2AgaW5zdGVhZCBvZiBgVEhSRUUuQUNFU0ZpbG1pY1RvbmVNYXBwaW5nYCAqL1xuICAgIGZsYXQ/OiBib29sZWFuO1xuICAgIC8qKiBDcmVhdGVzIGFuIG9ydGhvZ3JhcGhpYyBjYW1lcmEgKi9cbiAgICBvcnRob2dyYXBoaWM/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFIzRidzIHJlbmRlciBtb2RlLiBTZXQgdG8gYGRlbWFuZGAgdG8gb25seSByZW5kZXIgb24gc3RhdGUgY2hhbmdlIG9yIGBuZXZlcmAgdG8gdGFrZSBjb250cm9sLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYWR2YW5jZWQvc2NhbGluZy1wZXJmb3JtYW5jZSNvbi1kZW1hbmQtcmVuZGVyaW5nXG4gICAgICovXG4gICAgZnJhbWVsb29wPzogJ2Fsd2F5cycgfCAnZGVtYW5kJyB8ICduZXZlcic7XG4gICAgLyoqXG4gICAgICogUjNGIHBlcmZvcm1hbmNlIG9wdGlvbnMgZm9yIGFkYXB0aXZlIHBlcmZvcm1hbmNlLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYWR2YW5jZWQvc2NhbGluZy1wZXJmb3JtYW5jZSNtb3ZlbWVudC1yZWdyZXNzaW9uXG4gICAgICovXG4gICAgcGVyZm9ybWFuY2U/OiBQYXJ0aWFsPE9taXQ8Tmd0UGVyZm9ybWFuY2UsICdyZWdyZXNzJz4+O1xuICAgIC8qKiBUYXJnZXQgcGl4ZWwgcmF0aW8uIENhbiBjbGFtcCBiZXR3ZWVuIGEgcmFuZ2U6IGBbbWluLCBtYXhdYCAqL1xuICAgIGRwcj86IE5ndERwcjtcbiAgICAvKiogUHJvcHMgdGhhdCBnbyBpbnRvIHRoZSBkZWZhdWx0IHJheWNhc3RlciAqL1xuICAgIHJheWNhc3Rlcj86IFBhcnRpYWw8VEhSRUUuUmF5Y2FzdGVyPjtcbiAgICAvKiogQSBgVEhSRUUuQ2FtZXJhYCBpbnN0YW5jZSBvciBwcm9wcyB0aGF0IGdvIGludG8gdGhlIGRlZmF1bHQgY2FtZXJhICovXG4gICAgY2FtZXJhPzogKFxuICAgICAgICB8IE5ndENhbWVyYVxuICAgICAgICB8IFBhcnRpYWw8XG4gICAgICAgICAgICAgIE5ndE9iamVjdDNETm9kZTxUSFJFRS5DYW1lcmEsIHR5cGVvZiBUSFJFRS5DYW1lcmE+ICZcbiAgICAgICAgICAgICAgICAgIE5ndE9iamVjdDNETm9kZTxUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSwgdHlwZW9mIFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhPiAmXG4gICAgICAgICAgICAgICAgICBOZ3RPYmplY3QzRE5vZGU8VEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhLCB0eXBlb2YgVEhSRUUuT3J0aG9ncmFwaGljQ2FtZXJhPlxuICAgICAgICAgID5cbiAgICApICYge1xuICAgICAgICAvKiogRmxhZ3MgdGhlIGNhbWVyYSBhcyBtYW51YWwsIHB1dHRpbmcgcHJvamVjdGlvbiBpbnRvIHlvdXIgb3duIGhhbmRzICovXG4gICAgICAgIG1hbnVhbD86IGJvb2xlYW47XG4gICAgfTtcbiAgICAvKiogQW4gUjNGIGV2ZW50IG1hbmFnZXIgdG8gbWFuYWdlIGVsZW1lbnRzJyBwb2ludGVyIGV2ZW50cyAqL1xuICAgIGV2ZW50cz86IChzdGF0ZUZhY3Rvcnk6IE5ndFN0YXRlRmFjdG9yeSkgPT4gTmd0RXZlbnRNYW5hZ2VyPEhUTUxFbGVtZW50PjtcbiAgICAvKiogVGhlIHRhcmdldCB3aGVyZSBldmVudHMgYXJlIGJlaW5nIHN1YnNjcmliZWQgdG8sIGRlZmF1bHQ6IHRoZSBkaXYgdGhhdCB3cmFwcyBjYW52YXMgKi9cbiAgICBldmVudFNvdXJjZT86IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgLyoqIFRoZSBldmVudCBwcmVmaXggdGhhdCBpcyBjYXN0IGludG8gY2FudmFzIHBvaW50ZXIgeC95IGV2ZW50cywgZGVmYXVsdDogXCJvZmZzZXRcIiAqL1xuICAgIGV2ZW50UHJlZml4PzogJ29mZnNldCcgfCAnY2xpZW50JyB8ICdwYWdlJyB8ICdsYXllcicgfCAnc2NyZWVuJztcbiAgICAvKiogRGVmYXVsdCBjb29yZGluYXRlIGZvciB0aGUgY2FtZXJhIHRvIGxvb2sgYXQgKi9cbiAgICBsb29rQXQ/OiBUSFJFRS5WZWN0b3IzO1xufVxuIl19
|