@johnhenry/math 0.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 (242) hide show
  1. package/README.md +165 -0
  2. package/dist/Bivector4.d.ts +52 -0
  3. package/dist/Bivector4.d.ts.map +1 -0
  4. package/dist/Bivector4.js +105 -0
  5. package/dist/Bivector4.js.map +1 -0
  6. package/dist/CellGraph.d.ts +259 -0
  7. package/dist/CellGraph.d.ts.map +1 -0
  8. package/dist/CellGraph.js +637 -0
  9. package/dist/CellGraph.js.map +1 -0
  10. package/dist/Clifford4Internal.d.ts +35 -0
  11. package/dist/Clifford4Internal.d.ts.map +1 -0
  12. package/dist/Clifford4Internal.js +86 -0
  13. package/dist/Clifford4Internal.js.map +1 -0
  14. package/dist/Combinatorics.d.ts +61 -0
  15. package/dist/Combinatorics.d.ts.map +1 -0
  16. package/dist/Combinatorics.js +186 -0
  17. package/dist/Combinatorics.js.map +1 -0
  18. package/dist/CombinatoricsGenerators.d.ts +44 -0
  19. package/dist/CombinatoricsGenerators.d.ts.map +1 -0
  20. package/dist/CombinatoricsGenerators.js +148 -0
  21. package/dist/CombinatoricsGenerators.js.map +1 -0
  22. package/dist/ComplexMath.d.ts +46 -0
  23. package/dist/ComplexMath.d.ts.map +1 -0
  24. package/dist/ComplexMath.js +98 -0
  25. package/dist/ComplexMath.js.map +1 -0
  26. package/dist/ComplexNumber.d.ts +174 -0
  27. package/dist/ComplexNumber.d.ts.map +1 -0
  28. package/dist/ComplexNumber.js +443 -0
  29. package/dist/ComplexNumber.js.map +1 -0
  30. package/dist/Cycle.d.ts +42 -0
  31. package/dist/Cycle.d.ts.map +1 -0
  32. package/dist/Cycle.js +120 -0
  33. package/dist/Cycle.js.map +1 -0
  34. package/dist/Decimal.d.ts +45 -0
  35. package/dist/Decimal.d.ts.map +1 -0
  36. package/dist/Decimal.js +135 -0
  37. package/dist/Decimal.js.map +1 -0
  38. package/dist/Distributions.d.ts +55 -0
  39. package/dist/Distributions.d.ts.map +1 -0
  40. package/dist/Distributions.js +222 -0
  41. package/dist/Distributions.js.map +1 -0
  42. package/dist/DualNumber.d.ts +42 -0
  43. package/dist/DualNumber.d.ts.map +1 -0
  44. package/dist/DualNumber.js +91 -0
  45. package/dist/DualNumber.js.map +1 -0
  46. package/dist/Environment.d.ts +44 -0
  47. package/dist/Environment.d.ts.map +1 -0
  48. package/dist/Environment.js +129 -0
  49. package/dist/Environment.js.map +1 -0
  50. package/dist/Expression.d.ts +19 -0
  51. package/dist/Expression.d.ts.map +1 -0
  52. package/dist/Expression.js +43 -0
  53. package/dist/Expression.js.map +1 -0
  54. package/dist/FFT.d.ts +21 -0
  55. package/dist/FFT.d.ts.map +1 -0
  56. package/dist/FFT.js +136 -0
  57. package/dist/FFT.js.map +1 -0
  58. package/dist/GeometricAlgebra4.d.ts +73 -0
  59. package/dist/GeometricAlgebra4.d.ts.map +1 -0
  60. package/dist/GeometricAlgebra4.js +115 -0
  61. package/dist/GeometricAlgebra4.js.map +1 -0
  62. package/dist/Geometry.d.ts +41 -0
  63. package/dist/Geometry.d.ts.map +1 -0
  64. package/dist/Geometry.js +167 -0
  65. package/dist/Geometry.js.map +1 -0
  66. package/dist/Graph.d.ts +72 -0
  67. package/dist/Graph.d.ts.map +1 -0
  68. package/dist/Graph.js +337 -0
  69. package/dist/Graph.js.map +1 -0
  70. package/dist/Graph3DUtils.d.ts +80 -0
  71. package/dist/Graph3DUtils.d.ts.map +1 -0
  72. package/dist/Graph3DUtils.js +156 -0
  73. package/dist/Graph3DUtils.js.map +1 -0
  74. package/dist/GraphUtils.d.ts +67 -0
  75. package/dist/GraphUtils.d.ts.map +1 -0
  76. package/dist/GraphUtils.js +72 -0
  77. package/dist/GraphUtils.js.map +1 -0
  78. package/dist/GroupTheory.d.ts +73 -0
  79. package/dist/GroupTheory.d.ts.map +1 -0
  80. package/dist/GroupTheory.js +194 -0
  81. package/dist/GroupTheory.js.map +1 -0
  82. package/dist/IntUtils.d.ts +33 -0
  83. package/dist/IntUtils.d.ts.map +1 -0
  84. package/dist/IntUtils.js +185 -0
  85. package/dist/IntUtils.js.map +1 -0
  86. package/dist/Interval.d.ts +44 -0
  87. package/dist/Interval.d.ts.map +1 -0
  88. package/dist/Interval.js +165 -0
  89. package/dist/Interval.js.map +1 -0
  90. package/dist/Lattice.d.ts +48 -0
  91. package/dist/Lattice.d.ts.map +1 -0
  92. package/dist/Lattice.js +65 -0
  93. package/dist/Lattice.js.map +1 -0
  94. package/dist/Logic.d.ts +22 -0
  95. package/dist/Logic.d.ts.map +1 -0
  96. package/dist/Logic.js +34 -0
  97. package/dist/Logic.js.map +1 -0
  98. package/dist/MatrixMath.d.ts +71 -0
  99. package/dist/MatrixMath.d.ts.map +1 -0
  100. package/dist/MatrixMath.js +302 -0
  101. package/dist/MatrixMath.js.map +1 -0
  102. package/dist/NumberTheory.d.ts +49 -0
  103. package/dist/NumberTheory.d.ts.map +1 -0
  104. package/dist/NumberTheory.js +230 -0
  105. package/dist/NumberTheory.js.map +1 -0
  106. package/dist/Numerical.d.ts +85 -0
  107. package/dist/Numerical.d.ts.map +1 -0
  108. package/dist/Numerical.js +343 -0
  109. package/dist/Numerical.js.map +1 -0
  110. package/dist/Permutation.d.ts +43 -0
  111. package/dist/Permutation.d.ts.map +1 -0
  112. package/dist/Permutation.js +142 -0
  113. package/dist/Permutation.js.map +1 -0
  114. package/dist/Polygon.d.ts +64 -0
  115. package/dist/Polygon.d.ts.map +1 -0
  116. package/dist/Polygon.js +221 -0
  117. package/dist/Polygon.js.map +1 -0
  118. package/dist/PolynomialRing.d.ts +74 -0
  119. package/dist/PolynomialRing.d.ts.map +1 -0
  120. package/dist/PolynomialRing.js +231 -0
  121. package/dist/PolynomialRing.js.map +1 -0
  122. package/dist/Quaternion.d.ts +37 -0
  123. package/dist/Quaternion.d.ts.map +1 -0
  124. package/dist/Quaternion.js +106 -0
  125. package/dist/Quaternion.js.map +1 -0
  126. package/dist/Rational.d.ts +34 -0
  127. package/dist/Rational.d.ts.map +1 -0
  128. package/dist/Rational.js +136 -0
  129. package/dist/Rational.js.map +1 -0
  130. package/dist/RealMath.d.ts +112 -0
  131. package/dist/RealMath.d.ts.map +1 -0
  132. package/dist/RealMath.js +262 -0
  133. package/dist/RealMath.js.map +1 -0
  134. package/dist/Rotor4.d.ts +180 -0
  135. package/dist/Rotor4.d.ts.map +1 -0
  136. package/dist/Rotor4.js +388 -0
  137. package/dist/Rotor4.js.map +1 -0
  138. package/dist/SpecialFunctions.d.ts +32 -0
  139. package/dist/SpecialFunctions.d.ts.map +1 -0
  140. package/dist/SpecialFunctions.js +161 -0
  141. package/dist/SpecialFunctions.js.map +1 -0
  142. package/dist/SpecialOperator.d.ts +21 -0
  143. package/dist/SpecialOperator.d.ts.map +1 -0
  144. package/dist/SpecialOperator.js +26 -0
  145. package/dist/SpecialOperator.js.map +1 -0
  146. package/dist/Statistics.d.ts +50 -0
  147. package/dist/Statistics.d.ts.map +1 -0
  148. package/dist/Statistics.js +131 -0
  149. package/dist/Statistics.js.map +1 -0
  150. package/dist/StringEvaluator.d.ts +48 -0
  151. package/dist/StringEvaluator.d.ts.map +1 -0
  152. package/dist/StringEvaluator.js +190 -0
  153. package/dist/StringEvaluator.js.map +1 -0
  154. package/dist/Structure.d.ts +130 -0
  155. package/dist/Structure.d.ts.map +1 -0
  156. package/dist/Structure.js +394 -0
  157. package/dist/Structure.js.map +1 -0
  158. package/dist/Symbolic.d.ts +501 -0
  159. package/dist/Symbolic.d.ts.map +1 -0
  160. package/dist/Symbolic.js +4077 -0
  161. package/dist/Symbolic.js.map +1 -0
  162. package/dist/Type.d.ts +31 -0
  163. package/dist/Type.d.ts.map +1 -0
  164. package/dist/Type.js +47 -0
  165. package/dist/Type.js.map +1 -0
  166. package/dist/Utilities.d.ts +27 -0
  167. package/dist/Utilities.d.ts.map +1 -0
  168. package/dist/Utilities.js +47 -0
  169. package/dist/Utilities.js.map +1 -0
  170. package/dist/Vec4.d.ts +39 -0
  171. package/dist/Vec4.d.ts.map +1 -0
  172. package/dist/Vec4.js +82 -0
  173. package/dist/Vec4.js.map +1 -0
  174. package/dist/Vector.d.ts +83 -0
  175. package/dist/Vector.d.ts.map +1 -0
  176. package/dist/Vector.js +173 -0
  177. package/dist/Vector.js.map +1 -0
  178. package/dist/VectorCalculus.d.ts +42 -0
  179. package/dist/VectorCalculus.d.ts.map +1 -0
  180. package/dist/VectorCalculus.js +82 -0
  181. package/dist/VectorCalculus.js.map +1 -0
  182. package/dist/VectorUtils.d.ts +172 -0
  183. package/dist/VectorUtils.d.ts.map +1 -0
  184. package/dist/VectorUtils.js +706 -0
  185. package/dist/VectorUtils.js.map +1 -0
  186. package/dist/differentiation-rules.d.ts +21 -0
  187. package/dist/differentiation-rules.d.ts.map +1 -0
  188. package/dist/differentiation-rules.js +52 -0
  189. package/dist/differentiation-rules.js.map +1 -0
  190. package/dist/index.d.ts +52 -0
  191. package/dist/index.d.ts.map +1 -0
  192. package/dist/index.js +66 -0
  193. package/dist/index.js.map +1 -0
  194. package/package.json +68 -0
  195. package/src/Bivector4.ts +136 -0
  196. package/src/CellGraph.ts +669 -0
  197. package/src/Clifford4Internal.ts +90 -0
  198. package/src/Combinatorics.ts +183 -0
  199. package/src/CombinatoricsGenerators.ts +144 -0
  200. package/src/ComplexMath.ts +162 -0
  201. package/src/ComplexNumber.ts +491 -0
  202. package/src/Cycle.ts +126 -0
  203. package/src/Decimal.ts +145 -0
  204. package/src/Distributions.ts +269 -0
  205. package/src/DualNumber.ts +105 -0
  206. package/src/Environment.ts +127 -0
  207. package/src/Expression.ts +48 -0
  208. package/src/FFT.ts +146 -0
  209. package/src/GeometricAlgebra4.ts +157 -0
  210. package/src/Geometry.ts +173 -0
  211. package/src/Graph.ts +337 -0
  212. package/src/Graph3DUtils.ts +269 -0
  213. package/src/GraphUtils.ts +159 -0
  214. package/src/GroupTheory.ts +214 -0
  215. package/src/IntUtils.ts +200 -0
  216. package/src/Interval.ts +171 -0
  217. package/src/Lattice.ts +87 -0
  218. package/src/Logic.ts +38 -0
  219. package/src/MatrixMath.ts +326 -0
  220. package/src/NumberTheory.ts +228 -0
  221. package/src/Numerical.ts +390 -0
  222. package/src/Permutation.ts +148 -0
  223. package/src/Polygon.ts +229 -0
  224. package/src/PolynomialRing.ts +242 -0
  225. package/src/Quaternion.ts +125 -0
  226. package/src/Rational.ts +148 -0
  227. package/src/RealMath.ts +346 -0
  228. package/src/Rotor4.ts +440 -0
  229. package/src/SpecialFunctions.ts +152 -0
  230. package/src/SpecialOperator.ts +28 -0
  231. package/src/Statistics.ts +170 -0
  232. package/src/StringEvaluator.ts +208 -0
  233. package/src/Structure.ts +481 -0
  234. package/src/Symbolic.ts +4313 -0
  235. package/src/Type.ts +48 -0
  236. package/src/Utilities.ts +49 -0
  237. package/src/Vec4.ts +98 -0
  238. package/src/Vector.ts +189 -0
  239. package/src/VectorCalculus.ts +87 -0
  240. package/src/VectorUtils.ts +797 -0
  241. package/src/differentiation-rules.ts +73 -0
  242. package/src/index.ts +140 -0
@@ -0,0 +1,394 @@
1
+ import { ComplexNumber } from "./ComplexNumber.js";
2
+ import { Decimal } from "./Decimal.js";
3
+ import { DualNumber } from "./DualNumber.js";
4
+ import { Quaternion } from "./Quaternion.js";
5
+ import { Rational } from "./Rational.js";
6
+ import { Vector } from "./Vector.js";
7
+ import { VectorUtils } from "./VectorUtils.js";
8
+ export class Structure {
9
+ _criteria;
10
+ _operations;
11
+ _inverses;
12
+ _identities;
13
+ _wrapMethod;
14
+ _equalityMethod;
15
+ constructor(options = {}) {
16
+ this._criteria = options.criteria ?? [];
17
+ this._operations = options.operations ?? [];
18
+ this._inverses = options.inverses ?? [];
19
+ this._identities = options.identities ?? [];
20
+ this._wrapMethod = options.wrap ?? ((x) => x);
21
+ this._equalityMethod = options.equality ?? ((a, b) => a === b);
22
+ }
23
+ // -- criteria ------------------------------------------------------------
24
+ criterion(index) {
25
+ return this._criteria[index];
26
+ }
27
+ isMember(element) {
28
+ return this._criteria.every((c) => c(element) !== false);
29
+ }
30
+ // -- operations ----------------------------------------------------------
31
+ operation(index) {
32
+ return this._operations[index];
33
+ }
34
+ /** Repeatedly apply `operation(operationIndex)` `power` times (using the inverse for negative powers). */
35
+ integerPower(scalar, power, operationIndex = 0) {
36
+ let result = this.identity(operationIndex);
37
+ const op = this.operation(operationIndex);
38
+ let s = scalar;
39
+ let p = power;
40
+ if (p < 0) {
41
+ p = -p;
42
+ s = this.inverse(operationIndex)(scalar);
43
+ }
44
+ for (let i = 0; i < p; i++)
45
+ result = op(result, s);
46
+ return result;
47
+ }
48
+ get add() {
49
+ return this._operations[0];
50
+ }
51
+ addPower(scalar, power) {
52
+ return this.integerPower(scalar, power, 0);
53
+ }
54
+ get multiply() {
55
+ return this._operations[1];
56
+ }
57
+ multiplyPower(scalar, power) {
58
+ return this.integerPower(scalar, power, 1);
59
+ }
60
+ // -- inverses ------------------------------------------------------------
61
+ inverse(index = 0) {
62
+ return this._inverses[index];
63
+ }
64
+ get negative() {
65
+ return this.inverse(0);
66
+ }
67
+ get reciprocal() {
68
+ return this.inverse(1);
69
+ }
70
+ subtract(a, b) {
71
+ return this.add(a, this.negative(b));
72
+ }
73
+ divide(a, b) {
74
+ return this.multiply(a, this.reciprocal(b));
75
+ }
76
+ // -- identities ----------------------------------------------------------
77
+ identity(index = 0) {
78
+ return this._identities[index];
79
+ }
80
+ get zero() {
81
+ return this._identities[0];
82
+ }
83
+ get one() {
84
+ return this._identities[1];
85
+ }
86
+ get wrap() {
87
+ return this._wrapMethod;
88
+ }
89
+ get equality() {
90
+ return this._equalityMethod;
91
+ }
92
+ // -- vectors -------------------------------------------------------------
93
+ contains(alpha, element) {
94
+ return VectorUtils.contains(alpha, element, this.equality);
95
+ }
96
+ wrapVector(alpha) {
97
+ return VectorUtils.transform(alpha, this.wrap);
98
+ }
99
+ addVector(alpha, beta) {
100
+ return VectorUtils.combine(alpha, beta, this.add, this.zero);
101
+ }
102
+ scaleVector(alpha, scalar) {
103
+ return VectorUtils.transform(alpha, (x) => this.multiply(scalar, x));
104
+ }
105
+ negativeVector(alpha) {
106
+ return VectorUtils.transform(alpha, this.negative);
107
+ }
108
+ reciprocalVector(alpha) {
109
+ return VectorUtils.transform(alpha, this.reciprocal);
110
+ }
111
+ inverseVector(alpha, index = 0) {
112
+ return VectorUtils.transform(alpha, this.inverse(index));
113
+ }
114
+ subtractVector(alpha, beta) {
115
+ return this.addVector(alpha, this.negativeVector(beta));
116
+ }
117
+ dotProduct(alpha, beta) {
118
+ const collapsable = VectorUtils.combine(alpha, beta, this.multiply, this.zero);
119
+ return VectorUtils.collapse(collapsable, this.add);
120
+ }
121
+ /** 3D cross product (bug fix: correct operands and index 2 for the z-component). */
122
+ crossProduct(alpha, beta) {
123
+ const a = [this.zero, this.zero, this.zero];
124
+ const b = [this.zero, this.zero, this.zero];
125
+ for (let idx = 0; idx < 3; idx++) {
126
+ if (idx < alpha.length && alpha[idx] != null)
127
+ a[idx] = alpha[idx];
128
+ if (idx < beta.length && beta[idx] != null)
129
+ b[idx] = beta[idx];
130
+ }
131
+ const i = this.subtract(this.multiply(a[1], b[2]), this.multiply(a[2], b[1]));
132
+ const j = this.subtract(this.multiply(a[2], b[0]), this.multiply(a[0], b[2]));
133
+ const k = this.subtract(this.multiply(a[0], b[1]), this.multiply(a[1], b[0]));
134
+ return Vector.fromArray([i, j, k]);
135
+ }
136
+ kroneckerProduct(A, B) {
137
+ let kronecker = VectorUtils.constantVector(A.length, null);
138
+ kronecker = VectorUtils.fillByIndex(kronecker, (i) => this.scaleVector(B, A[i]));
139
+ return VectorUtils.flattenSDLevels(kronecker, 2);
140
+ }
141
+ // -- matrices ------------------------------------------------------------
142
+ generateIdentity(height = 1, width = 1) {
143
+ return VectorUtils.generateIdentity(height, width, this.one, this.zero);
144
+ }
145
+ addMatrix(alpha, beta) {
146
+ return VectorUtils.combine(alpha, beta, (a, b) => this.addVector(a, b));
147
+ }
148
+ scaleMatrix(alpha, scalar) {
149
+ return VectorUtils.transformEndNodes(alpha, (x) => this.multiply(scalar, x));
150
+ }
151
+ negativeMatrix(alpha) {
152
+ return VectorUtils.transformEndNodes(alpha, (x) => this.negative(x));
153
+ }
154
+ subtractMatrix(alpha, beta) {
155
+ return this.addMatrix(alpha, this.negativeMatrix(beta));
156
+ }
157
+ scaleRow(alpha, index = 0, scalar) {
158
+ const newM = alpha.clone();
159
+ return VectorUtils.rowSet(newM, this.scaleVector(newM[index], scalar), index);
160
+ }
161
+ scaleColumn(alpha, index = 0, scalar) {
162
+ return VectorUtils.transpose(this.scaleRow(alpha, index, scalar));
163
+ }
164
+ trace(alpha) {
165
+ return VectorUtils.collapse(VectorUtils.diagonal(alpha), this.add);
166
+ }
167
+ kroneckerMatrixProduct(alpha, beta) {
168
+ let kronecker = VectorUtils.constantMatrix(VectorUtils.height(alpha), VectorUtils.width(alpha), null);
169
+ kronecker = VectorUtils.fillMatrixByIndex(kronecker, (i, j) => this.scaleMatrix(beta, alpha[i][j]));
170
+ return VectorUtils.breakBlock(kronecker);
171
+ }
172
+ multiplyMatrix(alpha, beta) {
173
+ const kroneckerList = new Vector();
174
+ for (let i = 0; i < VectorUtils.width(alpha); i++) {
175
+ kroneckerList.push(this.kroneckerMatrixProduct(VectorUtils.getColumn(alpha, i), VectorUtils.getRow(beta, i)));
176
+ }
177
+ return VectorUtils.collapse(kroneckerList, (a, b) => this.addMatrix(a, b));
178
+ }
179
+ /** Integer matrix power (bug fix: actually accumulates the factors). */
180
+ powerMatrix(alpha, power = 1) {
181
+ if (power === 0)
182
+ return this.generateIdentity(VectorUtils.height(alpha), VectorUtils.width(alpha));
183
+ const base = power > 0 ? alpha.clone() : this.invertMatrix(alpha);
184
+ const powerList = new Vector();
185
+ for (let i = 0; i < Math.abs(power); i++)
186
+ powerList.push(base.clone());
187
+ return VectorUtils.collapse(powerList, (a, b) => this.multiplyMatrix(a, b));
188
+ }
189
+ /**
190
+ * Determinant via Gaussian elimination with row-swap pivoting, O(n^3)
191
+ * instead of the previous O(n!) cofactor (Laplace) expansion.
192
+ */
193
+ determinant(alpha) {
194
+ if (VectorUtils.width(alpha) !== VectorUtils.height(alpha))
195
+ return this.zero;
196
+ const n = VectorUtils.width(alpha);
197
+ if (n < 2)
198
+ return alpha[0][0];
199
+ const mat = [...alpha].map((row) => [...row]);
200
+ let det = this.one;
201
+ let sign = this.one;
202
+ for (let col = 0; col < n; col++) {
203
+ if (this.equality(mat[col][col], this.zero)) {
204
+ let swap = -1;
205
+ for (let r = col + 1; r < n; r++) {
206
+ if (!this.equality(mat[r][col], this.zero)) {
207
+ swap = r;
208
+ break;
209
+ }
210
+ }
211
+ if (swap === -1)
212
+ return this.zero;
213
+ [mat[col], mat[swap]] = [mat[swap], mat[col]];
214
+ sign = this.negative(sign);
215
+ }
216
+ const pivot = mat[col][col];
217
+ det = this.multiply(det, pivot);
218
+ const pivotInv = this.reciprocal(pivot);
219
+ for (let r = col + 1; r < n; r++) {
220
+ const factor = this.multiply(mat[r][col], pivotInv);
221
+ if (this.equality(factor, this.zero))
222
+ continue;
223
+ for (let k = col; k < n; k++) {
224
+ mat[r][k] = this.subtract(mat[r][k], this.multiply(factor, mat[col][k]));
225
+ }
226
+ }
227
+ }
228
+ return this.multiply(sign, det);
229
+ }
230
+ permanent(alpha) {
231
+ if (VectorUtils.width(alpha) < 2)
232
+ return alpha[0][0];
233
+ const detList = new Vector();
234
+ for (let i = 0; i < VectorUtils.width(alpha); i++) {
235
+ const temp = VectorUtils.columnRemoved(VectorUtils.rowRemoved(alpha, 0), i);
236
+ detList.push(this.multiply(alpha[0][i], this.permanent(temp)));
237
+ }
238
+ return VectorUtils.collapse(detList, this.add);
239
+ }
240
+ /**
241
+ * Matrix inverse by Gauss-Jordan elimination over the structure's field
242
+ * operations, with a zero-pivot row swap (bug fix — the AS3 version had no
243
+ * pivoting and divided by a zero pivot).
244
+ */
245
+ invertMatrix(alpha, checkDeterminant = true) {
246
+ const n = VectorUtils.height(alpha);
247
+ const w = VectorUtils.width(alpha);
248
+ if (checkDeterminant && this.equality(this.determinant(alpha), this.zero)) {
249
+ return VectorUtils.constantMatrix(n, w, this.zero);
250
+ }
251
+ const mat = [...alpha].map((row) => [...row]);
252
+ const inv = [...this.generateIdentity(n, n)].map((row) => [...row]);
253
+ for (let col = 0; col < n; col++) {
254
+ if (this.equality(mat[col][col], this.zero)) {
255
+ let swap = -1;
256
+ for (let r = col + 1; r < n; r++) {
257
+ if (!this.equality(mat[r][col], this.zero)) {
258
+ swap = r;
259
+ break;
260
+ }
261
+ }
262
+ if (swap === -1)
263
+ continue; // singular column
264
+ [mat[col], mat[swap]] = [mat[swap], mat[col]];
265
+ [inv[col], inv[swap]] = [inv[swap], inv[col]];
266
+ }
267
+ const pivotInv = this.reciprocal(mat[col][col]);
268
+ for (let k = 0; k < n; k++) {
269
+ mat[col][k] = this.multiply(mat[col][k], pivotInv);
270
+ inv[col][k] = this.multiply(inv[col][k], pivotInv);
271
+ }
272
+ for (let r = 0; r < n; r++) {
273
+ if (r === col)
274
+ continue;
275
+ const f = mat[r][col];
276
+ for (let k = 0; k < n; k++) {
277
+ mat[r][k] = this.subtract(mat[r][k], this.multiply(f, mat[col][k]));
278
+ inv[r][k] = this.subtract(inv[r][k], this.multiply(f, inv[col][k]));
279
+ }
280
+ }
281
+ }
282
+ return Vector.fromArray(inv.map((row) => Vector.fromArray(row)));
283
+ }
284
+ // -- vector statistics (bug fix: the AS3 versions never returned) --------
285
+ vectorSum(alpha) {
286
+ return VectorUtils.collapse(alpha, this.add);
287
+ }
288
+ vectorProduct(alpha) {
289
+ return VectorUtils.collapse(alpha, this.multiply);
290
+ }
291
+ vectorCollapseOperation(alpha, index = 0) {
292
+ return VectorUtils.collapse(alpha, this.operation(index));
293
+ }
294
+ // -- ready-made structures -----------------------------------------------
295
+ /** The field of real numbers (JS `number`). */
296
+ static realField() {
297
+ return new Structure({
298
+ criteria: [(x) => typeof x === "number"],
299
+ operations: [(a, b) => a + b, (a, b) => a * b],
300
+ inverses: [(x) => -x, (x) => 1 / x],
301
+ identities: [0, 1],
302
+ equality: (a, b) => a === b,
303
+ wrap: (x) => Number(x),
304
+ });
305
+ }
306
+ /** The field of complex numbers ({@link ComplexNumber}). */
307
+ static complexField() {
308
+ return new Structure({
309
+ criteria: [(x) => x instanceof ComplexNumber],
310
+ operations: [(a, b) => a.add(b), (a, b) => a.multiply(b)],
311
+ inverses: [(x) => x.neg(), (x) => x.reciprocal()],
312
+ identities: [ComplexNumber.Zero, ComplexNumber.One],
313
+ equality: (a, b) => a.equals(b),
314
+ wrap: (x) => (x instanceof ComplexNumber ? x : new ComplexNumber(x)),
315
+ });
316
+ }
317
+ /**
318
+ * The ring of integers modulo `n` (Z/nZ). It is a field when `n` is prime; for
319
+ * a composite `n`, {@link reciprocal} returns `NaN` for non-invertible elements.
320
+ */
321
+ static integersModulo(n) {
322
+ const mod = (x) => ((x % n) + n) % n;
323
+ const modInverse = (a) => {
324
+ let [oldR, r] = [mod(a), n];
325
+ let [oldS, s] = [1, 0];
326
+ while (r !== 0) {
327
+ const q = Math.floor(oldR / r);
328
+ [oldR, r] = [r, oldR - q * r];
329
+ [oldS, s] = [s, oldS - q * s];
330
+ }
331
+ return oldR !== 1 ? NaN : mod(oldS);
332
+ };
333
+ return new Structure({
334
+ criteria: [(x) => typeof x === "number"],
335
+ operations: [(a, b) => mod(a + b), (a, b) => mod(a * b)],
336
+ inverses: [(x) => mod(-x), modInverse],
337
+ identities: [0, 1],
338
+ equality: (a, b) => mod(a) === mod(b),
339
+ wrap: (x) => mod(Number(x)),
340
+ });
341
+ }
342
+ /** The Boolean ring GF(2): XOR is addition, AND is multiplication (elements 0/1). */
343
+ static booleanRing() {
344
+ return Structure.integersModulo(2);
345
+ }
346
+ /** The field of exact rational numbers ({@link Rational}). */
347
+ static rationalField() {
348
+ return new Structure({
349
+ criteria: [(x) => x instanceof Rational],
350
+ operations: [(a, b) => a.add(b), (a, b) => a.multiply(b)],
351
+ inverses: [(x) => x.negate(), (x) => x.reciprocal()],
352
+ identities: [Rational.Zero, Rational.One],
353
+ equality: (a, b) => a.equals(b),
354
+ wrap: (x) => Rational.from(x),
355
+ });
356
+ }
357
+ /**
358
+ * The field of arbitrary-precision {@link Decimal}s. Division is approximate
359
+ * (rounded to `Decimal.DEFAULT_PRECISION` significant digits) — the one place
360
+ * this "field" isn't exact, matching `Decimal.divide` itself.
361
+ */
362
+ static decimalField() {
363
+ return new Structure({
364
+ criteria: [(x) => x instanceof Decimal],
365
+ operations: [(a, b) => a.add(b), (a, b) => a.multiply(b)],
366
+ inverses: [(x) => x.negate(), (x) => Decimal.One.divide(x)],
367
+ identities: [Decimal.Zero, Decimal.One],
368
+ equality: (a, b) => a.equals(b),
369
+ wrap: (x) => Decimal.from(x),
370
+ });
371
+ }
372
+ /** The (non-commutative) division ring of {@link Quaternion}s. */
373
+ static quaternionRing() {
374
+ return new Structure({
375
+ criteria: [(x) => x instanceof Quaternion],
376
+ operations: [(a, b) => a.add(b), (a, b) => a.multiply(b)],
377
+ inverses: [(x) => x.negate(), (x) => x.inverse()],
378
+ identities: [Quaternion.Zero, Quaternion.Identity],
379
+ equality: (a, b) => a.equals(b),
380
+ });
381
+ }
382
+ /** The commutative ring of {@link DualNumber}s (autodiff carrier). */
383
+ static dualNumbers() {
384
+ return new Structure({
385
+ criteria: [(x) => x instanceof DualNumber],
386
+ operations: [(a, b) => a.add(b), (a, b) => a.multiply(b)],
387
+ inverses: [(x) => x.negate(), (x) => new DualNumber(1, 0).divide(x)],
388
+ identities: [new DualNumber(0, 0), new DualNumber(1, 0)],
389
+ equality: (a, b) => a.value === b.value && a.deriv === b.deriv,
390
+ wrap: (x) => (x instanceof DualNumber ? x : DualNumber.constant(x)),
391
+ });
392
+ }
393
+ }
394
+ //# sourceMappingURL=Structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Structure.js","sourceRoot":"","sources":["../src/Structure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAe,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAoC5D,MAAM,OAAO,SAAS;IACH,SAAS,CAAuC;IAChD,WAAW,CAA2B;IACtC,SAAS,CAAqB;IAC9B,WAAW,CAAM;IACjB,WAAW,CAAoB;IAC/B,eAAe,CAA0B;IAE1D,YAAY,UAA+B,EAAE;QAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAM,CAAC,CAAC;QACnD,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,2EAA2E;IAE3E,SAAS,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAkC,CAAC;IAChE,CAAC;IAED,QAAQ,CAAC,OAAgB;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,2EAA2E;IAE3E,SAAS,CAAC,KAAa;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAsB,CAAC;IACtD,CAAC;IAED,0GAA0G;IAC1G,YAAY,CAAC,MAAS,EAAE,KAAa,EAAE,cAAc,GAAG,CAAC;QACvD,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG,MAAM,CAAC;QACf,IAAI,CAAC,GAAG,KAAK,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACV,CAAC,GAAG,CAAC,CAAC,CAAC;YACP,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAsB,CAAC;IAClD,CAAC;IACD,QAAQ,CAAC,MAAS,EAAE,KAAa;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAsB,CAAC;IAClD,CAAC;IACD,aAAa,CAAC,MAAS,EAAE,KAAa;QACpC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,2EAA2E;IAE3E,OAAO,CAAC,KAAK,GAAG,CAAC;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAgB,CAAC;IAC9C,CAAC;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,QAAQ,CAAC,CAAI,EAAE,CAAI;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,MAAM,CAAC,CAAI,EAAE,CAAI;QACf,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,2EAA2E;IAE3E,QAAQ,CAAC,KAAK,GAAG,CAAC;QAChB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAM,CAAC;IACtC,CAAC;IACD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAM,CAAC;IAClC,CAAC;IACD,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAM,CAAC;IAClC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IACD,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,2EAA2E;IAE3E,QAAQ,CAAC,KAAc,EAAE,OAAU;QACjC,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,KAAsB;QAC/B,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,SAAS,CAAC,KAAc,EAAE,IAAa;QACrC,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAY,CAAC;IAC1E,CAAC;IAED,WAAW,CAAC,KAAc,EAAE,MAAS;QACnC,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,cAAc,CAAC,KAAc;QAC3B,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,CAAC;IAED,gBAAgB,CAAC,KAAc;QAC7B,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAED,aAAa,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;QACrC,OAAO,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED,cAAc,CAAC,KAAc,EAAE,IAAa;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,UAAU,CAAC,KAAc,EAAE,IAAa;QACtC,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAY,CAAC;QAC1F,OAAO,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAM,CAAC;IAC1D,CAAC;IAED,oFAAoF;IACpF,YAAY,CAAC,KAAc,EAAE,IAAa;QACxC,MAAM,CAAC,GAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,GAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACjC,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI;gBAAE,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAM,CAAC;YACvE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI;gBAAE,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAM,CAAC;QACtE,CAAC;QACD,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC,CAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC,CAAM,CAAC,CAAC,CAAC;QAClG,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC,CAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC,CAAM,CAAC,CAAC,CAAC;QAClG,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC,CAAM,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,CAAC,CAAC,CAAC,CAAM,CAAC,CAAC,CAAC;QAClG,OAAO,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,gBAAgB,CAAC,CAAU,EAAE,CAAU;QACrC,IAAI,SAAS,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,EAAE,IAAe,CAAoB,CAAC;QACzF,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAM,CAAC,CAAC,CAAC;QACtF,OAAO,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC,CAAY,CAAC;IAC9D,CAAC;IAED,2EAA2E;IAE3E,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC;QACpC,OAAO,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,SAAS,CAAC,KAAc,EAAE,IAAa;QACrC,OAAO,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAY,CAAC;IACrF,CAAC;IAED,WAAW,CAAC,KAAc,EAAE,MAAS;QACnC,OAAO,WAAW,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAM,CAAC,CAAY,CAAC;IAC/F,CAAC;IAED,cAAc,CAAC,KAAc;QAC3B,OAAO,WAAW,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAM,CAAC,CAAY,CAAC;IACvF,CAAC;IAED,cAAc,CAAC,KAAc,EAAE,IAAa;QAC1C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC,EAAE,MAAS;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAY,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3F,CAAC;IAED,WAAW,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC,EAAE,MAAS;QAC9C,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,KAAc;QAClB,OAAO,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAM,CAAC;IAC1E,CAAC;IAED,sBAAsB,CAAC,KAAc,EAAE,IAAa;QAClD,IAAI,SAAS,GAAG,WAAW,CAAC,cAAc,CACxC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EACzB,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EACxB,IAAe,CACG,CAAC;QACrB,SAAS,GAAG,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC5D,IAAI,CAAC,WAAW,CAAC,IAAI,EAAG,KAAK,CAAC,CAAC,CAAa,CAAC,CAAC,CAAM,CAAC,CACtD,CAAC;QACF,OAAO,WAAW,CAAC,UAAU,CAAC,SAA4B,CAAC,CAAC;IAC9D,CAAC;IAED,cAAc,CAAC,KAAc,EAAE,IAAa;QAC1C,MAAM,aAAa,GAAG,IAAI,MAAM,EAAW,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAY,CAAC;IACxF,CAAC;IAED,wEAAwE;IACxE,WAAW,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;QACnC,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACnG,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAClE,MAAM,SAAS,GAAG,IAAI,MAAM,EAAW,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;YAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACvE,OAAO,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAY,CAAC;IACzF,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,KAAc;QACxB,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;QAC7E,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAQ,KAAK,CAAC,CAAC,CAAa,CAAC,CAAC,CAAM,CAAC;QAEhD,MAAM,GAAG,GAAU,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAI,GAAe,CAAC,CAAC,CAAC;QAClE,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;QAEpB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBAChD,IAAI,GAAG,CAAC,CAAC;wBACT,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,KAAK,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC,IAAI,CAAC;gBAClC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9C,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YACD,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAM,CAAC;YACjC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACxC,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAM,EAAE,QAAQ,CAAC,CAAC;gBACzD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAS;gBAC/C,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM,CAAC,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,KAAc;QACtB,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,OAAQ,KAAK,CAAC,CAAC,CAAa,CAAC,CAAC,CAAM,CAAC;QACvE,MAAM,OAAO,GAAG,IAAI,MAAM,EAAK,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,IAAI,GAAG,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAE,KAAK,CAAC,CAAC,CAAa,CAAC,CAAC,CAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAM,CAAC;IACtD,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,KAAc,EAAE,gBAAgB,GAAG,IAAI;QAClD,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,gBAAgB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1E,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,GAAG,GAAU,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAI,GAAe,CAAC,CAAC,CAAC;QAClE,MAAM,GAAG,GAAU,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAI,GAAe,CAAC,CAAC,CAAC;QAExF,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjD,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;gBACd,KAAK,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;wBAChD,IAAI,GAAG,CAAC,CAAC;wBACT,MAAM;oBACR,CAAC;gBACH,CAAC;gBACD,IAAI,IAAI,KAAK,CAAC,CAAC;oBAAE,SAAS,CAAC,kBAAkB;gBAC7C,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9C,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAM,CAAC,CAAC;YACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM,EAAE,QAAQ,CAAC,CAAC;gBACxD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM,EAAE,QAAQ,CAAC,CAAC;YAC1D,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,GAAG;oBAAE,SAAS;gBACxB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAM,CAAC;gBAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC3B,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM,CAAC,CAAC,CAAC;oBAC9E,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAM,CAAC,CAAC,CAAC;gBAChF,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,2EAA2E;IAE3E,SAAS,CAAC,KAAc;QACtB,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAM,CAAC;IACpD,CAAC;IAED,aAAa,CAAC,KAAc;QAC1B,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAM,CAAC;IACzD,CAAC;IAED,uBAAuB,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;QAC/C,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAM,CAAC;IACjE,CAAC;IAED,2EAA2E;IAE3E,+CAA+C;IAC/C,MAAM,CAAC,SAAS;QACd,OAAO,IAAI,SAAS,CAAS;YAC3B,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YACxC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YAC9C,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACnC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;YAC3B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,MAAM,CAAC,YAAY;QACjB,OAAO,IAAI,SAAS,CAAgB;YAClC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,aAAa,CAAC;YAC7C,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzD,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YACjD,UAAU,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC;YACnD,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAW,CAAC,CAAC;SAC/E,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,CAAS;QAC7B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,CAAC,CAAS,EAAU,EAAE;YACvC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBAC/B,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9B,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC,CAAC;QACF,OAAO,IAAI,SAAS,CAAS;YAC3B,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;YACxC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxD,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;YACtC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACrC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,qFAAqF;IACrF,MAAM,CAAC,WAAW;QAChB,OAAO,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;IAED,8DAA8D;IAC9D,MAAM,CAAC,aAAa;QAClB,OAAO,IAAI,SAAS,CAAW;YAC7B,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,QAAQ,CAAC;YACxC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzD,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;YACpD,UAAU,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC;YACzC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAW,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,YAAY;QACjB,OAAO,IAAI,SAAS,CAAU;YAC5B,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,OAAO,CAAC;YACvC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzD,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;YACvC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/B,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAA6B,CAAC;SACzD,CAAC,CAAC;IACL,CAAC;IAED,kEAAkE;IAClE,MAAM,CAAC,cAAc;QACnB,OAAO,IAAI,SAAS,CAAa;YAC/B,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,UAAU,CAAC;YAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzD,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,UAAU,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC;YAClD,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;SAChC,CAAC,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,MAAM,CAAC,WAAW;QAChB,OAAO,IAAI,SAAS,CAAa;YAC/B,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,UAAU,CAAC;YAC1C,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACzD,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACpE,UAAU,EAAE,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAC9D,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAW,CAAC,CAAC;SAC9E,CAAC,CAAC;IACL,CAAC;CACF"}