微信小程序-省心预览工具
This commit is contained in:
commit
edf1e51846
173 files changed
+78282
No files matched your search
+502
@@ -0,0 +1,502 @@
|
||||
/******************************************************************************
|
||||
* Spine Runtimes License Agreement
|
||||
* Last updated April 5, 2025. Replaces all prior versions.
|
||||
*
|
||||
* Copyright (c) 2013-2025, Esoteric Software LLC
|
||||
*
|
||||
* Integration of the Spine Runtimes into software or otherwise creating
|
||||
* derivative works of the Spine Runtimes is permitted under the terms and
|
||||
* conditions of Section 2 of the Spine Editor License Agreement:
|
||||
* http://esotericsoftware.com/spine-editor-license
|
||||
*
|
||||
* Otherwise, it is permitted to integrate the Spine Runtimes into software
|
||||
* or otherwise create derivative works of the Spine Runtimes (collectively,
|
||||
* "Products"), provided that each user of the Products must obtain their own
|
||||
* Spine Editor license and redistribution of the Products in any form must
|
||||
* include this license and copyright notice.
|
||||
*
|
||||
* THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY
|
||||
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY
|
||||
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES,
|
||||
* BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*****************************************************************************/
|
||||
import { Color, MathUtils } from "@esotericsoftware/spine-core";
|
||||
import { OrthoCamera } from "./Camera.js";
|
||||
import { PolygonBatcher } from "./PolygonBatcher.js";
|
||||
import { Shader } from "./Shader.js";
|
||||
import { ShapeRenderer } from "./ShapeRenderer.js";
|
||||
import { SkeletonDebugRenderer } from "./SkeletonDebugRenderer.js";
|
||||
import { SkeletonRenderer } from "./SkeletonRenderer.js";
|
||||
import { ManagedWebGLRenderingContext } from "./WebGL.js";
|
||||
;
|
||||
const quad = [
|
||||
0, 0, 1, 1, 1, 1, 0, 0,
|
||||
0, 0, 1, 1, 1, 1, 0, 0,
|
||||
0, 0, 1, 1, 1, 1, 0, 0,
|
||||
0, 0, 1, 1, 1, 1, 0, 0,
|
||||
];
|
||||
const QUAD_TRIANGLES = [0, 1, 2, 2, 3, 0];
|
||||
const WHITE = new Color(1, 1, 1, 1);
|
||||
export class SceneRenderer {
|
||||
context;
|
||||
canvas;
|
||||
camera;
|
||||
batcher;
|
||||
twoColorTint = false;
|
||||
batcherShader;
|
||||
shapes;
|
||||
shapesShader;
|
||||
activeRenderer = null;
|
||||
maxCanvasWidth = 0;
|
||||
maxCanvasHeight = 0;
|
||||
skeletonRenderer;
|
||||
skeletonDebugRenderer;
|
||||
constructor(canvas, context, twoColorTint = true) {
|
||||
this.canvas = canvas;
|
||||
this.context = context instanceof ManagedWebGLRenderingContext ? context : new ManagedWebGLRenderingContext(context);
|
||||
this.twoColorTint = twoColorTint;
|
||||
this.camera = new OrthoCamera(canvas.width, canvas.height);
|
||||
this.batcherShader = twoColorTint ? Shader.newTwoColoredTextured(this.context) : Shader.newColoredTextured(this.context);
|
||||
this.batcher = new PolygonBatcher(this.context, twoColorTint);
|
||||
this.shapesShader = Shader.newColored(this.context);
|
||||
this.shapes = new ShapeRenderer(this.context);
|
||||
this.skeletonRenderer = new SkeletonRenderer(this.context, twoColorTint);
|
||||
this.skeletonDebugRenderer = new SkeletonDebugRenderer(this.context);
|
||||
}
|
||||
dispose() {
|
||||
this.batcher.dispose();
|
||||
this.batcherShader.dispose();
|
||||
this.shapes.dispose();
|
||||
this.shapesShader.dispose();
|
||||
this.skeletonDebugRenderer.dispose();
|
||||
}
|
||||
begin() {
|
||||
this.camera.update();
|
||||
this.enableRenderer(this.batcher);
|
||||
}
|
||||
drawSkeleton(skeleton, premultipliedAlpha = false, slotRangeStart = -1, slotRangeEnd = -1, transform = null) {
|
||||
this.enableRenderer(this.batcher);
|
||||
this.skeletonRenderer.premultipliedAlpha = premultipliedAlpha;
|
||||
this.skeletonRenderer.draw(this.batcher, skeleton, slotRangeStart, slotRangeEnd, transform);
|
||||
}
|
||||
drawSkeletonDebug(skeleton, premultipliedAlpha = false, ignoredBones) {
|
||||
this.enableRenderer(this.shapes);
|
||||
this.skeletonDebugRenderer.premultipliedAlpha = premultipliedAlpha;
|
||||
this.skeletonDebugRenderer.draw(this.shapes, skeleton, ignoredBones);
|
||||
}
|
||||
drawTexture(texture, x, y, width, height, color) {
|
||||
this.enableRenderer(this.batcher);
|
||||
if (!color)
|
||||
color = WHITE;
|
||||
var i = 0;
|
||||
quad[i++] = x;
|
||||
quad[i++] = y;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 1;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x + width;
|
||||
quad[i++] = y;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = 1;
|
||||
quad[i++] = 1;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x + width;
|
||||
quad[i++] = y + height;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = 1;
|
||||
quad[i++] = 0;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x;
|
||||
quad[i++] = y + height;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i] = 0;
|
||||
}
|
||||
this.batcher.draw(texture, quad, QUAD_TRIANGLES);
|
||||
}
|
||||
drawTextureUV(texture, x, y, width, height, u, v, u2, v2, color) {
|
||||
this.enableRenderer(this.batcher);
|
||||
if (!color)
|
||||
color = WHITE;
|
||||
var i = 0;
|
||||
quad[i++] = x;
|
||||
quad[i++] = y;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = u;
|
||||
quad[i++] = v;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x + width;
|
||||
quad[i++] = y;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = u2;
|
||||
quad[i++] = v;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x + width;
|
||||
quad[i++] = y + height;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = u2;
|
||||
quad[i++] = v2;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x;
|
||||
quad[i++] = y + height;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = u;
|
||||
quad[i++] = v2;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i] = 0;
|
||||
}
|
||||
this.batcher.draw(texture, quad, QUAD_TRIANGLES);
|
||||
}
|
||||
drawTextureRotated(texture, x, y, width, height, pivotX, pivotY, angle, color) {
|
||||
this.enableRenderer(this.batcher);
|
||||
if (!color)
|
||||
color = WHITE;
|
||||
// bottom left and top right corner points relative to origin
|
||||
let worldOriginX = x + pivotX;
|
||||
let worldOriginY = y + pivotY;
|
||||
let fx = -pivotX;
|
||||
let fy = -pivotY;
|
||||
let fx2 = width - pivotX;
|
||||
let fy2 = height - pivotY;
|
||||
// construct corner points, start from top left and go counter clockwise
|
||||
let p1x = fx;
|
||||
let p1y = fy;
|
||||
let p2x = fx;
|
||||
let p2y = fy2;
|
||||
let p3x = fx2;
|
||||
let p3y = fy2;
|
||||
let p4x = fx2;
|
||||
let p4y = fy;
|
||||
let x1 = 0;
|
||||
let y1 = 0;
|
||||
let x2 = 0;
|
||||
let y2 = 0;
|
||||
let x3 = 0;
|
||||
let y3 = 0;
|
||||
let x4 = 0;
|
||||
let y4 = 0;
|
||||
// rotate
|
||||
if (angle != 0) {
|
||||
let cos = MathUtils.cosDeg(angle);
|
||||
let sin = MathUtils.sinDeg(angle);
|
||||
x1 = cos * p1x - sin * p1y;
|
||||
y1 = sin * p1x + cos * p1y;
|
||||
x4 = cos * p2x - sin * p2y;
|
||||
y4 = sin * p2x + cos * p2y;
|
||||
x3 = cos * p3x - sin * p3y;
|
||||
y3 = sin * p3x + cos * p3y;
|
||||
x2 = x3 + (x1 - x4);
|
||||
y2 = y3 + (y1 - y4);
|
||||
}
|
||||
else {
|
||||
x1 = p1x;
|
||||
y1 = p1y;
|
||||
x4 = p2x;
|
||||
y4 = p2y;
|
||||
x3 = p3x;
|
||||
y3 = p3y;
|
||||
x2 = p4x;
|
||||
y2 = p4y;
|
||||
}
|
||||
x1 += worldOriginX;
|
||||
y1 += worldOriginY;
|
||||
x2 += worldOriginX;
|
||||
y2 += worldOriginY;
|
||||
x3 += worldOriginX;
|
||||
y3 += worldOriginY;
|
||||
x4 += worldOriginX;
|
||||
y4 += worldOriginY;
|
||||
var i = 0;
|
||||
quad[i++] = x1;
|
||||
quad[i++] = y1;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 1;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x2;
|
||||
quad[i++] = y2;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = 1;
|
||||
quad[i++] = 1;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x3;
|
||||
quad[i++] = y3;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = 1;
|
||||
quad[i++] = 0;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x4;
|
||||
quad[i++] = y4;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i] = 0;
|
||||
}
|
||||
this.batcher.draw(texture, quad, QUAD_TRIANGLES);
|
||||
}
|
||||
drawRegion(region, x, y, width, height, color) {
|
||||
this.enableRenderer(this.batcher);
|
||||
if (!color)
|
||||
color = WHITE;
|
||||
var i = 0;
|
||||
quad[i++] = x;
|
||||
quad[i++] = y;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = region.u;
|
||||
quad[i++] = region.v2;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x + width;
|
||||
quad[i++] = y;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = region.u2;
|
||||
quad[i++] = region.v2;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x + width;
|
||||
quad[i++] = y + height;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = region.u2;
|
||||
quad[i++] = region.v;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
}
|
||||
quad[i++] = x;
|
||||
quad[i++] = y + height;
|
||||
quad[i++] = color.r;
|
||||
quad[i++] = color.g;
|
||||
quad[i++] = color.b;
|
||||
quad[i++] = color.a;
|
||||
quad[i++] = region.u;
|
||||
quad[i++] = region.v;
|
||||
if (this.twoColorTint) {
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i++] = 0;
|
||||
quad[i] = 0;
|
||||
}
|
||||
this.batcher.draw(region.page.texture, quad, QUAD_TRIANGLES);
|
||||
}
|
||||
line(x, y, x2, y2, color, color2) {
|
||||
this.enableRenderer(this.shapes);
|
||||
this.shapes.line(x, y, x2, y2, color);
|
||||
}
|
||||
triangle(filled, x, y, x2, y2, x3, y3, color, color2, color3) {
|
||||
this.enableRenderer(this.shapes);
|
||||
this.shapes.triangle(filled, x, y, x2, y2, x3, y3, color, color2, color3);
|
||||
}
|
||||
quad(filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4) {
|
||||
this.enableRenderer(this.shapes);
|
||||
this.shapes.quad(filled, x, y, x2, y2, x3, y3, x4, y4, color, color2, color3, color4);
|
||||
}
|
||||
rect(filled, x, y, width, height, color) {
|
||||
this.enableRenderer(this.shapes);
|
||||
this.shapes.rect(filled, x, y, width, height, color);
|
||||
}
|
||||
rectLine(filled, x1, y1, x2, y2, width, color) {
|
||||
this.enableRenderer(this.shapes);
|
||||
this.shapes.rectLine(filled, x1, y1, x2, y2, width, color);
|
||||
}
|
||||
polygon(polygonVertices, offset, count, color) {
|
||||
this.enableRenderer(this.shapes);
|
||||
this.shapes.polygon(polygonVertices, offset, count, color);
|
||||
}
|
||||
circle(filled, x, y, radius, color, segments = 0) {
|
||||
this.enableRenderer(this.shapes);
|
||||
this.shapes.circle(filled, x, y, radius, color, segments);
|
||||
}
|
||||
curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color) {
|
||||
this.enableRenderer(this.shapes);
|
||||
this.shapes.curve(x1, y1, cx1, cy1, cx2, cy2, x2, y2, segments, color);
|
||||
}
|
||||
end() {
|
||||
if (this.activeRenderer === this.batcher)
|
||||
this.batcher.end();
|
||||
else if (this.activeRenderer === this.shapes)
|
||||
this.shapes.end();
|
||||
this.activeRenderer = null;
|
||||
}
|
||||
resize(resizeMode) {
|
||||
let canvas = this.canvas;
|
||||
var dpr = this.getSafeDevicePixelRatio(canvas.clientWidth, canvas.clientHeight);
|
||||
var w = Math.round(canvas.clientWidth * dpr);
|
||||
var h = Math.round(canvas.clientHeight * dpr);
|
||||
if (canvas.width != w || canvas.height != h) {
|
||||
canvas.width = w;
|
||||
canvas.height = h;
|
||||
}
|
||||
this.context.gl.viewport(0, 0, canvas.width, canvas.height);
|
||||
// Nothing to do for stretch, we simply apply the viewport size of the camera.
|
||||
if (resizeMode === ResizeMode.Expand)
|
||||
this.camera.setViewport(w, h);
|
||||
else if (resizeMode === ResizeMode.Fit) {
|
||||
let sourceWidth = canvas.width, sourceHeight = canvas.height;
|
||||
let targetWidth = this.camera.viewportWidth, targetHeight = this.camera.viewportHeight;
|
||||
let targetRatio = targetHeight / targetWidth;
|
||||
let sourceRatio = sourceHeight / sourceWidth;
|
||||
let scale = targetRatio < sourceRatio ? targetWidth / sourceWidth : targetHeight / sourceHeight;
|
||||
this.camera.setViewport(sourceWidth * scale, sourceHeight * scale);
|
||||
}
|
||||
this.camera.update();
|
||||
}
|
||||
getSafeDevicePixelRatio(cssWidth, cssHeight) {
|
||||
const dpr = window.devicePixelRatio || 1;
|
||||
if (cssWidth <= 0 || cssHeight <= 0)
|
||||
return dpr;
|
||||
if (this.maxCanvasWidth === 0 || this.maxCanvasHeight === 0) {
|
||||
const gl = this.context.gl;
|
||||
const maxRenderbufferSize = gl.getParameter(gl.MAX_RENDERBUFFER_SIZE);
|
||||
const maxViewportDims = gl.getParameter(gl.MAX_VIEWPORT_DIMS);
|
||||
this.maxCanvasWidth = Math.min(maxRenderbufferSize, maxViewportDims[0]);
|
||||
this.maxCanvasHeight = Math.min(maxRenderbufferSize, maxViewportDims[1]);
|
||||
}
|
||||
return Math.min(dpr, this.maxCanvasWidth / cssWidth, this.maxCanvasHeight / cssHeight);
|
||||
}
|
||||
enableRenderer(renderer) {
|
||||
if (this.activeRenderer === renderer)
|
||||
return;
|
||||
this.end();
|
||||
if (renderer instanceof PolygonBatcher) {
|
||||
this.batcherShader.bind();
|
||||
this.batcherShader.setUniform4x4f(Shader.MVP_MATRIX, this.camera.projectionView.values);
|
||||
this.batcherShader.setUniformi("u_texture", 0);
|
||||
this.batcher.begin(this.batcherShader);
|
||||
this.activeRenderer = this.batcher;
|
||||
}
|
||||
else if (renderer instanceof ShapeRenderer) {
|
||||
this.shapesShader.bind();
|
||||
this.shapesShader.setUniform4x4f(Shader.MVP_MATRIX, this.camera.projectionView.values);
|
||||
this.shapes.begin(this.shapesShader);
|
||||
this.activeRenderer = this.shapes;
|
||||
}
|
||||
else
|
||||
this.activeRenderer = this.skeletonDebugRenderer;
|
||||
}
|
||||
}
|
||||
export var ResizeMode;
|
||||
(function (ResizeMode) {
|
||||
ResizeMode[ResizeMode["Stretch"] = 0] = "Stretch";
|
||||
ResizeMode[ResizeMode["Expand"] = 1] = "Expand";
|
||||
ResizeMode[ResizeMode["Fit"] = 2] = "Fit";
|
||||
})(ResizeMode || (ResizeMode = {}));
|
||||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NlbmVSZW5kZXJlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9TY2VuZVJlbmRlcmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMkIrRTtBQUUvRSxPQUFPLEVBQUUsS0FBSyxFQUF3QixTQUFTLEVBQXNCLE1BQU0sOEJBQThCLENBQUM7QUFDMUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFxQixNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxJQUFJLEdBQUc7SUFDWixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN0QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN0QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUN0QixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUN0QixDQUFDO0FBQ0YsTUFBTSxjQUFjLEdBQUcsQ0FB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
Line truncated
|
||||
Reference in new issue
Block a user