three-nebula 10.0.3 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/.claude/rules/no-coauthor.md +4 -0
  2. package/CHANGELOG.md +23 -0
  3. package/build/cjs/behaviour/Rotate.js +2 -2
  4. package/build/cjs/core/System.js +2 -2
  5. package/build/cjs/core/constants.js +2 -2
  6. package/build/cjs/emitter/Emitter.js +10 -3
  7. package/build/cjs/initializer/Rotation.js +95 -0
  8. package/build/cjs/initializer/index.js +9 -1
  9. package/build/cjs/initializer/types.js +4 -2
  10. package/build/cjs/renderer/GPURenderer/Desktop/index.js +23 -2
  11. package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +2 -2
  12. package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +2 -2
  13. package/build/cjs/renderer/GPURenderer/Mobile/index.js +23 -2
  14. package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +2 -2
  15. package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +2 -2
  16. package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +9 -4
  17. package/build/cjs/renderer/GPURenderer/common/stores/Target.js +3 -1
  18. package/build/cjs/renderer/MeshRenderer.js +8 -8
  19. package/build/cjs/renderer/SpriteRenderer.js +6 -1
  20. package/build/cjs/utils/uid.js +3 -5
  21. package/build/esm/behaviour/Rotate.js +2 -2
  22. package/build/esm/core/System.js +2 -2
  23. package/build/esm/core/constants.js +3 -3
  24. package/build/esm/emitter/Emitter.js +11 -4
  25. package/build/esm/initializer/Rotation.js +54 -0
  26. package/build/esm/initializer/index.js +2 -1
  27. package/build/esm/initializer/types.js +2 -1
  28. package/build/esm/renderer/GPURenderer/Desktop/index.js +28 -2
  29. package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +8 -1
  30. package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +4 -1
  31. package/build/esm/renderer/GPURenderer/Mobile/index.js +28 -2
  32. package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +8 -1
  33. package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +4 -1
  34. package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +6 -3
  35. package/build/esm/renderer/GPURenderer/common/stores/Target.js +3 -1
  36. package/build/esm/renderer/MeshRenderer.js +7 -8
  37. package/build/esm/renderer/SpriteRenderer.js +5 -1
  38. package/build/esm/utils/uid.js +2 -2
  39. package/build/three-nebula.js +1 -1
  40. package/build/three-nebula.js.map +1 -1
  41. package/package.json +12 -12
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.INITIALIZER_TYPES_THAT_REQUIRE_THREE = exports.INITIALIZER_TYPE_RATE = exports.INITIALIZER_TYPE_RADIAL_VELOCITY = exports.INITIALIZER_TYPE_POLAR_VELOCITY = exports.INITIALIZER_TYPE_VECTOR_VELOCITY = exports.INITIALIZER_TYPE_ZONE = exports.INITIALIZER_TYPE_RADIUS = exports.INITIALIZER_TYPE_POSITION = exports.INITIALIZER_TYPE_MASS = exports.INITIALIZER_TYPE_LIFE = exports.INITIALIZER_TYPE_TEXTURE = exports.INITIALIZER_TYPE_BODY_SPRITE = exports.INITIALIZER_TYPE_BODY = exports.INITIALIZER_TYPE_ABSTRACT = void 0;
6
+ exports.INITIALIZER_TYPES_THAT_REQUIRE_THREE = exports.INITIALIZER_TYPE_RATE = exports.INITIALIZER_TYPE_RADIAL_VELOCITY = exports.INITIALIZER_TYPE_POLAR_VELOCITY = exports.INITIALIZER_TYPE_VECTOR_VELOCITY = exports.INITIALIZER_TYPE_ZONE = exports.INITIALIZER_TYPE_RADIUS = exports.INITIALIZER_TYPE_ROTATION = exports.INITIALIZER_TYPE_POSITION = exports.INITIALIZER_TYPE_MASS = exports.INITIALIZER_TYPE_LIFE = exports.INITIALIZER_TYPE_TEXTURE = exports.INITIALIZER_TYPE_BODY_SPRITE = exports.INITIALIZER_TYPE_BODY = exports.INITIALIZER_TYPE_ABSTRACT = void 0;
7
7
  var INITIALIZER_TYPE_ABSTRACT = 'Initializer';
8
8
  exports.INITIALIZER_TYPE_ABSTRACT = INITIALIZER_TYPE_ABSTRACT;
9
9
  var INITIALIZER_TYPE_BODY = 'Body';
@@ -18,6 +18,8 @@ var INITIALIZER_TYPE_MASS = 'Mass';
18
18
  exports.INITIALIZER_TYPE_MASS = INITIALIZER_TYPE_MASS;
19
19
  var INITIALIZER_TYPE_POSITION = 'Position';
20
20
  exports.INITIALIZER_TYPE_POSITION = INITIALIZER_TYPE_POSITION;
21
+ var INITIALIZER_TYPE_ROTATION = 'Rotation';
22
+ exports.INITIALIZER_TYPE_ROTATION = INITIALIZER_TYPE_ROTATION;
21
23
  var INITIALIZER_TYPE_RADIUS = 'Radius';
22
24
  exports.INITIALIZER_TYPE_RADIUS = INITIALIZER_TYPE_RADIUS;
23
25
  var INITIALIZER_TYPE_ZONE = 'Zone';
@@ -32,4 +34,4 @@ var INITIALIZER_TYPE_RATE = 'Rate';
32
34
  exports.INITIALIZER_TYPE_RATE = INITIALIZER_TYPE_RATE;
33
35
  var INITIALIZER_TYPES_THAT_REQUIRE_THREE = [INITIALIZER_TYPE_BODY_SPRITE, INITIALIZER_TYPE_TEXTURE];
34
36
  exports.INITIALIZER_TYPES_THAT_REQUIRE_THREE = INITIALIZER_TYPES_THAT_REQUIRE_THREE;
35
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci90eXBlcy5qcyJdLCJuYW1lcyI6WyJJTklUSUFMSVpFUl9UWVBFX0FCU1RSQUNUIiwiSU5JVElBTElaRVJfVFlQRV9CT0RZIiwiSU5JVElBTElaRVJfVFlQRV9CT0RZX1NQUklURSIsIklOSVRJQUxJWkVSX1RZUEVfVEVYVFVSRSIsIklOSVRJQUxJWkVSX1RZUEVfTElGRSIsIklOSVRJQUxJWkVSX1RZUEVfTUFTUyIsIklOSVRJQUxJWkVSX1RZUEVfUE9TSVRJT04iLCJJTklUSUFMSVpFUl9UWVBFX1JBRElVUyIsIklOSVRJQUxJWkVSX1RZUEVfWk9ORSIsIklOSVRJQUxJWkVSX1RZUEVfVkVDVE9SX1ZFTE9DSVRZIiwiSU5JVElBTElaRVJfVFlQRV9QT0xBUl9WRUxPQ0lUWSIsIklOSVRJQUxJWkVSX1RZUEVfUkFESUFMX1ZFTE9DSVRZIiwiSU5JVElBTElaRVJfVFlQRV9SQVRFIiwiSU5JVElBTElaRVJfVFlQRVNfVEhBVF9SRVFVSVJFX1RIUkVFIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBTyxJQUFNQSx5QkFBeUIsR0FBRyxhQUFsQzs7QUFDQSxJQUFNQyxxQkFBcUIsR0FBRyxNQUE5Qjs7QUFDQSxJQUFNQyw0QkFBNEIsR0FBRyxZQUFyQzs7QUFDQSxJQUFNQyx3QkFBd0IsR0FBRyxTQUFqQzs7QUFDQSxJQUFNQyxxQkFBcUIsR0FBRyxNQUE5Qjs7QUFDQSxJQUFNQyxxQkFBcUIsR0FBRyxNQUE5Qjs7QUFDQSxJQUFNQyx5QkFBeUIsR0FBRyxVQUFsQzs7QUFDQSxJQUFNQyx1QkFBdUIsR0FBRyxRQUFoQzs7QUFDQSxJQUFNQyxxQkFBcUIsR0FBRyxNQUE5Qjs7QUFDQSxJQUFNQyxnQ0FBZ0MsR0FBRyxnQkFBekM7O0FBQ0EsSUFBTUMsK0JBQStCLEdBQUcsZUFBeEM7O0FBQ0EsSUFBTUMsZ0NBQWdDLEdBQUcsZ0JBQXpDOztBQUNBLElBQU1DLHFCQUFxQixHQUFHLE1BQTlCOztBQUNBLElBQU1DLG9DQUFvQyxHQUFHLENBQ2xEWCw0QkFEa0QsRUFFbERDLHdCQUZrRCxDQUE3QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX0FCU1RSQUNUID0gJ0luaXRpYWxpemVyJztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX0JPRFkgPSAnQm9keSc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9CT0RZX1NQUklURSA9ICdCb2R5U3ByaXRlJztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX1RFWFRVUkUgPSAnVGV4dHVyZSc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9MSUZFID0gJ0xpZmUnO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfTUFTUyA9ICdNYXNzJztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX1BPU0lUSU9OID0gJ1Bvc2l0aW9uJztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX1JBRElVUyA9ICdSYWRpdXMnO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfWk9ORSA9ICdab25lJztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX1ZFQ1RPUl9WRUxPQ0lUWSA9ICdWZWN0b3JWZWxvY2l0eSc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9QT0xBUl9WRUxPQ0lUWSA9ICdQb2xhclZlbG9jaXR5JztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX1JBRElBTF9WRUxPQ0lUWSA9ICdSYWRpYWxWZWxvY2l0eSc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9SQVRFID0gJ1JhdGUnO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVTX1RIQVRfUkVRVUlSRV9USFJFRSA9IFtcbiAgSU5JVElBTElaRVJfVFlQRV9CT0RZX1NQUklURSxcbiAgSU5JVElBTElaRVJfVFlQRV9URVhUVVJFLFxuXTtcbiJdfQ==
37
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9pbml0aWFsaXplci90eXBlcy5qcyJdLCJuYW1lcyI6WyJJTklUSUFMSVpFUl9UWVBFX0FCU1RSQUNUIiwiSU5JVElBTElaRVJfVFlQRV9CT0RZIiwiSU5JVElBTElaRVJfVFlQRV9CT0RZX1NQUklURSIsIklOSVRJQUxJWkVSX1RZUEVfVEVYVFVSRSIsIklOSVRJQUxJWkVSX1RZUEVfTElGRSIsIklOSVRJQUxJWkVSX1RZUEVfTUFTUyIsIklOSVRJQUxJWkVSX1RZUEVfUE9TSVRJT04iLCJJTklUSUFMSVpFUl9UWVBFX1JPVEFUSU9OIiwiSU5JVElBTElaRVJfVFlQRV9SQURJVVMiLCJJTklUSUFMSVpFUl9UWVBFX1pPTkUiLCJJTklUSUFMSVpFUl9UWVBFX1ZFQ1RPUl9WRUxPQ0lUWSIsIklOSVRJQUxJWkVSX1RZUEVfUE9MQVJfVkVMT0NJVFkiLCJJTklUSUFMSVpFUl9UWVBFX1JBRElBTF9WRUxPQ0lUWSIsIklOSVRJQUxJWkVSX1RZUEVfUkFURSIsIklOSVRJQUxJWkVSX1RZUEVTX1RIQVRfUkVRVUlSRV9USFJFRSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU8sSUFBTUEseUJBQXlCLEdBQUcsYUFBbEM7O0FBQ0EsSUFBTUMscUJBQXFCLEdBQUcsTUFBOUI7O0FBQ0EsSUFBTUMsNEJBQTRCLEdBQUcsWUFBckM7O0FBQ0EsSUFBTUMsd0JBQXdCLEdBQUcsU0FBakM7O0FBQ0EsSUFBTUMscUJBQXFCLEdBQUcsTUFBOUI7O0FBQ0EsSUFBTUMscUJBQXFCLEdBQUcsTUFBOUI7O0FBQ0EsSUFBTUMseUJBQXlCLEdBQUcsVUFBbEM7O0FBQ0EsSUFBTUMseUJBQXlCLEdBQUcsVUFBbEM7O0FBQ0EsSUFBTUMsdUJBQXVCLEdBQUcsUUFBaEM7O0FBQ0EsSUFBTUMscUJBQXFCLEdBQUcsTUFBOUI7O0FBQ0EsSUFBTUMsZ0NBQWdDLEdBQUcsZ0JBQXpDOztBQUNBLElBQU1DLCtCQUErQixHQUFHLGVBQXhDOztBQUNBLElBQU1DLGdDQUFnQyxHQUFHLGdCQUF6Qzs7QUFDQSxJQUFNQyxxQkFBcUIsR0FBRyxNQUE5Qjs7QUFDQSxJQUFNQyxvQ0FBb0MsR0FBRyxDQUNsRFosNEJBRGtELEVBRWxEQyx3QkFGa0QsQ0FBN0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9BQlNUUkFDVCA9ICdJbml0aWFsaXplcic7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9CT0RZID0gJ0JvZHknO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfQk9EWV9TUFJJVEUgPSAnQm9keVNwcml0ZSc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9URVhUVVJFID0gJ1RleHR1cmUnO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfTElGRSA9ICdMaWZlJztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX01BU1MgPSAnTWFzcyc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9QT1NJVElPTiA9ICdQb3NpdGlvbic7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9ST1RBVElPTiA9ICdSb3RhdGlvbic7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9SQURJVVMgPSAnUmFkaXVzJztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFX1pPTkUgPSAnWm9uZSc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9WRUNUT1JfVkVMT0NJVFkgPSAnVmVjdG9yVmVsb2NpdHknO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfUE9MQVJfVkVMT0NJVFkgPSAnUG9sYXJWZWxvY2l0eSc7XG5leHBvcnQgY29uc3QgSU5JVElBTElaRVJfVFlQRV9SQURJQUxfVkVMT0NJVFkgPSAnUmFkaWFsVmVsb2NpdHknO1xuZXhwb3J0IGNvbnN0IElOSVRJQUxJWkVSX1RZUEVfUkFURSA9ICdSYXRlJztcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFUl9UWVBFU19USEFUX1JFUVVJUkVfVEhSRUUgPSBbXG4gIElOSVRJQUxJWkVSX1RZUEVfQk9EWV9TUFJJVEUsXG4gIElOSVRJQUxJWkVSX1RZUEVfVEVYVFVSRSxcbl07XG4iXX0=
@@ -177,6 +177,7 @@ var DesktopGPURenderer = /*#__PURE__*/function (_BaseRenderer) {
177
177
  key: "updateTarget",
178
178
  value: function updateTarget(particle) {
179
179
  var position = particle.position,
180
+ rotation = particle.rotation,
180
181
  scale = particle.scale,
181
182
  radius = particle.radius,
182
183
  color = particle.color,
@@ -187,6 +188,7 @@ var DesktopGPURenderer = /*#__PURE__*/function (_BaseRenderer) {
187
188
  g = color.g,
188
189
  b = color.b;
189
190
  particle.target.position.copy(position);
191
+ particle.target.rotation.copy(rotation);
190
192
  particle.target.size = scale * radius;
191
193
  particle.target.color.setRGB(r, g, b);
192
194
  particle.target.alpha = alpha;
@@ -210,7 +212,7 @@ var DesktopGPURenderer = /*#__PURE__*/function (_BaseRenderer) {
210
212
  }, {
211
213
  key: "mapParticleTargetPropsToPoint",
212
214
  value: function mapParticleTargetPropsToPoint(particle) {
213
- this.updatePointPosition(particle).updatePointSize(particle).updatePointColor(particle).updatePointAlpha(particle).updatePointTextureIndex(particle);
215
+ this.updatePointPosition(particle).updatePointSize(particle).updatePointRotation(particle).updatePointColor(particle).updatePointAlpha(particle).updatePointTextureIndex(particle);
214
216
  return this;
215
217
  }
216
218
  /**
@@ -253,6 +255,25 @@ var DesktopGPURenderer = /*#__PURE__*/function (_BaseRenderer) {
253
255
  buffer.array[target.index * stride + offset + 0] = target.size;
254
256
  return this;
255
257
  }
258
+ /**
259
+ * Updates the point's rotation.
260
+ *
261
+ * @param {Particle} particle - The particle containing the target rotation.
262
+ * @return {DesktopGPURenderer}
263
+ */
264
+
265
+ }, {
266
+ key: "updatePointRotation",
267
+ value: function updatePointRotation(particle) {
268
+ var attribute = 'rotation';
269
+ var geometry = this.geometry,
270
+ stride = this.stride,
271
+ buffer = this.buffer;
272
+ var target = particle.target;
273
+ var offset = geometry.attributes[attribute].offset;
274
+ buffer.array[target.index * stride + offset + 0] = target.rotation.z;
275
+ return this;
276
+ }
256
277
  /**
257
278
  * Updates the point's color attribute according with the particle's target color.
258
279
  *
@@ -347,4 +368,4 @@ var DesktopGPURenderer = /*#__PURE__*/function (_BaseRenderer) {
347
368
  }(_BaseRenderer2["default"]);
348
369
 
349
370
  exports["default"] = DesktopGPURenderer;
350
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9EZXNrdG9wL2luZGV4LmpzIl0sIm5hbWVzIjpbIlRIUkVFIiwiRGVza3RvcEdQVVJlbmRlcmVyIiwiY29udGFpbmVyIiwidGhyZWUiLCJvcHRpb25zIiwiREVGQVVMVF9SRU5ERVJFUl9PUFRJT05TIiwiUkVOREVSRVJfVFlQRV9HUFVfREVTS1RPUCIsInByb3BzIiwiY2FtZXJhIiwibWF4UGFydGljbGVzIiwiYmFzZUNvbG9yIiwiYmxlbmRpbmciLCJkZXB0aFRlc3QiLCJkZXB0aFdyaXRlIiwidHJhbnNwYXJlbnQiLCJzaG91bGREZWJ1Z1RleHR1cmVBdGxhcyIsInBhcnRpY2xlQnVmZmVyIiwiUGFydGljbGVCdWZmZXIiLCJtYXRlcmlhbCIsIlNoYWRlck1hdGVyaWFsIiwidW5pZm9ybXMiLCJ2YWx1ZSIsIkNvbG9yIiwidVRleHR1cmUiLCJhdGxhc0luZGV4IiwidmVydGV4U2hhZGVyIiwiZnJhZ21lbnRTaGFkZXIiLCJ0YXJnZXRQb29sIiwiUG9vbCIsInVuaXF1ZUxpc3QiLCJVbmlxdWVMaXN0IiwiYnVmZmVyIiwic3RyaWRlIiwiZ2VvbWV0cnkiLCJwb2ludHMiLCJQb2ludHMiLCJmcnVzdHVtQ3VsbGVkIiwiYWRkIiwic3lzdGVtIiwibmVlZHNVcGRhdGUiLCJ0ZXh0dXJlQXRsYXMiLCJ1cGRhdGUiLCJwYXJ0aWNsZSIsInRhcmdldCIsImdldCIsIlRhcmdldCIsImlkIiwidXBkYXRlVGFyZ2V0IiwibWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQiLCJyZXNldCIsInBvc2l0aW9uIiwic2NhbGUiLCJyYWRpdXMiLCJjb2xvciIsImFscGhhIiwiYm9keSIsInIiLCJnIiwiYiIsImNvcHkiLCJzaXplIiwic2V0UkdCIiwiaW5kZXgiLCJmaW5kIiwiU3ByaXRlIiwibWFwIiwidGV4dHVyZSIsInRleHR1cmVJbmRleCIsImdldFRleHR1cmVJRCIsInVwZGF0ZVBvaW50UG9zaXRpb24iLCJ1cGRhdGVQb2ludFNpemUiLCJ1cGRhdGVQb2ludENvbG9yIiwidXBkYXRlUG9pbnRBbHBoYSIsInVwZGF0ZVBvaW50VGV4dHVyZUluZGV4IiwiYXR0cmlidXRlIiwib2Zmc2V0IiwiYXR0cmlidXRlcyIsImFycmF5IiwieCIsInkiLCJ6IiwiZGVidWciLCJ1bmRlZmluZWQiLCJUZXh0dXJlQXRsYXMiLCJhZGRUZXh0dXJlIiwicmVtb3ZlIiwiZGVzdHJveSIsIkJhc2VSZW5kZXJlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLElBQUlBLEtBQUo7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBQ3FCQyxrQjs7Ozs7QUFDbkIsOEJBQVlDLFNBQVosRUFBdUJDLEtBQXZCLEVBQWtFO0FBQUE7O0FBQUEsUUFBcENDLE9BQW9DLHVFQUExQkMsbUNBQTBCO0FBQUE7QUFDaEUsOEJBQU1DLGdDQUFOO0FBRUFOLElBQUFBLEtBQUssR0FBRyxNQUFLRyxLQUFMLEdBQWFBLEtBQXJCOztBQUNBLFFBQU1JLEtBQUssbUNBQVFGLG1DQUFSLEdBQXFDRCxPQUFyQyxDQUFYOztBQUpnRSxRQU05REksTUFOOEQsR0FjNURELEtBZDRELENBTTlEQyxNQU44RDtBQUFBLFFBTzlEQyxZQVA4RCxHQWM1REYsS0FkNEQsQ0FPOURFLFlBUDhEO0FBQUEsUUFROURDLFNBUjhELEdBYzVESCxLQWQ0RCxDQVE5REcsU0FSOEQ7QUFBQSxRQVM5REMsUUFUOEQsR0FjNURKLEtBZDRELENBUzlESSxRQVQ4RDtBQUFBLFFBVTlEQyxTQVY4RCxHQWM1REwsS0FkNEQsQ0FVOURLLFNBVjhEO0FBQUEsUUFXOURDLFVBWDhELEdBYzVETixLQWQ0RCxDQVc5RE0sVUFYOEQ7QUFBQSxRQVk5REMsV0FaOEQsR0FjNURQLEtBZDRELENBWTlETyxXQVo4RDtBQUFBLFFBYTlEQyx1QkFiOEQsR0FjNURSLEtBZDRE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O0FBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs4QkFDWTtBQUFBLFVBQ0FqRSxTQURBLEdBQ2dELElBRGhELENBQ0FBLFNBREE7QUFBQSxVQUNXZ0MsTUFEWCxHQUNnRCxJQURoRCxDQUNXQSxNQURYO0FBQUEsVUFDbUJNLFlBRG5CLEdBQ2dELElBRGhELENBQ21CQSxZQURuQjtBQUFBLFVBQ2lDWCxVQURqQyxHQUNnRCxJQURoRCxDQUNpQ0EsVUFEakM7QUFHUjNCLE1BQUFBLFNBQVMsQ0FBQ21GLE1BQVYsQ0FBaUJuRCxNQUFqQjtBQUNBTCxNQUFBQSxVQUFVLENBQUN5RCxPQUFYO0FBQ0E5QyxNQUFBQSxZQUFZLElBQUlBLFlBQVksQ0FBQzhDLE9BQWIsRUFBaEI7QUFDRDs7O0VBaFE2Q0MseUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJ0aWNsZUJ1ZmZlciwgVGFyZ2V0LCBUZXh0dXJlQXRsYXMsIFVuaXF1ZUxpc3QgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciB9IGZyb20gJy4vc2hhZGVycyc7XG5cbmltcG9ydCBCYXNlUmVuZGVyZXIgZnJvbSAnLi4vLi4vQmFzZVJlbmRlcmVyJztcbmltcG9ydCB7IERFRkFVTFRfUkVOREVSRVJfT1BUSU9OUyB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUG9vbCB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUkVOREVSRVJfVFlQRV9HUFVfREVTS1RPUCB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxubGV0IFRIUkVFO1xuXG4vKipcbiAqIEdQVVJlbmRlcmVyIGZvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlcy5cbiAqXG4gKiBAYXV0aG9yIHRocmF4IDxtYW50aHJheEBnbWFpbC5jb20+XG4gKiBAYXV0aG9yIHJvaGFuLWRlc2hwYW5kZSA8cm9oYW5AY3JlYXRpdmVsaWZlZm9ybS5jb20+XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlc2t0b3BHUFVSZW5kZXJlciBleHRlbmRzIEJhc2VSZW5kZXJlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgdGhyZWUsIG9wdGlvbnMgPSBERUZBVUxUX1JFTkRFUkVSX09QVElPTlMpIHtcbiAgICBzdXBlcihSRU5ERVJFUl9UWVBFX0dQVV9ERVNLVE9QKTtcblxuICAgIFRIUkVFID0gdGhpcy50aHJlZSA9IHRocmVlO1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5ERUZBVUxUX1JFTkRFUkVSX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcbiAgICBjb25zdCB7XG4gICAgICBjYW1lcmEsXG4gICAgICBtYXhQYXJ0aWNsZXMsXG4gICAgICBiYXNlQ29sb3IsXG4gICAgICBibGVuZGluZyxcbiAgICAgIGRlcHRoVGVzdCxcbiAgICAgIGRlcHRoV3JpdGUsXG4gICAgICB0cmFuc3BhcmVudCxcbiAgICAgIHNob3VsZERlYnVnVGV4dHVyZUF0bGFzLFxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBwYXJ0aWNsZUJ1ZmZlciA9IG5ldyBQYXJ0aWNsZUJ1ZmZlcihtYXhQYXJ0aWNsZXMsIFRIUkVFKTtcbiAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7XG4gICAgICB1bmlmb3Jtczoge1xuICAgICAgICBiYXNlQ29sb3I6IHsgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcihiYXNlQ29sb3IpIH0sXG4gICAgICAgIHVUZXh0dXJlOiB7IHZhbHVlOiBudWxsIH0sXG4gICAgICAgIGF0bGFzSW5kZXg6IHsgdmFsdWU6IG51bGwgfSxcbiAgICAgIH0sXG4gICAgICB2ZXJ0ZXhTaGFkZXI6IHZlcnRleFNoYWRlcigpLFxuICAgICAgZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50U2hhZGVyKCksXG4gICAgICBibGVuZGluZzogVEhSRUVbYmxlbmRpbmddLFxuICAgICAgZGVwdGhUZXN0LFxuICAgICAgZGVwdGhXcml0ZSxcbiAgICAgIHRyYW5zcGFyZW50LFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jYW1lcmEgPSBjYW1lcmE7XG4gICAgdGhpcy50YXJnZXRQb29sID0gbmV3IFBvb2woKTtcbiAgICB0aGlzLnVuaXF1ZUxpc3QgPSBuZXcgVW5pcXVlTGlzdChtYXhQYXJ0aWNsZXMpO1xuICAgIHRoaXMucGFydGljbGVCdWZmZXIgPSBwYXJ0aWNsZUJ1ZmZlcjtcbiAgICB0aGlzLmJ1ZmZlciA9IHBhcnRpY2xlQnVmZmVyLmJ1ZmZlcjtcbiAgICB0aGlzLnN0cmlkZSA9IHBhcnRpY2xlQnVmZmVyLnN0cmlkZTtcbiAgICB0aGlzLmdlb21ldHJ5ID0gcGFydGljbGVCdWZmZXIuZ2VvbWV0cnk7XG4gICAgdGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuICAgIHRoaXMucG9pbnRzID0gbmV3IFRIUkVFLlBvaW50cyh0aGlzLmdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsKTtcbiAgICB0aGlzLnBvaW50cy5mcnVzdHVtQ3VsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5zaG91bGREZWJ1Z1RleHR1cmVBdGxhcyA9IHNob3VsZERlYnVnVGV4dHVyZUF0bGFzO1xuXG4gICAgdGhpcy5jb250YWluZXIuYWRkKHRoaXMucG9pbnRzKTtcbiAgfVxuXG4gIG9uU3lzdGVtVXBkYXRlKHN5c3RlbSkge1xuICAgIHN1cGVyLm9uU3lzdGVtVXBkYXRlKHN5c3RlbSk7XG5cbiAgICB0aGlzLmJ1ZmZlci5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cbiAgICB0aGlzLnRleHR1cmVBdGxhcyAmJiB0aGlzLnRleHR1cmVBdGxhcy51cGRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb29scyB0aGUgcGFydGljbGUgdGFyZ2V0IGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICAgKiBVcGRhdGVzIHRoZSB0YXJnZXQgYW5kIG1hcHMgcGFydGljbGUgcHJvcGVydGllcyB0byB0aGUgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlQ3JlYXRlZChwYXJ0aWNsZSkge1xuICAgIGlmICghcGFydGljbGUudGFyZ2V0KSB7XG4gICAgICBwYXJ0aWNsZS50YXJnZXQgPSB0aGlzLnRhcmdldFBvb2wuZ2V0KFRhcmdldCwgVEhSRUUpO1xuICAgICAgdGhpcy51bmlxdWVMaXN0LmFkZChwYXJ0aWNsZS5pZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUYXJnZXQocGFydGljbGUpLm1hcFBhcnRpY2xlVGFyZ2V0UHJvcHNUb1BvaW50KHBhcnRpY2xlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIHBhcnRpY2xlIHByb3BlcnRpZXMgdG8gdGhlIHBvaW50IGlmIHRoZSBwYXJ0aWNsZSBoYXMgYSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlVXBkYXRlKHBhcnRpY2xlKSB7XG4gICAgaWYgKCFwYXJ0aWNsZS50YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRhcmdldChwYXJ0aWNsZSkubWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQocGFydGljbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBhbmQgY2xlYXJzIHRoZSBwYXJ0aWNsZSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlRGVhZChwYXJ0aWNsZSkge1xuICAgIGlmICghcGFydGljbGUudGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFydGljbGUudGFyZ2V0LnJlc2V0KCk7XG4gICAgdGhpcy5tYXBQYXJ0aWNsZVRhcmdldFByb3BzVG9Qb2ludChwYXJ0aWNsZSk7XG5cbiAgICBwYXJ0aWNsZS50YXJnZXQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYWxsIG11dGFibGUgcHJvcGVydGllcyBmcm9tIHRoZSBwYXJ0aWNsZSB0byB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfVxuICAgKiBAcmV0dXJuIHtEZXNrdG9wR1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVUYXJnZXQocGFydGljbGUpIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uLCBzY2FsZSwgcmFkaXVzLCBjb2xvciwgYWxwaGEsIGJvZHksIGlkIH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IHIsIGcsIGIgfSA9IGNvbG9yO1xuXG4gICAgcGFydGljbGUudGFyZ2V0LnBvc2l0aW9uLmNvcHkocG9zaXRpb24pO1xuICAgIHBhcnRpY2xlLnRhcmdldC5zaXplID0gc2NhbGUgKiByYWRpdXM7XG4gICAgcGFydGljbGUudGFyZ2V0LmNvbG9yLnNldFJHQihyLCBnLCBiKTtcbiAgICBwYXJ0aWNsZS50YXJnZXQuYWxwaGEgPSBhbHBoYTtcbiAgICBwYXJ0aWNsZS50YXJnZXQuaW5kZXggPSB0aGlzLnVuaXF1ZUxpc3QuZmluZChpZCk7XG5cbiAgICBpZiAoYm9keSAmJiBib2R5IGluc3RhbmNlb2YgVEhSRUUuU3ByaXRlKSB7XG4gICAgICBjb25zdCB7IG1hcCB9ID0gYm9keS5tYXRlcmlhbDtcblxuICAgICAgcGFydGljbGUudGFyZ2V0LnRleHR1cmUgPSBtYXA7XG4gICAgICBwYXJ0aWNsZS50YXJnZXQudGV4dHVyZUluZGV4ID0gdGhpcy5nZXRUZXh0dXJlSUQoXG4gICAgICAgIG1hcCxcbiAgICAgICAgdGhpcy5zaG91bGREZWJ1Z1RleHR1cmVBdGxhc1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnRyeSBwb2ludCBmb3IgbWFwcGluZyBwYXJ0aWNsZSBwcm9wZXJ0aWVzIHRvIGJ1ZmZlciBnZW9tZXRyeSBwb2ludHMuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlIGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgdG8gbWFwXG4gICAqIEByZXR1cm4ge0Rlc2t0b3BHUFVSZW5kZXJlcn1cbiAgICovXG4gIG1hcFBhcnRpY2xlVGFyZ2V0UHJvcHNUb1BvaW50KHBhcnRpY2xlKSB7XG4gICAgdGhpcy51cGRhdGVQb2ludFBvc2l0aW9uKHBhcnRpY2xlKVxuICAgICAgLnVwZGF0ZVBvaW50U2l6ZShwYXJ0aWNsZSlcbiAgICAgIC51cGRhdGVQb2ludENvbG9yKHBhcnRpY2xlKVxuICAgICAgLnVwZGF0ZVBvaW50QWxwaGEocGFydGljbGUpXG4gICAgICAudXBkYXRlUG9pbnRUZXh0dXJlSW5kZXgocGFydGljbGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQncyBwb3NpdGlvbiBhY2NvcmRpbmcgdG8gdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgcG9zaXRpb24uXG4gICAqIEByZXR1cm4ge0Rlc2t0b3BHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50UG9zaXRpb24ocGFydGljbGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSAncG9zaXRpb24nO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuXG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDBdID0gdGFyZ2V0LnBvc2l0aW9uLng7XG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDFdID0gdGFyZ2V0LnBvc2l0aW9uLnk7XG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDJdID0gdGFyZ2V0LnBvc2l0aW9uLno7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCdzIHNpemUgcmVsYXRpdmUgdG8gdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IHNjYWxlIGFuZCByYWRpdXMuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlIGNvbnRhaW5pbmcgdGhlIHRhcmdldCBzY2FsZS5cbiAgICogQHJldHVybiB7RGVza3RvcEdQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRTaXplKHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ3NpemUnO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuXG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDBdID0gdGFyZ2V0LnNpemU7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCdzIGNvbG9yIGF0dHJpYnV0ZSBhY2NvcmRpbmcgd2l0aCB0aGUgcGFydGljbGUncyB0YXJnZXQgY29sb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlIGNvbnRhaW5pbmcgdGhlIHRhcmdldCBjb2xvciBhbmQgYWxwaGEuXG4gICAqIEByZXR1cm4ge0Rlc2t0b3BHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50Q29sb3IocGFydGljbGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSAnY29sb3InO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuXG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDBdID0gdGFyZ2V0LmNvbG9yLnI7XG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDFdID0gdGFyZ2V0LmNvbG9yLmc7XG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDJdID0gdGFyZ2V0LmNvbG9yLmI7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCBhbHBoYSBhdHRyaWJ1dGUgd2l0aCB0aGUgcGFydGljbGUncyB0YXJnZXQgYWxwaGEuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlIGNvbnRhaW5pbmcgdGhlIHRhcmdldCBhbHBoYS5cbiAgICogQHJldHVybiB7RGVza3RvcEdQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRBbHBoYShwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdhbHBoYSc7XG4gICAgY29uc3QgeyBnZW9tZXRyeSwgc3RyaWRlLCBidWZmZXIgfSA9IHRoaXM7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG5cbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMF0gPSB0YXJnZXQuYWxwaGE7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCB0ZXh0dXJlIGF0dHJpYnV0ZSB3aXRoIHRoZSBwYXJ0aWNsZSdzIHRhcmdldCB0ZXh0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgdGV4dHVyZS5cbiAgICogQHJldHVybiB7RGVza3RvcEdQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRUZXh0dXJlSW5kZXgocGFydGljbGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSAndGV4SUQnO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuXG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDBdID0gdGFyZ2V0LnRleHR1cmVJbmRleDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0VGV4dHVyZUlEKHRleHR1cmUsIGRlYnVnKSB7XG4gICAgaWYgKHRleHR1cmUudGV4dHVyZUluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghdGhpcy50ZXh0dXJlQXRsYXMpIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQXRsYXMgPSBuZXcgVGV4dHVyZUF0bGFzKHRoaXMsIGRlYnVnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50ZXh0dXJlQXRsYXMuYWRkVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZS50ZXh0dXJlSW5kZXg7XG4gIH1cblxuICAvKipcbiAgICogVGVhcnMgZG93biB0aGUgR1BVUmVuZGVyZXIuXG4gICAqXG4gICAqIEByZXR1cm4gdm9pZFxuICAgKi9cbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciwgcG9pbnRzLCB0ZXh0dXJlQXRsYXMsIHVuaXF1ZUxpc3QgfSA9IHRoaXM7XG5cbiAgICBjb250YWluZXIucmVtb3ZlKHBvaW50cyk7XG4gICAgdW5pcXVlTGlzdC5kZXN0cm95KCk7XG4gICAgdGV4dHVyZUF0bGFzICYmIHRleHR1cmVBdGxhcy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
371
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9EZXNrdG9wL2luZGV4LmpzIl0sIm5hbWVzIjpbIlRIUkVFIiwiRGVza3RvcEdQVVJlbmRlcmVyIiwiY29udGFpbmVyIiwidGhyZWUiLCJvcHRpb25zIiwiREVGQVVMVF9SRU5ERVJFUl9PUFRJT05TIiwiUkVOREVSRVJfVFlQRV9HUFVfREVTS1RPUCIsInByb3BzIiwiY2FtZXJhIiwibWF4UGFydGljbGVzIiwiYmFzZUNvbG9yIiwiYmxlbmRpbmciLCJkZXB0aFRlc3QiLCJkZXB0aFdyaXRlIiwidHJhbnNwYXJlbnQiLCJzaG91bGREZWJ1Z1RleHR1cmVBdGxhcyIsInBhcnRpY2xlQnVmZmVyIiwiUGFydGljbGVCdWZmZXIiLCJtYXRlcmlhbCIsIlNoYWRlck1hdGVyaWFsIiwidW5pZm9ybXMiLCJ2YWx1ZSIsIkNvbG9yIiwidVRleHR1cmUiLCJhdGxhc0luZGV4IiwidmVydGV4U2hhZGVyIiwiZnJhZ21lbnRTaGFkZXIiLCJ0YXJnZXRQb29sIiwiUG9vbCIsInVuaXF1ZUxpc3QiLCJVbmlxdWVMaXN0IiwiYnVmZmVyIiwic3RyaWRlIiwiZ2VvbWV0cnkiLCJwb2ludHMiLCJQb2ludHMiLCJmcnVzdHVtQ3VsbGVkIiwiYWRkIiwic3lzdGVtIiwibmVlZHNVcGRhdGUiLCJ0ZXh0dXJlQXRsYXMiLCJ1cGRhdGUiLCJwYXJ0aWNsZSIsInRhcmdldCIsImdldCIsIlRhcmdldCIsImlkIiwidXBkYXRlVGFyZ2V0IiwibWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQiLCJyZXNldCIsInBvc2l0aW9uIiwicm90YXRpb24iLCJzY2FsZSIsInJhZGl1cyIsImNvbG9yIiwiYWxwaGEiLCJib2R5IiwiciIsImciLCJiIiwiY29weSIsInNpemUiLCJzZXRSR0IiLCJpbmRleCIsImZpbmQiLCJTcHJpdGUiLCJtYXAiLCJ0ZXh0dXJlIiwidGV4dHVyZUluZGV4IiwiZ2V0VGV4dHVyZUlEIiwidXBkYXRlUG9pbnRQb3NpdGlvbiIsInVwZGF0ZVBvaW50U2l6ZSIsInVwZGF0ZVBvaW50Um90YXRpb24iLCJ1cGRhdGVQb2ludENvbG9yIiwidXBkYXRlUG9pbnRBbHBoYSIsInVwZGF0ZVBvaW50VGV4dHVyZUluZGV4IiwiYXR0cmlidXRlIiwib2Zmc2V0IiwiYXR0cmlidXRlcyIsImFycmF5IiwieCIsInkiLCJ6IiwiZGVidWciLCJ1bmRlZmluZWQiLCJUZXh0dXJlQXRsYXMiLCJhZGRUZXh0dXJlIiwicmVtb3ZlIiwiZGVzdHJveSIsIkJhc2VSZW5kZXJlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLElBQUlBLEtBQUo7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBQ3FCQyxrQjs7Ozs7QUFDbkIsOEJBQVlDLFNBQVosRUFBdUJDLEtBQXZCLEVBQWtFO0FBQUE7O0FBQUEsUUFBcENDLE9BQW9DLHVFQUExQkMsbUNBQTBCO0FBQUE7QUFDaEUsOEJBQU1DLGdDQUFOO0FBRUFOLElBQUFBLEtBQUssR0FBRyxNQUFLRyxLQUFMLEdBQWFBLEtBQXJCOztBQUNBLFFBQU1JLEtBQUssbUNBQVFGLG1DQUFSLEdBQXFDRCxPQUFyQyxDQUFYOztBQUpnRSxRQU05REksTUFOOEQsR0FjNURELEtBZDRELENBTTlEQyxNQU44RDtBQUFBLFFBTzlEQyxZQVA4RCxHQWM1REYsS0FkNEQsQ0FPOURFLFlBUDhEO0FBQUEsUUFROURDLFNBUjhELEdBYzVESCxLQWQ0RCxDQVE5REcsU0FSOEQ7QUFBQSxRQVM5REMsUUFUOEQsR0FjNURKLEtBZDRELENBUzlESSxRQVQ4RDtBQUFBLFFBVTlEQyxTQVY4RCxHQWM1REwsS0FkNEQsQ0FVOURLLFNBVjhEO0FBQUEsUUFXOURDLFVBWDhELEdBYzVETixLQWQ0RCxDQVc5RE0sVUFYOEQ7QUFBQSxRQVk5REMsV0FaOEQsR0FjNURQLEtBZDRELENBWTlETyxXQVo4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QUMyRCxPQUFYO0FBQ0FoRCxNQUFBQSxZQUFZLElBQUlBLFlBQVksQ0FBQ2dELE9BQWIsRUFBaEI7QUFDRDs7O0VBblI2Q0MseUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQYXJ0aWNsZUJ1ZmZlciwgVGFyZ2V0LCBUZXh0dXJlQXRsYXMsIFVuaXF1ZUxpc3QgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZnJhZ21lbnRTaGFkZXIsIHZlcnRleFNoYWRlciB9IGZyb20gJy4vc2hhZGVycyc7XG5cbmltcG9ydCBCYXNlUmVuZGVyZXIgZnJvbSAnLi4vLi4vQmFzZVJlbmRlcmVyJztcbmltcG9ydCB7IERFRkFVTFRfUkVOREVSRVJfT1BUSU9OUyB9IGZyb20gJy4uL2NvbW1vbi9jb25zdGFudHMnO1xuaW1wb3J0IHsgUG9vbCB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgUkVOREVSRVJfVFlQRV9HUFVfREVTS1RPUCB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxubGV0IFRIUkVFO1xuXG4vKipcbiAqIEdQVVJlbmRlcmVyIGZvciBkZXZpY2VzIHRoYXQgc3VwcG9ydCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlcy5cbiAqXG4gKiBAYXV0aG9yIHRocmF4IDxtYW50aHJheEBnbWFpbC5jb20+XG4gKiBAYXV0aG9yIHJvaGFuLWRlc2hwYW5kZSA8cm9oYW5AY3JlYXRpdmVsaWZlZm9ybS5jb20+XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERlc2t0b3BHUFVSZW5kZXJlciBleHRlbmRzIEJhc2VSZW5kZXJlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgdGhyZWUsIG9wdGlvbnMgPSBERUZBVUxUX1JFTkRFUkVSX09QVElPTlMpIHtcbiAgICBzdXBlcihSRU5ERVJFUl9UWVBFX0dQVV9ERVNLVE9QKTtcblxuICAgIFRIUkVFID0gdGhpcy50aHJlZSA9IHRocmVlO1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5ERUZBVUxUX1JFTkRFUkVSX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcbiAgICBjb25zdCB7XG4gICAgICBjYW1lcmEsXG4gICAgICBtYXhQYXJ0aWNsZXMsXG4gICAgICBiYXNlQ29sb3IsXG4gICAgICBibGVuZGluZyxcbiAgICAgIGRlcHRoVGVzdCxcbiAgICAgIGRlcHRoV3JpdGUsXG4gICAgICB0cmFuc3BhcmVudCxcbiAgICAgIHNob3VsZERlYnVnVGV4dHVyZUF0bGFzLFxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBwYXJ0aWNsZUJ1ZmZlciA9IG5ldyBQYXJ0aWNsZUJ1ZmZlcihtYXhQYXJ0aWNsZXMsIFRIUkVFKTtcbiAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7XG4gICAgICB1bmlmb3Jtczoge1xuICAgICAgICBiYXNlQ29sb3I6IHsgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcihiYXNlQ29sb3IpIH0sXG4gICAgICAgIHVUZXh0dXJlOiB7IHZhbHVlOiBudWxsIH0sXG4gICAgICAgIGF0bGFzSW5kZXg6IHsgdmFsdWU6IG51bGwgfSxcbiAgICAgIH0sXG4gICAgICB2ZXJ0ZXhTaGFkZXI6IHZlcnRleFNoYWRlcigpLFxuICAgICAgZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50U2hhZGVyKCksXG4gICAgICBibGVuZGluZzogVEhSRUVbYmxlbmRpbmddLFxuICAgICAgZGVwdGhUZXN0LFxuICAgICAgZGVwdGhXcml0ZSxcbiAgICAgIHRyYW5zcGFyZW50LFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgdGhpcy5jYW1lcmEgPSBjYW1lcmE7XG4gICAgdGhpcy50YXJnZXRQb29sID0gbmV3IFBvb2woKTtcbiAgICB0aGlzLnVuaXF1ZUxpc3QgPSBuZXcgVW5pcXVlTGlzdChtYXhQYXJ0aWNsZXMpO1xuICAgIHRoaXMucGFydGljbGVCdWZmZXIgPSBwYXJ0aWNsZUJ1ZmZlcjtcbiAgICB0aGlzLmJ1ZmZlciA9IHBhcnRpY2xlQnVmZmVyLmJ1ZmZlcjtcbiAgICB0aGlzLnN0cmlkZSA9IHBhcnRpY2xlQnVmZmVyLnN0cmlkZTtcbiAgICB0aGlzLmdlb21ldHJ5ID0gcGFydGljbGVCdWZmZXIuZ2VvbWV0cnk7XG4gICAgdGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuICAgIHRoaXMucG9pbnRzID0gbmV3IFRIUkVFLlBvaW50cyh0aGlzLmdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsKTtcbiAgICB0aGlzLnBvaW50cy5mcnVzdHVtQ3VsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5zaG91bGREZWJ1Z1RleHR1cmVBdGxhcyA9IHNob3VsZERlYnVnVGV4dHVyZUF0bGFzO1xuXG4gICAgdGhpcy5jb250YWluZXIuYWRkKHRoaXMucG9pbnRzKTtcbiAgfVxuXG4gIG9uU3lzdGVtVXBkYXRlKHN5c3RlbSkge1xuICAgIHN1cGVyLm9uU3lzdGVtVXBkYXRlKHN5c3RlbSk7XG5cbiAgICB0aGlzLmJ1ZmZlci5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cbiAgICB0aGlzLnRleHR1cmVBdGxhcyAmJiB0aGlzLnRleHR1cmVBdGxhcy51cGRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb29scyB0aGUgcGFydGljbGUgdGFyZ2V0IGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICAgKiBVcGRhdGVzIHRoZSB0YXJnZXQgYW5kIG1hcHMgcGFydGljbGUgcHJvcGVydGllcyB0byB0aGUgcG9pbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlQ3JlYXRlZChwYXJ0aWNsZSkge1xuICAgIGlmICghcGFydGljbGUudGFyZ2V0KSB7XG4gICAgICBwYXJ0aWNsZS50YXJnZXQgPSB0aGlzLnRhcmdldFBvb2wuZ2V0KFRhcmdldCwgVEhSRUUpO1xuICAgICAgdGhpcy51bmlxdWVMaXN0LmFkZChwYXJ0aWNsZS5pZCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUYXJnZXQocGFydGljbGUpLm1hcFBhcnRpY2xlVGFyZ2V0UHJvcHNUb1BvaW50KHBhcnRpY2xlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIHBhcnRpY2xlIHByb3BlcnRpZXMgdG8gdGhlIHBvaW50IGlmIHRoZSBwYXJ0aWNsZSBoYXMgYSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlVXBkYXRlKHBhcnRpY2xlKSB7XG4gICAgaWYgKCFwYXJ0aWNsZS50YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRhcmdldChwYXJ0aWNsZSkubWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQocGFydGljbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyBhbmQgY2xlYXJzIHRoZSBwYXJ0aWNsZSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqL1xuICBvblBhcnRpY2xlRGVhZChwYXJ0aWNsZSkge1xuICAgIGlmICghcGFydGljbGUudGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcGFydGljbGUudGFyZ2V0LnJlc2V0KCk7XG4gICAgdGhpcy5tYXBQYXJ0aWNsZVRhcmdldFByb3BzVG9Qb2ludChwYXJ0aWNsZSk7XG5cbiAgICBwYXJ0aWNsZS50YXJnZXQgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgYWxsIG11dGFibGUgcHJvcGVydGllcyBmcm9tIHRoZSBwYXJ0aWNsZSB0byB0aGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfVxuICAgKiBAcmV0dXJuIHtEZXNrdG9wR1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVUYXJnZXQocGFydGljbGUpIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUsIHJhZGl1cywgY29sb3IsIGFscGhhLCBib2R5LCBpZCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyByLCBnLCBiIH0gPSBjb2xvcjtcblxuICAgIHBhcnRpY2xlLnRhcmdldC5wb3NpdGlvbi5jb3B5KHBvc2l0aW9uKTtcbiAgICBwYXJ0aWNsZS50YXJnZXQucm90YXRpb24uY29weShyb3RhdGlvbik7XG4gICAgcGFydGljbGUudGFyZ2V0LnNpemUgPSBzY2FsZSAqIHJhZGl1cztcbiAgICBwYXJ0aWNsZS50YXJnZXQuY29sb3Iuc2V0UkdCKHIsIGcsIGIpO1xuICAgIHBhcnRpY2xlLnRhcmdldC5hbHBoYSA9IGFscGhhO1xuICAgIHBhcnRpY2xlLnRhcmdldC5pbmRleCA9IHRoaXMudW5pcXVlTGlzdC5maW5kKGlkKTtcblxuICAgIGlmIChib2R5ICYmIGJvZHkgaW5zdGFuY2VvZiBUSFJFRS5TcHJpdGUpIHtcbiAgICAgIGNvbnN0IHsgbWFwIH0gPSBib2R5Lm1hdGVyaWFsO1xuXG4gICAgICBwYXJ0aWNsZS50YXJnZXQudGV4dHVyZSA9IG1hcDtcbiAgICAgIHBhcnRpY2xlLnRhcmdldC50ZXh0dXJlSW5kZXggPSB0aGlzLmdldFRleHR1cmVJRChcbiAgICAgICAgbWFwLFxuICAgICAgICB0aGlzLnNob3VsZERlYnVnVGV4dHVyZUF0bGFzXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudHJ5IHBvaW50IGZvciBtYXBwaW5nIHBhcnRpY2xlIHByb3BlcnRpZXMgdG8gYnVmZmVyIGdlb21ldHJ5IHBvaW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyB0byBtYXBcbiAgICogQHJldHVybiB7RGVza3RvcEdQVVJlbmRlcmVyfVxuICAgKi9cbiAgbWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQocGFydGljbGUpIHtcbiAgICB0aGlzLnVwZGF0ZVBvaW50UG9zaXRpb24ocGFydGljbGUpXG4gICAgICAudXBkYXRlUG9pbnRTaXplKHBhcnRpY2xlKVxuICAgICAgLnVwZGF0ZVBvaW50Um90YXRpb24ocGFydGljbGUpXG4gICAgICAudXBkYXRlUG9pbnRDb2xvcihwYXJ0aWNsZSlcbiAgICAgIC51cGRhdGVQb2ludEFscGhhKHBhcnRpY2xlKVxuICAgICAgLnVwZGF0ZVBvaW50VGV4dHVyZUluZGV4KHBhcnRpY2xlKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvaW50J3MgcG9zaXRpb24gYWNjb3JkaW5nIHRvIHRoZSBwYXJ0aWNsZSdzIHRhcmdldCBwb3NpdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IHBvc2l0aW9uLlxuICAgKiBAcmV0dXJuIHtEZXNrdG9wR1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVQb2ludFBvc2l0aW9uKHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ3Bvc2l0aW9uJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC5wb3NpdGlvbi54O1xuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAxXSA9IHRhcmdldC5wb3NpdGlvbi55O1xuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAyXSA9IHRhcmdldC5wb3NpdGlvbi56O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQncyBzaXplIHJlbGF0aXZlIHRvIHRoZSBwYXJ0aWNsZSdzIHRhcmdldCBzY2FsZSBhbmQgcmFkaXVzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgc2NhbGUuXG4gICAqIEByZXR1cm4ge0Rlc2t0b3BHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50U2l6ZShwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdzaXplJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC5zaXplO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQncyByb3RhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IHJvdGF0aW9uLlxuICAgKiBAcmV0dXJuIHtEZXNrdG9wR1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVQb2ludFJvdGF0aW9uKHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ3JvdGF0aW9uJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC5yb3RhdGlvbi56O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQncyBjb2xvciBhdHRyaWJ1dGUgYWNjb3JkaW5nIHdpdGggdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IGNvbG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgY29sb3IgYW5kIGFscGhhLlxuICAgKiBAcmV0dXJuIHtEZXNrdG9wR1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVQb2ludENvbG9yKHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ2NvbG9yJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC5jb2xvci5yO1xuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAxXSA9IHRhcmdldC5jb2xvci5nO1xuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAyXSA9IHRhcmdldC5jb2xvci5iO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQgYWxwaGEgYXR0cmlidXRlIHdpdGggdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IGFscGhhLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgYWxwaGEuXG4gICAqIEByZXR1cm4ge0Rlc2t0b3BHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50QWxwaGEocGFydGljbGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSAnYWxwaGEnO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuXG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDBdID0gdGFyZ2V0LmFscGhhO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQgdGV4dHVyZSBhdHRyaWJ1dGUgd2l0aCB0aGUgcGFydGljbGUncyB0YXJnZXQgdGV4dHVyZS5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IHRleHR1cmUuXG4gICAqIEByZXR1cm4ge0Rlc2t0b3BHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50VGV4dHVyZUluZGV4KHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ3RleElEJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC50ZXh0dXJlSW5kZXg7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldFRleHR1cmVJRCh0ZXh0dXJlLCBkZWJ1Zykge1xuICAgIGlmICh0ZXh0dXJlLnRleHR1cmVJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIXRoaXMudGV4dHVyZUF0bGFzKSB7XG4gICAgICAgIHRoaXMudGV4dHVyZUF0bGFzID0gbmV3IFRleHR1cmVBdGxhcyh0aGlzLCBkZWJ1Zyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGV4dHVyZUF0bGFzLmFkZFRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmUudGV4dHVyZUluZGV4O1xuICB9XG5cbiAgLyoqXG4gICAqIFRlYXJzIGRvd24gdGhlIEdQVVJlbmRlcmVyLlxuICAgKlxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgY29uc3QgeyBjb250YWluZXIsIHBvaW50cywgdGV4dHVyZUF0bGFzLCB1bmlxdWVMaXN0IH0gPSB0aGlzO1xuXG4gICAgY29udGFpbmVyLnJlbW92ZShwb2ludHMpO1xuICAgIHVuaXF1ZUxpc3QuZGVzdHJveSgpO1xuICAgIHRleHR1cmVBdGxhcyAmJiB0ZXh0dXJlQXRsYXMuZGVzdHJveSgpO1xuICB9XG59XG4iXX0=
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.fragmentShader = void 0;
7
7
 
8
8
  var fragmentShader = function fragmentShader() {
9
- return "\n uniform vec3 baseColor;\n uniform sampler2D uTexture;\n uniform sampler2D atlasIndex;\n\n varying vec3 targetColor;\n varying float targetAlpha;\n varying vec4 tileRect;\n varying float tileID;\n\n void main() {\n gl_FragColor = vec4(baseColor * targetColor, targetAlpha);\n\n vec2 uv = gl_PointCoord;\n uv = mix(tileRect.xy, tileRect.zw, gl_PointCoord);\n\n gl_FragColor = gl_FragColor * texture2D(uTexture, uv);\n\n }\n";
9
+ return "\n uniform vec3 baseColor;\n uniform sampler2D uTexture;\n uniform sampler2D atlasIndex;\n\n varying float vRotation;\n varying vec3 targetColor;\n varying float targetAlpha;\n varying vec4 tileRect;\n varying float tileID;\n\n void main() {\n gl_FragColor = vec4(baseColor * targetColor, targetAlpha);\n\n vec2 uv = gl_PointCoord;\n uv = mix(tileRect.xy, tileRect.zw, gl_PointCoord);\n\n float mid = 0.5;\n uv = vec2(\n cos(vRotation) * (uv.x - mid) - sin(vRotation) * (uv.y - mid) + mid,\n cos(vRotation) * (uv.y - mid) + sin(vRotation) * (uv.x - mid) + mid\n );\n\n gl_FragColor = gl_FragColor * texture2D(uTexture, uv);\n\n }\n";
10
10
  };
11
11
 
12
12
  exports.fragmentShader = fragmentShader;
13
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9EZXNrdG9wL3NoYWRlcnMvZnJhZ21lbnRTaGFkZXIuanMiXSwibmFtZXMiOlsiZnJhZ21lbnRTaGFkZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBTyxJQUFNQSxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLEdBQU07QUFDbEM7QUFvQkQsQ0FyQk0iLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSAoKSA9PiB7XG4gIHJldHVybiBgXG4gICAgdW5pZm9ybSB2ZWMzIGJhc2VDb2xvcjtcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTtcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCBhdGxhc0luZGV4O1xuXG4gICAgdmFyeWluZyB2ZWMzIHRhcmdldENvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdGFyZ2V0QWxwaGE7XG4gICAgdmFyeWluZyB2ZWM0IHRpbGVSZWN0O1xuICAgIHZhcnlpbmcgZmxvYXQgdGlsZUlEO1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IgKiB0YXJnZXRDb2xvciwgdGFyZ2V0QWxwaGEpO1xuXG4gICAgICB2ZWMyIHV2ID0gZ2xfUG9pbnRDb29yZDtcbiAgICAgIHV2ID0gbWl4KHRpbGVSZWN0Lnh5LCB0aWxlUmVjdC56dywgZ2xfUG9pbnRDb29yZCk7XG5cbiAgICAgIGdsX0ZyYWdDb2xvciA9IGdsX0ZyYWdDb2xvciAqIHRleHR1cmUyRCh1VGV4dHVyZSwgdXYpO1xuXG4gICAgfVxuYDtcbn07XG4iXX0=
13
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9EZXNrdG9wL3NoYWRlcnMvZnJhZ21lbnRTaGFkZXIuanMiXSwibmFtZXMiOlsiZnJhZ21lbnRTaGFkZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBTyxJQUFNQSxjQUFjLEdBQUcsU0FBakJBLGNBQWlCLEdBQU07QUFDbEM7QUEyQkQsQ0E1Qk0iLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZnJhZ21lbnRTaGFkZXIgPSAoKSA9PiB7XG4gIHJldHVybiBgXG4gICAgdW5pZm9ybSB2ZWMzIGJhc2VDb2xvcjtcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTtcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCBhdGxhc0luZGV4O1xuXG4gICAgdmFyeWluZyBmbG9hdCB2Um90YXRpb247XG4gICAgdmFyeWluZyB2ZWMzIHRhcmdldENvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdGFyZ2V0QWxwaGE7XG4gICAgdmFyeWluZyB2ZWM0IHRpbGVSZWN0O1xuICAgIHZhcnlpbmcgZmxvYXQgdGlsZUlEO1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IgKiB0YXJnZXRDb2xvciwgdGFyZ2V0QWxwaGEpO1xuXG4gICAgICB2ZWMyIHV2ID0gZ2xfUG9pbnRDb29yZDtcbiAgICAgIHV2ID0gbWl4KHRpbGVSZWN0Lnh5LCB0aWxlUmVjdC56dywgZ2xfUG9pbnRDb29yZCk7XG5cbiAgICAgIGZsb2F0IG1pZCA9IDAuNTtcbiAgICAgIHV2ID0gdmVjMihcbiAgICAgICAgY29zKHZSb3RhdGlvbikgKiAodXYueCAtIG1pZCkgLSBzaW4odlJvdGF0aW9uKSAqICh1di55IC0gbWlkKSArIG1pZCxcbiAgICAgICAgY29zKHZSb3RhdGlvbikgKiAodXYueSAtIG1pZCkgKyBzaW4odlJvdGF0aW9uKSAqICh1di54IC0gbWlkKSArIG1pZFxuICAgICAgKTtcblxuICAgICAgZ2xfRnJhZ0NvbG9yID0gZ2xfRnJhZ0NvbG9yICogdGV4dHVyZTJEKHVUZXh0dXJlLCB1dik7XG5cbiAgICB9XG5gO1xufTtcbiJdfQ==
@@ -10,8 +10,8 @@ var _constants = require("../../common/TextureAtlas/constants");
10
10
  var _constants2 = require("../../common/shaders/constants");
11
11
 
12
12
  var vertexShader = function vertexShader() {
13
- return "\n uniform sampler2D uTexture;\n //atlasIndex is a 256x1 float texture of tile rectangles as r=minx g=miny b=maxx a=maxy\n uniform sampler2D atlasIndex;\n\n attribute float size;\n attribute vec3 color;\n attribute float alpha;\n attribute float texID;\n\n varying vec3 targetColor;\n varying float targetAlpha;\n varying vec4 tileRect;\n varying float tileID;\n\n void main() {\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n targetColor = color;\n targetAlpha = alpha;\n\n tileID = texID;\n //get the tile rectangle from the atlasIndex texture..\n tileRect = texture2D(atlasIndex, vec2((tileID + 0.5) / ".concat(_constants.DATA_TEXTURE_SIZE, ".0, 0.5));\n\n gl_PointSize = ((size * ").concat(_constants2.SIZE_ATTENUATION_FACTOR, ") / -mvPosition.z);\n gl_Position = projectionMatrix * mvPosition;\n }\n");
13
+ return "\n uniform sampler2D uTexture;\n //atlasIndex is a 256x1 float texture of tile rectangles as r=minx g=miny b=maxx a=maxy\n uniform sampler2D atlasIndex;\n\n attribute float size;\n attribute vec3 color;\n attribute float alpha;\n attribute float texID;\n attribute float rotation;\n\n varying float vRotation;\n varying vec3 targetColor;\n varying float targetAlpha;\n varying vec4 tileRect;\n varying float tileID;\n\n void main() {\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n targetColor = color;\n targetAlpha = alpha;\n vRotation = rotation;\n\n tileID = texID;\n //get the tile rectangle from the atlasIndex texture..\n tileRect = texture2D(atlasIndex, vec2((tileID + 0.5) / ".concat(_constants.DATA_TEXTURE_SIZE, ".0, 0.5));\n\n gl_PointSize = ((size * ").concat(_constants2.SIZE_ATTENUATION_FACTOR, ") / -mvPosition.z);\n gl_Position = projectionMatrix * mvPosition;\n }\n");
14
14
  };
15
15
 
16
16
  exports.vertexShader = vertexShader;
17
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9EZXNrdG9wL3NoYWRlcnMvdmVydGV4U2hhZGVyLmpzIl0sIm5hbWVzIjpbInZlcnRleFNoYWRlciIsIkRBVEFfVEVYVFVSRV9TSVpFIiwiU0laRV9BVFRFTlVBVElPTl9GQUNUT1IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFTyxJQUFNQSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxHQUFNO0FBQ2hDLCtyQkFzQjZEQyw0QkF0QjdELHlEQXdCOEJDLG1DQXhCOUI7QUE0QkQsQ0E3Qk0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEQVRBX1RFWFRVUkVfU0laRSB9IGZyb20gJy4uLy4uL2NvbW1vbi9UZXh0dXJlQXRsYXMvY29uc3RhbnRzJztcbmltcG9ydCB7IFNJWkVfQVRURU5VQVRJT05fRkFDVE9SIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NoYWRlcnMvY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IHZlcnRleFNoYWRlciA9ICgpID0+IHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTtcbiAgICAvL2F0bGFzSW5kZXggaXMgYSAyNTZ4MSBmbG9hdCB0ZXh0dXJlIG9mIHRpbGUgcmVjdGFuZ2xlcyBhcyByPW1pbnggZz1taW55IGI9bWF4eCBhPW1heHlcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCBhdGxhc0luZGV4O1xuXG4gICAgYXR0cmlidXRlIGZsb2F0IHNpemU7XG4gICAgYXR0cmlidXRlIHZlYzMgY29sb3I7XG4gICAgYXR0cmlidXRlIGZsb2F0IGFscGhhO1xuICAgIGF0dHJpYnV0ZSBmbG9hdCB0ZXhJRDtcblxuICAgIHZhcnlpbmcgdmVjMyB0YXJnZXRDb2xvcjtcbiAgICB2YXJ5aW5nIGZsb2F0IHRhcmdldEFscGhhO1xuICAgIHZhcnlpbmcgdmVjNCB0aWxlUmVjdDtcbiAgICB2YXJ5aW5nIGZsb2F0IHRpbGVJRDtcblxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICB0YXJnZXRDb2xvciA9IGNvbG9yO1xuICAgICAgdGFyZ2V0QWxwaGEgPSBhbHBoYTtcblxuICAgICAgdGlsZUlEID0gdGV4SUQ7XG4gICAgICAvL2dldCB0aGUgdGlsZSByZWN0YW5nbGUgZnJvbSB0aGUgYXRsYXNJbmRleCB0ZXh0dXJlLi5cbiAgICAgIHRpbGVSZWN0ID0gdGV4dHVyZTJEKGF0bGFzSW5kZXgsIHZlYzIoKHRpbGVJRCArIDAuNSkgLyAke0RBVEFfVEVYVFVSRV9TSVpFfS4wLCAwLjUpKTtcblxuICAgICAgZ2xfUG9pbnRTaXplID0gKChzaXplICogJHtTSVpFX0FUVEVOVUFUSU9OX0ZBQ1RPUn0pIC8gLW12UG9zaXRpb24ueik7XG4gICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuICAgIH1cbmA7XG59O1xuIl19
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9EZXNrdG9wL3NoYWRlcnMvdmVydGV4U2hhZGVyLmpzIl0sIm5hbWVzIjpbInZlcnRleFNoYWRlciIsIkRBVEFfVEVYVFVSRV9TSVpFIiwiU0laRV9BVFRFTlVBVElPTl9GQUNUT1IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFTyxJQUFNQSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxHQUFNO0FBQ2hDLHl4QkF5QjZEQyw0QkF6QjdELHlEQTJCOEJDLG1DQTNCOUI7QUErQkQsQ0FoQ00iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEQVRBX1RFWFRVUkVfU0laRSB9IGZyb20gJy4uLy4uL2NvbW1vbi9UZXh0dXJlQXRsYXMvY29uc3RhbnRzJztcbmltcG9ydCB7IFNJWkVfQVRURU5VQVRJT05fRkFDVE9SIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NoYWRlcnMvY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IHZlcnRleFNoYWRlciA9ICgpID0+IHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCB1VGV4dHVyZTtcbiAgICAvL2F0bGFzSW5kZXggaXMgYSAyNTZ4MSBmbG9hdCB0ZXh0dXJlIG9mIHRpbGUgcmVjdGFuZ2xlcyBhcyByPW1pbnggZz1taW55IGI9bWF4eCBhPW1heHlcbiAgICB1bmlmb3JtIHNhbXBsZXIyRCBhdGxhc0luZGV4O1xuXG4gICAgYXR0cmlidXRlIGZsb2F0IHNpemU7XG4gICAgYXR0cmlidXRlIHZlYzMgY29sb3I7XG4gICAgYXR0cmlidXRlIGZsb2F0IGFscGhhO1xuICAgIGF0dHJpYnV0ZSBmbG9hdCB0ZXhJRDtcbiAgICBhdHRyaWJ1dGUgZmxvYXQgcm90YXRpb247XG5cbiAgICB2YXJ5aW5nIGZsb2F0IHZSb3RhdGlvbjtcbiAgICB2YXJ5aW5nIHZlYzMgdGFyZ2V0Q29sb3I7XG4gICAgdmFyeWluZyBmbG9hdCB0YXJnZXRBbHBoYTtcbiAgICB2YXJ5aW5nIHZlYzQgdGlsZVJlY3Q7XG4gICAgdmFyeWluZyBmbG9hdCB0aWxlSUQ7XG5cbiAgICB2b2lkIG1haW4oKSB7XG4gICAgICB2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgICAgdGFyZ2V0Q29sb3IgPSBjb2xvcjtcbiAgICAgIHRhcmdldEFscGhhID0gYWxwaGE7XG4gICAgICB2Um90YXRpb24gPSByb3RhdGlvbjtcblxuICAgICAgdGlsZUlEID0gdGV4SUQ7XG4gICAgICAvL2dldCB0aGUgdGlsZSByZWN0YW5nbGUgZnJvbSB0aGUgYXRsYXNJbmRleCB0ZXh0dXJlLi5cbiAgICAgIHRpbGVSZWN0ID0gdGV4dHVyZTJEKGF0bGFzSW5kZXgsIHZlYzIoKHRpbGVJRCArIDAuNSkgLyAke0RBVEFfVEVYVFVSRV9TSVpFfS4wLCAwLjUpKTtcblxuICAgICAgZ2xfUG9pbnRTaXplID0gKChzaXplICogJHtTSVpFX0FUVEVOVUFUSU9OX0ZBQ1RPUn0pIC8gLW12UG9zaXRpb24ueik7XG4gICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuICAgIH1cbmA7XG59O1xuIl19
@@ -182,6 +182,7 @@ var MobileGPURenderer = /*#__PURE__*/function (_BaseRenderer) {
182
182
  key: "updateTarget",
183
183
  value: function updateTarget(particle) {
184
184
  var position = particle.position,
185
+ rotation = particle.rotation,
185
186
  scale = particle.scale,
186
187
  radius = particle.radius,
187
188
  color = particle.color,
@@ -192,6 +193,7 @@ var MobileGPURenderer = /*#__PURE__*/function (_BaseRenderer) {
192
193
  g = color.g,
193
194
  b = color.b;
194
195
  particle.target.position.copy(position);
196
+ particle.target.rotation.copy(rotation);
195
197
  particle.target.size = scale * radius;
196
198
  particle.target.color.setRGB(r, g, b);
197
199
  particle.target.alpha = alpha;
@@ -215,7 +217,7 @@ var MobileGPURenderer = /*#__PURE__*/function (_BaseRenderer) {
215
217
  }, {
216
218
  key: "mapParticleTargetPropsToPoint",
217
219
  value: function mapParticleTargetPropsToPoint(particle) {
218
- this.updatePointPosition(particle).updatePointSize(particle).updatePointColor(particle).updatePointAlpha(particle).updatePointTextureIndex(particle);
220
+ this.updatePointPosition(particle).updatePointSize(particle).updatePointRotation(particle).updatePointColor(particle).updatePointAlpha(particle).updatePointTextureIndex(particle);
219
221
  return this;
220
222
  }
221
223
  /**
@@ -258,6 +260,25 @@ var MobileGPURenderer = /*#__PURE__*/function (_BaseRenderer) {
258
260
  buffer.array[target.index * stride + offset + 0] = target.size;
259
261
  return this;
260
262
  }
263
+ /**
264
+ * Updates the point's rotation.
265
+ *
266
+ * @param {Particle} particle - The particle containing the target rotation.
267
+ * @return {GPURenderer}
268
+ */
269
+
270
+ }, {
271
+ key: "updatePointRotation",
272
+ value: function updatePointRotation(particle) {
273
+ var attribute = 'rotation';
274
+ var geometry = this.geometry,
275
+ stride = this.stride,
276
+ buffer = this.buffer;
277
+ var target = particle.target;
278
+ var offset = geometry.attributes[attribute].offset;
279
+ buffer.array[target.index * stride + offset + 0] = target.rotation.z;
280
+ return this;
281
+ }
261
282
  /**
262
283
  * Updates the point's color attribute according with the particle's target color.
263
284
  *
@@ -361,4 +382,4 @@ var MobileGPURenderer = /*#__PURE__*/function (_BaseRenderer) {
361
382
  }(_BaseRenderer2["default"]);
362
383
 
363
384
  exports["default"] = MobileGPURenderer;
364
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvaW5kZXguanMiXSwibmFtZXMiOlsiVEhSRUUiLCJNb2JpbGVHUFVSZW5kZXJlciIsImNvbnRhaW5lciIsInRocmVlIiwib3B0aW9ucyIsIkRFRkFVTFRfUkVOREVSRVJfT1BUSU9OUyIsIlJFTkRFUkVSX1RZUEVfR1BVX01PQklMRSIsInByb3BzIiwiY2FtZXJhIiwibWF4UGFydGljbGVzIiwiYmFzZUNvbG9yIiwiYmxlbmRpbmciLCJkZXB0aFRlc3QiLCJkZXB0aFdyaXRlIiwidHJhbnNwYXJlbnQiLCJzaG91bGREZWJ1Z1RleHR1cmVBdGxhcyIsInBhcnRpY2xlQnVmZmVyIiwiUGFydGljbGVCdWZmZXIiLCJtYXRlcmlhbCIsIlNoYWRlck1hdGVyaWFsIiwidW5pZm9ybXMiLCJ2YWx1ZSIsIkNvbG9yIiwidVRleHR1cmUiLCJGRmF0bGFzSW5kZXgiLCJhdGxhc0RpbSIsIlZlY3RvcjIiLCJ2ZXJ0ZXhTaGFkZXIiLCJmcmFnbWVudFNoYWRlciIsInRhcmdldFBvb2wiLCJQb29sIiwidW5pcXVlTGlzdCIsIlVuaXF1ZUxpc3QiLCJidWZmZXIiLCJzdHJpZGUiLCJnZW9tZXRyeSIsInBvaW50cyIsIlBvaW50cyIsImZydXN0dW1DdWxsZWQiLCJhZGQiLCJzeXN0ZW0iLCJuZWVkc1VwZGF0ZSIsInRleHR1cmVBdGxhcyIsInVwZGF0ZSIsInNldCIsImF0bGFzVGV4dHVyZSIsImltYWdlIiwid2lkdGgiLCJoZWlnaHQiLCJwYXJ0aWNsZSIsInRhcmdldCIsImdldCIsIlRhcmdldCIsImlkIiwidXBkYXRlVGFyZ2V0IiwibWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQiLCJyZXNldCIsInBvc2l0aW9uIiwic2NhbGUiLCJyYWRpdXMiLCJjb2xvciIsImFscGhhIiwiYm9keSIsInIiLCJnIiwiYiIsImNvcHkiLCJzaXplIiwic2V0UkdCIiwiaW5kZXgiLCJmaW5kIiwiU3ByaXRlIiwibWFwIiwidGV4dHVyZSIsInRleHR1cmVJbmRleCIsImdldFRleHR1cmVJRCIsInVwZGF0ZVBvaW50UG9zaXRpb24iLCJ1cGRhdGVQb2ludFNpemUiLCJ1cGRhdGVQb2ludENvbG9yIiwidXBkYXRlUG9pbnRBbHBoYSIsInVwZGF0ZVBvaW50VGV4dHVyZUluZGV4IiwiYXR0cmlidXRlIiwib2Zmc2V0IiwiYXR0cmlidXRlcyIsImFycmF5IiwieCIsInkiLCJ6IiwidGkiLCJ0YSIsImlkYSIsImluZGV4RGF0YSIsIm54IiwibnkiLCJweCIsInB5IiwiZGVidWciLCJ1bmRlZmluZWQiLCJUZXh0dXJlQXRsYXMiLCJhZGRUZXh0dXJlIiwicmVtb3ZlIiwiZGVzdHJveSIsIkJhc2VSZW5kZXJlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLElBQUlBLEtBQUo7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBQ3FCQyxpQjs7Ozs7QUFDbkIsNkJBQVlDLFNBQVosRUFBdUJDLEtBQXZCLEVBQWtFO0FBQUE7O0FBQUEsUUFBcENDLE9BQW9DLHVFQUExQkMsbUNBQTBCO0FBQUE7QUFDaEUsOEJBQU1DLCtCQUFOO0FBRUFOLElBQUFBLEtBQUssR0FBRyxNQUFLRyxLQUFMLEdBQWFBLEtBQXJCOztBQUNBLFFBQU1JLEtBQUssbUNBQVFGLG1DQUFSLEdBQXFDRCxPQUFyQyxDQUFYOztBQUpnRSxRQU05REksTUFOOEQsR0FjNURELEtBZDRELENBTTlEQyxNQU44RDtBQUFBLFFBTzlEQyxZQVA4RCxHQWM1REYsS0FkNEQsQ0FPOURFLFlBUDhEO0FBQUEsUUFROURDLFNBUjhELEdBYzVESCxLQWQ0RCxDQVE5REcsU0FSOEQ7QUFBQSxRQVM5REMsUUFUOEQsR0FjNURKLEtBZDRELENBUzlESSxRQVQ4RDtBQUFBLFFBVTlEQyxTQVY4RCxHQWM1REwsS0FkNEQsQ0FVOURLLFNBVjhEO0FBQUEs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VixFQUF3QjtBQUN0QixlQUFLQSxZQUFMLEdBQW9CLElBQUl3RCxvQkFBSixDQUFpQixJQUFqQixFQUF1QkYsS0FBdkIsQ0FBcEI7QUFDRDs7QUFFRCxhQUFLdEQsWUFBTCxDQUFrQnlELFVBQWxCLENBQTZCMUIsT0FBN0I7QUFDRDs7QUFFRCxhQUFPQSxPQUFPLENBQUNDLFlBQWY7QUFDRDs7OzhCQUVTO0FBQUEsVUFDQXhFLFNBREEsR0FDZ0QsSUFEaEQsQ0FDQUEsU0FEQTtBQUFBLFVBQ1drQyxNQURYLEdBQ2dELElBRGhELENBQ1dBLE1BRFg7QUFBQSxVQUNtQk0sWUFEbkIsR0FDZ0QsSUFEaEQsQ0FDbUJBLFlBRG5CO0FBQUEsVUFDaUNYLFVBRGpDLEdBQ2dELElBRGhELENBQ2lDQSxVQURqQztBQUdSN0IsTUFBQUEsU0FBUyxDQUFDa0csTUFBVixDQUFpQmhFLE1BQWpCO0FBQ0FMLE1BQUFBLFVBQVUsQ0FBQ3NFLE9BQVg7QUFDQTNELE1BQUFBLFlBQVksSUFBSUEsWUFBWSxDQUFDMkQsT0FBYixFQUFoQjtBQUNEOzs7RUFsUjRDQyx5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhcnRpY2xlQnVmZmVyLCBUYXJnZXQsIFRleHR1cmVBdGxhcywgVW5pcXVlTGlzdCB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyIH0gZnJvbSAnLi9zaGFkZXJzJztcblxuaW1wb3J0IEJhc2VSZW5kZXJlciBmcm9tICcuLi8uLi9CYXNlUmVuZGVyZXInO1xuaW1wb3J0IHsgREVGQVVMVF9SRU5ERVJFUl9PUFRJT05TIH0gZnJvbSAnLi4vY29tbW9uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBQb29sIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBSRU5ERVJFUl9UWVBFX0dQVV9NT0JJTEUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmxldCBUSFJFRTtcblxuLyoqXG4gKiBHUFVSZW5kZXJlciBmb3IgbW9iaWxlIGRldmljZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBmbG9hdGluZyBwb2ludCB0ZXh0dXJlcy5cbiAqXG4gKiBAYXV0aG9yIHRocmF4IDxtYW50aHJheEBnbWFpbC5jb20+XG4gKiBAYXV0aG9yIHJvaGFuLWRlc2hwYW5kZSA8cm9oYW5AY3JlYXRpdmVsaWZlZm9ybS5jb20+XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1vYmlsZUdQVVJlbmRlcmVyIGV4dGVuZHMgQmFzZVJlbmRlcmVyIHtcbiAgY29uc3RydWN0b3IoY29udGFpbmVyLCB0aHJlZSwgb3B0aW9ucyA9IERFRkFVTFRfUkVOREVSRVJfT1BUSU9OUykge1xuICAgIHN1cGVyKFJFTkRFUkVSX1RZUEVfR1BVX01PQklMRSk7XG5cbiAgICBUSFJFRSA9IHRoaXMudGhyZWUgPSB0aHJlZTtcbiAgICBjb25zdCBwcm9wcyA9IHsgLi4uREVGQVVMVF9SRU5ERVJFUl9PUFRJT05TLCAuLi5vcHRpb25zIH07XG4gICAgY29uc3Qge1xuICAgICAgY2FtZXJhLFxuICAgICAgbWF4UGFydGljbGVzLFxuICAgICAgYmFzZUNvbG9yLFxuICAgICAgYmxlbmRpbmcsXG4gICAgICBkZXB0aFRlc3QsXG4gICAgICBkZXB0aFdyaXRlLFxuICAgICAgdHJhbnNwYXJlbnQsXG4gICAgICBzaG91bGREZWJ1Z1RleHR1cmVBdGxhcyxcbiAgICB9ID0gcHJvcHM7XG4gICAgY29uc3QgcGFydGljbGVCdWZmZXIgPSBuZXcgUGFydGljbGVCdWZmZXIobWF4UGFydGljbGVzLCBUSFJFRSk7XG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoe1xuICAgICAgdW5pZm9ybXM6IHtcbiAgICAgICAgYmFzZUNvbG9yOiB7IHZhbHVlOiBuZXcgVEhSRUUuQ29sb3IoYmFzZUNvbG9yKSB9LFxuICAgICAgICB1VGV4dHVyZTogeyB2YWx1ZTogbnVsbCB9LFxuICAgICAgICBGRmF0bGFzSW5kZXg6IHsgdmFsdWU6IG51bGwgfSxcbiAgICAgICAgYXRsYXNEaW06IHsgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IyKCkgfSxcbiAgICAgIH0sXG4gICAgICB2ZXJ0ZXhTaGFkZXI6IHZlcnRleFNoYWRlcigpLFxuICAgICAgZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50U2hhZGVyKCksXG4gICAgICBibGVuZGluZzogVEhSRUVbYmxlbmRpbmddLFxuICAgICAgZGVwdGhUZXN0LFxuICAgICAgZGVwdGhXcml0ZSxcbiAgICAgIHRyYW5zcGFyZW50LFxuICAgIH0pO1xuXG4gICAgdGhpcy5jYW1lcmEgPSBjYW1lcmE7XG4gICAgdGhpcy50YXJnZXRQb29sID0gbmV3IFBvb2woKTtcbiAgICB0aGlzLnVuaXF1ZUxpc3QgPSBuZXcgVW5pcXVlTGlzdChtYXhQYXJ0aWNsZXMpO1xuICAgIHRoaXMucGFydGljbGVCdWZmZXIgPSBwYXJ0aWNsZUJ1ZmZlcjtcbiAgICB0aGlzLmJ1ZmZlciA9IHBhcnRpY2xlQnVmZmVyLmJ1ZmZlcjtcbiAgICB0aGlzLnN0cmlkZSA9IHBhcnRpY2xlQnVmZmVyLnN0cmlkZTtcbiAgICB0aGlzLmdlb21ldHJ5ID0gcGFydGljbGVCdWZmZXIuZ2VvbWV0cnk7XG4gICAgdGhpcy5tYXRlcmlhbCA9IG1hdGVyaWFsO1xuICAgIHRoaXMucG9pbnRzID0gbmV3IFRIUkVFLlBvaW50cyh0aGlzLmdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsKTtcbiAgICB0aGlzLnBvaW50cy5mcnVzdHVtQ3VsbGVkID0gZmFsc2U7XG4gICAgdGhpcy5zaG91bGREZWJ1Z1RleHR1cmVBdGxhcyA9IHNob3VsZERlYnVnVGV4dHVyZUF0bGFzO1xuXG4gICAgY29udGFpbmVyLmFkZCh0aGlzLnBvaW50cyk7XG4gIH1cblxuICBvblN5c3RlbVVwZGF0ZShzeXN0ZW0pIHtcbiAgICBzdXBlci5vblN5c3RlbVVwZGF0ZShzeXN0ZW0pO1xuXG4gICAgdGhpcy5idWZmZXIubmVlZHNVcGRhdGUgPSB0cnVlO1xuXG4gICAgY29uc3QgeyB0ZXh0dXJlQXRsYXMgfSA9IHRoaXM7XG5cbiAgICBpZiAodGV4dHVyZUF0bGFzKSB7XG4gICAgICB0ZXh0dXJlQXRsYXMudXBkYXRlKCk7XG4gICAgICB0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLmF0bGFzRGltLnZhbHVlLnNldChcbiAgICAgICAgdGV4dHVyZUF0bGFzLmF0bGFzVGV4dHVyZS5pbWFnZS53aWR0aCxcbiAgICAgICAgdGV4dHVyZUF0bGFzLmF0bGFzVGV4dHVyZS5pbWFnZS5oZWlnaHRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBvb2xzIHRoZSBwYXJ0aWNsZSB0YXJnZXQgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICAqIFVwZGF0ZXMgdGhlIHRhcmdldCBhbmQgbWFwcyBwYXJ0aWNsZSBwcm9wZXJ0aWVzIHRvIHRoZSBwb2ludC5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX1cbiAgICovXG4gIG9uUGFydGljbGVDcmVhdGVkKHBhcnRpY2xlKSB7XG4gICAgaWYgKCFwYXJ0aWNsZS50YXJnZXQpIHtcbiAgICAgIHBhcnRpY2xlLnRhcmdldCA9IHRoaXMudGFyZ2V0UG9vbC5nZXQoVGFyZ2V0LCBUSFJFRSk7XG4gICAgICB0aGlzLnVuaXF1ZUxpc3QuYWRkKHBhcnRpY2xlLmlkKTtcbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVRhcmdldChwYXJ0aWNsZSkubWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQocGFydGljbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgcGFydGljbGUgcHJvcGVydGllcyB0byB0aGUgcG9pbnQgaWYgdGhlIHBhcnRpY2xlIGhhcyBhIHRhcmdldC5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX1cbiAgICovXG4gIG9uUGFydGljbGVVcGRhdGUocGFydGljbGUpIHtcbiAgICBpZiAoIXBhcnRpY2xlLnRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGFyZ2V0KHBhcnRpY2xlKS5tYXBQYXJ0aWNsZVRhcmdldFByb3BzVG9Qb2ludChwYXJ0aWNsZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIGFuZCBjbGVhcnMgdGhlIHBhcnRpY2xlIHRhcmdldC5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX1cbiAgICovXG4gIG9uUGFydGljbGVEZWFkKHBhcnRpY2xlKSB7XG4gICAgaWYgKCFwYXJ0aWNsZS50YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwYXJ0aWNsZS50YXJnZXQucmVzZXQoKTtcbiAgICB0aGlzLm1hcFBhcnRpY2xlVGFyZ2V0UHJvcHNUb1BvaW50KHBhcnRpY2xlKTtcblxuICAgIHBhcnRpY2xlLnRhcmdldCA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBhbGwgbXV0YWJsZSBwcm9wZXJ0aWVzIGZyb20gdGhlIHBhcnRpY2xlIHRvIHRoZSB0YXJnZXQuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9XG4gICAqIEByZXR1cm4ge0dQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlVGFyZ2V0KHBhcnRpY2xlKSB7XG4gICAgY29uc3QgeyBwb3NpdGlvbiwgc2NhbGUsIHJhZGl1cywgY29sb3IsIGFscGhhLCBib2R5LCBpZCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyByLCBnLCBiIH0gPSBjb2xvcjtcblxuICAgIHBhcnRpY2xlLnRhcmdldC5wb3NpdGlvbi5jb3B5KHBvc2l0aW9uKTtcbiAgICBwYXJ0aWNsZS50YXJnZXQuc2l6ZSA9IHNjYWxlICogcmFkaXVzO1xuICAgIHBhcnRpY2xlLnRhcmdldC5jb2xvci5zZXRSR0IociwgZywgYik7XG4gICAgcGFydGljbGUudGFyZ2V0LmFscGhhID0gYWxwaGE7XG4gICAgcGFydGljbGUudGFyZ2V0LmluZGV4ID0gdGhpcy51bmlxdWVMaXN0LmZpbmQoaWQpO1xuXG4gICAgaWYgKGJvZHkgJiYgYm9keSBpbnN0YW5jZW9mIFRIUkVFLlNwcml0ZSkge1xuICAgICAgY29uc3QgeyBtYXAgfSA9IGJvZHkubWF0ZXJpYWw7XG5cbiAgICAgIHBhcnRpY2xlLnRhcmdldC50ZXh0dXJlID0gbWFwO1xuICAgICAgcGFydGljbGUudGFyZ2V0LnRleHR1cmVJbmRleCA9IHRoaXMuZ2V0VGV4dHVyZUlEKFxuICAgICAgICBtYXAsXG4gICAgICAgIHRoaXMuc2hvdWxkRGVidWdUZXh0dXJlQXRsYXNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRW50cnkgcG9pbnQgZm9yIG1hcHBpbmcgcGFydGljbGUgcHJvcGVydGllcyB0byBidWZmZXIgZ2VvbWV0cnkgcG9pbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSBwcm9wZXJ0aWVzIHRvIG1hcFxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIG1hcFBhcnRpY2xlVGFyZ2V0UHJvcHNUb1BvaW50KHBhcnRpY2xlKSB7XG4gICAgdGhpcy51cGRhdGVQb2ludFBvc2l0aW9uKHBhcnRpY2xlKVxuICAgICAgLnVwZGF0ZVBvaW50U2l6ZShwYXJ0aWNsZSlcbiAgICAgIC51cGRhdGVQb2ludENvbG9yKHBhcnRpY2xlKVxuICAgICAgLnVwZGF0ZVBvaW50QWxwaGEocGFydGljbGUpXG4gICAgICAudXBkYXRlUG9pbnRUZXh0dXJlSW5kZXgocGFydGljbGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQncyBwb3NpdGlvbiBhY2NvcmRpbmcgdG8gdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgcG9zaXRpb24uXG4gICAqIEByZXR1cm4ge0dQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRQb3NpdGlvbihwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdwb3NpdGlvbic7XG4gICAgY29uc3QgeyBnZW9tZXRyeSwgc3RyaWRlLCBidWZmZXIgfSA9IHRoaXM7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG5cbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMF0gPSB0YXJnZXQucG9zaXRpb24ueDtcbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMV0gPSB0YXJnZXQucG9zaXRpb24ueTtcbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMl0gPSB0YXJnZXQucG9zaXRpb24uejtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvaW50J3Mgc2l6ZSByZWxhdGl2ZSB0byB0aGUgcGFydGljbGUncyB0YXJnZXQgc2NhbGUgYW5kIHJhZGl1cy5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IHNjYWxlLlxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50U2l6ZShwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdzaXplJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC5zaXplO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQncyBjb2xvciBhdHRyaWJ1dGUgYWNjb3JkaW5nIHdpdGggdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IGNvbG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgY29sb3IgYW5kIGFscGhhLlxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50Q29sb3IocGFydGljbGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSAnY29sb3InO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuXG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDBdID0gdGFyZ2V0LmNvbG9yLnI7XG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDFdID0gdGFyZ2V0LmNvbG9yLmc7XG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDJdID0gdGFyZ2V0LmNvbG9yLmI7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCBhbHBoYSBhdHRyaWJ1dGUgd2l0aCB0aGUgcGFydGljbGUncyB0YXJnZXQgYWxwaGEuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlIGNvbnRhaW5pbmcgdGhlIHRhcmdldCBhbHBoYS5cbiAgICogQHJldHVybiB7R1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVQb2ludEFscGhhKHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ2FscGhhJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC5hbHBoYTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvaW50IHRleHR1cmUgYXR0cmlidXRlIHdpdGggdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IHRleHR1cmUuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlIGNvbnRhaW5pbmcgdGhlIHRhcmdldCB0ZXh0dXJlLlxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50VGV4dHVyZUluZGV4KHBhcnRpY2xlKSB7XG4gICAgY29uc3QgYXR0cmlidXRlID0gJ3RleElEJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcbiAgICBjb25zdCBpZCA9IHRhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDA7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIGJ1ZmZlci5hcnJheVtpZF0gPSB0YXJnZXQudGV4dHVyZUluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgdGkgPSB0YXJnZXQudGV4dHVyZUluZGV4ICogNDtcbiAgICAgIGNvbnN0IHRhID0gdGhpcy50ZXh0dXJlQXRsYXM7XG4gICAgICBjb25zdCBpZGEgPSB0YS5pbmRleERhdGE7XG4gICAgICBjb25zdCBueCA9IGlkYVt0aSsrXTtcbiAgICAgIGNvbnN0IG55ID0gaWRhW3RpKytdO1xuICAgICAgY29uc3QgcHggPSBpZGFbdGkrK107XG4gICAgICBjb25zdCBweSA9IGlkYVt0aSsrXTtcblxuICAgICAgYnVmZmVyLmFycmF5W2lkXSA9ICgobnggKiB0YS5hdGxhc1RleHR1cmUuaW1hZ2Uud2lkdGgpIHwgMCkgKyBweDtcbiAgICAgIGJ1ZmZlci5hcnJheVtpZCArIDFdID0gKChueSAqIHRhLmF0bGFzVGV4dHVyZS5pbWFnZS5oZWlnaHQpIHwgMCkgKyBweTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldFRleHR1cmVJRCh0ZXh0dXJlLCBkZWJ1Zykge1xuICAgIGlmICh0ZXh0dXJlLnRleHR1cmVJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIXRoaXMudGV4dHVyZUF0bGFzKSB7XG4gICAgICAgIHRoaXMudGV4dHVyZUF0bGFzID0gbmV3IFRleHR1cmVBdGxhcyh0aGlzLCBkZWJ1Zyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGV4dHVyZUF0bGFzLmFkZFRleHR1cmUodGV4dHVyZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRleHR1cmUudGV4dHVyZUluZGV4O1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICBjb25zdCB7IGNvbnRhaW5lciwgcG9pbnRzLCB0ZXh0dXJlQXRsYXMsIHVuaXF1ZUxpc3QgfSA9IHRoaXM7XG5cbiAgICBjb250YWluZXIucmVtb3ZlKHBvaW50cyk7XG4gICAgdW5pcXVlTGlzdC5kZXN0cm95KCk7XG4gICAgdGV4dHVyZUF0bGFzICYmIHRleHR1cmVBdGxhcy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==
385
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvaW5kZXguanMiXSwibmFtZXMiOlsiVEhSRUUiLCJNb2JpbGVHUFVSZW5kZXJlciIsImNvbnRhaW5lciIsInRocmVlIiwib3B0aW9ucyIsIkRFRkFVTFRfUkVOREVSRVJfT1BUSU9OUyIsIlJFTkRFUkVSX1RZUEVfR1BVX01PQklMRSIsInByb3BzIiwiY2FtZXJhIiwibWF4UGFydGljbGVzIiwiYmFzZUNvbG9yIiwiYmxlbmRpbmciLCJkZXB0aFRlc3QiLCJkZXB0aFdyaXRlIiwidHJhbnNwYXJlbnQiLCJzaG91bGREZWJ1Z1RleHR1cmVBdGxhcyIsInBhcnRpY2xlQnVmZmVyIiwiUGFydGljbGVCdWZmZXIiLCJtYXRlcmlhbCIsIlNoYWRlck1hdGVyaWFsIiwidW5pZm9ybXMiLCJ2YWx1ZSIsIkNvbG9yIiwidVRleHR1cmUiLCJGRmF0bGFzSW5kZXgiLCJhdGxhc0RpbSIsIlZlY3RvcjIiLCJ2ZXJ0ZXhTaGFkZXIiLCJmcmFnbWVudFNoYWRlciIsInRhcmdldFBvb2wiLCJQb29sIiwidW5pcXVlTGlzdCIsIlVuaXF1ZUxpc3QiLCJidWZmZXIiLCJzdHJpZGUiLCJnZW9tZXRyeSIsInBvaW50cyIsIlBvaW50cyIsImZydXN0dW1DdWxsZWQiLCJhZGQiLCJzeXN0ZW0iLCJuZWVkc1VwZGF0ZSIsInRleHR1cmVBdGxhcyIsInVwZGF0ZSIsInNldCIsImF0bGFzVGV4dHVyZSIsImltYWdlIiwid2lkdGgiLCJoZWlnaHQiLCJwYXJ0aWNsZSIsInRhcmdldCIsImdldCIsIlRhcmdldCIsImlkIiwidXBkYXRlVGFyZ2V0IiwibWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQiLCJyZXNldCIsInBvc2l0aW9uIiwicm90YXRpb24iLCJzY2FsZSIsInJhZGl1cyIsImNvbG9yIiwiYWxwaGEiLCJib2R5IiwiciIsImciLCJiIiwiY29weSIsInNpemUiLCJzZXRSR0IiLCJpbmRleCIsImZpbmQiLCJTcHJpdGUiLCJtYXAiLCJ0ZXh0dXJlIiwidGV4dHVyZUluZGV4IiwiZ2V0VGV4dHVyZUlEIiwidXBkYXRlUG9pbnRQb3NpdGlvbiIsInVwZGF0ZVBvaW50U2l6ZSIsInVwZGF0ZVBvaW50Um90YXRpb24iLCJ1cGRhdGVQb2ludENvbG9yIiwidXBkYXRlUG9pbnRBbHBoYSIsInVwZGF0ZVBvaW50VGV4dHVyZUluZGV4IiwiYXR0cmlidXRlIiwib2Zmc2V0IiwiYXR0cmlidXRlcyIsImFycmF5IiwieCIsInkiLCJ6IiwidGkiLCJ0YSIsImlkYSIsImluZGV4RGF0YSIsIm54IiwibnkiLCJweCIsInB5IiwiZGVidWciLCJ1bmRlZmluZWQiLCJUZXh0dXJlQXRsYXMiLCJhZGRUZXh0dXJlIiwicmVtb3ZlIiwiZGVzdHJveSIsIkJhc2VSZW5kZXJlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7OztBQUVBLElBQUlBLEtBQUo7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0lBQ3FCQyxpQjs7Ozs7QUFDbkIsNkJBQVlDLFNBQVosRUFBdUJDLEtBQXZCLEVBQWtFO0FBQUE7O0FBQUEsUUFBcENDLE9BQW9DLHVFQUExQkMsbUNBQTBCO0FBQUE7QUFDaEUsOEJBQU1DLCtCQUFOO0FBRUFOLElBQUFBLEtBQUssR0FBRyxNQUFLRyxLQUFMLEdBQWFBLEtBQXJCOztBQUNBLFFBQU1JLEtBQUssbUNBQVFGLG1DQUFSLEdBQXFDRCxPQUFyQyxDQUFYOztBQUpnRSxRQU05REksTUFOOEQsR0FjNURELEtBZDRELENBTTlEQyxNQU44RDtBQUFBLFFBTzlEQyxZQVA4RCxHQWM1REYsS0FkNEQsQ0FPOURFLFlBUDhEO0FBQUEsUUFROURDLFNBUjhELEdBYzVESCxLQWQ0RCxDQVE5REcsU0FSOEQ7QUFBQSxRQVM5REMsUUFUOEQsR0FjNURKLEtBZDRELENBUzlESSxRQVQ4RDtBQUFBLFFBVTlEQyxTQVY4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QURuQixHQUNnRCxJQURoRCxDQUNtQkEsWUFEbkI7QUFBQSxVQUNpQ1gsVUFEakMsR0FDZ0QsSUFEaEQsQ0FDaUNBLFVBRGpDO0FBR1I3QixNQUFBQSxTQUFTLENBQUNvRyxNQUFWLENBQWlCbEUsTUFBakI7QUFDQUwsTUFBQUEsVUFBVSxDQUFDd0UsT0FBWDtBQUNBN0QsTUFBQUEsWUFBWSxJQUFJQSxZQUFZLENBQUM2RCxPQUFiLEVBQWhCO0FBQ0Q7OztFQXJTNENDLHlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGFydGljbGVCdWZmZXIsIFRhcmdldCwgVGV4dHVyZUF0bGFzLCBVbmlxdWVMaXN0IH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIgfSBmcm9tICcuL3NoYWRlcnMnO1xuXG5pbXBvcnQgQmFzZVJlbmRlcmVyIGZyb20gJy4uLy4uL0Jhc2VSZW5kZXJlcic7XG5pbXBvcnQgeyBERUZBVUxUX1JFTkRFUkVSX09QVElPTlMgfSBmcm9tICcuLi9jb21tb24vY29uc3RhbnRzJztcbmltcG9ydCB7IFBvb2wgfSBmcm9tICcuLi8uLi8uLi9jb3JlJztcbmltcG9ydCB7IFJFTkRFUkVSX1RZUEVfR1BVX01PQklMRSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxubGV0IFRIUkVFO1xuXG4vKipcbiAqIEdQVVJlbmRlcmVyIGZvciBtb2JpbGUgZGV2aWNlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGZsb2F0aW5nIHBvaW50IHRleHR1cmVzLlxuICpcbiAqIEBhdXRob3IgdGhyYXggPG1hbnRocmF4QGdtYWlsLmNvbT5cbiAqIEBhdXRob3Igcm9oYW4tZGVzaHBhbmRlIDxyb2hhbkBjcmVhdGl2ZWxpZmVmb3JtLmNvbT5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTW9iaWxlR1BVUmVuZGVyZXIgZXh0ZW5kcyBCYXNlUmVuZGVyZXIge1xuICBjb25zdHJ1Y3Rvcihjb250YWluZXIsIHRocmVlLCBvcHRpb25zID0gREVGQVVMVF9SRU5ERVJFUl9PUFRJT05TKSB7XG4gICAgc3VwZXIoUkVOREVSRVJfVFlQRV9HUFVfTU9CSUxFKTtcblxuICAgIFRIUkVFID0gdGhpcy50aHJlZSA9IHRocmVlO1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5ERUZBVUxUX1JFTkRFUkVSX09QVElPTlMsIC4uLm9wdGlvbnMgfTtcbiAgICBjb25zdCB7XG4gICAgICBjYW1lcmEsXG4gICAgICBtYXhQYXJ0aWNsZXMsXG4gICAgICBiYXNlQ29sb3IsXG4gICAgICBibGVuZGluZyxcbiAgICAgIGRlcHRoVGVzdCxcbiAgICAgIGRlcHRoV3JpdGUsXG4gICAgICB0cmFuc3BhcmVudCxcbiAgICAgIHNob3VsZERlYnVnVGV4dHVyZUF0bGFzLFxuICAgIH0gPSBwcm9wcztcbiAgICBjb25zdCBwYXJ0aWNsZUJ1ZmZlciA9IG5ldyBQYXJ0aWNsZUJ1ZmZlcihtYXhQYXJ0aWNsZXMsIFRIUkVFKTtcbiAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7XG4gICAgICB1bmlmb3Jtczoge1xuICAgICAgICBiYXNlQ29sb3I6IHsgdmFsdWU6IG5ldyBUSFJFRS5Db2xvcihiYXNlQ29sb3IpIH0sXG4gICAgICAgIHVUZXh0dXJlOiB7IHZhbHVlOiBudWxsIH0sXG4gICAgICAgIEZGYXRsYXNJbmRleDogeyB2YWx1ZTogbnVsbCB9LFxuICAgICAgICBhdGxhc0RpbTogeyB2YWx1ZTogbmV3IFRIUkVFLlZlY3RvcjIoKSB9LFxuICAgICAgfSxcbiAgICAgIHZlcnRleFNoYWRlcjogdmVydGV4U2hhZGVyKCksXG4gICAgICBmcmFnbWVudFNoYWRlcjogZnJhZ21lbnRTaGFkZXIoKSxcbiAgICAgIGJsZW5kaW5nOiBUSFJFRVtibGVuZGluZ10sXG4gICAgICBkZXB0aFRlc3QsXG4gICAgICBkZXB0aFdyaXRlLFxuICAgICAgdHJhbnNwYXJlbnQsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNhbWVyYSA9IGNhbWVyYTtcbiAgICB0aGlzLnRhcmdldFBvb2wgPSBuZXcgUG9vbCgpO1xuICAgIHRoaXMudW5pcXVlTGlzdCA9IG5ldyBVbmlxdWVMaXN0KG1heFBhcnRpY2xlcyk7XG4gICAgdGhpcy5wYXJ0aWNsZUJ1ZmZlciA9IHBhcnRpY2xlQnVmZmVyO1xuICAgIHRoaXMuYnVmZmVyID0gcGFydGljbGVCdWZmZXIuYnVmZmVyO1xuICAgIHRoaXMuc3RyaWRlID0gcGFydGljbGVCdWZmZXIuc3RyaWRlO1xuICAgIHRoaXMuZ2VvbWV0cnkgPSBwYXJ0aWNsZUJ1ZmZlci5nZW9tZXRyeTtcbiAgICB0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XG4gICAgdGhpcy5wb2ludHMgPSBuZXcgVEhSRUUuUG9pbnRzKHRoaXMuZ2VvbWV0cnksIHRoaXMubWF0ZXJpYWwpO1xuICAgIHRoaXMucG9pbnRzLmZydXN0dW1DdWxsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnNob3VsZERlYnVnVGV4dHVyZUF0bGFzID0gc2hvdWxkRGVidWdUZXh0dXJlQXRsYXM7XG5cbiAgICBjb250YWluZXIuYWRkKHRoaXMucG9pbnRzKTtcbiAgfVxuXG4gIG9uU3lzdGVtVXBkYXRlKHN5c3RlbSkge1xuICAgIHN1cGVyLm9uU3lzdGVtVXBkYXRlKHN5c3RlbSk7XG5cbiAgICB0aGlzLmJ1ZmZlci5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cbiAgICBjb25zdCB7IHRleHR1cmVBdGxhcyB9ID0gdGhpcztcblxuICAgIGlmICh0ZXh0dXJlQXRsYXMpIHtcbiAgICAgIHRleHR1cmVBdGxhcy51cGRhdGUoKTtcbiAgICAgIHRoaXMubWF0ZXJpYWwudW5pZm9ybXMuYXRsYXNEaW0udmFsdWUuc2V0KFxuICAgICAgICB0ZXh0dXJlQXRsYXMuYXRsYXNUZXh0dXJlLmltYWdlLndpZHRoLFxuICAgICAgICB0ZXh0dXJlQXRsYXMuYXRsYXNUZXh0dXJlLmltYWdlLmhlaWdodFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9vbHMgdGhlIHBhcnRpY2xlIHRhcmdldCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAgICogVXBkYXRlcyB0aGUgdGFyZ2V0IGFuZCBtYXBzIHBhcnRpY2xlIHByb3BlcnRpZXMgdG8gdGhlIHBvaW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfVxuICAgKi9cbiAgb25QYXJ0aWNsZUNyZWF0ZWQocGFydGljbGUpIHtcbiAgICBpZiAoIXBhcnRpY2xlLnRhcmdldCkge1xuICAgICAgcGFydGljbGUudGFyZ2V0ID0gdGhpcy50YXJnZXRQb29sLmdldChUYXJnZXQsIFRIUkVFKTtcbiAgICAgIHRoaXMudW5pcXVlTGlzdC5hZGQocGFydGljbGUuaWQpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVGFyZ2V0KHBhcnRpY2xlKS5tYXBQYXJ0aWNsZVRhcmdldFByb3BzVG9Qb2ludChwYXJ0aWNsZSk7XG4gIH1cblxuICAvKipcbiAgICogTWFwcyBwYXJ0aWNsZSBwcm9wZXJ0aWVzIHRvIHRoZSBwb2ludCBpZiB0aGUgcGFydGljbGUgaGFzIGEgdGFyZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfVxuICAgKi9cbiAgb25QYXJ0aWNsZVVwZGF0ZShwYXJ0aWNsZSkge1xuICAgIGlmICghcGFydGljbGUudGFyZ2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVUYXJnZXQocGFydGljbGUpLm1hcFBhcnRpY2xlVGFyZ2V0UHJvcHNUb1BvaW50KHBhcnRpY2xlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgYW5kIGNsZWFycyB0aGUgcGFydGljbGUgdGFyZ2V0LlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfVxuICAgKi9cbiAgb25QYXJ0aWNsZURlYWQocGFydGljbGUpIHtcbiAgICBpZiAoIXBhcnRpY2xlLnRhcmdldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHBhcnRpY2xlLnRhcmdldC5yZXNldCgpO1xuICAgIHRoaXMubWFwUGFydGljbGVUYXJnZXRQcm9wc1RvUG9pbnQocGFydGljbGUpO1xuXG4gICAgcGFydGljbGUudGFyZ2V0ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBzIGFsbCBtdXRhYmxlIHByb3BlcnRpZXMgZnJvbSB0aGUgcGFydGljbGUgdG8gdGhlIHRhcmdldC5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX1cbiAgICogQHJldHVybiB7R1BVUmVuZGVyZXJ9XG4gICAqL1xuICB1cGRhdGVUYXJnZXQocGFydGljbGUpIHtcbiAgICBjb25zdCB7IHBvc2l0aW9uLCByb3RhdGlvbiwgc2NhbGUsIHJhZGl1cywgY29sb3IsIGFscGhhLCBib2R5LCBpZCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyByLCBnLCBiIH0gPSBjb2xvcjtcblxuICAgIHBhcnRpY2xlLnRhcmdldC5wb3NpdGlvbi5jb3B5KHBvc2l0aW9uKTtcbiAgICBwYXJ0aWNsZS50YXJnZXQucm90YXRpb24uY29weShyb3RhdGlvbik7XG4gICAgcGFydGljbGUudGFyZ2V0LnNpemUgPSBzY2FsZSAqIHJhZGl1cztcbiAgICBwYXJ0aWNsZS50YXJnZXQuY29sb3Iuc2V0UkdCKHIsIGcsIGIpO1xuICAgIHBhcnRpY2xlLnRhcmdldC5hbHBoYSA9IGFscGhhO1xuICAgIHBhcnRpY2xlLnRhcmdldC5pbmRleCA9IHRoaXMudW5pcXVlTGlzdC5maW5kKGlkKTtcblxuICAgIGlmIChib2R5ICYmIGJvZHkgaW5zdGFuY2VvZiBUSFJFRS5TcHJpdGUpIHtcbiAgICAgIGNvbnN0IHsgbWFwIH0gPSBib2R5Lm1hdGVyaWFsO1xuXG4gICAgICBwYXJ0aWNsZS50YXJnZXQudGV4dHVyZSA9IG1hcDtcbiAgICAgIHBhcnRpY2xlLnRhcmdldC50ZXh0dXJlSW5kZXggPSB0aGlzLmdldFRleHR1cmVJRChcbiAgICAgICAgbWFwLFxuICAgICAgICB0aGlzLnNob3VsZERlYnVnVGV4dHVyZUF0bGFzXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEVudHJ5IHBvaW50IGZvciBtYXBwaW5nIHBhcnRpY2xlIHByb3BlcnRpZXMgdG8gYnVmZmVyIGdlb21ldHJ5IHBvaW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgcHJvcGVydGllcyB0byBtYXBcbiAgICogQHJldHVybiB7R1BVUmVuZGVyZXJ9XG4gICAqL1xuICBtYXBQYXJ0aWNsZVRhcmdldFByb3BzVG9Qb2ludChwYXJ0aWNsZSkge1xuICAgIHRoaXMudXBkYXRlUG9pbnRQb3NpdGlvbihwYXJ0aWNsZSlcbiAgICAgIC51cGRhdGVQb2ludFNpemUocGFydGljbGUpXG4gICAgICAudXBkYXRlUG9pbnRSb3RhdGlvbihwYXJ0aWNsZSlcbiAgICAgIC51cGRhdGVQb2ludENvbG9yKHBhcnRpY2xlKVxuICAgICAgLnVwZGF0ZVBvaW50QWxwaGEocGFydGljbGUpXG4gICAgICAudXBkYXRlUG9pbnRUZXh0dXJlSW5kZXgocGFydGljbGUpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQncyBwb3NpdGlvbiBhY2NvcmRpbmcgdG8gdGhlIHBhcnRpY2xlJ3MgdGFyZ2V0IHBvc2l0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpY2xlfSBwYXJ0aWNsZSAtIFRoZSBwYXJ0aWNsZSBjb250YWluaW5nIHRoZSB0YXJnZXQgcG9zaXRpb24uXG4gICAqIEByZXR1cm4ge0dQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRQb3NpdGlvbihwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdwb3NpdGlvbic7XG4gICAgY29uc3QgeyBnZW9tZXRyeSwgc3RyaWRlLCBidWZmZXIgfSA9IHRoaXM7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG5cbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMF0gPSB0YXJnZXQucG9zaXRpb24ueDtcbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMV0gPSB0YXJnZXQucG9zaXRpb24ueTtcbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMl0gPSB0YXJnZXQucG9zaXRpb24uejtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvaW50J3Mgc2l6ZSByZWxhdGl2ZSB0byB0aGUgcGFydGljbGUncyB0YXJnZXQgc2NhbGUgYW5kIHJhZGl1cy5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IHNjYWxlLlxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50U2l6ZShwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdzaXplJztcbiAgICBjb25zdCB7IGdlb21ldHJ5LCBzdHJpZGUsIGJ1ZmZlciB9ID0gdGhpcztcbiAgICBjb25zdCB7IHRhcmdldCB9ID0gcGFydGljbGU7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IGdlb21ldHJ5LmF0dHJpYnV0ZXNbYXR0cmlidXRlXTtcblxuICAgIGJ1ZmZlci5hcnJheVt0YXJnZXQuaW5kZXggKiBzdHJpZGUgKyBvZmZzZXQgKyAwXSA9IHRhcmdldC5zaXplO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQncyByb3RhdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IHJvdGF0aW9uLlxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50Um90YXRpb24ocGFydGljbGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSAncm90YXRpb24nO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuXG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDBdID0gdGFyZ2V0LnJvdGF0aW9uLno7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBwb2ludCdzIGNvbG9yIGF0dHJpYnV0ZSBhY2NvcmRpbmcgd2l0aCB0aGUgcGFydGljbGUncyB0YXJnZXQgY29sb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7UGFydGljbGV9IHBhcnRpY2xlIC0gVGhlIHBhcnRpY2xlIGNvbnRhaW5pbmcgdGhlIHRhcmdldCBjb2xvciBhbmQgYWxwaGEuXG4gICAqIEByZXR1cm4ge0dQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRDb2xvcihwYXJ0aWNsZSkge1xuICAgIGNvbnN0IGF0dHJpYnV0ZSA9ICdjb2xvcic7XG4gICAgY29uc3QgeyBnZW9tZXRyeSwgc3RyaWRlLCBidWZmZXIgfSA9IHRoaXM7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IHBhcnRpY2xlO1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSBnZW9tZXRyeS5hdHRyaWJ1dGVzW2F0dHJpYnV0ZV07XG5cbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMF0gPSB0YXJnZXQuY29sb3IucjtcbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMV0gPSB0YXJnZXQuY29sb3IuZztcbiAgICBidWZmZXIuYXJyYXlbdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMl0gPSB0YXJnZXQuY29sb3IuYjtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHBvaW50IGFscGhhIGF0dHJpYnV0ZSB3aXRoIHRoZSBwYXJ0aWNsZSdzIHRhcmdldCBhbHBoYS5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IGFscGhhLlxuICAgKiBAcmV0dXJuIHtHUFVSZW5kZXJlcn1cbiAgICovXG4gIHVwZGF0ZVBvaW50QWxwaGEocGFydGljbGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSAnYWxwaGEnO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuXG4gICAgYnVmZmVyLmFycmF5W3RhcmdldC5pbmRleCAqIHN0cmlkZSArIG9mZnNldCArIDBdID0gdGFyZ2V0LmFscGhhO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcG9pbnQgdGV4dHVyZSBhdHRyaWJ1dGUgd2l0aCB0aGUgcGFydGljbGUncyB0YXJnZXQgdGV4dHVyZS5cbiAgICpcbiAgICogQHBhcmFtIHtQYXJ0aWNsZX0gcGFydGljbGUgLSBUaGUgcGFydGljbGUgY29udGFpbmluZyB0aGUgdGFyZ2V0IHRleHR1cmUuXG4gICAqIEByZXR1cm4ge0dQVVJlbmRlcmVyfVxuICAgKi9cbiAgdXBkYXRlUG9pbnRUZXh0dXJlSW5kZXgocGFydGljbGUpIHtcbiAgICBjb25zdCBhdHRyaWJ1dGUgPSAndGV4SUQnO1xuICAgIGNvbnN0IHsgZ2VvbWV0cnksIHN0cmlkZSwgYnVmZmVyIH0gPSB0aGlzO1xuICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBwYXJ0aWNsZTtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gZ2VvbWV0cnkuYXR0cmlidXRlc1thdHRyaWJ1dGVdO1xuICAgIGNvbnN0IGlkID0gdGFyZ2V0LmluZGV4ICogc3RyaWRlICsgb2Zmc2V0ICsgMDtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIGlmIChmYWxzZSkge1xuICAgICAgYnVmZmVyLmFycmF5W2lkXSA9IHRhcmdldC50ZXh0dXJlSW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0aSA9IHRhcmdldC50ZXh0dXJlSW5kZXggKiA0O1xuICAgICAgY29uc3QgdGEgPSB0aGlzLnRleHR1cmVBdGxhcztcbiAgICAgIGNvbnN0IGlkYSA9IHRhLmluZGV4RGF0YTtcbiAgICAgIGNvbnN0IG54ID0gaWRhW3RpKytdO1xuICAgICAgY29uc3QgbnkgPSBpZGFbdGkrK107XG4gICAgICBjb25zdCBweCA9IGlkYVt0aSsrXTtcbiAgICAgIGNvbnN0IHB5ID0gaWRhW3RpKytdO1xuXG4gICAgICBidWZmZXIuYXJyYXlbaWRdID0gKChueCAqIHRhLmF0bGFzVGV4dHVyZS5pbWFnZS53aWR0aCkgfCAwKSArIHB4O1xuICAgICAgYnVmZmVyLmFycmF5W2lkICsgMV0gPSAoKG55ICogdGEuYXRsYXNUZXh0dXJlLmltYWdlLmhlaWdodCkgfCAwKSArIHB5O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0VGV4dHVyZUlEKHRleHR1cmUsIGRlYnVnKSB7XG4gICAgaWYgKHRleHR1cmUudGV4dHVyZUluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghdGhpcy50ZXh0dXJlQXRsYXMpIHtcbiAgICAgICAgdGhpcy50ZXh0dXJlQXRsYXMgPSBuZXcgVGV4dHVyZUF0bGFzKHRoaXMsIGRlYnVnKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50ZXh0dXJlQXRsYXMuYWRkVGV4dHVyZSh0ZXh0dXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGV4dHVyZS50ZXh0dXJlSW5kZXg7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIGNvbnN0IHsgY29udGFpbmVyLCBwb2ludHMsIHRleHR1cmVBdGxhcywgdW5pcXVlTGlzdCB9ID0gdGhpcztcblxuICAgIGNvbnRhaW5lci5yZW1vdmUocG9pbnRzKTtcbiAgICB1bmlxdWVMaXN0LmRlc3Ryb3koKTtcbiAgICB0ZXh0dXJlQXRsYXMgJiYgdGV4dHVyZUF0bGFzLmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.fragmentShader = void 0;
7
7
 
8
8
  var fragmentShader = function fragmentShader() {
9
- return "\n uniform vec3 baseColor;\n uniform sampler2D uTexture;\n\n varying vec3 targetColor;\n varying float targetAlpha;\n varying vec4 tileRect;\n\n void main() {\n gl_FragColor = vec4(baseColor * targetColor, targetAlpha);\n\n vec2 uv = gl_PointCoord;\n uv = mix(tileRect.xy, tileRect.zw, gl_PointCoord);\n\n gl_FragColor = gl_FragColor * texture2D(uTexture, uv);\n }\n";
9
+ return "\n uniform vec3 baseColor;\n uniform sampler2D uTexture;\n\n varying float vRotation;\n varying vec3 targetColor;\n varying float targetAlpha;\n varying vec4 tileRect;\n\n void main() {\n gl_FragColor = vec4(baseColor * targetColor, targetAlpha);\n\n vec2 uv = gl_PointCoord;\n uv = mix(tileRect.xy, tileRect.zw, gl_PointCoord);\n\n float mid = 0.5;\n uv = vec2(\n cos(vRotation) * (uv.x - mid) - sin(vRotation) * (uv.y - mid) + mid,\n cos(vRotation) * (uv.y - mid) + sin(vRotation) * (uv.x - mid) + mid\n );\n \n gl_FragColor = gl_FragColor * texture2D(uTexture, uv);\n }\n";
10
10
  };
11
11
 
12
12
  exports.fragmentShader = fragmentShader;
13
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy9mcmFnbWVudFNoYWRlci5qcyJdLCJuYW1lcyI6WyJmcmFnbWVudFNoYWRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFPLElBQU1BLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsR0FBTTtBQUNsQztBQWlCRCxDQWxCTSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBmcmFnbWVudFNoYWRlciA9ICgpID0+IHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIHZlYzMgYmFzZUNvbG9yO1xuICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlO1xuXG4gICAgdmFyeWluZyB2ZWMzIHRhcmdldENvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdGFyZ2V0QWxwaGE7XG4gICAgdmFyeWluZyB2ZWM0IHRpbGVSZWN0O1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IgKiB0YXJnZXRDb2xvciwgdGFyZ2V0QWxwaGEpO1xuXG4gICAgICB2ZWMyIHV2ID0gZ2xfUG9pbnRDb29yZDtcbiAgICAgIHV2ID0gbWl4KHRpbGVSZWN0Lnh5LCB0aWxlUmVjdC56dywgZ2xfUG9pbnRDb29yZCk7XG5cbiAgICAgIGdsX0ZyYWdDb2xvciA9IGdsX0ZyYWdDb2xvciAqIHRleHR1cmUyRCh1VGV4dHVyZSwgdXYpO1xuICAgIH1cbmA7XG59O1xuIl19
13
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy9mcmFnbWVudFNoYWRlci5qcyJdLCJuYW1lcyI6WyJmcmFnbWVudFNoYWRlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFPLElBQU1BLGNBQWMsR0FBRyxTQUFqQkEsY0FBaUIsR0FBTTtBQUNsQztBQXdCRCxDQXpCTSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBmcmFnbWVudFNoYWRlciA9ICgpID0+IHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIHZlYzMgYmFzZUNvbG9yO1xuICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlO1xuXG4gICAgdmFyeWluZyBmbG9hdCB2Um90YXRpb247XG4gICAgdmFyeWluZyB2ZWMzIHRhcmdldENvbG9yO1xuICAgIHZhcnlpbmcgZmxvYXQgdGFyZ2V0QWxwaGE7XG4gICAgdmFyeWluZyB2ZWM0IHRpbGVSZWN0O1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChiYXNlQ29sb3IgKiB0YXJnZXRDb2xvciwgdGFyZ2V0QWxwaGEpO1xuXG4gICAgICB2ZWMyIHV2ID0gZ2xfUG9pbnRDb29yZDtcbiAgICAgIHV2ID0gbWl4KHRpbGVSZWN0Lnh5LCB0aWxlUmVjdC56dywgZ2xfUG9pbnRDb29yZCk7XG5cbiAgICAgIGZsb2F0IG1pZCA9IDAuNTtcbiAgICAgIHV2ID0gdmVjMihcbiAgICAgICAgY29zKHZSb3RhdGlvbikgKiAodXYueCAtIG1pZCkgLSBzaW4odlJvdGF0aW9uKSAqICh1di55IC0gbWlkKSArIG1pZCxcbiAgICAgICAgY29zKHZSb3RhdGlvbikgKiAodXYueSAtIG1pZCkgKyBzaW4odlJvdGF0aW9uKSAqICh1di54IC0gbWlkKSArIG1pZFxuICAgICAgKTtcbiAgICAgIFxuICAgICAgZ2xfRnJhZ0NvbG9yID0gZ2xfRnJhZ0NvbG9yICogdGV4dHVyZTJEKHVUZXh0dXJlLCB1dik7XG4gICAgfVxuYDtcbn07XG4iXX0=
@@ -8,8 +8,8 @@ exports.vertexShader = void 0;
8
8
  var _constants = require("../../common/shaders/constants");
9
9
 
10
10
  var vertexShader = function vertexShader() {
11
- return "\n uniform sampler2D uTexture;\n uniform vec2 atlasDim;\n\n attribute float size;\n attribute vec3 color;\n attribute float alpha;\n attribute vec2 texID;\n\n varying vec3 targetColor;\n varying float targetAlpha;\n varying vec4 tileRect;\n\n void main() {\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n targetColor = color;\n targetAlpha = alpha;\n\n vec2 tmin = floor(texID) / atlasDim;\n vec2 tmax = fract(texID);\n tileRect = vec4(tmin,tmax);\n\n gl_PointSize = ((size * ".concat(_constants.SIZE_ATTENUATION_FACTOR, ") / -mvPosition.z);\n gl_Position = projectionMatrix * mvPosition;\n }\n");
11
+ return "\n uniform sampler2D uTexture;\n uniform vec2 atlasDim;\n\n attribute float size;\n attribute vec3 color;\n attribute float alpha;\n attribute vec2 texID;\n attribute float rotation;\n\n varying float vRotation;\n varying vec3 targetColor;\n varying float targetAlpha;\n varying vec4 tileRect;\n\n void main() {\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n targetColor = color;\n targetAlpha = alpha;\n vRotation = rotation;\n\n vec2 tmin = floor(texID) / atlasDim;\n vec2 tmax = fract(texID);\n tileRect = vec4(tmin,tmax);\n\n gl_PointSize = ((size * ".concat(_constants.SIZE_ATTENUATION_FACTOR, ") / -mvPosition.z);\n gl_Position = projectionMatrix * mvPosition;\n }\n");
12
12
  };
13
13
 
14
14
  exports.vertexShader = vertexShader;
15
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy92ZXJ0ZXhTaGFkZXIuanMiXSwibmFtZXMiOlsidmVydGV4U2hhZGVyIiwiU0laRV9BVFRFTlVBVElPTl9GQUNUT1IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFTyxJQUFNQSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxHQUFNO0FBQ2hDLDZqQkFzQjhCQyxrQ0F0QjlCO0FBMEJELENBM0JNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0laRV9BVFRFTlVBVElPTl9GQUNUT1IgfSBmcm9tICcuLi8uLi9jb21tb24vc2hhZGVycy9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgdmVydGV4U2hhZGVyID0gKCkgPT4ge1xuICByZXR1cm4gYFxuICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlO1xuICAgIHVuaWZvcm0gdmVjMiBhdGxhc0RpbTtcblxuICAgIGF0dHJpYnV0ZSBmbG9hdCBzaXplO1xuICAgIGF0dHJpYnV0ZSB2ZWMzIGNvbG9yO1xuICAgIGF0dHJpYnV0ZSBmbG9hdCBhbHBoYTtcbiAgICBhdHRyaWJ1dGUgdmVjMiB0ZXhJRDtcblxuICAgIHZhcnlpbmcgdmVjMyB0YXJnZXRDb2xvcjtcbiAgICB2YXJ5aW5nIGZsb2F0IHRhcmdldEFscGhhO1xuICAgIHZhcnlpbmcgdmVjNCB0aWxlUmVjdDtcblxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIHZlYzQgbXZQb3NpdGlvbiA9IG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICB0YXJnZXRDb2xvciA9IGNvbG9yO1xuICAgICAgdGFyZ2V0QWxwaGEgPSBhbHBoYTtcblxuICAgICAgdmVjMiB0bWluID0gZmxvb3IodGV4SUQpIC8gYXRsYXNEaW07XG4gICAgICB2ZWMyIHRtYXggPSBmcmFjdCh0ZXhJRCk7XG4gICAgICB0aWxlUmVjdCA9IHZlYzQodG1pbix0bWF4KTtcblxuICAgICAgZ2xfUG9pbnRTaXplID0gKChzaXplICogJHtTSVpFX0FUVEVOVUFUSU9OX0ZBQ1RPUn0pIC8gLW12UG9zaXRpb24ueik7XG4gICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuICAgIH1cbmA7XG59O1xuIl19
15
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9Nb2JpbGUvc2hhZGVycy92ZXJ0ZXhTaGFkZXIuanMiXSwibmFtZXMiOlsidmVydGV4U2hhZGVyIiwiU0laRV9BVFRFTlVBVElPTl9GQUNUT1IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFTyxJQUFNQSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxHQUFNO0FBQ2hDLHVwQkF5QjhCQyxrQ0F6QjlCO0FBNkJELENBOUJNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0laRV9BVFRFTlVBVElPTl9GQUNUT1IgfSBmcm9tICcuLi8uLi9jb21tb24vc2hhZGVycy9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3QgdmVydGV4U2hhZGVyID0gKCkgPT4ge1xuICByZXR1cm4gYFxuICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVUZXh0dXJlO1xuICAgIHVuaWZvcm0gdmVjMiBhdGxhc0RpbTtcblxuICAgIGF0dHJpYnV0ZSBmbG9hdCBzaXplO1xuICAgIGF0dHJpYnV0ZSB2ZWMzIGNvbG9yO1xuICAgIGF0dHJpYnV0ZSBmbG9hdCBhbHBoYTtcbiAgICBhdHRyaWJ1dGUgdmVjMiB0ZXhJRDtcbiAgICBhdHRyaWJ1dGUgZmxvYXQgcm90YXRpb247XG5cbiAgICB2YXJ5aW5nIGZsb2F0IHZSb3RhdGlvbjtcbiAgICB2YXJ5aW5nIHZlYzMgdGFyZ2V0Q29sb3I7XG4gICAgdmFyeWluZyBmbG9hdCB0YXJnZXRBbHBoYTtcbiAgICB2YXJ5aW5nIHZlYzQgdGlsZVJlY3Q7XG5cbiAgICB2b2lkIG1haW4oKSB7XG4gICAgICB2ZWM0IG12UG9zaXRpb24gPSBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgICAgdGFyZ2V0Q29sb3IgPSBjb2xvcjtcbiAgICAgIHRhcmdldEFscGhhID0gYWxwaGE7XG4gICAgICB2Um90YXRpb24gPSByb3RhdGlvbjtcblxuICAgICAgdmVjMiB0bWluID0gZmxvb3IodGV4SUQpIC8gYXRsYXNEaW07XG4gICAgICB2ZWMyIHRtYXggPSBmcmFjdCh0ZXhJRCk7XG4gICAgICB0aWxlUmVjdCA9IHZlYzQodG1pbix0bWF4KTtcblxuICAgICAgZ2xfUG9pbnRTaXplID0gKChzaXplICogJHtTSVpFX0FUVEVOVUFUSU9OX0ZBQ1RPUn0pIC8gLW12UG9zaXRpb24ueik7XG4gICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuICAgIH1cbmA7XG59O1xuIl19
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.PARTICLE_STRIDE = exports.ATTRIBUTE_TO_SIZE_MAP = exports.TEXID_ATTRIBUTE_BUFFER_SIZE = exports.ALPHA_ATTRIBUTE_BUFFER_SIZE = exports.RGBA_ATTRIBUTE_BUFFER_SIZE = exports.SIZE_ATTRIBUTE_BUFFER_SIZE = exports.POSITION_ATTRIBUTE_BUFFER_SIZE = exports.PARTICLE_BYTE_SIZE = exports.ALL_BYTE_SIZES = exports.RGBA_BYTE_SIZE = exports.SIZE_BYTE_SIZE = exports.POSITION_BYTE_SIZE = exports.FLOAT_BYTE_SIZE = exports.RGBA_SIZE = exports.VECTOR_3_SIZE = exports.DEFAULT_MAX_PARTICLES = void 0;
6
+ exports.PARTICLE_STRIDE = exports.ATTRIBUTE_TO_SIZE_MAP = exports.TEXID_ATTRIBUTE_BUFFER_SIZE = exports.ALPHA_ATTRIBUTE_BUFFER_SIZE = exports.RGBA_ATTRIBUTE_BUFFER_SIZE = exports.SIZE_ATTRIBUTE_BUFFER_SIZE = exports.ROTATION_ATTRIBUTE_BUFFER_SIZE = exports.POSITION_ATTRIBUTE_BUFFER_SIZE = exports.PARTICLE_BYTE_SIZE = exports.ALL_BYTE_SIZES = exports.RGBA_BYTE_SIZE = exports.SIZE_BYTE_SIZE = exports.ROTATION_BYTE_SIZE = exports.POSITION_BYTE_SIZE = exports.FLOAT_BYTE_SIZE = exports.RGBA_SIZE = exports.VECTOR_3_SIZE = exports.DEFAULT_MAX_PARTICLES = void 0;
7
7
  // Primitives
8
8
  var DEFAULT_MAX_PARTICLES = 10000;
9
9
  exports.DEFAULT_MAX_PARTICLES = DEFAULT_MAX_PARTICLES;
@@ -16,11 +16,13 @@ var FLOAT_BYTE_SIZE = 4; // Byte sizes
16
16
  exports.FLOAT_BYTE_SIZE = FLOAT_BYTE_SIZE;
17
17
  var POSITION_BYTE_SIZE = VECTOR_3_SIZE * FLOAT_BYTE_SIZE;
18
18
  exports.POSITION_BYTE_SIZE = POSITION_BYTE_SIZE;
19
+ var ROTATION_BYTE_SIZE = FLOAT_BYTE_SIZE;
20
+ exports.ROTATION_BYTE_SIZE = ROTATION_BYTE_SIZE;
19
21
  var SIZE_BYTE_SIZE = FLOAT_BYTE_SIZE;
20
22
  exports.SIZE_BYTE_SIZE = SIZE_BYTE_SIZE;
21
23
  var RGBA_BYTE_SIZE = RGBA_SIZE * FLOAT_BYTE_SIZE;
22
24
  exports.RGBA_BYTE_SIZE = RGBA_BYTE_SIZE;
23
- var ALL_BYTE_SIZES = [POSITION_BYTE_SIZE, SIZE_BYTE_SIZE, RGBA_BYTE_SIZE];
25
+ var ALL_BYTE_SIZES = [POSITION_BYTE_SIZE, ROTATION_BYTE_SIZE, SIZE_BYTE_SIZE, RGBA_BYTE_SIZE];
24
26
  exports.ALL_BYTE_SIZES = ALL_BYTE_SIZES;
25
27
  var PARTICLE_BYTE_SIZE = ALL_BYTE_SIZES.reduce(function (cur, acc) {
26
28
  return cur + acc;
@@ -29,6 +31,8 @@ var PARTICLE_BYTE_SIZE = ALL_BYTE_SIZES.reduce(function (cur, acc) {
29
31
  exports.PARTICLE_BYTE_SIZE = PARTICLE_BYTE_SIZE;
30
32
  var POSITION_ATTRIBUTE_BUFFER_SIZE = VECTOR_3_SIZE;
31
33
  exports.POSITION_ATTRIBUTE_BUFFER_SIZE = POSITION_ATTRIBUTE_BUFFER_SIZE;
34
+ var ROTATION_ATTRIBUTE_BUFFER_SIZE = 1;
35
+ exports.ROTATION_ATTRIBUTE_BUFFER_SIZE = ROTATION_ATTRIBUTE_BUFFER_SIZE;
32
36
  var SIZE_ATTRIBUTE_BUFFER_SIZE = 1;
33
37
  exports.SIZE_ATTRIBUTE_BUFFER_SIZE = SIZE_ATTRIBUTE_BUFFER_SIZE;
34
38
  var RGBA_ATTRIBUTE_BUFFER_SIZE = RGBA_SIZE;
@@ -39,6 +43,7 @@ var TEXID_ATTRIBUTE_BUFFER_SIZE = 2;
39
43
  exports.TEXID_ATTRIBUTE_BUFFER_SIZE = TEXID_ATTRIBUTE_BUFFER_SIZE;
40
44
  var ATTRIBUTE_TO_SIZE_MAP = {
41
45
  position: POSITION_ATTRIBUTE_BUFFER_SIZE,
46
+ rotation: ROTATION_ATTRIBUTE_BUFFER_SIZE,
42
47
  size: SIZE_ATTRIBUTE_BUFFER_SIZE,
43
48
  // THREE.Color does not contain alpha, so we will have separate attributes for these
44
49
  color: RGBA_ATTRIBUTE_BUFFER_SIZE,
@@ -46,8 +51,8 @@ var ATTRIBUTE_TO_SIZE_MAP = {
46
51
  texID: TEXID_ATTRIBUTE_BUFFER_SIZE
47
52
  };
48
53
  exports.ATTRIBUTE_TO_SIZE_MAP = ATTRIBUTE_TO_SIZE_MAP;
49
- var PARTICLE_STRIDE = [POSITION_ATTRIBUTE_BUFFER_SIZE, SIZE_ATTRIBUTE_BUFFER_SIZE, RGBA_ATTRIBUTE_BUFFER_SIZE, ALPHA_ATTRIBUTE_BUFFER_SIZE, TEXID_ATTRIBUTE_BUFFER_SIZE].reduce(function (cur, acc) {
54
+ var PARTICLE_STRIDE = [POSITION_ATTRIBUTE_BUFFER_SIZE, ROTATION_ATTRIBUTE_BUFFER_SIZE, SIZE_ATTRIBUTE_BUFFER_SIZE, RGBA_ATTRIBUTE_BUFFER_SIZE, ALPHA_ATTRIBUTE_BUFFER_SIZE, TEXID_ATTRIBUTE_BUFFER_SIZE].reduce(function (cur, acc) {
50
55
  return cur + acc;
51
56
  });
52
57
  exports.PARTICLE_STRIDE = PARTICLE_STRIDE;
53
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vUGFydGljbGVCdWZmZXIvY29uc3RhbnRzLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfTUFYX1BBUlRJQ0xFUyIsIlZFQ1RPUl8zX1NJWkUiLCJsZW5ndGgiLCJSR0JBX1NJWkUiLCJGTE9BVF9CWVRFX1NJWkUiLCJQT1NJVElPTl9CWVRFX1NJWkUiLCJTSVpFX0JZVEVfU0laRSIsIlJHQkFfQllURV9TSVpFIiwiQUxMX0JZVEVfU0laRVMiLCJQQVJUSUNMRV9CWVRFX1NJWkUiLCJyZWR1Y2UiLCJjdXIiLCJhY2MiLCJQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUiLCJTSVpFX0FUVFJJQlVURV9CVUZGRVJfU0laRSIsIlJHQkFfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiQVRUUklCVVRFX1RPX1NJWkVfTUFQIiwicG9zaXRpb24iLCJzaXplIiwiY29sb3IiLCJhbHBoYSIsInRleElEIiwiUEFSVElDTEVfU1RSSURFIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNPLElBQU1BLHFCQUFxQixHQUFHLEtBQTlCOztBQUNBLElBQU1DLGFBQWEsR0FBRyxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVcsR0FBWCxFQUFnQkMsTUFBdEM7O0FBQ0EsSUFBTUMsU0FBUyxHQUFHLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCLEdBQWhCLEVBQXFCRCxNQUF2Qzs7QUFDQSxJQUFNRSxlQUFlLEdBQUcsQ0FBeEIsQyxDQUVQOzs7QUFDTyxJQUFNQyxrQkFBa0IsR0FBR0osYUFBYSxHQUFHRyxlQUEzQzs7QUFDQSxJQUFNRSxjQUFjLEdBQUdGLGVBQXZCOztBQUNBLElBQU1HLGNBQWMsR0FBR0osU0FBUyxHQUFHQyxlQUFuQzs7QUFDQSxJQUFNSSxjQUFjLEdBQUcsQ0FDNUJILGtCQUQ0QixFQUU1QkMsY0FGNEIsRUFHNUJDLGNBSDRCLENBQXZCOztBQUtBLElBQU1FLGtCQUFrQixHQUFHRCxjQUFjLENBQUNFLE1BQWYsQ0FDaEMsVUFBQ0MsR0FBRCxFQUFNQyxHQUFOO0FBQUEsU0FBY0QsR0FBRyxHQUFHQyxHQUFwQjtBQUFBLENBRGdDLENBQTNCLEMsQ0FJUDs7O0FBQ08sSUFBTUMsOEJBQThCLEdBQUdaLGFBQXZDOztBQUNBLElBQU1hLDBCQUEwQixHQUFHLENBQW5DOztBQUNBLElBQU1DLDBCQUEwQixHQUFHWixTQUFuQzs7QUFDQSxJQUFNYSwyQkFBMkIsR0FBRyxDQUFwQzs7QUFDQSxJQUFNQywyQkFBMkIsR0FBRyxDQUFwQzs7QUFFQSxJQUFNQyxxQkFBcUIsR0FBRztBQUNuQ0MsRUFBQUEsUUFBUSxFQUFFTiw4QkFEeUI7QUFFbkNPLEVBQUFBLElBQUksRUFBRU4sMEJBRjZCO0FBR25DO0FBQ0FPLEVBQUFBLEtBQUssRUFBRU4sMEJBSjRCO0FBS25DTyxFQUFBQSxLQUFLLEVBQUVOLDJCQUw0QjtBQU1uQ08sRUFBQUEsS0FBSyxFQUFFTjtBQU40QixDQUE5Qjs7QUFTQSxJQUFNTyxlQUFlLEdBQUcsQ0FDN0JYLDhCQUQ2QixFQUU3QkMsMEJBRjZCLEVBRzdCQywwQkFINkIsRUFJN0JDLDJCQUo2QixFQUs3QkMsMkJBTDZCLEVBTTdCUCxNQU42QixDQU10QixVQUFDQyxHQUFELEVBQU1DLEdBQU47QUFBQSxTQUFjRCxHQUFHLEdBQUdDLEdBQXBCO0FBQUEsQ0FOc0IsQ0FBeEIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBQcmltaXRpdmVzXG5leHBvcnQgY29uc3QgREVGQVVMVF9NQVhfUEFSVElDTEVTID0gMTAwMDA7XG5leHBvcnQgY29uc3QgVkVDVE9SXzNfU0laRSA9IFsneCcsICd5JywgJ3onXS5sZW5ndGg7XG5leHBvcnQgY29uc3QgUkdCQV9TSVpFID0gWydyJywgJ2cnLCAnYicsICdhJ10ubGVuZ3RoO1xuZXhwb3J0IGNvbnN0IEZMT0FUX0JZVEVfU0laRSA9IDQ7XG5cbi8vIEJ5dGUgc2l6ZXNcbmV4cG9ydCBjb25zdCBQT1NJVElPTl9CWVRFX1NJWkUgPSBWRUNUT1JfM19TSVpFICogRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IFNJWkVfQllURV9TSVpFID0gRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IFJHQkFfQllURV9TSVpFID0gUkdCQV9TSVpFICogRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IEFMTF9CWVRFX1NJWkVTID0gW1xuICBQT1NJVElPTl9CWVRFX1NJWkUsXG4gIFNJWkVfQllURV9TSVpFLFxuICBSR0JBX0JZVEVfU0laRSxcbl07XG5leHBvcnQgY29uc3QgUEFSVElDTEVfQllURV9TSVpFID0gQUxMX0JZVEVfU0laRVMucmVkdWNlKFxuICAoY3VyLCBhY2MpID0+IGN1ciArIGFjY1xuKTtcblxuLy8gQXR0cmlidXRlc1xuZXhwb3J0IGNvbnN0IFBPU0lUSU9OX0FUVFJJQlVURV9CVUZGRVJfU0laRSA9IFZFQ1RPUl8zX1NJWkU7XG5leHBvcnQgY29uc3QgU0laRV9BVFRSSUJVVEVfQlVGRkVSX1NJWkUgPSAxO1xuZXhwb3J0IGNvbnN0IFJHQkFfQVRUUklCVVRFX0JVRkZFUl9TSVpFID0gUkdCQV9TSVpFO1xuZXhwb3J0IGNvbnN0IEFMUEhBX0FUVFJJQlVURV9CVUZGRVJfU0laRSA9IDE7XG5leHBvcnQgY29uc3QgVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFID0gMjtcblxuZXhwb3J0IGNvbnN0IEFUVFJJQlVURV9UT19TSVpFX01BUCA9IHtcbiAgcG9zaXRpb246IFBPU0lUSU9OX0FUVFJJQlVURV9CVUZGRVJfU0laRSxcbiAgc2l6ZTogU0laRV9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIC8vIFRIUkVFLkNvbG9yIGRvZXMgbm90IGNvbnRhaW4gYWxwaGEsIHNvIHdlIHdpbGwgaGF2ZSBzZXBhcmF0ZSBhdHRyaWJ1dGVzIGZvciB0aGVzZVxuICBjb2xvcjogUkdCQV9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIGFscGhhOiBBTFBIQV9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIHRleElEOiBURVhJRF9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG59O1xuXG5leHBvcnQgY29uc3QgUEFSVElDTEVfU1RSSURFID0gW1xuICBQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBSR0JBX0FUVFJJQlVURV9CVUZGRVJfU0laRSxcbiAgQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBURVhJRF9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG5dLnJlZHVjZSgoY3VyLCBhY2MpID0+IGN1ciArIGFjYyk7XG4iXX0=
58
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vUGFydGljbGVCdWZmZXIvY29uc3RhbnRzLmpzIl0sIm5hbWVzIjpbIkRFRkFVTFRfTUFYX1BBUlRJQ0xFUyIsIlZFQ1RPUl8zX1NJWkUiLCJsZW5ndGgiLCJSR0JBX1NJWkUiLCJGTE9BVF9CWVRFX1NJWkUiLCJQT1NJVElPTl9CWVRFX1NJWkUiLCJST1RBVElPTl9CWVRFX1NJWkUiLCJTSVpFX0JZVEVfU0laRSIsIlJHQkFfQllURV9TSVpFIiwiQUxMX0JZVEVfU0laRVMiLCJQQVJUSUNMRV9CWVRFX1NJWkUiLCJyZWR1Y2UiLCJjdXIiLCJhY2MiLCJQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUiLCJST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUiLCJTSVpFX0FUVFJJQlVURV9CVUZGRVJfU0laRSIsIlJHQkFfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFIiwiQVRUUklCVVRFX1RPX1NJWkVfTUFQIiwicG9zaXRpb24iLCJyb3RhdGlvbiIsInNpemUiLCJjb2xvciIsImFscGhhIiwidGV4SUQiLCJQQVJUSUNMRV9TVFJJREUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ08sSUFBTUEscUJBQXFCLEdBQUcsS0FBOUI7O0FBQ0EsSUFBTUMsYUFBYSxHQUFHLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBVyxHQUFYLEVBQWdCQyxNQUF0Qzs7QUFDQSxJQUFNQyxTQUFTLEdBQUcsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXLEdBQVgsRUFBZ0IsR0FBaEIsRUFBcUJELE1BQXZDOztBQUNBLElBQU1FLGVBQWUsR0FBRyxDQUF4QixDLENBRVA7OztBQUNPLElBQU1DLGtCQUFrQixHQUFHSixhQUFhLEdBQUdHLGVBQTNDOztBQUNBLElBQU1FLGtCQUFrQixHQUFHRixlQUEzQjs7QUFDQSxJQUFNRyxjQUFjLEdBQUdILGVBQXZCOztBQUNBLElBQU1JLGNBQWMsR0FBR0wsU0FBUyxHQUFHQyxlQUFuQzs7QUFDQSxJQUFNSyxjQUFjLEdBQUcsQ0FDNUJKLGtCQUQ0QixFQUU1QkMsa0JBRjRCLEVBRzVCQyxjQUg0QixFQUk1QkMsY0FKNEIsQ0FBdkI7O0FBTUEsSUFBTUUsa0JBQWtCLEdBQUdELGNBQWMsQ0FBQ0UsTUFBZixDQUNoQyxVQUFDQyxHQUFELEVBQU1DLEdBQU47QUFBQSxTQUFjRCxHQUFHLEdBQUdDLEdBQXBCO0FBQUEsQ0FEZ0MsQ0FBM0IsQyxDQUlQOzs7QUFDTyxJQUFNQyw4QkFBOEIsR0FBR2IsYUFBdkM7O0FBQ0EsSUFBTWMsOEJBQThCLEdBQUcsQ0FBdkM7O0FBQ0EsSUFBTUMsMEJBQTBCLEdBQUcsQ0FBbkM7O0FBQ0EsSUFBTUMsMEJBQTBCLEdBQUdkLFNBQW5DOztBQUNBLElBQU1lLDJCQUEyQixHQUFHLENBQXBDOztBQUNBLElBQU1DLDJCQUEyQixHQUFHLENBQXBDOztBQUVBLElBQU1DLHFCQUFxQixHQUFHO0FBQ25DQyxFQUFBQSxRQUFRLEVBQUVQLDhCQUR5QjtBQUVuQ1EsRUFBQUEsUUFBUSxFQUFFUCw4QkFGeUI7QUFHbkNRLEVBQUFBLElBQUksRUFBRVAsMEJBSDZCO0FBSW5DO0FBQ0FRLEVBQUFBLEtBQUssRUFBRVAsMEJBTDRCO0FBTW5DUSxFQUFBQSxLQUFLLEVBQUVQLDJCQU40QjtBQU9uQ1EsRUFBQUEsS0FBSyxFQUFFUDtBQVA0QixDQUE5Qjs7QUFVQSxJQUFNUSxlQUFlLEdBQUcsQ0FDN0JiLDhCQUQ2QixFQUU3QkMsOEJBRjZCLEVBRzdCQywwQkFINkIsRUFJN0JDLDBCQUo2QixFQUs3QkMsMkJBTDZCLEVBTTdCQywyQkFONkIsRUFPN0JSLE1BUDZCLENBT3RCLFVBQUNDLEdBQUQsRUFBTUMsR0FBTjtBQUFBLFNBQWNELEdBQUcsR0FBR0MsR0FBcEI7QUFBQSxDQVBzQixDQUF4QiIsInNvdXJjZXNDb250ZW50IjpbIi8vIFByaW1pdGl2ZXNcbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9QQVJUSUNMRVMgPSAxMDAwMDtcbmV4cG9ydCBjb25zdCBWRUNUT1JfM19TSVpFID0gWyd4JywgJ3knLCAneiddLmxlbmd0aDtcbmV4cG9ydCBjb25zdCBSR0JBX1NJWkUgPSBbJ3InLCAnZycsICdiJywgJ2EnXS5sZW5ndGg7XG5leHBvcnQgY29uc3QgRkxPQVRfQllURV9TSVpFID0gNDtcblxuLy8gQnl0ZSBzaXplc1xuZXhwb3J0IGNvbnN0IFBPU0lUSU9OX0JZVEVfU0laRSA9IFZFQ1RPUl8zX1NJWkUgKiBGTE9BVF9CWVRFX1NJWkU7XG5leHBvcnQgY29uc3QgUk9UQVRJT05fQllURV9TSVpFID0gRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IFNJWkVfQllURV9TSVpFID0gRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IFJHQkFfQllURV9TSVpFID0gUkdCQV9TSVpFICogRkxPQVRfQllURV9TSVpFO1xuZXhwb3J0IGNvbnN0IEFMTF9CWVRFX1NJWkVTID0gW1xuICBQT1NJVElPTl9CWVRFX1NJWkUsXG4gIFJPVEFUSU9OX0JZVEVfU0laRSxcbiAgU0laRV9CWVRFX1NJWkUsXG4gIFJHQkFfQllURV9TSVpFLFxuXTtcbmV4cG9ydCBjb25zdCBQQVJUSUNMRV9CWVRFX1NJWkUgPSBBTExfQllURV9TSVpFUy5yZWR1Y2UoXG4gIChjdXIsIGFjYykgPT4gY3VyICsgYWNjXG4pO1xuXG4vLyBBdHRyaWJ1dGVzXG5leHBvcnQgY29uc3QgUE9TSVRJT05fQVRUUklCVVRFX0JVRkZFUl9TSVpFID0gVkVDVE9SXzNfU0laRTtcbmV4cG9ydCBjb25zdCBST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUgPSAxO1xuZXhwb3J0IGNvbnN0IFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFID0gMTtcbmV4cG9ydCBjb25zdCBSR0JBX0FUVFJJQlVURV9CVUZGRVJfU0laRSA9IFJHQkFfU0laRTtcbmV4cG9ydCBjb25zdCBBTFBIQV9BVFRSSUJVVEVfQlVGRkVSX1NJWkUgPSAxO1xuZXhwb3J0IGNvbnN0IFRFWElEX0FUVFJJQlVURV9CVUZGRVJfU0laRSA9IDI7XG5cbmV4cG9ydCBjb25zdCBBVFRSSUJVVEVfVE9fU0laRV9NQVAgPSB7XG4gIHBvc2l0aW9uOiBQT1NJVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIHJvdGF0aW9uOiBST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIHNpemU6IFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICAvLyBUSFJFRS5Db2xvciBkb2VzIG5vdCBjb250YWluIGFscGhhLCBzbyB3ZSB3aWxsIGhhdmUgc2VwYXJhdGUgYXR0cmlidXRlcyBmb3IgdGhlc2VcbiAgY29sb3I6IFJHQkFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBhbHBoYTogQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICB0ZXhJRDogVEVYSURfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxufTtcblxuZXhwb3J0IGNvbnN0IFBBUlRJQ0xFX1NUUklERSA9IFtcbiAgUE9TSVRJT05fQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBST1RBVElPTl9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG4gIFNJWkVfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBSR0JBX0FUVFJJQlVURV9CVUZGRVJfU0laRSxcbiAgQUxQSEFfQVRUUklCVVRFX0JVRkZFUl9TSVpFLFxuICBURVhJRF9BVFRSSUJVVEVfQlVGRkVSX1NJWkUsXG5dLnJlZHVjZSgoY3VyLCBhY2MpID0+IGN1ciArIGFjYyk7XG4iXX0=
@@ -19,6 +19,7 @@ var Target = /*#__PURE__*/function () {
19
19
  function Target(THREE) {
20
20
  (0, _classCallCheck2["default"])(this, Target);
21
21
  this.position = new THREE.Vector3();
22
+ this.rotation = new THREE.Vector3();
22
23
  this.size = 0;
23
24
  this.color = new THREE.Color();
24
25
  this.alpha = 0;
@@ -30,6 +31,7 @@ var Target = /*#__PURE__*/function () {
30
31
  key: "reset",
31
32
  value: function reset() {
32
33
  this.position.set(0, 0, 0);
34
+ this.rotation.set(0, 0, 0);
33
35
  this.size = 0;
34
36
  this.color.setRGB(0, 0, 0);
35
37
  this.alpha = 0;
@@ -40,4 +42,4 @@ var Target = /*#__PURE__*/function () {
40
42
  }();
41
43
 
42
44
  exports.Target = Target;
43
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vc3RvcmVzL1RhcmdldC5qcyJdLCJuYW1lcyI6WyJUYXJnZXQiLCJUSFJFRSIsInBvc2l0aW9uIiwiVmVjdG9yMyIsInNpemUiLCJjb2xvciIsIkNvbG9yIiwiYWxwaGEiLCJ0ZXh0dXJlIiwiaW5kZXgiLCJzZXQiLCJzZXRSR0IiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtJQUNhQSxNO0FBQ1gsa0JBQVlDLEtBQVosRUFBbUI7QUFBQTtBQUNqQixTQUFLQyxRQUFMLEdBQWdCLElBQUlELEtBQUssQ0FBQ0UsT0FBVixFQUFoQjtBQUNBLFNBQUtDLElBQUwsR0FBWSxDQUFaO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLElBQUlKLEtBQUssQ0FBQ0ssS0FBVixFQUFiO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLENBQWI7QUFDQSxTQUFLQyxPQUFMLEdBQWUsSUFBZjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxDQUFiO0FBQ0Q7Ozs7NEJBRU87QUFDTixXQUFLUCxRQUFMLENBQWNRLEdBQWQsQ0FBa0IsQ0FBbEIsRUFBcUIsQ0FBckIsRUFBd0IsQ0FBeEI7QUFDQSxXQUFLTixJQUFMLEdBQVksQ0FBWjtBQUNBLFdBQUtDLEtBQUwsQ0FBV00sTUFBWCxDQUFrQixDQUFsQixFQUFxQixDQUFyQixFQUF3QixDQUF4QjtBQUNBLFdBQUtKLEtBQUwsR0FBYSxDQUFiO0FBQ0EsV0FBS0MsT0FBTCxHQUFlLElBQWY7QUFDRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2ltcGxlIGNsYXNzIHRoYXQgc3RvcmVzIHRoZSBwYXJ0aWNsZSdzIFwidGFyZ2V0XCIgb3IgXCJuZXh0XCIgc3RhdGUuXG4gKlxuICovXG5leHBvcnQgY2xhc3MgVGFyZ2V0IHtcbiAgY29uc3RydWN0b3IoVEhSRUUpIHtcbiAgICB0aGlzLnBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICB0aGlzLnNpemUgPSAwO1xuICAgIHRoaXMuY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoKTtcbiAgICB0aGlzLmFscGhhID0gMDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuICAgIHRoaXMuaW5kZXggPSAwO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XG4gICAgdGhpcy5zaXplID0gMDtcbiAgICB0aGlzLmNvbG9yLnNldFJHQigwLCAwLCAwKTtcbiAgICB0aGlzLmFscGhhID0gMDtcbiAgICB0aGlzLnRleHR1cmUgPSBudWxsO1xuICB9XG59XG4iXX0=
45
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9yZW5kZXJlci9HUFVSZW5kZXJlci9jb21tb24vc3RvcmVzL1RhcmdldC5qcyJdLCJuYW1lcyI6WyJUYXJnZXQiLCJUSFJFRSIsInBvc2l0aW9uIiwiVmVjdG9yMyIsInJvdGF0aW9uIiwic2l6ZSIsImNvbG9yIiwiQ29sb3IiLCJhbHBoYSIsInRleHR1cmUiLCJpbmRleCIsInNldCIsInNldFJHQiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0lBQ2FBLE07QUFDWCxrQkFBWUMsS0FBWixFQUFtQjtBQUFBO0FBQ2pCLFNBQUtDLFFBQUwsR0FBZ0IsSUFBSUQsS0FBSyxDQUFDRSxPQUFWLEVBQWhCO0FBQ0EsU0FBS0MsUUFBTCxHQUFnQixJQUFJSCxLQUFLLENBQUNFLE9BQVYsRUFBaEI7QUFDQSxTQUFLRSxJQUFMLEdBQVksQ0FBWjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxJQUFJTCxLQUFLLENBQUNNLEtBQVYsRUFBYjtBQUNBLFNBQUtDLEtBQUwsR0FBYSxDQUFiO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLElBQWY7QUFDQSxTQUFLQyxLQUFMLEdBQWEsQ0FBYjtBQUNEOzs7OzRCQUVPO0FBQ04sV0FBS1IsUUFBTCxDQUFjUyxHQUFkLENBQWtCLENBQWxCLEVBQXFCLENBQXJCLEVBQXdCLENBQXhCO0FBQ0EsV0FBS1AsUUFBTCxDQUFjTyxHQUFkLENBQWtCLENBQWxCLEVBQXFCLENBQXJCLEVBQXdCLENBQXhCO0FBQ0EsV0FBS04sSUFBTCxHQUFZLENBQVo7QUFDQSxXQUFLQyxLQUFMLENBQVdNLE1BQVgsQ0FBa0IsQ0FBbEIsRUFBcUIsQ0FBckIsRUFBd0IsQ0FBeEI7QUFDQSxXQUFLSixLQUFMLEdBQWEsQ0FBYjtBQUNBLFdBQUtDLE9BQUwsR0FBZSxJQUFmO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNpbXBsZSBjbGFzcyB0aGF0IHN0b3JlcyB0aGUgcGFydGljbGUncyBcInRhcmdldFwiIG9yIFwibmV4dFwiIHN0YXRlLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIFRhcmdldCB7XG4gIGNvbnN0cnVjdG9yKFRIUkVFKSB7XG4gICAgdGhpcy5wb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgdGhpcy5yb3RhdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgdGhpcy5zaXplID0gMDtcbiAgICB0aGlzLmNvbG9yID0gbmV3IFRIUkVFLkNvbG9yKCk7XG4gICAgdGhpcy5hbHBoYSA9IDA7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbiAgICB0aGlzLmluZGV4ID0gMDtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMucG9zaXRpb24uc2V0KDAsIDAsIDApO1xuICAgIHRoaXMucm90YXRpb24uc2V0KDAsIDAsIDApO1xuICAgIHRoaXMuc2l6ZSA9IDA7XG4gICAgdGhpcy5jb2xvci5zZXRSR0IoMCwgMCwgMCk7XG4gICAgdGhpcy5hbHBoYSA9IDA7XG4gICAgdGhpcy50ZXh0dXJlID0gbnVsbDtcbiAgfVxufVxuIl19