From http://www.jwz.org/xscreensaver/xscreensaver-5.37.tar.gz
[xscreensaver] / hacks / hyperball.c
1 /* xscreensaver, Copyright (c) 1992, 1995, 1996, 1998, 2000
2  *  Jamie Zawinski <jwz@jwz.org>
3  *
4  * Permission to use, copy, modify, distribute, and sell this software and its
5  * documentation for any purpose is hereby granted without fee, provided that
6  * the above copyright notice appear in all copies and that both that
7  * copyright notice and this permission notice appear in supporting
8  * documentation.  No representations are made about the suitability of this
9  * software for any purpose.  It is provided "as is" without express or 
10  * implied warranty.
11  *
12  * This code derived from TI Explorer Lisp code by Joe Keane, Fritz Mueller,
13  * and Jamie Zawinski.
14  */
15
16 #include <math.h>
17 #include "screenhack.h"
18
19 #define POINT_COUNT 600
20 #define LINE_COUNT 1200
21
22 #define ANGLE_SCALE 0.001
23
24 struct point_info
25 {
26   float pg_a;
27   float pg_b;
28   float pg_c;
29   float pg_d;
30 };
31
32 struct line_info
33 {
34   short li_ip;
35   short li_iq;
36   char li_color;
37   char li_pad[3];
38 };
39
40 struct point_state
41 {
42   short old_x, old_y;
43   short new_x, new_y;
44   unsigned char old_dep, new_dep;
45 };
46
47 struct hyper_state
48 {
49   char hs_stop;
50   char hs_resize;
51   char hs_redraw;
52   char hs_icon;
53   Display *hs_display;
54   Window hs_window;
55   float hs_observer_z;
56   float hs_unit_scale;
57   float hs_offset_x;
58   float hs_offset_y;
59   int hs_delay;
60   double hs_angle_xy;
61   double hs_angle_xz;
62   double hs_angle_yz;
63   double hs_angle_xw;
64   double hs_angle_yw;
65   double hs_angle_zw;
66   double hs_cos_xy, hs_sin_xy;
67   double hs_cos_xz, hs_sin_xz;
68   double hs_cos_yz, hs_sin_yz;
69   double hs_cos_xw, hs_sin_xw;
70   double hs_cos_yw, hs_sin_yw;
71   double hs_cos_zw, hs_sin_zw;
72   double hs_ref_ax, hs_ref_ay, hs_ref_az, hs_ref_aw;
73   double hs_ref_bx, hs_ref_by, hs_ref_bz, hs_ref_bw;
74   double hs_ref_cx, hs_ref_cy, hs_ref_cz, hs_ref_cw;
75   double hs_ref_dx, hs_ref_dy, hs_ref_dz, hs_ref_dw;
76   GC hs_color_gcs[8][8];
77   GC black_gc;
78   char hs_moved[POINT_COUNT];
79   struct point_state hs_points[POINT_COUNT];
80   int roted;
81 };
82
83 static const struct point_info point_table[POINT_COUNT];
84 static const struct line_info line_table[LINE_COUNT];
85
86 static void set_sizes (struct hyper_state *hs, int width, int height);
87
88 static void *
89 hyperball_init (Display *dpy, Window win)
90 {
91   struct hyper_state *hs = (struct hyper_state *) calloc (1, sizeof(*hs));
92
93   XGCValues gcv;
94   Colormap cmap;
95   /* double xy, xz, yz, xw, yw, zw; */
96   unsigned long bg_pixel;
97   float observer_z;
98   int delay;
99
100   hs->hs_display = dpy;
101   hs->hs_window = win;
102
103   observer_z = get_float_resource (dpy, "observer-z", "Float");
104   if (observer_z < 1.125)
105     observer_z = 1.125;
106   hs->hs_observer_z = observer_z;
107
108   {
109     XWindowAttributes wa;
110     XGetWindowAttributes (dpy, win, &wa);
111     cmap = wa.colormap;
112     set_sizes (hs, wa.width, wa.height);
113   }
114
115   hs->hs_angle_xy = get_float_resource (dpy, "xy", "Float") * ANGLE_SCALE;
116   hs->hs_angle_xz = get_float_resource (dpy, "xz", "Float") * ANGLE_SCALE;
117   hs->hs_angle_yz = get_float_resource (dpy, "yz", "Float") * ANGLE_SCALE;
118   hs->hs_angle_xw = get_float_resource (dpy, "xw", "Float") * ANGLE_SCALE;
119   hs->hs_angle_yw = get_float_resource (dpy, "yw", "Float") * ANGLE_SCALE;
120   hs->hs_angle_zw = get_float_resource (dpy, "zw", "Float") * ANGLE_SCALE;
121
122   delay = get_integer_resource (dpy, "delay", "Integer");
123   hs->hs_delay = delay;
124
125   bg_pixel = get_pixel_resource (dpy, cmap, "background", "Background");
126
127   if (mono_p)
128     {
129       GC black_gc;
130       unsigned long fg_pixel;
131       GC white_gc;
132
133       gcv.function = GXcopy;
134       gcv.foreground = bg_pixel;
135       black_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
136       fg_pixel = get_pixel_resource (dpy, cmap, "foreground", "Foreground");
137       gcv.foreground = fg_pixel;
138       white_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
139       hs->hs_color_gcs[0][0] = black_gc;
140       hs->hs_color_gcs[0][1] = white_gc;
141     }
142   else
143     {
144       int col;
145       int dep;
146
147       gcv.function = GXcopy;
148
149       gcv.foreground = get_pixel_resource (dpy, cmap,
150                                            "background", "Background");
151       hs->black_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
152
153       for (col = 0; col < 8; col++)
154         for (dep = 0; dep < 8; dep++)
155           {
156             char buffer[16];
157             unsigned long fg_pixel;
158             GC color_gc;
159
160             sprintf (buffer, "color%d%d", col, dep);
161             fg_pixel = get_pixel_resource (dpy, cmap, buffer, "Foreground");
162             gcv.foreground = fg_pixel /*^ bg_pixel*/;
163             color_gc = XCreateGC (dpy, win, GCForeground|GCFunction, &gcv);
164             hs->hs_color_gcs[col][dep] = color_gc;
165           }
166     }
167
168   {
169   double xy;
170   double xz;
171   double yz;
172   double xw;
173   double yw;
174   double zw;
175 #if 1
176   double cos_xy, sin_xy;
177   double cos_xz, sin_xz;
178   double cos_yz, sin_yz;
179   double cos_xw, sin_xw;
180   double cos_yw, sin_yw;
181   double cos_zw, sin_zw;
182 #endif
183
184   hs->hs_ref_ax = 1.0, hs->hs_ref_ay = 0.0, hs->hs_ref_az = 0.0, hs->hs_ref_aw = 0.0;
185   hs->hs_ref_bx = 0.0, hs->hs_ref_by = 1.0, hs->hs_ref_bz = 0.0, hs->hs_ref_bw = 0.0;
186   hs->hs_ref_cx = 0.0, hs->hs_ref_cy = 0.0, hs->hs_ref_cz = 1.0, hs->hs_ref_cw = 0.0;
187   hs->hs_ref_dx = 0.0, hs->hs_ref_dy = 0.0, hs->hs_ref_dz = 0.0, hs->hs_ref_dw = 1.0;
188
189   xy = hs->hs_angle_xy;
190   xz = hs->hs_angle_xz;
191   yz = hs->hs_angle_yz;
192   xw = hs->hs_angle_xw;
193   yw = hs->hs_angle_yw;
194   zw = hs->hs_angle_zw;
195
196   cos_xy = cos (xy), sin_xy = sin (xy);
197   hs->hs_cos_xy = cos_xy, hs->hs_sin_xy = sin_xy;
198   cos_xz = cos (xz), sin_xz = sin (xz);
199   hs->hs_cos_xz = cos_xz, hs->hs_sin_xz = sin_xz;
200   cos_yz = cos (yz), sin_yz = sin (yz);
201   hs->hs_cos_yz = cos_yz, hs->hs_sin_yz = sin_yz;
202   cos_xw = cos (xw), sin_xw = sin (xw);
203   hs->hs_cos_xw = cos_xw, hs->hs_sin_xw = sin_xw;
204   cos_yw = cos (yw), sin_yw = sin (yw);
205   hs->hs_cos_yw = cos_yw, hs->hs_sin_yw = sin_yw;
206   cos_zw = cos (zw), sin_zw = sin (zw);
207   hs->hs_cos_zw = cos_zw, hs->hs_sin_zw = sin_zw;
208   }
209
210   return hs;
211 }
212
213
214 static unsigned long
215 hyperball_draw (Display *dpy, Window window, void *closure)
216 {
217   struct hyper_state *hs = (struct hyper_state *) closure;
218
219   int icon;
220   int resize;
221   int redraw;
222   int stop;
223   int delay;
224
225   icon = hs->hs_icon;
226   resize = hs->hs_resize;
227   if (icon || !(hs->roted | resize))
228     goto skip1;
229
230 #ifdef HAVE_JWXYZ       /* Don't second-guess Quartz's double-buffering */
231   XClearWindow (dpy, window);
232 #endif
233
234   {
235     int pc;
236     const struct point_info *point_ptr;
237     struct point_state *point_state;
238     float observer_z;
239     float unit_scale;
240     float offset_x;
241     float offset_y;
242     char *mark_ptr;
243
244     pc = POINT_COUNT;
245     point_ptr = &point_table[0];
246     point_state = &hs->hs_points[0];
247     mark_ptr = &hs->hs_moved[0];
248
249     while (--pc >= 0)
250       {
251         double pos_a;
252         double pos_b;
253         double pos_c;
254         double pos_d;
255         double az, bz, cz, dz;
256         double sum_z;
257         double ax, bx, cx, dx;
258         double sum_x;
259         double ay, by, cy, dy;
260         double sum_y;
261         double mul;
262         int old_x;
263         int old_y;
264         int old_dep;
265         double xf;
266         double yf;
267         int new_x;
268         int new_y;
269         int new_dep;
270         int mov;
271
272         pos_a = point_ptr->pg_a;
273         pos_b = point_ptr->pg_b;
274         pos_c = point_ptr->pg_c;
275         pos_d = point_ptr->pg_d;
276         point_ptr++;
277         az = hs->hs_ref_az; bz = hs->hs_ref_bz; cz = hs->hs_ref_cz; dz = hs->hs_ref_dz;
278         ax = hs->hs_ref_ax; bx = hs->hs_ref_bx; cx = hs->hs_ref_cx; dx = hs->hs_ref_dx;
279         ay = hs->hs_ref_ay; by = hs->hs_ref_by; cy = hs->hs_ref_cy; dy = hs->hs_ref_dy;
280         sum_z = pos_a * az + pos_b * bz + pos_c * cz + pos_d * dz;
281         observer_z = hs->hs_observer_z;
282         unit_scale = hs->hs_unit_scale;
283         sum_x = pos_a * ax + pos_b * bx + pos_c * cx + pos_d * dx;
284         sum_y = pos_a * ay + pos_b * by + pos_c * cy + pos_d * dy;
285         mul = unit_scale / (observer_z - sum_z);
286         offset_x = hs->hs_offset_x;
287         offset_y = hs->hs_offset_y;
288         old_x = point_state->new_x;
289         old_y = point_state->new_y;
290         old_dep = point_state->new_dep;
291         xf = sum_x * mul + offset_x;
292         yf = sum_y * mul + offset_y;
293         new_x = (int)rint(xf);
294         new_y = (int)rint(yf);
295         new_dep = (int)floor(sum_z * -128.0) + 128;
296         point_state->old_x = old_x;
297         point_state->old_y = old_y;
298         point_state->old_dep = old_dep;
299         point_state->new_x = new_x;
300         point_state->new_y = new_y;
301         point_state->new_dep = new_dep;
302         point_state++;
303         mov = new_x != old_x || new_y != old_y || new_dep != old_dep;
304         *mark_ptr = mov;
305         mark_ptr++;
306       }
307   }
308
309  skip1:
310   icon = hs->hs_icon;
311   redraw = hs->hs_redraw;
312   if (icon || !(hs->roted | redraw))
313     goto skip2;
314
315   {
316     int lc;
317     const struct line_info *li_ptr;
318     int mono;
319     Window win = hs->hs_window;
320
321     lc = LINE_COUNT;
322     li_ptr = &line_table[0];
323     mono = mono_p;
324
325     while (--lc >= 0)
326       {
327         int ip;
328         int iq;
329         int col;
330         int mov_p;
331         int mov_q;
332         struct point_state *sp;
333         struct point_state *sq;
334         int p_x;
335         int p_y;
336         int q_x;
337         int q_y;
338         GC erase_gc;
339         GC draw_gc;
340         int new_sum;
341         int new_dep;
342
343         ip = li_ptr->li_ip;
344         iq = li_ptr->li_iq;
345         col = li_ptr->li_color;
346         li_ptr++;
347         mov_p = hs->hs_moved[ip];
348         mov_q = hs->hs_moved[iq];
349         if (!(redraw | mov_p | mov_q))
350           continue;
351
352         sp = &hs->hs_points[ip];
353         sq = &hs->hs_points[iq];
354
355         if (mono)
356           {
357             erase_gc = hs->hs_color_gcs[0][0];
358             draw_gc = hs->hs_color_gcs[0][1];
359           }
360         else
361           {
362             GC *row;
363             new_sum = sp->new_dep + sq->new_dep;
364             row = &hs->hs_color_gcs[col][0];
365             new_dep = new_sum >> 6;
366             erase_gc = hs->black_gc;
367             draw_gc = row[new_dep];
368           }
369
370         if (!redraw && erase_gc)
371           {
372             p_x = sp->old_x;
373             p_y = sp->old_y;
374             q_x = sq->old_x;
375             q_y = sq->old_y;
376             XDrawLine (dpy, win, erase_gc, p_x, p_y, q_x, q_y);
377           }
378
379         p_x = sp->new_x;
380         p_y = sp->new_y;
381         q_x = sq->new_x;
382         q_y = sq->new_y;
383         XDrawLine (dpy, win, draw_gc, p_x, p_y, q_x, q_y);
384       }
385   }
386
387  skip2:
388   stop = hs->hs_stop;
389   hs->roted = 0;
390   if (stop)
391     goto skip3;
392
393   hs->roted = 1;
394
395   {
396     double cos_a;
397     double sin_a;
398     double old_u;
399     double old_v;
400     double new_u;
401     double new_v;
402
403     /* If you get error messages about the following forms, and you think you're
404        using an ANSI C conforming compiler, then you're mistaken.  Possibly you're
405        mixing an ANSI compiler with a non-ANSI preprocessor, or vice versa.
406        Regardless, your system is broken; it's not a bug in this program.
407     */
408 #if defined(__STDC__) || defined(__ANSI_CPP__)
409
410 #define rotate(name,dim0,dim1)                  \
411     old_u = hs->hs_ref_##name##dim0;            \
412     old_v = hs->hs_ref_##name##dim1;            \
413     new_u = old_u * cos_a + old_v * sin_a;      \
414     new_v = old_v * cos_a - old_u * sin_a;      \
415     hs->hs_ref_##name##dim0 = new_u;            \
416     hs->hs_ref_##name##dim1 = new_v;
417
418 #define rotates(dim0,dim1)                      \
419     if (hs->hs_sin_##dim0##dim1 != 0) {         \
420       cos_a = hs->hs_cos_##dim0##dim1;          \
421       sin_a = hs->hs_sin_##dim0##dim1;          \
422       rotate(a, dim0, dim1);                    \
423       rotate(b, dim0, dim1);                    \
424       rotate(c, dim0, dim1);                    \
425       rotate(d, dim0, dim1);                    \
426     }
427
428 #else /* !__STDC__, courtesy of Andreas Luik <luik@isa.de> */
429
430 #define rotate(name,dim0,dim1,cos,sin)          \
431     old_u = hs->hs_ref_/**/name/**/dim0;        \
432     old_v = hs->hs_ref_/**/name/**/dim1;        \
433     new_u = old_u * cos_a + old_v * sin_a;      \
434     new_v = old_v * cos_a - old_u * sin_a;      \
435     hs->hs_ref_/**/name/**/dim0 = new_u;        \
436     hs->hs_ref_/**/name/**/dim1 = new_v;
437
438 #define rotates(dim0,dim1)                      \
439     if (hs->hs_sin_/**/dim0/**/dim1 != 0) {     \
440       cos_a = hs->hs_cos_/**/dim0/**/dim1;      \
441       sin_a = hs->hs_sin_/**/dim0/**/dim1;      \
442       rotate(a, dim0, dim1);                    \
443       rotate(b, dim0, dim1);                    \
444       rotate(c, dim0, dim1);                    \
445       rotate(d, dim0, dim1);                    \
446     }
447
448 #endif
449
450     rotates (x, y);
451     rotates (x, z);
452     rotates (y, z);
453     rotates (x, w);
454     rotates (y, w);
455     rotates (z, w);
456   }
457
458  skip3:
459   /* stop = hs->hs_stop; */
460   delay = hs->hs_delay;
461   if (stop && delay < 10000)
462     delay = 10000;
463
464   hs->hs_redraw = 0;
465   hs->hs_resize = 0;
466
467   return delay;
468 }
469
470
471 static Bool
472 hyperball_event (Display *dpy, Window win, void *closure, XEvent *event)
473 {
474   struct hyper_state *hs = (struct hyper_state *) closure;
475
476   hs->hs_redraw = 0;
477
478   switch (event->type)
479     {
480     case Expose:
481       hs->hs_icon = 0;
482       hs->hs_redraw = 1;
483       break;
484
485     case ButtonPress:
486       switch (event->xbutton.button)
487         {
488         case 2:
489           hs->hs_stop = !hs->hs_stop;
490           break;
491         default:
492           break;
493         }
494       break;
495
496 #ifndef HAVE_JWXYZ
497     case UnmapNotify:
498       hs->hs_icon = 1;
499       hs->hs_redraw = 0;
500       break;
501 #endif
502
503     default:
504       break;
505     }
506
507   if (hs->hs_redraw)
508     XClearWindow (dpy, win);
509
510   return False;
511 }
512
513 static void
514 hyperball_reshape (Display *dpy, Window window, void *closure, 
515                  unsigned int w, unsigned int h)
516 {
517   struct hyper_state *hs = (struct hyper_state *) closure;
518   hs->hs_icon = 0;
519   hs->hs_resize = 1;
520   hs->hs_redraw = 1;
521   set_sizes (hs, w, h);
522   XClearWindow (dpy, window);
523 }
524
525
526 static void
527 set_sizes (struct hyper_state *hs, int width, int height)
528 {
529   double observer_z;
530   int min_dim;
531   double var;
532   double offset_x;
533   double offset_y;
534   double unit_scale;
535
536   observer_z = hs->hs_observer_z;
537   min_dim = width < height ? width : height;
538   var = sqrt(observer_z * observer_z - 1.0);
539   offset_x = 0.5 * (width - 1);
540   offset_y = 0.5 * (height - 1);
541   unit_scale = 0.4 * min_dim * var;
542   hs->hs_offset_x = (float)offset_x;
543   hs->hs_offset_y = (float)offset_y;
544   hs->hs_unit_scale = (float)unit_scale;
545 }
546
547 static void
548 hyperball_free (Display *dpy, Window window, void *closure)
549 {
550   struct hyper_state *hs = (struct hyper_state *) closure;
551   free (hs);
552 }
553
554 /* data */
555
556 static const struct point_info point_table[POINT_COUNT] =
557 {
558     { 0.93, 0.30, 0.09, 0.03, },
559     { 0.84, 0.49, -0.08, 0.05, },
560     { 0.72, 0.65, 0.02, -0.09, },
561     { 0.57, 0.79, 0.05, 0.07, },
562     { 0.40, 0.89, -0.09, -0.01, },
563     { 0.20, 0.95, 0.07, -0.06, },
564     { 0.00, 0.97, 0.00, 0.09, },
565     { -0.20, 0.95, -0.07, -0.06, },
566     { -0.40, 0.89, 0.09, -0.01, },
567     { -0.57, 0.79, -0.05, 0.07, },
568     { -0.72, 0.65, -0.02, -0.09, },
569     { -0.84, 0.49, 0.08, 0.05, },
570     { -0.93, 0.30, -0.09, 0.03, },
571     { -0.97, 0.10, 0.04, -0.08, },
572     { -0.97, -0.10, 0.04, 0.08, },
573     { -0.93, -0.30, -0.09, -0.03, },
574     { -0.84, -0.49, 0.08, -0.05, },
575     { -0.72, -0.65, -0.02, 0.09, },
576     { -0.57, -0.79, -0.05, -0.07, },
577     { -0.40, -0.89, 0.09, 0.01, },
578     { -0.20, -0.95, -0.07, 0.06, },
579     { 0.00, -0.97, 0.00, -0.09, },
580     { 0.20, -0.95, 0.07, 0.06, },
581     { 0.40, -0.89, -0.09, 0.01, },
582     { 0.57, -0.79, 0.05, -0.07, },
583     { 0.72, -0.65, 0.02, 0.09, },
584     { 0.84, -0.49, -0.08, -0.05, },
585     { 0.93, -0.30, 0.09, -0.03, },
586     { 0.97, -0.10, -0.04, 0.08, },
587     { 0.97, 0.10, -0.04, -0.08, },
588     { 0.27, 0.83, -0.13, -0.41, },
589     { 0.09, 0.87, 0.40, 0.18, },
590     { -0.09, 0.87, -0.40, 0.18, },
591     { -0.27, 0.83, 0.13, -0.41, },
592     { -0.44, 0.76, 0.22, 0.38, },
593     { -0.59, 0.65, -0.42, -0.09, },
594     { -0.71, 0.51, 0.35, -0.25, },
595     { -0.80, 0.36, -0.05, 0.43, },
596     { -0.86, 0.18, -0.29, -0.32, },
597     { -0.88, 0.00, 0.43, 0.00, },
598     { -0.86, -0.18, -0.29, 0.32, },
599     { -0.80, -0.36, -0.05, -0.43, },
600     { -0.71, -0.51, 0.35, 0.25, },
601     { -0.59, -0.65, -0.42, 0.09, },
602     { -0.44, -0.76, 0.22, -0.38, },
603     { -0.27, -0.83, 0.13, 0.41, },
604     { -0.09, -0.87, -0.40, -0.18, },
605     { 0.09, -0.87, 0.40, -0.18, },
606     { 0.27, -0.83, -0.13, 0.41, },
607     { 0.44, -0.76, -0.22, -0.38, },
608     { 0.59, -0.65, 0.42, 0.09, },
609     { 0.71, -0.51, -0.35, 0.25, },
610     { 0.80, -0.36, 0.05, -0.43, },
611     { 0.86, -0.18, 0.29, 0.32, },
612     { 0.88, 0.00, -0.43, 0.00, },
613     { 0.86, 0.18, 0.29, -0.32, },
614     { 0.80, 0.36, 0.05, 0.43, },
615     { 0.71, 0.51, -0.35, -0.25, },
616     { 0.59, 0.65, 0.42, -0.09, },
617     { 0.44, 0.76, -0.22, 0.38, },
618     { -0.13, 0.41, -0.27, 0.83, },
619     { -0.22, 0.38, -0.44, -0.76, },
620     { -0.29, 0.32, 0.86, 0.18, },
621     { -0.35, 0.25, -0.71, 0.51, },
622     { -0.40, 0.18, 0.09, -0.87, },
623     { -0.42, 0.09, 0.59, 0.65, },
624     { -0.43, 0.00, -0.88, 0.00, },
625     { -0.42, -0.09, 0.59, -0.65, },
626     { -0.40, -0.18, 0.09, 0.87, },
627     { -0.35, -0.25, -0.71, -0.51, },
628     { -0.29, -0.32, 0.86, -0.18, },
629     { -0.22, -0.38, -0.44, 0.76, },
630     { -0.13, -0.41, -0.27, -0.83, },
631     { -0.05, -0.43, 0.80, 0.36, },
632     { 0.05, -0.43, -0.80, 0.36, },
633     { 0.13, -0.41, 0.27, -0.83, },
634     { 0.22, -0.38, 0.44, 0.76, },
635     { 0.29, -0.32, -0.86, -0.18, },
636     { 0.35, -0.25, 0.71, -0.51, },
637     { 0.40, -0.18, -0.09, 0.87, },
638     { 0.42, -0.09, -0.59, -0.65, },
639     { 0.43, 0.00, 0.88, 0.00, },
640     { 0.42, 0.09, -0.59, 0.65, },
641     { 0.40, 0.18, -0.09, -0.87, },
642     { 0.35, 0.25, 0.71, 0.51, },
643     { 0.29, 0.32, -0.86, 0.18, },
644     { 0.22, 0.38, 0.44, -0.76, },
645     { 0.13, 0.41, 0.27, 0.83, },
646     { 0.05, 0.43, -0.80, -0.36, },
647     { -0.05, 0.43, 0.80, -0.36, },
648     { 0.09, -0.03, -0.93, 0.30, },
649     { 0.09, -0.01, 0.40, -0.89, },
650     { 0.09, 0.01, 0.40, 0.89, },
651     { 0.09, 0.03, -0.93, -0.30, },
652     { 0.08, 0.05, 0.84, -0.49, },
653     { 0.07, 0.06, -0.20, 0.95, },
654     { 0.05, 0.07, -0.57, -0.79, },
655     { 0.04, 0.08, 0.97, 0.10, },
656     { 0.02, 0.09, -0.72, 0.65, },
657     { 0.00, 0.09, 0.00, -0.97, },
658     { -0.02, 0.09, 0.72, 0.65, },
659     { -0.04, 0.08, -0.97, 0.10, },
660     { -0.05, 0.07, 0.57, -0.79, },
661     { -0.07, 0.06, 0.20, 0.95, },
662     { -0.08, 0.05, -0.84, -0.49, },
663     { -0.09, 0.03, 0.93, -0.30, },
664     { -0.09, 0.01, -0.40, 0.89, },
665     { -0.09, -0.01, -0.40, -0.89, },
666     { -0.09, -0.03, 0.93, 0.30, },
667     { -0.08, -0.05, -0.84, 0.49, },
668     { -0.07, -0.06, 0.20, -0.95, },
669     { -0.05, -0.07, 0.57, 0.79, },
670     { -0.04, -0.08, -0.97, -0.10, },
671     { -0.02, -0.09, 0.72, -0.65, },
672     { 0.00, -0.09, 0.00, 0.97, },
673     { 0.02, -0.09, -0.72, -0.65, },
674     { 0.04, -0.08, 0.97, -0.10, },
675     { 0.05, -0.07, -0.57, 0.79, },
676     { 0.07, -0.06, -0.20, -0.95, },
677     { 0.08, -0.05, 0.84, 0.49, },
678     { 0.64, 0.67, -0.15, -0.28, },
679     { 0.49, 0.79, 0.30, 0.07, },
680     { 0.31, 0.87, -0.26, 0.18, },
681     { 0.13, 0.92, 0.04, -0.31, },
682     { -0.07, 0.92, 0.20, 0.24, },
683     { -0.26, 0.89, -0.31, -0.01, },
684     { -0.44, 0.82, 0.22, -0.23, },
685     { -0.60, 0.71, 0.02, 0.31, },
686     { -0.73, 0.57, -0.25, -0.19, },
687     { -0.83, 0.40, 0.31, -0.06, },
688     { -0.90, 0.22, -0.16, 0.27, },
689     { -0.93, 0.03, -0.09, -0.30, },
690     { -0.91, -0.16, 0.28, 0.14, },
691     { -0.86, -0.35, -0.29, 0.12, },
692     { -0.77, -0.52, 0.11, -0.29, },
693     { -0.64, -0.67, 0.15, 0.28, },
694     { -0.49, -0.79, -0.30, -0.07, },
695     { -0.31, -0.87, 0.26, -0.18, },
696     { -0.13, -0.92, -0.04, 0.31, },
697     { 0.07, -0.92, -0.20, -0.24, },
698     { 0.26, -0.89, 0.31, 0.01, },
699     { 0.44, -0.82, -0.22, 0.23, },
700     { 0.60, -0.71, -0.02, -0.31, },
701     { 0.73, -0.57, 0.25, 0.19, },
702     { 0.83, -0.40, -0.31, 0.06, },
703     { 0.90, -0.22, 0.16, -0.27, },
704     { 0.93, -0.03, 0.09, 0.30, },
705     { 0.91, 0.16, -0.28, -0.14, },
706     { 0.86, 0.35, 0.29, -0.12, },
707     { 0.77, 0.52, -0.11, 0.29, },
708     { 0.44, 0.82, -0.22, -0.23, },
709     { 0.26, 0.89, 0.31, -0.01, },
710     { 0.07, 0.92, -0.20, 0.24, },
711     { -0.12, 0.92, -0.04, -0.31, },
712     { -0.31, 0.87, 0.26, 0.18, },
713     { -0.49, 0.79, -0.30, 0.07, },
714     { -0.64, 0.67, 0.15, -0.28, },
715     { -0.77, 0.52, 0.11, 0.29, },
716     { -0.86, 0.35, -0.29, -0.12, },
717     { -0.91, 0.16, 0.28, -0.14, },
718     { -0.93, -0.03, -0.09, 0.30, },
719     { -0.90, -0.22, -0.16, -0.27, },
720     { -0.83, -0.40, 0.31, 0.06, },
721     { -0.73, -0.57, -0.25, 0.19, },
722     { -0.60, -0.71, 0.02, -0.31, },
723     { -0.44, -0.82, 0.22, 0.23, },
724     { -0.26, -0.89, -0.31, 0.01, },
725     { -0.07, -0.92, 0.20, -0.24, },
726     { 0.12, -0.92, 0.04, 0.31, },
727     { 0.31, -0.87, -0.26, -0.18, },
728     { 0.49, -0.79, 0.30, -0.07, },
729     { 0.64, -0.67, -0.15, 0.28, },
730     { 0.77, -0.52, -0.11, -0.29, },
731     { 0.86, -0.35, 0.29, 0.12, },
732     { 0.91, -0.16, -0.28, 0.14, },
733     { 0.93, 0.03, 0.09, -0.30, },
734     { 0.90, 0.22, 0.16, 0.27, },
735     { 0.83, 0.40, -0.31, -0.06, },
736     { 0.73, 0.57, 0.25, -0.19, },
737     { 0.60, 0.71, -0.02, 0.31, },
738     { -0.13, 0.83, -0.27, -0.41, },
739     { -0.30, 0.79, 0.49, 0.07, },
740     { -0.46, 0.71, -0.38, 0.31, },
741     { -0.60, 0.60, 0.02, -0.49, },
742     { -0.71, 0.46, 0.35, 0.35, },
743     { -0.79, 0.30, -0.49, 0.03, },
744     { -0.83, 0.13, 0.31, -0.38, },
745     { -0.84, -0.05, 0.08, 0.49, },
746     { -0.81, -0.22, -0.41, -0.27, },
747     { -0.75, -0.38, 0.48, -0.13, },
748     { -0.65, -0.53, -0.22, 0.44, },
749     { -0.53, -0.66, -0.18, -0.46, },
750     { -0.38, -0.75, 0.46, 0.17, },
751     { -0.22, -0.82, -0.44, 0.23, },
752     { -0.04, -0.84, 0.12, -0.48, },
753     { 0.13, -0.83, 0.27, 0.41, },
754     { 0.30, -0.79, -0.49, -0.07, },
755     { 0.46, -0.71, 0.38, -0.31, },
756     { 0.60, -0.60, -0.02, 0.49, },
757     { 0.71, -0.46, -0.35, -0.35, },
758     { 0.79, -0.30, 0.49, -0.03, },
759     { 0.83, -0.13, -0.31, 0.38, },
760     { 0.84, 0.05, -0.08, -0.49, },
761     { 0.81, 0.22, 0.41, 0.27, },
762     { 0.75, 0.38, -0.48, 0.13, },
763     { 0.65, 0.53, 0.22, -0.44, },
764     { 0.53, 0.66, 0.18, 0.46, },
765     { 0.38, 0.75, -0.46, -0.17, },
766     { 0.22, 0.82, 0.44, -0.23, },
767     { 0.04, 0.84, -0.12, 0.48, },
768     { -0.65, 0.53, -0.22, -0.44, },
769     { -0.75, 0.38, 0.48, 0.13, },
770     { -0.81, 0.22, -0.41, 0.27, },
771     { -0.84, 0.05, 0.08, -0.49, },
772     { -0.83, -0.13, 0.31, 0.38, },
773     { -0.79, -0.30, -0.49, -0.03, },
774     { -0.71, -0.46, 0.35, -0.35, },
775     { -0.60, -0.60, 0.02, 0.49, },
776     { -0.46, -0.71, -0.38, -0.31, },
777     { -0.30, -0.79, 0.49, -0.07, },
778     { -0.13, -0.83, -0.27, 0.41, },
779     { 0.04, -0.84, -0.13, -0.48, },
780     { 0.22, -0.82, 0.44, 0.23, },
781     { 0.38, -0.75, -0.46, 0.17, },
782     { 0.53, -0.66, 0.18, -0.46, },
783     { 0.65, -0.53, 0.22, 0.44, },
784     { 0.75, -0.38, -0.48, -0.13, },
785     { 0.81, -0.22, 0.41, -0.27, },
786     { 0.84, -0.05, -0.08, 0.49, },
787     { 0.83, 0.13, -0.31, -0.38, },
788     { 0.79, 0.30, 0.49, 0.03, },
789     { 0.71, 0.46, -0.35, 0.35, },
790     { 0.60, 0.60, -0.02, -0.49, },
791     { 0.46, 0.71, 0.38, 0.31, },
792     { 0.30, 0.79, -0.49, 0.07, },
793     { 0.13, 0.83, 0.27, -0.41, },
794     { -0.04, 0.84, 0.13, 0.48, },
795     { -0.22, 0.82, -0.44, -0.23, },
796     { -0.38, 0.75, 0.46, -0.17, },
797     { -0.53, 0.66, -0.18, 0.46, },
798     { 0.11, 0.78, -0.33, -0.47, },
799     { -0.05, 0.79, 0.57, 0.07, },
800     { -0.22, 0.76, -0.44, 0.38, },
801     { -0.37, 0.70, 0.01, -0.58, },
802     { -0.51, 0.60, 0.42, 0.40, },
803     { -0.62, 0.49, -0.57, 0.05, },
804     { -0.71, 0.35, 0.35, -0.46, },
805     { -0.77, 0.19, 0.11, 0.57, },
806     { -0.79, 0.03, -0.49, -0.30, },
807     { -0.78, -0.14, 0.55, -0.16, },
808     { -0.73, -0.29, -0.25, 0.52, },
809     { -0.65, -0.44, -0.22, -0.53, },
810     { -0.55, -0.57, 0.54, 0.19, },
811     { -0.42, -0.67, -0.51, 0.28, },
812     { -0.27, -0.74, 0.13, -0.56, },
813     { -0.11, -0.78, 0.33, 0.47, },
814     { 0.05, -0.79, -0.57, -0.07, },
815     { 0.22, -0.76, 0.44, -0.38, },
816     { 0.37, -0.70, -0.01, 0.58, },
817     { 0.51, -0.60, -0.42, -0.40, },
818     { 0.62, -0.49, 0.57, -0.05, },
819     { 0.71, -0.35, -0.35, 0.46, },
820     { 0.77, -0.19, -0.11, -0.57, },
821     { 0.79, -0.03, 0.49, 0.30, },
822     { 0.78, 0.14, -0.55, 0.16, },
823     { 0.73, 0.29, 0.25, -0.52, },
824     { 0.65, 0.44, 0.22, 0.53, },
825     { 0.55, 0.57, -0.54, -0.19, },
826     { 0.42, 0.67, 0.51, -0.28, },
827     { 0.27, 0.74, -0.13, 0.56, },
828     { -0.73, 0.29, -0.25, -0.52, },
829     { -0.78, 0.14, 0.55, 0.16, },
830     { -0.79, -0.03, -0.49, 0.30, },
831     { -0.77, -0.19, 0.11, -0.57, },
832     { -0.71, -0.35, 0.35, 0.46, },
833     { -0.62, -0.49, -0.57, -0.05, },
834     { -0.51, -0.60, 0.42, -0.40, },
835     { -0.37, -0.70, 0.01, 0.58, },
836     { -0.22, -0.76, -0.44, -0.38, },
837     { -0.05, -0.79, 0.57, -0.07, },
838     { 0.11, -0.78, -0.33, 0.47, },
839     { 0.27, -0.74, -0.13, -0.56, },
840     { 0.42, -0.67, 0.51, 0.28, },
841     { 0.55, -0.57, -0.54, 0.19, },
842     { 0.65, -0.44, 0.22, -0.53, },
843     { 0.73, -0.29, 0.25, 0.52, },
844     { 0.78, -0.14, -0.55, -0.16, },
845     { 0.79, 0.03, 0.49, -0.30, },
846     { 0.77, 0.19, -0.11, 0.57, },
847     { 0.71, 0.35, -0.35, -0.46, },
848     { 0.62, 0.49, 0.57, 0.05, },
849     { 0.51, 0.60, -0.42, 0.40, },
850     { 0.37, 0.70, -0.01, -0.58, },
851     { 0.22, 0.76, 0.44, 0.38, },
852     { 0.05, 0.79, -0.57, 0.07, },
853     { -0.11, 0.78, 0.33, -0.47, },
854     { -0.27, 0.74, 0.13, 0.56, },
855     { -0.42, 0.67, -0.51, -0.28, },
856     { -0.55, 0.57, 0.54, -0.19, },
857     { -0.65, 0.44, -0.22, 0.53, },
858     { -0.28, 0.70, -0.24, -0.58, },
859     { -0.42, 0.62, 0.59, 0.21, },
860     { -0.54, 0.52, -0.55, 0.29, },
861     { -0.64, 0.40, 0.15, -0.60, },
862     { -0.71, 0.25, 0.35, 0.51, },
863     { -0.75, 0.10, -0.62, -0.08, },
864     { -0.75, -0.06, 0.48, -0.40, },
865     { -0.72, -0.21, -0.02, 0.62, },
866     { -0.66, -0.36, -0.45, -0.43, },
867     { -0.57, -0.49, 0.62, -0.05, },
868     { -0.46, -0.60, -0.38, 0.49, },
869     { -0.33, -0.68, -0.11, -0.61, },
870     { -0.18, -0.73, 0.53, 0.33, },
871     { -0.02, -0.75, -0.60, 0.17, },
872     { 0.13, -0.74, 0.27, -0.56, },
873     { 0.28, -0.70, 0.24, 0.58, },
874     { 0.42, -0.62, -0.59, -0.21, },
875     { 0.54, -0.52, 0.55, -0.29, },
876     { 0.64, -0.40, -0.15, 0.60, },
877     { 0.71, -0.25, -0.35, -0.51, },
878     { 0.75, -0.10, 0.62, 0.08, },
879     { 0.75, 0.06, -0.48, 0.40, },
880     { 0.72, 0.21, 0.02, -0.62, },
881     { 0.66, 0.36, 0.45, 0.43, },
882     { 0.57, 0.49, -0.62, 0.05, },
883     { 0.46, 0.60, 0.38, -0.49, },
884     { 0.33, 0.68, 0.11, 0.61, },
885     { 0.18, 0.73, -0.53, -0.33, },
886     { 0.02, 0.75, 0.60, -0.17, },
887     { -0.13, 0.74, -0.27, 0.56, },
888     { -0.46, 0.60, -0.38, -0.49, },
889     { -0.57, 0.49, 0.62, 0.05, },
890     { -0.66, 0.36, -0.45, 0.43, },
891     { -0.72, 0.21, -0.02, -0.62, },
892     { -0.75, 0.06, 0.48, 0.40, },
893     { -0.75, -0.10, -0.62, 0.08, },
894     { -0.71, -0.25, 0.35, -0.51, },
895     { -0.64, -0.40, 0.15, 0.60, },
896     { -0.54, -0.52, -0.55, -0.29, },
897     { -0.42, -0.62, 0.59, -0.21, },
898     { -0.28, -0.70, -0.24, 0.58, },
899     { -0.13, -0.74, -0.27, -0.56, },
900     { 0.02, -0.75, 0.60, 0.17, },
901     { 0.18, -0.73, -0.53, 0.33, },
902     { 0.33, -0.68, 0.11, -0.61, },
903     { 0.46, -0.60, 0.38, 0.49, },
904     { 0.57, -0.49, -0.62, -0.05, },
905     { 0.66, -0.36, 0.45, -0.43, },
906     { 0.72, -0.21, 0.02, 0.62, },
907     { 0.75, -0.06, -0.48, -0.40, },
908     { 0.75, 0.10, 0.62, -0.08, },
909     { 0.71, 0.25, -0.35, 0.51, },
910     { 0.64, 0.40, -0.15, -0.60, },
911     { 0.54, 0.52, 0.55, 0.29, },
912     { 0.42, 0.62, -0.59, 0.21, },
913     { 0.28, 0.70, 0.24, -0.58, },
914     { 0.13, 0.74, 0.27, 0.56, },
915     { -0.02, 0.75, -0.60, -0.17, },
916     { -0.18, 0.73, 0.53, -0.33, },
917     { -0.33, 0.68, -0.11, 0.61, },
918     { -0.24, 0.58, 0.28, 0.70, },
919     { -0.35, 0.51, -0.71, -0.25, },
920     { -0.45, 0.43, 0.66, -0.36, },
921     { -0.53, 0.33, -0.18, 0.73, },
922     { -0.59, 0.21, -0.42, -0.62, },
923     { -0.62, 0.08, 0.75, 0.10, },
924     { -0.62, -0.05, -0.57, 0.49, },
925     { -0.60, -0.17, 0.02, -0.75, },
926     { -0.55, -0.29, 0.54, 0.52, },
927     { -0.48, -0.40, -0.75, 0.06, },
928     { -0.38, -0.49, 0.46, -0.60, },
929     { -0.27, -0.56, 0.13, 0.74, },
930     { -0.15, -0.60, -0.64, -0.40, },
931     { -0.02, -0.62, 0.72, -0.21, },
932     { 0.11, -0.61, -0.33, 0.68, },
933     { 0.24, -0.58, -0.29, -0.70, },
934     { 0.35, -0.51, 0.71, 0.25, },
935     { 0.45, -0.43, -0.66, 0.36, },
936     { 0.53, -0.33, 0.18, -0.73, },
937     { 0.59, -0.21, 0.42, 0.62, },
938     { 0.62, -0.08, -0.75, -0.10, },
939     { 0.62, 0.05, 0.57, -0.49, },
940     { 0.60, 0.17, -0.02, 0.75, },
941     { 0.55, 0.29, -0.54, -0.52, },
942     { 0.48, 0.40, 0.75, -0.06, },
943     { 0.38, 0.49, -0.46, 0.60, },
944     { 0.27, 0.56, -0.13, -0.74, },
945     { 0.15, 0.60, 0.64, 0.40, },
946     { 0.02, 0.62, -0.72, 0.21, },
947     { -0.11, 0.61, 0.33, -0.68, },
948     { -0.38, 0.49, 0.46, 0.60, },
949     { -0.48, 0.40, -0.75, -0.06, },
950     { -0.55, 0.29, 0.54, -0.52, },
951     { -0.60, 0.17, 0.02, 0.75, },
952     { -0.62, 0.05, -0.57, -0.49, },
953     { -0.62, -0.08, 0.75, -0.10, },
954     { -0.59, -0.21, -0.42, 0.62, },
955     { -0.53, -0.33, -0.18, -0.73, },
956     { -0.45, -0.43, 0.66, 0.36, },
957     { -0.35, -0.51, -0.71, 0.25, },
958     { -0.24, -0.58, 0.28, -0.70, },
959     { -0.11, -0.61, 0.33, 0.68, },
960     { 0.02, -0.62, -0.72, -0.21, },
961     { 0.15, -0.60, 0.64, -0.40, },
962     { 0.27, -0.56, -0.13, 0.74, },
963     { 0.38, -0.49, -0.46, -0.60, },
964     { 0.48, -0.40, 0.75, 0.06, },
965     { 0.55, -0.29, -0.54, 0.52, },
966     { 0.60, -0.17, -0.02, -0.75, },
967     { 0.62, -0.05, 0.57, 0.49, },
968     { 0.62, 0.08, -0.75, 0.10, },
969     { 0.59, 0.21, 0.42, -0.62, },
970     { 0.53, 0.33, 0.18, 0.73, },
971     { 0.45, 0.43, -0.66, -0.36, },
972     { 0.35, 0.51, 0.71, -0.25, },
973     { 0.24, 0.58, -0.28, 0.70, },
974     { 0.11, 0.61, -0.33, -0.68, },
975     { -0.02, 0.62, 0.72, 0.21, },
976     { -0.15, 0.60, -0.64, 0.40, },
977     { -0.27, 0.56, 0.13, -0.74, },
978     { -0.33, 0.47, -0.11, 0.78, },
979     { -0.42, 0.40, -0.51, -0.60, },
980     { -0.49, 0.30, 0.79, 0.03, },
981     { -0.54, 0.19, -0.55, 0.57, },
982     { -0.57, 0.07, -0.05, -0.79, },
983     { -0.57, -0.05, 0.62, 0.49, },
984     { -0.55, -0.16, -0.78, 0.14, },
985     { -0.51, -0.28, 0.42, -0.67, },
986     { -0.44, -0.38, 0.22, 0.76, },
987     { -0.35, -0.46, -0.71, -0.35, },
988     { -0.25, -0.52, 0.73, -0.29, },
989     { -0.13, -0.56, -0.27, 0.74, },
990     { -0.01, -0.58, -0.37, -0.70, },
991     { 0.11, -0.57, 0.77, 0.19, },
992     { 0.22, -0.53, -0.65, 0.44, },
993     { 0.33, -0.47, 0.11, -0.78, },
994     { 0.42, -0.40, 0.51, 0.60, },
995     { 0.49, -0.30, -0.79, -0.03, },
996     { 0.54, -0.19, 0.55, -0.57, },
997     { 0.57, -0.07, 0.05, 0.79, },
998     { 0.57, 0.05, -0.62, -0.49, },
999     { 0.55, 0.16, 0.78, -0.14, },
1000     { 0.51, 0.28, -0.42, 0.67, },
1001     { 0.44, 0.38, -0.22, -0.76, },
1002     { 0.35, 0.46, 0.71, 0.35, },
1003     { 0.25, 0.52, -0.73, 0.29, },
1004     { 0.13, 0.56, 0.27, -0.74, },
1005     { 0.01, 0.58, 0.37, 0.70, },
1006     { -0.11, 0.57, -0.77, -0.19, },
1007     { -0.22, 0.53, 0.65, -0.44, },
1008     { -0.25, 0.52, 0.73, 0.29, },
1009     { -0.35, 0.46, -0.71, 0.35, },
1010     { -0.44, 0.38, 0.22, -0.76, },
1011     { -0.51, 0.28, 0.42, 0.67, },
1012     { -0.55, 0.16, -0.78, -0.14, },
1013     { -0.57, 0.05, 0.62, -0.49, },
1014     { -0.57, -0.07, -0.05, 0.79, },
1015     { -0.54, -0.19, -0.55, -0.57, },
1016     { -0.49, -0.30, 0.79, -0.03, },
1017     { -0.42, -0.40, -0.51, 0.60, },
1018     { -0.33, -0.47, -0.11, -0.78, },
1019     { -0.22, -0.53, 0.65, 0.44, },
1020     { -0.11, -0.57, -0.77, 0.19, },
1021     { 0.01, -0.58, 0.37, -0.70, },
1022     { 0.13, -0.56, 0.27, 0.74, },
1023     { 0.25, -0.52, -0.73, -0.29, },
1024     { 0.35, -0.46, 0.71, -0.35, },
1025     { 0.44, -0.38, -0.22, 0.76, },
1026     { 0.51, -0.28, -0.42, -0.67, },
1027     { 0.55, -0.16, 0.78, 0.14, },
1028     { 0.57, -0.05, -0.62, 0.49, },
1029     { 0.57, 0.07, 0.05, -0.79, },
1030     { 0.54, 0.19, 0.55, 0.57, },
1031     { 0.49, 0.30, -0.79, 0.03, },
1032     { 0.42, 0.40, 0.51, -0.60, },
1033     { 0.33, 0.47, 0.11, 0.78, },
1034     { 0.22, 0.53, -0.65, -0.44, },
1035     { 0.11, 0.57, 0.77, -0.19, },
1036     { -0.01, 0.58, -0.37, 0.70, },
1037     { -0.13, 0.56, -0.27, -0.74, },
1038     { -0.27, 0.41, 0.13, 0.83, },
1039     { -0.35, 0.35, -0.71, -0.46, },
1040     { -0.41, 0.27, 0.81, -0.22, },
1041     { -0.46, 0.17, -0.38, 0.75, },
1042     { -0.49, 0.07, -0.30, -0.79, },
1043     { -0.49, -0.03, 0.79, 0.30, },
1044     { -0.48, -0.13, -0.75, 0.38, },
1045     { -0.44, -0.23, 0.22, -0.82, },
1046     { -0.38, -0.31, 0.46, 0.71, },
1047     { -0.31, -0.38, -0.83, -0.13, },
1048     { -0.22, -0.44, 0.65, -0.53, },
1049     { -0.13, -0.48, -0.04, 0.84, },
1050     { -0.02, -0.49, -0.60, -0.60, },
1051     { 0.08, -0.49, 0.84, -0.05, },
1052     { 0.18, -0.46, -0.53, 0.66, },
1053     { 0.27, -0.41, -0.13, -0.83, },
1054     { 0.35, -0.35, 0.71, 0.46, },
1055     { 0.41, -0.27, -0.81, 0.22, },
1056     { 0.46, -0.17, 0.38, -0.75, },
1057     { 0.49, -0.07, 0.30, 0.79, },
1058     { 0.49, 0.03, -0.79, -0.30, },
1059     { 0.48, 0.13, 0.75, -0.38, },
1060     { 0.44, 0.23, -0.22, 0.82, },
1061     { 0.38, 0.31, -0.46, -0.71, },
1062     { 0.31, 0.38, 0.83, 0.13, },
1063     { 0.22, 0.44, -0.65, 0.53, },
1064     { 0.12, 0.48, 0.04, -0.84, },
1065     { 0.02, 0.49, 0.60, 0.60, },
1066     { -0.08, 0.49, -0.84, 0.05, },
1067     { -0.18, 0.46, 0.53, -0.66, },
1068     { -0.22, 0.44, 0.65, 0.53, },
1069     { -0.31, 0.38, -0.83, 0.13, },
1070     { -0.38, 0.31, 0.46, -0.71, },
1071     { -0.44, 0.23, 0.22, 0.82, },
1072     { -0.48, 0.13, -0.75, -0.38, },
1073     { -0.49, 0.03, 0.79, -0.30, },
1074     { -0.49, -0.07, -0.30, 0.79, },
1075     { -0.46, -0.17, -0.38, -0.75, },
1076     { -0.41, -0.27, 0.81, 0.22, },
1077     { -0.35, -0.35, -0.71, 0.46, },
1078     { -0.27, -0.41, 0.13, -0.83, },
1079     { -0.18, -0.46, 0.53, 0.66, },
1080     { -0.08, -0.49, -0.84, -0.05, },
1081     { 0.02, -0.49, 0.60, -0.60, },
1082     { 0.12, -0.48, 0.04, 0.84, },
1083     { 0.22, -0.44, -0.65, -0.53, },
1084     { 0.31, -0.38, 0.83, -0.13, },
1085     { 0.38, -0.31, -0.46, 0.71, },
1086     { 0.44, -0.23, -0.22, -0.82, },
1087     { 0.48, -0.13, 0.75, 0.38, },
1088     { 0.49, -0.03, -0.79, 0.30, },
1089     { 0.49, 0.07, 0.30, -0.79, },
1090     { 0.46, 0.17, 0.38, 0.75, },
1091     { 0.41, 0.27, -0.81, -0.22, },
1092     { 0.35, 0.35, 0.71, -0.46, },
1093     { 0.27, 0.41, -0.13, 0.83, },
1094     { 0.18, 0.46, -0.53, -0.66, },
1095     { 0.08, 0.49, 0.84, 0.05, },
1096     { -0.02, 0.49, -0.60, 0.60, },
1097     { -0.12, 0.48, -0.04, -0.84, },
1098     { -0.15, 0.28, -0.64, 0.67, },
1099     { -0.20, 0.24, -0.07, -0.92, },
1100     { -0.25, 0.19, 0.73, 0.57, },
1101     { -0.28, 0.14, -0.91, 0.16, },
1102     { -0.30, 0.07, 0.49, -0.79, },
1103     { -0.31, 0.01, 0.26, 0.89, },
1104     { -0.31, -0.06, -0.83, -0.40, },
1105     { -0.29, -0.12, 0.86, -0.35, },
1106     { -0.26, -0.18, -0.31, 0.87, },
1107     { -0.22, -0.23, -0.44, -0.82, },
1108     { -0.16, -0.27, 0.90, 0.22, },
1109     { -0.11, -0.29, -0.77, 0.52, },
1110     { -0.04, -0.31, 0.12, -0.92, },
1111     { 0.02, -0.31, 0.60, 0.71, },
1112     { 0.09, -0.30, -0.93, -0.03, },
1113     { 0.15, -0.28, 0.64, -0.67, },
1114     { 0.20, -0.24, 0.07, 0.92, },
1115     { 0.25, -0.19, -0.73, -0.57, },
1116     { 0.28, -0.14, 0.91, -0.16, },
1117     { 0.30, -0.07, -0.49, 0.79, },
1118     { 0.31, -0.01, -0.26, -0.89, },
1119     { 0.31, 0.06, 0.83, 0.40, },
1120     { 0.29, 0.12, -0.86, 0.35, },
1121     { 0.26, 0.18, 0.31, -0.87, },
1122     { 0.22, 0.23, 0.44, 0.82, },
1123     { 0.16, 0.27, -0.90, -0.22, },
1124     { 0.11, 0.29, 0.77, -0.52, },
1125     { 0.04, 0.31, -0.12, 0.92, },
1126     { -0.02, 0.31, -0.60, -0.71, },
1127     { -0.09, 0.30, 0.93, 0.03, },
1128     { -0.22, 0.23, -0.44, 0.82, },
1129     { -0.26, 0.18, -0.31, -0.87, },
1130     { -0.29, 0.12, 0.86, 0.35, },
1131     { -0.31, 0.06, -0.83, 0.40, },
1132     { -0.31, -0.01, 0.26, -0.89, },
1133     { -0.30, -0.07, 0.49, 0.79, },
1134     { -0.28, -0.14, -0.91, -0.16, },
1135     { -0.25, -0.19, 0.73, -0.57, },
1136     { -0.20, -0.24, -0.07, 0.92, },
1137     { -0.15, -0.28, -0.64, -0.67, },
1138     { -0.09, -0.30, 0.93, -0.03, },
1139     { -0.02, -0.31, -0.60, 0.71, },
1140     { 0.04, -0.31, -0.13, -0.92, },
1141     { 0.11, -0.29, 0.77, 0.52, },
1142     { 0.16, -0.27, -0.90, 0.22, },
1143     { 0.22, -0.23, 0.44, -0.82, },
1144     { 0.26, -0.18, 0.31, 0.87, },
1145     { 0.29, -0.12, -0.86, -0.35, },
1146     { 0.31, -0.06, 0.83, -0.40, },
1147     { 0.31, 0.01, -0.26, 0.89, },
1148     { 0.30, 0.07, -0.49, -0.79, },
1149     { 0.28, 0.14, 0.91, 0.16, },
1150     { 0.25, 0.19, -0.73, 0.57, },
1151     { 0.20, 0.24, 0.07, -0.92, },
1152     { 0.15, 0.28, 0.64, 0.67, },
1153     { 0.09, 0.30, -0.93, 0.03, },
1154     { 0.02, 0.31, 0.60, -0.71, },
1155     { -0.04, 0.31, 0.13, 0.92, },
1156     { -0.11, 0.29, -0.77, -0.52, },
1157     { -0.16, 0.27, 0.90, -0.22, },
1158 };
1159
1160 static const struct line_info line_table[LINE_COUNT] =
1161 {
1162     { 0, 1, 0, },
1163     { 0, 29, 0, },
1164     { 0, 148, 0, },
1165     { 0, 176, 0, },
1166     { 1, 2, 0, },
1167     { 1, 149, 0, },
1168     { 1, 177, 0, },
1169     { 2, 3, 0, },
1170     { 2, 120, 0, },
1171     { 2, 178, 0, },
1172     { 3, 4, 0, },
1173     { 3, 121, 0, },
1174     { 3, 179, 0, },
1175     { 4, 5, 0, },
1176     { 4, 122, 0, },
1177     { 4, 150, 0, },
1178     { 5, 6, 0, },
1179     { 5, 123, 0, },
1180     { 5, 151, 0, },
1181     { 6, 7, 0, },
1182     { 6, 124, 0, },
1183     { 6, 152, 0, },
1184     { 7, 8, 0, },
1185     { 7, 125, 0, },
1186     { 7, 153, 0, },
1187     { 8, 9, 0, },
1188     { 8, 126, 0, },
1189     { 8, 154, 0, },
1190     { 9, 10, 0, },
1191     { 9, 127, 0, },
1192     { 9, 155, 0, },
1193     { 10, 11, 0, },
1194     { 10, 128, 0, },
1195     { 10, 156, 0, },
1196     { 11, 12, 0, },
1197     { 11, 129, 0, },
1198     { 11, 157, 0, },
1199     { 12, 13, 0, },
1200     { 12, 130, 0, },
1201     { 12, 158, 0, },
1202     { 13, 14, 0, },
1203     { 13, 131, 0, },
1204     { 13, 159, 0, },
1205     { 14, 15, 0, },
1206     { 14, 132, 0, },
1207     { 14, 160, 0, },
1208     { 15, 16, 0, },
1209     { 15, 133, 0, },
1210     { 15, 161, 0, },
1211     { 16, 17, 0, },
1212     { 16, 134, 0, },
1213     { 16, 162, 0, },
1214     { 17, 18, 0, },
1215     { 17, 135, 0, },
1216     { 17, 163, 0, },
1217     { 18, 19, 0, },
1218     { 18, 136, 0, },
1219     { 18, 164, 0, },
1220     { 19, 20, 0, },
1221     { 19, 137, 0, },
1222     { 19, 165, 0, },
1223     { 20, 21, 0, },
1224     { 20, 138, 0, },
1225     { 20, 166, 0, },
1226     { 21, 22, 0, },
1227     { 21, 139, 0, },
1228     { 21, 167, 0, },
1229     { 22, 23, 0, },
1230     { 22, 140, 0, },
1231     { 22, 168, 0, },
1232     { 23, 24, 0, },
1233     { 23, 141, 0, },
1234     { 23, 169, 0, },
1235     { 24, 25, 0, },
1236     { 24, 142, 0, },
1237     { 24, 170, 0, },
1238     { 25, 26, 0, },
1239     { 25, 143, 0, },
1240     { 25, 171, 0, },
1241     { 26, 27, 0, },
1242     { 26, 144, 0, },
1243     { 26, 172, 0, },
1244     { 27, 28, 0, },
1245     { 27, 145, 0, },
1246     { 27, 173, 0, },
1247     { 28, 29, 0, },
1248     { 28, 146, 0, },
1249     { 28, 174, 0, },
1250     { 29, 147, 0, },
1251     { 29, 175, 0, },
1252     { 30, 123, 0, },
1253     { 30, 150, 0, },
1254     { 30, 240, 0, },
1255     { 30, 292, 0, },
1256     { 31, 124, 0, },
1257     { 31, 151, 0, },
1258     { 31, 241, 0, },
1259     { 31, 293, 0, },
1260     { 32, 125, 0, },
1261     { 32, 152, 0, },
1262     { 32, 242, 0, },
1263     { 32, 294, 0, },
1264     { 33, 126, 0, },
1265     { 33, 153, 0, },
1266     { 33, 243, 0, },
1267     { 33, 295, 0, },
1268     { 34, 127, 0, },
1269     { 34, 154, 0, },
1270     { 34, 244, 0, },
1271     { 34, 296, 0, },
1272     { 35, 128, 0, },
1273     { 35, 155, 0, },
1274     { 35, 245, 0, },
1275     { 35, 297, 0, },
1276     { 36, 129, 0, },
1277     { 36, 156, 0, },
1278     { 36, 246, 0, },
1279     { 36, 298, 0, },
1280     { 37, 130, 0, },
1281     { 37, 157, 0, },
1282     { 37, 247, 0, },
1283     { 37, 299, 0, },
1284     { 38, 131, 0, },
1285     { 38, 158, 0, },
1286     { 38, 248, 0, },
1287     { 38, 270, 0, },
1288     { 39, 132, 0, },
1289     { 39, 159, 0, },
1290     { 39, 249, 0, },
1291     { 39, 271, 0, },
1292     { 40, 133, 0, },
1293     { 40, 160, 0, },
1294     { 40, 250, 0, },
1295     { 40, 272, 0, },
1296     { 41, 134, 0, },
1297     { 41, 161, 0, },
1298     { 41, 251, 0, },
1299     { 41, 273, 0, },
1300     { 42, 135, 0, },
1301     { 42, 162, 0, },
1302     { 42, 252, 0, },
1303     { 42, 274, 0, },
1304     { 43, 136, 0, },
1305     { 43, 163, 0, },
1306     { 43, 253, 0, },
1307     { 43, 275, 0, },
1308     { 44, 137, 0, },
1309     { 44, 164, 0, },
1310     { 44, 254, 0, },
1311     { 44, 276, 0, },
1312     { 45, 138, 1, },
1313     { 45, 165, 1, },
1314     { 45, 255, 1, },
1315     { 45, 277, 1, },
1316     { 46, 139, 1, },
1317     { 46, 166, 1, },
1318     { 46, 256, 1, },
1319     { 46, 278, 1, },
1320     { 47, 140, 1, },
1321     { 47, 167, 1, },
1322     { 47, 257, 1, },
1323     { 47, 279, 1, },
1324     { 48, 141, 1, },
1325     { 48, 168, 1, },
1326     { 48, 258, 1, },
1327     { 48, 280, 1, },
1328     { 49, 142, 1, },
1329     { 49, 169, 1, },
1330     { 49, 259, 1, },
1331     { 49, 281, 1, },
1332     { 50, 143, 1, },
1333     { 50, 170, 1, },
1334     { 50, 260, 1, },
1335     { 50, 282, 1, },
1336     { 51, 144, 1, },
1337     { 51, 171, 1, },
1338     { 51, 261, 1, },
1339     { 51, 283, 1, },
1340     { 52, 145, 1, },
1341     { 52, 172, 1, },
1342     { 52, 262, 1, },
1343     { 52, 284, 1, },
1344     { 53, 146, 1, },
1345     { 53, 173, 1, },
1346     { 53, 263, 1, },
1347     { 53, 285, 1, },
1348     { 54, 147, 1, },
1349     { 54, 174, 1, },
1350     { 54, 264, 1, },
1351     { 54, 286, 1, },
1352     { 55, 148, 1, },
1353     { 55, 175, 1, },
1354     { 55, 265, 1, },
1355     { 55, 287, 1, },
1356     { 56, 149, 1, },
1357     { 56, 176, 1, },
1358     { 56, 266, 1, },
1359     { 56, 288, 1, },
1360     { 57, 120, 1, },
1361     { 57, 177, 1, },
1362     { 57, 267, 1, },
1363     { 57, 289, 1, },
1364     { 58, 121, 1, },
1365     { 58, 178, 1, },
1366     { 58, 268, 1, },
1367     { 58, 290, 1, },
1368     { 59, 122, 1, },
1369     { 59, 179, 1, },
1370     { 59, 269, 1, },
1371     { 59, 291, 1, },
1372     { 60, 420, 1, },
1373     { 60, 478, 1, },
1374     { 60, 567, 1, },
1375     { 60, 570, 1, },
1376     { 61, 421, 1, },
1377     { 61, 479, 1, },
1378     { 61, 568, 1, },
1379     { 61, 571, 1, },
1380     { 62, 422, 1, },
1381     { 62, 450, 1, },
1382     { 62, 569, 1, },
1383     { 62, 572, 1, },
1384     { 63, 423, 1, },
1385     { 63, 451, 1, },
1386     { 63, 540, 1, },
1387     { 63, 573, 1, },
1388     { 64, 424, 1, },
1389     { 64, 452, 1, },
1390     { 64, 541, 1, },
1391     { 64, 574, 1, },
1392     { 65, 425, 1, },
1393     { 65, 453, 1, },
1394     { 65, 542, 1, },
1395     { 65, 575, 1, },
1396     { 66, 426, 1, },
1397     { 66, 454, 1, },
1398     { 66, 543, 1, },
1399     { 66, 576, 1, },
1400     { 67, 427, 1, },
1401     { 67, 455, 1, },
1402     { 67, 544, 1, },
1403     { 67, 577, 1, },
1404     { 68, 428, 1, },
1405     { 68, 456, 1, },
1406     { 68, 545, 1, },
1407     { 68, 578, 1, },
1408     { 69, 429, 1, },
1409     { 69, 457, 1, },
1410     { 69, 546, 1, },
1411     { 69, 579, 1, },
1412     { 70, 430, 1, },
1413     { 70, 458, 1, },
1414     { 70, 547, 1, },
1415     { 70, 580, 1, },
1416     { 71, 431, 1, },
1417     { 71, 459, 1, },
1418     { 71, 548, 1, },
1419     { 71, 581, 1, },
1420     { 72, 432, 1, },
1421     { 72, 460, 1, },
1422     { 72, 549, 1, },
1423     { 72, 582, 1, },
1424     { 73, 433, 1, },
1425     { 73, 461, 1, },
1426     { 73, 550, 1, },
1427     { 73, 583, 1, },
1428     { 74, 434, 1, },
1429     { 74, 462, 1, },
1430     { 74, 551, 1, },
1431     { 74, 584, 1, },
1432     { 75, 435, 1, },
1433     { 75, 463, 1, },
1434     { 75, 552, 1, },
1435     { 75, 585, 1, },
1436     { 76, 436, 1, },
1437     { 76, 464, 1, },
1438     { 76, 553, 1, },
1439     { 76, 586, 1, },
1440     { 77, 437, 1, },
1441     { 77, 465, 1, },
1442     { 77, 554, 1, },
1443     { 77, 587, 1, },
1444     { 78, 438, 1, },
1445     { 78, 466, 1, },
1446     { 78, 555, 1, },
1447     { 78, 588, 1, },
1448     { 79, 439, 1, },
1449     { 79, 467, 1, },
1450     { 79, 556, 1, },
1451     { 79, 589, 1, },
1452     { 80, 440, 1, },
1453     { 80, 468, 1, },
1454     { 80, 557, 1, },
1455     { 80, 590, 1, },
1456     { 81, 441, 1, },
1457     { 81, 469, 1, },
1458     { 81, 558, 1, },
1459     { 81, 591, 1, },
1460     { 82, 442, 1, },
1461     { 82, 470, 1, },
1462     { 82, 559, 2, },
1463     { 82, 592, 2, },
1464     { 83, 443, 2, },
1465     { 83, 471, 2, },
1466     { 83, 560, 2, },
1467     { 83, 593, 2, },
1468     { 84, 444, 2, },
1469     { 84, 472, 2, },
1470     { 84, 561, 2, },
1471     { 84, 594, 2, },
1472     { 85, 445, 2, },
1473     { 85, 473, 2, },
1474     { 85, 562, 2, },
1475     { 85, 595, 2, },
1476     { 86, 446, 2, },
1477     { 86, 474, 2, },
1478     { 86, 563, 2, },
1479     { 86, 596, 2, },
1480     { 87, 447, 2, },
1481     { 87, 475, 2, },
1482     { 87, 564, 2, },
1483     { 87, 597, 2, },
1484     { 88, 448, 2, },
1485     { 88, 476, 2, },
1486     { 88, 565, 2, },
1487     { 88, 598, 2, },
1488     { 89, 449, 2, },
1489     { 89, 477, 2, },
1490     { 89, 566, 2, },
1491     { 89, 599, 2, },
1492     { 90, 101, 2, },
1493     { 90, 109, 2, },
1494     { 90, 562, 2, },
1495     { 90, 584, 2, },
1496     { 91, 102, 2, },
1497     { 91, 110, 2, },
1498     { 91, 563, 2, },
1499     { 91, 585, 2, },
1500     { 92, 103, 2, },
1501     { 92, 111, 2, },
1502     { 92, 564, 2, },
1503     { 92, 586, 2, },
1504     { 93, 104, 2, },
1505     { 93, 112, 2, },
1506     { 93, 565, 2, },
1507     { 93, 587, 2, },
1508     { 94, 105, 2, },
1509     { 94, 113, 2, },
1510     { 94, 566, 2, },
1511     { 94, 588, 2, },
1512     { 95, 106, 2, },
1513     { 95, 114, 2, },
1514     { 95, 567, 2, },
1515     { 95, 589, 2, },
1516     { 96, 107, 2, },
1517     { 96, 115, 2, },
1518     { 96, 568, 2, },
1519     { 96, 590, 2, },
1520     { 97, 108, 2, },
1521     { 97, 116, 2, },
1522     { 97, 569, 2, },
1523     { 97, 591, 2, },
1524     { 98, 109, 2, },
1525     { 98, 117, 2, },
1526     { 98, 540, 2, },
1527     { 98, 592, 2, },
1528     { 99, 110, 2, },
1529     { 99, 118, 2, },
1530     { 99, 541, 2, },
1531     { 99, 593, 2, },
1532     { 100, 111, 2, },
1533     { 100, 119, 2, },
1534     { 100, 542, 2, },
1535     { 100, 594, 2, },
1536     { 101, 112, 2, },
1537     { 101, 543, 2, },
1538     { 101, 595, 2, },
1539     { 102, 113, 2, },
1540     { 102, 544, 2, },
1541     { 102, 596, 2, },
1542     { 103, 114, 2, },
1543     { 103, 545, 2, },
1544     { 103, 597, 2, },
1545     { 104, 115, 2, },
1546     { 104, 546, 2, },
1547     { 104, 598, 2, },
1548     { 105, 116, 2, },
1549     { 105, 547, 2, },
1550     { 105, 599, 2, },
1551     { 106, 117, 2, },
1552     { 106, 548, 2, },
1553     { 106, 570, 2, },
1554     { 107, 118, 2, },
1555     { 107, 549, 2, },
1556     { 107, 571, 2, },
1557     { 108, 119, 2, },
1558     { 108, 550, 2, },
1559     { 108, 572, 2, },
1560     { 109, 551, 2, },
1561     { 109, 573, 2, },
1562     { 110, 552, 2, },
1563     { 110, 574, 2, },
1564     { 111, 553, 2, },
1565     { 111, 575, 2, },
1566     { 112, 554, 2, },
1567     { 112, 576, 2, },
1568     { 113, 555, 2, },
1569     { 113, 577, 2, },
1570     { 114, 556, 2, },
1571     { 114, 578, 2, },
1572     { 115, 557, 2, },
1573     { 115, 579, 2, },
1574     { 116, 558, 2, },
1575     { 116, 580, 2, },
1576     { 117, 559, 2, },
1577     { 117, 581, 2, },
1578     { 118, 560, 2, },
1579     { 118, 582, 2, },
1580     { 119, 561, 2, },
1581     { 119, 583, 2, },
1582     { 120, 150, 2, },
1583     { 120, 232, 2, },
1584     { 121, 151, 2, },
1585     { 121, 233, 2, },
1586     { 122, 152, 2, },
1587     { 122, 234, 2, },
1588     { 123, 153, 2, },
1589     { 123, 235, 2, },
1590     { 124, 154, 2, },
1591     { 124, 236, 2, },
1592     { 125, 155, 2, },
1593     { 125, 237, 2, },
1594     { 126, 156, 2, },
1595     { 126, 238, 2, },
1596     { 127, 157, 2, },
1597     { 127, 239, 2, },
1598     { 128, 158, 2, },
1599     { 128, 210, 2, },
1600     { 129, 159, 2, },
1601     { 129, 211, 2, },
1602     { 130, 160, 2, },
1603     { 130, 212, 2, },
1604     { 131, 161, 2, },
1605     { 131, 213, 2, },
1606     { 132, 162, 2, },
1607     { 132, 214, 2, },
1608     { 133, 163, 2, },
1609     { 133, 215, 2, },
1610     { 134, 164, 2, },
1611     { 134, 216, 2, },
1612     { 135, 165, 3, },
1613     { 135, 217, 3, },
1614     { 136, 166, 3, },
1615     { 136, 218, 3, },
1616     { 137, 167, 3, },
1617     { 137, 219, 3, },
1618     { 138, 168, 3, },
1619     { 138, 220, 3, },
1620     { 139, 169, 3, },
1621     { 139, 221, 3, },
1622     { 140, 170, 3, },
1623     { 140, 222, 3, },
1624     { 141, 171, 3, },
1625     { 141, 223, 3, },
1626     { 142, 172, 3, },
1627     { 142, 224, 3, },
1628     { 143, 173, 3, },
1629     { 143, 225, 3, },
1630     { 144, 174, 3, },
1631     { 144, 226, 3, },
1632     { 145, 175, 3, },
1633     { 145, 227, 3, },
1634     { 146, 176, 3, },
1635     { 146, 228, 3, },
1636     { 147, 177, 3, },
1637     { 147, 229, 3, },
1638     { 148, 178, 3, },
1639     { 148, 230, 3, },
1640     { 149, 179, 3, },
1641     { 149, 231, 3, },
1642     { 150, 207, 3, },
1643     { 151, 208, 3, },
1644     { 152, 209, 3, },
1645     { 153, 180, 3, },
1646     { 154, 181, 3, },
1647     { 155, 182, 3, },
1648     { 156, 183, 3, },
1649     { 157, 184, 3, },
1650     { 158, 185, 3, },
1651     { 159, 186, 3, },
1652     { 160, 187, 3, },
1653     { 161, 188, 3, },
1654     { 162, 189, 3, },
1655     { 163, 190, 3, },
1656     { 164, 191, 3, },
1657     { 165, 192, 3, },
1658     { 166, 193, 3, },
1659     { 167, 194, 3, },
1660     { 168, 195, 3, },
1661     { 169, 196, 3, },
1662     { 170, 197, 3, },
1663     { 171, 198, 3, },
1664     { 172, 199, 3, },
1665     { 173, 200, 3, },
1666     { 174, 201, 3, },
1667     { 175, 202, 3, },
1668     { 176, 203, 3, },
1669     { 177, 204, 3, },
1670     { 178, 205, 3, },
1671     { 179, 206, 3, },
1672     { 180, 237, 3, },
1673     { 180, 240, 3, },
1674     { 180, 300, 3, },
1675     { 181, 238, 3, },
1676     { 181, 241, 3, },
1677     { 181, 301, 3, },
1678     { 182, 239, 3, },
1679     { 182, 242, 3, },
1680     { 182, 302, 3, },
1681     { 183, 210, 3, },
1682     { 183, 243, 3, },
1683     { 183, 303, 3, },
1684     { 184, 211, 3, },
1685     { 184, 244, 3, },
1686     { 184, 304, 3, },
1687     { 185, 212, 3, },
1688     { 185, 245, 3, },
1689     { 185, 305, 3, },
1690     { 186, 213, 3, },
1691     { 186, 246, 3, },
1692     { 186, 306, 3, },
1693     { 187, 214, 3, },
1694     { 187, 247, 3, },
1695     { 187, 307, 3, },
1696     { 188, 215, 3, },
1697     { 188, 248, 3, },
1698     { 188, 308, 3, },
1699     { 189, 216, 3, },
1700     { 189, 249, 3, },
1701     { 189, 309, 3, },
1702     { 190, 217, 3, },
1703     { 190, 250, 3, },
1704     { 190, 310, 3, },
1705     { 191, 218, 3, },
1706     { 191, 251, 3, },
1707     { 191, 311, 3, },
1708     { 192, 219, 3, },
1709     { 192, 252, 3, },
1710     { 192, 312, 3, },
1711     { 193, 220, 3, },
1712     { 193, 253, 3, },
1713     { 193, 313, 3, },
1714     { 194, 221, 3, },
1715     { 194, 254, 3, },
1716     { 194, 314, 3, },
1717     { 195, 222, 3, },
1718     { 195, 255, 3, },
1719     { 195, 315, 3, },
1720     { 196, 223, 3, },
1721     { 196, 256, 3, },
1722     { 196, 316, 3, },
1723     { 197, 224, 3, },
1724     { 197, 257, 3, },
1725     { 197, 317, 3, },
1726     { 198, 225, 3, },
1727     { 198, 258, 3, },
1728     { 198, 318, 3, },
1729     { 199, 226, 3, },
1730     { 199, 259, 3, },
1731     { 199, 319, 3, },
1732     { 200, 227, 3, },
1733     { 200, 260, 3, },
1734     { 200, 320, 3, },
1735     { 201, 228, 3, },
1736     { 201, 261, 3, },
1737     { 201, 321, 3, },
1738     { 202, 229, 3, },
1739     { 202, 262, 3, },
1740     { 202, 322, 3, },
1741     { 203, 230, 3, },
1742     { 203, 263, 3, },
1743     { 203, 323, 3, },
1744     { 204, 231, 3, },
1745     { 204, 264, 3, },
1746     { 204, 324, 3, },
1747     { 205, 232, 3, },
1748     { 205, 265, 3, },
1749     { 205, 325, 3, },
1750     { 206, 233, 3, },
1751     { 206, 266, 3, },
1752     { 206, 326, 3, },
1753     { 207, 234, 3, },
1754     { 207, 267, 3, },
1755     { 207, 327, 3, },
1756     { 208, 235, 3, },
1757     { 208, 268, 3, },
1758     { 208, 328, 3, },
1759     { 209, 236, 3, },
1760     { 209, 269, 3, },
1761     { 209, 329, 3, },
1762     { 210, 270, 4, },
1763     { 210, 330, 4, },
1764     { 211, 271, 4, },
1765     { 211, 331, 4, },
1766     { 212, 272, 4, },
1767     { 212, 332, 4, },
1768     { 213, 273, 4, },
1769     { 213, 333, 4, },
1770     { 214, 274, 4, },
1771     { 214, 334, 4, },
1772     { 215, 275, 4, },
1773     { 215, 335, 4, },
1774     { 216, 276, 4, },
1775     { 216, 336, 4, },
1776     { 217, 277, 4, },
1777     { 217, 337, 4, },
1778     { 218, 278, 4, },
1779     { 218, 338, 4, },
1780     { 219, 279, 4, },
1781     { 219, 339, 4, },
1782     { 220, 280, 4, },
1783     { 220, 340, 4, },
1784     { 221, 281, 4, },
1785     { 221, 341, 4, },
1786     { 222, 282, 4, },
1787     { 222, 342, 4, },
1788     { 223, 283, 4, },
1789     { 223, 343, 4, },
1790     { 224, 284, 4, },
1791     { 224, 344, 4, },
1792     { 225, 285, 4, },
1793     { 225, 345, 4, },
1794     { 226, 286, 4, },
1795     { 226, 346, 4, },
1796     { 227, 287, 4, },
1797     { 227, 347, 4, },
1798     { 228, 288, 4, },
1799     { 228, 348, 4, },
1800     { 229, 289, 4, },
1801     { 229, 349, 4, },
1802     { 230, 290, 4, },
1803     { 230, 350, 4, },
1804     { 231, 291, 4, },
1805     { 231, 351, 4, },
1806     { 232, 292, 4, },
1807     { 232, 352, 4, },
1808     { 233, 293, 4, },
1809     { 233, 353, 4, },
1810     { 234, 294, 4, },
1811     { 234, 354, 4, },
1812     { 235, 295, 4, },
1813     { 235, 355, 4, },
1814     { 236, 296, 4, },
1815     { 236, 356, 4, },
1816     { 237, 297, 4, },
1817     { 237, 357, 4, },
1818     { 238, 298, 4, },
1819     { 238, 358, 4, },
1820     { 239, 299, 4, },
1821     { 239, 359, 4, },
1822     { 240, 327, 4, },
1823     { 240, 416, 4, },
1824     { 241, 328, 4, },
1825     { 241, 417, 4, },
1826     { 242, 329, 4, },
1827     { 242, 418, 4, },
1828     { 243, 300, 4, },
1829     { 243, 419, 4, },
1830     { 244, 301, 4, },
1831     { 244, 390, 4, },
1832     { 245, 302, 4, },
1833     { 245, 391, 4, },
1834     { 246, 303, 4, },
1835     { 246, 392, 4, },
1836     { 247, 304, 4, },
1837     { 247, 393, 4, },
1838     { 248, 305, 4, },
1839     { 248, 394, 4, },
1840     { 249, 306, 4, },
1841     { 249, 395, 4, },
1842     { 250, 307, 4, },
1843     { 250, 396, 4, },
1844     { 251, 308, 4, },
1845     { 251, 397, 4, },
1846     { 252, 309, 4, },
1847     { 252, 398, 4, },
1848     { 253, 310, 4, },
1849     { 253, 399, 4, },
1850     { 254, 311, 4, },
1851     { 254, 400, 4, },
1852     { 255, 312, 4, },
1853     { 255, 401, 4, },
1854     { 256, 313, 4, },
1855     { 256, 402, 4, },
1856     { 257, 314, 4, },
1857     { 257, 403, 4, },
1858     { 258, 315, 4, },
1859     { 258, 404, 4, },
1860     { 259, 316, 4, },
1861     { 259, 405, 4, },
1862     { 260, 317, 4, },
1863     { 260, 406, 4, },
1864     { 261, 318, 4, },
1865     { 261, 407, 4, },
1866     { 262, 319, 4, },
1867     { 262, 408, 4, },
1868     { 263, 320, 4, },
1869     { 263, 409, 4, },
1870     { 264, 321, 4, },
1871     { 264, 410, 4, },
1872     { 265, 322, 4, },
1873     { 265, 411, 4, },
1874     { 266, 323, 4, },
1875     { 266, 412, 4, },
1876     { 267, 324, 4, },
1877     { 267, 413, 4, },
1878     { 268, 325, 4, },
1879     { 268, 414, 4, },
1880     { 269, 326, 4, },
1881     { 269, 415, 4, },
1882     { 270, 333, 4, },
1883     { 270, 364, 4, },
1884     { 271, 334, 4, },
1885     { 271, 365, 4, },
1886     { 272, 335, 4, },
1887     { 272, 366, 4, },
1888     { 273, 336, 4, },
1889     { 273, 367, 4, },
1890     { 274, 337, 4, },
1891     { 274, 368, 4, },
1892     { 275, 338, 4, },
1893     { 275, 369, 4, },
1894     { 276, 339, 4, },
1895     { 276, 370, 4, },
1896     { 277, 340, 4, },
1897     { 277, 371, 4, },
1898     { 278, 341, 4, },
1899     { 278, 372, 4, },
1900     { 279, 342, 4, },
1901     { 279, 373, 4, },
1902     { 280, 343, 4, },
1903     { 280, 374, 4, },
1904     { 281, 344, 4, },
1905     { 281, 375, 4, },
1906     { 282, 345, 4, },
1907     { 282, 376, 4, },
1908     { 283, 346, 4, },
1909     { 283, 377, 4, },
1910     { 284, 347, 4, },
1911     { 284, 378, 4, },
1912     { 285, 348, 5, },
1913     { 285, 379, 5, },
1914     { 286, 349, 5, },
1915     { 286, 380, 5, },
1916     { 287, 350, 5, },
1917     { 287, 381, 5, },
1918     { 288, 351, 5, },
1919     { 288, 382, 5, },
1920     { 289, 352, 5, },
1921     { 289, 383, 5, },
1922     { 290, 353, 5, },
1923     { 290, 384, 5, },
1924     { 291, 354, 5, },
1925     { 291, 385, 5, },
1926     { 292, 355, 5, },
1927     { 292, 386, 5, },
1928     { 293, 356, 5, },
1929     { 293, 387, 5, },
1930     { 294, 357, 5, },
1931     { 294, 388, 5, },
1932     { 295, 358, 5, },
1933     { 295, 389, 5, },
1934     { 296, 359, 5, },
1935     { 296, 360, 5, },
1936     { 297, 330, 5, },
1937     { 297, 361, 5, },
1938     { 298, 331, 5, },
1939     { 298, 362, 5, },
1940     { 299, 332, 5, },
1941     { 299, 363, 5, },
1942     { 300, 330, 5, },
1943     { 300, 479, 5, },
1944     { 301, 331, 5, },
1945     { 301, 450, 5, },
1946     { 302, 332, 5, },
1947     { 302, 451, 5, },
1948     { 303, 333, 5, },
1949     { 303, 452, 5, },
1950     { 304, 334, 5, },
1951     { 304, 453, 5, },
1952     { 305, 335, 5, },
1953     { 305, 454, 5, },
1954     { 306, 336, 5, },
1955     { 306, 455, 5, },
1956     { 307, 337, 5, },
1957     { 307, 456, 5, },
1958     { 308, 338, 5, },
1959     { 308, 457, 5, },
1960     { 309, 339, 5, },
1961     { 309, 458, 5, },
1962     { 310, 340, 5, },
1963     { 310, 459, 5, },
1964     { 311, 341, 5, },
1965     { 311, 460, 5, },
1966     { 312, 342, 5, },
1967     { 312, 461, 5, },
1968     { 313, 343, 5, },
1969     { 313, 462, 5, },
1970     { 314, 344, 5, },
1971     { 314, 463, 5, },
1972     { 315, 345, 5, },
1973     { 315, 464, 5, },
1974     { 316, 346, 5, },
1975     { 316, 465, 5, },
1976     { 317, 347, 5, },
1977     { 317, 466, 5, },
1978     { 318, 348, 5, },
1979     { 318, 467, 5, },
1980     { 319, 349, 5, },
1981     { 319, 468, 5, },
1982     { 320, 350, 5, },
1983     { 320, 469, 5, },
1984     { 321, 351, 5, },
1985     { 321, 470, 5, },
1986     { 322, 352, 5, },
1987     { 322, 471, 5, },
1988     { 323, 353, 5, },
1989     { 323, 472, 5, },
1990     { 324, 354, 5, },
1991     { 324, 473, 5, },
1992     { 325, 355, 5, },
1993     { 325, 474, 5, },
1994     { 326, 356, 5, },
1995     { 326, 475, 5, },
1996     { 327, 357, 5, },
1997     { 327, 476, 5, },
1998     { 328, 358, 5, },
1999     { 328, 477, 5, },
2000     { 329, 359, 5, },
2001     { 329, 478, 5, },
2002     { 330, 421, 5, },
2003     { 331, 422, 5, },
2004     { 332, 423, 5, },
2005     { 333, 424, 5, },
2006     { 334, 425, 5, },
2007     { 335, 426, 5, },
2008     { 336, 427, 5, },
2009     { 337, 428, 5, },
2010     { 338, 429, 5, },
2011     { 339, 430, 5, },
2012     { 340, 431, 5, },
2013     { 341, 432, 5, },
2014     { 342, 433, 5, },
2015     { 343, 434, 5, },
2016     { 344, 435, 5, },
2017     { 345, 436, 5, },
2018     { 346, 437, 5, },
2019     { 347, 438, 5, },
2020     { 348, 439, 5, },
2021     { 349, 440, 5, },
2022     { 350, 441, 5, },
2023     { 351, 442, 5, },
2024     { 352, 443, 5, },
2025     { 353, 444, 5, },
2026     { 354, 445, 5, },
2027     { 355, 446, 5, },
2028     { 356, 447, 5, },
2029     { 357, 448, 5, },
2030     { 358, 449, 5, },
2031     { 359, 420, 5, },
2032     { 360, 390, 5, },
2033     { 360, 447, 5, },
2034     { 360, 480, 5, },
2035     { 361, 391, 5, },
2036     { 361, 448, 5, },
2037     { 361, 481, 5, },
2038     { 362, 392, 5, },
2039     { 362, 449, 5, },
2040     { 362, 482, 5, },
2041     { 363, 393, 5, },
2042     { 363, 420, 5, },
2043     { 363, 483, 5, },
2044     { 364, 394, 5, },
2045     { 364, 421, 5, },
2046     { 364, 484, 5, },
2047     { 365, 395, 5, },
2048     { 365, 422, 5, },
2049     { 365, 485, 5, },
2050     { 366, 396, 5, },
2051     { 366, 423, 5, },
2052     { 366, 486, 5, },
2053     { 367, 397, 5, },
2054     { 367, 424, 5, },
2055     { 367, 487, 5, },
2056     { 368, 398, 5, },
2057     { 368, 425, 5, },
2058     { 368, 488, 5, },
2059     { 369, 399, 5, },
2060     { 369, 426, 5, },
2061     { 369, 489, 5, },
2062     { 370, 400, 6, },
2063     { 370, 427, 6, },
2064     { 370, 490, 6, },
2065     { 371, 401, 6, },
2066     { 371, 428, 6, },
2067     { 371, 491, 6, },
2068     { 372, 402, 6, },
2069     { 372, 429, 6, },
2070     { 372, 492, 6, },
2071     { 373, 403, 6, },
2072     { 373, 430, 6, },
2073     { 373, 493, 6, },
2074     { 374, 404, 6, },
2075     { 374, 431, 6, },
2076     { 374, 494, 6, },
2077     { 375, 405, 6, },
2078     { 375, 432, 6, },
2079     { 375, 495, 6, },
2080     { 376, 406, 6, },
2081     { 376, 433, 6, },
2082     { 376, 496, 6, },
2083     { 377, 407, 6, },
2084     { 377, 434, 6, },
2085     { 377, 497, 6, },
2086     { 378, 408, 6, },
2087     { 378, 435, 6, },
2088     { 378, 498, 6, },
2089     { 379, 409, 6, },
2090     { 379, 436, 6, },
2091     { 379, 499, 6, },
2092     { 380, 410, 6, },
2093     { 380, 437, 6, },
2094     { 380, 500, 6, },
2095     { 381, 411, 6, },
2096     { 381, 438, 6, },
2097     { 381, 501, 6, },
2098     { 382, 412, 6, },
2099     { 382, 439, 6, },
2100     { 382, 502, 6, },
2101     { 383, 413, 6, },
2102     { 383, 440, 6, },
2103     { 383, 503, 6, },
2104     { 384, 414, 6, },
2105     { 384, 441, 6, },
2106     { 384, 504, 6, },
2107     { 385, 415, 6, },
2108     { 385, 442, 6, },
2109     { 385, 505, 6, },
2110     { 386, 416, 6, },
2111     { 386, 443, 6, },
2112     { 386, 506, 6, },
2113     { 387, 417, 6, },
2114     { 387, 444, 6, },
2115     { 387, 507, 6, },
2116     { 388, 418, 6, },
2117     { 388, 445, 6, },
2118     { 388, 508, 6, },
2119     { 389, 419, 6, },
2120     { 389, 446, 6, },
2121     { 389, 509, 6, },
2122     { 390, 453, 6, },
2123     { 390, 510, 6, },
2124     { 391, 454, 6, },
2125     { 391, 511, 6, },
2126     { 392, 455, 6, },
2127     { 392, 512, 6, },
2128     { 393, 456, 6, },
2129     { 393, 513, 6, },
2130     { 394, 457, 6, },
2131     { 394, 514, 6, },
2132     { 395, 458, 6, },
2133     { 395, 515, 6, },
2134     { 396, 459, 6, },
2135     { 396, 516, 6, },
2136     { 397, 460, 6, },
2137     { 397, 517, 6, },
2138     { 398, 461, 6, },
2139     { 398, 518, 6, },
2140     { 399, 462, 6, },
2141     { 399, 519, 6, },
2142     { 400, 463, 6, },
2143     { 400, 520, 6, },
2144     { 401, 464, 6, },
2145     { 401, 521, 6, },
2146     { 402, 465, 6, },
2147     { 402, 522, 6, },
2148     { 403, 466, 6, },
2149     { 403, 523, 6, },
2150     { 404, 467, 6, },
2151     { 404, 524, 6, },
2152     { 405, 468, 6, },
2153     { 405, 525, 6, },
2154     { 406, 469, 6, },
2155     { 406, 526, 6, },
2156     { 407, 470, 6, },
2157     { 407, 527, 6, },
2158     { 408, 471, 6, },
2159     { 408, 528, 6, },
2160     { 409, 472, 6, },
2161     { 409, 529, 6, },
2162     { 410, 473, 6, },
2163     { 410, 530, 6, },
2164     { 411, 474, 6, },
2165     { 411, 531, 6, },
2166     { 412, 475, 6, },
2167     { 412, 532, 6, },
2168     { 413, 476, 6, },
2169     { 413, 533, 6, },
2170     { 414, 477, 6, },
2171     { 414, 534, 6, },
2172     { 415, 478, 6, },
2173     { 415, 535, 6, },
2174     { 416, 479, 6, },
2175     { 416, 536, 6, },
2176     { 417, 450, 6, },
2177     { 417, 537, 6, },
2178     { 418, 451, 6, },
2179     { 418, 538, 6, },
2180     { 419, 452, 6, },
2181     { 419, 539, 6, },
2182     { 420, 480, 6, },
2183     { 421, 481, 6, },
2184     { 422, 482, 6, },
2185     { 423, 483, 6, },
2186     { 424, 484, 6, },
2187     { 425, 485, 6, },
2188     { 426, 486, 6, },
2189     { 427, 487, 6, },
2190     { 428, 488, 6, },
2191     { 429, 489, 6, },
2192     { 430, 490, 6, },
2193     { 431, 491, 6, },
2194     { 432, 492, 6, },
2195     { 433, 493, 6, },
2196     { 434, 494, 6, },
2197     { 435, 495, 6, },
2198     { 436, 496, 6, },
2199     { 437, 497, 6, },
2200     { 438, 498, 6, },
2201     { 439, 499, 6, },
2202     { 440, 500, 6, },
2203     { 441, 501, 6, },
2204     { 442, 502, 6, },
2205     { 443, 503, 6, },
2206     { 444, 504, 6, },
2207     { 445, 505, 6, },
2208     { 446, 506, 6, },
2209     { 447, 507, 6, },
2210     { 448, 508, 6, },
2211     { 449, 509, 6, },
2212     { 450, 510, 7, },
2213     { 451, 511, 7, },
2214     { 452, 512, 7, },
2215     { 453, 513, 7, },
2216     { 454, 514, 7, },
2217     { 455, 515, 7, },
2218     { 456, 516, 7, },
2219     { 457, 517, 7, },
2220     { 458, 518, 7, },
2221     { 459, 519, 7, },
2222     { 460, 520, 7, },
2223     { 461, 521, 7, },
2224     { 462, 522, 7, },
2225     { 463, 523, 7, },
2226     { 464, 524, 7, },
2227     { 465, 525, 7, },
2228     { 466, 526, 7, },
2229     { 467, 527, 7, },
2230     { 468, 528, 7, },
2231     { 469, 529, 7, },
2232     { 470, 530, 7, },
2233     { 471, 531, 7, },
2234     { 472, 532, 7, },
2235     { 473, 533, 7, },
2236     { 474, 534, 7, },
2237     { 475, 535, 7, },
2238     { 476, 536, 7, },
2239     { 477, 537, 7, },
2240     { 478, 538, 7, },
2241     { 479, 539, 7, },
2242     { 480, 513, 7, },
2243     { 480, 597, 7, },
2244     { 481, 514, 7, },
2245     { 481, 598, 7, },
2246     { 482, 515, 7, },
2247     { 482, 599, 7, },
2248     { 483, 516, 7, },
2249     { 483, 570, 7, },
2250     { 484, 517, 7, },
2251     { 484, 571, 7, },
2252     { 485, 518, 7, },
2253     { 485, 572, 7, },
2254     { 486, 519, 7, },
2255     { 486, 573, 7, },
2256     { 487, 520, 7, },
2257     { 487, 574, 7, },
2258     { 488, 521, 7, },
2259     { 488, 575, 7, },
2260     { 489, 522, 7, },
2261     { 489, 576, 7, },
2262     { 490, 523, 7, },
2263     { 490, 577, 7, },
2264     { 491, 524, 7, },
2265     { 491, 578, 7, },
2266     { 492, 525, 7, },
2267     { 492, 579, 7, },
2268     { 493, 526, 7, },
2269     { 493, 580, 7, },
2270     { 494, 527, 7, },
2271     { 494, 581, 7, },
2272     { 495, 528, 7, },
2273     { 495, 582, 7, },
2274     { 496, 529, 7, },
2275     { 496, 583, 7, },
2276     { 497, 530, 7, },
2277     { 497, 584, 7, },
2278     { 498, 531, 7, },
2279     { 498, 585, 7, },
2280     { 499, 532, 7, },
2281     { 499, 586, 7, },
2282     { 500, 533, 7, },
2283     { 500, 587, 7, },
2284     { 501, 534, 7, },
2285     { 501, 588, 7, },
2286     { 502, 535, 7, },
2287     { 502, 589, 7, },
2288     { 503, 536, 7, },
2289     { 503, 590, 7, },
2290     { 504, 537, 7, },
2291     { 504, 591, 7, },
2292     { 505, 538, 7, },
2293     { 505, 592, 7, },
2294     { 506, 539, 7, },
2295     { 506, 593, 7, },
2296     { 507, 510, 7, },
2297     { 507, 594, 7, },
2298     { 508, 511, 7, },
2299     { 508, 595, 7, },
2300     { 509, 512, 7, },
2301     { 509, 596, 7, },
2302     { 510, 542, 7, },
2303     { 511, 543, 7, },
2304     { 512, 544, 7, },
2305     { 513, 545, 7, },
2306     { 514, 546, 7, },
2307     { 515, 547, 7, },
2308     { 516, 548, 7, },
2309     { 517, 549, 7, },
2310     { 518, 550, 7, },
2311     { 519, 551, 7, },
2312     { 520, 552, 7, },
2313     { 521, 553, 7, },
2314     { 522, 554, 7, },
2315     { 523, 555, 7, },
2316     { 524, 556, 7, },
2317     { 525, 557, 7, },
2318     { 526, 558, 7, },
2319     { 527, 559, 7, },
2320     { 528, 560, 7, },
2321     { 529, 561, 7, },
2322     { 530, 562, 7, },
2323     { 531, 563, 7, },
2324     { 532, 564, 7, },
2325     { 533, 565, 7, },
2326     { 534, 566, 7, },
2327     { 535, 567, 7, },
2328     { 536, 568, 7, },
2329     { 537, 569, 7, },
2330     { 538, 540, 7, },
2331     { 539, 541, 7, },
2332     { 540, 570, 7, },
2333     { 541, 571, 7, },
2334     { 542, 572, 7, },
2335     { 543, 573, 7, },
2336     { 544, 574, 7, },
2337     { 545, 575, 7, },
2338     { 546, 576, 7, },
2339     { 547, 577, 7, },
2340     { 548, 578, 7, },
2341     { 549, 579, 7, },
2342     { 550, 580, 7, },
2343     { 551, 581, 7, },
2344     { 552, 582, 7, },
2345     { 553, 583, 7, },
2346     { 554, 584, 7, },
2347     { 555, 585, 7, },
2348     { 556, 586, 7, },
2349     { 557, 587, 7, },
2350     { 558, 588, 7, },
2351     { 559, 589, 7, },
2352     { 560, 590, 7, },
2353     { 561, 591, 7, },
2354     { 562, 592, 7, },
2355     { 563, 593, 7, },
2356     { 564, 594, 7, },
2357     { 565, 595, 7, },
2358     { 566, 596, 7, },
2359     { 567, 597, 7, },
2360     { 568, 598, 7, },
2361     { 569, 599, 7, },
2362 };
2363
2364
2365 static const char *hyperball_defaults[] =
2366 {
2367   "*observer-z: 3",
2368   "*delay: 20000",
2369   "*xy: 3",
2370   "*xz: 5",
2371   "*yw: 10",
2372   "*yz: 0",
2373   "*xw: 0",
2374   "*zw: 0",
2375   ".background: black",
2376   ".foreground: white",
2377   "*fpsSolid:   true",
2378   "*color00:#FF66BE",
2379   "*color10:#FFA300",
2380   "*color20:#BEDC00",
2381   "*color30:#12FB00",
2382   "*color40:#00F9BE",
2383   "*color50:#12D5FF",
2384   "*color60:#BE9AFF",
2385   "*color70:#FF5FFF",
2386   "*color01:#FF5BAA",
2387   "*color11:#F09200",
2388   "*color21:#AAC500",
2389   "*color31:#10E100",
2390   "*color41:#00DFAA",
2391   "*color51:#10BFFF",
2392   "*color61:#AA8AFF",
2393   "*color71:#F055FF",
2394   "*color02:#EE529A",
2395   "*color12:#D98400",
2396   "*color22:#9AB200",
2397   "*color32:#0ECB00",
2398   "*color42:#00C99A",
2399   "*color52:#0EADE7",
2400   "*color62:#9A7DFF",
2401   "*color72:#D94DE7",
2402   "*color03:#DA4B8C",
2403   "*color13:#C67900",
2404   "*color23:#8CA300",
2405   "*color33:#0DBA00",
2406   "*color43:#00B88C",
2407   "*color53:#0D9ED3",
2408   "*color63:#8C72EA",
2409   "*color73:#C646D3",
2410   "*color04:#C84581",
2411   "*color14:#B66F00",
2412   "*color24:#819600",
2413   "*color34:#0CAB00",
2414   "*color44:#00A981",
2415   "*color54:#0C91C2",
2416   "*color64:#8169D7",
2417   "*color74:#B641C2",
2418   "*color05:#B94078",
2419   "*color15:#A96700",
2420   "*color25:#788B00",
2421   "*color35:#0B9E00",
2422   "*color45:#009D78",
2423   "*color55:#0B86B3",
2424   "*color65:#7861C7",
2425   "*color75:#A93CB3",
2426   "*color06:#AC3C6F",
2427   "*color16:#9D6000",
2428   "*color26:#6F8100",
2429   "*color36:#0A9300",
2430   "*color46:#00926F",
2431   "*color56:#0A7DA7",
2432   "*color66:#6F5AB9",
2433   "*color76:#9D38A7",
2434   "*color07:#A13868",
2435   "*color17:#935900",
2436   "*color27:#687900",
2437   "*color37:#0A8A00",
2438   "*color47:#008868",
2439   "*color57:#0A759C",
2440   "*color67:#6854AD",
2441   "*color77:#93349C",
2442   0,
2443 };
2444
2445 static XrmOptionDescRec hyperball_options [] =
2446 {
2447   { "-observer-z",      ".observer-z",  XrmoptionSepArg, 0 },
2448   { "-delay",           ".delay",       XrmoptionSepArg, 0 },
2449   { "-xw",              ".xw",          XrmoptionSepArg, 0 },
2450   { "-xy",              ".xy",          XrmoptionSepArg, 0 },
2451   { "-xz",              ".xz",          XrmoptionSepArg, 0 },
2452   { "-yw",              ".yw",          XrmoptionSepArg, 0 },
2453   { "-yz",              ".yz",          XrmoptionSepArg, 0 },
2454   { "-zw",              ".zw",          XrmoptionSepArg, 0 },
2455   { 0, 0, 0, 0 },
2456 };
2457
2458 XSCREENSAVER_MODULE ("HyperBall", hyperball)