matrix-react-sdk
Version:
SDK for matrix.org using React
123 lines (120 loc) • 21 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.DefaultOptions = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
/*
Copyright 2024 New Vector Ltd.
Copyright 2023 The Matrix.org Foundation C.I.C.
Copyright 2020 Nurjin Jafar
Copyright 2020 Nordeck IT + Consulting GmbH.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
const DefaultOptions = exports.DefaultOptions = {
maxCount: 500,
gravity: 0.05
};
class Fireworks {
constructor(options) {
(0, _defineProperty2.default)(this, "options", void 0);
(0, _defineProperty2.default)(this, "context", null);
(0, _defineProperty2.default)(this, "supportsAnimationFrame", window.requestAnimationFrame);
(0, _defineProperty2.default)(this, "particles", []);
(0, _defineProperty2.default)(this, "isRunning", false);
(0, _defineProperty2.default)(this, "start", async (canvas, timeout = 3000) => {
if (!canvas) {
return;
}
this.isRunning = true;
this.context = canvas.getContext("2d");
this.supportsAnimationFrame.call(window, this.updateWorld);
if (timeout) {
window.setTimeout(this.stop, timeout);
}
});
(0, _defineProperty2.default)(this, "updateWorld", () => {
if (!this.isRunning && this.particles.length === 0) return;
this.update();
this.paint();
this.supportsAnimationFrame.call(window, this.updateWorld);
});
(0, _defineProperty2.default)(this, "update", () => {
if (this.particles.length < this.options.maxCount && this.isRunning) {
this.createFirework();
}
const alive = [];
for (let i = 0; i < this.particles.length; i++) {
if (this.move(this.particles[i])) {
alive.push(this.particles[i]);
}
}
this.particles = alive;
});
(0, _defineProperty2.default)(this, "paint", () => {
if (!this.context || !this.context.canvas) return;
this.context.globalCompositeOperation = "destination-out";
this.context.fillStyle = "rgba(0,0,0,0.5)";
this.context.fillRect(0, 0, this.context.canvas.width, this.context.canvas.height);
this.context.globalCompositeOperation = "lighter";
for (let i = 0; i < this.particles.length; i++) {
this.drawParticle(this.particles[i]);
}
});
(0, _defineProperty2.default)(this, "createFirework", () => {
if (!this.context || !this.context.canvas) return;
const width = this.context.canvas.width;
const height = this.context.canvas.height;
const xPoint = Math.random() * (width - 200) + 100;
const yPoint = Math.random() * (height - 200) + 100;
const nFire = Math.random() * 50 + 100;
const color = "rgb(" + ~~(Math.random() * 200 + 55) + "," + ~~(Math.random() * 200 + 55) + "," + ~~(Math.random() * 200 + 55) + ")";
for (let i = 0; i < nFire; i++) {
const particle = {};
particle.color = color;
particle.w = particle.h = Math.random() * 4 + 1;
particle.x = xPoint - particle.w / 2;
particle.y = yPoint - particle.h / 2;
particle.vx = (Math.random() - 0.5) * 10;
particle.vy = (Math.random() - 0.5) * 10;
particle.alpha = Math.random() * 0.5 + 0.5;
const vy = Math.sqrt(25 - particle.vx * particle.vx);
if (Math.abs(particle.vy) > vy) {
particle.vy = particle.vy > 0 ? vy : -vy;
}
this.particles.push(particle);
}
});
(0, _defineProperty2.default)(this, "stop", async () => {
this.isRunning = false;
});
(0, _defineProperty2.default)(this, "drawParticle", particle => {
if (!this.context || !this.context.canvas) {
return;
}
this.context.save();
this.context.beginPath();
this.context.translate(particle.x + particle.w / 2, particle.y + particle.h / 2);
this.context.arc(0, 0, particle.w, 0, Math.PI * 2);
this.context.fillStyle = particle.color;
this.context.globalAlpha = particle.alpha;
this.context.closePath();
this.context.fill();
this.context.restore();
});
(0, _defineProperty2.default)(this, "move", particle => {
particle.x += particle.vx;
particle.vy += this.options.gravity;
particle.y += particle.vy;
particle.alpha -= 0.01;
return !(particle.x <= -particle.w || particle.x >= screen.width || particle.y >= screen.height || particle.alpha <= 0);
});
this.options = _objectSpread(_objectSpread({}, DefaultOptions), options);
}
}
exports.default = Fireworks;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEZWZhdWx0T3B0aW9ucyIsImV4cG9ydHMiLCJtYXhDb3VudCIsImdyYXZpdHkiLCJGaXJld29ya3MiLCJjb25zdHJ1Y3RvciIsIm9wdGlvbnMiLCJfZGVmaW5lUHJvcGVydHkyIiwiZGVmYXVsdCIsIndpbmRvdyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbnZhcyIsInRpbWVvdXQiLCJpc1J1bm5pbmciLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsInN1cHBvcnRzQW5pbWF0aW9uRnJhbWUiLCJjYWxsIiwidXBkYXRlV29ybGQiLCJzZXRUaW1lb3V0Iiwic3RvcCIsInBhcnRpY2xlcyIsImxlbmd0aCIsInVwZGF0ZSIsInBhaW50IiwiY3JlYXRlRmlyZXdvcmsiLCJhbGl2ZSIsImkiLCJtb3ZlIiwicHVzaCIsImdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiIsImZpbGxTdHlsZSIsImZpbGxSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJkcmF3UGFydGljbGUiLCJ4UG9pbnQiLCJNYXRoIiwicmFuZG9tIiwieVBvaW50IiwibkZpcmUiLCJjb2xvciIsInBhcnRpY2xlIiwidyIsImgiLCJ4IiwieSIsInZ4IiwidnkiLCJhbHBoYSIsInNxcnQiLCJhYnMiLCJzYXZlIiwiYmVnaW5QYXRoIiwidHJhbnNsYXRlIiwiYXJjIiwiUEkiLCJnbG9iYWxBbHBoYSIsImNsb3NlUGF0aCIsImZpbGwiLCJyZXN0b3JlIiwic2NyZWVuIiwiX29iamVjdFNwcmVhZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lZmZlY3RzL2ZpcmV3b3Jrcy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMyBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuQ29weXJpZ2h0IDIwMjAgTnVyamluIEphZmFyXG5Db3B5cmlnaHQgMjAyMCBOb3JkZWNrIElUICsgQ29uc3VsdGluZyBHbWJILlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4gKi9cblxuaW1wb3J0IElDYW52YXNFZmZlY3QgZnJvbSBcIi4uL0lDYW52YXNFZmZlY3RcIjtcblxuZXhwb3J0IHR5cGUgRmlyZXdvcmtzT3B0aW9ucyA9IHtcbiAgICAvKipcbiAgICAgKiBtYXggZmlyZXdvcmtzIGNvdW50XG4gICAgICovXG4gICAgbWF4Q291bnQ6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiBncmF2aXR5IHZhbHVlIHRoYXQgZmlyZXdvcmsgYWRkcyB0byBzaGlmdCBmcm9tIGl0J3Mgc3RhcnQgcG9zaXRpb25cbiAgICAgKi9cbiAgICBncmF2aXR5OiBudW1iZXI7XG59O1xuXG50eXBlIEZpcmV3b3Jrc1BhcnRpY2xlID0ge1xuICAgIC8qKlxuICAgICAqIGNvbG9yXG4gICAgICovXG4gICAgY29sb3I6IHN0cmluZztcbiAgICAvKipcbiAgICAgKiB4LHkgYXJlIHRoZSBwb2ludCB3aGVyZSB0aGUgcGFydGljbGUgc3RhcnRzIHRvIHBvc2l0aW9uIG9uIGNhbnZhc1xuICAgICAqL1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogdngsdnkgc2hpZnQgdmFsdWVzIGZyb20geCBhbmQgeVxuICAgICAqL1xuICAgIHZ4OiBudW1iZXI7XG4gICAgdnk6IG51bWJlcjtcbiAgICAvKipcbiAgICAgKiB0aGUgYWxwaGEgb3BhY2l0eSBvZiB0aGUgZmlyZXdvcmsgcGFydGljbGUgKGJldHdlZW4gMCBhbmQgMSwgd2hlcmUgMSBpcyBvcGFxdWUgYW5kIDAgaXMgaW52aXNpYmxlKVxuICAgICAqL1xuICAgIGFscGhhOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogdyxoIHdpZHRoIGFuZCBoZWlnaHRcbiAgICAgKi9cbiAgICB3OiBudW1iZXI7XG4gICAgaDogbnVtYmVyO1xufTtcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRPcHRpb25zOiBGaXJld29ya3NPcHRpb25zID0ge1xuICAgIG1heENvdW50OiA1MDAsXG4gICAgZ3Jhdml0eTogMC4wNSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpcmV3b3JrcyBpbXBsZW1lbnRzIElDYW52YXNFZmZlY3Qge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogRmlyZXdvcmtzT3B0aW9ucztcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHsgLi4uRGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgc3VwcG9ydHNBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gICAgcHJpdmF0ZSBwYXJ0aWNsZXM6IEFycmF5PEZpcmV3b3Jrc1BhcnRpY2xlPiA9IFtdO1xuICAgIHB1YmxpYyBpc1J1bm5pbmcgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBzdGFydCA9IGFzeW5jIChjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCB0aW1lb3V0ID0gMzAwMCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBpZiAoIWNhbnZhcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoXCIyZFwiKTtcbiAgICAgICAgdGhpcy5zdXBwb3J0c0FuaW1hdGlvbkZyYW1lLmNhbGwod2luZG93LCB0aGlzLnVwZGF0ZVdvcmxkKTtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuc3RvcCwgdGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSB1cGRhdGVXb3JsZCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmlzUnVubmluZyAmJiB0aGlzLnBhcnRpY2xlcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcbiAgICAgICAgdGhpcy5wYWludCgpO1xuICAgICAgICB0aGlzLnN1cHBvcnRzQW5pbWF0aW9uRnJhbWUuY2FsbCh3aW5kb3csIHRoaXMudXBkYXRlV29ybGQpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHVwZGF0ZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHRoaXMucGFydGljbGVzLmxlbmd0aCA8IHRoaXMub3B0aW9ucy5tYXhDb3VudCAmJiB0aGlzLmlzUnVubmluZykge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaXJld29yaygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFsaXZlOiBGaXJld29ya3NQYXJ0aWNsZVtdID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vdmUodGhpcy5wYXJ0aWNsZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgYWxpdmUucHVzaCh0aGlzLnBhcnRpY2xlc1tpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJ0aWNsZXMgPSBhbGl2ZTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBwYWludCA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRleHQgfHwgIXRoaXMuY29udGV4dC5jYW52YXMpIHJldHVybjtcbiAgICAgICAgdGhpcy5jb250ZXh0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IFwiZGVzdGluYXRpb24tb3V0XCI7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBcInJnYmEoMCwwLDAsMC41KVwiO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbFJlY3QoMCwgMCwgdGhpcy5jb250ZXh0LmNhbnZhcy53aWR0aCwgdGhpcy5jb250ZXh0LmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICB0aGlzLmNvbnRleHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gXCJsaWdodGVyXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJ0aWNsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd1BhcnRpY2xlKHRoaXMucGFydGljbGVzW2ldKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZpcmV3b3JrID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29udGV4dCB8fCAhdGhpcy5jb250ZXh0LmNhbnZhcykgcmV0dXJuO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY29udGV4dC5jYW52YXMud2lkdGg7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuY29udGV4dC5jYW52YXMuaGVpZ2h0O1xuICAgICAgICBjb25zdCB4UG9pbnQgPSBNYXRoLnJhbmRvbSgpICogKHdpZHRoIC0gMjAwKSArIDEwMDtcbiAgICAgICAgY29uc3QgeVBvaW50ID0gTWF0aC5yYW5kb20oKSAqIChoZWlnaHQgLSAyMDApICsgMTAwO1xuICAgICAgICBjb25zdCBuRmlyZSA9IE1hdGgucmFuZG9tKCkgKiA1MCArIDEwMDtcbiAgICAgICAgY29uc3QgY29sb3IgPVxuICAgICAgICAgICAgXCJyZ2IoXCIgK1xuICAgICAgICAgICAgfn4oTWF0aC5yYW5kb20oKSAqIDIwMCArIDU1KSArXG4gICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICB+fihNYXRoLnJhbmRvbSgpICogMjAwICsgNTUpICtcbiAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgIH5+KE1hdGgucmFuZG9tKCkgKiAyMDAgKyA1NSkgK1xuICAgICAgICAgICAgXCIpXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkZpcmU7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFydGljbGUgPSA8RmlyZXdvcmtzUGFydGljbGU+e307XG4gICAgICAgICAgICBwYXJ0aWNsZS5jb2xvciA9IGNvbG9yO1xuICAgICAgICAgICAgcGFydGljbGUudyA9IHBhcnRpY2xlLmggPSBNYXRoLnJhbmRvbSgpICogNCArIDE7XG4gICAgICAgICAgICBwYXJ0aWNsZS54ID0geFBvaW50IC0gcGFydGljbGUudyAvIDI7XG4gICAgICAgICAgICBwYXJ0aWNsZS55ID0geVBvaW50IC0gcGFydGljbGUuaCAvIDI7XG4gICAgICAgICAgICBwYXJ0aWNsZS52eCA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIDEwO1xuICAgICAgICAgICAgcGFydGljbGUudnkgPSAoTWF0aC5yYW5kb20oKSAtIDAuNSkgKiAxMDtcbiAgICAgICAgICAgIHBhcnRpY2xlLmFscGhhID0gTWF0aC5yYW5kb20oKSAqIDAuNSArIDAuNTtcbiAgICAgICAgICAgIGNvbnN0IHZ5ID0gTWF0aC5zcXJ0KDI1IC0gcGFydGljbGUudnggKiBwYXJ0aWNsZS52eCk7XG4gICAgICAgICAgICBpZiAoTWF0aC5hYnMocGFydGljbGUudnkpID4gdnkpIHtcbiAgICAgICAgICAgICAgICBwYXJ0aWNsZS52eSA9IHBhcnRpY2xlLnZ5ID4gMCA/IHZ5IDogLXZ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYXJ0aWNsZXMucHVzaChwYXJ0aWNsZSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHVibGljIHN0b3AgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICAgIHRoaXMuaXNSdW5uaW5nID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHByaXZhdGUgZHJhd1BhcnRpY2xlID0gKHBhcnRpY2xlOiBGaXJld29ya3NQYXJ0aWNsZSk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuY29udGV4dCB8fCAhdGhpcy5jb250ZXh0LmNhbnZhcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGV4dC5zYXZlKCk7XG4gICAgICAgIHRoaXMuY29udGV4dC5iZWdpblBhdGgoKTtcblxuICAgICAgICB0aGlzLmNvbnRleHQudHJhbnNsYXRlKHBhcnRpY2xlLnggKyBwYXJ0aWNsZS53IC8gMiwgcGFydGljbGUueSArIHBhcnRpY2xlLmggLyAyKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LmFyYygwLCAwLCBwYXJ0aWNsZS53LCAwLCBNYXRoLlBJICogMik7XG4gICAgICAgIHRoaXMuY29udGV4dC5maWxsU3R5bGUgPSBwYXJ0aWNsZS5jb2xvcjtcbiAgICAgICAgdGhpcy5jb250ZXh0Lmdsb2JhbEFscGhhID0gcGFydGljbGUuYWxwaGE7XG5cbiAgICAgICAgdGhpcy5jb250ZXh0LmNsb3NlUGF0aCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQuZmlsbCgpO1xuICAgICAgICB0aGlzLmNvbnRleHQucmVzdG9yZSgpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG1vdmUgPSAocGFydGljbGU6IEZpcmV3b3Jrc1BhcnRpY2xlKTogYm9vbGVhbiA9PiB7XG4gICAgICAgIHBhcnRpY2xlLnggKz0gcGFydGljbGUudng7XG4gICAgICAgIHBhcnRpY2xlLnZ5ICs9IHRoaXMub3B0aW9ucy5ncmF2aXR5O1xuICAgICAgICBwYXJ0aWNsZS55ICs9IHBhcnRpY2xlLnZ5O1xuICAgICAgICBwYXJ0aWNsZS5hbHBoYSAtPSAwLjAxO1xuICAgICAgICByZXR1cm4gIShcbiAgICAgICAgICAgIHBhcnRpY2xlLnggPD0gLXBhcnRpY2xlLncgfHxcbiAgICAgICAgICAgIHBhcnRpY2xlLnggPj0gc2NyZWVuLndpZHRoIHx8XG4gICAgICAgICAgICBwYXJ0aWNsZS55ID49IHNjcmVlbi5oZWlnaHQgfHxcbiAgICAgICAgICAgIHBhcnRpY2xlLmFscGhhIDw9IDBcbiAgICAgICAgKTtcbiAgICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQXlDTyxNQUFNQSxjQUFnQyxHQUFBQyxPQUFBLENBQUFELGNBQUEsR0FBRztFQUM1Q0UsUUFBUSxFQUFFLEdBQUc7RUFDYkMsT0FBTyxFQUFFO0FBQ2IsQ0FBQztBQUVjLE1BQU1DLFNBQVMsQ0FBMEI7RUFHN0NDLFdBQVdBLENBQUNDLE9BQStCLEVBQUU7SUFBQSxJQUFBQyxnQkFBQSxDQUFBQyxPQUFBO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQSxtQkFJRCxJQUFJO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQSxrQ0FDdEJDLE1BQU0sQ0FBQ0MscUJBQXFCO0lBQUEsSUFBQUgsZ0JBQUEsQ0FBQUMsT0FBQSxxQkFDZixFQUFFO0lBQUEsSUFBQUQsZ0JBQUEsQ0FBQUMsT0FBQSxxQkFDN0IsS0FBSztJQUFBLElBQUFELGdCQUFBLENBQUFDLE9BQUEsaUJBRVQsT0FBT0csTUFBeUIsRUFBRUMsT0FBTyxHQUFHLElBQUksS0FBb0I7TUFDL0UsSUFBSSxDQUFDRCxNQUFNLEVBQUU7UUFDVDtNQUNKO01BQ0EsSUFBSSxDQUFDRSxTQUFTLEdBQUcsSUFBSTtNQUNyQixJQUFJLENBQUNDLE9BQU8sR0FBR0gsTUFBTSxDQUFDSSxVQUFVLENBQUMsSUFBSSxDQUFDO01BQ3RDLElBQUksQ0FBQ0Msc0JBQXNCLENBQUNDLElBQUksQ0FBQ1IsTUFBTSxFQUFFLElBQUksQ0FBQ1MsV0FBVyxDQUFDO01BQzFELElBQUlOLE9BQU8sRUFBRTtRQUNUSCxNQUFNLENBQUNVLFVBQVUsQ0FBQyxJQUFJLENBQUNDLElBQUksRUFBRVIsT0FBTyxDQUFDO01BQ3pDO0lBQ0osQ0FBQztJQUFBLElBQUFMLGdCQUFBLENBQUFD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