/* geocentric moon polar coordinates re mean equinox and ecliptic of date S. L. Moshier December, 1996 ********************************************************************** Adapted by Michael Sternberg for xephem with minor modifications from the originals at: ftp://ftp.std.com/pub/astronomy/selenog.zip Precision < 0.05" from -1369 to +2950. Uses table lookup techniques to limit calls to trigonometric functions. NB: Uses International Earth Rotation System (IERS) which is taken as equivalent to FK5 for the purposes of xephem. original files used: chewtab.c mean.c mlr404.c mlat404.c selenog.c changes: added prototypes, grouped and cleaned up vars and #defines, removed _MSC_VER #ifdefs, uniqed names in moonlr and moonlat, included plantbl.h in .c file, dropped out librations for now. in struct plantbl, promoted "char *arg_tbl" to "short *". reason: - more portable (BTW: this is the only place in xephem where "signed char" would have been needed) - using "short" costs a mere 7k memory but avoids core dumps on a machine which we didn't anticipate. ********************************************************************** Residuals against JPL ephemeris DE404 (arc seconds) First date in file = 1221000.5 Number of samples = 1053099 Sampling interval = 1.515625 days Peak excursions from these mostly different test points were consolidated with the above. They added .01" to a few of the peak readings. First date in file = 1221000.50 Number of samples = 524290.0 Sampling interval = 3.0 days Julian Years Longitude Latitude Distance 1 = 1.9 km Peak RMS Ave Peak RMS Ave Peak RMS Ave -1369.0 to -1000.0: 0.43 0.07 0.00 0.33 0.05 -0.00 0.18 0.03 0.00 -1000.0 to -500.0: 0.49 0.06 -0.00 0.33 0.04 -0.00 0.18 0.03 0.00 -500.0 to 0.0: 0.48 0.06 0.00 0.32 0.04 0.00 0.15 0.03 0.00 0.0 to 500.0: 0.45 0.05 0.00 0.30 0.04 -0.00 0.17 0.03 -0.00 500.0 to 1000.0: 0.48 0.05 -0.00 0.29 0.04 0.00 0.17 0.03 -0.00 1000.0 to 1500.0: 0.42 0.05 -0.00 0.28 0.04 -0.00 0.16 0.03 0.00 1500.0 to 2000.0: 0.35 0.05 -0.00 0.26 0.04 0.00 0.15 0.03 0.00 2000.0 to 2500.0: 0.39 0.06 0.00 0.25 0.04 -0.00 0.15 0.03 -0.00 2500.0 to 3000.0: 0.44 0.07 -0.00 0.30 0.05 -0.00 0.19 0.03 -0.00 3000.0 to 3000.8: 0.23 0.08 -0.04 0.11 0.04 -0.00 0.08 0.03 -0.00 */ #include #if defined(__STDC__) #include #endif #include "P_.h" #include "astro.h" #define CHAR short #define NARGS 18 struct plantbl { char max_harmonic[NARGS]; char max_power_of_t; CHAR *arg_tbl; long *lon_tbl; long *lat_tbl; long *rad_tbl; double distance; double timescale; double trunclvl; }; static double mods3600 P_((double x)); static void mean_elements P_((double JED)); static int sscc P_((int k, double arg, int n)); static int g2plan P_((double J, struct plantbl *plan, double *pobj, int flag)); static double g1plan P_((double J, struct plantbl *plan)); static int gecmoon P_((double J, struct plantbl *lrtab, struct plantbl *lattab, double *pobj)); /* time points */ #define MOSHIER_J2000 (2451545.0) #define MOSHIER_BEGIN (1221000.5 - MJD0) /* directly from above */ #define MOSHIER_END (2798525.5 - MJD0) /* 2950.0; from libration table */ static double Args[NARGS]; static double LP_equinox; static double NF_arcsec; static double Ea_arcsec; static double pA_precession; /* This storage ought to be allocated dynamically. */ double ss[NARGS][30]; double cc[NARGS][30]; /* Time, in units of 10,000 Julian years from JED 2451545.0. */ static double T; /* Conversion factors between degrees and radians */ #define DTR 1.7453292519943295769e-2 #define RTD 5.7295779513082320877e1 #define RTS 2.0626480624709635516e5 /* arc seconds per radian */ #define STR 4.8481368110953599359e-6 /* radians per arc second */ #define AUKM 1.4959787e8 static long lrtabl[] = { 175667, 66453, 5249, -42, 20057, 403, -2360, 6148, -7644, 24646, -1273, 9127, -1395, 1958, 232, -289, -97, 553, 69, 130, -80, 6, 129, -868, 26, -89, 1042, 1172, 194, -112, -47433, -241666, 224626, -103752, 63419, 127606, 2294, -691, -1827, -1254, -1, -119, 1057, 324, 505, -195, 254, -641, -36, 1008, -1082, -3, -87, 122, 161, 11, 2, -106, 29, -123, -32, 41, -524, -35, 133, -595, 225, 837, -108, -191, -2294, 841, -340, -394, -351, -1039, 238, -108, -66, 21, 1405, 869, 520, 2776, -174, 71, 425, 652, -1260, -80, 249, 77, -192, -17, -97, 134, -7, -54, -802, -7436, -2824, 70869, -35, 2481, 1865, 1749, -2166, 2415, 33, -183, -835, 283, 27, -45, 56, 235, 2, 718, -1206, 275, -87, -158, -7, -2534, 0, 10774, 1, -324, -208, 821, 281, 1340, -797, 440, 224, 72, -65, -5, -7, -44, -48, 66, -151, -40, -41, -45, 76, -108, -18, 1202, 0, -2501, 1438, -595, 900, 3040, -3435, -5, -100, -26, 0, -13714, -183, 68, 453, -83, -228, 325, 97, 13, 2, 105, -61, 257, 0, 57, 88, -11, -1, -8220, 0, 275, -43, -10, -199, 105, 1, -5849, 2, 24887, -128, 48, 712, 970, -1407, 845, -266, 378, 311, 1526, -1751, 27, 0, -185858, 133, 6383, -108, 25, -7, 1944, 5, 390, -11, 31, 277, -384, 158, 72, -81, -41, -13, -111, -2332, -65804, -698, 505812, 34, 1676716, -72, -6664384, 154, -57, 52, 95, -4, -5, -7, 37, -63, -32, 4, 3349, 1, -14370, 16, -83, 0, -401, 13, 3013, 48, -20, 0, 250, 51, -79, -7, -146, 148, 9, 0, -64, -17, -59, -67, -492, -2, 2116601, -12, -1848, 8, -436, -6, 324, 0, -1363, -163, 9, 0, -74, 63, 8167, -29, 37587, -22, -74501, -71, 497, -1, 551747, -87, -22, 0, -51, -1, -463, 0, -444, 3, 89, 15, -84, -36, -6829, -5, -21663, 0, 86058, 0, -298, -2, 751, -2, -1015, 0, 69, 1, -4989, 0, 21458, 0, -330, 0, -7, 0, -226, 0, -1407, 0, 2942, 0, 66, 0, 667, 0, -155, 0, 105, 0, -107, 0, -74, 0, -52, 0, 91, 0, 59, 0, 235, -1, -1819, 0, 2470, 71, 13, 0, 1026, 14, -54, 0, -174, -121, -19, 0, -200, 0, 3008, -16, -8043, -10, -37136, -3, 73724, -157, -5, 0, -854, 8, 147, -13, -893, 0, 11869, -23, -172, 89, 14, -1, 872, 0, -3744, 11, 1606, 0, -559, -1, -2530, 0, 454, 0, -193, -60, -10, -82, -13, -75, 6, 36, 81, 354, -162836, 148, -516569, 4, 2054441, 4, -94, 39, 38, 61, -30, 2, 121, -11, 590, 62, 2108, 0, -12242, -476, -42, -84, 113, -394, 236, 0, 276, -49, 31, 0, 86, 1, -1313, 1, 69, -60, 88, -46, 18, 0, -63818, 14, -93, 113, 547, -618, 17, -7, 12290, -1, -25679, 0, 92, -115, 50, -48, 233, 4, 1311, 1, -5567, 3, 1251, 29, 548, -244, 257, -2, 1825, 42, 637, -46, 68, -62, 8, 3, 110, 445, -100, -316, -202, 2925, -621, 763, 1495, -169, -184, 20, -76, -475, -138, 8, -141, -197, 1351, -1284, 422, -129, 1879, -102, 8382, -9, 45864958, -215, 1350, -1285, 422, -481, -136, 8, -140, 40, -53, 2622, -543, 700, 1406, 402, -95, -318, -194, 122, 13, -30, 147, -121, -902, 61, -23, -63, 7, 69, 479, -224, 228, -7, 500, 0, -429, -42, 193, -92, 37, 67, 5, -350, -31, 0, 67, -55, -5, 0, 47, -36, 53, 5, 561, 0, -126, 0, 871, -52, 4, -201, 116922, -22, 371352, -12, -1473285, 0, 87, -164, 84, -3, 422, 30, 1434, -26, 38, 2, -1249943, -404, -34, -57, 79, 5, 509, 1, 131, -344, 168, 112, 22540, 30, 71218, 18, -283983, 0, -851, 0, -1538, 0, 1360, -12, 51, -48, 68, 88, -20, 1, 63, 0, -568, 303, 25, 0, -122, 87, 586, -606, -14, 0, -100, -85, 8, -165, 54, -45, 140, 0, -54, 4, -831, 1, 3495, 31, 116, -46, -11, -371, 190, -507, 399, -2, 57, -60, 36, -198, -1174, -613, 4988, -87, -4, 141, 560, -276, 187, 1876, 1379, 778, 4386, 24, -15, 167, -774, -71, -9, -62, 90, 98, 580, -663, -7, 34, -112, 57, 15, -355, -214, -3240, -13605, 12229, -5723, 3496, 7063, 33, -51, 1908, 1160, -226, 715, 964, 1170, -1264, 623, 14071, 5280, 5614, 3026, 488, 1576, -2, 226395859, 824, 1106, -1287, 617, 1917, 1156, -214, 718, 90, -97, 12078, -2366, 3282, 6668, -219, 9179, 593, 2015, -282, -186, 57, 25, 31, -102, -77, -4, -268, -341, -7, -45, -3, 74, 15, -615, -88, -7, 234, -353, 1, -119, -163, -1159, -601, 4969, 22, -58, -17, -11434, 17, 54, 348, 348, -460, 434, -371, 175, -11, -204, 4, -6440, -5, -53, -4, -14388, -37, -45231, -7, 179562, -44, 136, -160, 49, -101, 81, -1, -188, 0, 2, -4, 12124, -11, -25217, 71, 543, -557, -14, -75, 526, 0, 395274, -233, -16, 93, -20, -43, 61, 0, -1275, 0, -824, 1, -415, 0, 1762, -261, 131, -45, 64, -297, -25, 0, -17533, -6, -56, 21, 1100, 1, 327, 1, 66, 23, -217, -83, -7, 83, 86847, 49, 275754, -4, -1093857, -46, 2, 0, -24, 0, -419, 0, -5833, 1, 506, 0, -827, -1, -377, -11, -78, 0, 131945, -2, -334, 1, -75, 0, -72, 0, -213, -6, 5564, -2, -11618, 0, 1790, 0, -131, 0, 6, 0, -76, 0, -130, 0, -1115, 0, 4783, 0, -195, 0, -627, 0, -55, 0, -83, 0, 163, 0, -54, 0, 82, 0, 149, 0, -754, 0, 1578, 0, 138, 0, 68, 2, -2506, 0, 3399, 0, -125, 86, 16, 0, -6350, 0, 27316, 18, -63, 0, -169, -1, 46, -136, -21, 0, -239, -30, -8788, -15, -40549, -4, 80514, -46, -8, -168, -6, -1, 536, 0, -2314, 9, 148, -13, -842, -1, 307713, -23, -175, 95, 15, 0, -297, 11, 1341, 0, -106, 0, 5, -4, 68, -114, 10, 32, 75, 159, -130487, 98, -413967, 2, 1647339, -4, -85, 100, -46, 2, 95, -11, 461, 51, 1647, 0, -32090, -375, -33, -65, 86, -300, 180, 0, 836, 0, -3576, 0, -222, 0, -993, -41, 60, 0, -4537, -431, -34, 2, 927, 0, -1931, -79, 33, -31, 144, -1, 284, 0, -1207, 0, 88, -11, 315, -178, 177, -1, 144, -58, 986, 11, 86, -228, -110, 2636, -494, 718, 1474, 28, -35, -24, 782, -797, 277, 2142, -1231, 856, 1853, 74, 10797, 0, 23699298, -21, 786, -796, 277, 27, -34, 2615, -494, 712, 1461, -226, -109, -11, 663, 0, -123, -169, 157, -54, 266, 0, -76, 1, -634, 0, 2738, -25, 106, -63, 24, 0, -372, -221, -24, 0, -5356, 0, -219, 0, 91, -28, 7684, -6, 24391, -1, -96795, -77, 43, 2, 95, -47, -3, 0, -84530, 2, 310, 1, 88, 111, 19331, 32, 61306, 4, -243595, 0, 770, 0, -103, 0, 160, 0, 356, 0, 236, -41, 354, 39, 303, 12, -56, 873, -143, 238, 482, -28, 35, -93, 31, -3, 7690211, -91, 33, -34, 43, 824, -130, 226, 450, -39, 341, -1, -687, 0, -303, 11, -2935, 1, 12618, 121, 924, 9, -1836, -268, -1144, -678, 3685, -69, -261, 0, -4115951, -69, -261, 5, -151, 0, -88, 0, 91, 0, 187, 0, -1281, 1, 77, 1, 6059, 3, 19238, 0, -76305, 0, -90, 0, -238, 0, -962, 0, 4133, 0, 96, 0, 9483, 0, 85, 0, -688, 0, -5607, 0, 55, 0, -752, 0, 71, 0, 303, 0, -288, 0, 57, 0, 45, 0, 189, 0, 401, 0, -1474, 0, 3087, 0, -71, 0, 2925, 0, -75, 0, 359, 0, 55, 1, -10155, 0, 43735, 0, -572, 0, -49, 0, -660, 0, -3591, 0, 7516, 0, 668, -1, -53, -2, 384259, 0, -163, 0, -93, 1, 112, -95, -11528, -22, -36505, -1, 145308, 5, 145, 0, 4047, 1, 1483, 0, -6352, 0, 991, 0, -4262, 0, -93, 0, -334, 0, -160, 0, -153, -10, 127, 51, 185, -77, 18, 56, 1217, 6, 1919574, -74, 17, 50, 180, -5, 93, 0, -104, 0, -58, -3, -353, -1, 1499, 0, -229, -15, 86, 0, -93657, 0, 1561, 0, -6693, 0, -5839, 1, 6791, 0, -29143, 1, -701, 0, 3015, 0, 2543, 0, 693, -1, 361233, 0, -50, 0, 946, -1, -140, -70, 407, 0, -450995, 0, -368, 0, 54, 0, -802, 0, -96, 0, 1274, 0, -5459, 0, -614, 0, 2633, 0, 685, 0, -915, 0, -85, 0, 88, 0, 106, 0, 928, 0, -726, 0, 1523, 0, 5715, 0, -4338, 0, 18706, 0, -135, 0, -132, 0, -158, 0, -98, 0, 680, -1, 138968, 0, -192, 0, -1698, 0, -2734, 0, 11769, 0, 4, 0, 673, 0, -2891, 0, 889, 0, -3821, 0, 121, -1, 143783, 0, 231, -9, 51, 0, -57413, 0, -483, 0, -407, 0, 676, 0, -2902, 0, 531, 0, 445, 0, 672, 0, 19336, 0, 70, 0, -39976, 0, -68, 0, 4203, 0, -406, 0, 446, 0, -108, 0, 79, 0, 84, 0, 734, 0, 255, 0, 3944, 0, -655, 0, 2825, 0, -109, 0, -234, 0, 57, 0, 19773, 0, -2013, 0, 958, 0, -521, 0, -757, 0, 10594, 0, -9901, 0, 199, 0, -275, 0, 64, 0, 54, 0, 165, 0, 1110, 0, -3286, 0, 909, 0, 54, 0, 87, 0, 258, 0, 1261, 0, -51, 0, 336, 0, -114, 0, 2185, 0, -850, 0, 75, 0, -69, 0, -103, 0, 776, 0, -1238, 0, 137, 0, 67, 0, -260, 0, 130, 0, 49, 0, 228, 0, 215, 0, -178, 0, 57, 0, -133, }; static long lrtabb[] = {-1}; static long lrtabr[] = { -5422, -2120, 1077, 772, 39, 75, 3, 10, -468, -326, -113, -78, -4, -2, 1, 3, 29, 24, 4, 2, 1, 0, -9, 7, -2, 0, -32, -13, -3, -3, 233, 126, 89, 77, -33, 16, 3, -3, 0, -1, 2, 0, 0, 1, 4, 9, 1, 1, 16, -1, 0, 18, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -22, -5, 10, 3, 1, 1, -15, 7, -2, 1, -8, -11, -1, -2, -1, 1, 46, -58, 126, -23, 4, 8, 35, 8, 10, -17, 0, 0, 0, 0, -10, -7, 0, 0, -23, 3, 151, 10, -327, 0, 4, -5, 6, 5, 1, 0, -1, -3, 0, 0, 0, 1, -185, 0, -3, -24, -5, -2, -1062, 3, 4560, 0, -3, 0, 4, 1, 8, -1, 2, 4, 0, 1, 0, -1, 0, 0, -1, 0, 0, 1, 0, 0, -1, -1, 277, 3, -583, 1, -1, 4, -32, 7, 0, -34, 1, -1, -23685, 0, -1, -2, -1, -7, -5, -4, 0, 2, -2, 0, -5, -1, 35, 0, 0, 2, 202, 0, 180, 0, 0, -1, -3, -6, -193, 0, 770, -1, -2, -4, -32, 23, -28, -46, -13, -9, -54, 10, -1, -61, -44895, 0, -230, 5, -1, -4, -71, 0, -15, 0, 1, 0, 15, 11, -3, 6, 2, -3, 4, -1, 2576, -138, -19881, -47, -65906, -1, 261925, -4, -2, -7, 4, -2, 0, 0, -1, 0, 1, -3, 172, -2, -727, 0, 4, 1, 324, 0, -139, 1, 1, 3, -276, 0, 5, 3, 9, 0, -1, 10, -37, 0, 5, -1, 76, -10, 1318810, 1, 12, -1, -38, 1, -141, 0, 611, 0, 0, -11, 4, 0, -627, 2, -2882, -3, 5711, -2, -48, -7, 55294, 0, 2, -7, 31, 0, 34, 0, -259, 0, -55, 2, 6, 3, -4273, 20, -13554, 3, 53878, 0, -46, 0, -85, 0, 114, 0, -45, 0, -818, 0, 3520, 0, 34, 0, -157, 0, 29, 0, -878, 0, 1838, 0, -428, 0, 161, 0, 24, 0, 65, 0, 19, 0, 15, 0, 12, 0, -26, 0, -14, 0, -149, 0, 584, 0, -793, 0, 4, -23, -238, 0, -18, -5, 45, 0, -7, 42, 79, 0, -1723, 0, 2895, -6, 13362, -4, -26525, -1, -2, 57, 291, 0, 52, -3, -327, 5, -2755, 0, -63, 9, 5, -33, -261, -1, 1122, 0, 621, -4, -227, 0, 1077, 0, -167, 0, 85, 0, -4, 23, -5, 32, 3, 30, -32, 14, 64607, 141, 204958, 59, -815115, 2, -37, -1, 15, -15, 12, 24, 48, -1, 235, 4, 843, -25, 4621, 0, -17, 191, 45, 34, 95, 159, -132, 0, 13, 20, 32, 0, -540, 0, 29, 0, 37, 25, 8, 19, 22127, 0, -35, -5, 232, -48, 7, 262, 5428, 3, -11342, 1, -45, 0, -21, -49, -100, -21, -626, 1, 2665, 0, 532, -2, 235, -12, -111, -105, 774, 1, -283, 17, 29, 20, 3, 27, 47, -2, -43, -192, -87, 136, -269, -1264, 646, -330, -79, 73, -33, -9, 60, -205, 61, 4, -584, -85, -182, -555, -780, -57, -3488, -45, -19818328, -4, 583, 93, 182, 555, -59, 208, -60, -4, 23, 17, 235, 1133, -608, 302, 41, 174, 84, -137, 6, -53, 63, 13, -392, 52, -10, -27, -3, -27, 199, -31, 99, 97, -218, -3, 209, 0, 84, 18, 16, 40, 2, -30, 14, -154, 30, 0, -2, 24, -108, 0, -24, -16, 262, -2, 55, 0, -304, 0, 2, 25, 55112, 95, 175036, 11, -694477, 5, 41, 0, -38, -76, 199, 1, 679, -14, -17, -12, 582619, 1, -16, 191, 38, 27, -234, 2, -60, 0, 80, 163, -10296, 48, -32526, 13, 129703, 8, -1366, 0, -741, 0, -646, 0, 25, 6, 33, 23, 10, 43, -31, 0, -6, 0, -12, 147, 59, 0, 287, -42, -7, 297, -59, 0, -4, -42, -27, -81, -69, -22, 27, 0, -423, -2, 1779, -1, -57, 15, 5, -23, 94, 182, -197, -250, 24, 1, -18, -30, 581, -98, -2473, -303, -2, 43, -277, 70, -92, -136, -681, 925, -2165, 384, -8, -12, 382, 82, -4, 35, -45, -31, -286, 48, 3, -328, -55, -17, 8, -28, -106, 175, -6735, 1601, -2832, -6052, 3495, -1730, -25, -17, -574, 944, -354, -112, -579, 476, -308, -625, -2411, 7074, -1529, 2828, -1335, 247,-112000844, -1, 545, -409, 305, 637, 572, -950, 356, 106, 48, 44, 1170, 5974, -3298, 1624, -4538, -106, -996, 294, 92, -139, -12, 28, 50, 16, 2, -38, 169, -133, 22, -3, 38, 1, 305, 7, 4, -44, 175, 116, 59, 1, -573, 81, 2453, 297, 29, 11, 5674, -8, -27, 9, 173, -173, 215, 228, -87, -184, 102, -5, 3206, 2, -53, 2, 7159, -7, 22505, -19, -89344, -3, 67, 22, 24, 79, -40, -50, 94, 0, 186, 0, -6063, 0, 12612, -5, -271, 35, 7, -278, -479, -74, 426754, 0, 8, -116, -10, -47, -31, -22, 645, 0, 426, 0, -213, 0, 903, 0, -67, -133, -33, -23, 13, -152, -9316, 0, 29, -3, -564, 11, -167, 0, -34, 0, 114, 12, 4, -44, -44561, 42, -141493, 25, 561256, -2, -1, -24, -261, 0, 211, 0, -4263, 0, -262, 1, 1842, 0, 202, 0, 41, -6, 77165, 0, 176, -1, 39, 1, -24, 0, 118, 0, -2991, -4, 6245, -1, 46886, 0, -75, 0, -100, 0, 40, 0, 75, 0, -618, 0, 2652, 0, 112, 0, 1780, 0, 30, 0, 49, 0, 86, 0, 33, 0, -30, 0, -95, 0, 277, 0, -580, 0, -35, 0, -319, 0, 1622, 1, -2201, 0, 79, 0, 10, -57, 2363, 0, -10162, 0, -41, -12, 62, 0, 30, 1, -14, 89, -2721, 0, 5780, -19, 26674, -10, -52964, -2, -5, 30, -4, 111, -317, -1, 1369, 0, 93, -6, -564, 9, -115913, 0, -113, 15, 10, -62, 99, 0, 891, -7, 36, 0, 108, 0, -42, -2, 7, 75, -50, 21, 86822, 104, 275441, 65, -1096109, 1, -56, 3, 31, 66, 63, -1, 307, 7, 1097, -34, 17453, 0, -22, 250, 57, 43, 120, 200, -297, 0, 1269, 0, 166, 0, -662, 0, 40, 28, 1521, 0, -23, 288, 351, -2, -729, 0, -22, -52, -96, -21, -139, -1, 589, 0, 35, 0, 210, 7, -118, -119, 62, 0, -583, -26, -42, 5, -73, 152, -330, -1759, 983, -479, -23, -19, -522, -15, -185, -533, 739, 1559, -1300, 614, -7332, 52, -15836758, 0, 524, 16, 185, 532, 23, 18, 330, 1751, -978, 476, 73, -151, 519, 18, 38, 0, 105, 113, -178, -37, 26, 0, 262, 1, -1139, 0, 71, 17, 16, 42, 151, 0, 16, -148, 4147, 0, 149, 0, -30, 0, 2980, 9, 9454, 2, -37519, 0, -28, -49, 37, -1, 2, -31, 33870, 0, -208, 1, -59, 1, -13105, 68, -41564, 21, 165148, 3, -1022, 0, -40, 0, -132, 0, -228, 0, 95, 0, -138, -16, -126, 16, 24, 5, -57, -346, 191, -94, -14, -11, -12, -37, -3053364, -1, 13, 36, 17, 13, 51, 327, -179, 90, 138, 16, 233, 0, 62, 0, 1164, 0, -5000, 0, -407, 117, 770, 9, -4, 1, 21, 2, 1, 0, -16869, 0, -1, 0, 1, 0, 35, 0, -78, 0, 78, 0, -533, 0, -31, 1, -2448, -6, -7768, -1, 30812, 0, 37, 0, -227, 0, 197, 0, -846, 0, -77, 0, 4171, 0, -67, 0, 287, 0, 2532, 0, -19, 0, -40, 0, -56, 0, 128, 0, 83, 0, -45, 0, -36, 0, -92, 0, -134, 0, 714, 0, -1495, 0, 32, 0, -981, 0, 15, 0, -166, 0, -59, 0, 4923, 0, -21203, 0, 246, 0, 15, 0, 104, 0, 1683, 0, -3523, 0, -865, 0, -25, 1, -186329, -1, 10, 0, 50, 0, 53, 0, 5455, -45, 17271, -10, -68747, 0, 69, -2, -7604, 0, -724, 1, 3101, 0, -46, 0, 200, 0, -44, 0, 97, 0, -53, 0, 62, 0, -54, -4, 88, -24, -9, -36, -581, 27, -914711, 3, 8, 35, -86, 24, 51, 3, 48, 0, 26, 0, 133, 1, -577, 0, 105, 0, -3, -1, 3194, 0, 528, 0, -2263, 0, 2028, 0, -3266, 1, 14016, 0, 10, 0, -41, 0, -100, 0, -32, 0, -124348, 0, 16, 0, -325, 0, 50, -1, 1, 0, -553, 0, 0, 0, 0, 0, 2, 0, -34, 0, -444, 0, 1902, 0, 9, 0, -37, 0, 254, 0, 156, 0, -2, 0, -35, 0, -48, 0, -368, 0, 327, 0, -686, 0, -2263, 0, 1952, 0, -8418, 0, -13, 0, 52, 0, 9, 0, 21, 0, -261, 0, -62404, 0, 0, 0, 79, 0, 1056, 0, -4547, 0, -351, 0, -305, 0, 1310, 0, -1, 0, 6, 0, 0, 0, -55953, 0, -80, 0, 0, 0, 168, 0, -147, 0, 127, 0, -265, 0, 1138, 0, -1, 0, -9, 0, -8, 0, -5984, 0, -22, 0, -5, 0, 0, 0, 0, 0, 127, 0, -2, 0, 10, 0, -31, 0, -29, 0, -286, 0, -98, 0, -1535, 0, 252, 0, -1087, 0, 43, 0, 4, 0, -19, 0, -7620, 0, 29, 0, -322, 0, 203, 0, 0, 0, -3587, 0, 10, 0, 0, 0, 94, 0, 0, 0, -1, 0, -1, 0, -315, 0, 1, 0, 0, 0, 0, 0, -30, 0, -94, 0, -460, 0, 1, 0, -114, 0, 0, 0, -746, 0, 4, 0, -23, 0, 24, 0, 0, 0, -237, 0, 1, 0, 0, 0, -18, 0, 0, 0, 0, 0, -16, 0, -76, 0, -67, 0, 0, 0, -16, 0, 0, 0, }; static CHAR lrargs[] = { 0, 3, 3, 4, 3, -8, 4, 3, 5, 1, 2, 2, 5, -5, 6, 2, 5, -1, 10, 2, 13, -1, 11, 3, 3, -7, 4, 0, 3, 1, 13, -1, 11, 2, 5, 1, 2, 4, 5,-10, 6, 0, 4, 2, 10, -2, 13, 14, 3,-23, 4, 1, 3, 3, 2, -7, 3, 4, 4, 1, 3, -1, 13, 18, 2,-16, 3, 2, 2, 8, 2,-13, 3, 1, 5, 2, 10, -2, 13, 2, 3, -3, 5, 1, 6, 0, 3, -1, 13, 26, 2,-29, 3, 0, 3, 1, 10, -1, 11, 2, 4, 1, 4, 1, 10, -1, 13, 3, 2, -4, 3, 1, 4, 1, 10, -1, 13, 3, 3, -4, 4, 0, 3, -1, 10, 15, 2,-12, 3, 0, 4, 2, 10, -3, 13, 24, 2,-24, 3, 0, 3, -1, 10, 23, 2,-25, 3, 0, 4, 1, 10, -1, 11, 1, 3, 1, 6, 0, 4, 2, 10, -2, 11, 5, 2, -6, 3, 0, 4, 2, 10, -2, 13, 6, 2, -8, 3, 0, 4, -2, 10, 1, 13, 12, 2, -8, 3, 1, 5, -1, 10, 1, 13, -1, 11, 20, 2,-20, 3, 1, 4, -2, 10, 1, 13, 3, 1, -1, 3, 1, 5, 2, 10, -2, 13, 2, 3, -5, 5, 5, 6, 0, 4, 2, 10, -2, 13, 2, 3, -3, 5, 1, 4, 2, 10, -2, 13, 6, 3, -8, 4, 0, 4, -2, 10, 1, 13, 20, 2,-21, 3, 1, 4, 1, 10, -1, 11, 1, 3, 1, 5, 0, 1, 1, 6, 0, 4, 2, 10, -2, 13, 5, 3, -6, 4, 0, 3, 3, 2, -5, 3, 2, 5, 0, 2, -1, 11, 1, 14, 1, 4, 2, 10, -2, 13, 2, 3, -2, 5, 0, 2, 1, 3, -2, 4, 1, 4, 1, 10, -1, 11, 5, 2, -7, 3, 0, 1, 1, 5, 0, 2, 7, 3,-13, 4, 0, 4, -2, 10, 1, 13, 15, 2,-13, 3, 0, 4, 2, 10, -2, 13, 3, 2, -3, 3, 0, 2, -2, 11, 2, 14, 1, 3, 1, 10, 1, 12, -1, 13, 1, 3, -1, 13, 21, 2,-21, 3, 0, 2, 3, 2, -5, 3, 0, 2, 2, 3, -4, 4, 1, 2, 5, 2, -8, 3, 0, 3, -1, 13, 23, 2,-24, 3, 0, 2, 6, 3,-11, 4, 0, 1, 2, 5, 0, 2, 3, 3, -6, 4, 0, 2, 5, 3, -9, 4, 0, 4, 1, 10, -1, 11, 1, 3, -2, 5, 0, 3, 2, 10, 2, 12, -2, 13, 1, 2, 2, 2, -3, 3, 2, 2, 4, 3, -7, 4, 0, 2, 2, 13, -2, 11, 0, 2, 3, 3, -5, 4, 0, 2, 1, 2, -2, 3, 0, 2, 2, 3, -3, 4, 0, 4, 1, 10, -1, 11, 4, 2, -5, 3, 0, 2, 1, 3, -1, 4, 0, 2, 4, 2, -6, 3, 0, 4, 2, 10, -2, 13, 2, 2, -2, 3, 0, 3, 1, 10, -1, 11, 1, 2, 0, 2, 1, 2, -1, 3, 0, 3, 1, 12, 2, 13, -2, 11, 0, 2, 5, 3, -8, 4, 0, 2, 1, 3, -3, 5, 0, 3, 2, 10, 1, 12, -2, 13, 1, 2, 4, 3, -6, 4, 0, 2, 1, 3, -2, 5, 1, 2, 3, 3, -4, 4, 0, 2, 3, 2, -4, 3, 1, 2, 1, 10, -1, 13, 0, 2, 1, 3, -1, 5, 0, 2, 1, 3, -2, 6, 0, 2, 2, 3, -2, 4, 0, 2, 1, 3, -1, 6, 0, 2, 8, 2,-14, 3, 0, 3, 1, 3, 2, 5, -5, 6, 1, 3, 5, 3, -8, 4, 3, 5, 1, 1, 1, 12, 3, 3, 3, 3, -8, 4, 3, 5, 1, 3, 1, 3, -2, 5, 5, 6, 0, 2, 8, 2,-12, 3, 0, 2, 1, 3, 1, 5, 0, 3, 2, 10, 1, 12, -2, 11, 1, 2, 5, 2, -7, 3, 0, 3, 1, 10, 1, 13, -2, 11, 0, 2, 2, 2, -2, 3, 0, 2, 5, 3, -7, 4, 0, 3, 1, 12, -2, 13, 2, 11, 0, 2, 4, 3, -5, 4, 0, 2, 3, 3, -3, 4, 0, 1, 1, 2, 0, 3, 3, 10, 1, 12, -3, 13, 0, 2, 2, 3, -4, 5, 0, 2, 2, 3, -3, 5, 0, 2, 2, 10, -2, 13, 0, 2, 2, 3, -2, 5, 0, 2, 3, 2, -3, 3, 0, 3, 1, 10, -1, 12, -1, 13, 1, 2, 2, 3, -1, 5, 0, 2, 2, 3, -2, 6, 0, 1, 2, 12, 2, 3, -2, 10, 1, 11, 1, 14, 0, 2, 2, 10, -2, 11, 0, 2, 2, 2, -1, 3, 0, 4, -2, 10, 2, 13, 1, 2, -1, 3, 0, 2, 4, 2, -4, 3, 0, 2, 3, 10, -3, 13, 0, 4, -2, 10, 2, 13, 1, 3, -1, 5, 0, 2, 3, 3, -3, 5, 0, 3, 2, 10, -1, 12, -2, 13, 2, 3, 3, 10, -1, 13, -2, 11, 0, 1, 3, 12, 1, 4, -2, 10, 2, 13, 2, 2, -2, 3, 0, 3, 2, 10, -1, 12, -2, 11, 1, 2, 5, 2, -5, 3, 0, 2, 4, 10, -4, 13, 0, 2, 6, 2, -6, 3, 0, 3, 2, 10, -2, 12, -2, 13, 1, 3, 4, 10, -2, 13, -2, 11, 0, 3, 2, 10, -2, 12, -2, 11, 0, 2, 7, 2, -7, 3, 0, 3, 2, 10, -3, 12, -2, 13, 0, 2, 8, 2, -8, 3, 0, 2, 9, 2, -9, 3, 0, 2, 10, 2,-10, 3, 0, 3, 2, 10, -4, 12, -1, 13, 0, 3, 4, 10, -2, 12, -3, 13, 0, 4, 4, 10, -1, 12, -1, 13, -2, 11, 0, 3, 2, 10, -3, 12, -1, 13, 1, 4, -2, 10, 1, 13, 3, 3, -2, 5, 0, 3, 4, 10, -1, 12, -3, 13, 0, 4, -2, 10, 1, 13, 3, 3, -3, 5, 0, 4, 2, 10, -2, 12, 1, 13, -2, 11, 0, 4, -2, 10, 1, 13, 2, 2, -1, 3, 0, 3, 3, 10, -1, 12, -2, 11, 0, 3, 4, 10, -1, 13, -2, 11, 0, 3, 2, 10, -2, 12, -1, 13, 2, 4, -2, 10, 1, 13, 2, 3, -1, 5, 0, 3, 3, 10, -1, 12, -2, 13, 0, 4, -2, 10, 1, 13, 3, 2, -3, 3, 0, 4, -2, 10, 1, 13, 2, 3, -2, 5, 0, 2, 4, 10, -3, 13, 0, 4, -2, 10, 1, 13, 2, 3, -3, 5, 0, 3, -2, 10, 1, 13, 1, 2, 0, 4, 2, 10, -1, 12, 1, 13, -2, 11, 1, 4, -2, 10, 1, 13, 2, 2, -2, 3, 0, 2, 3, 12, -1, 13, 0, 2, 3, 10, -2, 11, 0, 2, 1, 10, -2, 12, 0, 4, 4, 10, 1, 12, -1, 13, -2, 11, 0, 3, -1, 13, 3, 2, -2, 3, 0, 3, -1, 13, 3, 3, -2, 5, 0, 3, -2, 10, 18, 2,-15, 3, 0, 5, 2, 10, -1, 13, 3, 3, -8, 4, 3, 5, 0, 3, 2, 10, -1, 12, -1, 13, 2, 5, -2, 10, 1, 13, 5, 3, -8, 4, 3, 5, 0, 5, -2, 10, 1, 13, 1, 3, 2, 5, -5, 6, 0, 4, 2, 10, -2, 13, 18, 2,-17, 3, 0, 4, -2, 10, 1, 13, 1, 3, -1, 6, 0, 4, -2, 10, 1, 13, 2, 3, -2, 4, 0, 4, -2, 10, 1, 13, 1, 3, -1, 5, 0, 2, 3, 10, -2, 13, 0, 4, -2, 10, 1, 13, 3, 2, -4, 3, 0, 4, -2, 10, 1, 13, 3, 3, -4, 4, 0, 4, -2, 10, 1, 13, 1, 3, -2, 5, 0, 3, 4, 10, 1, 12, -3, 13, 0, 4, -2, 10, 1, 13, 1, 3, -3, 5, 0, 3, -1, 13, 4, 2, -4, 3, 0, 4, -2, 10, 1, 13, 1, 2, -1, 3, 0, 4, -2, 10, 1, 13, 1, 3, -1, 4, 0, 4, -2, 10, 1, 13, 2, 3, -3, 4, 0, 4, -2, 10, 1, 13, 3, 3, -5, 4, 0, 3, 2, 10, 1, 13, -2, 11, 0, 4, -2, 10, -1, 13, 1, 11, 1, 14, 0, 4, -2, 10, 1, 13, 2, 2, -3, 3, 1, 2, 2, 12, -1, 13, 1, 3, 3, 10, 1, 12, -2, 11, 0, 4, 2, 10, -1, 13, 2, 3, -4, 4, 0, 4, 2, 10, -1, 13, 3, 2, -5, 3, 0, 2, 1, 10, -1, 12, 1, 3, -1, 13, 3, 2, -3, 3, 0, 3, -2, 10, 1, 13, 1, 5, 0, 4, 2, 10, -1, 13, 1, 3, -2, 4, 0, 3, -1, 13, 2, 3, -2, 5, 0, 4, 2, 10, -1, 13, -1, 11, 1, 14, 0, 3, -1, 13, 5, 3, -6, 4, 0, 3, -2, 10, 1, 13, 1, 6, 0, 3, -1, 10, 1, 3, -1, 5, 0, 4, -2, 10, 1, 13, 8, 2,-13, 3, 1, 3, -2, 10, 18, 2,-16, 3, 1, 5, -2, 10, 1, 13, 3, 2, -7, 3, 4, 4, 1, 4, 2, 10, -1, 13, 2, 5, -5, 6, 1, 5, 2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 1, 2, 2, 10, -1, 13, 2, 5, -2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 1, 4, -2, 10, 1, 13, 2, 5, -5, 6, 1, 5, 2, 10, -1, 13, 3, 2, -7, 3, 4, 4, 0, 4, 2, 10, -2, 13, 18, 2,-16, 3, 1, 4, 2, 10, -1, 13, 8, 2,-13, 3, 1, 3, -1, 10, 3, 2, -4, 3, 0, 3, -1, 13, 6, 2, -8, 3, 0, 3, -1, 13, 2, 3, -3, 5, 0, 3, -1, 13, 6, 3, -8, 4, 0, 3, 2, 10, -1, 13, 1, 6, 0, 4, -2, 10, 1, 13, -1, 11, 1, 14, 0, 4, -2, 10, 1, 13, 1, 3, -2, 4, 0, 3, 2, 10, -1, 13, 1, 5, 0, 3, 3, 10, 1, 12, -2, 13, 0, 4, -2, 10, 1, 13, 3, 2, -5, 3, 0, 4, -2, 10, 1, 13, 2, 3, -4, 4, 0, 2, -1, 13, 1, 2, 0, 4, 2, 10, -1, 13, 2, 2, -3, 3, 0, 3, -1, 10, 1, 2, -1, 3, 0, 3, -1, 13, 4, 2, -5, 3, 0, 3, 2, 10, -3, 13, 2, 11, 0, 4, 2, 10, -1, 13, 2, 3, -3, 4, 0, 3, -1, 13, 2, 2, -2, 3, 0, 4, 2, 10, -1, 13, 1, 2, -1, 3, 0, 4, 2, 10, 1, 12, 1, 13, -2, 11, 0, 3, -2, 13, 18, 2,-15, 3, 0, 2, 1, 12, -1, 13, 2, 3, -1, 13, 1, 3, -1, 6, 0, 4, 2, 10, -1, 13, 1, 3, -2, 5, 0, 3, -1, 13, 2, 3, -2, 4, 0, 3, -1, 13, 1, 3, -1, 5, 0, 4, 2, 10, -1, 13, 3, 3, -4, 4, 0, 1, 1, 10, 0, 3, -1, 13, 3, 2, -4, 3, 0, 3, -1, 13, 3, 3, -4, 4, 0, 4, 2, 10, -1, 13, 1, 3, -1, 5, 0, 4, 2, 10, -1, 13, 2, 3, -2, 4, 0, 3, -1, 13, 1, 3, -2, 5, 0, 3, 2, 10, 1, 12, -1, 13, 2, 3, 1, 12, 1, 13, -2, 11, 0, 3, -1, 13, 1, 2, -1, 3, 0, 4, 2, 10, -1, 13, 2, 2, -2, 3, 0, 3, -1, 13, 4, 2, -6, 3, 0, 3, -1, 13, 2, 3, -3, 4, 0, 3, 1, 13, 1, 2, -2, 3, 0, 4, 2, 10, -1, 13, 3, 3, -3, 4, 0, 2, 3, 13, -2, 11, 0, 4, 2, 10, -1, 13, 4, 2, -5, 3, 0, 3, 1, 10, 1, 2, -1, 3, 0, 3, -1, 13, 2, 2, -3, 3, 1, 3, 2, 10, 2, 12, -3, 13, 0, 3, 2, 10, -1, 13, 1, 2, 0, 3, 1, 13, 2, 3, -4, 4, 0, 3, 1, 13, 3, 2, -5, 3, 0, 2, 21, 2,-21, 3, 0, 3, 1, 10, 1, 12, -2, 13, 1, 4, 2, 10, -1, 13, 2, 3, -4, 5, 0, 4, 2, 10, -1, 13, 7, 3,-10, 4, 0, 2, -1, 13, 1, 5, 0, 3, 1, 13, 1, 3, -2, 4, 0, 4, 2, 10, -3, 13, 2, 3, -2, 5, 0, 3, 1, 10, 1, 3, -2, 5, 0, 3, 1, 13, -1, 11, 1, 14, 1, 2, -1, 13, 1, 6, 0, 4, 2, 10, -1, 13, 6, 3, -8, 4, 1, 4, 2, 10, -1, 13, 2, 3, -3, 5, 1, 3, -1, 13, 8, 3,-15, 4, 0, 4, 2, 10, -1, 13, 6, 2, -8, 3, 0, 5, 2, 10, -1, 13, -2, 11, 5, 2, -6, 3, 0, 3, 1, 10, 3, 3, -4, 4, 0, 3, 1, 10, 3, 2, -4, 3, 1, 4, 1, 10, -1, 13, -1, 11, 2, 4, 0, 3, -2, 13, 26, 2,-29, 3, 0, 3, -1, 13, 8, 2,-13, 3, 0, 3, -2, 13, 18, 2,-16, 3, 2, 4, -1, 13, 3, 2, -7, 3, 4, 4, 0, 3, 1, 13, 2, 5, -5, 6, 1, 4, 1, 13, 4, 3, -8, 4, 3, 5, 1, 1, 1, 13, 3, 4, -1, 13, 4, 3, -8, 4, 3, 5, 1, 3, -1, 13, 2, 5, -5, 6, 1, 4, 1, 13, 3, 2, -7, 3, 4, 4, 0, 2, 18, 2,-16, 3, 1, 3, 1, 13, 8, 2,-13, 3, 2, 2, 26, 2,-29, 3, 0, 4, 1, 10, 1, 13, -1, 11, 2, 4, 0, 5, 2, 10, 1, 13, -2, 11, 5, 2, -6, 3, 0, 3, 1, 13, 8, 3,-15, 4, 1, 4, 2, 10, -3, 13, 2, 3, -3, 5, 0, 3, 1, 10, 1, 3, -1, 5, 0, 2, 1, 13, 1, 6, 0, 4, 2, 10, -1, 13, 5, 3, -6, 4, 0, 3, 1, 10, 2, 3, -2, 4, 0, 3, -1, 13, -1, 11, 1, 14, 1, 4, 2, 10, -1, 13, 2, 3, -5, 6, 0, 4, 2, 10, -1, 13, 2, 3, -2, 5, 0, 5, 2, 10, -1, 13, 2, 3, -4, 5, 5, 6, 0, 3, -1, 13, 1, 3, -2, 4, 1, 2, 1, 13, 1, 5, 0, 4, 2, 10, -1, 13, 4, 3, -4, 4, 0, 4, 2, 10, -1, 13, 3, 2, -3, 3, 0, 4, 2, 10, 2, 12, -1, 13, -2, 11, 0, 2, 1, 10, 1, 12, 2, 3, -1, 13, 3, 2, -5, 3, 0, 3, -1, 13, 2, 3, -4, 4, 0, 4, 2, 10, -1, 13, 2, 3, -1, 5, 0, 4, 2, 10, -1, 13, 2, 3, -2, 6, 0, 3, 1, 10, 1, 12, -2, 11, 0, 3, 2, 10, 2, 12, -1, 13, 1, 3, 1, 13, 2, 2, -3, 3, 1, 3, -1, 13, 1, 11, 1, 14, 0, 2, 1, 13, -2, 11, 0, 4, 2, 10, -1, 13, 5, 2, -6, 3, 0, 3, -1, 13, 1, 2, -2, 3, 0, 3, 1, 13, 2, 3, -3, 4, 0, 3, 1, 13, 1, 2, -1, 3, 0, 4, 2, 10, -1, 13, 4, 2, -4, 3, 0, 3, 2, 10, 1, 12, -3, 13, 1, 3, 1, 13, 1, 3, -2, 5, 0, 3, 1, 13, 3, 3, -4, 4, 0, 3, 1, 13, 3, 2, -4, 3, 0, 2, 1, 10, -2, 13, 0, 4, 2, 10, -1, 13, 3, 3, -4, 5, 0, 3, 1, 13, 1, 3, -1, 5, 0, 3, 1, 13, 2, 3, -2, 4, 0, 3, 1, 13, 1, 3, -1, 6, 0, 4, 2, 10, -1, 13, 3, 3, -3, 5, 0, 4, 2, 10, -1, 13, 6, 2, -7, 3, 0, 2, 1, 12, 1, 13, 2, 4, 2, 10, -1, 13, 3, 3, -2, 5, 0, 4, 2, 10, 1, 12, -1, 13, -2, 11, 0, 2, 1, 10, 2, 12, 0, 2, 1, 10, -2, 11, 0, 3, 1, 13, 2, 2, -2, 3, 0, 3, 1, 12, -1, 13, 2, 11, 0, 4, 2, 10, -1, 13, 5, 2, -5, 3, 0, 3, 1, 13, 2, 3, -3, 5, 0, 2, 2, 10, -3, 13, 0, 3, 1, 13, 2, 3, -2, 5, 0, 3, 1, 13, 3, 2, -3, 3, 0, 3, 1, 10, -1, 12, -2, 13, 0, 4, 2, 10, -1, 13, 6, 2, -6, 3, 0, 2, 2, 12, 1, 13, 1, 3, 2, 10, -1, 13, -2, 11, 0, 3, 1, 10, -1, 12, -2, 11, 0, 3, 2, 10, 1, 13, -4, 11, 0, 3, 1, 13, 4, 2, -4, 3, 0, 4, 2, 10, -1, 13, 7, 2, -7, 3, 0, 3, 2, 10, -1, 12, -3, 13, 1, 2, 3, 12, 1, 13, 0, 4, 2, 10, -1, 12, -1, 13, -2, 11, 0, 3, 1, 13, 5, 2, -5, 3, 0, 4, 2, 10, -1, 13, 8, 2, -8, 3, 0, 3, 2, 10, -2, 12, -3, 13, 0, 4, 2, 10, -1, 13, 9, 2, -9, 3, 0, 3, 4, 10, -3, 12, -2, 13, 0, 2, 2, 10, -4, 12, 0, 3, 4, 10, -2, 12, -2, 13, 1, 2, 6, 10, -4, 13, 0, 3, 4, 10, -1, 12, -2, 11, 0, 2, 2, 10, -3, 12, 1, 3, 3, 10, -2, 12, -1, 13, 0, 3, -2, 10, 3, 3, -2, 5, 0, 3, 4, 10, -1, 12, -2, 13, 1, 3, -2, 10, 3, 3, -3, 5, 0, 2, 5, 10, -3, 13, 0, 3, -2, 10, 4, 2, -4, 3, 0, 3, -2, 10, 2, 2, -1, 3, 0, 2, 4, 10, -2, 11, 0, 2, 2, 10, -2, 12, 2, 3, -2, 10, 3, 3, -2, 4, 0, 3, -2, 10, 2, 3, -1, 5, 0, 3, 3, 10, -1, 12, -1, 13, 1, 3, -2, 10, 3, 2, -3, 3, 0, 3, -2, 10, 2, 3, -2, 5, 0, 2, 4, 10, -2, 13, 0, 3, -2, 10, 2, 3, -3, 5, 0, 2, -2, 10, 1, 2, 0, 4, 2, 10, -1, 12, 2, 13, -2, 11, 0, 3, -2, 10, 2, 2, -2, 3, 0, 3, 3, 10, 1, 13, -2, 11, 0, 3, 4, 10, 1, 12, -2, 11, 0, 4, 2, 10, -1, 12, -1, 11, 1, 14, 0, 4, -2, 10, -1, 13, 18, 2,-15, 3, 0, 4, 2, 10, 3, 3, -8, 4, 3, 5, 0, 2, 2, 10, -1, 12, 2, 4, -2, 10, 5, 3, -8, 4, 3, 5, 0, 4, 2, 10, -1, 13, 18, 2,-17, 3, 0, 3, -2, 10, 1, 3, -1, 6, 0, 3, -2, 10, 2, 3, -2, 4, 0, 3, -2, 10, 1, 3, -1, 5, 0, 2, 3, 10, -1, 13, 0, 3, -2, 10, 3, 2, -4, 3, 0, 3, -2, 10, 3, 3, -4, 4, 0, 3, -2, 10, 1, 3, -2, 5, 0, 3, 4, 10, 1, 12, -2, 13, 1, 4, 2, 10, -1, 12, -2, 13, 2, 11, 0, 3, -2, 10, 1, 2, -1, 3, 0, 3, -2, 10, 2, 3, -3, 4, 0, 3, 2, 10, 2, 13, -2, 11, 0, 3, -2, 10, 2, 2, -3, 3, 0, 2, 2, 12, -2, 13, 1, 3, 2, 10, 2, 3, -4, 4, 0, 3, 2, 10, 3, 2, -5, 3, 0, 3, 1, 10, -1, 12, 1, 13, 1, 3, -2, 13, 3, 2, -3, 3, 0, 2, -2, 10, 1, 5, 0, 3, 2, 10, 1, 3, -2, 4, 0, 3, -2, 13, 2, 3, -2, 5, 0, 3, 2, 10, -1, 11, 1, 14, 0, 4, 4, 10, -2, 13, 2, 3, -3, 5, 0, 3, -2, 10, 8, 2,-13, 3, 0, 4, -2, 10, -1, 13, 18, 2,-16, 3, 1, 4, -2, 10, 3, 2, -7, 3, 4, 4, 0, 4, 2, 10, 4, 3, -8, 4, 3, 5, 1, 1, 2, 10, 3, 4, -2, 10, 4, 3, -8, 4, 3, 5, 1, 4, 2, 10, 3, 2, -7, 3, 4, 4, 0, 4, 2, 10, -1, 13, 18, 2,-16, 3, 1, 3, 2, 10, 8, 2,-13, 3, 0, 3, -2, 10, -1, 11, 1, 14, 0, 4, 4, 10, -2, 13, 2, 3, -2, 5, 0, 3, -2, 10, 1, 3, -2, 4, 0, 2, 2, 10, 1, 5, 0, 4, 4, 10, -2, 13, 3, 2, -3, 3, 0, 3, 3, 10, 1, 12, -1, 13, 1, 3, -2, 10, 3, 2, -5, 3, 0, 3, -2, 10, 2, 3, -4, 4, 0, 3, 4, 10, 2, 12, -2, 13, 0, 3, 2, 10, 2, 2, -3, 3, 0, 3, 2, 10, -2, 13, 2, 11, 0, 3, 2, 10, 1, 2, -1, 3, 0, 4, 2, 10, 1, 12, 2, 13, -2, 11, 0, 2, 1, 12, -2, 13, 2, 3, 2, 10, 1, 3, -2, 5, 0, 3, -2, 13, 1, 3, -1, 5, 0, 3, 2, 10, 3, 2, -4, 3, 0, 2, 1, 10, 1, 13, 0, 3, 2, 10, 1, 3, -1, 5, 0, 3, 2, 10, 2, 3, -2, 4, 0, 2, 2, 10, 1, 12, 2, 2, 1, 12, -2, 11, 0, 3, -2, 13, 1, 2, -1, 3, 0, 3, 1, 10, -1, 13, 2, 11, 0, 3, 2, 10, 2, 2, -2, 3, 0, 3, 1, 10, 1, 12, -3, 13, 0, 3, 2, 13, -1, 11, 1, 14, 0, 3, 2, 10, 2, 3, -3, 5, 0, 3, 2, 10, 6, 2, -8, 3, 0, 3, -3, 13, 18, 2,-16, 3, 1, 3, 2, 13, 2, 5, -5, 6, 0, 4, 2, 13, 4, 3, -8, 4, 3, 5, 0, 1, 2, 13, 0, 4, -2, 13, 4, 3, -8, 4, 3, 5, 0, 3, -2, 13, 2, 5, -5, 6, 0, 3, 1, 13, 18, 2,-16, 3, 1, 3, -2, 13, -1, 11, 1, 14, 0, 3, 2, 10, 2, 3, -2, 5, 0, 3, 2, 10, 3, 2, -3, 3, 0, 3, 1, 10, 1, 12, 1, 13, 1, 2, 2, 10, 2, 12, 1, 2, 1, 11, 1, 14, 1, 4, -1, 13, -2, 11, 18, 2,-16, 3, 0, 1, 2, 11, 0, 4, -1, 13, 2, 11, 18, 2,-16, 3, 0, 2, -3, 11, 1, 14, 0, 3, 2, 13, 1, 2, -1, 3, 0, 3, 2, 10, 4, 2, -4, 3, 0, 3, 2, 10, 1, 12, -4, 13, 0, 2, 1, 10, -3, 13, 0, 3, 2, 13, 1, 3, -1, 5, 0, 2, 1, 12, 2, 13, 2, 3, 1, 10, 2, 12, 1, 13, 0, 3, 1, 10, -1, 13, -2, 11, 0, 2, 1, 12, 2, 11, 1, 3, 2, 10, 5, 2, -5, 3, 0, 2, 2, 10, -4, 13, 0, 3, 2, 10, 6, 2, -6, 3, 0, 2, 2, 12, 2, 13, 0, 3, 2, 10, -2, 13, -2, 11, 0, 2, 2, 12, 2, 11, 0, 2, 2, 10, -4, 11, 0, 3, 2, 10, 7, 2, -7, 3, 0, 3, 2, 10, -1, 12, -4, 13, 0, 4, 2, 10, -1, 12, -2, 13, -2, 11, 0, 3, 2, 10, 8, 2, -8, 3, 0, 3, 2, 10, 9, 2, -9, 3, 0, 3, 4, 10, -3, 12, -1, 13, 0, 3, 6, 10, -1, 12, -3, 13, 0, 3, 4, 10, -2, 12, -1, 13, 1, 3, 5, 10, -1, 12, -2, 13, 0, 2, 6, 10, -3, 13, 0, 4, 4, 10, -1, 12, 1, 13, -2, 11, 0, 3, 2, 10, -3, 12, 1, 13, 0, 2, 3, 10, -2, 12, 0, 3, 4, 10, -1, 12, -1, 13, 1, 2, 5, 10, -2, 13, 0, 3, 6, 10, 1, 12, -3, 13, 0, 3, 4, 10, 1, 13, -2, 11, 0, 3, 2, 10, -2, 12, 1, 13, 1, 2, 3, 10, -1, 12, 0, 4, -2, 10, -1, 13, 2, 3, -2, 5, 0, 2, 4, 10, -1, 13, 0, 4, 2, 10, -2, 12, -1, 13, 2, 11, 0, 3, 4, 10, -3, 13, 2, 11, 0, 4, -2, 10, -1, 13, 2, 2, -2, 3, 0, 3, 2, 10, -1, 12, 1, 13, 2, 4, -2, 10, -1, 13, 1, 3, -1, 5, 0, 1, 3, 10, 0, 3, 4, 10, 1, 12, -1, 13, 1, 4, 2, 10, -1, 12, -1, 13, 2, 11, 1, 4, -2, 10, -1, 13, 1, 2, -1, 3, 0, 3, 2, 10, 3, 13, -2, 11, 0, 2, 2, 12, -3, 13, 0, 3, 1, 10, -1, 12, 2, 13, 0, 4, 2, 10, 1, 13, -1, 11, 1, 14, 0, 4, -2, 10, -2, 13, 18, 2,-16, 3, 0, 5, 2, 10, 1, 13, 4, 3, -8, 4, 3, 5, 0, 2, 2, 10, 1, 13, 1, 5, -2, 10, -1, 13, 4, 3, -8, 4, 3, 5, 0, 3, 2, 10, 18, 2,-16, 3, 0, 4, -2, 10, -1, 13, -1, 11, 1, 14, 0, 4, 4, 10, -1, 13, 2, 3, -2, 5, 0, 4, 4, 10, -1, 13, 3, 2, -3, 3, 0, 2, 3, 10, 1, 12, 1, 3, 4, 10, 2, 12, -1, 13, 0, 4, 2, 10, -1, 13, 1, 11, 1, 14, 0, 3, 2, 10, -1, 13, 2, 11, 0, 2, 1, 12, -3, 13, 1, 2, 1, 10, 2, 13, 0, 3, 2, 10, 1, 12, 1, 13, 1, 3, 1, 12, -1, 13, -2, 11, 1, 2, 1, 10, 2, 11, 0, 4, 2, 10, 1, 12, -1, 13, 2, 11, 0, 1, 3, 13, 0, 4, 2, 10, 1, 13, 2, 3, -2, 5, 0, 3, 1, 10, 1, 12, 2, 13, 0, 3, 2, 10, 2, 12, 1, 13, 0, 3, 1, 13, 1, 11, 1, 14, 0, 2, 1, 13, 2, 11, 0, 3, 1, 10, 1, 12, 2, 11, 0, 4, 2, 10, 2, 12, -1, 13, 2, 11, 0, 2, 1, 13, -4, 11, 0, 2, 1, 10, -4, 13, 0, 2, 1, 12, 3, 13, 1, 3, 1, 12, 1, 13, 2, 11, 1, 2, 2, 10, -5, 13, 0, 3, 2, 10, -3, 13, -2, 11, 0, 3, 2, 10, -1, 13, -4, 11, 0, 3, 6, 10, -2, 12, -2, 13, 0, 2, 4, 10, -3, 12, 0, 3, 6, 10, -1, 12, -2, 13, 0, 2, 4, 10, -2, 12, 1, 2, 6, 10, -2, 13, 0, 2, 4, 10, -1, 12, 1, 2, 5, 10, -1, 13, 0, 3, 6, 10, 1, 12, -2, 13, 0, 4, 4, 10, -1, 12, -2, 13, 2, 11, 0, 3, 4, 10, 2, 13, -2, 11, 0, 3, 2, 10, -2, 12, 2, 13, 0, 1, 4, 10, 0, 3, 2, 10, -2, 12, 2, 11, 0, 3, 4, 10, -2, 13, 2, 11, 0, 3, 2, 10, -1, 12, 2, 13, 1, 2, 3, 10, 1, 13, 0, 2, 4, 10, 1, 12, 1, 3, 2, 10, -1, 12, 2, 11, 1, 3, 3, 10, -1, 13, 2, 11, 0, 2, 2, 10, 2, 13, 0, 3, 3, 10, 1, 12, 1, 13, 0, 3, 2, 10, 1, 11, 1, 14, 0, 2, 2, 10, 2, 11, 0, 2, 1, 12, -4, 13, 0, 2, 1, 10, 3, 13, 0, 3, 2, 10, 1, 12, 2, 13, 1, 3, 1, 12, -2, 13, -2, 11, 0, 3, 1, 10, 1, 13, 2, 11, 0, 3, 2, 10, 1, 12, 2, 11, 0, 1, 4, 13, 0, 3, 1, 10, 1, 12, 3, 13, 0, 2, 2, 13, 2, 11, 0, 4, 1, 10, 1, 12, 1, 13, 2, 11, 0, 1, 4, 11, 0, 2, 1, 12, 4, 13, 0, 3, 1, 12, 2, 13, 2, 11, 0, 3, 2, 10, -4, 13, -2, 11, 0, 3, 6, 10, -2, 12, -1, 13, 0, 2, 8, 10, -3, 13, 0, 3, 6, 10, -1, 12, -1, 13, 0, 3, 4, 10, -2, 12, 1, 13, 0, 2, 6, 10, -1, 13, 0, 3, 4, 10, -1, 12, 1, 13, 1, 3, 6, 10, 1, 12, -1, 13, 0, 4, 4, 10, -1, 12, -1, 13, 2, 11, 0, 3, 2, 10, -2, 12, 3, 13, 0, 2, 4, 10, 1, 13, 0, 3, 4, 10, -1, 13, 2, 11, 0, 3, 2, 10, -1, 12, 3, 13, 0, 3, 4, 10, 1, 12, 1, 13, 0, 4, 2, 10, -1, 12, 1, 13, 2, 11, 0, 2, 2, 10, 3, 13, 0, 3, 2, 10, 1, 13, 2, 11, 0, 3, 2, 10, -1, 13, 4, 11, 0, 3, 2, 10, 1, 12, 3, 13, 0, 3, 1, 12, -3, 13, -2, 11, 0, 3, 1, 10, 2, 13, 2, 11, 0, 4, 2, 10, 1, 12, 1, 13, 2, 11, 0, 1, 5, 13, 0, 2, 3, 13, 2, 11, 0, 2, 1, 13, 4, 11, 0, 3, 1, 12, 3, 13, 2, 11, 0, 2, 8, 10, -2, 13, 0, 2, 6, 10, -1, 12, 0, 1, 6, 10, 0, 3, 6, 10, -2, 13, 2, 11, 0, 3, 4, 10, -1, 12, 2, 13, 0, 3, 4, 10, -1, 12, 2, 11, 0, 2, 4, 10, 2, 13, 0, 2, 4, 10, 2, 11, 0, 3, 2, 10, -1, 12, 4, 13, 0, 3, 4, 10, 1, 12, 2, 13, 0, 4, 2, 10, -1, 12, 2, 13, 2, 11, 0, 2, 2, 10, 4, 13, 0, 3, 2, 10, 2, 13, 2, 11, 0, 2, 2, 10, 4, 11, 0, 1, 6, 13, 0, 2, 4, 13, 2, 11, 0, 2, 2, 13, 4, 11, 0, 3, 6, 10, -1, 12, 1, 13, 0, 2, 6, 10, 1, 13, 0, 2, 4, 10, 3, 13, 0, 3, 4, 10, 1, 13, 2, 11, 0, 2, 2, 10, 5, 13, 0, 3, 2, 10, 3, 13, 2, 11, 0, -1 }; static long btabr[] = {-1}; static long btabb[] = {-1}; static long btabl[] = { -3, -4, 4, -1856, 0, 8043, -9, -1082, -1, -310, -1, -522, -330, -1449, -853, 4656, -66, 7, -1, 9996928, -66, 6, 23, 183, 0, 173, 0, -56, 0, 50, 0, -785, 1, 51, 0, -60, 1, 11843, 0, -50754, 0, 1834, 1, -7910, 0, -48060, 1, 56, 0, 13141, -1, -56318, 0, 2541, -1, -649, -133, 778, -46, 8, 1, 1665737, -47, 7, 0, 65, 0, 45, 0, -138, 0, -1005, 0, -2911, 0, -47, 0, 96, 0, -394, 2, 76, 2, -17302, 0, 74337, 0, -101, 0, 58, 0, -171, 0, -77, 0, -1283, 0, 2686, 0, -55, 0, 99, 0, 55, 0, 397, 0, 540, 0, 626, -1, -5188, 0, 10857, 0, -216, -2, -123, 0, 6337, 2, 224, -152, -23472, -29, -74336, 0, 295775, -20, 149, -2, 84, 9, 304, 0, -3051, -70, -6, -57, 34, 0, -638, 0, -201, -73, 9, 0, -100, -101, -8, 0, -57, 0, -207, -3, 80, -45, 45, -5, 102, -59, -23, 52, 201, -48, 233, -220, 71, 4, 2810, 0, 6236541, -61, 218, -216, 67, 51, 201, -59, -23, -144, -837, -457, 3029, -45, 42, -15, 73, -6, -169, 0, 135, -64, -7, 0, -16245, 0, -81, -74, -10, 0, 702, 0, -3013, 0, -5889, 1, 141, 58, 9598, 12, 30443, 1, -120946, -1, -84, -2, 11246, -1, -48391, 0, 1393, 0, 200, -136, -17, 0, 558, -64, -8, 0, -71, 0, 317577, -28, 183, 1, 219, 0, 421, 0, -133, 501, -139, 3, 354, -101, -13, 74, 7, 144, -84, 59, -2, 1, 64, -2931, 12559, -4641, 2638, -303, -2058, -13, -100, -123, -79, -19214, 6084, 1494, 26993, 15213, -82219, 42, 52, 48, -101, -53, -4, 4, 47, 58, -131, 46, 14, -21, -6, -1311, -8791, 10198, -4185, 2815, 5640, 167, 422, -229, 83, 3140, 39, 1221, 120, 96, -30, -1, 184612405, 187, 416, -226, 81, -1985, -10083, 9983, -4464, 2807, 5643, -21, -9, 113, -367, 120, 580, -667, 27, 8, 66, -56, -6, 337, 95, -87, 3303, -1, 65, 68, -374, 0, -574, 15, -94, 0, -53, 0, -1303, 0, -236, 283, 36, -1, -54, 269, -35, 0, -83, 0, -52, 0, 730, 0, -3129, 0, 813, 0, -4299, 1, 59, -6, 5130, 1, 16239, -1, -64603, 0, -80, 91, 12, 0, -561, 133, -17, 0, 250, -12, 71, 0, 155664, 82, -11, 0, 106, 0, -604, 0, 21862, 55, -7, 0, -1514, 0, 6501, 0, 906, 0, -68, 0, 241, 0, 366, 0, 70, 0, -1382, 0, 5957, 0, 113, 0, -51, 0, -55, 0, 731, 0, -264, 0, 65788, 1, -1504, 0, 3147, 0, 217, 0, -4105, 0, 17658, 1, 69, 0, -3518, 0, -1767, -43, -7044, -10, -22304, 0, 88685, 3, 91, 0, -485, 0, -57, -1, 333548, -24, 172, 11, 544, 1, -1132, 0, 353, 0, -188, 0, 53, 0, 77, 158, -887, 35, 131, -54, 13, 0, 1994821, -53, 14, 36, 125, 2, 56, 0, -243, 0, -364, -2, 1916, 0, -8227, 0, 15700, -1, -67308, 1, 66, 0, -53686, 1, 3058, 1, -13177, 0, -72, 0, -72, 0, 61, 0, 15812, 0, 165, 8, -96, 318, 1341, 803, -4252, 24, 193, 1137, -226, 310, 622, -56, 30, -3, 10101666, -56, 30, 1096, -225, 300, 600, -31, 409, -1, -507, 0, -287, 0, -1869, 0, 8026, 1, 544, -1, -1133, 0, 27984, 0, -62, 0, -249, 0, 187, 0, -1096, 1, 53, 2, 12388, 0, -53107, 0, -322, 0, -94, 0, 15157, 0, -582, 0, 3291, 0, 565, 0, 106, 0, 112, 0, 306, 0, 809, 0, 130, 0, -961, 0, 4149, 0, 174, 0, -105, 0, 2196, 0, 59, 0, 36737, -1, -1832, 0, 3835, 0, -139, 0, 24138, 0, 1325, 1, 64, 0, -361, 0, -1162, -44, -6320, -10, -20003, 0, 79588, 2, 80, 0, -2059, 0, -304, 0, 21460, 0, -166, 0, -87, 89, -493, 32, 114, 34, 510, 1, 1172616, 31, 113, -1, 57, 0, 214, 0, -656, 0, -646, 0, 1850, 0, -7931, 0, -6674, 0, 2944, 0, -12641, 0, 916, 45, -255, 16, 60, -1, 619116, 16, 57, 0, -58, 0, 1045, 0, -156, -15, 88, 0, -62964, 0, -126, 0, 1490, 0, -6387, 0, 119, 0, 1338, 0, -56, 0, 204, 0, 153, 0, 940, 0, 251, 0, 312, 0, 584, 0, -786, 0, 3388, 0, -52, 0, 4733, 0, 618, 0, 29982, 0, 101, 0, -174, 0, -2637, 0, 11345, 0, -284, 0, -524, 0, -121, 0, 1464, 11, -60, -1, 151205, 0, 139, 0, -2448, 0, -51, 0, -768, 0, -638, 0, 552, 0, -2370, 0, 70, 0, 64, 0, 57, 0, 39840, 0, 104, 0, -10194, 0, -635, 0, 69, 0, 113, 0, 67, 0, 96, 0, 367, 0, 134, 0, 596, 0, 63, 0, 1622, 0, 483, 0, 72, 0, 11917, 0, -63, 0, 1273, 0, -66, 0, -262, 0, -97, 0, 103, 0, 15196, 0, -1445, 0, -66, 0, -55, 0, -323, 0, 2632, 0, -1179, 0, 59, 0, -56, 0, 78, 0, 65, 0, 422, 0, 309, 0, 2125, 0, -66, 0, 124, 0, -57, 0, 1379, 0, -304, 0, 177, 0, -118, 0, 146, 0, 283, 0, 119, }; static CHAR bargs[] = { 0, 1, 3, 1, 10, 1, 12, -1, 11, 1, 4, 2, 10, 2, 12, -1, 13, -1, 11, 0, 5, 2, 10, -1, 13, -1, 11, 3, 2, -3, 3, 0, 5, 2, 10, -1, 13, -1, 11, 2, 3, -2, 5, 0, 2, -1, 13, 1, 14, 1, 5, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, 2, 1, 13, -1, 11, 0, 5, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, 5, 2, 10, -1, 13, -1, 11, 2, 3, -3, 5, 0, 4, 1, 10, 1, 12, -2, 13, 1, 11, 0, 4, 1, 13, -1, 11, 1, 2, -1, 3, 0, 5, 2, 10, -1, 13, -1, 11, 2, 2, -2, 3, 0, 3, 1, 10, -2, 13, 1, 11, 0, 4, 1, 13, -1, 11, 1, 3, -1, 5, 0, 4, -1, 13, 1, 11, 1, 2, -1, 3, 0, 3, 1, 12, 1, 13, -1, 11, 1, 4, 2, 10, 1, 12, -1, 13, -1, 11, 1, 2, 1, 10, -1, 11, 0, 4, -1, 13, 1, 11, 1, 3, -1, 5, 0, 3, 1, 12, -1, 13, 1, 11, 1, 3, 2, 10, -3, 13, 1, 11, 0, 3, 2, 12, 1, 13, -1, 11, 0, 3, -2, 10, 1, 13, 1, 14, 0, 6, -2, 10, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, 3, 2, 10, -1, 13, -1, 11, 0, 6, 2, 10, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, 4, -1, 13, 1, 11, 2, 3, -2, 5, 0, 4, -1, 13, 1, 11, 3, 2, -3, 3, 0, 3, 1, 10, -1, 12, -1, 11, 0, 3, 2, 12, -1, 13, 1, 11, 0, 3, 2, 10, 1, 13, -3, 11, 0, 5, -2, 10, 1, 13, 1, 11, 1, 2, -1, 3, 0, 4, 2, 10, -1, 12, -3, 13, 1, 11, 0, 3, 3, 10, -2, 13, -1, 11, 0, 5, -2, 10, 1, 13, 1, 11, 1, 3, -1, 5, 0, 4, 2, 10, -1, 12, -1, 13, -1, 11, 1, 2, 3, 10, -3, 11, 0, 5, -2, 10, 1, 13, 1, 11, 2, 2, -2, 3, 0, 4, 2, 10, -1, 12, 1, 13, -3, 11, 0, 3, 4, 10, -3, 13, -1, 11, 0, 4, 2, 10, -2, 12, -1, 13, -1, 11, 1, 3, 4, 10, -1, 13, -3, 11, 0, 4, 2, 10, -3, 12, -1, 13, -1, 11, 0, 3, 4, 10, -1, 12, -3, 11, 0, 3, 2, 10, -3, 12, -1, 11, 0, 4, 4, 10, -1, 12, -2, 13, -1, 11, 0, 2, 4, 10, -3, 11, 0, 3, 2, 10, -2, 12, -1, 11, 1, 4, 3, 10, -1, 12, -1, 13, -1, 11, 0, 4, -2, 10, 1, 11, 2, 3, -2, 5, 0, 3, 4, 10, -2, 13, -1, 11, 0, 4, -2, 10, 1, 11, 2, 2, -2, 3, 0, 3, 2, 10, -1, 12, -1, 11, 2, 3, -2, 10, 1, 12, 1, 14, 0, 4, -2, 10, 1, 11, 2, 3, -2, 4, 0, 4, -2, 10, 1, 11, 1, 3, -1, 5, 0, 3, 3, 10, -1, 13, -1, 11, 0, 4, -2, 10, 1, 11, 3, 2, -4, 3, 0, 4, -2, 10, 1, 11, 1, 3, -2, 5, 0, 4, 2, 10, -1, 12, -2, 13, 1, 11, 0, 4, -2, 10, 1, 11, 1, 2, -1, 3, 0, 2, -1, 10, 1, 2, 0, 3, 2, 10, 2, 13, -3, 11, 0, 4, -2, 10, 1, 11, 2, 2, -3, 3, 0, 3, 2, 12, -2, 13, 1, 11, 0, 4, 1, 10, -1, 12, 1, 13, -1, 11, 0, 3, -2, 10, 1, 11, 1, 5, 0, 4, 2, 10, -1, 11, 1, 3, -2, 4, 0, 3, 2, 10, -2, 11, 1, 14, 0, 4, -2, 10, 1, 11, 8, 2,-13, 3, 0, 5, -2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0, 5, 2, 10, -1, 11, 4, 3, -8, 4, 3, 5, 1, 2, 2, 10, -1, 11, 1, 5, -2, 10, 1, 11, 4, 3, -8, 4, 3, 5, 1, 5, 2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0, 4, 2, 10, -1, 11, 8, 2,-13, 3, 0, 2, -2, 10, 1, 14, 1, 4, -2, 10, 1, 11, 1, 3, -2, 4, 0, 3, 2, 10, -1, 11, 1, 5, 0, 2, 2, 12, -1, 11, 0, 4, 3, 10, 1, 12, -1, 13, -1, 11, 0, 4, 2, 10, -1, 11, 2, 2, -3, 3, 0, 3, 2, 10, -2, 13, 1, 11, 0, 4, 2, 10, -1, 11, 1, 2, -1, 3, 0, 3, 1, 10, 1, 2, -2, 3, 0, 3, 1, 12, -2, 13, 1, 11, 1, 3, 1, 10, 1, 13, -1, 11, 0, 4, 2, 10, -1, 11, 1, 3, -1, 5, 0, 3, 2, 10, 1, 12, -1, 11, 2, 3, -2, 10, -1, 12, 1, 14, 0, 2, 1, 12, -1, 11, 1, 3, 1, 10, -1, 13, 1, 11, 0, 4, 2, 10, -1, 11, 2, 2, -2, 3, 0, 3, 1, 10, 2, 2, -3, 3, 0, 4, 2, 10, 1, 12, -2, 13, 1, 11, 0, 3, -1, 10, 1, 2, -2, 3, 0, 3, -1, 11, 1, 2, -1, 3, 0, 2, 2, 13, -1, 11, 0, 2, -2, 13, 1, 14, 0, 4, 2, 10, -1, 11, 2, 3, -2, 5, 0, 4, 2, 10, -1, 11, 3, 2, -3, 3, 0, 4, 2, 10, 2, 12, -2, 13, -1, 11, 0, 3, 1, 10, 1, 3, -2, 5, 0, 4, 1, 10, 1, 12, 1, 13, -1, 11, 0, 3, 1, 10, 3, 2, -4, 3, 0, 3, 1, 10, 1, 3, -1, 5, 0, 3, 1, 10, 1, 3, -2, 6, 0, 3, 1, 10, 2, 3, -2, 4, 0, 4, 1, 10, 1, 12, -1, 13, -1, 11, 0, 3, 2, 10, 2, 12, -1, 11, 2, 4, 1, 10, 1, 3, 2, 5, -5, 6, 1, 1, 1, 14, 2, 3, 1, 10, 8, 2,-12, 3, 1, 5, -2, 10, 1, 13, -1, 11, 20, 2,-21, 3, 0, 5, 2, 10, -2, 13, 1, 11, 2, 3, -3, 5, 0, 3, 1, 10, 1, 3, 1, 6, 0, 4, -1, 13, -1, 11, 26, 2,-29, 3, 0, 3, -1, 11, 8, 2,-13, 3, 0, 4, -1, 13, -1, 11, 18, 2,-16, 3, 2, 4, -1, 13, 1, 11, 10, 2, -3, 3, 1, 1, 1, 11, 3, 4, -1, 13, -1, 11, 10, 2, -3, 3, 1, 4, -1, 13, 1, 11, 18, 2,-16, 3, 2, 3, 1, 11, 8, 2,-13, 3, 0, 2, 1, 10, 2, 4, 0, 4, 2, 10, -1, 11, 5, 2, -6, 3, 1, 5, 2, 10, -2, 13, -1, 11, 2, 3, -3, 5, 0, 5, -2, 10, 1, 13, 1, 11, 20, 2,-21, 3, 0, 3, 1, 10, 1, 3, 1, 5, 0, 2, -2, 11, 1, 14, 0, 5, 2, 10, -2, 13, 1, 11, 2, 3, -2, 5, 0, 3, 1, 10, 5, 2, -7, 3, 0, 4, 1, 10, 1, 12, -1, 13, 1, 11, 0, 3, 1, 10, 2, 2, -2, 3, 0, 4, 2, 10, 2, 12, -2, 13, 1, 11, 0, 2, 2, 13, -3, 11, 0, 4, 2, 10, -1, 11, 4, 2, -4, 3, 0, 3, 1, 10, 4, 2, -5, 3, 0, 3, 1, 10, -3, 13, 1, 11, 0, 2, 1, 10, 1, 2, 0, 3, 1, 11, 1, 2, -1, 3, 0, 4, 2, 10, -1, 11, 3, 3, -3, 5, 0, 3, 1, 12, 2, 13, -1, 11, 1, 4, 2, 10, 1, 12, -2, 13, -1, 11, 0, 3, 1, 10, -1, 13, -1, 11, 0, 3, 1, 11, 1, 3, -1, 5, 0, 2, 1, 12, 1, 11, 2, 4, 2, 10, -1, 11, 5, 2, -5, 3, 0, 3, 1, 10, 5, 2, -6, 3, 0, 3, 2, 10, 1, 12, -3, 11, 0, 3, 1, 10, 2, 2, -1, 3, 0, 3, 2, 10, -4, 13, 1, 11, 0, 3, -2, 10, 2, 13, 1, 14, 0, 3, 2, 10, -2, 13, -1, 11, 0, 3, 1, 10, 3, 2, -2, 3, 0, 4, 1, 10, -1, 12, -1, 13, -1, 11, 0, 2, 2, 12, 1, 11, 0, 2, 2, 10, -3, 11, 0, 3, 1, 10, 4, 2, -3, 3, 0, 4, 2, 10, -1, 12, -2, 13, -1, 11, 1, 3, 2, 10, -1, 12, -3, 11, 0, 3, 4, 10, -4, 13, -1, 11, 0, 4, 2, 10, -2, 12, -2, 13, -1, 11, 0, 4, 4, 10, -2, 12, -1, 13, -1, 11, 0, 3, 6, 10, -3, 13, -1, 11, 0, 4, 4, 10, -1, 12, -1, 13, -1, 11, 1, 4, 2, 10, -3, 12, -1, 13, 1, 11, 0, 3, 5, 10, -2, 13, -1, 11, 0, 3, 4, 10, 1, 13, -3, 11, 0, 4, 2, 10, -2, 12, 1, 13, -1, 11, 0, 3, 3, 10, -1, 12, -1, 11, 0, 3, 4, 10, -1, 13, -1, 11, 0, 4, 2, 10, -2, 12, -1, 13, 1, 11, 1, 3, 4, 10, -3, 13, 1, 11, 0, 4, 2, 10, -1, 12, 1, 13, -1, 11, 1, 5, -2, 10, 1, 13, -1, 11, 2, 2, -2, 3, 0, 2, 3, 10, -1, 11, 0, 4, 4, 10, 1, 12, -1, 13, -1, 11, 0, 4, 2, 10, -1, 12, -1, 13, 1, 11, 2, 5, -2, 10, 1, 13, -1, 11, 1, 3, -1, 5, 0, 3, 3, 10, -2, 13, 1, 11, 0, 5, -2, 10, 1, 13, -1, 11, 1, 2, -1, 3, 0, 3, 2, 10, 1, 13, -1, 11, 0, 3, -2, 10, -1, 13, 1, 14, 0, 3, 2, 12, -1, 13, -1, 11, 1, 3, 3, 10, 1, 12, -1, 11, 0, 3, 1, 10, -1, 12, 1, 11, 0, 4, -1, 13, -1, 11, 3, 2, -3, 3, 0, 4, -1, 13, -1, 11, 2, 3, -2, 5, 0, 3, 2, 10, -1, 13, 1, 14, 0, 4, -2, 10, -1, 11, 18, 2,-16, 3, 0, 6, 2, 10, -1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, 3, 2, 10, -1, 13, 1, 11, 0, 6, -2, 10, 1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, 5, 2, 10, -2, 13, 1, 11, 18, 2,-16, 3, 0, 4, -2, 10, 1, 13, -2, 11, 1, 14, 0, 3, 1, 12, -3, 13, 1, 11, 0, 3, 1, 10, 2, 13, -1, 11, 0, 4, 2, 10, 1, 12, 1, 13, -1, 11, 1, 3, 1, 12, -1, 13, -1, 11, 1, 4, -1, 13, -1, 11, 1, 3, -1, 5, 0, 2, 1, 10, 1, 11, 0, 4, 2, 10, 1, 12, -1, 13, 1, 11, 1, 3, 1, 12, 1, 13, -3, 11, 0, 4, -1, 13, -1, 11, 1, 2, -1, 3, 0, 5, 2, 10, -1, 13, 1, 11, 2, 2, -2, 3, 0, 2, 3, 13, -1, 11, 0, 4, 1, 10, 1, 12, -2, 13, -1, 11, 0, 4, 2, 10, 2, 12, 1, 13, -1, 11, 0, 2, 1, 13, 1, 14, 1, 5, 2, 10, -1, 13, 1, 11, 2, 3, -3, 5, 0, 4, -2, 13, -1, 11, 18, 2,-16, 3, 1, 5, 1, 13, 1, 11, 4, 3, -8, 4, 3, 5, 0, 2, 1, 13, 1, 11, 0, 5, -1, 13, -1, 11, 4, 3, -8, 4, 3, 5, 0, 3, 1, 11, 18, 2,-16, 3, 1, 3, -1, 13, -2, 11, 1, 14, 0, 5, 2, 10, -1, 13, 1, 11, 2, 3, -2, 5, 0, 5, 2, 10, -1, 13, 1, 11, 3, 2, -3, 3, 0, 3, 1, 10, 1, 12, 1, 11, 1, 4, 2, 10, 2, 12, -1, 13, 1, 11, 1, 2, 1, 13, -3, 11, 0, 4, 1, 13, 1, 11, 1, 2, -1, 3, 0, 3, 1, 12, 3, 13, -1, 11, 0, 4, 2, 10, 1, 12, -3, 13, -1, 11, 0, 3, 1, 10, -2, 13, -1, 11, 0, 4, 1, 13, 1, 11, 1, 3, -1, 5, 0, 3, 1, 12, 1, 13, 1, 11, 1, 2, 1, 10, -3, 11, 0, 3, 1, 12, -1, 13, 3, 11, 0, 3, 2, 10, -3, 13, -1, 11, 0, 3, 2, 12, 1, 13, 1, 11, 0, 3, 2, 10, -1, 13, -3, 11, 0, 4, 2, 10, -1, 12, -3, 13, -1, 11, 0, 4, 2, 10, -1, 12, -1, 13, -3, 11, 0, 4, 6, 10, -1, 12, -2, 13, -1, 11, 0, 3, 4, 10, -2, 12, -1, 11, 0, 3, 6, 10, -2, 13, -1, 11, 0, 4, 4, 10, -2, 12, -2, 13, 1, 11, 0, 3, 4, 10, -1, 12, -1, 11, 1, 3, 2, 10, -3, 12, 1, 11, 0, 3, 5, 10, -1, 13, -1, 11, 0, 4, 4, 10, -1, 12, -2, 13, 1, 11, 0, 4, 2, 10, -2, 12, 2, 13, -1, 11, 0, 2, 4, 10, -1, 11, 0, 3, 2, 10, -2, 12, 1, 11, 1, 4, 3, 10, -1, 12, -1, 13, 1, 11, 0, 3, 4, 10, -2, 13, 1, 11, 0, 4, 2, 10, -1, 12, 2, 13, -1, 11, 0, 4, -2, 10, -1, 11, 2, 2, -2, 3, 0, 3, 3, 10, 1, 13, -1, 11, 0, 3, 4, 10, 1, 12, -1, 11, 0, 3, 2, 10, -1, 12, 1, 11, 2, 4, -2, 10, -1, 11, 1, 3, -1, 5, 0, 3, 3, 10, -1, 13, 1, 11, 0, 4, 4, 10, 1, 12, -2, 13, 1, 11, 0, 3, 2, 10, 2, 13, -1, 11, 0, 3, 2, 12, -2, 13, -1, 11, 0, 4, 1, 10, -1, 12, 1, 13, 1, 11, 0, 2, 2, 10, 1, 14, 0, 5, -2, 10, -1, 13, -1, 11, 18, 2,-16, 3, 0, 2, 2, 10, 1, 11, 1, 5, 2, 10, -1, 13, 1, 11, 18, 2,-16, 3, 0, 3, -2, 10, -2, 11, 1, 14, 0, 4, 3, 10, 1, 12, -1, 13, 1, 11, 0, 3, 2, 10, -2, 13, 3, 11, 0, 4, 2, 10, 1, 12, 2, 13, -1, 11, 0, 3, 1, 12, -2, 13, -1, 11, 1, 3, 1, 10, 1, 13, 1, 11, 0, 3, 2, 10, 1, 12, 1, 11, 1, 2, 4, 13, -1, 11, 0, 2, 2, 13, 1, 14, 0, 4, -3, 13, -1, 11, 18, 2,-16, 3, 0, 2, 2, 13, 1, 11, 0, 4, 1, 13, 1, 11, 18, 2,-16, 3, 0, 4, 2, 10, 1, 11, 2, 3, -2, 5, 0, 4, 1, 10, 1, 12, 1, 13, 1, 11, 0, 3, 2, 10, 2, 12, 1, 11, 0, 2, 2, 11, 1, 14, 0, 1, 3, 11, 0, 3, 1, 10, -3, 13, -1, 11, 0, 3, 1, 12, 2, 13, 1, 11, 1, 2, 1, 12, 3, 11, 0, 3, 2, 10, -4, 13, -1, 11, 0, 3, 2, 12, 2, 13, 1, 11, 0, 3, 2, 10, -2, 13, -3, 11, 0, 4, 6, 10, -1, 12, -1, 13, -1, 11, 0, 3, 6, 10, -1, 13, -1, 11, 0, 4, 4, 10, -2, 12, -1, 13, 1, 11, 0, 3, 6, 10, -3, 13, 1, 11, 0, 4, 4, 10, -1, 12, 1, 13, -1, 11, 0, 4, 4, 10, -1, 12, -1, 13, 1, 11, 1, 3, 5, 10, -2, 13, 1, 11, 0, 3, 4, 10, 1, 13, -1, 11, 0, 4, 2, 10, -2, 12, 1, 13, 1, 11, 0, 3, 4, 10, -1, 13, 1, 11, 0, 4, 2, 10, -1, 12, 3, 13, -1, 11, 0, 4, 4, 10, 1, 12, 1, 13, -1, 11, 0, 4, 2, 10, -1, 12, 1, 13, 1, 11, 1, 2, 3, 10, 1, 11, 0, 4, 4, 10, 1, 12, -1, 13, 1, 11, 0, 4, 2, 10, -1, 12, -1, 13, 3, 11, 0, 3, 2, 10, 3, 13, -1, 11, 0, 3, 2, 10, 1, 13, 1, 14, 0, 3, 2, 10, 1, 13, 1, 11, 0, 3, 3, 10, 1, 12, 1, 11, 0, 3, 2, 10, -1, 13, 3, 11, 0, 4, 2, 10, 1, 12, 3, 13, -1, 11, 0, 3, 1, 12, -3, 13, -1, 11, 0, 3, 1, 10, 2, 13, 1, 11, 0, 4, 2, 10, 1, 12, 1, 13, 1, 11, 1, 3, 1, 12, -1, 13, -3, 11, 0, 2, 1, 10, 3, 11, 0, 2, 5, 13, -1, 11, 0, 2, 3, 13, 1, 11, 0, 4, 1, 10, 1, 12, 2, 13, 1, 11, 0, 2, 1, 13, 3, 11, 0, 3, 1, 12, 3, 13, 1, 11, 0, 3, 1, 12, 1, 13, 3, 11, 0, 3, 2, 10, -5, 13, -1, 11, 0, 3, 6, 10, -1, 12, -1, 11, 0, 4, 6, 10, -1, 12, -2, 13, 1, 11, 0, 2, 6, 10, -1, 11, 0, 3, 4, 10, -2, 12, 1, 11, 0, 3, 6, 10, -2, 13, 1, 11, 0, 4, 4, 10, -1, 12, 2, 13, -1, 11, 0, 3, 4, 10, -1, 12, 1, 11, 0, 3, 4, 10, 2, 13, -1, 11, 0, 4, 2, 10, -2, 12, 2, 13, 1, 11, 0, 2, 4, 10, 1, 11, 0, 3, 4, 10, -2, 13, 3, 11, 0, 4, 2, 10, -1, 12, 2, 13, 1, 11, 0, 3, 3, 10, 1, 13, 1, 11, 0, 3, 4, 10, 1, 12, 1, 11, 0, 3, 2, 10, -1, 12, 3, 11, 0, 3, 2, 10, 4, 13, -1, 11, 0, 3, 2, 10, 2, 13, 1, 11, 0, 2, 2, 10, 3, 11, 0, 3, 1, 12, -4, 13, -1, 11, 0, 3, 1, 10, 3, 13, 1, 11, 0, 4, 2, 10, 1, 12, 2, 13, 1, 11, 0, 2, 4, 13, 1, 11, 0, 2, 2, 13, 3, 11, 0, 1, 5, 11, 0, 3, 1, 12, 4, 13, 1, 11, 0, 4, 6, 10, -1, 12, -1, 13, 1, 11, 0, 3, 6, 10, 1, 13, -1, 11, 0, 3, 6, 10, -1, 13, 1, 11, 0, 4, 4, 10, -1, 12, 1, 13, 1, 11, 0, 3, 4, 10, 1, 13, 1, 11, 0, 3, 4, 10, -1, 13, 3, 11, 0, 4, 2, 10, -1, 12, 3, 13, 1, 11, 0, 4, 4, 10, 1, 12, 1, 13, 1, 11, 0, 3, 2, 10, 3, 13, 1, 11, 0, 3, 2, 10, 1, 13, 3, 11, 0, 2, 5, 13, 1, 11, 0, 2, 3, 13, 3, 11, 0, 2, 6, 10, 1, 11, 0, 3, 4, 10, 2, 13, 1, 11, 0, 3, 2, 10, 4, 13, 1, 11, 0, -1 }; struct plantbl moonlr = { { 3, 26, 29, 23, 5, 10, 0, 0, 0, 8, 4, 4, 6, 2, 0, 0, 0, 0,}, 3, lrargs, lrtabl, lrtabb, lrtabr, 2.5735686895300000e-03, 3.6525000000000000e+06, 1.0000000000000000e-04, }; struct plantbl moonlat = { { 0, 26, 29, 8, 3, 5, 0, 0, 0, 6, 5, 3, 5, 1, 0, 0, 0, 0,}, 3, bargs, btabl, btabb, btabr, 0.0000000000000000e+00, 3.6525000000000000e+06, 1.0000000000000000e-04, }; /* Reduce arc seconds modulo 360 degrees answer in arc seconds */ static double mods3600(x) double x; { double y; #if !defined(__STDC__) double floor(); #endif y = x - 1296000. * floor( x/1296000.); return(y); } /* Time argument is Julian ephemeris date. */ static void mean_elements (JED) double JED; { double x, T, T2; /* Time variables. T is in Julian centuries. */ T = (JED - MOSHIER_J2000) / 36525.0; T2 = T*T; /* Mean longitudes of planets (Simon et al, 1994) .047" subtracted from constant term for offset to DE403 origin. */ /* Mercury */ x = mods3600( 538101628.6889819 * T + 908103.213 ); x += (6.39e-6 * T - 0.0192789) * T2; Args[0] = x; /* Venus */ x = mods3600( 210664136.4335482 * T + 655127.236 ); x += (-6.27e-6 * T + 0.0059381) * T2; Args[1] = x; /* Earth */ x = mods3600( 129597742.283429 * T + 361679.198 ); x += (-5.23e-6 * T - 2.04411e-2 ) * T2; Ea_arcsec = x; Args[2] = x; /* Mars */ x = mods3600( 68905077.493988 * T + 1279558.751 ); x += (-1.043e-5 * T + 0.0094264) * T2; Args[3] = x; /* Jupiter */ x = mods3600( 10925660.377991 * T + 123665.420 ); x += ((((-3.4e-10 * T + 5.91e-8) * T + 4.667e-6) * T + 5.706e-5) * T - 3.060378e-1)*T2; Args[4] = x; /* Saturn */ x = mods3600( 4399609.855372 * T + 180278.752 ); x += (((( 8.3e-10 * T - 1.452e-7) * T - 1.1484e-5) * T - 1.6618e-4) * T + 7.561614E-1)*T2; Args[5] = x; /* Uranus */ x = mods3600( 1542481.193933 * T + 1130597.971 ) + (0.00002156*T - 0.0175083)*T2; Args[6] = x; /* Neptune */ x = mods3600( 786550.320744 * T + 1095655.149 ) + (-0.00000895*T + 0.0021103)*T2; Args[7] = x; /* Copied from cmoon.c, DE404 version. */ /* Mean elongation of moon = D */ x = mods3600( 1.6029616009939659e+09 * T + 1.0722612202445078e+06 ); x += (((((-3.207663637426e-013 * T + 2.555243317839e-011) * T + 2.560078201452e-009) * T - 3.702060118571e-005) * T + 6.9492746836058421e-03) * T /* D, t^3 */ - 6.7352202374457519e+00) * T2; /* D, t^2 */ Args[9] = x; /* Mean distance of moon from its ascending node = F */ x = mods3600( 1.7395272628437717e+09 * T + 3.3577951412884740e+05 ); x += ((((( 4.474984866301e-013 * T + 4.189032191814e-011) * T - 2.790392351314e-009) * T - 2.165750777942e-006) * T - 7.5311878482337989e-04) * T /* F, t^3 */ - 1.3117809789650071e+01) * T2; /* F, t^2 */ NF_arcsec = x; Args[10] = x; /* Mean anomaly of sun = l' (J. Laskar) */ x = mods3600(1.2959658102304320e+08 * T + 1.2871027407441526e+06); x += (((((((( 1.62e-20 * T - 1.0390e-17 ) * T - 3.83508e-15 ) * T + 4.237343e-13 ) * T + 8.8555011e-11 ) * T - 4.77258489e-8 ) * T - 1.1297037031e-5 ) * T + 8.7473717367324703e-05) * T - 5.5281306421783094e-01) * T2; Args[11] = x; /* Mean anomaly of moon = l */ x = mods3600( 1.7179159228846793e+09 * T + 4.8586817465825332e+05 ); x += (((((-1.755312760154e-012) * T + 3.452144225877e-011 * T - 2.506365935364e-008) * T - 2.536291235258e-004) * T + 5.2099641302735818e-02) * T /* l, t^3 */ + 3.1501359071894147e+01) * T2; /* l, t^2 */ Args[12] = x; /* Mean longitude of moon, re mean ecliptic and equinox of date = L */ x = mods3600( 1.7325643720442266e+09 * T + 7.8593980921052420e+05); x += ((((( 7.200592540556e-014 * T + 2.235210987108e-010) * T - 1.024222633731e-008) * T - 6.073960534117e-005) * T + 6.9017248528380490e-03) * T /* L, t^3 */ - 5.6550460027471399e+00) * T2; /* L, t^2 */ LP_equinox = x; Args[13] = x; /* Precession of the equinox */ x = ((((((((( -8.66e-20*T - 4.759e-17)*T + 2.424e-15)*T + 1.3095e-12)*T + 1.7451e-10)*T - 1.8055e-8)*T - 0.0000235316)*T + 0.000076)*T + 1.105414)*T + 5028.791959)*T; /* Moon's longitude re fixed J2000 equinox. */ /* Args[13] -= x; */ pA_precession = x; /* OM = LP - NF; */ /* Free librations. */ /* LB 2.891725 years, psi amplitude 1.8" */ Args[14] = mods3600( 4.48175409e7 * T + 8.060457e5 ); /* 24.2 years */ Args[15] = mods3600( 5.36486787e6 * T - 391702.8 ); #if 0 /* 27.34907 days */ Args[16] = mods3600( 1.7308227257e9 * T - 4.443583e5 ); #endif /* LA 74.7 years. */ Args[17] = mods3600( 1.73573e6 * T ); } /* Prepare lookup table of sin and cos ( i*Lj ) * for required multiple angles */ static int sscc (k, arg, n) int k; double arg; int n; { double cu, su, cv, sv, s; int i; s = STR * arg; su = sin (s); cu = cos (s); ss[k][0] = su; /* sin(L) */ cc[k][0] = cu; /* cos(L) */ sv = 2.0 * su * cu; cv = cu * cu - su * su; ss[k][1] = sv; /* sin(2L) */ cc[k][1] = cv; for (i = 2; i < n; i++) { s = su * cv + cu * sv; cv = cu * cv - su * sv; sv = s; ss[k][i] = sv; /* sin( i+1 L ) */ cc[k][i] = cv; } return (0); } /* Generic program to accumulate sum of trigonometric series in two variables (e.g., longitude, radius) of the same list of arguments. */ static int g2plan (J, plan, pobj, flag) double J; struct plantbl *plan; double pobj[]; int flag; { int i, j, k, m, k1, ip, np, nt; /* On some systems such as Silicon Graphics, char is unsigned by default. */ CHAR *p; long *pl, *pr; double su, cu, sv, cv; double t, sl, sr; mean_elements (J); /* For librations, moon's longitude is sidereal. */ if (flag) Args[13] -= pA_precession; T = (J - MOSHIER_J2000) / plan->timescale; /* Calculate sin( i*MM ), etc. for needed multiple angles. */ for (i = 0; i < NARGS; i++) { if ((j = plan->max_harmonic[i]) > 0) { sscc (i, Args[i], j); } } /* Point to start of table of arguments. */ p = plan->arg_tbl; /* Point to tabulated cosine and sine amplitudes. */ pl = plan->lon_tbl; pr = plan->rad_tbl; sl = 0.0; sr = 0.0; for (;;) { /* argument of sine and cosine */ /* Number of periodic arguments. */ np = *p++; if (np < 0) break; if (np == 0) { /* It is a polynomial term. */ nt = *p++; /* Longitude polynomial. */ cu = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; } /* sl += mods3600 (cu); */ sl += cu; /* Radius polynomial. */ cu = *pr++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pr++; } sr += cu; continue; } k1 = 0; cv = 0.0; sv = 0.0; for (ip = 0; ip < np; ip++) { /* What harmonic. */ j = *p++; /* Which planet. */ m = *p++ - 1; if (j) { k = abs (j); k -= 1; su = ss[m][k]; /* sin(k*angle) */ if (j < 0) su = -su; cu = cc[m][k]; if (k1 == 0) { /* set first angle */ sv = su; cv = cu; k1 = 1; } else { /* combine angles */ t = su * cv + cu * sv; cv = cu * cv - su * sv; sv = t; } } } /* Highest power of T. */ nt = *p++; /* Longitude. */ cu = *pl++; su = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; su = su * T + *pl++; } sl += cu * cv + su * sv; /* Radius. */ cu = *pr++; su = *pr++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pr++; su = su * T + *pr++; } sr += cu * cv + su * sv; } t = plan->trunclvl; pobj[0] = t * sl; pobj[2] = t * sr; return (0); } /* Generic program to accumulate sum of trigonometric series in one variable. */ static double g1plan (J, plan) double J; struct plantbl *plan; { int i, j, k, m, k1, ip, np, nt; /* On some systems such as Silicon Graphics, char is unsigned by default. */ CHAR *p; long *pl; double su, cu, sv, cv; double t, sl; T = (J - MOSHIER_J2000) / plan->timescale; mean_elements (J); /* Calculate sin( i*MM ), etc. for needed multiple angles. */ for (i = 0; i < NARGS; i++) { if ((j = plan->max_harmonic[i]) > 0) { sscc (i, Args[i], j); } } /* Point to start of table of arguments. */ p = plan->arg_tbl; /* Point to tabulated cosine and sine amplitudes. */ pl = plan->lon_tbl; sl = 0.0; for (;;) { /* argument of sine and cosine */ /* Number of periodic arguments. */ np = *p++; if (np < 0) break; if (np == 0) { /* It is a polynomial term. */ nt = *p++; cu = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; } /* sl += mods3600 (cu); */ sl += cu; continue; } k1 = 0; cv = 0.0; sv = 0.0; for (ip = 0; ip < np; ip++) { /* What harmonic. */ j = *p++; /* Which planet. */ m = *p++ - 1; if (j) { k = abs (j); k -= 1; su = ss[m][k]; /* sin(k*angle) */ if (j < 0) su = -su; cu = cc[m][k]; if (k1 == 0) { /* set first angle */ sv = su; cv = cu; k1 = 1; } else { /* combine angles */ t = su * cv + cu * sv; cv = cu * cv - su * sv; sv = t; } } } /* Highest power of T. */ nt = *p++; /* Cosine and sine coefficients. */ cu = *pl++; su = *pl++; for (ip = 0; ip < nt; ip++) { cu = cu * T + *pl++; su = su * T + *pl++; } sl += cu * cv + su * sv; } return (plan->trunclvl * sl); } /* geocentric moon, mean ecliptic and equinox of date * J is Julian Epemeris Date * output in pobj[]: * pobj[0]: l in rad * pobj[1]: b in rad * pobj[2]: r in au */ static int gecmoon (J, lrtab, lattab, pobj) double J; struct plantbl *lrtab, *lattab; double pobj[]; { double x; g2plan (J, lrtab, pobj, 0); x = pobj[0]; x += LP_equinox; if (x < -6.45e5) x += 1.296e6; if (x > 6.45e5) x -= 1.296e6; pobj[0] = STR * x; x = g1plan (J, lattab); pobj[1] = STR * x; pobj[2] = (STR * pobj[2] + 1.0) * lrtab->distance; return 0; } /*********** end stephen moshier's moon code ****************/ static void moon_fast P_((double mjd, double *lam, double *bet, double *hp, double *msp, double *mdp)); /* previous version (elwood): * * given the mjd, find the geocentric ecliptic longitude, lam, and latitude, * bet, and horizontal parallax, hp for the moon. also return the sun's * mean anomaly, *msp, and the moon's mean anomaly, *mdp. * N.B. series for long and lat are good to about 10 and 3 arcseconds. however, * math errors cause up to 100 and 30 arcseconds error, even if use double. * why?? suspect highly sensitive nature of difference used to get m1..6. * N.B. still need to correct for nutation. then for topocentric location * further correct for parallax and refraction. */ static void moon_fast (mjd, lam, bet, hp, msp, mdp) double mjd; double *lam, *bet, *hp; double *msp, *mdp; { double t, t2; double ld; double ms; double md; double de; double f; double n; double a, sa, sn, b, sb, c, sc, e, e2, l, g, w1, w2; double m1, m2, m3, m4, m5, m6; t = mjd/36525.; t2 = t*t; m1 = mjd/27.32158213; m1 = 360.0*(m1-(long)m1); m2 = mjd/365.2596407; m2 = 360.0*(m2-(long)m2); m3 = mjd/27.55455094; m3 = 360.0*(m3-(long)m3); m4 = mjd/29.53058868; m4 = 360.0*(m4-(long)m4); m5 = mjd/27.21222039; m5 = 360.0*(m5-(long)m5); m6 = mjd/6798.363307; m6 = 360.0*(m6-(long)m6); ld = 270.434164+m1-(.001133-.0000019*t)*t2; ms = 358.475833+m2-(.00015+.0000033*t)*t2; md = 296.104608+m3+(.009192+.0000144*t)*t2; de = 350.737486+m4-(.001436-.0000019*t)*t2; f = 11.250889+m5-(.003211+.0000003*t)*t2; n = 259.183275-m6+(.002078+.000022*t)*t2; a = degrad(51.2+20.2*t); sa = sin(a); sn = sin(degrad(n)); b = 346.56+(132.87-.0091731*t)*t; sb = .003964*sin(degrad(b)); c = degrad(n+275.05-2.3*t); sc = sin(c); ld = ld+.000233*sa+sb+.001964*sn; ms = ms-.001778*sa; md = md+.000817*sa+sb+.002541*sn; f = f+sb-.024691*sn-.004328*sc; de = de+.002011*sa+sb+.001964*sn; e = 1-(.002495+7.52e-06*t)*t; e2 = e*e; ld = degrad(ld); ms = degrad(ms); n = degrad(n); de = degrad(de); f = degrad(f); md = degrad(md); l = 6.28875*sin(md)+1.27402*sin(2*de-md)+.658309*sin(2*de)+ .213616*sin(2*md)-e*.185596*sin(ms)-.114336*sin(2*f)+ .058793*sin(2*(de-md))+.057212*e*sin(2*de-ms-md)+ .05332*sin(2*de+md)+.045874*e*sin(2*de-ms)+.041024*e*sin(md-ms); l = l-.034718*sin(de)-e*.030465*sin(ms+md)+.015326*sin(2*(de-f))- .012528*sin(2*f+md)-.01098*sin(2*f-md)+.010674*sin(4*de-md)+ .010034*sin(3*md)+.008548*sin(4*de-2*md)-e*.00791*sin(ms-md+2*de)- e*.006783*sin(2*de+ms); l = l+.005162*sin(md-de)+e*.005*sin(ms+de)+.003862*sin(4*de)+ e*.004049*sin(md-ms+2*de)+.003996*sin(2*(md+de))+ .003665*sin(2*de-3*md)+e*.002695*sin(2*md-ms)+ .002602*sin(md-2*(f+de))+e*.002396*sin(2*(de-md)-ms)- .002349*sin(md+de); l = l+e2*.002249*sin(2*(de-ms))-e*.002125*sin(2*md+ms)- e2*.002079*sin(2*ms)+e2*.002059*sin(2*(de-ms)-md)- .001773*sin(md+2*(de-f))-.001595*sin(2*(f+de))+ e*.00122*sin(4*de-ms-md)-.00111*sin(2*(md+f))+.000892*sin(md-3*de); l = l-e*.000811*sin(ms+md+2*de)+e*.000761*sin(4*de-ms-2*md)+ e2*.000704*sin(md-2*(ms+de))+e*.000693*sin(ms-2*(md-de))+ e*.000598*sin(2*(de-f)-ms)+.00055*sin(md+4*de)+.000538*sin(4*md)+ e*.000521*sin(4*de-ms)+.000486*sin(2*md-de); l = l+e2*.000717*sin(md-2*ms); *lam = ld+degrad(l); range (lam, 2*PI); g = 5.12819*sin(f)+.280606*sin(md+f)+.277693*sin(md-f)+ .173238*sin(2*de-f)+.055413*sin(2*de+f-md)+.046272*sin(2*de-f-md)+ .032573*sin(2*de+f)+.017198*sin(2*md+f)+.009267*sin(2*de+md-f)+ .008823*sin(2*md-f)+e*.008247*sin(2*de-ms-f); g = g+.004323*sin(2*(de-md)-f)+.0042*sin(2*de+f+md)+ e*.003372*sin(f-ms-2*de)+e*.002472*sin(2*de+f-ms-md)+ e*.002222*sin(2*de+f-ms)+e*.002072*sin(2*de-f-ms-md)+ e*.001877*sin(f-ms+md)+.001828*sin(4*de-f-md)-e*.001803*sin(f+ms)- .00175*sin(3*f); g = g+e*.00157*sin(md-ms-f)-.001487*sin(f+de)-e*.001481*sin(f+ms+md)+ e*.001417*sin(f-ms-md)+e*.00135*sin(f-ms)+.00133*sin(f-de)+ .001106*sin(f+3*md)+.00102*sin(4*de-f)+.000833*sin(f+4*de-md)+ .000781*sin(md-3*f)+.00067*sin(f+4*de-2*md); g = g+.000606*sin(2*de-3*f)+.000597*sin(2*(de+md)-f)+ e*.000492*sin(2*de+md-ms-f)+.00045*sin(2*(md-de)-f)+ .000439*sin(3*md-f)+.000423*sin(f+2*(de+md))+ .000422*sin(2*de-f-3*md)-e*.000367*sin(ms+f+2*de-md)- e*.000353*sin(ms+f+2*de)+.000331*sin(f+4*de); g = g+e*.000317*sin(2*de+f-ms+md)+e2*.000306*sin(2*(de-ms)-f)- .000283*sin(md+3*f); w1 = .0004664*cos(n); w2 = .0000754*cos(c); *bet = degrad(g)*(1-w1-w2); *hp = .950724+.051818*cos(md)+.009531*cos(2*de-md)+.007843*cos(2*de)+ .002824*cos(2*md)+.000857*cos(2*de+md)+e*.000533*cos(2*de-ms)+ e*.000401*cos(2*de-md-ms)+e*.00032*cos(md-ms)-.000271*cos(de)- e*.000264*cos(ms+md)-.000198*cos(2*f-md); *hp = *hp+.000173*cos(3*md)+.000167*cos(4*de-md)-e*.000111*cos(ms)+ .000103*cos(4*de-2*md)-.000084*cos(2*md-2*de)- e*.000083*cos(2*de+ms)+.000079*cos(2*de+2*md)+.000072*cos(4*de)+ e*.000064*cos(2*de-ms+md)-e*.000063*cos(2*de+ms-md)+ e*.000041*cos(ms+de); *hp = *hp+e*.000035*cos(2*md-ms)-.000033*cos(3*md-2*de)- .00003*cos(md+de)-.000029*cos(2*(f-de))-e*.000029*cos(2*md+ms)+ e2*.000026*cos(2*(de-ms))-.000023*cos(2*(f-de)+md)+ e*.000019*cos(4*de-ms-md); *hp = degrad(*hp); *msp = ms; *mdp = md; } #define EarthRadius 6378.16 /* Kilometers */ /* moon() - front end rountine to get moon position; stern * * given the mjd, find the geocentric ecliptic longitude, lam, and latitude, * bet, and geocentric distance, rho in a.u. for the moon. also return * the sun's mean anomaly, *msp, and the moon's mean anomaly, *mdp. * * now uses Stephen Moshier's expansion and code. * * TODO: - clarify lunar aberration for apparent places * * still need to correct for nutation. then for topocentric location * further correct for parallax and refraction. * NB: Do NOT correct for aberration - the geocentric moon frame moves * along with the earth. */ void moon (mjd, lam, bet, rho, msp, mdp) double mjd; double *lam, *bet, *rho; double *msp, *mdp; { double pobj[3], dt; double hp; if (mjd >= MOSHIER_BEGIN && mjd <= MOSHIER_END) { /* retard for light time */ moon_fast (mjd, lam, bet, &hp, msp, mdp); *rho = EarthRadius/AUKM/sin(hp); dt = *rho * 5.7755183e-3; /* speed of light in a.u/day */ gecmoon(mjd + MJD0 - dt, &moonlr, &moonlat, pobj); *lam = pobj[0]; range (lam, 2*PI); *bet = pobj[1]; *rho = pobj[2]; *msp = STR * Args[11]; /* don't need range correction here */ *mdp = STR * Args[12]; } else { moon_fast (mjd, lam, bet, &hp, msp, mdp); *rho = EarthRadius/AUKM/sin(hp); } } /* For RCS Only -- Do Not Edit */ static char *rcsid[2] = {(char *)rcsid, "@(#) $RCSfile: moon.c,v $ $Date: 2000/10/07 05:12:17 $ $Revision: 1.2 $ $Name: $"};