propane 3.5.0-java → 3.9.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/extensions.xml +1 -1
  3. data/.mvn/wrapper/MavenWrapperDownloader.java +1 -1
  4. data/.mvn/wrapper/maven-wrapper.properties +2 -2
  5. data/.travis.yml +1 -1
  6. data/CHANGELOG.md +7 -1
  7. data/README.md +7 -22
  8. data/Rakefile +3 -2
  9. data/lib/propane.rb +2 -1
  10. data/lib/propane/app.rb +4 -0
  11. data/lib/propane/helper_methods.rb +0 -1
  12. data/lib/propane/runner.rb +12 -12
  13. data/lib/propane/version.rb +1 -1
  14. data/library/pdf/pdf.rb +7 -0
  15. data/library/svg/svg.rb +7 -0
  16. data/pom.rb +65 -43
  17. data/pom.xml +44 -5
  18. data/propane.gemspec +9 -4
  19. data/src/main/java/japplemenubar/JAppleMenuBar.java +3 -3
  20. data/src/main/java/monkstone/fastmath/DegLutTables.java +111 -0
  21. data/src/main/java/monkstone/fastmath/Deglut.java +6 -56
  22. data/src/main/java/monkstone/noise/FastTerrain.java +874 -0
  23. data/src/main/java/monkstone/noise/Noise.java +90 -0
  24. data/src/main/java/monkstone/noise/NoiseGenerator.java +75 -0
  25. data/src/main/java/monkstone/noise/NoiseMode.java +28 -0
  26. data/src/main/java/monkstone/noise/OpenSimplex2F.java +881 -0
  27. data/src/main/java/monkstone/noise/OpenSimplex2S.java +1106 -0
  28. data/src/main/java/monkstone/noise/SmoothTerrain.java +1099 -0
  29. data/src/main/java/processing/awt/PGraphicsJava2D.java +8 -17
  30. data/src/main/java/processing/awt/PImageAWT.java +123 -6
  31. data/src/main/java/processing/awt/PShapeJava2D.java +1 -0
  32. data/src/main/java/processing/awt/PSurfaceAWT.java +9 -7
  33. data/src/main/java/processing/awt/ShimAWT.java +2 -1
  34. data/src/main/java/processing/core/PApplet.java +13297 -14838
  35. data/src/main/java/processing/core/PConstants.java +5 -5
  36. data/src/main/java/processing/core/PFont.java +5 -17
  37. data/src/main/java/processing/core/PGraphics.java +346 -351
  38. data/src/main/java/processing/core/PImage.java +1440 -1537
  39. data/src/main/java/processing/core/PMatrix2D.java +24 -7
  40. data/src/main/java/processing/core/PMatrix3D.java +12 -5
  41. data/src/main/java/processing/core/PShape.java +155 -173
  42. data/src/main/java/processing/core/PShapeOBJ.java +2 -0
  43. data/src/main/java/processing/core/PShapeSVG.java +632 -611
  44. data/src/main/java/processing/core/PSurface.java +15 -10
  45. data/src/main/java/processing/core/PSurfaceNone.java +8 -4
  46. data/src/main/java/processing/core/PVector.java +35 -28
  47. data/src/main/java/processing/data/Table.java +20 -20
  48. data/src/main/java/processing/data/XML.java +1 -1
  49. data/src/main/java/processing/event/Event.java +1 -1
  50. data/src/main/java/processing/event/MouseEvent.java +7 -6
  51. data/src/main/java/processing/javafx/PGraphicsFX2D.java +20 -345
  52. data/src/main/java/processing/javafx/PSurfaceFX.java +127 -125
  53. data/src/main/java/processing/opengl/FrameBuffer.java +2 -4
  54. data/src/main/java/processing/opengl/LinePath.java +4 -0
  55. data/src/main/java/processing/opengl/LineStroker.java +2 -6
  56. data/src/main/java/processing/opengl/PGL.java +72 -45
  57. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +106 -60
  58. data/src/main/java/processing/opengl/PJOGL.java +15 -3
  59. data/src/main/java/processing/opengl/PShader.java +26 -47
  60. data/src/main/java/processing/opengl/PShapeOpenGL.java +1041 -1001
  61. data/src/main/java/processing/opengl/PSurfaceJOGL.java +211 -208
  62. data/src/main/java/processing/opengl/Texture.java +7 -4
  63. data/src/main/java/processing/opengl/VertexBuffer.java +2 -2
  64. data/src/main/java/processing/pdf/PGraphicsPDF.java +581 -0
  65. data/src/main/java/processing/svg/PGraphicsSVG.java +378 -0
  66. data/test/deglut_spec_test.rb +2 -2
  67. data/vendors/Rakefile +22 -33
  68. metadata +53 -21
  69. data/library/simplex_noise/simplex_noise.rb +0 -5
  70. data/src/main/java/monkstone/noise/SimplexNoise.java +0 -436
@@ -0,0 +1,1106 @@
1
+ package monkstone.noise;
2
+
3
+ /**
4
+ * K.jpg's OpenSimplex 2, smooth variant ("SuperSimplex")
5
+ *
6
+ * - 2D is standard simplex, modified to support larger kernels. Implemented
7
+ * using a lookup table. - 3D is "Re-oriented 8-point BCC noise" which
8
+ * constructs a congruent BCC lattice in a much different way than usual. - 4D
9
+ * uses a naïve pregenerated lookup table, and averages out to the expected
10
+ * performance.
11
+ *
12
+ * Multiple versions of each function are provided. See the documentation above
13
+ * each, for more info.
14
+ */
15
+ public class OpenSimplex2S implements Noise {
16
+
17
+ private static final int PSIZE = 2048;
18
+ private static final int PMASK = 2047;
19
+
20
+ private final short[] perm;
21
+ private final Grad2[] permGrad2;
22
+ private final Grad3[] permGrad3;
23
+ private final Grad4[] permGrad4;
24
+
25
+ public OpenSimplex2S(long seed) {
26
+ perm = new short[PSIZE];
27
+ permGrad2 = new Grad2[PSIZE];
28
+ permGrad3 = new Grad3[PSIZE];
29
+ permGrad4 = new Grad4[PSIZE];
30
+ short[] source = new short[PSIZE];
31
+ for (short i = 0; i < PSIZE; i++) {
32
+ source[i] = i;
33
+ }
34
+ for (int i = PSIZE - 1; i >= 0; i--) {
35
+ seed = seed * 6364136223846793005L + 1442695040888963407L;
36
+ int r = (int) ((seed + 31) % (i + 1));
37
+ if (r < 0) {
38
+ r += (i + 1);
39
+ }
40
+ perm[i] = source[r];
41
+ permGrad2[i] = GRADIENTS_2D[perm[i]];
42
+ permGrad3[i] = GRADIENTS_3D[perm[i]];
43
+ permGrad4[i] = GRADIENTS_4D[perm[i]];
44
+ source[r] = source[i];
45
+ }
46
+ }
47
+
48
+ /*
49
+ * Noise Evaluators
50
+ */
51
+ /**
52
+ * 2D SuperSimplex noise, standard lattice orientation.
53
+ *
54
+ * @param x
55
+ * @param y
56
+ * @return
57
+ */
58
+ public double noise2(double x, double y) {
59
+
60
+ // Get points for A2* lattice
61
+ double s = 0.366025403784439 * (x + y);
62
+ double xs = x + s, ys = y + s;
63
+
64
+ return noise2_Base(xs, ys);
65
+ }
66
+
67
+ /**
68
+ * 2D SuperSimplex noise, with Y pointing down the main diagonal.Might be
69
+ * better for a 2D sandbox style game, where Y is vertical.Probably slightly
70
+ * less optimal for heightmaps or continent maps.
71
+ *
72
+ * @param x
73
+ * @param y
74
+ * @return
75
+ */
76
+ public double noise2_XBeforeY(double x, double y) {
77
+
78
+ // Skew transform and rotation baked into one.
79
+ double xx = x * 0.7071067811865476;
80
+ double yy = y * 1.224744871380249;
81
+
82
+ return noise2_Base(yy + xx, yy - xx);
83
+ }
84
+
85
+ /**
86
+ * 2D SuperSimplex noise base. Lookup table implementation inspired by
87
+ * DigitalShadow.
88
+ */
89
+ private double noise2_Base(double xs, double ys) {
90
+ double value = 0;
91
+
92
+ // Get base points and offsets
93
+ int xsb = fastFloor(xs), ysb = fastFloor(ys);
94
+ double xsi = xs - xsb, ysi = ys - ysb;
95
+
96
+ // Index to point list
97
+ int a = (int) (xsi + ysi);
98
+ int index
99
+ = (a << 2)
100
+ | (int) (xsi - ysi / 2 + 1 - a / 2.0) << 3
101
+ | (int) (ysi - xsi / 2 + 1 - a / 2.0) << 4;
102
+
103
+ double ssi = (xsi + ysi) * -0.211324865405187;
104
+ double xi = xsi + ssi, yi = ysi + ssi;
105
+
106
+ // Point contributions
107
+ for (int i = 0; i < 4; i++) {
108
+ LatticePoint2D c = LOOKUP_2D[index + i];
109
+
110
+ double dx = xi + c.dx, dy = yi + c.dy;
111
+ double attn = 2.0 / 3.0 - dx * dx - dy * dy;
112
+ if (attn <= 0) {
113
+ continue;
114
+ }
115
+
116
+ int pxm = (xsb + c.xsv) & PMASK, pym = (ysb + c.ysv) & PMASK;
117
+ Grad2 grad = permGrad2[perm[pxm] ^ pym];
118
+ double extrapolation = grad.dx * dx + grad.dy * dy;
119
+
120
+ attn *= attn;
121
+ value += attn * attn * extrapolation;
122
+ }
123
+
124
+ return value;
125
+ }
126
+
127
+ /**
128
+ * 3D Re-oriented 8-point BCC noise, classic orientation Proper substitute
129
+ * for what 3D SuperSimplex would be, in light of Forbidden Formulae.Use
130
+ * noise3_XYBeforeZ or noise3_XZBeforeY instead, wherever appropriate.
131
+ *
132
+ * @param x
133
+ * @param y
134
+ * @param z
135
+ * @return
136
+ */
137
+ public double noise3_Classic(double x, double y, double z) {
138
+
139
+ // Re-orient the cubic lattices via rotation, to produce the expected look on cardinal planar slices.
140
+ // If texturing objects that don't tend to have cardinal plane faces, you could even remove this.
141
+ // Orthonormal rotation. Not a skew transform.
142
+ double r = (2.0 / 3.0) * (x + y + z);
143
+ double xr = r - x, yr = r - y, zr = r - z;
144
+
145
+ // Evaluate both lattices to form a BCC lattice.
146
+ return noise3_BCC(xr, yr, zr);
147
+ }
148
+
149
+ /**
150
+ * 3D Re-oriented 8-point BCC noise, with better visual isotropy in (X,
151
+ * Z).Recommended for 3D terrain and time-varied animations.The Y coordinate
152
+ * should always be the "different" coordinate in your use case.If Y is
153
+ * vertical in world coordinates, call noise3_XZBeforeY(x, Y, z).If Z is
154
+ * vertical in world coordinates, call noise3_XZBeforeY(x, Z, y) or use
155
+ * noise3_XYBeforeZ. For a time varied animation, call noise3_XZBeforeY(x,
156
+ * T, y) or use noise3_XYBeforeZ.
157
+ *
158
+ * @param x
159
+ * @param y
160
+ * @param z
161
+ * @return
162
+ */
163
+ public double noise3_XZBeforeY(double x, double y, double z) {
164
+
165
+ // Re-orient the cubic lattices without skewing, to make X and Z triangular like 2D.
166
+ // Orthonormal rotation. Not a skew transform.
167
+ double xz = x + z;
168
+ double s2 = xz * -0.211324865405187;
169
+ double yy = y * 0.577350269189626;
170
+ double xr = x + s2 - yy;
171
+ double zr = z + s2 - yy;
172
+ double yr = xz * 0.577350269189626 + yy;
173
+
174
+ // Evaluate both lattices to form a BCC lattice.
175
+ return noise3_BCC(xr, yr, zr);
176
+ }
177
+
178
+ /**
179
+ * Generate overlapping cubic lattices for 3D Re-oriented BCC noise. Lookup
180
+ * table implementation inspired by DigitalShadow. It was actually faster to
181
+ * narrow down the points in the loop itself, than to build up the index
182
+ * with enough info to isolate 8 points.
183
+ */
184
+ private double noise3_BCC(double xr, double yr, double zr) {
185
+
186
+ // Get base and offsets inside cube of first lattice.
187
+ int xrb = fastFloor(xr), yrb = fastFloor(yr), zrb = fastFloor(zr);
188
+ double xri = xr - xrb, yri = yr - yrb, zri = zr - zrb;
189
+
190
+ // Identify which octant of the cube we're in. This determines which cell
191
+ // in the other cubic lattice we're in, and also narrows down one point on each.
192
+ int xht = (int) (xri + 0.5), yht = (int) (yri + 0.5), zht = (int) (zri + 0.5);
193
+ int index = (xht) | (yht << 1) | (zht << 2);
194
+
195
+ // Point contributions
196
+ double value = 0;
197
+ LatticePoint3D c = LOOKUP_3D[index];
198
+ while (c != null) {
199
+ double dxr = xri + c.dxr, dyr = yri + c.dyr, dzr = zri + c.dzr;
200
+ double attn = 0.75 - dxr * dxr - dyr * dyr - dzr * dzr;
201
+ if (attn < 0) {
202
+ c = c.nextOnFailure;
203
+ } else {
204
+ int pxm = (xrb + c.xrv) & PMASK, pym = (yrb + c.yrv) & PMASK, pzm = (zrb + c.zrv) & PMASK;
205
+ Grad3 grad = permGrad3[perm[perm[pxm] ^ pym] ^ pzm];
206
+ double extrapolation = grad.dx * dxr + grad.dy * dyr + grad.dz * dzr;
207
+
208
+ attn *= attn;
209
+ value += attn * attn * extrapolation;
210
+ c = c.nextOnSuccess;
211
+ }
212
+ }
213
+ return value;
214
+ }
215
+
216
+ /**
217
+ * 4D SuperSimplex noise, classic lattice orientation.
218
+ *
219
+ * @param x
220
+ * @param y
221
+ * @param z
222
+ * @param w
223
+ * @return
224
+ */
225
+ public double noise4_Classic(double x, double y, double z, double w) {
226
+
227
+ // Get points for A4 lattice
228
+ double s = 0.309016994374947 * (x + y + z + w);
229
+ double xs = x + s, ys = y + s, zs = z + s, ws = w + s;
230
+
231
+ return noise4_Base(xs, ys, zs, ws);
232
+ }
233
+
234
+ /**
235
+ * 4D SuperSimplex noise, with XY and ZW forming orthogonal triangular-based
236
+ * planes.Recommended for 3D terrain, where X and Y (or Z and W) are
237
+ * horizontal.Recommended for noise(x, y, sin(time), cos(time)) trick.
238
+ *
239
+ * @param x
240
+ * @param y
241
+ * @param z
242
+ * @param w
243
+ * @return
244
+ */
245
+ public double noise4_XYBeforeZW(double x, double y, double z, double w) {
246
+
247
+ double s2 = (x + y) * -0.28522513987434876941 + (z + w) * 0.83897065470611435718;
248
+ double t2 = (z + w) * 0.21939749883706435719 + (x + y) * -0.48214856493302476942;
249
+ double xs = x + s2, ys = y + s2, zs = z + t2, ws = w + t2;
250
+
251
+ return noise4_Base(xs, ys, zs, ws);
252
+ }
253
+
254
+ /**
255
+ * 4D SuperSimplex noise, with XYZ oriented like noise3_Classic, and W for
256
+ * an extra degree of freedom.Recommended for time-varied animations which
257
+ * texture a 3D object (W=time)
258
+ *
259
+ * @param x
260
+ * @param y
261
+ * @param z
262
+ * @param w
263
+ * @return
264
+ */
265
+ public double noise4_XYZBeforeW(double x, double y, double z, double w) {
266
+
267
+ double xyz = x + y + z;
268
+ double ww = w * 1.118033988749894;
269
+ double s2 = xyz * -0.16666666666666666 + ww;
270
+ double xs = x + s2, ys = y + s2, zs = z + s2, ws = -0.5 * xyz + ww;
271
+
272
+ return noise4_Base(xs, ys, zs, ws);
273
+ }
274
+
275
+ /**
276
+ * 4D SuperSimplex noise base. Using ultra-simple 4x4x4x4 lookup
277
+ * partitioning. This isn't as elegant or SIMD/GPU/etc. portable as other
278
+ * approaches, but it does compete performance-wise with optimized
279
+ * OpenSimplex1.
280
+ */
281
+ private double noise4_Base(double xs, double ys, double zs, double ws) {
282
+ double value = 0;
283
+
284
+ // Get base points and offsets
285
+ int xsb = fastFloor(xs), ysb = fastFloor(ys), zsb = fastFloor(zs), wsb = fastFloor(ws);
286
+ double xsi = xs - xsb, ysi = ys - ysb, zsi = zs - zsb, wsi = ws - wsb;
287
+
288
+ // Unskewed offsets
289
+ double ssi = (xsi + ysi + zsi + wsi) * -0.138196601125011;
290
+ double xi = xsi + ssi, yi = ysi + ssi, zi = zsi + ssi, wi = wsi + ssi;
291
+
292
+ int index = ((fastFloor(xs * 4) & 3))
293
+ | ((fastFloor(ys * 4) & 3) << 2)
294
+ | ((fastFloor(zs * 4) & 3) << 4)
295
+ | ((fastFloor(ws * 4) & 3) << 6);
296
+
297
+ // Point contributions
298
+ for (LatticePoint4D c : LOOKUP_4D[index]) {
299
+ double dx = xi + c.dx, dy = yi + c.dy, dz = zi + c.dz, dw = wi + c.dw;
300
+ double attn = 0.8 - dx * dx - dy * dy - dz * dz - dw * dw;
301
+ if (attn > 0) {
302
+ attn *= attn;
303
+
304
+ int pxm = (xsb + c.xsv) & PMASK, pym = (ysb + c.ysv) & PMASK;
305
+ int pzm = (zsb + c.zsv) & PMASK, pwm = (wsb + c.wsv) & PMASK;
306
+ Grad4 grad = permGrad4[perm[perm[perm[pxm] ^ pym] ^ pzm] ^ pwm];
307
+ double extrapolation = grad.dx * dx + grad.dy * dy + grad.dz * dz + grad.dw * dw;
308
+
309
+ value += attn * attn * extrapolation;
310
+ }
311
+ }
312
+ return value;
313
+ }
314
+
315
+ /*
316
+ * Utility
317
+ */
318
+ private static int fastFloor(double x) {
319
+ int xi = (int) x;
320
+ return x < xi ? xi - 1 : xi;
321
+ }
322
+
323
+ /*
324
+ * Definitions
325
+ */
326
+ private static final LatticePoint2D[] LOOKUP_2D;
327
+ private static final LatticePoint3D[] LOOKUP_3D;
328
+ private static final LatticePoint4D[][] LOOKUP_4D;
329
+
330
+ static {
331
+ LOOKUP_2D = new LatticePoint2D[8 * 4];
332
+ LOOKUP_3D = new LatticePoint3D[8];
333
+ LOOKUP_4D = new LatticePoint4D[256][];
334
+
335
+ for (int i = 0; i < 8; i++) {
336
+ int i1, j1, i2, j2;
337
+ if ((i & 1) == 0) {
338
+ if ((i & 2) == 0) {
339
+ i1 = -1;
340
+ j1 = 0;
341
+ } else {
342
+ i1 = 1;
343
+ j1 = 0;
344
+ }
345
+ if ((i & 4) == 0) {
346
+ i2 = 0;
347
+ j2 = -1;
348
+ } else {
349
+ i2 = 0;
350
+ j2 = 1;
351
+ }
352
+ } else {
353
+ if ((i & 2) != 0) {
354
+ i1 = 2;
355
+ j1 = 1;
356
+ } else {
357
+ i1 = 0;
358
+ j1 = 1;
359
+ }
360
+ if ((i & 4) != 0) {
361
+ i2 = 1;
362
+ j2 = 2;
363
+ } else {
364
+ i2 = 1;
365
+ j2 = 0;
366
+ }
367
+ }
368
+ LOOKUP_2D[i * 4 + 0] = new LatticePoint2D(0, 0);
369
+ LOOKUP_2D[i * 4 + 1] = new LatticePoint2D(1, 1);
370
+ LOOKUP_2D[i * 4 + 2] = new LatticePoint2D(i1, j1);
371
+ LOOKUP_2D[i * 4 + 3] = new LatticePoint2D(i2, j2);
372
+ }
373
+
374
+ for (int i = 0; i < 8; i++) {
375
+ int i1, j1, k1, i2, j2, k2;
376
+ i1 = (i) & 1;
377
+ j1 = (i >> 1) & 1;
378
+ k1 = (i >> 2) & 1;
379
+ i2 = i1 ^ 1;
380
+ j2 = j1 ^ 1;
381
+ k2 = k1 ^ 1;
382
+
383
+ // The two points within this octant, one from each of the two cubic half-lattices.
384
+ LatticePoint3D c0 = new LatticePoint3D(i1, j1, k1, 0);
385
+ LatticePoint3D c1 = new LatticePoint3D(i1 + i2, j1 + j2, k1 + k2, 1);
386
+
387
+ // (1, 0, 0) vs (0, 1, 1) away from octant.
388
+ LatticePoint3D c2 = new LatticePoint3D(i1 ^ 1, j1, k1, 0);
389
+ LatticePoint3D c3 = new LatticePoint3D(i1, j1 ^ 1, k1 ^ 1, 0);
390
+
391
+ // (1, 0, 0) vs (0, 1, 1) away from octant, on second half-lattice.
392
+ LatticePoint3D c4 = new LatticePoint3D(i1 + (i2 ^ 1), j1 + j2, k1 + k2, 1);
393
+ LatticePoint3D c5 = new LatticePoint3D(i1 + i2, j1 + (j2 ^ 1), k1 + (k2 ^ 1), 1);
394
+
395
+ // (0, 1, 0) vs (1, 0, 1) away from octant.
396
+ LatticePoint3D c6 = new LatticePoint3D(i1, j1 ^ 1, k1, 0);
397
+ LatticePoint3D c7 = new LatticePoint3D(i1 ^ 1, j1, k1 ^ 1, 0);
398
+
399
+ // (0, 1, 0) vs (1, 0, 1) away from octant, on second half-lattice.
400
+ LatticePoint3D c8 = new LatticePoint3D(i1 + i2, j1 + (j2 ^ 1), k1 + k2, 1);
401
+ LatticePoint3D c9 = new LatticePoint3D(i1 + (i2 ^ 1), j1 + j2, k1 + (k2 ^ 1), 1);
402
+
403
+ // (0, 0, 1) vs (1, 1, 0) away from octant.
404
+ LatticePoint3D cA = new LatticePoint3D(i1, j1, k1 ^ 1, 0);
405
+ LatticePoint3D cB = new LatticePoint3D(i1 ^ 1, j1 ^ 1, k1, 0);
406
+
407
+ // (0, 0, 1) vs (1, 1, 0) away from octant, on second half-lattice.
408
+ LatticePoint3D cC = new LatticePoint3D(i1 + i2, j1 + j2, k1 + (k2 ^ 1), 1);
409
+ LatticePoint3D cD = new LatticePoint3D(i1 + (i2 ^ 1), j1 + (j2 ^ 1), k1 + k2, 1);
410
+
411
+ // First two points are guaranteed.
412
+ c0.nextOnFailure = c0.nextOnSuccess = c1;
413
+ c1.nextOnFailure = c1.nextOnSuccess = c2;
414
+
415
+ // If c2 is in range, then we know c3 and c4 are not.
416
+ c2.nextOnFailure = c3;
417
+ c2.nextOnSuccess = c5;
418
+ c3.nextOnFailure = c4;
419
+ c3.nextOnSuccess = c4;
420
+
421
+ // If c4 is in range, then we know c5 is not.
422
+ c4.nextOnFailure = c5;
423
+ c4.nextOnSuccess = c6;
424
+ c5.nextOnFailure = c5.nextOnSuccess = c6;
425
+
426
+ // If c6 is in range, then we know c7 and c8 are not.
427
+ c6.nextOnFailure = c7;
428
+ c6.nextOnSuccess = c9;
429
+ c7.nextOnFailure = c8;
430
+ c7.nextOnSuccess = c8;
431
+
432
+ // If c8 is in range, then we know c9 is not.
433
+ c8.nextOnFailure = c9;
434
+ c8.nextOnSuccess = cA;
435
+ c9.nextOnFailure = c9.nextOnSuccess = cA;
436
+
437
+ // If cA is in range, then we know cB and cC are not.
438
+ cA.nextOnFailure = cB;
439
+ cA.nextOnSuccess = cD;
440
+ cB.nextOnFailure = cC;
441
+ cB.nextOnSuccess = cC;
442
+
443
+ // If cC is in range, then we know cD is not.
444
+ cC.nextOnFailure = cD;
445
+ cC.nextOnSuccess = null;
446
+ cD.nextOnFailure = cD.nextOnSuccess = null;
447
+
448
+ LOOKUP_3D[i] = c0;
449
+ }
450
+
451
+ int[][] lookup4DPregen = {
452
+ {0x15, 0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
453
+ {0x15, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA},
454
+ {0x01, 0x05, 0x11, 0x15, 0x41, 0x45, 0x51, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA},
455
+ {0x01, 0x15, 0x16, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
456
+ {0x15, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA},
457
+ {0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xAA},
458
+ {0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xAA},
459
+ {0x05, 0x15, 0x16, 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xAA, 0xAB},
460
+ {0x04, 0x05, 0x14, 0x15, 0x44, 0x45, 0x54, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA},
461
+ {0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xAA},
462
+ {0x05, 0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0xAA},
463
+ {0x05, 0x15, 0x16, 0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x5B, 0x6A, 0x9A, 0xAA, 0xAB},
464
+ {0x04, 0x15, 0x19, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
465
+ {0x05, 0x15, 0x19, 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xAA, 0xAE},
466
+ {0x05, 0x15, 0x19, 0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x5E, 0x6A, 0x9A, 0xAA, 0xAE},
467
+ {0x05, 0x15, 0x1A, 0x45, 0x4A, 0x55, 0x56, 0x59, 0x5A, 0x5B, 0x5E, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
468
+ {0x15, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA},
469
+ {0x11, 0x15, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xAA},
470
+ {0x11, 0x15, 0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xAA},
471
+ {0x11, 0x15, 0x16, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xAA, 0xAB},
472
+ {0x14, 0x15, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA9, 0xAA},
473
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x9A, 0xA6, 0xA9, 0xAA},
474
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
475
+ {0x15, 0x16, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x6B, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
476
+ {0x14, 0x15, 0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA},
477
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
478
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xAA},
479
+ {0x15, 0x16, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x6B, 0x9A, 0xAA, 0xAB},
480
+ {0x14, 0x15, 0x19, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA, 0xAE},
481
+ {0x15, 0x19, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x6E, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
482
+ {0x15, 0x19, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x6E, 0x9A, 0xAA, 0xAE},
483
+ {0x15, 0x1A, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x6B, 0x6E, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
484
+ {0x10, 0x11, 0x14, 0x15, 0x50, 0x51, 0x54, 0x55, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA},
485
+ {0x11, 0x15, 0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xAA},
486
+ {0x11, 0x15, 0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0xA6, 0xAA},
487
+ {0x11, 0x15, 0x16, 0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x67, 0x6A, 0xA6, 0xAA, 0xAB},
488
+ {0x14, 0x15, 0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA9, 0xAA},
489
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
490
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA6, 0xAA},
491
+ {0x15, 0x16, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x6B, 0xA6, 0xAA, 0xAB},
492
+ {0x14, 0x15, 0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0xA9, 0xAA},
493
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA9, 0xAA},
494
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xAA},
495
+ {0x15, 0x16, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0xAA, 0xAB},
496
+ {0x14, 0x15, 0x19, 0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x6A, 0x6D, 0xA9, 0xAA, 0xAE},
497
+ {0x15, 0x19, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x6E, 0xA9, 0xAA, 0xAE},
498
+ {0x15, 0x19, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6E, 0xAA, 0xAE},
499
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x6B, 0x6E, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
500
+ {0x10, 0x15, 0x25, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
501
+ {0x11, 0x15, 0x25, 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xAA, 0xBA},
502
+ {0x11, 0x15, 0x25, 0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x6A, 0x76, 0xA6, 0xAA, 0xBA},
503
+ {0x11, 0x15, 0x26, 0x51, 0x55, 0x56, 0x62, 0x65, 0x66, 0x67, 0x6A, 0x76, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
504
+ {0x14, 0x15, 0x25, 0x54, 0x55, 0x59, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA9, 0xAA, 0xBA},
505
+ {0x15, 0x25, 0x55, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
506
+ {0x15, 0x25, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA6, 0xAA, 0xBA},
507
+ {0x15, 0x26, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x6B, 0x7A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
508
+ {0x14, 0x15, 0x25, 0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x6A, 0x79, 0xA9, 0xAA, 0xBA},
509
+ {0x15, 0x25, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xA9, 0xAA, 0xBA},
510
+ {0x15, 0x25, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x7A, 0xAA, 0xBA},
511
+ {0x15, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0x7A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
512
+ {0x14, 0x15, 0x29, 0x54, 0x55, 0x59, 0x65, 0x68, 0x69, 0x6A, 0x6D, 0x79, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
513
+ {0x15, 0x29, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x6E, 0x7A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
514
+ {0x15, 0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6E, 0x7A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
515
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x6B, 0x6E, 0x7A, 0xAA, 0xAB, 0xAE, 0xBA, 0xBF},
516
+ {0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
517
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA},
518
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x5A, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xAA},
519
+ {0x41, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
520
+ {0x44, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA},
521
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA},
522
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB},
523
+ {0x45, 0x46, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB},
524
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x5A, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA},
525
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
526
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xAA},
527
+ {0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x9A, 0x9B, 0xAA, 0xAB},
528
+ {0x44, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
529
+ {0x45, 0x49, 0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE},
530
+ {0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x99, 0x9A, 0x9E, 0xAA, 0xAE},
531
+ {0x45, 0x4A, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xAF},
532
+ {0x50, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA},
533
+ {0x51, 0x55, 0x56, 0x59, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
534
+ {0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB},
535
+ {0x51, 0x52, 0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB},
536
+ {0x54, 0x55, 0x56, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
537
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
538
+ {0x15, 0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
539
+ {0x55, 0x56, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
540
+ {0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE},
541
+ {0x15, 0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
542
+ {0x15, 0x45, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE},
543
+ {0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
544
+ {0x54, 0x55, 0x58, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE},
545
+ {0x55, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
546
+ {0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
547
+ {0x55, 0x56, 0x59, 0x5A, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
548
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x66, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA},
549
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
550
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xAA},
551
+ {0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA6, 0xA7, 0xAA, 0xAB},
552
+ {0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
553
+ {0x15, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
554
+ {0x15, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA},
555
+ {0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
556
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA9, 0xAA},
557
+ {0x15, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA},
558
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xA6, 0xA9, 0xAA},
559
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
560
+ {0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA9, 0xAA, 0xAD, 0xAE},
561
+ {0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
562
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
563
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
564
+ {0x50, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x66, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
565
+ {0x51, 0x55, 0x61, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA},
566
+ {0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x6A, 0xA5, 0xA6, 0xAA, 0xB6, 0xBA},
567
+ {0x51, 0x55, 0x56, 0x62, 0x65, 0x66, 0x6A, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xBB},
568
+ {0x54, 0x55, 0x64, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA},
569
+ {0x55, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
570
+ {0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
571
+ {0x55, 0x56, 0x65, 0x66, 0x6A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
572
+ {0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x6A, 0xA5, 0xA9, 0xAA, 0xB9, 0xBA},
573
+ {0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
574
+ {0x15, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
575
+ {0x15, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
576
+ {0x54, 0x55, 0x59, 0x65, 0x68, 0x69, 0x6A, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xBE},
577
+ {0x55, 0x59, 0x65, 0x69, 0x6A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
578
+ {0x15, 0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
579
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0xAA, 0xAB, 0xAE, 0xBA, 0xBF},
580
+ {0x40, 0x41, 0x44, 0x45, 0x50, 0x51, 0x54, 0x55, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
581
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA},
582
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x95, 0x96, 0x9A, 0xA6, 0xAA},
583
+ {0x41, 0x45, 0x46, 0x51, 0x52, 0x55, 0x56, 0x95, 0x96, 0x97, 0x9A, 0xA6, 0xAA, 0xAB},
584
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA},
585
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
586
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA},
587
+ {0x45, 0x46, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB},
588
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x95, 0x99, 0x9A, 0xA9, 0xAA},
589
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA},
590
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xAA},
591
+ {0x45, 0x46, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0xAA, 0xAB},
592
+ {0x44, 0x45, 0x49, 0x54, 0x55, 0x58, 0x59, 0x95, 0x99, 0x9A, 0x9D, 0xA9, 0xAA, 0xAE},
593
+ {0x45, 0x49, 0x55, 0x59, 0x5A, 0x95, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE},
594
+ {0x45, 0x49, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9E, 0xAA, 0xAE},
595
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x99, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xAF},
596
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA},
597
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
598
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA},
599
+ {0x51, 0x52, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB},
600
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
601
+ {0x45, 0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
602
+ {0x45, 0x51, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xEA},
603
+ {0x55, 0x56, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB},
604
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA},
605
+ {0x45, 0x54, 0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xEA},
606
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA},
607
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB},
608
+ {0x54, 0x55, 0x58, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE},
609
+ {0x55, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
610
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE},
611
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x6A, 0x96, 0x99, 0x9A, 0xAA, 0xAB, 0xAE, 0xAF},
612
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA},
613
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA},
614
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA},
615
+ {0x51, 0x52, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB},
616
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA},
617
+ {0x51, 0x54, 0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA},
618
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
619
+ {0x51, 0x55, 0x56, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB},
620
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA},
621
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
622
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA},
623
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB},
624
+ {0x54, 0x55, 0x58, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE},
625
+ {0x54, 0x55, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE},
626
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAE},
627
+ {0x55, 0x56, 0x59, 0x5A, 0x66, 0x69, 0x6A, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xAF},
628
+ {0x50, 0x51, 0x54, 0x55, 0x61, 0x64, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB5, 0xBA},
629
+ {0x51, 0x55, 0x61, 0x65, 0x66, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA},
630
+ {0x51, 0x55, 0x56, 0x61, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xB6, 0xBA},
631
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xBB},
632
+ {0x54, 0x55, 0x64, 0x65, 0x69, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA},
633
+ {0x55, 0x65, 0x66, 0x69, 0x6A, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
634
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
635
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x6A, 0x96, 0xA5, 0xA6, 0xAA, 0xAB, 0xBA, 0xBB},
636
+ {0x54, 0x55, 0x59, 0x64, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xB9, 0xBA},
637
+ {0x54, 0x55, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
638
+ {0x55, 0x56, 0x59, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA},
639
+ {0x55, 0x56, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA, 0xBB},
640
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xBE},
641
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x6A, 0x99, 0xA5, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
642
+ {0x55, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA, 0xBE},
643
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xBA},
644
+ {0x40, 0x45, 0x51, 0x54, 0x55, 0x85, 0x91, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
645
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x85, 0x91, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xAA, 0xEA},
646
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x85, 0x91, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xD6, 0xEA},
647
+ {0x41, 0x45, 0x51, 0x55, 0x56, 0x86, 0x92, 0x95, 0x96, 0x97, 0x9A, 0xA6, 0xAA, 0xAB, 0xD6, 0xEA, 0xEB},
648
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x85, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xEA},
649
+ {0x45, 0x55, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xDA, 0xEA},
650
+ {0x45, 0x55, 0x56, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xDA, 0xEA},
651
+ {0x45, 0x55, 0x56, 0x86, 0x95, 0x96, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB, 0xDA, 0xEA, 0xEB},
652
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x85, 0x94, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xD9, 0xEA},
653
+ {0x45, 0x55, 0x59, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xDA, 0xEA},
654
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x85, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0xDA, 0xEA},
655
+ {0x45, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0xA6, 0xAA, 0xAB, 0xDA, 0xEA, 0xEB},
656
+ {0x44, 0x45, 0x54, 0x55, 0x59, 0x89, 0x95, 0x98, 0x99, 0x9A, 0x9D, 0xA9, 0xAA, 0xAE, 0xD9, 0xEA, 0xEE},
657
+ {0x45, 0x55, 0x59, 0x89, 0x95, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE, 0xDA, 0xEA, 0xEE},
658
+ {0x45, 0x55, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9E, 0xA9, 0xAA, 0xAE, 0xDA, 0xEA, 0xEE},
659
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0x9B, 0x9E, 0xAA, 0xAB, 0xAE, 0xDA, 0xEA, 0xEF},
660
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x91, 0x94, 0x95, 0x96, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
661
+ {0x51, 0x55, 0x91, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xE6, 0xEA},
662
+ {0x51, 0x55, 0x56, 0x91, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xE6, 0xEA},
663
+ {0x51, 0x55, 0x56, 0x92, 0x95, 0x96, 0x9A, 0xA6, 0xA7, 0xAA, 0xAB, 0xE6, 0xEA, 0xEB},
664
+ {0x54, 0x55, 0x94, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xE9, 0xEA},
665
+ {0x55, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
666
+ {0x55, 0x56, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
667
+ {0x55, 0x56, 0x95, 0x96, 0x9A, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB},
668
+ {0x54, 0x55, 0x59, 0x94, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xE9, 0xEA},
669
+ {0x55, 0x59, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
670
+ {0x45, 0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
671
+ {0x45, 0x55, 0x56, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB},
672
+ {0x54, 0x55, 0x59, 0x95, 0x98, 0x99, 0x9A, 0xA9, 0xAA, 0xAD, 0xAE, 0xE9, 0xEA, 0xEE},
673
+ {0x55, 0x59, 0x95, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE},
674
+ {0x45, 0x55, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE},
675
+ {0x55, 0x56, 0x59, 0x5A, 0x95, 0x96, 0x99, 0x9A, 0xAA, 0xAB, 0xAE, 0xEA, 0xEF},
676
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x91, 0x94, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xE5, 0xEA},
677
+ {0x51, 0x55, 0x65, 0x91, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xE6, 0xEA},
678
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x91, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xE6, 0xEA},
679
+ {0x51, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xE6, 0xEA, 0xEB},
680
+ {0x54, 0x55, 0x65, 0x94, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xE9, 0xEA},
681
+ {0x55, 0x65, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
682
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
683
+ {0x51, 0x55, 0x56, 0x66, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xAA, 0xAB, 0xEA, 0xEB},
684
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x94, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xE9, 0xEA},
685
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
686
+ {0x55, 0x56, 0x59, 0x65, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xEA},
687
+ {0x55, 0x56, 0x5A, 0x66, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xEA, 0xEB},
688
+ {0x54, 0x55, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xE9, 0xEA, 0xEE},
689
+ {0x54, 0x55, 0x59, 0x69, 0x95, 0x99, 0x9A, 0xA5, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE},
690
+ {0x55, 0x59, 0x5A, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xEA, 0xEE},
691
+ {0x55, 0x56, 0x59, 0x5A, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xEA},
692
+ {0x50, 0x51, 0x54, 0x55, 0x65, 0x95, 0xA1, 0xA4, 0xA5, 0xA6, 0xA9, 0xAA, 0xB5, 0xBA, 0xE5, 0xEA, 0xFA},
693
+ {0x51, 0x55, 0x65, 0x95, 0xA1, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA, 0xE6, 0xEA, 0xFA},
694
+ {0x51, 0x55, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xB6, 0xBA, 0xE6, 0xEA, 0xFA},
695
+ {0x51, 0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA7, 0xAA, 0xAB, 0xB6, 0xBA, 0xE6, 0xEA, 0xFB},
696
+ {0x54, 0x55, 0x65, 0x95, 0xA4, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA, 0xE9, 0xEA, 0xFA},
697
+ {0x55, 0x65, 0x95, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA},
698
+ {0x51, 0x55, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA},
699
+ {0x55, 0x56, 0x65, 0x66, 0x95, 0x96, 0xA5, 0xA6, 0xAA, 0xAB, 0xBA, 0xEA, 0xFB},
700
+ {0x54, 0x55, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xB9, 0xBA, 0xE9, 0xEA, 0xFA},
701
+ {0x54, 0x55, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA},
702
+ {0x55, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xBA, 0xEA, 0xFA},
703
+ {0x55, 0x56, 0x65, 0x66, 0x6A, 0x95, 0x96, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xBA, 0xEA},
704
+ {0x54, 0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAD, 0xAE, 0xB9, 0xBA, 0xE9, 0xEA, 0xFE},
705
+ {0x55, 0x59, 0x65, 0x69, 0x95, 0x99, 0xA5, 0xA9, 0xAA, 0xAE, 0xBA, 0xEA, 0xFE},
706
+ {0x55, 0x59, 0x65, 0x69, 0x6A, 0x95, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAE, 0xBA, 0xEA},
707
+ {0x55, 0x56, 0x59, 0x5A, 0x65, 0x66, 0x69, 0x6A, 0x95, 0x96, 0x99, 0x9A, 0xA5, 0xA6, 0xA9, 0xAA, 0xAB, 0xAE, 0xBA, 0xEA},};
708
+ LatticePoint4D[] latticePoints = new LatticePoint4D[256];
709
+ for (int i = 0; i < 256; i++) {
710
+ int cx = ((i) & 3) - 1;
711
+ int cy = ((i >> 2) & 3) - 1;
712
+ int cz = ((i >> 4) & 3) - 1;
713
+ int cw = ((i >> 6) & 3) - 1;
714
+ latticePoints[i] = new LatticePoint4D(cx, cy, cz, cw);
715
+ }
716
+ for (int i = 0; i < 256; i++) {
717
+ LOOKUP_4D[i] = new LatticePoint4D[lookup4DPregen[i].length];
718
+ for (int j = 0; j < lookup4DPregen[i].length; j++) {
719
+ LOOKUP_4D[i][j] = latticePoints[lookup4DPregen[i][j]];
720
+ }
721
+ }
722
+ }
723
+
724
+ @Override
725
+ public float noise(float x, float y, float z) {
726
+ return (float) noise3_Classic(x, y, z);
727
+ }
728
+
729
+ @Override
730
+ public float noise(float x, float y, float z, float w) {
731
+ return (float) noise4_Classic(x, y, z, w);
732
+ }
733
+
734
+ @Override
735
+ public void noiseMode(NoiseMode mode) {
736
+
737
+ }
738
+
739
+ @Override
740
+ public void noiseSeed(long seed) {
741
+
742
+ }
743
+
744
+ private static class LatticePoint2D {
745
+
746
+ int xsv, ysv;
747
+ double dx, dy;
748
+
749
+ public LatticePoint2D(int xsv, int ysv) {
750
+ this.xsv = xsv;
751
+ this.ysv = ysv;
752
+ double ssv = (xsv + ysv) * -0.211324865405187;
753
+ this.dx = -xsv - ssv;
754
+ this.dy = -ysv - ssv;
755
+ }
756
+ }
757
+
758
+ private static class LatticePoint3D {
759
+
760
+ public double dxr, dyr, dzr;
761
+ public int xrv, yrv, zrv;
762
+ LatticePoint3D nextOnFailure, nextOnSuccess;
763
+
764
+ public LatticePoint3D(int xrv, int yrv, int zrv, int lattice) {
765
+ this.dxr = -xrv + lattice * 0.5;
766
+ this.dyr = -yrv + lattice * 0.5;
767
+ this.dzr = -zrv + lattice * 0.5;
768
+ this.xrv = xrv + lattice * 1024;
769
+ this.yrv = yrv + lattice * 1024;
770
+ this.zrv = zrv + lattice * 1024;
771
+ }
772
+ }
773
+
774
+ private static class LatticePoint4D {
775
+
776
+ int xsv, ysv, zsv, wsv;
777
+ double dx, dy, dz, dw;
778
+
779
+ public LatticePoint4D(int xsv, int ysv, int zsv, int wsv) {
780
+ this.xsv = xsv;
781
+ this.ysv = ysv;
782
+ this.zsv = zsv;
783
+ this.wsv = wsv;
784
+ double ssv = (xsv + ysv + zsv + wsv) * -0.138196601125011;
785
+ this.dx = -xsv - ssv;
786
+ this.dy = -ysv - ssv;
787
+ this.dz = -zsv - ssv;
788
+ this.dw = -wsv - ssv;
789
+ }
790
+ }
791
+
792
+ /*
793
+ * Gradients
794
+ */
795
+ private static class Grad2 {
796
+
797
+ double dx, dy;
798
+
799
+ public Grad2(double dx, double dy) {
800
+ this.dx = dx;
801
+ this.dy = dy;
802
+ }
803
+ }
804
+
805
+ private static class Grad3 {
806
+
807
+ double dx, dy, dz;
808
+
809
+ public Grad3(double dx, double dy, double dz) {
810
+ this.dx = dx;
811
+ this.dy = dy;
812
+ this.dz = dz;
813
+ }
814
+ }
815
+
816
+ private static class Grad4 {
817
+
818
+ double dx, dy, dz, dw;
819
+
820
+ public Grad4(double dx, double dy, double dz, double dw) {
821
+ this.dx = dx;
822
+ this.dy = dy;
823
+ this.dz = dz;
824
+ this.dw = dw;
825
+ }
826
+ }
827
+
828
+ private static final double N2 = 0.05481866495625118;
829
+ private static final double N3 = 0.2781926117527186;
830
+ private static final double N4 = 0.11127401889945551;
831
+ private static final Grad2[] GRADIENTS_2D;
832
+ private static final Grad3[] GRADIENTS_3D;
833
+ private static final Grad4[] GRADIENTS_4D;
834
+
835
+ static {
836
+
837
+ GRADIENTS_2D = new Grad2[PSIZE];
838
+ Grad2[] grad2 = {
839
+ new Grad2(0.130526192220052, 0.99144486137381),
840
+ new Grad2(0.38268343236509, 0.923879532511287),
841
+ new Grad2(0.608761429008721, 0.793353340291235),
842
+ new Grad2(0.793353340291235, 0.608761429008721),
843
+ new Grad2(0.923879532511287, 0.38268343236509),
844
+ new Grad2(0.99144486137381, 0.130526192220051),
845
+ new Grad2(0.99144486137381, -0.130526192220051),
846
+ new Grad2(0.923879532511287, -0.38268343236509),
847
+ new Grad2(0.793353340291235, -0.60876142900872),
848
+ new Grad2(0.608761429008721, -0.793353340291235),
849
+ new Grad2(0.38268343236509, -0.923879532511287),
850
+ new Grad2(0.130526192220052, -0.99144486137381),
851
+ new Grad2(-0.130526192220052, -0.99144486137381),
852
+ new Grad2(-0.38268343236509, -0.923879532511287),
853
+ new Grad2(-0.608761429008721, -0.793353340291235),
854
+ new Grad2(-0.793353340291235, -0.608761429008721),
855
+ new Grad2(-0.923879532511287, -0.38268343236509),
856
+ new Grad2(-0.99144486137381, -0.130526192220052),
857
+ new Grad2(-0.99144486137381, 0.130526192220051),
858
+ new Grad2(-0.923879532511287, 0.38268343236509),
859
+ new Grad2(-0.793353340291235, 0.608761429008721),
860
+ new Grad2(-0.608761429008721, 0.793353340291235),
861
+ new Grad2(-0.38268343236509, 0.923879532511287),
862
+ new Grad2(-0.130526192220052, 0.99144486137381)
863
+ };
864
+ Grad2[] grad2XBeforeY = new Grad2[grad2.length];
865
+ for (Grad2 grad21 : grad2) {
866
+ grad21.dx /= N2;
867
+ grad21.dy /= N2;
868
+ }
869
+ for (int i = 0; i < PSIZE; i++) {
870
+ GRADIENTS_2D[i] = grad2[i % grad2.length];
871
+ }
872
+
873
+ GRADIENTS_3D = new Grad3[PSIZE];
874
+ Grad3[] grad3 = {
875
+ new Grad3(-2.22474487139, -2.22474487139, -1.0),
876
+ new Grad3(-2.22474487139, -2.22474487139, 1.0),
877
+ new Grad3(-3.0862664687972017, -1.1721513422464978, 0.0),
878
+ new Grad3(-1.1721513422464978, -3.0862664687972017, 0.0),
879
+ new Grad3(-2.22474487139, -1.0, -2.22474487139),
880
+ new Grad3(-2.22474487139, 1.0, -2.22474487139),
881
+ new Grad3(-1.1721513422464978, 0.0, -3.0862664687972017),
882
+ new Grad3(-3.0862664687972017, 0.0, -1.1721513422464978),
883
+ new Grad3(-2.22474487139, -1.0, 2.22474487139),
884
+ new Grad3(-2.22474487139, 1.0, 2.22474487139),
885
+ new Grad3(-3.0862664687972017, 0.0, 1.1721513422464978),
886
+ new Grad3(-1.1721513422464978, 0.0, 3.0862664687972017),
887
+ new Grad3(-2.22474487139, 2.22474487139, -1.0),
888
+ new Grad3(-2.22474487139, 2.22474487139, 1.0),
889
+ new Grad3(-1.1721513422464978, 3.0862664687972017, 0.0),
890
+ new Grad3(-3.0862664687972017, 1.1721513422464978, 0.0),
891
+ new Grad3(-1.0, -2.22474487139, -2.22474487139),
892
+ new Grad3(1.0, -2.22474487139, -2.22474487139),
893
+ new Grad3(0.0, -3.0862664687972017, -1.1721513422464978),
894
+ new Grad3(0.0, -1.1721513422464978, -3.0862664687972017),
895
+ new Grad3(-1.0, -2.22474487139, 2.22474487139),
896
+ new Grad3(1.0, -2.22474487139, 2.22474487139),
897
+ new Grad3(0.0, -1.1721513422464978, 3.0862664687972017),
898
+ new Grad3(0.0, -3.0862664687972017, 1.1721513422464978),
899
+ new Grad3(-1.0, 2.22474487139, -2.22474487139),
900
+ new Grad3(1.0, 2.22474487139, -2.22474487139),
901
+ new Grad3(0.0, 1.1721513422464978, -3.0862664687972017),
902
+ new Grad3(0.0, 3.0862664687972017, -1.1721513422464978),
903
+ new Grad3(-1.0, 2.22474487139, 2.22474487139),
904
+ new Grad3(1.0, 2.22474487139, 2.22474487139),
905
+ new Grad3(0.0, 3.0862664687972017, 1.1721513422464978),
906
+ new Grad3(0.0, 1.1721513422464978, 3.0862664687972017),
907
+ new Grad3(2.22474487139, -2.22474487139, -1.0),
908
+ new Grad3(2.22474487139, -2.22474487139, 1.0),
909
+ new Grad3(1.1721513422464978, -3.0862664687972017, 0.0),
910
+ new Grad3(3.0862664687972017, -1.1721513422464978, 0.0),
911
+ new Grad3(2.22474487139, -1.0, -2.22474487139),
912
+ new Grad3(2.22474487139, 1.0, -2.22474487139),
913
+ new Grad3(3.0862664687972017, 0.0, -1.1721513422464978),
914
+ new Grad3(1.1721513422464978, 0.0, -3.0862664687972017),
915
+ new Grad3(2.22474487139, -1.0, 2.22474487139),
916
+ new Grad3(2.22474487139, 1.0, 2.22474487139),
917
+ new Grad3(1.1721513422464978, 0.0, 3.0862664687972017),
918
+ new Grad3(3.0862664687972017, 0.0, 1.1721513422464978),
919
+ new Grad3(2.22474487139, 2.22474487139, -1.0),
920
+ new Grad3(2.22474487139, 2.22474487139, 1.0),
921
+ new Grad3(3.0862664687972017, 1.1721513422464978, 0.0),
922
+ new Grad3(1.1721513422464978, 3.0862664687972017, 0.0)
923
+ };
924
+ for (Grad3 grad31 : grad3) {
925
+ grad31.dx /= N3;
926
+ grad31.dy /= N3;
927
+ grad31.dz /= N3;
928
+ }
929
+ for (int i = 0; i < PSIZE; i++) {
930
+ GRADIENTS_3D[i] = grad3[i % grad3.length];
931
+ }
932
+
933
+ GRADIENTS_4D = new Grad4[PSIZE];
934
+ Grad4[] grad4 = {
935
+ new Grad4(-0.753341017856078, -0.37968289875261624, -0.37968289875261624, -0.37968289875261624),
936
+ new Grad4(-0.7821684431180708, -0.4321472685365301, -0.4321472685365301, 0.12128480194602098),
937
+ new Grad4(-0.7821684431180708, -0.4321472685365301, 0.12128480194602098, -0.4321472685365301),
938
+ new Grad4(-0.7821684431180708, 0.12128480194602098, -0.4321472685365301, -0.4321472685365301),
939
+ new Grad4(-0.8586508742123365, -0.508629699630796, 0.044802370851755174, 0.044802370851755174),
940
+ new Grad4(-0.8586508742123365, 0.044802370851755174, -0.508629699630796, 0.044802370851755174),
941
+ new Grad4(-0.8586508742123365, 0.044802370851755174, 0.044802370851755174, -0.508629699630796),
942
+ new Grad4(-0.9982828964265062, -0.03381941603233842, -0.03381941603233842, -0.03381941603233842),
943
+ new Grad4(-0.37968289875261624, -0.753341017856078, -0.37968289875261624, -0.37968289875261624),
944
+ new Grad4(-0.4321472685365301, -0.7821684431180708, -0.4321472685365301, 0.12128480194602098),
945
+ new Grad4(-0.4321472685365301, -0.7821684431180708, 0.12128480194602098, -0.4321472685365301),
946
+ new Grad4(0.12128480194602098, -0.7821684431180708, -0.4321472685365301, -0.4321472685365301),
947
+ new Grad4(-0.508629699630796, -0.8586508742123365, 0.044802370851755174, 0.044802370851755174),
948
+ new Grad4(0.044802370851755174, -0.8586508742123365, -0.508629699630796, 0.044802370851755174),
949
+ new Grad4(0.044802370851755174, -0.8586508742123365, 0.044802370851755174, -0.508629699630796),
950
+ new Grad4(-0.03381941603233842, -0.9982828964265062, -0.03381941603233842, -0.03381941603233842),
951
+ new Grad4(-0.37968289875261624, -0.37968289875261624, -0.753341017856078, -0.37968289875261624),
952
+ new Grad4(-0.4321472685365301, -0.4321472685365301, -0.7821684431180708, 0.12128480194602098),
953
+ new Grad4(-0.4321472685365301, 0.12128480194602098, -0.7821684431180708, -0.4321472685365301),
954
+ new Grad4(0.12128480194602098, -0.4321472685365301, -0.7821684431180708, -0.4321472685365301),
955
+ new Grad4(-0.508629699630796, 0.044802370851755174, -0.8586508742123365, 0.044802370851755174),
956
+ new Grad4(0.044802370851755174, -0.508629699630796, -0.8586508742123365, 0.044802370851755174),
957
+ new Grad4(0.044802370851755174, 0.044802370851755174, -0.8586508742123365, -0.508629699630796),
958
+ new Grad4(-0.03381941603233842, -0.03381941603233842, -0.9982828964265062, -0.03381941603233842),
959
+ new Grad4(-0.37968289875261624, -0.37968289875261624, -0.37968289875261624, -0.753341017856078),
960
+ new Grad4(-0.4321472685365301, -0.4321472685365301, 0.12128480194602098, -0.7821684431180708),
961
+ new Grad4(-0.4321472685365301, 0.12128480194602098, -0.4321472685365301, -0.7821684431180708),
962
+ new Grad4(0.12128480194602098, -0.4321472685365301, -0.4321472685365301, -0.7821684431180708),
963
+ new Grad4(-0.508629699630796, 0.044802370851755174, 0.044802370851755174, -0.8586508742123365),
964
+ new Grad4(0.044802370851755174, -0.508629699630796, 0.044802370851755174, -0.8586508742123365),
965
+ new Grad4(0.044802370851755174, 0.044802370851755174, -0.508629699630796, -0.8586508742123365),
966
+ new Grad4(-0.03381941603233842, -0.03381941603233842, -0.03381941603233842, -0.9982828964265062),
967
+ new Grad4(-0.6740059517812944, -0.3239847771997537, -0.3239847771997537, 0.5794684678643381),
968
+ new Grad4(-0.7504883828755602, -0.4004672082940195, 0.15296486218853164, 0.5029860367700724),
969
+ new Grad4(-0.7504883828755602, 0.15296486218853164, -0.4004672082940195, 0.5029860367700724),
970
+ new Grad4(-0.8828161875373585, 0.08164729285680945, 0.08164729285680945, 0.4553054119602712),
971
+ new Grad4(-0.4553054119602712, -0.08164729285680945, -0.08164729285680945, 0.8828161875373585),
972
+ new Grad4(-0.5029860367700724, -0.15296486218853164, 0.4004672082940195, 0.7504883828755602),
973
+ new Grad4(-0.5029860367700724, 0.4004672082940195, -0.15296486218853164, 0.7504883828755602),
974
+ new Grad4(-0.5794684678643381, 0.3239847771997537, 0.3239847771997537, 0.6740059517812944),
975
+ new Grad4(-0.3239847771997537, -0.6740059517812944, -0.3239847771997537, 0.5794684678643381),
976
+ new Grad4(-0.4004672082940195, -0.7504883828755602, 0.15296486218853164, 0.5029860367700724),
977
+ new Grad4(0.15296486218853164, -0.7504883828755602, -0.4004672082940195, 0.5029860367700724),
978
+ new Grad4(0.08164729285680945, -0.8828161875373585, 0.08164729285680945, 0.4553054119602712),
979
+ new Grad4(-0.08164729285680945, -0.4553054119602712, -0.08164729285680945, 0.8828161875373585),
980
+ new Grad4(-0.15296486218853164, -0.5029860367700724, 0.4004672082940195, 0.7504883828755602),
981
+ new Grad4(0.4004672082940195, -0.5029860367700724, -0.15296486218853164, 0.7504883828755602),
982
+ new Grad4(0.3239847771997537, -0.5794684678643381, 0.3239847771997537, 0.6740059517812944),
983
+ new Grad4(-0.3239847771997537, -0.3239847771997537, -0.6740059517812944, 0.5794684678643381),
984
+ new Grad4(-0.4004672082940195, 0.15296486218853164, -0.7504883828755602, 0.5029860367700724),
985
+ new Grad4(0.15296486218853164, -0.4004672082940195, -0.7504883828755602, 0.5029860367700724),
986
+ new Grad4(0.08164729285680945, 0.08164729285680945, -0.8828161875373585, 0.4553054119602712),
987
+ new Grad4(-0.08164729285680945, -0.08164729285680945, -0.4553054119602712, 0.8828161875373585),
988
+ new Grad4(-0.15296486218853164, 0.4004672082940195, -0.5029860367700724, 0.7504883828755602),
989
+ new Grad4(0.4004672082940195, -0.15296486218853164, -0.5029860367700724, 0.7504883828755602),
990
+ new Grad4(0.3239847771997537, 0.3239847771997537, -0.5794684678643381, 0.6740059517812944),
991
+ new Grad4(-0.6740059517812944, -0.3239847771997537, 0.5794684678643381, -0.3239847771997537),
992
+ new Grad4(-0.7504883828755602, -0.4004672082940195, 0.5029860367700724, 0.15296486218853164),
993
+ new Grad4(-0.7504883828755602, 0.15296486218853164, 0.5029860367700724, -0.4004672082940195),
994
+ new Grad4(-0.8828161875373585, 0.08164729285680945, 0.4553054119602712, 0.08164729285680945),
995
+ new Grad4(-0.4553054119602712, -0.08164729285680945, 0.8828161875373585, -0.08164729285680945),
996
+ new Grad4(-0.5029860367700724, -0.15296486218853164, 0.7504883828755602, 0.4004672082940195),
997
+ new Grad4(-0.5029860367700724, 0.4004672082940195, 0.7504883828755602, -0.15296486218853164),
998
+ new Grad4(-0.5794684678643381, 0.3239847771997537, 0.6740059517812944, 0.3239847771997537),
999
+ new Grad4(-0.3239847771997537, -0.6740059517812944, 0.5794684678643381, -0.3239847771997537),
1000
+ new Grad4(-0.4004672082940195, -0.7504883828755602, 0.5029860367700724, 0.15296486218853164),
1001
+ new Grad4(0.15296486218853164, -0.7504883828755602, 0.5029860367700724, -0.4004672082940195),
1002
+ new Grad4(0.08164729285680945, -0.8828161875373585, 0.4553054119602712, 0.08164729285680945),
1003
+ new Grad4(-0.08164729285680945, -0.4553054119602712, 0.8828161875373585, -0.08164729285680945),
1004
+ new Grad4(-0.15296486218853164, -0.5029860367700724, 0.7504883828755602, 0.4004672082940195),
1005
+ new Grad4(0.4004672082940195, -0.5029860367700724, 0.7504883828755602, -0.15296486218853164),
1006
+ new Grad4(0.3239847771997537, -0.5794684678643381, 0.6740059517812944, 0.3239847771997537),
1007
+ new Grad4(-0.3239847771997537, -0.3239847771997537, 0.5794684678643381, -0.6740059517812944),
1008
+ new Grad4(-0.4004672082940195, 0.15296486218853164, 0.5029860367700724, -0.7504883828755602),
1009
+ new Grad4(0.15296486218853164, -0.4004672082940195, 0.5029860367700724, -0.7504883828755602),
1010
+ new Grad4(0.08164729285680945, 0.08164729285680945, 0.4553054119602712, -0.8828161875373585),
1011
+ new Grad4(-0.08164729285680945, -0.08164729285680945, 0.8828161875373585, -0.4553054119602712),
1012
+ new Grad4(-0.15296486218853164, 0.4004672082940195, 0.7504883828755602, -0.5029860367700724),
1013
+ new Grad4(0.4004672082940195, -0.15296486218853164, 0.7504883828755602, -0.5029860367700724),
1014
+ new Grad4(0.3239847771997537, 0.3239847771997537, 0.6740059517812944, -0.5794684678643381),
1015
+ new Grad4(-0.6740059517812944, 0.5794684678643381, -0.3239847771997537, -0.3239847771997537),
1016
+ new Grad4(-0.7504883828755602, 0.5029860367700724, -0.4004672082940195, 0.15296486218853164),
1017
+ new Grad4(-0.7504883828755602, 0.5029860367700724, 0.15296486218853164, -0.4004672082940195),
1018
+ new Grad4(-0.8828161875373585, 0.4553054119602712, 0.08164729285680945, 0.08164729285680945),
1019
+ new Grad4(-0.4553054119602712, 0.8828161875373585, -0.08164729285680945, -0.08164729285680945),
1020
+ new Grad4(-0.5029860367700724, 0.7504883828755602, -0.15296486218853164, 0.4004672082940195),
1021
+ new Grad4(-0.5029860367700724, 0.7504883828755602, 0.4004672082940195, -0.15296486218853164),
1022
+ new Grad4(-0.5794684678643381, 0.6740059517812944, 0.3239847771997537, 0.3239847771997537),
1023
+ new Grad4(-0.3239847771997537, 0.5794684678643381, -0.6740059517812944, -0.3239847771997537),
1024
+ new Grad4(-0.4004672082940195, 0.5029860367700724, -0.7504883828755602, 0.15296486218853164),
1025
+ new Grad4(0.15296486218853164, 0.5029860367700724, -0.7504883828755602, -0.4004672082940195),
1026
+ new Grad4(0.08164729285680945, 0.4553054119602712, -0.8828161875373585, 0.08164729285680945),
1027
+ new Grad4(-0.08164729285680945, 0.8828161875373585, -0.4553054119602712, -0.08164729285680945),
1028
+ new Grad4(-0.15296486218853164, 0.7504883828755602, -0.5029860367700724, 0.4004672082940195),
1029
+ new Grad4(0.4004672082940195, 0.7504883828755602, -0.5029860367700724, -0.15296486218853164),
1030
+ new Grad4(0.3239847771997537, 0.6740059517812944, -0.5794684678643381, 0.3239847771997537),
1031
+ new Grad4(-0.3239847771997537, 0.5794684678643381, -0.3239847771997537, -0.6740059517812944),
1032
+ new Grad4(-0.4004672082940195, 0.5029860367700724, 0.15296486218853164, -0.7504883828755602),
1033
+ new Grad4(0.15296486218853164, 0.5029860367700724, -0.4004672082940195, -0.7504883828755602),
1034
+ new Grad4(0.08164729285680945, 0.4553054119602712, 0.08164729285680945, -0.8828161875373585),
1035
+ new Grad4(-0.08164729285680945, 0.8828161875373585, -0.08164729285680945, -0.4553054119602712),
1036
+ new Grad4(-0.15296486218853164, 0.7504883828755602, 0.4004672082940195, -0.5029860367700724),
1037
+ new Grad4(0.4004672082940195, 0.7504883828755602, -0.15296486218853164, -0.5029860367700724),
1038
+ new Grad4(0.3239847771997537, 0.6740059517812944, 0.3239847771997537, -0.5794684678643381),
1039
+ new Grad4(0.5794684678643381, -0.6740059517812944, -0.3239847771997537, -0.3239847771997537),
1040
+ new Grad4(0.5029860367700724, -0.7504883828755602, -0.4004672082940195, 0.15296486218853164),
1041
+ new Grad4(0.5029860367700724, -0.7504883828755602, 0.15296486218853164, -0.4004672082940195),
1042
+ new Grad4(0.4553054119602712, -0.8828161875373585, 0.08164729285680945, 0.08164729285680945),
1043
+ new Grad4(0.8828161875373585, -0.4553054119602712, -0.08164729285680945, -0.08164729285680945),
1044
+ new Grad4(0.7504883828755602, -0.5029860367700724, -0.15296486218853164, 0.4004672082940195),
1045
+ new Grad4(0.7504883828755602, -0.5029860367700724, 0.4004672082940195, -0.15296486218853164),
1046
+ new Grad4(0.6740059517812944, -0.5794684678643381, 0.3239847771997537, 0.3239847771997537),
1047
+ new Grad4(0.5794684678643381, -0.3239847771997537, -0.6740059517812944, -0.3239847771997537),
1048
+ new Grad4(0.5029860367700724, -0.4004672082940195, -0.7504883828755602, 0.15296486218853164),
1049
+ new Grad4(0.5029860367700724, 0.15296486218853164, -0.7504883828755602, -0.4004672082940195),
1050
+ new Grad4(0.4553054119602712, 0.08164729285680945, -0.8828161875373585, 0.08164729285680945),
1051
+ new Grad4(0.8828161875373585, -0.08164729285680945, -0.4553054119602712, -0.08164729285680945),
1052
+ new Grad4(0.7504883828755602, -0.15296486218853164, -0.5029860367700724, 0.4004672082940195),
1053
+ new Grad4(0.7504883828755602, 0.4004672082940195, -0.5029860367700724, -0.15296486218853164),
1054
+ new Grad4(0.6740059517812944, 0.3239847771997537, -0.5794684678643381, 0.3239847771997537),
1055
+ new Grad4(0.5794684678643381, -0.3239847771997537, -0.3239847771997537, -0.6740059517812944),
1056
+ new Grad4(0.5029860367700724, -0.4004672082940195, 0.15296486218853164, -0.7504883828755602),
1057
+ new Grad4(0.5029860367700724, 0.15296486218853164, -0.4004672082940195, -0.7504883828755602),
1058
+ new Grad4(0.4553054119602712, 0.08164729285680945, 0.08164729285680945, -0.8828161875373585),
1059
+ new Grad4(0.8828161875373585, -0.08164729285680945, -0.08164729285680945, -0.4553054119602712),
1060
+ new Grad4(0.7504883828755602, -0.15296486218853164, 0.4004672082940195, -0.5029860367700724),
1061
+ new Grad4(0.7504883828755602, 0.4004672082940195, -0.15296486218853164, -0.5029860367700724),
1062
+ new Grad4(0.6740059517812944, 0.3239847771997537, 0.3239847771997537, -0.5794684678643381),
1063
+ new Grad4(0.03381941603233842, 0.03381941603233842, 0.03381941603233842, 0.9982828964265062),
1064
+ new Grad4(-0.044802370851755174, -0.044802370851755174, 0.508629699630796, 0.8586508742123365),
1065
+ new Grad4(-0.044802370851755174, 0.508629699630796, -0.044802370851755174, 0.8586508742123365),
1066
+ new Grad4(-0.12128480194602098, 0.4321472685365301, 0.4321472685365301, 0.7821684431180708),
1067
+ new Grad4(0.508629699630796, -0.044802370851755174, -0.044802370851755174, 0.8586508742123365),
1068
+ new Grad4(0.4321472685365301, -0.12128480194602098, 0.4321472685365301, 0.7821684431180708),
1069
+ new Grad4(0.4321472685365301, 0.4321472685365301, -0.12128480194602098, 0.7821684431180708),
1070
+ new Grad4(0.37968289875261624, 0.37968289875261624, 0.37968289875261624, 0.753341017856078),
1071
+ new Grad4(0.03381941603233842, 0.03381941603233842, 0.9982828964265062, 0.03381941603233842),
1072
+ new Grad4(-0.044802370851755174, 0.044802370851755174, 0.8586508742123365, 0.508629699630796),
1073
+ new Grad4(-0.044802370851755174, 0.508629699630796, 0.8586508742123365, -0.044802370851755174),
1074
+ new Grad4(-0.12128480194602098, 0.4321472685365301, 0.7821684431180708, 0.4321472685365301),
1075
+ new Grad4(0.508629699630796, -0.044802370851755174, 0.8586508742123365, -0.044802370851755174),
1076
+ new Grad4(0.4321472685365301, -0.12128480194602098, 0.7821684431180708, 0.4321472685365301),
1077
+ new Grad4(0.4321472685365301, 0.4321472685365301, 0.7821684431180708, -0.12128480194602098),
1078
+ new Grad4(0.37968289875261624, 0.37968289875261624, 0.753341017856078, 0.37968289875261624),
1079
+ new Grad4(0.03381941603233842, 0.9982828964265062, 0.03381941603233842, 0.03381941603233842),
1080
+ new Grad4(-0.044802370851755174, 0.8586508742123365, -0.044802370851755174, 0.508629699630796),
1081
+ new Grad4(-0.044802370851755174, 0.8586508742123365, 0.508629699630796, -0.044802370851755174),
1082
+ new Grad4(-0.12128480194602098, 0.7821684431180708, 0.4321472685365301, 0.4321472685365301),
1083
+ new Grad4(0.508629699630796, 0.8586508742123365, -0.044802370851755174, -0.044802370851755174),
1084
+ new Grad4(0.4321472685365301, 0.7821684431180708, -0.12128480194602098, 0.4321472685365301),
1085
+ new Grad4(0.4321472685365301, 0.7821684431180708, 0.4321472685365301, -0.12128480194602098),
1086
+ new Grad4(0.37968289875261624, 0.753341017856078, 0.37968289875261624, 0.37968289875261624),
1087
+ new Grad4(0.9982828964265062, 0.03381941603233842, 0.03381941603233842, 0.03381941603233842),
1088
+ new Grad4(0.8586508742123365, -0.044802370851755174, -0.044802370851755174, 0.508629699630796),
1089
+ new Grad4(0.8586508742123365, -0.044802370851755174, 0.508629699630796, -0.044802370851755174),
1090
+ new Grad4(0.7821684431180708, -0.12128480194602098, 0.4321472685365301, 0.4321472685365301),
1091
+ new Grad4(0.8586508742123365, 0.508629699630796, -0.044802370851755174, -0.044802370851755174),
1092
+ new Grad4(0.7821684431180708, 0.4321472685365301, -0.12128480194602098, 0.4321472685365301),
1093
+ new Grad4(0.7821684431180708, 0.4321472685365301, 0.4321472685365301, -0.12128480194602098),
1094
+ new Grad4(0.753341017856078, 0.37968289875261624, 0.37968289875261624, 0.37968289875261624)
1095
+ };
1096
+ for (Grad4 grad41 : grad4) {
1097
+ grad41.dx /= N4;
1098
+ grad41.dy /= N4;
1099
+ grad41.dz /= N4;
1100
+ grad41.dw /= N4;
1101
+ }
1102
+ for (int i = 0; i < PSIZE; i++) {
1103
+ GRADIENTS_4D[i] = grad4[i % grad4.length];
1104
+ }
1105
+ }
1106
+ }