@mlightcad/geometry-engine 2.0.2 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@mlightcad/geometry-engine",
|
3
|
-
"version": "2.0.
|
3
|
+
"version": "2.0.4",
|
4
4
|
"license": "MIT",
|
5
5
|
"type": "module",
|
6
6
|
"repository": {
|
@@ -32,7 +32,7 @@
|
|
32
32
|
"require": "./dist/geometry-engine.umd.cjs"
|
33
33
|
},
|
34
34
|
"peerDependencies": {
|
35
|
-
"@mlightcad/common": "1.1.
|
35
|
+
"@mlightcad/common": "1.1.3"
|
36
36
|
},
|
37
37
|
"scripts": {
|
38
38
|
"clean": "rimraf dist lib tsconfig.tsbuildinfo",
|
@@ -1,36 +0,0 @@
|
|
1
|
-
import verb from 'verb-nurbs-web';
|
2
|
-
import { AcGeKnotParameterizationType } from '../geometry';
|
3
|
-
/**
|
4
|
-
* Represents the data structure for a NURBS curve including control points, weights, knots, and degree
|
5
|
-
*/
|
6
|
-
export type NurbsCurveData = {
|
7
|
-
points: number[][];
|
8
|
-
weights?: number[];
|
9
|
-
knots: number[];
|
10
|
-
degree: number;
|
11
|
-
};
|
12
|
-
/**
|
13
|
-
* Main spline utility class
|
14
|
-
*/
|
15
|
-
export declare class AcGeSplineUtil {
|
16
|
-
/**
|
17
|
-
* Creates a NURBS curve from fit points using the specified knot parameterization
|
18
|
-
* @param fitPoints Array of fit points in 3D space
|
19
|
-
* @param knotParameterization Type of knot parameterization ('Uniform', 'Chord', or 'SqrtChord')
|
20
|
-
* @returns A NURBS curve object or undefined if insufficient points
|
21
|
-
*/
|
22
|
-
static createByFitPoints(fitPoints: number[][], knotParameterization?: AcGeKnotParameterizationType): verb.geom.NurbsCurve | undefined;
|
23
|
-
/**
|
24
|
-
* Converts closed fit points to control points for NURBS curve creation
|
25
|
-
* @param fitPoints Array of fit points defining the curve
|
26
|
-
* @param knotParameterization Type of knot parameterization
|
27
|
-
* @returns NURBS curve data with control points, weights, knots, and degree
|
28
|
-
*/
|
29
|
-
static convertClosedFitPointsToControlPoints(fitPoints: number[][], knotParameterization: AcGeKnotParameterizationType): NurbsCurveData;
|
30
|
-
private static removeDuplicateEndPoint;
|
31
|
-
private static createClosedSplineInterpolation;
|
32
|
-
private static convertClosedNurbsToClamped;
|
33
|
-
}
|
34
|
-
export declare const createByFitPoints: typeof AcGeSplineUtil.createByFitPoints;
|
35
|
-
export declare const convertClosedFitPointsToControlPoints: typeof AcGeSplineUtil.convertClosedFitPointsToControlPoints;
|
36
|
-
//# sourceMappingURL=AcGeSplineUtil.d.ts.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"AcGeSplineUtil.d.ts","sourceRoot":"","sources":["../../src/util/AcGeSplineUtil.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,gBAAgB,CAAA;AAEjC,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAA;AAO1D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,EAAE,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAikBD;;GAEG;AACH,qBAAa,cAAc;IACzB;;;;;OAKG;IACH,MAAM,CAAC,iBAAiB,CACtB,SAAS,EAAE,MAAM,EAAE,EAAE,EACrB,oBAAoB,GAAE,4BAAwC;IAgBhE;;;;;OAKG;IACH,MAAM,CAAC,qCAAqC,CAC1C,SAAS,EAAE,MAAM,EAAE,EAAE,EACrB,oBAAoB,EAAE,4BAA4B,GACjD,cAAc;IAMjB,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAWtC,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAqC9C,OAAO,CAAC,MAAM,CAAC,2BAA2B;CAqB3C;AAGD,eAAO,MAAM,iBAAiB,yCAAmC,CAAA;AACjE,eAAO,MAAM,qCAAqC,6DAAuD,CAAA"}
|
@@ -1,491 +0,0 @@
|
|
1
|
-
var __read = (this && this.__read) || function (o, n) {
|
2
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
3
|
-
if (!m) return o;
|
4
|
-
var i = m.call(o), r, ar = [], e;
|
5
|
-
try {
|
6
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
7
|
-
}
|
8
|
-
catch (error) { e = { error: error }; }
|
9
|
-
finally {
|
10
|
-
try {
|
11
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
12
|
-
}
|
13
|
-
finally { if (e) throw e.error; }
|
14
|
-
}
|
15
|
-
return ar;
|
16
|
-
};
|
17
|
-
import verb from 'verb-nurbs-web';
|
18
|
-
// Constants
|
19
|
-
var SPLINE_DEGREE = 3;
|
20
|
-
var MIN_FIT_POINTS_FOR_SPLINE = 3;
|
21
|
-
var CLOSED_SPLINE_EXTRA_CONTROL_POINTS = 3;
|
22
|
-
/**
|
23
|
-
* Utility class for NURBS basis function calculations
|
24
|
-
*/
|
25
|
-
var NurbsBasisCalculator = /** @class */ (function () {
|
26
|
-
function NurbsBasisCalculator() {
|
27
|
-
}
|
28
|
-
/**
|
29
|
-
* Evaluates a degree 3 NURBS basis function at a given parameter value
|
30
|
-
*/
|
31
|
-
NurbsBasisCalculator.evaluateDegree3 = function (knotVector, knotCount, parameterValue, controlPointIndex) {
|
32
|
-
var interval = this.findKnotInterval(knotVector, knotCount, parameterValue);
|
33
|
-
var knots = this.extractKnotValues(knotVector, interval.start);
|
34
|
-
return this.applyDeBoorsAlgorithm(parameterValue, controlPointIndex, interval.start, knots);
|
35
|
-
};
|
36
|
-
NurbsBasisCalculator.findKnotInterval = function (knotVector, knotCount, parameterValue) {
|
37
|
-
var knotIntervalStart = 0;
|
38
|
-
var knotIntervalEnd = knotCount;
|
39
|
-
while (knotIntervalEnd > knotIntervalStart + 1) {
|
40
|
-
var middleIndex = (0.5 * (knotIntervalEnd + knotIntervalStart)) | 0;
|
41
|
-
if (knotVector[middleIndex] > parameterValue) {
|
42
|
-
knotIntervalEnd = middleIndex;
|
43
|
-
}
|
44
|
-
else {
|
45
|
-
knotIntervalStart = middleIndex;
|
46
|
-
}
|
47
|
-
}
|
48
|
-
return { start: knotIntervalStart };
|
49
|
-
};
|
50
|
-
NurbsBasisCalculator.extractKnotValues = function (knotVector, intervalStart) {
|
51
|
-
return [
|
52
|
-
knotVector[intervalStart - 2], // knotMinus2
|
53
|
-
knotVector[intervalStart - 1], // knotMinus1
|
54
|
-
knotVector[intervalStart], // knotZero
|
55
|
-
knotVector[intervalStart + 1], // knotPlus1
|
56
|
-
knotVector[intervalStart + 2], // knotPlus2
|
57
|
-
knotVector[intervalStart + 3] // knotPlus3
|
58
|
-
];
|
59
|
-
};
|
60
|
-
NurbsBasisCalculator.applyDeBoorsAlgorithm = function (parameterValue, controlPointIndex, intervalStart, knots) {
|
61
|
-
var _a = __read(knots, 6), knotMinus2 = _a[0], knotMinus1 = _a[1], knotZero = _a[2], knotPlus1 = _a[3], knotPlus2 = _a[4], knotPlus3 = _a[5];
|
62
|
-
// Initialize basis function values
|
63
|
-
var basisValueMinus3 = intervalStart - 3 === controlPointIndex ? 1 : 0;
|
64
|
-
var basisValueMinus2 = intervalStart - 2 === controlPointIndex ? 1 : 0;
|
65
|
-
var basisValueMinus1 = intervalStart - 1 === controlPointIndex ? 1 : 0;
|
66
|
-
var basisValueZero = intervalStart === controlPointIndex ? 1 : 0;
|
67
|
-
// De Boor's algorithm for degree 3 evaluation - Step 1
|
68
|
-
var alpha = (parameterValue - knotZero) / (knotPlus3 - knotZero);
|
69
|
-
var beta = 1 - alpha;
|
70
|
-
basisValueZero = beta * basisValueMinus1 + alpha * basisValueZero;
|
71
|
-
alpha = (parameterValue - knotMinus1) / (knotPlus2 - knotMinus1);
|
72
|
-
beta = 1 - alpha;
|
73
|
-
basisValueMinus1 = beta * basisValueMinus2 + alpha * basisValueMinus1;
|
74
|
-
alpha = (parameterValue - knotMinus2) / (knotPlus1 - knotMinus2);
|
75
|
-
beta = 1 - alpha;
|
76
|
-
basisValueMinus2 = beta * basisValueMinus3 + alpha * basisValueMinus2;
|
77
|
-
// De Boor's algorithm for degree 3 evaluation - Step 2
|
78
|
-
alpha = (parameterValue - knotZero) / (knotPlus2 - knotZero);
|
79
|
-
beta = 1 - alpha;
|
80
|
-
basisValueZero = beta * basisValueMinus1 + alpha * basisValueZero;
|
81
|
-
alpha = (parameterValue - knotMinus1) / (knotPlus1 - knotMinus1);
|
82
|
-
beta = 1 - alpha;
|
83
|
-
basisValueMinus1 = beta * basisValueMinus2 + alpha * basisValueMinus1;
|
84
|
-
// De Boor's algorithm for degree 3 evaluation - Step 3
|
85
|
-
alpha = (parameterValue - knotZero) / (knotPlus1 - knotZero);
|
86
|
-
beta = 1 - alpha;
|
87
|
-
basisValueZero = beta * basisValueMinus1 + alpha * basisValueZero;
|
88
|
-
return basisValueZero;
|
89
|
-
};
|
90
|
-
return NurbsBasisCalculator;
|
91
|
-
}());
|
92
|
-
/**
|
93
|
-
* Utility class for knot vector generation
|
94
|
-
*/
|
95
|
-
var KnotVectorGenerator = /** @class */ (function () {
|
96
|
-
function KnotVectorGenerator() {
|
97
|
-
}
|
98
|
-
/**
|
99
|
-
* Generates a knot vector based on the specified parameterization type
|
100
|
-
*/
|
101
|
-
KnotVectorGenerator.generate = function (fitPoints, knotParameterization, knotVectorSize) {
|
102
|
-
switch (knotParameterization) {
|
103
|
-
case 'Uniform':
|
104
|
-
return this.generateUniformKnotVector(knotVectorSize);
|
105
|
-
case 'Chord':
|
106
|
-
return this.generateChordKnotVector(fitPoints, knotVectorSize);
|
107
|
-
case 'SqrtChord':
|
108
|
-
return this.generateSqrtChordKnotVector(fitPoints, knotVectorSize);
|
109
|
-
default:
|
110
|
-
throw new Error("Unsupported knot parameterization: ".concat(knotParameterization));
|
111
|
-
}
|
112
|
-
};
|
113
|
-
KnotVectorGenerator.generateUniformKnotVector = function (knotVectorSize) {
|
114
|
-
var knotVector = new Array(knotVectorSize);
|
115
|
-
for (var i = 0; i < knotVectorSize; i++) {
|
116
|
-
knotVector[i] = i;
|
117
|
-
}
|
118
|
-
return knotVector;
|
119
|
-
};
|
120
|
-
KnotVectorGenerator.generateChordKnotVector = function (fitPoints, knotVectorSize) {
|
121
|
-
var knotVector = new Array(knotVectorSize);
|
122
|
-
var fitPointCount = fitPoints.length;
|
123
|
-
var cumulativeDistance = 0;
|
124
|
-
knotVector[0] = 0;
|
125
|
-
for (var i = 1; i < knotVectorSize; i++) {
|
126
|
-
var point1 = fitPoints[(i - 4 + fitPointCount) % fitPointCount];
|
127
|
-
var point2 = fitPoints[(i - 3 + fitPointCount) % fitPointCount];
|
128
|
-
var segmentLength = this.calculateDistance(point1, point2);
|
129
|
-
cumulativeDistance += segmentLength;
|
130
|
-
knotVector[i] = cumulativeDistance;
|
131
|
-
}
|
132
|
-
return knotVector;
|
133
|
-
};
|
134
|
-
KnotVectorGenerator.generateSqrtChordKnotVector = function (fitPoints, knotVectorSize) {
|
135
|
-
var knotVector = new Array(knotVectorSize);
|
136
|
-
var fitPointCount = fitPoints.length;
|
137
|
-
var cumulativeDistance = 0;
|
138
|
-
knotVector[0] = 0;
|
139
|
-
for (var i = 1; i < knotVectorSize; i++) {
|
140
|
-
var point1 = fitPoints[(i - 4 + fitPointCount) % fitPointCount];
|
141
|
-
var point2 = fitPoints[(i - 3 + fitPointCount) % fitPointCount];
|
142
|
-
var segmentLength = Math.sqrt(this.calculateDistance(point1, point2));
|
143
|
-
cumulativeDistance += segmentLength;
|
144
|
-
knotVector[i] = cumulativeDistance;
|
145
|
-
}
|
146
|
-
return knotVector;
|
147
|
-
};
|
148
|
-
KnotVectorGenerator.calculateDistance = function (point1, point2) {
|
149
|
-
return Math.sqrt(Math.pow(point2[0] - point1[0], 2) + Math.pow(point2[1] - point1[1], 2));
|
150
|
-
};
|
151
|
-
return KnotVectorGenerator;
|
152
|
-
}());
|
153
|
-
/**
|
154
|
-
* Utility class for basis matrix operations
|
155
|
-
*/
|
156
|
-
var BasisMatrixBuilder = /** @class */ (function () {
|
157
|
-
function BasisMatrixBuilder() {
|
158
|
-
}
|
159
|
-
/**
|
160
|
-
* Builds the basis matrix for spline interpolation
|
161
|
-
*/
|
162
|
-
BasisMatrixBuilder.buildBasisMatrix = function (fitPoints, knotVector, parameterValues) {
|
163
|
-
var fitPointCount = fitPoints.length;
|
164
|
-
var controlPointCount = fitPointCount + CLOSED_SPLINE_EXTRA_CONTROL_POINTS;
|
165
|
-
var basisMatrix = new Array(fitPointCount);
|
166
|
-
for (var i = 0; i < fitPointCount; i++) {
|
167
|
-
basisMatrix[i] = new Array(controlPointCount);
|
168
|
-
for (var j = 0; j < controlPointCount; j++) {
|
169
|
-
basisMatrix[i][j] = NurbsBasisCalculator.evaluateDegree3(knotVector, controlPointCount, parameterValues[i], j);
|
170
|
-
}
|
171
|
-
}
|
172
|
-
return basisMatrix;
|
173
|
-
};
|
174
|
-
/**
|
175
|
-
* Reduces the basis matrix for closed spline interpolation
|
176
|
-
*/
|
177
|
-
BasisMatrixBuilder.reduceForClosedSpline = function (basisMatrix, fitPointCount) {
|
178
|
-
var reducedBasisMatrix = new Array(fitPointCount);
|
179
|
-
for (var i = 0; i < fitPointCount; i++) {
|
180
|
-
reducedBasisMatrix[i] = new Array(fitPointCount);
|
181
|
-
reducedBasisMatrix[i][0] = basisMatrix[i][0] + basisMatrix[i][fitPointCount];
|
182
|
-
reducedBasisMatrix[i][1] = basisMatrix[i][1] + basisMatrix[i][fitPointCount + 1];
|
183
|
-
reducedBasisMatrix[i][2] = basisMatrix[i][2] + basisMatrix[i][fitPointCount + 2];
|
184
|
-
for (var j = 3; j < fitPointCount; j++) {
|
185
|
-
reducedBasisMatrix[i][j] = basisMatrix[i][j];
|
186
|
-
}
|
187
|
-
}
|
188
|
-
return reducedBasisMatrix;
|
189
|
-
};
|
190
|
-
return BasisMatrixBuilder;
|
191
|
-
}());
|
192
|
-
/**
|
193
|
-
* Utility class for control point calculations
|
194
|
-
*/
|
195
|
-
var ControlPointCalculator = /** @class */ (function () {
|
196
|
-
function ControlPointCalculator() {
|
197
|
-
}
|
198
|
-
/**
|
199
|
-
* Solves for control points using the reduced basis matrix
|
200
|
-
*/
|
201
|
-
ControlPointCalculator.solveControlPoints = function (reducedBasisMatrix, fitPoints) {
|
202
|
-
var dimensions = fitPoints[0].length;
|
203
|
-
var fitPointCount = fitPoints.length;
|
204
|
-
var solvedControlPoints = [];
|
205
|
-
// Create dimension matrices from fit points
|
206
|
-
for (var i = 0; i < dimensions; i++) {
|
207
|
-
var dimensionMatrix = new Array(fitPointCount);
|
208
|
-
for (var j = 0; j < fitPointCount; j++) {
|
209
|
-
dimensionMatrix[j] = fitPoints[j][i];
|
210
|
-
}
|
211
|
-
// @ts-expect-error - verb library typing issue
|
212
|
-
solvedControlPoints[i] = verb.core.Mat.solve(reducedBasisMatrix, dimensionMatrix);
|
213
|
-
}
|
214
|
-
return solvedControlPoints;
|
215
|
-
};
|
216
|
-
/**
|
217
|
-
* Constructs control points from solved values
|
218
|
-
*/
|
219
|
-
ControlPointCalculator.constructControlPoints = function (solvedControlPoints, fitPointCount, dimensions) {
|
220
|
-
var controlPoints = new Array(fitPointCount);
|
221
|
-
// Construct control points from solved values
|
222
|
-
for (var i = 0; i < fitPointCount; i++) {
|
223
|
-
controlPoints[i] = dimensions >= 3
|
224
|
-
? [solvedControlPoints[0][i], solvedControlPoints[1][i], solvedControlPoints[2][i]]
|
225
|
-
: [solvedControlPoints[0][i], solvedControlPoints[1][i]];
|
226
|
-
}
|
227
|
-
// Add duplicate control points for closed spline
|
228
|
-
for (var i = 0; i < CLOSED_SPLINE_EXTRA_CONTROL_POINTS; i++) {
|
229
|
-
controlPoints[i + fitPointCount] = dimensions >= 3
|
230
|
-
? [solvedControlPoints[0][i], solvedControlPoints[1][i], solvedControlPoints[2][i]]
|
231
|
-
: [solvedControlPoints[0][i], solvedControlPoints[1][i]];
|
232
|
-
}
|
233
|
-
return controlPoints;
|
234
|
-
};
|
235
|
-
/**
|
236
|
-
* Creates uniform weights array
|
237
|
-
*/
|
238
|
-
ControlPointCalculator.createUniformWeights = function (controlPointCount) {
|
239
|
-
return new Array(controlPointCount).fill(1);
|
240
|
-
};
|
241
|
-
return ControlPointCalculator;
|
242
|
-
}());
|
243
|
-
/**
|
244
|
-
* Utility class for NURBS curve subdivision
|
245
|
-
*/
|
246
|
-
var NurbsSubdivider = /** @class */ (function () {
|
247
|
-
function NurbsSubdivider() {
|
248
|
-
}
|
249
|
-
/**
|
250
|
-
* Subdivides a degree 3 NURBS curve at a given parameter value
|
251
|
-
*/
|
252
|
-
NurbsSubdivider.subdivideDegree3 = function (controlPoints, knotVector, subdivisionParameter) {
|
253
|
-
var interval = this.findKnotInterval(knotVector, controlPoints.length, subdivisionParameter);
|
254
|
-
var knots = this.extractKnotValues(knotVector, interval.start);
|
255
|
-
var controlPointCoords = this.extractControlPointCoordinates(controlPoints, interval.start);
|
256
|
-
var subdividedPoints = this.applyDeBoorsSubdivision(subdivisionParameter, knots, controlPointCoords);
|
257
|
-
return this.constructSubdividedCurves(controlPoints, knotVector, interval.start, subdivisionParameter, subdividedPoints);
|
258
|
-
};
|
259
|
-
NurbsSubdivider.findKnotInterval = function (knotVector, controlPointCount, subdivisionParameter) {
|
260
|
-
var knotIntervalEnd = controlPointCount;
|
261
|
-
var knotIntervalStart = 0;
|
262
|
-
while (knotIntervalEnd > knotIntervalStart + 1) {
|
263
|
-
var middleIndex = (0.5 * (knotIntervalEnd + knotIntervalStart)) | 0;
|
264
|
-
if (knotVector[middleIndex] > subdivisionParameter) {
|
265
|
-
knotIntervalEnd = middleIndex;
|
266
|
-
}
|
267
|
-
else {
|
268
|
-
knotIntervalStart = middleIndex;
|
269
|
-
}
|
270
|
-
}
|
271
|
-
return { start: knotIntervalStart };
|
272
|
-
};
|
273
|
-
NurbsSubdivider.extractKnotValues = function (knotVector, intervalStart) {
|
274
|
-
return [
|
275
|
-
knotVector[intervalStart - 2], // knotMinus2
|
276
|
-
knotVector[intervalStart - 1], // knotMinus1
|
277
|
-
knotVector[intervalStart], // knotZero
|
278
|
-
knotVector[intervalStart + 1], // knotPlus1
|
279
|
-
knotVector[intervalStart + 2], // knotPlus2
|
280
|
-
knotVector[intervalStart + 3] // knotPlus3
|
281
|
-
];
|
282
|
-
};
|
283
|
-
NurbsSubdivider.extractControlPointCoordinates = function (controlPoints, intervalStart) {
|
284
|
-
var dimensions = controlPoints[0].length;
|
285
|
-
return [
|
286
|
-
{
|
287
|
-
x: controlPoints[intervalStart - 3][0],
|
288
|
-
y: controlPoints[intervalStart - 3][1],
|
289
|
-
z: dimensions >= 3 ? controlPoints[intervalStart - 3][2] : 0
|
290
|
-
},
|
291
|
-
{
|
292
|
-
x: controlPoints[intervalStart - 2][0],
|
293
|
-
y: controlPoints[intervalStart - 2][1],
|
294
|
-
z: dimensions >= 3 ? controlPoints[intervalStart - 2][2] : 0
|
295
|
-
},
|
296
|
-
{
|
297
|
-
x: controlPoints[intervalStart - 1][0],
|
298
|
-
y: controlPoints[intervalStart - 1][1],
|
299
|
-
z: dimensions >= 3 ? controlPoints[intervalStart - 1][2] : 0
|
300
|
-
},
|
301
|
-
{
|
302
|
-
x: controlPoints[intervalStart][0],
|
303
|
-
y: controlPoints[intervalStart][1],
|
304
|
-
z: dimensions >= 3 ? controlPoints[intervalStart][2] : 0
|
305
|
-
}
|
306
|
-
];
|
307
|
-
};
|
308
|
-
NurbsSubdivider.applyDeBoorsSubdivision = function (subdivisionParameter, knots, controlPoints) {
|
309
|
-
var _a = __read(knots, 6), knotMinus2 = _a[0], knotMinus1 = _a[1], knotZero = _a[2], knotPlus1 = _a[3], knotPlus2 = _a[4], knotPlus3 = _a[5];
|
310
|
-
var _b = __read(controlPoints, 4), cpMinus3 = _b[0], cpMinus2 = _b[1], cpMinus1 = _b[2], cpZero = _b[3];
|
311
|
-
// De Boor's algorithm for degree 3 subdivision - Step 1
|
312
|
-
var alphaZero_1 = (subdivisionParameter - knotZero) / (knotPlus3 - knotZero);
|
313
|
-
var betaZero_1 = 1 - alphaZero_1;
|
314
|
-
var cpZero_1 = this.interpolatePoint(cpMinus1, cpZero, alphaZero_1, betaZero_1);
|
315
|
-
var alphaMinus1_1 = (subdivisionParameter - knotMinus1) / (knotPlus2 - knotMinus1);
|
316
|
-
var betaMinus1_1 = 1 - alphaMinus1_1;
|
317
|
-
var cpMinus1_1 = this.interpolatePoint(cpMinus2, cpMinus1, alphaMinus1_1, betaMinus1_1);
|
318
|
-
var alphaMinus2_1 = (subdivisionParameter - knotMinus2) / (knotPlus1 - knotMinus2);
|
319
|
-
var betaMinus2_1 = 1 - alphaMinus2_1;
|
320
|
-
var cpMinus2_1 = this.interpolatePoint(cpMinus3, cpMinus2, alphaMinus2_1, betaMinus2_1);
|
321
|
-
// De Boor's algorithm for degree 3 subdivision - Step 2
|
322
|
-
var alphaZero_2 = (subdivisionParameter - knotZero) / (knotPlus2 - knotZero);
|
323
|
-
var betaZero_2 = 1 - alphaZero_2;
|
324
|
-
var cpZero_2 = this.interpolatePoint(cpMinus1_1, cpZero_1, alphaZero_2, betaZero_2);
|
325
|
-
var alphaMinus1_2 = (subdivisionParameter - knotMinus1) / (knotPlus1 - knotMinus1);
|
326
|
-
var betaMinus1_2 = 1 - alphaMinus1_2;
|
327
|
-
var cpMinus1_2 = this.interpolatePoint(cpMinus2_1, cpMinus1_1, alphaMinus1_2, betaMinus1_2);
|
328
|
-
// De Boor's algorithm for degree 3 subdivision - Step 3
|
329
|
-
var alphaZero_3 = (subdivisionParameter - knotZero) / (knotPlus1 - knotZero);
|
330
|
-
var betaZero_3 = 1 - alphaZero_3;
|
331
|
-
var cpZero_3 = this.interpolatePoint(cpMinus1_2, cpZero_2, alphaZero_3, betaZero_3);
|
332
|
-
return [cpMinus2_1, cpMinus1_2, cpZero_3, cpZero_2, cpZero_1];
|
333
|
-
};
|
334
|
-
NurbsSubdivider.interpolatePoint = function (p1, p2, alpha, beta) {
|
335
|
-
return {
|
336
|
-
x: beta * p1.x + alpha * p2.x,
|
337
|
-
y: beta * p1.y + alpha * p2.y,
|
338
|
-
z: beta * p1.z + alpha * p2.z
|
339
|
-
};
|
340
|
-
};
|
341
|
-
NurbsSubdivider.constructSubdividedCurves = function (controlPoints, knotVector, intervalStart, subdivisionParameter, subdividedPoints) {
|
342
|
-
var dimensions = controlPoints[0].length;
|
343
|
-
var _a = __read(subdividedPoints, 5), cpMinus2_1 = _a[0], cpMinus1_2 = _a[1], cpZero_3 = _a[2], cpZero_2 = _a[3], cpZero_1 = _a[4];
|
344
|
-
// Construct first subdivided curve (before subdivision point)
|
345
|
-
var firstCurveControlPoints = this.buildFirstCurveControlPoints(controlPoints, intervalStart, [cpMinus2_1, cpMinus1_2, cpZero_3], dimensions);
|
346
|
-
var firstCurveKnots = this.buildFirstCurveKnots(knotVector, intervalStart, subdivisionParameter);
|
347
|
-
// Construct second subdivided curve (after subdivision point)
|
348
|
-
var secondCurveControlPoints = this.buildSecondCurveControlPoints(controlPoints, intervalStart, [cpZero_3, cpZero_2, cpZero_1], dimensions);
|
349
|
-
var secondCurveKnots = this.buildSecondCurveKnots(knotVector, intervalStart, subdivisionParameter);
|
350
|
-
return [
|
351
|
-
{
|
352
|
-
points: firstCurveControlPoints,
|
353
|
-
knots: firstCurveKnots,
|
354
|
-
degree: SPLINE_DEGREE
|
355
|
-
},
|
356
|
-
{
|
357
|
-
points: secondCurveControlPoints,
|
358
|
-
knots: secondCurveKnots,
|
359
|
-
degree: SPLINE_DEGREE
|
360
|
-
}
|
361
|
-
];
|
362
|
-
};
|
363
|
-
NurbsSubdivider.buildFirstCurveControlPoints = function (controlPoints, intervalStart, subdividedPoints, dimensions) {
|
364
|
-
var firstCurveControlPoints = [];
|
365
|
-
// Add control points before subdivision
|
366
|
-
for (var i = 0; i < intervalStart - 2; i++) {
|
367
|
-
firstCurveControlPoints[i] = controlPoints[i];
|
368
|
-
}
|
369
|
-
// Add subdivided control points
|
370
|
-
subdividedPoints.forEach(function (point) {
|
371
|
-
firstCurveControlPoints.push(dimensions >= 3 ? [point.x, point.y, point.z] : [point.x, point.y]);
|
372
|
-
});
|
373
|
-
return firstCurveControlPoints;
|
374
|
-
};
|
375
|
-
NurbsSubdivider.buildFirstCurveKnots = function (knotVector, intervalStart, subdivisionParameter) {
|
376
|
-
var firstCurveKnots = [];
|
377
|
-
// Add knots before subdivision
|
378
|
-
for (var i = 0; i < intervalStart + 1; i++) {
|
379
|
-
firstCurveKnots[i] = knotVector[i];
|
380
|
-
}
|
381
|
-
// Add subdivision parameter knots
|
382
|
-
firstCurveKnots.push(subdivisionParameter, subdivisionParameter, subdivisionParameter, subdivisionParameter);
|
383
|
-
return firstCurveKnots;
|
384
|
-
};
|
385
|
-
NurbsSubdivider.buildSecondCurveControlPoints = function (controlPoints, intervalStart, subdividedPoints, dimensions) {
|
386
|
-
var secondCurveControlPoints = [];
|
387
|
-
// Add subdivided control points
|
388
|
-
subdividedPoints.forEach(function (point) {
|
389
|
-
secondCurveControlPoints.push(dimensions >= 3 ? [point.x, point.y, point.z] : [point.x, point.y]);
|
390
|
-
});
|
391
|
-
// Add remaining control points
|
392
|
-
for (var i = intervalStart; i < controlPoints.length; i++) {
|
393
|
-
secondCurveControlPoints[i + 3 - intervalStart] = controlPoints[i];
|
394
|
-
}
|
395
|
-
return secondCurveControlPoints;
|
396
|
-
};
|
397
|
-
NurbsSubdivider.buildSecondCurveKnots = function (knotVector, intervalStart, subdivisionParameter) {
|
398
|
-
var secondCurveKnots = [
|
399
|
-
subdivisionParameter,
|
400
|
-
subdivisionParameter,
|
401
|
-
subdivisionParameter,
|
402
|
-
subdivisionParameter
|
403
|
-
];
|
404
|
-
for (var i = intervalStart + 1; i < knotVector.length; i++) {
|
405
|
-
secondCurveKnots[i + 3 - intervalStart] = knotVector[i];
|
406
|
-
}
|
407
|
-
return secondCurveKnots;
|
408
|
-
};
|
409
|
-
return NurbsSubdivider;
|
410
|
-
}());
|
411
|
-
/**
|
412
|
-
* Main spline utility class
|
413
|
-
*/
|
414
|
-
var AcGeSplineUtil = /** @class */ (function () {
|
415
|
-
function AcGeSplineUtil() {
|
416
|
-
}
|
417
|
-
/**
|
418
|
-
* Creates a NURBS curve from fit points using the specified knot parameterization
|
419
|
-
* @param fitPoints Array of fit points in 3D space
|
420
|
-
* @param knotParameterization Type of knot parameterization ('Uniform', 'Chord', or 'SqrtChord')
|
421
|
-
* @returns A NURBS curve object or undefined if insufficient points
|
422
|
-
*/
|
423
|
-
AcGeSplineUtil.createByFitPoints = function (fitPoints, knotParameterization) {
|
424
|
-
if (knotParameterization === void 0) { knotParameterization = 'Uniform'; }
|
425
|
-
if (fitPoints.length < MIN_FIT_POINTS_FOR_SPLINE) {
|
426
|
-
return undefined;
|
427
|
-
}
|
428
|
-
var closedSplineData = this.convertClosedFitPointsToControlPoints(fitPoints, knotParameterization);
|
429
|
-
var nurbsCurve = verb.geom.NurbsCurve.byKnotsControlPointsWeights(closedSplineData.degree, closedSplineData.knots, closedSplineData.points, closedSplineData.weights);
|
430
|
-
return nurbsCurve;
|
431
|
-
};
|
432
|
-
/**
|
433
|
-
* Converts closed fit points to control points for NURBS curve creation
|
434
|
-
* @param fitPoints Array of fit points defining the curve
|
435
|
-
* @param knotParameterization Type of knot parameterization
|
436
|
-
* @returns NURBS curve data with control points, weights, knots, and degree
|
437
|
-
*/
|
438
|
-
AcGeSplineUtil.convertClosedFitPointsToControlPoints = function (fitPoints, knotParameterization) {
|
439
|
-
var cleanedFitPoints = this.removeDuplicateEndPoint(fitPoints);
|
440
|
-
var closedSplineData = this.createClosedSplineInterpolation(cleanedFitPoints, knotParameterization);
|
441
|
-
return this.convertClosedNurbsToClamped(closedSplineData);
|
442
|
-
};
|
443
|
-
AcGeSplineUtil.removeDuplicateEndPoint = function (fitPoints) {
|
444
|
-
var startPoint = fitPoints[0];
|
445
|
-
var endPoint = fitPoints[fitPoints.length - 1];
|
446
|
-
if (startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1]) {
|
447
|
-
return fitPoints.slice(0, -1);
|
448
|
-
}
|
449
|
-
return fitPoints;
|
450
|
-
};
|
451
|
-
AcGeSplineUtil.createClosedSplineInterpolation = function (fitPoints, knotParameterization) {
|
452
|
-
var fitPointCount = fitPoints.length;
|
453
|
-
var controlPointCount = fitPointCount + CLOSED_SPLINE_EXTRA_CONTROL_POINTS;
|
454
|
-
var knotVectorSize = fitPointCount + CLOSED_SPLINE_EXTRA_CONTROL_POINTS + SPLINE_DEGREE + 1;
|
455
|
-
// Generate knot vector
|
456
|
-
var knotVector = KnotVectorGenerator.generate(fitPoints, knotParameterization, knotVectorSize);
|
457
|
-
// Extract parameter values for fit points
|
458
|
-
var parameterValues = knotVector.slice(SPLINE_DEGREE, SPLINE_DEGREE + fitPointCount);
|
459
|
-
// Build basis matrix
|
460
|
-
var basisMatrix = BasisMatrixBuilder.buildBasisMatrix(fitPoints, knotVector, parameterValues);
|
461
|
-
var reducedBasisMatrix = BasisMatrixBuilder.reduceForClosedSpline(basisMatrix, fitPointCount);
|
462
|
-
// Solve for control points
|
463
|
-
var solvedControlPoints = ControlPointCalculator.solveControlPoints(reducedBasisMatrix, fitPoints);
|
464
|
-
var controlPoints = ControlPointCalculator.constructControlPoints(solvedControlPoints, fitPointCount, fitPoints[0].length);
|
465
|
-
// Create weights
|
466
|
-
var weights = ControlPointCalculator.createUniformWeights(controlPointCount);
|
467
|
-
return {
|
468
|
-
points: controlPoints,
|
469
|
-
weights: weights,
|
470
|
-
knots: knotVector,
|
471
|
-
degree: SPLINE_DEGREE
|
472
|
-
};
|
473
|
-
};
|
474
|
-
AcGeSplineUtil.convertClosedNurbsToClamped = function (closedSplineData) {
|
475
|
-
var splineDegree = closedSplineData.degree;
|
476
|
-
var startParameter = closedSplineData.knots[splineDegree];
|
477
|
-
var endParameter = closedSplineData.knots[closedSplineData.knots.length - splineDegree - 1];
|
478
|
-
if (splineDegree === SPLINE_DEGREE) {
|
479
|
-
var subdividedCurves = NurbsSubdivider.subdivideDegree3(closedSplineData.points, closedSplineData.knots, startParameter);
|
480
|
-
subdividedCurves = NurbsSubdivider.subdivideDegree3(subdividedCurves[1].points, subdividedCurves[1].knots, endParameter);
|
481
|
-
return subdividedCurves[0];
|
482
|
-
}
|
483
|
-
return closedSplineData;
|
484
|
-
};
|
485
|
-
return AcGeSplineUtil;
|
486
|
-
}());
|
487
|
-
export { AcGeSplineUtil };
|
488
|
-
// Export the main function for backward compatibility
|
489
|
-
export var createByFitPoints = AcGeSplineUtil.createByFitPoints;
|
490
|
-
export var convertClosedFitPointsToControlPoints = AcGeSplineUtil.convertClosedFitPointsToControlPoints;
|
491
|
-
//# sourceMappingURL=AcGeSplineUtil.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"AcGeSplineUtil.js","sourceRoot":"","sources":["../../src/util/AcGeSplineUtil.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,OAAO,IAAI,MAAM,gBAAgB,CAAA;AAIjC,YAAY;AACZ,IAAM,aAAa,GAAG,CAAC,CAAA;AACvB,IAAM,yBAAyB,GAAG,CAAC,CAAA;AACnC,IAAM,kCAAkC,GAAG,CAAC,CAAA;AAqB5C;;GAEG;AACH;IAAA;IA+FA,CAAC;IA9FC;;OAEG;IACI,oCAAe,GAAtB,UACE,UAAoB,EACpB,SAAiB,EACjB,cAAsB,EACtB,iBAAyB;QAEzB,IAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,CAAA;QAC7E,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QAEhE,OAAO,IAAI,CAAC,qBAAqB,CAC/B,cAAc,EACd,iBAAiB,EACjB,QAAQ,CAAC,KAAK,EACd,KAAK,CACN,CAAA;IACH,CAAC;IAEc,qCAAgB,GAA/B,UACE,UAAoB,EACpB,SAAiB,EACjB,cAAsB;QAEtB,IAAI,iBAAiB,GAAG,CAAC,CAAA;QACzB,IAAI,eAAe,GAAG,SAAS,CAAA;QAE/B,OAAO,eAAe,GAAG,iBAAiB,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAM,WAAW,GAAG,CAAC,GAAG,GAAG,CAAC,eAAe,GAAG,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAA;YACrE,IAAI,UAAU,CAAC,WAAW,CAAC,GAAG,cAAc,EAAE,CAAC;gBAC7C,eAAe,GAAG,WAAW,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACN,iBAAiB,GAAG,WAAW,CAAA;YACjC,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAA;IACrC,CAAC;IAEc,sCAAiB,GAAhC,UAAiC,UAAoB,EAAE,aAAqB;QAC1E,OAAO;YACL,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,aAAa;YAC5C,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,aAAa;YAC5C,UAAU,CAAC,aAAa,CAAC,EAAM,WAAW;YAC1C,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,YAAY;YAC3C,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,YAAY;YAC3C,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,CAAE,YAAY;SAC5C,CAAA;IACH,CAAC;IAEc,0CAAqB,GAApC,UACE,cAAsB,EACtB,iBAAyB,EACzB,aAAqB,EACrB,KAAe;QAET,IAAA,KAAA,OAAsE,KAAK,IAAA,EAA1E,UAAU,QAAA,EAAE,UAAU,QAAA,EAAE,QAAQ,QAAA,EAAE,SAAS,QAAA,EAAE,SAAS,QAAA,EAAE,SAAS,QAAS,CAAA;QAEjF,mCAAmC;QACnC,IAAM,gBAAgB,GAAG,aAAa,GAAG,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACxE,IAAI,gBAAgB,GAAG,aAAa,GAAG,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACtE,IAAI,gBAAgB,GAAG,aAAa,GAAG,CAAC,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACtE,IAAI,cAAc,GAAG,aAAa,KAAK,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAEhE,uDAAuD;QACvD,IAAI,KAAK,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAA;QAChE,IAAI,IAAI,GAAG,CAAC,GAAG,KAAK,CAAA;QACpB,cAAc,GAAG,IAAI,GAAG,gBAAgB,GAAG,KAAK,GAAG,cAAc,CAAA;QAEjE,KAAK,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,CAAA;QAChE,IAAI,GAAG,CAAC,GAAG,KAAK,CAAA;QAChB,gBAAgB,GAAG,IAAI,GAAG,gBAAgB,GAAG,KAAK,GAAG,gBAAgB,CAAA;QAErE,KAAK,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,CAAA;QAChE,IAAI,GAAG,CAAC,GAAG,KAAK,CAAA;QAChB,gBAAgB,GAAG,IAAI,GAAG,gBAAgB,GAAG,KAAK,GAAG,gBAAgB,CAAA;QAErE,uDAAuD;QACvD,KAAK,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAA;QAC5D,IAAI,GAAG,CAAC,GAAG,KAAK,CAAA;QAChB,cAAc,GAAG,IAAI,GAAG,gBAAgB,GAAG,KAAK,GAAG,cAAc,CAAA;QAEjE,KAAK,GAAG,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,CAAA;QAChE,IAAI,GAAG,CAAC,GAAG,KAAK,CAAA;QAChB,gBAAgB,GAAG,IAAI,GAAG,gBAAgB,GAAG,KAAK,GAAG,gBAAgB,CAAA;QAErE,uDAAuD;QACvD,KAAK,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAA;QAC5D,IAAI,GAAG,CAAC,GAAG,KAAK,CAAA;QAChB,cAAc,GAAG,IAAI,GAAG,gBAAgB,GAAG,KAAK,GAAG,cAAc,CAAA;QAEjE,OAAO,cAAc,CAAA;IACvB,CAAC;IACH,2BAAC;AAAD,CAAC,AA/FD,IA+FC;AAED;;GAEG;AACH;IAAA;IAkEA,CAAC;IAjEC;;OAEG;IACI,4BAAQ,GAAf,UACE,SAAqB,EACrB,oBAAkD,EAClD,cAAsB;QAEtB,QAAQ,oBAAoB,EAAE,CAAC;YAC7B,KAAK,SAAS;gBACZ,OAAO,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAA;YACvD,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;YAChE,KAAK,WAAW;gBACd,OAAO,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,cAAc,CAAC,CAAA;YACpE;gBACE,MAAM,IAAI,KAAK,CAAC,6CAAsC,oBAAoB,CAAE,CAAC,CAAA;QACjF,CAAC;IACH,CAAC;IAEc,6CAAyB,GAAxC,UAAyC,cAAsB;QAC7D,IAAM,UAAU,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACnB,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAEc,2CAAuB,GAAtC,UAAuC,SAAqB,EAAE,cAAsB;QAClF,IAAM,UAAU,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;QAC5C,IAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAA;QACtC,IAAI,kBAAkB,GAAG,CAAC,CAAA;QAE1B,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC,CAAA;YACjE,IAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC,CAAA;YACjE,IAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC5D,kBAAkB,IAAI,aAAa,CAAA;YACnC,UAAU,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAA;QACpC,CAAC;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;IAEc,+CAA2B,GAA1C,UAA2C,SAAqB,EAAE,cAAsB;QACtF,IAAM,UAAU,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;QAC5C,IAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAA;QACtC,IAAI,kBAAkB,GAAG,CAAC,CAAA;QAE1B,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,IAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC,CAAA;YACjE,IAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC,CAAA;YACjE,IAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;YACvE,kBAAkB,IAAI,aAAa,CAAA;YACnC,UAAU,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAA;QACpC,CAAC;QAED,OAAO,UAAU,CAAA;IACnB,CAAC;IAEc,qCAAiB,GAAhC,UAAiC,MAAgB,EAAE,MAAgB;QACjE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC3F,CAAC;IACH,0BAAC;AAAD,CAAC,AAlED,IAkEC;AAED;;GAEG;AACH;IAAA;IA+CA,CAAC;IA9CC;;OAEG;IACI,mCAAgB,GAAvB,UACE,SAAqB,EACrB,UAAoB,EACpB,eAAyB;QAEzB,IAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAA;QACtC,IAAM,iBAAiB,GAAG,aAAa,GAAG,kCAAkC,CAAA;QAC5E,IAAM,WAAW,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;QAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;YAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,eAAe,CACtD,UAAU,EACV,iBAAiB,EACjB,eAAe,CAAC,CAAC,CAAC,EAClB,CAAC,CACF,CAAA;YACH,CAAC;QACH,CAAC;QAED,OAAO,WAAW,CAAA;IACpB,CAAC;IAED;;OAEG;IACI,wCAAqB,GAA5B,UAA6B,WAAuB,EAAE,aAAqB;QACzE,IAAM,kBAAkB,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;QAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,kBAAkB,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;YAChD,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;YAC5E,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YAChF,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YAEhF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IACH,yBAAC;AAAD,CAAC,AA/CD,IA+CC;AAED;;GAEG;AACH;IAAA;IA2DA,CAAC;IA1DC;;OAEG;IACI,yCAAkB,GAAzB,UACE,kBAA8B,EAC9B,SAAqB;QAErB,IAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;QACtC,IAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAA;QACtC,IAAM,mBAAmB,GAAe,EAAE,CAAA;QAE1C,4CAA4C;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAM,eAAe,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;YAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,eAAe,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACtC,CAAC;YAED,+CAA+C;YAC/C,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAA;QACnF,CAAC;QAED,OAAO,mBAAmB,CAAA;IAC5B,CAAC;IAED;;OAEG;IACI,6CAAsB,GAA7B,UACE,mBAA+B,EAC/B,aAAqB,EACrB,UAAkB;QAElB,IAAM,aAAa,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,CAAA;QAE9C,8CAA8C;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,aAAa,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC;gBAChC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnF,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5D,CAAC;QAED,iDAAiD;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kCAAkC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5D,aAAa,CAAC,CAAC,GAAG,aAAa,CAAC,GAAG,UAAU,IAAI,CAAC;gBAChD,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnF,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5D,CAAC;QAED,OAAO,aAAa,CAAA;IACtB,CAAC;IAED;;OAEG;IACI,2CAAoB,GAA3B,UAA4B,iBAAyB;QACnD,OAAO,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAC7C,CAAC;IACH,6BAAC;AAAD,CAAC,AA3DD,IA2DC;AAED;;GAEG;AACH;IAAA;IAkRA,CAAC;IAjRC;;OAEG;IACI,gCAAgB,GAAvB,UACE,aAAyB,EACzB,UAAoB,EACpB,oBAA4B;QAE5B,IAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;QAC9F,IAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QAChE,IAAM,kBAAkB,GAAG,IAAI,CAAC,8BAA8B,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;QAE7F,IAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CACnD,oBAAoB,EACpB,KAAK,EACL,kBAAkB,CACnB,CAAA;QAED,OAAO,IAAI,CAAC,yBAAyB,CACnC,aAAa,EACb,UAAU,EACV,QAAQ,CAAC,KAAK,EACd,oBAAoB,EACpB,gBAAgB,CACjB,CAAA;IACH,CAAC;IAEc,gCAAgB,GAA/B,UACE,UAAoB,EACpB,iBAAyB,EACzB,oBAA4B;QAE5B,IAAI,eAAe,GAAG,iBAAiB,CAAA;QACvC,IAAI,iBAAiB,GAAG,CAAC,CAAA;QAEzB,OAAO,eAAe,GAAG,iBAAiB,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAM,WAAW,GAAG,CAAC,GAAG,GAAG,CAAC,eAAe,GAAG,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAA;YACrE,IAAI,UAAU,CAAC,WAAW,CAAC,GAAG,oBAAoB,EAAE,CAAC;gBACnD,eAAe,GAAG,WAAW,CAAA;YAC/B,CAAC;iBAAM,CAAC;gBACN,iBAAiB,GAAG,WAAW,CAAA;YACjC,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAA;IACrC,CAAC;IAEc,iCAAiB,GAAhC,UAAiC,UAAoB,EAAE,aAAqB;QAC1E,OAAO;YACL,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,aAAa;YAC5C,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,aAAa;YAC5C,UAAU,CAAC,aAAa,CAAC,EAAM,WAAW;YAC1C,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,YAAY;YAC3C,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,EAAE,YAAY;YAC3C,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,CAAE,YAAY;SAC5C,CAAA;IACH,CAAC;IAEc,8CAA8B,GAA7C,UACE,aAAyB,EACzB,aAAqB;QAErB,IAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;QAE1C,OAAO;YACL;gBACE,CAAC,EAAE,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,CAAC,EAAE,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7D;YACD;gBACE,CAAC,EAAE,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,CAAC,EAAE,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7D;YACD;gBACE,CAAC,EAAE,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,CAAC,EAAE,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7D;YACD;gBACE,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;gBAClC,CAAC,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACzD;SACF,CAAA;IACH,CAAC;IAEc,uCAAuB,GAAtC,UACE,oBAA4B,EAC5B,KAAe,EACf,aAAwB;QAElB,IAAA,KAAA,OAAsE,KAAK,IAAA,EAA1E,UAAU,QAAA,EAAE,UAAU,QAAA,EAAE,QAAQ,QAAA,EAAE,SAAS,QAAA,EAAE,SAAS,QAAA,EAAE,SAAS,QAAS,CAAA;QAC3E,IAAA,KAAA,OAAyC,aAAa,IAAA,EAArD,QAAQ,QAAA,EAAE,QAAQ,QAAA,EAAE,QAAQ,QAAA,EAAE,MAAM,QAAiB,CAAA;QAE5D,wDAAwD;QACxD,IAAM,WAAW,GAAG,CAAC,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAA;QAC9E,IAAM,UAAU,GAAG,CAAC,GAAG,WAAW,CAAA;QAClC,IAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QAEjF,IAAM,aAAa,GAAG,CAAC,oBAAoB,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,CAAA;QACpF,IAAM,YAAY,GAAG,CAAC,GAAG,aAAa,CAAA;QACtC,IAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,CAAC,CAAA;QAEzF,IAAM,aAAa,GAAG,CAAC,oBAAoB,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,CAAA;QACpF,IAAM,YAAY,GAAG,CAAC,GAAG,aAAa,CAAA;QACtC,IAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,CAAC,CAAA;QAEzF,wDAAwD;QACxD,IAAM,WAAW,GAAG,CAAC,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAA;QAC9E,IAAM,UAAU,GAAG,CAAC,GAAG,WAAW,CAAA;QAClC,IAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QAErF,IAAM,aAAa,GAAG,CAAC,oBAAoB,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,CAAA;QACpF,IAAM,YAAY,GAAG,CAAC,GAAG,aAAa,CAAA;QACtC,IAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,CAAC,CAAA;QAE7F,wDAAwD;QACxD,IAAM,WAAW,GAAG,CAAC,oBAAoB,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAA;QAC9E,IAAM,UAAU,GAAG,CAAC,GAAG,WAAW,CAAA;QAClC,IAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QAErF,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC/D,CAAC;IAEc,gCAAgB,GAA/B,UAAgC,EAAW,EAAE,EAAW,EAAE,KAAa,EAAE,IAAY;QACnF,OAAO;YACL,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;YAC7B,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;YAC7B,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC;SAC9B,CAAA;IACH,CAAC;IAEc,yCAAyB,GAAxC,UACE,aAAyB,EACzB,UAAoB,EACpB,aAAqB,EACrB,oBAA4B,EAC5B,gBAA2B;QAE3B,IAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;QACpC,IAAA,KAAA,OAAyD,gBAAgB,IAAA,EAAxE,UAAU,QAAA,EAAE,UAAU,QAAA,EAAE,QAAQ,QAAA,EAAE,QAAQ,QAAA,EAAE,QAAQ,QAAoB,CAAA;QAE/E,8DAA8D;QAC9D,IAAM,uBAAuB,GAAG,IAAI,CAAC,4BAA4B,CAC/D,aAAa,EACb,aAAa,EACb,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,CAAC,EAClC,UAAU,CACX,CAAA;QAED,IAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAC/C,UAAU,EACV,aAAa,EACb,oBAAoB,CACrB,CAAA;QAED,8DAA8D;QAC9D,IAAM,wBAAwB,GAAG,IAAI,CAAC,6BAA6B,CACjE,aAAa,EACb,aAAa,EACb,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAC9B,UAAU,CACX,CAAA;QAED,IAAM,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CACjD,UAAU,EACV,aAAa,EACb,oBAAoB,CACrB,CAAA;QAED,OAAO;YACL;gBACE,MAAM,EAAE,uBAAuB;gBAC/B,KAAK,EAAE,eAAe;gBACtB,MAAM,EAAE,aAAa;aACtB;YACD;gBACE,MAAM,EAAE,wBAAwB;gBAChC,KAAK,EAAE,gBAAgB;gBACvB,MAAM,EAAE,aAAa;aACtB;SACF,CAAA;IACH,CAAC;IAEc,4CAA4B,GAA3C,UACE,aAAyB,EACzB,aAAqB,EACrB,gBAA2B,EAC3B,UAAkB;QAElB,IAAM,uBAAuB,GAAe,EAAE,CAAA;QAE9C,wCAAwC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,uBAAuB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QAC/C,CAAC;QAED,gCAAgC;QAChC,gBAAgB,CAAC,OAAO,CAAC,UAAA,KAAK;YAC5B,uBAAuB,CAAC,IAAI,CAC1B,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CACnE,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,uBAAuB,CAAA;IAChC,CAAC;IAEc,oCAAoB,GAAnC,UACE,UAAoB,EACpB,aAAqB,EACrB,oBAA4B;QAE5B,IAAM,eAAe,GAAa,EAAE,CAAA;QAEpC,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,eAAe,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QACpC,CAAC;QAED,kCAAkC;QAClC,eAAe,CAAC,IAAI,CAClB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,CACrB,CAAA;QAED,OAAO,eAAe,CAAA;IACxB,CAAC;IAEc,6CAA6B,GAA5C,UACE,aAAyB,EACzB,aAAqB,EACrB,gBAA2B,EAC3B,UAAkB;QAElB,IAAM,wBAAwB,GAAe,EAAE,CAAA;QAE/C,gCAAgC;QAChC,gBAAgB,CAAC,OAAO,CAAC,UAAA,KAAK;YAC5B,wBAAwB,CAAC,IAAI,CAC3B,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CACnE,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,+BAA+B;QAC/B,KAAK,IAAI,CAAC,GAAG,aAAa,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1D,wBAAwB,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QACpE,CAAC;QAED,OAAO,wBAAwB,CAAA;IACjC,CAAC;IAEc,qCAAqB,GAApC,UACE,UAAoB,EACpB,aAAqB,EACrB,oBAA4B;QAE5B,IAAM,gBAAgB,GAAG;YACvB,oBAAoB;YACpB,oBAAoB;YACpB,oBAAoB;YACpB,oBAAoB;SACrB,CAAA;QAED,KAAK,IAAI,CAAC,GAAG,aAAa,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3D,gBAAgB,CAAC,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;QACzD,CAAC;QAED,OAAO,gBAAgB,CAAA;IACzB,CAAC;IACH,sBAAC;AAAD,CAAC,AAlRD,IAkRC;AAED;;GAEG;AACH;IAAA;IA6GA,CAAC;IA5GC;;;;;OAKG;IACI,gCAAiB,GAAxB,UACE,SAAqB,EACrB,oBAA8D;QAA9D,qCAAA,EAAA,gCAA8D;QAE9D,IAAI,SAAS,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;YACjD,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,IAAM,gBAAgB,GAAG,IAAI,CAAC,qCAAqC,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAA;QACpG,IAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,2BAA2B,CACjE,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,KAAK,EACtB,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,OAAO,CACzB,CAAA;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED;;;;;OAKG;IACI,oDAAqC,GAA5C,UACE,SAAqB,EACrB,oBAAkD;QAElD,IAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAA;QAChE,IAAM,gBAAgB,GAAG,IAAI,CAAC,+BAA+B,CAAC,gBAAgB,EAAE,oBAAoB,CAAC,CAAA;QACrG,OAAO,IAAI,CAAC,2BAA2B,CAAC,gBAAgB,CAAC,CAAA;IAC3D,CAAC;IAEc,sCAAuB,GAAtC,UAAuC,SAAqB;QAC1D,IAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;QAC/B,IAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QAEhD,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC/B,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAEc,8CAA+B,GAA9C,UACE,SAAqB,EACrB,oBAAkD;QAElD,IAAM,aAAa,GAAG,SAAS,CAAC,MAAM,CAAA;QACtC,IAAM,iBAAiB,GAAG,aAAa,GAAG,kCAAkC,CAAA;QAC5E,IAAM,cAAc,GAAG,aAAa,GAAG,kCAAkC,GAAG,aAAa,GAAG,CAAC,CAAA;QAE7F,uBAAuB;QACvB,IAAM,UAAU,GAAG,mBAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,oBAAoB,EAAE,cAAc,CAAC,CAAA;QAEhG,0CAA0C;QAC1C,IAAM,eAAe,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,GAAG,aAAa,CAAC,CAAA;QAEtF,qBAAqB;QACrB,IAAM,WAAW,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,SAAS,EAAE,UAAU,EAAE,eAAe,CAAC,CAAA;QAC/F,IAAM,kBAAkB,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,WAAW,EAAE,aAAa,CAAC,CAAA;QAE/F,2BAA2B;QAC3B,IAAM,mBAAmB,GAAG,sBAAsB,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAA;QACpG,IAAM,aAAa,GAAG,sBAAsB,CAAC,sBAAsB,CACjE,mBAAmB,EACnB,aAAa,EACb,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CACpB,CAAA;QAED,iBAAiB;QACjB,IAAM,OAAO,GAAG,sBAAsB,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,CAAA;QAE9E,OAAO;YACL,MAAM,EAAE,aAAa;YACrB,OAAO,SAAA;YACP,KAAK,EAAE,UAAU;YACjB,MAAM,EAAE,aAAa;SACtB,CAAA;IACH,CAAC;IAEc,0CAA2B,GAA1C,UAA2C,gBAAgC;QACzE,IAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAA;QAC5C,IAAM,cAAc,GAAG,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAC3D,IAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,GAAG,CAAC,CAAC,CAAA;QAE7F,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;YACnC,IAAI,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,CACrD,gBAAgB,CAAC,MAAM,EACvB,gBAAgB,CAAC,KAAK,EACtB,cAAc,CACf,CAAA;YACD,gBAAgB,GAAG,eAAe,CAAC,gBAAgB,CACjD,gBAAgB,CAAC,CAAC,CAAC,CAAC,MAAM,EAC1B,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,EACzB,YAAY,CACb,CAAA;YACD,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC;QAED,OAAO,gBAAgB,CAAA;IACzB,CAAC;IACH,qBAAC;AAAD,CAAC,AA7GD,IA6GC;;AAED,sDAAsD;AACtD,MAAM,CAAC,IAAM,iBAAiB,GAAG,cAAc,CAAC,iBAAiB,CAAA;AACjE,MAAM,CAAC,IAAM,qCAAqC,GAAG,cAAc,CAAC,qCAAqC,CAAA"}
|